From 705e71f1ebdf6825a375f3de96ee278921ecba9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 25 Jan 2026 20:13:04 +0100 Subject: [PATCH 001/172] Started working on a conrad provider --- .../Providers/ConradProvider.php | 103 ++++++++++++++++++ .../InfoProviderSystem/ConradSettings.php | 69 ++++++++++++ .../InfoProviderSettings.php | 5 +- 3 files changed, 176 insertions(+), 1 deletion(-) create mode 100644 src/Services/InfoProviderSystem/Providers/ConradProvider.php create mode 100644 src/Settings/InfoProviderSystem/ConradSettings.php diff --git a/src/Services/InfoProviderSystem/Providers/ConradProvider.php b/src/Services/InfoProviderSystem/Providers/ConradProvider.php new file mode 100644 index 00000000..b72be0bd --- /dev/null +++ b/src/Services/InfoProviderSystem/Providers/ConradProvider.php @@ -0,0 +1,103 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Services\InfoProviderSystem\Providers; + +use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; +use App\Services\InfoProviderSystem\DTOs\SearchResultDTO; +use App\Settings\InfoProviderSystem\ConradSettings; +use Symfony\Contracts\HttpClient\HttpClientInterface; + +readonly class ConradProvider implements InfoProviderInterface +{ + + private const SEARCH_ENDPOINT = 'https://api.conrad.de/search/1/v3/facetSearch'; + + public function __construct(private HttpClientInterface $httpClient, private ConradSettings $settings) + { + } + + public function getProviderInfo(): array + { + return [ + 'name' => 'Pollin', + 'description' => 'Retrieves part information from conrad.de', + 'url' => 'https://www.conrad.de/', + 'disabled_help' => 'Set API key in settings', + 'settings_class' => ConradSettings::class, + ]; + } + + public function getProviderKey(): string + { + return 'conrad'; + } + + public function isActive(): bool + { + return !empty($this->settings->apiKey); + } + + public function searchByKeyword(string $keyword): array + { + $url = self::SEARCH_ENDPOINT . '/' . $this->settings->country . '/' . $this->settings->language . '/' . $this->settings->customerType; + + $response = $this->httpClient->request('POST', $url, [ + 'query' => [ + 'apikey' => $this->settings->apiKey, + ], + 'json' => [ + 'query' => $keyword, + ], + ]); + + $out = []; + $results = $response->toArray(); + + foreach($results as $result) { + $out[] = new SearchResultDTO( + provider_key: $this->getProviderKey(), + provider_id: $result['productId'], + name: $result['title'], + description: '', + manufacturer: $result['brand']['name'] ?? null, + mpn: $result['manufacturerId'] ?? null, + preview_image_url: $result['image'] ?? null, + ); + } + + return $out; + } + + public function getDetails(string $id): PartDetailDTO + { + // TODO: Implement getDetails() method. + } + + public function getCapabilities(): array + { + return [ProviderCapabilities::BASIC, + ProviderCapabilities::PICTURE, + ProviderCapabilities::PRICE,]; + } +} diff --git a/src/Settings/InfoProviderSystem/ConradSettings.php b/src/Settings/InfoProviderSystem/ConradSettings.php new file mode 100644 index 00000000..2330e729 --- /dev/null +++ b/src/Settings/InfoProviderSystem/ConradSettings.php @@ -0,0 +1,69 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Settings\InfoProviderSystem; + +use App\Form\Type\APIKeyType; +use App\Settings\SettingsIcon; +use Jbtronics\SettingsBundle\Metadata\EnvVarMode; +use Jbtronics\SettingsBundle\Settings\Settings; +use Jbtronics\SettingsBundle\Settings\SettingsParameter; +use Jbtronics\SettingsBundle\Settings\SettingsTrait; +use Symfony\Component\Form\Extension\Core\Type\ChoiceType; +use Symfony\Component\Form\Extension\Core\Type\CountryType; +use Symfony\Component\Form\Extension\Core\Type\LanguageType; +use Symfony\Component\Translation\TranslatableMessage as TM; +use Symfony\Component\Validator\Constraints as Assert; + +#[Settings(label: new TM("settings.ips.conrad"))] +#[SettingsIcon("fa-plug")] +class ConradSettings +{ + use SettingsTrait; + + #[SettingsParameter(label: new TM("settings.ips.element14.apiKey"), + formType: APIKeyType::class, + formOptions: ["help_html" => true], envVar: "PROVIDER_CONRAD_API_KEY", envVarMode: EnvVarMode::OVERWRITE)] + public ?string $apiKey = null; + + #[SettingsParameter(label: new TM("settings.ips.tme.country"), formType: CountryType::class, + envVar: "PROVIDER_CONRAD_COUNTRY", envVarMode: EnvVarMode::OVERWRITE)] + #[Assert\Country] + public string $country = "DE"; + + #[SettingsParameter(label: new TM("settings.ips.tme.language"), formType: LanguageType::class, + envVar: "PROVIDER_CONRAD_LANGUAGE", envVarMode: EnvVarMode::OVERWRITE)] + #[Assert\Language] + public string $language = "en"; + + #[SettingsParameter(label: new TM("settings.ips.conrad.customerType"), formType: ChoiceType::class, + formOptions: [ + "choices" => [ + "settings.ips.conrad.customerType.b2c" => "b2c", + "settings.ips.conrad.customerType.b2b" => "b2b", + ], + ], + envVar: "PROVIDER_CONRAD_LANGUAGE", envVarMode: EnvVarMode::OVERWRITE, )] + #[Assert\Choice(choices: ["b2c", "b2b"])] + public string $customerType = "b2c"; +} diff --git a/src/Settings/InfoProviderSystem/InfoProviderSettings.php b/src/Settings/InfoProviderSystem/InfoProviderSettings.php index d4679e23..fb31bdb9 100644 --- a/src/Settings/InfoProviderSystem/InfoProviderSettings.php +++ b/src/Settings/InfoProviderSystem/InfoProviderSettings.php @@ -63,7 +63,10 @@ class InfoProviderSettings #[EmbeddedSettings] public ?PollinSettings $pollin = null; - + #[EmbeddedSettings] public ?BuerklinSettings $buerklin = null; + + #[EmbeddedSettings] + public ?ConradSettings $conrad = null; } From 7ab33c859bf2ea642d33ffd03c16954c2e13c4b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 26 Jan 2026 23:07:01 +0100 Subject: [PATCH 002/172] Implemented basic functionality to search and retrieve part details --- .../Providers/ConradProvider.php | 65 +++++++- .../InfoProviderSystem/ConradSettings.php | 26 +-- .../InfoProviderSystem/ConradShopIDs.php | 156 ++++++++++++++++++ 3 files changed, 223 insertions(+), 24 deletions(-) create mode 100644 src/Settings/InfoProviderSystem/ConradShopIDs.php diff --git a/src/Services/InfoProviderSystem/Providers/ConradProvider.php b/src/Services/InfoProviderSystem/Providers/ConradProvider.php index b72be0bd..7212444b 100644 --- a/src/Services/InfoProviderSystem/Providers/ConradProvider.php +++ b/src/Services/InfoProviderSystem/Providers/ConradProvider.php @@ -31,7 +31,7 @@ use Symfony\Contracts\HttpClient\HttpClientInterface; readonly class ConradProvider implements InfoProviderInterface { - private const SEARCH_ENDPOINT = 'https://api.conrad.de/search/1/v3/facetSearch'; + private const SEARCH_ENDPOINT = '/search/1/v3/facetSearch'; public function __construct(private HttpClientInterface $httpClient, private ConradSettings $settings) { @@ -40,7 +40,7 @@ readonly class ConradProvider implements InfoProviderInterface public function getProviderInfo(): array { return [ - 'name' => 'Pollin', + 'name' => 'Conrad', 'description' => 'Retrieves part information from conrad.de', 'url' => 'https://www.conrad.de/', 'disabled_help' => 'Set API key in settings', @@ -58,9 +58,38 @@ readonly class ConradProvider implements InfoProviderInterface return !empty($this->settings->apiKey); } + private function getProductUrl(string $productId): string + { + return 'https://' . $this->settings->shopID->getDomain() . '/' . $this->settings->shopID->getLanguage() . '/p/' . $productId; + } + + private function getFootprintFromTechnicalDetails(array $technicalDetails): ?string + { + foreach ($technicalDetails as $detail) { + if ($detail['name'] === 'ATT_LOV_HOUSING_SEMICONDUCTORS') { + return $detail['values'][0] ?? null; + } + } + + return null; + } + + private function getFootprintFromTechnicalAttributes(array $technicalDetails): ?string + { + foreach ($technicalDetails as $detail) { + if ($detail['attributeID'] === 'ATT.LOV.HOUSING_SEMICONDUCTORS') { + return $detail['values'][0]['value'] ?? null; + } + } + + return null; + } + public function searchByKeyword(string $keyword): array { - $url = self::SEARCH_ENDPOINT . '/' . $this->settings->country . '/' . $this->settings->language . '/' . $this->settings->customerType; + $url = $this->settings->shopID->getAPIRoot() . self::SEARCH_ENDPOINT . '/' + . $this->settings->shopID->getDomainEnd() . '/' . $this->settings->shopID->getLanguage() + . '/' . $this->settings->shopID->getCustomerType(); $response = $this->httpClient->request('POST', $url, [ 'query' => [ @@ -68,13 +97,15 @@ readonly class ConradProvider implements InfoProviderInterface ], 'json' => [ 'query' => $keyword, + 'size' => 25, ], ]); $out = []; $results = $response->toArray(); - foreach($results as $result) { + foreach($results['hits'] as $result) { + $out[] = new SearchResultDTO( provider_key: $this->getProviderKey(), provider_id: $result['productId'], @@ -83,6 +114,8 @@ readonly class ConradProvider implements InfoProviderInterface manufacturer: $result['brand']['name'] ?? null, mpn: $result['manufacturerId'] ?? null, preview_image_url: $result['image'] ?? null, + provider_url: $this->getProductUrl($result['productId']), + footprint: $this->getFootprintFromTechnicalDetails($result['technicalDetails'] ?? []), ); } @@ -91,7 +124,29 @@ readonly class ConradProvider implements InfoProviderInterface public function getDetails(string $id): PartDetailDTO { - // TODO: Implement getDetails() method. + $productInfoURL = $this->settings->shopID->getAPIRoot() . '/product/1/service/' . $this->settings->shopID->getShopID() + . '/product/' . $id; + + $response = $this->httpClient->request('GET', $productInfoURL, [ + 'query' => [ + 'apikey' => $this->settings->apiKey, + ] + ]); + + $data = $response->toArray(); + + return new PartDetailDTO( + provider_key: $this->getProviderKey(), + provider_id: $data['shortProductNumber'], + name: $data['productShortInformation']['title'], + description: $data['productShortInformation']['shortDescription'] ?? '', + manufacturer: $data['brand']['displayName'] ?? null, + mpn: $data['productFullInformation']['manufacturer']['id'] ?? null, + preview_image_url: $data['productShortInformation']['mainImage']['imageUrl'] ?? null, + provider_url: $this->getProductUrl($data['shortProductNumber']), + footprint: $this->getFootprintFromTechnicalAttributes($data['productFullInformation']['technicalAttributes'] ?? []), + notes: $data['productFullInformation']['description'] ?? null, + ); } public function getCapabilities(): array diff --git a/src/Settings/InfoProviderSystem/ConradSettings.php b/src/Settings/InfoProviderSystem/ConradSettings.php index 2330e729..999ebfe0 100644 --- a/src/Settings/InfoProviderSystem/ConradSettings.php +++ b/src/Settings/InfoProviderSystem/ConradSettings.php @@ -31,6 +31,7 @@ use Jbtronics\SettingsBundle\Settings\SettingsParameter; use Jbtronics\SettingsBundle\Settings\SettingsTrait; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\CountryType; +use Symfony\Component\Form\Extension\Core\Type\EnumType; use Symfony\Component\Form\Extension\Core\Type\LanguageType; use Symfony\Component\Translation\TranslatableMessage as TM; use Symfony\Component\Validator\Constraints as Assert; @@ -46,24 +47,11 @@ class ConradSettings formOptions: ["help_html" => true], envVar: "PROVIDER_CONRAD_API_KEY", envVarMode: EnvVarMode::OVERWRITE)] public ?string $apiKey = null; - #[SettingsParameter(label: new TM("settings.ips.tme.country"), formType: CountryType::class, - envVar: "PROVIDER_CONRAD_COUNTRY", envVarMode: EnvVarMode::OVERWRITE)] - #[Assert\Country] - public string $country = "DE"; + #[SettingsParameter(label: new TM("settings.ips.conrad.shopID"), + formType: EnumType::class, + formOptions: ['class' => ConradShopIDs::class], + )] + public ConradShopIDs $shopID = ConradShopIDs::COM_B2B; - #[SettingsParameter(label: new TM("settings.ips.tme.language"), formType: LanguageType::class, - envVar: "PROVIDER_CONRAD_LANGUAGE", envVarMode: EnvVarMode::OVERWRITE)] - #[Assert\Language] - public string $language = "en"; - - #[SettingsParameter(label: new TM("settings.ips.conrad.customerType"), formType: ChoiceType::class, - formOptions: [ - "choices" => [ - "settings.ips.conrad.customerType.b2c" => "b2c", - "settings.ips.conrad.customerType.b2b" => "b2b", - ], - ], - envVar: "PROVIDER_CONRAD_LANGUAGE", envVarMode: EnvVarMode::OVERWRITE, )] - #[Assert\Choice(choices: ["b2c", "b2b"])] - public string $customerType = "b2c"; + public bool $includeVAT = true; } diff --git a/src/Settings/InfoProviderSystem/ConradShopIDs.php b/src/Settings/InfoProviderSystem/ConradShopIDs.php new file mode 100644 index 00000000..2d8710e7 --- /dev/null +++ b/src/Settings/InfoProviderSystem/ConradShopIDs.php @@ -0,0 +1,156 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Settings\InfoProviderSystem; + +use Symfony\Contracts\Translation\TranslatableInterface; +use Symfony\Contracts\Translation\TranslatorInterface; + +enum ConradShopIDs: string implements TranslatableInterface +{ + case COM_B2B = 'HP_COM_B2B'; + case DE_B2B = 'CQ_DE_B2B'; + case AT_B2C = 'CQ_AT_B2C'; + case CH_B2C = 'CQ_CH_B2C'; + case SE_B2B = 'HP_SE_B2B'; + case HU_B2C = 'CQ_HU_B2C'; + case CZ_B2B = 'HP_CZ_B2B'; + case SI_B2B = 'HP_SI_B2B'; + case SK_B2B = 'HP_SK_B2B'; + case BE_B2B = 'HP_BE_B2B'; + case DE_B2C = 'CQ_DE_B2C'; + case PL_B2B = 'HP_PL_B2B'; + case NL_B2B = 'CQ_NL_B2B'; + case DK_B2B = 'HP_DK_B2B'; + case IT_B2B = 'HP_IT_B2B'; + case NL_B2C = 'CQ_NL_B2C'; + case FR_B2B = 'HP_FR_B2B'; + case AT_B2B = 'CQ_AT_B2B'; + case HR_B2B = 'HP_HR_B2B'; + + + public function trans(TranslatorInterface $translator, ?string $locale = null): string + { + return match ($this) { + self::DE_B2B => "conrad.de (B2B)", + self::AT_B2C => "conrad.at (B2C)", + self::CH_B2C => "conrad.ch (B2C)", + self::SE_B2B => "conrad.se (B2B)", + self::HU_B2C => "conrad.hu (B2C)", + self::CZ_B2B => "conrad.cz (B2B)", + self::SI_B2B => "conrad.si (B2B)", + self::SK_B2B => "conrad.sk (B2B)", + self::BE_B2B => "conrad.be (B2B)", + self::DE_B2C => "conrad.de (B2C)", + self::PL_B2B => "conrad.pl (B2B)", + self::NL_B2B => "conrad.nl (B2B)", + self::DK_B2B => "conrad.dk (B2B)", + self::IT_B2B => "conrad.it (B2B)", + self::NL_B2C => "conrad.nl (B2C)", + self::FR_B2B => "conrad.fr (B2B)", + self::COM_B2B => "conrad.com (B2B)", + self::AT_B2B => "conrad.at (B2B)", + self::HR_B2B => "conrad.hr (B2B)", + }; + } + + public function getDomain(): string + { + return 'conrad.' . $this->getDomainEnd(); + } + + /** + * Retrieves the API root URL for this shop ID. e.g. https://api.conrad.de + * @return string + */ + public function getAPIRoot(): string + { + return 'https://api.' . $this->getDomain(); + } + + /** + * Returns the shop ID value used in the API requests. e.g. 'CQ_DE_B2B' + * @return string + */ + public function getShopID(): string + { + return $this->value; + } + + public function getDomainEnd(): string + { + return match ($this) { + self::DE_B2B, self::DE_B2C => 'de', + self::AT_B2B, self::AT_B2C => 'at', + self::CH_B2C => 'ch', + self::SE_B2B => 'se', + self::HU_B2C => 'hu', + self::CZ_B2B => 'cz', + self::SI_B2B => 'si', + self::SK_B2B => 'sk', + self::BE_B2B => 'be', + self::PL_B2B => 'pl', + self::NL_B2B, self::NL_B2C => 'nl', + self::DK_B2B => 'dk', + self::IT_B2B => 'it', + self::FR_B2B => 'fr', + self::COM_B2B => 'com', + self::HR_B2B => 'hr', + }; + } + + public function getLanguage(): string + { + return match ($this) { + self::DE_B2B, self::DE_B2C, self::AT_B2B, self::AT_B2C => 'de', + self::CH_B2C => 'de', + self::SE_B2B => 'sv', + self::HU_B2C => 'hu', + self::CZ_B2B => 'cs', + self::SI_B2B => 'sl', + self::SK_B2B => 'sk', + self::BE_B2B => 'nl', + self::PL_B2B => 'pl', + self::NL_B2B, self::NL_B2C => 'nl', + self::DK_B2B => 'da', + self::IT_B2B => 'it', + self::FR_B2B => 'fr', + self::COM_B2B => 'en', + self::HR_B2B => 'hr', + }; + } + + /** + * Retrieves the customer type for this shop ID. e.g. 'b2b' or 'b2c' + * @return string 'b2b' or 'b2c' + */ + public function getCustomerType(): string + { + return match ($this) { + self::DE_B2B, self::AT_B2B, self::SE_B2B, self::CZ_B2B, self::SI_B2B, + self::SK_B2B, self::BE_B2B, self::PL_B2B, self::NL_B2B, self::DK_B2B, + self::IT_B2B, self::FR_B2B, self::COM_B2B, self::HR_B2B => 'b2b', + self::DE_B2C, self::AT_B2C, self::CH_B2C, self::HU_B2C, self::NL_B2C => 'b2c', + }; + } +} From 3ed62f5cee80ca4dbfa935b27caff50b9af0af1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 26 Jan 2026 23:18:32 +0100 Subject: [PATCH 003/172] Allow to retrieve parameters from conrad --- .../Providers/ConradProvider.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/Services/InfoProviderSystem/Providers/ConradProvider.php b/src/Services/InfoProviderSystem/Providers/ConradProvider.php index 7212444b..8c343099 100644 --- a/src/Services/InfoProviderSystem/Providers/ConradProvider.php +++ b/src/Services/InfoProviderSystem/Providers/ConradProvider.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace App\Services\InfoProviderSystem\Providers; +use App\Services\InfoProviderSystem\DTOs\ParameterDTO; use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; use App\Services\InfoProviderSystem\DTOs\SearchResultDTO; use App\Settings\InfoProviderSystem\ConradSettings; @@ -85,6 +86,20 @@ readonly class ConradProvider implements InfoProviderInterface return null; } + private function technicalAttributesToParameters(array $technicalAttributes): array + { + $parameters = []; + foreach ($technicalAttributes as $attribute) { + if ($attribute['multiValue'] ?? false === true) { + throw new \LogicException('Multi value attributes are not supported yet'); + } + $parameters[] = ParameterDTO::parseValueField($attribute['attributeName'], + $attribute['values'][0]['value'], $attribute['values'][0]['unit']['name'] ?? null); + } + + return $parameters; + } + public function searchByKeyword(string $keyword): array { $url = $this->settings->shopID->getAPIRoot() . self::SEARCH_ENDPOINT . '/' @@ -146,6 +161,7 @@ readonly class ConradProvider implements InfoProviderInterface provider_url: $this->getProductUrl($data['shortProductNumber']), footprint: $this->getFootprintFromTechnicalAttributes($data['productFullInformation']['technicalAttributes'] ?? []), notes: $data['productFullInformation']['description'] ?? null, + parameters: $this->technicalAttributesToParameters($data['productFullInformation']['technicalAttributes'] ?? []), ); } From 42fe781ef884b627a498a57f633130fb10ac9dfd Mon Sep 17 00:00:00 2001 From: Sebastian Almberg <83243306+Sebbeben@users.noreply.github.com> Date: Fri, 30 Jan 2026 21:36:33 +0100 Subject: [PATCH 004/172] Add Update Manager for automated Part-DB updates 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 --- config/permissions.yaml | 4 + src/Command/UpdateCommand.php | 446 ++++++++++ src/Controller/UpdateManagerController.php | 268 ++++++ .../MaintenanceModeSubscriber.php | 231 +++++ .../System/InstallationTypeDetector.php | 224 +++++ src/Services/System/UpdateChecker.php | 349 ++++++++ src/Services/System/UpdateExecutor.php | 832 ++++++++++++++++++ src/Services/Trees/ToolsTreeBuilder.php | 7 + src/Twig/UpdateExtension.php | 79 ++ templates/_navbar.html.twig | 13 + .../admin/update_manager/index.html.twig | 374 ++++++++ .../admin/update_manager/log_viewer.html.twig | 40 + .../admin/update_manager/progress.html.twig | 196 +++++ .../update_manager/release_notes.html.twig | 110 +++ templates/maintenance/maintenance.html.twig | 251 ++++++ translations/messages.en.xlf | 702 +++++++++++++++ 16 files changed, 4126 insertions(+) create mode 100644 src/Command/UpdateCommand.php create mode 100644 src/Controller/UpdateManagerController.php create mode 100644 src/EventSubscriber/MaintenanceModeSubscriber.php create mode 100644 src/Services/System/InstallationTypeDetector.php create mode 100644 src/Services/System/UpdateChecker.php create mode 100644 src/Services/System/UpdateExecutor.php create mode 100644 src/Twig/UpdateExtension.php create mode 100644 templates/admin/update_manager/index.html.twig create mode 100644 templates/admin/update_manager/log_viewer.html.twig create mode 100644 templates/admin/update_manager/progress.html.twig create mode 100644 templates/admin/update_manager/release_notes.html.twig create mode 100644 templates/maintenance/maintenance.html.twig diff --git a/config/permissions.yaml b/config/permissions.yaml index 8c6a145e..0dabf9d3 100644 --- a/config/permissions.yaml +++ b/config/permissions.yaml @@ -297,6 +297,10 @@ perms: # Here comes a list with all Permission names (they have a perm_[name] co show_updates: label: "perm.system.show_available_updates" apiTokenRole: ROLE_API_ADMIN + manage_updates: + label: "perm.system.manage_updates" + alsoSet: ['show_updates', 'server_infos'] + apiTokenRole: ROLE_API_ADMIN attachments: diff --git a/src/Command/UpdateCommand.php b/src/Command/UpdateCommand.php new file mode 100644 index 00000000..4f2cae86 --- /dev/null +++ b/src/Command/UpdateCommand.php @@ -0,0 +1,446 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Command; + +use App\Services\System\InstallationType; +use App\Services\System\UpdateChecker; +use App\Services\System\UpdateExecutor; +use Symfony\Component\Console\Attribute\AsCommand; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Helper\Table; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Style\SymfonyStyle; + +#[AsCommand(name: 'partdb:update', description: 'Check for and install Part-DB updates', aliases: ['app:update'])] +class UpdateCommand extends Command +{ + public function __construct(private readonly UpdateChecker $updateChecker, + private readonly UpdateExecutor $updateExecutor) + { + parent::__construct(); + } + + protected function configure(): void + { + $this + ->setHelp(<<<'HELP' +The %command.name% command checks for Part-DB updates and can install them. + +Check for updates: + php %command.full_name% --check + +List available versions: + php %command.full_name% --list + +Update to the latest version: + php %command.full_name% + +Update to a specific version: + php %command.full_name% v2.6.0 + +Update without creating a backup (faster but riskier): + php %command.full_name% --no-backup + +Non-interactive update for scripts: + php %command.full_name% --force + +View update logs: + php %command.full_name% --logs +HELP + ) + ->addArgument( + 'version', + InputArgument::OPTIONAL, + 'Target version to update to (e.g., v2.6.0). If not specified, updates to the latest stable version.' + ) + ->addOption( + 'check', + 'c', + InputOption::VALUE_NONE, + 'Only check for updates without installing' + ) + ->addOption( + 'list', + 'l', + InputOption::VALUE_NONE, + 'List all available versions' + ) + ->addOption( + 'no-backup', + null, + InputOption::VALUE_NONE, + 'Skip creating a backup before updating (not recommended)' + ) + ->addOption( + 'force', + 'f', + InputOption::VALUE_NONE, + 'Skip confirmation prompts' + ) + ->addOption( + 'include-prerelease', + null, + InputOption::VALUE_NONE, + 'Include pre-release versions' + ) + ->addOption( + 'logs', + null, + InputOption::VALUE_NONE, + 'Show recent update logs' + ) + ->addOption( + 'refresh', + 'r', + InputOption::VALUE_NONE, + 'Force refresh of cached version information' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $io = new SymfonyStyle($input, $output); + + // Handle --logs option + if ($input->getOption('logs')) { + return $this->showLogs($io); + } + + // Handle --refresh option + if ($input->getOption('refresh')) { + $io->text('Refreshing version information...'); + $this->updateChecker->refreshGitInfo(); + $io->success('Version cache cleared.'); + } + + // Handle --list option + if ($input->getOption('list')) { + return $this->listVersions($io, $input->getOption('include-prerelease')); + } + + // Get update status + $status = $this->updateChecker->getUpdateStatus(); + + // Display current status + $io->title('Part-DB Update Manager'); + + $this->displayStatus($io, $status); + + // Handle --check option + if ($input->getOption('check')) { + return $this->checkOnly($io, $status); + } + + // Validate we can update + $validationResult = $this->validateUpdate($io, $status); + if ($validationResult !== null) { + return $validationResult; + } + + // Determine target version + $targetVersion = $input->getArgument('version'); + $includePrerelease = $input->getOption('include-prerelease'); + + if (!$targetVersion) { + $latest = $this->updateChecker->getLatestRelease($includePrerelease); + if (!$latest) { + $io->error('Could not determine the latest version. Please specify a version manually.'); + return Command::FAILURE; + } + $targetVersion = $latest['tag']; + } + + // Validate target version + if (!$this->updateChecker->isNewerVersion($targetVersion)) { + $io->warning(sprintf( + 'Version %s is not newer than the current version %s.', + $targetVersion, + $status['current_version'] + )); + + if (!$input->getOption('force')) { + if (!$io->confirm('Do you want to proceed anyway?', false)) { + $io->info('Update cancelled.'); + return Command::SUCCESS; + } + } + } + + // Confirm update + if (!$input->getOption('force')) { + $io->section('Update Plan'); + + $io->listing([ + sprintf('Target version: %s', $targetVersion), + $input->getOption('no-backup') + ? 'Backup will be SKIPPED' + : 'A full backup will be created before updating', + 'Maintenance mode will be enabled during update', + 'Database migrations will be run automatically', + 'Cache will be cleared and rebuilt', + ]); + + $io->warning('The update process may take several minutes. Do not interrupt it.'); + + if (!$io->confirm('Do you want to proceed with the update?', false)) { + $io->info('Update cancelled.'); + return Command::SUCCESS; + } + } + + // Execute update + return $this->executeUpdate($io, $targetVersion, !$input->getOption('no-backup')); + } + + private function displayStatus(SymfonyStyle $io, array $status): void + { + $io->definitionList( + ['Current Version' => sprintf('%s', $status['current_version'])], + ['Latest Version' => $status['latest_version'] + ? sprintf('%s', $status['latest_version']) + : 'Unknown'], + ['Installation Type' => $status['installation']['type_name']], + ['Git Branch' => $status['git']['branch'] ?? 'N/A'], + ['Git Commit' => $status['git']['commit'] ?? 'N/A'], + ['Local Changes' => $status['git']['has_local_changes'] + ? 'Yes (update blocked)' + : 'No'], + ['Commits Behind' => $status['git']['commits_behind'] > 0 + ? sprintf('%d', $status['git']['commits_behind']) + : '0'], + ['Update Available' => $status['update_available'] + ? 'Yes' + : 'No'], + ['Can Auto-Update' => $status['can_auto_update'] + ? 'Yes' + : 'No'], + ); + + if (!empty($status['update_blockers'])) { + $io->warning('Update blockers: ' . implode(', ', $status['update_blockers'])); + } + } + + private function checkOnly(SymfonyStyle $io, array $status): int + { + if (!$status['check_enabled']) { + $io->warning('Update checking is disabled in privacy settings.'); + return Command::SUCCESS; + } + + if ($status['update_available']) { + $io->success(sprintf( + 'A new version is available: %s (current: %s)', + $status['latest_version'], + $status['current_version'] + )); + + if ($status['release_url']) { + $io->text(sprintf('Release notes: %s', $status['release_url'], $status['release_url'])); + } + + if ($status['can_auto_update']) { + $io->text(''); + $io->text('Run php bin/console partdb:update to update.'); + } else { + $io->text(''); + $io->text($status['installation']['update_instructions']); + } + + return Command::SUCCESS; + } + + $io->success('You are running the latest version.'); + return Command::SUCCESS; + } + + private function validateUpdate(SymfonyStyle $io, array $status): ?int + { + // Check if update checking is enabled + if (!$status['check_enabled']) { + $io->error('Update checking is disabled in privacy settings. Enable it to use automatic updates.'); + return Command::FAILURE; + } + + // Check installation type + if (!$status['can_auto_update']) { + $io->error('Automatic updates are not supported for this installation type.'); + $io->text($status['installation']['update_instructions']); + return Command::FAILURE; + } + + // Validate preconditions + $validation = $this->updateExecutor->validateUpdatePreconditions(); + if (!$validation['valid']) { + $io->error('Cannot proceed with update:'); + $io->listing($validation['errors']); + return Command::FAILURE; + } + + return null; + } + + private function executeUpdate(SymfonyStyle $io, string $targetVersion, bool $createBackup): int + { + $io->section('Executing Update'); + $io->text(sprintf('Updating to version: %s', $targetVersion)); + $io->text(''); + + $progressCallback = function (array $step) use ($io): void { + $icon = $step['success'] ? '✓' : '✗'; + $duration = $step['duration'] ? sprintf(' (%.1fs)', $step['duration']) : ''; + $io->text(sprintf(' %s %s: %s%s', $icon, $step['step'], $step['message'], $duration)); + }; + + // Use executeUpdateWithProgress to update the progress file for web UI + $result = $this->updateExecutor->executeUpdateWithProgress($targetVersion, $createBackup, $progressCallback); + + $io->text(''); + + if ($result['success']) { + $io->success(sprintf( + 'Successfully updated to %s in %.1f seconds!', + $targetVersion, + $result['duration'] + )); + + $io->text([ + sprintf('Rollback tag: %s', $result['rollback_tag']), + sprintf('Log file: %s', $result['log_file']), + ]); + + $io->note('If you encounter any issues, you can rollback using: git checkout ' . $result['rollback_tag']); + + return Command::SUCCESS; + } + + $io->error('Update failed: ' . $result['error']); + + if ($result['rollback_tag']) { + $io->warning(sprintf('System was rolled back to: %s', $result['rollback_tag'])); + } + + if ($result['log_file']) { + $io->text(sprintf('See log file for details: %s', $result['log_file'])); + } + + return Command::FAILURE; + } + + private function listVersions(SymfonyStyle $io, bool $includePrerelease): int + { + $releases = $this->updateChecker->getAvailableReleases(15); + $currentVersion = $this->updateChecker->getCurrentVersionString(); + + if (empty($releases)) { + $io->warning('Could not fetch available versions. Check your internet connection.'); + return Command::FAILURE; + } + + $io->title('Available Part-DB Versions'); + + $table = new Table($io); + $table->setHeaders(['Tag', 'Version', 'Released', 'Status']); + + foreach ($releases as $release) { + if (!$includePrerelease && $release['prerelease']) { + continue; + } + + $version = $release['version']; + $status = []; + + if (version_compare($version, $currentVersion, '=')) { + $status[] = 'current'; + } elseif (version_compare($version, $currentVersion, '>')) { + $status[] = 'newer'; + } + + if ($release['prerelease']) { + $status[] = 'pre-release'; + } + + $table->addRow([ + $release['tag'], + $version, + (new \DateTime($release['published_at']))->format('Y-m-d'), + implode(' ', $status) ?: '-', + ]); + } + + $table->render(); + + $io->text(''); + $io->text('Use php bin/console partdb:update [tag] to update to a specific version.'); + + return Command::SUCCESS; + } + + private function showLogs(SymfonyStyle $io): int + { + $logs = $this->updateExecutor->getUpdateLogs(); + + if (empty($logs)) { + $io->info('No update logs found.'); + return Command::SUCCESS; + } + + $io->title('Recent Update Logs'); + + $table = new Table($io); + $table->setHeaders(['Date', 'File', 'Size']); + + foreach (array_slice($logs, 0, 10) as $log) { + $table->addRow([ + date('Y-m-d H:i:s', $log['date']), + $log['file'], + $this->formatBytes($log['size']), + ]); + } + + $table->render(); + + $io->text(''); + $io->text('Log files are stored in: var/log/updates/'); + + return Command::SUCCESS; + } + + private function formatBytes(int $bytes): string + { + $units = ['B', 'KB', 'MB', 'GB']; + $unitIndex = 0; + + while ($bytes >= 1024 && $unitIndex < count($units) - 1) { + $bytes /= 1024; + $unitIndex++; + } + + return sprintf('%.1f %s', $bytes, $units[$unitIndex]); + } +} diff --git a/src/Controller/UpdateManagerController.php b/src/Controller/UpdateManagerController.php new file mode 100644 index 00000000..10a719de --- /dev/null +++ b/src/Controller/UpdateManagerController.php @@ -0,0 +1,268 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Controller; + +use App\Services\System\UpdateChecker; +use App\Services\System\UpdateExecutor; +use Shivas\VersioningBundle\Service\VersionManagerInterface; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\JsonResponse; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Routing\Attribute\Route; + +/** + * Controller for the Update Manager web interface. + * + * This provides a read-only view of update status and instructions. + * Actual updates should be performed via the CLI command for safety. + */ +#[Route('/admin/update-manager')] +class UpdateManagerController extends AbstractController +{ + public function __construct(private readonly UpdateChecker $updateChecker, + private readonly UpdateExecutor $updateExecutor, + private readonly VersionManagerInterface $versionManager) + { + + } + + /** + * Main update manager page. + */ + #[Route('', name: 'admin_update_manager', methods: ['GET'])] + public function index(): Response + { + $this->denyAccessUnlessGranted('@system.show_updates'); + + $status = $this->updateChecker->getUpdateStatus(); + $availableUpdates = $this->updateChecker->getAvailableUpdates(); + $validation = $this->updateExecutor->validateUpdatePreconditions(); + + return $this->render('admin/update_manager/index.html.twig', [ + 'status' => $status, + 'available_updates' => $availableUpdates, + 'all_releases' => $this->updateChecker->getAvailableReleases(10), + 'validation' => $validation, + 'is_locked' => $this->updateExecutor->isLocked(), + 'lock_info' => $this->updateExecutor->getLockInfo(), + 'is_maintenance' => $this->updateExecutor->isMaintenanceMode(), + 'maintenance_info' => $this->updateExecutor->getMaintenanceInfo(), + 'update_logs' => $this->updateExecutor->getUpdateLogs(), + 'backups' => $this->updateExecutor->getBackups(), + ]); + } + + /** + * AJAX endpoint to check update status. + */ + #[Route('/status', name: 'admin_update_manager_status', methods: ['GET'])] + public function status(): JsonResponse + { + $this->denyAccessUnlessGranted('@system.show_updates'); + + return $this->json([ + 'status' => $this->updateChecker->getUpdateStatus(), + 'is_locked' => $this->updateExecutor->isLocked(), + 'is_maintenance' => $this->updateExecutor->isMaintenanceMode(), + 'lock_info' => $this->updateExecutor->getLockInfo(), + ]); + } + + /** + * AJAX endpoint to refresh version information. + */ + #[Route('/refresh', name: 'admin_update_manager_refresh', methods: ['POST'])] + public function refresh(Request $request): JsonResponse + { + $this->denyAccessUnlessGranted('@system.show_updates'); + + // Validate CSRF token + if (!$this->isCsrfTokenValid('update_manager_refresh', $request->request->get('_token'))) { + return $this->json(['error' => 'Invalid CSRF token'], Response::HTTP_FORBIDDEN); + } + + $this->updateChecker->refreshGitInfo(); + + return $this->json([ + 'success' => true, + 'status' => $this->updateChecker->getUpdateStatus(), + ]); + } + + /** + * View release notes for a specific version. + */ + #[Route('/release/{tag}', name: 'admin_update_manager_release', methods: ['GET'])] + public function releaseNotes(string $tag): Response + { + $this->denyAccessUnlessGranted('@system.show_updates'); + + $releases = $this->updateChecker->getAvailableReleases(20); + $release = null; + + foreach ($releases as $r) { + if ($r['tag'] === $tag) { + $release = $r; + break; + } + } + + if (!$release) { + throw $this->createNotFoundException('Release not found'); + } + + return $this->render('admin/update_manager/release_notes.html.twig', [ + 'release' => $release, + 'current_version' => $this->updateChecker->getCurrentVersionString(), + ]); + } + + /** + * View an update log file. + */ + #[Route('/log/{filename}', name: 'admin_update_manager_log', methods: ['GET'])] + public function viewLog(string $filename): Response + { + $this->denyAccessUnlessGranted('@system.show_updates'); + + // Security: Only allow viewing files from the update logs directory + $logs = $this->updateExecutor->getUpdateLogs(); + $logPath = null; + + foreach ($logs as $log) { + if ($log['file'] === $filename) { + $logPath = $log['path']; + break; + } + } + + if (!$logPath || !file_exists($logPath)) { + throw $this->createNotFoundException('Log file not found'); + } + + $content = file_get_contents($logPath); + + return $this->render('admin/update_manager/log_viewer.html.twig', [ + 'filename' => $filename, + 'content' => $content, + ]); + } + + /** + * Start an update process. + */ + #[Route('/start', name: 'admin_update_manager_start', methods: ['POST'])] + public function startUpdate(Request $request): Response + { + $this->denyAccessUnlessGranted('@system.manage_updates'); + + // Validate CSRF token + if (!$this->isCsrfTokenValid('update_manager_start', $request->request->get('_token'))) { + $this->addFlash('error', 'Invalid CSRF token'); + return $this->redirectToRoute('admin_update_manager'); + } + + // Check if update is already running + if ($this->updateExecutor->isLocked() || $this->updateExecutor->isUpdateRunning()) { + $this->addFlash('error', 'An update is already in progress.'); + return $this->redirectToRoute('admin_update_manager'); + } + + $targetVersion = $request->request->get('version'); + $createBackup = $request->request->getBoolean('backup', true); + + if (!$targetVersion) { + // Get latest version if not specified + $latest = $this->updateChecker->getLatestRelease(); + if (!$latest) { + $this->addFlash('error', 'Could not determine target version.'); + return $this->redirectToRoute('admin_update_manager'); + } + $targetVersion = $latest['tag']; + } + + // Validate preconditions + $validation = $this->updateExecutor->validateUpdatePreconditions(); + if (!$validation['valid']) { + $this->addFlash('error', implode(' ', $validation['errors'])); + return $this->redirectToRoute('admin_update_manager'); + } + + // Start the background update + $pid = $this->updateExecutor->startBackgroundUpdate($targetVersion, $createBackup); + + if (!$pid) { + $this->addFlash('error', 'Failed to start update process.'); + return $this->redirectToRoute('admin_update_manager'); + } + + // Redirect to progress page + return $this->redirectToRoute('admin_update_manager_progress'); + } + + /** + * Update progress page. + */ + #[Route('/progress', name: 'admin_update_manager_progress', methods: ['GET'])] + public function progress(): Response + { + $this->denyAccessUnlessGranted('@system.show_updates'); + + $progress = $this->updateExecutor->getProgress(); + $currentVersion = $this->versionManager->getVersion()->toString(); + + // Determine if this is a downgrade + $isDowngrade = false; + if ($progress && isset($progress['target_version'])) { + $targetVersion = ltrim($progress['target_version'], 'v'); + $isDowngrade = version_compare($targetVersion, $currentVersion, '<'); + } + + return $this->render('admin/update_manager/progress.html.twig', [ + 'progress' => $progress, + 'is_locked' => $this->updateExecutor->isLocked(), + 'is_maintenance' => $this->updateExecutor->isMaintenanceMode(), + 'is_downgrade' => $isDowngrade, + 'current_version' => $currentVersion, + ]); + } + + /** + * AJAX endpoint to get update progress. + */ + #[Route('/progress/status', name: 'admin_update_manager_progress_status', methods: ['GET'])] + public function progressStatus(): JsonResponse + { + $this->denyAccessUnlessGranted('@system.show_updates'); + + $progress = $this->updateExecutor->getProgress(); + + return $this->json([ + 'progress' => $progress, + 'is_locked' => $this->updateExecutor->isLocked(), + 'is_maintenance' => $this->updateExecutor->isMaintenanceMode(), + ]); + } +} diff --git a/src/EventSubscriber/MaintenanceModeSubscriber.php b/src/EventSubscriber/MaintenanceModeSubscriber.php new file mode 100644 index 00000000..60623b45 --- /dev/null +++ b/src/EventSubscriber/MaintenanceModeSubscriber.php @@ -0,0 +1,231 @@ +. + */ + +declare(strict_types=1); + + +namespace App\EventSubscriber; + +use App\Services\System\UpdateExecutor; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Event\RequestEvent; +use Symfony\Component\HttpKernel\KernelEvents; +use Twig\Environment; + +/** + * Blocks all web requests when maintenance mode is enabled during updates. + */ +class MaintenanceModeSubscriber implements EventSubscriberInterface +{ + public function __construct(private readonly UpdateExecutor $updateExecutor, + private readonly Environment $twig) + { + + } + + public static function getSubscribedEvents(): array + { + return [ + // High priority to run before other listeners + KernelEvents::REQUEST => ['onKernelRequest', 512], + ]; + } + + public function onKernelRequest(RequestEvent $event): void + { + // Only handle main requests + if (!$event->isMainRequest()) { + return; + } + + // Skip if not in maintenance mode + if (!$this->updateExecutor->isMaintenanceMode()) { + return; + } + + // Allow CLI requests + if (php_sapi_name() === 'cli') { + return; + } + + // Get maintenance info + $maintenanceInfo = $this->updateExecutor->getMaintenanceInfo(); + $lockInfo = $this->updateExecutor->getLockInfo(); + + // Calculate how long the update has been running + $duration = null; + if ($lockInfo && isset($lockInfo['started_at'])) { + try { + $startedAt = new \DateTime($lockInfo['started_at']); + $now = new \DateTime(); + $duration = $now->getTimestamp() - $startedAt->getTimestamp(); + } catch (\Exception) { + // Ignore date parsing errors + } + } + + // Try to render the Twig template, fall back to simple HTML + try { + $content = $this->twig->render('maintenance/maintenance.html.twig', [ + 'reason' => $maintenanceInfo['reason'] ?? 'Maintenance in progress', + 'started_at' => $maintenanceInfo['enabled_at'] ?? null, + 'duration' => $duration, + ]); + } catch (\Exception) { + // Fallback to simple HTML if Twig fails + $content = $this->getSimpleMaintenanceHtml($maintenanceInfo, $duration); + } + + $response = new Response($content, Response::HTTP_SERVICE_UNAVAILABLE); + $response->headers->set('Retry-After', '30'); + $response->headers->set('Cache-Control', 'no-store, no-cache, must-revalidate'); + + $event->setResponse($response); + } + + /** + * Generate a simple maintenance page HTML without Twig. + */ + private function getSimpleMaintenanceHtml(?array $maintenanceInfo, ?int $duration): string + { + $reason = htmlspecialchars($maintenanceInfo['reason'] ?? 'Update in progress'); + $durationText = $duration !== null ? sprintf('%d seconds', $duration) : 'a moment'; + + return << + + + + + + Part-DB - Maintenance + + + +
+
+ ⚙️ +
+

Part-DB is Updating

+

We're making things better. This should only take a moment.

+ +
+ {$reason} +
+ +
+
+
+ +

+ Update running for {$durationText}
+ This page will automatically refresh every 15 seconds. +

+
+ + +HTML; + } +} diff --git a/src/Services/System/InstallationTypeDetector.php b/src/Services/System/InstallationTypeDetector.php new file mode 100644 index 00000000..0cd99a04 --- /dev/null +++ b/src/Services/System/InstallationTypeDetector.php @@ -0,0 +1,224 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Services\System; + +use Symfony\Component\DependencyInjection\Attribute\Autowire; +use Symfony\Component\Process\Process; + +/** + * Detects the installation type of Part-DB to determine the appropriate update strategy. + */ +enum InstallationType: string +{ + case GIT = 'git'; + case DOCKER = 'docker'; + case ZIP_RELEASE = 'zip_release'; + case UNKNOWN = 'unknown'; + + public function getLabel(): string + { + return match($this) { + self::GIT => 'Git Clone', + self::DOCKER => 'Docker', + self::ZIP_RELEASE => 'Release Archive', + self::UNKNOWN => 'Unknown', + }; + } + + public function supportsAutoUpdate(): bool + { + return match($this) { + self::GIT => true, + self::DOCKER => false, + self::ZIP_RELEASE => true, + self::UNKNOWN => false, + }; + } + + public function getUpdateInstructions(): string + { + return match($this) { + self::GIT => 'Run: php bin/console partdb:update', + self::DOCKER => 'Pull the new Docker image and recreate the container: docker-compose pull && docker-compose up -d', + self::ZIP_RELEASE => 'Download the new release, extract it, and run migrations.', + self::UNKNOWN => 'Unable to determine installation type. Please update manually.', + }; + } +} + +class InstallationTypeDetector +{ + public function __construct(#[Autowire(param: 'kernel.project_dir')] private readonly string $project_dir) + { + + } + + /** + * Detect the installation type based on filesystem markers. + */ + public function detect(): InstallationType + { + // Check for Docker environment first + if ($this->isDocker()) { + return InstallationType::DOCKER; + } + + // Check for Git installation + if ($this->isGitInstall()) { + return InstallationType::GIT; + } + + // Check for ZIP release (has VERSION file but no .git) + if ($this->isZipRelease()) { + return InstallationType::ZIP_RELEASE; + } + + return InstallationType::UNKNOWN; + } + + /** + * Check if running inside a Docker container. + */ + public function isDocker(): bool + { + // Check for /.dockerenv file + if (file_exists('/.dockerenv')) { + return true; + } + + // Check for DOCKER environment variable + if (getenv('DOCKER') !== false) { + return true; + } + + // Check for container runtime in cgroup + if (file_exists('/proc/1/cgroup')) { + $cgroup = @file_get_contents('/proc/1/cgroup'); + if ($cgroup !== false && (str_contains($cgroup, 'docker') || str_contains($cgroup, 'containerd'))) { + return true; + } + } + + return false; + } + + /** + * Check if this is a Git-based installation. + */ + public function isGitInstall(): bool + { + return is_dir($this->project_dir . '/.git'); + } + + /** + * Check if this appears to be a ZIP release installation. + */ + public function isZipRelease(): bool + { + // Has VERSION file but no .git directory + return file_exists($this->project_dir . '/VERSION') && !$this->isGitInstall(); + } + + /** + * Get detailed information about the installation. + */ + public function getInstallationInfo(): array + { + $type = $this->detect(); + + $info = [ + 'type' => $type, + 'type_name' => $type->getLabel(), + 'supports_auto_update' => $type->supportsAutoUpdate(), + 'update_instructions' => $type->getUpdateInstructions(), + 'project_dir' => $this->project_dir, + ]; + + if ($type === InstallationType::GIT) { + $info['git'] = $this->getGitInfo(); + } + + if ($type === InstallationType::DOCKER) { + $info['docker'] = $this->getDockerInfo(); + } + + return $info; + } + + /** + * Get Git-specific information. + */ + private function getGitInfo(): array + { + $info = [ + 'branch' => null, + 'commit' => null, + 'remote_url' => null, + 'has_local_changes' => false, + ]; + + // Get branch + $headFile = $this->project_dir . '/.git/HEAD'; + if (file_exists($headFile)) { + $head = file_get_contents($headFile); + if (preg_match('#ref: refs/heads/(.+)#', $head, $matches)) { + $info['branch'] = trim($matches[1]); + } + } + + // Get remote URL + $configFile = $this->project_dir . '/.git/config'; + if (file_exists($configFile)) { + $config = file_get_contents($configFile); + if (preg_match('#url = (.+)#', $config, $matches)) { + $info['remote_url'] = trim($matches[1]); + } + } + + // Get commit hash + $process = new Process(['git', 'rev-parse', '--short', 'HEAD'], $this->project_dir); + $process->run(); + if ($process->isSuccessful()) { + $info['commit'] = trim($process->getOutput()); + } + + // Check for local changes + $process = new Process(['git', 'status', '--porcelain'], $this->project_dir); + $process->run(); + $info['has_local_changes'] = !empty(trim($process->getOutput())); + + return $info; + } + + /** + * Get Docker-specific information. + */ + private function getDockerInfo(): array + { + return [ + 'container_id' => @file_get_contents('/proc/1/cpuset') ?: null, + 'image' => getenv('DOCKER_IMAGE') ?: null, + ]; + } +} diff --git a/src/Services/System/UpdateChecker.php b/src/Services/System/UpdateChecker.php new file mode 100644 index 00000000..a881f614 --- /dev/null +++ b/src/Services/System/UpdateChecker.php @@ -0,0 +1,349 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Services\System; + +use App\Settings\SystemSettings\PrivacySettings; +use Psr\Log\LoggerInterface; +use Shivas\VersioningBundle\Service\VersionManagerInterface; +use Symfony\Component\DependencyInjection\Attribute\Autowire; +use Symfony\Component\Process\Process; +use Symfony\Contracts\Cache\CacheInterface; +use Symfony\Contracts\Cache\ItemInterface; +use Symfony\Contracts\HttpClient\HttpClientInterface; +use Version\Version; + +/** + * Enhanced update checker that fetches release information including changelogs. + */ +class UpdateChecker +{ + private const GITHUB_API_BASE = 'https://api.github.com/repos/Part-DB/Part-DB-server'; + private const CACHE_KEY_RELEASES = 'update_checker_releases'; + private const CACHE_KEY_COMMITS = 'update_checker_commits_behind'; + private const CACHE_TTL = 60 * 60 * 6; // 6 hours + private const CACHE_TTL_ERROR = 60 * 60; // 1 hour on error + + public function __construct(private readonly HttpClientInterface $httpClient, + private readonly CacheInterface $updateCache, private readonly VersionManagerInterface $versionManager, + private readonly PrivacySettings $privacySettings, private readonly LoggerInterface $logger, + private readonly InstallationTypeDetector $installationTypeDetector, + #[Autowire(param: 'kernel.debug')] private readonly bool $is_dev_mode, + #[Autowire(param: 'kernel.project_dir')] private readonly string $project_dir) + { + + } + + /** + * Get the current installed version. + */ + public function getCurrentVersion(): Version + { + return $this->versionManager->getVersion(); + } + + /** + * Get the current version as string. + */ + public function getCurrentVersionString(): string + { + return $this->getCurrentVersion()->toString(); + } + + /** + * Get Git repository information. + */ + public function getGitInfo(): array + { + $info = [ + 'branch' => null, + 'commit' => null, + 'has_local_changes' => false, + 'commits_behind' => 0, + 'is_git_install' => false, + ]; + + $gitDir = $this->project_dir . '/.git'; + + if (!is_dir($gitDir)) { + return $info; + } + + $info['is_git_install'] = true; + + // Get branch from HEAD file + $headFile = $gitDir . '/HEAD'; + if (file_exists($headFile)) { + $head = file_get_contents($headFile); + if (preg_match('#ref: refs/heads/(.+)#', $head, $matches)) { + $info['branch'] = trim($matches[1]); + } + } + + // Get current commit + $process = new Process(['git', 'rev-parse', '--short', 'HEAD'], $this->project_dir); + $process->run(); + if ($process->isSuccessful()) { + $info['commit'] = trim($process->getOutput()); + } + + // Check for local changes + $process = new Process(['git', 'status', '--porcelain'], $this->project_dir); + $process->run(); + $info['has_local_changes'] = !empty(trim($process->getOutput())); + + // Get commits behind (fetch first) + if ($info['branch']) { + // Try to get cached commits behind count + $info['commits_behind'] = $this->getCommitsBehind($info['branch']); + } + + return $info; + } + + /** + * Get number of commits behind the remote branch (cached). + */ + private function getCommitsBehind(string $branch): int + { + if (!$this->privacySettings->checkForUpdates) { + return 0; + } + + $cacheKey = self::CACHE_KEY_COMMITS . '_' . md5($branch); + + return $this->updateCache->get($cacheKey, function (ItemInterface $item) use ($branch) { + $item->expiresAfter(self::CACHE_TTL); + + // Fetch from remote first + $process = new Process(['git', 'fetch', '--tags', 'origin'], $this->project_dir); + $process->run(); + + // Count commits behind + $process = new Process(['git', 'rev-list', 'HEAD..origin/' . $branch, '--count'], $this->project_dir); + $process->run(); + + return $process->isSuccessful() ? (int) trim($process->getOutput()) : 0; + }); + } + + /** + * Force refresh git information by invalidating cache. + */ + public function refreshGitInfo(): void + { + $gitInfo = $this->getGitInfo(); + if ($gitInfo['branch']) { + $this->updateCache->delete(self::CACHE_KEY_COMMITS . '_' . md5($gitInfo['branch'])); + } + $this->updateCache->delete(self::CACHE_KEY_RELEASES); + } + + /** + * Get all available releases from GitHub (cached). + * + * @return array + */ + public function getAvailableReleases(int $limit = 10): array + { + if (!$this->privacySettings->checkForUpdates) { + return []; + } + + return $this->updateCache->get(self::CACHE_KEY_RELEASES, function (ItemInterface $item) use ($limit) { + $item->expiresAfter(self::CACHE_TTL); + + try { + $response = $this->httpClient->request('GET', self::GITHUB_API_BASE . '/releases', [ + 'query' => ['per_page' => $limit], + 'headers' => [ + 'Accept' => 'application/vnd.github.v3+json', + 'User-Agent' => 'Part-DB-Update-Checker', + ], + ]); + + $releases = []; + foreach ($response->toArray() as $release) { + // Extract assets (for ZIP download) + $assets = []; + foreach ($release['assets'] ?? [] as $asset) { + if (str_ends_with($asset['name'], '.zip') || str_ends_with($asset['name'], '.tar.gz')) { + $assets[] = [ + 'name' => $asset['name'], + 'url' => $asset['browser_download_url'], + 'size' => $asset['size'], + ]; + } + } + + $releases[] = [ + 'version' => ltrim($release['tag_name'], 'v'), + 'tag' => $release['tag_name'], + 'name' => $release['name'] ?? $release['tag_name'], + 'url' => $release['html_url'], + 'published_at' => $release['published_at'], + 'body' => $release['body'] ?? '', + 'prerelease' => $release['prerelease'] ?? false, + 'draft' => $release['draft'] ?? false, + 'assets' => $assets, + 'tarball_url' => $release['tarball_url'] ?? null, + 'zipball_url' => $release['zipball_url'] ?? null, + ]; + } + + return $releases; + } catch (\Exception $e) { + $this->logger->error('Failed to fetch releases from GitHub: ' . $e->getMessage()); + $item->expiresAfter(self::CACHE_TTL_ERROR); + + if ($this->is_dev_mode) { + throw $e; + } + + return []; + } + }); + } + + /** + * Get the latest stable release. + */ + public function getLatestRelease(bool $includePrerelease = false): ?array + { + $releases = $this->getAvailableReleases(); + + foreach ($releases as $release) { + // Skip drafts always + if ($release['draft']) { + continue; + } + + // Skip prereleases unless explicitly included + if (!$includePrerelease && $release['prerelease']) { + continue; + } + + return $release; + } + + return null; + } + + /** + * Check if a specific version is newer than current. + */ + public function isNewerVersion(string $version): bool + { + try { + $targetVersion = Version::fromString(ltrim($version, 'v')); + return $targetVersion->isGreaterThan($this->getCurrentVersion()); + } catch (\Exception) { + return false; + } + } + + /** + * Get comprehensive update status. + */ + public function getUpdateStatus(): array + { + $current = $this->getCurrentVersion(); + $latest = $this->getLatestRelease(); + $gitInfo = $this->getGitInfo(); + $installInfo = $this->installationTypeDetector->getInstallationInfo(); + + $updateAvailable = false; + $latestVersion = null; + $latestTag = null; + + if ($latest) { + try { + $latestVersionObj = Version::fromString($latest['version']); + $updateAvailable = $latestVersionObj->isGreaterThan($current); + $latestVersion = $latest['version']; + $latestTag = $latest['tag']; + } catch (\Exception) { + // Invalid version string + } + } + + // Determine if we can auto-update + $canAutoUpdate = $installInfo['supports_auto_update']; + $updateBlockers = []; + + if ($gitInfo['has_local_changes']) { + $canAutoUpdate = false; + $updateBlockers[] = 'local_changes'; + } + + if ($installInfo['type'] === InstallationType::DOCKER) { + $updateBlockers[] = 'docker_installation'; + } + + return [ + 'current_version' => $current->toString(), + 'latest_version' => $latestVersion, + 'latest_tag' => $latestTag, + 'update_available' => $updateAvailable, + 'release_notes' => $latest['body'] ?? null, + 'release_url' => $latest['url'] ?? null, + 'published_at' => $latest['published_at'] ?? null, + 'git' => $gitInfo, + 'installation' => $installInfo, + 'can_auto_update' => $canAutoUpdate, + 'update_blockers' => $updateBlockers, + 'check_enabled' => $this->privacySettings->checkForUpdates, + ]; + } + + /** + * Get releases newer than the current version. + */ + public function getAvailableUpdates(bool $includePrerelease = false): array + { + $releases = $this->getAvailableReleases(); + $current = $this->getCurrentVersion(); + $updates = []; + + foreach ($releases as $release) { + if ($release['draft']) { + continue; + } + + if (!$includePrerelease && $release['prerelease']) { + continue; + } + + try { + $releaseVersion = Version::fromString($release['version']); + if ($releaseVersion->isGreaterThan($current)) { + $updates[] = $release; + } + } catch (\Exception) { + continue; + } + } + + return $updates; + } +} diff --git a/src/Services/System/UpdateExecutor.php b/src/Services/System/UpdateExecutor.php new file mode 100644 index 00000000..7bc997f7 --- /dev/null +++ b/src/Services/System/UpdateExecutor.php @@ -0,0 +1,832 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Services\System; + +use Psr\Log\LoggerInterface; +use Shivas\VersioningBundle\Service\VersionManagerInterface; +use Symfony\Component\DependencyInjection\Attribute\Autowire; +use Symfony\Component\Filesystem\Filesystem; +use Symfony\Component\Process\Process; + +/** + * Handles the execution of Part-DB updates with safety mechanisms. + * + * This service should primarily be used from CLI commands, not web requests, + * due to the long-running nature of updates and permission requirements. + */ +class UpdateExecutor +{ + private const LOCK_FILE = 'var/update.lock'; + private const MAINTENANCE_FILE = 'var/maintenance.flag'; + private const UPDATE_LOG_DIR = 'var/log/updates'; + private const BACKUP_DIR = 'var/backups'; + private const PROGRESS_FILE = 'var/update_progress.json'; + + /** @var array */ + private array $steps = []; + + private ?string $currentLogFile = null; + + public function __construct(#[Autowire(param: 'kernel.project_dir')] private readonly string $project_dir, + private readonly LoggerInterface $logger, private readonly Filesystem $filesystem, + private readonly InstallationTypeDetector $installationTypeDetector, + private readonly VersionManagerInterface $versionManager) + { + + } + + /** + * Get the current version string for use in filenames. + */ + private function getCurrentVersionString(): string + { + return $this->versionManager->getVersion()->toString(); + } + + /** + * Check if an update is currently in progress. + */ + public function isLocked(): bool + { + $lockFile = $this->project_dir . '/' . self::LOCK_FILE; + + if (!file_exists($lockFile)) { + return false; + } + + // Check if lock is stale (older than 1 hour) + $lockData = json_decode(file_get_contents($lockFile), true); + if ($lockData && isset($lockData['started_at'])) { + $startedAt = new \DateTime($lockData['started_at']); + $now = new \DateTime(); + $diff = $now->getTimestamp() - $startedAt->getTimestamp(); + + // If lock is older than 1 hour, consider it stale + if ($diff > 3600) { + $this->logger->warning('Found stale update lock, removing it'); + $this->releaseLock(); + return false; + } + } + + return true; + } + + /** + * Get lock information. + */ + public function getLockInfo(): ?array + { + $lockFile = $this->project_dir . '/' . self::LOCK_FILE; + + if (!file_exists($lockFile)) { + return null; + } + + return json_decode(file_get_contents($lockFile), true); + } + + /** + * Check if maintenance mode is enabled. + */ + public function isMaintenanceMode(): bool + { + return file_exists($this->project_dir . '/' . self::MAINTENANCE_FILE); + } + + /** + * Get maintenance mode information. + */ + public function getMaintenanceInfo(): ?array + { + $maintenanceFile = $this->project_dir . '/' . self::MAINTENANCE_FILE; + + if (!file_exists($maintenanceFile)) { + return null; + } + + return json_decode(file_get_contents($maintenanceFile), true); + } + + /** + * Acquire an exclusive lock for the update process. + */ + public function acquireLock(): bool + { + if ($this->isLocked()) { + return false; + } + + $lockFile = $this->project_dir . '/' . self::LOCK_FILE; + $lockDir = dirname($lockFile); + + if (!is_dir($lockDir)) { + $this->filesystem->mkdir($lockDir); + } + + $lockData = [ + 'started_at' => (new \DateTime())->format('c'), + 'pid' => getmypid(), + 'user' => get_current_user(), + ]; + + $this->filesystem->dumpFile($lockFile, json_encode($lockData, JSON_PRETTY_PRINT)); + + return true; + } + + /** + * Release the update lock. + */ + public function releaseLock(): void + { + $lockFile = $this->project_dir . '/' . self::LOCK_FILE; + + if (file_exists($lockFile)) { + $this->filesystem->remove($lockFile); + } + } + + /** + * Enable maintenance mode to block user access during update. + */ + public function enableMaintenanceMode(string $reason = 'Update in progress'): void + { + $maintenanceFile = $this->project_dir . '/' . self::MAINTENANCE_FILE; + $maintenanceDir = dirname($maintenanceFile); + + if (!is_dir($maintenanceDir)) { + $this->filesystem->mkdir($maintenanceDir); + } + + $data = [ + 'enabled_at' => (new \DateTime())->format('c'), + 'reason' => $reason, + ]; + + $this->filesystem->dumpFile($maintenanceFile, json_encode($data, JSON_PRETTY_PRINT)); + } + + /** + * Disable maintenance mode. + */ + public function disableMaintenanceMode(): void + { + $maintenanceFile = $this->project_dir . '/' . self::MAINTENANCE_FILE; + + if (file_exists($maintenanceFile)) { + $this->filesystem->remove($maintenanceFile); + } + } + + /** + * Validate that we can perform an update. + * + * @return array{valid: bool, errors: array} + */ + public function validateUpdatePreconditions(): array + { + $errors = []; + + // Check installation type + $installType = $this->installationTypeDetector->detect(); + if (!$installType->supportsAutoUpdate()) { + $errors[] = sprintf( + 'Installation type "%s" does not support automatic updates. %s', + $installType->getLabel(), + $installType->getUpdateInstructions() + ); + } + + // Check for Git installation + if ($installType === InstallationType::GIT) { + // Check if git is available + $process = new Process(['git', '--version']); + $process->run(); + if (!$process->isSuccessful()) { + $errors[] = 'Git command not found. Please ensure Git is installed and in PATH.'; + } + + // Check for local changes + $process = new Process(['git', 'status', '--porcelain'], $this->project_dir); + $process->run(); + if (!empty(trim($process->getOutput()))) { + $errors[] = 'There are uncommitted local changes. Please commit or stash them before updating.'; + } + } + + // Check if composer is available + $process = new Process(['composer', '--version']); + $process->run(); + if (!$process->isSuccessful()) { + $errors[] = 'Composer command not found. Please ensure Composer is installed and in PATH.'; + } + + // Check if PHP CLI is available + $process = new Process(['php', '--version']); + $process->run(); + if (!$process->isSuccessful()) { + $errors[] = 'PHP CLI not found. Please ensure PHP is installed and in PATH.'; + } + + // Check write permissions + $testDirs = ['var', 'vendor', 'public']; + foreach ($testDirs as $dir) { + $fullPath = $this->project_dir . '/' . $dir; + if (is_dir($fullPath) && !is_writable($fullPath)) { + $errors[] = sprintf('Directory "%s" is not writable.', $dir); + } + } + + // Check if already locked + if ($this->isLocked()) { + $lockInfo = $this->getLockInfo(); + $errors[] = sprintf( + 'An update is already in progress (started at %s).', + $lockInfo['started_at'] ?? 'unknown time' + ); + } + + return [ + 'valid' => empty($errors), + 'errors' => $errors, + ]; + } + + /** + * Execute the update to a specific version. + * + * @param string $targetVersion The target version/tag to update to (e.g., "v2.6.0") + * @param bool $createBackup Whether to create a backup before updating + * @param callable|null $onProgress Callback for progress updates + * + * @return array{success: bool, steps: array, rollback_tag: ?string, error: ?string, log_file: ?string} + */ + public function executeUpdate( + string $targetVersion, + bool $createBackup = true, + ?callable $onProgress = null + ): array { + $this->steps = []; + $rollbackTag = null; + $startTime = microtime(true); + + // Initialize log file + $this->initializeLogFile($targetVersion); + + $log = function (string $step, string $message, bool $success = true, ?float $duration = null) use ($onProgress): void { + $entry = [ + 'step' => $step, + 'message' => $message, + 'success' => $success, + 'timestamp' => (new \DateTime())->format('c'), + 'duration' => $duration, + ]; + + $this->steps[] = $entry; + $this->writeToLogFile($entry); + $this->logger->info("Update [{$step}]: {$message}", ['success' => $success]); + + if ($onProgress) { + $onProgress($entry); + } + }; + + try { + // Validate preconditions + $validation = $this->validateUpdatePreconditions(); + if (!$validation['valid']) { + throw new \RuntimeException('Precondition check failed: ' . implode('; ', $validation['errors'])); + } + + // Step 1: Acquire lock + $stepStart = microtime(true); + if (!$this->acquireLock()) { + throw new \RuntimeException('Could not acquire update lock. Another update may be in progress.'); + } + $log('lock', 'Acquired exclusive update lock', true, microtime(true) - $stepStart); + + // Step 2: Enable maintenance mode + $stepStart = microtime(true); + $this->enableMaintenanceMode('Updating to ' . $targetVersion); + $log('maintenance', 'Enabled maintenance mode', true, microtime(true) - $stepStart); + + // Step 3: Create rollback point with version info + $stepStart = microtime(true); + $currentVersion = $this->getCurrentVersionString(); + $targetVersionClean = preg_replace('/[^a-zA-Z0-9\.]/', '', $targetVersion); + $rollbackTag = 'pre-update-v' . $currentVersion . '-to-' . $targetVersionClean . '-' . date('Y-m-d-His'); + $this->runCommand(['git', 'tag', $rollbackTag], 'Create rollback tag'); + $log('rollback_tag', 'Created rollback tag: ' . $rollbackTag, true, microtime(true) - $stepStart); + + // Step 4: Create backup (optional) + if ($createBackup) { + $stepStart = microtime(true); + $backupFile = $this->createBackup($targetVersion); + $log('backup', 'Created backup: ' . basename($backupFile), true, microtime(true) - $stepStart); + } + + // Step 5: Fetch from remote + $stepStart = microtime(true); + $this->runCommand(['git', 'fetch', '--tags', '--force', 'origin'], 'Fetch from origin', 120); + $log('fetch', 'Fetched latest changes and tags from origin', true, microtime(true) - $stepStart); + + // Step 6: Checkout target version + $stepStart = microtime(true); + $this->runCommand(['git', 'checkout', $targetVersion], 'Checkout version'); + $log('checkout', 'Checked out version: ' . $targetVersion, true, microtime(true) - $stepStart); + + // Step 7: Install dependencies + $stepStart = microtime(true); + $this->runCommand([ + 'composer', 'install', + '--no-dev', + '--optimize-autoloader', + '--no-interaction', + '--no-progress', + ], 'Install dependencies', 600); + $log('composer', 'Installed/updated dependencies', true, microtime(true) - $stepStart); + + // Step 8: Run database migrations + $stepStart = microtime(true); + $this->runCommand([ + 'php', 'bin/console', 'doctrine:migrations:migrate', + '--no-interaction', + '--allow-no-migration', + ], 'Run migrations', 300); + $log('migrations', 'Database migrations completed', true, microtime(true) - $stepStart); + + // Step 9: Clear cache + $stepStart = microtime(true); + $this->runCommand([ + 'php', 'bin/console', 'cache:clear', + '--env=prod', + '--no-interaction', + ], 'Clear cache', 120); + $log('cache_clear', 'Cleared application cache', true, microtime(true) - $stepStart); + + // Step 10: Warm up cache + $stepStart = microtime(true); + $this->runCommand([ + 'php', 'bin/console', 'cache:warmup', + '--env=prod', + ], 'Warmup cache', 120); + $log('cache_warmup', 'Warmed up application cache', true, microtime(true) - $stepStart); + + // Step 11: Disable maintenance mode + $stepStart = microtime(true); + $this->disableMaintenanceMode(); + $log('maintenance_off', 'Disabled maintenance mode', true, microtime(true) - $stepStart); + + // Step 12: Release lock + $stepStart = microtime(true); + $this->releaseLock(); + + $totalDuration = microtime(true) - $startTime; + $log('complete', sprintf('Update completed successfully in %.1f seconds', $totalDuration), true, microtime(true) - $stepStart); + + return [ + 'success' => true, + 'steps' => $this->steps, + 'rollback_tag' => $rollbackTag, + 'error' => null, + 'log_file' => $this->currentLogFile, + 'duration' => $totalDuration, + ]; + + } catch (\Exception $e) { + $log('error', 'Update failed: ' . $e->getMessage(), false); + + // Attempt rollback + if ($rollbackTag) { + try { + $this->runCommand(['git', 'checkout', $rollbackTag], 'Rollback'); + $log('rollback', 'Rolled back to: ' . $rollbackTag, true); + + // Re-run composer install after rollback + $this->runCommand([ + 'composer', 'install', + '--no-dev', + '--optimize-autoloader', + '--no-interaction', + ], 'Reinstall dependencies after rollback', 600); + $log('rollback_composer', 'Reinstalled dependencies after rollback', true); + + // Clear cache after rollback + $this->runCommand([ + 'php', 'bin/console', 'cache:clear', + '--env=prod', + ], 'Clear cache after rollback', 120); + $log('rollback_cache', 'Cleared cache after rollback', true); + + } catch (\Exception $rollbackError) { + $log('rollback_failed', 'Rollback failed: ' . $rollbackError->getMessage(), false); + } + } + + // Clean up + $this->disableMaintenanceMode(); + $this->releaseLock(); + + return [ + 'success' => false, + 'steps' => $this->steps, + 'rollback_tag' => $rollbackTag, + 'error' => $e->getMessage(), + 'log_file' => $this->currentLogFile, + 'duration' => microtime(true) - $startTime, + ]; + } + } + + /** + * Create a backup before updating. + */ + private function createBackup(string $targetVersion): string + { + $backupDir = $this->project_dir . '/' . self::BACKUP_DIR; + + if (!is_dir($backupDir)) { + $this->filesystem->mkdir($backupDir, 0755); + } + + // Include version numbers in backup filename: pre-update-v2.5.1-to-v2.6.0-2024-01-30-185400.zip + $currentVersion = $this->getCurrentVersionString(); + $targetVersionClean = preg_replace('/[^a-zA-Z0-9\.]/', '', $targetVersion); + $backupFile = $backupDir . '/pre-update-v' . $currentVersion . '-to-' . $targetVersionClean . '-' . date('Y-m-d-His') . '.zip'; + + $this->runCommand([ + 'php', 'bin/console', 'partdb:backup', + '--full', + '--overwrite', + $backupFile, + ], 'Create backup', 600); + + return $backupFile; + } + + /** + * Run a shell command with proper error handling. + */ + private function runCommand(array $command, string $description, int $timeout = 120): string + { + $process = new Process($command, $this->project_dir); + $process->setTimeout($timeout); + + // Set environment variables needed for Composer and other tools + // This is especially important when running as www-data which may not have HOME set + // We inherit from current environment and override/add specific variables + $currentEnv = getenv(); + if (!is_array($currentEnv)) { + $currentEnv = []; + } + $env = array_merge($currentEnv, [ + 'HOME' => $this->project_dir, + 'COMPOSER_HOME' => $this->project_dir . '/var/composer', + 'PATH' => getenv('PATH') ?: '/usr/local/bin:/usr/bin:/bin', + ]); + $process->setEnv($env); + + $output = ''; + $process->run(function ($type, $buffer) use (&$output) { + $output .= $buffer; + }); + + if (!$process->isSuccessful()) { + $errorOutput = $process->getErrorOutput() ?: $process->getOutput(); + throw new \RuntimeException( + sprintf('%s failed: %s', $description, trim($errorOutput)) + ); + } + + return $output; + } + + /** + * Initialize the log file for this update. + */ + private function initializeLogFile(string $targetVersion): void + { + $logDir = $this->project_dir . '/' . self::UPDATE_LOG_DIR; + + if (!is_dir($logDir)) { + $this->filesystem->mkdir($logDir, 0755); + } + + // Include version numbers in log filename: update-v2.5.1-to-v2.6.0-2024-01-30-185400.log + $currentVersion = $this->getCurrentVersionString(); + $targetVersionClean = preg_replace('/[^a-zA-Z0-9\.]/', '', $targetVersion); + $this->currentLogFile = $logDir . '/update-v' . $currentVersion . '-to-' . $targetVersionClean . '-' . date('Y-m-d-His') . '.log'; + + $header = sprintf( + "Part-DB Update Log\n" . + "==================\n" . + "Started: %s\n" . + "From Version: %s\n" . + "Target Version: %s\n" . + "==================\n\n", + date('Y-m-d H:i:s'), + $currentVersion, + $targetVersion + ); + + file_put_contents($this->currentLogFile, $header); + } + + /** + * Write an entry to the log file. + */ + private function writeToLogFile(array $entry): void + { + if (!$this->currentLogFile) { + return; + } + + $line = sprintf( + "[%s] %s: %s%s\n", + $entry['timestamp'], + strtoupper($entry['step']), + $entry['message'], + $entry['duration'] ? sprintf(' (%.2fs)', $entry['duration']) : '' + ); + + file_put_contents($this->currentLogFile, $line, FILE_APPEND); + } + + /** + * Get list of update log files. + */ + public function getUpdateLogs(): array + { + $logDir = $this->project_dir . '/' . self::UPDATE_LOG_DIR; + + if (!is_dir($logDir)) { + return []; + } + + $logs = []; + foreach (glob($logDir . '/update-*.log') as $logFile) { + $logs[] = [ + 'file' => basename($logFile), + 'path' => $logFile, + 'date' => filemtime($logFile), + 'size' => filesize($logFile), + ]; + } + + // Sort by date descending + usort($logs, fn($a, $b) => $b['date'] <=> $a['date']); + + return $logs; + } + + /** + * Get list of backups. + */ + public function getBackups(): array + { + $backupDir = $this->project_dir . '/' . self::BACKUP_DIR; + + if (!is_dir($backupDir)) { + return []; + } + + $backups = []; + foreach (glob($backupDir . '/*.zip') as $backupFile) { + $backups[] = [ + 'file' => basename($backupFile), + 'path' => $backupFile, + 'date' => filemtime($backupFile), + 'size' => filesize($backupFile), + ]; + } + + // Sort by date descending + usort($backups, fn($a, $b) => $b['date'] <=> $a['date']); + + return $backups; + } + + /** + * Get the path to the progress file. + */ + public function getProgressFilePath(): string + { + return $this->project_dir . '/' . self::PROGRESS_FILE; + } + + /** + * Save progress to file for web UI polling. + */ + public function saveProgress(array $progress): void + { + $progressFile = $this->getProgressFilePath(); + $progressDir = dirname($progressFile); + + if (!is_dir($progressDir)) { + $this->filesystem->mkdir($progressDir); + } + + $this->filesystem->dumpFile($progressFile, json_encode($progress, JSON_PRETTY_PRINT)); + } + + /** + * Get current update progress from file. + */ + public function getProgress(): ?array + { + $progressFile = $this->getProgressFilePath(); + + if (!file_exists($progressFile)) { + return null; + } + + $data = json_decode(file_get_contents($progressFile), true); + + // If the progress file is stale (older than 30 minutes), consider it invalid + if ($data && isset($data['started_at'])) { + $startedAt = strtotime($data['started_at']); + if (time() - $startedAt > 1800) { + $this->clearProgress(); + return null; + } + } + + return $data; + } + + /** + * Clear progress file. + */ + public function clearProgress(): void + { + $progressFile = $this->getProgressFilePath(); + + if (file_exists($progressFile)) { + $this->filesystem->remove($progressFile); + } + } + + /** + * Check if an update is currently running (based on progress file). + */ + public function isUpdateRunning(): bool + { + $progress = $this->getProgress(); + + if (!$progress) { + return false; + } + + return isset($progress['status']) && $progress['status'] === 'running'; + } + + /** + * Start the update process in the background. + * Returns the process ID or null on failure. + */ + public function startBackgroundUpdate(string $targetVersion, bool $createBackup = true): ?int + { + // Validate first + $validation = $this->validateUpdatePreconditions(); + if (!$validation['valid']) { + $this->logger->error('Update validation failed', ['errors' => $validation['errors']]); + return null; + } + + // Initialize progress file + $this->saveProgress([ + 'status' => 'starting', + 'target_version' => $targetVersion, + 'create_backup' => $createBackup, + 'started_at' => (new \DateTime())->format('c'), + 'current_step' => 0, + 'total_steps' => 12, + 'step_name' => 'initializing', + 'step_message' => 'Starting update process...', + 'steps' => [], + 'error' => null, + ]); + + // Build the command to run in background + // Use 'php' from PATH as PHP_BINARY might point to php-fpm + $consolePath = $this->project_dir . '/bin/console'; + $logFile = $this->project_dir . '/var/log/update-background.log'; + + // Ensure log directory exists + $logDir = dirname($logFile); + if (!is_dir($logDir)) { + $this->filesystem->mkdir($logDir, 0755); + } + + // Use nohup to properly detach the process from the web request + // The process will continue running even after the PHP request ends + $command = sprintf( + 'nohup php %s partdb:update %s %s --force --no-interaction >> %s 2>&1 &', + escapeshellarg($consolePath), + escapeshellarg($targetVersion), + $createBackup ? '' : '--no-backup', + escapeshellarg($logFile) + ); + + $this->logger->info('Starting background update', [ + 'command' => $command, + 'target_version' => $targetVersion, + ]); + + // Execute in background using shell_exec for proper detachment + // shell_exec with & runs the command in background + $output = shell_exec($command); + + // Give it a moment to start + usleep(500000); // 500ms + + // Check if progress file was updated (indicates process started) + $progress = $this->getProgress(); + if ($progress && isset($progress['status'])) { + $this->logger->info('Background update started successfully'); + return 1; // Return a non-null value to indicate success + } + + $this->logger->error('Background update may not have started', ['output' => $output]); + return 1; // Still return success as the process might just be slow to start + } + + /** + * Execute update with progress file updates for web UI. + * This is called by the CLI command and updates the progress file. + */ + public function executeUpdateWithProgress( + string $targetVersion, + bool $createBackup = true, + ?callable $onProgress = null + ): array { + $totalSteps = 12; + $currentStep = 0; + + $updateProgress = function (string $stepName, string $message, bool $success = true) use (&$currentStep, $totalSteps, $targetVersion, $createBackup): void { + $currentStep++; + $progress = $this->getProgress() ?? [ + 'status' => 'running', + 'target_version' => $targetVersion, + 'create_backup' => $createBackup, + 'started_at' => (new \DateTime())->format('c'), + 'steps' => [], + ]; + + $progress['current_step'] = $currentStep; + $progress['total_steps'] = $totalSteps; + $progress['step_name'] = $stepName; + $progress['step_message'] = $message; + $progress['status'] = 'running'; + $progress['steps'][] = [ + 'step' => $stepName, + 'message' => $message, + 'success' => $success, + 'timestamp' => (new \DateTime())->format('c'), + ]; + + $this->saveProgress($progress); + }; + + // Wrap the existing executeUpdate with progress tracking + $result = $this->executeUpdate($targetVersion, $createBackup, function ($entry) use ($updateProgress, $onProgress) { + $updateProgress($entry['step'], $entry['message'], $entry['success']); + + if ($onProgress) { + $onProgress($entry); + } + }); + + // Update final status + $finalProgress = $this->getProgress() ?? []; + $finalProgress['status'] = $result['success'] ? 'completed' : 'failed'; + $finalProgress['completed_at'] = (new \DateTime())->format('c'); + $finalProgress['result'] = $result; + $finalProgress['error'] = $result['error']; + $this->saveProgress($finalProgress); + + return $result; + } +} diff --git a/src/Services/Trees/ToolsTreeBuilder.php b/src/Services/Trees/ToolsTreeBuilder.php index 37a09b09..1bb81bf7 100644 --- a/src/Services/Trees/ToolsTreeBuilder.php +++ b/src/Services/Trees/ToolsTreeBuilder.php @@ -315,6 +315,13 @@ class ToolsTreeBuilder ))->setIcon('fa fa-fw fa-gears fa-solid'); } + if ($this->security->isGranted('@system.show_updates')) { + $nodes[] = (new TreeViewNode( + $this->translator->trans('tree.tools.system.update_manager'), + $this->urlGenerator->generate('admin_update_manager') + ))->setIcon('fa-fw fa-treeview fa-solid fa-cloud-download-alt'); + } + return $nodes; } } diff --git a/src/Twig/UpdateExtension.php b/src/Twig/UpdateExtension.php new file mode 100644 index 00000000..10264d12 --- /dev/null +++ b/src/Twig/UpdateExtension.php @@ -0,0 +1,79 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Twig; + +use App\Services\System\UpdateAvailableManager; +use Symfony\Bundle\SecurityBundle\Security; +use Twig\Extension\AbstractExtension; +use Twig\TwigFunction; + +/** + * Twig extension for update-related functions. + */ +final class UpdateExtension extends AbstractExtension +{ + public function __construct(private readonly UpdateAvailableManager $updateAvailableManager, + private readonly Security $security) + { + + } + + public function getFunctions(): array + { + return [ + new TwigFunction('is_update_available', $this->isUpdateAvailable(...)), + new TwigFunction('get_latest_version', $this->getLatestVersion(...)), + new TwigFunction('get_latest_version_url', $this->getLatestVersionUrl(...)), + ]; + } + + /** + * Check if an update is available and the user has permission to see it. + */ + public function isUpdateAvailable(): bool + { + // Only show to users with the show_updates permission + if (!$this->security->isGranted('@system.show_updates')) { + return false; + } + + return $this->updateAvailableManager->isUpdateAvailable(); + } + + /** + * Get the latest available version string. + */ + public function getLatestVersion(): string + { + return $this->updateAvailableManager->getLatestVersionString(); + } + + /** + * Get the URL to the latest version release page. + */ + public function getLatestVersionUrl(): string + { + return $this->updateAvailableManager->getLatestVersionUrl(); + } +} diff --git a/templates/_navbar.html.twig b/templates/_navbar.html.twig index 446ccdab..30562ec4 100644 --- a/templates/_navbar.html.twig +++ b/templates/_navbar.html.twig @@ -74,6 +74,19 @@ - \ No newline at end of file + diff --git a/templates/info_providers/from_url/from_url.html.twig b/templates/info_providers/from_url/from_url.html.twig new file mode 100644 index 00000000..5aad1a03 --- /dev/null +++ b/templates/info_providers/from_url/from_url.html.twig @@ -0,0 +1,21 @@ +{% extends "main_card.html.twig" %} + +{% import "info_providers/providers.macro.html.twig" as providers_macro %} +{% import "helper.twig" as helper %} + +{% block title %} + {% trans %}info_providers.from_url.title{% endtrans %} +{% endblock %} + +{% block card_title %} + {% trans %}info_providers.from_url.title{% endtrans %} +{% endblock %} + +{% block card_content %} +

{% trans %}info_providers.from_url.help{% endtrans %}

+ + {{ form_start(form) }} + {{ form_row(form.url) }} + {{ form_row(form.submit) }} + {{ form_end(form) }} +{% endblock %} diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 706d629a..87f6c2f6 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -14334,5 +14334,29 @@ Buerklin-API Authentication server: When the provider is enabled, users can make requests to arbitary websites on behalf of the Part-DB server. Only enable this, if you are aware of the potential consequences. + + + info_providers.from_url.title + Create [part] from URL + + + + + info_providers.from_url.url.label + URL + + + + + info_providers.from_url.no_part_found + No part found from the given URL. Are you sure this is a valid shop URL? + + + + + info_providers.from_url.help + Creates a part based on the given URL. It tries to delegate it to an existing info provider if possible, otherwise it will be tried to extract rudimentary data from the webpage's metadata. + + From 47c7ee9f07131ecd2b6be11eca8f6e42abc974f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 1 Feb 2026 18:24:46 +0100 Subject: [PATCH 038/172] Allow to extract parameters form additionalProperty JSONLD data --- .../Providers/GenericWebProvider.php | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php index d05aac8f..4b73ad6e 100644 --- a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php +++ b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace App\Services\InfoProviderSystem\Providers; use App\Exceptions\ProviderIDNotSupportedException; +use App\Services\InfoProviderSystem\DTOs\ParameterDTO; use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; use App\Services\InfoProviderSystem\DTOs\PriceDTO; use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO; @@ -75,9 +76,9 @@ class GenericWebProvider implements InfoProviderInterface public function searchByKeyword(string $keyword): array { try { - return [ - $this->getDetails($keyword) - ]; } catch (ProviderIDNotSupportedException $e) { + return [ + $this->getDetails($keyword) + ]; } catch (ProviderIDNotSupportedException $e) { return []; } } @@ -143,7 +144,7 @@ class GenericWebProvider implements InfoProviderInterface order_number: (string) ($jsonLd['sku'] ?? $jsonLd['@id'] ?? $jsonLd['gtin'] ?? 'Unknown'), prices: $prices, product_url: $jsonLd['url'] ?? $url, - )]; + )]; } $image = null; @@ -161,6 +162,26 @@ class GenericWebProvider implements InfoProviderInterface $image = $image['contentUrl'] ?? $image['url'] ?? null; } + //Try to extract parameters from additionalProperty + $parameters = []; + if (isset($jsonLd['additionalProperty']) && array_is_list($jsonLd['additionalProperty'])) { + foreach ($jsonLd['additionalProperty'] as $property) { //TODO: Handle minValue and maxValue + if (isset ($property['unitText'])) { + $parameters[] = ParameterDTO::parseValueField( + name: $property['name'] ?? 'Unknown', + value: $property['value'] ?? '', + unit: $property['unitText'] + ); + } else { + $parameters[] = ParameterDTO::parseValueIncludingUnit( + name: $property['name'] ?? 'Unknown', + value: $property['value'] ?? '' + ); + } + } + } + + return new PartDetailDTO( provider_key: $this->getProviderKey(), provider_id: $url, @@ -169,9 +190,10 @@ class GenericWebProvider implements InfoProviderInterface category: isset($jsonLd['category']) && is_string($jsonLd['category']) ? $jsonLd['category'] : null, manufacturer: $jsonLd['manufacturer']['name'] ?? $jsonLd['brand']['name'] ?? null, mpn: $jsonLd['mpn'] ?? null, - preview_image_url: $image, + preview_image_url: $image, provider_url: $url, notes: $notes, + parameters: $parameters, vendor_infos: $vendor_infos, mass: isset($jsonLd['weight']['value']) ? (float)$jsonLd['weight']['value'] : null, ); From 10c192edd1697929e50bb52cfb83a50263c341dd Mon Sep 17 00:00:00 2001 From: Sebastian Almberg <83243306+Sebbeben@users.noreply.github.com> Date: Sun, 1 Feb 2026 19:17:22 +0100 Subject: [PATCH 039/172] Address PR feedback: add yarn build, env vars, and BackupManager 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 --- .env | 11 + src/Controller/UpdateManagerController.php | 36 +- src/Services/System/BackupManager.php | 487 ++++++++++++++++++ src/Services/System/UpdateExecutor.php | 371 +++---------- .../admin/update_manager/index.html.twig | 23 +- translations/messages.en.xlf | 18 + 6 files changed, 653 insertions(+), 293 deletions(-) create mode 100644 src/Services/System/BackupManager.php diff --git a/.env b/.env index 9a6ce846..3196241b 100644 --- a/.env +++ b/.env @@ -59,6 +59,17 @@ ERROR_PAGE_ADMIN_EMAIL='' # If this is set to true, solutions to common problems are shown on error pages. Disable this, if you do not want your users to see them... ERROR_PAGE_SHOW_HELP=1 +################################################################################### +# Update Manager settings +################################################################################### + +# Set this to 1 to completely disable web-based updates, regardless of user permissions. +# Use this if you prefer to manage updates through your own deployment process. +DISABLE_WEB_UPDATES=0 + +# Set this to 1 to disable the backup restore feature from the web UI. +# Restoring backups is a destructive operation that could cause data loss. +DISABLE_BACKUP_RESTORE=0 ################################################################################### # SAML Single sign on-settings diff --git a/src/Controller/UpdateManagerController.php b/src/Controller/UpdateManagerController.php index 8455516a..b247cb38 100644 --- a/src/Controller/UpdateManagerController.php +++ b/src/Controller/UpdateManagerController.php @@ -27,9 +27,11 @@ use App\Services\System\UpdateChecker; use App\Services\System\UpdateExecutor; use Shivas\VersioningBundle\Service\VersionManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; use Symfony\Component\Routing\Attribute\Route; /** @@ -41,11 +43,35 @@ use Symfony\Component\Routing\Attribute\Route; #[Route('/admin/update-manager')] class UpdateManagerController extends AbstractController { - public function __construct(private readonly UpdateChecker $updateChecker, + public function __construct( + private readonly UpdateChecker $updateChecker, private readonly UpdateExecutor $updateExecutor, - private readonly VersionManagerInterface $versionManager) - { + private readonly VersionManagerInterface $versionManager, + #[Autowire(env: 'bool:DISABLE_WEB_UPDATES')] + private readonly bool $webUpdatesDisabled = false, + #[Autowire(env: 'bool:DISABLE_BACKUP_RESTORE')] + private readonly bool $backupRestoreDisabled = false, + ) { + } + /** + * Check if web updates are disabled and throw exception if so. + */ + private function denyIfWebUpdatesDisabled(): void + { + if ($this->webUpdatesDisabled) { + throw new AccessDeniedHttpException('Web-based updates are disabled by server configuration. Please use the CLI command instead.'); + } + } + + /** + * Check if backup restore is disabled and throw exception if so. + */ + private function denyIfBackupRestoreDisabled(): void + { + if ($this->backupRestoreDisabled) { + throw new AccessDeniedHttpException('Backup restore is disabled by server configuration.'); + } } /** @@ -71,6 +97,8 @@ class UpdateManagerController extends AbstractController 'maintenance_info' => $this->updateExecutor->getMaintenanceInfo(), 'update_logs' => $this->updateExecutor->getUpdateLogs(), 'backups' => $this->updateExecutor->getBackups(), + 'web_updates_disabled' => $this->webUpdatesDisabled, + 'backup_restore_disabled' => $this->backupRestoreDisabled, ]); } @@ -177,6 +205,7 @@ class UpdateManagerController extends AbstractController public function startUpdate(Request $request): Response { $this->denyAccessUnlessGranted('@system.manage_updates'); + $this->denyIfWebUpdatesDisabled(); // Validate CSRF token if (!$this->isCsrfTokenValid('update_manager_start', $request->request->get('_token'))) { @@ -290,6 +319,7 @@ class UpdateManagerController extends AbstractController public function restore(Request $request): Response { $this->denyAccessUnlessGranted('@system.manage_updates'); + $this->denyIfBackupRestoreDisabled(); // Validate CSRF token if (!$this->isCsrfTokenValid('update_manager_restore', $request->request->get('_token'))) { diff --git a/src/Services/System/BackupManager.php b/src/Services/System/BackupManager.php new file mode 100644 index 00000000..b646e433 --- /dev/null +++ b/src/Services/System/BackupManager.php @@ -0,0 +1,487 @@ +. + */ + +declare(strict_types=1); + +namespace App\Services\System; + +use Doctrine\ORM\EntityManagerInterface; +use Psr\Log\LoggerInterface; +use Shivas\VersioningBundle\Service\VersionManagerInterface; +use Symfony\Component\DependencyInjection\Attribute\Autowire; +use Symfony\Component\Filesystem\Filesystem; +use Symfony\Component\Process\Process; + +/** + * Manages Part-DB backups: creation, restoration, and listing. + * + * This service handles all backup-related operations and can be used + * by the Update Manager, CLI commands, or other services. + */ +class BackupManager +{ + private const BACKUP_DIR = 'var/backups'; + + public function __construct( + #[Autowire(param: 'kernel.project_dir')] + private readonly string $projectDir, + private readonly LoggerInterface $logger, + private readonly Filesystem $filesystem, + private readonly VersionManagerInterface $versionManager, + private readonly EntityManagerInterface $entityManager, + ) { + } + + /** + * Get the backup directory path. + */ + public function getBackupDir(): string + { + return $this->projectDir . '/' . self::BACKUP_DIR; + } + + /** + * Get the current version string for use in filenames. + */ + private function getCurrentVersionString(): string + { + return $this->versionManager->getVersion()->toString(); + } + + /** + * Create a backup before updating. + * + * @param string|null $targetVersion Optional target version for naming + * @param string|null $prefix Optional prefix for the backup filename + * @return string The path to the created backup file + */ + public function createBackup(?string $targetVersion = null, ?string $prefix = 'backup'): string + { + $backupDir = $this->getBackupDir(); + + if (!is_dir($backupDir)) { + $this->filesystem->mkdir($backupDir, 0755); + } + + $currentVersion = $this->getCurrentVersionString(); + + // Build filename + if ($targetVersion) { + $targetVersionClean = preg_replace('/[^a-zA-Z0-9\.]/', '', $targetVersion); + $backupFile = $backupDir . '/pre-update-v' . $currentVersion . '-to-' . $targetVersionClean . '-' . date('Y-m-d-His') . '.zip'; + } else { + $backupFile = $backupDir . '/' . $prefix . '-v' . $currentVersion . '-' . date('Y-m-d-His') . '.zip'; + } + + $this->runCommand([ + 'php', 'bin/console', 'partdb:backup', + '--full', + '--overwrite', + $backupFile, + ], 'Create backup', 600); + + $this->logger->info('Created backup', ['file' => $backupFile]); + + return $backupFile; + } + + /** + * Get list of backups. + * + * @return array + */ + public function getBackups(): array + { + $backupDir = $this->getBackupDir(); + + if (!is_dir($backupDir)) { + return []; + } + + $backups = []; + foreach (glob($backupDir . '/*.zip') as $backupFile) { + $backups[] = [ + 'file' => basename($backupFile), + 'path' => $backupFile, + 'date' => filemtime($backupFile), + 'size' => filesize($backupFile), + ]; + } + + // Sort by date descending + usort($backups, fn($a, $b) => $b['date'] <=> $a['date']); + + return $backups; + } + + /** + * Get details about a specific backup file. + * + * @param string $filename The backup filename + * @return array|null Backup details or null if not found + */ + public function getBackupDetails(string $filename): ?array + { + $backupDir = $this->getBackupDir(); + $backupPath = $backupDir . '/' . basename($filename); + + if (!file_exists($backupPath) || !str_ends_with($backupPath, '.zip')) { + return null; + } + + // Parse version info from filename: pre-update-v2.5.1-to-v2.5.0-2024-01-30-185400.zip + $info = [ + 'file' => basename($backupPath), + 'path' => $backupPath, + 'date' => filemtime($backupPath), + 'size' => filesize($backupPath), + 'from_version' => null, + 'to_version' => null, + ]; + + if (preg_match('/pre-update-v([\d.]+)-to-v?([\d.]+)-/', $filename, $matches)) { + $info['from_version'] = $matches[1]; + $info['to_version'] = $matches[2]; + } + + // Check what the backup contains by reading the ZIP + try { + $zip = new \ZipArchive(); + if ($zip->open($backupPath) === true) { + $info['contains_database'] = $zip->locateName('database.sql') !== false || $zip->locateName('var/app.db') !== false; + $info['contains_config'] = $zip->locateName('.env.local') !== false || $zip->locateName('config/parameters.yaml') !== false; + $info['contains_attachments'] = $zip->locateName('public/media/') !== false || $zip->locateName('uploads/') !== false; + $zip->close(); + } + } catch (\Exception $e) { + $this->logger->warning('Could not read backup ZIP contents', ['error' => $e->getMessage()]); + } + + return $info; + } + + /** + * Delete a backup file. + * + * @param string $filename The backup filename to delete + * @return bool True if deleted successfully + */ + public function deleteBackup(string $filename): bool + { + $backupDir = $this->getBackupDir(); + $backupPath = $backupDir . '/' . basename($filename); + + if (!file_exists($backupPath) || !str_ends_with($backupPath, '.zip')) { + return false; + } + + try { + $this->filesystem->remove($backupPath); + $this->logger->info('Deleted backup', ['file' => $filename]); + return true; + } catch (\Exception $e) { + $this->logger->error('Failed to delete backup', ['file' => $filename, 'error' => $e->getMessage()]); + return false; + } + } + + /** + * Restore from a backup file. + * + * @param string $filename The backup filename to restore + * @param bool $restoreDatabase Whether to restore the database + * @param bool $restoreConfig Whether to restore config files + * @param bool $restoreAttachments Whether to restore attachments + * @param callable|null $onProgress Callback for progress updates + * @return array{success: bool, steps: array, error: ?string} + */ + public function restoreBackup( + string $filename, + bool $restoreDatabase = true, + bool $restoreConfig = false, + bool $restoreAttachments = false, + ?callable $onProgress = null + ): array { + $steps = []; + $startTime = microtime(true); + + $log = function (string $step, string $message, bool $success, ?float $duration = null) use (&$steps, $onProgress): void { + $entry = [ + 'step' => $step, + 'message' => $message, + 'success' => $success, + 'timestamp' => (new \DateTime())->format('c'), + 'duration' => $duration, + ]; + $steps[] = $entry; + $this->logger->info('[Restore] ' . $step . ': ' . $message, ['success' => $success]); + + if ($onProgress) { + $onProgress($entry); + } + }; + + try { + // Validate backup file + $backupDir = $this->getBackupDir(); + $backupPath = $backupDir . '/' . basename($filename); + + if (!file_exists($backupPath)) { + throw new \RuntimeException('Backup file not found: ' . $filename); + } + + $stepStart = microtime(true); + + // Step 1: Extract backup to temp directory + $tempDir = sys_get_temp_dir() . '/partdb_restore_' . uniqid(); + $this->filesystem->mkdir($tempDir); + + $zip = new \ZipArchive(); + if ($zip->open($backupPath) !== true) { + throw new \RuntimeException('Could not open backup ZIP file'); + } + $zip->extractTo($tempDir); + $zip->close(); + $log('extract', 'Extracted backup to temporary directory', true, microtime(true) - $stepStart); + + // Step 2: Restore database if requested and present + if ($restoreDatabase) { + $stepStart = microtime(true); + $this->restoreDatabaseFromBackup($tempDir); + $log('database', 'Restored database', true, microtime(true) - $stepStart); + } + + // Step 3: Restore config files if requested and present + if ($restoreConfig) { + $stepStart = microtime(true); + $this->restoreConfigFromBackup($tempDir); + $log('config', 'Restored configuration files', true, microtime(true) - $stepStart); + } + + // Step 4: Restore attachments if requested and present + if ($restoreAttachments) { + $stepStart = microtime(true); + $this->restoreAttachmentsFromBackup($tempDir); + $log('attachments', 'Restored attachments', true, microtime(true) - $stepStart); + } + + // Step 5: Clean up temp directory + $stepStart = microtime(true); + $this->filesystem->remove($tempDir); + $log('cleanup', 'Cleaned up temporary files', true, microtime(true) - $stepStart); + + $totalDuration = microtime(true) - $startTime; + $log('complete', sprintf('Restore completed successfully in %.1f seconds', $totalDuration), true); + + return [ + 'success' => true, + 'steps' => $steps, + 'error' => null, + ]; + + } catch (\Throwable $e) { + $this->logger->error('Restore failed: ' . $e->getMessage(), [ + 'exception' => $e, + 'file' => $filename, + ]); + + // Try to clean up + try { + if (isset($tempDir) && is_dir($tempDir)) { + $this->filesystem->remove($tempDir); + } + } catch (\Throwable $cleanupError) { + $this->logger->error('Cleanup after failed restore also failed', ['error' => $cleanupError->getMessage()]); + } + + return [ + 'success' => false, + 'steps' => $steps, + 'error' => $e->getMessage(), + ]; + } + } + + /** + * Restore database from backup. + */ + private function restoreDatabaseFromBackup(string $tempDir): void + { + // Check for SQL dump (MySQL/PostgreSQL) + $sqlFile = $tempDir . '/database.sql'; + if (file_exists($sqlFile)) { + // Import SQL using mysql/psql command directly + // First, get database connection params from Doctrine + $connection = $this->entityManager->getConnection(); + $params = $connection->getParams(); + $platform = $connection->getDatabasePlatform(); + + if ($platform instanceof \Doctrine\DBAL\Platforms\AbstractMySQLPlatform) { + // Use mysql command to import - need to use shell to handle input redirection + $mysqlCmd = 'mysql'; + if (isset($params['host'])) { + $mysqlCmd .= ' -h ' . escapeshellarg($params['host']); + } + if (isset($params['port'])) { + $mysqlCmd .= ' -P ' . escapeshellarg((string)$params['port']); + } + if (isset($params['user'])) { + $mysqlCmd .= ' -u ' . escapeshellarg($params['user']); + } + if (isset($params['password']) && $params['password']) { + $mysqlCmd .= ' -p' . escapeshellarg($params['password']); + } + if (isset($params['dbname'])) { + $mysqlCmd .= ' ' . escapeshellarg($params['dbname']); + } + $mysqlCmd .= ' < ' . escapeshellarg($sqlFile); + + // Execute using shell + $process = Process::fromShellCommandline($mysqlCmd, $this->projectDir, null, null, 300); + $process->run(); + + if (!$process->isSuccessful()) { + throw new \RuntimeException('MySQL import failed: ' . $process->getErrorOutput()); + } + } elseif ($platform instanceof \Doctrine\DBAL\Platforms\PostgreSQLPlatform) { + // Use psql command to import + $psqlCmd = 'psql'; + if (isset($params['host'])) { + $psqlCmd .= ' -h ' . escapeshellarg($params['host']); + } + if (isset($params['port'])) { + $psqlCmd .= ' -p ' . escapeshellarg((string)$params['port']); + } + if (isset($params['user'])) { + $psqlCmd .= ' -U ' . escapeshellarg($params['user']); + } + if (isset($params['dbname'])) { + $psqlCmd .= ' -d ' . escapeshellarg($params['dbname']); + } + $psqlCmd .= ' -f ' . escapeshellarg($sqlFile); + + // Set PGPASSWORD environment variable if password is provided + $env = null; + if (isset($params['password']) && $params['password']) { + $env = ['PGPASSWORD' => $params['password']]; + } + + // Execute using shell + $process = Process::fromShellCommandline($psqlCmd, $this->projectDir, $env, null, 300); + $process->run(); + + if (!$process->isSuccessful()) { + throw new \RuntimeException('PostgreSQL import failed: ' . $process->getErrorOutput()); + } + } else { + throw new \RuntimeException('Unsupported database platform for restore'); + } + + return; + } + + // Check for SQLite database file + $sqliteFile = $tempDir . '/var/app.db'; + if (file_exists($sqliteFile)) { + $targetDb = $this->projectDir . '/var/app.db'; + $this->filesystem->copy($sqliteFile, $targetDb, true); + return; + } + + $this->logger->warning('No database found in backup'); + } + + /** + * Restore config files from backup. + */ + private function restoreConfigFromBackup(string $tempDir): void + { + // Restore .env.local + $envLocal = $tempDir . '/.env.local'; + if (file_exists($envLocal)) { + $this->filesystem->copy($envLocal, $this->projectDir . '/.env.local', true); + } + + // Restore config/parameters.yaml + $parametersYaml = $tempDir . '/config/parameters.yaml'; + if (file_exists($parametersYaml)) { + $this->filesystem->copy($parametersYaml, $this->projectDir . '/config/parameters.yaml', true); + } + + // Restore config/banner.md + $bannerMd = $tempDir . '/config/banner.md'; + if (file_exists($bannerMd)) { + $this->filesystem->copy($bannerMd, $this->projectDir . '/config/banner.md', true); + } + } + + /** + * Restore attachments from backup. + */ + private function restoreAttachmentsFromBackup(string $tempDir): void + { + // Restore public/media + $publicMedia = $tempDir . '/public/media'; + if (is_dir($publicMedia)) { + $this->filesystem->mirror($publicMedia, $this->projectDir . '/public/media', null, ['override' => true]); + } + + // Restore uploads + $uploads = $tempDir . '/uploads'; + if (is_dir($uploads)) { + $this->filesystem->mirror($uploads, $this->projectDir . '/uploads', null, ['override' => true]); + } + } + + /** + * Run a shell command with proper error handling. + */ + private function runCommand(array $command, string $description, int $timeout = 120): string + { + $process = new Process($command, $this->projectDir); + $process->setTimeout($timeout); + + // Set environment variables + $currentEnv = getenv(); + if (!is_array($currentEnv)) { + $currentEnv = []; + } + $env = array_merge($currentEnv, [ + 'HOME' => $this->projectDir, + 'COMPOSER_HOME' => $this->projectDir . '/var/composer', + 'PATH' => getenv('PATH') ?: '/usr/local/bin:/usr/bin:/bin', + ]); + $process->setEnv($env); + + $output = ''; + $process->run(function ($type, $buffer) use (&$output) { + $output .= $buffer; + }); + + if (!$process->isSuccessful()) { + $errorOutput = $process->getErrorOutput() ?: $process->getOutput(); + throw new \RuntimeException( + sprintf('%s failed: %s', $description, trim($errorOutput)) + ); + } + + return $output; + } +} diff --git a/src/Services/System/UpdateExecutor.php b/src/Services/System/UpdateExecutor.php index 837cde4c..84113981 100644 --- a/src/Services/System/UpdateExecutor.php +++ b/src/Services/System/UpdateExecutor.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace App\Services\System; -use Doctrine\ORM\EntityManagerInterface; use Psr\Log\LoggerInterface; use Shivas\VersioningBundle\Service\VersionManagerInterface; use Symfony\Component\DependencyInjection\Attribute\Autowire; @@ -41,7 +40,6 @@ class UpdateExecutor private const LOCK_FILE = 'var/update.lock'; private const MAINTENANCE_FILE = 'var/maintenance.flag'; private const UPDATE_LOG_DIR = 'var/log/updates'; - private const BACKUP_DIR = 'var/backups'; private const PROGRESS_FILE = 'var/update_progress.json'; /** @var array */ @@ -49,13 +47,15 @@ class UpdateExecutor private ?string $currentLogFile = null; - public function __construct(#[Autowire(param: 'kernel.project_dir')] private readonly string $project_dir, - private readonly LoggerInterface $logger, private readonly Filesystem $filesystem, + public function __construct( + #[Autowire(param: 'kernel.project_dir')] + private readonly string $project_dir, + private readonly LoggerInterface $logger, + private readonly Filesystem $filesystem, private readonly InstallationTypeDetector $installationTypeDetector, private readonly VersionManagerInterface $versionManager, - private readonly EntityManagerInterface $entityManager) - { - + private readonly BackupManager $backupManager, + ) { } /** @@ -252,6 +252,13 @@ class UpdateExecutor $errors[] = 'PHP CLI not found. Please ensure PHP is installed and in PATH.'; } + // Check if yarn is available (for frontend assets) + $process = new Process(['yarn', '--version']); + $process->run(); + if (!$process->isSuccessful()) { + $errors[] = 'Yarn command not found. Please ensure Yarn is installed and in PATH for frontend asset compilation.'; + } + // Check write permissions $testDirs = ['var', 'vendor', 'public']; foreach ($testDirs as $dir) { @@ -345,7 +352,7 @@ class UpdateExecutor // Step 4: Create backup (optional) if ($createBackup) { $stepStart = microtime(true); - $backupFile = $this->createBackup($targetVersion); + $backupFile = $this->backupManager->createBackup($targetVersion); $log('backup', 'Created backup: ' . basename($backupFile), true, microtime(true) - $stepStart); } @@ -359,7 +366,7 @@ class UpdateExecutor $this->runCommand(['git', 'checkout', $targetVersion], 'Checkout version'); $log('checkout', 'Checked out version: ' . $targetVersion, true, microtime(true) - $stepStart); - // Step 7: Install dependencies + // Step 7: Install PHP dependencies $stepStart = microtime(true); $this->runCommand([ 'composer', 'install', @@ -367,10 +374,26 @@ class UpdateExecutor '--optimize-autoloader', '--no-interaction', '--no-progress', - ], 'Install dependencies', 600); - $log('composer', 'Installed/updated dependencies', true, microtime(true) - $stepStart); + ], 'Install PHP dependencies', 600); + $log('composer', 'Installed/updated PHP dependencies', true, microtime(true) - $stepStart); - // Step 8: Run database migrations + // Step 8: Install frontend dependencies + $stepStart = microtime(true); + $this->runCommand([ + 'yarn', 'install', + '--frozen-lockfile', + '--non-interactive', + ], 'Install frontend dependencies', 600); + $log('yarn_install', 'Installed frontend dependencies', true, microtime(true) - $stepStart); + + // Step 9: Build frontend assets + $stepStart = microtime(true); + $this->runCommand([ + 'yarn', 'build', + ], 'Build frontend assets', 600); + $log('yarn_build', 'Built frontend assets', true, microtime(true) - $stepStart); + + // Step 10: Run database migrations $stepStart = microtime(true); $this->runCommand([ 'php', 'bin/console', 'doctrine:migrations:migrate', @@ -379,7 +402,7 @@ class UpdateExecutor ], 'Run migrations', 300); $log('migrations', 'Database migrations completed', true, microtime(true) - $stepStart); - // Step 9: Clear cache + // Step 11: Clear cache $stepStart = microtime(true); $this->runCommand([ 'php', 'bin/console', 'cache:clear', @@ -388,7 +411,7 @@ class UpdateExecutor ], 'Clear cache', 120); $log('cache_clear', 'Cleared application cache', true, microtime(true) - $stepStart); - // Step 10: Warm up cache + // Step 12: Warm up cache $stepStart = microtime(true); $this->runCommand([ 'php', 'bin/console', 'cache:warmup', @@ -396,12 +419,12 @@ class UpdateExecutor ], 'Warmup cache', 120); $log('cache_warmup', 'Warmed up application cache', true, microtime(true) - $stepStart); - // Step 11: Disable maintenance mode + // Step 13: Disable maintenance mode $stepStart = microtime(true); $this->disableMaintenanceMode(); $log('maintenance_off', 'Disabled maintenance mode', true, microtime(true) - $stepStart); - // Step 12: Release lock + // Step 14: Release lock $stepStart = microtime(true); $this->releaseLock(); @@ -433,7 +456,21 @@ class UpdateExecutor '--optimize-autoloader', '--no-interaction', ], 'Reinstall dependencies after rollback', 600); - $log('rollback_composer', 'Reinstalled dependencies after rollback', true); + $log('rollback_composer', 'Reinstalled PHP dependencies after rollback', true); + + // Re-run yarn install after rollback + $this->runCommand([ + 'yarn', 'install', + '--frozen-lockfile', + '--non-interactive', + ], 'Reinstall frontend dependencies after rollback', 600); + $log('rollback_yarn_install', 'Reinstalled frontend dependencies after rollback', true); + + // Re-run yarn build after rollback + $this->runCommand([ + 'yarn', 'build', + ], 'Rebuild frontend assets after rollback', 600); + $log('rollback_yarn_build', 'Rebuilt frontend assets after rollback', true); // Clear cache after rollback $this->runCommand([ @@ -462,32 +499,6 @@ class UpdateExecutor } } - /** - * Create a backup before updating. - */ - private function createBackup(string $targetVersion): string - { - $backupDir = $this->project_dir . '/' . self::BACKUP_DIR; - - if (!is_dir($backupDir)) { - $this->filesystem->mkdir($backupDir, 0755); - } - - // Include version numbers in backup filename: pre-update-v2.5.1-to-v2.6.0-2024-01-30-185400.zip - $currentVersion = $this->getCurrentVersionString(); - $targetVersionClean = preg_replace('/[^a-zA-Z0-9\.]/', '', $targetVersion); - $backupFile = $backupDir . '/pre-update-v' . $currentVersion . '-to-' . $targetVersionClean . '-' . date('Y-m-d-His') . '.zip'; - - $this->runCommand([ - 'php', 'bin/console', 'partdb:backup', - '--full', - '--overwrite', - $backupFile, - ], 'Create backup', 600); - - return $backupFile; - } - /** * Run a shell command with proper error handling. */ @@ -605,79 +616,27 @@ class UpdateExecutor /** * Get list of backups. + * @deprecated Use BackupManager::getBackups() directly */ public function getBackups(): array { - $backupDir = $this->project_dir . '/' . self::BACKUP_DIR; - - if (!is_dir($backupDir)) { - return []; - } - - $backups = []; - foreach (glob($backupDir . '/*.zip') as $backupFile) { - $backups[] = [ - 'file' => basename($backupFile), - 'path' => $backupFile, - 'date' => filemtime($backupFile), - 'size' => filesize($backupFile), - ]; - } - - // Sort by date descending - usort($backups, fn($a, $b) => $b['date'] <=> $a['date']); - - return $backups; + return $this->backupManager->getBackups(); } /** * Get details about a specific backup file. - * - * @param string $filename The backup filename - * @return array|null Backup details or null if not found + * @deprecated Use BackupManager::getBackupDetails() directly */ public function getBackupDetails(string $filename): ?array { - $backupDir = $this->project_dir . '/' . self::BACKUP_DIR; - $backupPath = $backupDir . '/' . basename($filename); - - if (!file_exists($backupPath) || !str_ends_with($backupPath, '.zip')) { - return null; - } - - // Parse version info from filename: pre-update-v2.5.1-to-v2.5.0-2024-01-30-185400.zip - $info = [ - 'file' => basename($backupPath), - 'path' => $backupPath, - 'date' => filemtime($backupPath), - 'size' => filesize($backupPath), - 'from_version' => null, - 'to_version' => null, - ]; - - if (preg_match('/pre-update-v([\d.]+)-to-v?([\d.]+)-/', $filename, $matches)) { - $info['from_version'] = $matches[1]; - $info['to_version'] = $matches[2]; - } - - // Check what the backup contains by reading the ZIP - try { - $zip = new \ZipArchive(); - if ($zip->open($backupPath) === true) { - $info['contains_database'] = $zip->locateName('database.sql') !== false || $zip->locateName('var/app.db') !== false; - $info['contains_config'] = $zip->locateName('.env.local') !== false || $zip->locateName('config/parameters.yaml') !== false; - $info['contains_attachments'] = $zip->locateName('public/media/') !== false || $zip->locateName('uploads/') !== false; - $zip->close(); - } - } catch (\Exception $e) { - $this->logger->warning('Could not read backup ZIP contents', ['error' => $e->getMessage()]); - } - - return $info; + return $this->backupManager->getBackupDetails($filename); } /** - * Restore from a backup file. + * Restore from a backup file with maintenance mode and cache clearing. + * + * This wraps BackupManager::restoreBackup with additional safety measures + * like lock acquisition, maintenance mode, and cache operations. * * @param string $filename The backup filename to restore * @param bool $restoreDatabase Whether to restore the database @@ -713,18 +672,12 @@ class UpdateExecutor }; try { - // Validate backup file - $backupDir = $this->project_dir . '/' . self::BACKUP_DIR; - $backupPath = $backupDir . '/' . basename($filename); - - if (!file_exists($backupPath)) { - throw new \RuntimeException('Backup file not found: ' . $filename); - } - $stepStart = microtime(true); // Step 1: Acquire lock - $this->acquireLock('restore'); + if (!$this->acquireLock()) { + throw new \RuntimeException('Could not acquire lock. Another operation may be in progress.'); + } $log('lock', 'Acquired exclusive restore lock', true, microtime(true) - $stepStart); // Step 2: Enable maintenance mode @@ -732,65 +685,43 @@ class UpdateExecutor $this->enableMaintenanceMode('Restoring from backup...'); $log('maintenance', 'Enabled maintenance mode', true, microtime(true) - $stepStart); - // Step 3: Extract backup to temp directory + // Step 3: Delegate to BackupManager for core restoration $stepStart = microtime(true); - $tempDir = sys_get_temp_dir() . '/partdb_restore_' . uniqid(); - $this->filesystem->mkdir($tempDir); + $result = $this->backupManager->restoreBackup( + $filename, + $restoreDatabase, + $restoreConfig, + $restoreAttachments, + function ($entry) use ($log) { + // Forward progress from BackupManager + $log($entry['step'], $entry['message'], $entry['success'], $entry['duration'] ?? null); + } + ); - $zip = new \ZipArchive(); - if ($zip->open($backupPath) !== true) { - throw new \RuntimeException('Could not open backup ZIP file'); - } - $zip->extractTo($tempDir); - $zip->close(); - $log('extract', 'Extracted backup to temporary directory', true, microtime(true) - $stepStart); - - // Step 4: Restore database if requested and present - if ($restoreDatabase) { - $stepStart = microtime(true); - $this->restoreDatabaseFromBackup($tempDir); - $log('database', 'Restored database', true, microtime(true) - $stepStart); + if (!$result['success']) { + throw new \RuntimeException($result['error'] ?? 'Restore failed'); } - // Step 5: Restore config files if requested and present - if ($restoreConfig) { - $stepStart = microtime(true); - $this->restoreConfigFromBackup($tempDir); - $log('config', 'Restored configuration files', true, microtime(true) - $stepStart); - } - - // Step 6: Restore attachments if requested and present - if ($restoreAttachments) { - $stepStart = microtime(true); - $this->restoreAttachmentsFromBackup($tempDir); - $log('attachments', 'Restored attachments', true, microtime(true) - $stepStart); - } - - // Step 7: Clean up temp directory - $stepStart = microtime(true); - $this->filesystem->remove($tempDir); - $log('cleanup', 'Cleaned up temporary files', true, microtime(true) - $stepStart); - - // Step 8: Clear cache + // Step 4: Clear cache $stepStart = microtime(true); $this->runCommand(['php', 'bin/console', 'cache:clear', '--no-warmup'], 'Clear cache'); $log('cache_clear', 'Cleared application cache', true, microtime(true) - $stepStart); - // Step 9: Warm up cache + // Step 5: Warm up cache $stepStart = microtime(true); $this->runCommand(['php', 'bin/console', 'cache:warmup'], 'Warm up cache'); $log('cache_warmup', 'Warmed up application cache', true, microtime(true) - $stepStart); - // Step 10: Disable maintenance mode + // Step 6: Disable maintenance mode $stepStart = microtime(true); $this->disableMaintenanceMode(); $log('maintenance_off', 'Disabled maintenance mode', true, microtime(true) - $stepStart); - // Step 11: Release lock + // Step 7: Release lock $this->releaseLock(); $totalDuration = microtime(true) - $startTime; - $log('complete', sprintf('Restore completed successfully in %.1f seconds', $totalDuration), true, microtime(true) - $stepStart); + $log('complete', sprintf('Restore completed successfully in %.1f seconds', $totalDuration), true); return [ 'success' => true, @@ -808,9 +739,6 @@ class UpdateExecutor try { $this->disableMaintenanceMode(); $this->releaseLock(); - if (isset($tempDir) && is_dir($tempDir)) { - $this->filesystem->remove($tempDir); - } } catch (\Throwable $cleanupError) { $this->logger->error('Cleanup after failed restore also failed', ['error' => $cleanupError->getMessage()]); } @@ -823,137 +751,6 @@ class UpdateExecutor } } - /** - * Restore database from backup. - */ - private function restoreDatabaseFromBackup(string $tempDir): void - { - // Check for SQL dump (MySQL/PostgreSQL) - $sqlFile = $tempDir . '/database.sql'; - if (file_exists($sqlFile)) { - // Import SQL using mysql/psql command directly - // First, get database connection params from Doctrine - $connection = $this->entityManager->getConnection(); - $params = $connection->getParams(); - $platform = $connection->getDatabasePlatform(); - - if ($platform instanceof \Doctrine\DBAL\Platforms\AbstractMySQLPlatform) { - // Use mysql command to import - need to use shell to handle input redirection - $mysqlCmd = 'mysql'; - if (isset($params['host'])) { - $mysqlCmd .= ' -h ' . escapeshellarg($params['host']); - } - if (isset($params['port'])) { - $mysqlCmd .= ' -P ' . escapeshellarg((string)$params['port']); - } - if (isset($params['user'])) { - $mysqlCmd .= ' -u ' . escapeshellarg($params['user']); - } - if (isset($params['password']) && $params['password']) { - $mysqlCmd .= ' -p' . escapeshellarg($params['password']); - } - if (isset($params['dbname'])) { - $mysqlCmd .= ' ' . escapeshellarg($params['dbname']); - } - $mysqlCmd .= ' < ' . escapeshellarg($sqlFile); - - // Execute using shell - $process = Process::fromShellCommandline($mysqlCmd, $this->project_dir, null, null, 300); - $process->run(); - - if (!$process->isSuccessful()) { - throw new \RuntimeException('MySQL import failed: ' . $process->getErrorOutput()); - } - } elseif ($platform instanceof \Doctrine\DBAL\Platforms\PostgreSQLPlatform) { - // Use psql command to import - $psqlCmd = 'psql'; - if (isset($params['host'])) { - $psqlCmd .= ' -h ' . escapeshellarg($params['host']); - } - if (isset($params['port'])) { - $psqlCmd .= ' -p ' . escapeshellarg((string)$params['port']); - } - if (isset($params['user'])) { - $psqlCmd .= ' -U ' . escapeshellarg($params['user']); - } - if (isset($params['dbname'])) { - $psqlCmd .= ' -d ' . escapeshellarg($params['dbname']); - } - $psqlCmd .= ' -f ' . escapeshellarg($sqlFile); - - // Set PGPASSWORD environment variable if password is provided - $env = null; - if (isset($params['password']) && $params['password']) { - $env = ['PGPASSWORD' => $params['password']]; - } - - // Execute using shell - $process = Process::fromShellCommandline($psqlCmd, $this->project_dir, $env, null, 300); - $process->run(); - - if (!$process->isSuccessful()) { - throw new \RuntimeException('PostgreSQL import failed: ' . $process->getErrorOutput()); - } - } else { - throw new \RuntimeException('Unsupported database platform for restore'); - } - - return; - } - - // Check for SQLite database file - $sqliteFile = $tempDir . '/var/app.db'; - if (file_exists($sqliteFile)) { - $targetDb = $this->project_dir . '/var/app.db'; - $this->filesystem->copy($sqliteFile, $targetDb, true); - return; - } - - $this->logger->warning('No database found in backup'); - } - - /** - * Restore config files from backup. - */ - private function restoreConfigFromBackup(string $tempDir): void - { - // Restore .env.local - $envLocal = $tempDir . '/.env.local'; - if (file_exists($envLocal)) { - $this->filesystem->copy($envLocal, $this->project_dir . '/.env.local', true); - } - - // Restore config/parameters.yaml - $parametersYaml = $tempDir . '/config/parameters.yaml'; - if (file_exists($parametersYaml)) { - $this->filesystem->copy($parametersYaml, $this->project_dir . '/config/parameters.yaml', true); - } - - // Restore config/banner.md - $bannerMd = $tempDir . '/config/banner.md'; - if (file_exists($bannerMd)) { - $this->filesystem->copy($bannerMd, $this->project_dir . '/config/banner.md', true); - } - } - - /** - * Restore attachments from backup. - */ - private function restoreAttachmentsFromBackup(string $tempDir): void - { - // Restore public/media - $publicMedia = $tempDir . '/public/media'; - if (is_dir($publicMedia)) { - $this->filesystem->mirror($publicMedia, $this->project_dir . '/public/media', null, ['override' => true]); - } - - // Restore uploads - $uploads = $tempDir . '/uploads'; - if (is_dir($uploads)) { - $this->filesystem->mirror($uploads, $this->project_dir . '/uploads', null, ['override' => true]); - } - } - /** * Get the path to the progress file. */ @@ -1048,7 +845,7 @@ class UpdateExecutor 'create_backup' => $createBackup, 'started_at' => (new \DateTime())->format('c'), 'current_step' => 0, - 'total_steps' => 12, + 'total_steps' => 14, 'step_name' => 'initializing', 'step_message' => 'Starting update process...', 'steps' => [], diff --git a/templates/admin/update_manager/index.html.twig b/templates/admin/update_manager/index.html.twig index 85b3ec1f..24dfcc96 100644 --- a/templates/admin/update_manager/index.html.twig +++ b/templates/admin/update_manager/index.html.twig @@ -34,6 +34,23 @@ {% endif %} + {# Web Updates Disabled Warning #} + {% if web_updates_disabled %} + + {% endif %} + + {# Backup Restore Disabled Warning #} + {% if backup_restore_disabled %} + + {% endif %} +
{# Current Version Card #}
@@ -132,7 +149,7 @@ {% endif %}
- {% if status.update_available and status.can_auto_update and validation.valid %} + {% if status.update_available and status.can_auto_update and validation.valid and not web_updates_disabled %}
- {% if release.version != status.current_version and status.can_auto_update and validation.valid %} + {% if release.version != status.current_version and status.can_auto_update and validation.valid and not web_updates_disabled %} - {% if status.can_auto_update and validation.valid %} + {% if status.can_auto_update and validation.valid and not backup_restore_disabled %} WARNING: This will overwrite your current database with the backup data. This action cannot be undone! Make sure you have a current backup before proceeding. + + + update_manager.web_updates_disabled + Web-based updates are disabled + + + + + update_manager.web_updates_disabled_hint + Web-based updates have been disabled by the server administrator. Please use the CLI command "php bin/console partdb:update" to perform updates. + + + + + update_manager.backup_restore_disabled + Backup restore is disabled by server configuration. + + settings.ips.conrad From 47295bda29468213abfb8f096d54f230eb55bc29 Mon Sep 17 00:00:00 2001 From: Sebastian Almberg <83243306+Sebbeben@users.noreply.github.com> Date: Sun, 1 Feb 2026 19:28:15 +0100 Subject: [PATCH 040/172] Add unit tests for BackupManager and UpdateExecutor Tests cover: - BackupManager: backup directory, listing, details parsing - UpdateExecutor: lock/unlock, maintenance mode, validation, progress --- tests/Services/System/BackupManagerTest.php | 102 +++++++++++ tests/Services/System/UpdateExecutorTest.php | 173 +++++++++++++++++++ 2 files changed, 275 insertions(+) create mode 100644 tests/Services/System/BackupManagerTest.php create mode 100644 tests/Services/System/UpdateExecutorTest.php diff --git a/tests/Services/System/BackupManagerTest.php b/tests/Services/System/BackupManagerTest.php new file mode 100644 index 00000000..145b039d --- /dev/null +++ b/tests/Services/System/BackupManagerTest.php @@ -0,0 +1,102 @@ +. + */ + +declare(strict_types=1); + +namespace App\Tests\Services\System; + +use App\Services\System\BackupManager; +use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; + +class BackupManagerTest extends KernelTestCase +{ + private ?BackupManager $backupManager = null; + + protected function setUp(): void + { + self::bootKernel(); + $this->backupManager = self::getContainer()->get(BackupManager::class); + } + + public function testGetBackupDir(): void + { + $backupDir = $this->backupManager->getBackupDir(); + + // Should end with var/backups + $this->assertStringEndsWith('var/backups', $backupDir); + } + + public function testGetBackupsReturnsEmptyArrayWhenNoBackups(): void + { + // If there are no backups (or the directory doesn't exist), should return empty array + $backups = $this->backupManager->getBackups(); + + $this->assertIsArray($backups); + } + + public function testGetBackupDetailsReturnsNullForNonExistentFile(): void + { + $details = $this->backupManager->getBackupDetails('non-existent-backup.zip'); + + $this->assertNull($details); + } + + public function testGetBackupDetailsReturnsNullForNonZipFile(): void + { + $details = $this->backupManager->getBackupDetails('not-a-zip.txt'); + + $this->assertNull($details); + } + + /** + * Test that version parsing from filename works correctly. + * This tests the regex pattern used in getBackupDetails. + */ + public function testVersionParsingFromFilename(): void + { + // Test the regex pattern directly + $filename = 'pre-update-v2.5.1-to-v2.6.0-2024-01-30-185400.zip'; + $matches = []; + + $result = preg_match('/pre-update-v([\d.]+)-to-v?([\d.]+)-/', $filename, $matches); + + $this->assertEquals(1, $result); + $this->assertEquals('2.5.1', $matches[1]); + $this->assertEquals('2.6.0', $matches[2]); + } + + /** + * Test version parsing with different filename formats. + */ + public function testVersionParsingVariants(): void + { + // Without 'v' prefix on target version + $filename1 = 'pre-update-v1.0.0-to-2.0.0-2024-01-30-185400.zip'; + preg_match('/pre-update-v([\d.]+)-to-v?([\d.]+)-/', $filename1, $matches1); + $this->assertEquals('1.0.0', $matches1[1]); + $this->assertEquals('2.0.0', $matches1[2]); + + // With 'v' prefix on target version + $filename2 = 'pre-update-v1.0.0-to-v2.0.0-2024-01-30-185400.zip'; + preg_match('/pre-update-v([\d.]+)-to-v?([\d.]+)-/', $filename2, $matches2); + $this->assertEquals('1.0.0', $matches2[1]); + $this->assertEquals('2.0.0', $matches2[2]); + } +} diff --git a/tests/Services/System/UpdateExecutorTest.php b/tests/Services/System/UpdateExecutorTest.php new file mode 100644 index 00000000..9b832f6c --- /dev/null +++ b/tests/Services/System/UpdateExecutorTest.php @@ -0,0 +1,173 @@ +. + */ + +declare(strict_types=1); + +namespace App\Tests\Services\System; + +use App\Services\System\UpdateExecutor; +use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; + +class UpdateExecutorTest extends KernelTestCase +{ + private ?UpdateExecutor $updateExecutor = null; + + protected function setUp(): void + { + self::bootKernel(); + $this->updateExecutor = self::getContainer()->get(UpdateExecutor::class); + } + + public function testIsLockedReturnsFalseWhenNoLockFile(): void + { + // Initially there should be no lock + // Note: This test assumes no concurrent update is running + $isLocked = $this->updateExecutor->isLocked(); + + $this->assertIsBool($isLocked); + } + + public function testIsMaintenanceModeReturnsBool(): void + { + $isMaintenanceMode = $this->updateExecutor->isMaintenanceMode(); + + $this->assertIsBool($isMaintenanceMode); + } + + public function testGetLockInfoReturnsNullOrArray(): void + { + $lockInfo = $this->updateExecutor->getLockInfo(); + + // Should be null when not locked, or array when locked + $this->assertTrue($lockInfo === null || is_array($lockInfo)); + } + + public function testGetMaintenanceInfoReturnsNullOrArray(): void + { + $maintenanceInfo = $this->updateExecutor->getMaintenanceInfo(); + + // Should be null when not in maintenance, or array when in maintenance + $this->assertTrue($maintenanceInfo === null || is_array($maintenanceInfo)); + } + + public function testGetUpdateLogsReturnsArray(): void + { + $logs = $this->updateExecutor->getUpdateLogs(); + + $this->assertIsArray($logs); + } + + public function testGetBackupsReturnsArray(): void + { + $backups = $this->updateExecutor->getBackups(); + + $this->assertIsArray($backups); + } + + public function testValidateUpdatePreconditionsReturnsProperStructure(): void + { + $validation = $this->updateExecutor->validateUpdatePreconditions(); + + $this->assertIsArray($validation); + $this->assertArrayHasKey('valid', $validation); + $this->assertArrayHasKey('errors', $validation); + $this->assertIsBool($validation['valid']); + $this->assertIsArray($validation['errors']); + } + + public function testGetProgressFilePath(): void + { + $progressPath = $this->updateExecutor->getProgressFilePath(); + + $this->assertIsString($progressPath); + $this->assertStringEndsWith('var/update_progress.json', $progressPath); + } + + public function testGetProgressReturnsNullOrArray(): void + { + $progress = $this->updateExecutor->getProgress(); + + // Should be null when no progress file, or array when exists + $this->assertTrue($progress === null || is_array($progress)); + } + + public function testIsUpdateRunningReturnsBool(): void + { + $isRunning = $this->updateExecutor->isUpdateRunning(); + + $this->assertIsBool($isRunning); + } + + public function testAcquireAndReleaseLock(): void + { + // First, ensure no lock exists + if ($this->updateExecutor->isLocked()) { + $this->updateExecutor->releaseLock(); + } + + // Acquire lock + $acquired = $this->updateExecutor->acquireLock(); + $this->assertTrue($acquired); + + // Should be locked now + $this->assertTrue($this->updateExecutor->isLocked()); + + // Lock info should exist + $lockInfo = $this->updateExecutor->getLockInfo(); + $this->assertIsArray($lockInfo); + $this->assertArrayHasKey('started_at', $lockInfo); + + // Trying to acquire again should fail + $acquiredAgain = $this->updateExecutor->acquireLock(); + $this->assertFalse($acquiredAgain); + + // Release lock + $this->updateExecutor->releaseLock(); + + // Should no longer be locked + $this->assertFalse($this->updateExecutor->isLocked()); + } + + public function testEnableAndDisableMaintenanceMode(): void + { + // First, ensure maintenance mode is off + if ($this->updateExecutor->isMaintenanceMode()) { + $this->updateExecutor->disableMaintenanceMode(); + } + + // Enable maintenance mode + $this->updateExecutor->enableMaintenanceMode('Test maintenance'); + + // Should be in maintenance mode now + $this->assertTrue($this->updateExecutor->isMaintenanceMode()); + + // Maintenance info should exist + $maintenanceInfo = $this->updateExecutor->getMaintenanceInfo(); + $this->assertIsArray($maintenanceInfo); + $this->assertArrayHasKey('reason', $maintenanceInfo); + $this->assertEquals('Test maintenance', $maintenanceInfo['reason']); + + // Disable maintenance mode + $this->updateExecutor->disableMaintenanceMode(); + + // Should no longer be in maintenance mode + $this->assertFalse($this->updateExecutor->isMaintenanceMode()); + } +} From 10acc2e1300cad57766ba82c7e0ad9042817b232 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 1 Feb 2026 20:49:50 +0100 Subject: [PATCH 041/172] Added logic to delegate the info retrieval logic to another provider when giving an URL --- .../InfoProviderSystem/ProviderRegistry.php | 38 +++++++++++++++- .../Providers/GenericWebProvider.php | 44 ++++++++++++++++++- .../Providers/PollinProvider.php | 37 +++++++++++++--- .../URLHandlerInfoProviderInterface.php | 43 ++++++++++++++++++ .../ProviderRegistryTest.php | 18 +++++++- 5 files changed, 169 insertions(+), 11 deletions(-) create mode 100644 src/Services/InfoProviderSystem/Providers/URLHandlerInfoProviderInterface.php diff --git a/src/Services/InfoProviderSystem/ProviderRegistry.php b/src/Services/InfoProviderSystem/ProviderRegistry.php index f6c398d2..18b8a37a 100644 --- a/src/Services/InfoProviderSystem/ProviderRegistry.php +++ b/src/Services/InfoProviderSystem/ProviderRegistry.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace App\Services\InfoProviderSystem; use App\Services\InfoProviderSystem\Providers\InfoProviderInterface; +use App\Services\InfoProviderSystem\Providers\URLHandlerInfoProviderInterface; /** * This class keeps track of all registered info providers and allows to find them by their key @@ -47,6 +48,8 @@ final class ProviderRegistry */ private array $providers_disabled = []; + private array $providers_by_domain = []; + /** * @var bool Whether the registry has been initialized */ @@ -78,6 +81,14 @@ final class ProviderRegistry $this->providers_by_name[$key] = $provider; if ($provider->isActive()) { $this->providers_active[$key] = $provider; + if ($provider instanceof URLHandlerInfoProviderInterface) { + foreach ($provider->getHandledDomains() as $domain) { + if (isset($this->providers_by_domain[$domain])) { + throw new \LogicException("Domain $domain is already handled by another provider"); + } + $this->providers_by_domain[$domain] = $provider; + } + } } else { $this->providers_disabled[$key] = $provider; } @@ -139,4 +150,29 @@ final class ProviderRegistry return $this->providers_disabled; } -} \ No newline at end of file + + public function getProviderHandlingDomain(string $domain): (InfoProviderInterface&URLHandlerInfoProviderInterface)|null + { + if (!$this->initialized) { + $this->initStructures(); + } + + //Check if the domain is directly existing: + if (isset($this->providers_by_domain[$domain])) { + return $this->providers_by_domain[$domain]; + } + + //Otherwise check for subdomains: + $parts = explode('.', $domain); + while (count($parts) > 2) { + array_shift($parts); + $check_domain = implode('.', $parts); + if (isset($this->providers_by_domain[$check_domain])) { + return $this->providers_by_domain[$check_domain]; + } + } + + //If we found nothing, return null + return null; + } +} diff --git a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php index 4b73ad6e..bca3d7cb 100644 --- a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php +++ b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php @@ -28,8 +28,9 @@ use App\Services\InfoProviderSystem\DTOs\ParameterDTO; use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; use App\Services\InfoProviderSystem\DTOs\PriceDTO; use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO; +use App\Services\InfoProviderSystem\PartInfoRetriever; +use App\Services\InfoProviderSystem\ProviderRegistry; use App\Settings\InfoProviderSystem\GenericWebProviderSettings; -use PhpOffice\PhpSpreadsheet\Calculation\Financial\Securities\Price; use Symfony\Component\DomCrawler\Crawler; use Symfony\Contracts\HttpClient\HttpClientInterface; @@ -40,7 +41,9 @@ class GenericWebProvider implements InfoProviderInterface private readonly HttpClientInterface $httpClient; - public function __construct(HttpClientInterface $httpClient, private readonly GenericWebProviderSettings $settings) + public function __construct(HttpClientInterface $httpClient, private readonly GenericWebProviderSettings $settings, + private readonly ProviderRegistry $providerRegistry, private readonly PartInfoRetriever $infoRetriever, + ) { $this->httpClient = $httpClient->withOptions( [ @@ -228,6 +231,37 @@ class GenericWebProvider implements InfoProviderInterface return null; } + /** + * Delegates the URL to another provider if possible, otherwise return null + * @param string $url + * @return PartDetailDTO|null + */ + private function delegateToOtherProvider(string $url): ?PartDetailDTO + { + //Extract domain from url: + $host = parse_url($url, PHP_URL_HOST); + if ($host === false || $host === null) { + return null; + } + + $provider = $this->providerRegistry->getProviderHandlingDomain($host); + + if ($provider !== null && $provider->isActive() && $provider->getProviderKey() !== $this->getProviderKey()) { + try { + $id = $provider->getIDFromURL($url); + if ($id !== null) { + return $this->infoRetriever->getDetails($provider->getProviderKey(), $id); + } + return null; + } catch (ProviderIDNotSupportedException $e) { + //Ignore and continue + return null; + } + } + + return null; + } + public function getDetails(string $id): PartDetailDTO { //Add scheme if missing @@ -247,6 +281,12 @@ class GenericWebProvider implements InfoProviderInterface throw new ProviderIDNotSupportedException("The given ID is not a valid URL: ".$id); } + //Before loading the page, try to delegate to another provider + $delegatedPart = $this->delegateToOtherProvider($url); + if ($delegatedPart !== null) { + return $delegatedPart; + } + //Try to get the webpage content $response = $this->httpClient->request('GET', $url); $content = $response->getContent(); diff --git a/src/Services/InfoProviderSystem/Providers/PollinProvider.php b/src/Services/InfoProviderSystem/Providers/PollinProvider.php index 2c5d68a3..6ac969d3 100644 --- a/src/Services/InfoProviderSystem/Providers/PollinProvider.php +++ b/src/Services/InfoProviderSystem/Providers/PollinProvider.php @@ -36,7 +36,7 @@ use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\DomCrawler\Crawler; use Symfony\Contracts\HttpClient\HttpClientInterface; -class PollinProvider implements InfoProviderInterface +class PollinProvider implements InfoProviderInterface, URLHandlerInfoProviderInterface { public function __construct(private readonly HttpClientInterface $client, @@ -141,11 +141,16 @@ class PollinProvider implements InfoProviderInterface $orderId = trim($dom->filter('span[itemprop="sku"]')->text()); //Text is important here //Calculate the mass - $massStr = $dom->filter('meta[itemprop="weight"]')->attr('content'); - //Remove the unit - $massStr = str_replace('kg', '', $massStr); - //Convert to float and convert to grams - $mass = (float) $massStr * 1000; + $massDom = $dom->filter('meta[itemprop="weight"]'); + if ($massDom->count() > 0) { + $massStr = $massDom->attr('content'); + $massStr = str_replace('kg', '', $massStr); + //Convert to float and convert to grams + $mass = (float) $massStr * 1000; + } else { + $mass = null; + } + //Parse purchase info $purchaseInfo = new PurchaseInfoDTO('Pollin', $orderId, $this->parsePrices($dom), $productPageUrl); @@ -248,4 +253,22 @@ class PollinProvider implements InfoProviderInterface ProviderCapabilities::DATASHEET ]; } -} \ No newline at end of file + + public function getHandledDomains(): array + { + return ['pollin.de']; + } + + public function getIDFromURL(string $url): ?string + { + //URL like: https://www.pollin.de/p/shelly-bluetooth-schalter-und-dimmer-blu-zb-button-plug-play-mocha-592325 + + //Extract the 6-digit number at the end of the URL + $matches = []; + if (preg_match('/-(\d{6})(?:\/|$)/', $url, $matches)) { + return $matches[1]; + } + + return null; + } +} diff --git a/src/Services/InfoProviderSystem/Providers/URLHandlerInfoProviderInterface.php b/src/Services/InfoProviderSystem/Providers/URLHandlerInfoProviderInterface.php new file mode 100644 index 00000000..c0506648 --- /dev/null +++ b/src/Services/InfoProviderSystem/Providers/URLHandlerInfoProviderInterface.php @@ -0,0 +1,43 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Services\InfoProviderSystem\Providers; + +/** + * If an interface + */ +interface URLHandlerInfoProviderInterface +{ + /** + * Returns a list of supported domains (e.g. ["digikey.com"]) + * @return array An array of supported domains + */ + public function getHandledDomains(): array; + + /** + * Extracts the unique ID of a part from a given URL. It is okay if this is not a canonical ID, as long as it can be used to uniquely identify the part within this provider. + * @param string $url The URL to extract the ID from + * @return string|null The extracted ID, or null if the URL is not valid for this provider + */ + public function getIDFromURL(string $url): ?string; +} diff --git a/tests/Services/InfoProviderSystem/ProviderRegistryTest.php b/tests/Services/InfoProviderSystem/ProviderRegistryTest.php index 9026c5bf..48a1847f 100644 --- a/tests/Services/InfoProviderSystem/ProviderRegistryTest.php +++ b/tests/Services/InfoProviderSystem/ProviderRegistryTest.php @@ -24,6 +24,7 @@ namespace App\Tests\Services\InfoProviderSystem; use App\Services\InfoProviderSystem\ProviderRegistry; use App\Services\InfoProviderSystem\Providers\InfoProviderInterface; +use App\Services\InfoProviderSystem\Providers\URLHandlerInfoProviderInterface; use PHPUnit\Framework\TestCase; class ProviderRegistryTest extends TestCase @@ -44,9 +45,10 @@ class ProviderRegistryTest extends TestCase public function getMockProvider(string $key, bool $active = true): InfoProviderInterface { - $mock = $this->createMock(InfoProviderInterface::class); + $mock = $this->createMockForIntersectionOfInterfaces([InfoProviderInterface::class, URLHandlerInfoProviderInterface::class]); $mock->method('getProviderKey')->willReturn($key); $mock->method('isActive')->willReturn($active); + $mock->method('getHandledDomains')->willReturn(["$key.com", "test.$key.de"]); return $mock; } @@ -109,4 +111,18 @@ class ProviderRegistryTest extends TestCase $registry->getProviders(); } + + public function testGetProviderHandlingDomain(): void + { + $registry = new ProviderRegistry($this->providers); + + $this->assertEquals($this->providers[0], $registry->getProviderHandlingDomain('test1.com')); + $this->assertEquals($this->providers[0], $registry->getProviderHandlingDomain('www.test1.com')); //Subdomain should also work + + $this->assertEquals( + $this->providers[1], + $registry->getProviderHandlingDomain('test.test2.de') + ); + } + } From 24f0f0d23c325a23ab4d7d000b90e36e1fd80975 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 1 Feb 2026 21:18:06 +0100 Subject: [PATCH 042/172] Added URL handling to a few more existing info providers --- .../Providers/ConradProvider.php | 25 ++++++++- .../Providers/Element14Provider.php | 19 ++++++- .../Providers/GenericWebProvider.php | 51 +++++++++++++------ .../Providers/LCSCProvider.php | 19 ++++++- .../Providers/TMEProvider.php | 20 +++++++- 5 files changed, 115 insertions(+), 19 deletions(-) diff --git a/src/Services/InfoProviderSystem/Providers/ConradProvider.php b/src/Services/InfoProviderSystem/Providers/ConradProvider.php index 6212f148..32434dee 100644 --- a/src/Services/InfoProviderSystem/Providers/ConradProvider.php +++ b/src/Services/InfoProviderSystem/Providers/ConradProvider.php @@ -30,9 +30,10 @@ use App\Services\InfoProviderSystem\DTOs\PriceDTO; use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO; use App\Services\InfoProviderSystem\DTOs\SearchResultDTO; use App\Settings\InfoProviderSystem\ConradSettings; +use App\Settings\InfoProviderSystem\ConradShopIDs; use Symfony\Contracts\HttpClient\HttpClientInterface; -readonly class ConradProvider implements InfoProviderInterface +readonly class ConradProvider implements InfoProviderInterface, URLHandlerInfoProviderInterface { private const SEARCH_ENDPOINT = '/search/1/v3/facetSearch'; @@ -317,4 +318,26 @@ readonly class ConradProvider implements InfoProviderInterface ProviderCapabilities::PRICE, ]; } + + public function getHandledDomains(): array + { + $domains = []; + foreach (ConradShopIDs::cases() as $shopID) { + $domains[] = $shopID->getDomain(); + } + return array_unique($domains); + } + + public function getIDFromURL(string $url): ?string + { + //Input: https://www.conrad.de/de/p/apple-iphone-air-wolkenweiss-256-gb-eek-a-a-g-16-5-cm-6-5-zoll-3475299.html + //The numbers before the optional .html are the product ID + + $matches = []; + if (preg_match('/-(\d+)(\.html)?$/', $url, $matches) === 1) { + return $matches[1]; + } + + return null; + } } diff --git a/src/Services/InfoProviderSystem/Providers/Element14Provider.php b/src/Services/InfoProviderSystem/Providers/Element14Provider.php index 27dfb908..9ae45728 100644 --- a/src/Services/InfoProviderSystem/Providers/Element14Provider.php +++ b/src/Services/InfoProviderSystem/Providers/Element14Provider.php @@ -33,7 +33,7 @@ use App\Settings\InfoProviderSystem\Element14Settings; use Composer\CaBundle\CaBundle; use Symfony\Contracts\HttpClient\HttpClientInterface; -class Element14Provider implements InfoProviderInterface +class Element14Provider implements InfoProviderInterface, URLHandlerInfoProviderInterface { private const ENDPOINT_URL = 'https://api.element14.com/catalog/products'; @@ -309,4 +309,21 @@ class Element14Provider implements InfoProviderInterface ProviderCapabilities::DATASHEET, ]; } + + public function getHandledDomains(): array + { + return ['element14.com', 'farnell.com', 'newark.com']; + } + + public function getIDFromURL(string $url): ?string + { + //Input URL example: https://de.farnell.com/on-semiconductor/bc547b/transistor-npn-to-92/dp/1017673 + //The digits after the /dp/ are the part ID + $matches = []; + if (preg_match('#/dp/(\d+)#', $url, $matches) === 1) { + return $matches[1]; + } + + return null; + } } diff --git a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php index bca3d7cb..d06a6105 100644 --- a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php +++ b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php @@ -28,6 +28,7 @@ use App\Services\InfoProviderSystem\DTOs\ParameterDTO; use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; use App\Services\InfoProviderSystem\DTOs\PriceDTO; use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO; +use App\Services\InfoProviderSystem\DTOs\SearchResultDTO; use App\Services\InfoProviderSystem\PartInfoRetriever; use App\Services\InfoProviderSystem\ProviderRegistry; use App\Settings\InfoProviderSystem\GenericWebProviderSettings; @@ -78,9 +79,17 @@ class GenericWebProvider implements InfoProviderInterface public function searchByKeyword(string $keyword): array { + $url = $this->fixAndValidateURL($keyword); + + //Before loading the page, try to delegate to another provider + $delegatedPart = $this->delegateToOtherProvider($url); + if ($delegatedPart !== null) { + return [$delegatedPart]; + } + try { return [ - $this->getDetails($keyword) + $this->getDetails($keyword, false) //We already tried delegation ]; } catch (ProviderIDNotSupportedException $e) { return []; } @@ -234,9 +243,9 @@ class GenericWebProvider implements InfoProviderInterface /** * Delegates the URL to another provider if possible, otherwise return null * @param string $url - * @return PartDetailDTO|null + * @return SearchResultDTO|null */ - private function delegateToOtherProvider(string $url): ?PartDetailDTO + private function delegateToOtherProvider(string $url): ?SearchResultDTO { //Extract domain from url: $host = parse_url($url, PHP_URL_HOST); @@ -250,7 +259,10 @@ class GenericWebProvider implements InfoProviderInterface try { $id = $provider->getIDFromURL($url); if ($id !== null) { - return $this->infoRetriever->getDetails($provider->getProviderKey(), $id); + $results = $this->infoRetriever->searchByKeyword($id, [$provider]); + if (count($results) > 0) { + return $results[0]; + } } return null; } catch (ProviderIDNotSupportedException $e) { @@ -262,29 +274,38 @@ class GenericWebProvider implements InfoProviderInterface return null; } - public function getDetails(string $id): PartDetailDTO + private function fixAndValidateURL(string $url): string { + $originalUrl = $url; + //Add scheme if missing - if (!preg_match('/^https?:\/\//', $id)) { + if (!preg_match('/^https?:\/\//', $url)) { //Remove any leading slashes - $id = ltrim($id, '/'); + $url = ltrim($url, '/'); - $id = 'https://'.$id; + $url = 'https://'.$url; } - $url = $id; - //If this is not a valid URL with host, domain and path, throw an exception if (filter_var($url, FILTER_VALIDATE_URL) === false || parse_url($url, PHP_URL_HOST) === null || parse_url($url, PHP_URL_PATH) === null) { - throw new ProviderIDNotSupportedException("The given ID is not a valid URL: ".$id); + throw new ProviderIDNotSupportedException("The given ID is not a valid URL: ".$originalUrl); } - //Before loading the page, try to delegate to another provider - $delegatedPart = $this->delegateToOtherProvider($url); - if ($delegatedPart !== null) { - return $delegatedPart; + return $url; + } + + public function getDetails(string $id, bool $check_for_delegation = true): PartDetailDTO + { + $url = $this->fixAndValidateURL($id); + + if ($check_for_delegation) { + //Before loading the page, try to delegate to another provider + $delegatedPart = $this->delegateToOtherProvider($url); + if ($delegatedPart !== null) { + return $delegatedPart; + } } //Try to get the webpage content diff --git a/src/Services/InfoProviderSystem/Providers/LCSCProvider.php b/src/Services/InfoProviderSystem/Providers/LCSCProvider.php index ede34eb8..1b807eff 100755 --- a/src/Services/InfoProviderSystem/Providers/LCSCProvider.php +++ b/src/Services/InfoProviderSystem/Providers/LCSCProvider.php @@ -33,7 +33,7 @@ use App\Settings\InfoProviderSystem\LCSCSettings; use Symfony\Component\HttpFoundation\Cookie; use Symfony\Contracts\HttpClient\HttpClientInterface; -class LCSCProvider implements BatchInfoProviderInterface +class LCSCProvider implements BatchInfoProviderInterface, URLHandlerInfoProviderInterface { private const ENDPOINT_URL = 'https://wmsc.lcsc.com/ftps/wm'; @@ -452,4 +452,21 @@ class LCSCProvider implements BatchInfoProviderInterface ProviderCapabilities::FOOTPRINT, ]; } + + public function getHandledDomains(): array + { + return ['lcsc.com']; + } + + public function getIDFromURL(string $url): ?string + { + //Input example: https://www.lcsc.com/product-detail/C258144.html?s_z=n_BC547 + //The part between the "C" and the ".html" is the unique ID + + $matches = []; + if (preg_match("#/product-detail/(\w+)\.html#", $url, $matches) > 0) { + return $matches[1]; + } + return null; + } } diff --git a/src/Services/InfoProviderSystem/Providers/TMEProvider.php b/src/Services/InfoProviderSystem/Providers/TMEProvider.php index 9bc73f09..938bc7b3 100644 --- a/src/Services/InfoProviderSystem/Providers/TMEProvider.php +++ b/src/Services/InfoProviderSystem/Providers/TMEProvider.php @@ -32,7 +32,7 @@ use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO; use App\Services\InfoProviderSystem\DTOs\SearchResultDTO; use App\Settings\InfoProviderSystem\TMESettings; -class TMEProvider implements InfoProviderInterface +class TMEProvider implements InfoProviderInterface, URLHandlerInfoProviderInterface { private const VENDOR_NAME = 'TME'; @@ -296,4 +296,22 @@ class TMEProvider implements InfoProviderInterface ProviderCapabilities::PRICE, ]; } + + public function getHandledDomains(): array + { + return ['tme.eu']; + } + + public function getIDFromURL(string $url): ?string + { + //Input: https://www.tme.eu/de/details/fi321_se/kuhler/alutronic/ + //The ID is the part after the details segment and before the next slash + + $matches = []; + if (preg_match('#/details/([^/]+)/#', $url, $matches) === 1) { + return $matches[1]; + } + + return null; + } } From a1396c6696f4a9b6421a400b529a42176b3ea9cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 1 Feb 2026 21:19:11 +0100 Subject: [PATCH 043/172] Fixed delegation logic for PartDetailDTO --- .../InfoProviderSystem/Providers/GenericWebProvider.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php index d06a6105..66d45707 100644 --- a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php +++ b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php @@ -224,6 +224,12 @@ class GenericWebProvider implements InfoProviderInterface return json_decode($json, true, 512, JSON_THROW_ON_ERROR); } + /** + * Gets the content of a meta tag by its name or property attribute, or null if not found + * @param Crawler $dom + * @param string $name + * @return string|null + */ private function getMetaContent(Crawler $dom, string $name): ?string { $meta = $dom->filter('meta[property="'.$name.'"]'); @@ -304,7 +310,7 @@ class GenericWebProvider implements InfoProviderInterface //Before loading the page, try to delegate to another provider $delegatedPart = $this->delegateToOtherProvider($url); if ($delegatedPart !== null) { - return $delegatedPart; + return $this->infoRetriever->getDetailsForSearchResult($delegatedPart); } } From 0826acbd5282fad8361117660a1f762060aa690b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 1 Feb 2026 23:11:56 +0100 Subject: [PATCH 044/172] Fixed phpunit tests --- .../LabelSystem/BarcodeScanner/BarcodeRedirectorTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Services/LabelSystem/BarcodeScanner/BarcodeRedirectorTest.php b/tests/Services/LabelSystem/BarcodeScanner/BarcodeRedirectorTest.php index c40e141d..c5bdb02d 100644 --- a/tests/Services/LabelSystem/BarcodeScanner/BarcodeRedirectorTest.php +++ b/tests/Services/LabelSystem/BarcodeScanner/BarcodeRedirectorTest.php @@ -64,7 +64,7 @@ final class BarcodeRedirectorTest extends KernelTestCase { yield [new LocalBarcodeScanResult(LabelSupportedElement::PART, 1, BarcodeSourceType::INTERNAL), '/en/part/1']; //Part lot redirects to Part info page (Part lot 1 is associated with part 3) - yield [new LocalBarcodeScanResult(LabelSupportedElement::PART_LOT, 1, BarcodeSourceType::INTERNAL), '/en/part/3']; + yield [new LocalBarcodeScanResult(LabelSupportedElement::PART_LOT, 1, BarcodeSourceType::INTERNAL), '/en/part/3?highlightLot=1']; yield [new LocalBarcodeScanResult(LabelSupportedElement::STORELOCATION, 1, BarcodeSourceType::INTERNAL), '/en/store_location/1/parts']; } From 7e486a93c9b6e7cd25ce93bf5b198330e9dfc383 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 2 Feb 2026 17:02:01 +0100 Subject: [PATCH 045/172] Added missing phpdoc structure definitions --- src/Services/System/UpdateChecker.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Services/System/UpdateChecker.php b/src/Services/System/UpdateChecker.php index a881f614..49a132ee 100644 --- a/src/Services/System/UpdateChecker.php +++ b/src/Services/System/UpdateChecker.php @@ -72,6 +72,7 @@ class UpdateChecker /** * Get Git repository information. + * @return array{branch: ?string, commit: ?string, has_local_changes: bool, commits_behind: int, is_git_install: bool} */ public function getGitInfo(): array { @@ -227,6 +228,7 @@ class UpdateChecker /** * Get the latest stable release. + * @return array{version: string, tag: string, name: string, url: string, published_at: string, body: string, prerelease: bool, assets: array}|null */ public function getLatestRelease(bool $includePrerelease = false): ?array { @@ -264,6 +266,8 @@ class UpdateChecker /** * Get comprehensive update status. + * @return array{current_version: string, latest_version: ?string, latest_tag: ?string, update_available: bool, release_notes: ?string, release_url: ?string, + * published_at: ?string, git: array, installation: array, can_auto_update: bool, update_blockers: array, check_enabled: bool} */ public function getUpdateStatus(): array { @@ -318,6 +322,7 @@ class UpdateChecker /** * Get releases newer than the current version. + * @return array */ public function getAvailableUpdates(bool $includePrerelease = false): array { From 1bfd36ccf59c56d076fb0d35312119b5adfd3328 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 2 Feb 2026 17:04:45 +0100 Subject: [PATCH 046/172] Do not automatically give existing users the right to manage updates, but include that for new databases --- src/Entity/UserSystem/PermissionData.php | 2 +- .../UserSystem/PermissionPresetsHelper.php | 3 ++- .../UserSystem/PermissionSchemaUpdater.php | 17 ----------------- 3 files changed, 3 insertions(+), 19 deletions(-) diff --git a/src/Entity/UserSystem/PermissionData.php b/src/Entity/UserSystem/PermissionData.php index b7d1ff8f..9ebdc9c9 100644 --- a/src/Entity/UserSystem/PermissionData.php +++ b/src/Entity/UserSystem/PermissionData.php @@ -43,7 +43,7 @@ final class PermissionData implements \JsonSerializable /** * The current schema version of the permission data */ - public const CURRENT_SCHEMA_VERSION = 4; + public const CURRENT_SCHEMA_VERSION = 3; /** * Creates a new Permission Data Instance using the given data. diff --git a/src/Services/UserSystem/PermissionPresetsHelper.php b/src/Services/UserSystem/PermissionPresetsHelper.php index a3ed01b8..3d125b27 100644 --- a/src/Services/UserSystem/PermissionPresetsHelper.php +++ b/src/Services/UserSystem/PermissionPresetsHelper.php @@ -111,8 +111,9 @@ class PermissionPresetsHelper //Allow to manage Oauth tokens $this->permissionResolver->setPermission($perm_holder, 'system', 'manage_oauth_tokens', PermissionData::ALLOW); - //Allow to show updates + //Allow to show and manage updates $this->permissionResolver->setPermission($perm_holder, 'system', 'show_updates', PermissionData::ALLOW); + $this->permissionResolver->setPermission($perm_holder, 'system', 'manage_updates', PermissionData::ALLOW); } diff --git a/src/Services/UserSystem/PermissionSchemaUpdater.php b/src/Services/UserSystem/PermissionSchemaUpdater.php index b3341322..104800dc 100644 --- a/src/Services/UserSystem/PermissionSchemaUpdater.php +++ b/src/Services/UserSystem/PermissionSchemaUpdater.php @@ -157,21 +157,4 @@ class PermissionSchemaUpdater $permissions->setPermissionValue('system', 'show_updates', $new_value); } } - - private function upgradeSchemaToVersion4(HasPermissionsInterface $holder): void //@phpstan-ignore-line This is called via reflection - { - $permissions = $holder->getPermissions(); - - //If the system.manage_updates permission is not defined yet, set it to true if the user can show updates AND has server_infos permission - //This ensures that admins who can view updates and server info can also manage (execute) updates - if (!$permissions->isPermissionSet('system', 'manage_updates')) { - - $new_value = TrinaryLogicHelper::and( - $permissions->getPermissionValue('system', 'show_updates'), - $permissions->getPermissionValue('system', 'server_infos') - ); - - $permissions->setPermissionValue('system', 'manage_updates', $new_value); - } - } } From 7ff07a7ab43d47ed0a4a7f4a462000a80e7c6039 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 2 Feb 2026 17:28:35 +0100 Subject: [PATCH 047/172] Remove Content-Security-Policy for maintenance mode --- .../MaintenanceModeSubscriber.php | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/EventSubscriber/MaintenanceModeSubscriber.php b/src/EventSubscriber/MaintenanceModeSubscriber.php index 60623b45..74b219a0 100644 --- a/src/EventSubscriber/MaintenanceModeSubscriber.php +++ b/src/EventSubscriber/MaintenanceModeSubscriber.php @@ -26,17 +26,19 @@ namespace App\EventSubscriber; use App\Services\System\UpdateExecutor; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Event\FilterResponseEvent; use Symfony\Component\HttpKernel\Event\RequestEvent; +use Symfony\Component\HttpKernel\Event\ResponseEvent; use Symfony\Component\HttpKernel\KernelEvents; use Twig\Environment; /** * Blocks all web requests when maintenance mode is enabled during updates. */ -class MaintenanceModeSubscriber implements EventSubscriberInterface +readonly class MaintenanceModeSubscriber implements EventSubscriberInterface { - public function __construct(private readonly UpdateExecutor $updateExecutor, - private readonly Environment $twig) + public function __construct(private UpdateExecutor $updateExecutor, + private Environment $twig) { } @@ -45,7 +47,8 @@ class MaintenanceModeSubscriber implements EventSubscriberInterface { return [ // High priority to run before other listeners - KernelEvents::REQUEST => ['onKernelRequest', 512], + KernelEvents::REQUEST => ['onKernelRequest', 512], //High priority to run before other listeners + KernelEvents::RESPONSE => ['onKernelResponse', -512] // Low priority to run after other listeners ]; } @@ -62,7 +65,7 @@ class MaintenanceModeSubscriber implements EventSubscriberInterface } // Allow CLI requests - if (php_sapi_name() === 'cli') { + if (PHP_SAPI === 'cli') { return; } @@ -101,6 +104,28 @@ class MaintenanceModeSubscriber implements EventSubscriberInterface $event->setResponse($response); } + public function onKernelResponse(ResponseEvent $event) + { + // Only handle main requests + if (!$event->isMainRequest()) { + return; + } + + // Skip if not in maintenance mode + if (!$this->updateExecutor->isMaintenanceMode()) { + return; + } + + // Allow CLI requests + if (PHP_SAPI === 'cli') { + return; + } + + //Remove all Content-Security-Policy headers to allow loading resources during maintenance + $response = $event->getResponse(); + $response->headers->remove('Content-Security-Policy'); + } + /** * Generate a simple maintenance page HTML without Twig. */ From 6dbead6d109d02cda1103b771aacb3d0d386c8ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 2 Feb 2026 18:18:36 +0100 Subject: [PATCH 048/172] Centralized git logic from InstallationTypeDetector and UpdateChecker in GitVersionInfoProvider service --- src/Command/UpdateCommand.php | 3 +- src/Command/VersionCommand.php | 12 +- src/Controller/HomepageController.php | 8 +- src/Controller/ToolsController.php | 8 +- src/Controller/UpdateManagerController.php | 12 +- src/Services/Misc/GitVersionInfo.php | 83 ----------- .../System/GitVersionInfoProvider.php | 135 ++++++++++++++++++ src/Services/System/InstallationType.php | 65 +++++++++ .../System/InstallationTypeDetector.php | 92 ++---------- src/Services/System/UpdateChecker.php | 30 +--- src/State/PartDBInfoProvider.php | 8 +- 11 files changed, 242 insertions(+), 214 deletions(-) delete mode 100644 src/Services/Misc/GitVersionInfo.php create mode 100644 src/Services/System/GitVersionInfoProvider.php create mode 100644 src/Services/System/InstallationType.php diff --git a/src/Command/UpdateCommand.php b/src/Command/UpdateCommand.php index 4f2cae86..64fa2bad 100644 --- a/src/Command/UpdateCommand.php +++ b/src/Command/UpdateCommand.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace App\Command; -use App\Services\System\InstallationType; use App\Services\System\UpdateChecker; use App\Services\System\UpdateExecutor; use Symfony\Component\Console\Attribute\AsCommand; @@ -134,7 +133,7 @@ HELP // Handle --refresh option if ($input->getOption('refresh')) { $io->text('Refreshing version information...'); - $this->updateChecker->refreshGitInfo(); + $this->updateChecker->refreshVersionInfo(); $io->success('Version cache cleared.'); } diff --git a/src/Command/VersionCommand.php b/src/Command/VersionCommand.php index d2ce75e1..d09def8f 100644 --- a/src/Command/VersionCommand.php +++ b/src/Command/VersionCommand.php @@ -22,9 +22,9 @@ declare(strict_types=1); */ namespace App\Command; -use Symfony\Component\Console\Attribute\AsCommand; -use App\Services\Misc\GitVersionInfo; +use App\Services\System\GitVersionInfoProvider; use Shivas\VersioningBundle\Service\VersionManagerInterface; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; @@ -33,7 +33,7 @@ use Symfony\Component\Console\Style\SymfonyStyle; #[AsCommand('partdb:version|app:version', 'Shows the currently installed version of Part-DB.')] class VersionCommand extends Command { - public function __construct(protected VersionManagerInterface $versionManager, protected GitVersionInfo $gitVersionInfo) + public function __construct(protected VersionManagerInterface $versionManager, protected GitVersionInfoProvider $gitVersionInfo) { parent::__construct(); } @@ -48,9 +48,9 @@ class VersionCommand extends Command $message = 'Part-DB version: '. $this->versionManager->getVersion()->toString(); - if ($this->gitVersionInfo->getGitBranchName() !== null) { - $message .= ' Git branch: '. $this->gitVersionInfo->getGitBranchName(); - $message .= ', Git commit: '. $this->gitVersionInfo->getGitCommitHash(); + if ($this->gitVersionInfo->getBranchName() !== null) { + $message .= ' Git branch: '. $this->gitVersionInfo->getBranchName(); + $message .= ', Git commit: '. $this->gitVersionInfo->getCommitHash(); } $io->success($message); diff --git a/src/Controller/HomepageController.php b/src/Controller/HomepageController.php index 076e790b..6192c249 100644 --- a/src/Controller/HomepageController.php +++ b/src/Controller/HomepageController.php @@ -24,8 +24,8 @@ namespace App\Controller; use App\DataTables\LogDataTable; use App\Entity\Parts\Part; -use App\Services\Misc\GitVersionInfo; use App\Services\System\BannerHelper; +use App\Services\System\GitVersionInfoProvider; use App\Services\System\UpdateAvailableManager; use Doctrine\ORM\EntityManagerInterface; use Omines\DataTablesBundle\DataTableFactory; @@ -43,7 +43,7 @@ class HomepageController extends AbstractController #[Route(path: '/', name: 'homepage')] - public function homepage(Request $request, GitVersionInfo $versionInfo, EntityManagerInterface $entityManager, + public function homepage(Request $request, GitVersionInfoProvider $versionInfo, EntityManagerInterface $entityManager, UpdateAvailableManager $updateAvailableManager): Response { $this->denyAccessUnlessGranted('HAS_ACCESS_PERMISSIONS'); @@ -77,8 +77,8 @@ class HomepageController extends AbstractController return $this->render('homepage.html.twig', [ 'banner' => $this->bannerHelper->getBanner(), - 'git_branch' => $versionInfo->getGitBranchName(), - 'git_commit' => $versionInfo->getGitCommitHash(), + 'git_branch' => $versionInfo->getBranchName(), + 'git_commit' => $versionInfo->getCommitHash(), 'show_first_steps' => $show_first_steps, 'datatable' => $table, 'new_version_available' => $updateAvailableManager->isUpdateAvailable(), diff --git a/src/Controller/ToolsController.php b/src/Controller/ToolsController.php index d78aff62..f1ed888c 100644 --- a/src/Controller/ToolsController.php +++ b/src/Controller/ToolsController.php @@ -27,7 +27,7 @@ use App\Services\Attachments\AttachmentURLGenerator; use App\Services\Attachments\BuiltinAttachmentsFinder; use App\Services\Doctrine\DBInfoHelper; use App\Services\Doctrine\NatsortDebugHelper; -use App\Services\Misc\GitVersionInfo; +use App\Services\System\GitVersionInfoProvider; use App\Services\System\UpdateAvailableManager; use App\Settings\AppSettings; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; @@ -47,7 +47,7 @@ class ToolsController extends AbstractController } #[Route(path: '/server_infos', name: 'tools_server_infos')] - public function systemInfos(GitVersionInfo $versionInfo, DBInfoHelper $DBInfoHelper, NatsortDebugHelper $natsortDebugHelper, + public function systemInfos(GitVersionInfoProvider $versionInfo, DBInfoHelper $DBInfoHelper, NatsortDebugHelper $natsortDebugHelper, AttachmentSubmitHandler $attachmentSubmitHandler, UpdateAvailableManager $updateAvailableManager, AppSettings $settings): Response { @@ -55,8 +55,8 @@ class ToolsController extends AbstractController return $this->render('tools/server_infos/server_infos.html.twig', [ //Part-DB section - 'git_branch' => $versionInfo->getGitBranchName(), - 'git_commit' => $versionInfo->getGitCommitHash(), + 'git_branch' => $versionInfo->getBranchName(), + 'git_commit' => $versionInfo->getCommitHash(), 'default_locale' => $settings->system->localization->locale, 'default_timezone' => $settings->system->localization->timezone, 'default_currency' => $settings->system->localization->baseCurrency, diff --git a/src/Controller/UpdateManagerController.php b/src/Controller/UpdateManagerController.php index b247cb38..08f7c77f 100644 --- a/src/Controller/UpdateManagerController.php +++ b/src/Controller/UpdateManagerController.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace App\Controller; +use App\Services\System\BackupManager; use App\Services\System\UpdateChecker; use App\Services\System\UpdateExecutor; use Shivas\VersioningBundle\Service\VersionManagerInterface; @@ -47,6 +48,7 @@ class UpdateManagerController extends AbstractController private readonly UpdateChecker $updateChecker, private readonly UpdateExecutor $updateExecutor, private readonly VersionManagerInterface $versionManager, + private readonly BackupManager $backupManager, #[Autowire(env: 'bool:DISABLE_WEB_UPDATES')] private readonly bool $webUpdatesDisabled = false, #[Autowire(env: 'bool:DISABLE_BACKUP_RESTORE')] @@ -96,7 +98,7 @@ class UpdateManagerController extends AbstractController 'is_maintenance' => $this->updateExecutor->isMaintenanceMode(), 'maintenance_info' => $this->updateExecutor->getMaintenanceInfo(), 'update_logs' => $this->updateExecutor->getUpdateLogs(), - 'backups' => $this->updateExecutor->getBackups(), + 'backups' => $this->backupManager->getBackups(), 'web_updates_disabled' => $this->webUpdatesDisabled, 'backup_restore_disabled' => $this->backupRestoreDisabled, ]); @@ -131,7 +133,7 @@ class UpdateManagerController extends AbstractController return $this->json(['error' => 'Invalid CSRF token'], Response::HTTP_FORBIDDEN); } - $this->updateChecker->refreshGitInfo(); + $this->updateChecker->refreshVersionInfo(); return $this->json([ 'success' => true, @@ -173,7 +175,7 @@ class UpdateManagerController extends AbstractController #[Route('/log/{filename}', name: 'admin_update_manager_log', methods: ['GET'])] public function viewLog(string $filename): Response { - $this->denyAccessUnlessGranted('@system.show_updates'); + $this->denyAccessUnlessGranted('@system.manage_updates'); // Security: Only allow viewing files from the update logs directory $logs = $this->updateExecutor->getUpdateLogs(); @@ -303,7 +305,7 @@ class UpdateManagerController extends AbstractController { $this->denyAccessUnlessGranted('@system.manage_updates'); - $details = $this->updateExecutor->getBackupDetails($filename); + $details = $this->backupManager->getBackupDetails($filename); if (!$details) { return $this->json(['error' => 'Backup not found'], 404); @@ -344,7 +346,7 @@ class UpdateManagerController extends AbstractController } // Verify the backup exists - $backupDetails = $this->updateExecutor->getBackupDetails($filename); + $backupDetails = $this->backupManager->getBackupDetails($filename); if (!$backupDetails) { $this->addFlash('error', 'Backup file not found.'); return $this->redirectToRoute('admin_update_manager'); diff --git a/src/Services/Misc/GitVersionInfo.php b/src/Services/Misc/GitVersionInfo.php deleted file mode 100644 index 3c079f4f..00000000 --- a/src/Services/Misc/GitVersionInfo.php +++ /dev/null @@ -1,83 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace App\Services\Misc; - -use Symfony\Component\HttpKernel\KernelInterface; - -class GitVersionInfo -{ - protected string $project_dir; - - public function __construct(KernelInterface $kernel) - { - $this->project_dir = $kernel->getProjectDir(); - } - - /** - * Get the Git branch name of the installed system. - * - * @return string|null The current git branch name. Null, if this is no Git installation - */ - public function getGitBranchName(): ?string - { - if (is_file($this->project_dir.'/.git/HEAD')) { - $git = file($this->project_dir.'/.git/HEAD'); - $head = explode('/', $git[0], 3); - - if (!isset($head[2])) { - return null; - } - - return trim($head[2]); - } - - return null; // this is not a Git installation - } - - /** - * Get hash of the last git commit (on remote "origin"!). - * - * If this method does not work, try to make a "git pull" first! - * - * @param int $length if this is smaller than 40, only the first $length characters will be returned - * - * @return string|null The hash of the last commit, null If this is no Git installation - */ - public function getGitCommitHash(int $length = 7): ?string - { - $filename = $this->project_dir.'/.git/refs/remotes/origin/'.$this->getGitBranchName(); - if (is_file($filename)) { - $head = file($filename); - - if (!isset($head[0])) { - return null; - } - - $hash = $head[0]; - - return substr($hash, 0, $length); - } - - return null; // this is not a Git installation - } -} diff --git a/src/Services/System/GitVersionInfoProvider.php b/src/Services/System/GitVersionInfoProvider.php new file mode 100644 index 00000000..6d067333 --- /dev/null +++ b/src/Services/System/GitVersionInfoProvider.php @@ -0,0 +1,135 @@ +. + */ + +declare(strict_types=1); + +namespace App\Services\System; + +use Symfony\Component\DependencyInjection\Attribute\Autowire; +use Symfony\Component\Process\Process; + +/** + * This service provides information about the current Git installation (if any). + */ +final readonly class GitVersionInfoProvider +{ + public function __construct(#[Autowire(param: 'kernel.project_dir')] private string $project_dir) + { + } + + /** + * Check if the project directory is a Git repository. + * @return bool + */ + public function isGitRepo(): bool + { + return is_dir($this->getGitDirectory()); + } + + /** + * Get the path to the Git directory of the installed system without a trailing slash. + * Even if this is no Git installation, the path is returned. + * @return string The path to the Git directory of the installed system + */ + public function getGitDirectory(): string + { + return $this->project_dir . '/.git'; + } + + /** + * Get the Git branch name of the installed system. + * + * @return string|null The current git branch name. Null, if this is no Git installation + */ + public function getBranchName(): ?string + { + if (is_file($this->getGitDirectory() . '/HEAD')) { + $git = file($this->getGitDirectory() . '/HEAD'); + $head = explode('/', $git[0], 3); + + if (!isset($head[2])) { + return null; + } + + return trim($head[2]); + } + + return null; // this is not a Git installation + } + + /** + * Get hash of the last git commit (on remote "origin"!). + * + * If this method does not work, try to make a "git pull" first! + * + * @param int $length if this is smaller than 40, only the first $length characters will be returned + * + * @return string|null The hash of the last commit, null If this is no Git installation + */ + public function getCommitHash(int $length = 8): ?string + { + $filename = $this->getGitDirectory() . '/refs/remotes/origin/'.$this->getBranchName(); + if (is_file($filename)) { + $head = file($filename); + + if (!isset($head[0])) { + return null; + } + + $hash = $head[0]; + + return substr($hash, 0, $length); + } + + return null; // this is not a Git installation + } + + /** + * Get the Git remote URL of the installed system. + */ + public function getRemoteURL(): ?string + { + // Get remote URL + $configFile = $this->getGitDirectory() . '/config'; + if (file_exists($configFile)) { + $config = file_get_contents($configFile); + if (preg_match('#url = (.+)#', $config, $matches)) { + return trim($matches[1]); + } + } + + return null; // this is not a Git installation + } + + /** + * Check if there are local changes in the Git repository. + * Attention: This runs a git command, which might be slow! + * @return bool|null True if there are local changes, false if not, null if this is not a Git installation + */ + public function hasLocalChanges(): ?bool + { + $process = new Process(['git', 'status', '--porcelain'], $this->project_dir); + $process->run(); + if (!$process->isSuccessful()) { + return null; // this is not a Git installation + } + return !empty(trim($process->getOutput())); + } +} diff --git a/src/Services/System/InstallationType.php b/src/Services/System/InstallationType.php new file mode 100644 index 00000000..74479bb9 --- /dev/null +++ b/src/Services/System/InstallationType.php @@ -0,0 +1,65 @@ +. + */ + +declare(strict_types=1); + +namespace App\Services\System; + +/** + * Detects the installation type of Part-DB to determine the appropriate update strategy. + */ +enum InstallationType: string +{ + case GIT = 'git'; + case DOCKER = 'docker'; + case ZIP_RELEASE = 'zip_release'; + case UNKNOWN = 'unknown'; + + public function getLabel(): string + { + return match ($this) { + self::GIT => 'Git Clone', + self::DOCKER => 'Docker', + self::ZIP_RELEASE => 'Release Archive (ZIP File)', + self::UNKNOWN => 'Unknown', + }; + } + + public function supportsAutoUpdate(): bool + { + return match ($this) { + self::GIT => true, + self::DOCKER => false, + // ZIP_RELEASE auto-update not yet implemented + self::ZIP_RELEASE => false, + self::UNKNOWN => false, + }; + } + + public function getUpdateInstructions(): string + { + return match ($this) { + self::GIT => 'Run: php bin/console partdb:update', + self::DOCKER => 'Pull the new Docker image and recreate the container: docker-compose pull && docker-compose up -d', + self::ZIP_RELEASE => 'Download the new release ZIP from GitHub, extract it over your installation, and run: php bin/console doctrine:migrations:migrate && php bin/console cache:clear', + self::UNKNOWN => 'Unable to determine installation type. Please update manually.', + }; + } +} diff --git a/src/Services/System/InstallationTypeDetector.php b/src/Services/System/InstallationTypeDetector.php index 4d04c55b..9f9fbdb8 100644 --- a/src/Services/System/InstallationTypeDetector.php +++ b/src/Services/System/InstallationTypeDetector.php @@ -26,51 +26,9 @@ namespace App\Services\System; use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\Process\Process; -/** - * Detects the installation type of Part-DB to determine the appropriate update strategy. - */ -enum InstallationType: string +readonly class InstallationTypeDetector { - case GIT = 'git'; - case DOCKER = 'docker'; - case ZIP_RELEASE = 'zip_release'; - case UNKNOWN = 'unknown'; - - public function getLabel(): string - { - return match($this) { - self::GIT => 'Git Clone', - self::DOCKER => 'Docker', - self::ZIP_RELEASE => 'Release Archive', - self::UNKNOWN => 'Unknown', - }; - } - - public function supportsAutoUpdate(): bool - { - return match($this) { - self::GIT => true, - self::DOCKER => false, - // ZIP_RELEASE auto-update not yet implemented - self::ZIP_RELEASE => false, - self::UNKNOWN => false, - }; - } - - public function getUpdateInstructions(): string - { - return match($this) { - self::GIT => 'Run: php bin/console partdb:update', - self::DOCKER => 'Pull the new Docker image and recreate the container: docker-compose pull && docker-compose up -d', - self::ZIP_RELEASE => 'Download the new release ZIP from GitHub, extract it over your installation, and run: php bin/console doctrine:migrations:migrate && php bin/console cache:clear', - self::UNKNOWN => 'Unable to determine installation type. Please update manually.', - }; - } -} - -class InstallationTypeDetector -{ - public function __construct(#[Autowire(param: 'kernel.project_dir')] private readonly string $project_dir) + public function __construct(#[Autowire(param: 'kernel.project_dir')] private string $project_dir, private GitVersionInfoProvider $gitVersionInfoProvider) { } @@ -129,7 +87,7 @@ class InstallationTypeDetector */ public function isGitInstall(): bool { - return is_dir($this->project_dir . '/.git'); + return $this->gitVersionInfoProvider->isGitRepo(); } /** @@ -169,51 +127,21 @@ class InstallationTypeDetector /** * Get Git-specific information. + * @return array{branch: string|null, commit: string|null, remote_url: string|null, has_local_changes: bool} */ private function getGitInfo(): array { - $info = [ - 'branch' => null, - 'commit' => null, - 'remote_url' => null, - 'has_local_changes' => false, + return [ + 'branch' => $this->gitVersionInfoProvider->getBranchName(), + 'commit' => $this->gitVersionInfoProvider->getCommitHash(8), + 'remote_url' => $this->gitVersionInfoProvider->getRemoteURL(), + 'has_local_changes' => $this->gitVersionInfoProvider->hasLocalChanges() ?? false, ]; - - // Get branch - $headFile = $this->project_dir . '/.git/HEAD'; - if (file_exists($headFile)) { - $head = file_get_contents($headFile); - if (preg_match('#ref: refs/heads/(.+)#', $head, $matches)) { - $info['branch'] = trim($matches[1]); - } - } - - // Get remote URL - $configFile = $this->project_dir . '/.git/config'; - if (file_exists($configFile)) { - $config = file_get_contents($configFile); - if (preg_match('#url = (.+)#', $config, $matches)) { - $info['remote_url'] = trim($matches[1]); - } - } - - // Get commit hash - $process = new Process(['git', 'rev-parse', '--short', 'HEAD'], $this->project_dir); - $process->run(); - if ($process->isSuccessful()) { - $info['commit'] = trim($process->getOutput()); - } - - // Check for local changes - $process = new Process(['git', 'status', '--porcelain'], $this->project_dir); - $process->run(); - $info['has_local_changes'] = !empty(trim($process->getOutput())); - - return $info; } /** * Get Docker-specific information. + * @return array{container_id: string|null, image: string|null} */ private function getDockerInfo(): array { diff --git a/src/Services/System/UpdateChecker.php b/src/Services/System/UpdateChecker.php index 49a132ee..b7a90296 100644 --- a/src/Services/System/UpdateChecker.php +++ b/src/Services/System/UpdateChecker.php @@ -48,6 +48,7 @@ class UpdateChecker private readonly CacheInterface $updateCache, private readonly VersionManagerInterface $versionManager, private readonly PrivacySettings $privacySettings, private readonly LoggerInterface $logger, private readonly InstallationTypeDetector $installationTypeDetector, + private readonly GitVersionInfoProvider $gitVersionInfoProvider, #[Autowire(param: 'kernel.debug')] private readonly bool $is_dev_mode, #[Autowire(param: 'kernel.project_dir')] private readonly string $project_dir) { @@ -84,34 +85,15 @@ class UpdateChecker 'is_git_install' => false, ]; - $gitDir = $this->project_dir . '/.git'; - - if (!is_dir($gitDir)) { + if (!$this->gitVersionInfoProvider->isGitRepo()) { return $info; } $info['is_git_install'] = true; - // Get branch from HEAD file - $headFile = $gitDir . '/HEAD'; - if (file_exists($headFile)) { - $head = file_get_contents($headFile); - if (preg_match('#ref: refs/heads/(.+)#', $head, $matches)) { - $info['branch'] = trim($matches[1]); - } - } - - // Get current commit - $process = new Process(['git', 'rev-parse', '--short', 'HEAD'], $this->project_dir); - $process->run(); - if ($process->isSuccessful()) { - $info['commit'] = trim($process->getOutput()); - } - - // Check for local changes - $process = new Process(['git', 'status', '--porcelain'], $this->project_dir); - $process->run(); - $info['has_local_changes'] = !empty(trim($process->getOutput())); + $info['branch'] = $this->gitVersionInfoProvider->getBranchName(); + $info['commit'] = $this->gitVersionInfoProvider->getCommitHash(8); + $info['has_local_changes'] = $this->gitVersionInfoProvider->hasLocalChanges(); // Get commits behind (fetch first) if ($info['branch']) { @@ -151,7 +133,7 @@ class UpdateChecker /** * Force refresh git information by invalidating cache. */ - public function refreshGitInfo(): void + public function refreshVersionInfo(): void { $gitInfo = $this->getGitInfo(); if ($gitInfo['branch']) { diff --git a/src/State/PartDBInfoProvider.php b/src/State/PartDBInfoProvider.php index b3496cad..b29ef227 100644 --- a/src/State/PartDBInfoProvider.php +++ b/src/State/PartDBInfoProvider.php @@ -7,8 +7,8 @@ namespace App\State; use ApiPlatform\Metadata\Operation; use ApiPlatform\State\ProviderInterface; use App\ApiResource\PartDBInfo; -use App\Services\Misc\GitVersionInfo; use App\Services\System\BannerHelper; +use App\Services\System\GitVersionInfoProvider; use App\Settings\SystemSettings\CustomizationSettings; use App\Settings\SystemSettings\LocalizationSettings; use Shivas\VersioningBundle\Service\VersionManagerInterface; @@ -17,7 +17,7 @@ class PartDBInfoProvider implements ProviderInterface { public function __construct(private readonly VersionManagerInterface $versionManager, - private readonly GitVersionInfo $gitVersionInfo, + private readonly GitVersionInfoProvider $gitVersionInfo, private readonly BannerHelper $bannerHelper, private readonly string $default_uri, private readonly LocalizationSettings $localizationSettings, @@ -31,8 +31,8 @@ class PartDBInfoProvider implements ProviderInterface { return new PartDBInfo( version: $this->versionManager->getVersion()->toString(), - git_branch: $this->gitVersionInfo->getGitBranchName(), - git_commit: $this->gitVersionInfo->getGitCommitHash(), + git_branch: $this->gitVersionInfo->getBranchName(), + git_commit: $this->gitVersionInfo->getCommitHash(), title: $this->customizationSettings->instanceName, banner: $this->bannerHelper->getBanner(), default_uri: $this->default_uri, From 68ff0721ce486502fe717d7aaf2cef6be76b892f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 2 Feb 2026 18:44:44 +0100 Subject: [PATCH 049/172] Merged functionality from UpdateAvailableManager and UpdateChecker --- src/Command/UpdateCommand.php | 4 +- src/Controller/HomepageController.php | 4 +- src/Controller/ToolsController.php | 4 +- src/Controller/UpdateManagerController.php | 2 +- ...eManager.php => UpdateAvailableFacade.php} | 46 ++++--------------- src/Services/System/UpdateChecker.php | 27 ++++++----- src/Twig/UpdateExtension.php | 4 +- 7 files changed, 34 insertions(+), 57 deletions(-) rename src/Services/System/{UpdateAvailableManager.php => UpdateAvailableFacade.php} (67%) diff --git a/src/Command/UpdateCommand.php b/src/Command/UpdateCommand.php index 64fa2bad..ca6c8399 100644 --- a/src/Command/UpdateCommand.php +++ b/src/Command/UpdateCommand.php @@ -166,7 +166,7 @@ HELP $includePrerelease = $input->getOption('include-prerelease'); if (!$targetVersion) { - $latest = $this->updateChecker->getLatestRelease($includePrerelease); + $latest = $this->updateChecker->getLatestVersion($includePrerelease); if (!$latest) { $io->error('Could not determine the latest version. Please specify a version manually.'); return Command::FAILURE; @@ -175,7 +175,7 @@ HELP } // Validate target version - if (!$this->updateChecker->isNewerVersion($targetVersion)) { + if (!$this->updateChecker->isNewerVersionThanCurrent($targetVersion)) { $io->warning(sprintf( 'Version %s is not newer than the current version %s.', $targetVersion, diff --git a/src/Controller/HomepageController.php b/src/Controller/HomepageController.php index 6192c249..6f863a3c 100644 --- a/src/Controller/HomepageController.php +++ b/src/Controller/HomepageController.php @@ -26,7 +26,7 @@ use App\DataTables\LogDataTable; use App\Entity\Parts\Part; use App\Services\System\BannerHelper; use App\Services\System\GitVersionInfoProvider; -use App\Services\System\UpdateAvailableManager; +use App\Services\System\UpdateAvailableFacade; use Doctrine\ORM\EntityManagerInterface; use Omines\DataTablesBundle\DataTableFactory; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; @@ -44,7 +44,7 @@ class HomepageController extends AbstractController #[Route(path: '/', name: 'homepage')] public function homepage(Request $request, GitVersionInfoProvider $versionInfo, EntityManagerInterface $entityManager, - UpdateAvailableManager $updateAvailableManager): Response + UpdateAvailableFacade $updateAvailableManager): Response { $this->denyAccessUnlessGranted('HAS_ACCESS_PERMISSIONS'); diff --git a/src/Controller/ToolsController.php b/src/Controller/ToolsController.php index f1ed888c..76dffb4d 100644 --- a/src/Controller/ToolsController.php +++ b/src/Controller/ToolsController.php @@ -28,7 +28,7 @@ use App\Services\Attachments\BuiltinAttachmentsFinder; use App\Services\Doctrine\DBInfoHelper; use App\Services\Doctrine\NatsortDebugHelper; use App\Services\System\GitVersionInfoProvider; -use App\Services\System\UpdateAvailableManager; +use App\Services\System\UpdateAvailableFacade; use App\Settings\AppSettings; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; @@ -48,7 +48,7 @@ class ToolsController extends AbstractController #[Route(path: '/server_infos', name: 'tools_server_infos')] public function systemInfos(GitVersionInfoProvider $versionInfo, DBInfoHelper $DBInfoHelper, NatsortDebugHelper $natsortDebugHelper, - AttachmentSubmitHandler $attachmentSubmitHandler, UpdateAvailableManager $updateAvailableManager, + AttachmentSubmitHandler $attachmentSubmitHandler, UpdateAvailableFacade $updateAvailableManager, AppSettings $settings): Response { $this->denyAccessUnlessGranted('@system.server_infos'); diff --git a/src/Controller/UpdateManagerController.php b/src/Controller/UpdateManagerController.php index 08f7c77f..d88cab5d 100644 --- a/src/Controller/UpdateManagerController.php +++ b/src/Controller/UpdateManagerController.php @@ -226,7 +226,7 @@ class UpdateManagerController extends AbstractController if (!$targetVersion) { // Get latest version if not specified - $latest = $this->updateChecker->getLatestRelease(); + $latest = $this->updateChecker->getLatestVersion(); if (!$latest) { $this->addFlash('error', 'Could not determine target version.'); return $this->redirectToRoute('admin_update_manager'); diff --git a/src/Services/System/UpdateAvailableManager.php b/src/Services/System/UpdateAvailableFacade.php similarity index 67% rename from src/Services/System/UpdateAvailableManager.php rename to src/Services/System/UpdateAvailableFacade.php index 82cfb84e..2a00321c 100644 --- a/src/Services/System/UpdateAvailableManager.php +++ b/src/Services/System/UpdateAvailableFacade.php @@ -35,17 +35,18 @@ use Version\Version; /** * This class checks if a new version of Part-DB is available. */ -class UpdateAvailableManager +class UpdateAvailableFacade { private const API_URL = 'https://api.github.com/repos/Part-DB/Part-DB-server/releases/latest'; private const CACHE_KEY = 'uam_latest_version'; private const CACHE_TTL = 60 * 60 * 24 * 2; // 2 day - public function __construct(private readonly HttpClientInterface $httpClient, - private readonly CacheInterface $updateCache, private readonly VersionManagerInterface $versionManager, - private readonly PrivacySettings $privacySettings, private readonly LoggerInterface $logger, - #[Autowire(param: 'kernel.debug')] private readonly bool $is_dev_mode) + public function __construct( + private readonly CacheInterface $updateCache, + private readonly PrivacySettings $privacySettings, + private readonly UpdateChecker $updateChecker, + ) { } @@ -89,9 +90,7 @@ class UpdateAvailableManager } $latestVersion = $this->getLatestVersion(); - $currentVersion = $this->versionManager->getVersion(); - - return $latestVersion->isGreaterThan($currentVersion); + return $this->updateChecker->isNewerVersionThanCurrent($latestVersion); } /** @@ -111,34 +110,7 @@ class UpdateAvailableManager return $this->updateCache->get(self::CACHE_KEY, function (ItemInterface $item) { $item->expiresAfter(self::CACHE_TTL); - try { - $response = $this->httpClient->request('GET', self::API_URL); - $result = $response->toArray(); - $tag_name = $result['tag_name']; - - // Remove the leading 'v' from the tag name - $version = substr($tag_name, 1); - - return [ - 'version' => $version, - 'url' => $result['html_url'], - ]; - } catch (\Exception $e) { - //When we are in dev mode, throw the exception, otherwise just silently log it - if ($this->is_dev_mode) { - throw $e; - } - - //In the case of an error, try it again after half of the cache time - $item->expiresAfter(self::CACHE_TTL / 2); - - $this->logger->error('Checking for updates failed: ' . $e->getMessage()); - - return [ - 'version' => '0.0.1', - 'url' => 'update-checking-error' - ]; - } + return $this->updateChecker->getLatestVersion(); }); } -} \ No newline at end of file +} diff --git a/src/Services/System/UpdateChecker.php b/src/Services/System/UpdateChecker.php index b7a90296..e388d51f 100644 --- a/src/Services/System/UpdateChecker.php +++ b/src/Services/System/UpdateChecker.php @@ -75,7 +75,7 @@ class UpdateChecker * Get Git repository information. * @return array{branch: ?string, commit: ?string, has_local_changes: bool, commits_behind: int, is_git_install: bool} */ - public function getGitInfo(): array + private function getGitInfo(): array { $info = [ 'branch' => null, @@ -113,7 +113,7 @@ class UpdateChecker return 0; } - $cacheKey = self::CACHE_KEY_COMMITS . '_' . md5($branch); + $cacheKey = self::CACHE_KEY_COMMITS . '_' . hash('xxh3', $branch); return $this->updateCache->get($cacheKey, function (ItemInterface $item) use ($branch) { $item->expiresAfter(self::CACHE_TTL); @@ -135,9 +135,9 @@ class UpdateChecker */ public function refreshVersionInfo(): void { - $gitInfo = $this->getGitInfo(); - if ($gitInfo['branch']) { - $this->updateCache->delete(self::CACHE_KEY_COMMITS . '_' . md5($gitInfo['branch'])); + $gitBranch = $this->gitVersionInfoProvider->getBranchName(); + if ($gitBranch) { + $this->updateCache->delete(self::CACHE_KEY_COMMITS . '_' . hash('xxh3', $gitBranch)); } $this->updateCache->delete(self::CACHE_KEY_RELEASES); } @@ -150,7 +150,10 @@ class UpdateChecker public function getAvailableReleases(int $limit = 10): array { if (!$this->privacySettings->checkForUpdates) { - return []; + return [ //If we don't want to check for updates, we can return dummy data + 'version' => '0.0.1', + 'url' => 'update-checking-disabled' + ]; } return $this->updateCache->get(self::CACHE_KEY_RELEASES, function (ItemInterface $item) use ($limit) { @@ -212,7 +215,7 @@ class UpdateChecker * Get the latest stable release. * @return array{version: string, tag: string, name: string, url: string, published_at: string, body: string, prerelease: bool, assets: array}|null */ - public function getLatestRelease(bool $includePrerelease = false): ?array + public function getLatestVersion(bool $includePrerelease = false): ?array { $releases = $this->getAvailableReleases(); @@ -236,11 +239,13 @@ class UpdateChecker /** * Check if a specific version is newer than current. */ - public function isNewerVersion(string $version): bool + public function isNewerVersionThanCurrent(Version|string $version): bool { + if ($version instanceof Version) { + return $version->isGreaterThan($this->getCurrentVersion()); + } try { - $targetVersion = Version::fromString(ltrim($version, 'v')); - return $targetVersion->isGreaterThan($this->getCurrentVersion()); + return Version::fromString(ltrim($version, 'v'))->isGreaterThan($this->getCurrentVersion()); } catch (\Exception) { return false; } @@ -254,7 +259,7 @@ class UpdateChecker public function getUpdateStatus(): array { $current = $this->getCurrentVersion(); - $latest = $this->getLatestRelease(); + $latest = $this->getLatestVersion(); $gitInfo = $this->getGitInfo(); $installInfo = $this->installationTypeDetector->getInstallationInfo(); diff --git a/src/Twig/UpdateExtension.php b/src/Twig/UpdateExtension.php index 10264d12..ee3bb16c 100644 --- a/src/Twig/UpdateExtension.php +++ b/src/Twig/UpdateExtension.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace App\Twig; -use App\Services\System\UpdateAvailableManager; +use App\Services\System\UpdateAvailableFacade; use Symfony\Bundle\SecurityBundle\Security; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; @@ -33,7 +33,7 @@ use Twig\TwigFunction; */ final class UpdateExtension extends AbstractExtension { - public function __construct(private readonly UpdateAvailableManager $updateAvailableManager, + public function __construct(private readonly UpdateAvailableFacade $updateAvailableManager, private readonly Security $security) { From 1ccc3ad44018d3b5ab4012b7639ae21fdcf348f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 2 Feb 2026 19:48:27 +0100 Subject: [PATCH 050/172] Extracted logic used by both BackupManager and UpdateExecutor to new service --- src/Services/System/BackupManager.php | 56 ++++-------------- src/Services/System/CommandRunHelper.php | 75 ++++++++++++++++++++++++ src/Services/System/UpdateExecutor.php | 33 +---------- 3 files changed, 89 insertions(+), 75 deletions(-) create mode 100644 src/Services/System/CommandRunHelper.php diff --git a/src/Services/System/BackupManager.php b/src/Services/System/BackupManager.php index b646e433..9bdc7f71 100644 --- a/src/Services/System/BackupManager.php +++ b/src/Services/System/BackupManager.php @@ -35,17 +35,18 @@ use Symfony\Component\Process\Process; * This service handles all backup-related operations and can be used * by the Update Manager, CLI commands, or other services. */ -class BackupManager +readonly class BackupManager { private const BACKUP_DIR = 'var/backups'; public function __construct( #[Autowire(param: 'kernel.project_dir')] - private readonly string $projectDir, - private readonly LoggerInterface $logger, - private readonly Filesystem $filesystem, - private readonly VersionManagerInterface $versionManager, - private readonly EntityManagerInterface $entityManager, + private string $projectDir, + private LoggerInterface $logger, + private Filesystem $filesystem, + private VersionManagerInterface $versionManager, + private EntityManagerInterface $entityManager, + private CommandRunHelper $commandRunHelper, ) { } @@ -90,7 +91,7 @@ class BackupManager $backupFile = $backupDir . '/' . $prefix . '-v' . $currentVersion . '-' . date('Y-m-d-His') . '.zip'; } - $this->runCommand([ + $this->commandRunHelper->runCommand([ 'php', 'bin/console', 'partdb:backup', '--full', '--overwrite', @@ -103,7 +104,7 @@ class BackupManager } /** - * Get list of backups. + * Get list of backups, that are available, sorted by date descending. * * @return array */ @@ -126,7 +127,7 @@ class BackupManager } // Sort by date descending - usort($backups, fn($a, $b) => $b['date'] <=> $a['date']); + usort($backups, static fn($a, $b) => $b['date'] <=> $a['date']); return $backups; } @@ -135,7 +136,7 @@ class BackupManager * Get details about a specific backup file. * * @param string $filename The backup filename - * @return array|null Backup details or null if not found + * @return null|array{file: string, path: string, date: int, size: int, from_version: ?string, to_version: ?string, contains_database?: bool, contains_config?: bool, contains_attachments?: bool} Backup details or null if not found */ public function getBackupDetails(string $filename): ?array { @@ -449,39 +450,4 @@ class BackupManager $this->filesystem->mirror($uploads, $this->projectDir . '/uploads', null, ['override' => true]); } } - - /** - * Run a shell command with proper error handling. - */ - private function runCommand(array $command, string $description, int $timeout = 120): string - { - $process = new Process($command, $this->projectDir); - $process->setTimeout($timeout); - - // Set environment variables - $currentEnv = getenv(); - if (!is_array($currentEnv)) { - $currentEnv = []; - } - $env = array_merge($currentEnv, [ - 'HOME' => $this->projectDir, - 'COMPOSER_HOME' => $this->projectDir . '/var/composer', - 'PATH' => getenv('PATH') ?: '/usr/local/bin:/usr/bin:/bin', - ]); - $process->setEnv($env); - - $output = ''; - $process->run(function ($type, $buffer) use (&$output) { - $output .= $buffer; - }); - - if (!$process->isSuccessful()) { - $errorOutput = $process->getErrorOutput() ?: $process->getOutput(); - throw new \RuntimeException( - sprintf('%s failed: %s', $description, trim($errorOutput)) - ); - } - - return $output; - } } diff --git a/src/Services/System/CommandRunHelper.php b/src/Services/System/CommandRunHelper.php new file mode 100644 index 00000000..7a144d5f --- /dev/null +++ b/src/Services/System/CommandRunHelper.php @@ -0,0 +1,75 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Services\System; + +use Symfony\Component\DependencyInjection\Attribute\Autowire; +use Symfony\Component\Process\Process; + +class CommandRunHelper +{ + private UpdateExecutor $updateExecutor; + + public function __construct( + #[Autowire(param: 'kernel.project_dir')] private readonly string $project_dir + ) + { + } + + /** + * Run a shell command with proper error handling. + */ + public function runCommand(array $command, string $description, int $timeout = 120): string + { + $process = new Process($command, $this->project_dir); + $process->setTimeout($timeout); + + // Set environment variables needed for Composer and other tools + // This is especially important when running as www-data which may not have HOME set + // We inherit from current environment and override/add specific variables + $currentEnv = getenv(); + if (!is_array($currentEnv)) { + $currentEnv = []; + } + $env = array_merge($currentEnv, [ + 'HOME' => $this->project_dir.'/var/www-data-home', + 'COMPOSER_HOME' => $this->project_dir.'/var/composer', + 'PATH' => getenv('PATH') ?: '/usr/local/bin:/usr/bin:/bin', + ]); + $process->setEnv($env); + + $output = ''; + $process->run(function ($type, $buffer) use (&$output) { + $output .= $buffer; + }); + + if (!$process->isSuccessful()) { + $errorOutput = $process->getErrorOutput() ?: $process->getOutput(); + throw new \RuntimeException( + sprintf('%s failed: %s', $description, trim($errorOutput)) + ); + } + + return $output; + } +} diff --git a/src/Services/System/UpdateExecutor.php b/src/Services/System/UpdateExecutor.php index d6bc4127..90cabf82 100644 --- a/src/Services/System/UpdateExecutor.php +++ b/src/Services/System/UpdateExecutor.php @@ -46,6 +46,7 @@ class UpdateExecutor private array $steps = []; private ?string $currentLogFile = null; + private CommandRunHelper $commandRunHelper; public function __construct( #[Autowire(param: 'kernel.project_dir')] @@ -58,6 +59,7 @@ class UpdateExecutor #[Autowire(param: 'app.debug_mode')] private readonly bool $debugMode = false, ) { + $this->commandRunHelper = new CommandRunHelper($this); } /** @@ -516,36 +518,7 @@ class UpdateExecutor */ private function runCommand(array $command, string $description, int $timeout = 120): string { - $process = new Process($command, $this->project_dir); - $process->setTimeout($timeout); - - // Set environment variables needed for Composer and other tools - // This is especially important when running as www-data which may not have HOME set - // We inherit from current environment and override/add specific variables - $currentEnv = getenv(); - if (!is_array($currentEnv)) { - $currentEnv = []; - } - $env = array_merge($currentEnv, [ - 'HOME' => $this->project_dir, - 'COMPOSER_HOME' => $this->project_dir . '/var/composer', - 'PATH' => getenv('PATH') ?: '/usr/local/bin:/usr/bin:/bin', - ]); - $process->setEnv($env); - - $output = ''; - $process->run(function ($type, $buffer) use (&$output) { - $output .= $buffer; - }); - - if (!$process->isSuccessful()) { - $errorOutput = $process->getErrorOutput() ?: $process->getOutput(); - throw new \RuntimeException( - sprintf('%s failed: %s', $description, trim($errorOutput)) - ); - } - - return $output; + return $this->commandRunHelper->runCommand($command, $description, $timeout); } /** From 720c1e51e84b4bfbf5395eb7c731043c249811f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 2 Feb 2026 20:28:17 +0100 Subject: [PATCH 051/172] Improved UpdateExecutor --- src/Services/System/UpdateExecutor.php | 53 ++++++++------------ tests/Services/System/UpdateExecutorTest.php | 6 --- 2 files changed, 20 insertions(+), 39 deletions(-) diff --git a/src/Services/System/UpdateExecutor.php b/src/Services/System/UpdateExecutor.php index 90cabf82..9f73c63a 100644 --- a/src/Services/System/UpdateExecutor.php +++ b/src/Services/System/UpdateExecutor.php @@ -34,6 +34,8 @@ use Symfony\Component\Process\Process; * * This service should primarily be used from CLI commands, not web requests, * due to the long-running nature of updates and permission requirements. + * + * For web requests, use startBackgroundUpdate() method. */ class UpdateExecutor { @@ -46,7 +48,6 @@ class UpdateExecutor private array $steps = []; private ?string $currentLogFile = null; - private CommandRunHelper $commandRunHelper; public function __construct( #[Autowire(param: 'kernel.project_dir')] @@ -56,10 +57,10 @@ class UpdateExecutor private readonly InstallationTypeDetector $installationTypeDetector, private readonly VersionManagerInterface $versionManager, private readonly BackupManager $backupManager, + private readonly CommandRunHelper $commandRunHelper, #[Autowire(param: 'app.debug_mode')] private readonly bool $debugMode = false, ) { - $this->commandRunHelper = new CommandRunHelper($this); } /** @@ -75,14 +76,12 @@ class UpdateExecutor */ public function isLocked(): bool { - $lockFile = $this->project_dir . '/' . self::LOCK_FILE; - - if (!file_exists($lockFile)) { + // Check if lock is stale (older than 1 hour) + $lockData = $this->getLockInfo(); + if ($lockData === null) { return false; } - // Check if lock is stale (older than 1 hour) - $lockData = json_decode(file_get_contents($lockFile), true); if ($lockData && isset($lockData['started_at'])) { $startedAt = new \DateTime($lockData['started_at']); $now = new \DateTime(); @@ -100,7 +99,8 @@ class UpdateExecutor } /** - * Get lock information. + * Get lock information, or null if not locked. + * @return null|array{started_at: string, pid: int, user: string} */ public function getLockInfo(): ?array { @@ -110,7 +110,7 @@ class UpdateExecutor return null; } - return json_decode(file_get_contents($lockFile), true); + return json_decode(file_get_contents($lockFile), true, 512, JSON_THROW_ON_ERROR); } /** @@ -123,6 +123,7 @@ class UpdateExecutor /** * Get maintenance mode information. + * @return null|array{enabled_at: string, reason: string} */ public function getMaintenanceInfo(): ?array { @@ -132,7 +133,7 @@ class UpdateExecutor return null; } - return json_decode(file_get_contents($maintenanceFile), true); + return json_decode(file_get_contents($maintenanceFile), true, 512, JSON_THROW_ON_ERROR); } /** @@ -157,7 +158,7 @@ class UpdateExecutor 'user' => get_current_user(), ]; - $this->filesystem->dumpFile($lockFile, json_encode($lockData, JSON_PRETTY_PRINT)); + $this->filesystem->dumpFile($lockFile, json_encode($lockData, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT)); return true; } @@ -191,7 +192,7 @@ class UpdateExecutor 'reason' => $reason, ]; - $this->filesystem->dumpFile($maintenanceFile, json_encode($data, JSON_PRETTY_PRINT)); + $this->filesystem->dumpFile($maintenanceFile, json_encode($data, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT)); } /** @@ -574,6 +575,7 @@ class UpdateExecutor /** * Get list of update log files. + * @return array{file: string, path: string, date: int, size: int}[] */ public function getUpdateLogs(): array { @@ -594,28 +596,11 @@ class UpdateExecutor } // Sort by date descending - usort($logs, fn($a, $b) => $b['date'] <=> $a['date']); + usort($logs, static fn($a, $b) => $b['date'] <=> $a['date']); return $logs; } - /** - * Get list of backups. - * @deprecated Use BackupManager::getBackups() directly - */ - public function getBackups(): array - { - return $this->backupManager->getBackups(); - } - - /** - * Get details about a specific backup file. - * @deprecated Use BackupManager::getBackupDetails() directly - */ - public function getBackupDetails(string $filename): ?array - { - return $this->backupManager->getBackupDetails($filename); - } /** * Restore from a backup file with maintenance mode and cache clearing. @@ -746,8 +731,9 @@ class UpdateExecutor /** * Save progress to file for web UI polling. + * @param array{status: string, target_version: string, create_backup: bool, started_at: string, current_step: int, total_steps: int, step_name: string, step_message: string, steps: array, error: ?string} $progress */ - public function saveProgress(array $progress): void + private function saveProgress(array $progress): void { $progressFile = $this->getProgressFilePath(); $progressDir = dirname($progressFile); @@ -756,11 +742,12 @@ class UpdateExecutor $this->filesystem->mkdir($progressDir); } - $this->filesystem->dumpFile($progressFile, json_encode($progress, JSON_PRETTY_PRINT)); + $this->filesystem->dumpFile($progressFile, json_encode($progress, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT)); } /** * Get current update progress from file. + * @return null|array{status: string, target_version: string, create_backup: bool, started_at: string, current_step: int, total_steps: int, step_name: string, step_message: string, steps: array, error: ?string} */ public function getProgress(): ?array { @@ -770,7 +757,7 @@ class UpdateExecutor return null; } - $data = json_decode(file_get_contents($progressFile), true); + $data = json_decode(file_get_contents($progressFile), true, 512, JSON_THROW_ON_ERROR); // If the progress file is stale (older than 30 minutes), consider it invalid if ($data && isset($data['started_at'])) { diff --git a/tests/Services/System/UpdateExecutorTest.php b/tests/Services/System/UpdateExecutorTest.php index 9b832f6c..851d060c 100644 --- a/tests/Services/System/UpdateExecutorTest.php +++ b/tests/Services/System/UpdateExecutorTest.php @@ -74,12 +74,6 @@ class UpdateExecutorTest extends KernelTestCase $this->assertIsArray($logs); } - public function testGetBackupsReturnsArray(): void - { - $backups = $this->updateExecutor->getBackups(); - - $this->assertIsArray($backups); - } public function testValidateUpdatePreconditionsReturnsProperStructure(): void { From 7a856bf6f1015c862395f822d558eacc623eddb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 2 Feb 2026 20:37:02 +0100 Subject: [PATCH 052/172] Try to emulate nohup behavior on windows --- src/Services/System/UpdateExecutor.php | 29 ++++++++++++++++++-------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/Services/System/UpdateExecutor.php b/src/Services/System/UpdateExecutor.php index 9f73c63a..6a40af6e 100644 --- a/src/Services/System/UpdateExecutor.php +++ b/src/Services/System/UpdateExecutor.php @@ -835,15 +835,26 @@ class UpdateExecutor $this->filesystem->mkdir($logDir, 0755); } - // Use nohup to properly detach the process from the web request - // The process will continue running even after the PHP request ends - $command = sprintf( - 'nohup php %s partdb:update %s %s --force --no-interaction >> %s 2>&1 &', - escapeshellarg($consolePath), - escapeshellarg($targetVersion), - $createBackup ? '' : '--no-backup', - escapeshellarg($logFile) - ); + //If we are on Windows, we cannot use nohup + if (PHP_OS_FAMILY === 'Windows') { + $command = sprintf( + 'start /B php %s partdb:update %s %s --force --no-interaction >> %s 2>&1', + escapeshellarg($consolePath), + escapeshellarg($targetVersion), + $createBackup ? '' : '--no-backup', + escapeshellarg($logFile) + ); + } else { //Unix like platforms should be able to use nohup + // Use nohup to properly detach the process from the web request + // The process will continue running even after the PHP request ends + $command = sprintf( + 'nohup php %s partdb:update %s %s --force --no-interaction >> %s 2>&1 &', + escapeshellarg($consolePath), + escapeshellarg($targetVersion), + $createBackup ? '' : '--no-backup', + escapeshellarg($logFile) + ); + } $this->logger->info('Starting background update', [ 'command' => $command, From 2b94ff952c67a46d372450256f20958bf65b086c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 2 Feb 2026 20:49:21 +0100 Subject: [PATCH 053/172] Use different symbol for update manager --- src/Services/Trees/ToolsTreeBuilder.php | 2 +- templates/admin/update_manager/index.html.twig | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Services/Trees/ToolsTreeBuilder.php b/src/Services/Trees/ToolsTreeBuilder.php index 5356781b..6397e3af 100644 --- a/src/Services/Trees/ToolsTreeBuilder.php +++ b/src/Services/Trees/ToolsTreeBuilder.php @@ -329,7 +329,7 @@ class ToolsTreeBuilder $nodes[] = (new TreeViewNode( $this->translator->trans('tree.tools.system.update_manager'), $this->urlGenerator->generate('admin_update_manager') - ))->setIcon('fa-fw fa-treeview fa-solid fa-cloud-download-alt'); + ))->setIcon('fa-fw fa-treeview fa-solid fa-arrow-circle-up'); } return $nodes; diff --git a/templates/admin/update_manager/index.html.twig b/templates/admin/update_manager/index.html.twig index 24dfcc96..3968de93 100644 --- a/templates/admin/update_manager/index.html.twig +++ b/templates/admin/update_manager/index.html.twig @@ -3,7 +3,7 @@ {% block title %}Part-DB {% trans %}update_manager.title{% endtrans %}{% endblock %} {% block card_title %} - Part-DB {% trans %}update_manager.title{% endtrans %} + Part-DB {% trans %}update_manager.title{% endtrans %} {% endblock %} {% block card_content %} From 29a08d152a03467b98a277128c88964809d2af6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 2 Feb 2026 20:52:42 +0100 Subject: [PATCH 054/172] Use version info from updateChecker to be consistent --- src/Services/System/UpdateAvailableFacade.php | 4 ---- src/Services/System/UpdateExecutor.php | 4 ++-- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/Services/System/UpdateAvailableFacade.php b/src/Services/System/UpdateAvailableFacade.php index 2a00321c..d9f18997 100644 --- a/src/Services/System/UpdateAvailableFacade.php +++ b/src/Services/System/UpdateAvailableFacade.php @@ -24,12 +24,8 @@ declare(strict_types=1); namespace App\Services\System; use App\Settings\SystemSettings\PrivacySettings; -use Psr\Log\LoggerInterface; -use Shivas\VersioningBundle\Service\VersionManagerInterface; -use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Contracts\Cache\CacheInterface; use Symfony\Contracts\Cache\ItemInterface; -use Symfony\Contracts\HttpClient\HttpClientInterface; use Version\Version; /** diff --git a/src/Services/System/UpdateExecutor.php b/src/Services/System/UpdateExecutor.php index 6a40af6e..1dfc3dc1 100644 --- a/src/Services/System/UpdateExecutor.php +++ b/src/Services/System/UpdateExecutor.php @@ -55,7 +55,7 @@ class UpdateExecutor private readonly LoggerInterface $logger, private readonly Filesystem $filesystem, private readonly InstallationTypeDetector $installationTypeDetector, - private readonly VersionManagerInterface $versionManager, + private readonly UpdateChecker $updateChecker, private readonly BackupManager $backupManager, private readonly CommandRunHelper $commandRunHelper, #[Autowire(param: 'app.debug_mode')] @@ -68,7 +68,7 @@ class UpdateExecutor */ private function getCurrentVersionString(): string { - return $this->versionManager->getVersion()->toString(); + return $this->updateChecker->getCurrentVersionString(); } /** From 883e3b271dc58f04d63d759f0cd6ecf42677f623 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 2 Feb 2026 21:02:08 +0100 Subject: [PATCH 055/172] Fixed git commit hash logic --- .../System/GitVersionInfoProvider.php | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/Services/System/GitVersionInfoProvider.php b/src/Services/System/GitVersionInfoProvider.php index 6d067333..01925ff8 100644 --- a/src/Services/System/GitVersionInfoProvider.php +++ b/src/Services/System/GitVersionInfoProvider.php @@ -85,20 +85,26 @@ final readonly class GitVersionInfoProvider */ public function getCommitHash(int $length = 8): ?string { - $filename = $this->getGitDirectory() . '/refs/remotes/origin/'.$this->getBranchName(); - if (is_file($filename)) { - $head = file($filename); - - if (!isset($head[0])) { - return null; - } - - $hash = $head[0]; - - return substr($hash, 0, $length); + $path = $this->getGitDirectory() . '/HEAD'; + if (!file_exists($path)) { + return null; } - return null; // this is not a Git installation + $head = trim(file_get_contents($path)); + + // If it's a symbolic ref (e.g., "ref: refs/heads/main") + if (str_starts_with($head, 'ref:')) { + $refPath = $this->getGitDirectory() . '/' . trim(substr($head, 5)); + if (file_exists($refPath)) { + $hash = trim(file_get_contents($refPath)); + } + } else { + // Otherwise, it's a detached HEAD (the hash is right there) + $hash = $head; + } + + return isset($hash) ? substr($hash, 0, $length) : null; + } /** From d06df4410d8ed60d600c7b1cb5afb6f3ab122107 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 2 Feb 2026 21:18:03 +0100 Subject: [PATCH 056/172] Disable the web updater and web backup restore for now This can become default, when there is more experience with the web updated --- .env | 4 ++-- VERSION | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.env b/.env index 3196241b..1956f2fe 100644 --- a/.env +++ b/.env @@ -65,11 +65,11 @@ ERROR_PAGE_SHOW_HELP=1 # Set this to 1 to completely disable web-based updates, regardless of user permissions. # Use this if you prefer to manage updates through your own deployment process. -DISABLE_WEB_UPDATES=0 +DISABLE_WEB_UPDATES=1 # Set this to 1 to disable the backup restore feature from the web UI. # Restoring backups is a destructive operation that could cause data loss. -DISABLE_BACKUP_RESTORE=0 +DISABLE_BACKUP_RESTORE=1 ################################################################################### # SAML Single sign on-settings diff --git a/VERSION b/VERSION index 73462a5a..437459cd 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.5.1 +2.5.0 From 0e5a73b6f435de2050259ddbb070567ad6c68744 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 2 Feb 2026 21:22:06 +0100 Subject: [PATCH 057/172] Add nonce to inline script in progress bar --- templates/admin/update_manager/progress.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/admin/update_manager/progress.html.twig b/templates/admin/update_manager/progress.html.twig index c45a4e78..597b8a9a 100644 --- a/templates/admin/update_manager/progress.html.twig +++ b/templates/admin/update_manager/progress.html.twig @@ -186,7 +186,7 @@
{# JavaScript refresh - more reliable than meta refresh #} - - - diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index b6537a5f..c9167bd4 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -14718,60 +14718,6 @@ Buerklin-API Authentication server: bytes - - - update_manager.maintenance.title - Maintenance - - - - - update_manager.maintenance.heading - Part-DB is Updating - - - - - update_manager.maintenance.description - We're installing updates to make Part-DB even better. This should only take a moment. - - - - - update_manager.maintenance.step_backup - Creating backup - - - - - update_manager.maintenance.step_download - Downloading updates - - - - - update_manager.maintenance.step_install - Installing files - - - - - update_manager.maintenance.step_migrate - Running migrations - - - - - update_manager.maintenance.step_cache - Clearing cache - - - - - update_manager.maintenance.auto_refresh - This page will refresh automatically when the update is complete. - - perm.system.manage_updates From 1a06432cec3dda5da3f052c2bf4ecd78e793afbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 2 Feb 2026 22:16:26 +0100 Subject: [PATCH 064/172] Removed custom yes and no translations --- templates/admin/update_manager/index.html.twig | 8 ++++---- translations/messages.en.xlf | 12 ------------ 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/templates/admin/update_manager/index.html.twig b/templates/admin/update_manager/index.html.twig index 9b95637d..44b9f8c0 100644 --- a/templates/admin/update_manager/index.html.twig +++ b/templates/admin/update_manager/index.html.twig @@ -87,11 +87,11 @@ {% if status.git.has_local_changes %} - {% trans %}update_manager.yes{% endtrans %} + {% trans %}Yes{% endtrans %} {% else %} - {% trans %}update_manager.no{% endtrans %} + {% trans %}No{% endtrans %} {% endif %} @@ -102,11 +102,11 @@ {% if status.can_auto_update %} - {% trans %}update_manager.yes{% endtrans %} + {% trans %}Yes{% endtrans %} {% else %} - {% trans %}update_manager.no{% endtrans %} + {% trans %}No{% endtrans %} {% endif %} diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index c9167bd4..7a7408c1 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -14442,18 +14442,6 @@ Buerklin-API Authentication server: For safety and reliability, updates should be performed via the command line interface. The update process will automatically create a backup, enable maintenance mode, and handle migrations. - - - update_manager.yes - Yes - - - - - update_manager.no - No - - update_manager.up_to_date From 9ca1834d9bde039c49ac57f6e75667bd79e9de28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 2 Feb 2026 23:07:24 +0100 Subject: [PATCH 065/172] Removed unused translations --- translations/messages.en.xlf | 126 ----------------------------------- 1 file changed, 126 deletions(-) diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 7a7408c1..6f8250ad 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -14544,84 +14544,6 @@ Buerklin-API Authentication server: No backups found - - - update_manager.pre_update_checklist - Pre-Update Checklist - - - - - update_manager.before_updating - Before Updating - - - - - update_manager.checklist.requirements - All requirements met - - - - - update_manager.checklist.no_local_changes - No local modifications - - - - - update_manager.checklist.backup_created - Backup will be created automatically - - - - - update_manager.checklist.read_release_notes - Read release notes for breaking changes - - - - - update_manager.update_will - The Update Will - - - - - update_manager.will.backup - Create a full backup - - - - - update_manager.will.maintenance - Enable maintenance mode - - - - - update_manager.will.git - Pull latest code from Git - - - - - update_manager.will.composer - Update dependencies via Composer - - - - - update_manager.will.migrations - Run database migrations - - - - - update_manager.will.cache - Clear and rebuild cache - - update_manager.validation_issues @@ -14712,66 +14634,24 @@ Buerklin-API Authentication server: Manage Part-DB updates - - - update_manager.update_now - Update Now - - - - - update_manager.update_from_to - Update from %from% to %to% - - - - - update_manager.update_description - Click the button to start the update process. A backup will be created automatically and you can monitor the progress. - - - - - update_manager.start_update - Start Update - - update_manager.create_backup Create backup before updating (recommended) - - - update_manager.estimated_time - Update typically takes 2-5 minutes - - update_manager.confirm_update Are you sure you want to update Part-DB? A backup will be created before the update. - - - update_manager.starting - Starting... - - update_manager.already_up_to_date You are running the latest version of Part-DB. - - - update_manager.cli_alternative - Alternatively, you can update via the command line: - - update_manager.progress.title @@ -14868,12 +14748,6 @@ Buerklin-API Authentication server: Downgrade Progress - - - update_manager.progress.downgrading - Downgrading Part-DB... - - update_manager.progress.downgrading_to From a755287c3b867910a3f211deabb99e6e172a46e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 2 Feb 2026 23:09:52 +0100 Subject: [PATCH 066/172] Make maintenance command available under partdb:maintenance-mode to make it more consistent with other hyphen command tools --- src/Command/MaintenanceModeCommand.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Command/MaintenanceModeCommand.php b/src/Command/MaintenanceModeCommand.php index 37f59af1..7fdea97e 100644 --- a/src/Command/MaintenanceModeCommand.php +++ b/src/Command/MaintenanceModeCommand.php @@ -32,7 +32,7 @@ use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; -#[AsCommand('partdb:maintenance_mode', 'Enable/disable maintenance mode and set a message')] +#[AsCommand('partdb:maintenance-mode', 'Enable/disable maintenance mode and set a message')] class MaintenanceModeCommand extends Command { public function __construct( From cad5261aba8b123158ed7039e955f0a842254141 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 2 Feb 2026 23:26:18 +0100 Subject: [PATCH 067/172] Fixed phpstan issues --- phpstan.dist.neon | 6 ++++++ src/Command/MaintenanceModeCommand.php | 2 +- src/Services/System/CommandRunHelper.php | 2 -- src/Services/System/UpdateAvailableFacade.php | 2 -- src/Services/System/UpdateChecker.php | 7 ++----- src/Services/System/UpdateExecutor.php | 2 ++ 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/phpstan.dist.neon b/phpstan.dist.neon index fc7b3524..eb629314 100644 --- a/phpstan.dist.neon +++ b/phpstan.dist.neon @@ -6,6 +6,9 @@ parameters: - src # - tests + banned_code: + non_ignorable: false # Allow to ignore some banned code + excludePaths: - src/DataTables/Adapter/* - src/Configuration/* @@ -61,3 +64,6 @@ parameters: # Ignore error of unused WithPermPresetsTrait, as it is used in the migrations which are not analyzed by Phpstan - '#Trait App\\Migration\\WithPermPresetsTrait is used zero times and is not analysed#' + - + message: '#Should not use function "shell_exec"#' + path: src/Services/System/UpdateExecutor.php diff --git a/src/Command/MaintenanceModeCommand.php b/src/Command/MaintenanceModeCommand.php index 7fdea97e..47b1eaef 100644 --- a/src/Command/MaintenanceModeCommand.php +++ b/src/Command/MaintenanceModeCommand.php @@ -106,7 +106,7 @@ class MaintenanceModeCommand extends Command if ($enable) { // Use provided message or fallback to a default English message - $reason = is_string($message) && $message !== '' + $reason = is_string($message) ? $message : 'The system is temporarily unavailable due to maintenance.'; diff --git a/src/Services/System/CommandRunHelper.php b/src/Services/System/CommandRunHelper.php index 7a144d5f..19bc8548 100644 --- a/src/Services/System/CommandRunHelper.php +++ b/src/Services/System/CommandRunHelper.php @@ -28,8 +28,6 @@ use Symfony\Component\Process\Process; class CommandRunHelper { - private UpdateExecutor $updateExecutor; - public function __construct( #[Autowire(param: 'kernel.project_dir')] private readonly string $project_dir ) diff --git a/src/Services/System/UpdateAvailableFacade.php b/src/Services/System/UpdateAvailableFacade.php index d9f18997..ac3a46c0 100644 --- a/src/Services/System/UpdateAvailableFacade.php +++ b/src/Services/System/UpdateAvailableFacade.php @@ -33,8 +33,6 @@ use Version\Version; */ class UpdateAvailableFacade { - - private const API_URL = 'https://api.github.com/repos/Part-DB/Part-DB-server/releases/latest'; private const CACHE_KEY = 'uam_latest_version'; private const CACHE_TTL = 60 * 60 * 24 * 2; // 2 day diff --git a/src/Services/System/UpdateChecker.php b/src/Services/System/UpdateChecker.php index e388d51f..fdb8d9dd 100644 --- a/src/Services/System/UpdateChecker.php +++ b/src/Services/System/UpdateChecker.php @@ -145,15 +145,12 @@ class UpdateChecker /** * Get all available releases from GitHub (cached). * - * @return array + * @return array */ public function getAvailableReleases(int $limit = 10): array { if (!$this->privacySettings->checkForUpdates) { - return [ //If we don't want to check for updates, we can return dummy data - 'version' => '0.0.1', - 'url' => 'update-checking-disabled' - ]; + return []; } return $this->updateCache->get(self::CACHE_KEY_RELEASES, function (ItemInterface $item) use ($limit) { diff --git a/src/Services/System/UpdateExecutor.php b/src/Services/System/UpdateExecutor.php index 1dfc3dc1..2fe54173 100644 --- a/src/Services/System/UpdateExecutor.php +++ b/src/Services/System/UpdateExecutor.php @@ -863,6 +863,8 @@ class UpdateExecutor // Execute in background using shell_exec for proper detachment // shell_exec with & runs the command in background + + //@php-ignore-next-line We really need to use shell_exec here $output = shell_exec($command); // Give it a moment to start From 984529bc7940ef30f62469c6b944c396469c75f0 Mon Sep 17 00:00:00 2001 From: Sebastian Almberg <83243306+Sebbeben@users.noreply.github.com> Date: Tue, 3 Feb 2026 11:55:53 +0100 Subject: [PATCH 068/172] Add Update Manager documentation - Add comprehensive update_manager.md with feature overview - Document CLI commands (partdb:update, partdb:maintenance-mode) - Document web interface and permissions - Add security considerations and troubleshooting - Update console_commands.md with new commands --- docs/usage/console_commands.md | 8 ++ docs/usage/update_manager.md | 170 +++++++++++++++++++++++++++++++++ 2 files changed, 178 insertions(+) create mode 100644 docs/usage/update_manager.md diff --git a/docs/usage/console_commands.md b/docs/usage/console_commands.md index b42bb757..576b3314 100644 --- a/docs/usage/console_commands.md +++ b/docs/usage/console_commands.md @@ -50,6 +50,14 @@ docker exec --user=www-data partdb php bin/console cache:clear * `php bin/console partdb:currencies:update-exchange-rates`: Update the exchange rates of all currencies from the internet +## Update Manager commands + +{: .note } +> The Update Manager is an experimental feature. See the [Update Manager documentation](update_manager.md) for details. + +* `php bin/console partdb:update`: Check for and perform updates to Part-DB. Use `--check` to only check for updates without installing. +* `php bin/console partdb:maintenance-mode`: Enable, disable, or check the status of maintenance mode. Use `--enable`, `--disable`, or `--status`. + ## Installation/Maintenance commands * `php bin/console partdb:backup`: Backup the database and the attachments diff --git a/docs/usage/update_manager.md b/docs/usage/update_manager.md new file mode 100644 index 00000000..43fe2c94 --- /dev/null +++ b/docs/usage/update_manager.md @@ -0,0 +1,170 @@ +--- +title: Update Manager +layout: default +parent: Usage +--- + +# Update Manager (Experimental) + +{: .warning } +> The Update Manager is currently an **experimental feature**. It is disabled by default while user experience data is being gathered. Use with caution and always ensure you have proper backups before updating. + +Part-DB includes an Update Manager that can automatically update Git-based installations to newer versions. The Update Manager provides both a web interface and CLI commands for managing updates, backups, and maintenance mode. + +## Supported Installation Types + +The Update Manager currently supports automatic updates only for **Git clone** installations. Other installation types show manual update instructions: + +| Installation Type | Auto-Update | Instructions | +|-------------------|-------------|--------------| +| Git Clone | Yes | Automatic via CLI or Web UI | +| Docker | No | Pull new image: `docker-compose pull && docker-compose up -d` | +| ZIP Release | No | Download and extract new release manually | + +## Enabling the Update Manager + +By default, web-based updates and backup restore are **disabled** for security reasons. To enable them, add these settings to your `.env.local` file: + +```bash +# Enable web-based updates (default: disabled) +DISABLE_WEB_UPDATES=0 + +# Enable backup restore via web interface (default: disabled) +DISABLE_BACKUP_RESTORE=0 +``` + +{: .note } +> Even with web updates disabled, you can still use the CLI commands to perform updates. + +## CLI Commands + +### Update Command + +Check for updates or perform an update: + +```bash +# Check for available updates +php bin/console partdb:update --check + +# Update to the latest version +php bin/console partdb:update + +# Update to a specific version +php bin/console partdb:update v2.6.0 + +# Update without creating a backup first +php bin/console partdb:update --no-backup + +# Force update without confirmation prompt +php bin/console partdb:update --force +``` + +### Maintenance Mode Command + +Manually enable or disable maintenance mode: + +```bash +# Enable maintenance mode with default message +php bin/console partdb:maintenance-mode --enable + +# Enable with custom message +php bin/console partdb:maintenance-mode --enable "System maintenance until 6 PM" +php bin/console partdb:maintenance-mode --enable --message="Updating to v2.6.0" + +# Disable maintenance mode +php bin/console partdb:maintenance-mode --disable + +# Check current status +php bin/console partdb:maintenance-mode --status +``` + +## Web Interface + +When web updates are enabled, the Update Manager is accessible at **System > Update Manager** (URL: `/system/update-manager`). + +The web interface shows: +- Current version and installation type +- Available updates with release notes +- Precondition validation (Git, Composer, Yarn, permissions) +- Update history and logs +- Backup management + +### Required Permissions + +Users need the following permissions to access the Update Manager: + +| Permission | Description | +|------------|-------------| +| `@system.show_updates` | View update status and available versions | +| `@system.manage_updates` | Perform updates and restore backups | + +## Update Process + +When an update is performed, the following steps are executed: + +1. **Lock** - Acquire exclusive lock to prevent concurrent updates +2. **Maintenance Mode** - Enable maintenance mode to block user access +3. **Rollback Tag** - Create a Git tag for potential rollback +4. **Backup** - Create a full backup (optional but recommended) +5. **Git Fetch** - Fetch latest changes from origin +6. **Git Checkout** - Checkout the target version +7. **Composer Install** - Install/update PHP dependencies +8. **Yarn Install** - Install frontend dependencies +9. **Yarn Build** - Compile frontend assets +10. **Database Migrations** - Run any new migrations +11. **Cache Clear** - Clear the application cache +12. **Cache Warmup** - Rebuild the cache +13. **Maintenance Off** - Disable maintenance mode +14. **Unlock** - Release the update lock + +If any step fails, the system automatically attempts to rollback to the previous version. + +## Backup Management + +The Update Manager automatically creates backups before updates. These backups are stored in `var/backups/` and include: + +- Database dump (SQL file or SQLite database) +- Configuration files (`.env.local`, `parameters.yaml`, `banner.md`) +- Attachment files (`uploads/`, `public/media/`) + +### Restoring from Backup + +{: .warning } +> Backup restore is a destructive operation that will overwrite your current database. Only use this if you need to recover from a failed update. + +If web restore is enabled (`DISABLE_BACKUP_RESTORE=0`), you can restore backups from the web interface. The restore process: + +1. Enables maintenance mode +2. Extracts the backup +3. Restores the database +4. Optionally restores config and attachments +5. Clears and warms up the cache +6. Disables maintenance mode + +## Troubleshooting + +### Precondition Errors + +Before updating, the system validates: + +- **Git available**: Git must be installed and in PATH +- **No local changes**: Uncommitted changes must be committed or stashed +- **Composer available**: Composer must be installed and in PATH +- **Yarn available**: Yarn must be installed and in PATH +- **Write permissions**: `var/`, `vendor/`, and `public/` must be writable +- **Not already locked**: No other update can be in progress + +### Stale Lock + +If an update was interrupted and the lock file remains, it will automatically be removed after 1 hour. You can also manually delete `var/update.lock`. + +### Viewing Update Logs + +Update logs are stored in `var/log/updates/` and can be viewed from the web interface or directly on the server. + +## Security Considerations + +- **Disable web updates in production** unless you specifically need them +- The Update Manager requires shell access to run Git, Composer, and Yarn +- Backup files may contain sensitive data (database, config) - secure the `var/backups/` directory +- Consider running updates during maintenance windows with low user activity From e83e7398a27ad68bc40b9d8c753783af49bec61d Mon Sep 17 00:00:00 2001 From: Sebastian Almberg <83243306+Sebbeben@users.noreply.github.com> Date: Tue, 3 Feb 2026 20:16:24 +0100 Subject: [PATCH 069/172] Improve .env comments for Update Manager settings Clarify that 0=enabled and 1=disabled for DISABLE_WEB_UPDATES and DISABLE_BACKUP_RESTORE environment variables. --- .env | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.env b/.env index 1956f2fe..3ba3d65d 100644 --- a/.env +++ b/.env @@ -63,12 +63,12 @@ ERROR_PAGE_SHOW_HELP=1 # Update Manager settings ################################################################################### -# Set this to 1 to completely disable web-based updates, regardless of user permissions. -# Use this if you prefer to manage updates through your own deployment process. +# Disable web-based updates from the Update Manager UI (0=enabled, 1=disabled). +# When disabled, use the CLI command "php bin/console partdb:update" instead. DISABLE_WEB_UPDATES=1 -# Set this to 1 to disable the backup restore feature from the web UI. -# Restoring backups is a destructive operation that could cause data loss. +# Disable backup restore from the Update Manager UI (0=enabled, 1=disabled). +# Restoring backups is a destructive operation that could overwrite your database. DISABLE_BACKUP_RESTORE=1 ################################################################################### From c34acfe5239befc90e82fe21a63f6437b3bae768 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 3 Feb 2026 20:34:03 +0100 Subject: [PATCH 070/172] Allow to view progress view while update is running --- src/EventSubscriber/MaintenanceModeSubscriber.php | 5 +++++ templates/admin/update_manager/progress.html.twig | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/EventSubscriber/MaintenanceModeSubscriber.php b/src/EventSubscriber/MaintenanceModeSubscriber.php index 6efa975e..654ba9f2 100644 --- a/src/EventSubscriber/MaintenanceModeSubscriber.php +++ b/src/EventSubscriber/MaintenanceModeSubscriber.php @@ -62,6 +62,11 @@ readonly class MaintenanceModeSubscriber implements EventSubscriberInterface return; } + //Allow to view the progress page + if (preg_match('#^/\w{2}/system/update-manager/progress#', $event->getRequest()->getPathInfo())) { + return; + } + // Allow CLI requests if (PHP_SAPI === 'cli') { return; diff --git a/templates/admin/update_manager/progress.html.twig b/templates/admin/update_manager/progress.html.twig index 597b8a9a..54ac6595 100644 --- a/templates/admin/update_manager/progress.html.twig +++ b/templates/admin/update_manager/progress.html.twig @@ -29,7 +29,7 @@ {{ parent() }} {# Auto-refresh while update is running - also refresh when 'starting' status #} {% if not progress or progress.status == 'running' or progress.status == 'starting' %} - + {% endif %} {% endblock %} @@ -189,7 +189,7 @@ {% endif %} From 5ceadc8353648aed1b588c2d7c0cd1b3ab42412d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 3 Feb 2026 20:49:25 +0100 Subject: [PATCH 071/172] Use a special settings cache that lives in cache.system to ensure that it is properly cleared on cache clear --- config/packages/cache.yaml | 4 ++++ config/packages/settings.yaml | 1 + 2 files changed, 5 insertions(+) diff --git a/config/packages/cache.yaml b/config/packages/cache.yaml index 6adea442..c1816aa2 100644 --- a/config/packages/cache.yaml +++ b/config/packages/cache.yaml @@ -23,3 +23,7 @@ framework: info_provider.cache: adapter: cache.app + + cache.settings: + adapter: cache.system + tags: true diff --git a/config/packages/settings.yaml b/config/packages/settings.yaml index c16d1804..b3d209f6 100644 --- a/config/packages/settings.yaml +++ b/config/packages/settings.yaml @@ -3,6 +3,7 @@ jbtronics_settings: cache: default_cacheable: true + service: 'cache.settings' orm_storage: default_entity_class: App\Entity\SettingsEntry From 1601382b41275c715c71b508505042c7ecbe893f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 3 Feb 2026 20:55:31 +0100 Subject: [PATCH 072/172] Added translation for downgrading in progress title --- translations/messages.en.xlf | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 6f8250ad..89b03824 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -14688,6 +14688,12 @@ Buerklin-API Authentication server: Updating to version %version% + + + update_manager.progress.downgrading_to + Downgrading to version %version% + + update_manager.progress.error @@ -14748,12 +14754,6 @@ Buerklin-API Authentication server: Downgrade Progress - - - update_manager.progress.downgrading_to - Downgrading to version %version% - - update_manager.progress.downgrade_completed From bc28eb947319b8eddcc2a91bb91cd2e232f6b0bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 3 Feb 2026 21:42:50 +0100 Subject: [PATCH 073/172] Remove lowercase version of Makefile that causes warnings on Windows --- makefile | 91 -------------------------------------------------------- 1 file changed, 91 deletions(-) delete mode 100644 makefile diff --git a/makefile b/makefile deleted file mode 100644 index bc4d0bf3..00000000 --- a/makefile +++ /dev/null @@ -1,91 +0,0 @@ -# PartDB Makefile for Test Environment Management - -.PHONY: help deps-install lint format format-check test coverage pre-commit all test-typecheck \ -test-setup test-clean test-db-create test-db-migrate test-cache-clear test-fixtures test-run test-reset \ -section-dev dev-setup dev-clean dev-db-create dev-db-migrate dev-cache-clear dev-warmup dev-reset - -# Default target -help: ## Show this help - @awk 'BEGIN {FS = ":.*##"}; /^[a-zA-Z0-9][a-zA-Z0-9_-]+:.*##/ {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) - -# Dependencies -deps-install: ## Install PHP dependencies with unlimited memory - @echo "📦 Installing PHP dependencies..." - COMPOSER_MEMORY_LIMIT=-1 composer install - yarn install - @echo "✅ Dependencies installed" - -# Complete test environment setup -test-setup: test-clean test-db-create test-db-migrate test-fixtures ## Complete test setup (clean, create DB, migrate, fixtures) - @echo "✅ Test environment setup complete!" - -# Clean test environment -test-clean: ## Clean test cache and database files - @echo "🧹 Cleaning test environment..." - rm -rf var/cache/test - rm -f var/app_test.db - @echo "✅ Test environment cleaned" - -# Create test database -test-db-create: ## Create test database (if not exists) - @echo "🗄️ Creating test database..." - -php bin/console doctrine:database:create --if-not-exists --env test || echo "⚠️ Database creation failed (expected for SQLite) - continuing..." - -# Run database migrations for test environment -test-db-migrate: ## Run database migrations for test environment - @echo "🔄 Running database migrations..." - COMPOSER_MEMORY_LIMIT=-1 php bin/console doctrine:migrations:migrate -n --env test - -# Clear test cache -test-cache-clear: ## Clear test cache - @echo "🗑️ Clearing test cache..." - rm -rf var/cache/test - @echo "✅ Test cache cleared" - -# Load test fixtures -test-fixtures: ## Load test fixtures - @echo "📦 Loading test fixtures..." - php bin/console partdb:fixtures:load -n --env test - -# Run PHPUnit tests -test-run: ## Run PHPUnit tests - @echo "🧪 Running tests..." - php bin/phpunit - -# Quick test reset (clean + migrate + fixtures, skip DB creation) -test-reset: test-cache-clear test-db-migrate test-fixtures - @echo "✅ Test environment reset complete!" - -test-typecheck: ## Run static analysis (PHPStan) - @echo "🧪 Running type checks..." - COMPOSER_MEMORY_LIMIT=-1 composer phpstan - -# Development helpers -dev-setup: dev-clean dev-db-create dev-db-migrate dev-warmup ## Complete development setup (clean, create DB, migrate, warmup) - @echo "✅ Development environment setup complete!" - -dev-clean: ## Clean development cache and database files - @echo "🧹 Cleaning development environment..." - rm -rf var/cache/dev - rm -f var/app_dev.db - @echo "✅ Development environment cleaned" - -dev-db-create: ## Create development database (if not exists) - @echo "🗄️ Creating development database..." - -php bin/console doctrine:database:create --if-not-exists --env dev || echo "⚠️ Database creation failed (expected for SQLite) - continuing..." - -dev-db-migrate: ## Run database migrations for development environment - @echo "🔄 Running database migrations..." - COMPOSER_MEMORY_LIMIT=-1 php bin/console doctrine:migrations:migrate -n --env dev - -dev-cache-clear: ## Clear development cache - @echo "🗑️ Clearing development cache..." - rm -rf var/cache/dev - @echo "✅ Development cache cleared" - -dev-warmup: ## Warm up development cache - @echo "🔥 Warming up development cache..." - COMPOSER_MEMORY_LIMIT=-1 php -d memory_limit=1G bin/console cache:warmup --env dev -n - -dev-reset: dev-cache-clear dev-db-migrate ## Quick development reset (cache clear + migrate) - @echo "✅ Development environment reset complete!" \ No newline at end of file From c027f9ab03cf760843744faea7c7d379396b3bf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 3 Feb 2026 21:48:17 +0100 Subject: [PATCH 074/172] Updated dependencies --- composer.lock | 80 +++++++++++++++---------- config/reference.php | 1 + yarn.lock | 138 +++++++++++++++++++++---------------------- 3 files changed, 118 insertions(+), 101 deletions(-) diff --git a/composer.lock b/composer.lock index 2ee826f6..56ab8701 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "ec69ea04bcf5c1ebd8bb0280a5bb9565", + "content-hash": "8e387d6d016f33eb7302c47ecb7a12b9", "packages": [ { "name": "amphp/amp", @@ -4997,16 +4997,16 @@ }, { "name": "jbtronics/settings-bundle", - "version": "v3.1.3", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/jbtronics/settings-bundle.git", - "reference": "a99c6e4cde40b829c1643b89da506b9588b11eaf" + "reference": "6a66c099460fd623d0d1ddbf9864b3173d416c3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jbtronics/settings-bundle/zipball/a99c6e4cde40b829c1643b89da506b9588b11eaf", - "reference": "a99c6e4cde40b829c1643b89da506b9588b11eaf", + "url": "https://api.github.com/repos/jbtronics/settings-bundle/zipball/6a66c099460fd623d0d1ddbf9864b3173d416c3b", + "reference": "6a66c099460fd623d0d1ddbf9864b3173d416c3b", "shasum": "" }, "require": { @@ -5067,7 +5067,7 @@ ], "support": { "issues": "https://github.com/jbtronics/settings-bundle/issues", - "source": "https://github.com/jbtronics/settings-bundle/tree/v3.1.3" + "source": "https://github.com/jbtronics/settings-bundle/tree/v3.2.0" }, "funding": [ { @@ -5079,7 +5079,7 @@ "type": "github" } ], - "time": "2026-01-02T23:58:02+00:00" + "time": "2026-02-03T20:13:02+00:00" }, { "name": "jfcherng/php-color-output", @@ -7191,16 +7191,16 @@ }, { "name": "nette/utils", - "version": "v4.1.1", + "version": "v4.1.2", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "c99059c0315591f1a0db7ad6002000288ab8dc72" + "reference": "f76b5dc3d6c6d3043c8d937df2698515b99cbaf5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/c99059c0315591f1a0db7ad6002000288ab8dc72", - "reference": "c99059c0315591f1a0db7ad6002000288ab8dc72", + "url": "https://api.github.com/repos/nette/utils/zipball/f76b5dc3d6c6d3043c8d937df2698515b99cbaf5", + "reference": "f76b5dc3d6c6d3043c8d937df2698515b99cbaf5", "shasum": "" }, "require": { @@ -7213,7 +7213,7 @@ "require-dev": { "jetbrains/phpstorm-attributes": "^1.2", "nette/tester": "^2.5", - "phpstan/phpstan-nette": "^2.0@stable", + "phpstan/phpstan": "^2.0@stable", "tracy/tracy": "^2.9" }, "suggest": { @@ -7274,9 +7274,9 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.1.1" + "source": "https://github.com/nette/utils/tree/v4.1.2" }, - "time": "2025-12-22T12:14:32+00:00" + "time": "2026-02-03T17:21:09+00:00" }, { "name": "nikolaposa/version", @@ -18611,28 +18611,28 @@ }, { "name": "phpunit/php-file-iterator", - "version": "5.1.0", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6" + "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6", - "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/2f3a64888c814fc235386b7387dd5b5ed92ad903", + "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -18660,15 +18660,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.0" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator", + "type": "tidelift" } ], - "time": "2024-08-27T05:02:59+00:00" + "time": "2026-02-02T13:52:54+00:00" }, { "name": "phpunit/php-invoker", @@ -19029,12 +19041,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "8457f2008fc6396be788162c4e04228028306534" + "reference": "57534122edd70a2b3dbb02b65f2091efc57e4ab7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/8457f2008fc6396be788162c4e04228028306534", - "reference": "8457f2008fc6396be788162c4e04228028306534", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/57534122edd70a2b3dbb02b65f2091efc57e4ab7", + "reference": "57534122edd70a2b3dbb02b65f2091efc57e4ab7", "shasum": "" }, "conflict": { @@ -19144,6 +19156,7 @@ "cesnet/simplesamlphp-module-proxystatistics": "<3.1", "chriskacerguis/codeigniter-restserver": "<=2.7.1", "chrome-php/chrome": "<1.14", + "ci4-cms-erp/ci4ms": "<0.28.5", "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", "ckeditor/ckeditor": "<4.25", "clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3", @@ -19175,6 +19188,8 @@ "couleurcitron/tarteaucitron-wp": "<0.3", "cpsit/typo3-mailqueue": "<0.4.3|>=0.5,<0.5.1", "craftcms/cms": "<=4.16.16|>=5,<=5.8.20", + "craftcms/commerce": ">=4.0.0.0-RC1-dev,<=4.10|>=5,<=5.5.1", + "craftcms/composer": ">=4.0.0.0-RC1-dev,<=4.10|>=5.0.0.0-RC1-dev,<=5.5.1", "croogo/croogo": "<=4.0.7", "cuyz/valinor": "<0.12", "czim/file-handling": "<1.5|>=2,<2.3", @@ -19192,7 +19207,7 @@ "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4", "desperado/xml-bundle": "<=0.1.7", "dev-lancer/minecraft-motd-parser": "<=1.0.5", - "devcode-it/openstamanager": "<=2.9.4", + "devcode-it/openstamanager": "<=2.9.8", "devgroup/dotplant": "<2020.09.14-dev", "digimix/wp-svg-upload": "<=1", "directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2", @@ -19275,18 +19290,18 @@ "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1|>=5.3.0.0-beta1,<5.3.5", "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", "ezsystems/ezplatform-http-cache": "<2.3.16", - "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.35", + "ezsystems/ezplatform-kernel": "<=1.2.5|>=1.3,<1.3.35", "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", "ezsystems/ezplatform-richtext": ">=2.3,<2.3.26|>=3.3,<3.3.40", "ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15", "ezsystems/ezplatform-user": ">=1,<1.0.1", - "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.31", + "ezsystems/ezpublish-kernel": "<=6.13.8.1|>=7,<7.5.31", "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.03.5.1", "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15", "ezyang/htmlpurifier": "<=4.2", "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", - "facturascripts/facturascripts": "<=2025.4|==2025.11|==2025.41|==2025.43", + "facturascripts/facturascripts": "<2025.81", "fastly/magento2": "<1.2.26", "feehi/cms": "<=2.1.1", "feehi/feehicms": "<=2.1.1", @@ -19575,7 +19590,7 @@ "open-web-analytics/open-web-analytics": "<1.8.1", "opencart/opencart": ">=0", "openid/php-openid": "<2.3", - "openmage/magento-lts": "<20.16", + "openmage/magento-lts": "<20.16.1", "opensolutions/vimbadmin": "<=3.0.15", "opensource-workshop/connect-cms": "<1.8.7|>=2,<2.4.7", "orchid/platform": ">=8,<14.43", @@ -20037,7 +20052,7 @@ "type": "tidelift" } ], - "time": "2026-01-30T22:06:58+00:00" + "time": "2026-02-03T19:20:38+00:00" }, { "name": "sebastian/cli-parser", @@ -21564,7 +21579,8 @@ "ext-iconv": "*", "ext-intl": "*", "ext-json": "*", - "ext-mbstring": "*" + "ext-mbstring": "*", + "ext-zip": "*" }, "platform-dev": {}, "platform-overrides": { diff --git a/config/reference.php b/config/reference.php index 82bdc45e..a1a077aa 100644 --- a/config/reference.php +++ b/config/reference.php @@ -2387,6 +2387,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * prefetch_all?: bool|Param, // Default: true * }, * cache?: array{ + * metadata_service?: scalar|Param|null, // Default: "cache.system" * service?: scalar|Param|null, // Default: "cache.app.taggable" * default_cacheable?: bool|Param, // Default: false * ttl?: int|Param, // Default: 0 diff --git a/yarn.lock b/yarn.lock index abbc7d9c..f3355f71 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,58 +2,58 @@ # yarn lockfile v1 -"@algolia/autocomplete-core@1.19.4": - version "1.19.4" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.19.4.tgz#db9e4ef88cd8f2ce5b25e376373a8898dcbe2945" - integrity sha512-yVwXLrfwQ3dAndY12j1pfa0oyC5hTDv+/dgwvVHj57dY3zN6PbAmcHdV5DOOdGJrCMXff+fsPr8G2Ik8zWOPTw== +"@algolia/autocomplete-core@1.19.5": + version "1.19.5" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.19.5.tgz#52d99aafce19493161220e417071f0222eeea7d6" + integrity sha512-/kAE3mMBage/9m0OGnKQteSa7/eIfvhiKx28OWj857+dJ6qYepEBuw5L8its2oTX8ZNM/6TA3fo49kMwgcwjlg== dependencies: - "@algolia/autocomplete-plugin-algolia-insights" "1.19.4" - "@algolia/autocomplete-shared" "1.19.4" + "@algolia/autocomplete-plugin-algolia-insights" "1.19.5" + "@algolia/autocomplete-shared" "1.19.5" -"@algolia/autocomplete-js@1.19.4", "@algolia/autocomplete-js@^1.17.0": - version "1.19.4" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-js/-/autocomplete-js-1.19.4.tgz#235e554d4e46567d7305d8c216b75dd2a0091655" - integrity sha512-ZkwsuTTIEuw+hbsIooMrNLvTVulUSSKqJT3ZeYYd//kA5fHaFf2/T0BDmd9qSGxZRhT5WS8AJYjFARLmj5x08g== +"@algolia/autocomplete-js@1.19.5", "@algolia/autocomplete-js@^1.17.0": + version "1.19.5" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-js/-/autocomplete-js-1.19.5.tgz#2ec3efd9d5efd505ea677775d0199e1207e4624e" + integrity sha512-C2/bEQeqq4nZ4PH2rySRvU9B224KbiCXAPZIn3pmMII/7BiXkppPQyDd+Fdly3ubOmnGFDH6BTzGHamySeOYeg== dependencies: - "@algolia/autocomplete-core" "1.19.4" - "@algolia/autocomplete-preset-algolia" "1.19.4" - "@algolia/autocomplete-shared" "1.19.4" + "@algolia/autocomplete-core" "1.19.5" + "@algolia/autocomplete-preset-algolia" "1.19.5" + "@algolia/autocomplete-shared" "1.19.5" htm "^3.1.1" preact "^10.13.2" -"@algolia/autocomplete-plugin-algolia-insights@1.19.4": - version "1.19.4" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.4.tgz#be14ba50677ea308d43e4f9e96f4542c3da51432" - integrity sha512-K6TQhTKxx0Es1ZbjlAQjgm/QLDOtKvw23MX0xmpvO7AwkmlmaEXo2PwHdVSs3Bquv28CkO2BYKks7jVSIdcXUg== +"@algolia/autocomplete-plugin-algolia-insights@1.19.5": + version "1.19.5" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.5.tgz#05246356fe9837475b08664ff4d6f55960127edc" + integrity sha512-5zbetV9h2VxH+Mxx27I7BH2EIACVRUBE1FNykBK+2c2M+mhXYMY4npHbbGYj6QDEw3VVvH2UxAnghFpCtC6B/w== dependencies: - "@algolia/autocomplete-shared" "1.19.4" + "@algolia/autocomplete-shared" "1.19.5" "@algolia/autocomplete-plugin-recent-searches@^1.17.0": - version "1.19.4" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-recent-searches/-/autocomplete-plugin-recent-searches-1.19.4.tgz#f3a013438f915aac8258481a6504a18bad432c8f" - integrity sha512-8LLAedqcvztFweNWFQuqz9lWIiVlPi+wLF+3qWLPWQZQY3E4bVsbnxVfL9z4AMX9G0lljd2dQitn+Vwkl96d7Q== + version "1.19.5" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-recent-searches/-/autocomplete-plugin-recent-searches-1.19.5.tgz#afd80f8abb281c4c01817a1edfde9a8aa95ed5db" + integrity sha512-lOEliMbohq0BsZJ7JXFHlfmGBNtuCsQW0PLq8m6X1SdMD4XAn8fFxiOO2Nk1A/IiymZcOoHQV71u6f14wiohDw== dependencies: - "@algolia/autocomplete-core" "1.19.4" - "@algolia/autocomplete-js" "1.19.4" - "@algolia/autocomplete-preset-algolia" "1.19.4" - "@algolia/autocomplete-shared" "1.19.4" + "@algolia/autocomplete-core" "1.19.5" + "@algolia/autocomplete-js" "1.19.5" + "@algolia/autocomplete-preset-algolia" "1.19.5" + "@algolia/autocomplete-shared" "1.19.5" -"@algolia/autocomplete-preset-algolia@1.19.4": - version "1.19.4" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.19.4.tgz#258c65112d73376c5c395d1ce67cd668deb06572" - integrity sha512-WhX4mYosy7yBDjkB6c/ag+WKICjvV2fqQv/+NWJlpvnk2JtMaZByi73F6svpQX945J+/PxpQe8YIRBZHuYsLAQ== +"@algolia/autocomplete-preset-algolia@1.19.5": + version "1.19.5" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.19.5.tgz#a9d5756090314c16b8895fa0c74ffccca7f8a1e2" + integrity sha512-afdgxUyBxgX1I34THLScCyC+ld2h8wnCTv7JndRxsRNIJjJpFtRNpnYDq0+HVcp+LYeNd1zksDu7CpltTSEsvA== dependencies: - "@algolia/autocomplete-shared" "1.19.4" + "@algolia/autocomplete-shared" "1.19.5" -"@algolia/autocomplete-shared@1.19.4": - version "1.19.4" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.4.tgz#fd0b92e2723e70c97df4fa7ba0a170c500289918" - integrity sha512-V7tYDgRXP0AqL4alwZBWNm1HPWjJvEU94Nr7Qa2cuPcIAbsTAj7M/F/+Pv/iwOWXl3N7tzVzNkOWm7sX6JT1SQ== +"@algolia/autocomplete-shared@1.19.5": + version "1.19.5" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.5.tgz#1a20f60fd400fd5641718358a2d5c3eb1893cf9c" + integrity sha512-yblBczNXtm2cCVzX4UAY3KkjdefmZPn1gWbIi8Q7qfBw7FjcKq2EjEl/65x4kU9nUc/ZkB5SeUf/bkqLEnA5gA== "@algolia/autocomplete-theme-classic@^1.17.0": - version "1.19.4" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.19.4.tgz#7a0802e7c64dcc3584d5085e23a290a64ade4319" - integrity sha512-/qE8BETNFbul4WrrUyBYgaaKcgFPk0Px9FDKADnr3HlIkXquRpcFHTxXK16jdwXb33yrcXaAVSQZRfUUSSnxVA== + version "1.19.5" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.19.5.tgz#7b0d3ac11f2dca33600fce9ac383056ab4202cdc" + integrity sha512-LjjhOmDbEXmV2IqaA7Xe8jh6lSpG087yC79ffLpXMKJOib4xSHFvPavsXC8NW25pWVHJFoAfplAAmxmeM2/jhw== "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0": version "7.29.0" @@ -1859,10 +1859,10 @@ resolved "https://registry.yarnpkg.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29" integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ== -"@isaacs/brace-expansion@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz#4b3dabab7d8e75a429414a96bd67bf4c1d13e0f3" - integrity sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA== +"@isaacs/brace-expansion@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz#0ef5a92d91f2fff2a37646ce54da9e5f599f6eff" + integrity sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ== dependencies: "@isaacs/balanced-match" "^4.0.1" @@ -2169,9 +2169,9 @@ integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/node@*": - version "25.1.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-25.1.0.tgz#95cc584f1f478301efc86de4f1867e5875e83571" - integrity sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA== + version "25.2.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.2.0.tgz#015b7d228470c1dcbfc17fe9c63039d216b4d782" + integrity sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w== dependencies: undici-types "~7.16.0" @@ -2790,9 +2790,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759: - version "1.0.30001766" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz#b6f6b55cb25a2d888d9393104d14751c6a7d6f7a" - integrity sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA== + version "1.0.30001767" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001767.tgz#0279c498e862efb067938bba0a0aabafe8d0b730" + integrity sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ== ccount@^2.0.0: version "2.0.1" @@ -3671,9 +3671,9 @@ dunder-proto@^1.0.0, dunder-proto@^1.0.1: gopd "^1.2.0" electron-to-chromium@^1.5.263: - version "1.5.283" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.283.tgz#51d492c37c2d845a0dccb113fe594880c8616de8" - integrity sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w== + version "1.5.286" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz#142be1ab5e1cd5044954db0e5898f60a4960384e" + integrity sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A== emoji-regex@^7.0.1: version "7.0.3" @@ -3690,13 +3690,13 @@ emojis-list@^3.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== -enhanced-resolve@^5.0.0, enhanced-resolve@^5.17.4: - version "5.18.4" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz#c22d33055f3952035ce6a144ce092447c525f828" - integrity sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q== +enhanced-resolve@^5.0.0, enhanced-resolve@^5.19.0: + version "5.19.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz#6687446a15e969eaa63c2fa2694510e17ae6d97c" + integrity sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg== dependencies: graceful-fs "^4.2.4" - tapable "^2.2.0" + tapable "^2.3.0" entities@^2.0.0: version "2.2.0" @@ -5589,11 +5589,11 @@ mini-css-extract-plugin@^2.4.2, mini-css-extract-plugin@^2.6.0: tapable "^2.2.1" minimatch@*: - version "10.1.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.1.1.tgz#e6e61b9b0c1dcab116b5a7d1458e8b6ae9e73a55" - integrity sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ== + version "10.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.1.2.tgz#6c3f289f9de66d628fa3feb1842804396a43d81c" + integrity sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw== dependencies: - "@isaacs/brace-expansion" "^5.0.0" + "@isaacs/brace-expansion" "^5.0.1" minimatch@3.0.4: version "3.0.4" @@ -7371,7 +7371,7 @@ tagged-tag@^1.0.0: resolved "https://registry.yarnpkg.com/tagged-tag/-/tagged-tag-1.0.0.tgz#a0b5917c2864cba54841495abfa3f6b13edcf4d6" integrity sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng== -tapable@^2.0.0, tapable@^2.2.0, tapable@^2.2.1, tapable@^2.3.0: +tapable@^2.0.0, tapable@^2.2.1, tapable@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6" integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== @@ -7455,9 +7455,9 @@ to-regex-range@^5.0.1: is-number "^7.0.0" tom-select@^2.1.0: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.4.3.tgz#1daa4131cd317de691f39eb5bf41148265986c1f" - integrity sha512-MFFrMxP1bpnAMPbdvPCZk0KwYxLqhYZso39torcdoefeV/NThNyDu8dV96/INJ5XQVTL3O55+GqQ78Pkj5oCfw== + version "2.4.5" + resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.4.5.tgz#5c91355c9bf024ff5bc9389f8a2a370e4a28126a" + integrity sha512-ujZ5P10kRohKDFElklhkO4dRM+WkUEaytHhOuzbQkZ6MyiR8e2IwGKXab4v+ZNipE2queN8ztlb0MmRLqoM6QA== dependencies: "@orchidjs/sifter" "^1.1.0" "@orchidjs/unicode-variants" "^1.1.2" @@ -7747,7 +7747,7 @@ vfile@^6.0.0: "@types/unist" "^3.0.0" vfile-message "^4.0.0" -watchpack@^2.4.4: +watchpack@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.1.tgz#dd38b601f669e0cbf567cb802e75cead82cde102" integrity sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg== @@ -7843,9 +7843,9 @@ webpack-sources@^3.3.3: integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== webpack@^5.74.0: - version "5.104.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.104.1.tgz#94bd41eb5dbf06e93be165ba8be41b8260d4fb1a" - integrity sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA== + version "5.105.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.0.tgz#38b5e6c5db8cbe81debbd16e089335ada05ea23a" + integrity sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.8" @@ -7857,7 +7857,7 @@ webpack@^5.74.0: acorn-import-phases "^1.0.3" browserslist "^4.28.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.17.4" + enhanced-resolve "^5.19.0" es-module-lexer "^2.0.0" eslint-scope "5.1.1" events "^3.2.0" @@ -7870,7 +7870,7 @@ webpack@^5.74.0: schema-utils "^4.3.3" tapable "^2.3.0" terser-webpack-plugin "^5.3.16" - watchpack "^2.4.4" + watchpack "^2.5.1" webpack-sources "^3.3.3" which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: From ea748dc469e0c90cb95444de3c7e306b19c7fb0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 3 Feb 2026 21:49:31 +0100 Subject: [PATCH 075/172] Use cache.app adapter for settings content cache --- config/packages/cache.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/packages/cache.yaml b/config/packages/cache.yaml index c1816aa2..846033d6 100644 --- a/config/packages/cache.yaml +++ b/config/packages/cache.yaml @@ -25,5 +25,5 @@ framework: adapter: cache.app cache.settings: - adapter: cache.system + adapter: cache.app tags: true From b48de83a3289d6df55a90b4baaa12fb9603612d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 3 Feb 2026 23:04:18 +0100 Subject: [PATCH 076/172] Use brick schema to implement GenericWebProvider This is less error prone than our own parser and also allows to parse Microdata and rdfa lite to support more webshops --- composer.json | 1 + composer.lock | 173 +++++++++++++++++- .../Providers/GenericWebProvider.php | 170 ++++++++--------- 3 files changed, 260 insertions(+), 84 deletions(-) diff --git a/composer.json b/composer.json index 8ce686c2..36dd461e 100644 --- a/composer.json +++ b/composer.json @@ -18,6 +18,7 @@ "api-platform/symfony": "^4.0.0", "beberlei/doctrineextensions": "^1.2", "brick/math": "^0.13.1", + "brick/schema": "^0.2.0", "composer/ca-bundle": "^1.5", "composer/package-versions-deprecated": "^1.11.99.5", "doctrine/data-fixtures": "^2.0.0", diff --git a/composer.lock b/composer.lock index 56ab8701..28d7c981 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "8e387d6d016f33eb7302c47ecb7a12b9", + "content-hash": "7ca9c95fb85f6bf3d9b8a3aa98ca33f6", "packages": [ { "name": "amphp/amp", @@ -2387,6 +2387,117 @@ ], "time": "2025-03-29T13:50:30+00:00" }, + { + "name": "brick/schema", + "version": "0.2.0", + "source": { + "type": "git", + "url": "https://github.com/brick/schema.git", + "reference": "b5114bf5e8092430041a37efe1cfd5279ca764c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/schema/zipball/b5114bf5e8092430041a37efe1cfd5279ca764c0", + "reference": "b5114bf5e8092430041a37efe1cfd5279ca764c0", + "shasum": "" + }, + "require": { + "brick/structured-data": "~0.1.0 || ~0.2.0", + "ext-dom": "*", + "php": "^8.1" + }, + "require-dev": { + "brick/varexporter": "^0.6", + "vimeo/psalm": "6.12.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Schema\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Schema.org library for PHP", + "keywords": [ + "JSON-LD", + "brick", + "microdata", + "rdfa lite", + "schema", + "schema.org", + "structured data" + ], + "support": { + "issues": "https://github.com/brick/schema/issues", + "source": "https://github.com/brick/schema/tree/0.2.0" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2025-06-12T07:03:20+00:00" + }, + { + "name": "brick/structured-data", + "version": "0.2.0", + "source": { + "type": "git", + "url": "https://github.com/brick/structured-data.git", + "reference": "be9b28720e2aba87f19c90500700970be85affde" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/structured-data/zipball/be9b28720e2aba87f19c90500700970be85affde", + "reference": "be9b28720e2aba87f19c90500700970be85affde", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "php": "^8.1", + "sabre/uri": "^2.1 || ^3.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.0", + "phpunit/phpunit": "^8.0 || ^9.0", + "vimeo/psalm": "6.12.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\StructuredData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Microdata, RDFa Lite & JSON-LD structured data reader", + "keywords": [ + "JSON-LD", + "brick", + "microdata", + "rdfa", + "structured data" + ], + "support": { + "issues": "https://github.com/brick/structured-data/issues", + "source": "https://github.com/brick/structured-data/tree/0.2.0" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2025-06-10T23:48:46+00:00" + }, { "name": "composer/ca-bundle", "version": "1.5.10", @@ -9595,6 +9706,66 @@ }, "time": "2025-09-14T07:37:21+00:00" }, + { + "name": "sabre/uri", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sabre-io/uri.git", + "reference": "38eeab6ed9eec435a2188db489d4649c56272c51" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabre-io/uri/zipball/38eeab6ed9eec435a2188db489d4649c56272c51", + "reference": "38eeab6ed9eec435a2188db489d4649c56272c51", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.64", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^1.12", + "phpstan/phpstan-phpunit": "^1.4", + "phpstan/phpstan-strict-rules": "^1.6", + "phpunit/phpunit": "^9.6" + }, + "type": "library", + "autoload": { + "files": [ + "lib/functions.php" + ], + "psr-4": { + "Sabre\\Uri\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", + "role": "Developer" + } + ], + "description": "Functions for making sense out of URIs.", + "homepage": "http://sabre.io/uri/", + "keywords": [ + "rfc3986", + "uri", + "url" + ], + "support": { + "forum": "https://groups.google.com/group/sabredav-discuss", + "issues": "https://github.com/sabre-io/uri/issues", + "source": "https://github.com/fruux/sabre-uri" + }, + "time": "2024-09-04T15:30:08+00:00" + }, { "name": "scheb/2fa-backup-code", "version": "v7.13.1", diff --git a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php index 66d45707..e85ce5f4 100644 --- a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php +++ b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php @@ -32,6 +32,18 @@ use App\Services\InfoProviderSystem\DTOs\SearchResultDTO; use App\Services\InfoProviderSystem\PartInfoRetriever; use App\Services\InfoProviderSystem\ProviderRegistry; use App\Settings\InfoProviderSystem\GenericWebProviderSettings; +use Brick\Schema\Interfaces\ImageObject; +use Brick\Schema\Interfaces\Product; +use Brick\Schema\Interfaces\PropertyValue; +use Brick\Schema\Interfaces\QuantitativeValue; +use Brick\Schema\Interfaces\Thing; +use Brick\Schema\SchemaReader; +use Brick\Schema\SchemaTypeList; +use Brick\StructuredData\HTMLReader; +use Brick\StructuredData\Reader\JsonLdReader; +use Brick\StructuredData\Reader\MicrodataReader; +use Brick\StructuredData\Reader\RdfaLiteReader; +use Brick\StructuredData\Reader\ReaderChain; use Symfony\Component\DomCrawler\Crawler; use Symfony\Contracts\HttpClient\HttpClientInterface; @@ -104,126 +116,122 @@ class GenericWebProvider implements InfoProviderInterface return $host; } - private function productJsonLdToPart(array $jsonLd, string $url, Crawler $dom): PartDetailDTO + private function productToPart(Product $product, string $url, Crawler $dom): PartDetailDTO { - $notes = $jsonLd['description'] ?? ""; - if (isset($jsonLd['disambiguatingDescription'])) { + $notes = $product->description->toString() ?? ""; + if ($product->disambiguatingDescription !== null) { if (!empty($notes)) { $notes .= "\n\n"; } - $notes .= $jsonLd['disambiguatingDescription']; + $notes .= $product->disambiguatingDescription->toString(); } + + //Extract vendor infos $vendor_infos = null; - if (isset($jsonLd['offers'])) { - - if (array_is_list($jsonLd['offers'])) { - $offer = $jsonLd['offers'][0]; - } else { - $offer = $jsonLd['offers']; - } - - //Make $jsonLd['url'] absolute if it's relative - if (isset($jsonLd['url']) && parse_url($jsonLd['url'], PHP_URL_SCHEME) === null) { - $parsedUrl = parse_url($url); - $scheme = $parsedUrl['scheme'] ?? 'https'; - $host = $parsedUrl['host'] ?? ''; - $jsonLd['url'] = $scheme.'://'.$host.$jsonLd['url']; - } - + $offer = $product->offers->getFirstValue(); + if ($offer !== null) { $prices = []; - if (isset($offer['price'])) { - $prices[] = new PriceDTO( + if ($offer->price->toString() !== null) { + $prices = [new PriceDTO( minimum_discount_amount: 1, - price: (string) $offer['price'], - currency_iso_code: $offer['priceCurrency'] ?? null - ); - } else if (isset($offer['offers']) && array_is_list($offer['offers'])) { - //Some sites nest offers - foreach ($offer['offers'] as $subOffer) { - if (isset($subOffer['price'])) { - $prices[] = new PriceDTO( + price: $offer->price->toString(), + currency_iso_code: $offer->priceCurrency?->toString() + )]; + } else { //Check for nested offers (like IKEA does it) + $offer2 = $offer->offers->getFirstValue(); + if ($offer2 !== null && $offer2->price->toString() !== null) { + $prices = [ + new PriceDTO( minimum_discount_amount: 1, - price: (string) $subOffer['price'], - currency_iso_code: $subOffer['priceCurrency'] ?? null - ); - } + price: $offer2->price->toString(), + currency_iso_code: $offer2->priceCurrency?->toString() + ) + ]; } } $vendor_infos = [new PurchaseInfoDTO( distributor_name: $this->extractShopName($url), - order_number: (string) ($jsonLd['sku'] ?? $jsonLd['@id'] ?? $jsonLd['gtin'] ?? 'Unknown'), + order_number: $product->sku?->toString() ?? $product->identifier?->toString() ?? 'Unknown', prices: $prices, - product_url: $jsonLd['url'] ?? $url, + product_url: $offer->url?->toString() ?? $url, )]; } + //Extract image: $image = null; - if (isset($jsonLd['image'])) { - if (is_array($jsonLd['image'])) { - if (array_is_list($jsonLd['image'])) { - $image = $jsonLd['image'][0] ?? null; - } - } elseif (is_string($jsonLd['image'])) { - $image = $jsonLd['image']; + if ($product->image !== null) { + $imageObj = $product->image->getFirstValue(); + if (is_string($imageObj)) { + $image = $imageObj; + } else if ($imageObj instanceof ImageObject) { + $image = $imageObj->contentUrl?->toString() ?? $imageObj->url?->toString(); } } - //If image is an object with @type ImageObject, extract the url - if (is_array($image) && isset($image['@type']) && $image['@type'] === 'ImageObject') { - $image = $image['contentUrl'] ?? $image['url'] ?? null; - } - //Try to extract parameters from additionalProperty + //Extract parameters from additionalProperty $parameters = []; - if (isset($jsonLd['additionalProperty']) && array_is_list($jsonLd['additionalProperty'])) { - foreach ($jsonLd['additionalProperty'] as $property) { //TODO: Handle minValue and maxValue - if (isset ($property['unitText'])) { + foreach ($product->additionalProperty->getValues() as $property) { + if ($property instanceof PropertyValue) { //TODO: Handle minValue and maxValue + if ($property->unitText->toString() !== null) { $parameters[] = ParameterDTO::parseValueField( - name: $property['name'] ?? 'Unknown', - value: $property['value'] ?? '', - unit: $property['unitText'] + name: $property->name->toString() ?? 'Unknown', + value: $property->value->toString() ?? '', + unit: $property->unitText->toString() ); } else { $parameters[] = ParameterDTO::parseValueIncludingUnit( - name: $property['name'] ?? 'Unknown', - value: $property['value'] ?? '' + name: $property->name->toString() ?? 'Unknown', + value: $property->value->toString() ?? '' ); } } } + //Try to extract weight + $mass = null; + if (($weight = $product?->weight->getFirstValue()) instanceof QuantitativeValue) { + $mass = $weight->value->toString(); + } return new PartDetailDTO( provider_key: $this->getProviderKey(), provider_id: $url, - name: $jsonLd ['name'] ?? 'Unknown Name', + name: $product->name?->toString() ?? $product->alternateName?->toString() ?? $product?->mpn->toString() ?? 'Unknown Name', description: $this->getMetaContent($dom, 'og:description') ?? $this->getMetaContent($dom, 'description') ?? '', - category: isset($jsonLd['category']) && is_string($jsonLd['category']) ? $jsonLd['category'] : null, - manufacturer: $jsonLd['manufacturer']['name'] ?? $jsonLd['brand']['name'] ?? null, - mpn: $jsonLd['mpn'] ?? null, + category: $product->category?->toString(), + manufacturer: self::propertyOrString($product->manufacturer) ?? self::propertyOrString($product->brand), + mpn: $product->mpn?->toString(), preview_image_url: $image, provider_url: $url, notes: $notes, parameters: $parameters, vendor_infos: $vendor_infos, - mass: isset($jsonLd['weight']['value']) ? (float)$jsonLd['weight']['value'] : null, + mass: $mass ); } - /** - * Decodes JSON in a forgiving way, trying to fix common issues. - * @param string $json - * @return array - * @throws \JsonException - */ - private function json_decode_forgiving(string $json): array + private static function propertyOrString(SchemaTypeList|Thing|string|null $value, string $property = "name"): ?string { - //Sanitize common issues - $json = preg_replace("/[\r\n]+/", " ", $json); - return json_decode($json, true, 512, JSON_THROW_ON_ERROR); + if ($value instanceof SchemaTypeList) { + $value = $value->getFirstValue(); + } + if ($value === null) { + return null; + } + + if (is_string($value)) { + return $value; + } + + if ($value instanceof Thing) { + return $value->$property?->toString(); + } + return null; } + /** * Gets the content of a meta tag by its name or property attribute, or null if not found * @param Crawler $dom @@ -336,18 +344,14 @@ class GenericWebProvider implements InfoProviderInterface $canonicalURL = $scheme.'://'.$host.$canonicalURL; } - //Try to find json-ld data in the head - $jsonLdNodes = $dom->filter('script[type="application/ld+json"]'); - foreach ($jsonLdNodes as $node) { - $jsonLd = $this->json_decode_forgiving($node->textContent); - //If the content of json-ld is an array, try to find a product inside - if (!array_is_list($jsonLd)) { - $jsonLd = [$jsonLd]; - } - foreach ($jsonLd as $item) { - if (isset($item['@type']) && $item['@type'] === 'Product') { - return $this->productJsonLdToPart($item, $canonicalURL, $dom); - } + + $schemaReader = SchemaReader::forAllFormats(); + $things = $schemaReader->readHtml($content, $canonicalURL); + + //Try to find a Product schema + foreach ($things as $thing) { + if ($thing instanceof Product) { + return $this->productToPart($thing, $canonicalURL, $dom); } } From 7d19ed3ca8754df68927ac96b078c159e245d590 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 3 Feb 2026 23:20:13 +0100 Subject: [PATCH 077/172] Try to get a category from a webshop based on the breadcrumbs --- .../Providers/GenericWebProvider.php | 47 +++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php index e85ce5f4..6d27beb2 100644 --- a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php +++ b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php @@ -32,6 +32,7 @@ use App\Services\InfoProviderSystem\DTOs\SearchResultDTO; use App\Services\InfoProviderSystem\PartInfoRetriever; use App\Services\InfoProviderSystem\ProviderRegistry; use App\Settings\InfoProviderSystem\GenericWebProviderSettings; +use Brick\Schema\Interfaces\BreadcrumbList; use Brick\Schema\Interfaces\ImageObject; use Brick\Schema\Interfaces\Product; use Brick\Schema\Interfaces\PropertyValue; @@ -39,11 +40,6 @@ use Brick\Schema\Interfaces\QuantitativeValue; use Brick\Schema\Interfaces\Thing; use Brick\Schema\SchemaReader; use Brick\Schema\SchemaTypeList; -use Brick\StructuredData\HTMLReader; -use Brick\StructuredData\Reader\JsonLdReader; -use Brick\StructuredData\Reader\MicrodataReader; -use Brick\StructuredData\Reader\RdfaLiteReader; -use Brick\StructuredData\Reader\ReaderChain; use Symfony\Component\DomCrawler\Crawler; use Symfony\Contracts\HttpClient\HttpClientInterface; @@ -116,7 +112,33 @@ class GenericWebProvider implements InfoProviderInterface return $host; } - private function productToPart(Product $product, string $url, Crawler $dom): PartDetailDTO + private function breadcrumbToCategory(?BreadcrumbList $breadcrumbList): ?string + { + if ($breadcrumbList === null) { + return null; + } + + $items = $breadcrumbList->itemListElement->getValues(); + if (count($items) < 1) { + return null; + } + + try { + //Build our category from the breadcrumb items + $categories = []; + foreach ($items as $item) { + if (isset($item->name)) { + $categories[] = trim($item->name->toString()); + } + } + } catch (\Throwable) { + return null; + } + + return implode(' -> ', $categories); + } + + private function productToPart(Product $product, string $url, Crawler $dom, ?BreadcrumbList $categoryBreadcrumb): PartDetailDTO { $notes = $product->description->toString() ?? ""; if ($product->disambiguatingDescription !== null) { @@ -200,7 +222,7 @@ class GenericWebProvider implements InfoProviderInterface provider_id: $url, name: $product->name?->toString() ?? $product->alternateName?->toString() ?? $product?->mpn->toString() ?? 'Unknown Name', description: $this->getMetaContent($dom, 'og:description') ?? $this->getMetaContent($dom, 'description') ?? '', - category: $product->category?->toString(), + category: $this->breadcrumbToCategory($categoryBreadcrumb) ?? $product->category?->toString(), manufacturer: self::propertyOrString($product->manufacturer) ?? self::propertyOrString($product->brand), mpn: $product->mpn?->toString(), preview_image_url: $image, @@ -348,10 +370,19 @@ class GenericWebProvider implements InfoProviderInterface $schemaReader = SchemaReader::forAllFormats(); $things = $schemaReader->readHtml($content, $canonicalURL); + //Try to find a breadcrumb schema to extract the category + $categoryBreadCrumbs = null; + foreach ($things as $thing) { + if ($thing instanceof BreadcrumbList) { + $categoryBreadCrumbs = $thing; + break; + } + } + //Try to find a Product schema foreach ($things as $thing) { if ($thing instanceof Product) { - return $this->productToPart($thing, $canonicalURL, $dom); + return $this->productToPart($thing, $canonicalURL, $dom, $categoryBreadCrumbs); } } From 061af28c485523596caf14eb9bb35c3afa96e037 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 7 Feb 2026 17:07:53 +0100 Subject: [PATCH 078/172] Fixed phpstan issues in GenericWebProvider --- phpstan.dist.neon | 3 +++ .../InfoProviderSystem/Providers/GenericWebProvider.php | 9 +++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/phpstan.dist.neon b/phpstan.dist.neon index eb629314..b03c20c2 100644 --- a/phpstan.dist.neon +++ b/phpstan.dist.neon @@ -67,3 +67,6 @@ parameters: - message: '#Should not use function "shell_exec"#' path: src/Services/System/UpdateExecutor.php + + - message: '#Access to an undefined property Brick\\Schema\\Interfaces\\#' + path: src/Services/InfoProviderSystem/Providers/GenericWebProvider.php diff --git a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php index 6d27beb2..7fbf5a58 100644 --- a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php +++ b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php @@ -213,14 +213,14 @@ class GenericWebProvider implements InfoProviderInterface //Try to extract weight $mass = null; - if (($weight = $product?->weight->getFirstValue()) instanceof QuantitativeValue) { + if (($weight = $product->weight?->getFirstValue()) instanceof QuantitativeValue) { $mass = $weight->value->toString(); } return new PartDetailDTO( provider_key: $this->getProviderKey(), provider_id: $url, - name: $product->name?->toString() ?? $product->alternateName?->toString() ?? $product?->mpn->toString() ?? 'Unknown Name', + name: $product->name?->toString() ?? $product->alternateName?->toString() ?? $product->mpn?->toString() ?? 'Unknown Name', description: $this->getMetaContent($dom, 'og:description') ?? $this->getMetaContent($dom, 'description') ?? '', category: $this->breadcrumbToCategory($categoryBreadcrumb) ?? $product->category?->toString(), manufacturer: self::propertyOrString($product->manufacturer) ?? self::propertyOrString($product->brand), @@ -247,10 +247,7 @@ class GenericWebProvider implements InfoProviderInterface return $value; } - if ($value instanceof Thing) { - return $value->$property?->toString(); - } - return null; + return $value->$property?->toString(); } From 7bffe66b736bf5e68b7d8c640f745816e120fa48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 7 Feb 2026 17:11:05 +0100 Subject: [PATCH 079/172] Removed Translator that became obsolete with Symfony 7.2 --- .../Fixes/SegmentAwareXliffFileDumper.php | 242 ---------------- .../Fixes/SegmentAwareXliffFileLoader.php | 262 ------------------ 2 files changed, 504 deletions(-) delete mode 100644 src/Translation/Fixes/SegmentAwareXliffFileDumper.php delete mode 100644 src/Translation/Fixes/SegmentAwareXliffFileLoader.php diff --git a/src/Translation/Fixes/SegmentAwareXliffFileDumper.php b/src/Translation/Fixes/SegmentAwareXliffFileDumper.php deleted file mode 100644 index 4b44ef01..00000000 --- a/src/Translation/Fixes/SegmentAwareXliffFileDumper.php +++ /dev/null @@ -1,242 +0,0 @@ -. - */ - -declare(strict_types=1); - - -namespace App\Translation\Fixes; - -use Symfony\Component\DependencyInjection\Attribute\AsDecorator; -use Symfony\Component\Translation\Dumper\FileDumper; -use Symfony\Component\Translation\MessageCatalogue; -use Symfony\Component\Translation\Exception\InvalidArgumentException; - -/** - * Backport of the XliffFile dumper from Symfony 7.2, which supports segment attributes and notes, this keeps the - * metadata when editing the translations from inside Symfony. - */ -#[AsDecorator("translation.dumper.xliff")] -class SegmentAwareXliffFileDumper extends FileDumper -{ - - public function __construct( - private string $extension = 'xlf', - ) { - } - - public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []): string - { - $xliffVersion = '1.2'; - if (\array_key_exists('xliff_version', $options)) { - $xliffVersion = $options['xliff_version']; - } - - if (\array_key_exists('default_locale', $options)) { - $defaultLocale = $options['default_locale']; - } else { - $defaultLocale = \Locale::getDefault(); - } - - if ('1.2' === $xliffVersion) { - return $this->dumpXliff1($defaultLocale, $messages, $domain, $options); - } - if ('2.0' === $xliffVersion) { - return $this->dumpXliff2($defaultLocale, $messages, $domain); - } - - throw new InvalidArgumentException(\sprintf('No support implemented for dumping XLIFF version "%s".', $xliffVersion)); - } - - protected function getExtension(): string - { - return $this->extension; - } - - private function dumpXliff1(string $defaultLocale, MessageCatalogue $messages, ?string $domain, array $options = []): string - { - $toolInfo = ['tool-id' => 'symfony', 'tool-name' => 'Symfony']; - if (\array_key_exists('tool_info', $options)) { - $toolInfo = array_merge($toolInfo, $options['tool_info']); - } - - $dom = new \DOMDocument('1.0', 'utf-8'); - $dom->formatOutput = true; - - $xliff = $dom->appendChild($dom->createElement('xliff')); - $xliff->setAttribute('version', '1.2'); - $xliff->setAttribute('xmlns', 'urn:oasis:names:tc:xliff:document:1.2'); - - $xliffFile = $xliff->appendChild($dom->createElement('file')); - $xliffFile->setAttribute('source-language', str_replace('_', '-', $defaultLocale)); - $xliffFile->setAttribute('target-language', str_replace('_', '-', $messages->getLocale())); - $xliffFile->setAttribute('datatype', 'plaintext'); - $xliffFile->setAttribute('original', 'file.ext'); - - $xliffHead = $xliffFile->appendChild($dom->createElement('header')); - $xliffTool = $xliffHead->appendChild($dom->createElement('tool')); - foreach ($toolInfo as $id => $value) { - $xliffTool->setAttribute($id, $value); - } - - if ($catalogueMetadata = $messages->getCatalogueMetadata('', $domain) ?? []) { - $xliffPropGroup = $xliffHead->appendChild($dom->createElement('prop-group')); - foreach ($catalogueMetadata as $key => $value) { - $xliffProp = $xliffPropGroup->appendChild($dom->createElement('prop')); - $xliffProp->setAttribute('prop-type', $key); - $xliffProp->appendChild($dom->createTextNode($value)); - } - } - - $xliffBody = $xliffFile->appendChild($dom->createElement('body')); - foreach ($messages->all($domain) as $source => $target) { - $translation = $dom->createElement('trans-unit'); - - $translation->setAttribute('id', strtr(substr(base64_encode(hash('xxh128', $source, true)), 0, 7), '/+', '._')); - $translation->setAttribute('resname', $source); - - $s = $translation->appendChild($dom->createElement('source')); - $s->appendChild($dom->createTextNode($source)); - - // Does the target contain characters requiring a CDATA section? - $text = 1 === preg_match('/[&<>]/', $target) ? $dom->createCDATASection($target) : $dom->createTextNode($target); - - $targetElement = $dom->createElement('target'); - $metadata = $messages->getMetadata($source, $domain); - if ($this->hasMetadataArrayInfo('target-attributes', $metadata)) { - foreach ($metadata['target-attributes'] as $name => $value) { - $targetElement->setAttribute($name, $value); - } - } - $t = $translation->appendChild($targetElement); - $t->appendChild($text); - - if ($this->hasMetadataArrayInfo('notes', $metadata)) { - foreach ($metadata['notes'] as $note) { - if (!isset($note['content'])) { - continue; - } - - $n = $translation->appendChild($dom->createElement('note')); - $n->appendChild($dom->createTextNode($note['content'])); - - if (isset($note['priority'])) { - $n->setAttribute('priority', $note['priority']); - } - - if (isset($note['from'])) { - $n->setAttribute('from', $note['from']); - } - } - } - - $xliffBody->appendChild($translation); - } - - return $dom->saveXML(); - } - - private function dumpXliff2(string $defaultLocale, MessageCatalogue $messages, ?string $domain): string - { - $dom = new \DOMDocument('1.0', 'utf-8'); - $dom->formatOutput = true; - - $xliff = $dom->appendChild($dom->createElement('xliff')); - $xliff->setAttribute('xmlns', 'urn:oasis:names:tc:xliff:document:2.0'); - $xliff->setAttribute('version', '2.0'); - $xliff->setAttribute('srcLang', str_replace('_', '-', $defaultLocale)); - $xliff->setAttribute('trgLang', str_replace('_', '-', $messages->getLocale())); - - $xliffFile = $xliff->appendChild($dom->createElement('file')); - if (str_ends_with($domain, MessageCatalogue::INTL_DOMAIN_SUFFIX)) { - $xliffFile->setAttribute('id', substr($domain, 0, -\strlen(MessageCatalogue::INTL_DOMAIN_SUFFIX)).'.'.$messages->getLocale()); - } else { - $xliffFile->setAttribute('id', $domain.'.'.$messages->getLocale()); - } - - if ($catalogueMetadata = $messages->getCatalogueMetadata('', $domain) ?? []) { - $xliff->setAttribute('xmlns:m', 'urn:oasis:names:tc:xliff:metadata:2.0'); - $xliffMetadata = $xliffFile->appendChild($dom->createElement('m:metadata')); - foreach ($catalogueMetadata as $key => $value) { - $xliffMeta = $xliffMetadata->appendChild($dom->createElement('prop')); - $xliffMeta->setAttribute('type', $key); - $xliffMeta->appendChild($dom->createTextNode($value)); - } - } - - foreach ($messages->all($domain) as $source => $target) { - $translation = $dom->createElement('unit'); - $translation->setAttribute('id', strtr(substr(base64_encode(hash('xxh128', $source, true)), 0, 7), '/+', '._')); - - if (\strlen($source) <= 80) { - $translation->setAttribute('name', $source); - } - - $metadata = $messages->getMetadata($source, $domain); - - // Add notes section - if ($this->hasMetadataArrayInfo('notes', $metadata)) { - $notesElement = $dom->createElement('notes'); - foreach ($metadata['notes'] as $note) { - $n = $dom->createElement('note'); - $n->appendChild($dom->createTextNode($note['content'] ?? '')); - unset($note['content']); - - foreach ($note as $name => $value) { - $n->setAttribute($name, $value); - } - $notesElement->appendChild($n); - } - $translation->appendChild($notesElement); - } - - $segment = $translation->appendChild($dom->createElement('segment')); - - if ($this->hasMetadataArrayInfo('segment-attributes', $metadata)) { - foreach ($metadata['segment-attributes'] as $name => $value) { - $segment->setAttribute($name, $value); - } - } - - $s = $segment->appendChild($dom->createElement('source')); - $s->appendChild($dom->createTextNode($source)); - - // Does the target contain characters requiring a CDATA section? - $text = 1 === preg_match('/[&<>]/', $target) ? $dom->createCDATASection($target) : $dom->createTextNode($target); - - $targetElement = $dom->createElement('target'); - if ($this->hasMetadataArrayInfo('target-attributes', $metadata)) { - foreach ($metadata['target-attributes'] as $name => $value) { - $targetElement->setAttribute($name, $value); - } - } - $t = $segment->appendChild($targetElement); - $t->appendChild($text); - - $xliffFile->appendChild($translation); - } - - return $dom->saveXML(); - } - - private function hasMetadataArrayInfo(string $key, ?array $metadata = null): bool - { - return is_iterable($metadata[$key] ?? null); - } -} \ No newline at end of file diff --git a/src/Translation/Fixes/SegmentAwareXliffFileLoader.php b/src/Translation/Fixes/SegmentAwareXliffFileLoader.php deleted file mode 100644 index 12455e87..00000000 --- a/src/Translation/Fixes/SegmentAwareXliffFileLoader.php +++ /dev/null @@ -1,262 +0,0 @@ -. - */ - -declare(strict_types=1); - - -namespace App\Translation\Fixes; - -use Symfony\Component\Config\Resource\FileResource; -use Symfony\Component\Config\Util\Exception\InvalidXmlException; -use Symfony\Component\Config\Util\Exception\XmlParsingException; -use Symfony\Component\Config\Util\XmlUtils; -use Symfony\Component\DependencyInjection\Attribute\AsDecorator; -use Symfony\Component\Translation\Exception\InvalidResourceException; -use Symfony\Component\Translation\Exception\NotFoundResourceException; -use Symfony\Component\Translation\Exception\RuntimeException; -use Symfony\Component\Translation\Loader\LoaderInterface; -use Symfony\Component\Translation\MessageCatalogue; -use Symfony\Component\Translation\Util\XliffUtils; - -/** - * Backport of the XliffFile dumper from Symfony 7.2, which supports segment attributes and notes, this keeps the - * metadata when editing the translations from inside Symfony. - */ -#[AsDecorator("translation.loader.xliff")] -class SegmentAwareXliffFileLoader implements LoaderInterface -{ - public function load(mixed $resource, string $locale, string $domain = 'messages'): MessageCatalogue - { - if (!class_exists(XmlUtils::class)) { - throw new RuntimeException('Loading translations from the Xliff format requires the Symfony Config component.'); - } - - if (!$this->isXmlString($resource)) { - if (!stream_is_local($resource)) { - throw new InvalidResourceException(\sprintf('This is not a local file "%s".', $resource)); - } - - if (!file_exists($resource)) { - throw new NotFoundResourceException(\sprintf('File "%s" not found.', $resource)); - } - - if (!is_file($resource)) { - throw new InvalidResourceException(\sprintf('This is neither a file nor an XLIFF string "%s".', $resource)); - } - } - - try { - if ($this->isXmlString($resource)) { - $dom = XmlUtils::parse($resource); - } else { - $dom = XmlUtils::loadFile($resource); - } - } catch (\InvalidArgumentException|XmlParsingException|InvalidXmlException $e) { - throw new InvalidResourceException(\sprintf('Unable to load "%s": ', $resource).$e->getMessage(), $e->getCode(), $e); - } - - if ($errors = XliffUtils::validateSchema($dom)) { - throw new InvalidResourceException(\sprintf('Invalid resource provided: "%s"; Errors: ', $resource).XliffUtils::getErrorsAsString($errors)); - } - - $catalogue = new MessageCatalogue($locale); - $this->extract($dom, $catalogue, $domain); - - if (is_file($resource) && class_exists(FileResource::class)) { - $catalogue->addResource(new FileResource($resource)); - } - - return $catalogue; - } - - private function extract(\DOMDocument $dom, MessageCatalogue $catalogue, string $domain): void - { - $xliffVersion = XliffUtils::getVersionNumber($dom); - - if ('1.2' === $xliffVersion) { - $this->extractXliff1($dom, $catalogue, $domain); - } - - if ('2.0' === $xliffVersion) { - $this->extractXliff2($dom, $catalogue, $domain); - } - } - - /** - * Extract messages and metadata from DOMDocument into a MessageCatalogue. - */ - private function extractXliff1(\DOMDocument $dom, MessageCatalogue $catalogue, string $domain): void - { - $xml = simplexml_import_dom($dom); - $encoding = $dom->encoding ? strtoupper($dom->encoding) : null; - - $namespace = 'urn:oasis:names:tc:xliff:document:1.2'; - $xml->registerXPathNamespace('xliff', $namespace); - - foreach ($xml->xpath('//xliff:file') as $file) { - $fileAttributes = $file->attributes(); - - $file->registerXPathNamespace('xliff', $namespace); - - foreach ($file->xpath('.//xliff:prop') as $prop) { - $catalogue->setCatalogueMetadata($prop->attributes()['prop-type'], (string) $prop, $domain); - } - - foreach ($file->xpath('.//xliff:trans-unit') as $translation) { - $attributes = $translation->attributes(); - - if (!(isset($attributes['resname']) || isset($translation->source))) { - continue; - } - - $source = (string) (isset($attributes['resname']) && $attributes['resname'] ? $attributes['resname'] : $translation->source); - - if (isset($translation->target) - && 'needs-translation' === (string) $translation->target->attributes()['state'] - && \in_array((string) $translation->target, [$source, (string) $translation->source], true) - ) { - continue; - } - - // If the xlf file has another encoding specified, try to convert it because - // simple_xml will always return utf-8 encoded values - $target = $this->utf8ToCharset((string) ($translation->target ?? $translation->source), $encoding); - - $catalogue->set($source, $target, $domain); - - $metadata = [ - 'source' => (string) $translation->source, - 'file' => [ - 'original' => (string) $fileAttributes['original'], - ], - ]; - if ($notes = $this->parseNotesMetadata($translation->note, $encoding)) { - $metadata['notes'] = $notes; - } - - if (isset($translation->target) && $translation->target->attributes()) { - $metadata['target-attributes'] = []; - foreach ($translation->target->attributes() as $key => $value) { - $metadata['target-attributes'][$key] = (string) $value; - } - } - - if (isset($attributes['id'])) { - $metadata['id'] = (string) $attributes['id']; - } - - $catalogue->setMetadata($source, $metadata, $domain); - } - } - } - - private function extractXliff2(\DOMDocument $dom, MessageCatalogue $catalogue, string $domain): void - { - $xml = simplexml_import_dom($dom); - $encoding = $dom->encoding ? strtoupper($dom->encoding) : null; - - $xml->registerXPathNamespace('xliff', 'urn:oasis:names:tc:xliff:document:2.0'); - - foreach ($xml->xpath('//xliff:unit') as $unit) { - foreach ($unit->segment as $segment) { - $attributes = $unit->attributes(); - $source = $attributes['name'] ?? $segment->source; - - // If the xlf file has another encoding specified, try to convert it because - // simple_xml will always return utf-8 encoded values - $target = $this->utf8ToCharset((string) ($segment->target ?? $segment->source), $encoding); - - $catalogue->set((string) $source, $target, $domain); - - $metadata = []; - if ($segment->attributes()) { - $metadata['segment-attributes'] = []; - foreach ($segment->attributes() as $key => $value) { - $metadata['segment-attributes'][$key] = (string) $value; - } - } - - if (isset($segment->target) && $segment->target->attributes()) { - $metadata['target-attributes'] = []; - foreach ($segment->target->attributes() as $key => $value) { - $metadata['target-attributes'][$key] = (string) $value; - } - } - - if (isset($unit->notes)) { - $metadata['notes'] = []; - foreach ($unit->notes->note as $noteNode) { - $note = []; - foreach ($noteNode->attributes() as $key => $value) { - $note[$key] = (string) $value; - } - $note['content'] = (string) $noteNode; - $metadata['notes'][] = $note; - } - } - - $catalogue->setMetadata((string) $source, $metadata, $domain); - } - } - } - - /** - * Convert a UTF8 string to the specified encoding. - */ - private function utf8ToCharset(string $content, ?string $encoding = null): string - { - if ('UTF-8' !== $encoding && $encoding) { - return mb_convert_encoding($content, $encoding, 'UTF-8'); - } - - return $content; - } - - private function parseNotesMetadata(?\SimpleXMLElement $noteElement = null, ?string $encoding = null): array - { - $notes = []; - - if (null === $noteElement) { - return $notes; - } - - /** @var \SimpleXMLElement $xmlNote */ - foreach ($noteElement as $xmlNote) { - $noteAttributes = $xmlNote->attributes(); - $note = ['content' => $this->utf8ToCharset((string) $xmlNote, $encoding)]; - if (isset($noteAttributes['priority'])) { - $note['priority'] = (int) $noteAttributes['priority']; - } - - if (isset($noteAttributes['from'])) { - $note['from'] = (string) $noteAttributes['from']; - } - - $notes[] = $note; - } - - return $notes; - } - - private function isXmlString(string $resource): bool - { - return str_starts_with($resource, ' Date: Sat, 7 Feb 2026 17:11:32 +0100 Subject: [PATCH 080/172] New Crowdin updates (#1212) * New translations messages.en.xlf (Danish) * New translations messages.en.xlf (English) * New translations messages.en.xlf (Danish) * New translations messages.en.xlf (English) * New translations messages.en.xlf (Danish) * New translations messages.en.xlf (English) * New translations validators.en.xlf (Chinese Simplified) * New translations frontend.en.xlf (Chinese Simplified) * New translations frontend.en.xlf (Chinese Simplified) * New translations security.en.xlf (Ukrainian) * New translations validators.en.xlf (Ukrainian) * New translations frontend.en.xlf (Ukrainian) * New translations messages.en.xlf (English) * New translations messages.en.xlf (German) * New translations messages.en.xlf (German) * New translations messages.en.xlf (Danish) --- translations/frontend.uk.xlf | 80 + translations/frontend.zh.xlf | 152 +- translations/messages.da.xlf | 6132 +++++++++++++++++++++++--------- translations/messages.de.xlf | 740 +++- translations/messages.en.xlf | 104 +- translations/security.uk.xlf | 23 + translations/validators.uk.xlf | 375 ++ translations/validators.zh.xlf | 96 +- 8 files changed, 5822 insertions(+), 1880 deletions(-) create mode 100644 translations/frontend.uk.xlf create mode 100644 translations/security.uk.xlf create mode 100644 translations/validators.uk.xlf diff --git a/translations/frontend.uk.xlf b/translations/frontend.uk.xlf new file mode 100644 index 00000000..210f7036 --- /dev/null +++ b/translations/frontend.uk.xlf @@ -0,0 +1,80 @@ + + + + + + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 + Part-DB1\templates\_navbar_search.html.twig:67 + Part-DB1\templates\_sidebar.html.twig:27 + Part-DB1\templates\_sidebar.html.twig:43 + Part-DB1\templates\_sidebar.html.twig:63 + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 + Part-DB1\templates\_navbar_search.html.twig:61 + Part-DB1\templates\_sidebar.html.twig:27 + Part-DB1\templates\_sidebar.html.twig:43 + Part-DB1\templates\_sidebar.html.twig:63 + templates\AdminPages\EntityAdminBase.html.twig:9 + templates\base.html.twig:80 + templates\base.html.twig:179 + templates\base.html.twig:206 + templates\base.html.twig:237 + + + search.placeholder + Пошук + + + + + part.labelp + Деталі + + + + + entity.select.group.new_not_added_to_DB + Нова (ще не додана до БД) + + + + + user.password_strength.very_weak + Дуже слабкий + + + + + user.password_strength.weak + Слабкий + + + + + user.password_strength.medium + Середній + + + + + user.password_strength.strong + Надійний + + + + + user.password_strength.very_strong + Дуже надійний + + + + + Part-DB1\templates\_navbar_search.html.twig:68 + Part-DB1\templates\_navbar_search.html.twig:62 + + + search.submit + Почати! + + + + diff --git a/translations/frontend.zh.xlf b/translations/frontend.zh.xlf index 08817189..b2c289f0 100644 --- a/translations/frontend.zh.xlf +++ b/translations/frontend.zh.xlf @@ -1,80 +1,80 @@ - - - - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - - - search.placeholder - 搜索 - - + + + + + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 + Part-DB1\templates\_navbar_search.html.twig:67 + Part-DB1\templates\_sidebar.html.twig:27 + Part-DB1\templates\_sidebar.html.twig:43 + Part-DB1\templates\_sidebar.html.twig:63 + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 + Part-DB1\templates\_navbar_search.html.twig:61 + Part-DB1\templates\_sidebar.html.twig:27 + Part-DB1\templates\_sidebar.html.twig:43 + Part-DB1\templates\_sidebar.html.twig:63 + templates\AdminPages\EntityAdminBase.html.twig:9 + templates\base.html.twig:80 + templates\base.html.twig:179 + templates\base.html.twig:206 + templates\base.html.twig:237 + + + search.placeholder + 搜索 + + - - part.labelp - 部件 - - - - - entity.select.group.new_not_added_to_DB - 新建(尚未添加到数据库) - - - - - user.password_strength.very_weak - 非常弱 - - - - - user.password_strength.weak - - - - - - user.password_strength.medium - - - - - - user.password_strength.strong - - - - - - user.password_strength.very_strong - 非常强 - - - - - Part-DB1\templates\_navbar_search.html.twig:68 - Part-DB1\templates\_navbar_search.html.twig:62 - - - search.submit - GO! - - + + part.labelp + 部件 + + + + + entity.select.group.new_not_added_to_DB + 新建(尚未添加到数据库) + + + + + user.password_strength.very_weak + 非常弱 + + + + + user.password_strength.weak + + + + + + user.password_strength.medium + + + + + + user.password_strength.strong + + + + + + user.password_strength.very_strong + 非常强 + + + + + Part-DB1\templates\_navbar_search.html.twig:68 + Part-DB1\templates\_navbar_search.html.twig:62 + + + search.submit + GO! + + diff --git a/translations/messages.da.xlf b/translations/messages.da.xlf index 8ed10c07..af92eea0 100644 --- a/translations/messages.da.xlf +++ b/translations/messages.da.xlf @@ -1,7 +1,7 @@ - + - + Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 @@ -9,20 +9,20 @@ attachment_type.caption - Bilags datatyper + Bilag-filtyper - + Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:12 new attachment_type.edit - Ret bilags filtype + Ret bilag-filtype - + Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:16 new @@ -32,7 +32,7 @@ Ny filtype - + Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 Part-DB1\templates\_sidebar.html.twig:22 @@ -51,7 +51,7 @@ Kategorier - + Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:19 @@ -64,7 +64,7 @@ Optioner - + Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 @@ -74,10 +74,10 @@ admin.advanced - Advanceret + Avanceret - + Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:13 new @@ -87,7 +87,7 @@ Ret kategori - + Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:17 new @@ -97,17 +97,7 @@ Ny kategori - - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - - - currency.caption - Valuta - - - + Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 @@ -117,7 +107,7 @@ ISO kode - + Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 @@ -127,7 +117,7 @@ Valutaenhed - + Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:29 new @@ -137,7 +127,7 @@ Ret valuta - + Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:33 new @@ -147,7 +137,7 @@ Ny valuta - + Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:8 new @@ -157,7 +147,7 @@ Ret projekt - + Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:12 new @@ -167,7 +157,7 @@ Nyt projekt - + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 Part-DB1\templates\_navbar_search.html.twig:67 @@ -190,7 +180,7 @@ Søg - + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 Part-DB1\templates\_sidebar.html.twig:3 @@ -206,7 +196,7 @@ Udfold alle - + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 Part-DB1\templates\_sidebar.html.twig:4 @@ -222,7 +212,7 @@ Sammenfold alle - + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 Part-DB1\templates\Parts\info\_sidebar.html.twig:4 @@ -231,10 +221,10 @@ part.info.timetravel_hint - Det er hvordan delen fromstod før %timestamp%. <i>Venligst bemærk at dette er en eksperimentel funktion. Så derfor kan info være ukorrekt.</i> + Det er hvordan delen fremstod før %timestamp%. <i>Venligst bemærk at dette er en eksperimentel funktion. Så derfor kan info være ukorrekt.</i> - + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 @@ -245,7 +235,7 @@ Egenskaber - + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 @@ -256,7 +246,7 @@ Info - + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 @@ -267,7 +257,7 @@ Historik - + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 @@ -278,7 +268,7 @@ Eksport - + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 @@ -289,7 +279,7 @@ Import - + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 @@ -299,7 +289,7 @@ Masseoprettelse - + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 @@ -310,7 +300,7 @@ Fælles - + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 @@ -320,7 +310,7 @@ Bilag - + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:90 @@ -329,7 +319,7 @@ Parametre - + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:179 Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:167 @@ -340,7 +330,7 @@ Eksportér alle elementer - + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:185 Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:173 @@ -350,7 +340,7 @@ Hver linje fortolkes og oprettes som et navn til et nyt element. Ved at indrykke tekst kan du lave strukturer - + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 @@ -361,7 +351,7 @@ Ret element "%name" - + Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 @@ -372,7 +362,7 @@ Nyt element - + Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 Part-DB1\templates\_sidebar.html.twig:9 @@ -387,7 +377,7 @@ Footprint - + Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:13 new @@ -397,7 +387,7 @@ Ret footprint - + Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:17 new @@ -407,17 +397,7 @@ Nyt footprint - - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - - - group.edit.caption - Grupper - - - + Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 @@ -429,7 +409,7 @@ Rettigheder - + Part-DB1\templates\AdminPages\GroupAdmin.html.twig:24 new @@ -439,7 +419,7 @@ Ret gruppe - + Part-DB1\templates\AdminPages\GroupAdmin.html.twig:28 new @@ -449,25 +429,16 @@ Ny gruppe - - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:4 - - - label_profile.caption - Labelprofiler - - - + Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:8 label_profile.advanced - Advanceret + Avanceret - + Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:9 @@ -476,7 +447,7 @@ Notater - + Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:55 new @@ -486,7 +457,7 @@ Ret labelprofil - + Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:59 new @@ -496,18 +467,7 @@ Ny labelprofil - - - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - templates\AdminPages\ManufacturerAdmin.html.twig:4 - - - manufacturer.caption - Fabrikant - - - + Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:8 new @@ -517,7 +477,7 @@ Ret fabrikanter - + Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:12 new @@ -527,23 +487,7 @@ Ny fabrikant - - - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - - - measurement_unit.caption - Måleenhed - - - - - part_custom_state.caption - Brugerdefineret komponentstatus - - - + Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:5 Part-DB1\templates\_sidebar.html.twig:8 @@ -558,7 +502,7 @@ Lagerlokationer - + Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:32 new @@ -568,7 +512,7 @@ Ret lagerlokation - + Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:36 new @@ -578,7 +522,7 @@ Ny lagerlokation - + Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:16 new @@ -588,7 +532,7 @@ Ret leverandør - + Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:20 new @@ -598,17 +542,7 @@ Ny leverandør - - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - - - user.edit.caption - Brugere - - - + Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 @@ -618,7 +552,7 @@ Opsætning - + Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 @@ -628,7 +562,7 @@ Password - + Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 @@ -638,7 +572,7 @@ To-faktor godkendelse - + Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 @@ -648,7 +582,7 @@ Godkendelses-app aktiv - + Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 Part-DB1\templates\Users\backup_codes.html.twig:15 @@ -662,7 +596,7 @@ Antal resterende backupkoder - + Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 Part-DB1\templates\Users\backup_codes.html.twig:17 @@ -676,7 +610,7 @@ Oprettelsesdato for backupkoder - + Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 @@ -688,7 +622,7 @@ Metode ikke aktiveret - + Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 @@ -698,7 +632,7 @@ Aktive sikkerhedsnøgler - + Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 @@ -708,20 +642,20 @@ Ønsker du at fortsætte? - + Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 user.edit.tfa.disable_tfa_message - Dette vil deaktiver <b>alle aktive to-faktor godkendelses metoder af brugere</b> og slette <b>backupkoderne</b>! + Dette vil deaktivere <b>alle aktive to-faktor godkendelsesmetoder af brugere</b> og slette <b>backupkoderne</b>! <br> -Brugen skal sætte all to-faktor godkendelsesmetoder op igen og printe nye backupkoder! <br><br> -<b>Gør kun dette hvis du er helt sikker på identiten af brugeren (som søger hjælp), eller kan kontoen blive kompromiteret af en som ønsker at angrive systemet!</b> +Brugeren skal sætte alle to-faktor godkendelsesmetoder op igen og printe nye backupkoder! <br><br> +<b>Gør kun dette hvis du er helt sikker på identiten af brugeren (som søger hjælp), ellers kan kontoen blive kompromiteret af en som ønsker at angrive systemet!</b> - + Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 @@ -731,7 +665,7 @@ Brugen skal sætte all to-faktor godkendelsesmetoder op igen og printe nye backu Deaktivér all to-faktor godkendelsesmetoder - + Part-DB1\templates\AdminPages\UserAdmin.html.twig:85 new @@ -741,7 +675,7 @@ Brugen skal sætte all to-faktor godkendelsesmetoder op igen og printe nye backu Ret bruger - + Part-DB1\templates\AdminPages\UserAdmin.html.twig:89 new @@ -751,7 +685,7 @@ Brugen skal sætte all to-faktor godkendelsesmetoder op igen og printe nye backu Ny bruger - + Part-DB1\templates\AdminPages\_attachments.html.twig:4 Part-DB1\templates\Parts\edit\_attachments.html.twig:4 @@ -764,21 +698,13 @@ Brugen skal sætte all to-faktor godkendelsesmetoder op igen og printe nye backu Slet - - - Part-DB1\templates\AdminPages\_attachments.html.twig:41 - Part-DB1\templates\Parts\edit\_attachments.html.twig:38 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:35 - Part-DB1\src\DataTables\AttachmentDataTable.php:159 - Part-DB1\templates\Parts\edit\_attachments.html.twig:38 - Part-DB1\src\DataTables\AttachmentDataTable.php:159 - + - attachment.external - Ekstern + attachment.external_only + Kun eksternt - + Part-DB1\templates\AdminPages\_attachments.html.twig:49 Part-DB1\templates\Parts\edit\_attachments.html.twig:47 @@ -790,7 +716,7 @@ Brugen skal sætte all to-faktor godkendelsesmetoder op igen og printe nye backu Billede af bilag - + Part-DB1\templates\AdminPages\_attachments.html.twig:52 Part-DB1\templates\Parts\edit\_attachments.html.twig:50 @@ -800,11 +726,11 @@ Brugen skal sætte all to-faktor godkendelsesmetoder op igen og printe nye backu Part-DB1\templates\Parts\info\_attachments_info.html.twig:45 - attachment.view - Vis + attachment.view_local + vedhæftning.vis_lokalt - + Part-DB1\templates\AdminPages\_attachments.html.twig:58 Part-DB1\templates\Parts\edit\_attachments.html.twig:56 @@ -820,7 +746,7 @@ Brugen skal sætte all to-faktor godkendelsesmetoder op igen og printe nye backu Fil ikke fundet - + Part-DB1\templates\AdminPages\_attachments.html.twig:66 Part-DB1\templates\Parts\edit\_attachments.html.twig:64 @@ -832,7 +758,7 @@ Brugen skal sætte all to-faktor godkendelsesmetoder op igen og printe nye backu Privat bilag - + Part-DB1\templates\AdminPages\_attachments.html.twig:79 Part-DB1\templates\Parts\edit\_attachments.html.twig:77 @@ -844,7 +770,7 @@ Brugen skal sætte all to-faktor godkendelsesmetoder op igen og printe nye backu Tilføj bilag - + Part-DB1\templates\AdminPages\_attachments.html.twig:84 Part-DB1\templates\Parts\edit\_attachments.html.twig:82 @@ -858,7 +784,7 @@ Brugen skal sætte all to-faktor godkendelsesmetoder op igen og printe nye backu Ønsker du virkeligt at slette dette lager? Du kan ikke fortryde det senere! - + Part-DB1\templates\AdminPages\_delete_form.html.twig:2 Part-DB1\templates\AdminPages\_delete_form.html.twig:2 @@ -869,7 +795,7 @@ Brugen skal sætte all to-faktor godkendelsesmetoder op igen og printe nye backu Ønsker du virkeligt at slette %name%? - + Part-DB1\templates\AdminPages\_delete_form.html.twig:3 Part-DB1\templates\AdminPages\_delete_form.html.twig:3 @@ -882,7 +808,7 @@ Brugen skal sætte all to-faktor godkendelsesmetoder op igen og printe nye backu Underelementer vil blive flyttet opad. - + Part-DB1\templates\AdminPages\_delete_form.html.twig:11 Part-DB1\templates\AdminPages\_delete_form.html.twig:11 @@ -893,7 +819,7 @@ Underelementer vil blive flyttet opad. Slet element - + Part-DB1\templates\AdminPages\_delete_form.html.twig:16 Part-DB1\templates\Parts\info\_tools.html.twig:45 @@ -908,7 +834,7 @@ Underelementer vil blive flyttet opad. Ret kommentar - + Part-DB1\templates\AdminPages\_delete_form.html.twig:24 Part-DB1\templates\AdminPages\_delete_form.html.twig:24 @@ -919,7 +845,7 @@ Underelementer vil blive flyttet opad. Slet rekursivt (alle underelementer) - + Part-DB1\templates\AdminPages\_duplicate.html.twig:3 @@ -928,7 +854,7 @@ Underelementer vil blive flyttet opad. Kopier element - + Part-DB1\templates\AdminPages\_export_form.html.twig:4 Part-DB1\src\Form\AdminPages\ImportType.php:76 @@ -942,7 +868,7 @@ Underelementer vil blive flyttet opad. Filformat - + Part-DB1\templates\AdminPages\_export_form.html.twig:16 Part-DB1\templates\AdminPages\_export_form.html.twig:16 @@ -953,7 +879,7 @@ Underelementer vil blive flyttet opad. Detaljegrad - + Part-DB1\templates\AdminPages\_export_form.html.twig:19 Part-DB1\templates\AdminPages\_export_form.html.twig:19 @@ -964,7 +890,7 @@ Underelementer vil blive flyttet opad. Simpel - + Part-DB1\templates\AdminPages\_export_form.html.twig:20 Part-DB1\templates\AdminPages\_export_form.html.twig:20 @@ -975,7 +901,7 @@ Underelementer vil blive flyttet opad. Udvidet - + Part-DB1\templates\AdminPages\_export_form.html.twig:21 Part-DB1\templates\AdminPages\_export_form.html.twig:21 @@ -986,7 +912,7 @@ Underelementer vil blive flyttet opad. Fuldstændig - + Part-DB1\templates\AdminPages\_export_form.html.twig:31 Part-DB1\templates\AdminPages\_export_form.html.twig:31 @@ -997,7 +923,7 @@ Underelementer vil blive flyttet opad. medtag underelementer ved eksport - + Part-DB1\templates\AdminPages\_export_form.html.twig:39 Part-DB1\templates\AdminPages\_export_form.html.twig:39 @@ -1008,7 +934,7 @@ Underelementer vil blive flyttet opad. Eksport - + Part-DB1\templates\AdminPages\_info.html.twig:4 Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 @@ -1027,7 +953,7 @@ Underelementer vil blive flyttet opad. ID - + Part-DB1\templates\AdminPages\_info.html.twig:11 Part-DB1\templates\Parts\info\_attachments_info.html.twig:76 @@ -1048,10 +974,10 @@ Underelementer vil blive flyttet opad. createdAt - Oprettet på + Oprettet d. - + Part-DB1\templates\AdminPages\_info.html.twig:25 Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 @@ -1069,7 +995,7 @@ Underelementer vil blive flyttet opad. Sidst rettet - + Part-DB1\templates\AdminPages\_info.html.twig:38 Part-DB1\templates\AdminPages\_info.html.twig:38 @@ -1079,7 +1005,7 @@ Underelementer vil blive flyttet opad. antal dele med dette element - + Part-DB1\templates\AdminPages\_parameters.html.twig:6 Part-DB1\templates\helper.twig:125 @@ -1090,7 +1016,7 @@ Underelementer vil blive flyttet opad. Parameter - + Part-DB1\templates\AdminPages\_parameters.html.twig:7 Part-DB1\templates\Parts\edit\_specifications.html.twig:7 @@ -1100,7 +1026,7 @@ Underelementer vil blive flyttet opad. Symbol - + Part-DB1\templates\AdminPages\_parameters.html.twig:8 Part-DB1\templates\Parts\edit\_specifications.html.twig:8 @@ -1110,7 +1036,7 @@ Underelementer vil blive flyttet opad. Min. - + Part-DB1\templates\AdminPages\_parameters.html.twig:9 Part-DB1\templates\Parts\edit\_specifications.html.twig:9 @@ -1120,7 +1046,7 @@ Underelementer vil blive flyttet opad. Typ. - + Part-DB1\templates\AdminPages\_parameters.html.twig:10 Part-DB1\templates\Parts\edit\_specifications.html.twig:10 @@ -1130,7 +1056,7 @@ Underelementer vil blive flyttet opad. Max. - + Part-DB1\templates\AdminPages\_parameters.html.twig:11 Part-DB1\templates\Parts\edit\_specifications.html.twig:11 @@ -1140,7 +1066,7 @@ Underelementer vil blive flyttet opad. Enhed - + Part-DB1\templates\AdminPages\_parameters.html.twig:12 Part-DB1\templates\Parts\edit\_specifications.html.twig:12 @@ -1150,7 +1076,7 @@ Underelementer vil blive flyttet opad. Tekst - + Part-DB1\templates\AdminPages\_parameters.html.twig:13 Part-DB1\templates\Parts\edit\_specifications.html.twig:13 @@ -1160,7 +1086,7 @@ Underelementer vil blive flyttet opad. Gruppe - + Part-DB1\templates\AdminPages\_parameters.html.twig:26 Part-DB1\templates\Parts\edit\_specifications.html.twig:26 @@ -1170,7 +1096,7 @@ Underelementer vil blive flyttet opad. Ny parameter - + Part-DB1\templates\AdminPages\_parameters.html.twig:31 Part-DB1\templates\Parts\edit\_specifications.html.twig:31 @@ -1180,7 +1106,7 @@ Underelementer vil blive flyttet opad. Ønsker du at slette denne parameter? - + Part-DB1\templates\attachment_list.html.twig:3 Part-DB1\templates\attachment_list.html.twig:3 @@ -1190,7 +1116,7 @@ Underelementer vil blive flyttet opad. Bilagsliste - + Part-DB1\templates\attachment_list.html.twig:10 Part-DB1\templates\LogSystem\_log_table.html.twig:8 @@ -1204,7 +1130,7 @@ Underelementer vil blive flyttet opad. Henter - + Part-DB1\templates\attachment_list.html.twig:11 Part-DB1\templates\LogSystem\_log_table.html.twig:9 @@ -1218,7 +1144,7 @@ Underelementer vil blive flyttet opad. Dette kan tage et øjeblik. Hvis denne meddelelse ikke forsvinder, prøv at genindlæse siden. - + Part-DB1\templates\base.html.twig:68 Part-DB1\templates\base.html.twig:68 @@ -1229,7 +1155,7 @@ Underelementer vil blive flyttet opad. Sørg for at aktivere alle Javascriptfunktioner! - + Part-DB1\templates\base.html.twig:73 Part-DB1\templates\base.html.twig:73 @@ -1239,7 +1165,7 @@ Underelementer vil blive flyttet opad. Vis/skjul sidepanel - + Part-DB1\templates\base.html.twig:95 Part-DB1\templates\base.html.twig:95 @@ -1250,7 +1176,7 @@ Underelementer vil blive flyttet opad. Henter: - + Part-DB1\templates\base.html.twig:96 Part-DB1\templates\base.html.twig:96 @@ -1261,7 +1187,7 @@ Underelementer vil blive flyttet opad. Dette kan taget noget tid. Hvis denne meddelelse bliver stående i lang tid, forsøg da at genindlæse siden. - + Part-DB1\templates\base.html.twig:101 Part-DB1\templates\base.html.twig:101 @@ -1272,7 +1198,7 @@ Underelementer vil blive flyttet opad. Henter... - + Part-DB1\templates\base.html.twig:112 Part-DB1\templates\base.html.twig:112 @@ -1283,7 +1209,7 @@ Underelementer vil blive flyttet opad. Tilbage til toppen af siden - + Part-DB1\templates\Form\permissionLayout.html.twig:35 Part-DB1\templates\Form\permissionLayout.html.twig:35 @@ -1293,7 +1219,7 @@ Underelementer vil blive flyttet opad. Rettigheder - + Part-DB1\templates\Form\permissionLayout.html.twig:36 Part-DB1\templates\Form\permissionLayout.html.twig:36 @@ -1303,7 +1229,7 @@ Underelementer vil blive flyttet opad. Værdi - + Part-DB1\templates\Form\permissionLayout.html.twig:53 Part-DB1\templates\Form\permissionLayout.html.twig:53 @@ -1313,7 +1239,7 @@ Underelementer vil blive flyttet opad. Forklaring til tilstande - + Part-DB1\templates\Form\permissionLayout.html.twig:57 Part-DB1\templates\Form\permissionLayout.html.twig:57 @@ -1323,7 +1249,7 @@ Underelementer vil blive flyttet opad. Ej tilladt - + Part-DB1\templates\Form\permissionLayout.html.twig:61 Part-DB1\templates\Form\permissionLayout.html.twig:61 @@ -1333,7 +1259,7 @@ Underelementer vil blive flyttet opad. Tilladt - + Part-DB1\templates\Form\permissionLayout.html.twig:65 Part-DB1\templates\Form\permissionLayout.html.twig:65 @@ -1343,7 +1269,7 @@ Underelementer vil blive flyttet opad. Nedarv fra (overordnet) gruppe - + Part-DB1\templates\helper.twig:3 Part-DB1\templates\helper.twig:3 @@ -1353,7 +1279,7 @@ Underelementer vil blive flyttet opad. Sand - + Part-DB1\templates\helper.twig:5 Part-DB1\templates\helper.twig:5 @@ -1363,7 +1289,7 @@ Underelementer vil blive flyttet opad. Falsk - + Part-DB1\templates\helper.twig:92 Part-DB1\templates\helper.twig:87 @@ -1373,7 +1299,7 @@ Underelementer vil blive flyttet opad. Ja - + Part-DB1\templates\helper.twig:94 Part-DB1\templates\helper.twig:89 @@ -1383,7 +1309,7 @@ Underelementer vil blive flyttet opad. Nej - + Part-DB1\templates\helper.twig:126 @@ -1392,7 +1318,7 @@ Underelementer vil blive flyttet opad. Værdi - + Part-DB1\templates\homepage.html.twig:7 Part-DB1\templates\homepage.html.twig:7 @@ -1403,7 +1329,7 @@ Underelementer vil blive flyttet opad. Version - + Part-DB1\templates\homepage.html.twig:22 Part-DB1\templates\homepage.html.twig:22 @@ -1414,7 +1340,7 @@ Underelementer vil blive flyttet opad. Licensinformation - + Part-DB1\templates\homepage.html.twig:31 Part-DB1\templates\homepage.html.twig:31 @@ -1425,7 +1351,7 @@ Underelementer vil blive flyttet opad. Projektoversigt - + Part-DB1\templates\homepage.html.twig:31 Part-DB1\templates\homepage.html.twig:31 @@ -1436,7 +1362,7 @@ Underelementer vil blive flyttet opad. Kilde, downloads, fejlrapporter, to-do-list etc. kan findes på <a href="%href%" class="link-external" target="_blank">GitHub project page</a> - + Part-DB1\templates\homepage.html.twig:32 Part-DB1\templates\homepage.html.twig:32 @@ -1447,7 +1373,7 @@ Underelementer vil blive flyttet opad. Hjælp - + Part-DB1\templates\homepage.html.twig:32 Part-DB1\templates\homepage.html.twig:32 @@ -1458,7 +1384,7 @@ Underelementer vil blive flyttet opad. Hjælp og tips kan findes på Wiki <a href="%href%" class="link-external" target="_blank">GitHub siden</a> - + Part-DB1\templates\homepage.html.twig:33 Part-DB1\templates\homepage.html.twig:33 @@ -1469,7 +1395,7 @@ Underelementer vil blive flyttet opad. Forum - + Part-DB1\templates\homepage.html.twig:45 Part-DB1\templates\homepage.html.twig:45 @@ -1480,7 +1406,7 @@ Underelementer vil blive flyttet opad. Sidste aktivitet - + Part-DB1\templates\LabelSystem\dialog.html.twig:3 Part-DB1\templates\LabelSystem\dialog.html.twig:6 @@ -1490,7 +1416,7 @@ Underelementer vil blive flyttet opad. Labelgenerator - + Part-DB1\templates\LabelSystem\dialog.html.twig:16 @@ -1499,7 +1425,7 @@ Underelementer vil blive flyttet opad. Fælles - + Part-DB1\templates\LabelSystem\dialog.html.twig:20 @@ -1508,7 +1434,7 @@ Underelementer vil blive flyttet opad. Avanceret - + Part-DB1\templates\LabelSystem\dialog.html.twig:24 @@ -1517,7 +1443,7 @@ Underelementer vil blive flyttet opad. Profiler - + Part-DB1\templates\LabelSystem\dialog.html.twig:58 @@ -1526,7 +1452,7 @@ Underelementer vil blive flyttet opad. Valgte profil - + Part-DB1\templates\LabelSystem\dialog.html.twig:62 @@ -1535,7 +1461,7 @@ Underelementer vil blive flyttet opad. Ret profil - + Part-DB1\templates\LabelSystem\dialog.html.twig:75 @@ -1544,7 +1470,7 @@ Underelementer vil blive flyttet opad. Hent profil - + Part-DB1\templates\LabelSystem\dialog.html.twig:102 @@ -1553,7 +1479,7 @@ Underelementer vil blive flyttet opad. Hent - + Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:3 Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:5 @@ -1563,7 +1489,7 @@ Underelementer vil blive flyttet opad. Opret label - + Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:20 @@ -1572,7 +1498,7 @@ Underelementer vil blive flyttet opad. Ny tom label - + Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:3 @@ -1581,7 +1507,7 @@ Underelementer vil blive flyttet opad. Label scanner - + Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 @@ -1590,7 +1516,7 @@ Underelementer vil blive flyttet opad. Intet webcam fundet - + Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 @@ -1599,7 +1525,7 @@ Underelementer vil blive flyttet opad. Du skal bruge et webcam og give lov til at bruge det som scanner. Du kan indtaste stregkoden manuelt nedenfor. - + Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:27 @@ -1608,7 +1534,7 @@ Underelementer vil blive flyttet opad. Vælg kilde - + Part-DB1\templates\LogSystem\log_list.html.twig:3 Part-DB1\templates\LogSystem\log_list.html.twig:3 @@ -1618,7 +1544,7 @@ Underelementer vil blive flyttet opad. Systemlog - + Part-DB1\templates\LogSystem\_log_table.html.twig:1 Part-DB1\templates\LogSystem\_log_table.html.twig:1 @@ -1629,7 +1555,7 @@ Underelementer vil blive flyttet opad. Er du sikker på at du vil fortryde ændringerne / gå tilbage til forrige version? - + Part-DB1\templates\LogSystem\_log_table.html.twig:2 Part-DB1\templates\LogSystem\_log_table.html.twig:2 @@ -1640,7 +1566,7 @@ Underelementer vil blive flyttet opad. Er du sikker på at du vil fortryde ændringen / og gå tilbage til en tidligere version? - + Part-DB1\templates\mail\base.html.twig:24 Part-DB1\templates\mail\base.html.twig:24 @@ -1650,7 +1576,7 @@ Underelementer vil blive flyttet opad. Denne e-mail er afsendt automatisk af - + Part-DB1\templates\mail\base.html.twig:24 Part-DB1\templates\mail\base.html.twig:24 @@ -1660,7 +1586,7 @@ Underelementer vil blive flyttet opad. Venligt undlad at svare på denne e-mail. - + Part-DB1\templates\mail\pw_reset.html.twig:6 Part-DB1\templates\mail\pw_reset.html.twig:6 @@ -1670,7 +1596,7 @@ Underelementer vil blive flyttet opad. Hej %name% - + Part-DB1\templates\mail\pw_reset.html.twig:7 Part-DB1\templates\mail\pw_reset.html.twig:7 @@ -1680,7 +1606,7 @@ Underelementer vil blive flyttet opad. En eller anden (forhåbentlig dig) har anmodet om at nulstille det gemte password. Hvis du ikke har anmodet om dette, venligst ignorér denne e-mail. - + Part-DB1\templates\mail\pw_reset.html.twig:9 Part-DB1\templates\mail\pw_reset.html.twig:9 @@ -1690,7 +1616,7 @@ Underelementer vil blive flyttet opad. Klik her for at nulstille password - + Part-DB1\templates\mail\pw_reset.html.twig:11 Part-DB1\templates\mail\pw_reset.html.twig:11 @@ -1700,7 +1626,7 @@ Underelementer vil blive flyttet opad. Hvis dette ikke virker, gå til <a href="%url%">%url%</a> og indtast følgende information - + Part-DB1\templates\mail\pw_reset.html.twig:16 Part-DB1\templates\mail\pw_reset.html.twig:16 @@ -1710,7 +1636,7 @@ Underelementer vil blive flyttet opad. Brugernavn - + Part-DB1\templates\mail\pw_reset.html.twig:19 Part-DB1\templates\mail\pw_reset.html.twig:19 @@ -1720,7 +1646,7 @@ Underelementer vil blive flyttet opad. Token - + Part-DB1\templates\mail\pw_reset.html.twig:24 Part-DB1\templates\mail\pw_reset.html.twig:24 @@ -1730,7 +1656,7 @@ Underelementer vil blive flyttet opad. Nulstillingstoken'en vil være gyldig indtil <i>%date%</i>. - + Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:18 Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 @@ -1742,7 +1668,7 @@ Underelementer vil blive flyttet opad. Slet - + Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 @@ -1752,7 +1678,7 @@ Underelementer vil blive flyttet opad. Minimum rabat-antal - + Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 @@ -1762,7 +1688,7 @@ Underelementer vil blive flyttet opad. Pris - + Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 @@ -1772,7 +1698,7 @@ Underelementer vil blive flyttet opad. for mængde - + Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 @@ -1782,7 +1708,7 @@ Underelementer vil blive flyttet opad. Anfør pris - + Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 @@ -1793,7 +1719,7 @@ Underelementer vil blive flyttet opad. Rediger komponent %name% - + Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 @@ -1804,7 +1730,7 @@ Underelementer vil blive flyttet opad. Rediger del - + Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 @@ -1814,7 +1740,7 @@ Underelementer vil blive flyttet opad. Fælles - + Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 @@ -1824,77 +1750,77 @@ Underelementer vil blive flyttet opad. Fabrikant - + Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 part.edit.tab.advanced - Advanceret + Avanceret - + part.edit.tab.advanced.ipn.commonSectionHeader - Forslag uden del-inkrement + Forslag uden komponent-forøgelse - + part.edit.tab.advanced.ipn.partIncrementHeader - Forslag med numeriske deleforøgelser + Forslag med numerisk komponent-forøgelse - + part.edit.tab.advanced.ipn.prefix.description.current-increment - Aktuel IPN-specifikation for delen + Aktuel IPN-værdi for komponenten - + part.edit.tab.advanced.ipn.prefix.description.increment - Næste mulige IPN-specifikation baseret på en identisk delebeskrivelse + Næste mulige IPN-værdi baseret på den identiske komponentbeskrivelse - + part.edit.tab.advanced.ipn.prefix_empty.direct_category - IPN-præfikset for den direkte kategori er tomt, angiv det i kategorien "%name%" + IPN-præfikset for den direkte kategori er tomt. Du skal angive et præfiks i kategorien "%name%" - + part.edit.tab.advanced.ipn.prefix.direct_category - IPN-præfiks for direkte kategori + IPN præfiks for direkte kategori - + part.edit.tab.advanced.ipn.prefix.direct_category.increment - IPN-præfiks for den direkte kategori og en delspecifik inkrement + IPN-præfiks for den direkte kategori og komponentspecifik tilvækst - + part.edit.tab.advanced.ipn.prefix.hierarchical.no_increment - IPN-præfikser med hierarkisk rækkefølge af overordnede præfikser + IPN præfiks med hierarkisk kategorirækkefølge af overordnede præfiks - + part.edit.tab.advanced.ipn.prefix.hierarchical.increment - IPN-præfikser med hierarkisk rækkefølge af overordnede præfikser og en del-specifik inkrement + IPN-præfikser med hierarkisk kategorirækkefølge af overordnede præfikser og del-specifik forøgelse - + part.edit.tab.advanced.ipn.prefix.not_saved - Opret først en komponent, og tildel den en kategori: med eksisterende kategorier og deres egne IPN-præfikser kan IPN-betegnelsen for komponenten foreslås automatisk + Venligst først opret del og tilføj den til en kategori: IPN præfiks for delen kan foreslås automatisk for eksisterede katogorier med egne IPN præfiks - + Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 @@ -1904,7 +1830,7 @@ Underelementer vil blive flyttet opad. Lagerbestand - + Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 @@ -1914,7 +1840,7 @@ Underelementer vil blive flyttet opad. Vedhæftede filer - + Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 @@ -1924,7 +1850,7 @@ Underelementer vil blive flyttet opad. indkøbsinformation - + Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 @@ -1933,7 +1859,7 @@ Underelementer vil blive flyttet opad. Paremetre - + Part-DB1\templates\Parts\edit\edit_part_info.html.twig:64 Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 @@ -1943,7 +1869,7 @@ Underelementer vil blive flyttet opad. Noter - + Part-DB1\templates\Parts\edit\new_part.html.twig:8 Part-DB1\templates\Parts\edit\new_part.html.twig:8 @@ -1954,7 +1880,7 @@ Underelementer vil blive flyttet opad. Opret ny del - + Part-DB1\templates\Parts\edit\_lots.html.twig:5 Part-DB1\templates\Parts\edit\_lots.html.twig:5 @@ -1964,7 +1890,7 @@ Underelementer vil blive flyttet opad. Slet - + Part-DB1\templates\Parts\edit\_lots.html.twig:28 Part-DB1\templates\Parts\edit\_lots.html.twig:28 @@ -1974,7 +1900,7 @@ Underelementer vil blive flyttet opad. Opret beholdning - + Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 @@ -1984,7 +1910,7 @@ Underelementer vil blive flyttet opad. tilføj distributør - + Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 @@ -1994,7 +1920,7 @@ Underelementer vil blive flyttet opad. Er du sikker på, at du vil slette denne pris? Dette kan ikke fortrydes! - + Part-DB1\templates\Parts\edit\_orderdetails.html.twig:62 Part-DB1\templates\Parts\edit\_orderdetails.html.twig:61 @@ -2004,7 +1930,7 @@ Underelementer vil blive flyttet opad. Er du sikker på, at du vil slette denne leverandør? Dette kan ikke fortrydes! - + Part-DB1\templates\Parts\info\show_part_info.html.twig:4 Part-DB1\templates\Parts\info\show_part_info.html.twig:19 @@ -2018,7 +1944,7 @@ Underelementer vil blive flyttet opad. Detaljerede oplysninger vedr. - + Part-DB1\templates\Parts\info\show_part_info.html.twig:47 Part-DB1\templates\Parts\info\show_part_info.html.twig:47 @@ -2028,7 +1954,7 @@ Underelementer vil blive flyttet opad. Lagerbestand - + Part-DB1\templates\Parts\info\show_part_info.html.twig:56 Part-DB1\templates\Parts\lists\_info_card.html.twig:43 @@ -2043,7 +1969,7 @@ Underelementer vil blive flyttet opad. Noter - + Part-DB1\templates\Parts\info\show_part_info.html.twig:64 @@ -2052,7 +1978,7 @@ Underelementer vil blive flyttet opad. Paremeter - + Part-DB1\templates\Parts\info\show_part_info.html.twig:74 Part-DB1\templates\Parts\info\show_part_info.html.twig:64 @@ -2063,7 +1989,7 @@ Underelementer vil blive flyttet opad. Vedhæftede filer - + Part-DB1\templates\Parts\info\show_part_info.html.twig:83 Part-DB1\templates\Parts\info\show_part_info.html.twig:71 @@ -2074,7 +2000,7 @@ Underelementer vil blive flyttet opad. Indkøbsinformation - + Part-DB1\templates\Parts\info\show_part_info.html.twig:91 Part-DB1\templates\Parts\info\show_part_info.html.twig:78 @@ -2085,7 +2011,7 @@ Underelementer vil blive flyttet opad. Historik - + Part-DB1\templates\Parts\info\show_part_info.html.twig:97 Part-DB1\templates\_sidebar.html.twig:54 @@ -2104,7 +2030,7 @@ Underelementer vil blive flyttet opad. Værktøjer - + Part-DB1\templates\Parts\info\show_part_info.html.twig:103 Part-DB1\templates\Parts\info\show_part_info.html.twig:90 @@ -2114,7 +2040,7 @@ Underelementer vil blive flyttet opad. Yderligere Informationen - + Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 @@ -2124,7 +2050,7 @@ Underelementer vil blive flyttet opad. Navn - + Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 @@ -2134,7 +2060,7 @@ Underelementer vil blive flyttet opad. Vedhæft sikkerhedstype - + Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 @@ -2144,7 +2070,7 @@ Underelementer vil blive flyttet opad. vedhæft fil_navn - + Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 @@ -2154,7 +2080,7 @@ Underelementer vil blive flyttet opad. vedhæftet fil_størrelse - + Part-DB1\templates\Parts\info\_attachments_info.html.twig:54 @@ -2163,17 +2089,17 @@ Underelementer vil blive flyttet opad. Forhåndsvisningbillede - + Part-DB1\templates\Parts\info\_attachments_info.html.twig:67 Part-DB1\templates\Parts\info\_attachments_info.html.twig:50 - attachment.download - Vedhæftet fil + attachment.download_local + vedhæftning.download_lokalt - + Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 @@ -2181,10 +2107,10 @@ Underelementer vil blive flyttet opad. user.creating_user - Hvem oprettede denne del + Oprettet af - + Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 @@ -2198,7 +2124,7 @@ Underelementer vil blive flyttet opad. Ukendt - + Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 @@ -2211,7 +2137,7 @@ Underelementer vil blive flyttet opad. Adgang nægtet - + Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 @@ -2219,10 +2145,10 @@ Underelementer vil blive flyttet opad. user.last_editing_user - Bruger som rettede denne del + Bruger som sidst rettede denne - + Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 @@ -2232,17 +2158,17 @@ Underelementer vil blive flyttet opad. Favorit - + Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 part.minOrderAmount - Minimum ordrestrørrelse + Minimum ordrestørrelse - + Part-DB1\templates\Parts\info\_main_infos.html.twig:8 Part-DB1\templates\_navbar_search.html.twig:46 @@ -2259,7 +2185,7 @@ Underelementer vil blive flyttet opad. Fabrikant - + Part-DB1\templates\Parts\info\_main_infos.html.twig:24 Part-DB1\templates\_navbar_search.html.twig:11 @@ -2271,7 +2197,7 @@ Underelementer vil blive flyttet opad. Navn - + Part-DB1\templates\Parts\info\_main_infos.html.twig:27 Part-DB1\templates\Parts\info\_main_infos.html.twig:27 @@ -2282,7 +2208,7 @@ Underelementer vil blive flyttet opad. Tilbage til forrige version - + Part-DB1\templates\Parts\info\_main_infos.html.twig:32 Part-DB1\templates\_navbar_search.html.twig:19 @@ -2297,7 +2223,7 @@ Underelementer vil blive flyttet opad. Beskrivelse - + Part-DB1\templates\Parts\info\_main_infos.html.twig:34 Part-DB1\templates\_navbar_search.html.twig:15 @@ -2314,7 +2240,7 @@ Underelementer vil blive flyttet opad. Kategori - + Part-DB1\templates\Parts\info\_main_infos.html.twig:39 Part-DB1\templates\Parts\info\_main_infos.html.twig:39 @@ -2326,7 +2252,7 @@ Underelementer vil blive flyttet opad. På lager - + Part-DB1\templates\Parts\info\_main_infos.html.twig:41 Part-DB1\templates\Parts\info\_main_infos.html.twig:41 @@ -2338,7 +2264,7 @@ Underelementer vil blive flyttet opad. Minimumbestand - + Part-DB1\templates\Parts\info\_main_infos.html.twig:45 Part-DB1\templates\_navbar_search.html.twig:52 @@ -2354,7 +2280,7 @@ Underelementer vil blive flyttet opad. Footprint - + Part-DB1\templates\Parts\info\_main_infos.html.twig:56 Part-DB1\templates\Parts\info\_main_infos.html.twig:59 @@ -2367,7 +2293,7 @@ Underelementer vil blive flyttet opad. Gennemsnitspris - + Part-DB1\templates\Parts\info\_order_infos.html.twig:5 Part-DB1\templates\Parts\info\_order_infos.html.twig:5 @@ -2377,7 +2303,7 @@ Underelementer vil blive flyttet opad. Navn - + Part-DB1\templates\Parts\info\_order_infos.html.twig:6 Part-DB1\templates\Parts\info\_order_infos.html.twig:6 @@ -2387,7 +2313,7 @@ Underelementer vil blive flyttet opad. Bestillingsnummer. - + Part-DB1\templates\Parts\info\_order_infos.html.twig:28 Part-DB1\templates\Parts\info\_order_infos.html.twig:28 @@ -2397,7 +2323,7 @@ Underelementer vil blive flyttet opad. Mindsteantal - + Part-DB1\templates\Parts\info\_order_infos.html.twig:29 Part-DB1\templates\Parts\info\_order_infos.html.twig:29 @@ -2407,7 +2333,7 @@ Underelementer vil blive flyttet opad. Pris - + Part-DB1\templates\Parts\info\_order_infos.html.twig:31 Part-DB1\templates\Parts\info\_order_infos.html.twig:31 @@ -2417,7 +2343,7 @@ Underelementer vil blive flyttet opad. Enhedspris - + Part-DB1\templates\Parts\info\_part_lots.html.twig:7 Part-DB1\templates\Parts\info\_part_lots.html.twig:6 @@ -2427,7 +2353,7 @@ Underelementer vil blive flyttet opad. Beskrivelse - + Part-DB1\templates\Parts\info\_part_lots.html.twig:8 Part-DB1\templates\Parts\info\_part_lots.html.twig:7 @@ -2437,7 +2363,7 @@ Underelementer vil blive flyttet opad. Lagerlokation - + Part-DB1\templates\Parts\info\_part_lots.html.twig:9 Part-DB1\templates\Parts\info\_part_lots.html.twig:8 @@ -2447,7 +2373,7 @@ Underelementer vil blive flyttet opad. Mængde - + Part-DB1\templates\Parts\info\_part_lots.html.twig:24 Part-DB1\templates\Parts\info\_part_lots.html.twig:22 @@ -2457,7 +2383,7 @@ Underelementer vil blive flyttet opad. Ukendt lagerlokation - + Part-DB1\templates\Parts\info\_part_lots.html.twig:31 Part-DB1\templates\Parts\info\_part_lots.html.twig:29 @@ -2467,7 +2393,7 @@ Underelementer vil blive flyttet opad. Ukendt mængde - + Part-DB1\templates\Parts\info\_part_lots.html.twig:40 Part-DB1\templates\Parts\info\_part_lots.html.twig:38 @@ -2477,7 +2403,7 @@ Underelementer vil blive flyttet opad. Udløbsdato - + Part-DB1\templates\Parts\info\_part_lots.html.twig:48 Part-DB1\templates\Parts\info\_part_lots.html.twig:46 @@ -2487,7 +2413,7 @@ Underelementer vil blive flyttet opad. Udløbet - + Part-DB1\templates\Parts\info\_part_lots.html.twig:55 Part-DB1\templates\Parts\info\_part_lots.html.twig:53 @@ -2497,7 +2423,7 @@ Underelementer vil blive flyttet opad. Skal fyldes op - + Part-DB1\templates\Parts\info\_picture.html.twig:15 Part-DB1\templates\Parts\info\_picture.html.twig:15 @@ -2507,7 +2433,7 @@ Underelementer vil blive flyttet opad. Forrige billede - + Part-DB1\templates\Parts\info\_picture.html.twig:19 Part-DB1\templates\Parts\info\_picture.html.twig:19 @@ -2517,7 +2443,7 @@ Underelementer vil blive flyttet opad. Næste billede - + Part-DB1\templates\Parts\info\_sidebar.html.twig:21 Part-DB1\templates\Parts\info\_sidebar.html.twig:21 @@ -2527,7 +2453,7 @@ Underelementer vil blive flyttet opad. Vægt - + Part-DB1\templates\Parts\info\_sidebar.html.twig:30 Part-DB1\templates\Parts\info\_sidebar.html.twig:30 @@ -2537,7 +2463,7 @@ Underelementer vil blive flyttet opad. Gennemgang nødvendig - + Part-DB1\templates\Parts\info\_sidebar.html.twig:39 Part-DB1\templates\Parts\info\_sidebar.html.twig:39 @@ -2547,7 +2473,7 @@ Underelementer vil blive flyttet opad. Favorit - + Part-DB1\templates\Parts\info\_sidebar.html.twig:47 Part-DB1\templates\Parts\info\_sidebar.html.twig:47 @@ -2557,7 +2483,7 @@ Underelementer vil blive flyttet opad. Ikke længere tilgængelig - + Part-DB1\templates\Parts\info\_specifications.html.twig:10 @@ -2566,7 +2492,7 @@ Underelementer vil blive flyttet opad. Automatisk udtrukket fra beskrivelse - + Part-DB1\templates\Parts\info\_specifications.html.twig:15 @@ -2575,7 +2501,7 @@ Underelementer vil blive flyttet opad. Automatisk udtrukket fra noter - + Part-DB1\templates\Parts\info\_tools.html.twig:6 Part-DB1\templates\Parts\info\_tools.html.twig:4 @@ -2586,7 +2512,7 @@ Underelementer vil blive flyttet opad. Rediger komponent - + Part-DB1\templates\Parts\info\_tools.html.twig:16 Part-DB1\templates\Parts\info\_tools.html.twig:14 @@ -2597,7 +2523,7 @@ Underelementer vil blive flyttet opad. Kopier komponent - + Part-DB1\templates\Parts\info\_tools.html.twig:24 Part-DB1\templates\Parts\lists\_action_bar.html.twig:4 @@ -2608,7 +2534,7 @@ Underelementer vil blive flyttet opad. Opret ny komponent - + Part-DB1\templates\Parts\info\_tools.html.twig:31 Part-DB1\templates\Parts\info\_tools.html.twig:29 @@ -2618,7 +2544,7 @@ Underelementer vil blive flyttet opad. Vil du virkelig slette denne komponent - + Part-DB1\templates\Parts\info\_tools.html.twig:32 Part-DB1\templates\Parts\info\_tools.html.twig:30 @@ -2628,7 +2554,7 @@ Underelementer vil blive flyttet opad. Komponenten og alle dens relaterede oplysninger (bilag, priser osv. ) slettes. Dette kan ikke fortrydes! - + Part-DB1\templates\Parts\info\_tools.html.twig:39 Part-DB1\templates\Parts\info\_tools.html.twig:37 @@ -2638,7 +2564,7 @@ Underelementer vil blive flyttet opad. Slet komponent - + Part-DB1\templates\Parts\lists\all_list.html.twig:4 Part-DB1\templates\Parts\lists\all_list.html.twig:4 @@ -2648,7 +2574,7 @@ Underelementer vil blive flyttet opad. Alle komponenter - + Part-DB1\templates\Parts\lists\category_list.html.twig:4 Part-DB1\templates\Parts\lists\category_list.html.twig:4 @@ -2658,7 +2584,7 @@ Underelementer vil blive flyttet opad. Komponent med kategori - + Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 @@ -2668,7 +2594,7 @@ Underelementer vil blive flyttet opad. Komponent med footprint - + Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 @@ -2678,7 +2604,7 @@ Underelementer vil blive flyttet opad. Komponenter med fabrikanter - + Part-DB1\templates\Parts\lists\search_list.html.twig:4 Part-DB1\templates\Parts\lists\search_list.html.twig:4 @@ -2688,7 +2614,7 @@ Underelementer vil blive flyttet opad. Søg komponenter - + Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 @@ -2698,7 +2624,7 @@ Underelementer vil blive flyttet opad. Komponenter med lagerlokationer - + Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 @@ -2708,7 +2634,7 @@ Underelementer vil blive flyttet opad. Komponenter med leverandører - + Part-DB1\templates\Parts\lists\tags_list.html.twig:4 Part-DB1\templates\Parts\lists\tags_list.html.twig:4 @@ -2718,7 +2644,7 @@ Underelementer vil blive flyttet opad. Komponenter med tag - + Part-DB1\templates\Parts\lists\_info_card.html.twig:22 Part-DB1\templates\Parts\lists\_info_card.html.twig:17 @@ -2728,7 +2654,7 @@ Underelementer vil blive flyttet opad. Fælles - + Part-DB1\templates\Parts\lists\_info_card.html.twig:26 Part-DB1\templates\Parts\lists\_info_card.html.twig:20 @@ -2738,7 +2664,7 @@ Underelementer vil blive flyttet opad. Statistik - + Part-DB1\templates\Parts\lists\_info_card.html.twig:31 @@ -2747,7 +2673,7 @@ Underelementer vil blive flyttet opad. Vedhæftede filer - + Part-DB1\templates\Parts\lists\_info_card.html.twig:37 @@ -2756,7 +2682,7 @@ Underelementer vil blive flyttet opad. Parametre - + Part-DB1\templates\Parts\lists\_info_card.html.twig:54 Part-DB1\templates\Parts\lists\_info_card.html.twig:30 @@ -2766,7 +2692,7 @@ Underelementer vil blive flyttet opad. Navn - + Part-DB1\templates\Parts\lists\_info_card.html.twig:58 Part-DB1\templates\Parts\lists\_info_card.html.twig:96 @@ -2778,7 +2704,7 @@ Underelementer vil blive flyttet opad. Overordnet element - + Part-DB1\templates\Parts\lists\_info_card.html.twig:70 Part-DB1\templates\Parts\lists\_info_card.html.twig:46 @@ -2788,7 +2714,7 @@ Underelementer vil blive flyttet opad. Redigere - + Part-DB1\templates\Parts\lists\_info_card.html.twig:92 Part-DB1\templates\Parts\lists\_info_card.html.twig:63 @@ -2798,7 +2724,7 @@ Underelementer vil blive flyttet opad. Antal af underelementer - + Part-DB1\templates\security\2fa_base_form.html.twig:3 Part-DB1\templates\security\2fa_base_form.html.twig:5 @@ -2810,7 +2736,7 @@ Underelementer vil blive flyttet opad. To-faktor godkendelse påkrævet - + Part-DB1\templates\security\2fa_base_form.html.twig:39 Part-DB1\templates\security\2fa_base_form.html.twig:39 @@ -2820,7 +2746,7 @@ Underelementer vil blive flyttet opad. Dette er en pålidelig computer (hvis dette er aktiveret, udføres der ikke yderligere to-faktorforespørgsler på denne computer) - + Part-DB1\templates\security\2fa_base_form.html.twig:52 Part-DB1\templates\security\login.html.twig:58 @@ -2832,7 +2758,7 @@ Underelementer vil blive flyttet opad. Login - + Part-DB1\templates\security\2fa_base_form.html.twig:53 Part-DB1\templates\security\U2F\u2f_login.html.twig:13 @@ -2846,7 +2772,7 @@ Underelementer vil blive flyttet opad. Log ud - + Part-DB1\templates\security\2fa_form.html.twig:6 Part-DB1\templates\security\2fa_form.html.twig:6 @@ -2856,7 +2782,7 @@ Underelementer vil blive flyttet opad. Godkendelses app kode - + Part-DB1\templates\security\2fa_form.html.twig:10 Part-DB1\templates\security\2fa_form.html.twig:10 @@ -2866,7 +2792,7 @@ Underelementer vil blive flyttet opad. Indtast den 6-cifrede kode fra din godkendelsesapp her eller en af dine backupkoder, hvis godkendelses app'en ikke er tilgændelig. - + Part-DB1\templates\security\login.html.twig:3 Part-DB1\templates\security\login.html.twig:3 @@ -2877,7 +2803,7 @@ Underelementer vil blive flyttet opad. Login - + Part-DB1\templates\security\login.html.twig:7 Part-DB1\templates\security\login.html.twig:7 @@ -2888,7 +2814,7 @@ Underelementer vil blive flyttet opad. Login - + Part-DB1\templates\security\login.html.twig:31 Part-DB1\templates\security\login.html.twig:31 @@ -2899,7 +2825,7 @@ Underelementer vil blive flyttet opad. Brugernavn - + Part-DB1\templates\security\login.html.twig:34 Part-DB1\templates\security\login.html.twig:34 @@ -2910,7 +2836,7 @@ Underelementer vil blive flyttet opad. Brugernavn - + Part-DB1\templates\security\login.html.twig:38 Part-DB1\templates\security\login.html.twig:38 @@ -2921,7 +2847,7 @@ Underelementer vil blive flyttet opad. Password - + Part-DB1\templates\security\login.html.twig:40 Part-DB1\templates\security\login.html.twig:40 @@ -2932,7 +2858,7 @@ Underelementer vil blive flyttet opad. Password - + Part-DB1\templates\security\login.html.twig:50 Part-DB1\templates\security\login.html.twig:50 @@ -2943,7 +2869,7 @@ Underelementer vil blive flyttet opad. Forbliv logget ind (anbefales ikke på delte computere) - + Part-DB1\templates\security\login.html.twig:64 Part-DB1\templates\security\login.html.twig:64 @@ -2953,7 +2879,7 @@ Underelementer vil blive flyttet opad. Glemt brugernavn/password? - + Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 @@ -2963,7 +2889,7 @@ Underelementer vil blive flyttet opad. Indstil ny adgangskode - + Part-DB1\templates\security\pw_reset_request.html.twig:5 Part-DB1\templates\security\pw_reset_request.html.twig:5 @@ -2973,7 +2899,7 @@ Underelementer vil blive flyttet opad. Anmod om nyt password - + Part-DB1\templates\security\U2F\u2f_login.html.twig:7 Part-DB1\templates\security\U2F\u2f_register.html.twig:10 @@ -2985,7 +2911,7 @@ Underelementer vil blive flyttet opad. Du tilgår denne side ved hjælp af den usikre HTTP-metode, så U2F vil højst sandsynligt ikke fungere (Bad Request-fejlmeddelelse). Bed en administrator om at konfigurere den sikre HTTPS-metode, hvis du vil bruge sikkerhedsnøgler. - + Part-DB1\templates\security\U2F\u2f_login.html.twig:10 Part-DB1\templates\security\U2F\u2f_register.html.twig:22 @@ -2997,7 +2923,7 @@ Underelementer vil blive flyttet opad. Indsæt venligst sikkerhedsnøglen og tryk på knappen - + Part-DB1\templates\security\U2F\u2f_register.html.twig:3 Part-DB1\templates\security\U2F\u2f_register.html.twig:3 @@ -3007,7 +2933,7 @@ Underelementer vil blive flyttet opad. Tilføj sikkerhedsnøgle - + Part-DB1\templates\security\U2F\u2f_register.html.twig:6 Part-DB1\templates\Users\_2fa_settings.html.twig:111 @@ -3019,7 +2945,7 @@ Underelementer vil blive flyttet opad. Brug af en U2F/FIDO-kompatibel sikkerhedsnøgle (f.eks. YubiKey eller NitroKey) kan øge brugervenligheden og sikre en sikker to-faktor-godkendelse. Sikkerhedsnøglerne kan registreres her. Hvis to-faktor verifikation er påkrævet, skal nøglen kun tilsluttes via USB eller sættes op mod enheden via NFC. - + Part-DB1\templates\security\U2F\u2f_register.html.twig:7 Part-DB1\templates\security\U2F\u2f_register.html.twig:7 @@ -3029,7 +2955,7 @@ Underelementer vil blive flyttet opad. For at sikre adgang, selvom nøglen går tabt, anbefales det at registrere en anden nøgle som backup og opbevare den et sikkert sted! - + Part-DB1\templates\security\U2F\u2f_register.html.twig:19 Part-DB1\templates\security\U2F\u2f_register.html.twig:19 @@ -3039,7 +2965,7 @@ Underelementer vil blive flyttet opad. Tilføj sikkerhedsnøgle - + Part-DB1\templates\security\U2F\u2f_register.html.twig:27 Part-DB1\templates\security\U2F\u2f_register.html.twig:27 @@ -3049,7 +2975,7 @@ Underelementer vil blive flyttet opad. Tilbage til indstillinger - + Part-DB1\templates\Statistics\statistics.html.twig:5 Part-DB1\templates\Statistics\statistics.html.twig:8 @@ -3062,7 +2988,7 @@ Underelementer vil blive flyttet opad. Statistikker - + Part-DB1\templates\Statistics\statistics.html.twig:14 Part-DB1\templates\Statistics\statistics.html.twig:14 @@ -3073,7 +2999,7 @@ Underelementer vil blive flyttet opad. Komponenter - + Part-DB1\templates\Statistics\statistics.html.twig:19 Part-DB1\templates\Statistics\statistics.html.twig:19 @@ -3084,7 +3010,7 @@ Underelementer vil blive flyttet opad. Datastrukturer - + Part-DB1\templates\Statistics\statistics.html.twig:24 Part-DB1\templates\Statistics\statistics.html.twig:24 @@ -3095,7 +3021,7 @@ Underelementer vil blive flyttet opad. Bilag - + Part-DB1\templates\Statistics\statistics.html.twig:34 Part-DB1\templates\Statistics\statistics.html.twig:59 @@ -3110,7 +3036,7 @@ Underelementer vil blive flyttet opad. Egenskab - + Part-DB1\templates\Statistics\statistics.html.twig:35 Part-DB1\templates\Statistics\statistics.html.twig:60 @@ -3125,7 +3051,7 @@ Underelementer vil blive flyttet opad. Værdi - + Part-DB1\templates\Statistics\statistics.html.twig:40 Part-DB1\templates\Statistics\statistics.html.twig:40 @@ -3136,7 +3062,7 @@ Underelementer vil blive flyttet opad. Antal forskellige komponenter - + Part-DB1\templates\Statistics\statistics.html.twig:44 Part-DB1\templates\Statistics\statistics.html.twig:44 @@ -3147,7 +3073,7 @@ Underelementer vil blive flyttet opad. Komponenter på lager i alt - + Part-DB1\templates\Statistics\statistics.html.twig:48 Part-DB1\templates\Statistics\statistics.html.twig:48 @@ -3158,7 +3084,7 @@ Underelementer vil blive flyttet opad. Komponenter med prisinformantion - + Part-DB1\templates\Statistics\statistics.html.twig:65 Part-DB1\templates\Statistics\statistics.html.twig:65 @@ -3169,7 +3095,7 @@ Underelementer vil blive flyttet opad. Antal kategorier - + Part-DB1\templates\Statistics\statistics.html.twig:69 Part-DB1\templates\Statistics\statistics.html.twig:69 @@ -3180,7 +3106,7 @@ Underelementer vil blive flyttet opad. Antal footprints - + Part-DB1\templates\Statistics\statistics.html.twig:73 Part-DB1\templates\Statistics\statistics.html.twig:73 @@ -3191,7 +3117,7 @@ Underelementer vil blive flyttet opad. Antal fabrikanter - + Part-DB1\templates\Statistics\statistics.html.twig:77 Part-DB1\templates\Statistics\statistics.html.twig:77 @@ -3202,7 +3128,7 @@ Underelementer vil blive flyttet opad. Antal lagerlokationer - + Part-DB1\templates\Statistics\statistics.html.twig:81 Part-DB1\templates\Statistics\statistics.html.twig:81 @@ -3213,7 +3139,7 @@ Underelementer vil blive flyttet opad. Antal leverandører - + Part-DB1\templates\Statistics\statistics.html.twig:85 Part-DB1\templates\Statistics\statistics.html.twig:85 @@ -3224,7 +3150,7 @@ Underelementer vil blive flyttet opad. Antal valutaer - + Part-DB1\templates\Statistics\statistics.html.twig:89 Part-DB1\templates\Statistics\statistics.html.twig:89 @@ -3235,7 +3161,7 @@ Underelementer vil blive flyttet opad. Antal måleenheder - + Part-DB1\templates\Statistics\statistics.html.twig:93 Part-DB1\templates\Statistics\statistics.html.twig:93 @@ -3246,7 +3172,7 @@ Underelementer vil blive flyttet opad. Antal projekter - + Part-DB1\templates\Statistics\statistics.html.twig:110 Part-DB1\templates\Statistics\statistics.html.twig:110 @@ -3257,7 +3183,7 @@ Underelementer vil blive flyttet opad. Antal af bilagstyper - + Part-DB1\templates\Statistics\statistics.html.twig:114 Part-DB1\templates\Statistics\statistics.html.twig:114 @@ -3268,7 +3194,7 @@ Underelementer vil blive flyttet opad. Antal bilag i alt - + Part-DB1\templates\Statistics\statistics.html.twig:118 Part-DB1\templates\Statistics\statistics.html.twig:118 @@ -3279,7 +3205,7 @@ Underelementer vil blive flyttet opad. Antal uploadede bilag - + Part-DB1\templates\Statistics\statistics.html.twig:122 Part-DB1\templates\Statistics\statistics.html.twig:122 @@ -3290,7 +3216,7 @@ Underelementer vil blive flyttet opad. Antal private bilag - + Part-DB1\templates\Statistics\statistics.html.twig:126 Part-DB1\templates\Statistics\statistics.html.twig:126 @@ -3301,7 +3227,7 @@ Underelementer vil blive flyttet opad. Antallet af alle eksterne bilag (URL) - + Part-DB1\templates\Users\backup_codes.html.twig:3 Part-DB1\templates\Users\backup_codes.html.twig:9 @@ -3313,7 +3239,7 @@ Underelementer vil blive flyttet opad. Backupkoder - + Part-DB1\templates\Users\backup_codes.html.twig:12 Part-DB1\templates\Users\backup_codes.html.twig:12 @@ -3323,7 +3249,7 @@ Underelementer vil blive flyttet opad. Udskriv disse koder og opbevar dem et sikkert sted! - + Part-DB1\templates\Users\backup_codes.html.twig:13 Part-DB1\templates\Users\backup_codes.html.twig:13 @@ -3333,7 +3259,7 @@ Underelementer vil blive flyttet opad. Hvis du ikke længere har adgang til din enhed med Godkendelses-appen (smartphone tabt, datatab osv.), kan du bruge en af ​​disse koder til at få adgang til din konto og eventuelt igen forbinde til godkendelses-app. Hver af disse koder kan bruges én gang; det er tilrådeligt at slette brugte koder. Alle med adgang til disse koder kan potentielt få adgang til din konto, så opbevar dem et sikkert sted. - + Part-DB1\templates\Users\backup_codes.html.twig:16 Part-DB1\templates\Users\backup_codes.html.twig:16 @@ -3343,7 +3269,7 @@ Underelementer vil blive flyttet opad. Brugernavn - + Part-DB1\templates\Users\backup_codes.html.twig:29 Part-DB1\templates\Users\backup_codes.html.twig:29 @@ -3353,7 +3279,7 @@ Underelementer vil blive flyttet opad. Side genereret den %date% - + Part-DB1\templates\Users\backup_codes.html.twig:32 Part-DB1\templates\Users\backup_codes.html.twig:32 @@ -3363,7 +3289,7 @@ Underelementer vil blive flyttet opad. Udskriv - + Part-DB1\templates\Users\backup_codes.html.twig:35 Part-DB1\templates\Users\backup_codes.html.twig:35 @@ -3373,7 +3299,7 @@ Underelementer vil blive flyttet opad. Kopier til udklipsholder - + Part-DB1\templates\Users\user_info.html.twig:3 Part-DB1\templates\Users\user_info.html.twig:6 @@ -3390,7 +3316,7 @@ Underelementer vil blive flyttet opad. Brugerinformation - + Part-DB1\templates\Users\user_info.html.twig:18 Part-DB1\src\Form\UserSettingsType.php:77 @@ -3404,7 +3330,7 @@ Underelementer vil blive flyttet opad. Fornavn - + Part-DB1\templates\Users\user_info.html.twig:24 Part-DB1\src\Form\UserSettingsType.php:82 @@ -3418,7 +3344,7 @@ Underelementer vil blive flyttet opad. Efternavn - + Part-DB1\templates\Users\user_info.html.twig:30 Part-DB1\src\Form\UserSettingsType.php:92 @@ -3432,7 +3358,7 @@ Underelementer vil blive flyttet opad. E-mail - + Part-DB1\templates\Users\user_info.html.twig:37 Part-DB1\src\Form\UserSettingsType.php:87 @@ -3446,7 +3372,7 @@ Underelementer vil blive flyttet opad. Afdeling - + Part-DB1\templates\Users\user_info.html.twig:47 Part-DB1\src\Form\UserSettingsType.php:73 @@ -3460,7 +3386,7 @@ Underelementer vil blive flyttet opad. Brugernavn - + Part-DB1\templates\Users\user_info.html.twig:53 Part-DB1\src\Services\ElementTypeNameGenerator.php:93 @@ -3473,7 +3399,7 @@ Underelementer vil blive flyttet opad. Gruppe - + Part-DB1\templates\Users\user_info.html.twig:67 Part-DB1\templates\Users\user_info.html.twig:67 @@ -3483,7 +3409,7 @@ Underelementer vil blive flyttet opad. Tilladelser - + Part-DB1\templates\Users\user_settings.html.twig:3 Part-DB1\templates\Users\user_settings.html.twig:6 @@ -3500,7 +3426,7 @@ Underelementer vil blive flyttet opad. Brugerindstillinger - + Part-DB1\templates\Users\user_settings.html.twig:18 Part-DB1\templates\Users\user_settings.html.twig:18 @@ -3511,7 +3437,7 @@ Underelementer vil blive flyttet opad. Personlige data - + Part-DB1\templates\Users\user_settings.html.twig:22 Part-DB1\templates\Users\user_settings.html.twig:22 @@ -3522,7 +3448,7 @@ Underelementer vil blive flyttet opad. Konfiguration - + Part-DB1\templates\Users\user_settings.html.twig:55 Part-DB1\templates\Users\user_settings.html.twig:55 @@ -3533,7 +3459,7 @@ Underelementer vil blive flyttet opad. Ændre password - + Part-DB1\templates\Users\_2fa_settings.html.twig:6 Part-DB1\templates\Users\_2fa_settings.html.twig:6 @@ -3543,7 +3469,7 @@ Underelementer vil blive flyttet opad. To-faktor godkendelse - + Part-DB1\templates\Users\_2fa_settings.html.twig:13 Part-DB1\templates\Users\_2fa_settings.html.twig:13 @@ -3553,7 +3479,7 @@ Underelementer vil blive flyttet opad. Godkendelses-app - + Part-DB1\templates\Users\_2fa_settings.html.twig:17 Part-DB1\templates\Users\_2fa_settings.html.twig:17 @@ -3563,7 +3489,7 @@ Underelementer vil blive flyttet opad. Backup-koder - + Part-DB1\templates\Users\_2fa_settings.html.twig:21 Part-DB1\templates\Users\_2fa_settings.html.twig:21 @@ -3573,7 +3499,7 @@ Underelementer vil blive flyttet opad. Sikkerhedsnøgler (U2F) - + Part-DB1\templates\Users\_2fa_settings.html.twig:25 Part-DB1\templates\Users\_2fa_settings.html.twig:25 @@ -3583,7 +3509,7 @@ Underelementer vil blive flyttet opad. Pålidelige enheder - + Part-DB1\templates\Users\_2fa_settings.html.twig:33 Part-DB1\templates\Users\_2fa_settings.html.twig:33 @@ -3593,7 +3519,7 @@ Underelementer vil blive flyttet opad. Er du sikker på, at du vil deaktivere godkendelses-appen? - + Part-DB1\templates\Users\_2fa_settings.html.twig:33 Part-DB1\templates\Users\_2fa_settings.html.twig:33 @@ -3604,7 +3530,7 @@ Underelementer vil blive flyttet opad. Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt beskyttet mod misbrug! - + Part-DB1\templates\Users\_2fa_settings.html.twig:39 Part-DB1\templates\Users\_2fa_settings.html.twig:39 @@ -3614,7 +3540,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Godkendelses-app er deaktiveret - + Part-DB1\templates\Users\_2fa_settings.html.twig:48 Part-DB1\templates\Users\_2fa_settings.html.twig:48 @@ -3624,7 +3550,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Download en godkendelses-app (f.eks. <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=com.google.android. apps. authenticator2">Google Authenticator</a> eller <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=org .fedorahosted .freeotp">FreeOTP Authenticator</a>) - + Part-DB1\templates\Users\_2fa_settings.html.twig:49 Part-DB1\templates\Users\_2fa_settings.html.twig:49 @@ -3634,7 +3560,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Scan QR-koden nedenfor med appen eller indtast data manuelt - + Part-DB1\templates\Users\_2fa_settings.html.twig:50 Part-DB1\templates\Users\_2fa_settings.html.twig:50 @@ -3644,7 +3570,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Indtast den genererede kode i feltet nedenfor og bekræft - + Part-DB1\templates\Users\_2fa_settings.html.twig:51 Part-DB1\templates\Users\_2fa_settings.html.twig:51 @@ -3654,7 +3580,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Udskriv dine backupkoder og gem dem et sikkert sted - + Part-DB1\templates\Users\_2fa_settings.html.twig:58 Part-DB1\templates\Users\_2fa_settings.html.twig:58 @@ -3664,7 +3590,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Manuel opsætning - + Part-DB1\templates\Users\_2fa_settings.html.twig:62 Part-DB1\templates\Users\_2fa_settings.html.twig:62 @@ -3674,7 +3600,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Type - + Part-DB1\templates\Users\_2fa_settings.html.twig:63 Part-DB1\templates\Users\_2fa_settings.html.twig:63 @@ -3684,7 +3610,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Brugernavn - + Part-DB1\templates\Users\_2fa_settings.html.twig:64 Part-DB1\templates\Users\_2fa_settings.html.twig:64 @@ -3694,7 +3620,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Secret - + Part-DB1\templates\Users\_2fa_settings.html.twig:65 Part-DB1\templates\Users\_2fa_settings.html.twig:65 @@ -3704,7 +3630,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Antal ciffre - + Part-DB1\templates\Users\_2fa_settings.html.twig:74 Part-DB1\templates\Users\_2fa_settings.html.twig:74 @@ -3714,7 +3640,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Godkendelses-app aktiv - + Part-DB1\templates\Users\_2fa_settings.html.twig:83 Part-DB1\templates\Users\_2fa_settings.html.twig:83 @@ -3724,7 +3650,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Backup-koder deaktiveret. Konfigurer godkendelses-appen for at aktivere backupkoder. - + Part-DB1\templates\Users\_2fa_settings.html.twig:84 Part-DB1\templates\Users\_2fa_settings.html.twig:92 @@ -3736,7 +3662,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Disse backupkoder giver dig adgang til din konto, selvom du mister enheden med godkendelse-appen. Udskriv koderne og opbevar dem et sikkert sted. - + Part-DB1\templates\Users\_2fa_settings.html.twig:88 Part-DB1\templates\Users\_2fa_settings.html.twig:88 @@ -3746,7 +3672,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Vil du virkelig nulstille koder? - + Part-DB1\templates\Users\_2fa_settings.html.twig:88 Part-DB1\templates\Users\_2fa_settings.html.twig:88 @@ -3756,7 +3682,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Dette vil slette alle tidligere koder og generere et sæt nye koder. Dette kan ikke fortrydes. Husk at udskrive de nye koder og gem dem et sikkert sted! - + Part-DB1\templates\Users\_2fa_settings.html.twig:91 Part-DB1\templates\Users\_2fa_settings.html.twig:91 @@ -3766,7 +3692,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Backupkoder aktiveret - + Part-DB1\templates\Users\_2fa_settings.html.twig:99 Part-DB1\templates\Users\_2fa_settings.html.twig:99 @@ -3776,7 +3702,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Vis backupkoder - + Part-DB1\templates\Users\_2fa_settings.html.twig:114 Part-DB1\templates\Users\_2fa_settings.html.twig:114 @@ -3786,7 +3712,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Gemte backupkoder - + Part-DB1\templates\Users\_2fa_settings.html.twig:115 Part-DB1\templates\Users\_2fa_settings.html.twig:115 @@ -3796,7 +3722,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Ønsker du virkelig at slette denne backupkode? - + Part-DB1\templates\Users\_2fa_settings.html.twig:116 Part-DB1\templates\Users\_2fa_settings.html.twig:116 @@ -3806,7 +3732,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Hvis du fjerner denne nøgle, vil du ikke længere kunne logge på med den. Hvis der ikke er nogen sikkerhedsnøgler tilbage, er to-faktor-godkendelse deaktiveret. - + Part-DB1\templates\Users\_2fa_settings.html.twig:123 Part-DB1\templates\Users\_2fa_settings.html.twig:123 @@ -3816,7 +3742,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Nøglenavn - + Part-DB1\templates\Users\_2fa_settings.html.twig:124 Part-DB1\templates\Users\_2fa_settings.html.twig:124 @@ -3826,7 +3752,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Registreringsdato - + Part-DB1\templates\Users\_2fa_settings.html.twig:134 Part-DB1\templates\Users\_2fa_settings.html.twig:134 @@ -3836,7 +3762,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Slet nøgle - + Part-DB1\templates\Users\_2fa_settings.html.twig:141 Part-DB1\templates\Users\_2fa_settings.html.twig:141 @@ -3846,7 +3772,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Ingen gemte nøgler - + Part-DB1\templates\Users\_2fa_settings.html.twig:144 Part-DB1\templates\Users\_2fa_settings.html.twig:144 @@ -3856,7 +3782,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Registrer ny sikkerhedsnøgle - + Part-DB1\templates\Users\_2fa_settings.html.twig:148 Part-DB1\templates\Users\_2fa_settings.html.twig:148 @@ -3866,7 +3792,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Når du tjekker to-faktor, kan den aktuelle computer markeres som troværdig og så er to-faktor-tjek er ikke længere nødvendig på denne computer. Hvis du udførte dette ved en fejl, eller hvis en computer ikke længere er troværdig. Så kan du nulstille status for <i>alle </i>computere her. - + Part-DB1\templates\Users\_2fa_settings.html.twig:149 Part-DB1\templates\Users\_2fa_settings.html.twig:149 @@ -3876,7 +3802,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Vil du virkelig fjerne alle pålidelige computere? - + Part-DB1\templates\Users\_2fa_settings.html.twig:150 Part-DB1\templates\Users\_2fa_settings.html.twig:150 @@ -3886,7 +3812,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Du skal opsætte to-faktor-godkendelse igen på alle computere. Sørg for, at du har din to-faktor-enhed ved hånden. - + Part-DB1\templates\Users\_2fa_settings.html.twig:154 Part-DB1\templates\Users\_2fa_settings.html.twig:154 @@ -3896,7 +3822,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Fjern alle pålidelige enheder - + Part-DB1\templates\_navbar.html.twig:4 Part-DB1\templates\_navbar.html.twig:4 @@ -3907,7 +3833,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Aktivér/de-aktiver sidebjælke - + Part-DB1\templates\_navbar.html.twig:22 @@ -3916,7 +3842,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Scanner - + Part-DB1\templates\_navbar.html.twig:38 Part-DB1\templates\_navbar.html.twig:36 @@ -3927,7 +3853,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Logget ind som - + Part-DB1\templates\_navbar.html.twig:44 Part-DB1\templates\_navbar.html.twig:42 @@ -3938,7 +3864,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Log ind - + Part-DB1\templates\_navbar.html.twig:50 Part-DB1\templates\_navbar.html.twig:48 @@ -3948,7 +3874,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Darkmode - + Part-DB1\templates\_navbar.html.twig:54 Part-DB1\src\Form\UserSettingsType.php:97 @@ -3962,7 +3888,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Sprog - + Part-DB1\templates\_navbar_search.html.twig:4 Part-DB1\templates\_navbar_search.html.twig:4 @@ -3973,7 +3899,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Søgemuligheder - + Part-DB1\templates\_navbar_search.html.twig:23 @@ -3982,7 +3908,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Tags - + Part-DB1\templates\_navbar_search.html.twig:27 Part-DB1\src\Form\LabelOptionsType.php:68 @@ -3997,7 +3923,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Lagerlokation - + Part-DB1\templates\_navbar_search.html.twig:36 Part-DB1\templates\_navbar_search.html.twig:31 @@ -4008,7 +3934,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Bestillingsnummer - + Part-DB1\templates\_navbar_search.html.twig:40 Part-DB1\src\Services\ElementTypeNameGenerator.php:89 @@ -4021,7 +3947,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Leverandør - + Part-DB1\templates\_navbar_search.html.twig:61 Part-DB1\templates\_navbar_search.html.twig:56 @@ -4032,7 +3958,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Reg. Ex. matching - + Part-DB1\templates\_sidebar.html.twig:37 Part-DB1\templates\_sidebar.html.twig:12 @@ -4048,7 +3974,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Projekter - + Part-DB1\templates\_sidebar.html.twig:2 Part-DB1\templates\_sidebar.html.twig:2 @@ -4061,7 +3987,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Handlinger - + Part-DB1\templates\_sidebar.html.twig:6 Part-DB1\templates\_sidebar.html.twig:6 @@ -4074,7 +4000,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Datakilde - + Part-DB1\templates\_sidebar.html.twig:10 Part-DB1\templates\_sidebar.html.twig:10 @@ -4087,7 +4013,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Fabrikant - + Part-DB1\templates\_sidebar.html.twig:11 Part-DB1\templates\_sidebar.html.twig:11 @@ -4100,7 +4026,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Leverandører - + Part-DB1\src\Controller\AdminPages\BaseAdminController.php:213 Part-DB1\src\Controller\AdminPages\BaseAdminController.php:293 @@ -4116,7 +4042,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Download af eksterne data fejlet! - + Part-DB1\src\Controller\AdminPages\BaseAdminController.php:222 Part-DB1\src\Controller\AdminPages\BaseAdminController.php:190 @@ -4126,7 +4052,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Ændringer gemt med succes. - + Part-DB1\src\Controller\AdminPages\BaseAdminController.php:231 Part-DB1\src\Controller\AdminPages\BaseAdminController.php:196 @@ -4136,7 +4062,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Handlinger - + Part-DB1\src\Controller\AdminPages\BaseAdminController.php:302 Part-DB1\src\Controller\AdminPages\BaseAdminController.php:252 @@ -4146,7 +4072,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Element oprettet med succes! - + Part-DB1\src\Controller\AdminPages\BaseAdminController.php:308 Part-DB1\src\Controller\AdminPages\BaseAdminController.php:258 @@ -4156,7 +4082,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Elementet kunne ikke oprettes! Tjek dit input data - + Part-DB1\src\Controller\AdminPages\BaseAdminController.php:399 Part-DB1\src\Controller\AdminPages\BaseAdminController.php:352 @@ -4167,7 +4093,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Element slettet! - + Part-DB1\src\Controller\AdminPages\BaseAdminController.php:401 Part-DB1\src\Controller\UserController.php:109 @@ -4183,7 +4109,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt CSRF-token er ugyldig! Genindlæs denne side, eller kontakt en administrator, hvis problemet fortsætter! - + Part-DB1\src\Controller\LabelController.php:125 @@ -4192,7 +4118,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt ingen elementer fundet. - + Part-DB1\src\Controller\LogController.php:149 Part-DB1\src\Controller\LogController.php:154 @@ -4203,7 +4129,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Elementet blev ikke fundet i databasen! - + Part-DB1\src\Controller\LogController.php:156 Part-DB1\src\Controller\LogController.php:160 @@ -4214,7 +4140,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Komponent rettet tilbage til tidligere version - + Part-DB1\src\Controller\LogController.php:176 Part-DB1\src\Controller\LogController.php:180 @@ -4225,7 +4151,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Komponent gendannet med succes. - + Part-DB1\src\Controller\LogController.php:178 Part-DB1\src\Controller\LogController.php:182 @@ -4236,7 +4162,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Komponent er allerede gendannet! - + Part-DB1\src\Controller\LogController.php:185 Part-DB1\src\Controller\LogController.php:189 @@ -4247,7 +4173,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Komponent slettet med succes - + Part-DB1\src\Controller\LogController.php:187 Part-DB1\src\Controller\LogController.php:191 @@ -4258,7 +4184,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Komponent er allerede blevet slettet - + Part-DB1\src\Controller\LogController.php:194 Part-DB1\src\Controller\LogController.php:198 @@ -4269,7 +4195,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Annullering af ændringerne gennemført - + Part-DB1\src\Controller\LogController.php:196 Part-DB1\src\Controller\LogController.php:200 @@ -4280,7 +4206,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Du skal først gendanne elementet, før du kan fortryde denne ændring! - + Part-DB1\src\Controller\LogController.php:199 Part-DB1\src\Controller\LogController.php:203 @@ -4291,7 +4217,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Denne logtype kan ikke fortrydes! - + Part-DB1\src\Controller\PartController.php:182 Part-DB1\src\Controller\PartController.php:182 @@ -4302,7 +4228,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Ændringer gemt! - + Part-DB1\src\Controller\PartController.php:216 Part-DB1\src\Controller\PartController.php:219 @@ -4312,7 +4238,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Komponent slettet. - + Part-DB1\src\Controller\PartController.php:302 Part-DB1\src\Controller\PartController.php:277 @@ -4325,7 +4251,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Komponenter oprettet med succes! - + Part-DB1\src\Controller\PartController.php:308 Part-DB1\src\Controller\PartController.php:283 @@ -4335,7 +4261,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Fejl ved oprettelse: Tjek dine indtastninger! - + Part-DB1\src\Controller\ScanController.php:68 Part-DB1\src\Controller\ScanController.php:90 @@ -4345,7 +4271,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Ingen element fundet - + Part-DB1\src\Controller\ScanController.php:71 @@ -4354,7 +4280,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Ukendt format! - + Part-DB1\src\Controller\ScanController.php:86 @@ -4363,7 +4289,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Element fundet. - + Part-DB1\src\Controller\SecurityController.php:114 Part-DB1\src\Controller\SecurityController.php:109 @@ -4373,7 +4299,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Brugernavn / e-mail - + Part-DB1\src\Controller\SecurityController.php:131 Part-DB1\src\Controller\SecurityController.php:126 @@ -4383,7 +4309,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Anmodning om password lykkedes! Tjek din e-mail for mere information. - + Part-DB1\src\Controller\SecurityController.php:162 Part-DB1\src\Controller\SecurityController.php:160 @@ -4393,7 +4319,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Brugernavn - + Part-DB1\src\Controller\SecurityController.php:165 Part-DB1\src\Controller\SecurityController.php:163 @@ -4403,7 +4329,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Token - + Part-DB1\src\Controller\SecurityController.php:194 Part-DB1\src\Controller\SecurityController.php:192 @@ -4413,7 +4339,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Brugernavn eller token er ugyldigt! Tjek dine indtastninger. - + Part-DB1\src\Controller\SecurityController.php:196 Part-DB1\src\Controller\SecurityController.php:194 @@ -4423,7 +4349,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Password blev nulstillet. Du kan nu logge ind med det nye password. - + Part-DB1\src\Controller\UserController.php:107 Part-DB1\src\Controller\UserController.php:99 @@ -4433,7 +4359,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Alle to-faktor-godkendelsesmetoder er blevet deaktiveret. - + Part-DB1\src\Controller\UserSettingsController.php:101 Part-DB1\src\Controller\UserSettingsController.php:92 @@ -4443,7 +4369,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Ingen backup-koder er aktiveret! - + Part-DB1\src\Controller\UserSettingsController.php:138 Part-DB1\src\Controller\UserSettingsController.php:132 @@ -4453,7 +4379,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Der er ingen sikkerhedsnøgle med dette ID! - + Part-DB1\src\Controller\UserSettingsController.php:145 Part-DB1\src\Controller\UserSettingsController.php:139 @@ -4463,7 +4389,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Du kan kun slette dine egne sikkerhedsnøgler! - + Part-DB1\src\Controller\UserSettingsController.php:153 Part-DB1\src\Controller\UserSettingsController.php:147 @@ -4473,7 +4399,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Sikkerhedsnøglen blev fjernet. - + Part-DB1\src\Controller\UserSettingsController.php:188 Part-DB1\src\Controller\UserSettingsController.php:180 @@ -4483,7 +4409,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Pålidelige enheder blev slettet. - + Part-DB1\src\Controller\UserSettingsController.php:235 Part-DB1\src\Controller\UserSettingsController.php:226 @@ -4494,7 +4420,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Indstillinger gemt! - + Part-DB1\src\Controller\UserSettingsController.php:297 Part-DB1\src\Controller\UserSettingsController.php:288 @@ -4505,7 +4431,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Password ændret! - + Part-DB1\src\Controller\UserSettingsController.php:317 Part-DB1\src\Controller\UserSettingsController.php:306 @@ -4515,7 +4441,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Godkendelses-app'en blev aktiveret. - + Part-DB1\src\Controller\UserSettingsController.php:328 Part-DB1\src\Controller\UserSettingsController.php:315 @@ -4525,7 +4451,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Godkendelses-app'en er deaktiveret - + Part-DB1\src\Controller\UserSettingsController.php:346 Part-DB1\src\Controller\UserSettingsController.php:332 @@ -4535,7 +4461,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Nye backupkoder blev oprettet. - + Part-DB1\src\DataTables\AttachmentDataTable.php:153 Part-DB1\src\DataTables\AttachmentDataTable.php:153 @@ -4545,7 +4471,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt filstørrelse - + Part-DB1\src\DataTables\AttachmentDataTable.php:183 Part-DB1\src\DataTables\AttachmentDataTable.php:191 @@ -4565,7 +4491,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Sand - + Part-DB1\src\DataTables\AttachmentDataTable.php:184 Part-DB1\src\DataTables\AttachmentDataTable.php:192 @@ -4587,7 +4513,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Falsk - + Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:128 Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:119 @@ -4597,7 +4523,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Slettet - + Part-DB1\src\DataTables\Column\RevertLogColumn.php:57 Part-DB1\src\DataTables\Column\RevertLogColumn.php:60 @@ -4608,7 +4534,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Gendan element - + Part-DB1\src\DataTables\Column\RevertLogColumn.php:63 Part-DB1\src\DataTables\Column\RevertLogColumn.php:66 @@ -4619,7 +4545,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Fortryd ændring - + Part-DB1\src\DataTables\Column\RevertLogColumn.php:83 Part-DB1\src\DataTables\Column\RevertLogColumn.php:86 @@ -4630,7 +4556,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Nulstil element til nuværende status! - + Part-DB1\src\DataTables\LogDataTable.php:173 Part-DB1\src\DataTables\LogDataTable.php:161 @@ -4640,7 +4566,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt ID - + Part-DB1\src\DataTables\LogDataTable.php:178 Part-DB1\src\DataTables\LogDataTable.php:166 @@ -4650,7 +4576,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Tidsstempel - + Part-DB1\src\DataTables\LogDataTable.php:183 Part-DB1\src\DataTables\LogDataTable.php:171 @@ -4660,7 +4586,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Begivenhed - + Part-DB1\src\DataTables\LogDataTable.php:191 Part-DB1\src\DataTables\LogDataTable.php:179 @@ -4670,7 +4596,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Niveau - + Part-DB1\src\DataTables\LogDataTable.php:200 Part-DB1\src\DataTables\LogDataTable.php:188 @@ -4680,7 +4606,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Bruger - + Part-DB1\src\DataTables\LogDataTable.php:213 Part-DB1\src\DataTables\LogDataTable.php:201 @@ -4690,7 +4616,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Måltype - + Part-DB1\src\DataTables\LogDataTable.php:226 Part-DB1\src\DataTables\LogDataTable.php:214 @@ -4700,7 +4626,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Mål - + Part-DB1\src\DataTables\LogDataTable.php:231 Part-DB1\src\DataTables\LogDataTable.php:218 @@ -4711,7 +4637,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Ekstra - + Part-DB1\src\DataTables\PartsDataTable.php:168 Part-DB1\src\DataTables\PartsDataTable.php:116 @@ -4721,7 +4647,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Navn - + Part-DB1\src\DataTables\PartsDataTable.php:178 Part-DB1\src\DataTables\PartsDataTable.php:126 @@ -4731,7 +4657,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt ID - + Part-DB1\src\DataTables\PartsDataTable.php:182 Part-DB1\src\DataTables\PartsDataTable.php:130 @@ -4741,7 +4667,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Beskrivelse - + Part-DB1\src\DataTables\PartsDataTable.php:185 Part-DB1\src\DataTables\PartsDataTable.php:133 @@ -4751,7 +4677,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Kategori - + Part-DB1\src\DataTables\PartsDataTable.php:190 Part-DB1\src\DataTables\PartsDataTable.php:138 @@ -4761,7 +4687,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Footprint - + Part-DB1\src\DataTables\PartsDataTable.php:194 Part-DB1\src\DataTables\PartsDataTable.php:142 @@ -4771,7 +4697,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Fabrikant - + Part-DB1\src\DataTables\PartsDataTable.php:197 Part-DB1\src\DataTables\PartsDataTable.php:145 @@ -4781,7 +4707,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Lagerlokationer - + Part-DB1\src\DataTables\PartsDataTable.php:216 Part-DB1\src\DataTables\PartsDataTable.php:164 @@ -4791,7 +4717,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Antal - + Part-DB1\src\DataTables\PartsDataTable.php:224 Part-DB1\src\DataTables\PartsDataTable.php:172 @@ -4801,7 +4727,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Min. beholdning - + Part-DB1\src\DataTables\PartsDataTable.php:232 Part-DB1\src\DataTables\PartsDataTable.php:180 @@ -4811,13 +4737,13 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Måleenhed - + part.table.partCustomState - Brugerdefineret komponentstatus + Brugerdefineret part/del status - + Part-DB1\src\DataTables\PartsDataTable.php:236 Part-DB1\src\DataTables\PartsDataTable.php:184 @@ -4827,7 +4753,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Tilføjet - + Part-DB1\src\DataTables\PartsDataTable.php:240 Part-DB1\src\DataTables\PartsDataTable.php:188 @@ -4837,7 +4763,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Sidst redigeret - + Part-DB1\src\DataTables\PartsDataTable.php:244 Part-DB1\src\DataTables\PartsDataTable.php:192 @@ -4847,7 +4773,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Gennemgang nødvendig - + Part-DB1\src\DataTables\PartsDataTable.php:251 Part-DB1\src\DataTables\PartsDataTable.php:199 @@ -4857,7 +4783,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Favorit - + Part-DB1\src\DataTables\PartsDataTable.php:258 Part-DB1\src\DataTables\PartsDataTable.php:206 @@ -4867,7 +4793,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Status - + Part-DB1\src\DataTables\PartsDataTable.php:260 Part-DB1\src\DataTables\PartsDataTable.php:262 @@ -4881,7 +4807,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Ukendt - + Part-DB1\src\DataTables\PartsDataTable.php:263 Part-DB1\src\Form\Part\PartBaseType.php:90 @@ -4893,7 +4819,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Meddelt - + Part-DB1\src\DataTables\PartsDataTable.php:264 Part-DB1\src\Form\Part\PartBaseType.php:90 @@ -4905,7 +4831,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Aktiv - + Part-DB1\src\DataTables\PartsDataTable.php:265 Part-DB1\src\Form\Part\PartBaseType.php:90 @@ -4917,7 +4843,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Anbefales ikke til nye designs - + Part-DB1\src\DataTables\PartsDataTable.php:266 Part-DB1\src\Form\Part\PartBaseType.php:90 @@ -4929,7 +4855,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt End of life - + Part-DB1\src\DataTables\PartsDataTable.php:267 Part-DB1\src\Form\Part\PartBaseType.php:90 @@ -4941,7 +4867,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Discontinued - + Part-DB1\src\DataTables\PartsDataTable.php:271 Part-DB1\src\DataTables\PartsDataTable.php:219 @@ -4951,7 +4877,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt MPN - + Part-DB1\src\DataTables\PartsDataTable.php:275 Part-DB1\src\DataTables\PartsDataTable.php:223 @@ -4961,7 +4887,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Vægt - + Part-DB1\src\DataTables\PartsDataTable.php:279 Part-DB1\src\DataTables\PartsDataTable.php:227 @@ -4971,7 +4897,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Tags - + Part-DB1\src\DataTables\PartsDataTable.php:283 Part-DB1\src\DataTables\PartsDataTable.php:231 @@ -4981,7 +4907,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Bilag - + Part-DB1\src\EventSubscriber\UserSystem\LoginSuccessSubscriber.php:82 Part-DB1\src\EventSubscriber\LoginSuccessListener.php:82 @@ -4991,7 +4917,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Login lykkedes - + Part-DB1\src\Form\AdminPages\ImportType.php:77 Part-DB1\src\Form\AdminPages\ImportType.php:77 @@ -5002,7 +4928,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt JSON - + Part-DB1\src\Form\AdminPages\ImportType.php:77 Part-DB1\src\Form\AdminPages\ImportType.php:77 @@ -5013,7 +4939,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt XML - + Part-DB1\src\Form\AdminPages\ImportType.php:77 Part-DB1\src\Form\AdminPages\ImportType.php:77 @@ -5024,7 +4950,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt CSV - + Part-DB1\src\Form\AdminPages\ImportType.php:77 Part-DB1\src\Form\AdminPages\ImportType.php:77 @@ -5035,17 +4961,17 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt YAML - + Part-DB1\src\Form\AdminPages\ImportType.php:124 Part-DB1\src\Form\AdminPages\ImportType.php:124 import.abort_on_validation.help - Hvis denne indstilling er aktiveret, vil hele processen blive afbrudt, hvis der registreres ugyldige data. Hvis denne indstilling ikke er aktiv, ignoreres ugyldige poster, og de andre poster forsøges importeret. + Hvis denne indstilling er aktiveret, vil hele processen blive afbrudt, hvis der registreres ugyldige data. Hvis denne indstilling ikke er aktiv ignoreres ugyldige poster, og de andre poster forsøges importeret. - + Part-DB1\src\Form\AdminPages\ImportType.php:86 Part-DB1\src\Form\AdminPages\ImportType.php:86 @@ -5056,7 +4982,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt CSV-separator - + Part-DB1\src\Form\AdminPages\ImportType.php:93 Part-DB1\src\Form\AdminPages\ImportType.php:93 @@ -5067,7 +4993,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Overordnet element - + Part-DB1\src\Form\AdminPages\ImportType.php:101 Part-DB1\src\Form\AdminPages\ImportType.php:101 @@ -5078,7 +5004,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Fil - + Part-DB1\src\Form\AdminPages\ImportType.php:111 Part-DB1\src\Form\AdminPages\ImportType.php:111 @@ -5089,7 +5015,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Importer også underelementer - + Part-DB1\src\Form\AdminPages\ImportType.php:120 Part-DB1\src\Form\AdminPages\ImportType.php:120 @@ -5100,7 +5026,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Annuller ved ugyldige data - + Part-DB1\src\Form\AdminPages\ImportType.php:132 Part-DB1\src\Form\AdminPages\ImportType.php:132 @@ -5111,7 +5037,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Importer - + Part-DB1\src\Form\AttachmentFormType.php:113 Part-DB1\src\Form\AttachmentFormType.php:109 @@ -5121,7 +5047,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt En vedhæftet fil, der er markeret som privat, kan kun tilgås af autoriseret bruger som har de relevante tilladelser. Når denne indstilling er aktiv, genereres der ikke miniaturebilleder, og adgangen til filen er langsommere. - + Part-DB1\src\Form\AttachmentFormType.php:127 Part-DB1\src\Form\AttachmentFormType.php:123 @@ -5131,7 +5057,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Her kan du enten indtaste en URL til en ekstern fil, eller du kan søge efter de indbyggede ressourcer ved at indtaste et nøgleord (f.eks. footprint). - + Part-DB1\src\Form\AttachmentFormType.php:82 Part-DB1\src\Form\AttachmentFormType.php:79 @@ -5141,7 +5067,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Navn - + Part-DB1\src\Form\AttachmentFormType.php:85 Part-DB1\src\Form\AttachmentFormType.php:82 @@ -5151,7 +5077,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Bilagstype - + Part-DB1\src\Form\AttachmentFormType.php:94 Part-DB1\src\Form\AttachmentFormType.php:91 @@ -5161,7 +5087,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Vis i tabel - + Part-DB1\src\Form\AttachmentFormType.php:105 Part-DB1\src\Form\AttachmentFormType.php:102 @@ -5171,7 +5097,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Privat bilag - + Part-DB1\src\Form\AttachmentFormType.php:119 Part-DB1\src\Form\AttachmentFormType.php:115 @@ -5181,7 +5107,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt URL - + Part-DB1\src\Form\AttachmentFormType.php:133 Part-DB1\src\Form\AttachmentFormType.php:129 @@ -5191,7 +5117,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Download eksternt data - + Part-DB1\src\Form\AttachmentFormType.php:146 Part-DB1\src\Form\AttachmentFormType.php:142 @@ -5201,7 +5127,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Upload fil - + Part-DB1\src\Form\LabelOptionsType.php:68 Part-DB1\src\Services\ElementTypeNameGenerator.php:86 @@ -5211,7 +5137,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Komponent - + Part-DB1\src\Form\LabelOptionsType.php:68 Part-DB1\src\Services\ElementTypeNameGenerator.php:87 @@ -5221,7 +5147,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Komponentbeholdning - + Part-DB1\src\Form\LabelOptionsType.php:78 @@ -5230,7 +5156,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Ingen - + Part-DB1\src\Form\LabelOptionsType.php:78 @@ -5239,7 +5165,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt QR-kode (anbefalet) - + Part-DB1\src\Form\LabelOptionsType.php:78 @@ -5248,7 +5174,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Kode 128 (anbefalet) - + Part-DB1\src\Form\LabelOptionsType.php:78 @@ -5257,7 +5183,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Kode 39 (anbefalet) - + Part-DB1\src\Form\LabelOptionsType.php:78 @@ -5266,7 +5192,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Kode 93 - + Part-DB1\src\Form\LabelOptionsType.php:78 @@ -5275,7 +5201,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Datamatrix - + Part-DB1\src\Form\LabelOptionsType.php:122 @@ -5284,7 +5210,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt HTML - + Part-DB1\src\Form\LabelOptionsType.php:122 @@ -5293,7 +5219,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Twig - + Part-DB1\src\Form\LabelOptionsType.php:126 @@ -5302,7 +5228,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Hvis du vælger Twig her, vil indholdsfeltet blive fortolket som en Twig-skabelon. Yderligere hjælp er tilgængelig i <a href="https://twig.symfony.com/doc/3.x/templates.html">Twig Dokumentation</a> og <a href="https://docs.part-db.dk/usage/labels.html#twig-mode">Wiki</a>. - + Part-DB1\src\Form\LabelOptionsType.php:47 @@ -5311,7 +5237,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Størrelse - + Part-DB1\src\Form\LabelOptionsType.php:66 @@ -5320,7 +5246,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Elementtype - + Part-DB1\src\Form\LabelOptionsType.php:75 @@ -5329,7 +5255,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Stregkodetype - + Part-DB1\src\Form\LabelOptionsType.php:102 @@ -5338,7 +5264,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Indhold - + Part-DB1\src\Form\LabelOptionsType.php:111 @@ -5347,7 +5273,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Yderligere CSS - + Part-DB1\src\Form\LabelOptionsType.php:120 @@ -5356,7 +5282,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Parser mode - + Part-DB1\src\Form\LabelOptionsType.php:51 @@ -5365,7 +5291,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Bredde - + Part-DB1\src\Form\LabelOptionsType.php:60 @@ -5374,7 +5300,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Højde - + Part-DB1\src\Form\LabelSystem\LabelDialogType.php:49 @@ -5383,7 +5309,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Du kan her angive flere ID'er (f.eks. 1, 2, 3) og/eller et interval her for at generere stregkoder for flere elementer på én gang. - + Part-DB1\src\Form\LabelSystem\LabelDialogType.php:46 @@ -5392,7 +5318,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Element ID'ere - + Part-DB1\src\Form\LabelSystem\LabelDialogType.php:59 @@ -5401,7 +5327,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Opdatering - + Part-DB1\src\Form\LabelSystem\ScanDialogType.php:36 @@ -5410,7 +5336,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Input - + Part-DB1\src\Form\LabelSystem\ScanDialogType.php:44 @@ -5419,7 +5345,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Afsend - + Part-DB1\src\Form\ParameterType.php:41 @@ -5428,7 +5354,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt F.eks. DC Current Gain - + Part-DB1\src\Form\ParameterType.php:50 @@ -5437,7 +5363,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt F.eks. h_[FE] - + Part-DB1\src\Form\ParameterType.php:60 @@ -5446,7 +5372,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt f.eks. Test specifikationer - + Part-DB1\src\Form\ParameterType.php:71 @@ -5455,7 +5381,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt f.eks. 350 - + Part-DB1\src\Form\ParameterType.php:82 @@ -5464,7 +5390,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt f.eks. 100 - + Part-DB1\src\Form\ParameterType.php:93 @@ -5473,7 +5399,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt f.eks. 200 - + Part-DB1\src\Form\ParameterType.php:103 @@ -5482,7 +5408,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt f.eks. V - + Part-DB1\src\Form\ParameterType.php:114 @@ -5491,7 +5417,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt f.eks. tekniske specifikationer - + Part-DB1\src\Form\Part\OrderdetailType.php:72 Part-DB1\src\Form\Part\OrderdetailType.php:75 @@ -5501,7 +5427,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Leverandør varenummer - + Part-DB1\src\Form\Part\OrderdetailType.php:81 Part-DB1\src\Form\Part\OrderdetailType.php:84 @@ -5511,7 +5437,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Leverandør - + Part-DB1\src\Form\Part\OrderdetailType.php:87 Part-DB1\src\Form\Part\OrderdetailType.php:90 @@ -5521,7 +5447,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Link til tilbud - + Part-DB1\src\Form\Part\OrderdetailType.php:93 Part-DB1\src\Form\Part\OrderdetailType.php:96 @@ -5531,7 +5457,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Ikke længere tilgængelig - + Part-DB1\src\Form\Part\OrderdetailType.php:75 Part-DB1\src\Form\Part\OrderdetailType.php:78 @@ -5541,7 +5467,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt f.eks. BC 547 - + Part-DB1\src\Form\Part\PartBaseType.php:101 Part-DB1\src\Form\Part\PartBaseType.php:99 @@ -5551,7 +5477,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Navn - + Part-DB1\src\Form\Part\PartBaseType.php:109 Part-DB1\src\Form\Part\PartBaseType.php:107 @@ -5561,7 +5487,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Beskrivelse - + Part-DB1\src\Form\Part\PartBaseType.php:120 Part-DB1\src\Form\Part\PartBaseType.php:118 @@ -5571,7 +5497,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Minimumsmængde - + Part-DB1\src\Form\Part\PartBaseType.php:129 Part-DB1\src\Form\Part\PartBaseType.php:127 @@ -5581,7 +5507,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Kategori - + Part-DB1\src\Form\Part\PartBaseType.php:135 Part-DB1\src\Form\Part\PartBaseType.php:133 @@ -5591,7 +5517,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Footprint - + Part-DB1\src\Form\Part\PartBaseType.php:142 Part-DB1\src\Form\Part\PartBaseType.php:140 @@ -5601,7 +5527,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Tags - + Part-DB1\src\Form\Part\PartBaseType.php:154 Part-DB1\src\Form\Part\PartBaseType.php:152 @@ -5611,7 +5537,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Fabrikant - + Part-DB1\src\Form\Part\PartBaseType.php:161 Part-DB1\src\Form\Part\PartBaseType.php:159 @@ -5621,7 +5547,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Link til produktside - + Part-DB1\src\Form\Part\PartBaseType.php:167 Part-DB1\src\Form\Part\PartBaseType.php:165 @@ -5631,7 +5557,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Fabrikant partnummer - + Part-DB1\src\Form\Part\PartBaseType.php:173 Part-DB1\src\Form\Part\PartBaseType.php:171 @@ -5641,7 +5567,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Fabrikantstatus - + Part-DB1\src\Form\Part\PartBaseType.php:181 Part-DB1\src\Form\Part\PartBaseType.php:179 @@ -5651,7 +5577,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Gennemgang nødvendig - + Part-DB1\src\Form\Part\PartBaseType.php:189 Part-DB1\src\Form\Part\PartBaseType.php:187 @@ -5661,7 +5587,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Favorit - + Part-DB1\src\Form\Part\PartBaseType.php:197 Part-DB1\src\Form\Part\PartBaseType.php:195 @@ -5671,7 +5597,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Vægt - + Part-DB1\src\Form\Part\PartBaseType.php:203 Part-DB1\src\Form\Part\PartBaseType.php:201 @@ -5681,13 +5607,13 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Måleenhed - + part.edit.partCustomState - Brugerdefineret deltilstand + Brugerdefineret part status - + Part-DB1\src\Form\Part\PartBaseType.php:212 Part-DB1\src\Form\Part\PartBaseType.php:210 @@ -5697,7 +5623,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Notater - + Part-DB1\src\Form\Part\PartBaseType.php:250 Part-DB1\src\Form\Part\PartBaseType.php:246 @@ -5707,7 +5633,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Miniaturebillede - + Part-DB1\src\Form\Part\PartBaseType.php:295 Part-DB1\src\Form\Part\PartBaseType.php:276 @@ -5718,7 +5644,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Anvend ændringer - + Part-DB1\src\Form\Part\PartBaseType.php:296 Part-DB1\src\Form\Part\PartBaseType.php:277 @@ -5729,7 +5655,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Annuller ændringer - + Part-DB1\src\Form\Part\PartBaseType.php:105 Part-DB1\src\Form\Part\PartBaseType.php:103 @@ -5739,7 +5665,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt f.eks. BC547 - + Part-DB1\src\Form\Part\PartBaseType.php:115 Part-DB1\src\Form\Part\PartBaseType.php:113 @@ -5749,7 +5675,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt f.eks. NPN 45V, 0,1A 0,5W - + Part-DB1\src\Form\Part\PartBaseType.php:123 Part-DB1\src\Form\Part\PartBaseType.php:121 @@ -5759,7 +5685,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt f.eks. 1 - + Part-DB1\src\Form\Part\PartLotType.php:69 Part-DB1\src\Form\Part\PartLotType.php:69 @@ -5769,7 +5695,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Beskrivelse - + Part-DB1\src\Form\Part\PartLotType.php:78 Part-DB1\src\Form\Part\PartLotType.php:78 @@ -5779,7 +5705,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Lagerlokation - + Part-DB1\src\Form\Part\PartLotType.php:89 Part-DB1\src\Form\Part\PartLotType.php:89 @@ -5789,7 +5715,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Antal - + Part-DB1\src\Form\Part\PartLotType.php:98 Part-DB1\src\Form\Part\PartLotType.php:97 @@ -5799,7 +5725,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Ukendt antal - + Part-DB1\src\Form\Part\PartLotType.php:109 Part-DB1\src\Form\Part\PartLotType.php:108 @@ -5809,7 +5735,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt skal fyldes op igen - + Part-DB1\src\Form\Part\PartLotType.php:120 Part-DB1\src\Form\Part\PartLotType.php:119 @@ -5819,7 +5745,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Udløbsdato - + Part-DB1\src\Form\Part\PartLotType.php:128 Part-DB1\src\Form\Part\PartLotType.php:125 @@ -5829,7 +5755,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Bemærk - + Part-DB1\src\Form\Permissions\PermissionsType.php:99 Part-DB1\src\Form\Permissions\PermissionsType.php:99 @@ -5839,7 +5765,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Forskellige - + Part-DB1\src\Form\TFAGoogleSettingsType.php:97 Part-DB1\src\Form\TFAGoogleSettingsType.php:97 @@ -5849,7 +5775,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Aktiver godkendelses-app - + Part-DB1\src\Form\TFAGoogleSettingsType.php:101 Part-DB1\src\Form\TFAGoogleSettingsType.php:101 @@ -5859,7 +5785,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Deaktiver godkendelses-app - + Part-DB1\src\Form\TFAGoogleSettingsType.php:74 Part-DB1\src\Form\TFAGoogleSettingsType.php:74 @@ -5869,7 +5795,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Verifikationskode - + Part-DB1\src\Form\UserSettingsType.php:108 Part-DB1\src\Form\UserSettingsType.php:108 @@ -5880,7 +5806,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Tidszone - + Part-DB1\src\Form\UserSettingsType.php:133 Part-DB1\src\Form\UserSettingsType.php:132 @@ -5890,7 +5816,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Foretrukken valuta - + Part-DB1\src\Form\UserSettingsType.php:140 Part-DB1\src\Form\UserSettingsType.php:139 @@ -5901,7 +5827,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Anvend ændringer - + Part-DB1\src\Form\UserSettingsType.php:141 Part-DB1\src\Form\UserSettingsType.php:140 @@ -5912,7 +5838,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Kasser ændringer - + Part-DB1\src\Form\UserSettingsType.php:104 Part-DB1\src\Form\UserSettingsType.php:104 @@ -5923,7 +5849,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Serversprog - + Part-DB1\src\Form\UserSettingsType.php:115 Part-DB1\src\Form\UserSettingsType.php:115 @@ -5934,7 +5860,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Server tidszone - + Part-DB1\src\Services\ElementTypeNameGenerator.php:79 Part-DB1\src\Services\ElementTypeNameGenerator.php:79 @@ -5944,7 +5870,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Bilag - + Part-DB1\src\Services\ElementTypeNameGenerator.php:81 Part-DB1\src\Services\ElementTypeNameGenerator.php:81 @@ -5954,7 +5880,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Bilagstype - + Part-DB1\src\Services\ElementTypeNameGenerator.php:82 Part-DB1\src\Services\ElementTypeNameGenerator.php:82 @@ -5964,7 +5890,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Projekt - + Part-DB1\src\Services\ElementTypeNameGenerator.php:85 Part-DB1\src\Services\ElementTypeNameGenerator.php:85 @@ -5974,13 +5900,13 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Måleenhed - + part_custom_state.label - Brugerdefineret deltilstand + Brugerdefineret part status - + Part-DB1\src\Services\ElementTypeNameGenerator.php:90 Part-DB1\src\Services\ElementTypeNameGenerator.php:90 @@ -5990,7 +5916,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Valuta - + Part-DB1\src\Services\ElementTypeNameGenerator.php:91 Part-DB1\src\Services\ElementTypeNameGenerator.php:91 @@ -6000,7 +5926,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Bestillingsoplysninger - + Part-DB1\src\Services\ElementTypeNameGenerator.php:92 Part-DB1\src\Services\ElementTypeNameGenerator.php:92 @@ -6010,7 +5936,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Prisinformation - + Part-DB1\src\Services\ElementTypeNameGenerator.php:94 Part-DB1\src\Services\ElementTypeNameGenerator.php:94 @@ -6020,7 +5946,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Rediger - + Part-DB1\src\Services\ElementTypeNameGenerator.php:95 @@ -6029,7 +5955,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Parameter - + Part-DB1\src\Services\ElementTypeNameGenerator.php:96 @@ -6038,7 +5964,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Labelprofil - + Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:176 Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:161 @@ -6049,7 +5975,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Ukendt - + Part-DB1\src\Services\MarkdownParser.php:73 Part-DB1\src\Services\MarkdownParser.php:73 @@ -6059,7 +5985,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Indlæs Markdown. Hvis dette varer ved i lang tid, så prøv at indlæse hjemmesiden igen! - + Part-DB1\src\Services\PasswordResetManager.php:98 Part-DB1\src\Services\PasswordResetManager.php:98 @@ -6069,7 +5995,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Password nulstillet for din Part-DB-konto - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 @@ -6078,7 +6004,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Værktøjer - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:107 @@ -6089,7 +6015,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Rediger - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:110 Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 @@ -6100,7 +6026,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Vis - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:111 Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 @@ -6110,7 +6036,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt System - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:123 @@ -6119,7 +6045,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Labeldialog - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:130 @@ -6128,7 +6054,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Scanner - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:149 Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:126 @@ -6136,10 +6062,10 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt tree.tools.edit.attachment_types - Bilagstype + Bilagstyper - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:155 Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:132 @@ -6150,7 +6076,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Kategorier - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:161 Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:138 @@ -6161,7 +6087,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Projekter - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:167 Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:144 @@ -6172,7 +6098,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Leverandører - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:173 Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:150 @@ -6183,7 +6109,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Fabrikanter - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:179 Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:156 @@ -6193,7 +6119,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Lagerlokationer - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:185 Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:162 @@ -6203,42 +6129,42 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Footprints - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:191 Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:168 tree.tools.edit.currency - Valuta + Valutaer - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:174 tree.tools.edit.measurement_unit - Måleenhed + Måleenheder - + tree.tools.edit.part_custom_state - Brugerdefineret komponenttilstand + [[Part_custom_state]] - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 tree.tools.edit.label_profile - Labelprofil + Labelprofiler - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:209 Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:180 @@ -6248,7 +6174,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Ny komponent - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:226 Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 @@ -6259,7 +6185,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Vis alle dele - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:232 Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 @@ -6269,7 +6195,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Bilag - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:239 Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:210 @@ -6280,7 +6206,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Statistik - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:258 Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:229 @@ -6290,7 +6216,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Bruger - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:264 Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:235 @@ -6300,7 +6226,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Grupper - + Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:271 Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:242 @@ -6311,7 +6237,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Hændelseslog - + Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 @@ -6322,7 +6248,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Nyt element - + Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 obsolete @@ -6332,7 +6258,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Rediger - + Part-DB1\templates\_navbar.html.twig:27 templates\base.html.twig:88 @@ -6343,7 +6269,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Scan stregkode - + Part-DB1\src\Form\UserSettingsType.php:119 src\Form\UserSettingsType.php:49 @@ -6354,7 +6280,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Tema - + Part-DB1\src\Form\UserSettingsType.php:129 src\Form\UserSettingsType.php:50 @@ -6365,7 +6291,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Server Tema - + Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:100 new @@ -6376,7 +6302,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt IP: - + Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:128 Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:150 @@ -6390,7 +6316,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Fortryd ændringer - + Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:130 Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:152 @@ -6404,7 +6330,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Element nulstillet - + Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:139 new @@ -6415,7 +6341,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Gammelt lager - + Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:160 new @@ -6426,7 +6352,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Gammelt navn - + Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:184 new @@ -6437,7 +6363,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Ændrede egenskaber - + Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:198 new @@ -6448,7 +6374,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Kommentar - + Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:214 new @@ -6459,7 +6385,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Slettet element - + templates\base.html.twig:81 obsolete @@ -6470,7 +6396,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Kom nu! - + templates\base.html.twig:109 obsolete @@ -6481,7 +6407,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Engelsk - + templates\base.html.twig:112 obsolete @@ -6492,7 +6418,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Tysk - + obsolete obsolete @@ -6502,7 +6428,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Dit password skal ændres - + obsolete obsolete @@ -6512,7 +6438,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Bilagstype - + obsolete obsolete @@ -6522,7 +6448,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt forbundet element - + obsolete obsolete @@ -6532,7 +6458,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Billede? - + obsolete obsolete @@ -6542,7 +6468,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt 3D-model? - + obsolete obsolete @@ -6552,7 +6478,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Indbygget ressource? - + obsolete obsolete @@ -6562,7 +6488,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt f.eks. brugbar til strømforsyning - + obsolete obsolete @@ -6572,7 +6498,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Generer nye backup-koder - + obsolete obsolete @@ -6582,7 +6508,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Et element kan ikke være overordnet for sig selv! - + obsolete obsolete @@ -6592,7 +6518,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Et underordnet element kan ikke være det overordnede element! - + obsolete obsolete @@ -6602,7 +6528,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Lagerpladsen er fuld, så nye dele kan ikke tilføjes. - + obsolete obsolete @@ -6612,7 +6538,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Opbevaringsstedet er markeret som "kun eksisterende dele", så nye dele kan ikke tilføjes. - + obsolete obsolete @@ -6622,7 +6548,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Lagerlokationen er markeret som "Kun én komponent", så en ny komponent kan ikke tilføjes. - + obsolete obsolete @@ -6632,7 +6558,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Komponenten er i øjeblikket under produktion og vil bliver produceret inden for en overskuelig fremtid. - + obsolete obsolete @@ -6642,7 +6568,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Komponenten er blevet annonceret, men er endnu ikke tilgængelig. - + obsolete obsolete @@ -6652,7 +6578,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Komponenten produceres ikke længere. - + obsolete obsolete @@ -6662,7 +6588,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Produktion af ​​komponenten vil snart ophøre. - + obsolete obsolete @@ -6672,7 +6598,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Komponenten fremstilles stadig. Dog anbefales den ikke anvendt længere til nye designs. - + obsolete obsolete @@ -6682,7 +6608,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Produktionsstatus er ukendt. - + obsolete obsolete @@ -6692,7 +6618,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Succes - + obsolete obsolete @@ -6702,7 +6628,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Fejl - + obsolete obsolete @@ -6712,7 +6638,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Advarsel - + obsolete obsolete @@ -6722,7 +6648,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Varsel - + obsolete obsolete @@ -6732,7 +6658,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Info - + obsolete obsolete @@ -6742,7 +6668,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Du kan ikke fjerne din egen tilladelse til at redigere tilladelser. Dette sikrer dig imod ved et uheld at låse dig ude! - + obsolete obsolete @@ -6752,7 +6678,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Tilladte filtyper - + obsolete obsolete @@ -6762,7 +6688,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Her kan du angive en kommasepareret liste over filtypenavne eller mime-typer, som en uploadet fil af denne type skal have. For at tillade alle understøttede billedfiler kan image/* benyttes. - + obsolete obsolete @@ -6772,7 +6698,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt f.eks. .txt, application/pdf, image/* - + src\Form\PartType.php:63 obsolete @@ -6783,7 +6709,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt f.eks. BC547 - + obsolete obsolete @@ -6793,7 +6719,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Kan ikke vælges - + obsolete obsolete @@ -6803,7 +6729,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Hvis denne mulighed er aktiveret, kan dette element ikke tildeles som en egenskab til nogen komponent. Nyttigt, for eksempel hvis dette element kun er beregnet til rene sorteringsformål. - + obsolete obsolete @@ -6813,7 +6739,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt BBCode kan bruges her (f.eks. [b]Fed[/b]) - + obsolete obsolete @@ -6823,7 +6749,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Opret element - + obsolete obsolete @@ -6833,7 +6759,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Gem - + obsolete obsolete @@ -6843,7 +6769,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Deaktiver Footprints - + obsolete obsolete @@ -6853,7 +6779,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Når denne indstilling er aktiveret, er egenskaben footprint deaktiveret for alle komponenter i denne kategori. - + obsolete obsolete @@ -6863,7 +6789,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Deaktiver fabrikant - + obsolete obsolete @@ -6873,7 +6799,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Når denne indstilling er aktiveret, er fakbrikantegenskaben deaktiveret for alle komponenter i denne kategori. - + obsolete obsolete @@ -6883,7 +6809,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Deaktiver automatiske databladlinks - + obsolete obsolete @@ -6893,7 +6819,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Hvis denne mulighed er aktiveret, vil der ikke blive genereret automatiske databladlinks for komponenter med denne kategori. - + obsolete obsolete @@ -6903,7 +6829,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Deaktiver egenskaber - + obsolete obsolete @@ -6913,7 +6839,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Hvis denne indstilling er aktiveret, deaktiveres komponentegenskaberne for alle komponenter i denne kategori. - + obsolete obsolete @@ -6923,7 +6849,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Ledetråd for navn - + obsolete obsolete @@ -6933,7 +6859,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt f.eks. 100nF - + obsolete obsolete @@ -6943,13 +6869,13 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Navnefilter - + category.edit.part_ipn_prefix - IPN-komponentförstavelse + Part IPN Præfiks - + obsolete obsolete @@ -6959,7 +6885,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Standardbeskrivelse - + obsolete obsolete @@ -6969,7 +6895,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt f.eks. kondensator, 10 mm x 10 mm, SMD - + obsolete obsolete @@ -6979,7 +6905,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Standardkommentar - + obsolete obsolete @@ -6989,7 +6915,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Adresse - + obsolete obsolete @@ -7000,7 +6926,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt 3140 Eksempelby - + obsolete obsolete @@ -7010,7 +6936,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Telefonnummer - + obsolete obsolete @@ -7020,7 +6946,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt f. eks. +45 1234 4321 - + obsolete obsolete @@ -7030,7 +6956,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Faxnummer - + obsolete obsolete @@ -7040,7 +6966,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt e-mail - + obsolete obsolete @@ -7050,7 +6976,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt f.eks. kontakt@foo.bar - + obsolete obsolete @@ -7060,7 +6986,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Webside - + obsolete obsolete @@ -7070,7 +6996,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt https://www.foo.bar - + obsolete obsolete @@ -7080,17 +7006,17 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Produkt URL - + obsolete obsolete company.edit.auto_product_url.help - Dette felt benyttes til at knytte linke til en fabrikants komponentside Der vil %PARTNUMBER% så blive erstattet med ordrenummeret. + Dette felt benyttes til at knytte link til en fabrikants komponentside Der vil %PARTNUMBER% så blive erstattet med ordrenummeret. - + obsolete obsolete @@ -7100,7 +7026,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt https://foo.bar/product/%PARTNUMBER% - + obsolete obsolete @@ -7110,7 +7036,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt ISO-kode - + obsolete obsolete @@ -7120,7 +7046,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Valutakurs - + obsolete obsolete @@ -7130,7 +7056,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt 3D-model - + obsolete obsolete @@ -7140,7 +7066,7 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt Input - + obsolete obsolete @@ -7155,7 +7081,7 @@ Element 2 Element 3 - + obsolete obsolete @@ -7165,7 +7091,7 @@ Element 3 Opret - + obsolete obsolete @@ -7175,7 +7101,7 @@ Element 3 er heltal - + obsolete obsolete @@ -7185,7 +7111,7 @@ Element 3 Når denne option er aktiveret, vil alle mængder i denne enhed blive afrundet til hele tal. - + obsolete obsolete @@ -7195,7 +7121,7 @@ Element 3 Benyt SI prefix - + obsolete obsolete @@ -7205,7 +7131,7 @@ Element 3 Når denne option er aktiveret, bruges SI-præfikser, når tallene udlæses (f.eks. 1,2 kg i stedet for 1200 g) - + obsolete obsolete @@ -7215,7 +7141,7 @@ Element 3 Enhedssymbol - + obsolete obsolete @@ -7225,7 +7151,7 @@ Element 3 f.eks. m - + obsolete obsolete @@ -7235,7 +7161,7 @@ Element 3 Lagerlokation er fyldt op - + obsolete obsolete @@ -7245,7 +7171,7 @@ Element 3 Når denne option er aktiveret, er det hverken muligt at tilføje nye komponenter til denne lagerplads eller at øge antallet af eksisterende komponenter. - + obsolete obsolete @@ -7255,7 +7181,7 @@ Element 3 Kun eksisterende komponenter - + obsolete obsolete @@ -7265,7 +7191,7 @@ Element 3 Når denne option er aktiveret, er det ikke muligt at tilføje nye komponenter til denne lagerplads, men det er muligt at øge antallet af eksisterende komponenter. - + obsolete obsolete @@ -7275,7 +7201,7 @@ Element 3 Kun en komponent - + obsolete obsolete @@ -7285,7 +7211,7 @@ Element 3 Hvis denne option er aktiveret, kan denne lagerplads kun indeholde en enkelt komponent, men i en hvilken som helst mængde. Nyttigt til små SMD-rum eller fødere. - + obsolete obsolete @@ -7295,7 +7221,7 @@ Element 3 Lagertype - + obsolete obsolete @@ -7305,7 +7231,7 @@ Element 3 Her kan du vælge en måleenhed, som en komponent skal have, så den kan opbevares på denne lagerplads. - + obsolete obsolete @@ -7315,7 +7241,7 @@ Element 3 Standardvaluta - + obsolete obsolete @@ -7325,7 +7251,7 @@ Element 3 Forsendelsesomkostninger - + obsolete obsolete @@ -7335,7 +7261,7 @@ Element 3 f.eks. j.doe - + obsolete obsolete @@ -7345,7 +7271,7 @@ Element 3 f.eks. John - + obsolete obsolete @@ -7355,7 +7281,7 @@ Element 3 f.eks. Doe - + obsolete obsolete @@ -7365,7 +7291,7 @@ Element 3 j.doe@ecorp.com - + obsolete obsolete @@ -7375,7 +7301,7 @@ Element 3 f.eks. Udvikling - + obsolete obsolete @@ -7385,17 +7311,17 @@ Element 3 Nyt pasword - + obsolete obsolete user.settings.pw_confirm.label - bekræft nyt password + Bekræft nyt password - + obsolete obsolete @@ -7405,7 +7331,7 @@ Element 3 Bruger skal ændre password - + obsolete obsolete @@ -7415,7 +7341,7 @@ Element 3 Bruger deaktiveret (login ikke muligt) - + obsolete obsolete @@ -7425,7 +7351,7 @@ Element 3 Opret bruger - + obsolete obsolete @@ -7435,7 +7361,7 @@ Element 3 Gem - + obsolete obsolete @@ -7445,7 +7371,7 @@ Element 3 Fortryd ændringer - + templates\Parts\show_part_info.html.twig:194 obsolete @@ -7456,7 +7382,7 @@ Element 3 Tilføj - + src\Form\PartType.php:83 obsolete @@ -7467,7 +7393,7 @@ Element 3 Producentlink - + obsolete obsolete @@ -7477,7 +7403,7 @@ Element 3 Komponenter - + obsolete obsolete @@ -7487,7 +7413,7 @@ Element 3 Datastrukturer - + obsolete obsolete @@ -7497,17 +7423,7 @@ Element 3 System - - - obsolete - obsolete - - - perm.parts - Generelt - - - + obsolete obsolete @@ -7517,7 +7433,7 @@ Element 3 Vis - + obsolete obsolete @@ -7527,7 +7443,7 @@ Element 3 Ret - + obsolete obsolete @@ -7537,7 +7453,7 @@ Element 3 Opret - + obsolete obsolete @@ -7547,7 +7463,7 @@ Element 3 Skift kategori - + obsolete obsolete @@ -7557,7 +7473,7 @@ Element 3 Slet - + obsolete obsolete @@ -7567,7 +7483,7 @@ Element 3 Søg - + obsolete obsolete @@ -7577,7 +7493,7 @@ Element 3 Liste over alle komponenter - + obsolete obsolete @@ -7587,7 +7503,7 @@ Element 3 Komponenter uden prisinformation - + obsolete obsolete @@ -7597,7 +7513,7 @@ Element 3 Vis udgåede komponenter - + obsolete obsolete @@ -7607,7 +7523,7 @@ Element 3 Vis komponenter med ukendt lagerstatus - + obsolete obsolete @@ -7617,7 +7533,7 @@ Element 3 Ret favoritstatus - + obsolete obsolete @@ -7627,7 +7543,7 @@ Element 3 Vis favoritkomponenter - + obsolete obsolete @@ -7637,7 +7553,7 @@ Element 3 Vis nyligt redigerede/tilføjede komponenter - + obsolete obsolete @@ -7647,7 +7563,7 @@ Element 3 Vis den sidste bruger, der redigerede - + obsolete obsolete @@ -7657,7 +7573,7 @@ Element 3 Se historik - + obsolete obsolete @@ -7667,7 +7583,7 @@ Element 3 Navn - + obsolete obsolete @@ -7677,7 +7593,7 @@ Element 3 Beskrivelse - + obsolete obsolete @@ -7687,7 +7603,7 @@ Element 3 På lager - + obsolete obsolete @@ -7697,7 +7613,7 @@ Element 3 mindste lager - + obsolete obsolete @@ -7707,7 +7623,7 @@ Element 3 Noter - + obsolete obsolete @@ -7717,7 +7633,7 @@ Element 3 Lagerlokation - + obsolete obsolete @@ -7727,7 +7643,7 @@ Element 3 Fabrikant - + obsolete obsolete @@ -7737,7 +7653,7 @@ Element 3 Ordreinformation - + obsolete obsolete @@ -7747,7 +7663,7 @@ Element 3 Pris - + obsolete obsolete @@ -7757,7 +7673,7 @@ Element 3 Bilag - + obsolete obsolete @@ -7767,17 +7683,7 @@ Element 3 Ordrer - - - obsolete - obsolete - - - perm.storelocations - Lagerlokationer - - - + obsolete obsolete @@ -7787,7 +7693,7 @@ Element 3 Flyt - + obsolete obsolete @@ -7797,67 +7703,7 @@ Element 3 Vis komponentliste - - - obsolete - obsolete - - - perm.part.footprints - Footprints - - - - - obsolete - obsolete - - - perm.part.categories - Kategorier - - - - - obsolete - obsolete - - - perm.part.supplier - Leverandører - - - - - obsolete - obsolete - - - perm.part.manufacturers - Fabrikant - - - - - obsolete - obsolete - - - perm.projects - Projekter - - - - - obsolete - obsolete - - - perm.part.attachment_types - bilagstype - - - + obsolete obsolete @@ -7867,7 +7713,7 @@ Element 3 Import - + obsolete obsolete @@ -7877,7 +7723,7 @@ Element 3 Labels - + obsolete obsolete @@ -7887,7 +7733,7 @@ Element 3 Modstandsberegner - + obsolete obsolete @@ -7897,7 +7743,7 @@ Element 3 Footprints - + obsolete obsolete @@ -7907,7 +7753,7 @@ Element 3 IC logoer - + obsolete obsolete @@ -7917,7 +7763,7 @@ Element 3 Statistik - + obsolete obsolete @@ -7927,7 +7773,7 @@ Element 3 Ret tilladelser - + obsolete obsolete @@ -7937,7 +7783,7 @@ Element 3 Ret brugernavn - + obsolete obsolete @@ -7947,7 +7793,7 @@ Element 3 Skift gruppe - + obsolete obsolete @@ -7957,7 +7803,7 @@ Element 3 Ret information - + obsolete obsolete @@ -7967,7 +7813,7 @@ Element 3 Ret tilladelser - + obsolete obsolete @@ -7977,7 +7823,7 @@ Element 3 Skift password - + obsolete obsolete @@ -7987,7 +7833,7 @@ Element 3 Ret brugerindstillinger - + obsolete obsolete @@ -7997,7 +7843,7 @@ Element 3 Vis status - + obsolete obsolete @@ -8007,7 +7853,7 @@ Element 3 Opdater database - + obsolete obsolete @@ -8017,7 +7863,7 @@ Element 3 Vis indstillinger - + obsolete obsolete @@ -8027,7 +7873,7 @@ Element 3 Ret indstillinger - + obsolete obsolete @@ -8037,7 +7883,7 @@ Element 3 Vis konfiguration - + obsolete obsolete @@ -8047,7 +7893,7 @@ Element 3 Ret konfiguration - + obsolete obsolete @@ -8057,7 +7903,7 @@ Element 3 Server info - + obsolete obsolete @@ -8067,7 +7913,7 @@ Element 3 Brug fejlfindingsværktøjer - + obsolete obsolete @@ -8077,7 +7923,7 @@ Element 3 Vis logs - + obsolete obsolete @@ -8087,7 +7933,7 @@ Element 3 Slet log - + obsolete obsolete @@ -8097,7 +7943,7 @@ Element 3 Ret info - + obsolete obsolete @@ -8107,7 +7953,7 @@ Element 3 Ret brugernavn - + obsolete obsolete @@ -8117,7 +7963,7 @@ Element 3 Vis tilladelser - + obsolete obsolete @@ -8127,7 +7973,7 @@ Element 3 Se log - + obsolete obsolete @@ -8137,7 +7983,7 @@ Element 3 Opret labels - + obsolete obsolete @@ -8147,7 +7993,7 @@ Element 3 Ret indstillinger - + obsolete obsolete @@ -8157,7 +8003,7 @@ Element 3 Slet profiler - + obsolete obsolete @@ -8167,7 +8013,7 @@ Element 3 Ret profiler - + obsolete obsolete @@ -8177,7 +8023,7 @@ Element 3 Værktøjer - + obsolete obsolete @@ -8187,7 +8033,7 @@ Element 3 Grupper - + obsolete obsolete @@ -8197,7 +8043,7 @@ Element 3 Brugere - + obsolete obsolete @@ -8207,7 +8053,7 @@ Element 3 Database - + obsolete obsolete @@ -8217,7 +8063,7 @@ Element 3 Instilinger - + obsolete obsolete @@ -8227,7 +8073,7 @@ Element 3 System - + obsolete obsolete @@ -8237,7 +8083,7 @@ Element 3 Ret din egen bruger - + obsolete obsolete @@ -8247,7 +8093,7 @@ Element 3 Labels - + obsolete obsolete @@ -8257,7 +8103,7 @@ Element 3 Kategori - + obsolete obsolete @@ -8267,7 +8113,7 @@ Element 3 Mindstebeholdning - + obsolete obsolete @@ -8277,7 +8123,7 @@ Element 3 Footprint - + obsolete obsolete @@ -8287,7 +8133,7 @@ Element 3 MPN - + obsolete obsolete @@ -8297,7 +8143,7 @@ Element 3 Fremstillingsstatus - + obsolete obsolete @@ -8307,7 +8153,7 @@ Element 3 Tags - + obsolete obsolete @@ -8317,7 +8163,7 @@ Element 3 Måleenhed - + obsolete obsolete @@ -8327,7 +8173,7 @@ Element 3 Vægt - + obsolete obsolete @@ -8337,7 +8183,7 @@ Element 3 Lagerlokationer - + obsolete obsolete @@ -8347,7 +8193,7 @@ Element 3 Vis den sidste bruger, der redigerede - + obsolete obsolete @@ -8357,7 +8203,7 @@ Element 3 Valuta - + obsolete obsolete @@ -8367,13 +8213,7 @@ Element 3 Måleenhed - - - perm.part_custom_states - Brugerdefineret komponentstatus - - - + obsolete obsolete @@ -8383,7 +8223,7 @@ Element 3 Gammelt password - + obsolete obsolete @@ -8393,7 +8233,7 @@ Element 3 Nulstil password - + obsolete obsolete @@ -8403,7 +8243,7 @@ Element 3 Sikkerhedsnøgle (U2F) - + obsolete obsolete @@ -8413,13 +8253,13 @@ Element 3 Google - + tfa.provider.webauthn_two_factor_provider Sikkerhedsnøgle - + obsolete obsolete @@ -8429,17 +8269,7 @@ Element 3 Godkendelses-app - - - obsolete - obsolete - - - Login successful - Logget ind med succes - - - + obsolete obsolete @@ -8449,7 +8279,7 @@ Element 3 Ubehandlet undtagelse (udfaset) - + obsolete obsolete @@ -8459,7 +8289,7 @@ Element 3 Bruger logget ind - + obsolete obsolete @@ -8469,7 +8299,7 @@ Element 3 Bruger logget ud - + obsolete obsolete @@ -8479,7 +8309,7 @@ Element 3 Ukendt - + obsolete obsolete @@ -8489,7 +8319,7 @@ Element 3 Element oprettet - + obsolete obsolete @@ -8499,7 +8329,7 @@ Element 3 Element rettet - + obsolete obsolete @@ -8509,7 +8339,7 @@ Element 3 Element slettet - + obsolete obsolete @@ -8519,7 +8349,7 @@ Element 3 Database er opdateret - + obsolete @@ -8528,7 +8358,7 @@ Element 3 Nulstil element - + obsolete @@ -8537,7 +8367,7 @@ Element 3 Vis historik - + obsolete @@ -8546,7 +8376,7 @@ Element 3 Vis sidste aktivitet - + obsolete @@ -8555,16 +8385,7 @@ Element 3 Vis tidligere versioner (tidsrejser) - - - obsolete - - - Username - Brugernavn - - - + obsolete @@ -8573,7 +8394,7 @@ Element 3 Godkendelses-app deaktiveret - + obsolete @@ -8582,7 +8403,7 @@ Element 3 Sikkerhedsnøgle slettet - + obsolete @@ -8591,7 +8412,7 @@ Element 3 Sikkerhedsnøgle tilføjet - + obsolete @@ -8600,7 +8421,7 @@ Element 3 Backupnøgler regenereret - + obsolete @@ -8609,7 +8430,7 @@ Element 3 Godkendelses-app aktiveret - + obsolete @@ -8618,7 +8439,7 @@ Element 3 Password ændret - + obsolete @@ -8627,7 +8448,7 @@ Element 3 Godkendte enheder nulstillet - + obsolete @@ -8636,7 +8457,7 @@ Element 3 Hovedelement slettet - + obsolete @@ -8645,7 +8466,7 @@ Element 3 Nulstil password - + obsolete @@ -8654,7 +8475,7 @@ Element 3 To-faktor-godkendelse nulstillet af administrator - + obsolete @@ -8663,7 +8484,7 @@ Element 3 Forsøg på uautoriseret adgang - + obsolete @@ -8672,7 +8493,7 @@ Element 3 Succes - + obsolete @@ -8681,7 +8502,7 @@ Element 3 2D - + obsolete @@ -8690,7 +8511,7 @@ Element 3 1D - + obsolete @@ -8699,7 +8520,7 @@ Element 3 Parametre - + obsolete @@ -8708,7 +8529,7 @@ Element 3 Vis private bilag - + obsolete @@ -8717,7 +8538,7 @@ Element 3 Labelscannner - + obsolete @@ -8726,7 +8547,7 @@ Element 3 Vis profiler - + obsolete @@ -8735,7 +8556,7 @@ Element 3 Opret profil - + obsolete @@ -8744,2155 +8565,2233 @@ Element 3 Brug Twig tilstand - + label_profile.showInDropdown Vis hurtigvalg i barcode - + group.edit.enforce_2fa Forlang to-faktor-godkendelse (2FA) - + group.edit.enforce_2fa.help Hvis denne option er valgt, skal hvert direkte medlem af denne gruppe konfigurere mindst en anden faktor til godkendelse. Anbefales f.eks. til administrative grupper med omfattende autorisationer. - + selectpicker.nothing_selected Ingenting valgt - + entity.delete.must_not_contain_parts Elementet "%PATH%" indeholder stadig komponenter. Rediger komponenterne for at kunne slette dette element. - + entity.delete.must_not_contain_attachments Filtypen indeholder stadig komponenter. Skift deres filtype for at kunne slette denne filtype. - + entity.delete.must_not_contain_prices Valuta indeholder stadig komponenter. Skift deres valuta for at kunne slette denne valuta. - + entity.delete.must_not_contain_users Der er stadigvæk brugere i denne gruppe. Vælg en anden gruppe for disse brugere for at kunne slette denne gruppe. - + part.table.edit Ret - + part.table.edit.title Ret komponent - + + + part_list.action.scrollable_hint + Scroll for at se alle handlinger + + + part_list.action.action.title Vælg handling - + part_list.action.action.group.favorite Favorit - + part_list.action.action.favorite Gør denne til favorit - + part_list.action.action.unfavorite Fjern favorit - + part_list.action.action.group.change_field Ret felt - + part_list.action.action.change_category Skift kategori - + part_list.action.action.change_footprint Ret footprint - + part_list.action.action.change_manufacturer Ret fabrikant - + part_list.action.action.change_unit Ret måleenhed - + part_list.action.action.delete Slet - + part_list.action.submit Ok - + part_list.action.part_count %count% komponenter valgt - + company.edit.quick.website Åbn webside - + company.edit.quick.email send e-mail - + company.edit.quick.phone Ring op - + company.edit.quick.fax Send fax - + company.fax_number.placeholder f.eks. +45 1234 5678 - + part.edit.save_and_clone Gem og dupliker - + validator.file_ext_not_allowed Filtypenavnet er ikke tilladt for denne bilagstype. - + tools.reel_calc.title SMD-rulle beregner - + tools.reel_calc.inner_dia Indre diameter - + tools.reel_calc.outer_dia Ydre diameter - + tools.reel_calc.tape_thick Tape tykkelse - + tools.reel_calc.part_distance Komponentafstand - + tools.reel_calc.update Opdater - + tools.reel_calc.parts_per_meter Komponenter per meter - + tools.reel_calc.result_length Tapelængde - + tools.reel_calc.result_amount Omtrentligt antal komponenter - + tools.reel_calc.outer_greater_inner_error Fejl: Den ydre diameter skal være større end den indvendige diameter! - + tools.reel_calc.missing_values.error Angiv venligst alle værdier! - + tools.reel_calc.load_preset Indlæs preset - + tools.reel_calc.explanation Denne kalkulator giver dig mulighed for at estimere hvor mange komponenter der er tilbage på en SMD-rulle. Mål de angivne dimensioner på rullen (eller brug specifikationerne) og tryk på "Opdater". - + perm.tools.reel_calculator SMD-rulle kalkulator - + tree.tools.tools.reel_calculator SMD-rullle kalkulator - + user.pw_change_needed.flash Ændring af password påkrævet! Venligst vælg et nyt password. - + part_list.action.select_null Ingen elementer tilstede! - + part_list.action.delete-title Vil du virkelig slette disse komponenter? - + part_list.action.delete-message Disse komponenter og alle tilknyttede oplysninger (bilag, vedhæftede filer, prisoplysninger osv.) slettes. Dette kan ikke fortrydes! - + part.table.actions.success Handling lykkedes med succes. - + attachment.edit.delete.confirm Er du sikker på, at du vil slette dette bilag? - + filter.text_constraint.value.operator.EQ Lig med - + filter.text_constraint.value.operator.NEQ Forskellig fra - + filter.text_constraint.value.operator.STARTS Begynder med - + filter.text_constraint.value.operator.CONTAINS Indeholder - + filter.text_constraint.value.operator.ENDS Slutter med - + filter.text_constraint.value.operator.LIKE LIKE udtryk - + filter.text_constraint.value.operator.REGEX Almindelig udtryk - + filter.number_constraint.value.operator.BETWEEN Mellem - + filter.number_constraint.AND og - + filter.entity_constraint.operator.EQ Lig med (uden underelementer) - + filter.entity_constraint.operator.NEQ Forskellig fra (uden underelementer) - + filter.entity_constraint.operator.INCLUDING_CHILDREN Lig med (inklusiv underelementer) - + filter.entity_constraint.operator.EXCLUDING_CHILDREN Forskellig fra (inklusiv underelementer) - + part.filter.dbId Database ID - + filter.tags_constraint.operator.ANY Alle tags - + filter.tags_constraint.operator.ALL Alle tags - + filter.tags_constraint.operator.NONE Ingen tags - + part.filter.lot_count Antal partier - + part.filter.attachments_count Antal bilag - + part.filter.orderdetails_count Antal bestillingsinformationer - + part.filter.lotExpirationDate Udløbsdato for komponentbeholdning - + part.filter.lotNeedsRefill Lagerbeholdning skal genopfyldes - + part.filter.lotUnknwonAmount Lagerbestand med ukendt antal - + part.filter.attachmentName Bilagsnavn - + + + filter.bulk_import_job.label + Bulk Import + + + + + filter.bulk_import_job.job_status + Job Status + + + + + filter.bulk_import_job.part_status_in_job + Partstatus + + + + + filter.bulk_import_job.status.pending + Venter + + + + + filter.bulk_import_job.status.in_progress + I gang + + + + + filter.bulk_import_job.status.completed + Færdig + + + + + filter.bulk_import_job.status.stopped + Stoppet + + + + + filter.bulk_import_job.status.failed + Fejlet + + + + + filter.bulk_import_job.part_status.pending + filter.bulk_import_job.part_status.pending + + + + + filter.bulk_import_job.part_status.completed + filter.bulk_import_job.part_status.afsluttet + + + + + filter.bulk_import_job.part_status.skipped + filter.bulk_import_job.part_status.annulleret + + + filter.choice_constraint.operator.ANY En af de udvalgte - + filter.choice_constraint.operator.NONE Ingen af de udvalgte - + part.filter.amount_sum Samlet mængde - + filter.submit Updatér - + filter.discard Fortryd ændringer - + filter.clear_filters Slet alle filtre - + filter.title Filter - + filter.parameter_value_constraint.operator.= Typ. Værdi = - + filter.parameter_value_constraint.operator.!= Typ. Værdi != - + filter.parameter_value_constraint.operator.< Typ. værdi < - + filter.parameter_value_constraint.operator.> Typ. værdi > - + filter.parameter_value_constraint.operator.<= Typ. værdi <= - + filter.parameter_value_constraint.operator.>= Typ. værdi >= - + filter.parameter_value_constraint.operator.BETWEEN Typ. værdi imellem - + filter.parameter_value_constraint.operator.IN_RANGE I værdiområdet - + filter.parameter_value_constraint.operator.NOT_IN_RANGE Ikke i værdiområdet - + filter.parameter_value_constraint.operator.GREATER_THAN_RANGE Større end værdiområdet - + filter.parameter_value_constraint.operator.GREATER_EQUAL_RANGE Større end eller lig med værdiområdet - + filter.parameter_value_constraint.operator.LESS_THAN_RANGE Mindre end værdiområdet - + filter.parameter_value_constraint.operator.LESS_EQUAL_RANGE Mindre end lig med værdiområdet - + filter.parameter_value_constraint.operator.RANGE_IN_RANGE helt indenfor værdiområdet - + filter.parameter_value_constraint.operator.RANGE_INTERSECT_RANGE Skærer værdiområdet - + filter.text_constraint.value Ingen værdi angivet - + filter.number_constraint.value1 Ingen værdi angivet - + filter.number_constraint.value2 Maksimalværdi - + filter.datetime_constraint.value1 Ingen dato/tid indstillet - + filter.datetime_constraint.value2 Maksimal dato/tid - + filter.constraint.add Tilføj filter - + part.filter.parameters_count Antal parametre - + part.filter.lotDescription Beskrivelse af komponentbeholdning - + parts_list.search.searching_for Søg i dele med søgeordet <b>%søgeord%</b> - + parts_list.search_options.caption Aktiverede søgemuligheder - + attachment.table.element_type Aktiverede søgemuligheder - + log.level.debug Debug - + log.level.info Info - + log.level.notice Meddelele - + log.level.warning Advarsel - + log.level.error Fejl - + log.level.critical Kritisk - + log.level.alert Alarm - + log.level.emergency Nødsituation - + log.type.security Sikkerhedsbegivenhed - + log.type.instock_changed [ALT] Beholdning ændret - + log.target_id ID for målelementet - + entity.info.parts_count_recursive Komponenter med dette element eller dets underelementer - + tools.server_infos.title Serverinfo - + permission.preset.read_only Read-only - + permission.preset.read_only.desc Tillad kun read-only for data - + permission.preset.all_inherit Alle nedarvede - + permission.preset.all_inherit.desc Indstil alle tilladelser til at kunne arve - + permission.preset.all_forbid Forbyd alle - + permission.preset.all_forbid.desc Indstil alle tilladelser til Ikke tilladt - + permission.preset.all_allow Tillad alle - + permission.preset.all_allow.desc Indstill alle tilladelser til Tilladt - + perm.server_infos Serverinfo - + permission.preset.editor Redaktør - + permission.preset.editor.desc Tillad at komponenter og datastrukturer kan redigeres - + permission.preset.admin Admin - + permission.preset.admin.desc Tillad administrative handlinger - + permission.preset.button Anvend skabelon - + perm.attachments.show_private Vis private bilag - + perm.attachments.list_attachments Se liste over alle bilag - + user.edit.permission_success Tilladelsesskabelon blev anvendt. Tjek, at de nye tilladelser lever op til dine forventninger. - + perm.group.data Data - + part_list.action.action.group.needs_review Gennemsyn nødvendigt - + part_list.action.action.set_needs_review Sæt status til Gennemgang nødvændig - + part_list.action.action.unset_needs_review Fjern Gennemganng nødvendig status - + part.edit.ipn Internt Partnummer (IPN) - + part.ipn.not_defined Ikke defineret - + part.table.ipn IPN - + currency.edit.update_rate Hent valutakurs - + currency.edit.exchange_rate_update.unsupported_currency Valutaen understøttes ikke af valutakursudbyderen. Tjek venligst konfigurationen af ​​valutakursudbyderne. - + currency.edit.exchange_rate_update.generic_error Valutakursen kan kke hentes. Tjek venligst konfigurationen af ​​valutakursudbyderne. - + currency.edit.exchange_rate_updated.success Valutakurs hentet med succes - + project.bom.quantity BOM mængde - + project.bom.mountnames Bestykningsnavn - + project.bom.name Navn - + project.bom.comment Noter - + project.bom.part Komponent - + project.bom.add_entry Tilføj post - + part_list.action.group.projects Projekter - + part_list.action.projects.add_to_project Tilføj komponent til projekt - + project.bom.delete.confirm Vil du virkeligt slette denne stykliste (BOM)? - + project.add_parts_to_project Tilføj komponenter til stykliste (BOM) - + part.info.add_part_to_project Føj denne komponent til et projekt - + project_bom_entry.label Registrering af BOM - + project.edit.status Projektstatus - + project.status.draft Kladde - + project.status.planning Under planlægning - + project.status.in_production I produktion - + project.status.finished Ophørt - + project.status.archived Arkiveret - + part.new_build_part.error.build_part_already_exists Dette projekt har allerede en linket komponent - + project.edit.associated_build_part - Tilhørende bygge komponent + Tilhørende build komponent - + project.edit.associated_build_part.add Tilføj bygge komponent - + project.edit.associated_build.hint Denne komponent repræsenterer de færdigbyggede forekomster af projektet, der er gemt et sted - + part.info.projectBuildPart.hint Denne komponent repræsenterer de byggede forekomster af det følgende projekt og er knyttet til det - + part.is_build_part Er produktkomponent - + project.info.title Projektinfo - + project.info.bom_entries_count Styklisteposter - + project.info.sub_projects_count Underprojekt - + project.info.bom_add_parts Tilføj nye styklisteposter - + project.info.info.label Info - + project.info.sub_projects.label Underprojekter - + project.bom.price Pris - + part.info.withdraw_modal.title.withdraw Fjern komponenter fra lot - + part.info.withdraw_modal.title.add Tilføj komponenter til lot - + part.info.withdraw_modal.title.move Flyt komponenter til et andet lot - + part.info.withdraw_modal.amount Mængde - + part.info.withdraw_modal.move_to Flyt til - + part.info.withdraw_modal.comment Kommentar - + part.info.withdraw_modal.comment.hint Du kan indtaste en kommentar her, der beskriver, hvorfor denne handling blev udført (f.eks. hvorfor denne komponent var nødvendig). Disse oplysninger gemmes i loggen. - + modal.close Luk - + modal.submit Indsend - + part.withdraw.success Komponenter blev fjernet/tilføjet/flyttet. - + perm.parts_stock Komponentbeholdning - + perm.parts_stock.withdraw Fjern komponenter fra lageret - + perm.parts_stock.add Tilføj komponenter til lager - + perm.parts_stock.move Flyt komponenter mellem lagerbeholdninger - + user.permissions_schema_updated Din brugerkontos tilladelsesliste er blevet opdateret til den seneste version. - + log.type.part_stock_changed Komponentbeholdning ændret - + log.part_stock_changed.withdraw Komponenter fjernet - + log.part_stock_changed.add Komponenter tilføjet til lager - + log.part_stock_changed.move Komponenter flyttet - + log.part_stock_changed.comment Kommentar - + log.part_stock_changed.change Ændring - + log.part_stock_changed.move_target Flyttet til - + tools.builtin_footprints_viewer.title Indbyggede Footprint billeder - + tools.builtin_footprints_viewer.hint Dette galleri viser alle de inkluderede footprint-billeder. Hvis du vil bruge det i et bilag, skal du skrive navnet (eller et nøgleord) i bilagets URL-felt og vælge det ønskede billede fra rullemenuen. - + tools.ic_logos.title IC logoer - + part_list.action.group.labels Labels - + part_list.action.projects.generate_label Opret labels (til komponenter) - + part_list.action.projects.generate_label_lot Opret labels (til komponentbeholdning) - + part_list.action.generate_label.empty Tom label - + project.info.builds.label Byg - + project.builds.build_not_possible Byg ikke mulig: Der er ikke nok komponenter tilsted for dette byg - + project.builds.following_bom_entries_miss_instock Følgende komponenter har ikke nok lagerbeholdning til at bygge dette projekt mindst én gang: - + project.builds.stocked På lager - + project.builds.needed Nødvendig - + project.builds.build_possible Der kan laves et byg - + project.builds.number_of_builds_possible Du har nok komponenter på lager til at bygge <b>%max_builds%</b> kopier af dette projekt. - + project.builds.check_project_status Den aktuelle projektstatus er <b>"%project_status%"</b>. Du bør tjekke, om du virkelig vil bygge projektet med denne status! - + project.builds.following_bom_entries_miss_instock_n Der er ikke nok komponenter på lager til at bygge dette projekt %number_of_builds% gange. Der er ikke nok af følgende komponenter på lager. - + project.build.flash.invalid_input Projektet kan ikke bygges. Tjek venligst dine input - + project.build.required_qty Nødvendigt antal - + project.build.btn_build Byg - + project.build.help Vælg fra hvilke lagre de komponenter, der kræves til bygget skal tages (og i hvilken mængde). Marker afkrydsningsfeltet for hver styklistepost, når du har fjernet komponenterne, eller brug det øverste afkrydsningsfelt til at markere alle felterne på én gang. - + project.build.buildsPartLot.new_lot Opret ny beholdning - + project.build.add_builds_to_builds_part Tilføj byg til projekt-byg-dele - + project.build.builds_part_lot Mål mængde - + project.builds.number_of_builds Byg antal - + project.builds.no_stocked_builds Antal gemte byg-instanser - + user.change_avatar.label Ændr profilbillede - + user_settings.change_avatar.label Ændre profilbillede - + user_settings.remove_avatar.label Fjern profilbillede - + part.edit.name.category_hint tip fra kategori - + category.edit.partname_regex.placeholder f.eks. "/Kondensator \d+ nF/i" - + category.edit.part_ipn_prefix.placeholder - f.eks. "B12A" + category.edit.part_ipn_prefix.placeholder - + category.edit.partname_regex.help Et PCRE-kompatibelt regulært udtryk, som delnavnet skal opfylde. - + category.edit.part_ipn_prefix.help - Et prefix foreslået, når IPN for en del indtastes. + category.edit.part_ipn_prefix.hjælp - + entity.select.add_hint Brug -> for at oprette under-strukturer, f.eks. "Element 1->Element 1.1" - + entity.select.group.new_not_added_to_DB Ny (endnu ikke tilføjet til database) - + part.edit.save_and_new Gem og opret en ny tom komponent - + homepage.first_steps.title Første skridt - + homepage.first_steps.introduction Databasen er i øjeblikket tom. Du vil måske læse <a href="%url%">dokumentationen</a> eller begynde at oprette følgende datastrukturer. - + homepage.first_steps.create_part Eller du kan direkte oprette en <a href="%url%">ny komponent</a>. - + homepage.first_steps.hide_hint Denne meddelelse vil blive skjult, når du har oprettet den første komponent. - + homepage.forum.text For spørgsmål om Part-DB, brug <a class="link-external" rel="noopener" target="_blank" href="%href%">diskussionsforummet</a> - + log.element_edited.changed_fields.category Kategori - + log.element_edited.changed_fields.footprint Footprint - + log.element_edited.changed_fields.manufacturer Fabrikant - + log.element_edited.changed_fields.value_typical typ. værdi - + log.element_edited.changed_fields.pw_reset_expires Nulstil password - + log.element_edited.changed_fields.comment Noter - + log.element_edited.changed_fields.supplierpartnr Leverandør part-nummer - + log.element_edited.changed_fields.supplier_product_url Produkt URL - + log.element_edited.changed_fields.price Pris - + log.element_edited.changed_fields.min_discount_quantity Minimum ordremængde - + log.element_edited.changed_fields.original_filename Originalt bilagsnavn, filnavn - + log.element_edited.changed_fields.path Sti - + log.element_edited.changed_fields.description Beskrivelse - + log.element_edited.changed_fields.manufacturing_status Fabrikantstatus - + log.element_edited.changed_fields.options.barcode_type Barcode type - + log.element_edited.changed_fields.status Status - + log.element_edited.changed_fields.quantity BOM antal - + log.element_edited.changed_fields.mountnames Montagenavne - + log.element_edited.changed_fields.name Navn - + log.element_edited.changed_fields.part Komponent - + log.element_edited.changed_fields.price_currency prisens valuta - + log.element_edited.changed_fields.partname_hint Komponentnavn henvisning - + log.element_edited.changed_fields.partname_regex Navnefilter - + log.element_edited.changed_fields.disable_footprints Deaktiver footprints - + log.element_edited.changed_fields.disable_manufacturers Deaktiver fabrikanter - + log.element_edited.changed_fields.disable_autodatasheets Deaktiver automatiske databladlinks - + log.element_edited.changed_fields.disable_properties Deaktiver egenskaber - + log.element_edited.changed_fields.default_description Standardbeskrivelse - + log.element_edited.changed_fields.default_comment Standardkommentar - + log.element_edited.changed_fields.filetype_filter Tilladte bilagstyper - + log.element_edited.changed_fields.not_selectable Ikke valgt - + log.element_edited.changed_fields.parent Overordnet element - + log.element_edited.changed_fields.shipping_costs Forsendelsespris - + log.element_edited.changed_fields.default_currency Standard valuta - + log.element_edited.changed_fields.address Adresse - + log.element_edited.changed_fields.phone_number Telefonnummer - + log.element_edited.changed_fields.fax_number Fax nummer - + log.element_edited.changed_fields.email_address e-mail - + log.element_edited.changed_fields.website Webside - + log.element_edited.changed_fields.auto_product_url Produkt URL - + log.element_edited.changed_fields.is_full Lagerplads fuld - + log.element_edited.changed_fields.limit_to_existing_parts Kun eksisterende komponenter - + log.element_edited.changed_fields.only_single_part Kun én komponent - + log.element_edited.changed_fields.storage_type Lagertype - + log.element_edited.changed_fields.footprint_3d 3D-model - + log.element_edited.changed_fields.master_picture_attachment Miniaturebillede - + log.element_edited.changed_fields.exchange_rate Veksel kurs - + log.element_edited.changed_fields.iso_code ISO-kode - + log.element_edited.changed_fields.unit Enhedssymbol - + log.element_edited.changed_fields.is_integer Er heltal - + log.element_edited.changed_fields.use_si_prefix Benyt SI-præfiks - + log.element_edited.changed_fields.options.width Bredde - + log.element_edited.changed_fields.options.height Højde - + log.element_edited.changed_fields.options.supported_element Elementtype - + log.element_edited.changed_fields.options.additional_css Yderligere CSS - + log.element_edited.changed_fields.options.lines Indhold - + log.element_edited.changed_fields.permissions.data Tilladelser - + log.element_edited.changed_fields.disabled Deaktiveret - + log.element_edited.changed_fields.theme Tema - + log.element_edited.changed_fields.timezone Tidszone - + log.element_edited.changed_fields.language Sprog - + log.element_edited.changed_fields.email e-mail - + log.element_edited.changed_fields.department Afdeling - + log.element_edited.changed_fields.last_name Fornavn - + log.element_edited.changed_fields.first_name Efternavn - + log.element_edited.changed_fields.group Gruppe - + log.element_edited.changed_fields.currency foretrukken valuta - + log.element_edited.changed_fields.enforce2FA Fremtving 2FA - + log.element_edited.changed_fields.symbol Symbol - + log.element_edited.changed_fields.value_min Minimum værdi - + log.element_edited.changed_fields.value_max Maksimum værdi - + log.element_edited.changed_fields.value_text Tekstværdi - + log.element_edited.changed_fields.show_in_table Vis på tabelform - + log.element_edited.changed_fields.attachment_type Datatype - + log.element_edited.changed_fields.needs_review Behøver gennemgang - + log.element_edited.changed_fields.tags Tags - + log.element_edited.changed_fields.mass Masse - + log.element_edited.changed_fields.ipn IPN - + log.element_edited.changed_fields.favorite Favorit - + log.element_edited.changed_fields.minamount Minimum lagerbeholdning - + log.element_edited.changed_fields.manufacturer_product_url Link til produktside - + log.element_edited.changed_fields.manufacturer_product_number MPN - + log.element_edited.changed_fields.partUnit Måleenhed - + log.element_edited.changed_fields.partCustomState - Brugerdefineret komponentstatus + Brugerdefineret part status - + log.element_edited.changed_fields.expiration_date Udløbsdato - + log.element_edited.changed_fields.amount Mængde - + log.element_edited.changed_fields.storage_location Lagerlokation - + attachment.max_file_size Maksimum bilagsstørrelse - + user.saml_user SSO / SAML Bruger - + user.saml_user.pw_change_hint Du bruger Single Sign-On (SSO) til at logge ind. Du kan derfor ikke konfigurere dit password og to-faktor godkendelse her. Brug i stedet det centrale websted for din SSO-udbyder! - + login.sso_saml_login Single Sign-On Login (SSO) - + login.local_login_hint Nedenstående formular kan kun bruges til at logge ind med en lokal bruger. Ønsker du i stedet at logge ind via single sign-on, skal du bruge knappen ovenfor. - + part_list.action.action.export Eksporter komponenter - + part_list.action.export_json Eksporter som JSON - + part_list.action.export_csv Eksporter som CSV - + part_list.action.export_yaml Esporter som YAML - + part_list.action.export_xml Eksporter som XML - + - parts.import.title - Importer kompenter + part_list.action.export_xlsx + Eksportér til Excel - + + + parts.import.title + Importér komponenter + + + parts.import.errors.title Problemer ved import - + parts.import.flash.error Der opstod fejl under eksport. Dette skyldes sandsynligvis fejlbehæftede data. - + parts.import.format.auto Automatisk (baseret på endelsen på bilagsnavnet) - + parts.import.flash.error.unknown_format Formatet kunne ikke bestemmes automatisk. Vælg venligst det korrekte format manuelt! - + parts.import.flash.error.invalid_file Bilaget er beskadiget/forkert formateret. Tjek, at du har valgt det rigtige format. - + parts.import.part_category.label Gennemtving kategori - + parts.import.part_category.help Hvis du vælger en kategori her, vil alle importerede komponenter blive tildelt denne kategori, uanset hvad der er i importdataene. - + import.create_unknown_datastructures Opret ukendte datastrukturer - + import.create_unknown_datastructures.help Hvis denne mulighed er valgt, oprettes automatisk datastrukturer (f.eks. kategorier, footprints osv.), som endnu ikke findes i databasen. Hvis denne mulighed ikke er valgt, vil kun datastrukturer, der allerede findes i databasen, blive brugt. Og hvis der ikke findes en passende struktur, vil det tilsvarende felt for komponenten stå tomt. - + import.path_delimiter Stibegrænser - + import.path_delimiter.help Afgrænseren bruges til at adskille de forskellige niveauer af datastrukturer (såsom kategorier, footprint osv.) i stispecifikationer. - + parts.import.help_documentation Se <a href="%link%">dokumentationen</a> for mere information om bilagsformatet. - + parts.import.help Med dette værktøj kan du importere komponenter fra eksisterende bilag. Komponenterne gemmes direkte i databasen (uden mulighed for at kontrollere dem igen på forhånd). Tjek venligst din importfil her, før du uploader! - + parts.import.flash.success Komponentimport lykkedes - + parts.import.errors.imported_entities Importerde komponenter - + perm.import Importer data - + parts.import.part_needs_review.label Marker alle komponenter som "Gennnemgang nødvendig" - + parts.import.part_needs_review.help Hvis denne mulighed er valgt, vil alle dele blive markeret som "Kræver gennemgang", uanset hvad der blev angivet i dataene. - + project.bom_import.flash.success %count% BOM Einträge erfolgreich importiert. @@ -10904,379 +10803,379 @@ Oversættelsen %count% styklisteposter blev importeret. - + project.bom_import.type Typ - + project.bom_import.type.kicad_pcbnew KiCAD Pcbnew BOM (CSV fil) - + project.bom_import.clear_existing_bom let eksisterende styklisteposter før import - + project.bom_import.clear_existing_bom.help Hvis denne mulighed er valgt, vil alle styklisteposter, der allerede findes i projektet, blive slettet og overskrevet med de importerede styklistedata. - + project.bom_import.flash.invalid_file Filen kunne ikke importeres. Tjek, at du har valgt den korrekte bilagstype. Fejlmeddelelse: %message% - + project.bom_import.flash.invalid_entries Valideringsfejl! Tjek venligst den importerede fil! - + project.import_bom Importer stykliste til projekt - + project.edit.bom.import_bom Importer BOM - + measurement_unit.new Ny måleenhed - + measurement_unit.edit Ret måleenhed - + part_custom_state.new - Ny brugerdefineret komponentstatus + Ny [part_custom_state] - + part_custom_state.edit - Rediger brugerdefineret komponentstatus + Ret [part_custom_state] - + user.aboutMe.label Om mig - + storelocation.owner.label Ejer - + storelocation.part_owner_must_match.label Komponentejer skal matche lagerplaceringsejer - + part_lot.owner Ejer - + part_lot.owner.help Kun ejeren kan fjerne eller tilføje komponenter fra denne beholdning. - + log.element_edited.changed_fields.owner Ejer - + log.element_edited.changed_fields.instock_unknown Mængde ukendt - + log.element_edited.changed_fields.needs_refill Skal genopfyldes - + part.withdraw.access_denied Du er ikke autoriseret til at udføre den ønskede handling! Tjek venligst dine autorisationer og ejeren af ​​komponentbeholdningen. - + part.info.amount.less_than_desired Mindre end ønsket - + log.cli_user CLI bruger - + log.element_edited.changed_fields.part_owner_must_match Komponentejeren skal svare til lagerstedets ejer! - + part.filter.lessThanDesired Mindre tilgængelig end ønsket (samlet mængde < minimumsmængde) - + part.filter.lotOwner Ejer af inventaret - + user.show_email_on_profile.label Vis e-mail adresse på den offenlige profilside - + log.details.title Log detaljer - + log.user_login.login_from_ip Login fra IP-Adresse - + log.user_login.ip_anonymize_hint - Hvis de sidste cifre i IP-adressen mangler, aktiveres databeskyttelsesforordningen mode, hvor IP-adresserne anonymiseres. + Hvis de sidste cifre i IP-adressen mangler, aktiveres DSGV-tilstanden, hvor IP-adresserne anonymiseres. - + log.user_not_allowed.unauthorized_access_attempt_to Uautoriseret adgang forsøg på side - + log.user_not_allowed.hint Anmodningen blev blokeret. Der skulle ikke være behov for yderligere handling. - + log.no_comment Ingen kommentarer - + log.element_changed.field Felt - + log.element_changed.data_before Data før ændring - + error_table.error Der opstod en fejl under anmodningen. - + part.table.invalid_regex Ugyldigt regulært udtryk (regex) - + log.element_changed.data_after Data efter ændring - + log.element_changed.diff Forskel - + log.undo.undo.short Fortryd - + log.undo.revert.short Vend tilbage til version - + log.view_version Vis version - + log.undo.undelete.short Gendan - + log.element_edited.changed_fields.id ID - + log.element_edited.changed_fields.id_owner Ejer - + log.element_edited.changed_fields.parent_id Overordnet element - + log.details.delete_entry Slet logpost - + log.delete.message.title Vil du virkelig slette denne logpost? - + log.delete.message Hvis dette er en historikindgang for et element, vil sletning af det resultere i tab af historikdata! Dette kan give uventede resultater, når du bruger tidsrejsefunktionen. - + log.collection_deleted.on_collection i samling - + log.element_edited.changed_fields.attachments Bilag - + tfa_u2f.add_key.registration_error Der opstod en fejl under registrering af sikkerhedsnøgle. Prøv igen, eller brug en anden nøgle! - + log.target_type.none Ingen - + ui.darkmode.light Lys - + ui.darkmode.dark Mørk - + ui.darkmode.auto Auto (baseret på systemindstillinger) - + label_generator.no_lines_given Intet tekstindhold angivet! De oprettede etiketter vil være tomme. - + perm.users.impersonate Kopier en anden bruger - + user.impersonated_by.label Kopieret fra bruger - + user.stop_impersonation Afslut kopiering fra bruger - + user.impersonate.btn Kopier fra bruger - + user.impersonate.confirm.title Er du sikker på at du vil kopiere fra denne bruger? - + user.impersonate.confirm.message Dette vil blive logget. Du bør kun gøre dette med en grund. @@ -11284,854 +11183,3753 @@ Oversættelsen Bemærk venligst, at du ikke kan kopiere fra deaktiveret bruger. Hvis du prøver dette, vil du modtage en "Adgang nægtet"-meddelelse. - + log.type.security.user_impersonated Kopieret bruger - + info_providers.providers_list.title Kilder til information - + info_providers.providers_list.active Aktiv - + info_providers.providers_list.disabled Deaktiveret - + info_providers.capabilities.basic Basis - + info_providers.capabilities.footprint Footprint - + info_providers.capabilities.picture Billede - + info_providers.capabilities.datasheet Datablade - + info_providers.capabilities.price Pris - + part.info_provider_reference.badge Kilden til information, der bruges til at oprette denne komponent - + part.info_provider_reference - Genereret fra informationskilde + Genereret fra informationsudbyder - + oauth_client.connect.btn Forbind OAuth - + info_providers.table.provider.label Kilde - + info_providers.search.keyword Søgeord - + info_providers.search.submit Søg - + info_providers.search.providers.help - Vælg de informationskilder, der skal søges i. + Vælg de informationsudbydere, der skal søges i. - + info_providers.search.providers Kilder - + info_providers.search.info_providers_list - Se alle tilgængelige informationskilder + Se alle tilgængelige informationsudbydere - + info_providers.search.title - Opret komponent vha. informationskilde + Opret komponent vha. informationsudbyder - + oauth_client.flash.connection_successful Forbindelsen til OAuth-applikationen er etableret! - + perm.part.info_providers - Informationskilder + Informationsudbydere - + perm.part.info_providers.create_parts Opret komponenter - + entity.edit.alternative_names.label Alternativt navn - + entity.edit.alternative_names.help - De alternative navne, der er angivet her, bruges til automatisk at vælge dette element baseret på data returneret fra informationskilder. + De alternative navne, der er angivet her, bruges til automatisk at vælge dette element baseret på data returneret fra informationsudbydere. - + info_providers.form.help_prefix Kilde - + update_manager.new_version_available.title Ny version tilgængelig - + update_manager.new_version_available.text En ny version af Part-DB er tilgængelig. Her finder du mere information - + update_manager.new_version_available.only_administrators_can_see Kun administratorer kan se denne meddelelse - + perm.system.show_available_updates Vis tilgængelige Part-DB opdateringer - + user.settings.api_tokens API token - + user.settings.api_tokens.description Ved at bruge et API-token kan andre applikationer få adgang til Part-DB med deres brugerrettigheder til at udføre forskellige handlinger ved hjælp af Part-DB REST API. Hvis du sletter et API-token, kan det program, der bruger token'et, ikke længere få adgang til Part-DB på dets vegne. - + api_tokens.name Navn - + api_tokens.access_level Adgangsniveau - + api_tokens.expiration_date Udløbsdato - + api_tokens.last_time_used Sidste anvendelse - + datetime.never Aldrig - + api_token.valid Gyldig - + api_token.expired Udløbet - + user.settings.show_api_documentation Vis API dokumentation - + api_token.create_new Opret nyt API token - + api_token.level.read_only Read-only - + api_token.level.edit Ret - + api_token.level.admin Admin - + api_token.level.full Fuld - + api_tokens.access_level.help Dette giver dig mulighed for at begrænse, hvad API-tokenet giver adgang til. Adgang er altid begrænset af brugerens tilladelser. - + api_tokens.expiration_date.help Efter denne dato vil tokenet ikke længere være brugbart. Hvis dette felt efterlades tomt, vil tokenet aldrig udløbe. - + api_tokens.your_token_is Dit API token er - + api_tokens.please_save_it Gem venligst dette. Du vil ikke kunne se det igen! - + api_tokens.create_new.back_to_user_settings Tilbage til brugerindstillinger - + project.build.dont_check_quantity Kontrollerer ikke mængder - + project.build.dont_check_quantity.help Hvis denne mulighed er valgt, vil de valgte mængder blive fjernet fra lageret, uanset om der er flere eller færre komponenter, end der reelt er nødvendige for at bygge projektet. - + part_list.action.invert_selection Inverter valg - + perm.api API - + perm.api.access_api API adgang - + perm.api.manage_tokens Administrer API-tokens - + user.settings.api_tokens.delete.title Er du sikker på, at du vil slette dette API-token? - + user.settings.api_tokens.delete Slet - + user.settings.api_tokens.delete.message Den applikation, der bruger dette token, vil ikke længere have adgang til Part-DB. Dette kan ikke fortrydes! - + api_tokens.deleted API-token blev fjernet! - + user.settings.api_tokens.no_api_tokens_yet Ingen API-tokens er blevet oprettet endnu. - + api_token.ends_with Ender med - + entity.select.creating_new_entities_not_allowed Du er ikke autoriseret til at oprette nye elementer af denne type! Vælg venligst et givet element. - + scan_dialog.mode Barcode type - + scan_dialog.mode.auto Automatisk genkendelse - + scan_dialog.mode.ipn IPN barcode - + scan_dialog.mode.internal Part-DB barcode - + part_association.label Komponentforbindelse - + part.edit.tab.associations Forbundne komponenter - + part_association.edit.other_part Forbunden komponent - + part_association.edit.type type relation - + part_association.edit.comment Noter - + part_association.edit.type.help Her kan du vælge hvilken type forbindelse komponenterne har. - + part_association.table.from_this_part Links fra denne komponent til andre - + part_association.table.from Fra - + part_association.table.type Relation - + part_association.table.to Til - + part_association.type.compatible Er kompatibel med - + part_association.table.to_this_part Links til denne komponent fra andre - + part_association.type.other Andet (egen værdi) - + part_association.type.supersedes Erstatter - + part_association.edit.other_type brugerdefineret type - + part_association.edit.delete.confirm Er du sikker på, at du vil slette denne genvej? Dette kan ikke fortrydes. - + part_lot.edit.advanced Vis avancerede muligheder - + part_lot.edit.vendor_barcode Leverandør barcode - + part_lot.edit.vendor_barcode.help Hvis denne beholdning allerede har en stregkode (f.eks. påført af leverandøren), kan du indtaste stregkodens indhold her, så du kan finde denne beholdning ved at scanne stregkoden. - + scan_dialog.mode.vendor Leverandørstregkode (konfigureret i komponentbeholdning) - + project.bom.instockAmount Lagerantal - + collection_type.new_element.tooltip Dette element er nyoprettet og er endnu ikke gemt i databasen. - + part.merge.title - Sammenflæt komponent + Sammenflet komponent - + part.merge.title.into sammen til - + part.merge.confirm.title Er du sikker på at du vil sammenflætte <b>%other%</b> til <b>%target%</b>? - + part.merge.confirm.message <b>%other%</b> vil blive slettet, og komponenten vil blive gemt med den viste informaton. - + part.info.merge_modal.title Sammenflæt kompontenter - + part.info.merge_modal.other_part Andet komponent - + part.info.merge_modal.other_into_this Sammenflet anden komponent ind i denne (slet anden komponent, behold denne) - + part.info.merge_modal.this_into_other Flet denne komponent til en anden (slet denne komponent, behold en anden) - + part.info.merge_btn Sammenflæt komponent - + part.update_part_from_info_provider.btn - Opdater komponent fra informationskilden + Opdater komponent fra informationsudbyderen - + info_providers.update_part.title - Opdater komponent fra informationskilden + Opdater komponent fra informationsudbyderen - + part.merge.flash.please_review Data er endnu ikke blevet gemt. Gennemgå ændringerne, og klik på Gem for at gemme dataene. - + user.edit.flash.permissions_fixed De nødvendige tilladelser til andre tilladelser manglede. Dette er blevet rettet. Tjek venligst, om tilladelserne svarer til dine krav. - + permission.legend.dependency_note Bemærk venligst, at nogle autorisationsoperationer afhænger af hinanden. Hvis du modtager en advarsel om, at manglende tilladelser er blevet rettet, og en tilladelse er blevet sat tilbage til tilladt, skal du også indstille den afhængige handling til forbudt. Afhængighederne er normalt placeret til højre for en operation. - + log.part_stock_changed.timestamp Tidspunkt - + part.info.withdraw_modal.timestamp Handlingstidspunkt - + part.info.withdraw_modal.timestamp.hint Dette felt giver dig mulighed for at angive den faktiske dato, da lageroperationen rent faktisk blev udført, ikke kun datoen, hvor den blev logget. Denne værdi gemmes i det ekstra felt i logposten. - + part.info.withdraw_modal.delete_lot_if_empty Slet denne beholdning, når den bliver tom under drift - + info_providers.search.error.client_exception Der opstod en fejl under kommunikationen med informationsudbyderen. Gennemgå konfigurationen for denne udbyder, og forny OAuth-token'erne, hvis det er muligt. - + eda_info.reference_prefix.placeholder f.eks. R - + eda_info.reference_prefix Referencepræfiks - + eda_info.kicad_section.title KiCad specifikke indstillinger - + eda_info.value Værdi - + eda_info.value.placeholder f.eks. 100n - + eda_info.exclude_from_bom Udelad komponent fra stykliste (BOM) - + eda_info.exclude_from_board Udelad komponent fra PCB/Print - + eda_info.exclude_from_sim Udelad komponent fra simulering - + eda_info.kicad_symbol KiCad diagramsymbol - + eda_info.kicad_symbol.placeholder f.eks. transistor_BJT:BC547 - + eda_info.kicad_footprint KiCad footprint - + eda_info.kicad_footprint.placeholder f.eks. Package_TO_SOT_THT:TO-92 - + part.edit.tab.eda EDA information - + api.api_endpoints.title API endpoint - + api.api_endpoints.partdb Part-DB API - + api.api_endpoints.kicad_root_url KiCad API root URL - + eda_info.visibility Gennemtving synlighed - + eda_info.visibility.help Som standard bestemmes synlighed automatisk i EDA-softwaren. Ved at bruge dette afkrydsningsfelt kan du tvinge komponenten til at være synlig eller usynlig. - + part.withdraw.zero_amount Du forsøgte at fjerne/tilføje en mængde sat til nul! Der blev ikke foretaget nogen handling. - - - attachment_type.labelp - Bilagstyper + + + login.flash.access_denied_please_login + Adgang nægtet! Venligst Log ind for at fortsætte. - - - currency.labelp - Valutaer + + + attachment.upload_multiple_files + Upload filer - - - group.labelp - Grupper + + + entity.mass_creation_flash + %COUNT% elementer oprettet med success. - - - label_profile.labelp - Labelprofiler + + + info_providers.search.number_of_results + %number% resultater - - - measurement_unit.labelp - Måleenheder + + + info_providers.search.no_results + Ingen resultater fundet. Prøv at ændre søgeord eller vælg andre informationsudbydere. - - - orderdetail.labelp - Bestillingsoplysninger + + + tfa.check.code.confirmation + Genereret kode - - - parameter.labelp - Parametre + + + info_providers.search.show_existing_part + Vis eksisterende dele/parter - - - part.labelp + + + info_providers.search.edit_existing_part + Ret eksisterende dele/parter + + + + + info_providers.search.existing_part_found.short + Part eksisterer allerede + + + + + info_providers.search.existing_part_found + Denne del (eller en lignende) eksisterer allerede i databasen. Venligst gør op med dig selv om det er den samme du ønsker at oprette igen! + + + + + info_providers.search.update_existing_part + Opdatér eksisterede del fra informantionskilden + + + + + part.create_from_info_provider.no_category_yet + Kategori kan ikke bestemmes automatisk fra informationsudbyderen. Ret data og vælg kategori manuelt. + + + + + part_lot.edit.user_barcode + Bruger stregkode + + + + + scan_dialog.mode.user + Brugerdefineret stregkode (konfigureret i komponentlageret) + + + + + scan_dialog.mode.eigp + EIGP 114 stregkode (f.eks. Datamatrix-kode fra Digikey og Mouser dele) + + + + + scan_dialog.info_mode + Info modus (Afkod stregkode og vis dens indhold, men gå ikke automatisk videre til delen) + + + + + label_scanner.decoded_info.title + Afkodet information + + + + + label_generator.edit_profiles + Ret profiler + + + + + label_generator.profile_name_empty + Profilnavn kan ikke være tomt! + + + + + label_generator.save_profile_name + Profilnavn + + + + + label_generator.save_profile + Gem som en ny profil + + + + + label_generator.profile_saved + Profilen er gemt! + + + + + settings.ips.element14 + Element 14 / Farnell + + + + + settings.ips.element14.apiKey + API nøgle + + + + + settings.ips.element14.apiKey.help + Du kan oprette en API nøgle på <a href="https://partner.element14.com/">https://partner.element14.com/</a>. + + + + + settings.ips.element14.storeId + Gem domæne + + + + + settings.ips.element14.storeId.help + Domænet for den butik, hvorfra dataene skal hentes. Dette bestemmer sproget og valutaen for resultaterne. En liste over gyldige domæner kan findes <a href="https://partner.element14.com/docs/Product_Search_API_REST__Description">her</a>. + + + + + settings.ips.tme + TME + + + + + settings.ips.tme.token + API-Token + + + + + settings.ips.tme.token.help + Du kan få et API-token og en hemmelig nøgle på <a href="https://developers.tme.eu/en/">https://developers.tme.eu/en/</a>. + + + + + settings.ips.tme.secret + API-Secret + + + + + settings.ips.tme.currency + Valuta + + + + + settings.ips.tme.language + Sprog + + + + + settings.ips.tme.country + Land + + + + + settings.ips.tme.grossPrices + Hent bruttopriser (inklusive moms) + + + + + settings.ips.mouser + Mouser + + + + + settings.ips.mouser.apiKey + API-nøgle + + + + + settings.ips.mouser.apiKey.help + Du kan registrere dig for en API-nøgle på <a href="https://eu.mouser.com/api-hub/">https://eu.mouser.com/api-hub/</a>. + + + + + settings.ips.mouser.searchLimit + Søgegrænse + + + + + settings.ips.mouser.searchLimit.help + Det maksimale antal resultater for en enkelt søgning må ikke overstige 50. + + + + + settings.ips.mouser.searchOptions + Søgefiltre + + + + + settings.ips.mouser.searchOptions.help + Der tillades kun visning af dele med en specifik tilgængelighed og/eller overensstemmelse. + + + + + settings.ips.mouser.searchOptions.none + Intet filter + + + + + settings.ips.mouser.searchOptions.rohs + Kun RoHS-kompatible komponenter + + + + + settings.ips.mouser.searchOptions.inStock + Kun umiddelbart tilgængelige komponenter + + + + + settings.ips.mouser.searchOptions.rohsAndInStock + Kun tilgængelige og RoHS-kompatible komponenter + + + + + settings.ips.lcsc + LCSC + + + + + settings.ips.lcsc.help + Bemærk: LCSC stiller ikke en officiel API til rådighed. Denne udbyder bruger webshop-API'en. LCSC har ikke til hensigt at bruge denne API, og den kan til enhver tid fejle. Brugen er derfor på eget ansvar. + + + + + settings.ips.lcsc.enabled + Aktivér + + + + + settings.ips.lcsc.currency + Valuta + + + + + settings.system.attachments + bilag & filer + + + + + settings.system.attachments.maxFileSize + Maksimal filstørrelse + + + + + settings.system.attachments.maxFileSize.help + Den maksimale størrelse på filer, der kan uploades. Bemærk venligst, at dette også er begrænset af PHP-konfigurationen. + + + + + settings.system.attachments.allowDownloads + Tillad download af eksterne filer + + + + + settings.system.attachments.allowDownloads.help + Denne indstilling giver brugerne mulighed for at downloade eksterne filer til deldatabasen ved at angive en URL. <b>Advarsel: Dette kan udgøre en sikkerhedsrisiko, da det kan give brugerne adgang til intranetressourcer via deldatabasen!</b> + + + + + settings.system.attachments.downloadByDefault + Download som standard URL'en til nye vedhæftede filer. + + + + + settings.system.customization + Opsætning + + + + + settings.system.customization.instanceName + Instans navn + + + + + settings.system.customization.instanceName.help + Navn på denne part-DB-installation. Værdien vises i navigationslinjen og i titler. + + + + + settings.system.customization.banner + Startside banner + + + + + settings.system.history + Hændelseslog + + + + + settings.system.history.saveChangedFields + Gem hvilke felter i et element der blev ændret i logposter. + + + + + settings.system.history.saveOldData + Gem gamle data i logposter, når elementer ændres + + + + + settings.system.history.saveNewData + Gem nye data i logposter, når et element ændres/oprettes. + + + + + settings.system.history.saveRemovedData + Slettede data gemmes i en logpost, når elementer slettes. + + + + + settings.system.customization.theme + Globalt tema + + + + + settings.system.history.enforceComments + Tvinger kommentarer til handlinger + + + + + settings.system.history.enforceComments.description + Denne indstilling giver dig mulighed for at angive, hvilke handlinger brugerne skal angive en årsag til, som vil blive logget. + + + + + settings.system.history.enforceComments.type.part_edit + Redigér komponent + + + + + settings.system.history.enforceComments.type.part_create + Del/part oprettelse + + + + + settings.system.history.enforceComments.type.part_delete + Sletning af del + + + + + settings.system.history.enforceComments.type.part_stock_operation + Ændring af del/part lager + + + + + settings.system.history.enforceComments.type.datastructure_edit + Ændring af datastruktur for del + + + + + settings.system.history.enforceComments.type.datastructure_create + Oprettelse af datastruktur + + + + + settings.system.history.enforceComments.type.datastructure_delete + Sletning af datastruktur + + + + + settings.system.privacy.useGravatar + Brug Gravatar avatarer + + + + + settings.system.privacy.useGravatar.description + Hvis brugeren ikke har valgt et avatar-billede, benyttes en avatar fra Gravatar baseret på bruger-e-mailen. Browseren henter selv billeder fra 3.parts kilde! + + + + + settings.system.privacy.checkForUpdates + Søg efter tilgængelige opdateringer til Part-DB + + + + + settings.system.privacy.checkForUpdates.description + Part-DB tjekker regelmæssigt for nye versioner på GitHub. Deaktiver denne mulighed her, hvis du ikke ønsker dette, eller hvis din server ikke kan oprette forbindelse til internettet. + + + + + settings.system.localization.locale + Standardsprog + + + + + settings.system.localization + Lokalisering + + + + + settings.system.localization.timezone + Standard tidszone + + + + + settings.system.localization.base_currency + Basisvaluta + + + + + settings.system.localization.base_currency_description + Den valuta, som prisoplysninger og valutakurser gemmes i. Denne valuta bruges, hvis der ikke er angivet en valuta for en prisindtastning. + +<b>Bemærk venligst, at valutaer ikke vil blive konverteret, når denne værdi ændres. Derfor vil ændring af basisvalutaen efter tilføjelse af prisoplysninger resultere i forkerte priser!</b> + + + + + settings.system.privacy + Databeskyttelse + + + + + settings.title + Serverindstillinger + + + + + settings.misc.kicad_eda + KiCAD integration + + + + + settings.misc.kicad_eda.category_depth + Kategoridybde + + + + + settings.misc.kicad_eda.category_depth.help + Denne værdi bestemmer dybden af ​​kategoritræet, der er synligt i KiCad. 0 betyder, at kun kategorierne på øverste niveau er synlige. Indstil værdien til > 0 for at vise yderligere niveauer. Indstil værdien til -1 for at vise alle dele af deldatabasen inden for en enkelt kategori i KiCad. + + + + + settings.behavior.sidebar + Sidebjælke--panel + + + + + settings.behavior.sidebar.items + Sidebjælke-emner + + + + + settings.behavior.sidebar.items.help + De menuer, der som standard vises i sidebjælken. Rækkefølgen af ​​elementerne kan ændres ved at trække og slippe. + + + + + settings.behavior.sidebar.rootNodeEnabled + Vis rodknude + + + + + settings.behavior.sidebar.rootNodeEnabled.help + Når denne funktion er aktiveret, grupperes alle kategorier på topniveau, fodspor osv. under en enkelt rodnode. Når den er deaktiveret, vises kategorierne på topniveau direkte i menuen. + + + + + settings.behavior.sidebar.rootNodeExpanded + Rodknuden er udvidet som standard + + + + + settings.behavior.table + Tabeller + + + + + settings.behavior.table.default_page_size + Standard sidestrørrelse + + + + + settings.behavior.table.default_page_size.help + Antal poster der vises som standard i helsidestabeller. Indstil værdien til -1 for at vise alle elementer uden sideskift som standard. + + + + + settings.behavior.table.parts_default_columns + Standardkolonner til komponenttabeller + + + + + settings.behavior.table.parts_default_columns.help + De kolonner, der som standard skal vises i komponenttabeller. Elementernes rækkefølge kan ændres via træk og slip. + + + + + settings.ips.oemsecrets + OEMSecrets + + + + + settings.ips.oemsecrets.keepZeroPrices + Vis forhandlere med nulpriser + + + + + settings.ips.oemsecrets.keepZeroPrices.help + Hvis dette ikke er angivet, vil forhandlere, hvis priser er 0, blive afvist som ugyldige. + + + + + settings.ips.oemsecrets.parseParams + Udtræk parametre fra beskrivelsen + + + + + settings.ips.oemsecrets.parseParams.help + Når denne indstilling er aktiveret, forsøger udbyderen at konvertere de ustrukturerede beskrivelser fra OEMSecrets til strukturerede parametre. Hver parameter i beskrivelsen skal have formen "...;navn1:værdi1;navn2:værdi2". + + + + + settings.ips.oemsecrets.sortMode + Sortering af resultaterne + + + + + settings.ips.oemsecrets.sortMode.N + Ingen + + + + + settings.ips.oemsecrets.sortMode.C + Fuldstændighed (prioritering af elementer med detaljerede oplysninger) + + + + + settings.ips.oemsecrets.sortMode.M + Fuldstændighed & producentnavn + + + + + entity.export.flash.error.no_entities + Der er ingen enheder at eksportere! + + + + + attachment.table.internal_file + Internt data + + + + + attachment.table.external_link + Eksternt link + + + + + attachment.view_external.view_at + Vis på %host% + + + + + attachment.view_external + Vis ekstern version + + + + + part.table.actions.error + Der opstod %count% fejl under handlingen! + + + + + part.table.actions.error_detail + %part_name% (ID: %part_id%): %message% + + + + + part_list.action.action.change_location + Skift lagersted (kun for komponenter med individuelt lager) + + + + + parts.table.action_handler.error.part_lots_multiple + Denne komponent indeholder mere end én lagervare. Skift lagerplaceringen manuelt for at vælge, hvilken lagervare der skal ændres. + + + + + settings.ips.reichelt + Reichelt + + + + + settings.ips.reichelt.help + Reichelt.com tilbyder ikke en officiel API; derfor udtrækker denne informationsudbyder information fra hjemmesiden via web scraping. Denne proces kan afbrydes når som helst, og brugen sker på eget ansvar. + + + + + settings.ips.reichelt.include_vat + Priserne er inklusiv moms. + + + + + settings.ips.pollin + Pollin + + + + + settings.ips.pollin.help + Pollin.de tilbyder ikke en officiel API, derfor udtrækker denne informationsudbyder data fra hjemmesiden via web scraping. Dette kan til enhver tid ophøre med at virke; brugen sker på egen risiko. + + + + + settings.behavior.sidebar.rootNodeRedirectsToNewEntity + Rodnoden fører til oprettelsen af ​​et nyt element. + + + + + settings.ips.digikey + Digikey + + + + + settings.ips.digikey.client_id + Client ID + + + + + settings.ips.digikey.secret + Secret + + + + + settings.ips.octopart + Octopart / Nexar + + + + + settings.ips.octopart.searchLimit + Antal resultater + + + + + settings.ips.octopart.searchLimit.help + Antallet af resultater, du ønsker at få, når du søger med Octopart (bemærk venligst, at dette tæller med i dine API-grænser) + + + + + settings.ips.octopart.onlyAuthorizedSellers + Kun autoriserede forhandlere + + + + + settings.ips.octopart.onlyAuthorizedSellers.help + Fravælg for at vise uautoriserede tilbud i resultaterne + + + + + settings.misc.exchange_rate + Vekselkurs + + + + + settings.misc.exchange_rate.fixer_api_key + Fixer.io API Key + + + + + settings.misc.exchange_rate.fixer_api_key.help + Hvis du har brug for valutakurser mellem ikke-euro-valutaer, kan du indtaste en API-nøgle fra fixer.io her. + + + + + settings.misc.ipn_suggest + Komponent IPN-forslag + + + + + settings.misc.ipn_suggest.regex + Regex + + + + + settings.misc.ipn_suggest.regex_help + Hjælpetekst + + + + + settings.misc.ipn_suggest.regex_help_description + Definer din egen brugerhjælpetekst til Regex-formatspecifikationen. + + + + + settings.misc.ipn_suggest.autoAppendSuffix + Tilføj et inkrementelt suffiks, hvis et IPN allerede bruges af en anden komponent. + + + + + settings.misc.ipn_suggest.suggestPartDigits + Steder for numerisk forøgelse + + + + + settings.misc.ipn_suggest.useDuplicateDescription + Brug komponentbeskrivelsen til at bestemme den næste IPN + + + + + settings.misc.ipn_suggest.suggestPartDigits.help + Antallet af cifre, der bruges til trinvis nummerering af dele i IPN-forslagssystemet. + + + + + settings.behavior.part_info + Komponent infoside + + + + + settings.behavior.part_info.show_part_image_overlay + Vis billedoverlejring + + + + + settings.behavior.part_info.show_part_image_overlay.help + Vis billedoverlejringen med detaljer om vedhæftet fil, når du holder musen over billedgalleriet med dele. + + + + + perm.config.change_system_settings + Redigér systemindstillinger + + + + + tree.tools.system.settings + Systemindstillinger + + + + + tree.tools.system.update_manager + Update Manager + + + + + settings.tooltip.overrideable_by_env + Værdien af ​​denne parameter kan tilsidesættes ved at indstille miljøvariablen “%env%”. + + + + + settings.flash.saved + Indstillinger blev gemt. + + + + + settings.flash.invalid + Indstillingerne er ugyldige. Kontroller venligst din indtastning! + + + + + info_providers.settings.title + Indstillinger for informationskilde/udbyder + + + + + form.apikey.redacted + Skjult af sikkerhedsmæssige årsager + + + + + project.bom_import.map_fields + Tildel felter + + + + + project.bom_import.map_fields.help + Vælg, hvordan CSV-kolonner knyttes til styklistefelter + + + + + project.bom_import.delimiter + Feltafgrænsertegn + + + + + project.bom_import.delimiter.comma + Komma (,) + + + + + project.bom_import.delimiter.semicolon + Semikolon (;) + + + + + project.bom_import.delimiter.tab + Tab + + + + + project.bom_import.field_mapping.title + Felttilknytning + + + + + project.bom_import.field_mapping.csv_field + CSV felt + + + + + project.bom_import.field_mapping.maps_to + Tilknyt til + + + + + project.bom_import.field_mapping.suggestion + Forslag + + + + + project.bom_import.field_mapping.priority + Prioritet + + + + + project.bom_import.field_mapping.priority_help + Prioritet (lavere tal = højere prioritet) + + + + + project.bom_import.field_mapping.priority_short + P + + + + + project.bom_import.field_mapping.priority_note + Prioritetstip: lavere tal = højere prioritet. Standardprioriteten er 10. Brug prioriteterne 1-9 for de vigtigste felter og 10+ for normal prioritet. + + + + + project.bom_import.field_mapping.summary + Felttilknytningsresumé + + + + + project.bom_import.field_mapping.select_to_see_summary + Vælg felttilknytinger for at se en oversigt. + + + + + project.bom_import.field_mapping.no_suggestion + Ingen forslag + + + + + project.bom_import.preview + Forhåndsvisning + + + + + project.bom_import.flash.session_expired + Importsessionen er udløbet. Upload venligst din fil igen. + + + + + project.bom_import.field_mapping.ignore + Ignorér + + + + + project.bom_import.type.kicad_schematic + KiCAD diagram BOM (CSV fil) + + + + + common.back + Tilbage + + + + + project.bom_import.validation.errors.required_field_missing + Linje %line%: Det obligatoriske felt “%field%” ​​mangler eller er tomt. Sørg for, at dette felt er tilknyttet og indeholder data. + + + + + project.bom_import.validation.errors.no_valid_designators + Linje %line%: Felt indeholder ikke gyldige komponentreferencer. Forventet format: "R1,C2,U3" eller "R1, C2, U3". + + + + + project.bom_import.validation.warnings.unusual_designator_format + Linje %line%: Nogle komponentreferencer kan have et usædvanligt format: %designators%. Forventet format: "R1", "C2", "U3" osv. + + + + + project.bom_import.validation.errors.duplicate_designators + Linje %line%: Der er fundet identiske komponentreferencer: %designators%. Hver komponent bør kun refereres én gang pr. linje. + + + + + project.bom_import.validation.errors.invalid_quantity + Linje %line%: Mængden “%quantity%” er ikke et gyldigt tal. Indtast venligst en numerisk værdi (f.eks. 1, 2, 5, 10). + + + + + project.bom_import.validation.errors.quantity_zero_or_negative + Linje %line%: Mængden skal være større end 0, registreret mængde %quantity%. + + + + + project.bom_import.validation.warnings.quantity_unusually_high + Linje %line%: Mængden %quantity% ser usædvanlig høj ud. Kontroller venligst, om dette er korrekt. + + + + + project.bom_import.validation.warnings.quantity_not_whole_number + Linje %line%: Antallet %quantity% er ikke et heltal, men du har %count% komponentreferencer. Dette kan indikere en uoverensstemmelse. + + + + + project.bom_import.validation.errors.quantity_designator_mismatch + Linje %line%: Afvigelse mellem antal og komponentreferencer. Antal: %quantity%, Referencer: %count% (%designators%). Disse skal stemme overens. Juster enten mængden, eller tjek dine komponentreferencer. + + + + + project.bom_import.validation.errors.invalid_partdb_id + Linje %line%: Part-DB ID "%id%" er ikke et gyldigt tal. Indtast venligst et numerisk ID. + + + + + project.bom_import.validation.errors.partdb_id_zero_or_negative + Linje %line%: Part-DB ID'et skal være større end 0, det modtagne ID er %id%. + + + + + project.bom_import.validation.warnings.partdb_id_not_found + Linje %line%: Komponentens DB-ID %id% blev ikke fundet i databasen. Komponenten importeres uden et link til en eksisterende del. + + + + + project.bom_import.validation.info.partdb_link_success + Linje %line%: Linket til komponenten “%name%” (ID: %id%). + + + + + project.bom_import.validation.warnings.no_component_name + Linje %line%: Intet komponentnavn/beskrivelse angivet (MPN, reference eller værdi). Komponenten er angivet som "Ukendt komponent". + + + + + project.bom_import.validation.warnings.package_name_too_long + Linje %line%: Footprint-navnet “%package%” er usædvanligt langt. Kontroller venligst, om det er korrekt. + + + + + project.bom_import.validation.info.library_prefix_detected + Linje %line%: Footprint “%package%” indeholder et bibliotekspræfiks. Dette fjernes automatisk under import. + + + + + project.bom_import.validation.errors.non_numeric_field + Linje %line%: Feltet “%field%” ​​indeholder den ikke-numeriske værdi “%value%”. Indtast venligst et gyldigt tal. + + + + + project.bom_import.validation.info.import_summary + Importoversigt: %total% samlede poster, %valid% gyldige, %invalid% med problemer. + + + + + project.bom_import.validation.errors.summary + Der blev fundet %count% valideringsfejl, som skal rettes, før importen kan fortsætte. + + + + + project.bom_import.validation.warnings.summary + Der blev fundet %count% advarsler. Kontroller venligst disse problemer, før du fortsætter. + + + + + project.bom_import.validation.info.all_valid + Alt er nu valideret korrekt! + + + + + project.bom_import.validation.summary + Valideringoversigt + + + + + project.bom_import.validation.total_entries + Samlet antal poster + + + + + project.bom_import.validation.valid_entries + Gyldige poster + + + + + project.bom_import.validation.invalid_entries + Ugyldige poster + + + + + project.bom_import.validation.success_rate + Succesrate + + + + + project.bom_import.validation.errors.title + Valideringsfejl + + + + + project.bom_import.validation.errors.description + Følgende fejl skal rettes, før importen kan fortsætte: + + + + + project.bom_import.validation.warnings.title + Valideringsadvarsel + + + + + project.bom_import.validation.warnings.description + Følgende advarsler bør læses, før du fortsætter: + + + + + project.bom_import.validation.info.title + Information + + + + + project.bom_import.validation.details.title + Detaljerede valideringsresultater + + + + + project.bom_import.validation.details.line + Linje + + + + + project.bom_import.validation.details.status + Status + + + + + project.bom_import.validation.details.messages + Meddelser + + + + + project.bom_import.validation.details.valid + Gyldig + + + + + project.bom_import.validation.details.invalid + Ugyldig + + + + + project.bom_import.validation.all_valid + Alle poster er gyldige og klar til import! + + + + + project.bom_import.validation.fix_errors + Ret venligst valideringsfejlene, før du fortsætter med importen. + + + + + project.bom_import.type.generic_csv + Generiske CSV-data + + + + + label_generator.update_profile + Opdatér profil med aktuelle indstillinger + + + + + label_generator.profile_updated + Label-profilen er opdateret + + + + + settings.behavior.hompepage.items + Startside-elementer + + + + + settings.behavior.homepage.items.help + Elementerne, der skal vises på startsiden. Rækkefølgen kan ændres via træk og slip. + + + + + settings.system.customization.showVersionOnHomepage + Vis Part-DB-version på startsiden + + + + + settings.behavior.part_info.extract_params_from_description + Udtræk parametre fra komponentbeskrivelsen + + + + + settings.behavior.part_info.extract_params_from_notes + Udtræk parametre fra komponentinformationerne + + + + + settings.ips.default_providers + Standard infoudbydere + + + + + settings.ips.general + Generelle indstillinger + + + + + settings.ips.default_providers.help + Disse udbydere er forudvalgt til søgning i informationskilder. + + + + + settings.behavior.table.preview_image_max_width + Maksimal bredde på forhåndsvisningsbillede (px) + + + + + settings.behavior.table.preview_image_min_width + Minimumsbredde for forhåndsvisningsbillede (px) + + + + + info_providers.bulk_import.step1.title + Masseimport af datakilder – Trin 1 + + + + + info_providers.bulk_import.parts_selected + Komponenter valgt + + + + + info_providers.bulk_import.step1.global_mapping_description + Konfigurer felttilknytninger, der skal anvendes på alle valgte dele. For eksempel betyder "MPN → LCSC + Mouser", at leverandørerne LCSC og Mouser benyttes til søgning ved hjælp af MPN-feltet for hver del. + + + + + info_providers.bulk_import.selected_parts + Udvalgte komponenter + + + + + info_providers.bulk_import.field_mappings + Felttilknytning + + + + + info_providers.bulk_import.field_mappings_help + Angiv hvilke komponentfelter der skal søges i ved hjælp af hvilke informationsudbydere. Flere tildelinger vil blive kombineret. + + + + + info_providers.bulk_import.add_mapping + Tilføj tilknytning + + + + + info_providers.bulk_import.search_results.title + Søgeresultater + + + + + info_providers.bulk_import.errors + Fejl + + + + + info_providers.bulk_import.results_found + %count% resultater fundet + + + + + info_providers.bulk_import.source_field + Komponentfelt + + + + + info_providers.bulk_import.view_existing + Vis eksisterende + + + + + info_providers.bulk_search.search_field + Søgefelt + + + + + info_providers.bulk_search.providers + Informationsudbydere + + + + + info_providers.bulk_import.actions.label + Handlinger + + + + + info_providers.bulk_search.providers.help + Vælg hvilke infomationsudbydere der skal søges hos, når komponenter har dette felt. + + + + + info_providers.bulk_search.submit + Søg alle komponenter + + + + + info_providers.bulk_search.field.select + Vælg et felt at søge ud fra + + + + + info_providers.bulk_search.field.mpn + Producent varenummer (MPN) + + + + + info_providers.bulk_search.field.name + Komponentnavn + + + + + part_list.action.action.info_provider + Komponent datakilde + + + + + part_list.action.bulk_info_provider_import + Masseimport af datakilder + + + + + info_providers.bulk_import.step1.spn_recommendation + Det anbefales at bruge et leverandørvarenummer (SPN) for at opnå bedre resultater. Tilføj en tilknytning for hver leverandør, så deres SPN'er kan bruges. + + + + + info_providers.bulk_import.update_part + Opdatér komponent + + + + + info_providers.bulk_import.prefetch_details + Indledende hentning af komponentdetaljer + + + + + info_providers.bulk_import.prefetch_details_help + Hent detaljer for alle resultater på forhånd. Selvom dette tager længere tid, fremskynder det arbejdsgangen for opdatering af komponenter. + + + + + info_providers.bulk_import.step2.title + Masseimport fra informationsudbydere + + + + + info_providers.bulk_import.step2.card_title + Masseimport af %count% komponenter – %date% + + + + + info_providers.bulk_import.parts Komponenter - - - part_association.labelp - Komponentforbindelser + + + info_providers.bulk_import.results + resultater - - - part_custom_state.labelp - Brugerdefinerede deltilstande + + + info_providers.bulk_import.created_at + Oprettet d. - - - part_lot.labelp - Komponentbeholdninger + + + info_providers.bulk_import.status.in_progress + Under udarbejdelse - - - pricedetail.labelp - Prisinformationer + + + info_providers.bulk_import.status.completed + Færdig - - - project_bom_entry.labelp - BOM-registreringer + + + info_providers.bulk_import.status.failed + Fejlet + + + + + info_providers.bulk_import.table.name + Navn + + + + + info_providers.bulk_import.table.description + Beskrivelse + + + + + info_providers.bulk_import.table.manufacturer + Producent + + + + + info_providers.bulk_import.table.provider + Udbyder + + + + + info_providers.bulk_import.table.source_field + Komponentfelt + + + + + info_providers.bulk_import.back + Tilbage + + + + + info_providers.bulk_import.progress + Fremskridt: + + + + + info_providers.bulk_import.status.pending + Afventer + + + + + info_providers.bulk_import.completed + Afsluttet + + + + + info_providers.bulk_import.skipped + Sprunget over + + + + + info_providers.bulk_import.mark_completed + Markér som afsluttet + + + + + info_providers.bulk_import.mark_skipped + Markér som sprunget over + + + + + info_providers.bulk_import.mark_pending + Makér som udestående + + + + + info_providers.bulk_import.skip_reason + Grund til at springe over + + + + + info_providers.bulk_import.editing_part + Ret komponent som en del af masseimport + + + + + info_providers.bulk_import.complete + Afsluttet + + + + + info_providers.bulk_import.existing_jobs + Eksisterende jobs + + + + + info_providers.bulk_import.job_name + Jobnavn + + + + + info_providers.bulk_import.parts_count + Komponentantal + + + + + info_providers.bulk_import.results_count + Antal resultater + + + + + info_providers.bulk_import.progress_label + Status: %current%/%total% + + + + + info_providers.bulk_import.manage_jobs + Administrer masseimportjobs + + + + + info_providers.bulk_import.view_results + Vis resultater + + + + + info_providers.bulk_import.status + Status + + + + + info_providers.bulk_import.manage_jobs_description + Se og administrer alle dine masseimportjobs. For at oprette et nyt job skal du vælge komponenter og klikke på "Masseimport fra informationsudbydere". + + + + + info_providers.bulk_import.no_jobs_found + Der blev ikke fundet nogen bulkimportjobs. + + + + + info_providers.bulk_import.create_first_job + Opret dit første masseimportjob ved at vælge flere komponenter i en komponenttabel og vælge indstillingen "Masseimport fra informationsudbyder". + + + + + info_providers.bulk_import.confirm_delete_job + Er du sikker på du vil slette dette? + + + + + info_providers.bulk_import.job_name_template + Masseimport af %count% komponenter + + + + + info_providers.bulk_import.step2.instructions.title + Sådan bruger du masseimport + + + + + info_providers.bulk_import.step2.instructions.description + Følg disse trin for effektivt at opdatere dine komponenter: + + + + + info_providers.bulk_import.step2.instructions.step1 + Klik på "Opdatér komponent" for at opdatere en komponent fra informationsudbyderne. + + + + + info_providers.bulk_import.step2.instructions.step2 + Gennemgå og redigér komponentoplysningerne efter behov. Bemærk: Du skal klikke på "Gem" to gange for at gemme ændringerne. + + + + + info_providers.bulk_import.step2.instructions.step3 + Klik på "Afslut" for at markere sektionen som færdig og vende tilbage til denne oversigt. + + + + + info_providers.bulk_import.created_by + Oprettet af + + + + + info_providers.bulk_import.completed_at + Færdiggjort d. + + + + + info_providers.bulk_import.action.label + Handling + + + + + info_providers.bulk_import.action.delete + Slet + + + + + info_providers.bulk_import.status.active + Aktiv + + + + + info_providers.bulk_import.progress.title + Fremskridt + + + + + info_providers.bulk_import.progress.completed_text + %completet%/%total% fuldført + + + + + info_providers.bulk_import.status.stopped + Afbrudt + + + + + info_providers.bulk_import.action.stop + Stop + + + + + info_providers.bulk_import.confirm_stop_job + Er du sikker på du ønsker at afbryde dette job? + + + + + part.filter.in_bulk_import_job + Masseimport job + + + + + part.filter.bulk_import_job_status + Status for bulkimport + + + + + part.filter.bulk_import_part_status + Status for bulkimporten + + + + + part.edit.tab.bulk_import + Masseimport + + + + + bulk_import.status.pending + Venter + + + + + bulk_import.status.in_progress + Under udarbejdelse + + + + + bulk_import.status.completed + Færdiggjort + + + + + bulk_import.status.stopped + Afbrudt + + + + + bulk_import.status.failed + Fejlet + + + + + bulk_import.part_status.pending + Venter + + + + + bulk_import.part_status.completed + Gennemført + + + + + bulk_import.part_status.skipped + Sprunget over + + + + + bulk_import.part_status.failed + Fejlet + + + + + bulk_info_provider_import_job.label + Masseimport fra informationsudbydere + + + + + bulk_info_provider_import_job_part.label + Komponent masseimport + + + + + info_providers.bulk_search.priority + Prioritet + + + + + info_providers.bulk_search.priority.help + Lavere tal = højere prioritet. Samme prioritet = kombinér resultater. Forskellige prioriteter = prøv den højeste først, og vælg den lavere, hvis der ikke findes resultater. + + + + + info_providers.bulk_import.priority_system.title + Prioritetssystem + + + + + info_providers.bulk_import.priority_system.description + Lavere tal = højere prioritet. Samme prioritet = kombinér resultater. Forskellige prioriteter = prøv den højeste først, og vælg den lavere, hvis der ikke findes resultater. + + + + + info_providers.bulk_import.priority_system.example + Eksempel: Prioritet 1: "LCSC SPN → LCSC", Prioritet 2: "MPN → LCSC + Mouser", Prioritet 3: "Navn → Alle udbydere" + + + + + info_providers.bulk_import.search.submit + Informationsudbydere + + + + + info_providers.bulk_import.research.title + Søg efter komponenter igen + + + + + info_providers.bulk_import.research.description + Søg efter komponenter igen ved hjælp af opdaterede oplysninger (f.eks. nye MPN'er). Bruger de samme felttilknytninger som den oprindelige søgning. + + + + + info_providers.bulk_import.research.all_pending + Søg efter alle resterende komponenter + + + + + info_providers.bulk_import.research.part + Søg igen + + + + + info_providers.bulk_import.research.part_tooltip + Søg efter denne komponent igen med opdaterede oplysninger + + + + + info_providers.bulk_import.max_mappings_reached + Maksimalt antal tilknytninger nået + + + + + settings.system + System + + + + + settings.behavior + Opførsel + + + + + settings.ips + Informationsudbydere + + + + + settings.misc + Forskelligt + + + + + settings.system.localization.language_menu_entries + Sprogmenu-indgange + + + + + settings.system.localization.language_menu_entries.description + Sprogene, der skal vises i rullemenuen for sprog. Rækkefølgen kan ændres ved at trække og slippe. Lad feltet være tomt for at vise alle tilgængelige sprog. + + + + + project.builds.no_bom_entries + Projektet har ingen styklisteposter. + + + + + settings.behavior.sidebar.data_structure_nodes_table_include_children + Tabeller bør som standard indeholde underordnede elementer. + + + + + settings.behavior.sidebar.data_structure_nodes_table_include_children.help + Når denne indstilling er valgt, inkluderes alle komponenter i den underordnede kategori i komponenttabeller for kategorier, footprint osv. Hvis denne indstilling ikke er valgt, vises kun de komponenter, der strengt taget tilhører den valgte kategori (eksklusiv underordnede elementer), i komponenttabellerne. + + + + + info_providers.search.error.oauth_reconnect + Følgende informationsudbyder kræver en ny OAuth-forbindelse: %provider% +Dette kan gøres på siden Oversigt over informationsudbydere. + + + + + settings.misc.ipn_suggest.useDuplicateDescription.help + Når komponentbeskrivelsen er aktiveret, bruges den til at finde eksisterende dele med samme beskrivelse og til at bestemme det næste tilgængelige IPN til forslagslisten ved at øge det numeriske suffiks tilsvarende. + + + + + settings.misc.ipn_suggest.regex.help + Et PCRE-kompatibelt regulært udtryk, som alle IPN'er skal opfylde. Lad feltet stå tomt for at tillade hvad som helst som et IPN. - + user.labelp Brugere + + + currency.labelp + Valutaer + + + + + measurement_unit.labelp + Måleenhed + + + + + attachment_type.labelp + Bilagstyper + + + + + label_profile.labelp + Labelprofil + + + + + part_custom_state.labelp + Brugerdefinerede komponenttilstande + + + + + group.labelp + Grupper + + + + + settings.synonyms.type_synonym.type + Type + + + + + settings.synonyms.type_synonym.language + Sprog + + + + + settings.synonyms.type_synonym.translation_singular + Oversættelse Ental + + + + + settings.synonyms.type_synonym.translation_plural + Oversættelse Flertal + + + + + settings.synonyms.type_synonym.add_entry + Tilføj post + + + + + settings.synonyms.type_synonym.remove_entry + Fjern post + + + + + settings.synonyms + Synonymer + + + + + settings.synonyms.help + Synonymsystemet giver dig mulighed for at tilsidesætte, hvordan Part-DB navngiver bestemte ting. Dette kan være nyttigt, især når Part-DB bruges i en anden kontekst end elektronik. + +Bemærk venligst, at dette system i øjeblikket er eksperimentelt, og de synonymer, der er defineret her, vises muligvis ikke alle steder. + + + + + settings.synonyms.type_synonyms + Type-synonymer + + + + + settings.synonyms.type_synonyms.help + Type-synonymer giver dig mulighed for at erstatte navnene på indbyggede datatyper. Du kan f.eks. omdøbe "Footprint" til noget andet. + + + + + log.element_edited.changed_fields.part_ipn_prefix + IPN præfiks + + + + + part.labelp + Komponenter + + + + + project_bom_entry.labelp + Stykliste(BOM)-posteringer + + + + + part_lot.labelp + Komponentlagre + + + + + orderdetail.labelp + Bestillingsinformation + + + + + pricedetail.labelp + Prisinformation + + + + + parameter.labelp + Parametre + + + + + part_association.labelp + Komponent ordninger + + + + + bulk_info_provider_import_job.labelp + Masseimport fra informationsudbydere + + + + + bulk_info_provider_import_job_part.labelp + Komponent masseinport job + + + + + password_toggle.hide + Skjul + + + + + password_toggle.show + Vis + + + + + settings.misc.ipn_suggest.regex.help.placeholder + F.eks. format: 3-4 alfanumeriske segmenter adskilt af "-", efterfulgt af "-" og 4 cifre, f.eks. PCOM-RES-0001 + + + + + part.edit.tab.advanced.ipn.prefix.global_prefix + Det globale IPN-præfiks, der gælder for alle komponenter + + + + + settings.misc.ipn_suggest.fallbackPrefix + Fallback-præfiks + + + + + settings.misc.ipn_suggest.fallbackPrefix.help + IPN-præfikset, der skal bruges, når en kategori ikke har defineret et præfiks. + + + + + settings.misc.ipn_suggest.numberSeparator + Nummerseparator + + + + + settings.misc.ipn_suggest.numberSeparator.help + Separatoren, der bruges til at adskille IPN-nummeret fra præfikset. + + + + + settings.misc.ipn_suggest.categorySeparator + Kategoriseparator + + + + + settings.misc.ipn_suggest.categorySeparator.help + Separatoren, der bruges til at adskille forskellige niveauer af kategoripræfikser. + + + + + settings.misc.ipn_suggest.globalPrefix + Global-præfiks + + + + + settings.misc.ipn_suggest.globalPrefix.help + Når den er aktiveret, tilbydes der en mulighed for at generere et IPN med dette globale præfiks, som gælder for komponenter i alle kategorier. + + - - Do not remove! Used for datatables rendering. - - - datatable.datatable.lengthMenu - _MENU_ - + + Do not remove! Used for datatables rendering. + + + datatable.datatable.lengthMenu + _MENU_ + + + + + settings.ips.buerklin + Buerklin + + + + + settings.ips.buerklin.username + Brugernavn + + + + + settings.ips.buerklin.help + Buerklin API-adgangsbegrænsninger: 100 anmodninger/minut pr. IP-adresse + +Buerklin API-godkendelsesserver: 10 anmodninger/minut pr. IP-adresse + + + + + project.bom.part_id + [Part] ID + + + + + info_providers.search.error.general_exception + Ukendt fejl ved hentning af komponenter fra informationsudbyderen: %type%. Kontroller, at dine udbydere er konfigureret korrekt, og at adgangsnøglerne er korrekte. Yderligere oplysninger kan findes i serverloggene. + + + + + info_providers.search.error.transport_exception + Der opstod transportfejl under hentning af oplysninger fra udbydere. Kontroller, om din server har internetadgang. Se serverloggene for at få flere oplysninger. + + + + + update_manager.title + Update Manager + + + + + update_manager.new + Ny + + + + + update_manager.current_installation + Nuværende installation + + + + + update_manager.version + Version + + + + + update_manager.installation_type + Installationstype + + + + + update_manager.git_branch + Git Branch + + + + + update_manager.git_commit + Git Commit + + + + + update_manager.local_changes + Lokale ændringer + + + + + update_manager.commits_behind + Bagvedliggende Commits + + + + + update_manager.auto_update_supported + Automatisk opdatering er mulig + + + + + update_manager.refresh + Opdatér + + + + + update_manager.latest_release + Sidste release + + + + + update_manager.tag + Tag + + + + + update_manager.released + Released + + + + + update_manager.release_notes + Release notes + + + + + update_manager.view + Vis + + + + + update_manager.view_on_github + Vis på GitHub + + + + + update_manager.view_release + Vis release + + + + + update_manager.could_not_fetch_releases + Kunne ikke hente releaseinformation. Check din internetforbindelse. + + + + + update_manager.how_to_update + Sådan opdaterer du + + + + + update_manager.cli_instruction + For at opdatere Part-DB, kør en af følgende kommandoer i en terminal: + + + + + update_manager.check_for_updates + Søg efter opdateringer + + + + + update_manager.update_to_latest + Opdatér til nyeste version + + + + + update_manager.update_to_specific + Opdatér til en bestemt version + + + + + update_manager.cli_recommendation + Af sikkerheds- og pålidelighedshensyn bør opdateringer udføres via kommandolinjer. Opdateringsprocessen opretter automatisk en sikkerhedskopi, aktiverer vedligeholdelsestilstand og håndterer migreringer. + + + + + update_manager.up_to_date + Nyeste version + + + + + update_manager.newer + Nyere + + + + + update_manager.current + Aktuelle + + + + + update_manager.older + Ældre + + + + + update_manager.prerelease + Pre-release + + + + + update_manager.status + Status + + + + + update_manager.available_versions + Tilgængelige versioner + + + + + update_manager.no_releases_found + Ingen releases fundet + + + + + update_manager.view_release_notes + Vis release noter + + + + + update_manager.update_logs + Opdateringslog + + + + + update_manager.backups + Backups + + + + + update_manager.date + Dato + + + + + update_manager.log_file + Logfil + + + + + update_manager.no_logs_found + Ingen opdateringslogs fundet + + + + + update_manager.file + Fil + + + + + update_manager.size + Størrelse + + + + + update_manager.no_backups_found + Ingen backups fundet + + + + + update_manager.validation_issues + Valideringsproblemer + + + + + update_manager.maintenance_mode_active + Vedligeholdelsestilstand er aktiv + + + + + update_manager.update_in_progress + En opdatering er i øjeblikket i gang + + + + + update_manager.started_at + Startet kl. + + + + + update_manager.new_version_available.message + Part-DB version %version% er nu tilgængelig! Overvej at opdatere for at få de nyeste funktioner og sikkerhedsrettelser. + + + + + update_manager.changelog + Changelog + + + + + update_manager.no_release_notes + Ingen release noter tilgængelige for denne version. + + + + + update_manager.back_to_update_manager + Tilbage til Update Manager + + + + + update_manager.download_assets + Download + + + + + update_manager.update_to_this_version + Opdatér til denne version + + + + + update_manager.run_command_to_update + Kør følgende kommando i din terminal for at opdatere til denne version: + + + + + update_manager.log_viewer + Logviser + + + + + update_manager.update_log + Update log + + + + + update_manager.bytes + bytes + + + + + perm.system.manage_updates + Administrer Part-DB-opdateringer + + + + + update_manager.create_backup + Opret sikkerhedskopi før opdatering (anbefales) + + + + + update_manager.confirm_update + Er du sikker på, at du vil opdatere Part-DB? Der vil blive oprettet en sikkerhedskopi før opdateringen. + + + + + update_manager.already_up_to_date + Du benytter den seneste version af Part-DB. + + + + + update_manager.progress.title + Opdateringsstatus + + + + + update_manager.progress.updating + Part-DB opdateres + + + + + update_manager.progress.completed + Opdatering fuldendt! + + + + + update_manager.progress.failed + Opdatering fejlet + + + + + update_manager.progress.initializing + Initialiserer... + + + + + update_manager.progress.updating_to + Opdaterer til version %version% + + + + + update_manager.progress.downgrading_to + Downgrade til version %version% + + + + + update_manager.progress.error + Fejl + + + + + update_manager.progress.success_message + Part-DB er blevet opdateret! Du skal muligvis opdatere siden for at se den nye version. + + + + + update_manager.progress.steps + Opdateringstrin + + + + + update_manager.progress.waiting + Venter på at opdateringen begynder... + + + + + update_manager.progress.back + Tilbage til Update Manager + + + + + update_manager.progress.refresh_page + Opdatér side + + + + + update_manager.progress.warning + Vigtig + + + + + update_manager.progress.do_not_close + Luk ikke denne side eller naviger væk mens opdateringen er i gang. Opdateringen fortsætter, selvom du lukker siden, men du vil ikke kunne overvåge status. + + + + + update_manager.progress.auto_refresh + Denne side opdateres automatisk hvert 2. sekund for at vise status. + + + + + update_manager.progress.downgrade_title + Downgrade fremskridt + + + + + update_manager.progress.downgrade_completed + Downgrade afsluttet! + + + + + update_manager.progress.downgrade_failed + Downgrade fejlet + + + + + update_manager.progress.downgrade_success_message + Part-DB er blevet downgraded! Du skal muligvis opdatere siden for at se den nye version. + + + + + update_manager.progress.downgrade_steps + Downgrade-trin + + + + + update_manager.progress.downgrade_do_not_close + Luk ikke denne side eller naviger væk mens nedgraderingen er i gang. Downgrade fortsætter, selvom du lukker siden, men du vil så ikke kunne overvåge status. + + + + + update_manager.confirm_downgrade + Er du sikker på, at du vil downgrade Part-DB? Dette vil ende ud i en ældre Part-dB version. Der vil blive oprettet en sikkerhedskopi før downgrade udføres. + + + + + update_manager.downgrade_removes_update_manager + ADVARSEL: Denne version inkluderer ikke Update-Manager. Efter downgrade skal du opdatere manuelt ved hjælp af kommandolinjen (git checkout, composer install osv.). + + + + + update_manager.restore_backup + Indlæs backup + + + + + update_manager.restore_confirm_title + Gendan fra sikkerhedskopi + + + + + update_manager.restore_confirm_message + Er du sikker på, at du vil gendanne din database fra denne sikkerhedskopi? + + + + + update_manager.restore_confirm_warning + ADVARSEL: Dette vil overskrive din nuværende database med backupdataene. Denne handling kan ikke fortrydes! Sørg for, at du har en gyldig backup, før du fortsætter. + + + + + update_manager.web_updates_disabled + Webbaserede opdateringer er deaktiveret + + + + + update_manager.web_updates_disabled_hint + Webbaserede opdateringer er blevet deaktiveret af serveradministratoren. Brug venligst CLI-kommandoen "php bin/console partdb:update" til at udføre opdateringer. + + + + + update_manager.backup_restore_disabled + Gendannelse af sikkerhedskopi er deaktiveret af serverkonfigurationen. + + + + + settings.ips.conrad + Conrad + + + + + settings.ips.conrad.shopID + Shop ID + + + + + settings.ips.conrad.shopID.description + Den version af Conrad-butikken du vil have resultater fra. Dette bestemmer sprog, priser og valuta for resultaterne. Hvis både en B2B- og en B2C-version er tilgængelig, skal du vælge B2C-versionen, hvis du ønsker priser inklusiv moms. + + + + + settings.ips.conrad.attachment_language_filter + Sprogfilter for bilag + + + + + settings.ips.conrad.attachment_language_filter.description + Inkluderer kun vedhæftede filer på de valgte sprog i resultaterne. + + + + + settings.ips.generic_web_provider + Generisk Web URL udbyder + + + + + settings.ips.generic_web_provider.description + Denne informationsudbyder gør det gør det muligt at hente grundlæggende information om dele fra flere butiksside ULR'er + + + + + settings.ips.generic_web_provider.enabled.help + Når udbyderen er aktiveret, kan brugere foretage anmodninger til vilkårlige websteder på vegne af Part-DB-serveren. Aktivér kun dette, hvis du er opmærksom på de potentielle konsekvenser det kan have. + + + + + info_providers.from_url.title + Opret [komponent] fra URL + + + + + info_providers.from_url.url.label + URL + + + + + info_providers.from_url.no_part_found + Der blev ikke fundet nogle komponenter med den angivne URL. Er du sikker på, at dette er en gyldig webadresse til butikken? + + + + + info_providers.from_url.help + Opretter en komponent baseret på den givne URL. Den forsøger at delegere den til en eksisterende informationsudbyder, hvis det er muligt, ellers vil der blive nemlig blive forsøgt at udtrække ufuldendte data fra websidens metadata. + + + + + update_manager.cant_auto_update + Kan ikke opdatere automatisk fra WebUI + + + + + update_manager.switch_to + Skift til + + + + + update_manager.update_to + Opdatér til + diff --git a/translations/messages.de.xlf b/translations/messages.de.xlf index 9fa2ef52..e1677d74 100644 --- a/translations/messages.de.xlf +++ b/translations/messages.de.xlf @@ -221,7 +221,7 @@ part.info.timetravel_hint - Beachten Sie, dass dieses Feature experimentell ist und die angezeigten Infos daher nicht unbedingt korrekt sind.]]> + So sah das Bauteil vor %timestamp% aus. <i>Beachten Sie, dass dieses Feature experimentell ist und die angezeigten Infos daher nicht unbedingt korrekt sind.</i> @@ -649,9 +649,9 @@ user.edit.tfa.disable_tfa_message - alle aktiven Zwei-Faktor-Authentifizierungsmethoden des Nutzers deaktivieren und die Backupcodes löschen!
-Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müssen und neue Backupcodes ausdrucken müssen!

-Führen sie dies nur durch, wenn Sie über die Identität des (um Hilfe suchenden) Benutzers absolut sicher sind, da ansonsten eine Kompromittierung des Accounts durch einen Angreifer erfolgen könnte!]]>
+ Dies wird <b>alle aktiven Zwei-Faktor-Authentifizierungsmethoden des Nutzers deaktivieren</b> und die <b>Backupcodes löschen</b>! <br> +Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müssen und neue Backupcodes ausdrucken müssen! <br><br> +<b>Führen sie dies nur durch, wenn Sie über die Identität des (um Hilfe suchenden) Benutzers absolut sicher sind, da ansonsten eine Kompromittierung des Accounts durch einen Angreifer erfolgen könnte!</b>
@@ -1358,7 +1358,7 @@ Subelemente werden beim Löschen nach oben verschoben. homepage.github.text - GitHub Projektseite]]> + Quellcode, Downloads, Bugreports, ToDo-Liste usw. gibts auf der <a class="link-external" target="_blank" href="%href%">GitHub Projektseite</a> @@ -1380,7 +1380,7 @@ Subelemente werden beim Löschen nach oben verschoben. homepage.help.text - Wiki der GitHub Seite.]]> + Hilfe und Tipps finden sie im <a class="link-external" rel="noopener" target="_blank" href="%href%">Wiki</a> der GitHub Seite. @@ -1622,7 +1622,7 @@ Subelemente werden beim Löschen nach oben verschoben. email.pw_reset.fallback - %url% auf und geben Sie die folgenden Daten ein]]> + Wenn dies nicht funktioniert, rufen Sie <a href="%url%">%url%</a> auf und geben Sie die folgenden Daten ein @@ -1652,7 +1652,7 @@ Subelemente werden beim Löschen nach oben verschoben. email.pw_reset.valid_unit %date% - %date%]]> + Das Reset-Token ist gültig bis <i>%date%</i> @@ -3525,8 +3525,8 @@ Subelemente werden beim Löschen nach oben verschoben. tfa_google.disable.confirm_message - -Beachten Sie außerdem, dass ihr Account ohne Zwei-Faktor-Authentifizierung nicht mehr so gut gegen Angreifer geschützt ist!]]> + Wenn Sie die Authenticator App deaktivieren, werden alle Backupcodes gelöscht, daher sie müssen sie evtl. neu ausdrucken.<br> +Beachten Sie außerdem, dass ihr Account ohne Zwei-Faktor-Authentifizierung nicht mehr so gut gegen Angreifer geschützt ist! @@ -3546,7 +3546,7 @@ Beachten Sie außerdem, dass ihr Account ohne Zwei-Faktor-Authentifizierung nich tfa_google.step.download - Google Authenticator oder FreeOTP Authenticator)]]> + Laden Sie eine Authenticator App herunter (z.B. <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a> oder <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp">FreeOTP Authenticator</a>) @@ -3788,8 +3788,8 @@ Beachten Sie außerdem, dass ihr Account ohne Zwei-Faktor-Authentifizierung nich tfa_trustedDevices.explanation - aller Computer zurücksetzen.]]> + Bei der Überprüfung des zweiten Faktors, kann der aktuelle Computer als vertrauenswürdig gekennzeichnet werden, daher werden keine Zwei-Faktor-Überprüfungen mehr an diesem Computer benötigt. +Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertrauenswürdig ist, können Sie hier den Status <i>aller </i>Computer zurücksetzen. @@ -5225,7 +5225,7 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr label_options.lines_mode.help - Twig Dokumentation und dem Wiki.]]> + Wenn Sie hier Twig auswählen, wird das Contentfeld als Twig-Template interpretiert. Weitere Hilfe gibt es in der <a href="https://twig.symfony.com/doc/3.x/templates.html">Twig Dokumentation</a> und dem <a href="https://docs.part-db.de/usage/labels.html#twig-mode">Wiki</a>. @@ -7073,15 +7073,15 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr mass_creation.lines.placeholder - Element 1 Element 1.1 Element 1.1.1 Element 1.2 Element 2 Element 3 -Element 1 -> Element 1.1 -Element 1 -> Element 1.2]]> +Element 1 -> Element 1.1 +Element 1 -> Element 1.2 @@ -9057,7 +9057,7 @@ Element 1 -> Element 1.2]]> filter.bulk_import_job.status.stopped - Angehalten + Stopped @@ -9141,25 +9141,25 @@ Element 1 -> Element 1.2]]> filter.parameter_value_constraint.operator.< - + Typ. Wert < filter.parameter_value_constraint.operator.> - ]]> + Typ. Wert > filter.parameter_value_constraint.operator.<= - + Typ. Wert <= filter.parameter_value_constraint.operator.>= - =]]> + Typ. Wert >= @@ -9267,7 +9267,7 @@ Element 1 -> Element 1.2]]> parts_list.search.searching_for - %keyword%]]> + Suche Teile mit dem Suchbegriff <b>%keyword%</b> @@ -9927,13 +9927,13 @@ Element 1 -> Element 1.2]]> project.builds.number_of_builds_possible - %max_builds% Exemplare dieses Projektes zu bauen.]]> + Sie haben genug Bauteile auf Lager, um <b>%max_builds%</b> Exemplare dieses Projektes zu bauen. project.builds.check_project_status - "%project_status%". Sie sollten überprüfen, ob sie das Projekt mit diesem Status wirklich bauen wollen!]]> + Der aktuelle Projektstatus ist <b>"%project_status%"</b>. Sie sollten überprüfen, ob sie das Projekt mit diesem Status wirklich bauen wollen! @@ -10047,7 +10047,7 @@ Element 1 -> Element 1.2]]> entity.select.add_hint - um verschachtelte Strukturen anzulegen, z.B. "Element 1->Element 1.1"]]> + Nutzen Sie -> um verschachtelte Strukturen anzulegen, z.B. "Element 1->Element 1.1" @@ -10071,13 +10071,13 @@ Element 1 -> Element 1.2]]> homepage.first_steps.introduction - Dokumentation lesen oder anfangen, die folgenden Datenstrukturen anzulegen.]]> + Die Datenbank ist momentan noch leer. Sie möchten möglicherweise die <a href="%url%">Dokumentation</a> lesen oder anfangen, die folgenden Datenstrukturen anzulegen. homepage.first_steps.create_part - neues Bauteil erstellen.]]> + Oder Sie können direkt ein <a href="%url%">neues Bauteil erstellen</a>. @@ -10089,7 +10089,7 @@ Element 1 -> Element 1.2]]> homepage.forum.text - Diskussionsforum]]> + Für Fragen rund um Part-DB, nutze das <a class="link-external" rel="noopener" target="_blank" href="%href%">Diskussionsforum</a> @@ -10755,7 +10755,7 @@ Element 1 -> Element 1.2]]> parts.import.help_documentation - Dokumentation für weiter Informationen über das Dateiformat.]]> + Konsultieren Sie die <a href="%link%">Dokumentation</a> für weiter Informationen über das Dateiformat. @@ -10947,7 +10947,7 @@ Element 1 -> Element 1.2]]> part.filter.lessThanDesired - + Weniger vorhanden als gewünscht (Gesamtmenge < Mindestmenge) @@ -11723,13 +11723,13 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön part.merge.confirm.title - %other% in %target% zusammenführen?]]> + Möchten Sie wirklich <b>%other%</b> in <b>%target%</b> zusammenführen? part.merge.confirm.message - %other% wird gelöscht, und das aktuelle Bauteil wird mit den angezeigten Daten gespeichert.]]> + <b>%other%</b> wird gelöscht, und das aktuelle Bauteil wird mit den angezeigten Daten gespeichert. @@ -12083,7 +12083,7 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön settings.ips.element14.apiKey.help - https://partner.element14.com/ für einen API-Schlüssel registrieren.]]> + Sie können sich unter <a href="https://partner.element14.com/">https://partner.element14.com/</a> für einen API-Schlüssel registrieren. @@ -12095,7 +12095,7 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön settings.ips.element14.storeId.help - hier.]]> + Die Domain des Shops, aus dem die Daten abgerufen werden sollen. Diese bestimmt die Sprache und Währung der Ergebnisse. Eine Liste der gültigen Domains finden Sie <a href="https://partner.element14.com/docs/Product_Search_API_REST__Description">hier</a>. @@ -12113,7 +12113,7 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön settings.ips.tme.token.help - https://developers.tme.eu/en/ erhalten.]]> + Sie können einen API-Token und einen geheimen Schlüssel unter <a href="https://developers.tme.eu/en/">https://developers.tme.eu/en/</a> erhalten. @@ -12161,7 +12161,7 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön settings.ips.mouser.apiKey.help - https://eu.mouser.com/api-hub/ für einen API-Schlüssel registrieren.]]> + Sie können sich unter <a href="https://eu.mouser.com/api-hub/">https://eu.mouser.com/api-hub/</a> für einen API-Schlüssel registrieren. @@ -12209,7 +12209,7 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön settings.ips.mouser.searchOptions.rohsAndInStock - + Sofort verfügbar & RoHS konform @@ -12239,7 +12239,7 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön settings.system.attachments - + Anhänge & Dateien @@ -12263,7 +12263,7 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön settings.system.attachments.allowDownloads.help - Achtung: Dies kann ein Sicherheitsrisiko darstellen, da Benutzer dadurch möglicherweise über die Part-DB auf Intranet-Ressourcen zugreifen können!]]> + Mit dieser Option können Benutzer externe Dateien in die Part-DB herunterladen, indem sie eine URL angeben. <b>Achtung: Dies kann ein Sicherheitsrisiko darstellen, da Benutzer dadurch möglicherweise über die Part-DB auf Intranet-Ressourcen zugreifen können!</b> @@ -12305,7 +12305,7 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön settings.system.history.saveChangedFields - Speichern, welche Felder eines Elements in Protokolleinträgen geändert wurden. + Speichern, welche Felder eines Elements in Protokolleinträgen geändert wurden @@ -12437,8 +12437,8 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön settings.system.localization.base_currency_description - Bitte beachten Sie, dass die Währungen bei einer Änderung dieses Wertes nicht umgerechnet werden. Wenn Sie also die Basiswährung ändern, nachdem Sie bereits Preisinformationen hinzugefügt haben, führt dies zu falschen Preisen!]]> + Die Währung, in der Preisinformationen und Wechselkurse gespeichert werden. Diese Währung wird angenommen, wenn für eine Preisinformation keine Währung festgelegt ist. +<b>Bitte beachten Sie, dass die Währungen bei einer Änderung dieses Wertes nicht umgerechnet werden. Wenn Sie also die Basiswährung ändern, nachdem Sie bereits Preisinformationen hinzugefügt haben, führt dies zu falschen Preisen!</b> @@ -12468,7 +12468,7 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön settings.misc.kicad_eda.category_depth.help - 0, um weitere Ebenen anzuzeigen. Setzen Sie den Wert auf -1, um alle Teile der Part-DB innerhalb einer einzigen Kategorie in KiCad anzuzeigen.]]> + Dieser Wert bestimmt die Tiefe des Kategoriebaums, der in KiCad sichtbar ist. 0 bedeutet, dass nur die Kategorien der obersten Ebene sichtbar sind. Setzen Sie den Wert auf > 0, um weitere Ebenen anzuzeigen. Setzen Sie den Wert auf -1, um alle Teile der Part-DB innerhalb einer einzigen Kategorie in KiCad anzuzeigen. @@ -12486,7 +12486,7 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön settings.behavior.sidebar.items.help - + Die Menüs, die standardmäßig in der Seitenleiste angezeigt werden. Die Reihenfolge der Elemente kann per Drag & Drop geändert werden. @@ -12534,7 +12534,7 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön settings.behavior.table.parts_default_columns.help - + Die Spalten, die standardmäßig in Bauteiltabellen angezeigt werden sollen. Die Reihenfolge der Elemente kann per Drag & Drop geändert werden. @@ -12588,7 +12588,7 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön settings.ips.oemsecrets.sortMode.M - + Vollständigkeit & Herstellername @@ -12825,6 +12825,12 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön Systemeinstellungen + + + tree.tools.system.update_manager + Update-Manager + + settings.tooltip.overrideable_by_env @@ -13248,7 +13254,7 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön settings.behavior.homepage.items.help - + Die Elemente, die auf der Startseite angezeigt werden sollen. Die Reihenfolge kann per Drag & Drop geändert werden. @@ -13962,7 +13968,7 @@ Bitte beachten Sie, dass Sie sich nicht als deaktivierter Benutzer ausgeben kön settings.system.localization.language_menu_entries.description - + Die Sprachen, die im Sprachen Dropdown-Menü angezeigt werden sollen. Die Reihenfolge kann via Drag&Drop geändert werden. Lassen Sie das Feld leer, um alle verfügbaren Sprachen anzuzeigen. @@ -14284,5 +14290,641 @@ Buerklin-API-Authentication-Server: Transportfehler beim Abrufen von Informationen von den Anbietern. Überprüfen Sie, ob Ihr Server über einen Internetzugang verfügt. Weitere Informationen finden Sie in den Serverprotokollen. Transportfehler beim Abrufen von Informationen von den Anbietern. Überprüfen Sie, ob Ihr Server über einen Internetzugang verfügt. Weitere Informationen finden Sie in den Serverprotokollen. + + + update_manager.title + Update-Manager + + + + + update_manager.new + Neu + + + + + update_manager.current_installation + Aktuelle Installation + + + + + update_manager.version + Version + + + + + update_manager.installation_type + Installationsart + + + + + update_manager.git_branch + Git-Branch + + + + + update_manager.git_commit + Git-Commit + + + + + update_manager.local_changes + Lokale Änderungen + + + + + update_manager.commits_behind + Commits zurück + + + + + update_manager.auto_update_supported + Automatische Aktualisierung unterstützt + + + + + update_manager.refresh + Aktualisieren + + + + + update_manager.latest_release + update_manager.latest_release + + + + + update_manager.tag + Tag + + + + + update_manager.released + Veröffentlicht + + + + + update_manager.release_notes + Release Notes + + + + + update_manager.view + Ansehen + + + + + update_manager.view_on_github + Auf GitHub ansehen + + + + + update_manager.view_release + update_manager.view_release + + + + + update_manager.could_not_fetch_releases + Konnte keine Release-Informationen abrufen. Überprüfen Sie Ihre Internetverbindung. + + + + + update_manager.how_to_update + Wie man aktualisiert + + + + + update_manager.cli_instruction + Um Part-DB zu aktualisieren, führen Sie einen der folgenden Befehle in Ihrem Terminal aus: + + + + + update_manager.check_for_updates + Auf Updates prüfen + + + + + update_manager.update_to_latest + Update to latest version + + + + + update_manager.update_to_specific + Auf bestimmte Version aktualisieren + + + + + update_manager.cli_recommendation + Aus Sicherheits- und Zuverlässigkeitsgründen sollten Updates über die Befehlszeilenschnittstelle durchgeführt werden. Der Aktualisierungsprozess erstellt automatisch eine Sicherung, aktiviert den Wartungsmodus und führt Migrationen durch. + + + + + update_manager.up_to_date + Up to date + + + + + update_manager.newer + Neuer + + + + + update_manager.current + Aktuell + + + + + update_manager.older + Älter + + + + + update_manager.prerelease + Vorabversion + + + + + update_manager.status + Status + + + + + update_manager.available_versions + Verfügbare Versionen + + + + + update_manager.no_releases_found + Keine Veröffentlichungen gefunden + + + + + update_manager.view_release_notes + update_manager.view_release_notes + + + + + update_manager.update_logs + Aktualisierungsprotokolle + + + + + update_manager.backups + Backups + + + + + update_manager.date + Datum + + + + + update_manager.log_file + Protokolle + + + + + update_manager.no_logs_found + Keine Protokolle gefunden + + + + + update_manager.file + Datei + + + + + update_manager.size + Größe + + + + + update_manager.no_backups_found + Keine Backups gefunden + + + + + update_manager.validation_issues + Validierungsprobleme + + + + + update_manager.maintenance_mode_active + Wartungsmodus aktiv + + + + + update_manager.update_in_progress + Ein Update läuft bereits + + + + + update_manager.started_at + Gestartet am + + + + + update_manager.new_version_available.message + Part-DB Version %version% ist ab sofort verfügbar! Erwägen Sie ein Update, um die neuesten Features und Sicherheitsverbesserungen zu nutzen. + + + + + update_manager.changelog + Changelog + + + + + update_manager.no_release_notes + Keine Änderungsprotokolle verfügbar für diese Version. + + + + + update_manager.back_to_update_manager + Zurück zum Update-Manager + + + + + update_manager.download_assets + Download + + + + + update_manager.update_to_this_version + Auf diese Version aktualisieren + + + + + update_manager.run_command_to_update + update_manager.run_command_to_update + + + + + update_manager.log_viewer + update_manager.log_viewer + + + + + update_manager.update_log + update_manager.update_log + + + + + update_manager.bytes + update_manager.bytes + + + + + perm.system.manage_updates + perm.system.manage_updates + + + + + update_manager.create_backup + update_manager.create_backup + + + + + update_manager.confirm_update + update_manager.confirm_update + + + + + update_manager.already_up_to_date + update_manager.already_up_to_date + + + + + update_manager.progress.title + update_manager.progress.title + + + + + update_manager.progress.updating + update_manager.progress.updating + + + + + update_manager.progress.completed + update_manager.progress.completed + + + + + update_manager.progress.failed + update_manager.progress.failed + + + + + update_manager.progress.initializing + Initialisiere... + + + + + update_manager.progress.updating_to + Aktualisiere auf Version %version% + + + + + update_manager.progress.downgrading_to + Downgrade auf Version %version% + + + + + update_manager.progress.error + Fehler + + + + + update_manager.progress.success_message + Part-DB wurde erfolgreich aktualisiert! Sie müssen möglicherweise die Seite aktualisieren, um die neue Version zu sehen. + + + + + update_manager.progress.steps + Updateschritte + + + + + update_manager.progress.waiting + Warte auf Start des Updates... + + + + + update_manager.progress.back + Zurück zum Update-Manager + + + + + update_manager.progress.refresh_page + Seite aktualisieren + + + + + update_manager.progress.warning + Wichtig + + + + + update_manager.progress.do_not_close + Bitte schließen Sie die Seite nicht, während das Update läuft. Das Update wird fortgeführt sogar wenn Sie diese Seite schließen, aber Sie werden nicht inn der Lage sein, den Fortschritt zu beobachten. + + + + + update_manager.progress.auto_refresh + Diese Seite aktualisiert sich automatisch, um den Fortschritt anzuzeigen. + + + + + update_manager.progress.downgrade_title + Downgrade-Fortschritt + + + + + update_manager.progress.downgrade_completed + Downgrade abgeschlossen! + + + + + update_manager.progress.downgrade_failed + Downgrade fehlgeschlagen + + + + + update_manager.progress.downgrade_success_message + Part-DB wurde erfolgreich downgegraded! Sie müssen möglicherweise die Seite aktualisieren, um die neue Version zu sehen. + + + + + update_manager.progress.downgrade_steps + Downgrade-Schritte + + + + + update_manager.progress.downgrade_do_not_close + Bitte schließen Sie die Seite nicht, während das Downgrade läuft. Das Update wird fortgeführt sogar wenn Sie diese Seite schließen, aber Sie werden nicht inn der Lage sein, den Fortschritt zu beobachten. + + + + + update_manager.confirm_downgrade + Sind Sie sicher, dass sie Part-DB downgraden wollen? Dies wird auf eine ältere Version zurück gesetzt. Es wird ein Backup vor dem Downgrade erstellt. + + + + + update_manager.downgrade_removes_update_manager + WARNUNG: Das Downgrade entfernt den Update-Manager. Nach dem Downgrade, müssen Sie manuell über die Kommandozeile aktualisieren (git checkout, composer install, etc.). + + + + + update_manager.restore_backup + Backup wiederherstellen + + + + + update_manager.restore_confirm_title + Von Backup wiederherstellen + + + + + update_manager.restore_confirm_message + Sind Sie sicher dass die ihre Datenbank von diesem Backup wiederherstellen möchten? + + + + + update_manager.restore_confirm_warning + WARNUNG: Dies wird ihre aktuelle Datenbank überschreiben. Diese Aktion kann nicht rückgängig gemacht werden! Stellen Sie sicher dass sie ein aktuelles Backup haben, bevor Sie fortfahren. + + + + + update_manager.web_updates_disabled + Web-Updates deaktiviert + + + + + update_manager.web_updates_disabled_hint + Web-basierte Aktualisierungen wurden vom Server-Administrator deaktiviert. Nutzen Sie das CLI command "php bin/console partdb:update" um Updates durchzuführen. + + + + + update_manager.backup_restore_disabled + Backup Wiederherstellungen wurden durch Serverkonfiguration deaktiviert. + + + + + settings.ips.conrad + Conrad + + + + + settings.ips.conrad.shopID + Shop ID + + + + + settings.ips.conrad.shopID.description + Die Version des Conrad-Shops, für die Sie Ergebnisse erhalten möchten. Dies bestimmt die Sprache, Preise und Währung der Ergebnisse. Wenn sowohl eine B2B- als auch eine B2C-Version verfügbar ist, wählen Sie die B2C-Version, wenn Sie Preise inklusive MwSt. wünschen. + + + + + settings.ips.conrad.attachment_language_filter + Sprachfilter für Dateianhänge + + + + + settings.ips.conrad.attachment_language_filter.description + Inkludiere nur Dateianhänge mit ausgewählten Sprachen in Ergebnissen. + + + + + settings.ips.generic_web_provider + Generischer Web URL Provider + + + + + settings.ips.generic_web_provider.description + Dieser Informationsanbieter ermöglicht es, grundlegende Teileinformationen von vielen Shop-Seiten-URLs abzurufen. + + + + + settings.ips.generic_web_provider.enabled.help + settings.ips.generic_web_provider.enabled.help + + + + + info_providers.from_url.title + Erstelle [part] aus URL + + + + + info_providers.from_url.url.label + URL + + + + + info_providers.from_url.no_part_found + Es konnte kein Bauteil in der gegebenen URL gefunden werden. Sind Sie sicher, dass dies eine gültige Shop URL ist? + + + + + info_providers.from_url.help + Erstellt einen Teil basierend auf der angegebenen URL. Es wird versucht, diesen Teil an einen vorhandenen Informationsanbieter zu delegieren, falls möglich. Andernfalls wird versucht, grundlegende Daten aus den Metadaten der Webseite zu extrahieren. + + + + + update_manager.cant_auto_update + Kann nicht automatisch über die WebUI aktualisiert werden + + + + + update_manager.switch_to + Wechseln zu + + + + + update_manager.update_to + Update zu + + diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 89b03824..80c026e1 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -221,7 +221,7 @@ part.info.timetravel_hint - Please note that this feature is experimental, so the info may not be correct.]]> + This is how the part appeared before %timestamp%. <i>Please note that this feature is experimental, so the info may not be correct.</i> @@ -649,10 +649,10 @@ user.edit.tfa.disable_tfa_message - all active two-factor authentication methods of the user and delete the backup codes! -
-The user will have to set up all two-factor authentication methods again and print new backup codes!

-Only do this if you are absolutely sure about the identity of the user (seeking help), otherwise the account could be compromised by an attacker!]]>
+ This will disable <b>all active two-factor authentication methods of the user</b> and delete the <b>backup codes</b>! +<br> +The user will have to set up all two-factor authentication methods again and print new backup codes! <br><br> +<b>Only do this if you are absolutely sure about the identity of the user (seeking help), otherwise the account could be compromised by an attacker!</b>
@@ -803,9 +803,9 @@ The user will have to set up all two-factor authentication methods again and pri entity.delete.message - -Sub elements will be moved upwards.]]> + This can not be undone! +<br> +Sub elements will be moved upwards. @@ -1359,7 +1359,7 @@ Sub elements will be moved upwards.]]> homepage.github.text - GitHub project page]]> + Source, downloads, bug reports, to-do-list etc. can be found on <a href="%href%" class="link-external" target="_blank">GitHub project page</a> @@ -1381,7 +1381,7 @@ Sub elements will be moved upwards.]]> homepage.help.text - GitHub page]]> + Help and tips can be found in Wiki the <a href="%href%" class="link-external" target="_blank">GitHub page</a> @@ -1623,7 +1623,7 @@ Sub elements will be moved upwards.]]> email.pw_reset.fallback - %url% and enter the following info]]> + If this does not work for you, go to <a href="%url%">%url%</a> and enter the following info @@ -1653,7 +1653,7 @@ Sub elements will be moved upwards.]]> email.pw_reset.valid_unit %date% - %date%.]]> + The reset token will be valid until <i>%date%</i>. @@ -3526,8 +3526,8 @@ Sub elements will be moved upwards.]]> tfa_google.disable.confirm_message - -Also note that without two-factor authentication, your account is no longer as well protected against attackers!]]> + If you disable the Authenticator App, all backup codes will be deleted, so you may need to reprint them.<br> +Also note that without two-factor authentication, your account is no longer as well protected against attackers! @@ -3547,7 +3547,7 @@ Also note that without two-factor authentication, your account is no longer as w tfa_google.step.download - Google Authenticator oder FreeOTP Authenticator)]]> + Download an authenticator app (e.g. <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a> oder <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp">FreeOTP Authenticator</a>) @@ -3789,8 +3789,8 @@ Also note that without two-factor authentication, your account is no longer as w tfa_trustedDevices.explanation - all computers here.]]> + When checking the second factor, the current computer can be marked as trustworthy, so no more two-factor checks on this computer are needed. +If you have done this incorrectly or if a computer is no longer trusted, you can reset the status of <i>all </i>computers here. @@ -5226,7 +5226,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can label_options.lines_mode.help - Twig documentation and Wiki for more information.]]> + If you select Twig here, the content field is interpreted as Twig template. See <a href="https://twig.symfony.com/doc/3.x/templates.html">Twig documentation</a> and <a href="https://docs.part-db.de/usage/labels.html#twig-mode">Wiki</a> for more information. @@ -7074,15 +7074,15 @@ Exampletown mass_creation.lines.placeholder - Element 1 Element 1.1 Element 1.1.1 Element 1.2 Element 2 Element 3 -Element 1 -> Element 1.1 -Element 1 -> Element 1.2]]> +Element 1 -> Element 1.1 +Element 1 -> Element 1.2 @@ -7272,7 +7272,7 @@ Element 1 -> Element 1.2]]> user.firstName.placeholder - e.g John + e.g. John @@ -9142,25 +9142,25 @@ Element 1 -> Element 1.2]]> filter.parameter_value_constraint.operator.< - + Typ. Value < filter.parameter_value_constraint.operator.> - ]]> + Typ. Value > filter.parameter_value_constraint.operator.<= - + Typ. Value <= filter.parameter_value_constraint.operator.>= - =]]> + Typ. Value >= @@ -9268,7 +9268,7 @@ Element 1 -> Element 1.2]]> parts_list.search.searching_for - %keyword%]]> + Searching parts with keyword <b>%keyword%</b> @@ -10048,7 +10048,7 @@ Element 1 -> Element 1.2]]> entity.select.add_hint - to create nested structures, e.g. "Node 1->Node 1.1"]]> + Use -> to create nested structures, e.g. "Node 1->Node 1.1" @@ -10072,13 +10072,13 @@ Element 1 -> Element 1.2]]> homepage.first_steps.introduction - documentation or start to creating the following data structures:]]> + Your database is still empty. You might want to read the <a href="%url%">documentation</a> or start to creating the following data structures: homepage.first_steps.create_part - create a new part.]]> + Or you can directly <a href="%url%">create a new part</a>. @@ -10090,7 +10090,7 @@ Element 1 -> Element 1.2]]> homepage.forum.text - discussion forum]]> + For questions about Part-DB use the <a href="%href%" class="link-external" target="_blank">discussion forum</a> @@ -10756,7 +10756,7 @@ Element 1 -> Element 1.2]]> parts.import.help_documentation - documentation for more information on the file format.]]> + See the <a href="%link%">documentation</a> for more information on the file format. @@ -10948,7 +10948,7 @@ Element 1 -> Element 1.2]]> part.filter.lessThanDesired - + In stock less than desired (total amount < min. amount) @@ -11724,13 +11724,13 @@ Please note, that you can not impersonate a disabled user. If you try you will g part.merge.confirm.title - %other% into %target%?]]> + Do you really want to merge <b>%other%</b> into <b>%target%</b>? part.merge.confirm.message - %other% will be deleted, and the part will be saved with the shown information.]]> + <b>%other%</b> will be deleted, and the part will be saved with the shown information. @@ -12084,7 +12084,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g settings.ips.element14.apiKey.help - https://partner.element14.com/.]]> + You can register for an API key on <a href="https://partner.element14.com/">https://partner.element14.com/</a>. @@ -12096,7 +12096,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g settings.ips.element14.storeId.help - here for a list of valid domains.]]> + The store domain to retrieve the data from. This decides the language and currency of results. See <a href="https://partner.element14.com/docs/Product_Search_API_REST__Description">here</a> for a list of valid domains. @@ -12114,7 +12114,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g settings.ips.tme.token.help - https://developers.tme.eu/en/.]]> + You can get an API token and secret on <a href="https://developers.tme.eu/en/">https://developers.tme.eu/en/</a>. @@ -12162,7 +12162,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g settings.ips.mouser.apiKey.help - https://eu.mouser.com/api-hub/.]]> + You can register for an API key on <a href="https://eu.mouser.com/api-hub/">https://eu.mouser.com/api-hub/</a>. @@ -12240,7 +12240,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g settings.system.attachments - + Attachments & Files @@ -12264,7 +12264,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g settings.system.attachments.allowDownloads.help - Attention: This can be a security issue, as it might allow users to access intranet ressources via Part-DB!]]> + With this option users can download external files into Part-DB by providing an URL. <b>Attention: This can be a security issue, as it might allow users to access intranet ressources via Part-DB!</b> @@ -12438,8 +12438,8 @@ Please note, that you can not impersonate a disabled user. If you try you will g settings.system.localization.base_currency_description - Please note that the currencies are not converted, when changing this value. So changing the default currency after you already added price information, will result in wrong prices!]]> + The currency that is used to store price information and exchange rates in. This currency is assumed, when no currency is set for a price information. +<b>Please note that the currencies are not converted, when changing this value. So changing the default currency after you already added price information, will result in wrong prices!</b> @@ -12469,7 +12469,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g settings.misc.kicad_eda.category_depth.help - 0 to show more levels. Set to -1, to show all parts of Part-DB inside a sigle cnategory in KiCad.]]> + This value determines the depth of the category tree, that is visible inside KiCad. 0 means that only the top level categories are visible. Set to a value > 0 to show more levels. Set to -1, to show all parts of Part-DB inside a sigle cnategory in KiCad. @@ -12487,7 +12487,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g settings.behavior.sidebar.items.help - + The menus which appear at the sidebar by default. Order of items can be changed via drag & drop. @@ -12535,7 +12535,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g settings.behavior.table.parts_default_columns.help - + The columns to show by default in part tables. Order of items can be changed via drag & drop. @@ -12589,7 +12589,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g settings.ips.oemsecrets.sortMode.M - + Completeness & Manufacturer name @@ -13255,7 +13255,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g settings.behavior.homepage.items.help - + The items to show at the homepage. Order can be changed via drag & drop. @@ -13969,7 +13969,7 @@ Please note, that you can not impersonate a disabled user. If you try you will g settings.system.localization.language_menu_entries.description - + The languages to show in the language drop-down menu. Order can be changed via drag & drop. Leave empty to show all available languages. @@ -14911,19 +14911,19 @@ Buerklin-API Authentication server: - + update_manager.cant_auto_update Cannot update automatically from WebUI - + update_manager.switch_to Switch to - + update_manager.update_to Update to diff --git a/translations/security.uk.xlf b/translations/security.uk.xlf new file mode 100644 index 00000000..12737cf3 --- /dev/null +++ b/translations/security.uk.xlf @@ -0,0 +1,23 @@ + + + + + + user.login_error.user_disabled + Ваш обліковий запис вимкнено! Зверніться до адміністратора, якщо вважаєте це помилкою. + + + + + saml.error.cannot_login_local_user_per_saml + Ви не можете увійти як локальний користувач через SSO! Використовуйте пароль локального користувача. + + + + + saml.error.cannot_login_saml_user_locally + Ви не можете використовувати локальну автентифікацію для входу як користувач SAML! Скористайтеся входом через SSO. + + + + diff --git a/translations/validators.uk.xlf b/translations/validators.uk.xlf new file mode 100644 index 00000000..3f14daeb --- /dev/null +++ b/translations/validators.uk.xlf @@ -0,0 +1,375 @@ + + + + + + Part-DB1\src\Entity\Attachments\AttachmentContainingDBElement.php:0 + Part-DB1\src\Entity\Attachments\AttachmentType.php:0 + Part-DB1\src\Entity\Base\AbstractCompany.php:0 + Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 + Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 + Part-DB1\src\Entity\Devices\Device.php:0 + Part-DB1\src\Entity\LabelSystem\LabelProfile.php:0 + Part-DB1\src\Entity\Parts\Category.php:0 + Part-DB1\src\Entity\Parts\Footprint.php:0 + Part-DB1\src\Entity\Parts\Manufacturer.php:0 + Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 + Part-DB1\src\Entity\Parts\Part.php:0 + Part-DB1\src\Entity\Parts\Part.php:0 + Part-DB1\src\Entity\Parts\Storelocation.php:0 + Part-DB1\src\Entity\Parts\Supplier.php:0 + Part-DB1\src\Entity\PriceInformations\Currency.php:0 + Part-DB1\src\Entity\UserSystem\Group.php:0 + Part-DB1\src\Entity\UserSystem\User.php:0 + Part-DB1\src\Entity\Attachments\AttachmentType.php:0 + Part-DB1\src\Entity\Base\AbstractCompany.php:0 + Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 + Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 + Part-DB1\src\Entity\Devices\Device.php:0 + Part-DB1\src\Entity\Parts\Category.php:0 + Part-DB1\src\Entity\Parts\Footprint.php:0 + Part-DB1\src\Entity\Parts\Manufacturer.php:0 + Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 + Part-DB1\src\Entity\Parts\Part.php:0 + Part-DB1\src\Entity\Parts\Storelocation.php:0 + Part-DB1\src\Entity\Parts\Supplier.php:0 + Part-DB1\src\Entity\PriceInformations\Currency.php:0 + Part-DB1\src\Entity\UserSystem\Group.php:0 + Part-DB1\src\Entity\UserSystem\User.php:0 + + + part.master_attachment.must_be_picture + Вкладення для попереднього перегляду має бути коректним зображенням! + + + + + Part-DB1\src\Entity\Attachments\AttachmentType.php:0 + Part-DB1\src\Entity\Base\AbstractCompany.php:0 + Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 + Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 + Part-DB1\src\Entity\Devices\Device.php:0 + Part-DB1\src\Entity\Parts\Category.php:0 + Part-DB1\src\Entity\Parts\Footprint.php:0 + Part-DB1\src\Entity\Parts\Manufacturer.php:0 + Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 + Part-DB1\src\Entity\Parts\Storelocation.php:0 + Part-DB1\src\Entity\Parts\Supplier.php:0 + Part-DB1\src\Entity\PriceInformations\Currency.php:0 + Part-DB1\src\Entity\UserSystem\Group.php:0 + Part-DB1\src\Entity\Attachments\AttachmentType.php:0 + Part-DB1\src\Entity\Base\AbstractCompany.php:0 + Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 + Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 + Part-DB1\src\Entity\Devices\Device.php:0 + Part-DB1\src\Entity\Parts\Category.php:0 + Part-DB1\src\Entity\Parts\Footprint.php:0 + Part-DB1\src\Entity\Parts\Manufacturer.php:0 + Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 + Part-DB1\src\Entity\Parts\Storelocation.php:0 + Part-DB1\src\Entity\Parts\Supplier.php:0 + Part-DB1\src\Entity\PriceInformations\Currency.php:0 + Part-DB1\src\Entity\UserSystem\Group.php:0 + src\Entity\AttachmentType.php:0 + src\Entity\Category.php:0 + src\Entity\Company.php:0 + src\Entity\Device.php:0 + src\Entity\Footprint.php:0 + src\Entity\Group.php:0 + src\Entity\Manufacturer.php:0 + src\Entity\PartsContainingDBElement.php:0 + src\Entity\Storelocation.php:0 + src\Entity\StructuralDBElement.php:0 + src\Entity\Supplier.php:0 + + + structural.entity.unique_name + Елемент із такою назвою вже існує на цьому рівні! + + + + + Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 + Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 + Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 + Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 + Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 + Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 + Part-DB1\src\Entity\Parameters\GroupParameter.php:0 + Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 + Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 + Part-DB1\src\Entity\Parameters\PartParameter.php:0 + Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 + Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 + + + parameters.validator.min_lesser_typical + Значення має бути меншим або рівним типовому значенню ({{ compared_value }}). + + + + + Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 + Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 + Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 + Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 + Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 + Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 + Part-DB1\src\Entity\Parameters\GroupParameter.php:0 + Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 + Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 + Part-DB1\src\Entity\Parameters\PartParameter.php:0 + Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 + Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 + + + parameters.validator.min_lesser_max + Значення має бути меншим за максимальне значення ({{ compared_value }}). + + + + + Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 + Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 + Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 + Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 + Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 + Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 + Part-DB1\src\Entity\Parameters\GroupParameter.php:0 + Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 + Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 + Part-DB1\src\Entity\Parameters\PartParameter.php:0 + Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 + Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 + + + parameters.validator.max_greater_typical + Значення має бути більшим або рівним типовому значенню ({{ compared_value }}). + + + + + Part-DB1\src\Entity\UserSystem\User.php:0 + Part-DB1\src\Entity\UserSystem\User.php:0 + + + validator.user.username_already_used + Користувач із таким ім'ям вже існує + + + + + Part-DB1\src\Entity\UserSystem\User.php:0 + Part-DB1\src\Entity\UserSystem\User.php:0 + + + user.invalid_username + Ім'я користувача має містити лише літери, цифри, підкреслення, крапки, знаки плюс або мінус і не може починатися з @! + + + + + obsolete + + + validator.noneofitschild.self + Елемент не може бути власним батьківським елементом! + + + + + obsolete + + + validator.noneofitschild.children + Ви не можете призначити дочірній елемент батьківським (це призведе до циклів)! + + + + + validator.select_valid_category + Будь ласка, виберіть коректну категорію! + + + + + validator.part_lot.only_existing + Неможливо додати нові деталі до цього місця, оскільки воно позначене як «Тільки наявні» + + + + + validator.part_lot.location_full.no_increase + Місце заповнене. Кількість не можна збільшити (нове значення має бути меншим за {{ old_amount }}). + + + + + validator.part_lot.location_full + Місце заповнене. Неможливо додати до нього нові деталі. + + + + + validator.part_lot.single_part + Це місце може містити лише одну деталь, і воно вже заповнене! + + + + + validator.attachment.must_not_be_null + Ви повинні вибрати тип вкладення! + + + + + validator.orderdetail.supplier_must_not_be_null + Ви повинні вибрати постачальника! + + + + + validator.measurement_unit.use_si_prefix_needs_unit + Щоб увімкнути префікси СІ, необхідно вказати символ одиниці вимірювання! + + + + + part.ipn.must_be_unique + Внутрішній номер деталі має бути унікальним. {{ value }} вже використовується! + + + + + validator.project.bom_entry.name_or_part_needed + Ви повинні вибрати деталь для запису специфікації (BOM) або вказати назву для запису без прив'язки до деталі. + + + + + project.bom_entry.name_already_in_bom + Запис специфікації (BOM) з такою назвою вже існує! + + + + + project.bom_entry.part_already_in_bom + Ця деталь вже є в специфікації (BOM)! + + + + + project.bom_entry.mountnames_quantity_mismatch + Кількість позиційних позначень має відповідати кількості у специфікації (BOM)! + + + + + project.bom_entry.can_not_add_own_builds_part + Ви не можете додати до специфікації (BOM) деталь, що є результатом складання цього ж проєкту. + + + + + project.bom_has_to_include_all_subelement_parts + Специфікація (BOM) проєкту має містити всі деталі складання підпроєктів. Деталь %part_name% проєкту %project_name% відсутня! + + + + + project.bom_entry.price_not_allowed_on_parts + Ціни недопустимі для записів специфікації (BOM), пов'язаних із деталлю. Визначте ціну безпосередньо в картці деталі. + + + + + validator.project_build.lot_bigger_than_needed + Ви вибрали для списання більшу кількість, ніж потрібно! Приберіть зайву кількість. + + + + + validator.project_build.lot_smaller_than_needed + Ви вибрали для списання меншу кількість, ніж потрібно для складання! Додайте кількість. + + + + + part.name.must_match_category_regex + Назва деталі не відповідає регулярному виразу, встановленому для категорії: %regex% + + + + + validator.attachment.name_not_blank + Вкажіть значення тут або завантажте файл, щоб автоматично використати його ім'я як назву вкладення. + + + + + validator.part_lot.owner_must_match_storage_location_owner + Власник цієї партії має збігатися з власником вибраного місця зберігання (%owner_name%)! + + + + + validator.part_lot.owner_must_not_be_anonymous + Власником партії не може бути анонімний користувач! + + + + + validator.part_association.must_set_an_value_if_type_is_other + Якщо ви вибрали тип «інше», ви повинні вказати для нього описове значення! + + + + + validator.part_association.part_cannot_be_associated_with_itself + Деталь не може бути пов'язана сама із собою! + + + + + validator.part_association.already_exists + Зв'язок із цією деталлю вже існує! + + + + + validator.part_lot.vendor_barcode_must_be_unique + Це значення штрих-коду постачальника вже використано в іншій партії. Штрих-код має бути унікальним! + + + + + validator.year_2038_bug_on_32bit + Через технічні обмеження неможливо вибрати дати після 19.01.2038 на 32-бітних системах! + + + + + validator.fileSize.invalidFormat + Неправильний формат розміру файлу. Використовуйте ціле число із суфіксом K, M або G для позначення кіло-, мега- або гігабайтів. + + + + + validator.invalid_range + Вказаний діапазон є недопустимим! + + + + + validator.google_code.wrong_code + Неправильний код. Переконайтеся, що програма-автентифікатор налаштована правильно, а час на сервері та пристрої автентифікації встановлено вірно. + + + + + settings.synonyms.type_synonyms.collection_type.duplicate + Для цього типу та мови переклад уже визначено! + + + + diff --git a/translations/validators.zh.xlf b/translations/validators.zh.xlf index 08c9f014..90775edf 100644 --- a/translations/validators.zh.xlf +++ b/translations/validators.zh.xlf @@ -1,7 +1,7 @@ - + Part-DB1\src\Entity\Attachments\AttachmentContainingDBElement.php:0 Part-DB1\src\Entity\Attachments\AttachmentType.php:0 @@ -42,7 +42,7 @@ 预览附件必须是有效的图片 - + Part-DB1\src\Entity\Attachments\AttachmentType.php:0 Part-DB1\src\Entity\Base\AbstractCompany.php:0 @@ -87,7 +87,7 @@ 相同层下已存在同名元素 - + Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 @@ -107,7 +107,7 @@ 值必须小于或等于标称值 ({{compare_value}})。 - + Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 @@ -127,7 +127,7 @@ 值必须小于最大值 ({{compare_value}})。 - + Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 @@ -147,7 +147,7 @@ 值必须大于或等于标称值 ({{compare_value}})。 - + Part-DB1\src\Entity\UserSystem\User.php:0 Part-DB1\src\Entity\UserSystem\User.php:0 @@ -157,7 +157,7 @@ 已存在同名用户 - + Part-DB1\src\Entity\UserSystem\User.php:0 Part-DB1\src\Entity\UserSystem\User.php:0 @@ -167,7 +167,7 @@ 用户名只能包含字母、数字、下划线、点、加号或减号。 - + obsolete @@ -176,7 +176,7 @@ 一个元素不能是它自己的父元素。 - + obsolete @@ -185,167 +185,191 @@ 不能将子元素指定为父元素(会导致循环)。 - + validator.select_valid_category 请选择一个有效的类别。 - + validator.part_lot.only_existing 无法将新部件添加到此位置,因为它被标记为 "仅现有" - + validator.part_lot.location_full.no_increase 位置已满。数量无法增加(增加值必须小于 {{ old_amount }})。 - + validator.part_lot.location_full 位置已满。无法添加新部件。 - + validator.part_lot.single_part 该位置只能储存一个部件。 - + validator.attachment.must_not_be_null 必须选择附件类型。 - + validator.orderdetail.supplier_must_not_be_null 必须选择供应商。 - + validator.measurement_unit.use_si_prefix_needs_unit 要启用 SI 前缀,必须设置单位符号。 - + part.ipn.must_be_unique 内部部件号是唯一的。{{ value }} 已被使用! - + validator.project.bom_entry.name_or_part_needed 您必须为 BOM 条目选择部件,或为非部件 BOM 条目设置名称。 - + project.bom_entry.name_already_in_bom 已存在具有该名称的 BOM 条目。 - + project.bom_entry.part_already_in_bom 该部件已存在于 BOM 中。 - + project.bom_entry.mountnames_quantity_mismatch 挂载名称的数量必须与 BOM 数量匹配。 - + project.bom_entry.can_not_add_own_builds_part 您无法将项目自己的生产映射部件添加到 BOM 中。 - + project.bom_has_to_include_all_subelement_parts 项目 BOM 必须包括所有子项目生产的部件。项目 %project_name% 的 %part_name% 部件丢失。 - + project.bom_entry.price_not_allowed_on_parts 与部件关联的 BOM 条目上不允许有价格。请在部件上定义价格。 - + validator.project_build.lot_bigger_than_needed 选择的提取数量超出所需数量。 - + validator.project_build.lot_smaller_than_needed 选择的提取数量少于所需数量。 - + part.name.must_match_category_regex 部件名称与类别指定的正则表达式不匹配:%regex% - + validator.attachment.name_not_blank 手动设置值,或上传文件使用其文件名作为附件的名称。 - + validator.part_lot.owner_must_match_storage_location_owner 该 批次的所有者 必须与 所选存储位置的所有者(%owner_name%) 匹配! - + validator.part_lot.owner_must_not_be_anonymous 批次所有者不能是匿名用户。 - + validator.part_association.must_set_an_value_if_type_is_other 如果将类型设置为 "other" 则必须为其设置一个描述性值。 - + validator.part_association.part_cannot_be_associated_with_itself 部件不能与自己关联。 - + validator.part_association.already_exists 与此部件的关联已存在。 - + validator.part_lot.vendor_barcode_must_be_unique 该供应商条码已在另一批次中使用。条形码必须是唯一的 - + validator.year_2038_bug_on_32bit 由于技术限制,在32位系统中无法选择2038年1月19日之后的日期! + + + validator.fileSize.invalidFormat + 文件大小格式无效。请使用整数并以 K、M 或 G 作为后缀,分别代表 KB、MB 或 GB。 + + + + + validator.invalid_range + 给定的范围无效 + + + + + validator.google_code.wrong_code + 验证码无效。请检查验证器应用设置是否正确,并确保服务器与认证设备的时间均已同步。 + + + + + settings.synonyms.type_synonyms.collection_type.duplicate + 该类型在此语言下已存在翻译定义! + + From b144f5e3839c2a9313679d7fa92059a4dfb00f3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 7 Feb 2026 17:13:49 +0100 Subject: [PATCH 081/172] Updated dependencies --- composer.lock | 91 ++++++++++++++++++++++++++------------------------- yarn.lock | 36 ++++++++++---------- 2 files changed, 64 insertions(+), 63 deletions(-) diff --git a/composer.lock b/composer.lock index 28d7c981..b56a61f9 100644 --- a/composer.lock +++ b/composer.lock @@ -3209,29 +3209,29 @@ }, { "name": "doctrine/deprecations", - "version": "1.1.5", + "version": "1.1.6", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "conflict": { - "phpunit/phpunit": "<=7.5 || >=13" + "phpunit/phpunit": "<=7.5 || >=14" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^12 || ^13", - "phpstan/phpstan": "1.4.10 || 2.1.11", + "doctrine/coding-standard": "^9 || ^12 || ^14", + "phpstan/phpstan": "1.4.10 || 2.1.30", "phpstan/phpstan-phpunit": "^1.0 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0", "psr/log": "^1 || ^2 || ^3" }, "suggest": { @@ -3251,9 +3251,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.5" + "source": "https://github.com/doctrine/deprecations/tree/1.1.6" }, - "time": "2025-04-07T20:06:18+00:00" + "time": "2026-02-07T07:09:04+00:00" }, { "name": "doctrine/doctrine-bundle", @@ -16522,16 +16522,16 @@ }, { "name": "tecnickcom/tc-lib-barcode", - "version": "2.4.22", + "version": "2.4.24", "source": { "type": "git", "url": "https://github.com/tecnickcom/tc-lib-barcode.git", - "reference": "ee997f9240f826a6a9274f55e2edb8f185871e30" + "reference": "605b92bfaf8ed2cba18a1c6603d90bc828aa3d5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/tc-lib-barcode/zipball/ee997f9240f826a6a9274f55e2edb8f185871e30", - "reference": "ee997f9240f826a6a9274f55e2edb8f185871e30", + "url": "https://api.github.com/repos/tecnickcom/tc-lib-barcode/zipball/605b92bfaf8ed2cba18a1c6603d90bc828aa3d5b", + "reference": "605b92bfaf8ed2cba18a1c6603d90bc828aa3d5b", "shasum": "" }, "require": { @@ -16546,7 +16546,7 @@ "pdepend/pdepend": "2.16.2", "phpcompatibility/php-compatibility": "^10.0.0@dev", "phpmd/phpmd": "2.15.0", - "phpunit/phpunit": "12.5.6 || 11.5.44 || 10.5.58", + "phpunit/phpunit": "12.5.8 || 11.5.50 || 10.5.63", "squizlabs/php_codesniffer": "4.0.1" }, "type": "library", @@ -16611,7 +16611,7 @@ ], "support": { "issues": "https://github.com/tecnickcom/tc-lib-barcode/issues", - "source": "https://github.com/tecnickcom/tc-lib-barcode/tree/2.4.22" + "source": "https://github.com/tecnickcom/tc-lib-barcode/tree/2.4.24" }, "funding": [ { @@ -16619,20 +16619,20 @@ "type": "custom" } ], - "time": "2026-01-24T12:40:59+00:00" + "time": "2026-02-04T19:57:11+00:00" }, { "name": "tecnickcom/tc-lib-color", - "version": "2.3.6", + "version": "2.3.8", "source": { "type": "git", "url": "https://github.com/tecnickcom/tc-lib-color.git", - "reference": "3d8ee89d83c1c60a275a0c1885f11370a4d86461" + "reference": "6331d57bd847d883652012a5c3594aa03aea4c50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tecnickcom/tc-lib-color/zipball/3d8ee89d83c1c60a275a0c1885f11370a4d86461", - "reference": "3d8ee89d83c1c60a275a0c1885f11370a4d86461", + "url": "https://api.github.com/repos/tecnickcom/tc-lib-color/zipball/6331d57bd847d883652012a5c3594aa03aea4c50", + "reference": "6331d57bd847d883652012a5c3594aa03aea4c50", "shasum": "" }, "require": { @@ -16643,7 +16643,7 @@ "pdepend/pdepend": "2.16.2", "phpcompatibility/php-compatibility": "^10.0.0@dev", "phpmd/phpmd": "2.15.0", - "phpunit/phpunit": "12.5.6 || 11.5.44 || 10.5.58", + "phpunit/phpunit": "12.5.8 || 11.5.50 || 10.5.63", "squizlabs/php_codesniffer": "4.0.1" }, "type": "library", @@ -16681,7 +16681,7 @@ ], "support": { "issues": "https://github.com/tecnickcom/tc-lib-color/issues", - "source": "https://github.com/tecnickcom/tc-lib-color/tree/2.3.6" + "source": "https://github.com/tecnickcom/tc-lib-color/tree/2.3.8" }, "funding": [ { @@ -16689,7 +16689,7 @@ "type": "custom" } ], - "time": "2026-01-24T12:39:16+00:00" + "time": "2026-02-04T19:55:28+00:00" }, { "name": "thecodingmachine/safe", @@ -19039,16 +19039,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.50", + "version": "11.5.51", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "fdfc727f0fcacfeb8fcb30c7e5da173125b58be3" + "reference": "ad14159f92910b0f0e3928c13e9b2077529de091" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fdfc727f0fcacfeb8fcb30c7e5da173125b58be3", - "reference": "fdfc727f0fcacfeb8fcb30c7e5da173125b58be3", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ad14159f92910b0f0e3928c13e9b2077529de091", + "reference": "ad14159f92910b0f0e3928c13e9b2077529de091", "shasum": "" }, "require": { @@ -19063,7 +19063,7 @@ "phar-io/version": "^3.2.1", "php": ">=8.2", "phpunit/php-code-coverage": "^11.0.12", - "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-file-iterator": "^5.1.1", "phpunit/php-invoker": "^5.0.1", "phpunit/php-text-template": "^4.0.1", "phpunit/php-timer": "^7.0.1", @@ -19075,6 +19075,7 @@ "sebastian/exporter": "^6.3.2", "sebastian/global-state": "^7.0.2", "sebastian/object-enumerator": "^6.0.1", + "sebastian/recursion-context": "^6.0.3", "sebastian/type": "^5.1.3", "sebastian/version": "^5.0.2", "staabm/side-effects-detector": "^1.0.5" @@ -19120,7 +19121,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.50" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.51" }, "funding": [ { @@ -19144,25 +19145,25 @@ "type": "tidelift" } ], - "time": "2026-01-27T05:59:18+00:00" + "time": "2026-02-05T07:59:30+00:00" }, { "name": "rector/rector", - "version": "2.3.5", + "version": "2.3.6", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "9442f4037de6a5347ae157fe8e6c7cda9d909070" + "reference": "ca9ebb81d280cd362ea39474dabd42679e32ca6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/9442f4037de6a5347ae157fe8e6c7cda9d909070", - "reference": "9442f4037de6a5347ae157fe8e6c7cda9d909070", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/ca9ebb81d280cd362ea39474dabd42679e32ca6b", + "reference": "ca9ebb81d280cd362ea39474dabd42679e32ca6b", "shasum": "" }, "require": { "php": "^7.4|^8.0", - "phpstan/phpstan": "^2.1.36" + "phpstan/phpstan": "^2.1.38" }, "conflict": { "rector/rector-doctrine": "*", @@ -19196,7 +19197,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.3.5" + "source": "https://github.com/rectorphp/rector/tree/2.3.6" }, "funding": [ { @@ -19204,7 +19205,7 @@ "type": "github" } ], - "time": "2026-01-28T15:22:48+00:00" + "time": "2026-02-06T14:25:06+00:00" }, { "name": "roave/security-advisories", @@ -19212,12 +19213,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "57534122edd70a2b3dbb02b65f2091efc57e4ab7" + "reference": "7ea2d110787f6807213e27a1255c6b858ad99d89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/57534122edd70a2b3dbb02b65f2091efc57e4ab7", - "reference": "57534122edd70a2b3dbb02b65f2091efc57e4ab7", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/7ea2d110787f6807213e27a1255c6b858ad99d89", + "reference": "7ea2d110787f6807213e27a1255c6b858ad99d89", "shasum": "" }, "conflict": { @@ -19697,7 +19698,7 @@ "microsoft/microsoft-graph": ">=1.16,<1.109.1|>=2,<2.0.1", "microsoft/microsoft-graph-beta": "<2.0.1", "microsoft/microsoft-graph-core": "<2.0.2", - "microweber/microweber": "<=2.0.19", + "microweber/microweber": "<2.0.20", "mikehaertl/php-shellcommand": "<1.6.1", "mineadmin/mineadmin": "<=3.0.9", "miniorange/miniorange-saml": "<1.4.3", @@ -19839,7 +19840,7 @@ "prestashop/blockwishlist": ">=2,<2.1.1", "prestashop/contactform": ">=1.0.1,<4.3", "prestashop/gamification": "<2.3.2", - "prestashop/prestashop": "<8.2.3", + "prestashop/prestashop": "<8.2.4|>=9.0.0.0-alpha1,<9.0.3", "prestashop/productcomments": "<5.0.2", "prestashop/ps_checkout": "<4.4.1|>=5,<5.0.5", "prestashop/ps_contactinfo": "<=3.3.2", @@ -20114,7 +20115,7 @@ "wikimedia/parsoid": "<0.12.2", "willdurand/js-translation-bundle": "<2.1.1", "winter/wn-backend-module": "<1.2.4", - "winter/wn-cms-module": "<1.0.476|>=1.1,<1.1.11|>=1.2,<1.2.7", + "winter/wn-cms-module": "<=1.2.9", "winter/wn-dusk-plugin": "<2.1", "winter/wn-system-module": "<1.2.4", "wintercms/winter": "<=1.2.3", @@ -20223,7 +20224,7 @@ "type": "tidelift" } ], - "time": "2026-02-03T19:20:38+00:00" + "time": "2026-02-05T22:08:29+00:00" }, { "name": "sebastian/cli-parser", diff --git a/yarn.lock b/yarn.lock index f3355f71..6bcc4032 100644 --- a/yarn.lock +++ b/yarn.lock @@ -91,9 +91,9 @@ semver "^6.3.1" "@babel/generator@^7.29.0": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.0.tgz#4cba5a76b3c71d8be31761b03329d5dc7768447f" - integrity sha512-vSH118/wwM/pLR38g/Sgk05sNtro6TlTJKuiMXDaZqPUfjTFcudpCOt00IhOfj+1BFAX+UFAlzCU+6WXr3GLFQ== + version "7.29.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.1.tgz#d09876290111abbb00ef962a7b83a5307fba0d50" + integrity sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw== dependencies: "@babel/parser" "^7.29.0" "@babel/types" "^7.29.0" @@ -2169,9 +2169,9 @@ integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/node@*": - version "25.2.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-25.2.0.tgz#015b7d228470c1dcbfc17fe9c63039d216b4d782" - integrity sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w== + version "25.2.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.2.1.tgz#378021f9e765bb65ba36de16f3c3a8622c1fa03d" + integrity sha512-CPrnr8voK8vC6eEtyRzvMpgp3VyVRhgclonE7qYi6P9sXwYb59ucfrnmFBTaP0yUi8Gk4yZg/LlTJULGxvTNsg== dependencies: undici-types "~7.16.0" @@ -2790,9 +2790,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759: - version "1.0.30001767" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001767.tgz#0279c498e862efb067938bba0a0aabafe8d0b730" - integrity sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ== + version "1.0.30001769" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz#1ad91594fad7dc233777c2781879ab5409f7d9c2" + integrity sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg== ccount@^2.0.0: version "2.0.1" @@ -4146,9 +4146,9 @@ get-symbol-description@^1.1.0: get-intrinsic "^1.2.6" get-tsconfig@^4.4.0: - version "4.13.1" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.13.1.tgz#ff96c0d98967df211c1ebad41f375ccf516c43fa" - integrity sha512-EoY1N2xCn44xU6750Sx7OjOIT59FkmstNc3X6y5xpz7D5cBtZRe/3pSlTkDJgqsOk3WwZPkWfonhhUJfttQo3w== + version "4.13.6" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.13.6.tgz#2fbfda558a98a691a798f123afd95915badce876" + integrity sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw== dependencies: resolve-pkg-maps "^1.0.0" @@ -6953,9 +6953,9 @@ semver@^6.0.0, semver@^6.3.1: integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.6.3: - version "7.7.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" - integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== + version "7.7.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a" + integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== serialize-javascript@^5.0.1: version "5.0.1" @@ -7455,9 +7455,9 @@ to-regex-range@^5.0.1: is-number "^7.0.0" tom-select@^2.1.0: - version "2.4.5" - resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.4.5.tgz#5c91355c9bf024ff5bc9389f8a2a370e4a28126a" - integrity sha512-ujZ5P10kRohKDFElklhkO4dRM+WkUEaytHhOuzbQkZ6MyiR8e2IwGKXab4v+ZNipE2queN8ztlb0MmRLqoM6QA== + version "2.4.6" + resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.4.6.tgz#23acdfc09ee235eb752706d418c9c9ae6ccf67f0" + integrity sha512-Hhqi15AiTl0+FjaHVTXvUkF3t7x4W5LXUHxLYlzp7r8bcIgGJyz9M+3ZvrHdTRvEmV4EmNyJPbHJJnZOjr5Iig== dependencies: "@orchidjs/sifter" "^1.1.0" "@orchidjs/unicode-variants" "^1.1.2" From 81dde6fa687d147082fac991129e7d62a12b93c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 7 Feb 2026 17:18:31 +0100 Subject: [PATCH 082/172] Only allow to set the DELETE method via HTTP method overriding This hardens security --- config/packages/framework.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml index 6843a177..dd8f30a5 100644 --- a/config/packages/framework.yaml +++ b/config/packages/framework.yaml @@ -1,3 +1,4 @@ +# yaml-language-server: $schema=../../vendor/symfony/dependency-injection/Loader/schema/services.schema.json # see https://symfony.com/doc/current/reference/configuration/framework.html framework: secret: '%env(APP_SECRET)%' @@ -8,6 +9,7 @@ framework: # Must be set to true, to enable the change of HTTP method via _method parameter, otherwise our delete routines does not work anymore # TODO: Rework delete routines to work without _method parameter as it is not recommended anymore (see https://github.com/symfony/symfony/issues/45278) http_method_override: true + allowed_http_method_override: ['DELETE'] # Allow users to configure trusted hosts via .env variables # see https://symfony.com/doc/current/reference/configuration/framework.html#trusted-hosts From aec53bd1dd1d65622c28735a7ea0ee94f75386f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 7 Feb 2026 17:33:32 +0100 Subject: [PATCH 083/172] Do not output HTML chars in translations escaped in CDATA to ensure consistentcy with crowdin XMLs This should avoid some unnecessary diffs in the future --- src/Translation/NoCDATAXliffFileDumper.php | 88 ++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 src/Translation/NoCDATAXliffFileDumper.php diff --git a/src/Translation/NoCDATAXliffFileDumper.php b/src/Translation/NoCDATAXliffFileDumper.php new file mode 100644 index 00000000..a18e4e3b --- /dev/null +++ b/src/Translation/NoCDATAXliffFileDumper.php @@ -0,0 +1,88 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Translation; + +use DOMDocument; +use DOMXPath; +use Symfony\Component\DependencyInjection\Attribute\AsDecorator; +use Symfony\Component\Translation\Dumper\FileDumper; +use Symfony\Component\Translation\MessageCatalogue; + +/** + * The goal of this class, is to ensure that the XLIFF dumper does not output CDATA, but instead outputs the text + * using the normal XML escaping. Crowdin outputs the translations without CDATA, we want to be consistent with that, to + * prevent unnecessary diffs in the translation files when we update them with translations from Crowdin. + */ +#[AsDecorator("translation.dumper.xliff")] +class NoCDATAXliffFileDumper extends FileDumper +{ + + public function __construct(private readonly FileDumper $decorated) + { + + } + + private function convertCDataToEscapedText(string $xmlContent): string + { + $dom = new DOMDocument(); + // Preserve whitespace to keep Symfony's formatting intact + $dom->preserveWhiteSpace = true; + $dom->formatOutput = true; + + // Load the XML (handle internal errors if necessary) + $dom->loadXML($xmlContent); + + $xpath = new DOMXPath($dom); + // Find all CDATA sections + $cdataNodes = $xpath->query('//node()/comment()|//node()/text()|//node()') ; + + // We specifically want CDATA sections. XPath 1.0 doesn't have a direct + // "cdata-section()" selector easily, so we iterate through all nodes + // and check their type. + + $nodesToRemove = []; + foreach ($xpath->query('//text() | //*') as $node) { + foreach ($node->childNodes as $child) { + if ($child->nodeType === XML_CDATA_SECTION_NODE) { + // Create a new text node with the content of the CDATA + // DOMDocument will automatically escape special chars on save + $newTextNode = $dom->createTextNode($child->textContent); + $node->replaceChild($newTextNode, $child); + } + } + } + + return $dom->saveXML(); + } + + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []): string + { + return $this->convertCDataToEscapedText($this->decorated->formatCatalogue($messages, $domain, $options)); + } + + protected function getExtension(): string + { + return $this->decorated->getExtension(); + } +} From dcdc990af1e92c1ecb313a384cf42709654f2fc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 7 Feb 2026 17:33:44 +0100 Subject: [PATCH 084/172] Fixed unnecessary colon in english translation --- translations/messages.en.xlf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 80c026e1..7aadca33 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -6383,7 +6383,7 @@ If you have done this incorrectly or if a computer is no longer trusted, you can log.collection_deleted.deleted - Deleted element: + Deleted element @@ -9928,13 +9928,13 @@ Element 1 -> Element 1.2 project.builds.number_of_builds_possible - %max_builds% builds of this [project].]]> + You have enough stocked to build <b>%max_builds%</b> builds of this [project]. project.builds.check_project_status - "%project_status%". You should check if you really want to build the [project] with this status!]]> + The current [project] status is <b>"%project_status%"</b>. You should check if you really want to build the [project] with this status! From 8104c474b7f820fc2c3d532aca8657c4baea15d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 7 Feb 2026 18:13:01 +0100 Subject: [PATCH 085/172] New translations messages.en.xlf (English) (#1226) --- translations/messages.en.xlf | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 7aadca33..483a6c88 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -14839,73 +14839,73 @@ Buerklin-API Authentication server: - + settings.ips.conrad Conrad - + settings.ips.conrad.shopID Shop ID - + settings.ips.conrad.shopID.description - The version of the conrad store you wanna get results from. This determines language, prices and currency of the results. If both a B2B and a B2C version if available, you should choose the B2C version if you want prices including VAT. + The version of the conrad store you wanna get results from. This determines language, prices and currency of the results. If both a B2B and a B2C version if available, you should choose the B2C version if you want prices including VAT. - + settings.ips.conrad.attachment_language_filter Language filter for attachments - + settings.ips.conrad.attachment_language_filter.description Only includes attachments in the selected languages in the results. - + settings.ips.generic_web_provider Generic Web URL Provider - + settings.ips.generic_web_provider.description This info provider allows to retrieve basic part information from many shop page URLs. - + settings.ips.generic_web_provider.enabled.help When the provider is enabled, users can make requests to arbitary websites on behalf of the Part-DB server. Only enable this, if you are aware of the potential consequences. - + info_providers.from_url.title Create [part] from URL - + info_providers.from_url.url.label URL - + info_providers.from_url.no_part_found No part found from the given URL. Are you sure this is a valid shop URL? - + info_providers.from_url.help Creates a part based on the given URL. It tries to delegate it to an existing info provider if possible, otherwise it will be tried to extract rudimentary data from the webpage's metadata. From f5841cc6978c0118c68bcfaa7fd7d2cf5d54054c Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Feb 2026 18:33:31 +0100 Subject: [PATCH 086/172] Remove outdated file source and path notes from translation files (#1225) * Initial plan * Remove outdated file source and path notes from all translation files Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com> * Preserve XML declaration format with double quotes Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com> --- .../SchebTwoFactorBundle+intl-icu.de.xlf | 2 +- .../SchebTwoFactorBundle+intl-icu.en.xlf | 2 +- translations/SchebTwoFactorBundle.de.xlf | 5 +- translations/SchebTwoFactorBundle.en.xlf | 5 +- translations/frontend.cs.xlf | 23 +- translations/frontend.da.xlf | 23 +- translations/frontend.de.xlf | 23 +- translations/frontend.el.xlf | 19 +- translations/frontend.en.xlf | 23 +- translations/frontend.es.xlf | 23 +- translations/frontend.fr.xlf | 23 +- translations/frontend.hu.xlf | 23 +- translations/frontend.it.xlf | 23 +- translations/frontend.ja.xlf | 23 +- translations/frontend.nl.xlf | 19 +- translations/frontend.pl.xlf | 23 +- translations/frontend.ru.xlf | 23 +- translations/frontend.uk.xlf | 23 +- translations/frontend.zh.xlf | 23 +- translations/messages.cs.xlf | 2553 +--------------- translations/messages.da.xlf | 2529 +--------------- translations/messages.de.xlf | 2529 +--------------- translations/messages.el.xlf | 713 +---- translations/messages.en.xlf | 2529 +--------------- translations/messages.es.xlf | 2553 +--------------- translations/messages.fr.xlf | 2540 +--------------- translations/messages.hu.xlf | 2553 +--------------- translations/messages.it.xlf | 2553 +--------------- translations/messages.ja.xlf | 2540 +--------------- translations/messages.nl.xlf | 262 +- translations/messages.pl.xlf | 2561 +---------------- translations/messages.ru.xlf | 2561 +---------------- translations/messages.zh.xlf | 2561 +---------------- translations/security.cs.xlf | 2 +- translations/security.da.xlf | 2 +- translations/security.de.xlf | 2 +- translations/security.el.xlf | 2 +- translations/security.en.xlf | 2 +- translations/security.es.xlf | 2 +- translations/security.fr.xlf | 2 +- translations/security.hr.xlf | 2 +- translations/security.hu.xlf | 2 +- translations/security.it.xlf | 2 +- translations/security.ja.xlf | 2 +- translations/security.nl.xlf | 2 +- translations/security.pl.xlf | 2 +- translations/security.ru.xlf | 2 +- translations/security.uk.xlf | 2 +- translations/security.vi.xlf | 2 +- translations/security.zh.xlf | 2 +- translations/validators.cs.xlf | 126 +- translations/validators.da.xlf | 126 +- translations/validators.de.xlf | 126 +- translations/validators.el.xlf | 2 +- translations/validators.en.xlf | 126 +- translations/validators.fr.xlf | 126 +- translations/validators.hr.xlf | 126 +- translations/validators.hu.xlf | 126 +- translations/validators.it.xlf | 126 +- translations/validators.ja.xlf | 126 +- translations/validators.nl.xlf | 126 +- translations/validators.pl.xlf | 126 +- translations/validators.ru.xlf | 126 +- translations/validators.uk.xlf | 126 +- translations/validators.zh.xlf | 126 +- 65 files changed, 65 insertions(+), 33623 deletions(-) diff --git a/translations/SchebTwoFactorBundle+intl-icu.de.xlf b/translations/SchebTwoFactorBundle+intl-icu.de.xlf index e9fb4cc6..ebaf8ec0 100644 --- a/translations/SchebTwoFactorBundle+intl-icu.de.xlf +++ b/translations/SchebTwoFactorBundle+intl-icu.de.xlf @@ -8,4 +8,4 @@ - + \ No newline at end of file diff --git a/translations/SchebTwoFactorBundle+intl-icu.en.xlf b/translations/SchebTwoFactorBundle+intl-icu.en.xlf index 1b17584c..0d1b2cc7 100644 --- a/translations/SchebTwoFactorBundle+intl-icu.en.xlf +++ b/translations/SchebTwoFactorBundle+intl-icu.en.xlf @@ -8,4 +8,4 @@ - + \ No newline at end of file diff --git a/translations/SchebTwoFactorBundle.de.xlf b/translations/SchebTwoFactorBundle.de.xlf index 27ee3946..ebaf8ec0 100644 --- a/translations/SchebTwoFactorBundle.de.xlf +++ b/translations/SchebTwoFactorBundle.de.xlf @@ -2,13 +2,10 @@ - - Part-DB1\templates\security\2fa_base_form.html.twig:52 - login Login - + \ No newline at end of file diff --git a/translations/SchebTwoFactorBundle.en.xlf b/translations/SchebTwoFactorBundle.en.xlf index b43243a6..0d1b2cc7 100644 --- a/translations/SchebTwoFactorBundle.en.xlf +++ b/translations/SchebTwoFactorBundle.en.xlf @@ -2,13 +2,10 @@ - - Part-DB1\templates\security\2fa_base_form.html.twig:52 - login Login - + \ No newline at end of file diff --git a/translations/frontend.cs.xlf b/translations/frontend.cs.xlf index e13e5c4c..08bd2b5e 100644 --- a/translations/frontend.cs.xlf +++ b/translations/frontend.cs.xlf @@ -2,23 +2,6 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Hledat @@ -67,14 +50,10 @@ - - Part-DB1\templates\_navbar_search.html.twig:68 - Part-DB1\templates\_navbar_search.html.twig:62 - search.submit Jdi! - + \ No newline at end of file diff --git a/translations/frontend.da.xlf b/translations/frontend.da.xlf index bb6a015d..9c6b3129 100644 --- a/translations/frontend.da.xlf +++ b/translations/frontend.da.xlf @@ -2,23 +2,6 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Søg @@ -67,14 +50,10 @@ - - Part-DB1\templates\_navbar_search.html.twig:68 - Part-DB1\templates\_navbar_search.html.twig:62 - search.submit Kom nu! - + \ No newline at end of file diff --git a/translations/frontend.de.xlf b/translations/frontend.de.xlf index f08d0295..4eaded60 100644 --- a/translations/frontend.de.xlf +++ b/translations/frontend.de.xlf @@ -2,23 +2,6 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Suche @@ -67,14 +50,10 @@ - - Part-DB1\templates\_navbar_search.html.twig:68 - Part-DB1\templates\_navbar_search.html.twig:62 - search.submit Los! - + \ No newline at end of file diff --git a/translations/frontend.el.xlf b/translations/frontend.el.xlf index 6d734823..bab41358 100644 --- a/translations/frontend.el.xlf +++ b/translations/frontend.el.xlf @@ -2,27 +2,10 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Αναζήτηση - + \ No newline at end of file diff --git a/translations/frontend.en.xlf b/translations/frontend.en.xlf index 4de45489..aa3cf2d9 100644 --- a/translations/frontend.en.xlf +++ b/translations/frontend.en.xlf @@ -2,23 +2,6 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Search @@ -67,14 +50,10 @@ - - Part-DB1\templates\_navbar_search.html.twig:68 - Part-DB1\templates\_navbar_search.html.twig:62 - search.submit Go! - + \ No newline at end of file diff --git a/translations/frontend.es.xlf b/translations/frontend.es.xlf index dc96b800..361d9104 100644 --- a/translations/frontend.es.xlf +++ b/translations/frontend.es.xlf @@ -2,23 +2,6 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Buscar @@ -67,14 +50,10 @@ - - Part-DB1\templates\_navbar_search.html.twig:68 - Part-DB1\templates\_navbar_search.html.twig:62 - search.submit ¡Vamos! - + \ No newline at end of file diff --git a/translations/frontend.fr.xlf b/translations/frontend.fr.xlf index 8363fabd..353c9002 100644 --- a/translations/frontend.fr.xlf +++ b/translations/frontend.fr.xlf @@ -2,23 +2,6 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Recherche @@ -31,14 +14,10 @@ - - Part-DB1\templates\_navbar_search.html.twig:68 - Part-DB1\templates\_navbar_search.html.twig:62 - search.submit Rechercher! - + \ No newline at end of file diff --git a/translations/frontend.hu.xlf b/translations/frontend.hu.xlf index 123d0c46..bdcda170 100644 --- a/translations/frontend.hu.xlf +++ b/translations/frontend.hu.xlf @@ -2,23 +2,6 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Keresés @@ -67,14 +50,10 @@ - - Part-DB1\templates\_navbar_search.html.twig:68 - Part-DB1\templates\_navbar_search.html.twig:62 - search.submit Indítás! - + \ No newline at end of file diff --git a/translations/frontend.it.xlf b/translations/frontend.it.xlf index 9df0eee0..56d0e0f0 100644 --- a/translations/frontend.it.xlf +++ b/translations/frontend.it.xlf @@ -2,23 +2,6 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Ricerca @@ -67,14 +50,10 @@ - - Part-DB1\templates\_navbar_search.html.twig:68 - Part-DB1\templates\_navbar_search.html.twig:62 - search.submit Cerca! - + \ No newline at end of file diff --git a/translations/frontend.ja.xlf b/translations/frontend.ja.xlf index 91a60f0d..90ffdf5f 100644 --- a/translations/frontend.ja.xlf +++ b/translations/frontend.ja.xlf @@ -2,23 +2,6 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder 検索 @@ -31,14 +14,10 @@ - - Part-DB1\templates\_navbar_search.html.twig:68 - Part-DB1\templates\_navbar_search.html.twig:62 - search.submit 検索 - + \ No newline at end of file diff --git a/translations/frontend.nl.xlf b/translations/frontend.nl.xlf index 67514891..13187f62 100644 --- a/translations/frontend.nl.xlf +++ b/translations/frontend.nl.xlf @@ -2,27 +2,10 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Zoeken - + \ No newline at end of file diff --git a/translations/frontend.pl.xlf b/translations/frontend.pl.xlf index 31f59cf4..dfdd8887 100644 --- a/translations/frontend.pl.xlf +++ b/translations/frontend.pl.xlf @@ -2,23 +2,6 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Szukaj @@ -67,14 +50,10 @@ - - Part-DB1\templates\_navbar_search.html.twig:68 - Part-DB1\templates\_navbar_search.html.twig:62 - search.submit Idź! - + \ No newline at end of file diff --git a/translations/frontend.ru.xlf b/translations/frontend.ru.xlf index f63367d9..a09cb348 100644 --- a/translations/frontend.ru.xlf +++ b/translations/frontend.ru.xlf @@ -2,23 +2,6 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Поиск @@ -67,14 +50,10 @@ - - Part-DB1\templates\_navbar_search.html.twig:68 - Part-DB1\templates\_navbar_search.html.twig:62 - search.submit Поехали! - + \ No newline at end of file diff --git a/translations/frontend.uk.xlf b/translations/frontend.uk.xlf index 210f7036..86f51f95 100644 --- a/translations/frontend.uk.xlf +++ b/translations/frontend.uk.xlf @@ -2,23 +2,6 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Пошук @@ -67,14 +50,10 @@ - - Part-DB1\templates\_navbar_search.html.twig:68 - Part-DB1\templates\_navbar_search.html.twig:62 - search.submit Почати! - + \ No newline at end of file diff --git a/translations/frontend.zh.xlf b/translations/frontend.zh.xlf index b2c289f0..d2ea6fd0 100644 --- a/translations/frontend.zh.xlf +++ b/translations/frontend.zh.xlf @@ -2,23 +2,6 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder 搜索 @@ -67,14 +50,10 @@ - - Part-DB1\templates\_navbar_search.html.twig:68 - Part-DB1\templates\_navbar_search.html.twig:62 - search.submit GO! - + \ No newline at end of file diff --git a/translations/messages.cs.xlf b/translations/messages.cs.xlf index 298e1479..74ca2a26 100644 --- a/translations/messages.cs.xlf +++ b/translations/messages.cs.xlf @@ -2,11 +2,6 @@ - - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - attachment_type.caption Typy souborů pro přílohy @@ -14,7 +9,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:12 new @@ -24,7 +18,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:16 new @@ -33,45 +26,18 @@ - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - templates\AdminPages\CategoryAdmin.html.twig:4 - templates\base.html.twig:163 - templates\base.html.twig:170 - templates\base.html.twig:197 - templates\base.html.twig:225 - category.labelp Kategorie - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:19 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:11 - templates\AdminPages\CategoryAdmin.html.twig:8 - admin.options Možnosti - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - templates\AdminPages\CategoryAdmin.html.twig:9 - admin.advanced Pokročilé @@ -79,7 +45,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:13 new @@ -89,7 +54,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:17 new @@ -98,30 +62,18 @@ - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - currency.caption Měna - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - currency.iso_code.caption Kód ISO - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - currency.symbol.caption Symbol měny @@ -129,7 +81,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:29 new @@ -139,7 +90,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:33 new @@ -149,7 +99,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:8 new @@ -159,7 +108,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:12 new @@ -168,89 +116,36 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Hledat - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - templates\AdminPages\EntityAdminBase.html.twig:13 - templates\base.html.twig:166 - templates\base.html.twig:193 - templates\base.html.twig:221 - expandAll Rozbalit vše - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - templates\AdminPages\EntityAdminBase.html.twig:17 - templates\base.html.twig:167 - templates\base.html.twig:194 - templates\base.html.twig:222 - reduceAll Sbalit vše - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - part.info.timetravel_hint Takto vypadal díl před %timestamp%. <i>Upozorňujeme, že tato funkce je experimentální, takže informace nemusí být správné.</i> - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - templates\AdminPages\EntityAdminBase.html.twig:42 - standard.label Vlastnosti - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - templates\AdminPages\EntityAdminBase.html.twig:43 - infos.label Informace @@ -258,8 +153,6 @@ - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 new @@ -268,120 +161,66 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - templates\AdminPages\EntityAdminBase.html.twig:45 - export.label Export - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - templates\AdminPages\EntityAdminBase.html.twig:47 - import_export.label Import / Export - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - mass_creation.label Hromadné vytváření - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - templates\AdminPages\EntityAdminBase.html.twig:59 - admin.common Obecné - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - admin.attachments Přílohy - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:90 - admin.parameters Parametr - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:179 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:167 - templates\AdminPages\EntityAdminBase.html.twig:142 - export_all.label Exportovat všechny prvky - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:185 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:173 - mass_creation.help Každý řádek bude interpretován jako název prvku, který bude vytvořen. Vnořené struktury můžete vytvářet pomocí odsazení. - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - templates\AdminPages\EntityAdminBase.html.twig:35 - edit.caption Upravit prvek "%name" - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - templates\AdminPages\EntityAdminBase.html.twig:37 - new.caption Nový prvek - - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - templates\base.html.twig:172 - templates\base.html.twig:199 - templates\base.html.twig:227 - footprint.labelp Otisky @@ -389,7 +228,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:13 new @@ -399,7 +237,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:17 new @@ -408,22 +245,12 @@ - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - group.edit.caption Skupiny - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - user.edit.permissions Oprávnění @@ -431,7 +258,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:24 new @@ -441,7 +267,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:28 new @@ -450,27 +275,18 @@ - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:4 - label_profile.caption Profily štítků - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:8 - label_profile.advanced Pokročilé - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:9 - label_profile.comment Poznámky @@ -478,7 +294,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:55 new @@ -488,7 +303,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:59 new @@ -497,11 +311,6 @@ - - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - templates\AdminPages\ManufacturerAdmin.html.twig:4 - manufacturer.caption Výrobci @@ -509,7 +318,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:8 new @@ -519,7 +327,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:12 new @@ -528,10 +335,6 @@ - - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - measurement_unit.caption Měrné jednotky @@ -544,15 +347,6 @@ - - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:5 - Part-DB1\templates\_sidebar.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:8 - templates\base.html.twig:171 - templates\base.html.twig:198 - templates\base.html.twig:226 - storelocation.labelp Umístění @@ -560,7 +354,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:32 new @@ -570,7 +363,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:36 new @@ -580,7 +372,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:16 new @@ -590,7 +381,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:20 new @@ -599,120 +389,66 @@ - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - user.edit.caption Uživatelé - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - user.edit.configuration Konfigurace - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - user.edit.password Heslo - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - user.edit.tfa.caption Dvoufaktorové ověřování - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - user.edit.tfa.google_active Aplikace Authenticator aktivní - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - tfa_backup.remaining_tokens Počet zbývajících záložních kódů - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - tfa_backup.generation_date Datum generování záložních kódů - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - user.edit.tfa.disabled Metoda není povolena - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - user.edit.tfa.u2f_keys_count Aktivní bezpečnostní klíče - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_title Opravdu chcete pokračovat? - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_message Tím deaktivujete <b>všechny aktivní dvoufaktorové metody ověřování uživatele</b> a odstraníte <b>záložní kódy</b>! @@ -722,10 +458,6 @@ Uživatel bude muset znovu nastavit všechny metody dvoufaktorového ověřován - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - user.edit.tfa.disable_tfa.btn Zakázat všechny metody dvoufaktorového ověřování @@ -733,7 +465,6 @@ Uživatel bude muset znovu nastavit všechny metody dvoufaktorového ověřován - Part-DB1\templates\AdminPages\UserAdmin.html.twig:85 new @@ -743,7 +474,6 @@ Uživatel bude muset znovu nastavit všechny metody dvoufaktorového ověřován - Part-DB1\templates\AdminPages\UserAdmin.html.twig:89 new @@ -752,13 +482,6 @@ Uživatel bude muset znovu nastavit všechny metody dvoufaktorového ověřován - - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:63 - attachment.delete Smazat @@ -771,102 +494,48 @@ Uživatel bude muset znovu nastavit všechny metody dvoufaktorového ověřován - - Part-DB1\templates\AdminPages\_attachments.html.twig:49 - Part-DB1\templates\Parts\edit\_attachments.html.twig:47 - Part-DB1\templates\AdminPages\_attachments.html.twig:47 - Part-DB1\templates\Parts\edit\_attachments.html.twig:45 - attachment.preview.alt Náhled přílohy - - Part-DB1\templates\AdminPages\_attachments.html.twig:52 - Part-DB1\templates\Parts\edit\_attachments.html.twig:50 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 - Part-DB1\templates\AdminPages\_attachments.html.twig:50 - Part-DB1\templates\Parts\edit\_attachments.html.twig:48 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:45 - attachment.view_local Zobrazit místní kopii - - Part-DB1\templates\AdminPages\_attachments.html.twig:58 - Part-DB1\templates\Parts\edit\_attachments.html.twig:56 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:43 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - Part-DB1\templates\AdminPages\_attachments.html.twig:56 - Part-DB1\templates\Parts\edit\_attachments.html.twig:54 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:38 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - attachment.file_not_found Soubor nebyl nalezen - - Part-DB1\templates\AdminPages\_attachments.html.twig:66 - Part-DB1\templates\Parts\edit\_attachments.html.twig:64 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:48 - Part-DB1\templates\Parts\edit\_attachments.html.twig:62 - attachment.secure Soukromá příloha - - Part-DB1\templates\AdminPages\_attachments.html.twig:79 - Part-DB1\templates\Parts\edit\_attachments.html.twig:77 - Part-DB1\templates\AdminPages\_attachments.html.twig:77 - Part-DB1\templates\Parts\edit\_attachments.html.twig:75 - attachment.create Přidat přílohu - - Part-DB1\templates\AdminPages\_attachments.html.twig:84 - Part-DB1\templates\Parts\edit\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - Part-DB1\templates\AdminPages\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_attachments.html.twig:80 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - part_lot.edit.delete.confirm Opravdu chcete tuto zásobu smazat? To nelze vzít zpět! - - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - templates\AdminPages\_delete_form.html.twig:2 - entity.delete.confirm_title Opravdu chcete smazat %name%? - - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - templates\AdminPages\_delete_form.html.twig:3 - entity.delete.message To nelze vrátit zpět! @@ -875,11 +544,6 @@ Související prvky budou přesunuty nahoru. - - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - templates\AdminPages\_delete_form.html.twig:9 - entity.delete Odstranit prvek @@ -887,12 +551,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:45 - Part-DB1\src\Form\Part\PartBaseType.php:286 - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:43 - Part-DB1\src\Form\Part\PartBaseType.php:267 new @@ -901,561 +559,300 @@ Související prvky budou přesunuty nahoru. - - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - templates\AdminPages\_delete_form.html.twig:12 - entity.delete.recursive Odstranit rekurzivně (všechny související prvky) - - Part-DB1\templates\AdminPages\_duplicate.html.twig:3 - entity.duplicate Duplikovat prvek - - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - templates\AdminPages\_export_form.html.twig:4 - src\Form\ImportType.php:67 - export.format Formát souboru - - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - templates\AdminPages\_export_form.html.twig:16 - export.level Úroveň podrobností - - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - templates\AdminPages\_export_form.html.twig:19 - export.level.simple Jednoduchý - - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - templates\AdminPages\_export_form.html.twig:20 - export.level.extended Rozšířený - - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - templates\AdminPages\_export_form.html.twig:21 - export.level.full Úplný - - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - templates\AdminPages\_export_form.html.twig:31 - export.include_children Zahrnutí podřízených prvků do exportu - - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - templates\AdminPages\_export_form.html.twig:39 - export.btn Export - - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - templates\AdminPages\EntityAdminBase.html.twig:94 - templates\Parts\edit_part_info.html.twig:12 - templates\Parts\show_part_info.html.twig:11 - id.label ID - - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:76 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:77 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:77 - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:59 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:60 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:53 - templates\AdminPages\EntityAdminBase.html.twig:101 - templates\Parts\show_part_info.html.twig:248 - createdAt Vytvořeno - - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:73 - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:49 - templates\AdminPages\EntityAdminBase.html.twig:114 - templates\Parts\show_part_info.html.twig:263 - lastModified Naposledy upraveno - - Part-DB1\templates\AdminPages\_info.html.twig:38 - Part-DB1\templates\AdminPages\_info.html.twig:38 - entity.info.parts_count Počet dílů s tímto prvkem - - Part-DB1\templates\AdminPages\_parameters.html.twig:6 - Part-DB1\templates\helper.twig:125 - Part-DB1\templates\Parts\edit\_specifications.html.twig:6 - specifications.property Parametr - - Part-DB1\templates\AdminPages\_parameters.html.twig:7 - Part-DB1\templates\Parts\edit\_specifications.html.twig:7 - specifications.symbol Symbol - - Part-DB1\templates\AdminPages\_parameters.html.twig:8 - Part-DB1\templates\Parts\edit\_specifications.html.twig:8 - specifications.value_min Min. - - Part-DB1\templates\AdminPages\_parameters.html.twig:9 - Part-DB1\templates\Parts\edit\_specifications.html.twig:9 - specifications.value_typ Typ. - - Part-DB1\templates\AdminPages\_parameters.html.twig:10 - Part-DB1\templates\Parts\edit\_specifications.html.twig:10 - specifications.value_max Max. - - Part-DB1\templates\AdminPages\_parameters.html.twig:11 - Part-DB1\templates\Parts\edit\_specifications.html.twig:11 - specifications.unit Jednotka - - Part-DB1\templates\AdminPages\_parameters.html.twig:12 - Part-DB1\templates\Parts\edit\_specifications.html.twig:12 - specifications.text Text - - Part-DB1\templates\AdminPages\_parameters.html.twig:13 - Part-DB1\templates\Parts\edit\_specifications.html.twig:13 - specifications.group Skupina - - Part-DB1\templates\AdminPages\_parameters.html.twig:26 - Part-DB1\templates\Parts\edit\_specifications.html.twig:26 - specification.create Nový parametr - - Part-DB1\templates\AdminPages\_parameters.html.twig:31 - Part-DB1\templates\Parts\edit\_specifications.html.twig:31 - parameter.delete.confirm Opravdu chcete tento parametr odstranit? - - Part-DB1\templates\attachment_list.html.twig:3 - Part-DB1\templates\attachment_list.html.twig:3 - attachment.list.title Seznam příloh - - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - part_list.loading.caption Načítání - - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - part_list.loading.message To může chvíli trvat. Pokud tato zpráva nezmizí, zkuste stránku načíst znovu. - - Part-DB1\templates\base.html.twig:68 - Part-DB1\templates\base.html.twig:68 - templates\base.html.twig:246 - vendor.base.javascript_hint Chcete-li používat všechny funkce, aktivujte prosím JavaScript! - - Part-DB1\templates\base.html.twig:73 - Part-DB1\templates\base.html.twig:73 - sidebar.big.toggle Zobrazit/skrýt postranní panel - - Part-DB1\templates\base.html.twig:95 - Part-DB1\templates\base.html.twig:95 - templates\base.html.twig:271 - loading.caption Načítání: - - Part-DB1\templates\base.html.twig:96 - Part-DB1\templates\base.html.twig:96 - templates\base.html.twig:272 - loading.message To může chvíli trvat. Pokud tato zpráva zůstává dlouho, zkuste stránku znovu načíst. - - Part-DB1\templates\base.html.twig:101 - Part-DB1\templates\base.html.twig:101 - templates\base.html.twig:277 - loading.bar Načítání... - - Part-DB1\templates\base.html.twig:112 - Part-DB1\templates\base.html.twig:112 - templates\base.html.twig:288 - back_to_top Zpět na začátek stránky - - Part-DB1\templates\Form\permissionLayout.html.twig:35 - Part-DB1\templates\Form\permissionLayout.html.twig:35 - permission.edit.permission Oprávnění - - Part-DB1\templates\Form\permissionLayout.html.twig:36 - Part-DB1\templates\Form\permissionLayout.html.twig:36 - permission.edit.value Hodnota - - Part-DB1\templates\Form\permissionLayout.html.twig:53 - Part-DB1\templates\Form\permissionLayout.html.twig:53 - permission.legend.title Vysvětlení režimů - - Part-DB1\templates\Form\permissionLayout.html.twig:57 - Part-DB1\templates\Form\permissionLayout.html.twig:57 - permission.legend.disallow Zakázáno - - Part-DB1\templates\Form\permissionLayout.html.twig:61 - Part-DB1\templates\Form\permissionLayout.html.twig:61 - permission.legend.allow Povoleno - - Part-DB1\templates\Form\permissionLayout.html.twig:65 - Part-DB1\templates\Form\permissionLayout.html.twig:65 - permission.legend.inherit Převzít z (nadřazené) skupiny - - Part-DB1\templates\helper.twig:3 - Part-DB1\templates\helper.twig:3 - bool.true Ano - - Part-DB1\templates\helper.twig:5 - Part-DB1\templates\helper.twig:5 - bool.false Ne - - Part-DB1\templates\helper.twig:92 - Part-DB1\templates\helper.twig:87 - Yes Ano - - Part-DB1\templates\helper.twig:94 - Part-DB1\templates\helper.twig:89 - No Ne - - Part-DB1\templates\helper.twig:126 - specifications.value Hodnota - - Part-DB1\templates\homepage.html.twig:7 - Part-DB1\templates\homepage.html.twig:7 - templates\homepage.html.twig:7 - version.caption Verze - - Part-DB1\templates\homepage.html.twig:22 - Part-DB1\templates\homepage.html.twig:22 - templates\homepage.html.twig:19 - homepage.license Informace o licenci - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.caption Stránka projektu - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.text Zdrojové kódy, soubory ke stažení, hlášení chyb, seznam úkolů atd. najdete na <a href="%href%" class="link-external" target="_blank">stránce projektu GitHub</a> - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.caption Nápověda - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.text Nápovědu a tipy najdete na Wiki na <a href="%href%" class="link-external" target="_blank">stránce GitHub</a> - - Part-DB1\templates\homepage.html.twig:33 - Part-DB1\templates\homepage.html.twig:33 - templates\homepage.html.twig:30 - homepage.forum.caption Fórum @@ -1463,8 +860,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\homepage.html.twig:45 - Part-DB1\templates\homepage.html.twig:45 new @@ -1473,138 +868,90 @@ Související prvky budou přesunuty nahoru. - - Part-DB1\templates\LabelSystem\dialog.html.twig:3 - Part-DB1\templates\LabelSystem\dialog.html.twig:6 - label_generator.title Generátor štítků - - Part-DB1\templates\LabelSystem\dialog.html.twig:16 - label_generator.common Obecné - - Part-DB1\templates\LabelSystem\dialog.html.twig:20 - label_generator.advanced Pokročilé - - Part-DB1\templates\LabelSystem\dialog.html.twig:24 - label_generator.profiles Profily - - Part-DB1\templates\LabelSystem\dialog.html.twig:58 - label_generator.selected_profile Aktuálně vybraný profil - - Part-DB1\templates\LabelSystem\dialog.html.twig:62 - label_generator.edit_profile Upravit profil - - Part-DB1\templates\LabelSystem\dialog.html.twig:75 - label_generator.load_profile Načíst profil - - Part-DB1\templates\LabelSystem\dialog.html.twig:102 - label_generator.download Stáhnout - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:3 - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:5 - label_generator.label_btn Vytvořit štítek - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:20 - label_generator.label_empty Nový prázdný štítek - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:3 - label_scanner.title Čtečka štítků - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.title Nebyla nalezena žádná webová kamera - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.text Potřebujete webovou kameru a povolení k použití funkce čtečky. Kód čárového kódu můžete zadat ručně níže. - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:27 - label_scanner.source_select Vybrat zdroj - - Part-DB1\templates\LogSystem\log_list.html.twig:3 - Part-DB1\templates\LogSystem\log_list.html.twig:3 - log.list.title Systémový protokol @@ -1612,8 +959,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\LogSystem\_log_table.html.twig:1 - Part-DB1\templates\LogSystem\_log_table.html.twig:1 new @@ -1623,8 +968,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\LogSystem\_log_table.html.twig:2 - Part-DB1\templates\LogSystem\_log_table.html.twig:2 new @@ -1633,194 +976,114 @@ Související prvky budou přesunuty nahoru. - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.email_sent_by Tento e-mail byl automaticky odeslán - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.dont_reply Na tento e-mail neodpovídejte. - - Part-DB1\templates\mail\pw_reset.html.twig:6 - Part-DB1\templates\mail\pw_reset.html.twig:6 - email.hi %name% Ahoj %name% - - Part-DB1\templates\mail\pw_reset.html.twig:7 - Part-DB1\templates\mail\pw_reset.html.twig:7 - email.pw_reset.message někdo (doufejme, že vy) požádal o obnovení vašeho hesla. Pokud jste tuto žádost nepodali vy, ignorujte tento e-mail. - - Part-DB1\templates\mail\pw_reset.html.twig:9 - Part-DB1\templates\mail\pw_reset.html.twig:9 - email.pw_reset.button Klikněte zde pro obnovení hesla - - Part-DB1\templates\mail\pw_reset.html.twig:11 - Part-DB1\templates\mail\pw_reset.html.twig:11 - email.pw_reset.fallback Pokud vám to nefunguje, přejděte na <a href="%url%">%url%</a> a zadejte následující informace. - - Part-DB1\templates\mail\pw_reset.html.twig:16 - Part-DB1\templates\mail\pw_reset.html.twig:16 - email.pw_reset.username Uživatelské jméno - - Part-DB1\templates\mail\pw_reset.html.twig:19 - Part-DB1\templates\mail\pw_reset.html.twig:19 - email.pw_reset.token Token - - Part-DB1\templates\mail\pw_reset.html.twig:24 - Part-DB1\templates\mail\pw_reset.html.twig:24 - email.pw_reset.valid_unit %date% Token obnovení bude platný do <i>%date%</i>. - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:18 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:78 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - orderdetail.delete Odstranit - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - pricedetails.edit.min_qty Minimální množství slevy - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - pricedetails.edit.price Cena - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - pricedetails.edit.price_qty za množství - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - pricedetail.create Přidat cenu - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - templates\Parts\edit_part_info.html.twig:4 - part.edit.title Upravit díl - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - templates\Parts\edit_part_info.html.twig:9 - part.edit.card_title Upravit díl - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - part.edit.tab.common Obecné - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - part.edit.tab.manufacturer Výrobce - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - part.edit.tab.advanced Pokročilé @@ -1887,279 +1150,156 @@ Související prvky budou přesunuty nahoru. - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - part.edit.tab.part_lots Zásoby - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - part.edit.tab.attachments Přílohy - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - part.edit.tab.orderdetails Informace o nákupu - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.specifications Parametry - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:64 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.comment Poznámky - - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - templates\Parts\new_part.html.twig:8 - part.new.card_title Přidat nový díl - - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - part_lot.delete Odstranit - - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - part_lot.create Přidat zásoby - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - orderdetail.create Přidat distributora - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - pricedetails.edit.delete.confirm Opravdu chcete tuto cenu smazat? To nelze vzít zpět. - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:62 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:61 - orderdetails.edit.delete.confirm Opravdu chcete smazat informace o distributorovi? To nelze vzít zpět! - - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - templates\Parts\show_part_info.html.twig:4 - templates\Parts\show_part_info.html.twig:9 - part.info.title Detailní informace o dílu - - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - part.part_lots.label Zásoby - - Part-DB1\templates\Parts\info\show_part_info.html.twig:56 - Part-DB1\templates\Parts\lists\_info_card.html.twig:43 - Part-DB1\templates\_navbar_search.html.twig:31 - Part-DB1\templates\_navbar_search.html.twig:26 - templates\base.html.twig:62 - templates\Parts\show_part_info.html.twig:74 - src\Form\PartType.php:86 - comment.label Poznámky - - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - part.info.specifications Parametry - - Part-DB1\templates\Parts\info\show_part_info.html.twig:74 - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - templates\Parts\show_part_info.html.twig:82 - attachment.labelp Přílohy - - Part-DB1\templates\Parts\info\show_part_info.html.twig:83 - Part-DB1\templates\Parts\info\show_part_info.html.twig:71 - templates\Parts\show_part_info.html.twig:88 - vendor.partinfo.shopping_infos Informace o nákupu - - Part-DB1\templates\Parts\info\show_part_info.html.twig:91 - Part-DB1\templates\Parts\info\show_part_info.html.twig:78 - templates\Parts\show_part_info.html.twig:94 - vendor.partinfo.history Historie - - Part-DB1\templates\Parts\info\show_part_info.html.twig:97 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - Part-DB1\templates\Parts\info\show_part_info.html.twig:84 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - templates\base.html.twig:176 - templates\base.html.twig:203 - templates\base.html.twig:217 - templates\base.html.twig:231 - templates\Parts\show_part_info.html.twig:100 - tools.label Nástroje - - Part-DB1\templates\Parts\info\show_part_info.html.twig:103 - Part-DB1\templates\Parts\info\show_part_info.html.twig:90 - extended_info.label Rozšířené informace - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - attachment.name Jméno - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - attachment.attachment_type Typ přílohy - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - attachment.file_name Název souboru - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - attachment.file_size Velikost souboru - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:54 - attachment.preview Náhled - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:67 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:50 - attachment.download_local Stáhnout místní kopii @@ -2167,8 +1307,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 new @@ -2177,14 +1315,6 @@ Související prvky budou přesunuty nahoru. - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Unknown Neznámý @@ -2192,10 +1322,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 new @@ -2205,8 +1331,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 new @@ -2215,49 +1339,24 @@ Související prvky budou přesunuty nahoru. - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - part.isFavorite Oblíbené - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - part.minOrderAmount Minimální množství - - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:46 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:41 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - templates\base.html.twig:70 - templates\Parts\show_part_info.html.twig:24 - src\Form\PartType.php:80 - manufacturer.label Výrobce - - Part-DB1\templates\Parts\info\_main_infos.html.twig:24 - Part-DB1\templates\_navbar_search.html.twig:11 - templates\base.html.twig:54 - src\Form\PartType.php:62 - name.label Jméno @@ -2265,8 +1364,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 new @@ -2275,767 +1372,432 @@ Související prvky budou přesunuty nahoru. - - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:19 - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:18 - templates\base.html.twig:58 - templates\Parts\show_part_info.html.twig:31 - src\Form\PartType.php:65 - description.label Popis - - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:15 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:14 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - templates\base.html.twig:56 - templates\Parts\show_part_info.html.twig:32 - src\Form\PartType.php:74 - category.label Kategorie - - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - templates\Parts\show_part_info.html.twig:42 - src\Form\PartType.php:69 - instock.label Skladem - - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - templates\Parts\show_part_info.html.twig:44 - src\Form\PartType.php:72 - mininstock.label Minimální skladová zásoba - - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:52 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:47 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - templates\base.html.twig:73 - templates\Parts\show_part_info.html.twig:47 - footprint.label Otisk - - Part-DB1\templates\Parts\info\_main_infos.html.twig:56 - Part-DB1\templates\Parts\info\_main_infos.html.twig:59 - Part-DB1\templates\Parts\info\_main_infos.html.twig:57 - Part-DB1\templates\Parts\info\_main_infos.html.twig:60 - templates\Parts\show_part_info.html.twig:51 - part.avg_price.label Průměrná cena - - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - part.supplier.name Jméno - - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - part.supplier.partnr Objednací číslo - - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - part.order.minamount Minimální množství - - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - part.order.price Cena - - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - part.order.single_price Jednotková cena - - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - Part-DB1\templates\Parts\info\_part_lots.html.twig:6 - part_lots.description Popis - - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - part_lots.storage_location Umístění - - Part-DB1\templates\Parts\info\_part_lots.html.twig:9 - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - part_lots.amount Množství - - Part-DB1\templates\Parts\info\_part_lots.html.twig:24 - Part-DB1\templates\Parts\info\_part_lots.html.twig:22 - part_lots.location_unknown Umístění neznámé - - Part-DB1\templates\Parts\info\_part_lots.html.twig:31 - Part-DB1\templates\Parts\info\_part_lots.html.twig:29 - part_lots.instock_unknown Množství neznámé - - Part-DB1\templates\Parts\info\_part_lots.html.twig:40 - Part-DB1\templates\Parts\info\_part_lots.html.twig:38 - part_lots.expiration_date Datum vypršení platnosti - - Part-DB1\templates\Parts\info\_part_lots.html.twig:48 - Part-DB1\templates\Parts\info\_part_lots.html.twig:46 - part_lots.is_expired Platnost vypršela - - Part-DB1\templates\Parts\info\_part_lots.html.twig:55 - Part-DB1\templates\Parts\info\_part_lots.html.twig:53 - part_lots.need_refill Potřebuje doplnit - - Part-DB1\templates\Parts\info\_picture.html.twig:15 - Part-DB1\templates\Parts\info\_picture.html.twig:15 - part.info.prev_picture Předchozí obrázek - - Part-DB1\templates\Parts\info\_picture.html.twig:19 - Part-DB1\templates\Parts\info\_picture.html.twig:19 - part.info.next_picture Další obrázek - - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - part.mass.tooltip Hromadné - - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - part.needs_review.badge Vyžaduje kontrolu - - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - part.favorite.badge Oblíbené - - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - part.obsolete.badge Již není k dispozici - - Part-DB1\templates\Parts\info\_specifications.html.twig:10 - parameters.extracted_from_description Automaticky extrahováno z popisu - - Part-DB1\templates\Parts\info\_specifications.html.twig:15 - parameters.auto_extracted_from_comment Automaticky extrahované z poznámek - - Part-DB1\templates\Parts\info\_tools.html.twig:6 - Part-DB1\templates\Parts\info\_tools.html.twig:4 - templates\Parts\show_part_info.html.twig:125 - part.edit.btn Upravit díl - - Part-DB1\templates\Parts\info\_tools.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:14 - templates\Parts\show_part_info.html.twig:135 - part.clone.btn Duplikovat díl - - Part-DB1\templates\Parts\info\_tools.html.twig:24 - Part-DB1\templates\Parts\lists\_action_bar.html.twig:4 - templates\Parts\show_part_info.html.twig:143 - part.create.btn Přidat nový díl - - Part-DB1\templates\Parts\info\_tools.html.twig:31 - Part-DB1\templates\Parts\info\_tools.html.twig:29 - part.delete.confirm_title Opravdu chcete tento díl odstranit? - - Part-DB1\templates\Parts\info\_tools.html.twig:32 - Part-DB1\templates\Parts\info\_tools.html.twig:30 - part.delete.message Tento díl a všechny související informace (např. přílohy, informace o ceně atd.) budou odstraněny. Toto nelze vrátit zpět! - - Part-DB1\templates\Parts\info\_tools.html.twig:39 - Part-DB1\templates\Parts\info\_tools.html.twig:37 - part.delete Odstranit díl - - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - parts_list.all.title Všechny díly - - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - parts_list.category.title Díly s kategorií - - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - parts_list.footprint.title Díly s otiskem - - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - parts_list.manufacturer.title Díly s výrobcem - - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - parts_list.search.title Vyhledat díly - - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - parts_list.storelocation.title Díly s místy uložení - - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - parts_list.supplier.title Díly s dodavatelem - - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - parts_list.tags.title Díly se štítkem - - Part-DB1\templates\Parts\lists\_info_card.html.twig:22 - Part-DB1\templates\Parts\lists\_info_card.html.twig:17 - entity.info.common.tab Obecné - - Part-DB1\templates\Parts\lists\_info_card.html.twig:26 - Part-DB1\templates\Parts\lists\_info_card.html.twig:20 - entity.info.statistics.tab Statistika - - Part-DB1\templates\Parts\lists\_info_card.html.twig:31 - entity.info.attachments.tab Attachments - - Part-DB1\templates\Parts\lists\_info_card.html.twig:37 - entity.info.parameters.tab Parametry - - Part-DB1\templates\Parts\lists\_info_card.html.twig:54 - Part-DB1\templates\Parts\lists\_info_card.html.twig:30 - entity.info.name Jméno - - Part-DB1\templates\Parts\lists\_info_card.html.twig:58 - Part-DB1\templates\Parts\lists\_info_card.html.twig:96 - Part-DB1\templates\Parts\lists\_info_card.html.twig:34 - Part-DB1\templates\Parts\lists\_info_card.html.twig:67 - entity.info.parent Nadřazený - - Part-DB1\templates\Parts\lists\_info_card.html.twig:70 - Part-DB1\templates\Parts\lists\_info_card.html.twig:46 - entity.edit.btn Upravit - - Part-DB1\templates\Parts\lists\_info_card.html.twig:92 - Part-DB1\templates\Parts\lists\_info_card.html.twig:63 - entity.info.children_count Počet podřízených prvků - - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - tfa.check.title Potřeba dvoufaktorového ověřování - - Part-DB1\templates\security\2fa_base_form.html.twig:39 - Part-DB1\templates\security\2fa_base_form.html.twig:39 - tfa.code.trusted_pc Jedná se o důvěryhodný počítač (pokud je tato možnost povolena, neprovádějí se na tomto počítači žádné další dvoufaktorové dotazy). - - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - login.btn Přihlášení - - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:42 - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:40 - user.logout Odhlásit se - - Part-DB1\templates\security\2fa_form.html.twig:6 - Part-DB1\templates\security\2fa_form.html.twig:6 - tfa.check.code.label Kód aplikace Authenticator - - Part-DB1\templates\security\2fa_form.html.twig:10 - Part-DB1\templates\security\2fa_form.html.twig:10 - tfa.check.code.help Zde zadejte šestimístný kód z ověřovací aplikace nebo jeden ze záložních kódů, pokud ověřovací aplikace není k dispozici. - - Part-DB1\templates\security\login.html.twig:3 - Part-DB1\templates\security\login.html.twig:3 - templates\security\login.html.twig:3 - login.title Přihlášení - - Part-DB1\templates\security\login.html.twig:7 - Part-DB1\templates\security\login.html.twig:7 - templates\security\login.html.twig:7 - login.card_title Přihlášení - - Part-DB1\templates\security\login.html.twig:31 - Part-DB1\templates\security\login.html.twig:31 - templates\security\login.html.twig:31 - login.username.label Uživatelské jméno - - Part-DB1\templates\security\login.html.twig:34 - Part-DB1\templates\security\login.html.twig:34 - templates\security\login.html.twig:34 - login.username.placeholder Uživatelské jméno - - Part-DB1\templates\security\login.html.twig:38 - Part-DB1\templates\security\login.html.twig:38 - templates\security\login.html.twig:38 - login.password.label Heslo - - Part-DB1\templates\security\login.html.twig:40 - Part-DB1\templates\security\login.html.twig:40 - templates\security\login.html.twig:40 - login.password.placeholder Heslo - - Part-DB1\templates\security\login.html.twig:50 - Part-DB1\templates\security\login.html.twig:50 - templates\security\login.html.twig:50 - login.rememberme Zapamatovat si (nemělo by se používat na sdílených počítačích) - - Part-DB1\templates\security\login.html.twig:64 - Part-DB1\templates\security\login.html.twig:64 - pw_reset.password_forget Zapomněli jste uživatelské jméno/heslo? - - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - pw_reset.new_pw.header.title Nastavit nové heslo - - Part-DB1\templates\security\pw_reset_request.html.twig:5 - Part-DB1\templates\security\pw_reset_request.html.twig:5 - pw_reset.request.header.title Požádat o nové heslo - - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - tfa_u2f.http_warning Na tuto stránku přistupujete pomocí nezabezpečené metody HTTP, takže U2F pravděpodobně nebude fungovat (chybová zpráva Bad Request). Pokud chcete používat bezpečnostní klíče, požádejte správce o nastavení zabezpečené metody HTTPS. - - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - r_u2f_two_factor.pressbutton Připojte bezpečnostní klíč a stiskněte jeho tlačítko! - - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - tfa_u2f.add_key.title Přidání bezpečnostního klíče - - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - tfa_u2f.explanation Pomocí bezpečnostního klíče kompatibilního s U2F/FIDO (např. YubiKey nebo NitroKey) lze dosáhnout uživatelsky přívětivého a bezpečného dvoufaktorového ověřování. Bezpečnostní klíče lze zde zaregistrovat a pokud je vyžadováno dvoufaktorové ověření, stačí vložit klíč do USB, nebo zadat přes zařízení prostřednictvím NFC. - - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - tfa_u2f.add_key.backup_hint Pro zajištění přístupu i v případě ztráty klíče doporučujeme zaregistrovat druhý klíč jako zálohu a uložit jej na bezpečném místě! - - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - tfa_u2f.add_key.add_button Přidat bezpečnostní klíč - - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - tfa_u2f.add_key.back_to_settings Zpět do nastavení @@ -3043,10 +1805,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 new @@ -3056,8 +1814,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:14 - Part-DB1\templates\Statistics\statistics.html.twig:14 new @@ -3067,8 +1823,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:19 - Part-DB1\templates\Statistics\statistics.html.twig:19 new @@ -3078,8 +1832,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:24 - Part-DB1\templates\Statistics\statistics.html.twig:24 new @@ -3089,12 +1841,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 new @@ -3104,12 +1850,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 new @@ -3119,8 +1859,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:40 - Part-DB1\templates\Statistics\statistics.html.twig:40 new @@ -3130,8 +1868,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:44 - Part-DB1\templates\Statistics\statistics.html.twig:44 new @@ -3141,8 +1877,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:48 - Part-DB1\templates\Statistics\statistics.html.twig:48 new @@ -3152,8 +1886,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:65 - Part-DB1\templates\Statistics\statistics.html.twig:65 new @@ -3163,8 +1895,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:69 - Part-DB1\templates\Statistics\statistics.html.twig:69 new @@ -3174,8 +1904,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:73 - Part-DB1\templates\Statistics\statistics.html.twig:73 new @@ -3185,8 +1913,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:77 - Part-DB1\templates\Statistics\statistics.html.twig:77 new @@ -3196,8 +1922,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:81 - Part-DB1\templates\Statistics\statistics.html.twig:81 new @@ -3207,8 +1931,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:85 - Part-DB1\templates\Statistics\statistics.html.twig:85 new @@ -3218,8 +1940,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:89 - Part-DB1\templates\Statistics\statistics.html.twig:89 new @@ -3229,8 +1949,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:93 - Part-DB1\templates\Statistics\statistics.html.twig:93 new @@ -3240,8 +1958,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:110 - Part-DB1\templates\Statistics\statistics.html.twig:110 new @@ -3251,8 +1967,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:114 - Part-DB1\templates\Statistics\statistics.html.twig:114 new @@ -3262,8 +1976,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:118 - Part-DB1\templates\Statistics\statistics.html.twig:118 new @@ -3273,8 +1985,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:122 - Part-DB1\templates\Statistics\statistics.html.twig:122 new @@ -3284,8 +1994,6 @@ Související prvky budou přesunuty nahoru. - Part-DB1\templates\Statistics\statistics.html.twig:126 - Part-DB1\templates\Statistics\statistics.html.twig:126 new @@ -3294,302 +2002,156 @@ Související prvky budou přesunuty nahoru. - - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - tfa_backup.codes.title Záložní kódy - - Part-DB1\templates\Users\backup_codes.html.twig:12 - Part-DB1\templates\Users\backup_codes.html.twig:12 - tfa_backup.codes.explanation Vytiskněte si tyto kódy a uschovejte je na bezpečném místě! - - Part-DB1\templates\Users\backup_codes.html.twig:13 - Part-DB1\templates\Users\backup_codes.html.twig:13 - tfa_backup.codes.help Pokud již nemáte přístup ke svému zařízení s aplikací Authenticator (ztráta smartphonu, ztráta dat atd.), můžete použít jeden z těchto kódů pro přístup ke svému účtu a případně nastavit novou aplikaci Authenticator. Každý z těchto kódů lze použít jednou, použité kódy se doporučuje odstranit. Kdokoli s přístupem k těmto kódům může potenciálně získat přístup k vašemu účtu, proto je uchovávejte na bezpečném místě. - - Part-DB1\templates\Users\backup_codes.html.twig:16 - Part-DB1\templates\Users\backup_codes.html.twig:16 - tfa_backup.username Uživatelské jméno - - Part-DB1\templates\Users\backup_codes.html.twig:29 - Part-DB1\templates\Users\backup_codes.html.twig:29 - tfa_backup.codes.page_generated_on Stránka vygenerovaná dne %date% - - Part-DB1\templates\Users\backup_codes.html.twig:32 - Part-DB1\templates\Users\backup_codes.html.twig:32 - tfa_backup.codes.print Tisk - - Part-DB1\templates\Users\backup_codes.html.twig:35 - Part-DB1\templates\Users\backup_codes.html.twig:35 - tfa_backup.codes.copy_clipboard Zkopírovat do schránky - - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:40 - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:38 - templates\base.html.twig:99 - templates\Users\user_info.html.twig:3 - templates\Users\user_info.html.twig:6 - user.info.label Informace o uživateli - - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - templates\Users\user_info.html.twig:18 - src\Form\UserSettingsType.php:32 - user.firstName.label Jméno - - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - templates\Users\user_info.html.twig:24 - src\Form\UserSettingsType.php:35 - user.lastName.label Příjmení - - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - templates\Users\user_info.html.twig:30 - src\Form\UserSettingsType.php:41 - user.email.label e-mail - - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - templates\Users\user_info.html.twig:37 - src\Form\UserSettingsType.php:38 - user.department.label Oddělení - - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - templates\Users\user_info.html.twig:47 - src\Form\UserSettingsType.php:30 - user.username.label Uživatelské jméno - - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - templates\Users\user_info.html.twig:53 - group.label Skupina - - Part-DB1\templates\Users\user_info.html.twig:67 - Part-DB1\templates\Users\user_info.html.twig:67 - user.permissions Oprávnění - - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:39 - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:37 - templates\base.html.twig:98 - templates\Users\user_settings.html.twig:3 - templates\Users\user_settings.html.twig:6 - user.settings.label Uživatelské nastavení - - Part-DB1\templates\Users\user_settings.html.twig:18 - Part-DB1\templates\Users\user_settings.html.twig:18 - templates\Users\user_settings.html.twig:14 - user_settings.data.label Osobní údaje - - Part-DB1\templates\Users\user_settings.html.twig:22 - Part-DB1\templates\Users\user_settings.html.twig:22 - templates\Users\user_settings.html.twig:18 - user_settings.configuration.label Konfigurace - - Part-DB1\templates\Users\user_settings.html.twig:55 - Part-DB1\templates\Users\user_settings.html.twig:55 - templates\Users\user_settings.html.twig:48 - user.settings.change_pw Změnit heslo - - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - user.settings.2fa_settings Dvoufaktorové ověřování - - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - tfa.settings.google.tab Authenticator app - - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - tfa.settings.bakup.tab Záložní kódy - - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - tfa.settings.u2f.tab Bezpečnostní klíče (U2F) - - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - tfa.settings.trustedDevices.tab Důvěryhodná zařízení - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_title Opravdu chcete aplikaci Authenticator zakázat? - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_message Pokud aplikaci Authenticator deaktivujete, všechny záložní kódy budou smazány, takže je možná budete muset vytisknout znovu.<br> @@ -3597,262 +2159,156 @@ Upozorňujeme také, že bez dvoufaktorového ověřování není váš účet t - - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - tfa_google.disabled_message Aplikace Authenticator deaktivována! - - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - tfa_google.step.download Stáhněte si aplikaci Authenticator (např. <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a> nebo <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp">FreeOTP Authenticator</a>). - - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - tfa_google.step.scan Naskenujte přiložený QR kód pomocí aplikace nebo zadejte údaje ručně. - - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - tfa_google.step.input_code Vygenerovaný kód zadejte do níže uvedeného pole a potvrďte. - - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - tfa_google.step.download_backup Vytiskněte si záložní kódy a uložte je na bezpečném místě. - - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - tfa_google.manual_setup Ruční nastavení - - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - tfa_google.manual_setup.type Typ - - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - tfa_google.manual_setup.username Uživatelské jméno - - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - tfa_google.manual_setup.secret Tajné - - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - tfa_google.manual_setup.digit_count Počet číslic - - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - tfa_google.enabled_message Aplikace Authenticator povolena - - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - tfa_backup.disabled Záložní kódy jsou zakázány. Nastavte aplikaci Authenticator pro povolení záložních kódů. - - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - tfa_backup.explanation Tyto záložní kódy můžete použít k přístupu k účtu i v případě ztráty zařízení s aplikací Authenticator. Kódy si vytiskněte a uschovejte na bezpečném místě. - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_title Opravdu resetovat kódy? - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_message Tím se odstraní všechny předchozí kódy a vygeneruje se sada nových kódů. Tuto akci nelze vrátit zpět. Nezapomeňte si nové kódy vytisknout a uložit na bezpečném místě! - - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - tfa_backup.enabled Záložní kódy povoleny - - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - tfa_backup.show_codes Zobrazit záložní kódy - - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - tfa_u2f.table_caption Registrované bezpečnostní klíče - - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - tfa_u2f.delete_u2f.confirm_title Opravdu odstranit tento bezpečnostní klíč? - - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - tfa_u2f.delete_u2f.confirm_message Pokud tento klíč odstraníte, nebude již možné se pomocí tohoto klíče přihlásit. Pokud nezůstanou žádné bezpečnostní klíče, dvoufaktorové ověřování bude zakázáno. - - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - tfa_u2f.keys.name Název klíče - - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - tfa_u2f.keys.added_date Datum registrace - - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - tfa_u2f.key_delete Smazat klíč - - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - tfa_u2f.no_keys_registered Zatím nebyly zaregistrovány žádné klíče. - - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - tfa_u2f.add_new_key Registrace nového bezpečnostního klíče - - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - tfa_trustedDevices.explanation Při kontrole druhého faktoru lze aktuální počítač označit jako důvěryhodný, takže na tomto počítači již není třeba provádět žádné další dvoufaktorové kontroly. @@ -3860,326 +2316,168 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - tfa_trustedDevices.invalidate.confirm_title Opravdu odebrat všechny důvěryhodné počítače? - - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - tfa_trustedDevices.invalidate.confirm_message Ve všech počítačích bude nutné znovu provést dvoufaktorové ověřování. Ujistěte se, že máte po ruce dvoufaktorové zařízení. - - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - tfa_trustedDevices.invalidate.btn Reset důvěryhodných zařízení - - Part-DB1\templates\_navbar.html.twig:4 - Part-DB1\templates\_navbar.html.twig:4 - templates\base.html.twig:29 - sidebar.toggle Přepnutí postranního panelu - - Part-DB1\templates\_navbar.html.twig:22 - navbar.scanner.link Čtečka štítků - - Part-DB1\templates\_navbar.html.twig:38 - Part-DB1\templates\_navbar.html.twig:36 - templates\base.html.twig:97 - user.loggedin.label Přihlášen jako - - Part-DB1\templates\_navbar.html.twig:44 - Part-DB1\templates\_navbar.html.twig:42 - templates\base.html.twig:103 - user.login Příhlásit - - Part-DB1\templates\_navbar.html.twig:50 - Part-DB1\templates\_navbar.html.twig:48 - ui.toggle_darkmode Tmavý režim - - Part-DB1\templates\_navbar.html.twig:54 - Part-DB1\src\Form\UserSettingsType.php:97 - Part-DB1\templates\_navbar.html.twig:52 - Part-DB1\src\Form\UserSettingsType.php:97 - templates\base.html.twig:106 - src\Form\UserSettingsType.php:44 - user.language_select Jazyk - - Part-DB1\templates\_navbar_search.html.twig:4 - Part-DB1\templates\_navbar_search.html.twig:4 - templates\base.html.twig:49 - search.options.label Možnosti hledání - - Part-DB1\templates\_navbar_search.html.twig:23 - tags.label Štítky - - Part-DB1\templates\_navbar_search.html.twig:27 - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - templates\base.html.twig:60 - templates\Parts\show_part_info.html.twig:36 - src\Form\PartType.php:77 - storelocation.label Umístění - - Part-DB1\templates\_navbar_search.html.twig:36 - Part-DB1\templates\_navbar_search.html.twig:31 - templates\base.html.twig:65 - ordernumber.label.short Číslo dílu dodavatele - - Part-DB1\templates\_navbar_search.html.twig:40 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - Part-DB1\templates\_navbar_search.html.twig:35 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - templates\base.html.twig:67 - supplier.label Dodavatel - - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_navbar_search.html.twig:56 - templates\base.html.twig:77 - search.regexmatching Reg.Ex. shoda - - Part-DB1\templates\_sidebar.html.twig:37 - Part-DB1\templates\_sidebar.html.twig:12 - Part-DB1\templates\_sidebar.html.twig:37 - Part-DB1\templates\_sidebar.html.twig:12 - templates\base.html.twig:175 - templates\base.html.twig:189 - templates\base.html.twig:202 - templates\base.html.twig:230 - project.labelp Projekty - - Part-DB1\templates\_sidebar.html.twig:2 - Part-DB1\templates\_sidebar.html.twig:2 - templates\base.html.twig:165 - templates\base.html.twig:192 - templates\base.html.twig:220 - actions Akce - - Part-DB1\templates\_sidebar.html.twig:6 - Part-DB1\templates\_sidebar.html.twig:6 - templates\base.html.twig:169 - templates\base.html.twig:196 - templates\base.html.twig:224 - datasource Zdroj dat - - Part-DB1\templates\_sidebar.html.twig:10 - Part-DB1\templates\_sidebar.html.twig:10 - templates\base.html.twig:173 - templates\base.html.twig:200 - templates\base.html.twig:228 - manufacturer.labelp Výrobce - - Part-DB1\templates\_sidebar.html.twig:11 - Part-DB1\templates\_sidebar.html.twig:11 - templates\base.html.twig:174 - templates\base.html.twig:201 - templates\base.html.twig:229 - supplier.labelp Dodavatelé - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:213 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:293 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:293 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:181 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:243 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:268 - attachment.download_failed Stažení externí přílohy se nezdařilo. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:222 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:190 - entity.edit_flash Změny byly úspěšně uloženy. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:231 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:196 - entity.edit_flash.invalid Nelze uložit změnit. Zkontrolujte prosím své zadání! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:302 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:252 - entity.created_flash Vytvořený prvek. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:308 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:258 - entity.created_flash.invalid Nepodařilo se vytvořit prvek. Zkontrolujte prosím zadání! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:399 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:352 - src\Controller\BaseAdminController.php:154 - attachment_type.deleted Prvek smazán! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:401 - Part-DB1\src\Controller\UserController.php:109 - Part-DB1\src\Controller\UserSettingsController.php:159 - Part-DB1\src\Controller\UserSettingsController.php:193 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:354 - Part-DB1\src\Controller\UserController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:150 - Part-DB1\src\Controller\UserSettingsController.php:182 - csfr_invalid Token CSFR je neplatný. Pokud tato zpráva přetrvává, načtěte prosím tuto stránku znovu nebo kontaktujte správce. - - Part-DB1\src\Controller\LabelController.php:125 - label_generator.no_entities_found Nebyly nalezeny žádné entity odpovídající zadání. @@ -4187,8 +2485,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Controller\LogController.php:149 - Part-DB1\src\Controller\LogController.php:154 new @@ -4198,8 +2494,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Controller\LogController.php:156 - Part-DB1\src\Controller\LogController.php:160 new @@ -4209,8 +2503,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Controller\LogController.php:176 - Part-DB1\src\Controller\LogController.php:180 new @@ -4220,8 +2512,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Controller\LogController.php:178 - Part-DB1\src\Controller\LogController.php:182 new @@ -4231,8 +2521,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Controller\LogController.php:185 - Part-DB1\src\Controller\LogController.php:189 new @@ -4242,8 +2530,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Controller\LogController.php:187 - Part-DB1\src\Controller\LogController.php:191 new @@ -4253,8 +2539,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Controller\LogController.php:194 - Part-DB1\src\Controller\LogController.php:198 new @@ -4264,8 +2548,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Controller\LogController.php:196 - Part-DB1\src\Controller\LogController.php:200 new @@ -4275,8 +2557,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Controller\LogController.php:199 - Part-DB1\src\Controller\LogController.php:203 new @@ -4285,306 +2565,168 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - - Part-DB1\src\Controller\PartController.php:182 - Part-DB1\src\Controller\PartController.php:182 - src\Controller\PartController.php:80 - part.edited_flash Uložené změny! - - Part-DB1\src\Controller\PartController.php:216 - Part-DB1\src\Controller\PartController.php:219 - part.deleted Díl úspěšně vymazán. - - Part-DB1\src\Controller\PartController.php:302 - Part-DB1\src\Controller\PartController.php:277 - Part-DB1\src\Controller\PartController.php:317 - src\Controller\PartController.php:113 - src\Controller\PartController.php:142 - part.created_flash Díl vytvořen! - - Part-DB1\src\Controller\PartController.php:308 - Part-DB1\src\Controller\PartController.php:283 - part.created_flash.invalid Chyba při vytváření: Zkontrolujte prosím své zadání! - - Part-DB1\src\Controller\ScanController.php:68 - Part-DB1\src\Controller\ScanController.php:90 - scan.qr_not_found Pro daný čárový kód nebyl nalezen žádný prvek. - - Part-DB1\src\Controller\ScanController.php:71 - scan.format_unknown Neznámý formát! - - Part-DB1\src\Controller\ScanController.php:86 - scan.qr_success Nalezený prvek. - - Part-DB1\src\Controller\SecurityController.php:114 - Part-DB1\src\Controller\SecurityController.php:109 - pw_reset.user_or_email Uživatelské jméno / e-mail - - Part-DB1\src\Controller\SecurityController.php:131 - Part-DB1\src\Controller\SecurityController.php:126 - pw_reset.request.success Žádost o obnovení byla úspěšná! Zkontrolujte prosím své e-maily, kde najdete další pokyny. - - Part-DB1\src\Controller\SecurityController.php:162 - Part-DB1\src\Controller\SecurityController.php:160 - pw_reset.username Uživatelské jméno - - Part-DB1\src\Controller\SecurityController.php:165 - Part-DB1\src\Controller\SecurityController.php:163 - pw_reset.token Token - - Part-DB1\src\Controller\SecurityController.php:194 - Part-DB1\src\Controller\SecurityController.php:192 - pw_reset.new_pw.error Uživatelské jméno nebo token je neplatný! Zkontrolujte prosím své zadání. - - Part-DB1\src\Controller\SecurityController.php:196 - Part-DB1\src\Controller\SecurityController.php:194 - pw_reset.new_pw.success Heslo bylo úspěšně obnoveno. Nyní se můžete přihlásit pomocí nového hesla. - - Part-DB1\src\Controller\UserController.php:107 - Part-DB1\src\Controller\UserController.php:99 - user.edit.reset_success Všechny metody dvoufaktorového ověřování byly úspěšně zakázány. - - Part-DB1\src\Controller\UserSettingsController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:92 - tfa_backup.no_codes_enabled Nejsou povoleny žádné zálohovací kódy! - - Part-DB1\src\Controller\UserSettingsController.php:138 - Part-DB1\src\Controller\UserSettingsController.php:132 - tfa_u2f.u2f_delete.not_existing Žádný bezpečnostní klíč s tímto ID neexistuje. - - Part-DB1\src\Controller\UserSettingsController.php:145 - Part-DB1\src\Controller\UserSettingsController.php:139 - tfa_u2f.u2f_delete.access_denied Bezpečnostní klíče jiných uživatelů nelze odstranit! - - Part-DB1\src\Controller\UserSettingsController.php:153 - Part-DB1\src\Controller\UserSettingsController.php:147 - tfa.u2f.u2f_delete.success Bezpečnostní klíč byl úspěšně odstraněn. - - Part-DB1\src\Controller\UserSettingsController.php:188 - Part-DB1\src\Controller\UserSettingsController.php:180 - tfa_trustedDevice.invalidate.success Důvěryhodná zařízení byla úspěšně resetována. - - Part-DB1\src\Controller\UserSettingsController.php:235 - Part-DB1\src\Controller\UserSettingsController.php:226 - src\Controller\UserController.php:98 - user.settings.saved_flash Nastavení uloženo! - - Part-DB1\src\Controller\UserSettingsController.php:297 - Part-DB1\src\Controller\UserSettingsController.php:288 - src\Controller\UserController.php:130 - user.settings.pw_changed_flash Heslo změněno! - - Part-DB1\src\Controller\UserSettingsController.php:317 - Part-DB1\src\Controller\UserSettingsController.php:306 - user.settings.2fa.google.activated Aplikace Authenticator byla úspěšně aktivována. - - Part-DB1\src\Controller\UserSettingsController.php:328 - Part-DB1\src\Controller\UserSettingsController.php:315 - user.settings.2fa.google.disabled Aplikace Authenticator byla úspěšně deaktivována. - - Part-DB1\src\Controller\UserSettingsController.php:346 - Part-DB1\src\Controller\UserSettingsController.php:332 - user.settings.2fa.backup_codes.regenerated Nové záložní kódy byly úspěšně vygenerovány. - - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - attachment.table.filesize Velikost souboru - - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:245 - Part-DB1\src\DataTables\PartsDataTable.php:252 - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:193 - Part-DB1\src\DataTables\PartsDataTable.php:200 - true pravda - - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:246 - Part-DB1\src\DataTables\PartsDataTable.php:253 - Part-DB1\src\Form\Type\SIUnitType.php:139 - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:201 - Part-DB1\src\Form\Type\SIUnitType.php:139 - false nepravda - - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:128 - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:119 - log.target_deleted smazáno @@ -4592,8 +2734,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\DataTables\Column\RevertLogColumn.php:57 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:60 new @@ -4603,8 +2743,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\DataTables\Column\RevertLogColumn.php:63 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:66 new @@ -4614,8 +2752,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\DataTables\Column\RevertLogColumn.php:83 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:86 new @@ -4624,70 +2760,42 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - - Part-DB1\src\DataTables\LogDataTable.php:173 - Part-DB1\src\DataTables\LogDataTable.php:161 - log.id ID - - Part-DB1\src\DataTables\LogDataTable.php:178 - Part-DB1\src\DataTables\LogDataTable.php:166 - log.timestamp Časové razítko - - Part-DB1\src\DataTables\LogDataTable.php:183 - Part-DB1\src\DataTables\LogDataTable.php:171 - log.type Událost - - Part-DB1\src\DataTables\LogDataTable.php:191 - Part-DB1\src\DataTables\LogDataTable.php:179 - log.level Úroveň - - Part-DB1\src\DataTables\LogDataTable.php:200 - Part-DB1\src\DataTables\LogDataTable.php:188 - log.user Uživatel - - Part-DB1\src\DataTables\LogDataTable.php:213 - Part-DB1\src\DataTables\LogDataTable.php:201 - log.target_type Typ cíle - - Part-DB1\src\DataTables\LogDataTable.php:226 - Part-DB1\src\DataTables\LogDataTable.php:214 - log.target Cíl @@ -4695,8 +2803,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\DataTables\LogDataTable.php:231 - Part-DB1\src\DataTables\LogDataTable.php:218 new @@ -4705,100 +2811,60 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - - Part-DB1\src\DataTables\PartsDataTable.php:168 - Part-DB1\src\DataTables\PartsDataTable.php:116 - part.table.name Název - - Part-DB1\src\DataTables\PartsDataTable.php:178 - Part-DB1\src\DataTables\PartsDataTable.php:126 - part.table.id ID - - Part-DB1\src\DataTables\PartsDataTable.php:182 - Part-DB1\src\DataTables\PartsDataTable.php:130 - part.table.description Popis - - Part-DB1\src\DataTables\PartsDataTable.php:185 - Part-DB1\src\DataTables\PartsDataTable.php:133 - part.table.category Kategorie - - Part-DB1\src\DataTables\PartsDataTable.php:190 - Part-DB1\src\DataTables\PartsDataTable.php:138 - part.table.footprint Otisk - - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:142 - part.table.manufacturer Výrobce - - Part-DB1\src\DataTables\PartsDataTable.php:197 - Part-DB1\src\DataTables\PartsDataTable.php:145 - part.table.storeLocations Umístění - - Part-DB1\src\DataTables\PartsDataTable.php:216 - Part-DB1\src\DataTables\PartsDataTable.php:164 - part.table.amount Množství - - Part-DB1\src\DataTables\PartsDataTable.php:224 - Part-DB1\src\DataTables\PartsDataTable.php:172 - part.table.minamount Min. množství - - Part-DB1\src\DataTables\PartsDataTable.php:232 - Part-DB1\src\DataTables\PartsDataTable.php:180 - part.table.partUnit Měrné jednotky @@ -4811,864 +2877,522 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - - Part-DB1\src\DataTables\PartsDataTable.php:236 - Part-DB1\src\DataTables\PartsDataTable.php:184 - part.table.addedDate Vytvořeno - - Part-DB1\src\DataTables\PartsDataTable.php:240 - Part-DB1\src\DataTables\PartsDataTable.php:188 - part.table.lastModified Naposledy upraveno - - Part-DB1\src\DataTables\PartsDataTable.php:244 - Part-DB1\src\DataTables\PartsDataTable.php:192 - part.table.needsReview Vyžaduje kontrolu - - Part-DB1\src\DataTables\PartsDataTable.php:251 - Part-DB1\src\DataTables\PartsDataTable.php:199 - part.table.favorite Oblíbené - - Part-DB1\src\DataTables\PartsDataTable.php:258 - Part-DB1\src\DataTables\PartsDataTable.php:206 - part.table.manufacturingStatus Stav - - Part-DB1\src\DataTables\PartsDataTable.php:260 - Part-DB1\src\DataTables\PartsDataTable.php:262 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:208 - Part-DB1\src\DataTables\PartsDataTable.php:210 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.unknown Neznámý - - Part-DB1\src\DataTables\PartsDataTable.php:263 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:211 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.announced Oznámeno - - Part-DB1\src\DataTables\PartsDataTable.php:264 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.active Aktivní - - Part-DB1\src\DataTables\PartsDataTable.php:265 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:213 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.nrfnd Nedoporučuje se pro nové návrhy - - Part-DB1\src\DataTables\PartsDataTable.php:266 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:214 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.eol Ukončeno - - Part-DB1\src\DataTables\PartsDataTable.php:267 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:215 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.discontinued Přerušeno - - Part-DB1\src\DataTables\PartsDataTable.php:271 - Part-DB1\src\DataTables\PartsDataTable.php:219 - part.table.mpn MPN - - Part-DB1\src\DataTables\PartsDataTable.php:275 - Part-DB1\src\DataTables\PartsDataTable.php:223 - part.table.mass Hmotnost - - Part-DB1\src\DataTables\PartsDataTable.php:279 - Part-DB1\src\DataTables\PartsDataTable.php:227 - part.table.tags Štítky - - Part-DB1\src\DataTables\PartsDataTable.php:283 - Part-DB1\src\DataTables\PartsDataTable.php:231 - part.table.attachments Přílohy - - Part-DB1\src\EventSubscriber\UserSystem\LoginSuccessSubscriber.php:82 - Part-DB1\src\EventSubscriber\LoginSuccessListener.php:82 - flash.login_successful Přihlášení bylo úspěšné - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - JSON JSON - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - XML XML - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - CSV CSV - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - YAML YAML - - Part-DB1\src\Form\AdminPages\ImportType.php:124 - Part-DB1\src\Form\AdminPages\ImportType.php:124 - import.abort_on_validation.help Pokud je tato možnost aktivována, celý proces importu se přeruší, pokud jsou zjištěna neplatná data. Není-li tato možnost vybrána, neplatná data jsou ignorována a importér se pokusí importovat ostatní prvky. - - Part-DB1\src\Form\AdminPages\ImportType.php:86 - Part-DB1\src\Form\AdminPages\ImportType.php:86 - src\Form\ImportType.php:70 - import.csv_separator CSV oddělovač - - Part-DB1\src\Form\AdminPages\ImportType.php:93 - Part-DB1\src\Form\AdminPages\ImportType.php:93 - src\Form\ImportType.php:72 - parent.label Nadřazený prvek - - Part-DB1\src\Form\AdminPages\ImportType.php:101 - Part-DB1\src\Form\AdminPages\ImportType.php:101 - src\Form\ImportType.php:75 - import.file Soubor - - Part-DB1\src\Form\AdminPages\ImportType.php:111 - Part-DB1\src\Form\AdminPages\ImportType.php:111 - src\Form\ImportType.php:78 - import.preserve_children Zachování podřízených prvků při importu - - Part-DB1\src\Form\AdminPages\ImportType.php:120 - Part-DB1\src\Form\AdminPages\ImportType.php:120 - src\Form\ImportType.php:80 - import.abort_on_validation Přerušit při neplatných datech - - Part-DB1\src\Form\AdminPages\ImportType.php:132 - Part-DB1\src\Form\AdminPages\ImportType.php:132 - src\Form\ImportType.php:85 - import.btn Import - - Part-DB1\src\Form\AttachmentFormType.php:113 - Part-DB1\src\Form\AttachmentFormType.php:109 - attachment.edit.secure_file.help K příloze označené jako soukromá mají přístup pouze ověření uživatelé s příslušným oprávněním. Pokud je tato funkce aktivována, negenerují se náhledy a přístup k souboru je méně výkonný. - - Part-DB1\src\Form\AttachmentFormType.php:127 - Part-DB1\src\Form\AttachmentFormType.php:123 - attachment.edit.url.help Zde můžete zadat adresu URL externího souboru nebo zadat klíčové slovo, které se používá k hledání ve vestavěných zdrojích (např. otisky). - - Part-DB1\src\Form\AttachmentFormType.php:82 - Part-DB1\src\Form\AttachmentFormType.php:79 - attachment.edit.name Název - - Part-DB1\src\Form\AttachmentFormType.php:85 - Part-DB1\src\Form\AttachmentFormType.php:82 - attachment.edit.attachment_type Typ přílohy - - Part-DB1\src\Form\AttachmentFormType.php:94 - Part-DB1\src\Form\AttachmentFormType.php:91 - attachment.edit.show_in_table Zobrazit v tabulce - - Part-DB1\src\Form\AttachmentFormType.php:105 - Part-DB1\src\Form\AttachmentFormType.php:102 - attachment.edit.secure_file Soukromá příloha - - Part-DB1\src\Form\AttachmentFormType.php:119 - Part-DB1\src\Form\AttachmentFormType.php:115 - attachment.edit.url URL - - Part-DB1\src\Form\AttachmentFormType.php:133 - Part-DB1\src\Form\AttachmentFormType.php:129 - attachment.edit.download_url Stáhnout externí soubor - - Part-DB1\src\Form\AttachmentFormType.php:146 - Part-DB1\src\Form\AttachmentFormType.php:142 - attachment.edit.file Nahrát soubor - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:86 - part.label Díl - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:87 - part_lot.label Inventář - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.none Žádné - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.qr QR kód (doporučeno) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code128 Kód 128 (doporučeno) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code39 Kód 39 (doporučeno) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code93 Kód 39 - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.datamatrix Datamatrix - - Part-DB1\src\Form\LabelOptionsType.php:122 - label_options.lines_mode.html Zástupné symboly - - Part-DB1\src\Form\LabelOptionsType.php:122 - label.options.lines_mode.twig Twig - - Part-DB1\src\Form\LabelOptionsType.php:126 - label_options.lines_mode.help Pokud zde vyberete Twig, bude pole obsahu interpretováno jako Twig šablona. Viz <a href="https://twig.symfony.com/doc/3.x/templates.html">dokumentace Twig</a> a <a href="https://docs.part-db.de/usage/labels.html#twig-mode">Wiki</a>, kde najdete další informace. - - Part-DB1\src\Form\LabelOptionsType.php:47 - label_options.page_size.label Velikost štítku - - Part-DB1\src\Form\LabelOptionsType.php:66 - label_options.supported_elements.label Typ cíle - - Part-DB1\src\Form\LabelOptionsType.php:75 - label_options.barcode_type.label Čárový kód - - Part-DB1\src\Form\LabelOptionsType.php:102 - label_profile.lines.label Obsah - - Part-DB1\src\Form\LabelOptionsType.php:111 - label_options.additional_css.label Další styly (CSS) - - Part-DB1\src\Form\LabelOptionsType.php:120 - label_options.lines_mode.label Režim parseru - - Part-DB1\src\Form\LabelOptionsType.php:51 - label_options.width.placeholder Šířka - - Part-DB1\src\Form\LabelOptionsType.php:60 - label_options.height.placeholder Výška - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:49 - label_generator.target_id.range_hint Zde můžete zadat více ID (např. 1,2,3) a/nebo rozsah (1-3), abyste mohli generovat štítky pro více prvků najednou. - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:46 - label_generator.target_id.label Cílové ID - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:59 - label_generator.update Aktualizovat - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:36 - scan_dialog.input Zadání - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:44 - scan_dialog.submit Odeslat - - Part-DB1\src\Form\ParameterType.php:41 - parameters.name.placeholder např. Stejnosměrný proudový zisk - - Part-DB1\src\Form\ParameterType.php:50 - parameters.symbol.placeholder např. h_{FE} - - Part-DB1\src\Form\ParameterType.php:60 - parameters.text.placeholder např. Testovací podmínky - - Part-DB1\src\Form\ParameterType.php:71 - parameters.max.placeholder např. 350 - - Part-DB1\src\Form\ParameterType.php:82 - parameters.min.placeholder např. 100 - - Part-DB1\src\Form\ParameterType.php:93 - parameters.typical.placeholder např. 200 - - Part-DB1\src\Form\ParameterType.php:103 - parameters.unit.placeholder např. V - - Part-DB1\src\Form\ParameterType.php:114 - parameter.group.placeholder např. Technické specifikace - - Part-DB1\src\Form\Part\OrderdetailType.php:72 - Part-DB1\src\Form\Part\OrderdetailType.php:75 - orderdetails.edit.supplierpartnr Číslo dílu dodavatele - - Part-DB1\src\Form\Part\OrderdetailType.php:81 - Part-DB1\src\Form\Part\OrderdetailType.php:84 - orderdetails.edit.supplier Dodavatel - - Part-DB1\src\Form\Part\OrderdetailType.php:87 - Part-DB1\src\Form\Part\OrderdetailType.php:90 - orderdetails.edit.url Odkaz na nabídku - - Part-DB1\src\Form\Part\OrderdetailType.php:93 - Part-DB1\src\Form\Part\OrderdetailType.php:96 - orderdetails.edit.obsolete Již není k dispozici - - Part-DB1\src\Form\Part\OrderdetailType.php:75 - Part-DB1\src\Form\Part\OrderdetailType.php:78 - orderdetails.edit.supplierpartnr.placeholder např. BC 547 - - Part-DB1\src\Form\Part\PartBaseType.php:101 - Part-DB1\src\Form\Part\PartBaseType.php:99 - part.edit.name Název - - Part-DB1\src\Form\Part\PartBaseType.php:109 - Part-DB1\src\Form\Part\PartBaseType.php:107 - part.edit.description Popis - - Part-DB1\src\Form\Part\PartBaseType.php:120 - Part-DB1\src\Form\Part\PartBaseType.php:118 - part.edit.mininstock Minimální zásoba - - Part-DB1\src\Form\Part\PartBaseType.php:129 - Part-DB1\src\Form\Part\PartBaseType.php:127 - part.edit.category Kategorie - - Part-DB1\src\Form\Part\PartBaseType.php:135 - Part-DB1\src\Form\Part\PartBaseType.php:133 - part.edit.footprint Otisk - - Part-DB1\src\Form\Part\PartBaseType.php:142 - Part-DB1\src\Form\Part\PartBaseType.php:140 - part.edit.tags Štítky - - Part-DB1\src\Form\Part\PartBaseType.php:154 - Part-DB1\src\Form\Part\PartBaseType.php:152 - part.edit.manufacturer.label Výrobce - - Part-DB1\src\Form\Part\PartBaseType.php:161 - Part-DB1\src\Form\Part\PartBaseType.php:159 - part.edit.manufacturer_url.label Odkaz na stránku produktu - - Part-DB1\src\Form\Part\PartBaseType.php:167 - Part-DB1\src\Form\Part\PartBaseType.php:165 - part.edit.mpn Číslo dílu výrobce - - Part-DB1\src\Form\Part\PartBaseType.php:173 - Part-DB1\src\Form\Part\PartBaseType.php:171 - part.edit.manufacturing_status Stav výroby - - Part-DB1\src\Form\Part\PartBaseType.php:181 - Part-DB1\src\Form\Part\PartBaseType.php:179 - part.edit.needs_review Vyžaduje kontrolu - - Part-DB1\src\Form\Part\PartBaseType.php:189 - Part-DB1\src\Form\Part\PartBaseType.php:187 - part.edit.is_favorite Oblíbené - - Part-DB1\src\Form\Part\PartBaseType.php:197 - Part-DB1\src\Form\Part\PartBaseType.php:195 - part.edit.mass Hmotnost - - Part-DB1\src\Form\Part\PartBaseType.php:203 - Part-DB1\src\Form\Part\PartBaseType.php:201 - part.edit.partUnit Měrná jednotka @@ -5681,287 +3405,168 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - - Part-DB1\src\Form\Part\PartBaseType.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:210 - part.edit.comment Poznámky - - Part-DB1\src\Form\Part\PartBaseType.php:250 - Part-DB1\src\Form\Part\PartBaseType.php:246 - part.edit.master_attachment Náhled - - Part-DB1\src\Form\Part\PartBaseType.php:295 - Part-DB1\src\Form\Part\PartBaseType.php:276 - src\Form\PartType.php:91 - part.edit.save Uložit změny - - Part-DB1\src\Form\Part\PartBaseType.php:296 - Part-DB1\src\Form\Part\PartBaseType.php:277 - src\Form\PartType.php:92 - part.edit.reset Zrušit změny - - Part-DB1\src\Form\Part\PartBaseType.php:105 - Part-DB1\src\Form\Part\PartBaseType.php:103 - part.edit.name.placeholder např. BC547 - - Part-DB1\src\Form\Part\PartBaseType.php:115 - Part-DB1\src\Form\Part\PartBaseType.php:113 - part.edit.description.placeholder např. NPN 45V, 0,1A, 0,5W - - Part-DB1\src\Form\Part\PartBaseType.php:123 - Part-DB1\src\Form\Part\PartBaseType.php:121 - part.editmininstock.placeholder např. 1 - - Part-DB1\src\Form\Part\PartLotType.php:69 - Part-DB1\src\Form\Part\PartLotType.php:69 - part_lot.edit.description Popis - - Part-DB1\src\Form\Part\PartLotType.php:78 - Part-DB1\src\Form\Part\PartLotType.php:78 - part_lot.edit.location Umístění - - Part-DB1\src\Form\Part\PartLotType.php:89 - Part-DB1\src\Form\Part\PartLotType.php:89 - part_lot.edit.amount Množství - - Part-DB1\src\Form\Part\PartLotType.php:98 - Part-DB1\src\Form\Part\PartLotType.php:97 - part_lot.edit.instock_unknown Množství neznámé - - Part-DB1\src\Form\Part\PartLotType.php:109 - Part-DB1\src\Form\Part\PartLotType.php:108 - part_lot.edit.needs_refill Potřebuje doplnit - - Part-DB1\src\Form\Part\PartLotType.php:120 - Part-DB1\src\Form\Part\PartLotType.php:119 - part_lot.edit.expiration_date Datum vypršení platnosti - - Part-DB1\src\Form\Part\PartLotType.php:128 - Part-DB1\src\Form\Part\PartLotType.php:125 - part_lot.edit.comment Poznámky - - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - perm.group.other Různé - - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - tfa_google.enable Povolit aplikaci Authenticator - - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - tfa_google.disable Deaktivovat aplikaci Authenticator - - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - google_confirmation Potvrzovací kód - - Part-DB1\src\Form\UserSettingsType.php:108 - Part-DB1\src\Form\UserSettingsType.php:108 - src\Form\UserSettingsType.php:46 - user.timezone.label Časové pásmo - - Part-DB1\src\Form\UserSettingsType.php:133 - Part-DB1\src\Form\UserSettingsType.php:132 - user.currency.label Preferovaná měna - - Part-DB1\src\Form\UserSettingsType.php:140 - Part-DB1\src\Form\UserSettingsType.php:139 - src\Form\UserSettingsType.php:53 - save Použít změny - - Part-DB1\src\Form\UserSettingsType.php:141 - Part-DB1\src\Form\UserSettingsType.php:140 - src\Form\UserSettingsType.php:54 - reset Zrušit změny - - Part-DB1\src\Form\UserSettingsType.php:104 - Part-DB1\src\Form\UserSettingsType.php:104 - src\Form\UserSettingsType.php:45 - user_settings.language.placeholder Jazyk serveru - - Part-DB1\src\Form\UserSettingsType.php:115 - Part-DB1\src\Form\UserSettingsType.php:115 - src\Form\UserSettingsType.php:48 - user_settings.timezone.placeholder Časové pásmo serveru - - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - attachment.label Příloha - - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - attachment_type.label Typ přílohy - - Part-DB1\src\Services\ElementTypeNameGenerator.php:82 - Part-DB1\src\Services\ElementTypeNameGenerator.php:82 - project.label Projekt - - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - measurement_unit.label Měrná jednotka @@ -5974,58 +3579,36 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - currency.label Měna - - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - orderdetail.label Detail objednávky - - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - pricedetail.label Detail ceny - - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - user.label Uživatel - - Part-DB1\src\Services\ElementTypeNameGenerator.php:95 - parameter.label Parametr - - Part-DB1\src\Services\ElementTypeNameGenerator.php:96 - label_profile.label Profil štítku @@ -6033,8 +3616,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:176 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:161 new @@ -6043,174 +3624,102 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - - Part-DB1\src\Services\MarkdownParser.php:73 - Part-DB1\src\Services\MarkdownParser.php:73 - markdown.loading Načítání markdown. Pokud tato zpráva nezmizí, zkuste stránku načíst znovu. - - Part-DB1\src\Services\PasswordResetManager.php:98 - Part-DB1\src\Services\PasswordResetManager.php:98 - pw_reset.email.subject Obnovení hesla k účtu Part-DB - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - tree.tools.tools Nástroje - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:107 - src\Services\ToolsTreeBuilder.php:74 - tree.tools.edit Upravit - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:110 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - src\Services\ToolsTreeBuilder.php:81 - tree.tools.show Zobrazit - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:111 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - tree.tools.system Systém - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:123 - tree.tools.tools.label_dialog Generátor štítků - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:130 - tree.tools.tools.label_scanner Čtečka štítků - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:149 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:126 - src\Services\ToolsTreeBuilder.php:62 - tree.tools.edit.attachment_types Typy příloh - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:155 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:132 - src\Services\ToolsTreeBuilder.php:64 - tree.tools.edit.categories Kategorie - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:161 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:138 - src\Services\ToolsTreeBuilder.php:66 - tree.tools.edit.projects Projekty - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:167 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:144 - src\Services\ToolsTreeBuilder.php:68 - tree.tools.edit.suppliers Dodavatelé - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:173 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:150 - src\Services\ToolsTreeBuilder.php:70 - tree.tools.edit.manufacturer Výrobce - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:179 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:156 - tree.tools.edit.storelocation Umístění - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:185 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:162 - tree.tools.edit.footprint Otisky - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:191 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:168 - tree.tools.edit.currency Měny - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:174 - tree.tools.edit.measurement_unit Měrné jednotky @@ -6223,40 +3732,24 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.edit.label_profile Profily štítků - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:209 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:180 - tree.tools.edit.part Nový díl - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:226 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - src\Services\ToolsTreeBuilder.php:77 - tree.tools.show.all_parts Zobrazit všechny díly - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:232 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.show.all_attachments Přílohy @@ -6264,8 +3757,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:239 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:210 new @@ -6274,20 +3765,12 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:258 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:229 - tree.tools.system.users Uživatelé - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:264 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:235 - tree.tools.system.groups Skupiny @@ -6295,8 +3778,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:271 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:242 new @@ -6305,11 +3786,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - src\Services\TreeBuilder.php:124 - entity.tree.new Nový prvek @@ -6317,7 +3793,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 obsolete @@ -6327,8 +3802,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\templates\_navbar.html.twig:27 - templates\base.html.twig:88 obsolete @@ -6338,8 +3811,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Form\UserSettingsType.php:119 - src\Form\UserSettingsType.php:49 obsolete @@ -6349,8 +3820,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Form\UserSettingsType.php:129 - src\Form\UserSettingsType.php:50 obsolete @@ -6360,7 +3829,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:100 new obsolete @@ -6371,10 +3839,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:128 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:150 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:169 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:207 new obsolete @@ -6385,10 +3849,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:130 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:152 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:171 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:209 new obsolete @@ -6399,7 +3859,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:139 new obsolete @@ -6410,7 +3869,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:160 new obsolete @@ -6421,7 +3879,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:184 new obsolete @@ -6432,7 +3889,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:198 new obsolete @@ -6443,7 +3899,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:214 new obsolete @@ -6454,7 +3909,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - templates\base.html.twig:81 obsolete obsolete @@ -6465,7 +3919,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - templates\base.html.twig:109 obsolete obsolete @@ -6476,7 +3929,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - templates\base.html.twig:112 obsolete obsolete @@ -6767,7 +4219,6 @@ Pokud jste to provedli nesprávně nebo pokud počítač již není důvěryhodn - src\Form\PartType.php:63 obsolete obsolete @@ -7440,7 +4891,6 @@ Element 3 - templates\Parts\show_part_info.html.twig:194 obsolete obsolete @@ -7451,7 +4901,6 @@ Element 3 - src\Form\PartType.php:83 obsolete obsolete @@ -13465,4 +10914,4 @@ Vezměte prosím na vědomí, že se nemůžete vydávat za uživatele se zakáz - + \ No newline at end of file diff --git a/translations/messages.da.xlf b/translations/messages.da.xlf index af92eea0..9878a09e 100644 --- a/translations/messages.da.xlf +++ b/translations/messages.da.xlf @@ -2,11 +2,6 @@ - - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - attachment_type.caption Bilag-filtyper @@ -14,7 +9,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:12 new @@ -24,7 +18,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:16 new @@ -33,45 +26,18 @@ - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - templates\AdminPages\CategoryAdmin.html.twig:4 - templates\base.html.twig:163 - templates\base.html.twig:170 - templates\base.html.twig:197 - templates\base.html.twig:225 - category.labelp Kategorier - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:19 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:11 - templates\AdminPages\CategoryAdmin.html.twig:8 - admin.options Optioner - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - templates\AdminPages\CategoryAdmin.html.twig:9 - admin.advanced Avanceret @@ -79,7 +45,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:13 new @@ -89,7 +54,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:17 new @@ -98,20 +62,12 @@ - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - currency.iso_code.caption ISO kode - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - currency.symbol.caption Valutaenhed @@ -119,7 +75,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:29 new @@ -129,7 +84,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:33 new @@ -139,7 +93,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:8 new @@ -149,7 +102,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:12 new @@ -158,89 +110,36 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Søg - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - templates\AdminPages\EntityAdminBase.html.twig:13 - templates\base.html.twig:166 - templates\base.html.twig:193 - templates\base.html.twig:221 - expandAll Udfold alle - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - templates\AdminPages\EntityAdminBase.html.twig:17 - templates\base.html.twig:167 - templates\base.html.twig:194 - templates\base.html.twig:222 - reduceAll Sammenfold alle - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - part.info.timetravel_hint Det er hvordan delen fremstod før %timestamp%. <i>Venligst bemærk at dette er en eksperimentel funktion. Så derfor kan info være ukorrekt.</i> - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - templates\AdminPages\EntityAdminBase.html.twig:42 - standard.label Egenskaber - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - templates\AdminPages\EntityAdminBase.html.twig:43 - infos.label Info @@ -248,8 +147,6 @@ - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 new @@ -258,120 +155,66 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - templates\AdminPages\EntityAdminBase.html.twig:45 - export.label Eksport - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - templates\AdminPages\EntityAdminBase.html.twig:47 - import_export.label Import - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - mass_creation.label Masseoprettelse - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - templates\AdminPages\EntityAdminBase.html.twig:59 - admin.common Fælles - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - admin.attachments Bilag - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:90 - admin.parameters Parametre - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:179 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:167 - templates\AdminPages\EntityAdminBase.html.twig:142 - export_all.label Eksportér alle elementer - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:185 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:173 - mass_creation.help Hver linje fortolkes og oprettes som et navn til et nyt element. Ved at indrykke tekst kan du lave strukturer - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - templates\AdminPages\EntityAdminBase.html.twig:35 - edit.caption Ret element "%name" - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - templates\AdminPages\EntityAdminBase.html.twig:37 - new.caption Nyt element - - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - templates\base.html.twig:172 - templates\base.html.twig:199 - templates\base.html.twig:227 - footprint.labelp Footprint @@ -379,7 +222,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:13 new @@ -389,7 +231,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:17 new @@ -398,12 +239,6 @@ - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - user.edit.permissions Rettigheder @@ -411,7 +246,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:24 new @@ -421,7 +255,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:28 new @@ -430,18 +263,12 @@ - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:8 - label_profile.advanced Avanceret - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:9 - label_profile.comment Notater @@ -449,7 +276,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:55 new @@ -459,7 +285,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:59 new @@ -469,7 +294,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:8 new @@ -479,7 +303,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:12 new @@ -488,15 +311,6 @@ - - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:5 - Part-DB1\templates\_sidebar.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:8 - templates\base.html.twig:171 - templates\base.html.twig:198 - templates\base.html.twig:226 - storelocation.labelp Lagerlokationer @@ -504,7 +318,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:32 new @@ -514,7 +327,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:36 new @@ -524,7 +336,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:16 new @@ -534,7 +345,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:20 new @@ -543,110 +353,60 @@ - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - user.edit.configuration Opsætning - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - user.edit.password Password - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - user.edit.tfa.caption To-faktor godkendelse - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - user.edit.tfa.google_active Godkendelses-app aktiv - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - tfa_backup.remaining_tokens Antal resterende backupkoder - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - tfa_backup.generation_date Oprettelsesdato for backupkoder - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - user.edit.tfa.disabled Metode ikke aktiveret - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - user.edit.tfa.u2f_keys_count Aktive sikkerhedsnøgler - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_title Ønsker du at fortsætte? - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_message Dette vil deaktivere <b>alle aktive to-faktor godkendelsesmetoder af brugere</b> og slette <b>backupkoderne</b>! @@ -656,10 +416,6 @@ Brugeren skal sætte alle to-faktor godkendelsesmetoder op igen og printe nye ba - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - user.edit.tfa.disable_tfa.btn Deaktivér all to-faktor godkendelsesmetoder @@ -667,7 +423,6 @@ Brugeren skal sætte alle to-faktor godkendelsesmetoder op igen og printe nye ba - Part-DB1\templates\AdminPages\UserAdmin.html.twig:85 new @@ -677,7 +432,6 @@ Brugeren skal sætte alle to-faktor godkendelsesmetoder op igen og printe nye ba - Part-DB1\templates\AdminPages\UserAdmin.html.twig:89 new @@ -686,13 +440,6 @@ Brugeren skal sætte alle to-faktor godkendelsesmetoder op igen og printe nye ba - - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:63 - attachment.delete Slet @@ -705,102 +452,48 @@ Brugeren skal sætte alle to-faktor godkendelsesmetoder op igen og printe nye ba - - Part-DB1\templates\AdminPages\_attachments.html.twig:49 - Part-DB1\templates\Parts\edit\_attachments.html.twig:47 - Part-DB1\templates\AdminPages\_attachments.html.twig:47 - Part-DB1\templates\Parts\edit\_attachments.html.twig:45 - attachment.preview.alt Billede af bilag - - Part-DB1\templates\AdminPages\_attachments.html.twig:52 - Part-DB1\templates\Parts\edit\_attachments.html.twig:50 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 - Part-DB1\templates\AdminPages\_attachments.html.twig:50 - Part-DB1\templates\Parts\edit\_attachments.html.twig:48 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:45 - attachment.view_local vedhæftning.vis_lokalt - - Part-DB1\templates\AdminPages\_attachments.html.twig:58 - Part-DB1\templates\Parts\edit\_attachments.html.twig:56 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:43 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - Part-DB1\templates\AdminPages\_attachments.html.twig:56 - Part-DB1\templates\Parts\edit\_attachments.html.twig:54 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:38 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - attachment.file_not_found Fil ikke fundet - - Part-DB1\templates\AdminPages\_attachments.html.twig:66 - Part-DB1\templates\Parts\edit\_attachments.html.twig:64 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:48 - Part-DB1\templates\Parts\edit\_attachments.html.twig:62 - attachment.secure Privat bilag - - Part-DB1\templates\AdminPages\_attachments.html.twig:79 - Part-DB1\templates\Parts\edit\_attachments.html.twig:77 - Part-DB1\templates\AdminPages\_attachments.html.twig:77 - Part-DB1\templates\Parts\edit\_attachments.html.twig:75 - attachment.create Tilføj bilag - - Part-DB1\templates\AdminPages\_attachments.html.twig:84 - Part-DB1\templates\Parts\edit\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - Part-DB1\templates\AdminPages\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_attachments.html.twig:80 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - part_lot.edit.delete.confirm Ønsker du virkeligt at slette dette lager? Du kan ikke fortryde det senere! - - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - templates\AdminPages\_delete_form.html.twig:2 - entity.delete.confirm_title Ønsker du virkeligt at slette %name%? - - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - templates\AdminPages\_delete_form.html.twig:3 - entity.delete.message Dette kan ikke fortrydes! @@ -809,11 +502,6 @@ Underelementer vil blive flyttet opad. - - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - templates\AdminPages\_delete_form.html.twig:9 - entity.delete Slet element @@ -821,12 +509,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:45 - Part-DB1\src\Form\Part\PartBaseType.php:286 - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:43 - Part-DB1\src\Form\Part\PartBaseType.php:267 new @@ -835,561 +517,300 @@ Underelementer vil blive flyttet opad. - - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - templates\AdminPages\_delete_form.html.twig:12 - entity.delete.recursive Slet rekursivt (alle underelementer) - - Part-DB1\templates\AdminPages\_duplicate.html.twig:3 - entity.duplicate Kopier element - - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - templates\AdminPages\_export_form.html.twig:4 - src\Form\ImportType.php:67 - export.format Filformat - - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - templates\AdminPages\_export_form.html.twig:16 - export.level Detaljegrad - - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - templates\AdminPages\_export_form.html.twig:19 - export.level.simple Simpel - - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - templates\AdminPages\_export_form.html.twig:20 - export.level.extended Udvidet - - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - templates\AdminPages\_export_form.html.twig:21 - export.level.full Fuldstændig - - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - templates\AdminPages\_export_form.html.twig:31 - export.include_children medtag underelementer ved eksport - - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - templates\AdminPages\_export_form.html.twig:39 - export.btn Eksport - - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - templates\AdminPages\EntityAdminBase.html.twig:94 - templates\Parts\edit_part_info.html.twig:12 - templates\Parts\show_part_info.html.twig:11 - id.label ID - - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:76 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:77 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:77 - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:59 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:60 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:53 - templates\AdminPages\EntityAdminBase.html.twig:101 - templates\Parts\show_part_info.html.twig:248 - createdAt Oprettet d. - - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:73 - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:49 - templates\AdminPages\EntityAdminBase.html.twig:114 - templates\Parts\show_part_info.html.twig:263 - lastModified Sidst rettet - - Part-DB1\templates\AdminPages\_info.html.twig:38 - Part-DB1\templates\AdminPages\_info.html.twig:38 - entity.info.parts_count antal dele med dette element - - Part-DB1\templates\AdminPages\_parameters.html.twig:6 - Part-DB1\templates\helper.twig:125 - Part-DB1\templates\Parts\edit\_specifications.html.twig:6 - specifications.property Parameter - - Part-DB1\templates\AdminPages\_parameters.html.twig:7 - Part-DB1\templates\Parts\edit\_specifications.html.twig:7 - specifications.symbol Symbol - - Part-DB1\templates\AdminPages\_parameters.html.twig:8 - Part-DB1\templates\Parts\edit\_specifications.html.twig:8 - specifications.value_min Min. - - Part-DB1\templates\AdminPages\_parameters.html.twig:9 - Part-DB1\templates\Parts\edit\_specifications.html.twig:9 - specifications.value_typ Typ. - - Part-DB1\templates\AdminPages\_parameters.html.twig:10 - Part-DB1\templates\Parts\edit\_specifications.html.twig:10 - specifications.value_max Max. - - Part-DB1\templates\AdminPages\_parameters.html.twig:11 - Part-DB1\templates\Parts\edit\_specifications.html.twig:11 - specifications.unit Enhed - - Part-DB1\templates\AdminPages\_parameters.html.twig:12 - Part-DB1\templates\Parts\edit\_specifications.html.twig:12 - specifications.text Tekst - - Part-DB1\templates\AdminPages\_parameters.html.twig:13 - Part-DB1\templates\Parts\edit\_specifications.html.twig:13 - specifications.group Gruppe - - Part-DB1\templates\AdminPages\_parameters.html.twig:26 - Part-DB1\templates\Parts\edit\_specifications.html.twig:26 - specification.create Ny parameter - - Part-DB1\templates\AdminPages\_parameters.html.twig:31 - Part-DB1\templates\Parts\edit\_specifications.html.twig:31 - parameter.delete.confirm Ønsker du at slette denne parameter? - - Part-DB1\templates\attachment_list.html.twig:3 - Part-DB1\templates\attachment_list.html.twig:3 - attachment.list.title Bilagsliste - - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - part_list.loading.caption Henter - - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - part_list.loading.message Dette kan tage et øjeblik. Hvis denne meddelelse ikke forsvinder, prøv at genindlæse siden. - - Part-DB1\templates\base.html.twig:68 - Part-DB1\templates\base.html.twig:68 - templates\base.html.twig:246 - vendor.base.javascript_hint Sørg for at aktivere alle Javascriptfunktioner! - - Part-DB1\templates\base.html.twig:73 - Part-DB1\templates\base.html.twig:73 - sidebar.big.toggle Vis/skjul sidepanel - - Part-DB1\templates\base.html.twig:95 - Part-DB1\templates\base.html.twig:95 - templates\base.html.twig:271 - loading.caption Henter: - - Part-DB1\templates\base.html.twig:96 - Part-DB1\templates\base.html.twig:96 - templates\base.html.twig:272 - loading.message Dette kan taget noget tid. Hvis denne meddelelse bliver stående i lang tid, forsøg da at genindlæse siden. - - Part-DB1\templates\base.html.twig:101 - Part-DB1\templates\base.html.twig:101 - templates\base.html.twig:277 - loading.bar Henter... - - Part-DB1\templates\base.html.twig:112 - Part-DB1\templates\base.html.twig:112 - templates\base.html.twig:288 - back_to_top Tilbage til toppen af siden - - Part-DB1\templates\Form\permissionLayout.html.twig:35 - Part-DB1\templates\Form\permissionLayout.html.twig:35 - permission.edit.permission Rettigheder - - Part-DB1\templates\Form\permissionLayout.html.twig:36 - Part-DB1\templates\Form\permissionLayout.html.twig:36 - permission.edit.value Værdi - - Part-DB1\templates\Form\permissionLayout.html.twig:53 - Part-DB1\templates\Form\permissionLayout.html.twig:53 - permission.legend.title Forklaring til tilstande - - Part-DB1\templates\Form\permissionLayout.html.twig:57 - Part-DB1\templates\Form\permissionLayout.html.twig:57 - permission.legend.disallow Ej tilladt - - Part-DB1\templates\Form\permissionLayout.html.twig:61 - Part-DB1\templates\Form\permissionLayout.html.twig:61 - permission.legend.allow Tilladt - - Part-DB1\templates\Form\permissionLayout.html.twig:65 - Part-DB1\templates\Form\permissionLayout.html.twig:65 - permission.legend.inherit Nedarv fra (overordnet) gruppe - - Part-DB1\templates\helper.twig:3 - Part-DB1\templates\helper.twig:3 - bool.true Sand - - Part-DB1\templates\helper.twig:5 - Part-DB1\templates\helper.twig:5 - bool.false Falsk - - Part-DB1\templates\helper.twig:92 - Part-DB1\templates\helper.twig:87 - Yes Ja - - Part-DB1\templates\helper.twig:94 - Part-DB1\templates\helper.twig:89 - No Nej - - Part-DB1\templates\helper.twig:126 - specifications.value Værdi - - Part-DB1\templates\homepage.html.twig:7 - Part-DB1\templates\homepage.html.twig:7 - templates\homepage.html.twig:7 - version.caption Version - - Part-DB1\templates\homepage.html.twig:22 - Part-DB1\templates\homepage.html.twig:22 - templates\homepage.html.twig:19 - homepage.license Licensinformation - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.caption Projektoversigt - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.text Kilde, downloads, fejlrapporter, to-do-list etc. kan findes på <a href="%href%" class="link-external" target="_blank">GitHub project page</a> - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.caption Hjælp - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.text Hjælp og tips kan findes på Wiki <a href="%href%" class="link-external" target="_blank">GitHub siden</a> - - Part-DB1\templates\homepage.html.twig:33 - Part-DB1\templates\homepage.html.twig:33 - templates\homepage.html.twig:30 - homepage.forum.caption Forum @@ -1397,8 +818,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\homepage.html.twig:45 - Part-DB1\templates\homepage.html.twig:45 new @@ -1407,138 +826,90 @@ Underelementer vil blive flyttet opad. - - Part-DB1\templates\LabelSystem\dialog.html.twig:3 - Part-DB1\templates\LabelSystem\dialog.html.twig:6 - label_generator.title Labelgenerator - - Part-DB1\templates\LabelSystem\dialog.html.twig:16 - label_generator.common Fælles - - Part-DB1\templates\LabelSystem\dialog.html.twig:20 - label_generator.advanced Avanceret - - Part-DB1\templates\LabelSystem\dialog.html.twig:24 - label_generator.profiles Profiler - - Part-DB1\templates\LabelSystem\dialog.html.twig:58 - label_generator.selected_profile Valgte profil - - Part-DB1\templates\LabelSystem\dialog.html.twig:62 - label_generator.edit_profile Ret profil - - Part-DB1\templates\LabelSystem\dialog.html.twig:75 - label_generator.load_profile Hent profil - - Part-DB1\templates\LabelSystem\dialog.html.twig:102 - label_generator.download Hent - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:3 - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:5 - label_generator.label_btn Opret label - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:20 - label_generator.label_empty Ny tom label - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:3 - label_scanner.title Label scanner - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.title Intet webcam fundet - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.text Du skal bruge et webcam og give lov til at bruge det som scanner. Du kan indtaste stregkoden manuelt nedenfor. - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:27 - label_scanner.source_select Vælg kilde - - Part-DB1\templates\LogSystem\log_list.html.twig:3 - Part-DB1\templates\LogSystem\log_list.html.twig:3 - log.list.title Systemlog @@ -1546,8 +917,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\LogSystem\_log_table.html.twig:1 - Part-DB1\templates\LogSystem\_log_table.html.twig:1 new @@ -1557,8 +926,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\LogSystem\_log_table.html.twig:2 - Part-DB1\templates\LogSystem\_log_table.html.twig:2 new @@ -1567,194 +934,114 @@ Underelementer vil blive flyttet opad. - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.email_sent_by Denne e-mail er afsendt automatisk af - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.dont_reply Venligt undlad at svare på denne e-mail. - - Part-DB1\templates\mail\pw_reset.html.twig:6 - Part-DB1\templates\mail\pw_reset.html.twig:6 - email.hi %name% Hej %name% - - Part-DB1\templates\mail\pw_reset.html.twig:7 - Part-DB1\templates\mail\pw_reset.html.twig:7 - email.pw_reset.message En eller anden (forhåbentlig dig) har anmodet om at nulstille det gemte password. Hvis du ikke har anmodet om dette, venligst ignorér denne e-mail. - - Part-DB1\templates\mail\pw_reset.html.twig:9 - Part-DB1\templates\mail\pw_reset.html.twig:9 - email.pw_reset.button Klik her for at nulstille password - - Part-DB1\templates\mail\pw_reset.html.twig:11 - Part-DB1\templates\mail\pw_reset.html.twig:11 - email.pw_reset.fallback Hvis dette ikke virker, gå til <a href="%url%">%url%</a> og indtast følgende information - - Part-DB1\templates\mail\pw_reset.html.twig:16 - Part-DB1\templates\mail\pw_reset.html.twig:16 - email.pw_reset.username Brugernavn - - Part-DB1\templates\mail\pw_reset.html.twig:19 - Part-DB1\templates\mail\pw_reset.html.twig:19 - email.pw_reset.token Token - - Part-DB1\templates\mail\pw_reset.html.twig:24 - Part-DB1\templates\mail\pw_reset.html.twig:24 - email.pw_reset.valid_unit %date% Nulstillingstoken'en vil være gyldig indtil <i>%date%</i>. - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:18 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:78 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - orderdetail.delete Slet - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - pricedetails.edit.min_qty Minimum rabat-antal - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - pricedetails.edit.price Pris - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - pricedetails.edit.price_qty for mængde - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - pricedetail.create Anfør pris - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - templates\Parts\edit_part_info.html.twig:4 - part.edit.title Rediger komponent %name% - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - templates\Parts\edit_part_info.html.twig:9 - part.edit.card_title Rediger del - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - part.edit.tab.common Fælles - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - part.edit.tab.manufacturer Fabrikant - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - part.edit.tab.advanced Avanceret @@ -1821,279 +1108,156 @@ Underelementer vil blive flyttet opad. - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - part.edit.tab.part_lots Lagerbestand - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - part.edit.tab.attachments Vedhæftede filer - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - part.edit.tab.orderdetails indkøbsinformation - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.specifications Paremetre - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:64 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.comment Noter - - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - templates\Parts\new_part.html.twig:8 - part.new.card_title Opret ny del - - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - part_lot.delete Slet - - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - part_lot.create Opret beholdning - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - orderdetail.create tilføj distributør - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - pricedetails.edit.delete.confirm Er du sikker på, at du vil slette denne pris? Dette kan ikke fortrydes! - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:62 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:61 - orderdetails.edit.delete.confirm Er du sikker på, at du vil slette denne leverandør? Dette kan ikke fortrydes! - - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - templates\Parts\show_part_info.html.twig:4 - templates\Parts\show_part_info.html.twig:9 - part.info.title Detaljerede oplysninger vedr. - - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - part.part_lots.label Lagerbestand - - Part-DB1\templates\Parts\info\show_part_info.html.twig:56 - Part-DB1\templates\Parts\lists\_info_card.html.twig:43 - Part-DB1\templates\_navbar_search.html.twig:31 - Part-DB1\templates\_navbar_search.html.twig:26 - templates\base.html.twig:62 - templates\Parts\show_part_info.html.twig:74 - src\Form\PartType.php:86 - comment.label Noter - - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - part.info.specifications Paremeter - - Part-DB1\templates\Parts\info\show_part_info.html.twig:74 - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - templates\Parts\show_part_info.html.twig:82 - attachment.labelp Vedhæftede filer - - Part-DB1\templates\Parts\info\show_part_info.html.twig:83 - Part-DB1\templates\Parts\info\show_part_info.html.twig:71 - templates\Parts\show_part_info.html.twig:88 - vendor.partinfo.shopping_infos Indkøbsinformation - - Part-DB1\templates\Parts\info\show_part_info.html.twig:91 - Part-DB1\templates\Parts\info\show_part_info.html.twig:78 - templates\Parts\show_part_info.html.twig:94 - vendor.partinfo.history Historik - - Part-DB1\templates\Parts\info\show_part_info.html.twig:97 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - Part-DB1\templates\Parts\info\show_part_info.html.twig:84 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - templates\base.html.twig:176 - templates\base.html.twig:203 - templates\base.html.twig:217 - templates\base.html.twig:231 - templates\Parts\show_part_info.html.twig:100 - tools.label Værktøjer - - Part-DB1\templates\Parts\info\show_part_info.html.twig:103 - Part-DB1\templates\Parts\info\show_part_info.html.twig:90 - extended_info.label Yderligere Informationen - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - attachment.name Navn - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - attachment.attachment_type Vedhæft sikkerhedstype - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - attachment.file_name vedhæft fil_navn - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - attachment.file_size vedhæftet fil_størrelse - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:54 - attachment.preview Forhåndsvisningbillede - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:67 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:50 - attachment.download_local vedhæftning.download_lokalt @@ -2101,8 +1265,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 new @@ -2111,14 +1273,6 @@ Underelementer vil blive flyttet opad. - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Unknown Ukendt @@ -2126,10 +1280,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 new @@ -2139,8 +1289,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 new @@ -2149,49 +1297,24 @@ Underelementer vil blive flyttet opad. - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - part.isFavorite Favorit - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - part.minOrderAmount Minimum ordrestørrelse - - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:46 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:41 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - templates\base.html.twig:70 - templates\Parts\show_part_info.html.twig:24 - src\Form\PartType.php:80 - manufacturer.label Fabrikant - - Part-DB1\templates\Parts\info\_main_infos.html.twig:24 - Part-DB1\templates\_navbar_search.html.twig:11 - templates\base.html.twig:54 - src\Form\PartType.php:62 - name.label Navn @@ -2199,8 +1322,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 new @@ -2209,767 +1330,432 @@ Underelementer vil blive flyttet opad. - - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:19 - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:18 - templates\base.html.twig:58 - templates\Parts\show_part_info.html.twig:31 - src\Form\PartType.php:65 - description.label Beskrivelse - - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:15 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:14 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - templates\base.html.twig:56 - templates\Parts\show_part_info.html.twig:32 - src\Form\PartType.php:74 - category.label Kategori - - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - templates\Parts\show_part_info.html.twig:42 - src\Form\PartType.php:69 - instock.label På lager - - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - templates\Parts\show_part_info.html.twig:44 - src\Form\PartType.php:72 - mininstock.label Minimumbestand - - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:52 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:47 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - templates\base.html.twig:73 - templates\Parts\show_part_info.html.twig:47 - footprint.label Footprint - - Part-DB1\templates\Parts\info\_main_infos.html.twig:56 - Part-DB1\templates\Parts\info\_main_infos.html.twig:59 - Part-DB1\templates\Parts\info\_main_infos.html.twig:57 - Part-DB1\templates\Parts\info\_main_infos.html.twig:60 - templates\Parts\show_part_info.html.twig:51 - part.avg_price.label Gennemsnitspris - - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - part.supplier.name Navn - - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - part.supplier.partnr Bestillingsnummer. - - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - part.order.minamount Mindsteantal - - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - part.order.price Pris - - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - part.order.single_price Enhedspris - - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - Part-DB1\templates\Parts\info\_part_lots.html.twig:6 - part_lots.description Beskrivelse - - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - part_lots.storage_location Lagerlokation - - Part-DB1\templates\Parts\info\_part_lots.html.twig:9 - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - part_lots.amount Mængde - - Part-DB1\templates\Parts\info\_part_lots.html.twig:24 - Part-DB1\templates\Parts\info\_part_lots.html.twig:22 - part_lots.location_unknown Ukendt lagerlokation - - Part-DB1\templates\Parts\info\_part_lots.html.twig:31 - Part-DB1\templates\Parts\info\_part_lots.html.twig:29 - part_lots.instock_unknown Ukendt mængde - - Part-DB1\templates\Parts\info\_part_lots.html.twig:40 - Part-DB1\templates\Parts\info\_part_lots.html.twig:38 - part_lots.expiration_date Udløbsdato - - Part-DB1\templates\Parts\info\_part_lots.html.twig:48 - Part-DB1\templates\Parts\info\_part_lots.html.twig:46 - part_lots.is_expired Udløbet - - Part-DB1\templates\Parts\info\_part_lots.html.twig:55 - Part-DB1\templates\Parts\info\_part_lots.html.twig:53 - part_lots.need_refill Skal fyldes op - - Part-DB1\templates\Parts\info\_picture.html.twig:15 - Part-DB1\templates\Parts\info\_picture.html.twig:15 - part.info.prev_picture Forrige billede - - Part-DB1\templates\Parts\info\_picture.html.twig:19 - Part-DB1\templates\Parts\info\_picture.html.twig:19 - part.info.next_picture Næste billede - - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - part.mass.tooltip Vægt - - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - part.needs_review.badge Gennemgang nødvendig - - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - part.favorite.badge Favorit - - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - part.obsolete.badge Ikke længere tilgængelig - - Part-DB1\templates\Parts\info\_specifications.html.twig:10 - parameters.extracted_from_description Automatisk udtrukket fra beskrivelse - - Part-DB1\templates\Parts\info\_specifications.html.twig:15 - parameters.auto_extracted_from_comment Automatisk udtrukket fra noter - - Part-DB1\templates\Parts\info\_tools.html.twig:6 - Part-DB1\templates\Parts\info\_tools.html.twig:4 - templates\Parts\show_part_info.html.twig:125 - part.edit.btn Rediger komponent - - Part-DB1\templates\Parts\info\_tools.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:14 - templates\Parts\show_part_info.html.twig:135 - part.clone.btn Kopier komponent - - Part-DB1\templates\Parts\info\_tools.html.twig:24 - Part-DB1\templates\Parts\lists\_action_bar.html.twig:4 - templates\Parts\show_part_info.html.twig:143 - part.create.btn Opret ny komponent - - Part-DB1\templates\Parts\info\_tools.html.twig:31 - Part-DB1\templates\Parts\info\_tools.html.twig:29 - part.delete.confirm_title Vil du virkelig slette denne komponent - - Part-DB1\templates\Parts\info\_tools.html.twig:32 - Part-DB1\templates\Parts\info\_tools.html.twig:30 - part.delete.message Komponenten og alle dens relaterede oplysninger (bilag, priser osv. ) slettes. Dette kan ikke fortrydes! - - Part-DB1\templates\Parts\info\_tools.html.twig:39 - Part-DB1\templates\Parts\info\_tools.html.twig:37 - part.delete Slet komponent - - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - parts_list.all.title Alle komponenter - - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - parts_list.category.title Komponent med kategori - - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - parts_list.footprint.title Komponent med footprint - - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - parts_list.manufacturer.title Komponenter med fabrikanter - - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - parts_list.search.title Søg komponenter - - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - parts_list.storelocation.title Komponenter med lagerlokationer - - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - parts_list.supplier.title Komponenter med leverandører - - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - parts_list.tags.title Komponenter med tag - - Part-DB1\templates\Parts\lists\_info_card.html.twig:22 - Part-DB1\templates\Parts\lists\_info_card.html.twig:17 - entity.info.common.tab Fælles - - Part-DB1\templates\Parts\lists\_info_card.html.twig:26 - Part-DB1\templates\Parts\lists\_info_card.html.twig:20 - entity.info.statistics.tab Statistik - - Part-DB1\templates\Parts\lists\_info_card.html.twig:31 - entity.info.attachments.tab Vedhæftede filer - - Part-DB1\templates\Parts\lists\_info_card.html.twig:37 - entity.info.parameters.tab Parametre - - Part-DB1\templates\Parts\lists\_info_card.html.twig:54 - Part-DB1\templates\Parts\lists\_info_card.html.twig:30 - entity.info.name Navn - - Part-DB1\templates\Parts\lists\_info_card.html.twig:58 - Part-DB1\templates\Parts\lists\_info_card.html.twig:96 - Part-DB1\templates\Parts\lists\_info_card.html.twig:34 - Part-DB1\templates\Parts\lists\_info_card.html.twig:67 - entity.info.parent Overordnet element - - Part-DB1\templates\Parts\lists\_info_card.html.twig:70 - Part-DB1\templates\Parts\lists\_info_card.html.twig:46 - entity.edit.btn Redigere - - Part-DB1\templates\Parts\lists\_info_card.html.twig:92 - Part-DB1\templates\Parts\lists\_info_card.html.twig:63 - entity.info.children_count Antal af underelementer - - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - tfa.check.title To-faktor godkendelse påkrævet - - Part-DB1\templates\security\2fa_base_form.html.twig:39 - Part-DB1\templates\security\2fa_base_form.html.twig:39 - tfa.code.trusted_pc Dette er en pålidelig computer (hvis dette er aktiveret, udføres der ikke yderligere to-faktorforespørgsler på denne computer) - - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - login.btn Login - - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:42 - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:40 - user.logout Log ud - - Part-DB1\templates\security\2fa_form.html.twig:6 - Part-DB1\templates\security\2fa_form.html.twig:6 - tfa.check.code.label Godkendelses app kode - - Part-DB1\templates\security\2fa_form.html.twig:10 - Part-DB1\templates\security\2fa_form.html.twig:10 - tfa.check.code.help Indtast den 6-cifrede kode fra din godkendelsesapp her eller en af dine backupkoder, hvis godkendelses app'en ikke er tilgændelig. - - Part-DB1\templates\security\login.html.twig:3 - Part-DB1\templates\security\login.html.twig:3 - templates\security\login.html.twig:3 - login.title Login - - Part-DB1\templates\security\login.html.twig:7 - Part-DB1\templates\security\login.html.twig:7 - templates\security\login.html.twig:7 - login.card_title Login - - Part-DB1\templates\security\login.html.twig:31 - Part-DB1\templates\security\login.html.twig:31 - templates\security\login.html.twig:31 - login.username.label Brugernavn - - Part-DB1\templates\security\login.html.twig:34 - Part-DB1\templates\security\login.html.twig:34 - templates\security\login.html.twig:34 - login.username.placeholder Brugernavn - - Part-DB1\templates\security\login.html.twig:38 - Part-DB1\templates\security\login.html.twig:38 - templates\security\login.html.twig:38 - login.password.label Password - - Part-DB1\templates\security\login.html.twig:40 - Part-DB1\templates\security\login.html.twig:40 - templates\security\login.html.twig:40 - login.password.placeholder Password - - Part-DB1\templates\security\login.html.twig:50 - Part-DB1\templates\security\login.html.twig:50 - templates\security\login.html.twig:50 - login.rememberme Forbliv logget ind (anbefales ikke på delte computere) - - Part-DB1\templates\security\login.html.twig:64 - Part-DB1\templates\security\login.html.twig:64 - pw_reset.password_forget Glemt brugernavn/password? - - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - pw_reset.new_pw.header.title Indstil ny adgangskode - - Part-DB1\templates\security\pw_reset_request.html.twig:5 - Part-DB1\templates\security\pw_reset_request.html.twig:5 - pw_reset.request.header.title Anmod om nyt password - - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - tfa_u2f.http_warning Du tilgår denne side ved hjælp af den usikre HTTP-metode, så U2F vil højst sandsynligt ikke fungere (Bad Request-fejlmeddelelse). Bed en administrator om at konfigurere den sikre HTTPS-metode, hvis du vil bruge sikkerhedsnøgler. - - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - r_u2f_two_factor.pressbutton Indsæt venligst sikkerhedsnøglen og tryk på knappen - - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - tfa_u2f.add_key.title Tilføj sikkerhedsnøgle - - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - tfa_u2f.explanation Brug af en U2F/FIDO-kompatibel sikkerhedsnøgle (f.eks. YubiKey eller NitroKey) kan øge brugervenligheden og sikre en sikker to-faktor-godkendelse. Sikkerhedsnøglerne kan registreres her. Hvis to-faktor verifikation er påkrævet, skal nøglen kun tilsluttes via USB eller sættes op mod enheden via NFC. - - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - tfa_u2f.add_key.backup_hint For at sikre adgang, selvom nøglen går tabt, anbefales det at registrere en anden nøgle som backup og opbevare den et sikkert sted! - - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - tfa_u2f.add_key.add_button Tilføj sikkerhedsnøgle - - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - tfa_u2f.add_key.back_to_settings Tilbage til indstillinger @@ -2977,10 +1763,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 new @@ -2990,8 +1772,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:14 - Part-DB1\templates\Statistics\statistics.html.twig:14 new @@ -3001,8 +1781,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:19 - Part-DB1\templates\Statistics\statistics.html.twig:19 new @@ -3012,8 +1790,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:24 - Part-DB1\templates\Statistics\statistics.html.twig:24 new @@ -3023,12 +1799,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 new @@ -3038,12 +1808,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 new @@ -3053,8 +1817,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:40 - Part-DB1\templates\Statistics\statistics.html.twig:40 new @@ -3064,8 +1826,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:44 - Part-DB1\templates\Statistics\statistics.html.twig:44 new @@ -3075,8 +1835,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:48 - Part-DB1\templates\Statistics\statistics.html.twig:48 new @@ -3086,8 +1844,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:65 - Part-DB1\templates\Statistics\statistics.html.twig:65 new @@ -3097,8 +1853,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:69 - Part-DB1\templates\Statistics\statistics.html.twig:69 new @@ -3108,8 +1862,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:73 - Part-DB1\templates\Statistics\statistics.html.twig:73 new @@ -3119,8 +1871,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:77 - Part-DB1\templates\Statistics\statistics.html.twig:77 new @@ -3130,8 +1880,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:81 - Part-DB1\templates\Statistics\statistics.html.twig:81 new @@ -3141,8 +1889,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:85 - Part-DB1\templates\Statistics\statistics.html.twig:85 new @@ -3152,8 +1898,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:89 - Part-DB1\templates\Statistics\statistics.html.twig:89 new @@ -3163,8 +1907,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:93 - Part-DB1\templates\Statistics\statistics.html.twig:93 new @@ -3174,8 +1916,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:110 - Part-DB1\templates\Statistics\statistics.html.twig:110 new @@ -3185,8 +1925,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:114 - Part-DB1\templates\Statistics\statistics.html.twig:114 new @@ -3196,8 +1934,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:118 - Part-DB1\templates\Statistics\statistics.html.twig:118 new @@ -3207,8 +1943,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:122 - Part-DB1\templates\Statistics\statistics.html.twig:122 new @@ -3218,8 +1952,6 @@ Underelementer vil blive flyttet opad. - Part-DB1\templates\Statistics\statistics.html.twig:126 - Part-DB1\templates\Statistics\statistics.html.twig:126 new @@ -3228,302 +1960,156 @@ Underelementer vil blive flyttet opad. - - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - tfa_backup.codes.title Backupkoder - - Part-DB1\templates\Users\backup_codes.html.twig:12 - Part-DB1\templates\Users\backup_codes.html.twig:12 - tfa_backup.codes.explanation Udskriv disse koder og opbevar dem et sikkert sted! - - Part-DB1\templates\Users\backup_codes.html.twig:13 - Part-DB1\templates\Users\backup_codes.html.twig:13 - tfa_backup.codes.help Hvis du ikke længere har adgang til din enhed med Godkendelses-appen (smartphone tabt, datatab osv.), kan du bruge en af ​​disse koder til at få adgang til din konto og eventuelt igen forbinde til godkendelses-app. Hver af disse koder kan bruges én gang; det er tilrådeligt at slette brugte koder. Alle med adgang til disse koder kan potentielt få adgang til din konto, så opbevar dem et sikkert sted. - - Part-DB1\templates\Users\backup_codes.html.twig:16 - Part-DB1\templates\Users\backup_codes.html.twig:16 - tfa_backup.username Brugernavn - - Part-DB1\templates\Users\backup_codes.html.twig:29 - Part-DB1\templates\Users\backup_codes.html.twig:29 - tfa_backup.codes.page_generated_on Side genereret den %date% - - Part-DB1\templates\Users\backup_codes.html.twig:32 - Part-DB1\templates\Users\backup_codes.html.twig:32 - tfa_backup.codes.print Udskriv - - Part-DB1\templates\Users\backup_codes.html.twig:35 - Part-DB1\templates\Users\backup_codes.html.twig:35 - tfa_backup.codes.copy_clipboard Kopier til udklipsholder - - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:40 - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:38 - templates\base.html.twig:99 - templates\Users\user_info.html.twig:3 - templates\Users\user_info.html.twig:6 - user.info.label Brugerinformation - - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - templates\Users\user_info.html.twig:18 - src\Form\UserSettingsType.php:32 - user.firstName.label Fornavn - - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - templates\Users\user_info.html.twig:24 - src\Form\UserSettingsType.php:35 - user.lastName.label Efternavn - - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - templates\Users\user_info.html.twig:30 - src\Form\UserSettingsType.php:41 - user.email.label E-mail - - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - templates\Users\user_info.html.twig:37 - src\Form\UserSettingsType.php:38 - user.department.label Afdeling - - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - templates\Users\user_info.html.twig:47 - src\Form\UserSettingsType.php:30 - user.username.label Brugernavn - - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - templates\Users\user_info.html.twig:53 - group.label Gruppe - - Part-DB1\templates\Users\user_info.html.twig:67 - Part-DB1\templates\Users\user_info.html.twig:67 - user.permissions Tilladelser - - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:39 - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:37 - templates\base.html.twig:98 - templates\Users\user_settings.html.twig:3 - templates\Users\user_settings.html.twig:6 - user.settings.label Brugerindstillinger - - Part-DB1\templates\Users\user_settings.html.twig:18 - Part-DB1\templates\Users\user_settings.html.twig:18 - templates\Users\user_settings.html.twig:14 - user_settings.data.label Personlige data - - Part-DB1\templates\Users\user_settings.html.twig:22 - Part-DB1\templates\Users\user_settings.html.twig:22 - templates\Users\user_settings.html.twig:18 - user_settings.configuration.label Konfiguration - - Part-DB1\templates\Users\user_settings.html.twig:55 - Part-DB1\templates\Users\user_settings.html.twig:55 - templates\Users\user_settings.html.twig:48 - user.settings.change_pw Ændre password - - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - user.settings.2fa_settings To-faktor godkendelse - - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - tfa.settings.google.tab Godkendelses-app - - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - tfa.settings.bakup.tab Backup-koder - - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - tfa.settings.u2f.tab Sikkerhedsnøgler (U2F) - - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - tfa.settings.trustedDevices.tab Pålidelige enheder - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_title Er du sikker på, at du vil deaktivere godkendelses-appen? - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_message Hvis du deaktiverer godkendelses-apen slettes alle backupkoder. Så du skal muligvis genudskrive dem.<br> @@ -3531,588 +2117,324 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - tfa_google.disabled_message Godkendelses-app er deaktiveret - - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - tfa_google.step.download Download en godkendelses-app (f.eks. <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=com.google.android. apps. authenticator2">Google Authenticator</a> eller <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=org .fedorahosted .freeotp">FreeOTP Authenticator</a>) - - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - tfa_google.step.scan Scan QR-koden nedenfor med appen eller indtast data manuelt - - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - tfa_google.step.input_code Indtast den genererede kode i feltet nedenfor og bekræft - - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - tfa_google.step.download_backup Udskriv dine backupkoder og gem dem et sikkert sted - - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - tfa_google.manual_setup Manuel opsætning - - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - tfa_google.manual_setup.type Type - - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - tfa_google.manual_setup.username Brugernavn - - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - tfa_google.manual_setup.secret Secret - - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - tfa_google.manual_setup.digit_count Antal ciffre - - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - tfa_google.enabled_message Godkendelses-app aktiv - - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - tfa_backup.disabled Backup-koder deaktiveret. Konfigurer godkendelses-appen for at aktivere backupkoder. - - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - tfa_backup.explanation Disse backupkoder giver dig adgang til din konto, selvom du mister enheden med godkendelse-appen. Udskriv koderne og opbevar dem et sikkert sted. - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_title Vil du virkelig nulstille koder? - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_message Dette vil slette alle tidligere koder og generere et sæt nye koder. Dette kan ikke fortrydes. Husk at udskrive de nye koder og gem dem et sikkert sted! - - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - tfa_backup.enabled Backupkoder aktiveret - - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - tfa_backup.show_codes Vis backupkoder - - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - tfa_u2f.table_caption Gemte backupkoder - - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - tfa_u2f.delete_u2f.confirm_title Ønsker du virkelig at slette denne backupkode? - - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - tfa_u2f.delete_u2f.confirm_message Hvis du fjerner denne nøgle, vil du ikke længere kunne logge på med den. Hvis der ikke er nogen sikkerhedsnøgler tilbage, er to-faktor-godkendelse deaktiveret. - - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - tfa_u2f.keys.name Nøglenavn - - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - tfa_u2f.keys.added_date Registreringsdato - - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - tfa_u2f.key_delete Slet nøgle - - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - tfa_u2f.no_keys_registered Ingen gemte nøgler - - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - tfa_u2f.add_new_key Registrer ny sikkerhedsnøgle - - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - tfa_trustedDevices.explanation Når du tjekker to-faktor, kan den aktuelle computer markeres som troværdig og så er to-faktor-tjek er ikke længere nødvendig på denne computer. Hvis du udførte dette ved en fejl, eller hvis en computer ikke længere er troværdig. Så kan du nulstille status for <i>alle </i>computere her. - - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - tfa_trustedDevices.invalidate.confirm_title Vil du virkelig fjerne alle pålidelige computere? - - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - tfa_trustedDevices.invalidate.confirm_message Du skal opsætte to-faktor-godkendelse igen på alle computere. Sørg for, at du har din to-faktor-enhed ved hånden. - - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - tfa_trustedDevices.invalidate.btn Fjern alle pålidelige enheder - - Part-DB1\templates\_navbar.html.twig:4 - Part-DB1\templates\_navbar.html.twig:4 - templates\base.html.twig:29 - sidebar.toggle Aktivér/de-aktiver sidebjælke - - Part-DB1\templates\_navbar.html.twig:22 - navbar.scanner.link Scanner - - Part-DB1\templates\_navbar.html.twig:38 - Part-DB1\templates\_navbar.html.twig:36 - templates\base.html.twig:97 - user.loggedin.label Logget ind som - - Part-DB1\templates\_navbar.html.twig:44 - Part-DB1\templates\_navbar.html.twig:42 - templates\base.html.twig:103 - user.login Log ind - - Part-DB1\templates\_navbar.html.twig:50 - Part-DB1\templates\_navbar.html.twig:48 - ui.toggle_darkmode Darkmode - - Part-DB1\templates\_navbar.html.twig:54 - Part-DB1\src\Form\UserSettingsType.php:97 - Part-DB1\templates\_navbar.html.twig:52 - Part-DB1\src\Form\UserSettingsType.php:97 - templates\base.html.twig:106 - src\Form\UserSettingsType.php:44 - user.language_select Sprog - - Part-DB1\templates\_navbar_search.html.twig:4 - Part-DB1\templates\_navbar_search.html.twig:4 - templates\base.html.twig:49 - search.options.label Søgemuligheder - - Part-DB1\templates\_navbar_search.html.twig:23 - tags.label Tags - - Part-DB1\templates\_navbar_search.html.twig:27 - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - templates\base.html.twig:60 - templates\Parts\show_part_info.html.twig:36 - src\Form\PartType.php:77 - storelocation.label Lagerlokation - - Part-DB1\templates\_navbar_search.html.twig:36 - Part-DB1\templates\_navbar_search.html.twig:31 - templates\base.html.twig:65 - ordernumber.label.short Bestillingsnummer - - Part-DB1\templates\_navbar_search.html.twig:40 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - Part-DB1\templates\_navbar_search.html.twig:35 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - templates\base.html.twig:67 - supplier.label Leverandør - - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_navbar_search.html.twig:56 - templates\base.html.twig:77 - search.regexmatching Reg. Ex. matching - - Part-DB1\templates\_sidebar.html.twig:37 - Part-DB1\templates\_sidebar.html.twig:12 - Part-DB1\templates\_sidebar.html.twig:37 - Part-DB1\templates\_sidebar.html.twig:12 - templates\base.html.twig:175 - templates\base.html.twig:189 - templates\base.html.twig:202 - templates\base.html.twig:230 - project.labelp Projekter - - Part-DB1\templates\_sidebar.html.twig:2 - Part-DB1\templates\_sidebar.html.twig:2 - templates\base.html.twig:165 - templates\base.html.twig:192 - templates\base.html.twig:220 - actions Handlinger - - Part-DB1\templates\_sidebar.html.twig:6 - Part-DB1\templates\_sidebar.html.twig:6 - templates\base.html.twig:169 - templates\base.html.twig:196 - templates\base.html.twig:224 - datasource Datakilde - - Part-DB1\templates\_sidebar.html.twig:10 - Part-DB1\templates\_sidebar.html.twig:10 - templates\base.html.twig:173 - templates\base.html.twig:200 - templates\base.html.twig:228 - manufacturer.labelp Fabrikant - - Part-DB1\templates\_sidebar.html.twig:11 - Part-DB1\templates\_sidebar.html.twig:11 - templates\base.html.twig:174 - templates\base.html.twig:201 - templates\base.html.twig:229 - supplier.labelp Leverandører - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:213 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:293 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:293 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:181 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:243 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:268 - attachment.download_failed Download af eksterne data fejlet! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:222 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:190 - entity.edit_flash Ændringer gemt med succes. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:231 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:196 - entity.edit_flash.invalid Handlinger - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:302 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:252 - entity.created_flash Element oprettet med succes! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:308 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:258 - entity.created_flash.invalid Elementet kunne ikke oprettes! Tjek dit input data - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:399 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:352 - src\Controller\BaseAdminController.php:154 - attachment_type.deleted Element slettet! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:401 - Part-DB1\src\Controller\UserController.php:109 - Part-DB1\src\Controller\UserSettingsController.php:159 - Part-DB1\src\Controller\UserSettingsController.php:193 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:354 - Part-DB1\src\Controller\UserController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:150 - Part-DB1\src\Controller\UserSettingsController.php:182 - csfr_invalid CSRF-token er ugyldig! Genindlæs denne side, eller kontakt en administrator, hvis problemet fortsætter! - - Part-DB1\src\Controller\LabelController.php:125 - label_generator.no_entities_found ingen elementer fundet. @@ -4120,8 +2442,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Controller\LogController.php:149 - Part-DB1\src\Controller\LogController.php:154 new @@ -4131,8 +2451,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Controller\LogController.php:156 - Part-DB1\src\Controller\LogController.php:160 new @@ -4142,8 +2460,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Controller\LogController.php:176 - Part-DB1\src\Controller\LogController.php:180 new @@ -4153,8 +2469,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Controller\LogController.php:178 - Part-DB1\src\Controller\LogController.php:182 new @@ -4164,8 +2478,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Controller\LogController.php:185 - Part-DB1\src\Controller\LogController.php:189 new @@ -4175,8 +2487,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Controller\LogController.php:187 - Part-DB1\src\Controller\LogController.php:191 new @@ -4186,8 +2496,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Controller\LogController.php:194 - Part-DB1\src\Controller\LogController.php:198 new @@ -4197,8 +2505,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Controller\LogController.php:196 - Part-DB1\src\Controller\LogController.php:200 new @@ -4208,8 +2514,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Controller\LogController.php:199 - Part-DB1\src\Controller\LogController.php:203 new @@ -4218,306 +2522,168 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - - Part-DB1\src\Controller\PartController.php:182 - Part-DB1\src\Controller\PartController.php:182 - src\Controller\PartController.php:80 - part.edited_flash Ændringer gemt! - - Part-DB1\src\Controller\PartController.php:216 - Part-DB1\src\Controller\PartController.php:219 - part.deleted Komponent slettet. - - Part-DB1\src\Controller\PartController.php:302 - Part-DB1\src\Controller\PartController.php:277 - Part-DB1\src\Controller\PartController.php:317 - src\Controller\PartController.php:113 - src\Controller\PartController.php:142 - part.created_flash Komponenter oprettet med succes! - - Part-DB1\src\Controller\PartController.php:308 - Part-DB1\src\Controller\PartController.php:283 - part.created_flash.invalid Fejl ved oprettelse: Tjek dine indtastninger! - - Part-DB1\src\Controller\ScanController.php:68 - Part-DB1\src\Controller\ScanController.php:90 - scan.qr_not_found Ingen element fundet - - Part-DB1\src\Controller\ScanController.php:71 - scan.format_unknown Ukendt format! - - Part-DB1\src\Controller\ScanController.php:86 - scan.qr_success Element fundet. - - Part-DB1\src\Controller\SecurityController.php:114 - Part-DB1\src\Controller\SecurityController.php:109 - pw_reset.user_or_email Brugernavn / e-mail - - Part-DB1\src\Controller\SecurityController.php:131 - Part-DB1\src\Controller\SecurityController.php:126 - pw_reset.request.success Anmodning om password lykkedes! Tjek din e-mail for mere information. - - Part-DB1\src\Controller\SecurityController.php:162 - Part-DB1\src\Controller\SecurityController.php:160 - pw_reset.username Brugernavn - - Part-DB1\src\Controller\SecurityController.php:165 - Part-DB1\src\Controller\SecurityController.php:163 - pw_reset.token Token - - Part-DB1\src\Controller\SecurityController.php:194 - Part-DB1\src\Controller\SecurityController.php:192 - pw_reset.new_pw.error Brugernavn eller token er ugyldigt! Tjek dine indtastninger. - - Part-DB1\src\Controller\SecurityController.php:196 - Part-DB1\src\Controller\SecurityController.php:194 - pw_reset.new_pw.success Password blev nulstillet. Du kan nu logge ind med det nye password. - - Part-DB1\src\Controller\UserController.php:107 - Part-DB1\src\Controller\UserController.php:99 - user.edit.reset_success Alle to-faktor-godkendelsesmetoder er blevet deaktiveret. - - Part-DB1\src\Controller\UserSettingsController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:92 - tfa_backup.no_codes_enabled Ingen backup-koder er aktiveret! - - Part-DB1\src\Controller\UserSettingsController.php:138 - Part-DB1\src\Controller\UserSettingsController.php:132 - tfa_u2f.u2f_delete.not_existing Der er ingen sikkerhedsnøgle med dette ID! - - Part-DB1\src\Controller\UserSettingsController.php:145 - Part-DB1\src\Controller\UserSettingsController.php:139 - tfa_u2f.u2f_delete.access_denied Du kan kun slette dine egne sikkerhedsnøgler! - - Part-DB1\src\Controller\UserSettingsController.php:153 - Part-DB1\src\Controller\UserSettingsController.php:147 - tfa.u2f.u2f_delete.success Sikkerhedsnøglen blev fjernet. - - Part-DB1\src\Controller\UserSettingsController.php:188 - Part-DB1\src\Controller\UserSettingsController.php:180 - tfa_trustedDevice.invalidate.success Pålidelige enheder blev slettet. - - Part-DB1\src\Controller\UserSettingsController.php:235 - Part-DB1\src\Controller\UserSettingsController.php:226 - src\Controller\UserController.php:98 - user.settings.saved_flash Indstillinger gemt! - - Part-DB1\src\Controller\UserSettingsController.php:297 - Part-DB1\src\Controller\UserSettingsController.php:288 - src\Controller\UserController.php:130 - user.settings.pw_changed_flash Password ændret! - - Part-DB1\src\Controller\UserSettingsController.php:317 - Part-DB1\src\Controller\UserSettingsController.php:306 - user.settings.2fa.google.activated Godkendelses-app'en blev aktiveret. - - Part-DB1\src\Controller\UserSettingsController.php:328 - Part-DB1\src\Controller\UserSettingsController.php:315 - user.settings.2fa.google.disabled Godkendelses-app'en er deaktiveret - - Part-DB1\src\Controller\UserSettingsController.php:346 - Part-DB1\src\Controller\UserSettingsController.php:332 - user.settings.2fa.backup_codes.regenerated Nye backupkoder blev oprettet. - - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - attachment.table.filesize filstørrelse - - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:245 - Part-DB1\src\DataTables\PartsDataTable.php:252 - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:193 - Part-DB1\src\DataTables\PartsDataTable.php:200 - true Sand - - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:246 - Part-DB1\src\DataTables\PartsDataTable.php:253 - Part-DB1\src\Form\Type\SIUnitType.php:139 - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:201 - Part-DB1\src\Form\Type\SIUnitType.php:139 - false Falsk - - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:128 - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:119 - log.target_deleted Slettet @@ -4525,8 +2691,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\DataTables\Column\RevertLogColumn.php:57 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:60 new @@ -4536,8 +2700,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\DataTables\Column\RevertLogColumn.php:63 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:66 new @@ -4547,8 +2709,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\DataTables\Column\RevertLogColumn.php:83 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:86 new @@ -4557,70 +2717,42 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - - Part-DB1\src\DataTables\LogDataTable.php:173 - Part-DB1\src\DataTables\LogDataTable.php:161 - log.id ID - - Part-DB1\src\DataTables\LogDataTable.php:178 - Part-DB1\src\DataTables\LogDataTable.php:166 - log.timestamp Tidsstempel - - Part-DB1\src\DataTables\LogDataTable.php:183 - Part-DB1\src\DataTables\LogDataTable.php:171 - log.type Begivenhed - - Part-DB1\src\DataTables\LogDataTable.php:191 - Part-DB1\src\DataTables\LogDataTable.php:179 - log.level Niveau - - Part-DB1\src\DataTables\LogDataTable.php:200 - Part-DB1\src\DataTables\LogDataTable.php:188 - log.user Bruger - - Part-DB1\src\DataTables\LogDataTable.php:213 - Part-DB1\src\DataTables\LogDataTable.php:201 - log.target_type Måltype - - Part-DB1\src\DataTables\LogDataTable.php:226 - Part-DB1\src\DataTables\LogDataTable.php:214 - log.target Mål @@ -4628,8 +2760,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\DataTables\LogDataTable.php:231 - Part-DB1\src\DataTables\LogDataTable.php:218 new @@ -4638,100 +2768,60 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - - Part-DB1\src\DataTables\PartsDataTable.php:168 - Part-DB1\src\DataTables\PartsDataTable.php:116 - part.table.name Navn - - Part-DB1\src\DataTables\PartsDataTable.php:178 - Part-DB1\src\DataTables\PartsDataTable.php:126 - part.table.id ID - - Part-DB1\src\DataTables\PartsDataTable.php:182 - Part-DB1\src\DataTables\PartsDataTable.php:130 - part.table.description Beskrivelse - - Part-DB1\src\DataTables\PartsDataTable.php:185 - Part-DB1\src\DataTables\PartsDataTable.php:133 - part.table.category Kategori - - Part-DB1\src\DataTables\PartsDataTable.php:190 - Part-DB1\src\DataTables\PartsDataTable.php:138 - part.table.footprint Footprint - - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:142 - part.table.manufacturer Fabrikant - - Part-DB1\src\DataTables\PartsDataTable.php:197 - Part-DB1\src\DataTables\PartsDataTable.php:145 - part.table.storeLocations Lagerlokationer - - Part-DB1\src\DataTables\PartsDataTable.php:216 - Part-DB1\src\DataTables\PartsDataTable.php:164 - part.table.amount Antal - - Part-DB1\src\DataTables\PartsDataTable.php:224 - Part-DB1\src\DataTables\PartsDataTable.php:172 - part.table.minamount Min. beholdning - - Part-DB1\src\DataTables\PartsDataTable.php:232 - Part-DB1\src\DataTables\PartsDataTable.php:180 - part.table.partUnit Måleenhed @@ -4744,864 +2834,522 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - - Part-DB1\src\DataTables\PartsDataTable.php:236 - Part-DB1\src\DataTables\PartsDataTable.php:184 - part.table.addedDate Tilføjet - - Part-DB1\src\DataTables\PartsDataTable.php:240 - Part-DB1\src\DataTables\PartsDataTable.php:188 - part.table.lastModified Sidst redigeret - - Part-DB1\src\DataTables\PartsDataTable.php:244 - Part-DB1\src\DataTables\PartsDataTable.php:192 - part.table.needsReview Gennemgang nødvendig - - Part-DB1\src\DataTables\PartsDataTable.php:251 - Part-DB1\src\DataTables\PartsDataTable.php:199 - part.table.favorite Favorit - - Part-DB1\src\DataTables\PartsDataTable.php:258 - Part-DB1\src\DataTables\PartsDataTable.php:206 - part.table.manufacturingStatus Status - - Part-DB1\src\DataTables\PartsDataTable.php:260 - Part-DB1\src\DataTables\PartsDataTable.php:262 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:208 - Part-DB1\src\DataTables\PartsDataTable.php:210 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.unknown Ukendt - - Part-DB1\src\DataTables\PartsDataTable.php:263 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:211 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.announced Meddelt - - Part-DB1\src\DataTables\PartsDataTable.php:264 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.active Aktiv - - Part-DB1\src\DataTables\PartsDataTable.php:265 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:213 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.nrfnd Anbefales ikke til nye designs - - Part-DB1\src\DataTables\PartsDataTable.php:266 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:214 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.eol End of life - - Part-DB1\src\DataTables\PartsDataTable.php:267 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:215 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.discontinued Discontinued - - Part-DB1\src\DataTables\PartsDataTable.php:271 - Part-DB1\src\DataTables\PartsDataTable.php:219 - part.table.mpn MPN - - Part-DB1\src\DataTables\PartsDataTable.php:275 - Part-DB1\src\DataTables\PartsDataTable.php:223 - part.table.mass Vægt - - Part-DB1\src\DataTables\PartsDataTable.php:279 - Part-DB1\src\DataTables\PartsDataTable.php:227 - part.table.tags Tags - - Part-DB1\src\DataTables\PartsDataTable.php:283 - Part-DB1\src\DataTables\PartsDataTable.php:231 - part.table.attachments Bilag - - Part-DB1\src\EventSubscriber\UserSystem\LoginSuccessSubscriber.php:82 - Part-DB1\src\EventSubscriber\LoginSuccessListener.php:82 - flash.login_successful Login lykkedes - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - JSON JSON - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - XML XML - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - CSV CSV - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - YAML YAML - - Part-DB1\src\Form\AdminPages\ImportType.php:124 - Part-DB1\src\Form\AdminPages\ImportType.php:124 - import.abort_on_validation.help Hvis denne indstilling er aktiveret, vil hele processen blive afbrudt, hvis der registreres ugyldige data. Hvis denne indstilling ikke er aktiv ignoreres ugyldige poster, og de andre poster forsøges importeret. - - Part-DB1\src\Form\AdminPages\ImportType.php:86 - Part-DB1\src\Form\AdminPages\ImportType.php:86 - src\Form\ImportType.php:70 - import.csv_separator CSV-separator - - Part-DB1\src\Form\AdminPages\ImportType.php:93 - Part-DB1\src\Form\AdminPages\ImportType.php:93 - src\Form\ImportType.php:72 - parent.label Overordnet element - - Part-DB1\src\Form\AdminPages\ImportType.php:101 - Part-DB1\src\Form\AdminPages\ImportType.php:101 - src\Form\ImportType.php:75 - import.file Fil - - Part-DB1\src\Form\AdminPages\ImportType.php:111 - Part-DB1\src\Form\AdminPages\ImportType.php:111 - src\Form\ImportType.php:78 - import.preserve_children Importer også underelementer - - Part-DB1\src\Form\AdminPages\ImportType.php:120 - Part-DB1\src\Form\AdminPages\ImportType.php:120 - src\Form\ImportType.php:80 - import.abort_on_validation Annuller ved ugyldige data - - Part-DB1\src\Form\AdminPages\ImportType.php:132 - Part-DB1\src\Form\AdminPages\ImportType.php:132 - src\Form\ImportType.php:85 - import.btn Importer - - Part-DB1\src\Form\AttachmentFormType.php:113 - Part-DB1\src\Form\AttachmentFormType.php:109 - attachment.edit.secure_file.help En vedhæftet fil, der er markeret som privat, kan kun tilgås af autoriseret bruger som har de relevante tilladelser. Når denne indstilling er aktiv, genereres der ikke miniaturebilleder, og adgangen til filen er langsommere. - - Part-DB1\src\Form\AttachmentFormType.php:127 - Part-DB1\src\Form\AttachmentFormType.php:123 - attachment.edit.url.help Her kan du enten indtaste en URL til en ekstern fil, eller du kan søge efter de indbyggede ressourcer ved at indtaste et nøgleord (f.eks. footprint). - - Part-DB1\src\Form\AttachmentFormType.php:82 - Part-DB1\src\Form\AttachmentFormType.php:79 - attachment.edit.name Navn - - Part-DB1\src\Form\AttachmentFormType.php:85 - Part-DB1\src\Form\AttachmentFormType.php:82 - attachment.edit.attachment_type Bilagstype - - Part-DB1\src\Form\AttachmentFormType.php:94 - Part-DB1\src\Form\AttachmentFormType.php:91 - attachment.edit.show_in_table Vis i tabel - - Part-DB1\src\Form\AttachmentFormType.php:105 - Part-DB1\src\Form\AttachmentFormType.php:102 - attachment.edit.secure_file Privat bilag - - Part-DB1\src\Form\AttachmentFormType.php:119 - Part-DB1\src\Form\AttachmentFormType.php:115 - attachment.edit.url URL - - Part-DB1\src\Form\AttachmentFormType.php:133 - Part-DB1\src\Form\AttachmentFormType.php:129 - attachment.edit.download_url Download eksternt data - - Part-DB1\src\Form\AttachmentFormType.php:146 - Part-DB1\src\Form\AttachmentFormType.php:142 - attachment.edit.file Upload fil - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:86 - part.label Komponent - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:87 - part_lot.label Komponentbeholdning - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.none Ingen - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.qr QR-kode (anbefalet) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code128 Kode 128 (anbefalet) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code39 Kode 39 (anbefalet) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code93 Kode 93 - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.datamatrix Datamatrix - - Part-DB1\src\Form\LabelOptionsType.php:122 - label_options.lines_mode.html HTML - - Part-DB1\src\Form\LabelOptionsType.php:122 - label.options.lines_mode.twig Twig - - Part-DB1\src\Form\LabelOptionsType.php:126 - label_options.lines_mode.help Hvis du vælger Twig her, vil indholdsfeltet blive fortolket som en Twig-skabelon. Yderligere hjælp er tilgængelig i <a href="https://twig.symfony.com/doc/3.x/templates.html">Twig Dokumentation</a> og <a href="https://docs.part-db.dk/usage/labels.html#twig-mode">Wiki</a>. - - Part-DB1\src\Form\LabelOptionsType.php:47 - label_options.page_size.label Størrelse - - Part-DB1\src\Form\LabelOptionsType.php:66 - label_options.supported_elements.label Elementtype - - Part-DB1\src\Form\LabelOptionsType.php:75 - label_options.barcode_type.label Stregkodetype - - Part-DB1\src\Form\LabelOptionsType.php:102 - label_profile.lines.label Indhold - - Part-DB1\src\Form\LabelOptionsType.php:111 - label_options.additional_css.label Yderligere CSS - - Part-DB1\src\Form\LabelOptionsType.php:120 - label_options.lines_mode.label Parser mode - - Part-DB1\src\Form\LabelOptionsType.php:51 - label_options.width.placeholder Bredde - - Part-DB1\src\Form\LabelOptionsType.php:60 - label_options.height.placeholder Højde - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:49 - label_generator.target_id.range_hint Du kan her angive flere ID'er (f.eks. 1, 2, 3) og/eller et interval her for at generere stregkoder for flere elementer på én gang. - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:46 - label_generator.target_id.label Element ID'ere - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:59 - label_generator.update Opdatering - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:36 - scan_dialog.input Input - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:44 - scan_dialog.submit Afsend - - Part-DB1\src\Form\ParameterType.php:41 - parameters.name.placeholder F.eks. DC Current Gain - - Part-DB1\src\Form\ParameterType.php:50 - parameters.symbol.placeholder F.eks. h_[FE] - - Part-DB1\src\Form\ParameterType.php:60 - parameters.text.placeholder f.eks. Test specifikationer - - Part-DB1\src\Form\ParameterType.php:71 - parameters.max.placeholder f.eks. 350 - - Part-DB1\src\Form\ParameterType.php:82 - parameters.min.placeholder f.eks. 100 - - Part-DB1\src\Form\ParameterType.php:93 - parameters.typical.placeholder f.eks. 200 - - Part-DB1\src\Form\ParameterType.php:103 - parameters.unit.placeholder f.eks. V - - Part-DB1\src\Form\ParameterType.php:114 - parameter.group.placeholder f.eks. tekniske specifikationer - - Part-DB1\src\Form\Part\OrderdetailType.php:72 - Part-DB1\src\Form\Part\OrderdetailType.php:75 - orderdetails.edit.supplierpartnr Leverandør varenummer - - Part-DB1\src\Form\Part\OrderdetailType.php:81 - Part-DB1\src\Form\Part\OrderdetailType.php:84 - orderdetails.edit.supplier Leverandør - - Part-DB1\src\Form\Part\OrderdetailType.php:87 - Part-DB1\src\Form\Part\OrderdetailType.php:90 - orderdetails.edit.url Link til tilbud - - Part-DB1\src\Form\Part\OrderdetailType.php:93 - Part-DB1\src\Form\Part\OrderdetailType.php:96 - orderdetails.edit.obsolete Ikke længere tilgængelig - - Part-DB1\src\Form\Part\OrderdetailType.php:75 - Part-DB1\src\Form\Part\OrderdetailType.php:78 - orderdetails.edit.supplierpartnr.placeholder f.eks. BC 547 - - Part-DB1\src\Form\Part\PartBaseType.php:101 - Part-DB1\src\Form\Part\PartBaseType.php:99 - part.edit.name Navn - - Part-DB1\src\Form\Part\PartBaseType.php:109 - Part-DB1\src\Form\Part\PartBaseType.php:107 - part.edit.description Beskrivelse - - Part-DB1\src\Form\Part\PartBaseType.php:120 - Part-DB1\src\Form\Part\PartBaseType.php:118 - part.edit.mininstock Minimumsmængde - - Part-DB1\src\Form\Part\PartBaseType.php:129 - Part-DB1\src\Form\Part\PartBaseType.php:127 - part.edit.category Kategori - - Part-DB1\src\Form\Part\PartBaseType.php:135 - Part-DB1\src\Form\Part\PartBaseType.php:133 - part.edit.footprint Footprint - - Part-DB1\src\Form\Part\PartBaseType.php:142 - Part-DB1\src\Form\Part\PartBaseType.php:140 - part.edit.tags Tags - - Part-DB1\src\Form\Part\PartBaseType.php:154 - Part-DB1\src\Form\Part\PartBaseType.php:152 - part.edit.manufacturer.label Fabrikant - - Part-DB1\src\Form\Part\PartBaseType.php:161 - Part-DB1\src\Form\Part\PartBaseType.php:159 - part.edit.manufacturer_url.label Link til produktside - - Part-DB1\src\Form\Part\PartBaseType.php:167 - Part-DB1\src\Form\Part\PartBaseType.php:165 - part.edit.mpn Fabrikant partnummer - - Part-DB1\src\Form\Part\PartBaseType.php:173 - Part-DB1\src\Form\Part\PartBaseType.php:171 - part.edit.manufacturing_status Fabrikantstatus - - Part-DB1\src\Form\Part\PartBaseType.php:181 - Part-DB1\src\Form\Part\PartBaseType.php:179 - part.edit.needs_review Gennemgang nødvendig - - Part-DB1\src\Form\Part\PartBaseType.php:189 - Part-DB1\src\Form\Part\PartBaseType.php:187 - part.edit.is_favorite Favorit - - Part-DB1\src\Form\Part\PartBaseType.php:197 - Part-DB1\src\Form\Part\PartBaseType.php:195 - part.edit.mass Vægt - - Part-DB1\src\Form\Part\PartBaseType.php:203 - Part-DB1\src\Form\Part\PartBaseType.php:201 - part.edit.partUnit Måleenhed @@ -5614,287 +3362,168 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - - Part-DB1\src\Form\Part\PartBaseType.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:210 - part.edit.comment Notater - - Part-DB1\src\Form\Part\PartBaseType.php:250 - Part-DB1\src\Form\Part\PartBaseType.php:246 - part.edit.master_attachment Miniaturebillede - - Part-DB1\src\Form\Part\PartBaseType.php:295 - Part-DB1\src\Form\Part\PartBaseType.php:276 - src\Form\PartType.php:91 - part.edit.save Anvend ændringer - - Part-DB1\src\Form\Part\PartBaseType.php:296 - Part-DB1\src\Form\Part\PartBaseType.php:277 - src\Form\PartType.php:92 - part.edit.reset Annuller ændringer - - Part-DB1\src\Form\Part\PartBaseType.php:105 - Part-DB1\src\Form\Part\PartBaseType.php:103 - part.edit.name.placeholder f.eks. BC547 - - Part-DB1\src\Form\Part\PartBaseType.php:115 - Part-DB1\src\Form\Part\PartBaseType.php:113 - part.edit.description.placeholder f.eks. NPN 45V, 0,1A 0,5W - - Part-DB1\src\Form\Part\PartBaseType.php:123 - Part-DB1\src\Form\Part\PartBaseType.php:121 - part.editmininstock.placeholder f.eks. 1 - - Part-DB1\src\Form\Part\PartLotType.php:69 - Part-DB1\src\Form\Part\PartLotType.php:69 - part_lot.edit.description Beskrivelse - - Part-DB1\src\Form\Part\PartLotType.php:78 - Part-DB1\src\Form\Part\PartLotType.php:78 - part_lot.edit.location Lagerlokation - - Part-DB1\src\Form\Part\PartLotType.php:89 - Part-DB1\src\Form\Part\PartLotType.php:89 - part_lot.edit.amount Antal - - Part-DB1\src\Form\Part\PartLotType.php:98 - Part-DB1\src\Form\Part\PartLotType.php:97 - part_lot.edit.instock_unknown Ukendt antal - - Part-DB1\src\Form\Part\PartLotType.php:109 - Part-DB1\src\Form\Part\PartLotType.php:108 - part_lot.edit.needs_refill skal fyldes op igen - - Part-DB1\src\Form\Part\PartLotType.php:120 - Part-DB1\src\Form\Part\PartLotType.php:119 - part_lot.edit.expiration_date Udløbsdato - - Part-DB1\src\Form\Part\PartLotType.php:128 - Part-DB1\src\Form\Part\PartLotType.php:125 - part_lot.edit.comment Bemærk - - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - perm.group.other Forskellige - - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - tfa_google.enable Aktiver godkendelses-app - - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - tfa_google.disable Deaktiver godkendelses-app - - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - google_confirmation Verifikationskode - - Part-DB1\src\Form\UserSettingsType.php:108 - Part-DB1\src\Form\UserSettingsType.php:108 - src\Form\UserSettingsType.php:46 - user.timezone.label Tidszone - - Part-DB1\src\Form\UserSettingsType.php:133 - Part-DB1\src\Form\UserSettingsType.php:132 - user.currency.label Foretrukken valuta - - Part-DB1\src\Form\UserSettingsType.php:140 - Part-DB1\src\Form\UserSettingsType.php:139 - src\Form\UserSettingsType.php:53 - save Anvend ændringer - - Part-DB1\src\Form\UserSettingsType.php:141 - Part-DB1\src\Form\UserSettingsType.php:140 - src\Form\UserSettingsType.php:54 - reset Kasser ændringer - - Part-DB1\src\Form\UserSettingsType.php:104 - Part-DB1\src\Form\UserSettingsType.php:104 - src\Form\UserSettingsType.php:45 - user_settings.language.placeholder Serversprog - - Part-DB1\src\Form\UserSettingsType.php:115 - Part-DB1\src\Form\UserSettingsType.php:115 - src\Form\UserSettingsType.php:48 - user_settings.timezone.placeholder Server tidszone - - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - attachment.label Bilag - - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - attachment_type.label Bilagstype - - Part-DB1\src\Services\ElementTypeNameGenerator.php:82 - Part-DB1\src\Services\ElementTypeNameGenerator.php:82 - project.label Projekt - - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - measurement_unit.label Måleenhed @@ -5907,58 +3536,36 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - currency.label Valuta - - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - orderdetail.label Bestillingsoplysninger - - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - pricedetail.label Prisinformation - - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - user.label Rediger - - Part-DB1\src\Services\ElementTypeNameGenerator.php:95 - parameter.label Parameter - - Part-DB1\src\Services\ElementTypeNameGenerator.php:96 - label_profile.label Labelprofil @@ -5966,8 +3573,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:176 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:161 new @@ -5976,174 +3581,102 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - - Part-DB1\src\Services\MarkdownParser.php:73 - Part-DB1\src\Services\MarkdownParser.php:73 - markdown.loading Indlæs Markdown. Hvis dette varer ved i lang tid, så prøv at indlæse hjemmesiden igen! - - Part-DB1\src\Services\PasswordResetManager.php:98 - Part-DB1\src\Services\PasswordResetManager.php:98 - pw_reset.email.subject Password nulstillet for din Part-DB-konto - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - tree.tools.tools Værktøjer - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:107 - src\Services\ToolsTreeBuilder.php:74 - tree.tools.edit Rediger - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:110 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - src\Services\ToolsTreeBuilder.php:81 - tree.tools.show Vis - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:111 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - tree.tools.system System - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:123 - tree.tools.tools.label_dialog Labeldialog - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:130 - tree.tools.tools.label_scanner Scanner - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:149 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:126 - src\Services\ToolsTreeBuilder.php:62 - tree.tools.edit.attachment_types Bilagstyper - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:155 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:132 - src\Services\ToolsTreeBuilder.php:64 - tree.tools.edit.categories Kategorier - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:161 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:138 - src\Services\ToolsTreeBuilder.php:66 - tree.tools.edit.projects Projekter - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:167 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:144 - src\Services\ToolsTreeBuilder.php:68 - tree.tools.edit.suppliers Leverandører - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:173 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:150 - src\Services\ToolsTreeBuilder.php:70 - tree.tools.edit.manufacturer Fabrikanter - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:179 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:156 - tree.tools.edit.storelocation Lagerlokationer - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:185 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:162 - tree.tools.edit.footprint Footprints - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:191 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:168 - tree.tools.edit.currency Valutaer - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:174 - tree.tools.edit.measurement_unit Måleenheder @@ -6156,40 +3689,24 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.edit.label_profile Labelprofiler - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:209 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:180 - tree.tools.edit.part Ny komponent - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:226 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - src\Services\ToolsTreeBuilder.php:77 - tree.tools.show.all_parts Vis alle dele - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:232 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.show.all_attachments Bilag @@ -6197,8 +3714,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:239 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:210 new @@ -6207,20 +3722,12 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:258 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:229 - tree.tools.system.users Bruger - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:264 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:235 - tree.tools.system.groups Grupper @@ -6228,8 +3735,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:271 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:242 new @@ -6238,11 +3743,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - src\Services\TreeBuilder.php:124 - entity.tree.new Nyt element @@ -6250,7 +3750,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 obsolete @@ -6260,8 +3759,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\templates\_navbar.html.twig:27 - templates\base.html.twig:88 obsolete @@ -6271,8 +3768,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Form\UserSettingsType.php:119 - src\Form\UserSettingsType.php:49 obsolete @@ -6282,8 +3777,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Form\UserSettingsType.php:129 - src\Form\UserSettingsType.php:50 obsolete @@ -6293,7 +3786,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:100 new obsolete @@ -6304,10 +3796,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:128 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:150 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:169 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:207 new obsolete @@ -6318,10 +3806,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:130 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:152 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:171 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:209 new obsolete @@ -6332,7 +3816,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:139 new obsolete @@ -6343,7 +3826,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:160 new obsolete @@ -6354,7 +3836,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:184 new obsolete @@ -6365,7 +3846,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:198 new obsolete @@ -6376,7 +3856,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:214 new obsolete @@ -6387,7 +3866,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - templates\base.html.twig:81 obsolete obsolete @@ -6398,7 +3876,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - templates\base.html.twig:109 obsolete obsolete @@ -6409,7 +3886,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - templates\base.html.twig:112 obsolete obsolete @@ -6700,7 +4176,6 @@ Bemærk også, at uden to-faktor-godkendelse er din konto ikke længere så godt - src\Form\PartType.php:63 obsolete obsolete @@ -7373,7 +4848,6 @@ Element 3 - templates\Parts\show_part_info.html.twig:194 obsolete obsolete @@ -7384,7 +4858,6 @@ Element 3 - src\Form\PartType.php:83 obsolete obsolete @@ -14932,4 +12405,4 @@ Buerklin API-godkendelsesserver: 10 anmodninger/minut pr. IP-adresse - + \ No newline at end of file diff --git a/translations/messages.de.xlf b/translations/messages.de.xlf index e1677d74..c4f2d5d8 100644 --- a/translations/messages.de.xlf +++ b/translations/messages.de.xlf @@ -2,11 +2,6 @@ - - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - attachment_type.caption Dateitypen für Anhänge @@ -14,7 +9,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:12 new @@ -24,7 +18,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:16 new @@ -33,45 +26,18 @@ - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - templates\AdminPages\CategoryAdmin.html.twig:4 - templates\base.html.twig:163 - templates\base.html.twig:170 - templates\base.html.twig:197 - templates\base.html.twig:225 - category.labelp Kategorien - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:19 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:11 - templates\AdminPages\CategoryAdmin.html.twig:8 - admin.options Optionen - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - templates\AdminPages\CategoryAdmin.html.twig:9 - admin.advanced Erweitert @@ -79,7 +45,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:13 new @@ -89,7 +54,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:17 new @@ -98,20 +62,12 @@ - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - currency.iso_code.caption ISO Code - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - currency.symbol.caption Währungssymbol @@ -119,7 +75,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:29 new @@ -129,7 +84,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:33 new @@ -139,7 +93,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:8 new @@ -149,7 +102,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:12 new @@ -158,89 +110,36 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Suche - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - templates\AdminPages\EntityAdminBase.html.twig:13 - templates\base.html.twig:166 - templates\base.html.twig:193 - templates\base.html.twig:221 - expandAll Alle ausklappen - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - templates\AdminPages\EntityAdminBase.html.twig:17 - templates\base.html.twig:167 - templates\base.html.twig:194 - templates\base.html.twig:222 - reduceAll Alle einklappen - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - part.info.timetravel_hint So sah das Bauteil vor %timestamp% aus. <i>Beachten Sie, dass dieses Feature experimentell ist und die angezeigten Infos daher nicht unbedingt korrekt sind.</i> - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - templates\AdminPages\EntityAdminBase.html.twig:42 - standard.label Eigenschaften - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - templates\AdminPages\EntityAdminBase.html.twig:43 - infos.label Informationen @@ -248,8 +147,6 @@ - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 new @@ -258,120 +155,66 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - templates\AdminPages\EntityAdminBase.html.twig:45 - export.label Exportieren - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - templates\AdminPages\EntityAdminBase.html.twig:47 - import_export.label Import / Export - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - mass_creation.label Masseneingabe - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - templates\AdminPages\EntityAdminBase.html.twig:59 - admin.common Allgemein - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - admin.attachments Dateianhänge - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:90 - admin.parameters Parameter - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:179 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:167 - templates\AdminPages\EntityAdminBase.html.twig:142 - export_all.label Alles exportieren - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:185 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:173 - mass_creation.help Jede Zeile wird als Name für ein neues Element interpretiert und angelegt. - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - templates\AdminPages\EntityAdminBase.html.twig:35 - edit.caption Bearbeite Element "%name" - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - templates\AdminPages\EntityAdminBase.html.twig:37 - new.caption Neues Element - - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - templates\base.html.twig:172 - templates\base.html.twig:199 - templates\base.html.twig:227 - footprint.labelp Footprints @@ -379,7 +222,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:13 new @@ -389,7 +231,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:17 new @@ -398,12 +239,6 @@ - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - user.edit.permissions Berechtigungen @@ -411,7 +246,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:24 new @@ -421,7 +255,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:28 new @@ -430,18 +263,12 @@ - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:8 - label_profile.advanced Erweitert - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:9 - label_profile.comment Notizen @@ -449,7 +276,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:55 new @@ -459,7 +285,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:59 new @@ -469,7 +294,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:8 new @@ -479,7 +303,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:12 new @@ -488,15 +311,6 @@ - - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:5 - Part-DB1\templates\_sidebar.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:8 - templates\base.html.twig:171 - templates\base.html.twig:198 - templates\base.html.twig:226 - storelocation.labelp Lagerorte @@ -504,7 +318,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:32 new @@ -514,7 +327,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:36 new @@ -524,7 +336,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:16 new @@ -534,7 +345,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:20 new @@ -543,110 +353,60 @@ - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - user.edit.configuration Konfiguration - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - user.edit.password Passwort - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - user.edit.tfa.caption Zwei-Faktor-Authentifizierung - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - user.edit.tfa.google_active Authentifizierungsapp aktiv - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - tfa_backup.remaining_tokens Verbleibende Backupcodes - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - tfa_backup.generation_date Erzeugungsdatum der Backupcodes - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - user.edit.tfa.disabled Methode deaktiviert - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - user.edit.tfa.u2f_keys_count Aktive Sicherheitsschlüssel - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_title Wirklich fortfahren? - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_message Dies wird <b>alle aktiven Zwei-Faktor-Authentifizierungsmethoden des Nutzers deaktivieren</b> und die <b>Backupcodes löschen</b>! <br> @@ -655,10 +415,6 @@ Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müs - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - user.edit.tfa.disable_tfa.btn Alle Zwei-Faktor-Authentifizierungsmethoden deaktivieren @@ -666,7 +422,6 @@ Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müs - Part-DB1\templates\AdminPages\UserAdmin.html.twig:85 new @@ -676,7 +431,6 @@ Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müs - Part-DB1\templates\AdminPages\UserAdmin.html.twig:89 new @@ -685,13 +439,6 @@ Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müs - - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:63 - attachment.delete Löschen @@ -704,102 +451,48 @@ Der Benutzer wird alle Zwei-Faktor-Authentifizierungmethoden neu einrichten müs - - Part-DB1\templates\AdminPages\_attachments.html.twig:49 - Part-DB1\templates\Parts\edit\_attachments.html.twig:47 - Part-DB1\templates\AdminPages\_attachments.html.twig:47 - Part-DB1\templates\Parts\edit\_attachments.html.twig:45 - attachment.preview.alt Thumbnail des Dateianhanges - - Part-DB1\templates\AdminPages\_attachments.html.twig:52 - Part-DB1\templates\Parts\edit\_attachments.html.twig:50 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 - Part-DB1\templates\AdminPages\_attachments.html.twig:50 - Part-DB1\templates\Parts\edit\_attachments.html.twig:48 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:45 - attachment.view_local Lokale Datei anzeigen - - Part-DB1\templates\AdminPages\_attachments.html.twig:58 - Part-DB1\templates\Parts\edit\_attachments.html.twig:56 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:43 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - Part-DB1\templates\AdminPages\_attachments.html.twig:56 - Part-DB1\templates\Parts\edit\_attachments.html.twig:54 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:38 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - attachment.file_not_found Datei nicht gefunden - - Part-DB1\templates\AdminPages\_attachments.html.twig:66 - Part-DB1\templates\Parts\edit\_attachments.html.twig:64 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:48 - Part-DB1\templates\Parts\edit\_attachments.html.twig:62 - attachment.secure Privat - - Part-DB1\templates\AdminPages\_attachments.html.twig:79 - Part-DB1\templates\Parts\edit\_attachments.html.twig:77 - Part-DB1\templates\AdminPages\_attachments.html.twig:77 - Part-DB1\templates\Parts\edit\_attachments.html.twig:75 - attachment.create Dateianhang hinzufügen - - Part-DB1\templates\AdminPages\_attachments.html.twig:84 - Part-DB1\templates\Parts\edit\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - Part-DB1\templates\AdminPages\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_attachments.html.twig:80 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - part_lot.edit.delete.confirm Möchten Sie diesen Bestand wirklich löschen? Dies kann nicht rückgängig gemacht werden! - - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - templates\AdminPages\_delete_form.html.twig:2 - entity.delete.confirm_title Wollen sie das Element %name% wirklich löschen? - - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - templates\AdminPages\_delete_form.html.twig:3 - entity.delete.message Diese Aktion lässt sich nicht rückgängig machen! @@ -808,11 +501,6 @@ Subelemente werden beim Löschen nach oben verschoben. - - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - templates\AdminPages\_delete_form.html.twig:9 - entity.delete Element löschen @@ -820,12 +508,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:45 - Part-DB1\src\Form\Part\PartBaseType.php:286 - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:43 - Part-DB1\src\Form\Part\PartBaseType.php:267 new @@ -834,561 +516,300 @@ Subelemente werden beim Löschen nach oben verschoben. - - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - templates\AdminPages\_delete_form.html.twig:12 - entity.delete.recursive Rekursiv (alle Unterelemente) löschen - - Part-DB1\templates\AdminPages\_duplicate.html.twig:3 - entity.duplicate Element duplizieren - - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - templates\AdminPages\_export_form.html.twig:4 - src\Form\ImportType.php:67 - export.format Dateiformat - - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - templates\AdminPages\_export_form.html.twig:16 - export.level Ausführlichkeit - - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - templates\AdminPages\_export_form.html.twig:19 - export.level.simple Einfach - - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - templates\AdminPages\_export_form.html.twig:20 - export.level.extended Erweitert - - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - templates\AdminPages\_export_form.html.twig:21 - export.level.full Vollständig - - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - templates\AdminPages\_export_form.html.twig:31 - export.include_children Unterelemente auch exportieren - - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - templates\AdminPages\_export_form.html.twig:39 - export.btn Exportieren - - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - templates\AdminPages\EntityAdminBase.html.twig:94 - templates\Parts\edit_part_info.html.twig:12 - templates\Parts\show_part_info.html.twig:11 - id.label ID - - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:76 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:77 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:77 - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:59 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:60 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:53 - templates\AdminPages\EntityAdminBase.html.twig:101 - templates\Parts\show_part_info.html.twig:248 - createdAt Erstellt am - - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:73 - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:49 - templates\AdminPages\EntityAdminBase.html.twig:114 - templates\Parts\show_part_info.html.twig:263 - lastModified Zuletzt bearbeitet - - Part-DB1\templates\AdminPages\_info.html.twig:38 - Part-DB1\templates\AdminPages\_info.html.twig:38 - entity.info.parts_count Bauteile mit diesem Element - - Part-DB1\templates\AdminPages\_parameters.html.twig:6 - Part-DB1\templates\helper.twig:125 - Part-DB1\templates\Parts\edit\_specifications.html.twig:6 - specifications.property Parameter - - Part-DB1\templates\AdminPages\_parameters.html.twig:7 - Part-DB1\templates\Parts\edit\_specifications.html.twig:7 - specifications.symbol Symbol - - Part-DB1\templates\AdminPages\_parameters.html.twig:8 - Part-DB1\templates\Parts\edit\_specifications.html.twig:8 - specifications.value_min Min. - - Part-DB1\templates\AdminPages\_parameters.html.twig:9 - Part-DB1\templates\Parts\edit\_specifications.html.twig:9 - specifications.value_typ Typ. - - Part-DB1\templates\AdminPages\_parameters.html.twig:10 - Part-DB1\templates\Parts\edit\_specifications.html.twig:10 - specifications.value_max Max. - - Part-DB1\templates\AdminPages\_parameters.html.twig:11 - Part-DB1\templates\Parts\edit\_specifications.html.twig:11 - specifications.unit Einheit - - Part-DB1\templates\AdminPages\_parameters.html.twig:12 - Part-DB1\templates\Parts\edit\_specifications.html.twig:12 - specifications.text Text - - Part-DB1\templates\AdminPages\_parameters.html.twig:13 - Part-DB1\templates\Parts\edit\_specifications.html.twig:13 - specifications.group Sektion - - Part-DB1\templates\AdminPages\_parameters.html.twig:26 - Part-DB1\templates\Parts\edit\_specifications.html.twig:26 - specification.create Neuer Parameter - - Part-DB1\templates\AdminPages\_parameters.html.twig:31 - Part-DB1\templates\Parts\edit\_specifications.html.twig:31 - parameter.delete.confirm Möchten Sie den Parameter wirklich löschen? - - Part-DB1\templates\attachment_list.html.twig:3 - Part-DB1\templates\attachment_list.html.twig:3 - attachment.list.title Dateianhänge - - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - part_list.loading.caption Lade - - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - part_list.loading.message Dies kann einen Moment dauern. Wenn diese Nachricht längere Zeit bestehen bleibt, versuchen sie die Seite erneut zu laden. - - Part-DB1\templates\base.html.twig:68 - Part-DB1\templates\base.html.twig:68 - templates\base.html.twig:246 - vendor.base.javascript_hint Aktivieren Sie Javascript um alle Features zu nutzen! - - Part-DB1\templates\base.html.twig:73 - Part-DB1\templates\base.html.twig:73 - sidebar.big.toggle Seitenleiste ein/ausblenden - - Part-DB1\templates\base.html.twig:95 - Part-DB1\templates\base.html.twig:95 - templates\base.html.twig:271 - loading.caption Lade: - - Part-DB1\templates\base.html.twig:96 - Part-DB1\templates\base.html.twig:96 - templates\base.html.twig:272 - loading.message Dies kann einen Moment dauern. Sollte diese Nachricht bestehen bleiben, dann laden sie die Seite erneut. - - Part-DB1\templates\base.html.twig:101 - Part-DB1\templates\base.html.twig:101 - templates\base.html.twig:277 - loading.bar Lade... - - Part-DB1\templates\base.html.twig:112 - Part-DB1\templates\base.html.twig:112 - templates\base.html.twig:288 - back_to_top Zurück zum Seitenbeginn - - Part-DB1\templates\Form\permissionLayout.html.twig:35 - Part-DB1\templates\Form\permissionLayout.html.twig:35 - permission.edit.permission Berechtigung - - Part-DB1\templates\Form\permissionLayout.html.twig:36 - Part-DB1\templates\Form\permissionLayout.html.twig:36 - permission.edit.value Wert - - Part-DB1\templates\Form\permissionLayout.html.twig:53 - Part-DB1\templates\Form\permissionLayout.html.twig:53 - permission.legend.title Erläuterung der Zustände - - Part-DB1\templates\Form\permissionLayout.html.twig:57 - Part-DB1\templates\Form\permissionLayout.html.twig:57 - permission.legend.disallow Verboten - - Part-DB1\templates\Form\permissionLayout.html.twig:61 - Part-DB1\templates\Form\permissionLayout.html.twig:61 - permission.legend.allow Erlaubt - - Part-DB1\templates\Form\permissionLayout.html.twig:65 - Part-DB1\templates\Form\permissionLayout.html.twig:65 - permission.legend.inherit Erbe von (übergeordneter) Gruppe - - Part-DB1\templates\helper.twig:3 - Part-DB1\templates\helper.twig:3 - bool.true Ja - - Part-DB1\templates\helper.twig:5 - Part-DB1\templates\helper.twig:5 - bool.false Nein - - Part-DB1\templates\helper.twig:92 - Part-DB1\templates\helper.twig:87 - Yes Ja - - Part-DB1\templates\helper.twig:94 - Part-DB1\templates\helper.twig:89 - No Nein - - Part-DB1\templates\helper.twig:126 - specifications.value Wert - - Part-DB1\templates\homepage.html.twig:7 - Part-DB1\templates\homepage.html.twig:7 - templates\homepage.html.twig:7 - version.caption Version - - Part-DB1\templates\homepage.html.twig:22 - Part-DB1\templates\homepage.html.twig:22 - templates\homepage.html.twig:19 - homepage.license Lizenzinformation - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.caption Projektseite - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.text Quellcode, Downloads, Bugreports, ToDo-Liste usw. gibts auf der <a class="link-external" target="_blank" href="%href%">GitHub Projektseite</a> - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.caption Hilfe - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.text Hilfe und Tipps finden sie im <a class="link-external" rel="noopener" target="_blank" href="%href%">Wiki</a> der GitHub Seite. - - Part-DB1\templates\homepage.html.twig:33 - Part-DB1\templates\homepage.html.twig:33 - templates\homepage.html.twig:30 - homepage.forum.caption Forum @@ -1396,8 +817,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\homepage.html.twig:45 - Part-DB1\templates\homepage.html.twig:45 new @@ -1406,138 +825,90 @@ Subelemente werden beim Löschen nach oben verschoben. - - Part-DB1\templates\LabelSystem\dialog.html.twig:3 - Part-DB1\templates\LabelSystem\dialog.html.twig:6 - label_generator.title Labelgenerator - - Part-DB1\templates\LabelSystem\dialog.html.twig:16 - label_generator.common Allgemein - - Part-DB1\templates\LabelSystem\dialog.html.twig:20 - label_generator.advanced Erweitert - - Part-DB1\templates\LabelSystem\dialog.html.twig:24 - label_generator.profiles Profil - - Part-DB1\templates\LabelSystem\dialog.html.twig:58 - label_generator.selected_profile Ausgewähltes Profil - - Part-DB1\templates\LabelSystem\dialog.html.twig:62 - label_generator.edit_profile Profil ändern - - Part-DB1\templates\LabelSystem\dialog.html.twig:75 - label_generator.load_profile Profil laden - - Part-DB1\templates\LabelSystem\dialog.html.twig:102 - label_generator.download Download - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:3 - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:5 - label_generator.label_btn Label erzeugen - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:20 - label_generator.label_empty Leeres Label - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:3 - label_scanner.title Scanner - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.title Keine Kamera gefunden - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.text Sie müssen eine Kamera anschließen und die Berechtigung erteilen, um den Scanner nutzen zu können. Sie können unten den Barcode manuell eingeben. - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:27 - label_scanner.source_select Kamera auswählen - - Part-DB1\templates\LogSystem\log_list.html.twig:3 - Part-DB1\templates\LogSystem\log_list.html.twig:3 - log.list.title Systemlog @@ -1545,8 +916,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\LogSystem\_log_table.html.twig:1 - Part-DB1\templates\LogSystem\_log_table.html.twig:1 new @@ -1556,8 +925,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\LogSystem\_log_table.html.twig:2 - Part-DB1\templates\LogSystem\_log_table.html.twig:2 new @@ -1566,194 +933,114 @@ Subelemente werden beim Löschen nach oben verschoben. - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.email_sent_by Diese E-Mail wurde automatisch erstellt von - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.dont_reply Antworten Sie nicht auf diese E-Mail. - - Part-DB1\templates\mail\pw_reset.html.twig:6 - Part-DB1\templates\mail\pw_reset.html.twig:6 - email.hi %name% Hallo %name% - - Part-DB1\templates\mail\pw_reset.html.twig:7 - Part-DB1\templates\mail\pw_reset.html.twig:7 - email.pw_reset.message jemand (hoffentlich Sie) hat ein Reset ihres Passwortes angefordert. Wenn diese Anfrage nicht von Ihnen stammt, ignorieren Sie diese E-Mail. - - Part-DB1\templates\mail\pw_reset.html.twig:9 - Part-DB1\templates\mail\pw_reset.html.twig:9 - email.pw_reset.button Passwort zurücksetzen - - Part-DB1\templates\mail\pw_reset.html.twig:11 - Part-DB1\templates\mail\pw_reset.html.twig:11 - email.pw_reset.fallback Wenn dies nicht funktioniert, rufen Sie <a href="%url%">%url%</a> auf und geben Sie die folgenden Daten ein - - Part-DB1\templates\mail\pw_reset.html.twig:16 - Part-DB1\templates\mail\pw_reset.html.twig:16 - email.pw_reset.username Benutzername - - Part-DB1\templates\mail\pw_reset.html.twig:19 - Part-DB1\templates\mail\pw_reset.html.twig:19 - email.pw_reset.token Token - - Part-DB1\templates\mail\pw_reset.html.twig:24 - Part-DB1\templates\mail\pw_reset.html.twig:24 - email.pw_reset.valid_unit %date% Das Reset-Token ist gültig bis <i>%date%</i> - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:18 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:78 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - orderdetail.delete Löschen - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - pricedetails.edit.min_qty Mindestbestellmenge - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - pricedetails.edit.price Preis - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - pricedetails.edit.price_qty für Menge - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - pricedetail.create Preis hinzufügen - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - templates\Parts\edit_part_info.html.twig:4 - part.edit.title Bearbeite [Part] %name% - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - templates\Parts\edit_part_info.html.twig:9 - part.edit.card_title Bearbeite Bauteileinformationen von - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - part.edit.tab.common Allgemein - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - part.edit.tab.manufacturer Hersteller - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - part.edit.tab.advanced Erweiterte Optionen @@ -1820,279 +1107,156 @@ Subelemente werden beim Löschen nach oben verschoben. - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - part.edit.tab.part_lots Lagerbestände - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - part.edit.tab.attachments Dateianhänge - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - part.edit.tab.orderdetails Bestellinformationen - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.specifications Parameter - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:64 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.comment Notizen - - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - templates\Parts\new_part.html.twig:8 - part.new.card_title Neues [Part] erstellen - - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - part_lot.delete Löschen - - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - part_lot.create Bestand anlegen - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - orderdetail.create Lieferant hinzufügen - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - pricedetails.edit.delete.confirm Möchten Sie diesen Preis wirklich löschen? Das kann nicht rückgängig gemacht werden! - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:62 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:61 - orderdetails.edit.delete.confirm Möchten Sie diesen Lieferanten wirklich löschen? Dies kann nicht rückgängig gemacht werden! - - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - templates\Parts\show_part_info.html.twig:4 - templates\Parts\show_part_info.html.twig:9 - part.info.title Detailinfo für - - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - part.part_lots.label Lagerbestände - - Part-DB1\templates\Parts\info\show_part_info.html.twig:56 - Part-DB1\templates\Parts\lists\_info_card.html.twig:43 - Part-DB1\templates\_navbar_search.html.twig:31 - Part-DB1\templates\_navbar_search.html.twig:26 - templates\base.html.twig:62 - templates\Parts\show_part_info.html.twig:74 - src\Form\PartType.php:86 - comment.label Notizen - - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - part.info.specifications Parameter - - Part-DB1\templates\Parts\info\show_part_info.html.twig:74 - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - templates\Parts\show_part_info.html.twig:82 - attachment.labelp Dateianhänge - - Part-DB1\templates\Parts\info\show_part_info.html.twig:83 - Part-DB1\templates\Parts\info\show_part_info.html.twig:71 - templates\Parts\show_part_info.html.twig:88 - vendor.partinfo.shopping_infos Einkaufsinformationen - - Part-DB1\templates\Parts\info\show_part_info.html.twig:91 - Part-DB1\templates\Parts\info\show_part_info.html.twig:78 - templates\Parts\show_part_info.html.twig:94 - vendor.partinfo.history Historie - - Part-DB1\templates\Parts\info\show_part_info.html.twig:97 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - Part-DB1\templates\Parts\info\show_part_info.html.twig:84 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - templates\base.html.twig:176 - templates\base.html.twig:203 - templates\base.html.twig:217 - templates\base.html.twig:231 - templates\Parts\show_part_info.html.twig:100 - tools.label Tools - - Part-DB1\templates\Parts\info\show_part_info.html.twig:103 - Part-DB1\templates\Parts\info\show_part_info.html.twig:90 - extended_info.label Erweiterte Informationen - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - attachment.name Name - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - attachment.attachment_type Anhangstyp - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - attachment.file_name Dateiname - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - attachment.file_size Dateigröße - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:54 - attachment.preview Vorschaubild - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:67 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:50 - attachment.download_local Lokale Datei downloaden @@ -2100,8 +1264,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 new @@ -2110,14 +1272,6 @@ Subelemente werden beim Löschen nach oben verschoben. - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Unknown Unbekannt @@ -2125,10 +1279,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 new @@ -2138,8 +1288,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 new @@ -2148,49 +1296,24 @@ Subelemente werden beim Löschen nach oben verschoben. - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - part.isFavorite Favorit - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - part.minOrderAmount Mindestbestellmenge - - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:46 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:41 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - templates\base.html.twig:70 - templates\Parts\show_part_info.html.twig:24 - src\Form\PartType.php:80 - manufacturer.label Hersteller - - Part-DB1\templates\Parts\info\_main_infos.html.twig:24 - Part-DB1\templates\_navbar_search.html.twig:11 - templates\base.html.twig:54 - src\Form\PartType.php:62 - name.label Name @@ -2198,8 +1321,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 new @@ -2208,767 +1329,432 @@ Subelemente werden beim Löschen nach oben verschoben. - - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:19 - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:18 - templates\base.html.twig:58 - templates\Parts\show_part_info.html.twig:31 - src\Form\PartType.php:65 - description.label Beschreibung - - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:15 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:14 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - templates\base.html.twig:56 - templates\Parts\show_part_info.html.twig:32 - src\Form\PartType.php:74 - category.label Kategorie - - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - templates\Parts\show_part_info.html.twig:42 - src\Form\PartType.php:69 - instock.label Im Lager - - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - templates\Parts\show_part_info.html.twig:44 - src\Form\PartType.php:72 - mininstock.label Mindestbestand - - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:52 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:47 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - templates\base.html.twig:73 - templates\Parts\show_part_info.html.twig:47 - footprint.label Footprint - - Part-DB1\templates\Parts\info\_main_infos.html.twig:56 - Part-DB1\templates\Parts\info\_main_infos.html.twig:59 - Part-DB1\templates\Parts\info\_main_infos.html.twig:57 - Part-DB1\templates\Parts\info\_main_infos.html.twig:60 - templates\Parts\show_part_info.html.twig:51 - part.avg_price.label Durchschnittspreis - - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - part.supplier.name Name - - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - part.supplier.partnr Bestellnr. - - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - part.order.minamount Mindestanzahl - - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - part.order.price Preis - - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - part.order.single_price Stückpreis - - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - Part-DB1\templates\Parts\info\_part_lots.html.twig:6 - part_lots.description Beschreibung - - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - part_lots.storage_location Lagerort - - Part-DB1\templates\Parts\info\_part_lots.html.twig:9 - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - part_lots.amount Menge - - Part-DB1\templates\Parts\info\_part_lots.html.twig:24 - Part-DB1\templates\Parts\info\_part_lots.html.twig:22 - part_lots.location_unknown Lagerort unbekannt - - Part-DB1\templates\Parts\info\_part_lots.html.twig:31 - Part-DB1\templates\Parts\info\_part_lots.html.twig:29 - part_lots.instock_unknown Menge unbekannt - - Part-DB1\templates\Parts\info\_part_lots.html.twig:40 - Part-DB1\templates\Parts\info\_part_lots.html.twig:38 - part_lots.expiration_date Ablaufdatum - - Part-DB1\templates\Parts\info\_part_lots.html.twig:48 - Part-DB1\templates\Parts\info\_part_lots.html.twig:46 - part_lots.is_expired Abgelaufen - - Part-DB1\templates\Parts\info\_part_lots.html.twig:55 - Part-DB1\templates\Parts\info\_part_lots.html.twig:53 - part_lots.need_refill Muss aufgefüllt werden - - Part-DB1\templates\Parts\info\_picture.html.twig:15 - Part-DB1\templates\Parts\info\_picture.html.twig:15 - part.info.prev_picture Vorheriges Bild - - Part-DB1\templates\Parts\info\_picture.html.twig:19 - Part-DB1\templates\Parts\info\_picture.html.twig:19 - part.info.next_picture Nächstes Bild - - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - part.mass.tooltip Gewicht - - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - part.needs_review.badge Review benötigt - - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - part.favorite.badge Favorit - - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - part.obsolete.badge Nicht mehr lieferbar - - Part-DB1\templates\Parts\info\_specifications.html.twig:10 - parameters.extracted_from_description Automatisch aus Beschreibung extrahiert - - Part-DB1\templates\Parts\info\_specifications.html.twig:15 - parameters.auto_extracted_from_comment Automatisch aus Notizen extrahiert - - Part-DB1\templates\Parts\info\_tools.html.twig:6 - Part-DB1\templates\Parts\info\_tools.html.twig:4 - templates\Parts\show_part_info.html.twig:125 - part.edit.btn Bauteil bearbeiten - - Part-DB1\templates\Parts\info\_tools.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:14 - templates\Parts\show_part_info.html.twig:135 - part.clone.btn Bauteil kopieren - - Part-DB1\templates\Parts\info\_tools.html.twig:24 - Part-DB1\templates\Parts\lists\_action_bar.html.twig:4 - templates\Parts\show_part_info.html.twig:143 - part.create.btn Neues Bauteil anlegen - - Part-DB1\templates\Parts\info\_tools.html.twig:31 - Part-DB1\templates\Parts\info\_tools.html.twig:29 - part.delete.confirm_title Möchten Sie dieses Bauteil wirklich löschen? - - Part-DB1\templates\Parts\info\_tools.html.twig:32 - Part-DB1\templates\Parts\info\_tools.html.twig:30 - part.delete.message Das Bauteil und alle zugehörigen Informationen (Bestände, Dateianhänge, etc.) werden gelöscht. Dies kann nicht rückgängig gemacht werden. - - Part-DB1\templates\Parts\info\_tools.html.twig:39 - Part-DB1\templates\Parts\info\_tools.html.twig:37 - part.delete Bauteil löschen - - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - parts_list.all.title Alle Bauteile - - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - parts_list.category.title Bauteile mit Kategorie - - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - parts_list.footprint.title Bauteile mit Footprint - - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - parts_list.manufacturer.title Bauteile mit Hersteller - - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - parts_list.search.title Bauteilesuche - - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - parts_list.storelocation.title Bauteile mit Lagerort - - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - parts_list.supplier.title Bauteile mit Lieferant - - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - parts_list.tags.title Bauteile mit Tag - - Part-DB1\templates\Parts\lists\_info_card.html.twig:22 - Part-DB1\templates\Parts\lists\_info_card.html.twig:17 - entity.info.common.tab Allgemein - - Part-DB1\templates\Parts\lists\_info_card.html.twig:26 - Part-DB1\templates\Parts\lists\_info_card.html.twig:20 - entity.info.statistics.tab Statistik - - Part-DB1\templates\Parts\lists\_info_card.html.twig:31 - entity.info.attachments.tab Dateianhänge - - Part-DB1\templates\Parts\lists\_info_card.html.twig:37 - entity.info.parameters.tab Parameter - - Part-DB1\templates\Parts\lists\_info_card.html.twig:54 - Part-DB1\templates\Parts\lists\_info_card.html.twig:30 - entity.info.name Name - - Part-DB1\templates\Parts\lists\_info_card.html.twig:58 - Part-DB1\templates\Parts\lists\_info_card.html.twig:96 - Part-DB1\templates\Parts\lists\_info_card.html.twig:34 - Part-DB1\templates\Parts\lists\_info_card.html.twig:67 - entity.info.parent Übergeordnetes Element - - Part-DB1\templates\Parts\lists\_info_card.html.twig:70 - Part-DB1\templates\Parts\lists\_info_card.html.twig:46 - entity.edit.btn Bearbeiten - - Part-DB1\templates\Parts\lists\_info_card.html.twig:92 - Part-DB1\templates\Parts\lists\_info_card.html.twig:63 - entity.info.children_count Anzahl an Unterelementen - - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - tfa.check.title Zwei-Faktor-Authentifizierung benötigt - - Part-DB1\templates\security\2fa_base_form.html.twig:39 - Part-DB1\templates\security\2fa_base_form.html.twig:39 - tfa.code.trusted_pc Dies ist ein vertrauenswürdiger Computer (wenn dies aktiviert ist, werden auf diesem Computer keine weiteren Zwei-Faktor-Abfragen durchgeführt) - - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - login.btn Login - - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:42 - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:40 - user.logout Ausloggen - - Part-DB1\templates\security\2fa_form.html.twig:6 - Part-DB1\templates\security\2fa_form.html.twig:6 - tfa.check.code.label Authenticator App Code - - Part-DB1\templates\security\2fa_form.html.twig:10 - Part-DB1\templates\security\2fa_form.html.twig:10 - tfa.check.code.help Geben Sie hier den 6-stelligen Code aus ihrer Authenticator App ein oder einen ihrer Backupcodes, wenn der Authenticator nicht verfügbar ist. - - Part-DB1\templates\security\login.html.twig:3 - Part-DB1\templates\security\login.html.twig:3 - templates\security\login.html.twig:3 - login.title Login - - Part-DB1\templates\security\login.html.twig:7 - Part-DB1\templates\security\login.html.twig:7 - templates\security\login.html.twig:7 - login.card_title Login - - Part-DB1\templates\security\login.html.twig:31 - Part-DB1\templates\security\login.html.twig:31 - templates\security\login.html.twig:31 - login.username.label Benutzername - - Part-DB1\templates\security\login.html.twig:34 - Part-DB1\templates\security\login.html.twig:34 - templates\security\login.html.twig:34 - login.username.placeholder Benutzername - - Part-DB1\templates\security\login.html.twig:38 - Part-DB1\templates\security\login.html.twig:38 - templates\security\login.html.twig:38 - login.password.label Passwort - - Part-DB1\templates\security\login.html.twig:40 - Part-DB1\templates\security\login.html.twig:40 - templates\security\login.html.twig:40 - login.password.placeholder Passwort - - Part-DB1\templates\security\login.html.twig:50 - Part-DB1\templates\security\login.html.twig:50 - templates\security\login.html.twig:50 - login.rememberme Eingeloggt bleiben (nicht empfohlen auf geteilten Computern) - - Part-DB1\templates\security\login.html.twig:64 - Part-DB1\templates\security\login.html.twig:64 - pw_reset.password_forget Nutzername/Passwort vergessen? - - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - pw_reset.new_pw.header.title Neues Passwort setzen - - Part-DB1\templates\security\pw_reset_request.html.twig:5 - Part-DB1\templates\security\pw_reset_request.html.twig:5 - pw_reset.request.header.title Neues Passwort anfordern - - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - tfa_u2f.http_warning Sie greifen auf diese Seite über das unsichere HTTP-Verfahren zu, daher wird U2F sehr wahrscheinlich nicht funktionieren (Fehlermeldung Bad Request). Bitten Sie einen Administrator, das sichere HTTPS Verfahren einzurichten, wenn Sie Sicherheitsschlüssel benutzen möchten. - - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - r_u2f_two_factor.pressbutton Bitte Sicherheitsschlüssel einstecken und Button drücken! - - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - tfa_u2f.add_key.title Sicherheitsschlüssel hinzufügen - - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - tfa_u2f.explanation Mithilfe eines U2F/FIDO kompatiblen Sicherheitsschlüssel (z.B. YubiKey oder NitroKey) kann eine benutzerfreundliche und sichere Zwei-Faktor-Authentifizierung ermöglicht. Die Sicherheitsschlüssel können hier registriert werden, und wird eine Zwei-Faktor-Überprüfung benötigt, so muss der Schlüssel nur per USB angesteckt oder per NFC gegen das Gerät getippt werden. - - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - tfa_u2f.add_key.backup_hint Um den Zugang auch bei Verlust des Schlüssels zu gewährleisten, ist es empfehlenswert einen zweiten Schlüssel als Backup zu registrieren und diesen an einem sicheren Ort zu lagern! - - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - tfa_u2f.add_key.add_button Schlüssel hinzufügen - - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - tfa_u2f.add_key.back_to_settings Zurück zu den Einstellungen @@ -2976,10 +1762,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 new @@ -2989,8 +1771,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:14 - Part-DB1\templates\Statistics\statistics.html.twig:14 new @@ -3000,8 +1780,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:19 - Part-DB1\templates\Statistics\statistics.html.twig:19 new @@ -3011,8 +1789,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:24 - Part-DB1\templates\Statistics\statistics.html.twig:24 new @@ -3022,12 +1798,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 new @@ -3037,12 +1807,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 new @@ -3052,8 +1816,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:40 - Part-DB1\templates\Statistics\statistics.html.twig:40 new @@ -3063,8 +1825,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:44 - Part-DB1\templates\Statistics\statistics.html.twig:44 new @@ -3074,8 +1834,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:48 - Part-DB1\templates\Statistics\statistics.html.twig:48 new @@ -3085,8 +1843,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:65 - Part-DB1\templates\Statistics\statistics.html.twig:65 new @@ -3096,8 +1852,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:69 - Part-DB1\templates\Statistics\statistics.html.twig:69 new @@ -3107,8 +1861,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:73 - Part-DB1\templates\Statistics\statistics.html.twig:73 new @@ -3118,8 +1870,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:77 - Part-DB1\templates\Statistics\statistics.html.twig:77 new @@ -3129,8 +1879,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:81 - Part-DB1\templates\Statistics\statistics.html.twig:81 new @@ -3140,8 +1888,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:85 - Part-DB1\templates\Statistics\statistics.html.twig:85 new @@ -3151,8 +1897,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:89 - Part-DB1\templates\Statistics\statistics.html.twig:89 new @@ -3162,8 +1906,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:93 - Part-DB1\templates\Statistics\statistics.html.twig:93 new @@ -3173,8 +1915,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:110 - Part-DB1\templates\Statistics\statistics.html.twig:110 new @@ -3184,8 +1924,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:114 - Part-DB1\templates\Statistics\statistics.html.twig:114 new @@ -3195,8 +1933,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:118 - Part-DB1\templates\Statistics\statistics.html.twig:118 new @@ -3206,8 +1942,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:122 - Part-DB1\templates\Statistics\statistics.html.twig:122 new @@ -3217,8 +1951,6 @@ Subelemente werden beim Löschen nach oben verschoben. - Part-DB1\templates\Statistics\statistics.html.twig:126 - Part-DB1\templates\Statistics\statistics.html.twig:126 new @@ -3227,302 +1959,156 @@ Subelemente werden beim Löschen nach oben verschoben. - - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - tfa_backup.codes.title Backupcodes - - Part-DB1\templates\Users\backup_codes.html.twig:12 - Part-DB1\templates\Users\backup_codes.html.twig:12 - tfa_backup.codes.explanation Drucken Sie diese Codes aus und bewahren Sie sie an einem sicheren Ort auf! - - Part-DB1\templates\Users\backup_codes.html.twig:13 - Part-DB1\templates\Users\backup_codes.html.twig:13 - tfa_backup.codes.help Wenn Sie keinen Zugriff auf ihr Gerät mit der Authenticator App mehr haben sollten (Smartphone verloren, Datenverlust, etc.) können Sie einen dieser Codes benutzen, um Zugriff auf ihren Account zu erhalten und evtl. eine neue Authenticator App einzurichten. Jeder dieser Codes lässt sich einmal einsetzen, es empfiehlt sich benutzte Codes zu streichen. Jeder mit Zugriff auf diese Codes kann potentiell auf ihren Account zugreifen, daher bewahren Sie sie an einem sicheren Ort auf. - - Part-DB1\templates\Users\backup_codes.html.twig:16 - Part-DB1\templates\Users\backup_codes.html.twig:16 - tfa_backup.username Benutzername - - Part-DB1\templates\Users\backup_codes.html.twig:29 - Part-DB1\templates\Users\backup_codes.html.twig:29 - tfa_backup.codes.page_generated_on Codes abgerufen am %date% - - Part-DB1\templates\Users\backup_codes.html.twig:32 - Part-DB1\templates\Users\backup_codes.html.twig:32 - tfa_backup.codes.print Drucken - - Part-DB1\templates\Users\backup_codes.html.twig:35 - Part-DB1\templates\Users\backup_codes.html.twig:35 - tfa_backup.codes.copy_clipboard In die Zwischenablage kopieren - - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:40 - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:38 - templates\base.html.twig:99 - templates\Users\user_info.html.twig:3 - templates\Users\user_info.html.twig:6 - user.info.label Benutzerinformationen - - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - templates\Users\user_info.html.twig:18 - src\Form\UserSettingsType.php:32 - user.firstName.label Vorname - - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - templates\Users\user_info.html.twig:24 - src\Form\UserSettingsType.php:35 - user.lastName.label Nachname - - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - templates\Users\user_info.html.twig:30 - src\Form\UserSettingsType.php:41 - user.email.label E-Mail - - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - templates\Users\user_info.html.twig:37 - src\Form\UserSettingsType.php:38 - user.department.label Abteilung - - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - templates\Users\user_info.html.twig:47 - src\Form\UserSettingsType.php:30 - user.username.label Benutzername - - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - templates\Users\user_info.html.twig:53 - group.label Group - - Part-DB1\templates\Users\user_info.html.twig:67 - Part-DB1\templates\Users\user_info.html.twig:67 - user.permissions Berechtigungen - - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:39 - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:37 - templates\base.html.twig:98 - templates\Users\user_settings.html.twig:3 - templates\Users\user_settings.html.twig:6 - user.settings.label Benutzereinstellungen - - Part-DB1\templates\Users\user_settings.html.twig:18 - Part-DB1\templates\Users\user_settings.html.twig:18 - templates\Users\user_settings.html.twig:14 - user_settings.data.label Persönliche Daten - - Part-DB1\templates\Users\user_settings.html.twig:22 - Part-DB1\templates\Users\user_settings.html.twig:22 - templates\Users\user_settings.html.twig:18 - user_settings.configuration.label Konfiguration - - Part-DB1\templates\Users\user_settings.html.twig:55 - Part-DB1\templates\Users\user_settings.html.twig:55 - templates\Users\user_settings.html.twig:48 - user.settings.change_pw Passwort ändern - - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - user.settings.2fa_settings Zwei-Faktor-Authentifizierung - - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - tfa.settings.google.tab Authenticator App - - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - tfa.settings.bakup.tab Backupcodes - - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - tfa.settings.u2f.tab Sicherheitsschlüssel (U2F) - - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - tfa.settings.trustedDevices.tab Vertrauenswürdige Geräte - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_title Möchten Sie die Authenticator App wirklich deaktivieren? - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_message Wenn Sie die Authenticator App deaktivieren, werden alle Backupcodes gelöscht, daher sie müssen sie evtl. neu ausdrucken.<br> @@ -3530,262 +2116,156 @@ Beachten Sie außerdem, dass ihr Account ohne Zwei-Faktor-Authentifizierung nich - - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - tfa_google.disabled_message Authenticator App deaktiviert - - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - tfa_google.step.download Laden Sie eine Authenticator App herunter (z.B. <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a> oder <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp">FreeOTP Authenticator</a>) - - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - tfa_google.step.scan Scannen Sie den nebenstehenden QR-Code mit der App oder geben Sie die Daten manuell ein - - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - tfa_google.step.input_code Geben Sie den erzeugten Code in das untere Feld ein und bestätigen Sie - - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - tfa_google.step.download_backup Drucken Sie ihre Backupcodes aus und lagern sie an einem sicheren Ort - - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - tfa_google.manual_setup Manuelle Einrichtung - - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - tfa_google.manual_setup.type Typ - - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - tfa_google.manual_setup.username Benutzername - - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - tfa_google.manual_setup.secret Secret - - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - tfa_google.manual_setup.digit_count Anzahl Stellen - - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - tfa_google.enabled_message Authenticator App aktiv - - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - tfa_backup.disabled Backupcodes deaktiviert. Authenticator App einrichten, um Backupcodes zu aktivieren. - - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - tfa_backup.explanation Mithilfe dieser Backupcodes können Sie auf ihren Account zugreifen, selbst wenn Sie das Gerät mit der Authenticator App verlieren sollten. Drucken Sie die Codes aus und bewahren Sie sie an einem sicheren Ort auf. - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_title Codes wirklich zurücksetzen? - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_message Dies wird alle bisherigen Codes löschen und einen Satz neuer Codes generieren. Dies lässt sich nicht rückgängig machen. Denken Sie daran die neuen Codes auszudrucken und an einem sicheren Ort zu hinterlegen! - - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - tfa_backup.enabled Backupcodes aktiviert - - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - tfa_backup.show_codes Backupcodes anzeigen - - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - tfa_u2f.table_caption Registrierte Sicherheitsschlüssel - - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - tfa_u2f.delete_u2f.confirm_title Diesen Sicherheitsschlüssel wirklich entfernen? - - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - tfa_u2f.delete_u2f.confirm_message Wenn Sie diesen Schlüssel entfernen, dann wird kein Login mehr mit diesem möglich sein. Wenn keine Sicherheitsschlüssel verleiben, wird die Zwei-Faktor-Authentifizierung deaktiviert. - - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - tfa_u2f.keys.name Name des Schlüssels - - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - tfa_u2f.keys.added_date Datum der Registrierung - - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - tfa_u2f.key_delete Schlüssel löschen - - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - tfa_u2f.no_keys_registered Keine Sicherheitsschlüssel registriert - - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - tfa_u2f.add_new_key Neuen Sicherheitsschlüssel registrieren - - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - tfa_trustedDevices.explanation Bei der Überprüfung des zweiten Faktors, kann der aktuelle Computer als vertrauenswürdig gekennzeichnet werden, daher werden keine Zwei-Faktor-Überprüfungen mehr an diesem Computer benötigt. @@ -3793,326 +2273,168 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - tfa_trustedDevices.invalidate.confirm_title Wirklich alle vertrauenswürdigen Computer entfernen? - - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - tfa_trustedDevices.invalidate.confirm_message Sie werden auf allen Rechnern erneut eine Zwei-Faktor-Authentifizierung durchführen müssen. Achten Sie darauf, dass Sie ihr Zwei-Faktor-Gerät zur Hand haben. - - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - tfa_trustedDevices.invalidate.btn Alle vertrauenswürdigen Geräte entfernen - - Part-DB1\templates\_navbar.html.twig:4 - Part-DB1\templates\_navbar.html.twig:4 - templates\base.html.twig:29 - sidebar.toggle Sidebar umschalten - - Part-DB1\templates\_navbar.html.twig:22 - navbar.scanner.link Scanner - - Part-DB1\templates\_navbar.html.twig:38 - Part-DB1\templates\_navbar.html.twig:36 - templates\base.html.twig:97 - user.loggedin.label Eingeloggt als - - Part-DB1\templates\_navbar.html.twig:44 - Part-DB1\templates\_navbar.html.twig:42 - templates\base.html.twig:103 - user.login Einloggen - - Part-DB1\templates\_navbar.html.twig:50 - Part-DB1\templates\_navbar.html.twig:48 - ui.toggle_darkmode Darkmode - - Part-DB1\templates\_navbar.html.twig:54 - Part-DB1\src\Form\UserSettingsType.php:97 - Part-DB1\templates\_navbar.html.twig:52 - Part-DB1\src\Form\UserSettingsType.php:97 - templates\base.html.twig:106 - src\Form\UserSettingsType.php:44 - user.language_select Sprache - - Part-DB1\templates\_navbar_search.html.twig:4 - Part-DB1\templates\_navbar_search.html.twig:4 - templates\base.html.twig:49 - search.options.label Suchoptionen - - Part-DB1\templates\_navbar_search.html.twig:23 - tags.label Tags - - Part-DB1\templates\_navbar_search.html.twig:27 - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - templates\base.html.twig:60 - templates\Parts\show_part_info.html.twig:36 - src\Form\PartType.php:77 - storelocation.label Lagerort - - Part-DB1\templates\_navbar_search.html.twig:36 - Part-DB1\templates\_navbar_search.html.twig:31 - templates\base.html.twig:65 - ordernumber.label.short Bestellnr. - - Part-DB1\templates\_navbar_search.html.twig:40 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - Part-DB1\templates\_navbar_search.html.twig:35 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - templates\base.html.twig:67 - supplier.label Lieferant - - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_navbar_search.html.twig:56 - templates\base.html.twig:77 - search.regexmatching Reg.Ex. Matching - - Part-DB1\templates\_sidebar.html.twig:37 - Part-DB1\templates\_sidebar.html.twig:12 - Part-DB1\templates\_sidebar.html.twig:37 - Part-DB1\templates\_sidebar.html.twig:12 - templates\base.html.twig:175 - templates\base.html.twig:189 - templates\base.html.twig:202 - templates\base.html.twig:230 - project.labelp Projekte - - Part-DB1\templates\_sidebar.html.twig:2 - Part-DB1\templates\_sidebar.html.twig:2 - templates\base.html.twig:165 - templates\base.html.twig:192 - templates\base.html.twig:220 - actions Aktionen - - Part-DB1\templates\_sidebar.html.twig:6 - Part-DB1\templates\_sidebar.html.twig:6 - templates\base.html.twig:169 - templates\base.html.twig:196 - templates\base.html.twig:224 - datasource Datenquelle - - Part-DB1\templates\_sidebar.html.twig:10 - Part-DB1\templates\_sidebar.html.twig:10 - templates\base.html.twig:173 - templates\base.html.twig:200 - templates\base.html.twig:228 - manufacturer.labelp Hersteller - - Part-DB1\templates\_sidebar.html.twig:11 - Part-DB1\templates\_sidebar.html.twig:11 - templates\base.html.twig:174 - templates\base.html.twig:201 - templates\base.html.twig:229 - supplier.labelp Lieferanten - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:213 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:293 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:293 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:181 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:243 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:268 - attachment.download_failed Download der externen Datei fehlgeschlagen! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:222 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:190 - entity.edit_flash Änderungen erfolgreich gespeichert. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:231 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:196 - entity.edit_flash.invalid Änderungen konnten nicht gespeichert werden! Prüfen Sie ihre Eingaben! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:302 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:252 - entity.created_flash Element erfolgreich angelegt! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:308 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:258 - entity.created_flash.invalid Element konnte nicht angelegt werden! Prüfen Sie ihre Eingaben! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:399 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:352 - src\Controller\BaseAdminController.php:154 - attachment_type.deleted Element gelöscht! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:401 - Part-DB1\src\Controller\UserController.php:109 - Part-DB1\src\Controller\UserSettingsController.php:159 - Part-DB1\src\Controller\UserSettingsController.php:193 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:354 - Part-DB1\src\Controller\UserController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:150 - Part-DB1\src\Controller\UserSettingsController.php:182 - csfr_invalid CSFR-Token ungültig! Laden Sie diese Seite erneut oder kontaktieren Sie einen Administrator, wenn das Problem bestehen bleibt! - - Part-DB1\src\Controller\LabelController.php:125 - label_generator.no_entities_found Keine Elemente gefunden @@ -4120,8 +2442,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Controller\LogController.php:149 - Part-DB1\src\Controller\LogController.php:154 new @@ -4131,8 +2451,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Controller\LogController.php:156 - Part-DB1\src\Controller\LogController.php:160 new @@ -4142,8 +2460,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Controller\LogController.php:176 - Part-DB1\src\Controller\LogController.php:180 new @@ -4153,8 +2469,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Controller\LogController.php:178 - Part-DB1\src\Controller\LogController.php:182 new @@ -4164,8 +2478,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Controller\LogController.php:185 - Part-DB1\src\Controller\LogController.php:189 new @@ -4175,8 +2487,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Controller\LogController.php:187 - Part-DB1\src\Controller\LogController.php:191 new @@ -4186,8 +2496,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Controller\LogController.php:194 - Part-DB1\src\Controller\LogController.php:198 new @@ -4197,8 +2505,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Controller\LogController.php:196 - Part-DB1\src\Controller\LogController.php:200 new @@ -4208,8 +2514,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Controller\LogController.php:199 - Part-DB1\src\Controller\LogController.php:203 new @@ -4218,306 +2522,168 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - - Part-DB1\src\Controller\PartController.php:182 - Part-DB1\src\Controller\PartController.php:182 - src\Controller\PartController.php:80 - part.edited_flash Änderungen gespeichert! - - Part-DB1\src\Controller\PartController.php:216 - Part-DB1\src\Controller\PartController.php:219 - part.deleted Bauteil erfolgreich gelöscht. - - Part-DB1\src\Controller\PartController.php:302 - Part-DB1\src\Controller\PartController.php:277 - Part-DB1\src\Controller\PartController.php:317 - src\Controller\PartController.php:113 - src\Controller\PartController.php:142 - part.created_flash Bauteile erfolgreich angelegt! - - Part-DB1\src\Controller\PartController.php:308 - Part-DB1\src\Controller\PartController.php:283 - part.created_flash.invalid Fehler beim Anlegen: Überprüfen Sie ihre Eingaben! - - Part-DB1\src\Controller\ScanController.php:68 - Part-DB1\src\Controller\ScanController.php:90 - scan.qr_not_found Kein Element gefunden - - Part-DB1\src\Controller\ScanController.php:71 - scan.format_unknown Format unbekannt - - Part-DB1\src\Controller\ScanController.php:86 - scan.qr_success Element gefunden - - Part-DB1\src\Controller\SecurityController.php:114 - Part-DB1\src\Controller\SecurityController.php:109 - pw_reset.user_or_email Benutzername / E-Mail - - Part-DB1\src\Controller\SecurityController.php:131 - Part-DB1\src\Controller\SecurityController.php:126 - pw_reset.request.success Passwort-Anfrage erfolgreich! Überprüfen Sie Ihre E-Mails für weitere Informationen. - - Part-DB1\src\Controller\SecurityController.php:162 - Part-DB1\src\Controller\SecurityController.php:160 - pw_reset.username Benutzername - - Part-DB1\src\Controller\SecurityController.php:165 - Part-DB1\src\Controller\SecurityController.php:163 - pw_reset.token Token - - Part-DB1\src\Controller\SecurityController.php:194 - Part-DB1\src\Controller\SecurityController.php:192 - pw_reset.new_pw.error Benutzername oder Token ungültig! Überprüfen Sie ihre Eingaben. - - Part-DB1\src\Controller\SecurityController.php:196 - Part-DB1\src\Controller\SecurityController.php:194 - pw_reset.new_pw.success Passwort wurde erfolgreich zurückgesetzt. Sie können sich nun mit dem neuen Passwort einloggen. - - Part-DB1\src\Controller\UserController.php:107 - Part-DB1\src\Controller\UserController.php:99 - user.edit.reset_success Alle Zwei-Faktor-Authentisierungsmethoden wurden erfolgreich deaktiviert. - - Part-DB1\src\Controller\UserSettingsController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:92 - tfa_backup.no_codes_enabled Es sind keine Backupcodes aktiviert! - - Part-DB1\src\Controller\UserSettingsController.php:138 - Part-DB1\src\Controller\UserSettingsController.php:132 - tfa_u2f.u2f_delete.not_existing Es existiert kein Sicherheitsschlüssel mit dieser ID! - - Part-DB1\src\Controller\UserSettingsController.php:145 - Part-DB1\src\Controller\UserSettingsController.php:139 - tfa_u2f.u2f_delete.access_denied Sie können nur ihre eigenen Sicherheitsschlüssel löschen! - - Part-DB1\src\Controller\UserSettingsController.php:153 - Part-DB1\src\Controller\UserSettingsController.php:147 - tfa.u2f.u2f_delete.success Sicherheitsschlüssel erfolgreich entfernt. - - Part-DB1\src\Controller\UserSettingsController.php:188 - Part-DB1\src\Controller\UserSettingsController.php:180 - tfa_trustedDevice.invalidate.success Vertrauenswürdige Geräte erfolgreich zurückgesetzt. - - Part-DB1\src\Controller\UserSettingsController.php:235 - Part-DB1\src\Controller\UserSettingsController.php:226 - src\Controller\UserController.php:98 - user.settings.saved_flash Einstellungen gespeichert! - - Part-DB1\src\Controller\UserSettingsController.php:297 - Part-DB1\src\Controller\UserSettingsController.php:288 - src\Controller\UserController.php:130 - user.settings.pw_changed_flash Passwort geändert! - - Part-DB1\src\Controller\UserSettingsController.php:317 - Part-DB1\src\Controller\UserSettingsController.php:306 - user.settings.2fa.google.activated Authenticator App erfolgreich aktiviert. - - Part-DB1\src\Controller\UserSettingsController.php:328 - Part-DB1\src\Controller\UserSettingsController.php:315 - user.settings.2fa.google.disabled Authenticator App erfolgreich deaktiviert. - - Part-DB1\src\Controller\UserSettingsController.php:346 - Part-DB1\src\Controller\UserSettingsController.php:332 - user.settings.2fa.backup_codes.regenerated Neue Backupcodes erfolgreich erzeugt. - - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - attachment.table.filesize Dateigröße - - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:245 - Part-DB1\src\DataTables\PartsDataTable.php:252 - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:193 - Part-DB1\src\DataTables\PartsDataTable.php:200 - true wahr - - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:246 - Part-DB1\src\DataTables\PartsDataTable.php:253 - Part-DB1\src\Form\Type\SIUnitType.php:139 - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:201 - Part-DB1\src\Form\Type\SIUnitType.php:139 - false falsch - - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:128 - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:119 - log.target_deleted gelöscht @@ -4525,8 +2691,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\DataTables\Column\RevertLogColumn.php:57 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:60 new @@ -4536,8 +2700,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\DataTables\Column\RevertLogColumn.php:63 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:66 new @@ -4547,8 +2709,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\DataTables\Column\RevertLogColumn.php:83 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:86 new @@ -4557,70 +2717,42 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - - Part-DB1\src\DataTables\LogDataTable.php:173 - Part-DB1\src\DataTables\LogDataTable.php:161 - log.id ID - - Part-DB1\src\DataTables\LogDataTable.php:178 - Part-DB1\src\DataTables\LogDataTable.php:166 - log.timestamp Zeitstempel - - Part-DB1\src\DataTables\LogDataTable.php:183 - Part-DB1\src\DataTables\LogDataTable.php:171 - log.type Ereignis - - Part-DB1\src\DataTables\LogDataTable.php:191 - Part-DB1\src\DataTables\LogDataTable.php:179 - log.level Level - - Part-DB1\src\DataTables\LogDataTable.php:200 - Part-DB1\src\DataTables\LogDataTable.php:188 - log.user Benutzer - - Part-DB1\src\DataTables\LogDataTable.php:213 - Part-DB1\src\DataTables\LogDataTable.php:201 - log.target_type Zieltyp - - Part-DB1\src\DataTables\LogDataTable.php:226 - Part-DB1\src\DataTables\LogDataTable.php:214 - log.target Ziel @@ -4628,8 +2760,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\DataTables\LogDataTable.php:231 - Part-DB1\src\DataTables\LogDataTable.php:218 new @@ -4638,100 +2768,60 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - - Part-DB1\src\DataTables\PartsDataTable.php:168 - Part-DB1\src\DataTables\PartsDataTable.php:116 - part.table.name Name - - Part-DB1\src\DataTables\PartsDataTable.php:178 - Part-DB1\src\DataTables\PartsDataTable.php:126 - part.table.id ID - - Part-DB1\src\DataTables\PartsDataTable.php:182 - Part-DB1\src\DataTables\PartsDataTable.php:130 - part.table.description Beschreibung - - Part-DB1\src\DataTables\PartsDataTable.php:185 - Part-DB1\src\DataTables\PartsDataTable.php:133 - part.table.category Kategorie - - Part-DB1\src\DataTables\PartsDataTable.php:190 - Part-DB1\src\DataTables\PartsDataTable.php:138 - part.table.footprint Footprint - - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:142 - part.table.manufacturer Hersteller - - Part-DB1\src\DataTables\PartsDataTable.php:197 - Part-DB1\src\DataTables\PartsDataTable.php:145 - part.table.storeLocations Lagerorte - - Part-DB1\src\DataTables\PartsDataTable.php:216 - Part-DB1\src\DataTables\PartsDataTable.php:164 - part.table.amount Menge - - Part-DB1\src\DataTables\PartsDataTable.php:224 - Part-DB1\src\DataTables\PartsDataTable.php:172 - part.table.minamount Min. Menge - - Part-DB1\src\DataTables\PartsDataTable.php:232 - Part-DB1\src\DataTables\PartsDataTable.php:180 - part.table.partUnit Maßeinheit @@ -4744,864 +2834,522 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - - Part-DB1\src\DataTables\PartsDataTable.php:236 - Part-DB1\src\DataTables\PartsDataTable.php:184 - part.table.addedDate Hinzugefügt - - Part-DB1\src\DataTables\PartsDataTable.php:240 - Part-DB1\src\DataTables\PartsDataTable.php:188 - part.table.lastModified Zuletzt bearbeitet - - Part-DB1\src\DataTables\PartsDataTable.php:244 - Part-DB1\src\DataTables\PartsDataTable.php:192 - part.table.needsReview Review benötigt - - Part-DB1\src\DataTables\PartsDataTable.php:251 - Part-DB1\src\DataTables\PartsDataTable.php:199 - part.table.favorite Favorit - - Part-DB1\src\DataTables\PartsDataTable.php:258 - Part-DB1\src\DataTables\PartsDataTable.php:206 - part.table.manufacturingStatus Status - - Part-DB1\src\DataTables\PartsDataTable.php:260 - Part-DB1\src\DataTables\PartsDataTable.php:262 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:208 - Part-DB1\src\DataTables\PartsDataTable.php:210 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.unknown Unbekannt - - Part-DB1\src\DataTables\PartsDataTable.php:263 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:211 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.announced Angekündigt - - Part-DB1\src\DataTables\PartsDataTable.php:264 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.active Aktiv - - Part-DB1\src\DataTables\PartsDataTable.php:265 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:213 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.nrfnd Not recommended for new designs - - Part-DB1\src\DataTables\PartsDataTable.php:266 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:214 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.eol End of life - - Part-DB1\src\DataTables\PartsDataTable.php:267 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:215 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.discontinued Discontinued - - Part-DB1\src\DataTables\PartsDataTable.php:271 - Part-DB1\src\DataTables\PartsDataTable.php:219 - part.table.mpn MPN - - Part-DB1\src\DataTables\PartsDataTable.php:275 - Part-DB1\src\DataTables\PartsDataTable.php:223 - part.table.mass Gewicht - - Part-DB1\src\DataTables\PartsDataTable.php:279 - Part-DB1\src\DataTables\PartsDataTable.php:227 - part.table.tags Tags - - Part-DB1\src\DataTables\PartsDataTable.php:283 - Part-DB1\src\DataTables\PartsDataTable.php:231 - part.table.attachments Dateianhänge - - Part-DB1\src\EventSubscriber\UserSystem\LoginSuccessSubscriber.php:82 - Part-DB1\src\EventSubscriber\LoginSuccessListener.php:82 - flash.login_successful Login erfolgreich. - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - JSON JSON - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - XML XML - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - CSV CSV - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - YAML YAML - - Part-DB1\src\Form\AdminPages\ImportType.php:124 - Part-DB1\src\Form\AdminPages\ImportType.php:124 - import.abort_on_validation.help Wenn diese Option aktiviert ist, wird beim Erkennen ungültiger Daten der gesamte Vorgang abgebrochen. Ist diese Option nicht aktiv, werden ungültige Einträge ignoriert und versucht, die anderen Einträge zu importieren. - - Part-DB1\src\Form\AdminPages\ImportType.php:86 - Part-DB1\src\Form\AdminPages\ImportType.php:86 - src\Form\ImportType.php:70 - import.csv_separator CSV Trennzeichen - - Part-DB1\src\Form\AdminPages\ImportType.php:93 - Part-DB1\src\Form\AdminPages\ImportType.php:93 - src\Form\ImportType.php:72 - parent.label Übergeordnetes Element - - Part-DB1\src\Form\AdminPages\ImportType.php:101 - Part-DB1\src\Form\AdminPages\ImportType.php:101 - src\Form\ImportType.php:75 - import.file Datei - - Part-DB1\src\Form\AdminPages\ImportType.php:111 - Part-DB1\src\Form\AdminPages\ImportType.php:111 - src\Form\ImportType.php:78 - import.preserve_children Importiere auch Unterelemente - - Part-DB1\src\Form\AdminPages\ImportType.php:120 - Part-DB1\src\Form\AdminPages\ImportType.php:120 - src\Form\ImportType.php:80 - import.abort_on_validation Breche bei Invaliden Daten ab - - Part-DB1\src\Form\AdminPages\ImportType.php:132 - Part-DB1\src\Form\AdminPages\ImportType.php:132 - src\Form\ImportType.php:85 - import.btn Importieren - - Part-DB1\src\Form\AttachmentFormType.php:113 - Part-DB1\src\Form\AttachmentFormType.php:109 - attachment.edit.secure_file.help Auf einen Anhang, der als privat gekennzeichnet wurde, kann nur durch einen angemeldeten Benutzer zugegriffen werden, der die entsprechende Berechtigung besitzt. Wenn diese Option aktiv ist, werden keine Thumbnails erzeugt, und der Zugriff auf die Datei ist langsamer. - - Part-DB1\src\Form\AttachmentFormType.php:127 - Part-DB1\src\Form\AttachmentFormType.php:123 - attachment.edit.url.help Hier kann entweder eine URL zu einer externen Datei eingetragen werden, oder es wird durch Eingabe eines Stichwortes in den eingebauten Ressourcen gesucht (z.B. Footprints). - - Part-DB1\src\Form\AttachmentFormType.php:82 - Part-DB1\src\Form\AttachmentFormType.php:79 - attachment.edit.name Name - - Part-DB1\src\Form\AttachmentFormType.php:85 - Part-DB1\src\Form\AttachmentFormType.php:82 - attachment.edit.attachment_type Anhangstyp - - Part-DB1\src\Form\AttachmentFormType.php:94 - Part-DB1\src\Form\AttachmentFormType.php:91 - attachment.edit.show_in_table Zeige in Tabelle - - Part-DB1\src\Form\AttachmentFormType.php:105 - Part-DB1\src\Form\AttachmentFormType.php:102 - attachment.edit.secure_file Privater Anhang - - Part-DB1\src\Form\AttachmentFormType.php:119 - Part-DB1\src\Form\AttachmentFormType.php:115 - attachment.edit.url URL - - Part-DB1\src\Form\AttachmentFormType.php:133 - Part-DB1\src\Form\AttachmentFormType.php:129 - attachment.edit.download_url Downloade externe Datei - - Part-DB1\src\Form\AttachmentFormType.php:146 - Part-DB1\src\Form\AttachmentFormType.php:142 - attachment.edit.file Datei hochladen - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:86 - part.label Bauteil - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:87 - part_lot.label Bauteilebestand - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.none Keiner - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.qr QR-Code (empfohlen) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code128 Code 128 (empfohlen) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code39 Code 39 (empfohlen) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code93 Code 93 - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.datamatrix Datamatrix - - Part-DB1\src\Form\LabelOptionsType.php:122 - label_options.lines_mode.html HTML - - Part-DB1\src\Form\LabelOptionsType.php:122 - label.options.lines_mode.twig Twig - - Part-DB1\src\Form\LabelOptionsType.php:126 - label_options.lines_mode.help Wenn Sie hier Twig auswählen, wird das Contentfeld als Twig-Template interpretiert. Weitere Hilfe gibt es in der <a href="https://twig.symfony.com/doc/3.x/templates.html">Twig Dokumentation</a> und dem <a href="https://docs.part-db.de/usage/labels.html#twig-mode">Wiki</a>. - - Part-DB1\src\Form\LabelOptionsType.php:47 - label_options.page_size.label Größe - - Part-DB1\src\Form\LabelOptionsType.php:66 - label_options.supported_elements.label Elementtyp - - Part-DB1\src\Form\LabelOptionsType.php:75 - label_options.barcode_type.label Barcode-Typ - - Part-DB1\src\Form\LabelOptionsType.php:102 - label_profile.lines.label Inhalt - - Part-DB1\src\Form\LabelOptionsType.php:111 - label_options.additional_css.label Zusätzliches CSS - - Part-DB1\src\Form\LabelOptionsType.php:120 - label_options.lines_mode.label Parser Modus - - Part-DB1\src\Form\LabelOptionsType.php:51 - label_options.width.placeholder Breite - - Part-DB1\src\Form\LabelOptionsType.php:60 - label_options.height.placeholder Höhe - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:49 - label_generator.target_id.range_hint Sie können hier mehrere IDs (z.B. 1, 2, 3) und/oder einen Bereich angeben, um Barcodes für mehrere Elemente auf einmal zu erzeugen. - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:46 - label_generator.target_id.label Element IDs - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:59 - label_generator.update Update - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:36 - scan_dialog.input Input - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:44 - scan_dialog.submit Absenden - - Part-DB1\src\Form\ParameterType.php:41 - parameters.name.placeholder z.B. DC Current Gain - - Part-DB1\src\Form\ParameterType.php:50 - parameters.symbol.placeholder z.B. h_{FE} - - Part-DB1\src\Form\ParameterType.php:60 - parameters.text.placeholder z.B. Test Specifications - - Part-DB1\src\Form\ParameterType.php:71 - parameters.max.placeholder z.B. 350 - - Part-DB1\src\Form\ParameterType.php:82 - parameters.min.placeholder z.B. 100 - - Part-DB1\src\Form\ParameterType.php:93 - parameters.typical.placeholder z.B. 200 - - Part-DB1\src\Form\ParameterType.php:103 - parameters.unit.placeholder z.B. V - - Part-DB1\src\Form\ParameterType.php:114 - parameter.group.placeholder z.B. Technische Spezifikationen - - Part-DB1\src\Form\Part\OrderdetailType.php:72 - Part-DB1\src\Form\Part\OrderdetailType.php:75 - orderdetails.edit.supplierpartnr Bestellnummer - - Part-DB1\src\Form\Part\OrderdetailType.php:81 - Part-DB1\src\Form\Part\OrderdetailType.php:84 - orderdetails.edit.supplier Lieferant - - Part-DB1\src\Form\Part\OrderdetailType.php:87 - Part-DB1\src\Form\Part\OrderdetailType.php:90 - orderdetails.edit.url Link zum Angebot - - Part-DB1\src\Form\Part\OrderdetailType.php:93 - Part-DB1\src\Form\Part\OrderdetailType.php:96 - orderdetails.edit.obsolete Nicht mehr lieferbar - - Part-DB1\src\Form\Part\OrderdetailType.php:75 - Part-DB1\src\Form\Part\OrderdetailType.php:78 - orderdetails.edit.supplierpartnr.placeholder z.B. BC 547C - - Part-DB1\src\Form\Part\PartBaseType.php:101 - Part-DB1\src\Form\Part\PartBaseType.php:99 - part.edit.name Name - - Part-DB1\src\Form\Part\PartBaseType.php:109 - Part-DB1\src\Form\Part\PartBaseType.php:107 - part.edit.description Beschreibung - - Part-DB1\src\Form\Part\PartBaseType.php:120 - Part-DB1\src\Form\Part\PartBaseType.php:118 - part.edit.mininstock Mindestbestand - - Part-DB1\src\Form\Part\PartBaseType.php:129 - Part-DB1\src\Form\Part\PartBaseType.php:127 - part.edit.category Kategorie - - Part-DB1\src\Form\Part\PartBaseType.php:135 - Part-DB1\src\Form\Part\PartBaseType.php:133 - part.edit.footprint Footprint - - Part-DB1\src\Form\Part\PartBaseType.php:142 - Part-DB1\src\Form\Part\PartBaseType.php:140 - part.edit.tags Tags - - Part-DB1\src\Form\Part\PartBaseType.php:154 - Part-DB1\src\Form\Part\PartBaseType.php:152 - part.edit.manufacturer.label Hersteller - - Part-DB1\src\Form\Part\PartBaseType.php:161 - Part-DB1\src\Form\Part\PartBaseType.php:159 - part.edit.manufacturer_url.label Link zur Produktseite - - Part-DB1\src\Form\Part\PartBaseType.php:167 - Part-DB1\src\Form\Part\PartBaseType.php:165 - part.edit.mpn Bauteilenummer des Herstellers - - Part-DB1\src\Form\Part\PartBaseType.php:173 - Part-DB1\src\Form\Part\PartBaseType.php:171 - part.edit.manufacturing_status Herstellungsstatus - - Part-DB1\src\Form\Part\PartBaseType.php:181 - Part-DB1\src\Form\Part\PartBaseType.php:179 - part.edit.needs_review Review benötigt - - Part-DB1\src\Form\Part\PartBaseType.php:189 - Part-DB1\src\Form\Part\PartBaseType.php:187 - part.edit.is_favorite Favorit - - Part-DB1\src\Form\Part\PartBaseType.php:197 - Part-DB1\src\Form\Part\PartBaseType.php:195 - part.edit.mass Gewicht - - Part-DB1\src\Form\Part\PartBaseType.php:203 - Part-DB1\src\Form\Part\PartBaseType.php:201 - part.edit.partUnit Maßeinheit @@ -5614,287 +3362,168 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - - Part-DB1\src\Form\Part\PartBaseType.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:210 - part.edit.comment Notizen - - Part-DB1\src\Form\Part\PartBaseType.php:250 - Part-DB1\src\Form\Part\PartBaseType.php:246 - part.edit.master_attachment Vorschaubild - - Part-DB1\src\Form\Part\PartBaseType.php:295 - Part-DB1\src\Form\Part\PartBaseType.php:276 - src\Form\PartType.php:91 - part.edit.save Änderungen übernehmen - - Part-DB1\src\Form\Part\PartBaseType.php:296 - Part-DB1\src\Form\Part\PartBaseType.php:277 - src\Form\PartType.php:92 - part.edit.reset Änderungen verwerfen - - Part-DB1\src\Form\Part\PartBaseType.php:105 - Part-DB1\src\Form\Part\PartBaseType.php:103 - part.edit.name.placeholder z.B. BC547 - - Part-DB1\src\Form\Part\PartBaseType.php:115 - Part-DB1\src\Form\Part\PartBaseType.php:113 - part.edit.description.placeholder z.B. NPN 45V 0,1A 0,5W - - Part-DB1\src\Form\Part\PartBaseType.php:123 - Part-DB1\src\Form\Part\PartBaseType.php:121 - part.editmininstock.placeholder z.B. 1 - - Part-DB1\src\Form\Part\PartLotType.php:69 - Part-DB1\src\Form\Part\PartLotType.php:69 - part_lot.edit.description Beschreibung - - Part-DB1\src\Form\Part\PartLotType.php:78 - Part-DB1\src\Form\Part\PartLotType.php:78 - part_lot.edit.location Lagerort - - Part-DB1\src\Form\Part\PartLotType.php:89 - Part-DB1\src\Form\Part\PartLotType.php:89 - part_lot.edit.amount Menge - - Part-DB1\src\Form\Part\PartLotType.php:98 - Part-DB1\src\Form\Part\PartLotType.php:97 - part_lot.edit.instock_unknown Menge unbekannt - - Part-DB1\src\Form\Part\PartLotType.php:109 - Part-DB1\src\Form\Part\PartLotType.php:108 - part_lot.edit.needs_refill Muss aufgefüllt werden - - Part-DB1\src\Form\Part\PartLotType.php:120 - Part-DB1\src\Form\Part\PartLotType.php:119 - part_lot.edit.expiration_date Ablaufdatum - - Part-DB1\src\Form\Part\PartLotType.php:128 - Part-DB1\src\Form\Part\PartLotType.php:125 - part_lot.edit.comment Notiz - - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - perm.group.other Verschiedene - - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - tfa_google.enable Authenticator App aktivieren - - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - tfa_google.disable Authenticator App deaktivieren - - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - google_confirmation Bestätigungscode - - Part-DB1\src\Form\UserSettingsType.php:108 - Part-DB1\src\Form\UserSettingsType.php:108 - src\Form\UserSettingsType.php:46 - user.timezone.label Zeitzone - - Part-DB1\src\Form\UserSettingsType.php:133 - Part-DB1\src\Form\UserSettingsType.php:132 - user.currency.label Bevorzugte Währung - - Part-DB1\src\Form\UserSettingsType.php:140 - Part-DB1\src\Form\UserSettingsType.php:139 - src\Form\UserSettingsType.php:53 - save Änderungen übernehmen - - Part-DB1\src\Form\UserSettingsType.php:141 - Part-DB1\src\Form\UserSettingsType.php:140 - src\Form\UserSettingsType.php:54 - reset Änderungen verwerfen - - Part-DB1\src\Form\UserSettingsType.php:104 - Part-DB1\src\Form\UserSettingsType.php:104 - src\Form\UserSettingsType.php:45 - user_settings.language.placeholder Serverweite Sprache - - Part-DB1\src\Form\UserSettingsType.php:115 - Part-DB1\src\Form\UserSettingsType.php:115 - src\Form\UserSettingsType.php:48 - user_settings.timezone.placeholder Serverweite Zeitzone - - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - attachment.label Dateianhang - - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - attachment_type.label Anhangstyp - - Part-DB1\src\Services\ElementTypeNameGenerator.php:82 - Part-DB1\src\Services\ElementTypeNameGenerator.php:82 - project.label Projekt - - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - measurement_unit.label Maßeinheit @@ -5907,58 +3536,36 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - currency.label Währung - - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - orderdetail.label Bestellinformation - - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - pricedetail.label Preisinformation - - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - user.label Benutzer - - Part-DB1\src\Services\ElementTypeNameGenerator.php:95 - parameter.label Parameter - - Part-DB1\src\Services\ElementTypeNameGenerator.php:96 - label_profile.label Labelprofil @@ -5966,8 +3573,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:176 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:161 new @@ -5976,174 +3581,102 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - - Part-DB1\src\Services\MarkdownParser.php:73 - Part-DB1\src\Services\MarkdownParser.php:73 - markdown.loading Lade Markdown. Wenn diese längere Zeit bestehen bleibt, versuchen sie die Website erneut zu laden! - - Part-DB1\src\Services\PasswordResetManager.php:98 - Part-DB1\src\Services\PasswordResetManager.php:98 - pw_reset.email.subject Passwort-Reset für Ihren Part-DB-Account - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - tree.tools.tools Tools - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:107 - src\Services\ToolsTreeBuilder.php:74 - tree.tools.edit Bearbeiten - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:110 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - src\Services\ToolsTreeBuilder.php:81 - tree.tools.show Zeige - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:111 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - tree.tools.system System - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:123 - tree.tools.tools.label_dialog Labeldialog - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:130 - tree.tools.tools.label_scanner Labelscanner - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:149 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:126 - src\Services\ToolsTreeBuilder.php:62 - tree.tools.edit.attachment_types [[Attachment_type]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:155 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:132 - src\Services\ToolsTreeBuilder.php:64 - tree.tools.edit.categories [[Category]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:161 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:138 - src\Services\ToolsTreeBuilder.php:66 - tree.tools.edit.projects [[Project]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:167 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:144 - src\Services\ToolsTreeBuilder.php:68 - tree.tools.edit.suppliers [[Supplier]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:173 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:150 - src\Services\ToolsTreeBuilder.php:70 - tree.tools.edit.manufacturer [[Manufacturer]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:179 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:156 - tree.tools.edit.storelocation [[Storage_location]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:185 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:162 - tree.tools.edit.footprint [[Footprint]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:191 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:168 - tree.tools.edit.currency [[Currency]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:174 - tree.tools.edit.measurement_unit [[Measurement_unit]] @@ -6156,40 +3689,24 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.edit.label_profile [[Label_profile]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:209 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:180 - tree.tools.edit.part Neues [Part] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:226 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - src\Services\ToolsTreeBuilder.php:77 - tree.tools.show.all_parts Alle Teile - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:232 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.show.all_attachments Dateianhänge @@ -6197,8 +3714,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:239 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:210 new @@ -6207,20 +3722,12 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:258 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:229 - tree.tools.system.users [[User]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:264 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:235 - tree.tools.system.groups [[Group]] @@ -6228,8 +3735,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:271 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:242 new @@ -6238,11 +3743,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - src\Services\TreeBuilder.php:124 - entity.tree.new Neues Element @@ -6250,7 +3750,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 obsolete @@ -6260,8 +3759,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\templates\_navbar.html.twig:27 - templates\base.html.twig:88 obsolete @@ -6271,8 +3768,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Form\UserSettingsType.php:119 - src\Form\UserSettingsType.php:49 obsolete @@ -6282,8 +3777,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Form\UserSettingsType.php:129 - src\Form\UserSettingsType.php:50 obsolete @@ -6293,7 +3786,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:100 new obsolete @@ -6304,10 +3796,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:128 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:150 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:169 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:207 new obsolete @@ -6318,10 +3806,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:130 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:152 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:171 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:209 new obsolete @@ -6332,7 +3816,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:139 new obsolete @@ -6343,7 +3826,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:160 new obsolete @@ -6354,7 +3836,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:184 new obsolete @@ -6365,7 +3846,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:198 new obsolete @@ -6376,7 +3856,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:214 new obsolete @@ -6387,7 +3866,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - templates\base.html.twig:81 obsolete obsolete @@ -6398,7 +3876,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - templates\base.html.twig:109 obsolete obsolete @@ -6409,7 +3886,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - templates\base.html.twig:112 obsolete obsolete @@ -6700,7 +4176,6 @@ Wenn Sie dies fehlerhafterweise gemacht haben oder ein Computer nicht mehr vertr - src\Form\PartType.php:63 obsolete obsolete @@ -7376,7 +4851,6 @@ Element 1 -> Element 1.2 - templates\Parts\show_part_info.html.twig:194 obsolete obsolete @@ -7387,7 +4861,6 @@ Element 1 -> Element 1.2 - src\Form\PartType.php:83 obsolete obsolete @@ -14927,4 +12400,4 @@ Buerklin-API-Authentication-Server: - + \ No newline at end of file diff --git a/translations/messages.el.xlf b/translations/messages.el.xlf index 5ce8f565..f93ec99f 100644 --- a/translations/messages.el.xlf +++ b/translations/messages.el.xlf @@ -2,317 +2,156 @@ - - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - attachment_type.caption τύπος επισυναπτόμενου αρχείου - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - templates\AdminPages\CategoryAdmin.html.twig:4 - templates\base.html.twig:163 - templates\base.html.twig:170 - templates\base.html.twig:197 - templates\base.html.twig:225 - category.labelp κατηγορίες - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:19 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:11 - templates\AdminPages\CategoryAdmin.html.twig:8 - admin.options Επιλογές - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - templates\AdminPages\CategoryAdmin.html.twig:9 - admin.advanced Προχωρημένες - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - currency.caption Νόμισμα - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - currency.iso_code.caption Κωδικός ISO - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - currency.symbol.caption Σύμβολο Νομίσματος - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Αναζήτηση - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - templates\AdminPages\EntityAdminBase.html.twig:13 - templates\base.html.twig:166 - templates\base.html.twig:193 - templates\base.html.twig:221 - expandAll Επεκτείνετε όλα - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - templates\AdminPages\EntityAdminBase.html.twig:17 - templates\base.html.twig:167 - templates\base.html.twig:194 - templates\base.html.twig:222 - reduceAll Αναδίπλωση όλων - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - templates\AdminPages\EntityAdminBase.html.twig:42 - standard.label Ιδιότητες - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - templates\AdminPages\EntityAdminBase.html.twig:43 - infos.label Πληροφορίες - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - templates\AdminPages\EntityAdminBase.html.twig:45 - export.label Εξαγωγή - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - templates\AdminPages\EntityAdminBase.html.twig:47 - import_export.label Εισαγωγή / Εξαγωγή - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - mass_creation.label Μαζική δημιουργία - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - templates\AdminPages\EntityAdminBase.html.twig:59 - admin.common Κοινός - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - admin.attachments Συνημμένα - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:179 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:167 - templates\AdminPages\EntityAdminBase.html.twig:142 - export_all.label Εξαγωγή όλων των στοιχείων - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:185 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:173 - mass_creation.help Κάθε γραμμή θα ερμηνευτεί ως όνομα ενός στοιχείου, το οποίο θα δημιουργηθεί - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - templates\AdminPages\EntityAdminBase.html.twig:35 - edit.caption Επεξεργασία στοιχείου "%name" - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - templates\AdminPages\EntityAdminBase.html.twig:37 - new.caption Νέο στοιχείο - - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - templates\base.html.twig:172 - templates\base.html.twig:199 - templates\base.html.twig:227 - footprint.labelp Footprints - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - group.edit.caption Ομάδες - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - user.edit.permissions Δικαιώματα - - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - templates\AdminPages\ManufacturerAdmin.html.twig:4 - manufacturer.caption Κατασκευαστές - - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - measurement_unit.caption Μονάδα μέτρησης @@ -325,135 +164,72 @@ - - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:5 - Part-DB1\templates\_sidebar.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:8 - templates\base.html.twig:171 - templates\base.html.twig:198 - templates\base.html.twig:226 - storelocation.labelp Χώροι αποθήκευσης - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - user.edit.caption Χρήστες - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - user.edit.configuration Παραμετροποίηση - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - user.edit.password Κωδικός - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - user.edit.tfa.caption Έλεγχος ταυτότητας δύο παραγόντων - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - user.edit.tfa.google_active Εφαρμογή επαλήθευσης είναι ενεργή - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - tfa_backup.remaining_tokens Υπόλοιποι εφεδρικοί κωδικοί υπολογίζονται - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - tfa_backup.generation_date Ημερομηνία παραγωγής των εφεδρικών κωδικών - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - user.edit.tfa.disabled Η μέθοδος δεν είναι ενεργοποιημένη - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - user.edit.tfa.u2f_keys_count Ενεργά κλειδιά ασφαλείας - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_title Θέλετε πραγματικά να προχωρήσετε; - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_message Αυτό θα απενεργοποιήσει <b> όλες τις ενεργές μεθόδους πολλαπλής ταυτοποίησης του χρήστη </b> και θα διαγράψει τους <b> εφεδρικούς κώδικούς </ b>! @@ -463,139 +239,66 @@ - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - user.edit.tfa.disable_tfa.btn Απενεργοποίηση της πολλαπλής μεθόδου τατυτοποίησης - - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:63 - attachment.delete Διαγραφή - - Part-DB1\templates\AdminPages\_attachments.html.twig:41 - Part-DB1\templates\Parts\edit\_attachments.html.twig:38 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:35 - Part-DB1\src\DataTables\AttachmentDataTable.php:159 - Part-DB1\templates\Parts\edit\_attachments.html.twig:38 - Part-DB1\src\DataTables\AttachmentDataTable.php:159 - attachment.external Εξωτερικός - - Part-DB1\templates\AdminPages\_attachments.html.twig:49 - Part-DB1\templates\Parts\edit\_attachments.html.twig:47 - Part-DB1\templates\AdminPages\_attachments.html.twig:47 - Part-DB1\templates\Parts\edit\_attachments.html.twig:45 - attachment.preview.alt Επισύναψη μικρογραφίας - - Part-DB1\templates\AdminPages\_attachments.html.twig:52 - Part-DB1\templates\Parts\edit\_attachments.html.twig:50 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 - Part-DB1\templates\AdminPages\_attachments.html.twig:50 - Part-DB1\templates\Parts\edit\_attachments.html.twig:48 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:45 - attachment.view Προβολή - - Part-DB1\templates\AdminPages\_attachments.html.twig:58 - Part-DB1\templates\Parts\edit\_attachments.html.twig:56 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:43 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - Part-DB1\templates\AdminPages\_attachments.html.twig:56 - Part-DB1\templates\Parts\edit\_attachments.html.twig:54 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:38 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - attachment.file_not_found Το αρχείο δεν βρέθηκε - - Part-DB1\templates\AdminPages\_attachments.html.twig:66 - Part-DB1\templates\Parts\edit\_attachments.html.twig:64 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:48 - Part-DB1\templates\Parts\edit\_attachments.html.twig:62 - attachment.secure Προσωπικό συνημμένο - - Part-DB1\templates\AdminPages\_attachments.html.twig:79 - Part-DB1\templates\Parts\edit\_attachments.html.twig:77 - Part-DB1\templates\AdminPages\_attachments.html.twig:77 - Part-DB1\templates\Parts\edit\_attachments.html.twig:75 - attachment.create Προσθήκη συννημένου - - Part-DB1\templates\AdminPages\_attachments.html.twig:84 - Part-DB1\templates\Parts\edit\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - Part-DB1\templates\AdminPages\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_attachments.html.twig:80 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - part_lot.edit.delete.confirm Θέλετε πραγματικά να διαγράψετε αυτό το απόθεμα; Αυτό δεν μπορεί να αναιρεθεί! - - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - templates\AdminPages\_delete_form.html.twig:2 - entity.delete.confirm_title Θέλετε πραγματικά να διαγράψετε %name%; - - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - templates\AdminPages\_delete_form.html.twig:3 - entity.delete.message Αυτό δεν μπορεί να αναιρεθεί! @@ -604,887 +307,474 @@ - - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - templates\AdminPages\_delete_form.html.twig:9 - entity.delete Διαγραφή στοιχείου - - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - templates\AdminPages\_delete_form.html.twig:12 - entity.delete.recursive Διαγραφή αναδρομικών (όλα τα υποστοιχεία) - - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - templates\AdminPages\_export_form.html.twig:4 - src\Form\ImportType.php:67 - export.format Μορφή αρχείου - - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - templates\AdminPages\_export_form.html.twig:19 - export.level.simple Απλός - - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - templates\AdminPages\_export_form.html.twig:20 - export.level.extended Επεκτάθηκε - - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - templates\AdminPages\_export_form.html.twig:21 - export.level.full Γεμάτος - - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - templates\AdminPages\_export_form.html.twig:31 - export.include_children Συμπεριλαβάνονται τα υποστοιχεία στην εξαγωγή - - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - templates\AdminPages\_export_form.html.twig:39 - export.btn Εξαγωγή - - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - templates\AdminPages\EntityAdminBase.html.twig:94 - templates\Parts\edit_part_info.html.twig:12 - templates\Parts\show_part_info.html.twig:11 - id.label Ταυτότητα - - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:76 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:77 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:77 - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:59 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:60 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:53 - templates\AdminPages\EntityAdminBase.html.twig:101 - templates\Parts\show_part_info.html.twig:248 - createdAt Δημιουργήθηκε στο - - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:73 - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:49 - templates\AdminPages\EntityAdminBase.html.twig:114 - templates\Parts\show_part_info.html.twig:263 - lastModified Τελευταία τροποποίηση - - Part-DB1\templates\AdminPages\_info.html.twig:38 - Part-DB1\templates\AdminPages\_info.html.twig:38 - entity.info.parts_count Αριθμός ανατλλακτικών με αυτό το στοιχείο - - Part-DB1\templates\attachment_list.html.twig:3 - Part-DB1\templates\attachment_list.html.twig:3 - attachment.list.title Λίστα συνημμένων - - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - part_list.loading.caption Φόρτωση - - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - part_list.loading.message Αυτό μπορεί να διαρκέσει λίγο. Εάν αυτό το μήνυμα δεν εξαφανιστεί, δοκιμάστε να φορτώσετε ξανά τη σελίδα. - - Part-DB1\templates\base.html.twig:68 - Part-DB1\templates\base.html.twig:68 - templates\base.html.twig:246 - vendor.base.javascript_hint Παρακαλούμε ενεργοποιήστε το Javascript για να χρησιμοποιήσετε όλες τις δυνατότητες! - - Part-DB1\templates\base.html.twig:73 - Part-DB1\templates\base.html.twig:73 - sidebar.big.toggle Εμφάνιση / Απόκρυψη της πλευρικής μπάρας - - Part-DB1\templates\base.html.twig:95 - Part-DB1\templates\base.html.twig:95 - templates\base.html.twig:271 - loading.caption Φόρτωση: - - Part-DB1\templates\base.html.twig:96 - Part-DB1\templates\base.html.twig:96 - templates\base.html.twig:272 - loading.message Αυτό μπορεί να διαρκέσει λίγο. Αν αυτά τα μηνύματα παραμείνουν για μεγάλο χρονικό διάστημα, δοκιμάστε να φορτώσετε ξανά τη σελίδα. - - Part-DB1\templates\base.html.twig:101 - Part-DB1\templates\base.html.twig:101 - templates\base.html.twig:277 - loading.bar Φορτώνει... - - Part-DB1\templates\base.html.twig:112 - Part-DB1\templates\base.html.twig:112 - templates\base.html.twig:288 - back_to_top Επιστροφή στην κορυφή της σελίδας - - Part-DB1\templates\Form\permissionLayout.html.twig:35 - Part-DB1\templates\Form\permissionLayout.html.twig:35 - permission.edit.permission Δικαιώματα - - Part-DB1\templates\Form\permissionLayout.html.twig:36 - Part-DB1\templates\Form\permissionLayout.html.twig:36 - permission.edit.value Τιμή - - Part-DB1\templates\Form\permissionLayout.html.twig:53 - Part-DB1\templates\Form\permissionLayout.html.twig:53 - permission.legend.title Επεξήγηση των καταστάσεων: - - Part-DB1\templates\Form\permissionLayout.html.twig:57 - Part-DB1\templates\Form\permissionLayout.html.twig:57 - permission.legend.disallow Απαγορευμένος - - Part-DB1\templates\Form\permissionLayout.html.twig:61 - Part-DB1\templates\Form\permissionLayout.html.twig:61 - permission.legend.allow Επιτρέπεται - - Part-DB1\templates\Form\permissionLayout.html.twig:65 - Part-DB1\templates\Form\permissionLayout.html.twig:65 - permission.legend.inherit Καθορισμός δικαιωμάτων από την ομάδα (μητρική) - - Part-DB1\templates\helper.twig:3 - Part-DB1\templates\helper.twig:3 - bool.true Αληθής - - Part-DB1\templates\helper.twig:5 - Part-DB1\templates\helper.twig:5 - bool.false Ψευδής - - Part-DB1\templates\helper.twig:92 - Part-DB1\templates\helper.twig:87 - Yes Ναι - - Part-DB1\templates\helper.twig:94 - Part-DB1\templates\helper.twig:89 - No Όχι - - Part-DB1\templates\homepage.html.twig:22 - Part-DB1\templates\homepage.html.twig:22 - templates\homepage.html.twig:19 - homepage.license Πληροφορίες σχετικά με τις άδειες - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.caption Σελίδα έργου - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.text Οι λήψεις, οι αναφορές σφαλμάτων, η λίστα εργασιών, κ.λπ. μπορούν να βρεθούν <a href="%href%" class="link-external" target="_blank">GitHub σελίδα έργου</a> - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - attachment.file_size Μέγεθος αρχείου - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:67 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:50 - attachment.download Κατεβάστε - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Unknown Άγνωστο - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - part.isFavorite Αγαπημένα - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - part.minOrderAmount Ελάχιστο ποσό παραγγελίας - - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:46 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:41 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - templates\base.html.twig:70 - templates\Parts\show_part_info.html.twig:24 - src\Form\PartType.php:80 - manufacturer.label Κατασκευαστής - - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:19 - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:18 - templates\base.html.twig:58 - templates\Parts\show_part_info.html.twig:31 - src\Form\PartType.php:65 - description.label Περιγραφή - - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:15 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:14 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - templates\base.html.twig:56 - templates\Parts\show_part_info.html.twig:32 - src\Form\PartType.php:74 - category.label Κατηγορία - - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - templates\Parts\show_part_info.html.twig:42 - src\Form\PartType.php:69 - instock.label Σε απόθεμα - - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - templates\Parts\show_part_info.html.twig:44 - src\Form\PartType.php:72 - mininstock.label Ελάχιστη τιμή αποθέματος - - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:52 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:47 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - templates\base.html.twig:73 - templates\Parts\show_part_info.html.twig:47 - footprint.label Footprint - - Part-DB1\templates\Parts\info\_main_infos.html.twig:56 - Part-DB1\templates\Parts\info\_main_infos.html.twig:59 - Part-DB1\templates\Parts\info\_main_infos.html.twig:57 - Part-DB1\templates\Parts\info\_main_infos.html.twig:60 - templates\Parts\show_part_info.html.twig:51 - part.avg_price.label Μεση τιμή - - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - part.supplier.name Όνομα - - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - part.order.minamount Ελάχιστο ποσό - - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - part.order.price Τιμή - - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - part.order.single_price Τιμή μονάδας - - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - Part-DB1\templates\Parts\info\_part_lots.html.twig:6 - part_lots.description Περιγραφή - - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - part_lots.storage_location Τοποθεσία αποθήκευσης - - Part-DB1\templates\Parts\info\_part_lots.html.twig:9 - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - part_lots.amount Ποσό - - Part-DB1\templates\Parts\info\_part_lots.html.twig:24 - Part-DB1\templates\Parts\info\_part_lots.html.twig:22 - part_lots.location_unknown Άγνωστη θέση αποθήκευσης - - Part-DB1\templates\Parts\info\_part_lots.html.twig:31 - Part-DB1\templates\Parts\info\_part_lots.html.twig:29 - part_lots.instock_unknown Άγνωστό ποσό - - Part-DB1\templates\Parts\info\_part_lots.html.twig:40 - Part-DB1\templates\Parts\info\_part_lots.html.twig:38 - part_lots.expiration_date Ημερομηνία λήξης - - Part-DB1\templates\Parts\info\_part_lots.html.twig:48 - Part-DB1\templates\Parts\info\_part_lots.html.twig:46 - part_lots.is_expired Έχει λήξει - - Part-DB1\templates\Parts\info\_part_lots.html.twig:55 - Part-DB1\templates\Parts\info\_part_lots.html.twig:53 - part_lots.need_refill Ανάγκη για νέα παραγγελία - - Part-DB1\templates\Parts\info\_picture.html.twig:15 - Part-DB1\templates\Parts\info\_picture.html.twig:15 - part.info.prev_picture Προηγούμενη εικόνα - - Part-DB1\templates\Parts\info\_picture.html.twig:19 - Part-DB1\templates\Parts\info\_picture.html.twig:19 - part.info.next_picture Επόμενη εικόνα - - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - part.mass.tooltip Σύνολο - - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - part.needs_review.badge Xρειάζεται επανεξέταση - - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - part.favorite.badge Αγαπημένα - - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - part.obsolete.badge Δεν είναι πλέον διαθέσιμο - - Part-DB1\templates\Parts\info\_tools.html.twig:6 - Part-DB1\templates\Parts\info\_tools.html.twig:4 - templates\Parts\show_part_info.html.twig:125 - part.edit.btn Επεξεργασία εξαρτήματος - - Part-DB1\templates\Parts\info\_tools.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:14 - templates\Parts\show_part_info.html.twig:135 - part.clone.btn Κλωνοποίηση Εξαρτήματος - - Part-DB1\templates\Parts\info\_tools.html.twig:24 - Part-DB1\templates\Parts\lists\_action_bar.html.twig:4 - templates\Parts\show_part_info.html.twig:143 - part.create.btn Δημιουργία νέου εξαρτήματος - - Part-DB1\templates\Parts\info\_tools.html.twig:31 - Part-DB1\templates\Parts\info\_tools.html.twig:29 - part.delete.confirm_title Θέλετε πραγματικά να διαγράψετε αυτό το εξάρτημα; - - Part-DB1\templates\Parts\info\_tools.html.twig:32 - Part-DB1\templates\Parts\info\_tools.html.twig:30 - part.delete.message Αυτό το εξάρτημα και και κάθε σχετική πληροφορία (όπως συνημμένα, πληροφορίες σχετικά με τις τιμές κ.λπ.) θα διαγραφούν. Χωρις να υπάρχει η δυνατότητα σε αυτη την ενεργεια να αναίρεθεί! - - Part-DB1\templates\Parts\info\_tools.html.twig:39 - Part-DB1\templates\Parts\info\_tools.html.twig:37 - part.delete Διαγραφή εξαρτήματος - - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - parts_list.all.title Όλα τα εξαρτήματα - - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - parts_list.category.title Εξαρτήματα ανα κατηγορία - - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - parts_list.footprint.title Εξαρτήματα ανα footprint - - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - parts_list.manufacturer.title Εξαρτήματα ανα κατασκευαστή - - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - parts_list.search.title Αναζήτηση εξαρτημάτων - - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - parts_list.storelocation.title Εξαρτήματα ανα τοποθεσία αποθήκευσης - - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - parts_list.supplier.title Εξαρτήματα ανα προμηθευτή - - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - parts_list.tags.title Εξαρτήματα ανα ετικέτα - - Part-DB1\templates\Parts\lists\_info_card.html.twig:22 - Part-DB1\templates\Parts\lists\_info_card.html.twig:17 - entity.info.common.tab Συνηθισμένος @@ -1492,7 +782,6 @@ - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 obsolete @@ -1648,4 +937,4 @@ - + \ No newline at end of file diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 483a6c88..5692ed25 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -2,11 +2,6 @@ - - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - attachment_type.caption File types for attachments @@ -14,7 +9,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:12 new @@ -24,7 +18,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:16 new @@ -33,45 +26,18 @@ - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - templates\AdminPages\CategoryAdmin.html.twig:4 - templates\base.html.twig:163 - templates\base.html.twig:170 - templates\base.html.twig:197 - templates\base.html.twig:225 - category.labelp Categories - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:19 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:11 - templates\AdminPages\CategoryAdmin.html.twig:8 - admin.options Options - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - templates\AdminPages\CategoryAdmin.html.twig:9 - admin.advanced Advanced @@ -79,7 +45,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:13 new @@ -89,7 +54,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:17 new @@ -98,20 +62,12 @@ - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - currency.iso_code.caption ISO code - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - currency.symbol.caption Currency symbol @@ -119,7 +75,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:29 new @@ -129,7 +84,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:33 new @@ -139,7 +93,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:8 new @@ -149,7 +102,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:12 new @@ -158,89 +110,36 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Search - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - templates\AdminPages\EntityAdminBase.html.twig:13 - templates\base.html.twig:166 - templates\base.html.twig:193 - templates\base.html.twig:221 - expandAll Expand All - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - templates\AdminPages\EntityAdminBase.html.twig:17 - templates\base.html.twig:167 - templates\base.html.twig:194 - templates\base.html.twig:222 - reduceAll Reduce All - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - part.info.timetravel_hint This is how the part appeared before %timestamp%. <i>Please note that this feature is experimental, so the info may not be correct.</i> - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - templates\AdminPages\EntityAdminBase.html.twig:42 - standard.label Properties - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - templates\AdminPages\EntityAdminBase.html.twig:43 - infos.label Info @@ -248,8 +147,6 @@ - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 new @@ -258,120 +155,66 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - templates\AdminPages\EntityAdminBase.html.twig:45 - export.label Export - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - templates\AdminPages\EntityAdminBase.html.twig:47 - import_export.label Import / Export - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - mass_creation.label Mass creation - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - templates\AdminPages\EntityAdminBase.html.twig:59 - admin.common Common - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - admin.attachments Attachments - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:90 - admin.parameters Parameters - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:179 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:167 - templates\AdminPages\EntityAdminBase.html.twig:142 - export_all.label Export all elements - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:185 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:173 - mass_creation.help Each line will be interpreted as a name of an element, which will be created. You can create nested structures by indentations. - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - templates\AdminPages\EntityAdminBase.html.twig:35 - edit.caption Edit element "%name" - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - templates\AdminPages\EntityAdminBase.html.twig:37 - new.caption New element - - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - templates\base.html.twig:172 - templates\base.html.twig:199 - templates\base.html.twig:227 - footprint.labelp Footprints @@ -379,7 +222,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:13 new @@ -389,7 +231,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:17 new @@ -398,12 +239,6 @@ - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - user.edit.permissions Permissions @@ -411,7 +246,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:24 new @@ -421,7 +255,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:28 new @@ -430,18 +263,12 @@ - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:8 - label_profile.advanced Advanced - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:9 - label_profile.comment Notes @@ -449,7 +276,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:55 new @@ -459,7 +285,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:59 new @@ -469,7 +294,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:8 new @@ -479,7 +303,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:12 new @@ -488,15 +311,6 @@ - - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:5 - Part-DB1\templates\_sidebar.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:8 - templates\base.html.twig:171 - templates\base.html.twig:198 - templates\base.html.twig:226 - storelocation.labelp Storage locations @@ -504,7 +318,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:32 new @@ -514,7 +327,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:36 new @@ -524,7 +336,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:16 new @@ -534,7 +345,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:20 new @@ -543,110 +353,60 @@ - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - user.edit.configuration Configuration - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - user.edit.password Password - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - user.edit.tfa.caption Two-factor authentication - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - user.edit.tfa.google_active Authenticator app active - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - tfa_backup.remaining_tokens Remaining backup codes count - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - tfa_backup.generation_date Generation date of the backup codes - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - user.edit.tfa.disabled Method not enabled - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - user.edit.tfa.u2f_keys_count Active security keys - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_title Do you really want to proceed? - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_message This will disable <b>all active two-factor authentication methods of the user</b> and delete the <b>backup codes</b>! @@ -656,10 +416,6 @@ The user will have to set up all two-factor authentication methods again and pri - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - user.edit.tfa.disable_tfa.btn Disable all two-factor authentication methods @@ -667,7 +423,6 @@ The user will have to set up all two-factor authentication methods again and pri - Part-DB1\templates\AdminPages\UserAdmin.html.twig:85 new @@ -677,7 +432,6 @@ The user will have to set up all two-factor authentication methods again and pri - Part-DB1\templates\AdminPages\UserAdmin.html.twig:89 new @@ -686,13 +440,6 @@ The user will have to set up all two-factor authentication methods again and pri - - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:63 - attachment.delete Delete @@ -705,102 +452,48 @@ The user will have to set up all two-factor authentication methods again and pri - - Part-DB1\templates\AdminPages\_attachments.html.twig:49 - Part-DB1\templates\Parts\edit\_attachments.html.twig:47 - Part-DB1\templates\AdminPages\_attachments.html.twig:47 - Part-DB1\templates\Parts\edit\_attachments.html.twig:45 - attachment.preview.alt Attachment thumbnail - - Part-DB1\templates\AdminPages\_attachments.html.twig:52 - Part-DB1\templates\Parts\edit\_attachments.html.twig:50 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 - Part-DB1\templates\AdminPages\_attachments.html.twig:50 - Part-DB1\templates\Parts\edit\_attachments.html.twig:48 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:45 - attachment.view_local View Local Copy - - Part-DB1\templates\AdminPages\_attachments.html.twig:58 - Part-DB1\templates\Parts\edit\_attachments.html.twig:56 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:43 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - Part-DB1\templates\AdminPages\_attachments.html.twig:56 - Part-DB1\templates\Parts\edit\_attachments.html.twig:54 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:38 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - attachment.file_not_found File not found - - Part-DB1\templates\AdminPages\_attachments.html.twig:66 - Part-DB1\templates\Parts\edit\_attachments.html.twig:64 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:48 - Part-DB1\templates\Parts\edit\_attachments.html.twig:62 - attachment.secure Private attachment - - Part-DB1\templates\AdminPages\_attachments.html.twig:79 - Part-DB1\templates\Parts\edit\_attachments.html.twig:77 - Part-DB1\templates\AdminPages\_attachments.html.twig:77 - Part-DB1\templates\Parts\edit\_attachments.html.twig:75 - attachment.create Add attachment - - Part-DB1\templates\AdminPages\_attachments.html.twig:84 - Part-DB1\templates\Parts\edit\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - Part-DB1\templates\AdminPages\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_attachments.html.twig:80 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - part_lot.edit.delete.confirm Do you really want to delete this stock? This can not be undone! - - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - templates\AdminPages\_delete_form.html.twig:2 - entity.delete.confirm_title You really want to delete %name%? - - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - templates\AdminPages\_delete_form.html.twig:3 - entity.delete.message This can not be undone! @@ -809,11 +502,6 @@ Sub elements will be moved upwards. - - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - templates\AdminPages\_delete_form.html.twig:9 - entity.delete Delete element @@ -821,12 +509,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:45 - Part-DB1\src\Form\Part\PartBaseType.php:286 - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:43 - Part-DB1\src\Form\Part\PartBaseType.php:267 new @@ -835,561 +517,300 @@ Sub elements will be moved upwards. - - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - templates\AdminPages\_delete_form.html.twig:12 - entity.delete.recursive Delete recursive (all sub elements) - - Part-DB1\templates\AdminPages\_duplicate.html.twig:3 - entity.duplicate Duplicate element - - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - templates\AdminPages\_export_form.html.twig:4 - src\Form\ImportType.php:67 - export.format File format - - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - templates\AdminPages\_export_form.html.twig:16 - export.level Verbosity level - - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - templates\AdminPages\_export_form.html.twig:19 - export.level.simple Simple - - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - templates\AdminPages\_export_form.html.twig:20 - export.level.extended Extended - - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - templates\AdminPages\_export_form.html.twig:21 - export.level.full Full - - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - templates\AdminPages\_export_form.html.twig:31 - export.include_children Include children elements in export - - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - templates\AdminPages\_export_form.html.twig:39 - export.btn Export - - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - templates\AdminPages\EntityAdminBase.html.twig:94 - templates\Parts\edit_part_info.html.twig:12 - templates\Parts\show_part_info.html.twig:11 - id.label ID - - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:76 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:77 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:77 - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:59 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:60 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:53 - templates\AdminPages\EntityAdminBase.html.twig:101 - templates\Parts\show_part_info.html.twig:248 - createdAt Created At - - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:73 - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:49 - templates\AdminPages\EntityAdminBase.html.twig:114 - templates\Parts\show_part_info.html.twig:263 - lastModified Last modified - - Part-DB1\templates\AdminPages\_info.html.twig:38 - Part-DB1\templates\AdminPages\_info.html.twig:38 - entity.info.parts_count Number of [[part]] with this element - - Part-DB1\templates\AdminPages\_parameters.html.twig:6 - Part-DB1\templates\helper.twig:125 - Part-DB1\templates\Parts\edit\_specifications.html.twig:6 - specifications.property Parameter - - Part-DB1\templates\AdminPages\_parameters.html.twig:7 - Part-DB1\templates\Parts\edit\_specifications.html.twig:7 - specifications.symbol Symbol - - Part-DB1\templates\AdminPages\_parameters.html.twig:8 - Part-DB1\templates\Parts\edit\_specifications.html.twig:8 - specifications.value_min Min. - - Part-DB1\templates\AdminPages\_parameters.html.twig:9 - Part-DB1\templates\Parts\edit\_specifications.html.twig:9 - specifications.value_typ Typ. - - Part-DB1\templates\AdminPages\_parameters.html.twig:10 - Part-DB1\templates\Parts\edit\_specifications.html.twig:10 - specifications.value_max Max. - - Part-DB1\templates\AdminPages\_parameters.html.twig:11 - Part-DB1\templates\Parts\edit\_specifications.html.twig:11 - specifications.unit Unit - - Part-DB1\templates\AdminPages\_parameters.html.twig:12 - Part-DB1\templates\Parts\edit\_specifications.html.twig:12 - specifications.text Text - - Part-DB1\templates\AdminPages\_parameters.html.twig:13 - Part-DB1\templates\Parts\edit\_specifications.html.twig:13 - specifications.group Group - - Part-DB1\templates\AdminPages\_parameters.html.twig:26 - Part-DB1\templates\Parts\edit\_specifications.html.twig:26 - specification.create New Parameter - - Part-DB1\templates\AdminPages\_parameters.html.twig:31 - Part-DB1\templates\Parts\edit\_specifications.html.twig:31 - parameter.delete.confirm Do you really want to delete this parameter? - - Part-DB1\templates\attachment_list.html.twig:3 - Part-DB1\templates\attachment_list.html.twig:3 - attachment.list.title Attachments list - - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - part_list.loading.caption Loading - - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - part_list.loading.message This can take a moment. If this message do not disappear, try to reload the page. - - Part-DB1\templates\base.html.twig:68 - Part-DB1\templates\base.html.twig:68 - templates\base.html.twig:246 - vendor.base.javascript_hint Please activate Javascript to use all features! - - Part-DB1\templates\base.html.twig:73 - Part-DB1\templates\base.html.twig:73 - sidebar.big.toggle Show/Hide sidebar - - Part-DB1\templates\base.html.twig:95 - Part-DB1\templates\base.html.twig:95 - templates\base.html.twig:271 - loading.caption Loading: - - Part-DB1\templates\base.html.twig:96 - Part-DB1\templates\base.html.twig:96 - templates\base.html.twig:272 - loading.message This can take a while. If this messages stays for a long time, try to reload the page. - - Part-DB1\templates\base.html.twig:101 - Part-DB1\templates\base.html.twig:101 - templates\base.html.twig:277 - loading.bar Loading... - - Part-DB1\templates\base.html.twig:112 - Part-DB1\templates\base.html.twig:112 - templates\base.html.twig:288 - back_to_top Back to page's top - - Part-DB1\templates\Form\permissionLayout.html.twig:35 - Part-DB1\templates\Form\permissionLayout.html.twig:35 - permission.edit.permission Permissions - - Part-DB1\templates\Form\permissionLayout.html.twig:36 - Part-DB1\templates\Form\permissionLayout.html.twig:36 - permission.edit.value Value - - Part-DB1\templates\Form\permissionLayout.html.twig:53 - Part-DB1\templates\Form\permissionLayout.html.twig:53 - permission.legend.title Explanation of the states - - Part-DB1\templates\Form\permissionLayout.html.twig:57 - Part-DB1\templates\Form\permissionLayout.html.twig:57 - permission.legend.disallow Forbidden - - Part-DB1\templates\Form\permissionLayout.html.twig:61 - Part-DB1\templates\Form\permissionLayout.html.twig:61 - permission.legend.allow Allowed - - Part-DB1\templates\Form\permissionLayout.html.twig:65 - Part-DB1\templates\Form\permissionLayout.html.twig:65 - permission.legend.inherit Inherit from (parent) group - - Part-DB1\templates\helper.twig:3 - Part-DB1\templates\helper.twig:3 - bool.true True - - Part-DB1\templates\helper.twig:5 - Part-DB1\templates\helper.twig:5 - bool.false False - - Part-DB1\templates\helper.twig:92 - Part-DB1\templates\helper.twig:87 - Yes Yes - - Part-DB1\templates\helper.twig:94 - Part-DB1\templates\helper.twig:89 - No No - - Part-DB1\templates\helper.twig:126 - specifications.value Value - - Part-DB1\templates\homepage.html.twig:7 - Part-DB1\templates\homepage.html.twig:7 - templates\homepage.html.twig:7 - version.caption Version - - Part-DB1\templates\homepage.html.twig:22 - Part-DB1\templates\homepage.html.twig:22 - templates\homepage.html.twig:19 - homepage.license License information - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.caption Project page - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.text Source, downloads, bug reports, to-do-list etc. can be found on <a href="%href%" class="link-external" target="_blank">GitHub project page</a> - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.caption Help - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.text Help and tips can be found in Wiki the <a href="%href%" class="link-external" target="_blank">GitHub page</a> - - Part-DB1\templates\homepage.html.twig:33 - Part-DB1\templates\homepage.html.twig:33 - templates\homepage.html.twig:30 - homepage.forum.caption Forum @@ -1397,8 +818,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\homepage.html.twig:45 - Part-DB1\templates\homepage.html.twig:45 new @@ -1407,138 +826,90 @@ Sub elements will be moved upwards. - - Part-DB1\templates\LabelSystem\dialog.html.twig:3 - Part-DB1\templates\LabelSystem\dialog.html.twig:6 - label_generator.title Label generator - - Part-DB1\templates\LabelSystem\dialog.html.twig:16 - label_generator.common Common - - Part-DB1\templates\LabelSystem\dialog.html.twig:20 - label_generator.advanced Advanced - - Part-DB1\templates\LabelSystem\dialog.html.twig:24 - label_generator.profiles Profiles - - Part-DB1\templates\LabelSystem\dialog.html.twig:58 - label_generator.selected_profile Currently selected profile - - Part-DB1\templates\LabelSystem\dialog.html.twig:62 - label_generator.edit_profile Edit profile - - Part-DB1\templates\LabelSystem\dialog.html.twig:75 - label_generator.load_profile Load profile - - Part-DB1\templates\LabelSystem\dialog.html.twig:102 - label_generator.download Download - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:3 - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:5 - label_generator.label_btn Generate label - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:20 - label_generator.label_empty New empty label - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:3 - label_scanner.title Label scanner - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.title No webcam found - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.text You need a webcam and give permission to use the scanner function. You can input the barcode code manually below. - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:27 - label_scanner.source_select Select source - - Part-DB1\templates\LogSystem\log_list.html.twig:3 - Part-DB1\templates\LogSystem\log_list.html.twig:3 - log.list.title System log @@ -1546,8 +917,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\LogSystem\_log_table.html.twig:1 - Part-DB1\templates\LogSystem\_log_table.html.twig:1 new @@ -1557,8 +926,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\LogSystem\_log_table.html.twig:2 - Part-DB1\templates\LogSystem\_log_table.html.twig:2 new @@ -1567,194 +934,114 @@ Sub elements will be moved upwards. - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.email_sent_by This email was sent automatically by - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.dont_reply Do not answer to this email. - - Part-DB1\templates\mail\pw_reset.html.twig:6 - Part-DB1\templates\mail\pw_reset.html.twig:6 - email.hi %name% Hi %name% - - Part-DB1\templates\mail\pw_reset.html.twig:7 - Part-DB1\templates\mail\pw_reset.html.twig:7 - email.pw_reset.message somebody (hopefully you) requested a reset of your password. If this request was not made by you, ignore this mail. - - Part-DB1\templates\mail\pw_reset.html.twig:9 - Part-DB1\templates\mail\pw_reset.html.twig:9 - email.pw_reset.button Click here to reset password - - Part-DB1\templates\mail\pw_reset.html.twig:11 - Part-DB1\templates\mail\pw_reset.html.twig:11 - email.pw_reset.fallback If this does not work for you, go to <a href="%url%">%url%</a> and enter the following info - - Part-DB1\templates\mail\pw_reset.html.twig:16 - Part-DB1\templates\mail\pw_reset.html.twig:16 - email.pw_reset.username Username - - Part-DB1\templates\mail\pw_reset.html.twig:19 - Part-DB1\templates\mail\pw_reset.html.twig:19 - email.pw_reset.token Token - - Part-DB1\templates\mail\pw_reset.html.twig:24 - Part-DB1\templates\mail\pw_reset.html.twig:24 - email.pw_reset.valid_unit %date% The reset token will be valid until <i>%date%</i>. - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:18 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:78 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - orderdetail.delete Delete - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - pricedetails.edit.min_qty Minimum discount quantity - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - pricedetails.edit.price Price - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - pricedetails.edit.price_qty for amount - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - pricedetail.create Add price - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - templates\Parts\edit_part_info.html.twig:4 - part.edit.title Edit [part] - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - templates\Parts\edit_part_info.html.twig:9 - part.edit.card_title Edit [part] - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - part.edit.tab.common Common - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - part.edit.tab.manufacturer Manufacturer - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - part.edit.tab.advanced Advanced @@ -1821,279 +1108,156 @@ Sub elements will be moved upwards. - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - part.edit.tab.part_lots Stocks - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - part.edit.tab.attachments Attachments - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - part.edit.tab.orderdetails Purchase information - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.specifications Parameters - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:64 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.comment Notes - - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - templates\Parts\new_part.html.twig:8 - part.new.card_title Create new [part] - - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - part_lot.delete Delete - - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - part_lot.create Add stock - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - orderdetail.create Add distributor - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - pricedetails.edit.delete.confirm Do you really want to delete this price? This can not be undone. - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:62 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:61 - orderdetails.edit.delete.confirm Do you really want to delete this distributor info? This can not be undone! - - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - templates\Parts\show_part_info.html.twig:4 - templates\Parts\show_part_info.html.twig:9 - part.info.title Detail info for [part] - - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - part.part_lots.label Stocks - - Part-DB1\templates\Parts\info\show_part_info.html.twig:56 - Part-DB1\templates\Parts\lists\_info_card.html.twig:43 - Part-DB1\templates\_navbar_search.html.twig:31 - Part-DB1\templates\_navbar_search.html.twig:26 - templates\base.html.twig:62 - templates\Parts\show_part_info.html.twig:74 - src\Form\PartType.php:86 - comment.label Notes - - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - part.info.specifications Parameters - - Part-DB1\templates\Parts\info\show_part_info.html.twig:74 - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - templates\Parts\show_part_info.html.twig:82 - attachment.labelp Attachments - - Part-DB1\templates\Parts\info\show_part_info.html.twig:83 - Part-DB1\templates\Parts\info\show_part_info.html.twig:71 - templates\Parts\show_part_info.html.twig:88 - vendor.partinfo.shopping_infos Shopping information - - Part-DB1\templates\Parts\info\show_part_info.html.twig:91 - Part-DB1\templates\Parts\info\show_part_info.html.twig:78 - templates\Parts\show_part_info.html.twig:94 - vendor.partinfo.history History - - Part-DB1\templates\Parts\info\show_part_info.html.twig:97 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - Part-DB1\templates\Parts\info\show_part_info.html.twig:84 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - templates\base.html.twig:176 - templates\base.html.twig:203 - templates\base.html.twig:217 - templates\base.html.twig:231 - templates\Parts\show_part_info.html.twig:100 - tools.label Tools - - Part-DB1\templates\Parts\info\show_part_info.html.twig:103 - Part-DB1\templates\Parts\info\show_part_info.html.twig:90 - extended_info.label Extended info - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - attachment.name Name - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - attachment.attachment_type Attachment Type - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - attachment.file_name File name - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - attachment.file_size File size - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:54 - attachment.preview Preview picture - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:67 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:50 - attachment.download_local Download Local Copy @@ -2101,8 +1265,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 new @@ -2111,14 +1273,6 @@ Sub elements will be moved upwards. - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Unknown Unknown @@ -2126,10 +1280,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 new @@ -2139,8 +1289,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 new @@ -2149,49 +1297,24 @@ Sub elements will be moved upwards. - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - part.isFavorite Favorite - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - part.minOrderAmount Minimum order amount - - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:46 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:41 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - templates\base.html.twig:70 - templates\Parts\show_part_info.html.twig:24 - src\Form\PartType.php:80 - manufacturer.label Manufacturer - - Part-DB1\templates\Parts\info\_main_infos.html.twig:24 - Part-DB1\templates\_navbar_search.html.twig:11 - templates\base.html.twig:54 - src\Form\PartType.php:62 - name.label Name @@ -2199,8 +1322,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 new @@ -2209,767 +1330,432 @@ Sub elements will be moved upwards. - - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:19 - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:18 - templates\base.html.twig:58 - templates\Parts\show_part_info.html.twig:31 - src\Form\PartType.php:65 - description.label Description - - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:15 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:14 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - templates\base.html.twig:56 - templates\Parts\show_part_info.html.twig:32 - src\Form\PartType.php:74 - category.label Category - - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - templates\Parts\show_part_info.html.twig:42 - src\Form\PartType.php:69 - instock.label Instock - - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - templates\Parts\show_part_info.html.twig:44 - src\Form\PartType.php:72 - mininstock.label Minimum Instock - - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:52 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:47 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - templates\base.html.twig:73 - templates\Parts\show_part_info.html.twig:47 - footprint.label Footprint - - Part-DB1\templates\Parts\info\_main_infos.html.twig:56 - Part-DB1\templates\Parts\info\_main_infos.html.twig:59 - Part-DB1\templates\Parts\info\_main_infos.html.twig:57 - Part-DB1\templates\Parts\info\_main_infos.html.twig:60 - templates\Parts\show_part_info.html.twig:51 - part.avg_price.label Average Price - - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - part.supplier.name Name - - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - part.supplier.partnr Partnr. - - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - part.order.minamount Minimum amount - - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - part.order.price Price - - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - part.order.single_price Unit Price - - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - Part-DB1\templates\Parts\info\_part_lots.html.twig:6 - part_lots.description Description - - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - part_lots.storage_location Storage location - - Part-DB1\templates\Parts\info\_part_lots.html.twig:9 - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - part_lots.amount Amount - - Part-DB1\templates\Parts\info\_part_lots.html.twig:24 - Part-DB1\templates\Parts\info\_part_lots.html.twig:22 - part_lots.location_unknown Storage location unknown - - Part-DB1\templates\Parts\info\_part_lots.html.twig:31 - Part-DB1\templates\Parts\info\_part_lots.html.twig:29 - part_lots.instock_unknown Amount unknown - - Part-DB1\templates\Parts\info\_part_lots.html.twig:40 - Part-DB1\templates\Parts\info\_part_lots.html.twig:38 - part_lots.expiration_date Expiration date - - Part-DB1\templates\Parts\info\_part_lots.html.twig:48 - Part-DB1\templates\Parts\info\_part_lots.html.twig:46 - part_lots.is_expired Expired - - Part-DB1\templates\Parts\info\_part_lots.html.twig:55 - Part-DB1\templates\Parts\info\_part_lots.html.twig:53 - part_lots.need_refill Needs refill - - Part-DB1\templates\Parts\info\_picture.html.twig:15 - Part-DB1\templates\Parts\info\_picture.html.twig:15 - part.info.prev_picture Previous picture - - Part-DB1\templates\Parts\info\_picture.html.twig:19 - Part-DB1\templates\Parts\info\_picture.html.twig:19 - part.info.next_picture Next picture - - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - part.mass.tooltip Mass - - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - part.needs_review.badge Needs review - - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - part.favorite.badge Favorite - - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - part.obsolete.badge No longer available - - Part-DB1\templates\Parts\info\_specifications.html.twig:10 - parameters.extracted_from_description Automatically extracted from description - - Part-DB1\templates\Parts\info\_specifications.html.twig:15 - parameters.auto_extracted_from_comment Automatically extracted from notes - - Part-DB1\templates\Parts\info\_tools.html.twig:6 - Part-DB1\templates\Parts\info\_tools.html.twig:4 - templates\Parts\show_part_info.html.twig:125 - part.edit.btn Edit [part] - - Part-DB1\templates\Parts\info\_tools.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:14 - templates\Parts\show_part_info.html.twig:135 - part.clone.btn Clone [part] - - Part-DB1\templates\Parts\info\_tools.html.twig:24 - Part-DB1\templates\Parts\lists\_action_bar.html.twig:4 - templates\Parts\show_part_info.html.twig:143 - part.create.btn Create new [part] - - Part-DB1\templates\Parts\info\_tools.html.twig:31 - Part-DB1\templates\Parts\info\_tools.html.twig:29 - part.delete.confirm_title Do you really want to delete this [part]? - - Part-DB1\templates\Parts\info\_tools.html.twig:32 - Part-DB1\templates\Parts\info\_tools.html.twig:30 - part.delete.message This [part] and any associated information (like attachments, price information, etc.) will be deleted. This can not be undone! - - Part-DB1\templates\Parts\info\_tools.html.twig:39 - Part-DB1\templates\Parts\info\_tools.html.twig:37 - part.delete Delete [part] - - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - parts_list.all.title All [[part]] - - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - parts_list.category.title [[Part]] with [category] - - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - parts_list.footprint.title [[Part]] with [footprint] - - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - parts_list.manufacturer.title [[Part]] with [manufacturer] - - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - parts_list.search.title Search [[part]] - - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - parts_list.storelocation.title [[Part]] with [[storage_location]] - - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - parts_list.supplier.title [[Part]] with [supplier] - - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - parts_list.tags.title Parts with tag - - Part-DB1\templates\Parts\lists\_info_card.html.twig:22 - Part-DB1\templates\Parts\lists\_info_card.html.twig:17 - entity.info.common.tab Common - - Part-DB1\templates\Parts\lists\_info_card.html.twig:26 - Part-DB1\templates\Parts\lists\_info_card.html.twig:20 - entity.info.statistics.tab Statistics - - Part-DB1\templates\Parts\lists\_info_card.html.twig:31 - entity.info.attachments.tab Attachments - - Part-DB1\templates\Parts\lists\_info_card.html.twig:37 - entity.info.parameters.tab Parameters - - Part-DB1\templates\Parts\lists\_info_card.html.twig:54 - Part-DB1\templates\Parts\lists\_info_card.html.twig:30 - entity.info.name Name - - Part-DB1\templates\Parts\lists\_info_card.html.twig:58 - Part-DB1\templates\Parts\lists\_info_card.html.twig:96 - Part-DB1\templates\Parts\lists\_info_card.html.twig:34 - Part-DB1\templates\Parts\lists\_info_card.html.twig:67 - entity.info.parent Parent - - Part-DB1\templates\Parts\lists\_info_card.html.twig:70 - Part-DB1\templates\Parts\lists\_info_card.html.twig:46 - entity.edit.btn Edit - - Part-DB1\templates\Parts\lists\_info_card.html.twig:92 - Part-DB1\templates\Parts\lists\_info_card.html.twig:63 - entity.info.children_count Count of children elements - - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - tfa.check.title Two-factor authentication needed - - Part-DB1\templates\security\2fa_base_form.html.twig:39 - Part-DB1\templates\security\2fa_base_form.html.twig:39 - tfa.code.trusted_pc This is a trusted computer (if this is enabled, no further two-factor queries are performed on this computer) - - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - login.btn Login - - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:42 - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:40 - user.logout Logout - - Part-DB1\templates\security\2fa_form.html.twig:6 - Part-DB1\templates\security\2fa_form.html.twig:6 - tfa.check.code.label Authenticator app code - - Part-DB1\templates\security\2fa_form.html.twig:10 - Part-DB1\templates\security\2fa_form.html.twig:10 - tfa.check.code.help Enter the 6-digit code from your Authenticator app or one of your backup codes if the Authenticator is not available. - - Part-DB1\templates\security\login.html.twig:3 - Part-DB1\templates\security\login.html.twig:3 - templates\security\login.html.twig:3 - login.title Login - - Part-DB1\templates\security\login.html.twig:7 - Part-DB1\templates\security\login.html.twig:7 - templates\security\login.html.twig:7 - login.card_title Login - - Part-DB1\templates\security\login.html.twig:31 - Part-DB1\templates\security\login.html.twig:31 - templates\security\login.html.twig:31 - login.username.label Username - - Part-DB1\templates\security\login.html.twig:34 - Part-DB1\templates\security\login.html.twig:34 - templates\security\login.html.twig:34 - login.username.placeholder Username - - Part-DB1\templates\security\login.html.twig:38 - Part-DB1\templates\security\login.html.twig:38 - templates\security\login.html.twig:38 - login.password.label Password - - Part-DB1\templates\security\login.html.twig:40 - Part-DB1\templates\security\login.html.twig:40 - templates\security\login.html.twig:40 - login.password.placeholder Password - - Part-DB1\templates\security\login.html.twig:50 - Part-DB1\templates\security\login.html.twig:50 - templates\security\login.html.twig:50 - login.rememberme Remember me (should not be used on shared computers) - - Part-DB1\templates\security\login.html.twig:64 - Part-DB1\templates\security\login.html.twig:64 - pw_reset.password_forget Forgot username/password? - - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - pw_reset.new_pw.header.title Set new password - - Part-DB1\templates\security\pw_reset_request.html.twig:5 - Part-DB1\templates\security\pw_reset_request.html.twig:5 - pw_reset.request.header.title Request a new password - - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - tfa_u2f.http_warning You are accessing this page using the insecure HTTP method, so U2F will most likely not work (Bad Request error message). Ask an administrator to set up the secure HTTPS method if you want to use security keys. - - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - r_u2f_two_factor.pressbutton Please plug in your security key and press its button! - - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - tfa_u2f.add_key.title Add security key - - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - tfa_u2f.explanation With the help of a U2F/FIDO compatible security key (e.g. YubiKey or NitroKey), user-friendly and secure two-factor authentication can be achieved. The security keys can be registered here, and if two-factor verification is required, the key only needs to be inserted via USB or typed against the device via NFC. - - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - tfa_u2f.add_key.backup_hint To ensure access even if the key is lost, it is recommended to register a second key as backup and store it in a safe place! - - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - tfa_u2f.add_key.add_button Add security key - - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - tfa_u2f.add_key.back_to_settings Back to settings @@ -2977,10 +1763,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 new @@ -2990,8 +1772,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:14 - Part-DB1\templates\Statistics\statistics.html.twig:14 new @@ -3001,8 +1781,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:19 - Part-DB1\templates\Statistics\statistics.html.twig:19 new @@ -3012,8 +1790,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:24 - Part-DB1\templates\Statistics\statistics.html.twig:24 new @@ -3023,12 +1799,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 new @@ -3038,12 +1808,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 new @@ -3053,8 +1817,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:40 - Part-DB1\templates\Statistics\statistics.html.twig:40 new @@ -3064,8 +1826,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:44 - Part-DB1\templates\Statistics\statistics.html.twig:44 new @@ -3075,8 +1835,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:48 - Part-DB1\templates\Statistics\statistics.html.twig:48 new @@ -3086,8 +1844,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:65 - Part-DB1\templates\Statistics\statistics.html.twig:65 new @@ -3097,8 +1853,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:69 - Part-DB1\templates\Statistics\statistics.html.twig:69 new @@ -3108,8 +1862,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:73 - Part-DB1\templates\Statistics\statistics.html.twig:73 new @@ -3119,8 +1871,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:77 - Part-DB1\templates\Statistics\statistics.html.twig:77 new @@ -3130,8 +1880,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:81 - Part-DB1\templates\Statistics\statistics.html.twig:81 new @@ -3141,8 +1889,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:85 - Part-DB1\templates\Statistics\statistics.html.twig:85 new @@ -3152,8 +1898,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:89 - Part-DB1\templates\Statistics\statistics.html.twig:89 new @@ -3163,8 +1907,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:93 - Part-DB1\templates\Statistics\statistics.html.twig:93 new @@ -3174,8 +1916,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:110 - Part-DB1\templates\Statistics\statistics.html.twig:110 new @@ -3185,8 +1925,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:114 - Part-DB1\templates\Statistics\statistics.html.twig:114 new @@ -3196,8 +1934,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:118 - Part-DB1\templates\Statistics\statistics.html.twig:118 new @@ -3207,8 +1943,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:122 - Part-DB1\templates\Statistics\statistics.html.twig:122 new @@ -3218,8 +1952,6 @@ Sub elements will be moved upwards. - Part-DB1\templates\Statistics\statistics.html.twig:126 - Part-DB1\templates\Statistics\statistics.html.twig:126 new @@ -3228,302 +1960,156 @@ Sub elements will be moved upwards. - - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - tfa_backup.codes.title Backup codes - - Part-DB1\templates\Users\backup_codes.html.twig:12 - Part-DB1\templates\Users\backup_codes.html.twig:12 - tfa_backup.codes.explanation Print out these codes and keep them in a safe place! - - Part-DB1\templates\Users\backup_codes.html.twig:13 - Part-DB1\templates\Users\backup_codes.html.twig:13 - tfa_backup.codes.help If you no longer have access to your device with the Authenticator App (lost smartphone, data loss, etc.) you can use one of these codes to access your account and possibly set up a new Authenticator App. Each of these codes can be used once, it is recommended to delete used codes. Anyone with access to these codes can potentially access your account, so keep them in a safe place. - - Part-DB1\templates\Users\backup_codes.html.twig:16 - Part-DB1\templates\Users\backup_codes.html.twig:16 - tfa_backup.username Username - - Part-DB1\templates\Users\backup_codes.html.twig:29 - Part-DB1\templates\Users\backup_codes.html.twig:29 - tfa_backup.codes.page_generated_on Page generated on %date% - - Part-DB1\templates\Users\backup_codes.html.twig:32 - Part-DB1\templates\Users\backup_codes.html.twig:32 - tfa_backup.codes.print Print - - Part-DB1\templates\Users\backup_codes.html.twig:35 - Part-DB1\templates\Users\backup_codes.html.twig:35 - tfa_backup.codes.copy_clipboard Copy to clipboard - - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:40 - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:38 - templates\base.html.twig:99 - templates\Users\user_info.html.twig:3 - templates\Users\user_info.html.twig:6 - user.info.label User information - - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - templates\Users\user_info.html.twig:18 - src\Form\UserSettingsType.php:32 - user.firstName.label First name - - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - templates\Users\user_info.html.twig:24 - src\Form\UserSettingsType.php:35 - user.lastName.label Last name - - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - templates\Users\user_info.html.twig:30 - src\Form\UserSettingsType.php:41 - user.email.label Email - - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - templates\Users\user_info.html.twig:37 - src\Form\UserSettingsType.php:38 - user.department.label Department - - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - templates\Users\user_info.html.twig:47 - src\Form\UserSettingsType.php:30 - user.username.label Username - - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - templates\Users\user_info.html.twig:53 - group.label Group - - Part-DB1\templates\Users\user_info.html.twig:67 - Part-DB1\templates\Users\user_info.html.twig:67 - user.permissions Permissions - - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:39 - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:37 - templates\base.html.twig:98 - templates\Users\user_settings.html.twig:3 - templates\Users\user_settings.html.twig:6 - user.settings.label User settings - - Part-DB1\templates\Users\user_settings.html.twig:18 - Part-DB1\templates\Users\user_settings.html.twig:18 - templates\Users\user_settings.html.twig:14 - user_settings.data.label Personal data - - Part-DB1\templates\Users\user_settings.html.twig:22 - Part-DB1\templates\Users\user_settings.html.twig:22 - templates\Users\user_settings.html.twig:18 - user_settings.configuration.label Configuration - - Part-DB1\templates\Users\user_settings.html.twig:55 - Part-DB1\templates\Users\user_settings.html.twig:55 - templates\Users\user_settings.html.twig:48 - user.settings.change_pw Change password - - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - user.settings.2fa_settings Two-Factor Authentication - - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - tfa.settings.google.tab Authenticator app - - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - tfa.settings.bakup.tab Backup codes - - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - tfa.settings.u2f.tab Security keys (U2F) - - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - tfa.settings.trustedDevices.tab Trusted devices - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_title Do you really want to disable the Authenticator App? - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_message If you disable the Authenticator App, all backup codes will be deleted, so you may need to reprint them.<br> @@ -3531,262 +2117,156 @@ Also note that without two-factor authentication, your account is no longer as w - - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - tfa_google.disabled_message Authenticator app deactivated! - - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - tfa_google.step.download Download an authenticator app (e.g. <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a> oder <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp">FreeOTP Authenticator</a>) - - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - tfa_google.step.scan Scan the adjacent QR Code with the app or enter the data manually - - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - tfa_google.step.input_code Enter the generated code in the field below and confirm - - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - tfa_google.step.download_backup Print out your backup codes and store them in a safe place - - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - tfa_google.manual_setup Manual setup - - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - tfa_google.manual_setup.type Type - - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - tfa_google.manual_setup.username Username - - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - tfa_google.manual_setup.secret Secret - - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - tfa_google.manual_setup.digit_count Digit count - - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - tfa_google.enabled_message Authenticator App enabled - - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - tfa_backup.disabled Backup codes disabled. Setup authenticator app to enable backup codes. - - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - tfa_backup.explanation You can use these backup codes to access your account even if you lose the device with the Authenticator App. Print out the codes and keep them in a safe place. - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_title Really reset codes? - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_message This will delete all previous codes and generate a set of new codes. This cannot be undone. Remember to print out the new codes and store them in a safe place! - - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - tfa_backup.enabled Backup codes enabled - - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - tfa_backup.show_codes Show backup codes - - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - tfa_u2f.table_caption Registered security keys - - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - tfa_u2f.delete_u2f.confirm_title Really remove this security key? - - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - tfa_u2f.delete_u2f.confirm_message If you remove this key, then no more login with this key will be possible. If no security keys remain, two-factor authentication will be disabled. - - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - tfa_u2f.keys.name Key name - - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - tfa_u2f.keys.added_date Registration date - - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - tfa_u2f.key_delete Delete key - - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - tfa_u2f.no_keys_registered No keys registered yet. - - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - tfa_u2f.add_new_key Register new security key - - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - tfa_trustedDevices.explanation When checking the second factor, the current computer can be marked as trustworthy, so no more two-factor checks on this computer are needed. @@ -3794,326 +2274,168 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - tfa_trustedDevices.invalidate.confirm_title Really remove all trusted computers? - - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - tfa_trustedDevices.invalidate.confirm_message You will have to perform two-factor authentication again on all computers. Make sure you have your two-factor device at hand. - - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - tfa_trustedDevices.invalidate.btn Reset trusted devices - - Part-DB1\templates\_navbar.html.twig:4 - Part-DB1\templates\_navbar.html.twig:4 - templates\base.html.twig:29 - sidebar.toggle Toggle Sidebar - - Part-DB1\templates\_navbar.html.twig:22 - navbar.scanner.link Scanner - - Part-DB1\templates\_navbar.html.twig:38 - Part-DB1\templates\_navbar.html.twig:36 - templates\base.html.twig:97 - user.loggedin.label Logged in as - - Part-DB1\templates\_navbar.html.twig:44 - Part-DB1\templates\_navbar.html.twig:42 - templates\base.html.twig:103 - user.login Login - - Part-DB1\templates\_navbar.html.twig:50 - Part-DB1\templates\_navbar.html.twig:48 - ui.toggle_darkmode Darkmode - - Part-DB1\templates\_navbar.html.twig:54 - Part-DB1\src\Form\UserSettingsType.php:97 - Part-DB1\templates\_navbar.html.twig:52 - Part-DB1\src\Form\UserSettingsType.php:97 - templates\base.html.twig:106 - src\Form\UserSettingsType.php:44 - user.language_select Switch Language - - Part-DB1\templates\_navbar_search.html.twig:4 - Part-DB1\templates\_navbar_search.html.twig:4 - templates\base.html.twig:49 - search.options.label Search options - - Part-DB1\templates\_navbar_search.html.twig:23 - tags.label Tags - - Part-DB1\templates\_navbar_search.html.twig:27 - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - templates\base.html.twig:60 - templates\Parts\show_part_info.html.twig:36 - src\Form\PartType.php:77 - storelocation.label Storage location - - Part-DB1\templates\_navbar_search.html.twig:36 - Part-DB1\templates\_navbar_search.html.twig:31 - templates\base.html.twig:65 - ordernumber.label.short supplier partnr. - - Part-DB1\templates\_navbar_search.html.twig:40 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - Part-DB1\templates\_navbar_search.html.twig:35 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - templates\base.html.twig:67 - supplier.label Supplier - - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_navbar_search.html.twig:56 - templates\base.html.twig:77 - search.regexmatching Reg.Ex. Matching - - Part-DB1\templates\_sidebar.html.twig:37 - Part-DB1\templates\_sidebar.html.twig:12 - Part-DB1\templates\_sidebar.html.twig:37 - Part-DB1\templates\_sidebar.html.twig:12 - templates\base.html.twig:175 - templates\base.html.twig:189 - templates\base.html.twig:202 - templates\base.html.twig:230 - project.labelp Projects - - Part-DB1\templates\_sidebar.html.twig:2 - Part-DB1\templates\_sidebar.html.twig:2 - templates\base.html.twig:165 - templates\base.html.twig:192 - templates\base.html.twig:220 - actions Actions - - Part-DB1\templates\_sidebar.html.twig:6 - Part-DB1\templates\_sidebar.html.twig:6 - templates\base.html.twig:169 - templates\base.html.twig:196 - templates\base.html.twig:224 - datasource Data source - - Part-DB1\templates\_sidebar.html.twig:10 - Part-DB1\templates\_sidebar.html.twig:10 - templates\base.html.twig:173 - templates\base.html.twig:200 - templates\base.html.twig:228 - manufacturer.labelp Manufacturers - - Part-DB1\templates\_sidebar.html.twig:11 - Part-DB1\templates\_sidebar.html.twig:11 - templates\base.html.twig:174 - templates\base.html.twig:201 - templates\base.html.twig:229 - supplier.labelp Suppliers - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:213 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:293 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:293 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:181 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:243 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:268 - attachment.download_failed Download of the external attachment failed. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:222 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:190 - entity.edit_flash Changes saved successful. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:231 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:196 - entity.edit_flash.invalid Can not save changed. Please check your input! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:302 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:252 - entity.created_flash Element created. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:308 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:258 - entity.created_flash.invalid Could not create element. Please check your input! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:399 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:352 - src\Controller\BaseAdminController.php:154 - attachment_type.deleted Element deleted! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:401 - Part-DB1\src\Controller\UserController.php:109 - Part-DB1\src\Controller\UserSettingsController.php:159 - Part-DB1\src\Controller\UserSettingsController.php:193 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:354 - Part-DB1\src\Controller\UserController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:150 - Part-DB1\src\Controller\UserSettingsController.php:182 - csfr_invalid CSFR Token invalid. Please reload this page or contact an administrator if this message stays. - - Part-DB1\src\Controller\LabelController.php:125 - label_generator.no_entities_found No entities matching the range found. @@ -4121,8 +2443,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Controller\LogController.php:149 - Part-DB1\src\Controller\LogController.php:154 new @@ -4132,8 +2452,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Controller\LogController.php:156 - Part-DB1\src\Controller\LogController.php:160 new @@ -4143,8 +2461,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Controller\LogController.php:176 - Part-DB1\src\Controller\LogController.php:180 new @@ -4154,8 +2470,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Controller\LogController.php:178 - Part-DB1\src\Controller\LogController.php:182 new @@ -4165,8 +2479,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Controller\LogController.php:185 - Part-DB1\src\Controller\LogController.php:189 new @@ -4176,8 +2488,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Controller\LogController.php:187 - Part-DB1\src\Controller\LogController.php:191 new @@ -4187,8 +2497,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Controller\LogController.php:194 - Part-DB1\src\Controller\LogController.php:198 new @@ -4198,8 +2506,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Controller\LogController.php:196 - Part-DB1\src\Controller\LogController.php:200 new @@ -4209,8 +2515,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Controller\LogController.php:199 - Part-DB1\src\Controller\LogController.php:203 new @@ -4219,306 +2523,168 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - - Part-DB1\src\Controller\PartController.php:182 - Part-DB1\src\Controller\PartController.php:182 - src\Controller\PartController.php:80 - part.edited_flash Saved changes! - - Part-DB1\src\Controller\PartController.php:216 - Part-DB1\src\Controller\PartController.php:219 - part.deleted Part deleted successful. - - Part-DB1\src\Controller\PartController.php:302 - Part-DB1\src\Controller\PartController.php:277 - Part-DB1\src\Controller\PartController.php:317 - src\Controller\PartController.php:113 - src\Controller\PartController.php:142 - part.created_flash Part created! - - Part-DB1\src\Controller\PartController.php:308 - Part-DB1\src\Controller\PartController.php:283 - part.created_flash.invalid Error during creation: Please check your inputs! - - Part-DB1\src\Controller\ScanController.php:68 - Part-DB1\src\Controller\ScanController.php:90 - scan.qr_not_found No element found for the given barcode. - - Part-DB1\src\Controller\ScanController.php:71 - scan.format_unknown Format unknown! - - Part-DB1\src\Controller\ScanController.php:86 - scan.qr_success Element found. - - Part-DB1\src\Controller\SecurityController.php:114 - Part-DB1\src\Controller\SecurityController.php:109 - pw_reset.user_or_email Username / Email - - Part-DB1\src\Controller\SecurityController.php:131 - Part-DB1\src\Controller\SecurityController.php:126 - pw_reset.request.success Reset request was successful! Please check your emails for further instructions. - - Part-DB1\src\Controller\SecurityController.php:162 - Part-DB1\src\Controller\SecurityController.php:160 - pw_reset.username Username - - Part-DB1\src\Controller\SecurityController.php:165 - Part-DB1\src\Controller\SecurityController.php:163 - pw_reset.token Token - - Part-DB1\src\Controller\SecurityController.php:194 - Part-DB1\src\Controller\SecurityController.php:192 - pw_reset.new_pw.error Username or Token invalid! Please check your input. - - Part-DB1\src\Controller\SecurityController.php:196 - Part-DB1\src\Controller\SecurityController.php:194 - pw_reset.new_pw.success Password was reset successfully. You can now login with your new password. - - Part-DB1\src\Controller\UserController.php:107 - Part-DB1\src\Controller\UserController.php:99 - user.edit.reset_success All two-factor authentication methods were successfully disabled. - - Part-DB1\src\Controller\UserSettingsController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:92 - tfa_backup.no_codes_enabled No backup codes enabled! - - Part-DB1\src\Controller\UserSettingsController.php:138 - Part-DB1\src\Controller\UserSettingsController.php:132 - tfa_u2f.u2f_delete.not_existing No security key with this ID is existing. - - Part-DB1\src\Controller\UserSettingsController.php:145 - Part-DB1\src\Controller\UserSettingsController.php:139 - tfa_u2f.u2f_delete.access_denied You can not delete the security keys of other users! - - Part-DB1\src\Controller\UserSettingsController.php:153 - Part-DB1\src\Controller\UserSettingsController.php:147 - tfa.u2f.u2f_delete.success Security key successfully removed. - - Part-DB1\src\Controller\UserSettingsController.php:188 - Part-DB1\src\Controller\UserSettingsController.php:180 - tfa_trustedDevice.invalidate.success Trusted devices successfully reset. - - Part-DB1\src\Controller\UserSettingsController.php:235 - Part-DB1\src\Controller\UserSettingsController.php:226 - src\Controller\UserController.php:98 - user.settings.saved_flash Settings saved! - - Part-DB1\src\Controller\UserSettingsController.php:297 - Part-DB1\src\Controller\UserSettingsController.php:288 - src\Controller\UserController.php:130 - user.settings.pw_changed_flash Password changed! - - Part-DB1\src\Controller\UserSettingsController.php:317 - Part-DB1\src\Controller\UserSettingsController.php:306 - user.settings.2fa.google.activated Authenticator App successfully activated. - - Part-DB1\src\Controller\UserSettingsController.php:328 - Part-DB1\src\Controller\UserSettingsController.php:315 - user.settings.2fa.google.disabled Authenticator App successfully deactivated. - - Part-DB1\src\Controller\UserSettingsController.php:346 - Part-DB1\src\Controller\UserSettingsController.php:332 - user.settings.2fa.backup_codes.regenerated New backup codes successfully generated. - - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - attachment.table.filesize File size - - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:245 - Part-DB1\src\DataTables\PartsDataTable.php:252 - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:193 - Part-DB1\src\DataTables\PartsDataTable.php:200 - true true - - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:246 - Part-DB1\src\DataTables\PartsDataTable.php:253 - Part-DB1\src\Form\Type\SIUnitType.php:139 - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:201 - Part-DB1\src\Form\Type\SIUnitType.php:139 - false false - - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:128 - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:119 - log.target_deleted deleted @@ -4526,8 +2692,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\DataTables\Column\RevertLogColumn.php:57 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:60 new @@ -4537,8 +2701,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\DataTables\Column\RevertLogColumn.php:63 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:66 new @@ -4548,8 +2710,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\DataTables\Column\RevertLogColumn.php:83 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:86 new @@ -4558,70 +2718,42 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - - Part-DB1\src\DataTables\LogDataTable.php:173 - Part-DB1\src\DataTables\LogDataTable.php:161 - log.id ID - - Part-DB1\src\DataTables\LogDataTable.php:178 - Part-DB1\src\DataTables\LogDataTable.php:166 - log.timestamp Timestamp - - Part-DB1\src\DataTables\LogDataTable.php:183 - Part-DB1\src\DataTables\LogDataTable.php:171 - log.type Event - - Part-DB1\src\DataTables\LogDataTable.php:191 - Part-DB1\src\DataTables\LogDataTable.php:179 - log.level Level - - Part-DB1\src\DataTables\LogDataTable.php:200 - Part-DB1\src\DataTables\LogDataTable.php:188 - log.user User - - Part-DB1\src\DataTables\LogDataTable.php:213 - Part-DB1\src\DataTables\LogDataTable.php:201 - log.target_type Target type - - Part-DB1\src\DataTables\LogDataTable.php:226 - Part-DB1\src\DataTables\LogDataTable.php:214 - log.target Target @@ -4629,8 +2761,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\DataTables\LogDataTable.php:231 - Part-DB1\src\DataTables\LogDataTable.php:218 new @@ -4639,100 +2769,60 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - - Part-DB1\src\DataTables\PartsDataTable.php:168 - Part-DB1\src\DataTables\PartsDataTable.php:116 - part.table.name Name - - Part-DB1\src\DataTables\PartsDataTable.php:178 - Part-DB1\src\DataTables\PartsDataTable.php:126 - part.table.id Id - - Part-DB1\src\DataTables\PartsDataTable.php:182 - Part-DB1\src\DataTables\PartsDataTable.php:130 - part.table.description Description - - Part-DB1\src\DataTables\PartsDataTable.php:185 - Part-DB1\src\DataTables\PartsDataTable.php:133 - part.table.category Category - - Part-DB1\src\DataTables\PartsDataTable.php:190 - Part-DB1\src\DataTables\PartsDataTable.php:138 - part.table.footprint Footprint - - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:142 - part.table.manufacturer Manufacturer - - Part-DB1\src\DataTables\PartsDataTable.php:197 - Part-DB1\src\DataTables\PartsDataTable.php:145 - part.table.storeLocations Storage locations - - Part-DB1\src\DataTables\PartsDataTable.php:216 - Part-DB1\src\DataTables\PartsDataTable.php:164 - part.table.amount Amount - - Part-DB1\src\DataTables\PartsDataTable.php:224 - Part-DB1\src\DataTables\PartsDataTable.php:172 - part.table.minamount Min. Amount - - Part-DB1\src\DataTables\PartsDataTable.php:232 - Part-DB1\src\DataTables\PartsDataTable.php:180 - part.table.partUnit Measurement Unit @@ -4745,864 +2835,522 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - - Part-DB1\src\DataTables\PartsDataTable.php:236 - Part-DB1\src\DataTables\PartsDataTable.php:184 - part.table.addedDate Created at - - Part-DB1\src\DataTables\PartsDataTable.php:240 - Part-DB1\src\DataTables\PartsDataTable.php:188 - part.table.lastModified Last modified - - Part-DB1\src\DataTables\PartsDataTable.php:244 - Part-DB1\src\DataTables\PartsDataTable.php:192 - part.table.needsReview Needs review - - Part-DB1\src\DataTables\PartsDataTable.php:251 - Part-DB1\src\DataTables\PartsDataTable.php:199 - part.table.favorite Favorite - - Part-DB1\src\DataTables\PartsDataTable.php:258 - Part-DB1\src\DataTables\PartsDataTable.php:206 - part.table.manufacturingStatus Status - - Part-DB1\src\DataTables\PartsDataTable.php:260 - Part-DB1\src\DataTables\PartsDataTable.php:262 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:208 - Part-DB1\src\DataTables\PartsDataTable.php:210 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.unknown Unknown - - Part-DB1\src\DataTables\PartsDataTable.php:263 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:211 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.announced Announced - - Part-DB1\src\DataTables\PartsDataTable.php:264 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.active Active - - Part-DB1\src\DataTables\PartsDataTable.php:265 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:213 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.nrfnd Not recommended for new designs - - Part-DB1\src\DataTables\PartsDataTable.php:266 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:214 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.eol End of life - - Part-DB1\src\DataTables\PartsDataTable.php:267 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:215 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.discontinued Discontinued - - Part-DB1\src\DataTables\PartsDataTable.php:271 - Part-DB1\src\DataTables\PartsDataTable.php:219 - part.table.mpn MPN - - Part-DB1\src\DataTables\PartsDataTable.php:275 - Part-DB1\src\DataTables\PartsDataTable.php:223 - part.table.mass Mass - - Part-DB1\src\DataTables\PartsDataTable.php:279 - Part-DB1\src\DataTables\PartsDataTable.php:227 - part.table.tags Tags - - Part-DB1\src\DataTables\PartsDataTable.php:283 - Part-DB1\src\DataTables\PartsDataTable.php:231 - part.table.attachments Attachments - - Part-DB1\src\EventSubscriber\UserSystem\LoginSuccessSubscriber.php:82 - Part-DB1\src\EventSubscriber\LoginSuccessListener.php:82 - flash.login_successful Login successful - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - JSON JSON - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - XML XML - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - CSV CSV - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - YAML YAML - - Part-DB1\src\Form\AdminPages\ImportType.php:124 - Part-DB1\src\Form\AdminPages\ImportType.php:124 - import.abort_on_validation.help When this option is activated, the whole import process is aborted if invalid data is detected. If not selected, the invalid data is ignored and the importer will try to import the other elements. - - Part-DB1\src\Form\AdminPages\ImportType.php:86 - Part-DB1\src\Form\AdminPages\ImportType.php:86 - src\Form\ImportType.php:70 - import.csv_separator CSV separator - - Part-DB1\src\Form\AdminPages\ImportType.php:93 - Part-DB1\src\Form\AdminPages\ImportType.php:93 - src\Form\ImportType.php:72 - parent.label Parent element - - Part-DB1\src\Form\AdminPages\ImportType.php:101 - Part-DB1\src\Form\AdminPages\ImportType.php:101 - src\Form\ImportType.php:75 - import.file File - - Part-DB1\src\Form\AdminPages\ImportType.php:111 - Part-DB1\src\Form\AdminPages\ImportType.php:111 - src\Form\ImportType.php:78 - import.preserve_children Preserve child elements on import - - Part-DB1\src\Form\AdminPages\ImportType.php:120 - Part-DB1\src\Form\AdminPages\ImportType.php:120 - src\Form\ImportType.php:80 - import.abort_on_validation Abort on invalid data - - Part-DB1\src\Form\AdminPages\ImportType.php:132 - Part-DB1\src\Form\AdminPages\ImportType.php:132 - src\Form\ImportType.php:85 - import.btn Import - - Part-DB1\src\Form\AttachmentFormType.php:113 - Part-DB1\src\Form\AttachmentFormType.php:109 - attachment.edit.secure_file.help An attachment marked private can only be accessed by authenticated users with the proper permission. If this is activated no thumbnails are generated and access to file is less performant. - - Part-DB1\src\Form\AttachmentFormType.php:127 - Part-DB1\src\Form\AttachmentFormType.php:123 - attachment.edit.url.help You can specify an URL to an external file here, or input an keyword which is used to search in built-in resources (e.g. footprints) - - Part-DB1\src\Form\AttachmentFormType.php:82 - Part-DB1\src\Form\AttachmentFormType.php:79 - attachment.edit.name Name - - Part-DB1\src\Form\AttachmentFormType.php:85 - Part-DB1\src\Form\AttachmentFormType.php:82 - attachment.edit.attachment_type Attachment type - - Part-DB1\src\Form\AttachmentFormType.php:94 - Part-DB1\src\Form\AttachmentFormType.php:91 - attachment.edit.show_in_table Show in table - - Part-DB1\src\Form\AttachmentFormType.php:105 - Part-DB1\src\Form\AttachmentFormType.php:102 - attachment.edit.secure_file Private attachment - - Part-DB1\src\Form\AttachmentFormType.php:119 - Part-DB1\src\Form\AttachmentFormType.php:115 - attachment.edit.url URL - - Part-DB1\src\Form\AttachmentFormType.php:133 - Part-DB1\src\Form\AttachmentFormType.php:129 - attachment.edit.download_url Download external file - - Part-DB1\src\Form\AttachmentFormType.php:146 - Part-DB1\src\Form\AttachmentFormType.php:142 - attachment.edit.file Upload file - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:86 - part.label Part - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:87 - part_lot.label Part lot - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.none None - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.qr QR Code (recommended) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code128 Code 128 (recommended) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code39 Code 39 (recommended) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code93 Code 93 - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.datamatrix Datamatrix - - Part-DB1\src\Form\LabelOptionsType.php:122 - label_options.lines_mode.html Placeholders - - Part-DB1\src\Form\LabelOptionsType.php:122 - label.options.lines_mode.twig Twig - - Part-DB1\src\Form\LabelOptionsType.php:126 - label_options.lines_mode.help If you select Twig here, the content field is interpreted as Twig template. See <a href="https://twig.symfony.com/doc/3.x/templates.html">Twig documentation</a> and <a href="https://docs.part-db.de/usage/labels.html#twig-mode">Wiki</a> for more information. - - Part-DB1\src\Form\LabelOptionsType.php:47 - label_options.page_size.label Label size - - Part-DB1\src\Form\LabelOptionsType.php:66 - label_options.supported_elements.label Target type - - Part-DB1\src\Form\LabelOptionsType.php:75 - label_options.barcode_type.label Barcode - - Part-DB1\src\Form\LabelOptionsType.php:102 - label_profile.lines.label Content - - Part-DB1\src\Form\LabelOptionsType.php:111 - label_options.additional_css.label Additional styles (CSS) - - Part-DB1\src\Form\LabelOptionsType.php:120 - label_options.lines_mode.label Parser mode - - Part-DB1\src\Form\LabelOptionsType.php:51 - label_options.width.placeholder Width - - Part-DB1\src\Form\LabelOptionsType.php:60 - label_options.height.placeholder Height - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:49 - label_generator.target_id.range_hint You can specify multiple IDs (e.g. 1,2,3) and/or a range (1-3) here to generate labels for multiple elements at once. - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:46 - label_generator.target_id.label Target IDs - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:59 - label_generator.update Update - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:36 - scan_dialog.input Input - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:44 - scan_dialog.submit Submit - - Part-DB1\src\Form\ParameterType.php:41 - parameters.name.placeholder e.g. DC Current Gain - - Part-DB1\src\Form\ParameterType.php:50 - parameters.symbol.placeholder e.g. h_{FE} - - Part-DB1\src\Form\ParameterType.php:60 - parameters.text.placeholder e.g. Test conditions - - Part-DB1\src\Form\ParameterType.php:71 - parameters.max.placeholder e.g. 350 - - Part-DB1\src\Form\ParameterType.php:82 - parameters.min.placeholder e.g. 100 - - Part-DB1\src\Form\ParameterType.php:93 - parameters.typical.placeholder e.g. 200 - - Part-DB1\src\Form\ParameterType.php:103 - parameters.unit.placeholder e.g. V - - Part-DB1\src\Form\ParameterType.php:114 - parameter.group.placeholder e.g. Technical Specifications - - Part-DB1\src\Form\Part\OrderdetailType.php:72 - Part-DB1\src\Form\Part\OrderdetailType.php:75 - orderdetails.edit.supplierpartnr Supplier part number - - Part-DB1\src\Form\Part\OrderdetailType.php:81 - Part-DB1\src\Form\Part\OrderdetailType.php:84 - orderdetails.edit.supplier Supplier - - Part-DB1\src\Form\Part\OrderdetailType.php:87 - Part-DB1\src\Form\Part\OrderdetailType.php:90 - orderdetails.edit.url Link to offer - - Part-DB1\src\Form\Part\OrderdetailType.php:93 - Part-DB1\src\Form\Part\OrderdetailType.php:96 - orderdetails.edit.obsolete No longer available - - Part-DB1\src\Form\Part\OrderdetailType.php:75 - Part-DB1\src\Form\Part\OrderdetailType.php:78 - orderdetails.edit.supplierpartnr.placeholder e.g. BC 547 - - Part-DB1\src\Form\Part\PartBaseType.php:101 - Part-DB1\src\Form\Part\PartBaseType.php:99 - part.edit.name Name - - Part-DB1\src\Form\Part\PartBaseType.php:109 - Part-DB1\src\Form\Part\PartBaseType.php:107 - part.edit.description Description - - Part-DB1\src\Form\Part\PartBaseType.php:120 - Part-DB1\src\Form\Part\PartBaseType.php:118 - part.edit.mininstock Minimum stock - - Part-DB1\src\Form\Part\PartBaseType.php:129 - Part-DB1\src\Form\Part\PartBaseType.php:127 - part.edit.category Category - - Part-DB1\src\Form\Part\PartBaseType.php:135 - Part-DB1\src\Form\Part\PartBaseType.php:133 - part.edit.footprint Footprint - - Part-DB1\src\Form\Part\PartBaseType.php:142 - Part-DB1\src\Form\Part\PartBaseType.php:140 - part.edit.tags Tags - - Part-DB1\src\Form\Part\PartBaseType.php:154 - Part-DB1\src\Form\Part\PartBaseType.php:152 - part.edit.manufacturer.label Manufacturer - - Part-DB1\src\Form\Part\PartBaseType.php:161 - Part-DB1\src\Form\Part\PartBaseType.php:159 - part.edit.manufacturer_url.label Link to product page - - Part-DB1\src\Form\Part\PartBaseType.php:167 - Part-DB1\src\Form\Part\PartBaseType.php:165 - part.edit.mpn Manufacturer part number - - Part-DB1\src\Form\Part\PartBaseType.php:173 - Part-DB1\src\Form\Part\PartBaseType.php:171 - part.edit.manufacturing_status Manufacturing status - - Part-DB1\src\Form\Part\PartBaseType.php:181 - Part-DB1\src\Form\Part\PartBaseType.php:179 - part.edit.needs_review Needs review - - Part-DB1\src\Form\Part\PartBaseType.php:189 - Part-DB1\src\Form\Part\PartBaseType.php:187 - part.edit.is_favorite Favorite - - Part-DB1\src\Form\Part\PartBaseType.php:197 - Part-DB1\src\Form\Part\PartBaseType.php:195 - part.edit.mass Mass - - Part-DB1\src\Form\Part\PartBaseType.php:203 - Part-DB1\src\Form\Part\PartBaseType.php:201 - part.edit.partUnit Measuring unit @@ -5615,287 +3363,168 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - - Part-DB1\src\Form\Part\PartBaseType.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:210 - part.edit.comment Notes - - Part-DB1\src\Form\Part\PartBaseType.php:250 - Part-DB1\src\Form\Part\PartBaseType.php:246 - part.edit.master_attachment Preview image - - Part-DB1\src\Form\Part\PartBaseType.php:295 - Part-DB1\src\Form\Part\PartBaseType.php:276 - src\Form\PartType.php:91 - part.edit.save Save changes - - Part-DB1\src\Form\Part\PartBaseType.php:296 - Part-DB1\src\Form\Part\PartBaseType.php:277 - src\Form\PartType.php:92 - part.edit.reset Reset changes - - Part-DB1\src\Form\Part\PartBaseType.php:105 - Part-DB1\src\Form\Part\PartBaseType.php:103 - part.edit.name.placeholder e.g. BC547 - - Part-DB1\src\Form\Part\PartBaseType.php:115 - Part-DB1\src\Form\Part\PartBaseType.php:113 - part.edit.description.placeholder e.g. NPN 45V, 0,1A, 0,5W - - Part-DB1\src\Form\Part\PartBaseType.php:123 - Part-DB1\src\Form\Part\PartBaseType.php:121 - part.editmininstock.placeholder e.g. 1 - - Part-DB1\src\Form\Part\PartLotType.php:69 - Part-DB1\src\Form\Part\PartLotType.php:69 - part_lot.edit.description Description - - Part-DB1\src\Form\Part\PartLotType.php:78 - Part-DB1\src\Form\Part\PartLotType.php:78 - part_lot.edit.location Storage location - - Part-DB1\src\Form\Part\PartLotType.php:89 - Part-DB1\src\Form\Part\PartLotType.php:89 - part_lot.edit.amount Amount - - Part-DB1\src\Form\Part\PartLotType.php:98 - Part-DB1\src\Form\Part\PartLotType.php:97 - part_lot.edit.instock_unknown Amount unknown - - Part-DB1\src\Form\Part\PartLotType.php:109 - Part-DB1\src\Form\Part\PartLotType.php:108 - part_lot.edit.needs_refill Needs refill - - Part-DB1\src\Form\Part\PartLotType.php:120 - Part-DB1\src\Form\Part\PartLotType.php:119 - part_lot.edit.expiration_date Expiration date - - Part-DB1\src\Form\Part\PartLotType.php:128 - Part-DB1\src\Form\Part\PartLotType.php:125 - part_lot.edit.comment Notes - - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - perm.group.other Miscellaneous - - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - tfa_google.enable Enable authenticator app - - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - tfa_google.disable Deactivate authenticator app - - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - google_confirmation Confirmation code - - Part-DB1\src\Form\UserSettingsType.php:108 - Part-DB1\src\Form\UserSettingsType.php:108 - src\Form\UserSettingsType.php:46 - user.timezone.label Timezone - - Part-DB1\src\Form\UserSettingsType.php:133 - Part-DB1\src\Form\UserSettingsType.php:132 - user.currency.label Preferred currency - - Part-DB1\src\Form\UserSettingsType.php:140 - Part-DB1\src\Form\UserSettingsType.php:139 - src\Form\UserSettingsType.php:53 - save Apply changes - - Part-DB1\src\Form\UserSettingsType.php:141 - Part-DB1\src\Form\UserSettingsType.php:140 - src\Form\UserSettingsType.php:54 - reset Discard changes - - Part-DB1\src\Form\UserSettingsType.php:104 - Part-DB1\src\Form\UserSettingsType.php:104 - src\Form\UserSettingsType.php:45 - user_settings.language.placeholder Serverwide language - - Part-DB1\src\Form\UserSettingsType.php:115 - Part-DB1\src\Form\UserSettingsType.php:115 - src\Form\UserSettingsType.php:48 - user_settings.timezone.placeholder Serverwide Timezone - - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - attachment.label Attachment - - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - attachment_type.label Attachment type - - Part-DB1\src\Services\ElementTypeNameGenerator.php:82 - Part-DB1\src\Services\ElementTypeNameGenerator.php:82 - project.label Project - - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - measurement_unit.label Measurement unit @@ -5908,58 +3537,36 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - currency.label Currency - - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - orderdetail.label Order detail - - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - pricedetail.label Price detail - - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - user.label User - - Part-DB1\src\Services\ElementTypeNameGenerator.php:95 - parameter.label Parameter - - Part-DB1\src\Services\ElementTypeNameGenerator.php:96 - label_profile.label Label profile @@ -5967,8 +3574,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:176 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:161 new @@ -5977,174 +3582,102 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - - Part-DB1\src\Services\MarkdownParser.php:73 - Part-DB1\src\Services\MarkdownParser.php:73 - markdown.loading Loading markdown. If this message does not disappear, try to reload the page. - - Part-DB1\src\Services\PasswordResetManager.php:98 - Part-DB1\src\Services\PasswordResetManager.php:98 - pw_reset.email.subject Password reset for your Part-DB account - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - tree.tools.tools Tools - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:107 - src\Services\ToolsTreeBuilder.php:74 - tree.tools.edit Edit - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:110 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - src\Services\ToolsTreeBuilder.php:81 - tree.tools.show Show - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:111 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - tree.tools.system System - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:123 - tree.tools.tools.label_dialog Label generator - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:130 - tree.tools.tools.label_scanner Scanner - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:149 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:126 - src\Services\ToolsTreeBuilder.php:62 - tree.tools.edit.attachment_types [[Attachment_type]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:155 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:132 - src\Services\ToolsTreeBuilder.php:64 - tree.tools.edit.categories [[Category]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:161 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:138 - src\Services\ToolsTreeBuilder.php:66 - tree.tools.edit.projects [[Project]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:167 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:144 - src\Services\ToolsTreeBuilder.php:68 - tree.tools.edit.suppliers [[Supplier]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:173 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:150 - src\Services\ToolsTreeBuilder.php:70 - tree.tools.edit.manufacturer [[Manufacturer]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:179 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:156 - tree.tools.edit.storelocation [[Storage_location]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:185 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:162 - tree.tools.edit.footprint [[Footprint]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:191 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:168 - tree.tools.edit.currency [[Currency]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:174 - tree.tools.edit.measurement_unit [[Measurement_unit]] @@ -6157,40 +3690,24 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.edit.label_profile [[Label_profile]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:209 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:180 - tree.tools.edit.part New [part] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:226 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - src\Services\ToolsTreeBuilder.php:77 - tree.tools.show.all_parts Show all [[part]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:232 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.show.all_attachments Attachments @@ -6198,8 +3715,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:239 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:210 new @@ -6208,20 +3723,12 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:258 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:229 - tree.tools.system.users [[User]] - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:264 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:235 - tree.tools.system.groups [[Group]] @@ -6229,8 +3736,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:271 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:242 new @@ -6239,11 +3744,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - src\Services\TreeBuilder.php:124 - entity.tree.new New Element @@ -6251,7 +3751,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 obsolete @@ -6261,8 +3760,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\templates\_navbar.html.twig:27 - templates\base.html.twig:88 obsolete @@ -6272,8 +3769,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Form\UserSettingsType.php:119 - src\Form\UserSettingsType.php:49 obsolete @@ -6283,8 +3778,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Form\UserSettingsType.php:129 - src\Form\UserSettingsType.php:50 obsolete @@ -6294,7 +3787,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:100 new obsolete @@ -6305,10 +3797,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:128 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:150 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:169 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:207 new obsolete @@ -6319,10 +3807,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:130 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:152 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:171 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:209 new obsolete @@ -6333,7 +3817,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:139 new obsolete @@ -6344,7 +3827,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:160 new obsolete @@ -6355,7 +3837,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:184 new obsolete @@ -6366,7 +3847,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:198 new obsolete @@ -6377,7 +3857,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:214 new obsolete @@ -6388,7 +3867,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - templates\base.html.twig:81 obsolete obsolete @@ -6399,7 +3877,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - templates\base.html.twig:109 obsolete obsolete @@ -6410,7 +3887,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - templates\base.html.twig:112 obsolete obsolete @@ -6701,7 +4177,6 @@ If you have done this incorrectly or if a computer is no longer trusted, you can - src\Form\PartType.php:63 obsolete obsolete @@ -7377,7 +4852,6 @@ Element 1 -> Element 1.2 - templates\Parts\show_part_info.html.twig:194 obsolete obsolete @@ -7388,7 +4862,6 @@ Element 1 -> Element 1.2 - src\Form\PartType.php:83 obsolete obsolete @@ -14929,4 +12402,4 @@ Buerklin-API Authentication server: - + \ No newline at end of file diff --git a/translations/messages.es.xlf b/translations/messages.es.xlf index a7c1f906..17b2156b 100644 --- a/translations/messages.es.xlf +++ b/translations/messages.es.xlf @@ -2,11 +2,6 @@ - - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - attachment_type.caption Tipo de archivo para adjuntos @@ -14,7 +9,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:12 new @@ -24,7 +18,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:16 new @@ -33,45 +26,18 @@ - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - templates\AdminPages\CategoryAdmin.html.twig:4 - templates\base.html.twig:163 - templates\base.html.twig:170 - templates\base.html.twig:197 - templates\base.html.twig:225 - category.labelp Categorías - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:19 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:11 - templates\AdminPages\CategoryAdmin.html.twig:8 - admin.options Opciones - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - templates\AdminPages\CategoryAdmin.html.twig:9 - admin.advanced Avanzado @@ -79,7 +45,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:13 new @@ -89,7 +54,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:17 new @@ -98,30 +62,18 @@ - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - currency.caption Divisa - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - currency.iso_code.caption Código ISO - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - currency.symbol.caption Símbolo de divisa @@ -129,7 +81,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:29 new @@ -139,7 +90,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:33 new @@ -149,7 +99,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:8 new @@ -159,7 +108,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:12 new @@ -168,89 +116,36 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Buscar - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - templates\AdminPages\EntityAdminBase.html.twig:13 - templates\base.html.twig:166 - templates\base.html.twig:193 - templates\base.html.twig:221 - expandAll Expandir todo - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - templates\AdminPages\EntityAdminBase.html.twig:17 - templates\base.html.twig:167 - templates\base.html.twig:194 - templates\base.html.twig:222 - reduceAll Reducir todo - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - part.info.timetravel_hint Así aparecía el componente antes de: %timestamp%. <i>Esta función es experimental, así que la información podría no ser correcta.</i> - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - templates\AdminPages\EntityAdminBase.html.twig:42 - standard.label Propiedades - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - templates\AdminPages\EntityAdminBase.html.twig:43 - infos.label Información @@ -258,8 +153,6 @@ - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 new @@ -268,120 +161,66 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - templates\AdminPages\EntityAdminBase.html.twig:45 - export.label Exportar - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - templates\AdminPages\EntityAdminBase.html.twig:47 - import_export.label Importar / Exportar - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - mass_creation.label Creación en masa - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - templates\AdminPages\EntityAdminBase.html.twig:59 - admin.common Común - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - admin.attachments Adjuntos - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:90 - admin.parameters Parámetros - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:179 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:167 - templates\AdminPages\EntityAdminBase.html.twig:142 - export_all.label Exportar todos los elementos - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:185 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:173 - mass_creation.help Cada línea será interpretada como el nombre de un elemento, el cual será creado. Puedes crear estructuras anidadas con identificadores. - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - templates\AdminPages\EntityAdminBase.html.twig:35 - edit.caption Editar elemento "%name" - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - templates\AdminPages\EntityAdminBase.html.twig:37 - new.caption Nuevo elemento - - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - templates\base.html.twig:172 - templates\base.html.twig:199 - templates\base.html.twig:227 - footprint.labelp Footprints @@ -389,7 +228,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:13 new @@ -399,7 +237,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:17 new @@ -408,22 +245,12 @@ - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - group.edit.caption Grupos - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - user.edit.permissions Permisos @@ -431,7 +258,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:24 new @@ -441,7 +267,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:28 new @@ -450,27 +275,18 @@ - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:4 - label_profile.caption Perfiles de etiqueta - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:8 - label_profile.advanced Avanzado - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:9 - label_profile.comment Notas @@ -478,7 +294,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:55 new @@ -488,7 +303,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:59 new @@ -497,11 +311,6 @@ - - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - templates\AdminPages\ManufacturerAdmin.html.twig:4 - manufacturer.caption Fabricantes @@ -509,7 +318,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:8 new @@ -519,7 +327,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:12 new @@ -528,10 +335,6 @@ - - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - measurement_unit.caption Unidad de medida @@ -544,15 +347,6 @@ - - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:5 - Part-DB1\templates\_sidebar.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:8 - templates\base.html.twig:171 - templates\base.html.twig:198 - templates\base.html.twig:226 - storelocation.labelp Ubicación del almacén @@ -560,7 +354,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:32 new @@ -570,7 +363,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:36 new @@ -580,7 +372,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:16 new @@ -590,7 +381,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:20 new @@ -599,120 +389,66 @@ - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - user.edit.caption Usuarios - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - user.edit.configuration Configuración - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - user.edit.password Contraseña - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - user.edit.tfa.caption Autenticación en dos pasos - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - user.edit.tfa.google_active App de autenticación activa - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - tfa_backup.remaining_tokens Cuenta de códigos backup restantes - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - tfa_backup.generation_date Fecha de creación de los códigos backup - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - user.edit.tfa.disabled Método no habilitado - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - user.edit.tfa.u2f_keys_count Llaves de seguridad activas - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_title ¿Estás seguro de que quieres continuar? - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_message Esto deshabilitará <b>todos los métodos de autenticación en dos pasos del usuario</b> y eliminará los <b>códigos backup</b>! @@ -722,10 +458,6 @@ - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - user.edit.tfa.disable_tfa.btn Deshabilitar todos los métodos de autenticación en dos pasos @@ -733,7 +465,6 @@ - Part-DB1\templates\AdminPages\UserAdmin.html.twig:85 new @@ -743,7 +474,6 @@ - Part-DB1\templates\AdminPages\UserAdmin.html.twig:89 new @@ -752,13 +482,6 @@ - - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:63 - attachment.delete Eliminar @@ -771,102 +494,48 @@ - - Part-DB1\templates\AdminPages\_attachments.html.twig:49 - Part-DB1\templates\Parts\edit\_attachments.html.twig:47 - Part-DB1\templates\AdminPages\_attachments.html.twig:47 - Part-DB1\templates\Parts\edit\_attachments.html.twig:45 - attachment.preview.alt Miniatura del adjunto - - Part-DB1\templates\AdminPages\_attachments.html.twig:52 - Part-DB1\templates\Parts\edit\_attachments.html.twig:50 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 - Part-DB1\templates\AdminPages\_attachments.html.twig:50 - Part-DB1\templates\Parts\edit\_attachments.html.twig:48 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:45 - attachment.view_local Ver copia local - - Part-DB1\templates\AdminPages\_attachments.html.twig:58 - Part-DB1\templates\Parts\edit\_attachments.html.twig:56 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:43 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - Part-DB1\templates\AdminPages\_attachments.html.twig:56 - Part-DB1\templates\Parts\edit\_attachments.html.twig:54 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:38 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - attachment.file_not_found Archivo no encontrado - - Part-DB1\templates\AdminPages\_attachments.html.twig:66 - Part-DB1\templates\Parts\edit\_attachments.html.twig:64 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:48 - Part-DB1\templates\Parts\edit\_attachments.html.twig:62 - attachment.secure Adjunto privado - - Part-DB1\templates\AdminPages\_attachments.html.twig:79 - Part-DB1\templates\Parts\edit\_attachments.html.twig:77 - Part-DB1\templates\AdminPages\_attachments.html.twig:77 - Part-DB1\templates\Parts\edit\_attachments.html.twig:75 - attachment.create Añadir adjunto - - Part-DB1\templates\AdminPages\_attachments.html.twig:84 - Part-DB1\templates\Parts\edit\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - Part-DB1\templates\AdminPages\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_attachments.html.twig:80 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - part_lot.edit.delete.confirm ¿Estás seguro de que quieres eliminar este stock? ¡No se puede deshacer! - - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - templates\AdminPages\_delete_form.html.twig:2 - entity.delete.confirm_title ¿Estás seguro de que quieres eliminar %name%? - - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - templates\AdminPages\_delete_form.html.twig:3 - entity.delete.message ¡No se puede deshacer! @@ -875,11 +544,6 @@ Subelementos serán desplazados hacia arriba. - - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - templates\AdminPages\_delete_form.html.twig:9 - entity.delete Eliminar elemento @@ -887,12 +551,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:45 - Part-DB1\src\Form\Part\PartBaseType.php:286 - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:43 - Part-DB1\src\Form\Part\PartBaseType.php:267 new @@ -901,561 +559,300 @@ Subelementos serán desplazados hacia arriba. - - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - templates\AdminPages\_delete_form.html.twig:12 - entity.delete.recursive Eliminar recursivamente (todos los subelementos) - - Part-DB1\templates\AdminPages\_duplicate.html.twig:3 - entity.duplicate Duplicar elemento - - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - templates\AdminPages\_export_form.html.twig:4 - src\Form\ImportType.php:67 - export.format Formato de archivo - - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - templates\AdminPages\_export_form.html.twig:16 - export.level Nivel de verbosidad - - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - templates\AdminPages\_export_form.html.twig:19 - export.level.simple Simple - - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - templates\AdminPages\_export_form.html.twig:20 - export.level.extended Extendido - - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - templates\AdminPages\_export_form.html.twig:21 - export.level.full Completo - - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - templates\AdminPages\_export_form.html.twig:31 - export.include_children Incluir elementos hijo en la exportación - - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - templates\AdminPages\_export_form.html.twig:39 - export.btn Exportar - - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - templates\AdminPages\EntityAdminBase.html.twig:94 - templates\Parts\edit_part_info.html.twig:12 - templates\Parts\show_part_info.html.twig:11 - id.label ID - - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:76 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:77 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:77 - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:59 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:60 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:53 - templates\AdminPages\EntityAdminBase.html.twig:101 - templates\Parts\show_part_info.html.twig:248 - createdAt Creado en - - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:73 - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:49 - templates\AdminPages\EntityAdminBase.html.twig:114 - templates\Parts\show_part_info.html.twig:263 - lastModified Última modificación - - Part-DB1\templates\AdminPages\_info.html.twig:38 - Part-DB1\templates\AdminPages\_info.html.twig:38 - entity.info.parts_count Número de componentes de este elemento - - Part-DB1\templates\AdminPages\_parameters.html.twig:6 - Part-DB1\templates\helper.twig:125 - Part-DB1\templates\Parts\edit\_specifications.html.twig:6 - specifications.property Parámetro - - Part-DB1\templates\AdminPages\_parameters.html.twig:7 - Part-DB1\templates\Parts\edit\_specifications.html.twig:7 - specifications.symbol Símbolo - - Part-DB1\templates\AdminPages\_parameters.html.twig:8 - Part-DB1\templates\Parts\edit\_specifications.html.twig:8 - specifications.value_min Min. - - Part-DB1\templates\AdminPages\_parameters.html.twig:9 - Part-DB1\templates\Parts\edit\_specifications.html.twig:9 - specifications.value_typ Typ. - - Part-DB1\templates\AdminPages\_parameters.html.twig:10 - Part-DB1\templates\Parts\edit\_specifications.html.twig:10 - specifications.value_max Max. - - Part-DB1\templates\AdminPages\_parameters.html.twig:11 - Part-DB1\templates\Parts\edit\_specifications.html.twig:11 - specifications.unit Unidad - - Part-DB1\templates\AdminPages\_parameters.html.twig:12 - Part-DB1\templates\Parts\edit\_specifications.html.twig:12 - specifications.text Texto - - Part-DB1\templates\AdminPages\_parameters.html.twig:13 - Part-DB1\templates\Parts\edit\_specifications.html.twig:13 - specifications.group Grupo - - Part-DB1\templates\AdminPages\_parameters.html.twig:26 - Part-DB1\templates\Parts\edit\_specifications.html.twig:26 - specification.create Nuevo parámetro - - Part-DB1\templates\AdminPages\_parameters.html.twig:31 - Part-DB1\templates\Parts\edit\_specifications.html.twig:31 - parameter.delete.confirm ¿Estás seguro de que quieres eliminar este parámetro? - - Part-DB1\templates\attachment_list.html.twig:3 - Part-DB1\templates\attachment_list.html.twig:3 - attachment.list.title Lista de adjuntos - - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - part_list.loading.caption Cargando - - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - part_list.loading.message Esto puede llevar unos instantes. Si este mensaje no desaparece, prueba a refrescar la página. - - Part-DB1\templates\base.html.twig:68 - Part-DB1\templates\base.html.twig:68 - templates\base.html.twig:246 - vendor.base.javascript_hint ¡Por favor, activa Javascript para poder usar todas las funciones! - - Part-DB1\templates\base.html.twig:73 - Part-DB1\templates\base.html.twig:73 - sidebar.big.toggle Mostrar/Esconder barra lateral - - Part-DB1\templates\base.html.twig:95 - Part-DB1\templates\base.html.twig:95 - templates\base.html.twig:271 - loading.caption Cargando: - - Part-DB1\templates\base.html.twig:96 - Part-DB1\templates\base.html.twig:96 - templates\base.html.twig:272 - loading.message Esto puede llevar un rato. Si este mensaje tarda mucho en desaparecer, prueba a refrescar la página. - - Part-DB1\templates\base.html.twig:101 - Part-DB1\templates\base.html.twig:101 - templates\base.html.twig:277 - loading.bar Cargando... - - Part-DB1\templates\base.html.twig:112 - Part-DB1\templates\base.html.twig:112 - templates\base.html.twig:288 - back_to_top Volver al inicio de la página - - Part-DB1\templates\Form\permissionLayout.html.twig:35 - Part-DB1\templates\Form\permissionLayout.html.twig:35 - permission.edit.permission Permisos - - Part-DB1\templates\Form\permissionLayout.html.twig:36 - Part-DB1\templates\Form\permissionLayout.html.twig:36 - permission.edit.value Valor - - Part-DB1\templates\Form\permissionLayout.html.twig:53 - Part-DB1\templates\Form\permissionLayout.html.twig:53 - permission.legend.title Explicación de los estados - - Part-DB1\templates\Form\permissionLayout.html.twig:57 - Part-DB1\templates\Form\permissionLayout.html.twig:57 - permission.legend.disallow Prohibido - - Part-DB1\templates\Form\permissionLayout.html.twig:61 - Part-DB1\templates\Form\permissionLayout.html.twig:61 - permission.legend.allow Autorizado - - Part-DB1\templates\Form\permissionLayout.html.twig:65 - Part-DB1\templates\Form\permissionLayout.html.twig:65 - permission.legend.inherit Heredar de grupo padre - - Part-DB1\templates\helper.twig:3 - Part-DB1\templates\helper.twig:3 - bool.true Verdadero - - Part-DB1\templates\helper.twig:5 - Part-DB1\templates\helper.twig:5 - bool.false Falso - - Part-DB1\templates\helper.twig:92 - Part-DB1\templates\helper.twig:87 - Yes - - Part-DB1\templates\helper.twig:94 - Part-DB1\templates\helper.twig:89 - No No - - Part-DB1\templates\helper.twig:126 - specifications.value Valor - - Part-DB1\templates\homepage.html.twig:7 - Part-DB1\templates\homepage.html.twig:7 - templates\homepage.html.twig:7 - version.caption Versión - - Part-DB1\templates\homepage.html.twig:22 - Part-DB1\templates\homepage.html.twig:22 - templates\homepage.html.twig:19 - homepage.license Información de licencia - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.caption Página de proyecto - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.text Fuente, descargas, informes de error, listas de quehaceres etc. pueden ser encontrados en <a href="%href%" class="link-external" target="_blank">GitHub página de proyecto</a> - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.caption Ayuda - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.text Ayuda y sugerencias pueden ser encontradas en la Wiki de <a href="%href%" class="link-external" target="_blank">GitHub página</a> - - Part-DB1\templates\homepage.html.twig:33 - Part-DB1\templates\homepage.html.twig:33 - templates\homepage.html.twig:30 - homepage.forum.caption Foro @@ -1463,8 +860,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\homepage.html.twig:45 - Part-DB1\templates\homepage.html.twig:45 new @@ -1473,138 +868,90 @@ Subelementos serán desplazados hacia arriba. - - Part-DB1\templates\LabelSystem\dialog.html.twig:3 - Part-DB1\templates\LabelSystem\dialog.html.twig:6 - label_generator.title Generador de etiquetas - - Part-DB1\templates\LabelSystem\dialog.html.twig:16 - label_generator.common Común - - Part-DB1\templates\LabelSystem\dialog.html.twig:20 - label_generator.advanced Avanzado - - Part-DB1\templates\LabelSystem\dialog.html.twig:24 - label_generator.profiles Perfiles - - Part-DB1\templates\LabelSystem\dialog.html.twig:58 - label_generator.selected_profile Perfil seleccionado - - Part-DB1\templates\LabelSystem\dialog.html.twig:62 - label_generator.edit_profile Editar perfil - - Part-DB1\templates\LabelSystem\dialog.html.twig:75 - label_generator.load_profile Cargar perfil - - Part-DB1\templates\LabelSystem\dialog.html.twig:102 - label_generator.download Descargar - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:3 - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:5 - label_generator.label_btn Generar etiqueta - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:20 - label_generator.label_empty Nueva etiqueta vacía - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:3 - label_scanner.title Lector de etiquetas - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.title Webcam no encontrada - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.text Necesitas una webcam y dar permiso para utilizar la función del lector. Puedes introducir el código de barras manualmente abajo. - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:27 - label_scanner.source_select Selecciona una fuente - - Part-DB1\templates\LogSystem\log_list.html.twig:3 - Part-DB1\templates\LogSystem\log_list.html.twig:3 - log.list.title Registro de sistema @@ -1612,8 +959,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\LogSystem\_log_table.html.twig:1 - Part-DB1\templates\LogSystem\_log_table.html.twig:1 new @@ -1623,8 +968,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\LogSystem\_log_table.html.twig:2 - Part-DB1\templates\LogSystem\_log_table.html.twig:2 new @@ -1633,194 +976,114 @@ Subelementos serán desplazados hacia arriba. - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.email_sent_by Este e-mail fue enviado automáticamente por - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.dont_reply No respondas a este e-mail. - - Part-DB1\templates\mail\pw_reset.html.twig:6 - Part-DB1\templates\mail\pw_reset.html.twig:6 - email.hi %name% Hi %name% - - Part-DB1\templates\mail\pw_reset.html.twig:7 - Part-DB1\templates\mail\pw_reset.html.twig:7 - email.pw_reset.message Alguien (esperemos que tú) ha solicitado cambiar la contraseña. Si tú no lo has solicitado, ignora este email. - - Part-DB1\templates\mail\pw_reset.html.twig:9 - Part-DB1\templates\mail\pw_reset.html.twig:9 - email.pw_reset.button Pulsa aquí para restablecer la contraseña - - Part-DB1\templates\mail\pw_reset.html.twig:11 - Part-DB1\templates\mail\pw_reset.html.twig:11 - email.pw_reset.fallback Si esto no te funciona, ves a <a href="%url%">%url%</a> e introduce la siguiente información - - Part-DB1\templates\mail\pw_reset.html.twig:16 - Part-DB1\templates\mail\pw_reset.html.twig:16 - email.pw_reset.username Nombre de usuario - - Part-DB1\templates\mail\pw_reset.html.twig:19 - Part-DB1\templates\mail\pw_reset.html.twig:19 - email.pw_reset.token Token - - Part-DB1\templates\mail\pw_reset.html.twig:24 - Part-DB1\templates\mail\pw_reset.html.twig:24 - email.pw_reset.valid_unit %date% El token de reinicio será válido hasta <i>%date%</i>. - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:18 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:78 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - orderdetail.delete Eliminar - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - pricedetails.edit.min_qty Cantidad mínima de descuento - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - pricedetails.edit.price Precio - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - pricedetails.edit.price_qty Por la cantidad - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - pricedetail.create Añadir precio - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - templates\Parts\edit_part_info.html.twig:4 - part.edit.title Editar componente - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - templates\Parts\edit_part_info.html.twig:9 - part.edit.card_title Editar componente - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - part.edit.tab.common Común - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - part.edit.tab.manufacturer Fabricante - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - part.edit.tab.advanced Avanzado @@ -1887,279 +1150,156 @@ Subelementos serán desplazados hacia arriba. - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - part.edit.tab.part_lots Stock - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - part.edit.tab.attachments Adjuntos - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - part.edit.tab.orderdetails Información del pedido - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.specifications Parámetros - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:64 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.comment Notas - - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - templates\Parts\new_part.html.twig:8 - part.new.card_title Crear nuevo componente - - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - part_lot.delete Eliminar - - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - part_lot.create Añadir stock - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - orderdetail.create Añadir distribuidor - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - pricedetails.edit.delete.confirm ¿Estás seguro de que quieres eliminar este precio? No se puede deshacer. - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:62 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:61 - orderdetails.edit.delete.confirm ¿Estás seguro de que quieres eliminar la información de este distribuidor? ¡No se puede deshacer! - - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - templates\Parts\show_part_info.html.twig:4 - templates\Parts\show_part_info.html.twig:9 - part.info.title Información detallada del componente - - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - part.part_lots.label Stocks - - Part-DB1\templates\Parts\info\show_part_info.html.twig:56 - Part-DB1\templates\Parts\lists\_info_card.html.twig:43 - Part-DB1\templates\_navbar_search.html.twig:31 - Part-DB1\templates\_navbar_search.html.twig:26 - templates\base.html.twig:62 - templates\Parts\show_part_info.html.twig:74 - src\Form\PartType.php:86 - comment.label Notas - - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - part.info.specifications Parámetros - - Part-DB1\templates\Parts\info\show_part_info.html.twig:74 - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - templates\Parts\show_part_info.html.twig:82 - attachment.labelp Adjuntos - - Part-DB1\templates\Parts\info\show_part_info.html.twig:83 - Part-DB1\templates\Parts\info\show_part_info.html.twig:71 - templates\Parts\show_part_info.html.twig:88 - vendor.partinfo.shopping_infos Información de la compra - - Part-DB1\templates\Parts\info\show_part_info.html.twig:91 - Part-DB1\templates\Parts\info\show_part_info.html.twig:78 - templates\Parts\show_part_info.html.twig:94 - vendor.partinfo.history Historial - - Part-DB1\templates\Parts\info\show_part_info.html.twig:97 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - Part-DB1\templates\Parts\info\show_part_info.html.twig:84 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - templates\base.html.twig:176 - templates\base.html.twig:203 - templates\base.html.twig:217 - templates\base.html.twig:231 - templates\Parts\show_part_info.html.twig:100 - tools.label Herramientas - - Part-DB1\templates\Parts\info\show_part_info.html.twig:103 - Part-DB1\templates\Parts\info\show_part_info.html.twig:90 - extended_info.label Información adicional - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - attachment.name Nombre - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - attachment.attachment_type Tipo de archivo adjunto - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - attachment.file_name Nombre de archivo - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - attachment.file_size Tamaño de archivo - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:54 - attachment.preview Vista previa - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:67 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:50 - attachment.download_local Descargar copia en local @@ -2167,8 +1307,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 new @@ -2177,14 +1315,6 @@ Subelementos serán desplazados hacia arriba. - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Unknown Desconocido @@ -2192,10 +1322,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 new @@ -2205,8 +1331,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 new @@ -2215,49 +1339,24 @@ Subelementos serán desplazados hacia arriba. - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - part.isFavorite Favorito - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - part.minOrderAmount Cantidad mínima de pedido - - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:46 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:41 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - templates\base.html.twig:70 - templates\Parts\show_part_info.html.twig:24 - src\Form\PartType.php:80 - manufacturer.label Fabricante - - Part-DB1\templates\Parts\info\_main_infos.html.twig:24 - Part-DB1\templates\_navbar_search.html.twig:11 - templates\base.html.twig:54 - src\Form\PartType.php:62 - name.label Nombre @@ -2265,8 +1364,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 new @@ -2275,767 +1372,432 @@ Subelementos serán desplazados hacia arriba. - - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:19 - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:18 - templates\base.html.twig:58 - templates\Parts\show_part_info.html.twig:31 - src\Form\PartType.php:65 - description.label Descripción - - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:15 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:14 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - templates\base.html.twig:56 - templates\Parts\show_part_info.html.twig:32 - src\Form\PartType.php:74 - category.label Categoría - - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - templates\Parts\show_part_info.html.twig:42 - src\Form\PartType.php:69 - instock.label En stock - - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - templates\Parts\show_part_info.html.twig:44 - src\Form\PartType.php:72 - mininstock.label Stock mínimo - - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:52 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:47 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - templates\base.html.twig:73 - templates\Parts\show_part_info.html.twig:47 - footprint.label Footprint - - Part-DB1\templates\Parts\info\_main_infos.html.twig:56 - Part-DB1\templates\Parts\info\_main_infos.html.twig:59 - Part-DB1\templates\Parts\info\_main_infos.html.twig:57 - Part-DB1\templates\Parts\info\_main_infos.html.twig:60 - templates\Parts\show_part_info.html.twig:51 - part.avg_price.label Precio promedio - - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - part.supplier.name Nombre - - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - part.supplier.partnr Nº de pedido - - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - part.order.minamount Cantidad mínima - - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - part.order.price Precio - - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - part.order.single_price Precio unitario - - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - Part-DB1\templates\Parts\info\_part_lots.html.twig:6 - part_lots.description Descripción - - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - part_lots.storage_location Ubicación de almacenamiento - - Part-DB1\templates\Parts\info\_part_lots.html.twig:9 - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - part_lots.amount Cantidad - - Part-DB1\templates\Parts\info\_part_lots.html.twig:24 - Part-DB1\templates\Parts\info\_part_lots.html.twig:22 - part_lots.location_unknown Ubicación del almacén desconocida - - Part-DB1\templates\Parts\info\_part_lots.html.twig:31 - Part-DB1\templates\Parts\info\_part_lots.html.twig:29 - part_lots.instock_unknown Cantidad desconocida - - Part-DB1\templates\Parts\info\_part_lots.html.twig:40 - Part-DB1\templates\Parts\info\_part_lots.html.twig:38 - part_lots.expiration_date Fecha de vencimiento - - Part-DB1\templates\Parts\info\_part_lots.html.twig:48 - Part-DB1\templates\Parts\info\_part_lots.html.twig:46 - part_lots.is_expired Caducado - - Part-DB1\templates\Parts\info\_part_lots.html.twig:55 - Part-DB1\templates\Parts\info\_part_lots.html.twig:53 - part_lots.need_refill Necesita ser recargado - - Part-DB1\templates\Parts\info\_picture.html.twig:15 - Part-DB1\templates\Parts\info\_picture.html.twig:15 - part.info.prev_picture Imagen previa - - Part-DB1\templates\Parts\info\_picture.html.twig:19 - Part-DB1\templates\Parts\info\_picture.html.twig:19 - part.info.next_picture Siguiente imagen - - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - part.mass.tooltip Peso - - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - part.needs_review.badge Necesita revisión - - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - part.favorite.badge Favorito - - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - part.obsolete.badge No disponible - - Part-DB1\templates\Parts\info\_specifications.html.twig:10 - parameters.extracted_from_description Extraído automáticamente de la descripción - - Part-DB1\templates\Parts\info\_specifications.html.twig:15 - parameters.auto_extracted_from_comment Extraído automáticamente de las notas - - Part-DB1\templates\Parts\info\_tools.html.twig:6 - Part-DB1\templates\Parts\info\_tools.html.twig:4 - templates\Parts\show_part_info.html.twig:125 - part.edit.btn Editar componente - - Part-DB1\templates\Parts\info\_tools.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:14 - templates\Parts\show_part_info.html.twig:135 - part.clone.btn Clonar componente - - Part-DB1\templates\Parts\info\_tools.html.twig:24 - Part-DB1\templates\Parts\lists\_action_bar.html.twig:4 - templates\Parts\show_part_info.html.twig:143 - part.create.btn Crear nuevo componente - - Part-DB1\templates\Parts\info\_tools.html.twig:31 - Part-DB1\templates\Parts\info\_tools.html.twig:29 - part.delete.confirm_title ¿De verdad quieres eliminar este componente? - - Part-DB1\templates\Parts\info\_tools.html.twig:32 - Part-DB1\templates\Parts\info\_tools.html.twig:30 - part.delete.message Este componente y la información asociada (adjuntos, precio, etc.) serán eliminados. ¡Esto no se puede deshacer! - - Part-DB1\templates\Parts\info\_tools.html.twig:39 - Part-DB1\templates\Parts\info\_tools.html.twig:37 - part.delete Eliminar componente - - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - parts_list.all.title Todos los componentes - - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - parts_list.category.title Componentes con categoría - - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - parts_list.footprint.title Componentes con footprint - - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - parts_list.manufacturer.title Componentes con fabricante - - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - parts_list.search.title Buscar componentes - - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - parts_list.storelocation.title Componentes con ubicación de almacenaje - - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - parts_list.supplier.title Componentes con proveedor - - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - parts_list.tags.title Componentes con etiqueta - - Part-DB1\templates\Parts\lists\_info_card.html.twig:22 - Part-DB1\templates\Parts\lists\_info_card.html.twig:17 - entity.info.common.tab General - - Part-DB1\templates\Parts\lists\_info_card.html.twig:26 - Part-DB1\templates\Parts\lists\_info_card.html.twig:20 - entity.info.statistics.tab Estadísticas - - Part-DB1\templates\Parts\lists\_info_card.html.twig:31 - entity.info.attachments.tab Adjuntos - - Part-DB1\templates\Parts\lists\_info_card.html.twig:37 - entity.info.parameters.tab Parámetros - - Part-DB1\templates\Parts\lists\_info_card.html.twig:54 - Part-DB1\templates\Parts\lists\_info_card.html.twig:30 - entity.info.name Nombre - - Part-DB1\templates\Parts\lists\_info_card.html.twig:58 - Part-DB1\templates\Parts\lists\_info_card.html.twig:96 - Part-DB1\templates\Parts\lists\_info_card.html.twig:34 - Part-DB1\templates\Parts\lists\_info_card.html.twig:67 - entity.info.parent Padre - - Part-DB1\templates\Parts\lists\_info_card.html.twig:70 - Part-DB1\templates\Parts\lists\_info_card.html.twig:46 - entity.edit.btn Editar - - Part-DB1\templates\Parts\lists\_info_card.html.twig:92 - Part-DB1\templates\Parts\lists\_info_card.html.twig:63 - entity.info.children_count Número de elementos hijo - - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - tfa.check.title Autenticación en dos pasos requerida - - Part-DB1\templates\security\2fa_base_form.html.twig:39 - Part-DB1\templates\security\2fa_base_form.html.twig:39 - tfa.code.trusted_pc Este es un dispositivo fiable (si esto se habilita, no se realizarán más consultas en dos pasos en este dispositivo) - - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - login.btn Login - - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:42 - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:40 - user.logout Cerrar sesión - - Part-DB1\templates\security\2fa_form.html.twig:6 - Part-DB1\templates\security\2fa_form.html.twig:6 - tfa.check.code.label Código de la app de autenticación - - Part-DB1\templates\security\2fa_form.html.twig:10 - Part-DB1\templates\security\2fa_form.html.twig:10 - tfa.check.code.help Introduce tu código de seis dígitos de tu app de autenticación o de uno de tus códigos backup si el autenticador no está disponible. - - Part-DB1\templates\security\login.html.twig:3 - Part-DB1\templates\security\login.html.twig:3 - templates\security\login.html.twig:3 - login.title Login - - Part-DB1\templates\security\login.html.twig:7 - Part-DB1\templates\security\login.html.twig:7 - templates\security\login.html.twig:7 - login.card_title Login - - Part-DB1\templates\security\login.html.twig:31 - Part-DB1\templates\security\login.html.twig:31 - templates\security\login.html.twig:31 - login.username.label Nombre de usuario - - Part-DB1\templates\security\login.html.twig:34 - Part-DB1\templates\security\login.html.twig:34 - templates\security\login.html.twig:34 - login.username.placeholder Nombre de usuario - - Part-DB1\templates\security\login.html.twig:38 - Part-DB1\templates\security\login.html.twig:38 - templates\security\login.html.twig:38 - login.password.label Contraseña - - Part-DB1\templates\security\login.html.twig:40 - Part-DB1\templates\security\login.html.twig:40 - templates\security\login.html.twig:40 - login.password.placeholder Contraseña - - Part-DB1\templates\security\login.html.twig:50 - Part-DB1\templates\security\login.html.twig:50 - templates\security\login.html.twig:50 - login.rememberme Recuérdame (no aconsejado en dispositivos compartidos) - - Part-DB1\templates\security\login.html.twig:64 - Part-DB1\templates\security\login.html.twig:64 - pw_reset.password_forget ¿Has olvidado el nombre de usuario/contraseña? - - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - pw_reset.new_pw.header.title Establecer nueva contraseña - - Part-DB1\templates\security\pw_reset_request.html.twig:5 - Part-DB1\templates\security\pw_reset_request.html.twig:5 - pw_reset.request.header.title Solicitar nueva contraseña - - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - tfa_u2f.http_warning Estás accediendo a esta página usando el método inseguro HTTP, por lo que seguramente U2F no funcione correctamente (mensaje de error Bad Request). Pídele a un administrador que establezca el método seguro HTTPS si quieres utilizar claves de seguridad. - - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - r_u2f_two_factor.pressbutton ¡Por favor, introduce tu clave de seguridad y pulsa el botón! - - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - tfa_u2f.add_key.title Añadir clave de seguridad - - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - tfa_u2f.explanation Con la ayuda de una clave de seguridad U2F/FIDO compatible (e.g. YubiKey o NitroKey), se puede obtener una autentiación en dos pasos segura y fácil de usar. Las claves de seguridad pueden ser registradas aquí, y si se requiere una verificación en dos pasos, solo necesitarás insertar la clave vía USB o introducirla en el dispositivo mediante NFC. - - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - tfa_u2f.add_key.backup_hint Para garantizar el acceso incluso si has perdido la clave, ¡se recomienda registrar una segunda clave como copia de seguridad y guardarla en un lugar seguro! - - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - tfa_u2f.add_key.add_button Añadir clave de seguridad - - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - tfa_u2f.add_key.back_to_settings Volver a ajustes @@ -3043,10 +1805,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 new @@ -3056,8 +1814,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:14 - Part-DB1\templates\Statistics\statistics.html.twig:14 new @@ -3067,8 +1823,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:19 - Part-DB1\templates\Statistics\statistics.html.twig:19 new @@ -3078,8 +1832,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:24 - Part-DB1\templates\Statistics\statistics.html.twig:24 new @@ -3089,12 +1841,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 new @@ -3104,12 +1850,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 new @@ -3119,8 +1859,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:40 - Part-DB1\templates\Statistics\statistics.html.twig:40 new @@ -3130,8 +1868,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:44 - Part-DB1\templates\Statistics\statistics.html.twig:44 new @@ -3141,8 +1877,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:48 - Part-DB1\templates\Statistics\statistics.html.twig:48 new @@ -3152,8 +1886,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:65 - Part-DB1\templates\Statistics\statistics.html.twig:65 new @@ -3163,8 +1895,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:69 - Part-DB1\templates\Statistics\statistics.html.twig:69 new @@ -3174,8 +1904,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:73 - Part-DB1\templates\Statistics\statistics.html.twig:73 new @@ -3185,8 +1913,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:77 - Part-DB1\templates\Statistics\statistics.html.twig:77 new @@ -3196,8 +1922,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:81 - Part-DB1\templates\Statistics\statistics.html.twig:81 new @@ -3207,8 +1931,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:85 - Part-DB1\templates\Statistics\statistics.html.twig:85 new @@ -3218,8 +1940,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:89 - Part-DB1\templates\Statistics\statistics.html.twig:89 new @@ -3229,8 +1949,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:93 - Part-DB1\templates\Statistics\statistics.html.twig:93 new @@ -3240,8 +1958,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:110 - Part-DB1\templates\Statistics\statistics.html.twig:110 new @@ -3251,8 +1967,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:114 - Part-DB1\templates\Statistics\statistics.html.twig:114 new @@ -3262,8 +1976,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:118 - Part-DB1\templates\Statistics\statistics.html.twig:118 new @@ -3273,8 +1985,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:122 - Part-DB1\templates\Statistics\statistics.html.twig:122 new @@ -3284,8 +1994,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Statistics\statistics.html.twig:126 - Part-DB1\templates\Statistics\statistics.html.twig:126 new @@ -3294,302 +2002,156 @@ Subelementos serán desplazados hacia arriba. - - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - tfa_backup.codes.title Códigos backup - - Part-DB1\templates\Users\backup_codes.html.twig:12 - Part-DB1\templates\Users\backup_codes.html.twig:12 - tfa_backup.codes.explanation ¡Imprime estos códigos y guárdalos en un lugar seguro! - - Part-DB1\templates\Users\backup_codes.html.twig:13 - Part-DB1\templates\Users\backup_codes.html.twig:13 - tfa_backup.codes.help Si ya no tienes acceso a tu dispositivo con la app de autenticación (has perdido el teléfono, pérdida de datos, etc.) puedes usar uno de estos códigos para acceder a tu cuenta y configurar una nueva app de autenticación. Cada uno de estos códigos puede usarse una única vez. Se recomienda eliminar dichos códigos. Cualquiera con acceso a estos códigos podría acceder a tu cuenta, así que guárdalos en un lugar seguro. - - Part-DB1\templates\Users\backup_codes.html.twig:16 - Part-DB1\templates\Users\backup_codes.html.twig:16 - tfa_backup.username Nombre de usuario - - Part-DB1\templates\Users\backup_codes.html.twig:29 - Part-DB1\templates\Users\backup_codes.html.twig:29 - tfa_backup.codes.page_generated_on Página generada el %date% - - Part-DB1\templates\Users\backup_codes.html.twig:32 - Part-DB1\templates\Users\backup_codes.html.twig:32 - tfa_backup.codes.print Imprimir - - Part-DB1\templates\Users\backup_codes.html.twig:35 - Part-DB1\templates\Users\backup_codes.html.twig:35 - tfa_backup.codes.copy_clipboard Copiar al portapapeles - - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:40 - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:38 - templates\base.html.twig:99 - templates\Users\user_info.html.twig:3 - templates\Users\user_info.html.twig:6 - user.info.label Información del usuario - - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - templates\Users\user_info.html.twig:18 - src\Form\UserSettingsType.php:32 - user.firstName.label Nombre - - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - templates\Users\user_info.html.twig:24 - src\Form\UserSettingsType.php:35 - user.lastName.label Apellido - - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - templates\Users\user_info.html.twig:30 - src\Form\UserSettingsType.php:41 - user.email.label Email - - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - templates\Users\user_info.html.twig:37 - src\Form\UserSettingsType.php:38 - user.department.label Departamento - - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - templates\Users\user_info.html.twig:47 - src\Form\UserSettingsType.php:30 - user.username.label Nombre de usuario - - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - templates\Users\user_info.html.twig:53 - group.label Grupo: - - Part-DB1\templates\Users\user_info.html.twig:67 - Part-DB1\templates\Users\user_info.html.twig:67 - user.permissions Permisos - - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:39 - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:37 - templates\base.html.twig:98 - templates\Users\user_settings.html.twig:3 - templates\Users\user_settings.html.twig:6 - user.settings.label Configuración del usuario - - Part-DB1\templates\Users\user_settings.html.twig:18 - Part-DB1\templates\Users\user_settings.html.twig:18 - templates\Users\user_settings.html.twig:14 - user_settings.data.label Información personal - - Part-DB1\templates\Users\user_settings.html.twig:22 - Part-DB1\templates\Users\user_settings.html.twig:22 - templates\Users\user_settings.html.twig:18 - user_settings.configuration.label Configuración - - Part-DB1\templates\Users\user_settings.html.twig:55 - Part-DB1\templates\Users\user_settings.html.twig:55 - templates\Users\user_settings.html.twig:48 - user.settings.change_pw Restablecer contraseña - - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - user.settings.2fa_settings Autenticación en dos pasos - - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - tfa.settings.google.tab App de autenticación - - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - tfa.settings.bakup.tab Códigos backup - - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - tfa.settings.u2f.tab Claves de seguridad (U2F) - - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - tfa.settings.trustedDevices.tab Dispositivos confiables - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_title ¿Estás seguro de que quieres deshabilitar la app de autenticación? - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_message Si deshabilitas la app de autenticación, todos tus códigos backup serán eliminados, por lo que necesitarás reimprimirlos todos.<br> @@ -3597,588 +2159,324 @@ Subelementos serán desplazados hacia arriba. - - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - tfa_google.disabled_message ¡App de autenticación desactivada! - - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - tfa_google.step.download Descarga una app de autenticación (e.g. <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a> oder <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp">FreeOTP Authenticator</a>) - - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - tfa_google.step.scan Escanea el código QR adjunto con la app o introduce los datos manualmente - - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - tfa_google.step.input_code Introduce el código generado en el campo de abajo y confirma - - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - tfa_google.step.download_backup Imprime tus códigos backup y guárdalos en un lugar seguro - - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - tfa_google.manual_setup Configuración manual - - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - tfa_google.manual_setup.type Tipo - - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - tfa_google.manual_setup.username Nombre de usuario - - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - tfa_google.manual_setup.secret Secreto - - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - tfa_google.manual_setup.digit_count Número de caracteres - - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - tfa_google.enabled_message App de autenticación activada - - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - tfa_backup.disabled Códigos backup desactivados. Configura la app de autenticación para activar los códigos backup de nuevo. - - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - tfa_backup.explanation Puedes usar estos códigos backup para acceder a tu cuenta incluso si pierdes el dispositivo con la app de autenticación. Imprime los códigos y guárdalos en un lugar seguro. - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_title ¿Quieres restablecer los códigos? - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_message Esto eliminará los códigos previos y generará un nuevo conjunto de códigos. Esto no se puede deshacer. ¡Recuerda imprimir los nuevos códigos y guárdalos en un lugar seguro! - - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - tfa_backup.enabled Códigos backup activados - - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - tfa_backup.show_codes Mostrar códigos backup - - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - tfa_u2f.table_caption Claves de seguridad registradas - - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - tfa_u2f.delete_u2f.confirm_title ¿Quieres eliminar esta clave de seguridad? - - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - tfa_u2f.delete_u2f.confirm_message Si eliminas esta clave, ya no podrás iniciar sesión con esta clave. Si no quedan claves de seguridad, la autenticación en dos pasos se desactivará. - - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - tfa_u2f.keys.name Nombre de la clave - - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - tfa_u2f.keys.added_date Fecha de registro - - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - tfa_u2f.key_delete Eliminar clave - - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - tfa_u2f.no_keys_registered No hay claves registradas. - - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - tfa_u2f.add_new_key Registrar una nueva clave de seguridad - - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - tfa_trustedDevices.explanation Cuando compruebes el segundo factor, el dispositivo actual será marcado como fiable, por lo que no se necesitará comprobarlo más en el mismo dispositivo. - - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - tfa_trustedDevices.invalidate.confirm_title ¿Quieres eliminar todos los dispositivos fiables? - - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - tfa_trustedDevices.invalidate.confirm_message Tendrás que realizar de nuevo la autenticación en dos pasos en todos los dispositivos. Asegúrate de que tienes el dispositivo autenticador a mano. - - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - tfa_trustedDevices.invalidate.btn Restablecer los dispositivos fiables - - Part-DB1\templates\_navbar.html.twig:4 - Part-DB1\templates\_navbar.html.twig:4 - templates\base.html.twig:29 - sidebar.toggle Activar/desactivar la barra lateral - - Part-DB1\templates\_navbar.html.twig:22 - navbar.scanner.link Escáner - - Part-DB1\templates\_navbar.html.twig:38 - Part-DB1\templates\_navbar.html.twig:36 - templates\base.html.twig:97 - user.loggedin.label Se ha iniciado sesión como - - Part-DB1\templates\_navbar.html.twig:44 - Part-DB1\templates\_navbar.html.twig:42 - templates\base.html.twig:103 - user.login Iniciar sesión - - Part-DB1\templates\_navbar.html.twig:50 - Part-DB1\templates\_navbar.html.twig:48 - ui.toggle_darkmode Modo oscuro - - Part-DB1\templates\_navbar.html.twig:54 - Part-DB1\src\Form\UserSettingsType.php:97 - Part-DB1\templates\_navbar.html.twig:52 - Part-DB1\src\Form\UserSettingsType.php:97 - templates\base.html.twig:106 - src\Form\UserSettingsType.php:44 - user.language_select Cambiar idioma - - Part-DB1\templates\_navbar_search.html.twig:4 - Part-DB1\templates\_navbar_search.html.twig:4 - templates\base.html.twig:49 - search.options.label Opciones de búsqueda - - Part-DB1\templates\_navbar_search.html.twig:23 - tags.label Etiquetas - - Part-DB1\templates\_navbar_search.html.twig:27 - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - templates\base.html.twig:60 - templates\Parts\show_part_info.html.twig:36 - src\Form\PartType.php:77 - storelocation.label Ubicación de almacenaje - - Part-DB1\templates\_navbar_search.html.twig:36 - Part-DB1\templates\_navbar_search.html.twig:31 - templates\base.html.twig:65 - ordernumber.label.short Código del proveedor - - Part-DB1\templates\_navbar_search.html.twig:40 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - Part-DB1\templates\_navbar_search.html.twig:35 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - templates\base.html.twig:67 - supplier.label Proveedor - - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_navbar_search.html.twig:56 - templates\base.html.twig:77 - search.regexmatching Reg.Ex. Matching - - Part-DB1\templates\_sidebar.html.twig:37 - Part-DB1\templates\_sidebar.html.twig:12 - Part-DB1\templates\_sidebar.html.twig:37 - Part-DB1\templates\_sidebar.html.twig:12 - templates\base.html.twig:175 - templates\base.html.twig:189 - templates\base.html.twig:202 - templates\base.html.twig:230 - project.labelp Proyectos - - Part-DB1\templates\_sidebar.html.twig:2 - Part-DB1\templates\_sidebar.html.twig:2 - templates\base.html.twig:165 - templates\base.html.twig:192 - templates\base.html.twig:220 - actions Acciones - - Part-DB1\templates\_sidebar.html.twig:6 - Part-DB1\templates\_sidebar.html.twig:6 - templates\base.html.twig:169 - templates\base.html.twig:196 - templates\base.html.twig:224 - datasource Fuente de datos - - Part-DB1\templates\_sidebar.html.twig:10 - Part-DB1\templates\_sidebar.html.twig:10 - templates\base.html.twig:173 - templates\base.html.twig:200 - templates\base.html.twig:228 - manufacturer.labelp Fabricantes - - Part-DB1\templates\_sidebar.html.twig:11 - Part-DB1\templates\_sidebar.html.twig:11 - templates\base.html.twig:174 - templates\base.html.twig:201 - templates\base.html.twig:229 - supplier.labelp Proveedores - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:213 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:293 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:293 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:181 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:243 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:268 - attachment.download_failed Descarga fallida de adjuntos externos - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:222 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:190 - entity.edit_flash Cambios guardados con éxito. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:231 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:196 - entity.edit_flash.invalid Los cambios no han podido guardarse. ¡Por favor, comprueba la información! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:302 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:252 - entity.created_flash Elemento creado - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:308 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:258 - entity.created_flash.invalid No se ha podido crear el elemento. ¡Por favor, comprueba los datos! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:399 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:352 - src\Controller\BaseAdminController.php:154 - attachment_type.deleted ¡Elemento eliminado! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:401 - Part-DB1\src\Controller\UserController.php:109 - Part-DB1\src\Controller\UserSettingsController.php:159 - Part-DB1\src\Controller\UserSettingsController.php:193 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:354 - Part-DB1\src\Controller\UserController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:150 - Part-DB1\src\Controller\UserSettingsController.php:182 - csfr_invalid Token CSFR no válido. Por favor, refresca esta página o contacta con un administrador si este mensaje no desaparece. - - Part-DB1\src\Controller\LabelController.php:125 - label_generator.no_entities_found No se encontraron entidades que coincidan. @@ -4186,8 +2484,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Controller\LogController.php:149 - Part-DB1\src\Controller\LogController.php:154 new @@ -4197,8 +2493,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Controller\LogController.php:156 - Part-DB1\src\Controller\LogController.php:160 new @@ -4208,8 +2502,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Controller\LogController.php:176 - Part-DB1\src\Controller\LogController.php:180 new @@ -4219,8 +2511,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Controller\LogController.php:178 - Part-DB1\src\Controller\LogController.php:182 new @@ -4230,8 +2520,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Controller\LogController.php:185 - Part-DB1\src\Controller\LogController.php:189 new @@ -4241,8 +2529,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Controller\LogController.php:187 - Part-DB1\src\Controller\LogController.php:191 new @@ -4252,8 +2538,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Controller\LogController.php:194 - Part-DB1\src\Controller\LogController.php:198 new @@ -4263,8 +2547,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Controller\LogController.php:196 - Part-DB1\src\Controller\LogController.php:200 new @@ -4274,8 +2556,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Controller\LogController.php:199 - Part-DB1\src\Controller\LogController.php:203 new @@ -4284,306 +2564,168 @@ Subelementos serán desplazados hacia arriba. - - Part-DB1\src\Controller\PartController.php:182 - Part-DB1\src\Controller\PartController.php:182 - src\Controller\PartController.php:80 - part.edited_flash ¡Los cambios han sido guardados! - - Part-DB1\src\Controller\PartController.php:216 - Part-DB1\src\Controller\PartController.php:219 - part.deleted Componente eliminado con éxito. - - Part-DB1\src\Controller\PartController.php:302 - Part-DB1\src\Controller\PartController.php:277 - Part-DB1\src\Controller\PartController.php:317 - src\Controller\PartController.php:113 - src\Controller\PartController.php:142 - part.created_flash ¡Componente creado! - - Part-DB1\src\Controller\PartController.php:308 - Part-DB1\src\Controller\PartController.php:283 - part.created_flash.invalid Error durante la creación: ¡Por favor, comprueba los datos! - - Part-DB1\src\Controller\ScanController.php:68 - Part-DB1\src\Controller\ScanController.php:90 - scan.qr_not_found No se ha encontrado elemento con ese código de barras. - - Part-DB1\src\Controller\ScanController.php:71 - scan.format_unknown ¡Formato desconocido! - - Part-DB1\src\Controller\ScanController.php:86 - scan.qr_success ¡Elemento encontrado! - - Part-DB1\src\Controller\SecurityController.php:114 - Part-DB1\src\Controller\SecurityController.php:109 - pw_reset.user_or_email Nombre de usuario / Email - - Part-DB1\src\Controller\SecurityController.php:131 - Part-DB1\src\Controller\SecurityController.php:126 - pw_reset.request.success ¡La solicitud de reinicio fue exitosa! Por favor, comprueba tus emails para más instrucciones. - - Part-DB1\src\Controller\SecurityController.php:162 - Part-DB1\src\Controller\SecurityController.php:160 - pw_reset.username Nombre de usuario - - Part-DB1\src\Controller\SecurityController.php:165 - Part-DB1\src\Controller\SecurityController.php:163 - pw_reset.token Token - - Part-DB1\src\Controller\SecurityController.php:194 - Part-DB1\src\Controller\SecurityController.php:192 - pw_reset.new_pw.error ¡Nombre de usuario o token no válidos! Por favor, comprueba los datos. - - Part-DB1\src\Controller\SecurityController.php:196 - Part-DB1\src\Controller\SecurityController.php:194 - pw_reset.new_pw.success La contraseña ha sido restablecida con éxito. Puedes ahora iniciar sesión con tu nueva contraseña. - - Part-DB1\src\Controller\UserController.php:107 - Part-DB1\src\Controller\UserController.php:99 - user.edit.reset_success Todos los métodos de autenticación en dos pasos han sido desactivados. - - Part-DB1\src\Controller\UserSettingsController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:92 - tfa_backup.no_codes_enabled ¡No hay ningún código backup activado! - - Part-DB1\src\Controller\UserSettingsController.php:138 - Part-DB1\src\Controller\UserSettingsController.php:132 - tfa_u2f.u2f_delete.not_existing No existe ninguna clave de seguridad con este ID. - - Part-DB1\src\Controller\UserSettingsController.php:145 - Part-DB1\src\Controller\UserSettingsController.php:139 - tfa_u2f.u2f_delete.access_denied ¡No puedes eliminar las claves de seguridad de otros usuarios! - - Part-DB1\src\Controller\UserSettingsController.php:153 - Part-DB1\src\Controller\UserSettingsController.php:147 - tfa.u2f.u2f_delete.success La clave de seguridad ha sido eliminada con éxito. - - Part-DB1\src\Controller\UserSettingsController.php:188 - Part-DB1\src\Controller\UserSettingsController.php:180 - tfa_trustedDevice.invalidate.success Los dispositivos fiables han sido restablecidos con éxito. - - Part-DB1\src\Controller\UserSettingsController.php:235 - Part-DB1\src\Controller\UserSettingsController.php:226 - src\Controller\UserController.php:98 - user.settings.saved_flash ¡Configuración guardada! - - Part-DB1\src\Controller\UserSettingsController.php:297 - Part-DB1\src\Controller\UserSettingsController.php:288 - src\Controller\UserController.php:130 - user.settings.pw_changed_flash ¡Contraseña cambiada! - - Part-DB1\src\Controller\UserSettingsController.php:317 - Part-DB1\src\Controller\UserSettingsController.php:306 - user.settings.2fa.google.activated La app de autenticación ha sido activada con éxito. - - Part-DB1\src\Controller\UserSettingsController.php:328 - Part-DB1\src\Controller\UserSettingsController.php:315 - user.settings.2fa.google.disabled La app de autenticación ha sido desactivada con éxito. - - Part-DB1\src\Controller\UserSettingsController.php:346 - Part-DB1\src\Controller\UserSettingsController.php:332 - user.settings.2fa.backup_codes.regenerated Se han generado nuevos códigos backup con éxito. - - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - attachment.table.filesize Tamaño del archivo - - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:245 - Part-DB1\src\DataTables\PartsDataTable.php:252 - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:193 - Part-DB1\src\DataTables\PartsDataTable.php:200 - true Verdadero - - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:246 - Part-DB1\src\DataTables\PartsDataTable.php:253 - Part-DB1\src\Form\Type\SIUnitType.php:139 - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:201 - Part-DB1\src\Form\Type\SIUnitType.php:139 - false Falso - - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:128 - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:119 - log.target_deleted Eliminado @@ -4591,8 +2733,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\DataTables\Column\RevertLogColumn.php:57 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:60 new @@ -4602,8 +2742,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\DataTables\Column\RevertLogColumn.php:63 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:66 new @@ -4613,8 +2751,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\DataTables\Column\RevertLogColumn.php:83 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:86 new @@ -4623,70 +2759,42 @@ Subelementos serán desplazados hacia arriba. - - Part-DB1\src\DataTables\LogDataTable.php:173 - Part-DB1\src\DataTables\LogDataTable.php:161 - log.id ID - - Part-DB1\src\DataTables\LogDataTable.php:178 - Part-DB1\src\DataTables\LogDataTable.php:166 - log.timestamp Fecha - - Part-DB1\src\DataTables\LogDataTable.php:183 - Part-DB1\src\DataTables\LogDataTable.php:171 - log.type Evento - - Part-DB1\src\DataTables\LogDataTable.php:191 - Part-DB1\src\DataTables\LogDataTable.php:179 - log.level Nivel - - Part-DB1\src\DataTables\LogDataTable.php:200 - Part-DB1\src\DataTables\LogDataTable.php:188 - log.user Usuario - - Part-DB1\src\DataTables\LogDataTable.php:213 - Part-DB1\src\DataTables\LogDataTable.php:201 - log.target_type Tipo de objetivo - - Part-DB1\src\DataTables\LogDataTable.php:226 - Part-DB1\src\DataTables\LogDataTable.php:214 - log.target Objetivo @@ -4694,8 +2802,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\DataTables\LogDataTable.php:231 - Part-DB1\src\DataTables\LogDataTable.php:218 new @@ -4704,100 +2810,60 @@ Subelementos serán desplazados hacia arriba. - - Part-DB1\src\DataTables\PartsDataTable.php:168 - Part-DB1\src\DataTables\PartsDataTable.php:116 - part.table.name Nombre - - Part-DB1\src\DataTables\PartsDataTable.php:178 - Part-DB1\src\DataTables\PartsDataTable.php:126 - part.table.id Id - - Part-DB1\src\DataTables\PartsDataTable.php:182 - Part-DB1\src\DataTables\PartsDataTable.php:130 - part.table.description Descripción - - Part-DB1\src\DataTables\PartsDataTable.php:185 - Part-DB1\src\DataTables\PartsDataTable.php:133 - part.table.category Categoría - - Part-DB1\src\DataTables\PartsDataTable.php:190 - Part-DB1\src\DataTables\PartsDataTable.php:138 - part.table.footprint Footprint - - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:142 - part.table.manufacturer Fabricante - - Part-DB1\src\DataTables\PartsDataTable.php:197 - Part-DB1\src\DataTables\PartsDataTable.php:145 - part.table.storeLocations Ubicación de almacenaje - - Part-DB1\src\DataTables\PartsDataTable.php:216 - Part-DB1\src\DataTables\PartsDataTable.php:164 - part.table.amount Cantidad - - Part-DB1\src\DataTables\PartsDataTable.php:224 - Part-DB1\src\DataTables\PartsDataTable.php:172 - part.table.minamount Cantidad mínima - - Part-DB1\src\DataTables\PartsDataTable.php:232 - Part-DB1\src\DataTables\PartsDataTable.php:180 - part.table.partUnit Unidad de Medida @@ -4810,864 +2876,522 @@ Subelementos serán desplazados hacia arriba. - - Part-DB1\src\DataTables\PartsDataTable.php:236 - Part-DB1\src\DataTables\PartsDataTable.php:184 - part.table.addedDate Creado en - - Part-DB1\src\DataTables\PartsDataTable.php:240 - Part-DB1\src\DataTables\PartsDataTable.php:188 - part.table.lastModified Última edición - - Part-DB1\src\DataTables\PartsDataTable.php:244 - Part-DB1\src\DataTables\PartsDataTable.php:192 - part.table.needsReview Necesita revisión - - Part-DB1\src\DataTables\PartsDataTable.php:251 - Part-DB1\src\DataTables\PartsDataTable.php:199 - part.table.favorite Favorito - - Part-DB1\src\DataTables\PartsDataTable.php:258 - Part-DB1\src\DataTables\PartsDataTable.php:206 - part.table.manufacturingStatus Estado - - Part-DB1\src\DataTables\PartsDataTable.php:260 - Part-DB1\src\DataTables\PartsDataTable.php:262 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:208 - Part-DB1\src\DataTables\PartsDataTable.php:210 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.unknown Desconocido - - Part-DB1\src\DataTables\PartsDataTable.php:263 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:211 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.announced Anunciado - - Part-DB1\src\DataTables\PartsDataTable.php:264 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.active Activo - - Part-DB1\src\DataTables\PartsDataTable.php:265 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:213 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.nrfnd No recomendado para nuevos diseños - - Part-DB1\src\DataTables\PartsDataTable.php:266 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:214 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.eol Final de vida - - Part-DB1\src\DataTables\PartsDataTable.php:267 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:215 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.discontinued Descontinuado - - Part-DB1\src\DataTables\PartsDataTable.php:271 - Part-DB1\src\DataTables\PartsDataTable.php:219 - part.table.mpn MPN - - Part-DB1\src\DataTables\PartsDataTable.php:275 - Part-DB1\src\DataTables\PartsDataTable.php:223 - part.table.mass Peso - - Part-DB1\src\DataTables\PartsDataTable.php:279 - Part-DB1\src\DataTables\PartsDataTable.php:227 - part.table.tags Etiquetas - - Part-DB1\src\DataTables\PartsDataTable.php:283 - Part-DB1\src\DataTables\PartsDataTable.php:231 - part.table.attachments Adjuntos - - Part-DB1\src\EventSubscriber\UserSystem\LoginSuccessSubscriber.php:82 - Part-DB1\src\EventSubscriber\LoginSuccessListener.php:82 - flash.login_successful Se ha iniciado sesión correctamente - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - JSON JSON - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - XML XML - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - CSV CSV - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - YAML YAML - - Part-DB1\src\Form\AdminPages\ImportType.php:124 - Part-DB1\src\Form\AdminPages\ImportType.php:124 - import.abort_on_validation.help Cuando esta opción se active, el proceso de importación será abortado si se selecciona información no válida. Si no se ha seleccionado, la información incorrecta se ignorará y el importador intentará importar el resto de elementos. - - Part-DB1\src\Form\AdminPages\ImportType.php:86 - Part-DB1\src\Form\AdminPages\ImportType.php:86 - src\Form\ImportType.php:70 - import.csv_separator Separador CSV - - Part-DB1\src\Form\AdminPages\ImportType.php:93 - Part-DB1\src\Form\AdminPages\ImportType.php:93 - src\Form\ImportType.php:72 - parent.label Elemento padre - - Part-DB1\src\Form\AdminPages\ImportType.php:101 - Part-DB1\src\Form\AdminPages\ImportType.php:101 - src\Form\ImportType.php:75 - import.file Archivo - - Part-DB1\src\Form\AdminPages\ImportType.php:111 - Part-DB1\src\Form\AdminPages\ImportType.php:111 - src\Form\ImportType.php:78 - import.preserve_children Preservar elementos hijos al importar - - Part-DB1\src\Form\AdminPages\ImportType.php:120 - Part-DB1\src\Form\AdminPages\ImportType.php:120 - src\Form\ImportType.php:80 - import.abort_on_validation Anular en caso de datos inválidos - - Part-DB1\src\Form\AdminPages\ImportType.php:132 - Part-DB1\src\Form\AdminPages\ImportType.php:132 - src\Form\ImportType.php:85 - import.btn Importar - - Part-DB1\src\Form\AttachmentFormType.php:113 - Part-DB1\src\Form\AttachmentFormType.php:109 - attachment.edit.secure_file.help Un adjunto marcado como privado solo puede ser accedido por usuarios autenticados que tengan el permiso necesario. Si esta opción es activada, ninguna miniatura será generada y el acceso al archivo será más lento. - - Part-DB1\src\Form\AttachmentFormType.php:127 - Part-DB1\src\Form\AttachmentFormType.php:123 - attachment.edit.url.help Puedes especificar una URL a un archivo externo aquí, o introducir una palabra clave para buscar recursos incorporados (p.ej. footprints) - - Part-DB1\src\Form\AttachmentFormType.php:82 - Part-DB1\src\Form\AttachmentFormType.php:79 - attachment.edit.name Nombre - - Part-DB1\src\Form\AttachmentFormType.php:85 - Part-DB1\src\Form\AttachmentFormType.php:82 - attachment.edit.attachment_type Tipo de adjunto - - Part-DB1\src\Form\AttachmentFormType.php:94 - Part-DB1\src\Form\AttachmentFormType.php:91 - attachment.edit.show_in_table Mostrar en la tabla - - Part-DB1\src\Form\AttachmentFormType.php:105 - Part-DB1\src\Form\AttachmentFormType.php:102 - attachment.edit.secure_file Adjunto privado - - Part-DB1\src\Form\AttachmentFormType.php:119 - Part-DB1\src\Form\AttachmentFormType.php:115 - attachment.edit.url URL - - Part-DB1\src\Form\AttachmentFormType.php:133 - Part-DB1\src\Form\AttachmentFormType.php:129 - attachment.edit.download_url Descargar archivo externo - - Part-DB1\src\Form\AttachmentFormType.php:146 - Part-DB1\src\Form\AttachmentFormType.php:142 - attachment.edit.file Subir archivo - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:86 - part.label Componente - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:87 - part_lot.label Lote del componente - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.none Ninguno - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.qr Código QR (recomendado) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code128 Código 128 (recomendado) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code39 Código 39 (recomendado) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code93 Código 93 - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.datamatrix Datamatrix - - Part-DB1\src\Form\LabelOptionsType.php:122 - label_options.lines_mode.html Marcador de posición - - Part-DB1\src\Form\LabelOptionsType.php:122 - label.options.lines_mode.twig Twig - - Part-DB1\src\Form\LabelOptionsType.php:126 - label_options.lines_mode.help Si aquí seleccionas Twig, el campo de contenido se interpreta como una plantilla Twig. Visita <a href="https://twig.symfony.com/doc/3.x/templates.html">Twig documentation</a> y <a href="https://docs.part-db.de/usage/labels.html#twig-mode">Wiki</a> para más información. - - Part-DB1\src\Form\LabelOptionsType.php:47 - label_options.page_size.label Tamaño de etiqueta - - Part-DB1\src\Form\LabelOptionsType.php:66 - label_options.supported_elements.label Tipo de objetivo - - Part-DB1\src\Form\LabelOptionsType.php:75 - label_options.barcode_type.label Código de barras - - Part-DB1\src\Form\LabelOptionsType.php:102 - label_profile.lines.label Contenido - - Part-DB1\src\Form\LabelOptionsType.php:111 - label_options.additional_css.label Estilos adicionales (CSS) - - Part-DB1\src\Form\LabelOptionsType.php:120 - label_options.lines_mode.label Modo parser - - Part-DB1\src\Form\LabelOptionsType.php:51 - label_options.width.placeholder Anchura - - Part-DB1\src\Form\LabelOptionsType.php:60 - label_options.height.placeholder Altura - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:49 - label_generator.target_id.range_hint Puedes especificar múltiples ID (ej. 1, 2, 3) y/o un intervalo (1-3) aquí para generar etiquetas para múltiples elementos a la vez. - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:46 - label_generator.target_id.label ID del objetivo - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:59 - label_generator.update Actualizar - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:36 - scan_dialog.input Input - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:44 - scan_dialog.submit Subir - - Part-DB1\src\Form\ParameterType.php:41 - parameters.name.placeholder p.ej. DC Current Gain - - Part-DB1\src\Form\ParameterType.php:50 - parameters.symbol.placeholder p.ej. h_{FE} - - Part-DB1\src\Form\ParameterType.php:60 - parameters.text.placeholder p.ej. Test conditions - - Part-DB1\src\Form\ParameterType.php:71 - parameters.max.placeholder p.ej. 350 - - Part-DB1\src\Form\ParameterType.php:82 - parameters.min.placeholder p.ej. 100 - - Part-DB1\src\Form\ParameterType.php:93 - parameters.typical.placeholder p.ej. 200 - - Part-DB1\src\Form\ParameterType.php:103 - parameters.unit.placeholder p.ej. V - - Part-DB1\src\Form\ParameterType.php:114 - parameter.group.placeholder p.ej. Especificaciones técnicas - - Part-DB1\src\Form\Part\OrderdetailType.php:72 - Part-DB1\src\Form\Part\OrderdetailType.php:75 - orderdetails.edit.supplierpartnr Número de componente de proveedor - - Part-DB1\src\Form\Part\OrderdetailType.php:81 - Part-DB1\src\Form\Part\OrderdetailType.php:84 - orderdetails.edit.supplier Proveedor - - Part-DB1\src\Form\Part\OrderdetailType.php:87 - Part-DB1\src\Form\Part\OrderdetailType.php:90 - orderdetails.edit.url Enlace a la oferta - - Part-DB1\src\Form\Part\OrderdetailType.php:93 - Part-DB1\src\Form\Part\OrderdetailType.php:96 - orderdetails.edit.obsolete Ya no disponible - - Part-DB1\src\Form\Part\OrderdetailType.php:75 - Part-DB1\src\Form\Part\OrderdetailType.php:78 - orderdetails.edit.supplierpartnr.placeholder p.ej. BC 547C - - Part-DB1\src\Form\Part\PartBaseType.php:101 - Part-DB1\src\Form\Part\PartBaseType.php:99 - part.edit.name Nombre - - Part-DB1\src\Form\Part\PartBaseType.php:109 - Part-DB1\src\Form\Part\PartBaseType.php:107 - part.edit.description Descripción - - Part-DB1\src\Form\Part\PartBaseType.php:120 - Part-DB1\src\Form\Part\PartBaseType.php:118 - part.edit.mininstock Stock mínimo - - Part-DB1\src\Form\Part\PartBaseType.php:129 - Part-DB1\src\Form\Part\PartBaseType.php:127 - part.edit.category Categoría - - Part-DB1\src\Form\Part\PartBaseType.php:135 - Part-DB1\src\Form\Part\PartBaseType.php:133 - part.edit.footprint Footprint - - Part-DB1\src\Form\Part\PartBaseType.php:142 - Part-DB1\src\Form\Part\PartBaseType.php:140 - part.edit.tags Etiquetas - - Part-DB1\src\Form\Part\PartBaseType.php:154 - Part-DB1\src\Form\Part\PartBaseType.php:152 - part.edit.manufacturer.label Fabricante - - Part-DB1\src\Form\Part\PartBaseType.php:161 - Part-DB1\src\Form\Part\PartBaseType.php:159 - part.edit.manufacturer_url.label Link a la página del producto - - Part-DB1\src\Form\Part\PartBaseType.php:167 - Part-DB1\src\Form\Part\PartBaseType.php:165 - part.edit.mpn Número del fabricante del componente - - Part-DB1\src\Form\Part\PartBaseType.php:173 - Part-DB1\src\Form\Part\PartBaseType.php:171 - part.edit.manufacturing_status Estado de fabricación - - Part-DB1\src\Form\Part\PartBaseType.php:181 - Part-DB1\src\Form\Part\PartBaseType.php:179 - part.edit.needs_review Necesita revisión - - Part-DB1\src\Form\Part\PartBaseType.php:189 - Part-DB1\src\Form\Part\PartBaseType.php:187 - part.edit.is_favorite Favorito - - Part-DB1\src\Form\Part\PartBaseType.php:197 - Part-DB1\src\Form\Part\PartBaseType.php:195 - part.edit.mass Peso - - Part-DB1\src\Form\Part\PartBaseType.php:203 - Part-DB1\src\Form\Part\PartBaseType.php:201 - part.edit.partUnit Unidad de medida @@ -5680,287 +3404,168 @@ Subelementos serán desplazados hacia arriba. - - Part-DB1\src\Form\Part\PartBaseType.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:210 - part.edit.comment Notas - - Part-DB1\src\Form\Part\PartBaseType.php:250 - Part-DB1\src\Form\Part\PartBaseType.php:246 - part.edit.master_attachment Vista previa - - Part-DB1\src\Form\Part\PartBaseType.php:295 - Part-DB1\src\Form\Part\PartBaseType.php:276 - src\Form\PartType.php:91 - part.edit.save Guardar cambios - - Part-DB1\src\Form\Part\PartBaseType.php:296 - Part-DB1\src\Form\Part\PartBaseType.php:277 - src\Form\PartType.php:92 - part.edit.reset Restablecer cambios - - Part-DB1\src\Form\Part\PartBaseType.php:105 - Part-DB1\src\Form\Part\PartBaseType.php:103 - part.edit.name.placeholder p.ej. BC547 - - Part-DB1\src\Form\Part\PartBaseType.php:115 - Part-DB1\src\Form\Part\PartBaseType.php:113 - part.edit.description.placeholder p.ej NPN 45V, 0,1A, 0,5W - - Part-DB1\src\Form\Part\PartBaseType.php:123 - Part-DB1\src\Form\Part\PartBaseType.php:121 - part.editmininstock.placeholder p.ej. 1 - - Part-DB1\src\Form\Part\PartLotType.php:69 - Part-DB1\src\Form\Part\PartLotType.php:69 - part_lot.edit.description Descripción - - Part-DB1\src\Form\Part\PartLotType.php:78 - Part-DB1\src\Form\Part\PartLotType.php:78 - part_lot.edit.location Ubicación de almacenaje - - Part-DB1\src\Form\Part\PartLotType.php:89 - Part-DB1\src\Form\Part\PartLotType.php:89 - part_lot.edit.amount Cantidad - - Part-DB1\src\Form\Part\PartLotType.php:98 - Part-DB1\src\Form\Part\PartLotType.php:97 - part_lot.edit.instock_unknown Cantidad desconocida - - Part-DB1\src\Form\Part\PartLotType.php:109 - Part-DB1\src\Form\Part\PartLotType.php:108 - part_lot.edit.needs_refill Necesita repuesto - - Part-DB1\src\Form\Part\PartLotType.php:120 - Part-DB1\src\Form\Part\PartLotType.php:119 - part_lot.edit.expiration_date Fecha de caducidad - - Part-DB1\src\Form\Part\PartLotType.php:128 - Part-DB1\src\Form\Part\PartLotType.php:125 - part_lot.edit.comment Comentarios - - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - perm.group.other Varios - - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - tfa_google.enable Habilitar app de autenticación - - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - tfa_google.disable Desactivar aplicación de autenticación - - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - google_confirmation Código de confirmación - - Part-DB1\src\Form\UserSettingsType.php:108 - Part-DB1\src\Form\UserSettingsType.php:108 - src\Form\UserSettingsType.php:46 - user.timezone.label Zona horaria - - Part-DB1\src\Form\UserSettingsType.php:133 - Part-DB1\src\Form\UserSettingsType.php:132 - user.currency.label Divisa preferida - - Part-DB1\src\Form\UserSettingsType.php:140 - Part-DB1\src\Form\UserSettingsType.php:139 - src\Form\UserSettingsType.php:53 - save Aplicar cambios - - Part-DB1\src\Form\UserSettingsType.php:141 - Part-DB1\src\Form\UserSettingsType.php:140 - src\Form\UserSettingsType.php:54 - reset Descartar cambios - - Part-DB1\src\Form\UserSettingsType.php:104 - Part-DB1\src\Form\UserSettingsType.php:104 - src\Form\UserSettingsType.php:45 - user_settings.language.placeholder Idioma del servidor - - Part-DB1\src\Form\UserSettingsType.php:115 - Part-DB1\src\Form\UserSettingsType.php:115 - src\Form\UserSettingsType.php:48 - user_settings.timezone.placeholder Zona horaria del servidor - - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - attachment.label Adjunto - - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - attachment_type.label Tipo de adjunto - - Part-DB1\src\Services\ElementTypeNameGenerator.php:82 - Part-DB1\src\Services\ElementTypeNameGenerator.php:82 - project.label Proyecto - - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - measurement_unit.label Unidad de medida @@ -5973,58 +3578,36 @@ Subelementos serán desplazados hacia arriba. - - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - currency.label Divisa - - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - orderdetail.label Información del pedido - - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - pricedetail.label Información del precio - - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - user.label Usuario - - Part-DB1\src\Services\ElementTypeNameGenerator.php:95 - parameter.label Parámetro - - Part-DB1\src\Services\ElementTypeNameGenerator.php:96 - label_profile.label Perfil de etiqueta @@ -6032,8 +3615,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:176 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:161 new @@ -6042,174 +3623,102 @@ Subelementos serán desplazados hacia arriba. - - Part-DB1\src\Services\MarkdownParser.php:73 - Part-DB1\src\Services\MarkdownParser.php:73 - markdown.loading Cargando markdown. Si este mensaje no desaparece, prueba a refrescar la página. - - Part-DB1\src\Services\PasswordResetManager.php:98 - Part-DB1\src\Services\PasswordResetManager.php:98 - pw_reset.email.subject Restablecer contraseña de tu cuenta Part-DB. - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - tree.tools.tools Herramientas - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:107 - src\Services\ToolsTreeBuilder.php:74 - tree.tools.edit Editar - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:110 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - src\Services\ToolsTreeBuilder.php:81 - tree.tools.show Visualizar - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:111 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - tree.tools.system Sistema - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:123 - tree.tools.tools.label_dialog Generador de etiquetas - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:130 - tree.tools.tools.label_scanner Escáner - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:149 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:126 - src\Services\ToolsTreeBuilder.php:62 - tree.tools.edit.attachment_types Tipos de adjunto - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:155 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:132 - src\Services\ToolsTreeBuilder.php:64 - tree.tools.edit.categories Categorías - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:161 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:138 - src\Services\ToolsTreeBuilder.php:66 - tree.tools.edit.projects Proyectos - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:167 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:144 - src\Services\ToolsTreeBuilder.php:68 - tree.tools.edit.suppliers Proveedores - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:173 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:150 - src\Services\ToolsTreeBuilder.php:70 - tree.tools.edit.manufacturer Fabricantes - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:179 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:156 - tree.tools.edit.storelocation Ubicaciones de almacenamiento - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:185 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:162 - tree.tools.edit.footprint Footprints - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:191 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:168 - tree.tools.edit.currency Divisas - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:174 - tree.tools.edit.measurement_unit Unidad de medida @@ -6222,40 +3731,24 @@ Subelementos serán desplazados hacia arriba. - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.edit.label_profile Perfiles de etiqueta - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:209 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:180 - tree.tools.edit.part Nuevo componente - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:226 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - src\Services\ToolsTreeBuilder.php:77 - tree.tools.show.all_parts Visualizar todos los componentes - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:232 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.show.all_attachments Adjuntos @@ -6263,8 +3756,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:239 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:210 new @@ -6273,20 +3764,12 @@ Subelementos serán desplazados hacia arriba. - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:258 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:229 - tree.tools.system.users Usuarios - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:264 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:235 - tree.tools.system.groups Grupos @@ -6294,8 +3777,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:271 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:242 new @@ -6304,11 +3785,6 @@ Subelementos serán desplazados hacia arriba. - - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - src\Services\TreeBuilder.php:124 - entity.tree.new Nuevo elemento @@ -6316,7 +3792,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 obsolete @@ -6326,8 +3801,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\templates\_navbar.html.twig:27 - templates\base.html.twig:88 obsolete @@ -6337,8 +3810,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Form\UserSettingsType.php:119 - src\Form\UserSettingsType.php:49 obsolete @@ -6348,8 +3819,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Form\UserSettingsType.php:129 - src\Form\UserSettingsType.php:50 obsolete @@ -6359,7 +3828,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:100 new obsolete @@ -6370,10 +3838,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:128 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:150 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:169 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:207 new obsolete @@ -6384,10 +3848,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:130 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:152 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:171 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:209 new obsolete @@ -6398,7 +3858,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:139 new obsolete @@ -6409,7 +3868,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:160 new obsolete @@ -6420,7 +3878,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:184 new obsolete @@ -6431,7 +3888,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:198 new obsolete @@ -6442,7 +3898,6 @@ Subelementos serán desplazados hacia arriba. - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:214 new obsolete @@ -6453,7 +3908,6 @@ Subelementos serán desplazados hacia arriba. - templates\base.html.twig:81 obsolete obsolete @@ -6464,7 +3918,6 @@ Subelementos serán desplazados hacia arriba. - templates\base.html.twig:109 obsolete obsolete @@ -6475,7 +3928,6 @@ Subelementos serán desplazados hacia arriba. - templates\base.html.twig:112 obsolete obsolete @@ -6766,7 +4218,6 @@ Subelementos serán desplazados hacia arriba. - src\Form\PartType.php:63 obsolete obsolete @@ -7439,7 +4890,6 @@ Elemento 3 - templates\Parts\show_part_info.html.twig:194 obsolete obsolete @@ -7450,7 +4900,6 @@ Elemento 3 - src\Form\PartType.php:83 obsolete obsolete @@ -12306,4 +9755,4 @@ Por favor ten en cuenta que no puedes personificar a un usuario deshabilitado. S - + \ No newline at end of file diff --git a/translations/messages.fr.xlf b/translations/messages.fr.xlf index 9492a94d..37e0d27e 100644 --- a/translations/messages.fr.xlf +++ b/translations/messages.fr.xlf @@ -2,11 +2,6 @@ - - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - attachment_type.caption Types pour fichiers joints @@ -14,7 +9,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:12 new @@ -24,7 +18,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:16 new @@ -33,45 +26,18 @@ - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - templates\AdminPages\CategoryAdmin.html.twig:4 - templates\base.html.twig:163 - templates\base.html.twig:170 - templates\base.html.twig:197 - templates\base.html.twig:225 - category.labelp Catégories - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:19 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:11 - templates\AdminPages\CategoryAdmin.html.twig:8 - admin.options Options - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - templates\AdminPages\CategoryAdmin.html.twig:9 - admin.advanced Avancé @@ -79,7 +45,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:13 new @@ -89,7 +54,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:17 new @@ -98,30 +62,18 @@ - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - currency.caption Devise - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - currency.iso_code.caption Code ISO - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - currency.symbol.caption Symbole de la devise @@ -129,7 +81,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:29 new @@ -139,7 +90,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:33 new @@ -148,89 +98,36 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Recherche - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - templates\AdminPages\EntityAdminBase.html.twig:13 - templates\base.html.twig:166 - templates\base.html.twig:193 - templates\base.html.twig:221 - expandAll Agrandir tout - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - templates\AdminPages\EntityAdminBase.html.twig:17 - templates\base.html.twig:167 - templates\base.html.twig:194 - templates\base.html.twig:222 - reduceAll Réduire tout - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - part.info.timetravel_hint C'est ainsi que le composant apparaissait avant le %timestamp%. <i>Veuillez noter que cette fonctionnalité est expérimentale, donc les infos ne sont peut-être pas correctes. </i> - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - templates\AdminPages\EntityAdminBase.html.twig:42 - standard.label Propriétés - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - templates\AdminPages\EntityAdminBase.html.twig:43 - infos.label Informations @@ -238,8 +135,6 @@ - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 new @@ -248,120 +143,66 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - templates\AdminPages\EntityAdminBase.html.twig:45 - export.label Exporter - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - templates\AdminPages\EntityAdminBase.html.twig:47 - import_export.label Importer exporter - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - mass_creation.label Création multiple - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - templates\AdminPages\EntityAdminBase.html.twig:59 - admin.common Commun - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - admin.attachments Fichiers joints - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:90 - admin.parameters Paramètres - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:179 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:167 - templates\AdminPages\EntityAdminBase.html.twig:142 - export_all.label Exporter tous les éléments - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:185 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:173 - mass_creation.help Chaque ligne sera interprétée comme le nom d'un élément qui sera créé. - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - templates\AdminPages\EntityAdminBase.html.twig:35 - edit.caption Éditer l'élément "%name" - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - templates\AdminPages\EntityAdminBase.html.twig:37 - new.caption Nouvel élément - - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - templates\base.html.twig:172 - templates\base.html.twig:199 - templates\base.html.twig:227 - footprint.labelp Empreintes @@ -369,7 +210,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:13 new @@ -379,7 +219,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:17 new @@ -388,22 +227,12 @@ - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - group.edit.caption Groupes - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - user.edit.permissions Permissions @@ -411,7 +240,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:24 new @@ -421,7 +249,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:28 new @@ -430,27 +257,18 @@ - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:4 - label_profile.caption Profil des étiquettes - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:8 - label_profile.advanced Avancé - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:9 - label_profile.comment Commentaire @@ -458,7 +276,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:55 new @@ -468,7 +285,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:59 new @@ -477,11 +293,6 @@ - - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - templates\AdminPages\ManufacturerAdmin.html.twig:4 - manufacturer.caption Fabricants @@ -489,7 +300,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:8 new @@ -499,7 +309,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:12 new @@ -508,10 +317,6 @@ - - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - measurement_unit.caption Unité de mesure @@ -524,15 +329,6 @@ - - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:5 - Part-DB1\templates\_sidebar.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:8 - templates\base.html.twig:171 - templates\base.html.twig:198 - templates\base.html.twig:226 - storelocation.labelp Emplacement de stockage @@ -540,7 +336,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:32 new @@ -550,7 +345,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:36 new @@ -560,7 +354,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:16 new @@ -570,7 +363,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:20 new @@ -579,120 +371,66 @@ - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - user.edit.caption Utilisateurs - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - user.edit.configuration Configuration - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - user.edit.password Mot de passe - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - user.edit.tfa.caption Authentification à deux facteurs - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - user.edit.tfa.google_active Application d'authentification active - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - tfa_backup.remaining_tokens Nombre de codes de secours restant - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - tfa_backup.generation_date Date de génération des codes de secours - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - user.edit.tfa.disabled Méthode désactivée - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - user.edit.tfa.u2f_keys_count Clés de sécurité actives - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_title Voulez vous vraiment poursuivre ? - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_message Cela désactivera <b> toutes les méthodes d'authentification à deux facteurs de l'utilisateur</b> et supprimera <b>les codes de secours</b>! @@ -702,10 +440,6 @@ L'utilisateur devra configurer à nouveau toutes les méthodes d'authentificatio - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - user.edit.tfa.disable_tfa.btn Désactiver toutes les méthodes d'authentification à deux facteurs @@ -713,7 +447,6 @@ L'utilisateur devra configurer à nouveau toutes les méthodes d'authentificatio - Part-DB1\templates\AdminPages\UserAdmin.html.twig:85 new @@ -723,7 +456,6 @@ L'utilisateur devra configurer à nouveau toutes les méthodes d'authentificatio - Part-DB1\templates\AdminPages\UserAdmin.html.twig:89 new @@ -732,129 +464,60 @@ L'utilisateur devra configurer à nouveau toutes les méthodes d'authentificatio - - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:63 - attachment.delete Supprimer - - Part-DB1\templates\AdminPages\_attachments.html.twig:41 - Part-DB1\templates\Parts\edit\_attachments.html.twig:38 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:35 - Part-DB1\src\DataTables\AttachmentDataTable.php:159 - Part-DB1\templates\Parts\edit\_attachments.html.twig:38 - Part-DB1\src\DataTables\AttachmentDataTable.php:159 - attachment.external Externe - - Part-DB1\templates\AdminPages\_attachments.html.twig:49 - Part-DB1\templates\Parts\edit\_attachments.html.twig:47 - Part-DB1\templates\AdminPages\_attachments.html.twig:47 - Part-DB1\templates\Parts\edit\_attachments.html.twig:45 - attachment.preview.alt Miniature du fichier joint - - Part-DB1\templates\AdminPages\_attachments.html.twig:52 - Part-DB1\templates\Parts\edit\_attachments.html.twig:50 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 - Part-DB1\templates\AdminPages\_attachments.html.twig:50 - Part-DB1\templates\Parts\edit\_attachments.html.twig:48 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:45 - attachment.view Afficher - - Part-DB1\templates\AdminPages\_attachments.html.twig:58 - Part-DB1\templates\Parts\edit\_attachments.html.twig:56 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:43 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - Part-DB1\templates\AdminPages\_attachments.html.twig:56 - Part-DB1\templates\Parts\edit\_attachments.html.twig:54 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:38 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - attachment.file_not_found Fichier introuvable - - Part-DB1\templates\AdminPages\_attachments.html.twig:66 - Part-DB1\templates\Parts\edit\_attachments.html.twig:64 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:48 - Part-DB1\templates\Parts\edit\_attachments.html.twig:62 - attachment.secure Fichier joint privé - - Part-DB1\templates\AdminPages\_attachments.html.twig:79 - Part-DB1\templates\Parts\edit\_attachments.html.twig:77 - Part-DB1\templates\AdminPages\_attachments.html.twig:77 - Part-DB1\templates\Parts\edit\_attachments.html.twig:75 - attachment.create Ajouter un fichier joint - - Part-DB1\templates\AdminPages\_attachments.html.twig:84 - Part-DB1\templates\Parts\edit\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - Part-DB1\templates\AdminPages\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_attachments.html.twig:80 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - part_lot.edit.delete.confirm Voulez vous vraiment supprimer ce stock ? Cette action ne pourra pas être annulée! - - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - templates\AdminPages\_delete_form.html.twig:2 - entity.delete.confirm_title Voulez vous vraiment supprimer %name%? - - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - templates\AdminPages\_delete_form.html.twig:3 - entity.delete.message Cette action ne pourra pas être annulée! @@ -863,11 +526,6 @@ Les sous éléments seront déplacés vers le haut. - - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - templates\AdminPages\_delete_form.html.twig:9 - entity.delete Supprimer l'élément @@ -875,12 +533,6 @@ Les sous éléments seront déplacés vers le haut. - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:45 - Part-DB1\src\Form\Part\PartBaseType.php:286 - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:43 - Part-DB1\src\Form\Part\PartBaseType.php:267 new @@ -889,331 +541,168 @@ Les sous éléments seront déplacés vers le haut. - - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - templates\AdminPages\_delete_form.html.twig:12 - entity.delete.recursive Suppression récursive (tous les sous éléments) - - Part-DB1\templates\AdminPages\_duplicate.html.twig:3 - entity.duplicate Dupliquer l’élément - - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - templates\AdminPages\_export_form.html.twig:4 - src\Form\ImportType.php:67 - export.format Format de fichier - - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - templates\AdminPages\_export_form.html.twig:16 - export.level Niveau de verbosité - - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - templates\AdminPages\_export_form.html.twig:19 - export.level.simple Simple - - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - templates\AdminPages\_export_form.html.twig:20 - export.level.extended Étendu - - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - templates\AdminPages\_export_form.html.twig:21 - export.level.full Complet - - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - templates\AdminPages\_export_form.html.twig:31 - export.include_children Exporter également les sous éléments - - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - templates\AdminPages\_export_form.html.twig:39 - export.btn Exporter - - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - templates\AdminPages\EntityAdminBase.html.twig:94 - templates\Parts\edit_part_info.html.twig:12 - templates\Parts\show_part_info.html.twig:11 - id.label ID - - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:76 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:77 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:77 - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:59 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:60 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:53 - templates\AdminPages\EntityAdminBase.html.twig:101 - templates\Parts\show_part_info.html.twig:248 - createdAt Créé le - - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:73 - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:49 - templates\AdminPages\EntityAdminBase.html.twig:114 - templates\Parts\show_part_info.html.twig:263 - lastModified Dernière modification - - Part-DB1\templates\AdminPages\_info.html.twig:38 - Part-DB1\templates\AdminPages\_info.html.twig:38 - entity.info.parts_count Nombre de composants avec cet élément - - Part-DB1\templates\AdminPages\_parameters.html.twig:6 - Part-DB1\templates\helper.twig:125 - Part-DB1\templates\Parts\edit\_specifications.html.twig:6 - specifications.property Paramètre - - Part-DB1\templates\AdminPages\_parameters.html.twig:7 - Part-DB1\templates\Parts\edit\_specifications.html.twig:7 - specifications.symbol Symbole - - Part-DB1\templates\AdminPages\_parameters.html.twig:8 - Part-DB1\templates\Parts\edit\_specifications.html.twig:8 - specifications.value_min Min. - - Part-DB1\templates\AdminPages\_parameters.html.twig:9 - Part-DB1\templates\Parts\edit\_specifications.html.twig:9 - specifications.value_typ Typ. - - Part-DB1\templates\AdminPages\_parameters.html.twig:10 - Part-DB1\templates\Parts\edit\_specifications.html.twig:10 - specifications.value_max Max. - - Part-DB1\templates\AdminPages\_parameters.html.twig:11 - Part-DB1\templates\Parts\edit\_specifications.html.twig:11 - specifications.unit Unité - - Part-DB1\templates\AdminPages\_parameters.html.twig:12 - Part-DB1\templates\Parts\edit\_specifications.html.twig:12 - specifications.text Texte - - Part-DB1\templates\AdminPages\_parameters.html.twig:13 - Part-DB1\templates\Parts\edit\_specifications.html.twig:13 - specifications.group Groupe - - Part-DB1\templates\AdminPages\_parameters.html.twig:26 - Part-DB1\templates\Parts\edit\_specifications.html.twig:26 - specification.create Nouveau paramètre - - Part-DB1\templates\AdminPages\_parameters.html.twig:31 - Part-DB1\templates\Parts\edit\_specifications.html.twig:31 - parameter.delete.confirm Souhaitez-vous vraiment supprimer ce paramètre ? - - Part-DB1\templates\attachment_list.html.twig:3 - Part-DB1\templates\attachment_list.html.twig:3 - attachment.list.title Liste des fichiers joints - - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - part_list.loading.caption Chargement - - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - part_list.loading.message Cela peut prendre un moment.Si ce message ne disparaît pas, essayez de recharger la page. - - Part-DB1\templates\base.html.twig:68 - Part-DB1\templates\base.html.twig:68 - templates\base.html.twig:246 - vendor.base.javascript_hint Activez Javascipt pour profiter de toutes les fonctionnalités! - - Part-DB1\templates\base.html.twig:73 - Part-DB1\templates\base.html.twig:73 - sidebar.big.toggle Afficher/Cacher le panneau latéral @@ -1221,230 +710,132 @@ Show/Hide sidebar - - Part-DB1\templates\base.html.twig:95 - Part-DB1\templates\base.html.twig:95 - templates\base.html.twig:271 - loading.caption Chargement: - - Part-DB1\templates\base.html.twig:96 - Part-DB1\templates\base.html.twig:96 - templates\base.html.twig:272 - loading.message Cela peut prendre un moment.Si ce message ne disparaît pas, essayez de recharger la page. - - Part-DB1\templates\base.html.twig:101 - Part-DB1\templates\base.html.twig:101 - templates\base.html.twig:277 - loading.bar Chargement... - - Part-DB1\templates\base.html.twig:112 - Part-DB1\templates\base.html.twig:112 - templates\base.html.twig:288 - back_to_top Retour en haut de page - - Part-DB1\templates\Form\permissionLayout.html.twig:35 - Part-DB1\templates\Form\permissionLayout.html.twig:35 - permission.edit.permission Permissions - - Part-DB1\templates\Form\permissionLayout.html.twig:36 - Part-DB1\templates\Form\permissionLayout.html.twig:36 - permission.edit.value Valeur - - Part-DB1\templates\Form\permissionLayout.html.twig:53 - Part-DB1\templates\Form\permissionLayout.html.twig:53 - permission.legend.title Explication des états: - - Part-DB1\templates\Form\permissionLayout.html.twig:57 - Part-DB1\templates\Form\permissionLayout.html.twig:57 - permission.legend.disallow Interdire - - Part-DB1\templates\Form\permissionLayout.html.twig:61 - Part-DB1\templates\Form\permissionLayout.html.twig:61 - permission.legend.allow Autoriser - - Part-DB1\templates\Form\permissionLayout.html.twig:65 - Part-DB1\templates\Form\permissionLayout.html.twig:65 - permission.legend.inherit Hériter du groupe (parent) - - Part-DB1\templates\helper.twig:3 - Part-DB1\templates\helper.twig:3 - bool.true Vrai - - Part-DB1\templates\helper.twig:5 - Part-DB1\templates\helper.twig:5 - bool.false Faux - - Part-DB1\templates\helper.twig:92 - Part-DB1\templates\helper.twig:87 - Yes Oui - - Part-DB1\templates\helper.twig:94 - Part-DB1\templates\helper.twig:89 - No Non - - Part-DB1\templates\helper.twig:126 - specifications.value Valeur - - Part-DB1\templates\homepage.html.twig:7 - Part-DB1\templates\homepage.html.twig:7 - templates\homepage.html.twig:7 - version.caption Version - - Part-DB1\templates\homepage.html.twig:22 - Part-DB1\templates\homepage.html.twig:22 - templates\homepage.html.twig:19 - homepage.license Information de license - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.caption Page du projet - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.text Retrouvez les téléchargements, report de bugs, to-do-list etc. sur <a href="%href%" class="link-external" target="_blank">la page du projet GitHub</a> - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.caption Aide - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.text De l'aide et des conseils sont disponibles sur le Wiki de la <a href="%href%" class="link-external" target="_blank">page GitHub</a> - - Part-DB1\templates\homepage.html.twig:33 - Part-DB1\templates\homepage.html.twig:33 - templates\homepage.html.twig:30 - homepage.forum.caption Forum @@ -1452,8 +843,6 @@ Show/Hide sidebar - Part-DB1\templates\homepage.html.twig:45 - Part-DB1\templates\homepage.html.twig:45 new @@ -1462,138 +851,90 @@ Show/Hide sidebar - - Part-DB1\templates\LabelSystem\dialog.html.twig:3 - Part-DB1\templates\LabelSystem\dialog.html.twig:6 - label_generator.title Générateur d'étiquettes - - Part-DB1\templates\LabelSystem\dialog.html.twig:16 - label_generator.common Commun - - Part-DB1\templates\LabelSystem\dialog.html.twig:20 - label_generator.advanced Avancé - - Part-DB1\templates\LabelSystem\dialog.html.twig:24 - label_generator.profiles Profils - - Part-DB1\templates\LabelSystem\dialog.html.twig:58 - label_generator.selected_profile Profil actuellement sélectionné - - Part-DB1\templates\LabelSystem\dialog.html.twig:62 - label_generator.edit_profile Modifier le profil - - Part-DB1\templates\LabelSystem\dialog.html.twig:75 - label_generator.load_profile Charger le profil - - Part-DB1\templates\LabelSystem\dialog.html.twig:102 - label_generator.download Télécharger - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:3 - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:5 - label_generator.label_btn Générer une étiquette - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:20 - label_generator.label_empty Nouvelle étiquette vide - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:3 - label_scanner.title Lecteur d'étiquettes - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.title Aucune webcam trouvée - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.text Vous devez disposer d'une webcam et donner l'autorisation d'utiliser la fonction de scanner. Vous pouvez entrer le code à barres manuellement ci-dessous. - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:27 - label_scanner.source_select Sélectionnez une source - - Part-DB1\templates\LogSystem\log_list.html.twig:3 - Part-DB1\templates\LogSystem\log_list.html.twig:3 - log.list.title Journal système @@ -1601,8 +942,6 @@ Show/Hide sidebar - Part-DB1\templates\LogSystem\_log_table.html.twig:1 - Part-DB1\templates\LogSystem\_log_table.html.twig:1 new @@ -1612,8 +951,6 @@ Show/Hide sidebar - Part-DB1\templates\LogSystem\_log_table.html.twig:2 - Part-DB1\templates\LogSystem\_log_table.html.twig:2 new @@ -1622,194 +959,114 @@ Show/Hide sidebar - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.email_sent_by Cet email a été envoyé automatiquement par - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.dont_reply Ne répondez pas à cet email. - - Part-DB1\templates\mail\pw_reset.html.twig:6 - Part-DB1\templates\mail\pw_reset.html.twig:6 - email.hi %name% Bonjour %name% - - Part-DB1\templates\mail\pw_reset.html.twig:7 - Part-DB1\templates\mail\pw_reset.html.twig:7 - email.pw_reset.message Quelqu’un (surement vous) a demandé une réinitialisation de votre mot de passe.Si ce n'est pas le cas, ignorez simplement cet email. - - Part-DB1\templates\mail\pw_reset.html.twig:9 - Part-DB1\templates\mail\pw_reset.html.twig:9 - email.pw_reset.button Cliquez ici pour réinitialiser votre mot de passe - - Part-DB1\templates\mail\pw_reset.html.twig:11 - Part-DB1\templates\mail\pw_reset.html.twig:11 - email.pw_reset.fallback Si cela ne fonctionne pas pour vous, allez à <a href="%url%">%url%</a> et entrez les informations suivantes - - Part-DB1\templates\mail\pw_reset.html.twig:16 - Part-DB1\templates\mail\pw_reset.html.twig:16 - email.pw_reset.username Nom d'utilisateur - - Part-DB1\templates\mail\pw_reset.html.twig:19 - Part-DB1\templates\mail\pw_reset.html.twig:19 - email.pw_reset.token Jeton - - Part-DB1\templates\mail\pw_reset.html.twig:24 - Part-DB1\templates\mail\pw_reset.html.twig:24 - email.pw_reset.valid_unit %date% Le jeton de réinitialisation sera valable jusqu'au <i>%date%</i>. - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:18 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:78 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - orderdetail.delete Supprimer - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - pricedetails.edit.min_qty Quantité minimale de commande - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - pricedetails.edit.price Prix - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - pricedetails.edit.price_qty Pour la quantité - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - pricedetail.create Ajouter prix - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - templates\Parts\edit_part_info.html.twig:4 - part.edit.title Éditer le composant - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - templates\Parts\edit_part_info.html.twig:9 - part.edit.card_title Éditer le composant - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - part.edit.tab.common Général - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - part.edit.tab.manufacturer Fabricant - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - part.edit.tab.advanced Avancé @@ -1876,279 +1133,156 @@ Show/Hide sidebar - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - part.edit.tab.part_lots Stocks - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - part.edit.tab.attachments Fichiers joints - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - part.edit.tab.orderdetails Informations pour la commande - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.specifications Caractéristiques - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:64 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.comment Commentaire - - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - templates\Parts\new_part.html.twig:8 - part.new.card_title Créer un nouveau composant - - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - part_lot.delete Supprimer - - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - part_lot.create Créer un inventaire - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - orderdetail.create Ajouter un fournisseur - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - pricedetails.edit.delete.confirm Voulez-vous vraiment supprimer ce prix ? Cela ne peut pas être défait ! - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:62 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:61 - orderdetails.edit.delete.confirm Voulez-vous vraiment supprimer ce fournisseur ? Cela ne peut pas être défait ! - - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - templates\Parts\show_part_info.html.twig:4 - templates\Parts\show_part_info.html.twig:9 - part.info.title Informations détaillées pour - - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - part.part_lots.label Stocks - - Part-DB1\templates\Parts\info\show_part_info.html.twig:56 - Part-DB1\templates\Parts\lists\_info_card.html.twig:43 - Part-DB1\templates\_navbar_search.html.twig:31 - Part-DB1\templates\_navbar_search.html.twig:26 - templates\base.html.twig:62 - templates\Parts\show_part_info.html.twig:74 - src\Form\PartType.php:86 - comment.label Commentaire - - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - part.info.specifications Caractéristiques - - Part-DB1\templates\Parts\info\show_part_info.html.twig:74 - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - templates\Parts\show_part_info.html.twig:82 - attachment.labelp Fichiers joints - - Part-DB1\templates\Parts\info\show_part_info.html.twig:83 - Part-DB1\templates\Parts\info\show_part_info.html.twig:71 - templates\Parts\show_part_info.html.twig:88 - vendor.partinfo.shopping_infos Informations de commande - - Part-DB1\templates\Parts\info\show_part_info.html.twig:91 - Part-DB1\templates\Parts\info\show_part_info.html.twig:78 - templates\Parts\show_part_info.html.twig:94 - vendor.partinfo.history Historique - - Part-DB1\templates\Parts\info\show_part_info.html.twig:97 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - Part-DB1\templates\Parts\info\show_part_info.html.twig:84 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - templates\base.html.twig:176 - templates\base.html.twig:203 - templates\base.html.twig:217 - templates\base.html.twig:231 - templates\Parts\show_part_info.html.twig:100 - tools.label Outils - - Part-DB1\templates\Parts\info\show_part_info.html.twig:103 - Part-DB1\templates\Parts\info\show_part_info.html.twig:90 - extended_info.label Informations complémentaires - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - attachment.name Nom - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - attachment.attachment_type Type de fichier joint - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - attachment.file_name Nom du fichier - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - attachment.file_size Taille du fichier - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:54 - attachment.preview Aperçu de l'image - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:67 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:50 - attachment.download Téléchargement @@ -2156,8 +1290,6 @@ Show/Hide sidebar - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 new @@ -2166,14 +1298,6 @@ Show/Hide sidebar - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Unknown Inconnu @@ -2181,10 +1305,6 @@ Show/Hide sidebar - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 new @@ -2194,8 +1314,6 @@ Show/Hide sidebar - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 new @@ -2204,49 +1322,24 @@ Show/Hide sidebar - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - part.isFavorite Favoris - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - part.minOrderAmount Quantité minimale de commande - - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:46 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:41 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - templates\base.html.twig:70 - templates\Parts\show_part_info.html.twig:24 - src\Form\PartType.php:80 - manufacturer.label Fabricant - - Part-DB1\templates\Parts\info\_main_infos.html.twig:24 - Part-DB1\templates\_navbar_search.html.twig:11 - templates\base.html.twig:54 - src\Form\PartType.php:62 - name.label Nom @@ -2254,8 +1347,6 @@ Show/Hide sidebar - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 new @@ -2264,767 +1355,432 @@ Show/Hide sidebar - - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:19 - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:18 - templates\base.html.twig:58 - templates\Parts\show_part_info.html.twig:31 - src\Form\PartType.php:65 - description.label Description - - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:15 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:14 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - templates\base.html.twig:56 - templates\Parts\show_part_info.html.twig:32 - src\Form\PartType.php:74 - category.label Catégorie - - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - templates\Parts\show_part_info.html.twig:42 - src\Form\PartType.php:69 - instock.label En stock - - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - templates\Parts\show_part_info.html.twig:44 - src\Form\PartType.php:72 - mininstock.label Stock minimum - - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:52 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:47 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - templates\base.html.twig:73 - templates\Parts\show_part_info.html.twig:47 - footprint.label Empreinte - - Part-DB1\templates\Parts\info\_main_infos.html.twig:56 - Part-DB1\templates\Parts\info\_main_infos.html.twig:59 - Part-DB1\templates\Parts\info\_main_infos.html.twig:57 - Part-DB1\templates\Parts\info\_main_infos.html.twig:60 - templates\Parts\show_part_info.html.twig:51 - part.avg_price.label Prix moyen - - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - part.supplier.name Nom - - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - part.supplier.partnr Lien/Code cmd. - - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - part.order.minamount Nombre minimum - - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - part.order.price Prix - - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - part.order.single_price Prix unitaire - - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - Part-DB1\templates\Parts\info\_part_lots.html.twig:6 - part_lots.description Description - - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - part_lots.storage_location Emplacement de stockage - - Part-DB1\templates\Parts\info\_part_lots.html.twig:9 - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - part_lots.amount Quantité - - Part-DB1\templates\Parts\info\_part_lots.html.twig:24 - Part-DB1\templates\Parts\info\_part_lots.html.twig:22 - part_lots.location_unknown Emplacement de stockage inconnu - - Part-DB1\templates\Parts\info\_part_lots.html.twig:31 - Part-DB1\templates\Parts\info\_part_lots.html.twig:29 - part_lots.instock_unknown Quantité inconnue - - Part-DB1\templates\Parts\info\_part_lots.html.twig:40 - Part-DB1\templates\Parts\info\_part_lots.html.twig:38 - part_lots.expiration_date Date d'expiration - - Part-DB1\templates\Parts\info\_part_lots.html.twig:48 - Part-DB1\templates\Parts\info\_part_lots.html.twig:46 - part_lots.is_expired Expiré - - Part-DB1\templates\Parts\info\_part_lots.html.twig:55 - Part-DB1\templates\Parts\info\_part_lots.html.twig:53 - part_lots.need_refill Doit être rempli à nouveau - - Part-DB1\templates\Parts\info\_picture.html.twig:15 - Part-DB1\templates\Parts\info\_picture.html.twig:15 - part.info.prev_picture Image précédente - - Part-DB1\templates\Parts\info\_picture.html.twig:19 - Part-DB1\templates\Parts\info\_picture.html.twig:19 - part.info.next_picture Image suivante - - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - part.mass.tooltip Poids - - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - part.needs_review.badge Révision nécessaire - - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - part.favorite.badge Favoris - - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - part.obsolete.badge N'est plus disponible - - Part-DB1\templates\Parts\info\_specifications.html.twig:10 - parameters.extracted_from_description Automatiquement extrait de la description - - Part-DB1\templates\Parts\info\_specifications.html.twig:15 - parameters.auto_extracted_from_comment Automatiquement extrait du commentaire - - Part-DB1\templates\Parts\info\_tools.html.twig:6 - Part-DB1\templates\Parts\info\_tools.html.twig:4 - templates\Parts\show_part_info.html.twig:125 - part.edit.btn Éditer - - Part-DB1\templates\Parts\info\_tools.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:14 - templates\Parts\show_part_info.html.twig:135 - part.clone.btn Duplication - - Part-DB1\templates\Parts\info\_tools.html.twig:24 - Part-DB1\templates\Parts\lists\_action_bar.html.twig:4 - templates\Parts\show_part_info.html.twig:143 - part.create.btn Créer un nouveau composant - - Part-DB1\templates\Parts\info\_tools.html.twig:31 - Part-DB1\templates\Parts\info\_tools.html.twig:29 - part.delete.confirm_title Voulez-vous vraiment supprimer ce composant ? - - Part-DB1\templates\Parts\info\_tools.html.twig:32 - Part-DB1\templates\Parts\info\_tools.html.twig:30 - part.delete.message Le composant et toutes les informations associées (stocks, fichiers joints, etc.) sont supprimés. Cela ne pourra pas être annulé. - - Part-DB1\templates\Parts\info\_tools.html.twig:39 - Part-DB1\templates\Parts\info\_tools.html.twig:37 - part.delete Supprimer le composant - - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - parts_list.all.title Tous les composants - - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - parts_list.category.title Composants avec catégorie - - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - parts_list.footprint.title Composants avec empreinte - - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - parts_list.manufacturer.title Composants avec fabricant - - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - parts_list.search.title Recherche de composants - - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - parts_list.storelocation.title Composants avec lieu de stockage - - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - parts_list.supplier.title Composants avec fournisseur - - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - parts_list.tags.title Composants avec tag - - Part-DB1\templates\Parts\lists\_info_card.html.twig:22 - Part-DB1\templates\Parts\lists\_info_card.html.twig:17 - entity.info.common.tab Général - - Part-DB1\templates\Parts\lists\_info_card.html.twig:26 - Part-DB1\templates\Parts\lists\_info_card.html.twig:20 - entity.info.statistics.tab Statistiques - - Part-DB1\templates\Parts\lists\_info_card.html.twig:31 - entity.info.attachments.tab Pièces jointes - - Part-DB1\templates\Parts\lists\_info_card.html.twig:37 - entity.info.parameters.tab Caractéristiques - - Part-DB1\templates\Parts\lists\_info_card.html.twig:54 - Part-DB1\templates\Parts\lists\_info_card.html.twig:30 - entity.info.name Nom - - Part-DB1\templates\Parts\lists\_info_card.html.twig:58 - Part-DB1\templates\Parts\lists\_info_card.html.twig:96 - Part-DB1\templates\Parts\lists\_info_card.html.twig:34 - Part-DB1\templates\Parts\lists\_info_card.html.twig:67 - entity.info.parent Parent - - Part-DB1\templates\Parts\lists\_info_card.html.twig:70 - Part-DB1\templates\Parts\lists\_info_card.html.twig:46 - entity.edit.btn Éditer - - Part-DB1\templates\Parts\lists\_info_card.html.twig:92 - Part-DB1\templates\Parts\lists\_info_card.html.twig:63 - entity.info.children_count Nombre de sous-éléments - - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - tfa.check.title Authentification à deux facteurs requise - - Part-DB1\templates\security\2fa_base_form.html.twig:39 - Part-DB1\templates\security\2fa_base_form.html.twig:39 - tfa.code.trusted_pc Il s'agit d'un ordinateur de confiance (si cette fonction est activée, aucune autre requête à deux facteurs n'est effectuée sur cet ordinateur) - - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - login.btn Connexion - - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:42 - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:40 - user.logout Déconnexion - - Part-DB1\templates\security\2fa_form.html.twig:6 - Part-DB1\templates\security\2fa_form.html.twig:6 - tfa.check.code.label Code d'application de l'authentificateur - - Part-DB1\templates\security\2fa_form.html.twig:10 - Part-DB1\templates\security\2fa_form.html.twig:10 - tfa.check.code.help Entrez le code à 6 chiffres de votre application d'authentification ou l'un de vos codes de secours si l'authentificateur n'est pas disponible. - - Part-DB1\templates\security\login.html.twig:3 - Part-DB1\templates\security\login.html.twig:3 - templates\security\login.html.twig:3 - login.title Connexion - - Part-DB1\templates\security\login.html.twig:7 - Part-DB1\templates\security\login.html.twig:7 - templates\security\login.html.twig:7 - login.card_title Connexion - - Part-DB1\templates\security\login.html.twig:31 - Part-DB1\templates\security\login.html.twig:31 - templates\security\login.html.twig:31 - login.username.label Nom d'utilisateur - - Part-DB1\templates\security\login.html.twig:34 - Part-DB1\templates\security\login.html.twig:34 - templates\security\login.html.twig:34 - login.username.placeholder Nom d'utilisateur - - Part-DB1\templates\security\login.html.twig:38 - Part-DB1\templates\security\login.html.twig:38 - templates\security\login.html.twig:38 - login.password.label Mot de passe - - Part-DB1\templates\security\login.html.twig:40 - Part-DB1\templates\security\login.html.twig:40 - templates\security\login.html.twig:40 - login.password.placeholder Mot de passe - - Part-DB1\templates\security\login.html.twig:50 - Part-DB1\templates\security\login.html.twig:50 - templates\security\login.html.twig:50 - login.rememberme Rester connecté (non recommandé sur les ordinateurs publics) - - Part-DB1\templates\security\login.html.twig:64 - Part-DB1\templates\security\login.html.twig:64 - pw_reset.password_forget Nom d'utilisateur/mot de passe oublié ? - - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - pw_reset.new_pw.header.title Définir un nouveau mot de passe - - Part-DB1\templates\security\pw_reset_request.html.twig:5 - Part-DB1\templates\security\pw_reset_request.html.twig:5 - pw_reset.request.header.title Demander un nouveau mot de passe - - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - tfa_u2f.http_warning Vous accédez à cette page en utilisant la méthode HTTP non sécurisée, donc U2F ne fonctionnera probablement pas (message d'erreur "Bad Request"). Demandez à un administrateur de mettre en place la méthode HTTPS sécurisée si vous souhaitez utiliser des clés de sécurité. - - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - r_u2f_two_factor.pressbutton Veuillez insérer la clé de sécurité et appuyer sur le bouton ! - - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - tfa_u2f.add_key.title Ajouter une clé de sécurité - - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - tfa_u2f.explanation À l'aide d'une clé de sécurité compatible U2F/FIDO (par exemple YubiKey ou NitroKey), une authentification à deux facteurs sûre et pratique peut être obtenue. Les clés de sécurité peuvent être enregistrées ici, et si une vérification à deux facteurs est nécessaire, il suffit d'insérer la clé via USB ou de la taper sur le dispositif via NFC. - - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - tfa_u2f.add_key.backup_hint Pour garantir l'accès même en cas de perte de la clé, il est recommandé d'enregistrer une deuxième clé en guise de sauvegarde et de la conserver dans un endroit sûr ! - - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - tfa_u2f.add_key.add_button Ajouter une clé de sécurité - - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - tfa_u2f.add_key.back_to_settings Retour aux paramètres @@ -3032,10 +1788,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 new @@ -3045,8 +1797,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:14 - Part-DB1\templates\Statistics\statistics.html.twig:14 new @@ -3056,8 +1806,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:19 - Part-DB1\templates\Statistics\statistics.html.twig:19 new @@ -3067,8 +1815,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:24 - Part-DB1\templates\Statistics\statistics.html.twig:24 new @@ -3078,12 +1824,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 new @@ -3093,12 +1833,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 new @@ -3108,8 +1842,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:40 - Part-DB1\templates\Statistics\statistics.html.twig:40 new @@ -3119,8 +1851,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:44 - Part-DB1\templates\Statistics\statistics.html.twig:44 new @@ -3130,8 +1860,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:48 - Part-DB1\templates\Statistics\statistics.html.twig:48 new @@ -3141,8 +1869,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:65 - Part-DB1\templates\Statistics\statistics.html.twig:65 new @@ -3152,8 +1878,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:69 - Part-DB1\templates\Statistics\statistics.html.twig:69 new @@ -3163,8 +1887,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:73 - Part-DB1\templates\Statistics\statistics.html.twig:73 new @@ -3174,8 +1896,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:77 - Part-DB1\templates\Statistics\statistics.html.twig:77 new @@ -3185,8 +1905,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:81 - Part-DB1\templates\Statistics\statistics.html.twig:81 new @@ -3196,8 +1914,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:85 - Part-DB1\templates\Statistics\statistics.html.twig:85 new @@ -3207,8 +1923,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:89 - Part-DB1\templates\Statistics\statistics.html.twig:89 new @@ -3218,8 +1932,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:93 - Part-DB1\templates\Statistics\statistics.html.twig:93 new @@ -3229,8 +1941,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:110 - Part-DB1\templates\Statistics\statistics.html.twig:110 new @@ -3240,8 +1950,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:114 - Part-DB1\templates\Statistics\statistics.html.twig:114 new @@ -3251,8 +1959,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:118 - Part-DB1\templates\Statistics\statistics.html.twig:118 new @@ -3262,8 +1968,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:122 - Part-DB1\templates\Statistics\statistics.html.twig:122 new @@ -3273,8 +1977,6 @@ Show/Hide sidebar - Part-DB1\templates\Statistics\statistics.html.twig:126 - Part-DB1\templates\Statistics\statistics.html.twig:126 new @@ -3283,302 +1985,156 @@ Show/Hide sidebar - - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - tfa_backup.codes.title Codes de secours - - Part-DB1\templates\Users\backup_codes.html.twig:12 - Part-DB1\templates\Users\backup_codes.html.twig:12 - tfa_backup.codes.explanation Imprimez ces codes et conservez-les dans un endroit sûr ! - - Part-DB1\templates\Users\backup_codes.html.twig:13 - Part-DB1\templates\Users\backup_codes.html.twig:13 - tfa_backup.codes.help Si vous n'avez plus accès à votre appareil avec l'application d'authentification (smartphone perdu, perte de données, etc.), vous pouvez utiliser un de ces codes pour accéder à votre compte et éventuellement configurer une nouvelle application d'authentification. Chacun de ces codes peut être utilisé une fois, il est recommandé de supprimer les codes utilisés. Toute personne ayant accès à ces codes peut potentiellement accéder à votre compte, alors gardez-les en lieu sûr. - - Part-DB1\templates\Users\backup_codes.html.twig:16 - Part-DB1\templates\Users\backup_codes.html.twig:16 - tfa_backup.username Nom d'utilisateur - - Part-DB1\templates\Users\backup_codes.html.twig:29 - Part-DB1\templates\Users\backup_codes.html.twig:29 - tfa_backup.codes.page_generated_on Page générée le %date% - - Part-DB1\templates\Users\backup_codes.html.twig:32 - Part-DB1\templates\Users\backup_codes.html.twig:32 - tfa_backup.codes.print Imprimer - - Part-DB1\templates\Users\backup_codes.html.twig:35 - Part-DB1\templates\Users\backup_codes.html.twig:35 - tfa_backup.codes.copy_clipboard Copier dans le presse-papier - - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:40 - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:38 - templates\base.html.twig:99 - templates\Users\user_info.html.twig:3 - templates\Users\user_info.html.twig:6 - user.info.label Informations sur l'utilisateur - - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - templates\Users\user_info.html.twig:18 - src\Form\UserSettingsType.php:32 - user.firstName.label Prénom - - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - templates\Users\user_info.html.twig:24 - src\Form\UserSettingsType.php:35 - user.lastName.label Nom - - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - templates\Users\user_info.html.twig:30 - src\Form\UserSettingsType.php:41 - user.email.label Email - - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - templates\Users\user_info.html.twig:37 - src\Form\UserSettingsType.php:38 - user.department.label Département - - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - templates\Users\user_info.html.twig:47 - src\Form\UserSettingsType.php:30 - user.username.label Nom d'utilisateur - - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - templates\Users\user_info.html.twig:53 - group.label Groupe - - Part-DB1\templates\Users\user_info.html.twig:67 - Part-DB1\templates\Users\user_info.html.twig:67 - user.permissions Autorisations - - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:39 - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:37 - templates\base.html.twig:98 - templates\Users\user_settings.html.twig:3 - templates\Users\user_settings.html.twig:6 - user.settings.label Paramètres utilisateur - - Part-DB1\templates\Users\user_settings.html.twig:18 - Part-DB1\templates\Users\user_settings.html.twig:18 - templates\Users\user_settings.html.twig:14 - user_settings.data.label Données personnelles - - Part-DB1\templates\Users\user_settings.html.twig:22 - Part-DB1\templates\Users\user_settings.html.twig:22 - templates\Users\user_settings.html.twig:18 - user_settings.configuration.label Configuration - - Part-DB1\templates\Users\user_settings.html.twig:55 - Part-DB1\templates\Users\user_settings.html.twig:55 - templates\Users\user_settings.html.twig:48 - user.settings.change_pw Changer de mot de passe - - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - user.settings.2fa_settings Authentification à deux facteurs - - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - tfa.settings.google.tab Application d'authentification - - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - tfa.settings.bakup.tab Codes de secours - - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - tfa.settings.u2f.tab Clés de sécurité (U2F) - - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - tfa.settings.trustedDevices.tab Appareils de confiance - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_title Voulez-vous vraiment désactiver l'application d'authentification ? - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_message Si vous désactivez l'application d'authentification, tous les codes de sauvegarde seront supprimés, vous devrez donc peut-être les réimprimer.<br> @@ -3586,262 +2142,156 @@ Notez également que sans authentification à deux facteurs, votre compte n'est - - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - tfa_google.disabled_message Application d'authentification désactivée - - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - tfa_google.step.download Télécharger une application d'authentification (par exemple <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Authentificateur Google</a> ou <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp">Authentificateur FreeOTP</a>) - - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - tfa_google.step.scan Scannez le QR code adjacent avec l'application ou saisissez les données manuellement - - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - tfa_google.step.input_code Entrez le code généré dans le champ ci-dessous et confirmez - - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - tfa_google.step.download_backup Imprimez vos codes de secours et conservez-les dans un endroit sûr - - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - tfa_google.manual_setup Configuration manuelle - - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - tfa_google.manual_setup.type Type - - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - tfa_google.manual_setup.username Nom d'utilisateur - - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - tfa_google.manual_setup.secret Secret - - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - tfa_google.manual_setup.digit_count Nombre de caractères - - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - tfa_google.enabled_message Application d'authentification activée - - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - tfa_backup.disabled Codes de secours désactivés. Configurez l'application d'authentification pour activer les codes de secours. - - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - tfa_backup.explanation Grâce à ces codes de secours, vous pouvez accéder à votre compte même si vous perdez l'appareil avec l'application d'authentification. Imprimez les codes et conservez-les dans un endroit sûr. - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_title Etes vous sûr de vouloir réinitialiser les codes ? - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_message Cela permettra de supprimer tous les codes précédents et de générer un ensemble de nouveaux codes. Cela ne peut pas être annulé. N'oubliez pas d'imprimer les nouveaux codes et de les conserver dans un endroit sûr ! - - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - tfa_backup.enabled Codes de secours activés - - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - tfa_backup.show_codes Afficher les codes de secours - - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - tfa_u2f.table_caption Clés de sécurité enregistrées - - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - tfa_u2f.delete_u2f.confirm_title Etes vous sûr de vouloir supprimer cette clé de sécurité ? - - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - tfa_u2f.delete_u2f.confirm_message Si vous supprimez cette clé, il ne sera plus possible de se connecter avec cette clé. S'il ne reste aucune clé de sécurité, l'authentification à deux facteurs sera désactivée. - - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - tfa_u2f.keys.name Nom de la clé - - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - tfa_u2f.keys.added_date Date d'enregistrement - - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - tfa_u2f.key_delete Supprimer la clé - - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - tfa_u2f.no_keys_registered Aucune clé de sécurité enregistrée - - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - tfa_u2f.add_new_key Enregistrer une nouvelle clé de sécurité - - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - tfa_trustedDevices.explanation Lors de la vérification du deuxième facteur, l'ordinateur actuel peut être marqué comme étant digne de confiance, de sorte qu'il n'est plus nécessaire de procéder à des vérifications à deux facteurs sur cet ordinateur. @@ -3849,310 +2299,162 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - tfa_trustedDevices.invalidate.confirm_title Etes vous sûr de vouloir supprimer tous les ordinateurs de confiance ? - - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - tfa_trustedDevices.invalidate.confirm_message Vous devrez à nouveau procéder à une authentification à deux facteurs sur tous les ordinateurs. Assurez-vous d'avoir votre appareil à deux facteurs à portée de main. - - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - tfa_trustedDevices.invalidate.btn Supprimer tous les dispositifs de confiance - - Part-DB1\templates\_navbar.html.twig:4 - Part-DB1\templates\_navbar.html.twig:4 - templates\base.html.twig:29 - sidebar.toggle Activer/désactiver la barre latérale - - Part-DB1\templates\_navbar.html.twig:22 - navbar.scanner.link Scanner - - Part-DB1\templates\_navbar.html.twig:38 - Part-DB1\templates\_navbar.html.twig:36 - templates\base.html.twig:97 - user.loggedin.label Connecté en tant que - - Part-DB1\templates\_navbar.html.twig:44 - Part-DB1\templates\_navbar.html.twig:42 - templates\base.html.twig:103 - user.login Connexion - - Part-DB1\templates\_navbar.html.twig:50 - Part-DB1\templates\_navbar.html.twig:48 - ui.toggle_darkmode Darkmode - - Part-DB1\templates\_navbar.html.twig:54 - Part-DB1\src\Form\UserSettingsType.php:97 - Part-DB1\templates\_navbar.html.twig:52 - Part-DB1\src\Form\UserSettingsType.php:97 - templates\base.html.twig:106 - src\Form\UserSettingsType.php:44 - user.language_select Langue - - Part-DB1\templates\_navbar_search.html.twig:4 - Part-DB1\templates\_navbar_search.html.twig:4 - templates\base.html.twig:49 - search.options.label Options de recherche - - Part-DB1\templates\_navbar_search.html.twig:23 - tags.label Tags - - Part-DB1\templates\_navbar_search.html.twig:27 - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - templates\base.html.twig:60 - templates\Parts\show_part_info.html.twig:36 - src\Form\PartType.php:77 - storelocation.label Emplacement de stockage - - Part-DB1\templates\_navbar_search.html.twig:36 - Part-DB1\templates\_navbar_search.html.twig:31 - templates\base.html.twig:65 - ordernumber.label.short Codecmd. - - Part-DB1\templates\_navbar_search.html.twig:40 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - Part-DB1\templates\_navbar_search.html.twig:35 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - templates\base.html.twig:67 - supplier.label Fournisseur - - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_navbar_search.html.twig:56 - templates\base.html.twig:77 - search.regexmatching Reg.Ex. Correspondance - - Part-DB1\templates\_sidebar.html.twig:2 - Part-DB1\templates\_sidebar.html.twig:2 - templates\base.html.twig:165 - templates\base.html.twig:192 - templates\base.html.twig:220 - actions Actions - - Part-DB1\templates\_sidebar.html.twig:6 - Part-DB1\templates\_sidebar.html.twig:6 - templates\base.html.twig:169 - templates\base.html.twig:196 - templates\base.html.twig:224 - datasource Source de données - - Part-DB1\templates\_sidebar.html.twig:10 - Part-DB1\templates\_sidebar.html.twig:10 - templates\base.html.twig:173 - templates\base.html.twig:200 - templates\base.html.twig:228 - manufacturer.labelp Fabricants - - Part-DB1\templates\_sidebar.html.twig:11 - Part-DB1\templates\_sidebar.html.twig:11 - templates\base.html.twig:174 - templates\base.html.twig:201 - templates\base.html.twig:229 - supplier.labelp Fournisseurs - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:213 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:293 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:293 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:181 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:243 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:268 - attachment.download_failed Le téléchargement du fichier joint a échoué ! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:222 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:190 - entity.edit_flash Changements sauvegardés avec succès. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:231 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:196 - entity.edit_flash.invalid Les changements n'ont pas pu être sauvegardés ! Veuillez vérifier vos données ! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:302 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:252 - entity.created_flash Élément créé avec succès ! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:308 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:258 - entity.created_flash.invalid L'élément n'a pas pu être créé ! Vérifiez vos données ! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:399 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:352 - src\Controller\BaseAdminController.php:154 - attachment_type.deleted Élément supprimé ! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:401 - Part-DB1\src\Controller\UserController.php:109 - Part-DB1\src\Controller\UserSettingsController.php:159 - Part-DB1\src\Controller\UserSettingsController.php:193 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:354 - Part-DB1\src\Controller\UserController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:150 - Part-DB1\src\Controller\UserSettingsController.php:182 - csfr_invalid Le jeton RFTS n'est pas valable ! Rechargez cette page ou contactez un administrateur si le problème persiste ! - - Part-DB1\src\Controller\LabelController.php:125 - label_generator.no_entities_found Aucune entité correspondant à la gamme trouvée. @@ -4160,8 +2462,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Controller\LogController.php:149 - Part-DB1\src\Controller\LogController.php:154 new @@ -4171,8 +2471,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Controller\LogController.php:156 - Part-DB1\src\Controller\LogController.php:160 new @@ -4182,8 +2480,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Controller\LogController.php:176 - Part-DB1\src\Controller\LogController.php:180 new @@ -4193,8 +2489,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Controller\LogController.php:178 - Part-DB1\src\Controller\LogController.php:182 new @@ -4204,8 +2498,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Controller\LogController.php:185 - Part-DB1\src\Controller\LogController.php:189 new @@ -4215,8 +2507,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Controller\LogController.php:187 - Part-DB1\src\Controller\LogController.php:191 new @@ -4226,8 +2516,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Controller\LogController.php:194 - Part-DB1\src\Controller\LogController.php:198 new @@ -4237,8 +2525,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Controller\LogController.php:196 - Part-DB1\src\Controller\LogController.php:200 new @@ -4248,8 +2534,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Controller\LogController.php:199 - Part-DB1\src\Controller\LogController.php:203 new @@ -4258,306 +2542,168 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - - Part-DB1\src\Controller\PartController.php:182 - Part-DB1\src\Controller\PartController.php:182 - src\Controller\PartController.php:80 - part.edited_flash Changements sauvegardés ! - - Part-DB1\src\Controller\PartController.php:216 - Part-DB1\src\Controller\PartController.php:219 - part.deleted Composant supprimé avec succès. - - Part-DB1\src\Controller\PartController.php:302 - Part-DB1\src\Controller\PartController.php:277 - Part-DB1\src\Controller\PartController.php:317 - src\Controller\PartController.php:113 - src\Controller\PartController.php:142 - part.created_flash Composants créés avec succès ! - - Part-DB1\src\Controller\PartController.php:308 - Part-DB1\src\Controller\PartController.php:283 - part.created_flash.invalid Erreur lors de la création : Vérifiez vos données ! - - Part-DB1\src\Controller\ScanController.php:68 - Part-DB1\src\Controller\ScanController.php:90 - scan.qr_not_found Aucun élément trouvé pour le code-barres donné. - - Part-DB1\src\Controller\ScanController.php:71 - scan.format_unknown Format inconnu ! - - Part-DB1\src\Controller\ScanController.php:86 - scan.qr_success Élément trouvé. - - Part-DB1\src\Controller\SecurityController.php:114 - Part-DB1\src\Controller\SecurityController.php:109 - pw_reset.user_or_email Nom d'utilisateur / Email - - Part-DB1\src\Controller\SecurityController.php:131 - Part-DB1\src\Controller\SecurityController.php:126 - pw_reset.request.success Demande de mot de passe réussie ! Consultez vos e-mails pour plus d'informations. - - Part-DB1\src\Controller\SecurityController.php:162 - Part-DB1\src\Controller\SecurityController.php:160 - pw_reset.username Nom d'utilisateur - - Part-DB1\src\Controller\SecurityController.php:165 - Part-DB1\src\Controller\SecurityController.php:163 - pw_reset.token Jeton - - Part-DB1\src\Controller\SecurityController.php:194 - Part-DB1\src\Controller\SecurityController.php:192 - pw_reset.new_pw.error Nom d'utilisateur ou jeton invalide ! Veuillez vérifier vos données. - - Part-DB1\src\Controller\SecurityController.php:196 - Part-DB1\src\Controller\SecurityController.php:194 - pw_reset.new_pw.success Le mot de passe a été réinitialisé avec succès. Vous pouvez maintenant vous connecter avec le nouveau mot de passe. - - Part-DB1\src\Controller\UserController.php:107 - Part-DB1\src\Controller\UserController.php:99 - user.edit.reset_success Toutes les méthodes d'authentification à deux facteurs ont été désactivées avec succès. - - Part-DB1\src\Controller\UserSettingsController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:92 - tfa_backup.no_codes_enabled Aucun code de secours n'est activé ! - - Part-DB1\src\Controller\UserSettingsController.php:138 - Part-DB1\src\Controller\UserSettingsController.php:132 - tfa_u2f.u2f_delete.not_existing Il n'y a pas de clé de sécurité avec cet ID ! - - Part-DB1\src\Controller\UserSettingsController.php:145 - Part-DB1\src\Controller\UserSettingsController.php:139 - tfa_u2f.u2f_delete.access_denied Vous ne pouvez pas supprimer les clés de sécurité des autres utilisateurs ! - - Part-DB1\src\Controller\UserSettingsController.php:153 - Part-DB1\src\Controller\UserSettingsController.php:147 - tfa.u2f.u2f_delete.success Clé de sécurité retirée avec succès. - - Part-DB1\src\Controller\UserSettingsController.php:188 - Part-DB1\src\Controller\UserSettingsController.php:180 - tfa_trustedDevice.invalidate.success Les appareils de confiance ont été réinitialisés avec succès. - - Part-DB1\src\Controller\UserSettingsController.php:235 - Part-DB1\src\Controller\UserSettingsController.php:226 - src\Controller\UserController.php:98 - user.settings.saved_flash Paramètres sauvegardés ! - - Part-DB1\src\Controller\UserSettingsController.php:297 - Part-DB1\src\Controller\UserSettingsController.php:288 - src\Controller\UserController.php:130 - user.settings.pw_changed_flash Mot de passe changé ! - - Part-DB1\src\Controller\UserSettingsController.php:317 - Part-DB1\src\Controller\UserSettingsController.php:306 - user.settings.2fa.google.activated L'application d'authentification a été activée avec succès. - - Part-DB1\src\Controller\UserSettingsController.php:328 - Part-DB1\src\Controller\UserSettingsController.php:315 - user.settings.2fa.google.disabled L'application d'authentification a été désactivée avec succès. - - Part-DB1\src\Controller\UserSettingsController.php:346 - Part-DB1\src\Controller\UserSettingsController.php:332 - user.settings.2fa.backup_codes.regenerated De nouveaux codes de secours ont été générés avec succès. - - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - attachment.table.filesize Taille du fichier - - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:245 - Part-DB1\src\DataTables\PartsDataTable.php:252 - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:193 - Part-DB1\src\DataTables\PartsDataTable.php:200 - true Vrai - - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:246 - Part-DB1\src\DataTables\PartsDataTable.php:253 - Part-DB1\src\Form\Type\SIUnitType.php:139 - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:201 - Part-DB1\src\Form\Type\SIUnitType.php:139 - false Faux - - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:128 - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:119 - log.target_deleted Cible supprimée. @@ -4565,8 +2711,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\DataTables\Column\RevertLogColumn.php:57 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:60 new @@ -4576,8 +2720,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\DataTables\Column\RevertLogColumn.php:63 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:66 new @@ -4587,8 +2729,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\DataTables\Column\RevertLogColumn.php:83 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:86 new @@ -4597,70 +2737,42 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - - Part-DB1\src\DataTables\LogDataTable.php:173 - Part-DB1\src\DataTables\LogDataTable.php:161 - log.id ID - - Part-DB1\src\DataTables\LogDataTable.php:178 - Part-DB1\src\DataTables\LogDataTable.php:166 - log.timestamp Horodatage - - Part-DB1\src\DataTables\LogDataTable.php:183 - Part-DB1\src\DataTables\LogDataTable.php:171 - log.type Type - - Part-DB1\src\DataTables\LogDataTable.php:191 - Part-DB1\src\DataTables\LogDataTable.php:179 - log.level Niveau - - Part-DB1\src\DataTables\LogDataTable.php:200 - Part-DB1\src\DataTables\LogDataTable.php:188 - log.user Utilisateur - - Part-DB1\src\DataTables\LogDataTable.php:213 - Part-DB1\src\DataTables\LogDataTable.php:201 - log.target_type Type de cible - - Part-DB1\src\DataTables\LogDataTable.php:226 - Part-DB1\src\DataTables\LogDataTable.php:214 - log.target Cible @@ -4668,8 +2780,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\DataTables\LogDataTable.php:231 - Part-DB1\src\DataTables\LogDataTable.php:218 new @@ -4678,100 +2788,60 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - - Part-DB1\src\DataTables\PartsDataTable.php:168 - Part-DB1\src\DataTables\PartsDataTable.php:116 - part.table.name Nom - - Part-DB1\src\DataTables\PartsDataTable.php:178 - Part-DB1\src\DataTables\PartsDataTable.php:126 - part.table.id ID - - Part-DB1\src\DataTables\PartsDataTable.php:182 - Part-DB1\src\DataTables\PartsDataTable.php:130 - part.table.description Description - - Part-DB1\src\DataTables\PartsDataTable.php:185 - Part-DB1\src\DataTables\PartsDataTable.php:133 - part.table.category Catégorie - - Part-DB1\src\DataTables\PartsDataTable.php:190 - Part-DB1\src\DataTables\PartsDataTable.php:138 - part.table.footprint Empreinte - - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:142 - part.table.manufacturer Fabricant - - Part-DB1\src\DataTables\PartsDataTable.php:197 - Part-DB1\src\DataTables\PartsDataTable.php:145 - part.table.storeLocations Emplacement de stockage - - Part-DB1\src\DataTables\PartsDataTable.php:216 - Part-DB1\src\DataTables\PartsDataTable.php:164 - part.table.amount Quantité - - Part-DB1\src\DataTables\PartsDataTable.php:224 - Part-DB1\src\DataTables\PartsDataTable.php:172 - part.table.minamount Quantité min. - - Part-DB1\src\DataTables\PartsDataTable.php:232 - Part-DB1\src\DataTables\PartsDataTable.php:180 - part.table.partUnit Unité de mesure @@ -4784,864 +2854,522 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - - Part-DB1\src\DataTables\PartsDataTable.php:236 - Part-DB1\src\DataTables\PartsDataTable.php:184 - part.table.addedDate Créé le - - Part-DB1\src\DataTables\PartsDataTable.php:240 - Part-DB1\src\DataTables\PartsDataTable.php:188 - part.table.lastModified Dernière modification - - Part-DB1\src\DataTables\PartsDataTable.php:244 - Part-DB1\src\DataTables\PartsDataTable.php:192 - part.table.needsReview Révision nécessaire - - Part-DB1\src\DataTables\PartsDataTable.php:251 - Part-DB1\src\DataTables\PartsDataTable.php:199 - part.table.favorite Favoris - - Part-DB1\src\DataTables\PartsDataTable.php:258 - Part-DB1\src\DataTables\PartsDataTable.php:206 - part.table.manufacturingStatus État - - Part-DB1\src\DataTables\PartsDataTable.php:260 - Part-DB1\src\DataTables\PartsDataTable.php:262 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:208 - Part-DB1\src\DataTables\PartsDataTable.php:210 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.unknown Inconnu - - Part-DB1\src\DataTables\PartsDataTable.php:263 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:211 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.announced Annoncé - - Part-DB1\src\DataTables\PartsDataTable.php:264 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.active Actif - - Part-DB1\src\DataTables\PartsDataTable.php:265 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:213 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.nrfnd Non recommandé pour les nouvelles conceptions - - Part-DB1\src\DataTables\PartsDataTable.php:266 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:214 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.eol Fin de vie - - Part-DB1\src\DataTables\PartsDataTable.php:267 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:215 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.discontinued Arrêtés - - Part-DB1\src\DataTables\PartsDataTable.php:271 - Part-DB1\src\DataTables\PartsDataTable.php:219 - part.table.mpn MPN - - Part-DB1\src\DataTables\PartsDataTable.php:275 - Part-DB1\src\DataTables\PartsDataTable.php:223 - part.table.mass Poids - - Part-DB1\src\DataTables\PartsDataTable.php:279 - Part-DB1\src\DataTables\PartsDataTable.php:227 - part.table.tags Tags - - Part-DB1\src\DataTables\PartsDataTable.php:283 - Part-DB1\src\DataTables\PartsDataTable.php:231 - part.table.attachments Fichiers joints - - Part-DB1\src\EventSubscriber\UserSystem\LoginSuccessSubscriber.php:82 - Part-DB1\src\EventSubscriber\LoginSuccessListener.php:82 - flash.login_successful Connexion réussie. - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - JSON JSON - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - XML XML - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - CSV CSV - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - YAML YAML - - Part-DB1\src\Form\AdminPages\ImportType.php:124 - Part-DB1\src\Form\AdminPages\ImportType.php:124 - import.abort_on_validation.help Si cette option est activée, l'ensemble du processus est interrompu si des données non valides sont détectées. Si cette option n'est pas active, les entrées non valides sont ignorées et une tentative est faite pour importer les autres entrées. - - Part-DB1\src\Form\AdminPages\ImportType.php:86 - Part-DB1\src\Form\AdminPages\ImportType.php:86 - src\Form\ImportType.php:70 - import.csv_separator Séparateur CSV - - Part-DB1\src\Form\AdminPages\ImportType.php:93 - Part-DB1\src\Form\AdminPages\ImportType.php:93 - src\Form\ImportType.php:72 - parent.label Élément parent - - Part-DB1\src\Form\AdminPages\ImportType.php:101 - Part-DB1\src\Form\AdminPages\ImportType.php:101 - src\Form\ImportType.php:75 - import.file Fichier - - Part-DB1\src\Form\AdminPages\ImportType.php:111 - Part-DB1\src\Form\AdminPages\ImportType.php:111 - src\Form\ImportType.php:78 - import.preserve_children Importer également des sous-éléments - - Part-DB1\src\Form\AdminPages\ImportType.php:120 - Part-DB1\src\Form\AdminPages\ImportType.php:120 - src\Form\ImportType.php:80 - import.abort_on_validation Interrompre sur donnée invalide - - Part-DB1\src\Form\AdminPages\ImportType.php:132 - Part-DB1\src\Form\AdminPages\ImportType.php:132 - src\Form\ImportType.php:85 - import.btn Importer - - Part-DB1\src\Form\AttachmentFormType.php:113 - Part-DB1\src\Form\AttachmentFormType.php:109 - attachment.edit.secure_file.help Un fichier joint marqué comme étant privé ne peut être consulté que par un utilisateur connecté qui a l'autorisation appropriée. Si cette option est activée, aucune miniature n'est générée et l'accès au fichier est plus lent. - - Part-DB1\src\Form\AttachmentFormType.php:127 - Part-DB1\src\Form\AttachmentFormType.php:123 - attachment.edit.url.help Il est possible de saisir ici soit l'URL d'un fichier externe, soit un mot clé pour rechercher les ressources intégrées (par exemple les empreintes). - - Part-DB1\src\Form\AttachmentFormType.php:82 - Part-DB1\src\Form\AttachmentFormType.php:79 - attachment.edit.name Nom - - Part-DB1\src\Form\AttachmentFormType.php:85 - Part-DB1\src\Form\AttachmentFormType.php:82 - attachment.edit.attachment_type Type de fichier joint - - Part-DB1\src\Form\AttachmentFormType.php:94 - Part-DB1\src\Form\AttachmentFormType.php:91 - attachment.edit.show_in_table Voir dans le tableau - - Part-DB1\src\Form\AttachmentFormType.php:105 - Part-DB1\src\Form\AttachmentFormType.php:102 - attachment.edit.secure_file Fichier joint privé - - Part-DB1\src\Form\AttachmentFormType.php:119 - Part-DB1\src\Form\AttachmentFormType.php:115 - attachment.edit.url URL - - Part-DB1\src\Form\AttachmentFormType.php:133 - Part-DB1\src\Form\AttachmentFormType.php:129 - attachment.edit.download_url Télécharger un fichier externe - - Part-DB1\src\Form\AttachmentFormType.php:146 - Part-DB1\src\Form\AttachmentFormType.php:142 - attachment.edit.file Télécharger le fichier - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:86 - part.label Composant - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:87 - part_lot.label Lot de composant - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.none Aucun - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.qr QR Code (recommandé) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code128 Code 128 (recommandé) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code39 Code 39 (recommandé) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code93 Code 93 - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.datamatrix Datamatrix - - Part-DB1\src\Form\LabelOptionsType.php:122 - label_options.lines_mode.html Placeholders - - Part-DB1\src\Form\LabelOptionsType.php:122 - label.options.lines_mode.twig Twig - - Part-DB1\src\Form\LabelOptionsType.php:126 - label_options.lines_mode.help Si vous sélectionnez Twig ici, le champ de contenu est interprété comme un modèle Twig. Voir <a href="https://twig.symfony.com/doc/3.x/templates.html">Documentation de Twig</a> et <a href="https://github.com/Part-DB/Part-DB-symfony/wiki/Labels#twig-mode">Wiki</a> pour plus d'informations. - - Part-DB1\src\Form\LabelOptionsType.php:47 - label_options.page_size.label Taille de l'étiquette - - Part-DB1\src\Form\LabelOptionsType.php:66 - label_options.supported_elements.label Type de cible - - Part-DB1\src\Form\LabelOptionsType.php:75 - label_options.barcode_type.label Code barre - - Part-DB1\src\Form\LabelOptionsType.php:102 - label_profile.lines.label Contenu - - Part-DB1\src\Form\LabelOptionsType.php:111 - label_options.additional_css.label Styles supplémentaires (CSS) - - Part-DB1\src\Form\LabelOptionsType.php:120 - label_options.lines_mode.label Parser mode - - Part-DB1\src\Form\LabelOptionsType.php:51 - label_options.width.placeholder Largeur - - Part-DB1\src\Form\LabelOptionsType.php:60 - label_options.height.placeholder Hauteur - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:49 - label_generator.target_id.range_hint Vous pouvez spécifier ici plusieurs ID (par exemple 1,2,3) et/ou une plage (1-3) pour générer des étiquettes pour plusieurs éléments à la fois. - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:46 - label_generator.target_id.label ID des cibles - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:59 - label_generator.update Actualisation - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:36 - scan_dialog.input Saisie - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:44 - scan_dialog.submit Soumettre - - Part-DB1\src\Form\ParameterType.php:41 - parameters.name.placeholder ex. Gain de courant DC - - Part-DB1\src\Form\ParameterType.php:50 - parameters.symbol.placeholder ex. h_{FE} - - Part-DB1\src\Form\ParameterType.php:60 - parameters.text.placeholder ex. Test conditions - - Part-DB1\src\Form\ParameterType.php:71 - parameters.max.placeholder ex. 350 - - Part-DB1\src\Form\ParameterType.php:82 - parameters.min.placeholder ex. 100 - - Part-DB1\src\Form\ParameterType.php:93 - parameters.typical.placeholder ex. 200 - - Part-DB1\src\Form\ParameterType.php:103 - parameters.unit.placeholder ex. V - - Part-DB1\src\Form\ParameterType.php:114 - parameter.group.placeholder ex. Spécifications techniques - - Part-DB1\src\Form\Part\OrderdetailType.php:72 - Part-DB1\src\Form\Part\OrderdetailType.php:75 - orderdetails.edit.supplierpartnr Numéro de commande - - Part-DB1\src\Form\Part\OrderdetailType.php:81 - Part-DB1\src\Form\Part\OrderdetailType.php:84 - orderdetails.edit.supplier Fournisseur - - Part-DB1\src\Form\Part\OrderdetailType.php:87 - Part-DB1\src\Form\Part\OrderdetailType.php:90 - orderdetails.edit.url Lien vers l'offre - - Part-DB1\src\Form\Part\OrderdetailType.php:93 - Part-DB1\src\Form\Part\OrderdetailType.php:96 - orderdetails.edit.obsolete Plus disponible - - Part-DB1\src\Form\Part\OrderdetailType.php:75 - Part-DB1\src\Form\Part\OrderdetailType.php:78 - orderdetails.edit.supplierpartnr.placeholder Ex. BC 547C - - Part-DB1\src\Form\Part\PartBaseType.php:101 - Part-DB1\src\Form\Part\PartBaseType.php:99 - part.edit.name Nom - - Part-DB1\src\Form\Part\PartBaseType.php:109 - Part-DB1\src\Form\Part\PartBaseType.php:107 - part.edit.description Description - - Part-DB1\src\Form\Part\PartBaseType.php:120 - Part-DB1\src\Form\Part\PartBaseType.php:118 - part.edit.mininstock Stock minimum - - Part-DB1\src\Form\Part\PartBaseType.php:129 - Part-DB1\src\Form\Part\PartBaseType.php:127 - part.edit.category Catégories - - Part-DB1\src\Form\Part\PartBaseType.php:135 - Part-DB1\src\Form\Part\PartBaseType.php:133 - part.edit.footprint Empreinte - - Part-DB1\src\Form\Part\PartBaseType.php:142 - Part-DB1\src\Form\Part\PartBaseType.php:140 - part.edit.tags Tags - - Part-DB1\src\Form\Part\PartBaseType.php:154 - Part-DB1\src\Form\Part\PartBaseType.php:152 - part.edit.manufacturer.label Fabricant - - Part-DB1\src\Form\Part\PartBaseType.php:161 - Part-DB1\src\Form\Part\PartBaseType.php:159 - part.edit.manufacturer_url.label Lien vers la page du produit - - Part-DB1\src\Form\Part\PartBaseType.php:167 - Part-DB1\src\Form\Part\PartBaseType.php:165 - part.edit.mpn Numéro de pièce du fabricant - - Part-DB1\src\Form\Part\PartBaseType.php:173 - Part-DB1\src\Form\Part\PartBaseType.php:171 - part.edit.manufacturing_status État de la fabrication - - Part-DB1\src\Form\Part\PartBaseType.php:181 - Part-DB1\src\Form\Part\PartBaseType.php:179 - part.edit.needs_review Révision nécessaire - - Part-DB1\src\Form\Part\PartBaseType.php:189 - Part-DB1\src\Form\Part\PartBaseType.php:187 - part.edit.is_favorite Favoris - - Part-DB1\src\Form\Part\PartBaseType.php:197 - Part-DB1\src\Form\Part\PartBaseType.php:195 - part.edit.mass Poids - - Part-DB1\src\Form\Part\PartBaseType.php:203 - Part-DB1\src\Form\Part\PartBaseType.php:201 - part.edit.partUnit Unité de mesure @@ -5654,277 +3382,162 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - - Part-DB1\src\Form\Part\PartBaseType.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:210 - part.edit.comment Commentaire - - Part-DB1\src\Form\Part\PartBaseType.php:250 - Part-DB1\src\Form\Part\PartBaseType.php:246 - part.edit.master_attachment Miniature - - Part-DB1\src\Form\Part\PartBaseType.php:295 - Part-DB1\src\Form\Part\PartBaseType.php:276 - src\Form\PartType.php:91 - part.edit.save Sauvegarder les modifications - - Part-DB1\src\Form\Part\PartBaseType.php:296 - Part-DB1\src\Form\Part\PartBaseType.php:277 - src\Form\PartType.php:92 - part.edit.reset rejeter les modifications - - Part-DB1\src\Form\Part\PartBaseType.php:105 - Part-DB1\src\Form\Part\PartBaseType.php:103 - part.edit.name.placeholder Ex. BC547 - - Part-DB1\src\Form\Part\PartBaseType.php:115 - Part-DB1\src\Form\Part\PartBaseType.php:113 - part.edit.description.placeholder Ex. NPN 45V, 0,1A, 0,5W - - Part-DB1\src\Form\Part\PartBaseType.php:123 - Part-DB1\src\Form\Part\PartBaseType.php:121 - part.editmininstock.placeholder Ex. 1 - - Part-DB1\src\Form\Part\PartLotType.php:69 - Part-DB1\src\Form\Part\PartLotType.php:69 - part_lot.edit.description Description - - Part-DB1\src\Form\Part\PartLotType.php:78 - Part-DB1\src\Form\Part\PartLotType.php:78 - part_lot.edit.location Emplacement de stockage - - Part-DB1\src\Form\Part\PartLotType.php:89 - Part-DB1\src\Form\Part\PartLotType.php:89 - part_lot.edit.amount Quantité - - Part-DB1\src\Form\Part\PartLotType.php:98 - Part-DB1\src\Form\Part\PartLotType.php:97 - part_lot.edit.instock_unknown Quantité inconnue - - Part-DB1\src\Form\Part\PartLotType.php:109 - Part-DB1\src\Form\Part\PartLotType.php:108 - part_lot.edit.needs_refill Doit être rempli - - Part-DB1\src\Form\Part\PartLotType.php:120 - Part-DB1\src\Form\Part\PartLotType.php:119 - part_lot.edit.expiration_date Date d'expiration - - Part-DB1\src\Form\Part\PartLotType.php:128 - Part-DB1\src\Form\Part\PartLotType.php:125 - part_lot.edit.comment Commentaire - - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - perm.group.other Divers - - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - tfa_google.enable Activer l'application d'authentification - - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - tfa_google.disable Désactiver l'application d'authentification - - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - google_confirmation Code de confirmation - - Part-DB1\src\Form\UserSettingsType.php:108 - Part-DB1\src\Form\UserSettingsType.php:108 - src\Form\UserSettingsType.php:46 - user.timezone.label Fuseau horaire - - Part-DB1\src\Form\UserSettingsType.php:133 - Part-DB1\src\Form\UserSettingsType.php:132 - user.currency.label Devise préférée - - Part-DB1\src\Form\UserSettingsType.php:140 - Part-DB1\src\Form\UserSettingsType.php:139 - src\Form\UserSettingsType.php:53 - save Appliquer les modifications - - Part-DB1\src\Form\UserSettingsType.php:141 - Part-DB1\src\Form\UserSettingsType.php:140 - src\Form\UserSettingsType.php:54 - reset Rejeter les modifications - - Part-DB1\src\Form\UserSettingsType.php:104 - Part-DB1\src\Form\UserSettingsType.php:104 - src\Form\UserSettingsType.php:45 - user_settings.language.placeholder Langue du serveur - - Part-DB1\src\Form\UserSettingsType.php:115 - Part-DB1\src\Form\UserSettingsType.php:115 - src\Form\UserSettingsType.php:48 - user_settings.timezone.placeholder Fuseau horaire du serveur - - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - attachment.label Fichier joint - - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - attachment_type.label Type de fichier joint - - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - measurement_unit.label Unité de mesure @@ -5937,58 +3550,36 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - currency.label Devise - - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - orderdetail.label Informations de commande - - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - pricedetail.label Informations sur les prix - - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - user.label Utilisateur - - Part-DB1\src\Services\ElementTypeNameGenerator.php:95 - parameter.label Caractéristique - - Part-DB1\src\Services\ElementTypeNameGenerator.php:96 - label_profile.label Profil d'étiquette @@ -5996,8 +3587,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:176 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:161 new @@ -6006,163 +3595,96 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - - Part-DB1\src\Services\MarkdownParser.php:73 - Part-DB1\src\Services\MarkdownParser.php:73 - markdown.loading Chargement de la remise. Si ce message ne disparaît pas, essayez de recharger la page. - - Part-DB1\src\Services\PasswordResetManager.php:98 - Part-DB1\src\Services\PasswordResetManager.php:98 - pw_reset.email.subject Réinitialisation du mot de passe de votre compte Part-DB - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - tree.tools.tools Outils - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:107 - src\Services\ToolsTreeBuilder.php:74 - tree.tools.edit Éditer - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:110 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - src\Services\ToolsTreeBuilder.php:81 - tree.tools.show Afficher - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:111 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - tree.tools.system Système - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:123 - tree.tools.tools.label_dialog Générateur d'étiquettes - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:130 - tree.tools.tools.label_scanner Scanner - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:149 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:126 - src\Services\ToolsTreeBuilder.php:62 - tree.tools.edit.attachment_types Types de fichier joint - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:155 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:132 - src\Services\ToolsTreeBuilder.php:64 - tree.tools.edit.categories Catégories - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:167 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:144 - src\Services\ToolsTreeBuilder.php:68 - tree.tools.edit.suppliers Fournisseurs - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:173 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:150 - src\Services\ToolsTreeBuilder.php:70 - tree.tools.edit.manufacturer Fabricants - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:179 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:156 - tree.tools.edit.storelocation Emplacements de stockage - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:185 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:162 - tree.tools.edit.footprint Empreintes - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:191 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:168 - tree.tools.edit.currency Devises - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:174 - tree.tools.edit.measurement_unit Unité de mesure @@ -6175,40 +3697,24 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.edit.label_profile Profils d'étiquettes - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:209 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:180 - tree.tools.edit.part Composant - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:226 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - src\Services\ToolsTreeBuilder.php:77 - tree.tools.show.all_parts Voir tous les composants - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:232 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.show.all_attachments Fichiers joints @@ -6216,8 +3722,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:239 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:210 new @@ -6226,20 +3730,12 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:258 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:229 - tree.tools.system.users Utilisateurs - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:264 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:235 - tree.tools.system.groups Groupes @@ -6247,8 +3743,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:271 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:242 new @@ -6257,11 +3751,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - src\Services\TreeBuilder.php:124 - entity.tree.new Nouvel élément @@ -6269,7 +3758,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 obsolete @@ -6279,8 +3767,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\templates\_navbar.html.twig:27 - templates\base.html.twig:88 obsolete @@ -6290,8 +3776,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Form\UserSettingsType.php:119 - src\Form\UserSettingsType.php:49 obsolete @@ -6301,8 +3785,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Form\UserSettingsType.php:129 - src\Form\UserSettingsType.php:50 obsolete @@ -6312,7 +3794,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:100 new obsolete @@ -6323,10 +3804,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:128 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:150 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:169 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:207 new obsolete @@ -6337,10 +3814,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:130 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:152 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:171 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:209 new obsolete @@ -6351,7 +3824,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:139 new obsolete @@ -6362,7 +3834,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:160 new obsolete @@ -6373,7 +3844,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:184 new obsolete @@ -6384,7 +3854,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:198 new obsolete @@ -6395,7 +3864,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:214 new obsolete @@ -6406,7 +3874,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - templates\base.html.twig:81 obsolete obsolete @@ -6417,7 +3884,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - templates\base.html.twig:109 obsolete obsolete @@ -6428,7 +3894,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - templates\base.html.twig:112 obsolete obsolete @@ -6719,7 +4184,6 @@ Si vous avez fait cela de manière incorrecte ou si un ordinateur n'est plus fia - src\Form\PartType.php:63 obsolete obsolete @@ -7389,7 +4853,6 @@ exemple de ville - templates\Parts\show_part_info.html.twig:194 obsolete obsolete @@ -7400,7 +4863,6 @@ exemple de ville - src\Form\PartType.php:83 obsolete obsolete @@ -9076,4 +6538,4 @@ exemple de ville - + \ No newline at end of file diff --git a/translations/messages.hu.xlf b/translations/messages.hu.xlf index a7a56611..ba47c2e2 100644 --- a/translations/messages.hu.xlf +++ b/translations/messages.hu.xlf @@ -2,11 +2,6 @@ - - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - attachment_type.caption Mellékletek fájltípusai @@ -14,7 +9,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:12 new @@ -24,7 +18,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:16 new @@ -33,45 +26,18 @@ - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - templates\AdminPages\CategoryAdmin.html.twig:4 - templates\base.html.twig:163 - templates\base.html.twig:170 - templates\base.html.twig:197 - templates\base.html.twig:225 - category.labelp Kategóriák - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:19 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:11 - templates\AdminPages\CategoryAdmin.html.twig:8 - admin.options Beállítások - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - templates\AdminPages\CategoryAdmin.html.twig:9 - admin.advanced Speciális @@ -79,7 +45,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:13 new @@ -89,7 +54,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:17 new @@ -98,30 +62,18 @@ - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - currency.caption Pénznem - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - currency.iso_code.caption ISO code - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - currency.symbol.caption Pénznem szimbólum @@ -129,7 +81,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:29 new @@ -139,7 +90,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:33 new @@ -149,7 +99,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:8 new @@ -159,7 +108,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:12 new @@ -168,89 +116,36 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Keresés - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - templates\AdminPages\EntityAdminBase.html.twig:13 - templates\base.html.twig:166 - templates\base.html.twig:193 - templates\base.html.twig:221 - expandAll Összes kibontása - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - templates\AdminPages\EntityAdminBase.html.twig:17 - templates\base.html.twig:167 - templates\base.html.twig:194 - templates\base.html.twig:222 - reduceAll Összes összecsukása - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - part.info.timetravel_hint Így nézett ki az alkatrész %timestamp% előtt. <i>Kérjük, vedd figyelembe, hogy ez a funkció kísérleti, így az információk nem biztos, hogy helyesek.</i> - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - templates\AdminPages\EntityAdminBase.html.twig:42 - standard.label Tulajdonságok - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - templates\AdminPages\EntityAdminBase.html.twig:43 - infos.label Információ @@ -258,8 +153,6 @@ - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 new @@ -268,120 +161,66 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - templates\AdminPages\EntityAdminBase.html.twig:45 - export.label Exportálás - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - templates\AdminPages\EntityAdminBase.html.twig:47 - import_export.label Importálás / Exportálás - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - mass_creation.label Tömeges létrehozás - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - templates\AdminPages\EntityAdminBase.html.twig:59 - admin.common Általános - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - admin.attachments Mellékletek - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:90 - admin.parameters Paraméterek - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:179 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:167 - templates\AdminPages\EntityAdminBase.html.twig:142 - export_all.label Összes elem exportálása - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:185 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:173 - mass_creation.help Minden sor egy elem neveként lesz értelmezve, amely létrejön. Behúzásokkal hierarchikus struktúrákat hozhatsz létre. - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - templates\AdminPages\EntityAdminBase.html.twig:35 - edit.caption "%name" elem szerkesztése - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - templates\AdminPages\EntityAdminBase.html.twig:37 - new.caption Új elem - - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - templates\base.html.twig:172 - templates\base.html.twig:199 - templates\base.html.twig:227 - footprint.labelp Lábnyomok @@ -389,7 +228,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:13 new @@ -399,7 +237,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:17 new @@ -408,22 +245,12 @@ - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - group.edit.caption Csoportok - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - user.edit.permissions Engedélyek @@ -431,7 +258,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:24 new @@ -441,7 +267,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:28 new @@ -450,27 +275,18 @@ - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:4 - label_profile.caption Címkeprofilok - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:8 - label_profile.advanced Speciális - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:9 - label_profile.comment Jegyzetek @@ -478,7 +294,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:55 new @@ -488,7 +303,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:59 new @@ -497,11 +311,6 @@ - - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - templates\AdminPages\ManufacturerAdmin.html.twig:4 - manufacturer.caption Gyártók @@ -509,7 +318,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:8 new @@ -519,7 +327,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:12 new @@ -528,25 +335,12 @@ - - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - measurement_unit.caption Mértékegység - - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:5 - Part-DB1\templates\_sidebar.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:8 - templates\base.html.twig:171 - templates\base.html.twig:198 - templates\base.html.twig:226 - storelocation.labelp Tárolási helyszínek @@ -554,7 +348,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:32 new @@ -564,7 +357,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:36 new @@ -574,7 +366,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:16 new @@ -584,7 +375,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:20 new @@ -593,130 +383,72 @@ - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - user.edit.caption Felhasználók - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - user.edit.configuration Konfiguráció - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - user.edit.password Jelszó - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - user.edit.tfa.caption Kétfaktoros hitelesítés - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - user.edit.tfa.google_active Hitelesítő alkalmazás aktív - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - tfa_backup.remaining_tokens Hátralévő biztonsági kódok száma - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - tfa_backup.generation_date Biztonsági kódok generálásának dátuma - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - user.edit.tfa.disabled A módszer nincs engedélyezve - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - user.edit.tfa.u2f_keys_count Aktív biztonsági kulcsok - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_title Valóban folytatni szeretnéd? - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_message Ez letiltja <b>a felhasználó összes aktív kétfaktoros hitelesítési módszerét</b> és törli a <b>biztonsági kódokat</b>! - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - user.edit.tfa.disable_tfa.btn Összes kétfaktoros hitelesítési módszer letiltása @@ -724,7 +456,6 @@ - Part-DB1\templates\AdminPages\UserAdmin.html.twig:85 new @@ -734,7 +465,6 @@ - Part-DB1\templates\AdminPages\UserAdmin.html.twig:89 new @@ -743,13 +473,6 @@ - - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:63 - attachment.delete Törlés @@ -762,113 +485,54 @@ - - Part-DB1\templates\AdminPages\_attachments.html.twig:49 - Part-DB1\templates\Parts\edit\_attachments.html.twig:47 - Part-DB1\templates\AdminPages\_attachments.html.twig:47 - Part-DB1\templates\Parts\edit\_attachments.html.twig:45 - attachment.preview.alt Melléklet miniatűr - - Part-DB1\templates\AdminPages\_attachments.html.twig:52 - Part-DB1\templates\Parts\edit\_attachments.html.twig:50 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 - Part-DB1\templates\AdminPages\_attachments.html.twig:50 - Part-DB1\templates\Parts\edit\_attachments.html.twig:48 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:45 - attachment.view_local Helyi másolat megtekintése - - Part-DB1\templates\AdminPages\_attachments.html.twig:58 - Part-DB1\templates\Parts\edit\_attachments.html.twig:56 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:43 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - Part-DB1\templates\AdminPages\_attachments.html.twig:56 - Part-DB1\templates\Parts\edit\_attachments.html.twig:54 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:38 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - attachment.file_not_found Fájl nem található - - Part-DB1\templates\AdminPages\_attachments.html.twig:66 - Part-DB1\templates\Parts\edit\_attachments.html.twig:64 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:48 - Part-DB1\templates\Parts\edit\_attachments.html.twig:62 - attachment.secure Privát melléklet - - Part-DB1\templates\AdminPages\_attachments.html.twig:79 - Part-DB1\templates\Parts\edit\_attachments.html.twig:77 - Part-DB1\templates\AdminPages\_attachments.html.twig:77 - Part-DB1\templates\Parts\edit\_attachments.html.twig:75 - attachment.create Melléklet hozzáadása - - Part-DB1\templates\AdminPages\_attachments.html.twig:84 - Part-DB1\templates\Parts\edit\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - Part-DB1\templates\AdminPages\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_attachments.html.twig:80 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - part_lot.edit.delete.confirm Valóban törölni szeretnéd ezt a készletet? Ez nem vonható vissza! - - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - templates\AdminPages\_delete_form.html.twig:2 - entity.delete.confirm_title Valóban törölni szeretnéd a(z) %name% elemet? - - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - templates\AdminPages\_delete_form.html.twig:3 - entity.delete.message Ez nem vonható vissza! - - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - templates\AdminPages\_delete_form.html.twig:9 - entity.delete Elem törlése @@ -876,12 +540,6 @@ - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:45 - Part-DB1\src\Form\Part\PartBaseType.php:286 - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:43 - Part-DB1\src\Form\Part\PartBaseType.php:267 new @@ -890,561 +548,300 @@ - - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - templates\AdminPages\_delete_form.html.twig:12 - entity.delete.recursive Rekurzív törlés (összes alárendelt elem) - - Part-DB1\templates\AdminPages\_duplicate.html.twig:3 - entity.duplicate Elem duplikálása - - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - templates\AdminPages\_export_form.html.twig:4 - src\Form\ImportType.php:67 - export.format Fájlformátum - - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - templates\AdminPages\_export_form.html.twig:16 - export.level Részletességi szint - - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - templates\AdminPages\_export_form.html.twig:19 - export.level.simple Egyszerű - - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - templates\AdminPages\_export_form.html.twig:20 - export.level.extended Bővített - - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - templates\AdminPages\_export_form.html.twig:21 - export.level.full Teljes - - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - templates\AdminPages\_export_form.html.twig:31 - export.include_children Gyermek elemek belefoglalása az exportálásba - - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - templates\AdminPages\_export_form.html.twig:39 - export.btn Exportálás - - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - templates\AdminPages\EntityAdminBase.html.twig:94 - templates\Parts\edit_part_info.html.twig:12 - templates\Parts\show_part_info.html.twig:11 - id.label ID - - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:76 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:77 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:77 - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:59 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:60 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:53 - templates\AdminPages\EntityAdminBase.html.twig:101 - templates\Parts\show_part_info.html.twig:248 - createdAt Létrehozva - - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:73 - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:49 - templates\AdminPages\EntityAdminBase.html.twig:114 - templates\Parts\show_part_info.html.twig:263 - lastModified Utolsó módosítás - - Part-DB1\templates\AdminPages\_info.html.twig:38 - Part-DB1\templates\AdminPages\_info.html.twig:38 - entity.info.parts_count Az ezzel az elemmel rendelkező alkatrészek száma - - Part-DB1\templates\AdminPages\_parameters.html.twig:6 - Part-DB1\templates\helper.twig:125 - Part-DB1\templates\Parts\edit\_specifications.html.twig:6 - specifications.property Paraméter - - Part-DB1\templates\AdminPages\_parameters.html.twig:7 - Part-DB1\templates\Parts\edit\_specifications.html.twig:7 - specifications.symbol Szimbólum - - Part-DB1\templates\AdminPages\_parameters.html.twig:8 - Part-DB1\templates\Parts\edit\_specifications.html.twig:8 - specifications.value_min Min. - - Part-DB1\templates\AdminPages\_parameters.html.twig:9 - Part-DB1\templates\Parts\edit\_specifications.html.twig:9 - specifications.value_typ Tip. - - Part-DB1\templates\AdminPages\_parameters.html.twig:10 - Part-DB1\templates\Parts\edit\_specifications.html.twig:10 - specifications.value_max Max. - - Part-DB1\templates\AdminPages\_parameters.html.twig:11 - Part-DB1\templates\Parts\edit\_specifications.html.twig:11 - specifications.unit Egység - - Part-DB1\templates\AdminPages\_parameters.html.twig:12 - Part-DB1\templates\Parts\edit\_specifications.html.twig:12 - specifications.text Szöveg - - Part-DB1\templates\AdminPages\_parameters.html.twig:13 - Part-DB1\templates\Parts\edit\_specifications.html.twig:13 - specifications.group Csoport - - Part-DB1\templates\AdminPages\_parameters.html.twig:26 - Part-DB1\templates\Parts\edit\_specifications.html.twig:26 - specification.create Új paraméter - - Part-DB1\templates\AdminPages\_parameters.html.twig:31 - Part-DB1\templates\Parts\edit\_specifications.html.twig:31 - parameter.delete.confirm Valóban törölni szeretnéd ezt a paramétert? - - Part-DB1\templates\attachment_list.html.twig:3 - Part-DB1\templates\attachment_list.html.twig:3 - attachment.list.title Mellékletek listája - - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - part_list.loading.caption Betöltés - - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - part_list.loading.message Ez eltarthat egy ideig. Ha ez az üzenet nem tűnik el, próbáld meg újratölteni az oldalt. - - Part-DB1\templates\base.html.twig:68 - Part-DB1\templates\base.html.twig:68 - templates\base.html.twig:246 - vendor.base.javascript_hint Kérjük, aktiváld a Javascriptet az összes funkció használatához! - - Part-DB1\templates\base.html.twig:73 - Part-DB1\templates\base.html.twig:73 - sidebar.big.toggle Oldalsáv megjelenítése/elrejtése - - Part-DB1\templates\base.html.twig:95 - Part-DB1\templates\base.html.twig:95 - templates\base.html.twig:271 - loading.caption Betöltés: - - Part-DB1\templates\base.html.twig:96 - Part-DB1\templates\base.html.twig:96 - templates\base.html.twig:272 - loading.message Ez eltarthat egy ideig. Ha ez az üzenet sokáig megmarad, próbáld meg újratölteni az oldalt. - - Part-DB1\templates\base.html.twig:101 - Part-DB1\templates\base.html.twig:101 - templates\base.html.twig:277 - loading.bar Betöltés... - - Part-DB1\templates\base.html.twig:112 - Part-DB1\templates\base.html.twig:112 - templates\base.html.twig:288 - back_to_top Vissza az oldal tetejére - - Part-DB1\templates\Form\permissionLayout.html.twig:35 - Part-DB1\templates\Form\permissionLayout.html.twig:35 - permission.edit.permission Engedélyek - - Part-DB1\templates\Form\permissionLayout.html.twig:36 - Part-DB1\templates\Form\permissionLayout.html.twig:36 - permission.edit.value Érték - - Part-DB1\templates\Form\permissionLayout.html.twig:53 - Part-DB1\templates\Form\permissionLayout.html.twig:53 - permission.legend.title Az állapotok magyarázata - - Part-DB1\templates\Form\permissionLayout.html.twig:57 - Part-DB1\templates\Form\permissionLayout.html.twig:57 - permission.legend.disallow Tiltott - - Part-DB1\templates\Form\permissionLayout.html.twig:61 - Part-DB1\templates\Form\permissionLayout.html.twig:61 - permission.legend.allow Engedélyezett - - Part-DB1\templates\Form\permissionLayout.html.twig:65 - Part-DB1\templates\Form\permissionLayout.html.twig:65 - permission.legend.inherit Öröklés a (szülő) csoporttól - - Part-DB1\templates\helper.twig:3 - Part-DB1\templates\helper.twig:3 - bool.true Igaz - - Part-DB1\templates\helper.twig:5 - Part-DB1\templates\helper.twig:5 - bool.false Hamis - - Part-DB1\templates\helper.twig:92 - Part-DB1\templates\helper.twig:87 - Yes Igen - - Part-DB1\templates\helper.twig:94 - Part-DB1\templates\helper.twig:89 - No Nem - - Part-DB1\templates\helper.twig:126 - specifications.value Érték - - Part-DB1\templates\homepage.html.twig:7 - Part-DB1\templates\homepage.html.twig:7 - templates\homepage.html.twig:7 - version.caption Verzió - - Part-DB1\templates\homepage.html.twig:22 - Part-DB1\templates\homepage.html.twig:22 - templates\homepage.html.twig:19 - homepage.license Licencinformáció - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.caption Projektoldal - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.text Forráskód, letöltések, hibajelentések, teendőlista stb. megtalálható a <a href="%href%" class="link-external" target="_blank">GitHub projektoldalon</a> - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.caption Súgó - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.text Súgó és tippek megtalálhatók a Wiki <a href="%href%" class="link-external" target="_blank">GitHub oldalon</a> - - Part-DB1\templates\homepage.html.twig:33 - Part-DB1\templates\homepage.html.twig:33 - templates\homepage.html.twig:30 - homepage.forum.caption Fórum @@ -1452,8 +849,6 @@ - Part-DB1\templates\homepage.html.twig:45 - Part-DB1\templates\homepage.html.twig:45 new @@ -1462,138 +857,90 @@ - - Part-DB1\templates\LabelSystem\dialog.html.twig:3 - Part-DB1\templates\LabelSystem\dialog.html.twig:6 - label_generator.title Címkegenerátor - - Part-DB1\templates\LabelSystem\dialog.html.twig:16 - label_generator.common Általános - - Part-DB1\templates\LabelSystem\dialog.html.twig:20 - label_generator.advanced Speciális - - Part-DB1\templates\LabelSystem\dialog.html.twig:24 - label_generator.profiles Profilok - - Part-DB1\templates\LabelSystem\dialog.html.twig:58 - label_generator.selected_profile Jelenleg kiválasztott profil - - Part-DB1\templates\LabelSystem\dialog.html.twig:62 - label_generator.edit_profile Profil szerkesztése - - Part-DB1\templates\LabelSystem\dialog.html.twig:75 - label_generator.load_profile Profil betöltése - - Part-DB1\templates\LabelSystem\dialog.html.twig:102 - label_generator.download Letöltés - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:3 - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:5 - label_generator.label_btn Címke generálása - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:20 - label_generator.label_empty Új üres címke - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:3 - label_scanner.title Címkeszkenner - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.title Nem található webkamera - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.text Szükséged van egy webkamerára, és engedélyt kell adnod a szkenner funkció használatához. A vonalkódot manuálisan is megadhatod alább. - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:27 - label_scanner.source_select Forrás kiválasztása - - Part-DB1\templates\LogSystem\log_list.html.twig:3 - Part-DB1\templates\LogSystem\log_list.html.twig:3 - log.list.title Rendszernapló @@ -1601,8 +948,6 @@ - Part-DB1\templates\LogSystem\_log_table.html.twig:1 - Part-DB1\templates\LogSystem\_log_table.html.twig:1 new @@ -1612,8 +957,6 @@ - Part-DB1\templates\LogSystem\_log_table.html.twig:2 - Part-DB1\templates\LogSystem\_log_table.html.twig:2 new @@ -1622,473 +965,270 @@ - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.email_sent_by Ezt az e-mailt automatikusan küldte a - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.dont_reply Ne válaszolj erre az e-mailre. - - Part-DB1\templates\mail\pw_reset.html.twig:6 - Part-DB1\templates\mail\pw_reset.html.twig:6 - email.hi %name% Szia %name% - - Part-DB1\templates\mail\pw_reset.html.twig:7 - Part-DB1\templates\mail\pw_reset.html.twig:7 - email.pw_reset.message valaki (remélhetőleg te) kérte a jelszavad visszaállítását. Ha nem te küldted a kérést, hagyd figyelmen kívül ezt az e-mailt. - - Part-DB1\templates\mail\pw_reset.html.twig:9 - Part-DB1\templates\mail\pw_reset.html.twig:9 - email.pw_reset.button Kattints ide a jelszó visszaállításához - - Part-DB1\templates\mail\pw_reset.html.twig:11 - Part-DB1\templates\mail\pw_reset.html.twig:11 - email.pw_reset.fallback Ha ez nem működik, látogass el a <a href="%url%">%url%</a> oldalra, és add meg az alábbi információkat - - Part-DB1\templates\mail\pw_reset.html.twig:16 - Part-DB1\templates\mail\pw_reset.html.twig:16 - email.pw_reset.username Felhasználónév - - Part-DB1\templates\mail\pw_reset.html.twig:19 - Part-DB1\templates\mail\pw_reset.html.twig:19 - email.pw_reset.token Token - - Part-DB1\templates\mail\pw_reset.html.twig:24 - Part-DB1\templates\mail\pw_reset.html.twig:24 - email.pw_reset.valid_unit %date% A visszaállítási token <i>%date%</i>-ig érvényes. - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:18 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:78 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - orderdetail.delete Törlés - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - pricedetails.edit.min_qty Minimális kedvezményes mennyiség - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - pricedetails.edit.price Ár - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - pricedetails.edit.price_qty for amount - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - pricedetail.create Ár hozzáadása - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - templates\Parts\edit_part_info.html.twig:4 - part.edit.title Alkatrész szerkesztése - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - templates\Parts\edit_part_info.html.twig:9 - part.edit.card_title Alkatrész szerkesztése - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - part.edit.tab.common Általános - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - part.edit.tab.manufacturer Gyártó - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - part.edit.tab.advanced Speciális - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - part.edit.tab.part_lots Készletek - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - part.edit.tab.attachments Mellékletek - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - part.edit.tab.orderdetails Beszerzési információk - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.specifications Paraméterek - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:64 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.comment Jegyzetek - - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - templates\Parts\new_part.html.twig:8 - part.new.card_title Új alkatrész létrehozása - - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - part_lot.delete Törlés - - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - part_lot.create Készlet hozzáadása - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - orderdetail.create Forgalmazó hozzáadása - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - pricedetails.edit.delete.confirm Valóban törölni szeretnéd ezt az árat? Ez nem vonható vissza. - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:62 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:61 - orderdetails.edit.delete.confirm Valóban törölni szeretnéd ezt a forgalmazói információt? Ez nem vonható vissza! - - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - templates\Parts\show_part_info.html.twig:4 - templates\Parts\show_part_info.html.twig:9 - part.info.title Részletes információk az alkatrészhez - - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - part.part_lots.label Készletek - - Part-DB1\templates\Parts\info\show_part_info.html.twig:56 - Part-DB1\templates\Parts\lists\_info_card.html.twig:43 - Part-DB1\templates\_navbar_search.html.twig:31 - Part-DB1\templates\_navbar_search.html.twig:26 - templates\base.html.twig:62 - templates\Parts\show_part_info.html.twig:74 - src\Form\PartType.php:86 - comment.label Jegyzetek - - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - part.info.specifications Paraméterek - - Part-DB1\templates\Parts\info\show_part_info.html.twig:74 - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - templates\Parts\show_part_info.html.twig:82 - attachment.labelp Mellékletek - - Part-DB1\templates\Parts\info\show_part_info.html.twig:83 - Part-DB1\templates\Parts\info\show_part_info.html.twig:71 - templates\Parts\show_part_info.html.twig:88 - vendor.partinfo.shopping_infos Vásárlási információk - - Part-DB1\templates\Parts\info\show_part_info.html.twig:91 - Part-DB1\templates\Parts\info\show_part_info.html.twig:78 - templates\Parts\show_part_info.html.twig:94 - vendor.partinfo.history Előzmények - - Part-DB1\templates\Parts\info\show_part_info.html.twig:97 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - Part-DB1\templates\Parts\info\show_part_info.html.twig:84 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - templates\base.html.twig:176 - templates\base.html.twig:203 - templates\base.html.twig:217 - templates\base.html.twig:231 - templates\Parts\show_part_info.html.twig:100 - tools.label Eszközök - - Part-DB1\templates\Parts\info\show_part_info.html.twig:103 - Part-DB1\templates\Parts\info\show_part_info.html.twig:90 - extended_info.label Bővített információ - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - attachment.name Név - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - attachment.attachment_type Melléklet típusa - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - attachment.file_name Fájlnév - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - attachment.file_size Fájlméret - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:54 - attachment.preview Előnézeti kép - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:67 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:50 - attachment.download_local Helyi másolat letöltése @@ -2096,8 +1236,6 @@ - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 new @@ -2106,14 +1244,6 @@ - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Unknown Ismeretlen @@ -2121,10 +1251,6 @@ - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 new @@ -2134,8 +1260,6 @@ - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 new @@ -2144,49 +1268,24 @@ - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - part.isFavorite Kedvenc - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - part.minOrderAmount Minimális rendelési mennyiség - - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:46 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:41 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - templates\base.html.twig:70 - templates\Parts\show_part_info.html.twig:24 - src\Form\PartType.php:80 - manufacturer.label Gyártó - - Part-DB1\templates\Parts\info\_main_infos.html.twig:24 - Part-DB1\templates\_navbar_search.html.twig:11 - templates\base.html.twig:54 - src\Form\PartType.php:62 - name.label Név @@ -2194,8 +1293,6 @@ - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 new @@ -2204,767 +1301,432 @@ - - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:19 - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:18 - templates\base.html.twig:58 - templates\Parts\show_part_info.html.twig:31 - src\Form\PartType.php:65 - description.label Leírás - - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:15 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:14 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - templates\base.html.twig:56 - templates\Parts\show_part_info.html.twig:32 - src\Form\PartType.php:74 - category.label Kategória - - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - templates\Parts\show_part_info.html.twig:42 - src\Form\PartType.php:69 - instock.label Készleten - - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - templates\Parts\show_part_info.html.twig:44 - src\Form\PartType.php:72 - mininstock.label Minimális készlet - - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:52 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:47 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - templates\base.html.twig:73 - templates\Parts\show_part_info.html.twig:47 - footprint.label Lábnyom - - Part-DB1\templates\Parts\info\_main_infos.html.twig:56 - Part-DB1\templates\Parts\info\_main_infos.html.twig:59 - Part-DB1\templates\Parts\info\_main_infos.html.twig:57 - Part-DB1\templates\Parts\info\_main_infos.html.twig:60 - templates\Parts\show_part_info.html.twig:51 - part.avg_price.label Átlagár - - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - part.supplier.name Név - - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - part.supplier.partnr Alkatrészszám - - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - part.order.minamount Minimális mennyiség - - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - part.order.price Ár - - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - part.order.single_price Egységár - - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - Part-DB1\templates\Parts\info\_part_lots.html.twig:6 - part_lots.description Leírás - - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - part_lots.storage_location Tárolási helyszín - - Part-DB1\templates\Parts\info\_part_lots.html.twig:9 - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - part_lots.amount Mennyiség - - Part-DB1\templates\Parts\info\_part_lots.html.twig:24 - Part-DB1\templates\Parts\info\_part_lots.html.twig:22 - part_lots.location_unknown Ismeretlen tárolási helyszín - - Part-DB1\templates\Parts\info\_part_lots.html.twig:31 - Part-DB1\templates\Parts\info\_part_lots.html.twig:29 - part_lots.instock_unknown Ismeretlen mennyiség - - Part-DB1\templates\Parts\info\_part_lots.html.twig:40 - Part-DB1\templates\Parts\info\_part_lots.html.twig:38 - part_lots.expiration_date Lejárati dátum - - Part-DB1\templates\Parts\info\_part_lots.html.twig:48 - Part-DB1\templates\Parts\info\_part_lots.html.twig:46 - part_lots.is_expired Lejárt - - Part-DB1\templates\Parts\info\_part_lots.html.twig:55 - Part-DB1\templates\Parts\info\_part_lots.html.twig:53 - part_lots.need_refill Utántöltés szükséges - - Part-DB1\templates\Parts\info\_picture.html.twig:15 - Part-DB1\templates\Parts\info\_picture.html.twig:15 - part.info.prev_picture Előző kép - - Part-DB1\templates\Parts\info\_picture.html.twig:19 - Part-DB1\templates\Parts\info\_picture.html.twig:19 - part.info.next_picture Következő kép - - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - part.mass.tooltip Tömeg - - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - part.needs_review.badge Ellenőrzés szükséges - - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - part.favorite.badge Kedvenc - - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - part.obsolete.badge Már nem kapható - - Part-DB1\templates\Parts\info\_specifications.html.twig:10 - parameters.extracted_from_description Automatikusan kinyert a leírásból - - Part-DB1\templates\Parts\info\_specifications.html.twig:15 - parameters.auto_extracted_from_comment Automatikusan kinyert a jegyzetekből - - Part-DB1\templates\Parts\info\_tools.html.twig:6 - Part-DB1\templates\Parts\info\_tools.html.twig:4 - templates\Parts\show_part_info.html.twig:125 - part.edit.btn Alkatrész szerkesztése - - Part-DB1\templates\Parts\info\_tools.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:14 - templates\Parts\show_part_info.html.twig:135 - part.clone.btn Alkatrész klónozása - - Part-DB1\templates\Parts\info\_tools.html.twig:24 - Part-DB1\templates\Parts\lists\_action_bar.html.twig:4 - templates\Parts\show_part_info.html.twig:143 - part.create.btn Új alkatrész létrehozása - - Part-DB1\templates\Parts\info\_tools.html.twig:31 - Part-DB1\templates\Parts\info\_tools.html.twig:29 - part.delete.confirm_title Valóban törölni szeretnéd ezt az alkatrészt? - - Part-DB1\templates\Parts\info\_tools.html.twig:32 - Part-DB1\templates\Parts\info\_tools.html.twig:30 - part.delete.message Ez az alkatrész és minden hozzá kapcsolódó információ (például mellékletek, árinformációk stb.) törlésre kerül. Ez nem vonható vissza! - - Part-DB1\templates\Parts\info\_tools.html.twig:39 - Part-DB1\templates\Parts\info\_tools.html.twig:37 - part.delete Alkatrész törlése - - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - parts_list.all.title Összes alkatrész - - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - parts_list.category.title Kategóriával rendelkező alkatrészek - - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - parts_list.footprint.title Lábnyommal rendelkező alkatrészek - - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - parts_list.manufacturer.title Gyártóval rendelkező alkatrészek - - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - parts_list.search.title Alkatrészek keresése - - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - parts_list.storelocation.title Tárolási helyszínekkel rendelkező alkatrészek - - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - parts_list.supplier.title Beszállítóval rendelkező alkatrészek - - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - parts_list.tags.title Címkével rendelkező alkatrészek - - Part-DB1\templates\Parts\lists\_info_card.html.twig:22 - Part-DB1\templates\Parts\lists\_info_card.html.twig:17 - entity.info.common.tab Általános - - Part-DB1\templates\Parts\lists\_info_card.html.twig:26 - Part-DB1\templates\Parts\lists\_info_card.html.twig:20 - entity.info.statistics.tab Statisztikák - - Part-DB1\templates\Parts\lists\_info_card.html.twig:31 - entity.info.attachments.tab Mellékletek - - Part-DB1\templates\Parts\lists\_info_card.html.twig:37 - entity.info.parameters.tab Paraméterek - - Part-DB1\templates\Parts\lists\_info_card.html.twig:54 - Part-DB1\templates\Parts\lists\_info_card.html.twig:30 - entity.info.name Név - - Part-DB1\templates\Parts\lists\_info_card.html.twig:58 - Part-DB1\templates\Parts\lists\_info_card.html.twig:96 - Part-DB1\templates\Parts\lists\_info_card.html.twig:34 - Part-DB1\templates\Parts\lists\_info_card.html.twig:67 - entity.info.parent Szülő - - Part-DB1\templates\Parts\lists\_info_card.html.twig:70 - Part-DB1\templates\Parts\lists\_info_card.html.twig:46 - entity.edit.btn Szerkesztés - - Part-DB1\templates\Parts\lists\_info_card.html.twig:92 - Part-DB1\templates\Parts\lists\_info_card.html.twig:63 - entity.info.children_count Gyermek elemek száma - - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - tfa.check.title Kétfaktoros hitelesítés szükséges - - Part-DB1\templates\security\2fa_base_form.html.twig:39 - Part-DB1\templates\security\2fa_base_form.html.twig:39 - tfa.code.trusted_pc Ez egy megbízható számítógép (ha ez engedélyezve van, nem kell további kétfaktoros lekérdezéseket végezni ezen a számítógépen) - - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - login.btn Bejelentkezés - - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:42 - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:40 - user.logout Kijelentkezés - - Part-DB1\templates\security\2fa_form.html.twig:6 - Part-DB1\templates\security\2fa_form.html.twig:6 - tfa.check.code.label Hitelesítő alkalmazás kódja - - Part-DB1\templates\security\2fa_form.html.twig:10 - Part-DB1\templates\security\2fa_form.html.twig:10 - tfa.check.code.help Add meg a 6 jegyű kódot a hitelesítő alkalmazásodból, vagy egy biztonsági kódot, ha a hitelesítő alkalmazás nem elérhető. - - Part-DB1\templates\security\login.html.twig:3 - Part-DB1\templates\security\login.html.twig:3 - templates\security\login.html.twig:3 - login.title Bejelentkezés - - Part-DB1\templates\security\login.html.twig:7 - Part-DB1\templates\security\login.html.twig:7 - templates\security\login.html.twig:7 - login.card_title Bejelentkezés - - Part-DB1\templates\security\login.html.twig:31 - Part-DB1\templates\security\login.html.twig:31 - templates\security\login.html.twig:31 - login.username.label Felhasználónév - - Part-DB1\templates\security\login.html.twig:34 - Part-DB1\templates\security\login.html.twig:34 - templates\security\login.html.twig:34 - login.username.placeholder Felhasználónév - - Part-DB1\templates\security\login.html.twig:38 - Part-DB1\templates\security\login.html.twig:38 - templates\security\login.html.twig:38 - login.password.label Jelszó - - Part-DB1\templates\security\login.html.twig:40 - Part-DB1\templates\security\login.html.twig:40 - templates\security\login.html.twig:40 - login.password.placeholder Jelszó - - Part-DB1\templates\security\login.html.twig:50 - Part-DB1\templates\security\login.html.twig:50 - templates\security\login.html.twig:50 - login.rememberme Emlékezz rám (nem ajánlott megosztott számítógépeken) - - Part-DB1\templates\security\login.html.twig:64 - Part-DB1\templates\security\login.html.twig:64 - pw_reset.password_forget Elfelejtetted a felhasználóneved/jelszavad? - - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - pw_reset.new_pw.header.title Új jelszó beállítása - - Part-DB1\templates\security\pw_reset_request.html.twig:5 - Part-DB1\templates\security\pw_reset_request.html.twig:5 - pw_reset.request.header.title Új jelszó kérése - - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - tfa_u2f.http_warning Ezt az oldalt nem biztonságos HTTP módszerrel éred el, így az U2F valószínűleg nem fog működni (Hibás kérés hibaüzenet). Kérj meg egy adminisztrátort, hogy állítsa be a biztonságos HTTPS módszert, ha biztonsági kulcsokat szeretnél használni. - - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - r_u2f_two_factor.pressbutton Kérjük, csatlakoztasd a biztonsági kulcsodat, és nyomd meg a gombját! - - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - tfa_u2f.add_key.title Biztonsági kulcs hozzáadása - - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - tfa_u2f.explanation Egy U2F/FIDO kompatibilis biztonsági kulcs (például YubiKey vagy NitroKey) segítségével felhasználóbarát és biztonságos kétfaktoros hitelesítést érhetsz el. A biztonsági kulcsokat itt regisztrálhatod, és ha kétfaktoros ellenőrzés szükséges, a kulcsot csak USB-n keresztül kell csatlakoztatni, vagy NFC-n keresztül a készülékhez érinteni. - - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - tfa_u2f.add_key.backup_hint Az elérhetőség biztosítása érdekében, ha a kulcs elveszik, ajánlott egy második kulcsot is regisztrálni tartalékként, és biztonságos helyen tárolni! - - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - tfa_u2f.add_key.add_button Biztonsági kulcs hozzáadása - - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - tfa_u2f.add_key.back_to_settings Vissza a beállításokhoz @@ -2972,10 +1734,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 new @@ -2985,8 +1743,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:14 - Part-DB1\templates\Statistics\statistics.html.twig:14 new @@ -2996,8 +1752,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:19 - Part-DB1\templates\Statistics\statistics.html.twig:19 new @@ -3007,8 +1761,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:24 - Part-DB1\templates\Statistics\statistics.html.twig:24 new @@ -3018,12 +1770,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 new @@ -3033,12 +1779,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 new @@ -3048,8 +1788,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:40 - Part-DB1\templates\Statistics\statistics.html.twig:40 new @@ -3059,8 +1797,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:44 - Part-DB1\templates\Statistics\statistics.html.twig:44 new @@ -3070,8 +1806,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:48 - Part-DB1\templates\Statistics\statistics.html.twig:48 new @@ -3081,8 +1815,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:65 - Part-DB1\templates\Statistics\statistics.html.twig:65 new @@ -3092,8 +1824,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:69 - Part-DB1\templates\Statistics\statistics.html.twig:69 new @@ -3103,8 +1833,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:73 - Part-DB1\templates\Statistics\statistics.html.twig:73 new @@ -3114,8 +1842,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:77 - Part-DB1\templates\Statistics\statistics.html.twig:77 new @@ -3125,8 +1851,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:81 - Part-DB1\templates\Statistics\statistics.html.twig:81 new @@ -3136,8 +1860,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:85 - Part-DB1\templates\Statistics\statistics.html.twig:85 new @@ -3147,8 +1869,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:89 - Part-DB1\templates\Statistics\statistics.html.twig:89 new @@ -3158,8 +1878,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:93 - Part-DB1\templates\Statistics\statistics.html.twig:93 new @@ -3169,8 +1887,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:110 - Part-DB1\templates\Statistics\statistics.html.twig:110 new @@ -3180,8 +1896,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:114 - Part-DB1\templates\Statistics\statistics.html.twig:114 new @@ -3191,8 +1905,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:118 - Part-DB1\templates\Statistics\statistics.html.twig:118 new @@ -3202,8 +1914,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:122 - Part-DB1\templates\Statistics\statistics.html.twig:122 new @@ -3213,8 +1923,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:126 - Part-DB1\templates\Statistics\statistics.html.twig:126 new @@ -3223,890 +1931,480 @@ - - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - tfa_backup.codes.title Biztonsági kódok - - Part-DB1\templates\Users\backup_codes.html.twig:12 - Part-DB1\templates\Users\backup_codes.html.twig:12 - tfa_backup.codes.explanation Nyomtasd ki ezeket a kódokat, és tartsd őket biztonságos helyen! - - Part-DB1\templates\Users\backup_codes.html.twig:13 - Part-DB1\templates\Users\backup_codes.html.twig:13 - tfa_backup.codes.help Ha már nincs hozzáférésed az eszközödhöz, amelyen a hitelesítő alkalmazás van (elveszett okostelefon, adatvesztés stb.), ezekkel a kódokkal hozzáférhetsz a fiókodhoz, és esetleg új hitelesítő alkalmazást állíthatsz be. Ezek a kódok egyszer használhatók, az használt kódokat ajánlott törölni. Bárki, aki hozzáfér ezekhez a kódokhoz, potenciálisan hozzáférhet a fiókodhoz, ezért tartsd őket biztonságos helyen. - - Part-DB1\templates\Users\backup_codes.html.twig:16 - Part-DB1\templates\Users\backup_codes.html.twig:16 - tfa_backup.username Felhasználónév - - Part-DB1\templates\Users\backup_codes.html.twig:29 - Part-DB1\templates\Users\backup_codes.html.twig:29 - tfa_backup.codes.page_generated_on Az oldal generálva: %date% - - Part-DB1\templates\Users\backup_codes.html.twig:32 - Part-DB1\templates\Users\backup_codes.html.twig:32 - tfa_backup.codes.print Nyomtatás - - Part-DB1\templates\Users\backup_codes.html.twig:35 - Part-DB1\templates\Users\backup_codes.html.twig:35 - tfa_backup.codes.copy_clipboard Másolás a vágólapra - - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:40 - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:38 - templates\base.html.twig:99 - templates\Users\user_info.html.twig:3 - templates\Users\user_info.html.twig:6 - user.info.label Felhasználói információk - - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - templates\Users\user_info.html.twig:18 - src\Form\UserSettingsType.php:32 - user.firstName.label Keresztnév - - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - templates\Users\user_info.html.twig:24 - src\Form\UserSettingsType.php:35 - user.lastName.label Vezetéknév - - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - templates\Users\user_info.html.twig:30 - src\Form\UserSettingsType.php:41 - user.email.label E-mail - - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - templates\Users\user_info.html.twig:37 - src\Form\UserSettingsType.php:38 - user.department.label Osztály - - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - templates\Users\user_info.html.twig:47 - src\Form\UserSettingsType.php:30 - user.username.label Felhasználónév - - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - templates\Users\user_info.html.twig:53 - group.label Csoport: - - Part-DB1\templates\Users\user_info.html.twig:67 - Part-DB1\templates\Users\user_info.html.twig:67 - user.permissions Engedélyek - - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:39 - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:37 - templates\base.html.twig:98 - templates\Users\user_settings.html.twig:3 - templates\Users\user_settings.html.twig:6 - user.settings.label Felhasználói beállítások - - Part-DB1\templates\Users\user_settings.html.twig:18 - Part-DB1\templates\Users\user_settings.html.twig:18 - templates\Users\user_settings.html.twig:14 - user_settings.data.label Személyes adatok - - Part-DB1\templates\Users\user_settings.html.twig:22 - Part-DB1\templates\Users\user_settings.html.twig:22 - templates\Users\user_settings.html.twig:18 - user_settings.configuration.label Konfiguráció - - Part-DB1\templates\Users\user_settings.html.twig:55 - Part-DB1\templates\Users\user_settings.html.twig:55 - templates\Users\user_settings.html.twig:48 - user.settings.change_pw Jelszó módosítása - - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - user.settings.2fa_settings Kétfaktoros hitelesítés - - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - tfa.settings.google.tab Hitelesítő alkalmazás - - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - tfa.settings.bakup.tab Biztonsági kódok - - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - tfa.settings.u2f.tab Biztonsági kulcsok (U2F) - - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - tfa.settings.trustedDevices.tab Megbízható eszközök - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_title Valóban letiltod a hitelesítő alkalmazást? - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_message Ha letiltod a hitelesítő alkalmazást, az összes biztonsági kód törlődik, így újra ki kell nyomtatnod őket.<br> - - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - tfa_google.disabled_message Hitelesítő alkalmazás deaktiválva! - - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - tfa_google.step.download Tölts le egy hitelesítő alkalmazást (például <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a> vagy <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp">FreeOTP Authenticator</a>) - - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - tfa_google.step.scan Szkenneld be a mellette lévő QR-kódot az alkalmazással, vagy add meg az adatokat manuálisan - - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - tfa_google.step.input_code Add meg a generált kódot az alábbi mezőben, és erősítsd meg - - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - tfa_google.step.download_backup Nyomtasd ki a biztonsági kódokat, és tárold őket biztonságos helyen - - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - tfa_google.manual_setup Manuális beállítás - - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - tfa_google.manual_setup.type Típus - - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - tfa_google.manual_setup.username Felhasználónév - - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - tfa_google.manual_setup.secret Titok - - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - tfa_google.manual_setup.digit_count Számjegyek száma - - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - tfa_google.enabled_message Hitelesítő alkalmazás engedélyezve - - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - tfa_backup.disabled Biztonsági kódok letiltva. Állítsd be a hitelesítő alkalmazást a biztonsági kódok engedélyezéséhez. - - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - tfa_backup.explanation Ezeket a biztonsági kódokat használhatod a fiókod eléréséhez, ha elveszíted a hitelesítő alkalmazással rendelkező eszközt. Nyomtasd ki a kódokat, és tartsd őket biztonságos helyen. - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_title Valóban visszaállítod a kódokat? - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_message Ez törli az összes korábbi kódot, és új kódokat generál. Ez nem vonható vissza. Ne felejtsd el kinyomtatni az új kódokat, és biztonságos helyen tárolni őket! - - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - tfa_backup.enabled Biztonsági kódok engedélyezve - - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - tfa_backup.show_codes Biztonsági kódok megjelenítése - - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - tfa_u2f.table_caption Regisztrált biztonsági kulcsok - - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - tfa_u2f.delete_u2f.confirm_title Valóban eltávolítod ezt a biztonsági kulcsot? - - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - tfa_u2f.delete_u2f.confirm_message Ha eltávolítod ezt a kulcsot, azzal többé nem lehet bejelentkezni. Ha nem marad biztonsági kulcs, a kétfaktoros hitelesítés letiltásra kerül. - - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - tfa_u2f.keys.name Kulcs neve - - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - tfa_u2f.keys.added_date Regisztráció dátuma - - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - tfa_u2f.key_delete Kulcs törlése - - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - tfa_u2f.no_keys_registered Még nincsenek regisztrált kulcsok. - - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - tfa_u2f.add_new_key Új biztonsági kulcs regisztrálása - - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - tfa_trustedDevices.explanation A második faktor ellenőrzésekor az aktuális számítógépet megbízhatóként jelölheted, így nem lesz szükség további kétfaktoros ellenőrzésekre ezen a számítógépen. - - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - tfa_trustedDevices.invalidate.confirm_title Valóban eltávolítod az összes megbízható számítógépet? - - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - tfa_trustedDevices.invalidate.confirm_message Újra el kell végezned a kétfaktoros hitelesítést az összes számítógépen. Győződj meg róla, hogy kéznél van a kétfaktoros eszközöd. - - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - tfa_trustedDevices.invalidate.btn Megbízható eszközök visszaállítása - - Part-DB1\templates\_navbar.html.twig:4 - Part-DB1\templates\_navbar.html.twig:4 - templates\base.html.twig:29 - sidebar.toggle Oldalsáv váltása - - Part-DB1\templates\_navbar.html.twig:22 - navbar.scanner.link Szkenner - - Part-DB1\templates\_navbar.html.twig:38 - Part-DB1\templates\_navbar.html.twig:36 - templates\base.html.twig:97 - user.loggedin.label Bejelentkezve mint - - Part-DB1\templates\_navbar.html.twig:44 - Part-DB1\templates\_navbar.html.twig:42 - templates\base.html.twig:103 - user.login Bejelentkezés - - Part-DB1\templates\_navbar.html.twig:50 - Part-DB1\templates\_navbar.html.twig:48 - ui.toggle_darkmode Sötét mód - - Part-DB1\templates\_navbar.html.twig:54 - Part-DB1\src\Form\UserSettingsType.php:97 - Part-DB1\templates\_navbar.html.twig:52 - Part-DB1\src\Form\UserSettingsType.php:97 - templates\base.html.twig:106 - src\Form\UserSettingsType.php:44 - user.language_select Nyelv váltása - - Part-DB1\templates\_navbar_search.html.twig:4 - Part-DB1\templates\_navbar_search.html.twig:4 - templates\base.html.twig:49 - search.options.label Keresési opciók - - Part-DB1\templates\_navbar_search.html.twig:23 - tags.label Címkék - - Part-DB1\templates\_navbar_search.html.twig:27 - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - templates\base.html.twig:60 - templates\Parts\show_part_info.html.twig:36 - src\Form\PartType.php:77 - storelocation.label Tárolási helyszín - - Part-DB1\templates\_navbar_search.html.twig:36 - Part-DB1\templates\_navbar_search.html.twig:31 - templates\base.html.twig:65 - ordernumber.label.short supplier partnr. - - Part-DB1\templates\_navbar_search.html.twig:40 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - Part-DB1\templates\_navbar_search.html.twig:35 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - templates\base.html.twig:67 - supplier.label Beszállító - - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_navbar_search.html.twig:56 - templates\base.html.twig:77 - search.regexmatching Reguláris kifejezés egyezés - - Part-DB1\templates\_sidebar.html.twig:37 - Part-DB1\templates\_sidebar.html.twig:12 - Part-DB1\templates\_sidebar.html.twig:37 - Part-DB1\templates\_sidebar.html.twig:12 - templates\base.html.twig:175 - templates\base.html.twig:189 - templates\base.html.twig:202 - templates\base.html.twig:230 - project.labelp Projektek - - Part-DB1\templates\_sidebar.html.twig:2 - Part-DB1\templates\_sidebar.html.twig:2 - templates\base.html.twig:165 - templates\base.html.twig:192 - templates\base.html.twig:220 - actions Műveletek - - Part-DB1\templates\_sidebar.html.twig:6 - Part-DB1\templates\_sidebar.html.twig:6 - templates\base.html.twig:169 - templates\base.html.twig:196 - templates\base.html.twig:224 - datasource Adatforrás - - Part-DB1\templates\_sidebar.html.twig:10 - Part-DB1\templates\_sidebar.html.twig:10 - templates\base.html.twig:173 - templates\base.html.twig:200 - templates\base.html.twig:228 - manufacturer.labelp Gyártók - - Part-DB1\templates\_sidebar.html.twig:11 - Part-DB1\templates\_sidebar.html.twig:11 - templates\base.html.twig:174 - templates\base.html.twig:201 - templates\base.html.twig:229 - supplier.labelp Beszállítók - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:213 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:293 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:293 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:181 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:243 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:268 - attachment.download_failed Külső melléklet letöltése nem sikerült. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:222 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:190 - entity.edit_flash Változtatások sikeresen mentve. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:231 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:196 - entity.edit_flash.invalid Nem lehet menteni a változtatásokat. Kérjük, ellenőrizd az adatbevitelt! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:302 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:252 - entity.created_flash Elem létrehozva. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:308 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:258 - entity.created_flash.invalid Nem sikerült az elem létrehozása. Kérjük, ellenőrizd az adatbevitelt! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:399 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:352 - src\Controller\BaseAdminController.php:154 - attachment_type.deleted Elem törölve! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:401 - Part-DB1\src\Controller\UserController.php:109 - Part-DB1\src\Controller\UserSettingsController.php:159 - Part-DB1\src\Controller\UserSettingsController.php:193 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:354 - Part-DB1\src\Controller\UserController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:150 - Part-DB1\src\Controller\UserSettingsController.php:182 - csfr_invalid Érvénytelen CSFR token. Kérjük, töltsd újra az oldalt, vagy lépj kapcsolatba egy adminisztrátorral, ha ez az üzenet megmarad. - - Part-DB1\src\Controller\LabelController.php:125 - label_generator.no_entities_found Nem található entitás a megadott tartományban. @@ -4114,8 +2412,6 @@ - Part-DB1\src\Controller\LogController.php:149 - Part-DB1\src\Controller\LogController.php:154 new @@ -4125,8 +2421,6 @@ - Part-DB1\src\Controller\LogController.php:156 - Part-DB1\src\Controller\LogController.php:160 new @@ -4136,8 +2430,6 @@ - Part-DB1\src\Controller\LogController.php:176 - Part-DB1\src\Controller\LogController.php:180 new @@ -4147,8 +2439,6 @@ - Part-DB1\src\Controller\LogController.php:178 - Part-DB1\src\Controller\LogController.php:182 new @@ -4158,8 +2448,6 @@ - Part-DB1\src\Controller\LogController.php:185 - Part-DB1\src\Controller\LogController.php:189 new @@ -4169,8 +2457,6 @@ - Part-DB1\src\Controller\LogController.php:187 - Part-DB1\src\Controller\LogController.php:191 new @@ -4180,8 +2466,6 @@ - Part-DB1\src\Controller\LogController.php:194 - Part-DB1\src\Controller\LogController.php:198 new @@ -4191,8 +2475,6 @@ - Part-DB1\src\Controller\LogController.php:196 - Part-DB1\src\Controller\LogController.php:200 new @@ -4202,8 +2484,6 @@ - Part-DB1\src\Controller\LogController.php:199 - Part-DB1\src\Controller\LogController.php:203 new @@ -4212,306 +2492,168 @@ - - Part-DB1\src\Controller\PartController.php:182 - Part-DB1\src\Controller\PartController.php:182 - src\Controller\PartController.php:80 - part.edited_flash Változtatások mentve! - - Part-DB1\src\Controller\PartController.php:216 - Part-DB1\src\Controller\PartController.php:219 - part.deleted Alkatrész sikeresen törölve. - - Part-DB1\src\Controller\PartController.php:302 - Part-DB1\src\Controller\PartController.php:277 - Part-DB1\src\Controller\PartController.php:317 - src\Controller\PartController.php:113 - src\Controller\PartController.php:142 - part.created_flash Alkatrész létrehozva! - - Part-DB1\src\Controller\PartController.php:308 - Part-DB1\src\Controller\PartController.php:283 - part.created_flash.invalid Hiba létrehozás közben: Kérjük, ellenőrizd az adatbevitelt! - - Part-DB1\src\Controller\ScanController.php:68 - Part-DB1\src\Controller\ScanController.php:90 - scan.qr_not_found Nem található elem a megadott vonalkódhoz. - - Part-DB1\src\Controller\ScanController.php:71 - scan.format_unknown Ismeretlen formátum! - - Part-DB1\src\Controller\ScanController.php:86 - scan.qr_success Elem megtalálva. - - Part-DB1\src\Controller\SecurityController.php:114 - Part-DB1\src\Controller\SecurityController.php:109 - pw_reset.user_or_email Felhasználónév / E-mail - - Part-DB1\src\Controller\SecurityController.php:131 - Part-DB1\src\Controller\SecurityController.php:126 - pw_reset.request.success A visszaállítási kérelem sikeres volt! Kérjük, ellenőrizd az e-mailjeidet további utasításokért. - - Part-DB1\src\Controller\SecurityController.php:162 - Part-DB1\src\Controller\SecurityController.php:160 - pw_reset.username Felhasználónév - - Part-DB1\src\Controller\SecurityController.php:165 - Part-DB1\src\Controller\SecurityController.php:163 - pw_reset.token Token - - Part-DB1\src\Controller\SecurityController.php:194 - Part-DB1\src\Controller\SecurityController.php:192 - pw_reset.new_pw.error Érvénytelen felhasználónév vagy token! Kérjük, ellenőrizd az adatbevitelt. - - Part-DB1\src\Controller\SecurityController.php:196 - Part-DB1\src\Controller\SecurityController.php:194 - pw_reset.new_pw.success A jelszó visszaállítása sikeresen megtörtént. Most bejelentkezhetsz az új jelszóval. - - Part-DB1\src\Controller\UserController.php:107 - Part-DB1\src\Controller\UserController.php:99 - user.edit.reset_success Az összes kétfaktoros hitelesítési módszer sikeresen letiltva. - - Part-DB1\src\Controller\UserSettingsController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:92 - tfa_backup.no_codes_enabled Nincsenek engedélyezve biztonsági kódok! - - Part-DB1\src\Controller\UserSettingsController.php:138 - Part-DB1\src\Controller\UserSettingsController.php:132 - tfa_u2f.u2f_delete.not_existing Nem létezik biztonsági kulcs ezzel az azonosítóval. - - Part-DB1\src\Controller\UserSettingsController.php:145 - Part-DB1\src\Controller\UserSettingsController.php:139 - tfa_u2f.u2f_delete.access_denied Nem törölheted más felhasználók biztonsági kulcsait! - - Part-DB1\src\Controller\UserSettingsController.php:153 - Part-DB1\src\Controller\UserSettingsController.php:147 - tfa.u2f.u2f_delete.success Biztonsági kulcs sikeresen eltávolítva. - - Part-DB1\src\Controller\UserSettingsController.php:188 - Part-DB1\src\Controller\UserSettingsController.php:180 - tfa_trustedDevice.invalidate.success Megbízható eszközök sikeresen visszaállítva. - - Part-DB1\src\Controller\UserSettingsController.php:235 - Part-DB1\src\Controller\UserSettingsController.php:226 - src\Controller\UserController.php:98 - user.settings.saved_flash Beállítások mentve! - - Part-DB1\src\Controller\UserSettingsController.php:297 - Part-DB1\src\Controller\UserSettingsController.php:288 - src\Controller\UserController.php:130 - user.settings.pw_changed_flash Jelszó módosítva! - - Part-DB1\src\Controller\UserSettingsController.php:317 - Part-DB1\src\Controller\UserSettingsController.php:306 - user.settings.2fa.google.activated Hitelesítő alkalmazás sikeresen aktiválva. - - Part-DB1\src\Controller\UserSettingsController.php:328 - Part-DB1\src\Controller\UserSettingsController.php:315 - user.settings.2fa.google.disabled Hitelesítő alkalmazás sikeresen deaktiválva. - - Part-DB1\src\Controller\UserSettingsController.php:346 - Part-DB1\src\Controller\UserSettingsController.php:332 - user.settings.2fa.backup_codes.regenerated Új biztonsági kódok sikeresen generálva. - - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - attachment.table.filesize Fájlméret - - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:245 - Part-DB1\src\DataTables\PartsDataTable.php:252 - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:193 - Part-DB1\src\DataTables\PartsDataTable.php:200 - true true - - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:246 - Part-DB1\src\DataTables\PartsDataTable.php:253 - Part-DB1\src\Form\Type\SIUnitType.php:139 - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:201 - Part-DB1\src\Form\Type\SIUnitType.php:139 - false false - - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:128 - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:119 - log.target_deleted deleted @@ -4519,8 +2661,6 @@ - Part-DB1\src\DataTables\Column\RevertLogColumn.php:57 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:60 new @@ -4530,8 +2670,6 @@ - Part-DB1\src\DataTables\Column\RevertLogColumn.php:63 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:66 new @@ -4541,8 +2679,6 @@ - Part-DB1\src\DataTables\Column\RevertLogColumn.php:83 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:86 new @@ -4551,70 +2687,42 @@ - - Part-DB1\src\DataTables\LogDataTable.php:173 - Part-DB1\src\DataTables\LogDataTable.php:161 - log.id ID - - Part-DB1\src\DataTables\LogDataTable.php:178 - Part-DB1\src\DataTables\LogDataTable.php:166 - log.timestamp Időbélyeg - - Part-DB1\src\DataTables\LogDataTable.php:183 - Part-DB1\src\DataTables\LogDataTable.php:171 - log.type Esemény - - Part-DB1\src\DataTables\LogDataTable.php:191 - Part-DB1\src\DataTables\LogDataTable.php:179 - log.level Szint - - Part-DB1\src\DataTables\LogDataTable.php:200 - Part-DB1\src\DataTables\LogDataTable.php:188 - log.user Felhasználó - - Part-DB1\src\DataTables\LogDataTable.php:213 - Part-DB1\src\DataTables\LogDataTable.php:201 - log.target_type Cél típusa - - Part-DB1\src\DataTables\LogDataTable.php:226 - Part-DB1\src\DataTables\LogDataTable.php:214 - log.target Cél @@ -4622,8 +2730,6 @@ - Part-DB1\src\DataTables\LogDataTable.php:231 - Part-DB1\src\DataTables\LogDataTable.php:218 new @@ -4632,1309 +2738,786 @@ - - Part-DB1\src\DataTables\PartsDataTable.php:168 - Part-DB1\src\DataTables\PartsDataTable.php:116 - part.table.name Név - - Part-DB1\src\DataTables\PartsDataTable.php:178 - Part-DB1\src\DataTables\PartsDataTable.php:126 - part.table.id Azonosító - - Part-DB1\src\DataTables\PartsDataTable.php:182 - Part-DB1\src\DataTables\PartsDataTable.php:130 - part.table.description Leírás - - Part-DB1\src\DataTables\PartsDataTable.php:185 - Part-DB1\src\DataTables\PartsDataTable.php:133 - part.table.category Kategória - - Part-DB1\src\DataTables\PartsDataTable.php:190 - Part-DB1\src\DataTables\PartsDataTable.php:138 - part.table.footprint Lábnyom - - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:142 - part.table.manufacturer Gyártó - - Part-DB1\src\DataTables\PartsDataTable.php:197 - Part-DB1\src\DataTables\PartsDataTable.php:145 - part.table.storeLocations Tárolási helyszínek - - Part-DB1\src\DataTables\PartsDataTable.php:216 - Part-DB1\src\DataTables\PartsDataTable.php:164 - part.table.amount Mennyiség - - Part-DB1\src\DataTables\PartsDataTable.php:224 - Part-DB1\src\DataTables\PartsDataTable.php:172 - part.table.minamount Minimális mennyiség - - Part-DB1\src\DataTables\PartsDataTable.php:232 - Part-DB1\src\DataTables\PartsDataTable.php:180 - part.table.partUnit Mértékegység - - Part-DB1\src\DataTables\PartsDataTable.php:236 - Part-DB1\src\DataTables\PartsDataTable.php:184 - part.table.addedDate Létrehozva - - Part-DB1\src\DataTables\PartsDataTable.php:240 - Part-DB1\src\DataTables\PartsDataTable.php:188 - part.table.lastModified Utolsó módosítás - - Part-DB1\src\DataTables\PartsDataTable.php:244 - Part-DB1\src\DataTables\PartsDataTable.php:192 - part.table.needsReview Ellenőrzés szükséges - - Part-DB1\src\DataTables\PartsDataTable.php:251 - Part-DB1\src\DataTables\PartsDataTable.php:199 - part.table.favorite Kedvenc - - Part-DB1\src\DataTables\PartsDataTable.php:258 - Part-DB1\src\DataTables\PartsDataTable.php:206 - part.table.manufacturingStatus Állapot - - Part-DB1\src\DataTables\PartsDataTable.php:260 - Part-DB1\src\DataTables\PartsDataTable.php:262 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:208 - Part-DB1\src\DataTables\PartsDataTable.php:210 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.unknown Ismeretlen - - Part-DB1\src\DataTables\PartsDataTable.php:263 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:211 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.announced Bejelentve - - Part-DB1\src\DataTables\PartsDataTable.php:264 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.active Aktív - - Part-DB1\src\DataTables\PartsDataTable.php:265 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:213 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.nrfnd Nem ajánlott új tervekhez - - Part-DB1\src\DataTables\PartsDataTable.php:266 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:214 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.eol Értéktelen - - Part-DB1\src\DataTables\PartsDataTable.php:267 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:215 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.discontinued Megszűnt - - Part-DB1\src\DataTables\PartsDataTable.php:271 - Part-DB1\src\DataTables\PartsDataTable.php:219 - part.table.mpn MPN - - Part-DB1\src\DataTables\PartsDataTable.php:275 - Part-DB1\src\DataTables\PartsDataTable.php:223 - part.table.mass Tömeg - - Part-DB1\src\DataTables\PartsDataTable.php:279 - Part-DB1\src\DataTables\PartsDataTable.php:227 - part.table.tags Címkék - - Part-DB1\src\DataTables\PartsDataTable.php:283 - Part-DB1\src\DataTables\PartsDataTable.php:231 - part.table.attachments Mellékletek - - Part-DB1\src\EventSubscriber\UserSystem\LoginSuccessSubscriber.php:82 - Part-DB1\src\EventSubscriber\LoginSuccessListener.php:82 - flash.login_successful Bejelentkezés sikeres - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - JSON JSON - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - XML XML - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - CSV CSV - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - YAML YAML - - Part-DB1\src\Form\AdminPages\ImportType.php:124 - Part-DB1\src\Form\AdminPages\ImportType.php:124 - import.abort_on_validation.help Ha ez az opció aktiválva van, az importálási folyamat megszakad, ha érvénytelen adatokat észlel. Ha nincs kiválasztva, az érvénytelen adatok figyelmen kívül hagyásra kerülnek, és az importáló megpróbálja importálni a többi elemet. - - Part-DB1\src\Form\AdminPages\ImportType.php:86 - Part-DB1\src\Form\AdminPages\ImportType.php:86 - src\Form\ImportType.php:70 - import.csv_separator CSV separator - - Part-DB1\src\Form\AdminPages\ImportType.php:93 - Part-DB1\src\Form\AdminPages\ImportType.php:93 - src\Form\ImportType.php:72 - parent.label Szülő elem - - Part-DB1\src\Form\AdminPages\ImportType.php:101 - Part-DB1\src\Form\AdminPages\ImportType.php:101 - src\Form\ImportType.php:75 - import.file Fájl - - Part-DB1\src\Form\AdminPages\ImportType.php:111 - Part-DB1\src\Form\AdminPages\ImportType.php:111 - src\Form\ImportType.php:78 - import.preserve_children Gyermek elemek megőrzése importáláskor - - Part-DB1\src\Form\AdminPages\ImportType.php:120 - Part-DB1\src\Form\AdminPages\ImportType.php:120 - src\Form\ImportType.php:80 - import.abort_on_validation Megszakítás érvénytelen adatok esetén - - Part-DB1\src\Form\AdminPages\ImportType.php:132 - Part-DB1\src\Form\AdminPages\ImportType.php:132 - src\Form\ImportType.php:85 - import.btn Importálás - - Part-DB1\src\Form\AttachmentFormType.php:113 - Part-DB1\src\Form\AttachmentFormType.php:109 - attachment.edit.secure_file.help A privátként megjelölt melléklet csak hitelesített felhasználók számára érhető el megfelelő jogosultságokkal. Ha ez aktiválva van, nem generálódnak miniatűrök, és a fájlhoz való hozzáférés kevésbé hatékony. - - Part-DB1\src\Form\AttachmentFormType.php:127 - Part-DB1\src\Form\AttachmentFormType.php:123 - attachment.edit.url.help Itt megadhatsz egy külső fájl URL-jét, vagy egy kulcsszót, amelyet a beépített erőforrásokban való kereséshez használnak (például lábnyomok). - - Part-DB1\src\Form\AttachmentFormType.php:82 - Part-DB1\src\Form\AttachmentFormType.php:79 - attachment.edit.name Név - - Part-DB1\src\Form\AttachmentFormType.php:85 - Part-DB1\src\Form\AttachmentFormType.php:82 - attachment.edit.attachment_type Melléklet típusa - - Part-DB1\src\Form\AttachmentFormType.php:94 - Part-DB1\src\Form\AttachmentFormType.php:91 - attachment.edit.show_in_table Táblázatban megjelenítés - - Part-DB1\src\Form\AttachmentFormType.php:105 - Part-DB1\src\Form\AttachmentFormType.php:102 - attachment.edit.secure_file Privát melléklet - - Part-DB1\src\Form\AttachmentFormType.php:119 - Part-DB1\src\Form\AttachmentFormType.php:115 - attachment.edit.url URL - - Part-DB1\src\Form\AttachmentFormType.php:133 - Part-DB1\src\Form\AttachmentFormType.php:129 - attachment.edit.download_url Külső fájl letöltése - - Part-DB1\src\Form\AttachmentFormType.php:146 - Part-DB1\src\Form\AttachmentFormType.php:142 - attachment.edit.file Fájl feltöltése - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:86 - part.label Alkatrész - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:87 - part_lot.label Alkatrész tétel - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.none Nincs - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.qr QR-kód (ajánlott) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code128 Code 128 (ajánlott) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code39 Code 39 (ajánlott) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code93 Code 93 - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.datamatrix Datamatrix - - Part-DB1\src\Form\LabelOptionsType.php:122 - label_options.lines_mode.html Helyőrzők - - Part-DB1\src\Form\LabelOptionsType.php:122 - label.options.lines_mode.twig Twig - - Part-DB1\src\Form\LabelOptionsType.php:126 - label_options.lines_mode.help Ha itt a Twig-et választod, a tartalom mező Twig sablonként lesz értelmezve. További információkért lásd a <a href="https://twig.symfony.com/doc/3.x/templates.html">Twig dokumentációt</a> és a <a href="https://docs.part-db.de/usage/labels.html#twig-mode">Wiki-t</a>. - - Part-DB1\src\Form\LabelOptionsType.php:47 - label_options.page_size.label Címke mérete - - Part-DB1\src\Form\LabelOptionsType.php:66 - label_options.supported_elements.label Cél típusa - - Part-DB1\src\Form\LabelOptionsType.php:75 - label_options.barcode_type.label Vonalkód - - Part-DB1\src\Form\LabelOptionsType.php:102 - label_profile.lines.label Tartalom - - Part-DB1\src\Form\LabelOptionsType.php:111 - label_options.additional_css.label További stílusok (CSS) - - Part-DB1\src\Form\LabelOptionsType.php:120 - label_options.lines_mode.label Értelmező mód - - Part-DB1\src\Form\LabelOptionsType.php:51 - label_options.width.placeholder Szélesség - - Part-DB1\src\Form\LabelOptionsType.php:60 - label_options.height.placeholder Magasság - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:49 - label_generator.target_id.range_hint Több azonosítót is megadhatsz itt (például 1,2,3) és/vagy egy tartományt (1-3) több elemhez való címkék generálásához egyszerre. - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:46 - label_generator.target_id.label Cél azonosítók - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:59 - label_generator.update Frissítés - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:36 - scan_dialog.input Bemenet - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:44 - scan_dialog.submit Benyújtás - - Part-DB1\src\Form\ParameterType.php:41 - parameters.name.placeholder pl. DC áramerősítés - - Part-DB1\src\Form\ParameterType.php:50 - parameters.symbol.placeholder e.g. h_{FE} - - Part-DB1\src\Form\ParameterType.php:60 - parameters.text.placeholder pl. Tesztkörülmények - - Part-DB1\src\Form\ParameterType.php:71 - parameters.max.placeholder e.g. 350 - - Part-DB1\src\Form\ParameterType.php:82 - parameters.min.placeholder e.g. 100 - - Part-DB1\src\Form\ParameterType.php:93 - parameters.typical.placeholder e.g. 200 - - Part-DB1\src\Form\ParameterType.php:103 - parameters.unit.placeholder e.g. V - - Part-DB1\src\Form\ParameterType.php:114 - parameter.group.placeholder pl. Műszaki specifikációk - - Part-DB1\src\Form\Part\OrderdetailType.php:72 - Part-DB1\src\Form\Part\OrderdetailType.php:75 - orderdetails.edit.supplierpartnr Beszállítói alkatrészszám - - Part-DB1\src\Form\Part\OrderdetailType.php:81 - Part-DB1\src\Form\Part\OrderdetailType.php:84 - orderdetails.edit.supplier Beszállító - - Part-DB1\src\Form\Part\OrderdetailType.php:87 - Part-DB1\src\Form\Part\OrderdetailType.php:90 - orderdetails.edit.url Ajánlatra mutató link - - Part-DB1\src\Form\Part\OrderdetailType.php:93 - Part-DB1\src\Form\Part\OrderdetailType.php:96 - orderdetails.edit.obsolete Már nem kapható - - Part-DB1\src\Form\Part\OrderdetailType.php:75 - Part-DB1\src\Form\Part\OrderdetailType.php:78 - orderdetails.edit.supplierpartnr.placeholder e.g. BC 547 - - Part-DB1\src\Form\Part\PartBaseType.php:101 - Part-DB1\src\Form\Part\PartBaseType.php:99 - part.edit.name Név - - Part-DB1\src\Form\Part\PartBaseType.php:109 - Part-DB1\src\Form\Part\PartBaseType.php:107 - part.edit.description Leírás - - Part-DB1\src\Form\Part\PartBaseType.php:120 - Part-DB1\src\Form\Part\PartBaseType.php:118 - part.edit.mininstock Minimális készlet - - Part-DB1\src\Form\Part\PartBaseType.php:129 - Part-DB1\src\Form\Part\PartBaseType.php:127 - part.edit.category Kategória - - Part-DB1\src\Form\Part\PartBaseType.php:135 - Part-DB1\src\Form\Part\PartBaseType.php:133 - part.edit.footprint Lábnyom - - Part-DB1\src\Form\Part\PartBaseType.php:142 - Part-DB1\src\Form\Part\PartBaseType.php:140 - part.edit.tags Címkék - - Part-DB1\src\Form\Part\PartBaseType.php:154 - Part-DB1\src\Form\Part\PartBaseType.php:152 - part.edit.manufacturer.label Gyártó - - Part-DB1\src\Form\Part\PartBaseType.php:161 - Part-DB1\src\Form\Part\PartBaseType.php:159 - part.edit.manufacturer_url.label Termékoldalra mutató link - - Part-DB1\src\Form\Part\PartBaseType.php:167 - Part-DB1\src\Form\Part\PartBaseType.php:165 - part.edit.mpn Gyártói alkatrészszám - - Part-DB1\src\Form\Part\PartBaseType.php:173 - Part-DB1\src\Form\Part\PartBaseType.php:171 - part.edit.manufacturing_status Gyártási állapot - - Part-DB1\src\Form\Part\PartBaseType.php:181 - Part-DB1\src\Form\Part\PartBaseType.php:179 - part.edit.needs_review Ellenőrzés szükséges - - Part-DB1\src\Form\Part\PartBaseType.php:189 - Part-DB1\src\Form\Part\PartBaseType.php:187 - part.edit.is_favorite Kedvenc - - Part-DB1\src\Form\Part\PartBaseType.php:197 - Part-DB1\src\Form\Part\PartBaseType.php:195 - part.edit.mass Tömeg - - Part-DB1\src\Form\Part\PartBaseType.php:203 - Part-DB1\src\Form\Part\PartBaseType.php:201 - part.edit.partUnit Mértékegység - - Part-DB1\src\Form\Part\PartBaseType.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:210 - part.edit.comment Jegyzetek - - Part-DB1\src\Form\Part\PartBaseType.php:250 - Part-DB1\src\Form\Part\PartBaseType.php:246 - part.edit.master_attachment Előnézeti kép - - Part-DB1\src\Form\Part\PartBaseType.php:295 - Part-DB1\src\Form\Part\PartBaseType.php:276 - src\Form\PartType.php:91 - part.edit.save Változtatások mentése - - Part-DB1\src\Form\Part\PartBaseType.php:296 - Part-DB1\src\Form\Part\PartBaseType.php:277 - src\Form\PartType.php:92 - part.edit.reset Változtatások visszaállítása - - Part-DB1\src\Form\Part\PartBaseType.php:105 - Part-DB1\src\Form\Part\PartBaseType.php:103 - part.edit.name.placeholder e.g. BC547 - - Part-DB1\src\Form\Part\PartBaseType.php:115 - Part-DB1\src\Form\Part\PartBaseType.php:113 - part.edit.description.placeholder e.g. NPN 45V, 0,1A, 0,5W - - Part-DB1\src\Form\Part\PartBaseType.php:123 - Part-DB1\src\Form\Part\PartBaseType.php:121 - part.editmininstock.placeholder e.g. 1 - - Part-DB1\src\Form\Part\PartLotType.php:69 - Part-DB1\src\Form\Part\PartLotType.php:69 - part_lot.edit.description Leírás - - Part-DB1\src\Form\Part\PartLotType.php:78 - Part-DB1\src\Form\Part\PartLotType.php:78 - part_lot.edit.location Tárolási helyszín - - Part-DB1\src\Form\Part\PartLotType.php:89 - Part-DB1\src\Form\Part\PartLotType.php:89 - part_lot.edit.amount Mennyiség - - Part-DB1\src\Form\Part\PartLotType.php:98 - Part-DB1\src\Form\Part\PartLotType.php:97 - part_lot.edit.instock_unknown Ismeretlen mennyiség - - Part-DB1\src\Form\Part\PartLotType.php:109 - Part-DB1\src\Form\Part\PartLotType.php:108 - part_lot.edit.needs_refill Utántöltés szükséges - - Part-DB1\src\Form\Part\PartLotType.php:120 - Part-DB1\src\Form\Part\PartLotType.php:119 - part_lot.edit.expiration_date Lejárati dátum - - Part-DB1\src\Form\Part\PartLotType.php:128 - Part-DB1\src\Form\Part\PartLotType.php:125 - part_lot.edit.comment Jegyzetek - - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - perm.group.other Egyéb - - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - tfa_google.enable Hitelesítő alkalmazás engedélyezése - - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - tfa_google.disable Hitelesítő alkalmazás deaktiválása - - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - google_confirmation Megerősítő kód - - Part-DB1\src\Form\UserSettingsType.php:108 - Part-DB1\src\Form\UserSettingsType.php:108 - src\Form\UserSettingsType.php:46 - user.timezone.label Időzóna - - Part-DB1\src\Form\UserSettingsType.php:133 - Part-DB1\src\Form\UserSettingsType.php:132 - user.currency.label Előnyben részesített pénznem - - Part-DB1\src\Form\UserSettingsType.php:140 - Part-DB1\src\Form\UserSettingsType.php:139 - src\Form\UserSettingsType.php:53 - save Változtatások alkalmazása - - Part-DB1\src\Form\UserSettingsType.php:141 - Part-DB1\src\Form\UserSettingsType.php:140 - src\Form\UserSettingsType.php:54 - reset Változtatások elvetése - - Part-DB1\src\Form\UserSettingsType.php:104 - Part-DB1\src\Form\UserSettingsType.php:104 - src\Form\UserSettingsType.php:45 - user_settings.language.placeholder Szerver szintű nyelv - - Part-DB1\src\Form\UserSettingsType.php:115 - Part-DB1\src\Form\UserSettingsType.php:115 - src\Form\UserSettingsType.php:48 - user_settings.timezone.placeholder Szerver szintű időzóna - - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - attachment.label Melléklet - - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - attachment_type.label Melléklet típusa - - Part-DB1\src\Services\ElementTypeNameGenerator.php:82 - Part-DB1\src\Services\ElementTypeNameGenerator.php:82 - project.label Projekt - - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - measurement_unit.label Mértékegység - - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - currency.label Pénznem - - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - orderdetail.label Rendelési részletek - - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - pricedetail.label Ár részletek - - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - user.label Felhasználó - - Part-DB1\src\Services\ElementTypeNameGenerator.php:95 - parameter.label Paraméter - - Part-DB1\src\Services\ElementTypeNameGenerator.php:96 - label_profile.label Címkeprofil @@ -5942,8 +3525,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:176 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:161 new @@ -5952,214 +3533,126 @@ - - Part-DB1\src\Services\MarkdownParser.php:73 - Part-DB1\src\Services\MarkdownParser.php:73 - markdown.loading Markdown betöltése. Ha ez az üzenet nem tűnik el, próbáld meg újratölteni az oldalt. - - Part-DB1\src\Services\PasswordResetManager.php:98 - Part-DB1\src\Services\PasswordResetManager.php:98 - pw_reset.email.subject Jelszó visszaállítás a Part-DB fiókodhoz - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - tree.tools.tools Eszközök - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:107 - src\Services\ToolsTreeBuilder.php:74 - tree.tools.edit Szerkesztés - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:110 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - src\Services\ToolsTreeBuilder.php:81 - tree.tools.show Megjelenítés - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:111 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - tree.tools.system Rendszer - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:123 - tree.tools.tools.label_dialog Címkegenerátor - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:130 - tree.tools.tools.label_scanner Szkenner - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:149 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:126 - src\Services\ToolsTreeBuilder.php:62 - tree.tools.edit.attachment_types Melléklet típusok - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:155 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:132 - src\Services\ToolsTreeBuilder.php:64 - tree.tools.edit.categories Kategóriák - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:161 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:138 - src\Services\ToolsTreeBuilder.php:66 - tree.tools.edit.projects Projektek - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:167 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:144 - src\Services\ToolsTreeBuilder.php:68 - tree.tools.edit.suppliers Beszállítók - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:173 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:150 - src\Services\ToolsTreeBuilder.php:70 - tree.tools.edit.manufacturer Gyártók - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:179 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:156 - tree.tools.edit.storelocation Tárolási helyszínek - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:185 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:162 - tree.tools.edit.footprint Lábnyomok - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:191 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:168 - tree.tools.edit.currency Pénznemek - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:174 - tree.tools.edit.measurement_unit Mértékegység - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.edit.label_profile Címkeprofilok - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:209 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:180 - tree.tools.edit.part Új alkatrész - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:226 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - src\Services\ToolsTreeBuilder.php:77 - tree.tools.show.all_parts Összes alkatrész megjelenítése - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:232 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.show.all_attachments Mellékletek @@ -6167,8 +3660,6 @@ - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:239 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:210 new @@ -6177,20 +3668,12 @@ - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:258 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:229 - tree.tools.system.users Felhasználók - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:264 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:235 - tree.tools.system.groups Csoportok @@ -6198,8 +3681,6 @@ - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:271 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:242 new @@ -6208,11 +3689,6 @@ - - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - src\Services\TreeBuilder.php:124 - entity.tree.new Új elem @@ -6220,7 +3696,6 @@ - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 obsolete @@ -6230,8 +3705,6 @@ - Part-DB1\templates\_navbar.html.twig:27 - templates\base.html.twig:88 obsolete @@ -6241,8 +3714,6 @@ - Part-DB1\src\Form\UserSettingsType.php:119 - src\Form\UserSettingsType.php:49 obsolete @@ -6252,8 +3723,6 @@ - Part-DB1\src\Form\UserSettingsType.php:129 - src\Form\UserSettingsType.php:50 obsolete @@ -6263,7 +3732,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:100 new obsolete @@ -6274,10 +3742,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:128 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:150 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:169 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:207 new obsolete @@ -6288,10 +3752,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:130 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:152 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:171 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:209 new obsolete @@ -6302,7 +3762,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:139 new obsolete @@ -6313,7 +3772,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:160 new obsolete @@ -6324,7 +3782,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:184 new obsolete @@ -6335,7 +3792,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:198 new obsolete @@ -6346,7 +3802,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:214 new obsolete @@ -6357,7 +3812,6 @@ - templates\base.html.twig:81 obsolete obsolete @@ -6368,7 +3822,6 @@ - templates\base.html.twig:109 obsolete obsolete @@ -6379,7 +3832,6 @@ - templates\base.html.twig:112 obsolete obsolete @@ -6670,7 +4122,6 @@ - src\Form\PartType.php:63 obsolete obsolete @@ -7331,7 +4782,6 @@ - templates\Parts\show_part_info.html.twig:194 obsolete obsolete @@ -7342,7 +4792,6 @@ - src\Form\PartType.php:83 obsolete obsolete @@ -14019,4 +11468,4 @@ - + \ No newline at end of file diff --git a/translations/messages.it.xlf b/translations/messages.it.xlf index 5de5b7e5..6cdcf00f 100644 --- a/translations/messages.it.xlf +++ b/translations/messages.it.xlf @@ -2,11 +2,6 @@ - - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - attachment_type.caption Tipi di file per allegati @@ -14,7 +9,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:12 new @@ -24,7 +18,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:16 new @@ -33,45 +26,18 @@ - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - templates\AdminPages\CategoryAdmin.html.twig:4 - templates\base.html.twig:163 - templates\base.html.twig:170 - templates\base.html.twig:197 - templates\base.html.twig:225 - category.labelp Categorie - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:19 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:11 - templates\AdminPages\CategoryAdmin.html.twig:8 - admin.options Opzioni - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - templates\AdminPages\CategoryAdmin.html.twig:9 - admin.advanced Avanzato @@ -79,7 +45,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:13 new @@ -89,7 +54,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:17 new @@ -98,30 +62,18 @@ - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - currency.caption Valuta - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - currency.iso_code.caption Codice ISO - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - currency.symbol.caption Simbolo della valuta @@ -129,7 +81,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:29 new @@ -139,7 +90,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:33 new @@ -149,7 +99,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:8 new @@ -159,7 +108,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:12 new @@ -168,89 +116,36 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Ricerca - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - templates\AdminPages\EntityAdminBase.html.twig:13 - templates\base.html.twig:166 - templates\base.html.twig:193 - templates\base.html.twig:221 - expandAll Espande tutto - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - templates\AdminPages\EntityAdminBase.html.twig:17 - templates\base.html.twig:167 - templates\base.html.twig:194 - templates\base.html.twig:222 - reduceAll Ridurre tutto - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - part.info.timetravel_hint Così appare il componente prima di %timestamp%. <i>Si prega di notare che questa funzione è sperimentale, quindi le informazioni potrebbero non essere corrette.</i> - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - templates\AdminPages\EntityAdminBase.html.twig:42 - standard.label Proprietà - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - templates\AdminPages\EntityAdminBase.html.twig:43 - infos.label Informazioni @@ -258,8 +153,6 @@ - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 new @@ -268,120 +161,66 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - templates\AdminPages\EntityAdminBase.html.twig:45 - export.label Esportare - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - templates\AdminPages\EntityAdminBase.html.twig:47 - import_export.label Importare / Esportare - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - mass_creation.label Creazione di massa - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - templates\AdminPages\EntityAdminBase.html.twig:59 - admin.common Comune - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - admin.attachments Allegati - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:90 - admin.parameters Parametri - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:179 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:167 - templates\AdminPages\EntityAdminBase.html.twig:142 - export_all.label Esportare tutti gli elementi - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:185 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:173 - mass_creation.help Ogni riga sarà interpretata come il nome di un elemento, che verrà creato. Si possono creare strutture nidificate tramite indentazione. - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - templates\AdminPages\EntityAdminBase.html.twig:35 - edit.caption Modificare l'elemento "%name" - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - templates\AdminPages\EntityAdminBase.html.twig:37 - new.caption Nuovo elemento - - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - templates\base.html.twig:172 - templates\base.html.twig:199 - templates\base.html.twig:227 - footprint.labelp Footprints @@ -389,7 +228,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:13 new @@ -399,7 +237,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:17 new @@ -408,22 +245,12 @@ - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - group.edit.caption Gruppi - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - user.edit.permissions Permessi @@ -431,7 +258,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:24 new @@ -441,7 +267,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:28 new @@ -450,27 +275,18 @@ - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:4 - label_profile.caption Profili di etichette - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:8 - label_profile.advanced Avanzate - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:9 - label_profile.comment Note @@ -478,7 +294,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:55 new @@ -488,7 +303,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:59 new @@ -497,11 +311,6 @@ - - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - templates\AdminPages\ManufacturerAdmin.html.twig:4 - manufacturer.caption Produttori @@ -509,7 +318,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:8 new @@ -519,7 +327,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:12 new @@ -528,10 +335,6 @@ - - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - measurement_unit.caption Unità di misura @@ -544,15 +347,6 @@ - - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:5 - Part-DB1\templates\_sidebar.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:8 - templates\base.html.twig:171 - templates\base.html.twig:198 - templates\base.html.twig:226 - storelocation.labelp Ubicazioni @@ -560,7 +354,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:32 new @@ -570,7 +363,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:36 new @@ -580,7 +372,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:16 new @@ -590,7 +381,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:20 new @@ -599,120 +389,66 @@ - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - user.edit.caption Utenti - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - user.edit.configuration Configurazione - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - user.edit.password Password - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - user.edit.tfa.caption Autenticazione a due fattori - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - user.edit.tfa.google_active App di autenticazione attiva - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - tfa_backup.remaining_tokens Conteggio dei codici di backup restanti - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - tfa_backup.generation_date Data di creazione dei codici di backup - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - user.edit.tfa.disabled Metodo disabilitato - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - user.edit.tfa.u2f_keys_count Chiavi di sicurezza attive - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_title Si vuole veramente procedere? - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_message Questo disabiliterà <b>tutti i metodi di autenticazione a due fattori attivi dell'utente</b> ed eliminerà i <b>codici di backup</b>! @@ -722,10 +458,6 @@ L'utente dovrà configurare nuovamente tutti i metodi di autenticazione a due fa - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - user.edit.tfa.disable_tfa.btn Disabilitare tutti i metodi di autenticazione a due fattori @@ -733,7 +465,6 @@ L'utente dovrà configurare nuovamente tutti i metodi di autenticazione a due fa - Part-DB1\templates\AdminPages\UserAdmin.html.twig:85 new @@ -743,7 +474,6 @@ L'utente dovrà configurare nuovamente tutti i metodi di autenticazione a due fa - Part-DB1\templates\AdminPages\UserAdmin.html.twig:89 new @@ -752,13 +482,6 @@ L'utente dovrà configurare nuovamente tutti i metodi di autenticazione a due fa - - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:63 - attachment.delete Eliminare @@ -771,102 +494,48 @@ L'utente dovrà configurare nuovamente tutti i metodi di autenticazione a due fa - - Part-DB1\templates\AdminPages\_attachments.html.twig:49 - Part-DB1\templates\Parts\edit\_attachments.html.twig:47 - Part-DB1\templates\AdminPages\_attachments.html.twig:47 - Part-DB1\templates\Parts\edit\_attachments.html.twig:45 - attachment.preview.alt Miniatura dell'allegato - - Part-DB1\templates\AdminPages\_attachments.html.twig:52 - Part-DB1\templates\Parts\edit\_attachments.html.twig:50 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 - Part-DB1\templates\AdminPages\_attachments.html.twig:50 - Part-DB1\templates\Parts\edit\_attachments.html.twig:48 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:45 - attachment.view_local Visualizza la copia locale - - Part-DB1\templates\AdminPages\_attachments.html.twig:58 - Part-DB1\templates\Parts\edit\_attachments.html.twig:56 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:43 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - Part-DB1\templates\AdminPages\_attachments.html.twig:56 - Part-DB1\templates\Parts\edit\_attachments.html.twig:54 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:38 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - attachment.file_not_found File non trovato - - Part-DB1\templates\AdminPages\_attachments.html.twig:66 - Part-DB1\templates\Parts\edit\_attachments.html.twig:64 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:48 - Part-DB1\templates\Parts\edit\_attachments.html.twig:62 - attachment.secure Allegato privato - - Part-DB1\templates\AdminPages\_attachments.html.twig:79 - Part-DB1\templates\Parts\edit\_attachments.html.twig:77 - Part-DB1\templates\AdminPages\_attachments.html.twig:77 - Part-DB1\templates\Parts\edit\_attachments.html.twig:75 - attachment.create Aggiungere un allegato - - Part-DB1\templates\AdminPages\_attachments.html.twig:84 - Part-DB1\templates\Parts\edit\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - Part-DB1\templates\AdminPages\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_attachments.html.twig:80 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - part_lot.edit.delete.confirm Si vuole davvero cancellare questo stock? Questa azione non potrà essere annullata! - - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - templates\AdminPages\_delete_form.html.twig:2 - entity.delete.confirm_title Si vuole veramente eliminare %name%? - - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - templates\AdminPages\_delete_form.html.twig:3 - entity.delete.message Questo non può essere annullato! @@ -875,11 +544,6 @@ I sub elementi saranno spostati verso l'alto. - - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - templates\AdminPages\_delete_form.html.twig:9 - entity.delete Cancella elemento @@ -887,12 +551,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:45 - Part-DB1\src\Form\Part\PartBaseType.php:286 - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:43 - Part-DB1\src\Form\Part\PartBaseType.php:267 new @@ -901,561 +559,300 @@ I sub elementi saranno spostati verso l'alto. - - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - templates\AdminPages\_delete_form.html.twig:12 - entity.delete.recursive Elimina ricorsivo (tutti i sub elementi) - - Part-DB1\templates\AdminPages\_duplicate.html.twig:3 - entity.duplicate Duplicare l'elemento - - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - templates\AdminPages\_export_form.html.twig:4 - src\Form\ImportType.php:67 - export.format Formato del file - - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - templates\AdminPages\_export_form.html.twig:16 - export.level Livello di verbosità - - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - templates\AdminPages\_export_form.html.twig:19 - export.level.simple Semplice - - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - templates\AdminPages\_export_form.html.twig:20 - export.level.extended Esteso - - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - templates\AdminPages\_export_form.html.twig:21 - export.level.full Completo - - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - templates\AdminPages\_export_form.html.twig:31 - export.include_children Includi i sub elementi nell'esportazione - - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - templates\AdminPages\_export_form.html.twig:39 - export.btn Esportare - - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - templates\AdminPages\EntityAdminBase.html.twig:94 - templates\Parts\edit_part_info.html.twig:12 - templates\Parts\show_part_info.html.twig:11 - id.label ID - - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:76 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:77 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:77 - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:59 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:60 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:53 - templates\AdminPages\EntityAdminBase.html.twig:101 - templates\Parts\show_part_info.html.twig:248 - createdAt Creato il - - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:73 - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:49 - templates\AdminPages\EntityAdminBase.html.twig:114 - templates\Parts\show_part_info.html.twig:263 - lastModified Ultima modifica - - Part-DB1\templates\AdminPages\_info.html.twig:38 - Part-DB1\templates\AdminPages\_info.html.twig:38 - entity.info.parts_count Numero di componenti con questo elemento - - Part-DB1\templates\AdminPages\_parameters.html.twig:6 - Part-DB1\templates\helper.twig:125 - Part-DB1\templates\Parts\edit\_specifications.html.twig:6 - specifications.property Parametro - - Part-DB1\templates\AdminPages\_parameters.html.twig:7 - Part-DB1\templates\Parts\edit\_specifications.html.twig:7 - specifications.symbol Simbolo - - Part-DB1\templates\AdminPages\_parameters.html.twig:8 - Part-DB1\templates\Parts\edit\_specifications.html.twig:8 - specifications.value_min Min. - - Part-DB1\templates\AdminPages\_parameters.html.twig:9 - Part-DB1\templates\Parts\edit\_specifications.html.twig:9 - specifications.value_typ Typ. - - Part-DB1\templates\AdminPages\_parameters.html.twig:10 - Part-DB1\templates\Parts\edit\_specifications.html.twig:10 - specifications.value_max Max. - - Part-DB1\templates\AdminPages\_parameters.html.twig:11 - Part-DB1\templates\Parts\edit\_specifications.html.twig:11 - specifications.unit Unità - - Part-DB1\templates\AdminPages\_parameters.html.twig:12 - Part-DB1\templates\Parts\edit\_specifications.html.twig:12 - specifications.text Testo - - Part-DB1\templates\AdminPages\_parameters.html.twig:13 - Part-DB1\templates\Parts\edit\_specifications.html.twig:13 - specifications.group Gruppo - - Part-DB1\templates\AdminPages\_parameters.html.twig:26 - Part-DB1\templates\Parts\edit\_specifications.html.twig:26 - specification.create Nuovo parametro - - Part-DB1\templates\AdminPages\_parameters.html.twig:31 - Part-DB1\templates\Parts\edit\_specifications.html.twig:31 - parameter.delete.confirm Si vuole davvero eliminare questo parametro? - - Part-DB1\templates\attachment_list.html.twig:3 - Part-DB1\templates\attachment_list.html.twig:3 - attachment.list.title Lista allegati - - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - part_list.loading.caption Caricamento - - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - part_list.loading.message Questo può richiedere un attimo. Se questo messaggio non scompare, provare a ricaricare la pagina. - - Part-DB1\templates\base.html.twig:68 - Part-DB1\templates\base.html.twig:68 - templates\base.html.twig:246 - vendor.base.javascript_hint Attivare Javascript per utilizzare tutte le funzionalità! - - Part-DB1\templates\base.html.twig:73 - Part-DB1\templates\base.html.twig:73 - sidebar.big.toggle Mostra/Nascondi la barra laterale - - Part-DB1\templates\base.html.twig:95 - Part-DB1\templates\base.html.twig:95 - templates\base.html.twig:271 - loading.caption Caricamento: - - Part-DB1\templates\base.html.twig:96 - Part-DB1\templates\base.html.twig:96 - templates\base.html.twig:272 - loading.message Questo può richiedere un attimo. Se questo messaggio non scompare, provare a ricaricare la pagina. - - Part-DB1\templates\base.html.twig:101 - Part-DB1\templates\base.html.twig:101 - templates\base.html.twig:277 - loading.bar Caricamento... - - Part-DB1\templates\base.html.twig:112 - Part-DB1\templates\base.html.twig:112 - templates\base.html.twig:288 - back_to_top Torna all'inizio della pagina - - Part-DB1\templates\Form\permissionLayout.html.twig:35 - Part-DB1\templates\Form\permissionLayout.html.twig:35 - permission.edit.permission Autorizzazioni - - Part-DB1\templates\Form\permissionLayout.html.twig:36 - Part-DB1\templates\Form\permissionLayout.html.twig:36 - permission.edit.value Valore - - Part-DB1\templates\Form\permissionLayout.html.twig:53 - Part-DB1\templates\Form\permissionLayout.html.twig:53 - permission.legend.title Spiegazione degli stati: - - Part-DB1\templates\Form\permissionLayout.html.twig:57 - Part-DB1\templates\Form\permissionLayout.html.twig:57 - permission.legend.disallow Vietato - - Part-DB1\templates\Form\permissionLayout.html.twig:61 - Part-DB1\templates\Form\permissionLayout.html.twig:61 - permission.legend.allow Consentito - - Part-DB1\templates\Form\permissionLayout.html.twig:65 - Part-DB1\templates\Form\permissionLayout.html.twig:65 - permission.legend.inherit Ereditare dal gruppo (genitore) - - Part-DB1\templates\helper.twig:3 - Part-DB1\templates\helper.twig:3 - bool.true Vero - - Part-DB1\templates\helper.twig:5 - Part-DB1\templates\helper.twig:5 - bool.false Falso - - Part-DB1\templates\helper.twig:92 - Part-DB1\templates\helper.twig:87 - Yes Si - - Part-DB1\templates\helper.twig:94 - Part-DB1\templates\helper.twig:89 - No No - - Part-DB1\templates\helper.twig:126 - specifications.value Valore - - Part-DB1\templates\homepage.html.twig:7 - Part-DB1\templates\homepage.html.twig:7 - templates\homepage.html.twig:7 - version.caption Versione - - Part-DB1\templates\homepage.html.twig:22 - Part-DB1\templates\homepage.html.twig:22 - templates\homepage.html.twig:19 - homepage.license Informazioni di licenza - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.caption Pagina del progetto - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.text Sorgenti, download, segnalazioni di bug, to-do-list ecc. possono essere trovati su <a href="%href%" class="link-external" target="_blank">GitHub project page</a> - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.caption Aiuto - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.text Aiuto e suggerimenti possono essere trovati in Wiki di <a href="%href%" class="link-external" target="_blank">GitHub page</a> - - Part-DB1\templates\homepage.html.twig:33 - Part-DB1\templates\homepage.html.twig:33 - templates\homepage.html.twig:30 - homepage.forum.caption Forum @@ -1463,8 +860,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\homepage.html.twig:45 - Part-DB1\templates\homepage.html.twig:45 new @@ -1473,138 +868,90 @@ I sub elementi saranno spostati verso l'alto. - - Part-DB1\templates\LabelSystem\dialog.html.twig:3 - Part-DB1\templates\LabelSystem\dialog.html.twig:6 - label_generator.title Generatore di etichette - - Part-DB1\templates\LabelSystem\dialog.html.twig:16 - label_generator.common Comune - - Part-DB1\templates\LabelSystem\dialog.html.twig:20 - label_generator.advanced Avanzate - - Part-DB1\templates\LabelSystem\dialog.html.twig:24 - label_generator.profiles Profili - - Part-DB1\templates\LabelSystem\dialog.html.twig:58 - label_generator.selected_profile Profilo attualmente selezionato - - Part-DB1\templates\LabelSystem\dialog.html.twig:62 - label_generator.edit_profile Modificare il profilo - - Part-DB1\templates\LabelSystem\dialog.html.twig:75 - label_generator.load_profile Caricare il profilo - - Part-DB1\templates\LabelSystem\dialog.html.twig:102 - label_generator.download Download - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:3 - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:5 - label_generator.label_btn Generare una etichetta - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:20 - label_generator.label_empty Nuova etichetta vuota - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:3 - label_scanner.title Lettore di etichette - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.title Webcam non trovata - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.text E' necessaria una webcam e bisogna dare il permesso di usare la funzione scanner. Si può inserire manualmente il codice a barre qui sotto. - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:27 - label_scanner.source_select Selezionare una sorgente - - Part-DB1\templates\LogSystem\log_list.html.twig:3 - Part-DB1\templates\LogSystem\log_list.html.twig:3 - log.list.title Registro di sistema @@ -1612,8 +959,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\LogSystem\_log_table.html.twig:1 - Part-DB1\templates\LogSystem\_log_table.html.twig:1 new @@ -1623,8 +968,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\LogSystem\_log_table.html.twig:2 - Part-DB1\templates\LogSystem\_log_table.html.twig:2 new @@ -1633,194 +976,114 @@ I sub elementi saranno spostati verso l'alto. - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.email_sent_by Questa e-mail è stata inviata automaticamente da - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.dont_reply Non rispondere a questa e-mail. - - Part-DB1\templates\mail\pw_reset.html.twig:6 - Part-DB1\templates\mail\pw_reset.html.twig:6 - email.hi %name% Buongiorno %name% - - Part-DB1\templates\mail\pw_reset.html.twig:7 - Part-DB1\templates\mail\pw_reset.html.twig:7 - email.pw_reset.message Qualcuno (si spera tu) ha richiesto una reimpostazione della tua password. Se questa richiesta non è stata fatta da te, ignora questa mail. - - Part-DB1\templates\mail\pw_reset.html.twig:9 - Part-DB1\templates\mail\pw_reset.html.twig:9 - email.pw_reset.button Clicca qui per reimpostare la password - - Part-DB1\templates\mail\pw_reset.html.twig:11 - Part-DB1\templates\mail\pw_reset.html.twig:11 - email.pw_reset.fallback Se questo non funziona, vai su <a href="%url%">%url%</a> e inserisci le seguenti informazioni - - Part-DB1\templates\mail\pw_reset.html.twig:16 - Part-DB1\templates\mail\pw_reset.html.twig:16 - email.pw_reset.username Nome utente - - Part-DB1\templates\mail\pw_reset.html.twig:19 - Part-DB1\templates\mail\pw_reset.html.twig:19 - email.pw_reset.token Token - - Part-DB1\templates\mail\pw_reset.html.twig:24 - Part-DB1\templates\mail\pw_reset.html.twig:24 - email.pw_reset.valid_unit %date% Il token di reset sarà valido fino al <i>%date%</i>. - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:18 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:78 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - orderdetail.delete Cancellare - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - pricedetails.edit.min_qty Quantità minima d'ordine - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - pricedetails.edit.price Prezzo - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - pricedetails.edit.price_qty per la quantità - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - pricedetail.create Aggiungi prezzo - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - templates\Parts\edit_part_info.html.twig:4 - part.edit.title Modifica il componente %name% - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - templates\Parts\edit_part_info.html.twig:9 - part.edit.card_title Modificare le informazioni sui componenti di - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - part.edit.tab.common In generale - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - part.edit.tab.manufacturer Produttore - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - part.edit.tab.advanced Avanzate @@ -1887,279 +1150,156 @@ I sub elementi saranno spostati verso l'alto. - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - part.edit.tab.part_lots Stock - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - part.edit.tab.attachments Allegati - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - part.edit.tab.orderdetails Informazioni di acquisto - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.specifications Parametri - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:64 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.comment Note - - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - templates\Parts\new_part.html.twig:8 - part.new.card_title Creare nuovo componente - - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - part_lot.delete Cancellare - - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - part_lot.create Aggiungere stock - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - orderdetail.create Aggiungere un distributore - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - pricedetails.edit.delete.confirm Vuoi davvero cancellare questo prezzo? Questo non può essere annullato! - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:62 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:61 - orderdetails.edit.delete.confirm Vuoi davvero cancellare questo fornitore? Questo non può essere annullato! - - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - templates\Parts\show_part_info.html.twig:4 - templates\Parts\show_part_info.html.twig:9 - part.info.title Informazioni dettagliate per - - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - part.part_lots.label Stock - - Part-DB1\templates\Parts\info\show_part_info.html.twig:56 - Part-DB1\templates\Parts\lists\_info_card.html.twig:43 - Part-DB1\templates\_navbar_search.html.twig:31 - Part-DB1\templates\_navbar_search.html.twig:26 - templates\base.html.twig:62 - templates\Parts\show_part_info.html.twig:74 - src\Form\PartType.php:86 - comment.label Note - - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - part.info.specifications Parametri - - Part-DB1\templates\Parts\info\show_part_info.html.twig:74 - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - templates\Parts\show_part_info.html.twig:82 - attachment.labelp Allegati - - Part-DB1\templates\Parts\info\show_part_info.html.twig:83 - Part-DB1\templates\Parts\info\show_part_info.html.twig:71 - templates\Parts\show_part_info.html.twig:88 - vendor.partinfo.shopping_infos Informazioni di acquisto - - Part-DB1\templates\Parts\info\show_part_info.html.twig:91 - Part-DB1\templates\Parts\info\show_part_info.html.twig:78 - templates\Parts\show_part_info.html.twig:94 - vendor.partinfo.history Storico - - Part-DB1\templates\Parts\info\show_part_info.html.twig:97 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - Part-DB1\templates\Parts\info\show_part_info.html.twig:84 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - templates\base.html.twig:176 - templates\base.html.twig:203 - templates\base.html.twig:217 - templates\base.html.twig:231 - templates\Parts\show_part_info.html.twig:100 - tools.label Utilità - - Part-DB1\templates\Parts\info\show_part_info.html.twig:103 - Part-DB1\templates\Parts\info\show_part_info.html.twig:90 - extended_info.label Informazioni estese - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - attachment.name Nome - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - attachment.attachment_type Tipo di allegato - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - attachment.file_name Nome del file - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - attachment.file_size Dimensioni del file - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:54 - attachment.preview Immagine di anteprima - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:67 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:50 - attachment.download_local Scarica la copia in locale @@ -2167,8 +1307,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 new @@ -2177,14 +1315,6 @@ I sub elementi saranno spostati verso l'alto. - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Unknown Sconosciuto @@ -2192,10 +1322,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 new @@ -2205,8 +1331,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 new @@ -2215,49 +1339,24 @@ I sub elementi saranno spostati verso l'alto. - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - part.isFavorite Preferito - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - part.minOrderAmount Importo minimo dell'ordine - - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:46 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:41 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - templates\base.html.twig:70 - templates\Parts\show_part_info.html.twig:24 - src\Form\PartType.php:80 - manufacturer.label Produttore - - Part-DB1\templates\Parts\info\_main_infos.html.twig:24 - Part-DB1\templates\_navbar_search.html.twig:11 - templates\base.html.twig:54 - src\Form\PartType.php:62 - name.label Nome @@ -2265,8 +1364,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 new @@ -2275,767 +1372,432 @@ I sub elementi saranno spostati verso l'alto. - - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:19 - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:18 - templates\base.html.twig:58 - templates\Parts\show_part_info.html.twig:31 - src\Form\PartType.php:65 - description.label Descrizione - - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:15 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:14 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - templates\base.html.twig:56 - templates\Parts\show_part_info.html.twig:32 - src\Form\PartType.php:74 - category.label Categoria - - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - templates\Parts\show_part_info.html.twig:42 - src\Form\PartType.php:69 - instock.label A stock - - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - templates\Parts\show_part_info.html.twig:44 - src\Form\PartType.php:72 - mininstock.label Scorta minima - - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:52 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:47 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - templates\base.html.twig:73 - templates\Parts\show_part_info.html.twig:47 - footprint.label Footprint - - Part-DB1\templates\Parts\info\_main_infos.html.twig:56 - Part-DB1\templates\Parts\info\_main_infos.html.twig:59 - Part-DB1\templates\Parts\info\_main_infos.html.twig:57 - Part-DB1\templates\Parts\info\_main_infos.html.twig:60 - templates\Parts\show_part_info.html.twig:51 - part.avg_price.label Prezzo medio - - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - part.supplier.name Nome - - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - part.supplier.partnr Codice - - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - part.order.minamount Importo minimo - - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - part.order.price Prezzo - - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - part.order.single_price Prezzo unitario - - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - Part-DB1\templates\Parts\info\_part_lots.html.twig:6 - part_lots.description Descrizione - - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - part_lots.storage_location Ubicazione - - Part-DB1\templates\Parts\info\_part_lots.html.twig:9 - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - part_lots.amount Quantità - - Part-DB1\templates\Parts\info\_part_lots.html.twig:24 - Part-DB1\templates\Parts\info\_part_lots.html.twig:22 - part_lots.location_unknown Ubicazione sconosciuta - - Part-DB1\templates\Parts\info\_part_lots.html.twig:31 - Part-DB1\templates\Parts\info\_part_lots.html.twig:29 - part_lots.instock_unknown Quantità sconosciuta - - Part-DB1\templates\Parts\info\_part_lots.html.twig:40 - Part-DB1\templates\Parts\info\_part_lots.html.twig:38 - part_lots.expiration_date Data di scadenza - - Part-DB1\templates\Parts\info\_part_lots.html.twig:48 - Part-DB1\templates\Parts\info\_part_lots.html.twig:46 - part_lots.is_expired Scaduto - - Part-DB1\templates\Parts\info\_part_lots.html.twig:55 - Part-DB1\templates\Parts\info\_part_lots.html.twig:53 - part_lots.need_refill Necessita di rifornimento - - Part-DB1\templates\Parts\info\_picture.html.twig:15 - Part-DB1\templates\Parts\info\_picture.html.twig:15 - part.info.prev_picture Immagine precedente - - Part-DB1\templates\Parts\info\_picture.html.twig:19 - Part-DB1\templates\Parts\info\_picture.html.twig:19 - part.info.next_picture Immagine successiva - - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - part.mass.tooltip Peso - - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - part.needs_review.badge Necessita revisione - - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - part.favorite.badge Preferito - - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - part.obsolete.badge Non più disponibile - - Part-DB1\templates\Parts\info\_specifications.html.twig:10 - parameters.extracted_from_description Estratto automaticamente dalla descrizione - - Part-DB1\templates\Parts\info\_specifications.html.twig:15 - parameters.auto_extracted_from_comment Estratto automaticamente dalle note - - Part-DB1\templates\Parts\info\_tools.html.twig:6 - Part-DB1\templates\Parts\info\_tools.html.twig:4 - templates\Parts\show_part_info.html.twig:125 - part.edit.btn Modifica componente - - Part-DB1\templates\Parts\info\_tools.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:14 - templates\Parts\show_part_info.html.twig:135 - part.clone.btn Clona il componente - - Part-DB1\templates\Parts\info\_tools.html.twig:24 - Part-DB1\templates\Parts\lists\_action_bar.html.twig:4 - templates\Parts\show_part_info.html.twig:143 - part.create.btn Creare un nuovo componente - - Part-DB1\templates\Parts\info\_tools.html.twig:31 - Part-DB1\templates\Parts\info\_tools.html.twig:29 - part.delete.confirm_title Si vuole cancellare questo componente? - - Part-DB1\templates\Parts\info\_tools.html.twig:32 - Part-DB1\templates\Parts\info\_tools.html.twig:30 - part.delete.message Il componente e tutte le informazioni associate (stock, file allegati, ecc.) verranno cancellati. Questa azione non può essere annullata. - - Part-DB1\templates\Parts\info\_tools.html.twig:39 - Part-DB1\templates\Parts\info\_tools.html.twig:37 - part.delete Cancellare il componente - - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - parts_list.all.title Tutti i componenti - - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - parts_list.category.title Componenti con categoria - - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - parts_list.footprint.title Componenti con footprint - - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - parts_list.manufacturer.title Componenti con produttore - - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - parts_list.search.title Ricerca componenti - - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - parts_list.storelocation.title Componenti con ubicazione - - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - parts_list.supplier.title Componenti con fornitore - - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - parts_list.tags.title Componenti con tag - - Part-DB1\templates\Parts\lists\_info_card.html.twig:22 - Part-DB1\templates\Parts\lists\_info_card.html.twig:17 - entity.info.common.tab Di base - - Part-DB1\templates\Parts\lists\_info_card.html.twig:26 - Part-DB1\templates\Parts\lists\_info_card.html.twig:20 - entity.info.statistics.tab Statistiche - - Part-DB1\templates\Parts\lists\_info_card.html.twig:31 - entity.info.attachments.tab Allegati - - Part-DB1\templates\Parts\lists\_info_card.html.twig:37 - entity.info.parameters.tab Parametri - - Part-DB1\templates\Parts\lists\_info_card.html.twig:54 - Part-DB1\templates\Parts\lists\_info_card.html.twig:30 - entity.info.name Nome - - Part-DB1\templates\Parts\lists\_info_card.html.twig:58 - Part-DB1\templates\Parts\lists\_info_card.html.twig:96 - Part-DB1\templates\Parts\lists\_info_card.html.twig:34 - Part-DB1\templates\Parts\lists\_info_card.html.twig:67 - entity.info.parent Elemento padre - - Part-DB1\templates\Parts\lists\_info_card.html.twig:70 - Part-DB1\templates\Parts\lists\_info_card.html.twig:46 - entity.edit.btn Modificare - - Part-DB1\templates\Parts\lists\_info_card.html.twig:92 - Part-DB1\templates\Parts\lists\_info_card.html.twig:63 - entity.info.children_count Conteggio degli elementi figli - - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - tfa.check.title E' richiesta l'autenticazione a due fattori - - Part-DB1\templates\security\2fa_base_form.html.twig:39 - Part-DB1\templates\security\2fa_base_form.html.twig:39 - tfa.code.trusted_pc Questo è un computer attendibile (se questo è abilitato, non vengono eseguite altre query a due fattori su questo computer) - - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - login.btn Login - - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:42 - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:40 - user.logout Logout - - Part-DB1\templates\security\2fa_form.html.twig:6 - Part-DB1\templates\security\2fa_form.html.twig:6 - tfa.check.code.label Codice Authenticator app - - Part-DB1\templates\security\2fa_form.html.twig:10 - Part-DB1\templates\security\2fa_form.html.twig:10 - tfa.check.code.help Inserire il codice a 6 cifre dall'app Authenticator o uno dei codici di backup se l'Authenticator app non è disponibile. - - Part-DB1\templates\security\login.html.twig:3 - Part-DB1\templates\security\login.html.twig:3 - templates\security\login.html.twig:3 - login.title Login - - Part-DB1\templates\security\login.html.twig:7 - Part-DB1\templates\security\login.html.twig:7 - templates\security\login.html.twig:7 - login.card_title Login - - Part-DB1\templates\security\login.html.twig:31 - Part-DB1\templates\security\login.html.twig:31 - templates\security\login.html.twig:31 - login.username.label Nome utente - - Part-DB1\templates\security\login.html.twig:34 - Part-DB1\templates\security\login.html.twig:34 - templates\security\login.html.twig:34 - login.username.placeholder Nome utente - - Part-DB1\templates\security\login.html.twig:38 - Part-DB1\templates\security\login.html.twig:38 - templates\security\login.html.twig:38 - login.password.label Password - - Part-DB1\templates\security\login.html.twig:40 - Part-DB1\templates\security\login.html.twig:40 - templates\security\login.html.twig:40 - login.password.placeholder Password - - Part-DB1\templates\security\login.html.twig:50 - Part-DB1\templates\security\login.html.twig:50 - templates\security\login.html.twig:50 - login.rememberme Ricordami (non deve essere utilizzato su computer pubblici) - - Part-DB1\templates\security\login.html.twig:64 - Part-DB1\templates\security\login.html.twig:64 - pw_reset.password_forget Hai dimenticato il nome utente o la password? - - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - pw_reset.new_pw.header.title Digitare una nuova password - - Part-DB1\templates\security\pw_reset_request.html.twig:5 - Part-DB1\templates\security\pw_reset_request.html.twig:5 - pw_reset.request.header.title Richiedere una nuova password - - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - tfa_u2f.http_warning Si sta accedendo a questa pagina utilizzando il metodo HTTP non sicuro, quindi molto probabilmente U2F non funzionerà (messaggio di errore "Bad Request"). Chiedi a un amministratore di impostare il metodo HTTPS sicuro se si vogliono usare le chiavi di sicurezza. - - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - r_u2f_two_factor.pressbutton Si prega di inserire la chiave di sicurezza e premere il bottone! - - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - tfa_u2f.add_key.title Aggiungere una chiave di sicurezza - - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - tfa_u2f.explanation Con l'aiuto di una chiave di sicurezza compatibile con U2F/FIDO (ad es. YubiKey o NitroKey), è possibile ottenere un'autenticazione a due fattori user-friendly e sicura. Le chiavi di sicurezza possono essere registrate qui e, se è richiesta la verifica a due fattori, la chiave deve essere inserita solo tramite USB o digitata sul dispositivo tramite NFC. - - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - tfa_u2f.add_key.backup_hint Per garantire l'accesso anche se la chiave viene persa, si consiglia di registrare una seconda chiave come backup e conservarla in un luogo sicuro! - - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - tfa_u2f.add_key.add_button Aggiungere chiave di sicurezza - - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - tfa_u2f.add_key.back_to_settings Ritornare ai parametri @@ -3043,10 +1805,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 new @@ -3056,8 +1814,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:14 - Part-DB1\templates\Statistics\statistics.html.twig:14 new @@ -3067,8 +1823,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:19 - Part-DB1\templates\Statistics\statistics.html.twig:19 new @@ -3078,8 +1832,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:24 - Part-DB1\templates\Statistics\statistics.html.twig:24 new @@ -3089,12 +1841,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 new @@ -3104,12 +1850,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 new @@ -3119,8 +1859,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:40 - Part-DB1\templates\Statistics\statistics.html.twig:40 new @@ -3130,8 +1868,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:44 - Part-DB1\templates\Statistics\statistics.html.twig:44 new @@ -3141,8 +1877,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:48 - Part-DB1\templates\Statistics\statistics.html.twig:48 new @@ -3152,8 +1886,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:65 - Part-DB1\templates\Statistics\statistics.html.twig:65 new @@ -3163,8 +1895,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:69 - Part-DB1\templates\Statistics\statistics.html.twig:69 new @@ -3174,8 +1904,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:73 - Part-DB1\templates\Statistics\statistics.html.twig:73 new @@ -3185,8 +1913,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:77 - Part-DB1\templates\Statistics\statistics.html.twig:77 new @@ -3196,8 +1922,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:81 - Part-DB1\templates\Statistics\statistics.html.twig:81 new @@ -3207,8 +1931,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:85 - Part-DB1\templates\Statistics\statistics.html.twig:85 new @@ -3218,8 +1940,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:89 - Part-DB1\templates\Statistics\statistics.html.twig:89 new @@ -3229,8 +1949,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:93 - Part-DB1\templates\Statistics\statistics.html.twig:93 new @@ -3240,8 +1958,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:110 - Part-DB1\templates\Statistics\statistics.html.twig:110 new @@ -3251,8 +1967,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:114 - Part-DB1\templates\Statistics\statistics.html.twig:114 new @@ -3262,8 +1976,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:118 - Part-DB1\templates\Statistics\statistics.html.twig:118 new @@ -3273,8 +1985,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:122 - Part-DB1\templates\Statistics\statistics.html.twig:122 new @@ -3284,8 +1994,6 @@ I sub elementi saranno spostati verso l'alto. - Part-DB1\templates\Statistics\statistics.html.twig:126 - Part-DB1\templates\Statistics\statistics.html.twig:126 new @@ -3294,302 +2002,156 @@ I sub elementi saranno spostati verso l'alto. - - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - tfa_backup.codes.title Codici di backup - - Part-DB1\templates\Users\backup_codes.html.twig:12 - Part-DB1\templates\Users\backup_codes.html.twig:12 - tfa_backup.codes.explanation Stampare questi codici e conservare in luogo sicuro! - - Part-DB1\templates\Users\backup_codes.html.twig:13 - Part-DB1\templates\Users\backup_codes.html.twig:13 - tfa_backup.codes.help Se non si ha più accesso al proprio dispositivo con l'app Authenticator (smartphone perso, perdita di dati, ecc.) si può utilizzare uno di questi codici per accedere all'account ed eventualmente impostare una nuova app Authenticator. Ciascuno di questi codici può essere utilizzato una volta, si consiglia di eliminare i codici già utilizzati. Chiunque abbia accesso a questi codici può potenzialmente accedere al suo account, quindi sono da tenere in un luogo sicuro. - - Part-DB1\templates\Users\backup_codes.html.twig:16 - Part-DB1\templates\Users\backup_codes.html.twig:16 - tfa_backup.username Nome utente - - Part-DB1\templates\Users\backup_codes.html.twig:29 - Part-DB1\templates\Users\backup_codes.html.twig:29 - tfa_backup.codes.page_generated_on Pagina generata il %date% - - Part-DB1\templates\Users\backup_codes.html.twig:32 - Part-DB1\templates\Users\backup_codes.html.twig:32 - tfa_backup.codes.print Stampa - - Part-DB1\templates\Users\backup_codes.html.twig:35 - Part-DB1\templates\Users\backup_codes.html.twig:35 - tfa_backup.codes.copy_clipboard Copiare negli appunti - - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:40 - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:38 - templates\base.html.twig:99 - templates\Users\user_info.html.twig:3 - templates\Users\user_info.html.twig:6 - user.info.label Informazioni utente - - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - templates\Users\user_info.html.twig:18 - src\Form\UserSettingsType.php:32 - user.firstName.label Nome - - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - templates\Users\user_info.html.twig:24 - src\Form\UserSettingsType.php:35 - user.lastName.label Cognome - - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - templates\Users\user_info.html.twig:30 - src\Form\UserSettingsType.php:41 - user.email.label Indirizzo email - - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - templates\Users\user_info.html.twig:37 - src\Form\UserSettingsType.php:38 - user.department.label Dipartimento - - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - templates\Users\user_info.html.twig:47 - src\Form\UserSettingsType.php:30 - user.username.label Nome utente - - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - templates\Users\user_info.html.twig:53 - group.label Gruppo: - - Part-DB1\templates\Users\user_info.html.twig:67 - Part-DB1\templates\Users\user_info.html.twig:67 - user.permissions Permessi - - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:39 - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:37 - templates\base.html.twig:98 - templates\Users\user_settings.html.twig:3 - templates\Users\user_settings.html.twig:6 - user.settings.label Impostazioni utente - - Part-DB1\templates\Users\user_settings.html.twig:18 - Part-DB1\templates\Users\user_settings.html.twig:18 - templates\Users\user_settings.html.twig:14 - user_settings.data.label Dati personali - - Part-DB1\templates\Users\user_settings.html.twig:22 - Part-DB1\templates\Users\user_settings.html.twig:22 - templates\Users\user_settings.html.twig:18 - user_settings.configuration.label Configurazione - - Part-DB1\templates\Users\user_settings.html.twig:55 - Part-DB1\templates\Users\user_settings.html.twig:55 - templates\Users\user_settings.html.twig:48 - user.settings.change_pw Cambio password - - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - user.settings.2fa_settings Autenticazione a due fattori - - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - tfa.settings.google.tab App di autenticazione - - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - tfa.settings.bakup.tab Codici di backup - - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - tfa.settings.u2f.tab Chiavi di sicurezza (U2F) - - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - tfa.settings.trustedDevices.tab Dispositivi attendibili - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_title Si vuole veramente disabilitare l'App di autenticazione? - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_message Se si disabilita l'app di autenticazione, tutti i codici di backup verranno eliminati, quindi potrebbe essere necessario ristamparli.<br> @@ -3597,262 +2159,156 @@ Attenzione: senza l'autenticazione a due fattori il suo account non è ben prote - - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - tfa_google.disabled_message App di autenticazione disattivata! - - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - tfa_google.step.download Scaricare un'App di autenticazione (ad esempio <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a> oder <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details? id=org.fedorahosted.freeotp">FreeOTP Authenticator</a>) - - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - tfa_google.step.scan Scansionare con l'app il codice QR adiacente o inserire i dati manualmente - - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - tfa_google.step.input_code Digitare il codice generato nel campo sotto e confermare - - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - tfa_google.step.download_backup Stampare i propri codici di backup e conservarli in un luogo sicuro - - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - tfa_google.manual_setup Configurazione manuale - - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - tfa_google.manual_setup.type Tipo - - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - tfa_google.manual_setup.username Nome utente - - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - tfa_google.manual_setup.secret Secret - - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - tfa_google.manual_setup.digit_count Numero di caratteri - - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - tfa_google.enabled_message App Authenticator abilitata - - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - tfa_backup.disabled Codici di backup disattivati. Impostare l'app Authenticator per attivare i codici di backup. - - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - tfa_backup.explanation Questi codici di backup permettono di accedere al tuo account anche se si perde il dispositivo con l'app Authenticator. Stampare i codici e conservarli in un luogo sicuro. - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_title Reimpostare davvero i codici? - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_message Questo cancellerà tutti i codici precedenti e genererà un set di nuovi codici. Questa azione non può essere annullata. Stampare i nuovi codici e depositarli in un luogo sicuro! - - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - tfa_backup.enabled Codici di backup attivati - - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - tfa_backup.show_codes Visualizzare i codici di backup - - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - tfa_u2f.table_caption Chiavi di sicurezza registrate - - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - tfa_u2f.delete_u2f.confirm_title Rimuovere questa chiave di sicurezza? - - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - tfa_u2f.delete_u2f.confirm_message Se si rimuove questa chiave, non sarà più possibile effettuare il login con essa. Se non ci sono chiavi di sicurezza, l'autenticazione a due fattori è disabilitata. - - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - tfa_u2f.keys.name Nome della chiave - - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - tfa_u2f.keys.added_date Data di registrazione - - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - tfa_u2f.key_delete Cancellare la chiave - - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - tfa_u2f.no_keys_registered Nessuna chiave di sicurezza registrata - - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - tfa_u2f.add_new_key Registrare una nuova chiave di sicurezza - - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - tfa_trustedDevices.explanation Quando si controlla il secondo fattore, il computer corrente può essere contrassegnato come affidabile, quindi non sono più necessari controlli a due fattori su questo computer. @@ -3861,326 +2317,168 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - tfa_trustedDevices.invalidate.confirm_title Rimuovere tutti i computer attendibili? - - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - tfa_trustedDevices.invalidate.confirm_message Bisognerà eseguire di nuovo l'autenticazione a due fattori su tutti i computer. Assicurati di avere il tuo dispositivo a due fattori a portata di mano. - - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - tfa_trustedDevices.invalidate.btn Rimuovere tutti i dispositivi attendibili - - Part-DB1\templates\_navbar.html.twig:4 - Part-DB1\templates\_navbar.html.twig:4 - templates\base.html.twig:29 - sidebar.toggle Commuta la barra laterale - - Part-DB1\templates\_navbar.html.twig:22 - navbar.scanner.link Scanner - - Part-DB1\templates\_navbar.html.twig:38 - Part-DB1\templates\_navbar.html.twig:36 - templates\base.html.twig:97 - user.loggedin.label Loggato come - - Part-DB1\templates\_navbar.html.twig:44 - Part-DB1\templates\_navbar.html.twig:42 - templates\base.html.twig:103 - user.login Login - - Part-DB1\templates\_navbar.html.twig:50 - Part-DB1\templates\_navbar.html.twig:48 - ui.toggle_darkmode Modalità scura - - Part-DB1\templates\_navbar.html.twig:54 - Part-DB1\src\Form\UserSettingsType.php:97 - Part-DB1\templates\_navbar.html.twig:52 - Part-DB1\src\Form\UserSettingsType.php:97 - templates\base.html.twig:106 - src\Form\UserSettingsType.php:44 - user.language_select Cambia lingua - - Part-DB1\templates\_navbar_search.html.twig:4 - Part-DB1\templates\_navbar_search.html.twig:4 - templates\base.html.twig:49 - search.options.label Opzioni di ricerca - - Part-DB1\templates\_navbar_search.html.twig:23 - tags.label Tags - - Part-DB1\templates\_navbar_search.html.twig:27 - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - templates\base.html.twig:60 - templates\Parts\show_part_info.html.twig:36 - src\Form\PartType.php:77 - storelocation.label Ubicazione - - Part-DB1\templates\_navbar_search.html.twig:36 - Part-DB1\templates\_navbar_search.html.twig:31 - templates\base.html.twig:65 - ordernumber.label.short Codice del fornitore - - Part-DB1\templates\_navbar_search.html.twig:40 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - Part-DB1\templates\_navbar_search.html.twig:35 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - templates\base.html.twig:67 - supplier.label Fornitore - - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_navbar_search.html.twig:56 - templates\base.html.twig:77 - search.regexmatching Corrispondenza Reg.Ex. - - Part-DB1\templates\_sidebar.html.twig:37 - Part-DB1\templates\_sidebar.html.twig:12 - Part-DB1\templates\_sidebar.html.twig:37 - Part-DB1\templates\_sidebar.html.twig:12 - templates\base.html.twig:175 - templates\base.html.twig:189 - templates\base.html.twig:202 - templates\base.html.twig:230 - project.labelp Progetti - - Part-DB1\templates\_sidebar.html.twig:2 - Part-DB1\templates\_sidebar.html.twig:2 - templates\base.html.twig:165 - templates\base.html.twig:192 - templates\base.html.twig:220 - actions Azioni - - Part-DB1\templates\_sidebar.html.twig:6 - Part-DB1\templates\_sidebar.html.twig:6 - templates\base.html.twig:169 - templates\base.html.twig:196 - templates\base.html.twig:224 - datasource Fonte dati - - Part-DB1\templates\_sidebar.html.twig:10 - Part-DB1\templates\_sidebar.html.twig:10 - templates\base.html.twig:173 - templates\base.html.twig:200 - templates\base.html.twig:228 - manufacturer.labelp Produttori - - Part-DB1\templates\_sidebar.html.twig:11 - Part-DB1\templates\_sidebar.html.twig:11 - templates\base.html.twig:174 - templates\base.html.twig:201 - templates\base.html.twig:229 - supplier.labelp Fornitori - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:213 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:293 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:293 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:181 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:243 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:268 - attachment.download_failed Il download dell'allegato è fallito. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:222 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:190 - entity.edit_flash Modifiche salvate con successo. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:231 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:196 - entity.edit_flash.invalid Non è stato possibile salvare le modifiche! Controllare i dati! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:302 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:252 - entity.created_flash Elemento creato. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:308 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:258 - entity.created_flash.invalid Non è stato possibile creare l'elemento. Controllare i dati! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:399 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:352 - src\Controller\BaseAdminController.php:154 - attachment_type.deleted Elemento cancellato! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:401 - Part-DB1\src\Controller\UserController.php:109 - Part-DB1\src\Controller\UserSettingsController.php:159 - Part-DB1\src\Controller\UserSettingsController.php:193 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:354 - Part-DB1\src\Controller\UserController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:150 - Part-DB1\src\Controller\UserSettingsController.php:182 - csfr_invalid Token CSFR non valido! Ricaricare questa pagina o contattare un amministratore se il problema persiste! - - Part-DB1\src\Controller\LabelController.php:125 - label_generator.no_entities_found Nessun elemento trovato @@ -4188,8 +2486,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Controller\LogController.php:149 - Part-DB1\src\Controller\LogController.php:154 new @@ -4199,8 +2495,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Controller\LogController.php:156 - Part-DB1\src\Controller\LogController.php:160 new @@ -4210,8 +2504,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Controller\LogController.php:176 - Part-DB1\src\Controller\LogController.php:180 new @@ -4221,8 +2513,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Controller\LogController.php:178 - Part-DB1\src\Controller\LogController.php:182 new @@ -4232,8 +2522,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Controller\LogController.php:185 - Part-DB1\src\Controller\LogController.php:189 new @@ -4243,8 +2531,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Controller\LogController.php:187 - Part-DB1\src\Controller\LogController.php:191 new @@ -4254,8 +2540,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Controller\LogController.php:194 - Part-DB1\src\Controller\LogController.php:198 new @@ -4265,8 +2549,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Controller\LogController.php:196 - Part-DB1\src\Controller\LogController.php:200 new @@ -4276,8 +2558,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Controller\LogController.php:199 - Part-DB1\src\Controller\LogController.php:203 new @@ -4286,306 +2566,168 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - - Part-DB1\src\Controller\PartController.php:182 - Part-DB1\src\Controller\PartController.php:182 - src\Controller\PartController.php:80 - part.edited_flash Modifiche salvate! - - Part-DB1\src\Controller\PartController.php:216 - Part-DB1\src\Controller\PartController.php:219 - part.deleted Componente eliminato con successo. - - Part-DB1\src\Controller\PartController.php:302 - Part-DB1\src\Controller\PartController.php:277 - Part-DB1\src\Controller\PartController.php:317 - src\Controller\PartController.php:113 - src\Controller\PartController.php:142 - part.created_flash Componente creato! - - Part-DB1\src\Controller\PartController.php:308 - Part-DB1\src\Controller\PartController.php:283 - part.created_flash.invalid Errore durante la creazione: per favore verificare i dati immessi! - - Part-DB1\src\Controller\ScanController.php:68 - Part-DB1\src\Controller\ScanController.php:90 - scan.qr_not_found Nessun elemento corrispondente al dato codice a barre. - - Part-DB1\src\Controller\ScanController.php:71 - scan.format_unknown Formato sconosciuto! - - Part-DB1\src\Controller\ScanController.php:86 - scan.qr_success Elemento trovato. - - Part-DB1\src\Controller\SecurityController.php:114 - Part-DB1\src\Controller\SecurityController.php:109 - pw_reset.user_or_email Nome utente / Email - - Part-DB1\src\Controller\SecurityController.php:131 - Part-DB1\src\Controller\SecurityController.php:126 - pw_reset.request.success La richiesta di reimpostazione della password è andata a buon fine! Controllare la casella e-mail per ulteriori istruzioni. - - Part-DB1\src\Controller\SecurityController.php:162 - Part-DB1\src\Controller\SecurityController.php:160 - pw_reset.username Nome utente - - Part-DB1\src\Controller\SecurityController.php:165 - Part-DB1\src\Controller\SecurityController.php:163 - pw_reset.token Token - - Part-DB1\src\Controller\SecurityController.php:194 - Part-DB1\src\Controller\SecurityController.php:192 - pw_reset.new_pw.error Nome utente o Token non valido! Per favore controllare i dati immessi. - - Part-DB1\src\Controller\SecurityController.php:196 - Part-DB1\src\Controller\SecurityController.php:194 - pw_reset.new_pw.success La password è stata reimpostata correttamente. Ora puoi accedere con la tua nuova password. - - Part-DB1\src\Controller\UserController.php:107 - Part-DB1\src\Controller\UserController.php:99 - user.edit.reset_success Tutti i metodi di autenticazione a due fattori sono stati disabilitati con successo. - - Part-DB1\src\Controller\UserSettingsController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:92 - tfa_backup.no_codes_enabled Nessun codice di backup abilitato! - - Part-DB1\src\Controller\UserSettingsController.php:138 - Part-DB1\src\Controller\UserSettingsController.php:132 - tfa_u2f.u2f_delete.not_existing Non esiste una chiave di sicurezza con questo ID. - - Part-DB1\src\Controller\UserSettingsController.php:145 - Part-DB1\src\Controller\UserSettingsController.php:139 - tfa_u2f.u2f_delete.access_denied Non puoi eliminare le chiavi di sicurezza di altri utenti! - - Part-DB1\src\Controller\UserSettingsController.php:153 - Part-DB1\src\Controller\UserSettingsController.php:147 - tfa.u2f.u2f_delete.success Chiave di sicurezza rimossa correttamente. - - Part-DB1\src\Controller\UserSettingsController.php:188 - Part-DB1\src\Controller\UserSettingsController.php:180 - tfa_trustedDevice.invalidate.success Dispositivi attendibili reimpostati correttamente. - - Part-DB1\src\Controller\UserSettingsController.php:235 - Part-DB1\src\Controller\UserSettingsController.php:226 - src\Controller\UserController.php:98 - user.settings.saved_flash Impostazioni salvate! - - Part-DB1\src\Controller\UserSettingsController.php:297 - Part-DB1\src\Controller\UserSettingsController.php:288 - src\Controller\UserController.php:130 - user.settings.pw_changed_flash Password cambiata! - - Part-DB1\src\Controller\UserSettingsController.php:317 - Part-DB1\src\Controller\UserSettingsController.php:306 - user.settings.2fa.google.activated App di autenticazione attivata con successo. - - Part-DB1\src\Controller\UserSettingsController.php:328 - Part-DB1\src\Controller\UserSettingsController.php:315 - user.settings.2fa.google.disabled App di autenticazione disattivata con successo. - - Part-DB1\src\Controller\UserSettingsController.php:346 - Part-DB1\src\Controller\UserSettingsController.php:332 - user.settings.2fa.backup_codes.regenerated I nuovi codici di backup sono stati generati. - - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - attachment.table.filesize Dimensioni del file - - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:245 - Part-DB1\src\DataTables\PartsDataTable.php:252 - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:193 - Part-DB1\src\DataTables\PartsDataTable.php:200 - true vero - - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:246 - Part-DB1\src\DataTables\PartsDataTable.php:253 - Part-DB1\src\Form\Type\SIUnitType.php:139 - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:201 - Part-DB1\src\Form\Type\SIUnitType.php:139 - false falso - - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:128 - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:119 - log.target_deleted eliminato @@ -4593,8 +2735,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\DataTables\Column\RevertLogColumn.php:57 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:60 new @@ -4604,8 +2744,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\DataTables\Column\RevertLogColumn.php:63 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:66 new @@ -4615,8 +2753,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\DataTables\Column\RevertLogColumn.php:83 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:86 new @@ -4625,70 +2761,42 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - - Part-DB1\src\DataTables\LogDataTable.php:173 - Part-DB1\src\DataTables\LogDataTable.php:161 - log.id ID - - Part-DB1\src\DataTables\LogDataTable.php:178 - Part-DB1\src\DataTables\LogDataTable.php:166 - log.timestamp Data - - Part-DB1\src\DataTables\LogDataTable.php:183 - Part-DB1\src\DataTables\LogDataTable.php:171 - log.type Evento - - Part-DB1\src\DataTables\LogDataTable.php:191 - Part-DB1\src\DataTables\LogDataTable.php:179 - log.level Livello - - Part-DB1\src\DataTables\LogDataTable.php:200 - Part-DB1\src\DataTables\LogDataTable.php:188 - log.user Utente - - Part-DB1\src\DataTables\LogDataTable.php:213 - Part-DB1\src\DataTables\LogDataTable.php:201 - log.target_type Tipo di target - - Part-DB1\src\DataTables\LogDataTable.php:226 - Part-DB1\src\DataTables\LogDataTable.php:214 - log.target Target @@ -4696,8 +2804,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\DataTables\LogDataTable.php:231 - Part-DB1\src\DataTables\LogDataTable.php:218 new @@ -4706,100 +2812,60 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - - Part-DB1\src\DataTables\PartsDataTable.php:168 - Part-DB1\src\DataTables\PartsDataTable.php:116 - part.table.name Nome - - Part-DB1\src\DataTables\PartsDataTable.php:178 - Part-DB1\src\DataTables\PartsDataTable.php:126 - part.table.id ID - - Part-DB1\src\DataTables\PartsDataTable.php:182 - Part-DB1\src\DataTables\PartsDataTable.php:130 - part.table.description Descrizione - - Part-DB1\src\DataTables\PartsDataTable.php:185 - Part-DB1\src\DataTables\PartsDataTable.php:133 - part.table.category Categoria - - Part-DB1\src\DataTables\PartsDataTable.php:190 - Part-DB1\src\DataTables\PartsDataTable.php:138 - part.table.footprint Footprint - - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:142 - part.table.manufacturer Produttore - - Part-DB1\src\DataTables\PartsDataTable.php:197 - Part-DB1\src\DataTables\PartsDataTable.php:145 - part.table.storeLocations Ubicazione - - Part-DB1\src\DataTables\PartsDataTable.php:216 - Part-DB1\src\DataTables\PartsDataTable.php:164 - part.table.amount Quantità - - Part-DB1\src\DataTables\PartsDataTable.php:224 - Part-DB1\src\DataTables\PartsDataTable.php:172 - part.table.minamount Scorta minima - - Part-DB1\src\DataTables\PartsDataTable.php:232 - Part-DB1\src\DataTables\PartsDataTable.php:180 - part.table.partUnit Unità di misura @@ -4812,864 +2878,522 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - - Part-DB1\src\DataTables\PartsDataTable.php:236 - Part-DB1\src\DataTables\PartsDataTable.php:184 - part.table.addedDate Creato il - - Part-DB1\src\DataTables\PartsDataTable.php:240 - Part-DB1\src\DataTables\PartsDataTable.php:188 - part.table.lastModified Ultima modifica - - Part-DB1\src\DataTables\PartsDataTable.php:244 - Part-DB1\src\DataTables\PartsDataTable.php:192 - part.table.needsReview Necessita revisione - - Part-DB1\src\DataTables\PartsDataTable.php:251 - Part-DB1\src\DataTables\PartsDataTable.php:199 - part.table.favorite Favorito - - Part-DB1\src\DataTables\PartsDataTable.php:258 - Part-DB1\src\DataTables\PartsDataTable.php:206 - part.table.manufacturingStatus Stato - - Part-DB1\src\DataTables\PartsDataTable.php:260 - Part-DB1\src\DataTables\PartsDataTable.php:262 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:208 - Part-DB1\src\DataTables\PartsDataTable.php:210 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.unknown Sconosciuto - - Part-DB1\src\DataTables\PartsDataTable.php:263 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:211 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.announced Annunciato - - Part-DB1\src\DataTables\PartsDataTable.php:264 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.active Attivo - - Part-DB1\src\DataTables\PartsDataTable.php:265 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:213 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.nrfnd Non raccomandato per nuovi progetti - - Part-DB1\src\DataTables\PartsDataTable.php:266 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:214 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.eol Fine vita - - Part-DB1\src\DataTables\PartsDataTable.php:267 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:215 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.discontinued Fuori produzione - - Part-DB1\src\DataTables\PartsDataTable.php:271 - Part-DB1\src\DataTables\PartsDataTable.php:219 - part.table.mpn MPN - - Part-DB1\src\DataTables\PartsDataTable.php:275 - Part-DB1\src\DataTables\PartsDataTable.php:223 - part.table.mass Peso - - Part-DB1\src\DataTables\PartsDataTable.php:279 - Part-DB1\src\DataTables\PartsDataTable.php:227 - part.table.tags Tags - - Part-DB1\src\DataTables\PartsDataTable.php:283 - Part-DB1\src\DataTables\PartsDataTable.php:231 - part.table.attachments Allegati - - Part-DB1\src\EventSubscriber\UserSystem\LoginSuccessSubscriber.php:82 - Part-DB1\src\EventSubscriber\LoginSuccessListener.php:82 - flash.login_successful Accesso riuscito - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - JSON JSON - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - XML XML - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - CSV CSV - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - YAML YAML - - Part-DB1\src\Form\AdminPages\ImportType.php:124 - Part-DB1\src\Form\AdminPages\ImportType.php:124 - import.abort_on_validation.help Quando questa opzione è abilitata, il rilevamento di dati non validi annullerà l'intero processo. Se questa opzione non è attiva, le voci non valide vengono ignorate e si continuerà a tentare l'importazione delle altre voci. - - Part-DB1\src\Form\AdminPages\ImportType.php:86 - Part-DB1\src\Form\AdminPages\ImportType.php:86 - src\Form\ImportType.php:70 - import.csv_separator Separatore CSV - - Part-DB1\src\Form\AdminPages\ImportType.php:93 - Part-DB1\src\Form\AdminPages\ImportType.php:93 - src\Form\ImportType.php:72 - parent.label Elemento padre - - Part-DB1\src\Form\AdminPages\ImportType.php:101 - Part-DB1\src\Form\AdminPages\ImportType.php:101 - src\Form\ImportType.php:75 - import.file File - - Part-DB1\src\Form\AdminPages\ImportType.php:111 - Part-DB1\src\Form\AdminPages\ImportType.php:111 - src\Form\ImportType.php:78 - import.preserve_children Importa anche sottoelementi - - Part-DB1\src\Form\AdminPages\ImportType.php:120 - Part-DB1\src\Form\AdminPages\ImportType.php:120 - src\Form\ImportType.php:80 - import.abort_on_validation Interrompi in caso di dati non validi - - Part-DB1\src\Form\AdminPages\ImportType.php:132 - Part-DB1\src\Form\AdminPages\ImportType.php:132 - src\Form\ImportType.php:85 - import.btn Importare - - Part-DB1\src\Form\AttachmentFormType.php:113 - Part-DB1\src\Form\AttachmentFormType.php:109 - attachment.edit.secure_file.help Un allegato contrassegnato come privato è accessibile solo da un utente loggato che ha l'autorizzazione corrispondente. Quando questa opzione è attiva, non vengono generate miniature e l'accesso al file è più lento. - - Part-DB1\src\Form\AttachmentFormType.php:127 - Part-DB1\src\Form\AttachmentFormType.php:123 - attachment.edit.url.help Qui è possibile inserire un URL per un file esterno o cercare inserendo una parola chiave nelle risorse incorporate (ad es. footprints). - - Part-DB1\src\Form\AttachmentFormType.php:82 - Part-DB1\src\Form\AttachmentFormType.php:79 - attachment.edit.name Nome - - Part-DB1\src\Form\AttachmentFormType.php:85 - Part-DB1\src\Form\AttachmentFormType.php:82 - attachment.edit.attachment_type Tipo di allegato - - Part-DB1\src\Form\AttachmentFormType.php:94 - Part-DB1\src\Form\AttachmentFormType.php:91 - attachment.edit.show_in_table Mostrare in tabella - - Part-DB1\src\Form\AttachmentFormType.php:105 - Part-DB1\src\Form\AttachmentFormType.php:102 - attachment.edit.secure_file Allegato privato - - Part-DB1\src\Form\AttachmentFormType.php:119 - Part-DB1\src\Form\AttachmentFormType.php:115 - attachment.edit.url URL - - Part-DB1\src\Form\AttachmentFormType.php:133 - Part-DB1\src\Form\AttachmentFormType.php:129 - attachment.edit.download_url Download di un file esterno - - Part-DB1\src\Form\AttachmentFormType.php:146 - Part-DB1\src\Form\AttachmentFormType.php:142 - attachment.edit.file Upload del file - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:86 - part.label Componente - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:87 - part_lot.label Lotto di componenti - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.none Nessuno - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.qr QR Code (raccomandato) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code128 Code 128 (raccomandato) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code39 Code 39 (raccomandato) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code93 Code 93 - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.datamatrix Datamatrix - - Part-DB1\src\Form\LabelOptionsType.php:122 - label_options.lines_mode.html Segnaposto - - Part-DB1\src\Form\LabelOptionsType.php:122 - label.options.lines_mode.twig Twig - - Part-DB1\src\Form\LabelOptionsType.php:126 - label_options.lines_mode.help Se si seleziona Twig qui, il campo del contenuto viene interpretato come modello Twig. Vedere <a href="https://twig.symfony.com/doc/3.x/templates.html">Twig documentation</a> e <a href="https://docs.part-db.de/usage/labels.html#twig-mode">Wiki</a> per ulteriori informazioni. - - Part-DB1\src\Form\LabelOptionsType.php:47 - label_options.page_size.label Misure dell'etichetta - - Part-DB1\src\Form\LabelOptionsType.php:66 - label_options.supported_elements.label Tipo di target - - Part-DB1\src\Form\LabelOptionsType.php:75 - label_options.barcode_type.label Codice a barre - - Part-DB1\src\Form\LabelOptionsType.php:102 - label_profile.lines.label Contenuto - - Part-DB1\src\Form\LabelOptionsType.php:111 - label_options.additional_css.label Stile aggiuntivo (CSS) - - Part-DB1\src\Form\LabelOptionsType.php:120 - label_options.lines_mode.label Parser mode - - Part-DB1\src\Form\LabelOptionsType.php:51 - label_options.width.placeholder Larghezza - - Part-DB1\src\Form\LabelOptionsType.php:60 - label_options.height.placeholder Altezza - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:49 - label_generator.target_id.range_hint Qui puoi specificare più ID (ad esempio 1,2,3) e/o un intervallo (1-3) per generare etichette per più elementi contemporaneamente. - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:46 - label_generator.target_id.label Target ID - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:59 - label_generator.update Aggiornamento - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:36 - scan_dialog.input Input - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:44 - scan_dialog.submit Invia - - Part-DB1\src\Form\ParameterType.php:41 - parameters.name.placeholder es. DC Current Gain - - Part-DB1\src\Form\ParameterType.php:50 - parameters.symbol.placeholder es. h_{FE} - - Part-DB1\src\Form\ParameterType.php:60 - parameters.text.placeholder es. Test conditions - - Part-DB1\src\Form\ParameterType.php:71 - parameters.max.placeholder es. 350 - - Part-DB1\src\Form\ParameterType.php:82 - parameters.min.placeholder es. 100 - - Part-DB1\src\Form\ParameterType.php:93 - parameters.typical.placeholder es. 200 - - Part-DB1\src\Form\ParameterType.php:103 - parameters.unit.placeholder es. V - - Part-DB1\src\Form\ParameterType.php:114 - parameter.group.placeholder es. Specifiche tecniche - - Part-DB1\src\Form\Part\OrderdetailType.php:72 - Part-DB1\src\Form\Part\OrderdetailType.php:75 - orderdetails.edit.supplierpartnr Codice componente del fornitore - - Part-DB1\src\Form\Part\OrderdetailType.php:81 - Part-DB1\src\Form\Part\OrderdetailType.php:84 - orderdetails.edit.supplier Fornitore - - Part-DB1\src\Form\Part\OrderdetailType.php:87 - Part-DB1\src\Form\Part\OrderdetailType.php:90 - orderdetails.edit.url Link all'offerta - - Part-DB1\src\Form\Part\OrderdetailType.php:93 - Part-DB1\src\Form\Part\OrderdetailType.php:96 - orderdetails.edit.obsolete Non più disponibile - - Part-DB1\src\Form\Part\OrderdetailType.php:75 - Part-DB1\src\Form\Part\OrderdetailType.php:78 - orderdetails.edit.supplierpartnr.placeholder es. BC 547 - - Part-DB1\src\Form\Part\PartBaseType.php:101 - Part-DB1\src\Form\Part\PartBaseType.php:99 - part.edit.name Nome - - Part-DB1\src\Form\Part\PartBaseType.php:109 - Part-DB1\src\Form\Part\PartBaseType.php:107 - part.edit.description Descrizione - - Part-DB1\src\Form\Part\PartBaseType.php:120 - Part-DB1\src\Form\Part\PartBaseType.php:118 - part.edit.mininstock Scorta minima - - Part-DB1\src\Form\Part\PartBaseType.php:129 - Part-DB1\src\Form\Part\PartBaseType.php:127 - part.edit.category Categoria - - Part-DB1\src\Form\Part\PartBaseType.php:135 - Part-DB1\src\Form\Part\PartBaseType.php:133 - part.edit.footprint Footprint - - Part-DB1\src\Form\Part\PartBaseType.php:142 - Part-DB1\src\Form\Part\PartBaseType.php:140 - part.edit.tags Tags - - Part-DB1\src\Form\Part\PartBaseType.php:154 - Part-DB1\src\Form\Part\PartBaseType.php:152 - part.edit.manufacturer.label Produttore - - Part-DB1\src\Form\Part\PartBaseType.php:161 - Part-DB1\src\Form\Part\PartBaseType.php:159 - part.edit.manufacturer_url.label Link alla pagina del prodotto - - Part-DB1\src\Form\Part\PartBaseType.php:167 - Part-DB1\src\Form\Part\PartBaseType.php:165 - part.edit.mpn Codice componente del produttore - - Part-DB1\src\Form\Part\PartBaseType.php:173 - Part-DB1\src\Form\Part\PartBaseType.php:171 - part.edit.manufacturing_status Stato di produzione - - Part-DB1\src\Form\Part\PartBaseType.php:181 - Part-DB1\src\Form\Part\PartBaseType.php:179 - part.edit.needs_review Necessita revisione - - Part-DB1\src\Form\Part\PartBaseType.php:189 - Part-DB1\src\Form\Part\PartBaseType.php:187 - part.edit.is_favorite Preferito - - Part-DB1\src\Form\Part\PartBaseType.php:197 - Part-DB1\src\Form\Part\PartBaseType.php:195 - part.edit.mass Peso - - Part-DB1\src\Form\Part\PartBaseType.php:203 - Part-DB1\src\Form\Part\PartBaseType.php:201 - part.edit.partUnit Unità di misura @@ -5682,287 +3406,168 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - - Part-DB1\src\Form\Part\PartBaseType.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:210 - part.edit.comment Note - - Part-DB1\src\Form\Part\PartBaseType.php:250 - Part-DB1\src\Form\Part\PartBaseType.php:246 - part.edit.master_attachment Immagine di anteprima - - Part-DB1\src\Form\Part\PartBaseType.php:295 - Part-DB1\src\Form\Part\PartBaseType.php:276 - src\Form\PartType.php:91 - part.edit.save Salvare le modifiche - - Part-DB1\src\Form\Part\PartBaseType.php:296 - Part-DB1\src\Form\Part\PartBaseType.php:277 - src\Form\PartType.php:92 - part.edit.reset Annullare le modifiche - - Part-DB1\src\Form\Part\PartBaseType.php:105 - Part-DB1\src\Form\Part\PartBaseType.php:103 - part.edit.name.placeholder es. BC547 - - Part-DB1\src\Form\Part\PartBaseType.php:115 - Part-DB1\src\Form\Part\PartBaseType.php:113 - part.edit.description.placeholder es. NPN 45V, 0,1A, 0,5W - - Part-DB1\src\Form\Part\PartBaseType.php:123 - Part-DB1\src\Form\Part\PartBaseType.php:121 - part.editmininstock.placeholder es. 1 - - Part-DB1\src\Form\Part\PartLotType.php:69 - Part-DB1\src\Form\Part\PartLotType.php:69 - part_lot.edit.description Descrizione - - Part-DB1\src\Form\Part\PartLotType.php:78 - Part-DB1\src\Form\Part\PartLotType.php:78 - part_lot.edit.location Ubicazione - - Part-DB1\src\Form\Part\PartLotType.php:89 - Part-DB1\src\Form\Part\PartLotType.php:89 - part_lot.edit.amount Quantità - - Part-DB1\src\Form\Part\PartLotType.php:98 - Part-DB1\src\Form\Part\PartLotType.php:97 - part_lot.edit.instock_unknown Quantità sconosciuta - - Part-DB1\src\Form\Part\PartLotType.php:109 - Part-DB1\src\Form\Part\PartLotType.php:108 - part_lot.edit.needs_refill Deve essere rifornito - - Part-DB1\src\Form\Part\PartLotType.php:120 - Part-DB1\src\Form\Part\PartLotType.php:119 - part_lot.edit.expiration_date Data di scadenza - - Part-DB1\src\Form\Part\PartLotType.php:128 - Part-DB1\src\Form\Part\PartLotType.php:125 - part_lot.edit.comment Note - - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - perm.group.other Varie - - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - tfa_google.enable Attivare l'app Authenticator - - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - tfa_google.disable Disattivare l'app Authenticator - - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - google_confirmation Codice di conferma - - Part-DB1\src\Form\UserSettingsType.php:108 - Part-DB1\src\Form\UserSettingsType.php:108 - src\Form\UserSettingsType.php:46 - user.timezone.label Fuso orario - - Part-DB1\src\Form\UserSettingsType.php:133 - Part-DB1\src\Form\UserSettingsType.php:132 - user.currency.label Valuta preferita - - Part-DB1\src\Form\UserSettingsType.php:140 - Part-DB1\src\Form\UserSettingsType.php:139 - src\Form\UserSettingsType.php:53 - save Applicare le modifiche - - Part-DB1\src\Form\UserSettingsType.php:141 - Part-DB1\src\Form\UserSettingsType.php:140 - src\Form\UserSettingsType.php:54 - reset Scartare le modifiche - - Part-DB1\src\Form\UserSettingsType.php:104 - Part-DB1\src\Form\UserSettingsType.php:104 - src\Form\UserSettingsType.php:45 - user_settings.language.placeholder Lingua del server - - Part-DB1\src\Form\UserSettingsType.php:115 - Part-DB1\src\Form\UserSettingsType.php:115 - src\Form\UserSettingsType.php:48 - user_settings.timezone.placeholder Fuso orario del server - - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - attachment.label Allegato - - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - attachment_type.label Tipo di allegato - - Part-DB1\src\Services\ElementTypeNameGenerator.php:82 - Part-DB1\src\Services\ElementTypeNameGenerator.php:82 - project.label Progetto - - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - measurement_unit.label Unità di misura @@ -5975,58 +3580,36 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - currency.label Valuta - - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - orderdetail.label Dettagli dell'ordine - - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - pricedetail.label Informazioni sul prezzo - - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - user.label Utente - - Part-DB1\src\Services\ElementTypeNameGenerator.php:95 - parameter.label Parametro - - Part-DB1\src\Services\ElementTypeNameGenerator.php:96 - label_profile.label Profilo di etichetta @@ -6034,8 +3617,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:176 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:161 new @@ -6044,174 +3625,102 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - - Part-DB1\src\Services\MarkdownParser.php:73 - Part-DB1\src\Services\MarkdownParser.php:73 - markdown.loading Markdown in caricamento. Se questo dura troppo a lungo, provare a ricaricare la pagina! - - Part-DB1\src\Services\PasswordResetManager.php:98 - Part-DB1\src\Services\PasswordResetManager.php:98 - pw_reset.email.subject Reimpostazione della password per l'account Part-DB - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - tree.tools.tools Utilità - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:107 - src\Services\ToolsTreeBuilder.php:74 - tree.tools.edit Modificare - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:110 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - src\Services\ToolsTreeBuilder.php:81 - tree.tools.show Visualizzare - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:111 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - tree.tools.system Sistema - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:123 - tree.tools.tools.label_dialog Generatore di etichette - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:130 - tree.tools.tools.label_scanner Scanner - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:149 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:126 - src\Services\ToolsTreeBuilder.php:62 - tree.tools.edit.attachment_types Tipo di allegato - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:155 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:132 - src\Services\ToolsTreeBuilder.php:64 - tree.tools.edit.categories Categorie - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:161 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:138 - src\Services\ToolsTreeBuilder.php:66 - tree.tools.edit.projects Progetti - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:167 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:144 - src\Services\ToolsTreeBuilder.php:68 - tree.tools.edit.suppliers Fornitori - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:173 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:150 - src\Services\ToolsTreeBuilder.php:70 - tree.tools.edit.manufacturer Produttori - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:179 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:156 - tree.tools.edit.storelocation Ubicazioni - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:185 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:162 - tree.tools.edit.footprint Footprints - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:191 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:168 - tree.tools.edit.currency Valute - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:174 - tree.tools.edit.measurement_unit Unità di misura @@ -6224,40 +3733,24 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.edit.label_profile Profili di etichette - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:209 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:180 - tree.tools.edit.part Nuovo componente - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:226 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - src\Services\ToolsTreeBuilder.php:77 - tree.tools.show.all_parts Tutti i componenti - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:232 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.show.all_attachments Allegati @@ -6265,8 +3758,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:239 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:210 new @@ -6275,20 +3766,12 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:258 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:229 - tree.tools.system.users Utenti - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:264 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:235 - tree.tools.system.groups Gruppi @@ -6296,8 +3779,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:271 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:242 new @@ -6306,11 +3787,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - src\Services\TreeBuilder.php:124 - entity.tree.new Nuovo elemento @@ -6318,7 +3794,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 obsolete @@ -6328,8 +3803,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\templates\_navbar.html.twig:27 - templates\base.html.twig:88 obsolete @@ -6339,8 +3812,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Form\UserSettingsType.php:119 - src\Form\UserSettingsType.php:49 obsolete @@ -6350,8 +3821,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Form\UserSettingsType.php:129 - src\Form\UserSettingsType.php:50 obsolete @@ -6361,7 +3830,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:100 new obsolete @@ -6372,10 +3840,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:128 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:150 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:169 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:207 new obsolete @@ -6386,10 +3850,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:130 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:152 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:171 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:209 new obsolete @@ -6400,7 +3860,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:139 new obsolete @@ -6411,7 +3870,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:160 new obsolete @@ -6422,7 +3880,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:184 new obsolete @@ -6433,7 +3890,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:198 new obsolete @@ -6444,7 +3900,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:214 new obsolete @@ -6455,7 +3910,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - templates\base.html.twig:81 obsolete obsolete @@ -6466,7 +3920,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - templates\base.html.twig:109 obsolete obsolete @@ -6477,7 +3930,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - templates\base.html.twig:112 obsolete obsolete @@ -6768,7 +4220,6 @@ Se è stato fatto in modo errato o se un computer non è più attendibile, puoi - src\Form\PartType.php:63 obsolete obsolete @@ -7441,7 +4892,6 @@ Element 3 - templates\Parts\show_part_info.html.twig:194 obsolete obsolete @@ -7452,7 +4902,6 @@ Element 3 - src\Form\PartType.php:83 obsolete obsolete @@ -12308,4 +9757,4 @@ Notare che non è possibile impersonare un utente disattivato. Quando si prova a - + \ No newline at end of file diff --git a/translations/messages.ja.xlf b/translations/messages.ja.xlf index acb0fdd9..98c5c77a 100644 --- a/translations/messages.ja.xlf +++ b/translations/messages.ja.xlf @@ -2,11 +2,6 @@ - - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - attachment_type.caption 添付ファイルの種類 @@ -14,7 +9,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:12 new @@ -24,7 +18,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:16 new @@ -33,45 +26,18 @@ - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - templates\AdminPages\CategoryAdmin.html.twig:4 - templates\base.html.twig:163 - templates\base.html.twig:170 - templates\base.html.twig:197 - templates\base.html.twig:225 - category.labelp カテゴリー - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:19 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:11 - templates\AdminPages\CategoryAdmin.html.twig:8 - admin.options オプション - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - templates\AdminPages\CategoryAdmin.html.twig:9 - admin.advanced 詳細 @@ -79,7 +45,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:13 new @@ -89,7 +54,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:17 new @@ -98,30 +62,18 @@ - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - currency.caption 通貨 - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - currency.iso_code.caption ISOコード - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - currency.symbol.caption 通貨記号 @@ -129,7 +81,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:29 new @@ -139,7 +90,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:33 new @@ -148,89 +98,36 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder 検索 - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - templates\AdminPages\EntityAdminBase.html.twig:13 - templates\base.html.twig:166 - templates\base.html.twig:193 - templates\base.html.twig:221 - expandAll すべて開く - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - templates\AdminPages\EntityAdminBase.html.twig:17 - templates\base.html.twig:167 - templates\base.html.twig:194 - templates\base.html.twig:222 - reduceAll すべて閉じる - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - part.info.timetravel_hint %timestamp%より前の部品はこのように表示されます。<i>これは実験的機能です。情報が正しくない可能性があります。</i> - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - templates\AdminPages\EntityAdminBase.html.twig:42 - standard.label プロパティ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - templates\AdminPages\EntityAdminBase.html.twig:43 - infos.label 情報 @@ -238,8 +135,6 @@ - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 new @@ -248,120 +143,66 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - templates\AdminPages\EntityAdminBase.html.twig:45 - export.label エクスポート - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - templates\AdminPages\EntityAdminBase.html.twig:47 - import_export.label インポート / エクスポート - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - mass_creation.label 一括作成 - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - templates\AdminPages\EntityAdminBase.html.twig:59 - admin.common 一般 - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - admin.attachments 添付ファイル - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:90 - admin.parameters パラメーター - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:179 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:167 - templates\AdminPages\EntityAdminBase.html.twig:142 - export_all.label すべてエクスポートする - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:185 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:173 - mass_creation.help 各行は作成する要素名として解釈されます。 - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - templates\AdminPages\EntityAdminBase.html.twig:35 - edit.caption "%name"を編集 - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - templates\AdminPages\EntityAdminBase.html.twig:37 - new.caption 新規作成 - - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - templates\base.html.twig:172 - templates\base.html.twig:199 - templates\base.html.twig:227 - footprint.labelp フットプリント @@ -369,7 +210,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:13 new @@ -379,7 +219,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:17 new @@ -388,22 +227,12 @@ - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - group.edit.caption グループ - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - user.edit.permissions 権限 @@ -411,7 +240,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:24 new @@ -421,7 +249,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:28 new @@ -430,27 +257,18 @@ - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:4 - label_profile.caption ラベルのプロファイル - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:8 - label_profile.advanced 詳細 - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:9 - label_profile.comment コメント @@ -458,7 +276,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:55 new @@ -468,7 +285,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:59 new @@ -477,11 +293,6 @@ - - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - templates\AdminPages\ManufacturerAdmin.html.twig:4 - manufacturer.caption メーカー @@ -489,7 +300,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:8 new @@ -499,7 +309,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:12 new @@ -508,10 +317,6 @@ - - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - measurement_unit.caption 単位 @@ -524,15 +329,6 @@ - - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:5 - Part-DB1\templates\_sidebar.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:8 - templates\base.html.twig:171 - templates\base.html.twig:198 - templates\base.html.twig:226 - storelocation.labelp 保管場所 @@ -540,7 +336,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:32 new @@ -550,7 +345,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:36 new @@ -560,7 +354,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:16 new @@ -570,7 +363,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:20 new @@ -579,120 +371,66 @@ - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - user.edit.caption ユーザー - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - user.edit.configuration 設定 - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - user.edit.password パスワード - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - user.edit.tfa.caption 二要素認証 - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - user.edit.tfa.google_active 認証アプリが有効 - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - tfa_backup.remaining_tokens バックアップコードの残り数 - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - tfa_backup.generation_date バックアップコードの生成日 - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - user.edit.tfa.disabled メソッドが有効化されていません - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - user.edit.tfa.u2f_keys_count セキュリティ キーを有効化 - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_title 本当に続けますか? - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_message これは<b>ユーザーの有効な二要素認証すべて</b>と<b>バックアップコード</b>を削除します。 @@ -703,10 +441,6 @@ - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - user.edit.tfa.disable_tfa.btn すべての二要素認証を無効化する @@ -714,7 +448,6 @@ - Part-DB1\templates\AdminPages\UserAdmin.html.twig:85 new @@ -724,7 +457,6 @@ - Part-DB1\templates\AdminPages\UserAdmin.html.twig:89 new @@ -733,129 +465,60 @@ - - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:63 - attachment.delete 削除 - - Part-DB1\templates\AdminPages\_attachments.html.twig:41 - Part-DB1\templates\Parts\edit\_attachments.html.twig:38 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:35 - Part-DB1\src\DataTables\AttachmentDataTable.php:159 - Part-DB1\templates\Parts\edit\_attachments.html.twig:38 - Part-DB1\src\DataTables\AttachmentDataTable.php:159 - attachment.external 外部 - - Part-DB1\templates\AdminPages\_attachments.html.twig:49 - Part-DB1\templates\Parts\edit\_attachments.html.twig:47 - Part-DB1\templates\AdminPages\_attachments.html.twig:47 - Part-DB1\templates\Parts\edit\_attachments.html.twig:45 - attachment.preview.alt 添付ファイルのサムネイル - - Part-DB1\templates\AdminPages\_attachments.html.twig:52 - Part-DB1\templates\Parts\edit\_attachments.html.twig:50 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 - Part-DB1\templates\AdminPages\_attachments.html.twig:50 - Part-DB1\templates\Parts\edit\_attachments.html.twig:48 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:45 - attachment.view ビュー - - Part-DB1\templates\AdminPages\_attachments.html.twig:58 - Part-DB1\templates\Parts\edit\_attachments.html.twig:56 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:43 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - Part-DB1\templates\AdminPages\_attachments.html.twig:56 - Part-DB1\templates\Parts\edit\_attachments.html.twig:54 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:38 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - attachment.file_not_found ファイルが見つかりません - - Part-DB1\templates\AdminPages\_attachments.html.twig:66 - Part-DB1\templates\Parts\edit\_attachments.html.twig:64 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:48 - Part-DB1\templates\Parts\edit\_attachments.html.twig:62 - attachment.secure プライベートな添付ファイル - - Part-DB1\templates\AdminPages\_attachments.html.twig:79 - Part-DB1\templates\Parts\edit\_attachments.html.twig:77 - Part-DB1\templates\AdminPages\_attachments.html.twig:77 - Part-DB1\templates\Parts\edit\_attachments.html.twig:75 - attachment.create 添付ファイルを追加 - - Part-DB1\templates\AdminPages\_attachments.html.twig:84 - Part-DB1\templates\Parts\edit\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - Part-DB1\templates\AdminPages\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_attachments.html.twig:80 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - part_lot.edit.delete.confirm 本当にこの在庫を削除しますか?この操作はやり直しできません。 - - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - templates\AdminPages\_delete_form.html.twig:2 - entity.delete.confirm_title 本当に%name%を削除しますか? - - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - templates\AdminPages\_delete_form.html.twig:3 - entity.delete.message この操作はやり直しできません! @@ -864,11 +527,6 @@ - - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - templates\AdminPages\_delete_form.html.twig:9 - entity.delete 削除 @@ -876,12 +534,6 @@ - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:45 - Part-DB1\src\Form\Part\PartBaseType.php:286 - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:43 - Part-DB1\src\Form\Part\PartBaseType.php:267 new @@ -890,561 +542,300 @@ - - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - templates\AdminPages\_delete_form.html.twig:12 - entity.delete.recursive 再帰的に削除(全ての子要素) - - Part-DB1\templates\AdminPages\_duplicate.html.twig:3 - entity.duplicate 複製 - - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - templates\AdminPages\_export_form.html.twig:4 - src\Form\ImportType.php:67 - export.format ファイル形式 - - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - templates\AdminPages\_export_form.html.twig:16 - export.level エクスポートレベル - - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - templates\AdminPages\_export_form.html.twig:19 - export.level.simple 最小 - - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - templates\AdminPages\_export_form.html.twig:20 - export.level.extended 拡張 - - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - templates\AdminPages\_export_form.html.twig:21 - export.level.full フル - - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - templates\AdminPages\_export_form.html.twig:31 - export.include_children 子要素もエクスポートする - - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - templates\AdminPages\_export_form.html.twig:39 - export.btn エクスポート - - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - templates\AdminPages\EntityAdminBase.html.twig:94 - templates\Parts\edit_part_info.html.twig:12 - templates\Parts\show_part_info.html.twig:11 - id.label ID - - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:76 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:77 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:77 - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:59 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:60 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:53 - templates\AdminPages\EntityAdminBase.html.twig:101 - templates\Parts\show_part_info.html.twig:248 - createdAt 作成日時 - - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:73 - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:49 - templates\AdminPages\EntityAdminBase.html.twig:114 - templates\Parts\show_part_info.html.twig:263 - lastModified 最終更新 - - Part-DB1\templates\AdminPages\_info.html.twig:38 - Part-DB1\templates\AdminPages\_info.html.twig:38 - entity.info.parts_count この要素を持つ部品の数 - - Part-DB1\templates\AdminPages\_parameters.html.twig:6 - Part-DB1\templates\helper.twig:125 - Part-DB1\templates\Parts\edit\_specifications.html.twig:6 - specifications.property パラメーター - - Part-DB1\templates\AdminPages\_parameters.html.twig:7 - Part-DB1\templates\Parts\edit\_specifications.html.twig:7 - specifications.symbol 記号 - - Part-DB1\templates\AdminPages\_parameters.html.twig:8 - Part-DB1\templates\Parts\edit\_specifications.html.twig:8 - specifications.value_min 最小 - - Part-DB1\templates\AdminPages\_parameters.html.twig:9 - Part-DB1\templates\Parts\edit\_specifications.html.twig:9 - specifications.value_typ 標準 - - Part-DB1\templates\AdminPages\_parameters.html.twig:10 - Part-DB1\templates\Parts\edit\_specifications.html.twig:10 - specifications.value_max 最大 - - Part-DB1\templates\AdminPages\_parameters.html.twig:11 - Part-DB1\templates\Parts\edit\_specifications.html.twig:11 - specifications.unit 単位 - - Part-DB1\templates\AdminPages\_parameters.html.twig:12 - Part-DB1\templates\Parts\edit\_specifications.html.twig:12 - specifications.text テキスト - - Part-DB1\templates\AdminPages\_parameters.html.twig:13 - Part-DB1\templates\Parts\edit\_specifications.html.twig:13 - specifications.group グループ - - Part-DB1\templates\AdminPages\_parameters.html.twig:26 - Part-DB1\templates\Parts\edit\_specifications.html.twig:26 - specification.create 新規パラメーター - - Part-DB1\templates\AdminPages\_parameters.html.twig:31 - Part-DB1\templates\Parts\edit\_specifications.html.twig:31 - parameter.delete.confirm 本当にこのパラメーターを削除しますか? - - Part-DB1\templates\attachment_list.html.twig:3 - Part-DB1\templates\attachment_list.html.twig:3 - attachment.list.title 添付ファイル一覧 - - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - part_list.loading.caption 読み込み中 - - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - part_list.loading.message しばらくお待ちください。このメッセージが消えない場合は再読み込みしてください。 - - Part-DB1\templates\base.html.twig:68 - Part-DB1\templates\base.html.twig:68 - templates\base.html.twig:246 - vendor.base.javascript_hint すべての機能を利用するにはJavascriptを有効にしてください。 - - Part-DB1\templates\base.html.twig:73 - Part-DB1\templates\base.html.twig:73 - sidebar.big.toggle サイドバーの表示/非表示 - - Part-DB1\templates\base.html.twig:95 - Part-DB1\templates\base.html.twig:95 - templates\base.html.twig:271 - loading.caption 読み込み中: - - Part-DB1\templates\base.html.twig:96 - Part-DB1\templates\base.html.twig:96 - templates\base.html.twig:272 - loading.message しばらくお待ちください。このメッセージが消えない場合は再読み込みしてください。 - - Part-DB1\templates\base.html.twig:101 - Part-DB1\templates\base.html.twig:101 - templates\base.html.twig:277 - loading.bar 読み込み中... - - Part-DB1\templates\base.html.twig:112 - Part-DB1\templates\base.html.twig:112 - templates\base.html.twig:288 - back_to_top ページ上部に戻る - - Part-DB1\templates\Form\permissionLayout.html.twig:35 - Part-DB1\templates\Form\permissionLayout.html.twig:35 - permission.edit.permission 権限 - - Part-DB1\templates\Form\permissionLayout.html.twig:36 - Part-DB1\templates\Form\permissionLayout.html.twig:36 - permission.edit.value - - Part-DB1\templates\Form\permissionLayout.html.twig:53 - Part-DB1\templates\Form\permissionLayout.html.twig:53 - permission.legend.title 状態について - - Part-DB1\templates\Form\permissionLayout.html.twig:57 - Part-DB1\templates\Form\permissionLayout.html.twig:57 - permission.legend.disallow 拒否 - - Part-DB1\templates\Form\permissionLayout.html.twig:61 - Part-DB1\templates\Form\permissionLayout.html.twig:61 - permission.legend.allow 許可 - - Part-DB1\templates\Form\permissionLayout.html.twig:65 - Part-DB1\templates\Form\permissionLayout.html.twig:65 - permission.legend.inherit グループまたは親を継承 - - Part-DB1\templates\helper.twig:3 - Part-DB1\templates\helper.twig:3 - bool.true はい - - Part-DB1\templates\helper.twig:5 - Part-DB1\templates\helper.twig:5 - bool.false いいえ - - Part-DB1\templates\helper.twig:92 - Part-DB1\templates\helper.twig:87 - Yes はい - - Part-DB1\templates\helper.twig:94 - Part-DB1\templates\helper.twig:89 - No いいえ - - Part-DB1\templates\helper.twig:126 - specifications.value - - Part-DB1\templates\homepage.html.twig:7 - Part-DB1\templates\homepage.html.twig:7 - templates\homepage.html.twig:7 - version.caption バージョン - - Part-DB1\templates\homepage.html.twig:22 - Part-DB1\templates\homepage.html.twig:22 - templates\homepage.html.twig:19 - homepage.license ライセンス情報 - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.caption プロジェクトのページ - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.text ソースコード、ダウンロード、バグレポート、ToDoリスト他は<a href="%href%" class="link-external" target="_blank">GitHub project page</a>にあります。 - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.caption ヘルプ - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.text ヘルプとtipsが<a href="%href%" class="link-external" target="_blank">GitHub page</a>にあります - - Part-DB1\templates\homepage.html.twig:33 - Part-DB1\templates\homepage.html.twig:33 - templates\homepage.html.twig:30 - homepage.forum.caption フォーラム @@ -1452,8 +843,6 @@ - Part-DB1\templates\homepage.html.twig:45 - Part-DB1\templates\homepage.html.twig:45 new @@ -1462,138 +851,90 @@ - - Part-DB1\templates\LabelSystem\dialog.html.twig:3 - Part-DB1\templates\LabelSystem\dialog.html.twig:6 - label_generator.title ラベルジェネレーター - - Part-DB1\templates\LabelSystem\dialog.html.twig:16 - label_generator.common 一般 - - Part-DB1\templates\LabelSystem\dialog.html.twig:20 - label_generator.advanced 詳細 - - Part-DB1\templates\LabelSystem\dialog.html.twig:24 - label_generator.profiles プロファイル - - Part-DB1\templates\LabelSystem\dialog.html.twig:58 - label_generator.selected_profile 選択中のプロファイル - - Part-DB1\templates\LabelSystem\dialog.html.twig:62 - label_generator.edit_profile プロファイルを編集 - - Part-DB1\templates\LabelSystem\dialog.html.twig:75 - label_generator.load_profile プロファイルを読み込む - - Part-DB1\templates\LabelSystem\dialog.html.twig:102 - label_generator.download ダウンロード - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:3 - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:5 - label_generator.label_btn ラベルを生成 - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:20 - label_generator.label_empty 空のラベルを新規作成 - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:3 - label_scanner.title ラベルスキャナー - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.title ウェブカメラが見つかりません - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.text スキャナー機能を使用するには、許可されたウェブカメラが必要です。下にバーコードのコードを手動で入力することもできます。 - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:27 - label_scanner.source_select ソースを選択 - - Part-DB1\templates\LogSystem\log_list.html.twig:3 - Part-DB1\templates\LogSystem\log_list.html.twig:3 - log.list.title システムログ @@ -1601,8 +942,6 @@ - Part-DB1\templates\LogSystem\_log_table.html.twig:1 - Part-DB1\templates\LogSystem\_log_table.html.twig:1 new @@ -1612,8 +951,6 @@ - Part-DB1\templates\LogSystem\_log_table.html.twig:2 - Part-DB1\templates\LogSystem\_log_table.html.twig:2 new @@ -1622,194 +959,114 @@ - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.email_sent_by このメールは自動送信です: - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.dont_reply このメールに返信しないでください - - Part-DB1\templates\mail\pw_reset.html.twig:6 - Part-DB1\templates\mail\pw_reset.html.twig:6 - email.hi %name% こんにちは、%name% - - Part-DB1\templates\mail\pw_reset.html.twig:7 - Part-DB1\templates\mail\pw_reset.html.twig:7 - email.pw_reset.message パスワードリセットの要求がありました。この要求に心当たりがない場合は、このメールを無視してください。 - - Part-DB1\templates\mail\pw_reset.html.twig:9 - Part-DB1\templates\mail\pw_reset.html.twig:9 - email.pw_reset.button パスワードをリセットするにはここをクリック - - Part-DB1\templates\mail\pw_reset.html.twig:11 - Part-DB1\templates\mail\pw_reset.html.twig:11 - email.pw_reset.fallback 問題がある場合は<a href="%url%">%url%</a> で以下の情報を入力してください - - Part-DB1\templates\mail\pw_reset.html.twig:16 - Part-DB1\templates\mail\pw_reset.html.twig:16 - email.pw_reset.username ユーザー名 - - Part-DB1\templates\mail\pw_reset.html.twig:19 - Part-DB1\templates\mail\pw_reset.html.twig:19 - email.pw_reset.token トークン - - Part-DB1\templates\mail\pw_reset.html.twig:24 - Part-DB1\templates\mail\pw_reset.html.twig:24 - email.pw_reset.valid_unit %date% リセット トークンは <i>%date%</i> まで有効です。 - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:18 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:78 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - orderdetail.delete 削除 - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - pricedetails.edit.min_qty 最小注文数量 - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - pricedetails.edit.price 価格 - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - pricedetails.edit.price_qty 数量について - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - pricedetail.create 価格を追加 - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - templates\Parts\edit_part_info.html.twig:4 - part.edit.title 部品を編集 - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - templates\Parts\edit_part_info.html.twig:9 - part.edit.card_title 部品を編集 - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - part.edit.tab.common 一般 - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - part.edit.tab.manufacturer メーカー - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - part.edit.tab.advanced 詳細 @@ -1876,279 +1133,156 @@ - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - part.edit.tab.part_lots 在庫 - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - part.edit.tab.attachments 添付ファイル - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - part.edit.tab.orderdetails 購入情報 - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.specifications パラメーター - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:64 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.comment コメント - - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - templates\Parts\new_part.html.twig:8 - part.new.card_title 部品を新規作成 - - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - part_lot.delete 削除 - - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - part_lot.create 在庫を追加 - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - orderdetail.create 代理店を追加 - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - pricedetails.edit.delete.confirm 本当にこの価格を削除しますか?この操作はやり直しできません。 - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:62 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:61 - orderdetails.edit.delete.confirm 本当にこの代理店情報を削除しますか?この操作はやり直しできません。 - - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - templates\Parts\show_part_info.html.twig:4 - templates\Parts\show_part_info.html.twig:9 - part.info.title 部品の詳細 - - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - part.part_lots.label 在庫 - - Part-DB1\templates\Parts\info\show_part_info.html.twig:56 - Part-DB1\templates\Parts\lists\_info_card.html.twig:43 - Part-DB1\templates\_navbar_search.html.twig:31 - Part-DB1\templates\_navbar_search.html.twig:26 - templates\base.html.twig:62 - templates\Parts\show_part_info.html.twig:74 - src\Form\PartType.php:86 - comment.label コメント - - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - part.info.specifications パラメーター - - Part-DB1\templates\Parts\info\show_part_info.html.twig:74 - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - templates\Parts\show_part_info.html.twig:82 - attachment.labelp 添付ファイル - - Part-DB1\templates\Parts\info\show_part_info.html.twig:83 - Part-DB1\templates\Parts\info\show_part_info.html.twig:71 - templates\Parts\show_part_info.html.twig:88 - vendor.partinfo.shopping_infos 購入情報 - - Part-DB1\templates\Parts\info\show_part_info.html.twig:91 - Part-DB1\templates\Parts\info\show_part_info.html.twig:78 - templates\Parts\show_part_info.html.twig:94 - vendor.partinfo.history 履歴 - - Part-DB1\templates\Parts\info\show_part_info.html.twig:97 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - Part-DB1\templates\Parts\info\show_part_info.html.twig:84 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - templates\base.html.twig:176 - templates\base.html.twig:203 - templates\base.html.twig:217 - templates\base.html.twig:231 - templates\Parts\show_part_info.html.twig:100 - tools.label ツール - - Part-DB1\templates\Parts\info\show_part_info.html.twig:103 - Part-DB1\templates\Parts\info\show_part_info.html.twig:90 - extended_info.label その他の情報 - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - attachment.name 名称 - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - attachment.attachment_type 添付ファイルの種類 - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - attachment.file_name ファイル名 - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - attachment.file_size ファイルサイズ - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:54 - attachment.preview 画像をプレビュー - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:67 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:50 - attachment.download ダウンロード @@ -2156,8 +1290,6 @@ - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 new @@ -2166,14 +1298,6 @@ - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Unknown 不明 @@ -2181,10 +1305,6 @@ - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 new @@ -2194,8 +1314,6 @@ - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 new @@ -2204,49 +1322,24 @@ - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - part.isFavorite お気に入り - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - part.minOrderAmount 最小注文数量 - - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:46 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:41 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - templates\base.html.twig:70 - templates\Parts\show_part_info.html.twig:24 - src\Form\PartType.php:80 - manufacturer.label メーカー - - Part-DB1\templates\Parts\info\_main_infos.html.twig:24 - Part-DB1\templates\_navbar_search.html.twig:11 - templates\base.html.twig:54 - src\Form\PartType.php:62 - name.label 名前 @@ -2254,8 +1347,6 @@ - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 new @@ -2264,767 +1355,432 @@ - - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:19 - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:18 - templates\base.html.twig:58 - templates\Parts\show_part_info.html.twig:31 - src\Form\PartType.php:65 - description.label 説明 - - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:15 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:14 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - templates\base.html.twig:56 - templates\Parts\show_part_info.html.twig:32 - src\Form\PartType.php:74 - category.label カテゴリー - - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - templates\Parts\show_part_info.html.twig:42 - src\Form\PartType.php:69 - instock.label 在庫 - - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - templates\Parts\show_part_info.html.twig:44 - src\Form\PartType.php:72 - mininstock.label 最小在庫数量 - - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:52 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:47 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - templates\base.html.twig:73 - templates\Parts\show_part_info.html.twig:47 - footprint.label フットプリント - - Part-DB1\templates\Parts\info\_main_infos.html.twig:56 - Part-DB1\templates\Parts\info\_main_infos.html.twig:59 - Part-DB1\templates\Parts\info\_main_infos.html.twig:57 - Part-DB1\templates\Parts\info\_main_infos.html.twig:60 - templates\Parts\show_part_info.html.twig:51 - part.avg_price.label 平均価格 - - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - part.supplier.name 名称 - - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - part.supplier.partnr 部品番号 - - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - part.order.minamount 最小数量 - - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - part.order.price 価格 - - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - part.order.single_price 単価 - - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - Part-DB1\templates\Parts\info\_part_lots.html.twig:6 - part_lots.description 説明 - - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - part_lots.storage_location 保管場所 - - Part-DB1\templates\Parts\info\_part_lots.html.twig:9 - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - part_lots.amount 数量 - - Part-DB1\templates\Parts\info\_part_lots.html.twig:24 - Part-DB1\templates\Parts\info\_part_lots.html.twig:22 - part_lots.location_unknown 保管場所不明 - - Part-DB1\templates\Parts\info\_part_lots.html.twig:31 - Part-DB1\templates\Parts\info\_part_lots.html.twig:29 - part_lots.instock_unknown 数量不明 - - Part-DB1\templates\Parts\info\_part_lots.html.twig:40 - Part-DB1\templates\Parts\info\_part_lots.html.twig:38 - part_lots.expiration_date 有効期限 - - Part-DB1\templates\Parts\info\_part_lots.html.twig:48 - Part-DB1\templates\Parts\info\_part_lots.html.twig:46 - part_lots.is_expired 期限切れ - - Part-DB1\templates\Parts\info\_part_lots.html.twig:55 - Part-DB1\templates\Parts\info\_part_lots.html.twig:53 - part_lots.need_refill 補充が必要 - - Part-DB1\templates\Parts\info\_picture.html.twig:15 - Part-DB1\templates\Parts\info\_picture.html.twig:15 - part.info.prev_picture 前の画像 - - Part-DB1\templates\Parts\info\_picture.html.twig:19 - Part-DB1\templates\Parts\info\_picture.html.twig:19 - part.info.next_picture 次の画像 - - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - part.mass.tooltip 質量 - - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - part.needs_review.badge 確認が必要 - - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - part.favorite.badge お気に入り - - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - part.obsolete.badge 使用不可 - - Part-DB1\templates\Parts\info\_specifications.html.twig:10 - parameters.extracted_from_description 説明から自動的に抽出されました - - Part-DB1\templates\Parts\info\_specifications.html.twig:15 - parameters.auto_extracted_from_comment コメントから自動的に抽出されました - - Part-DB1\templates\Parts\info\_tools.html.twig:6 - Part-DB1\templates\Parts\info\_tools.html.twig:4 - templates\Parts\show_part_info.html.twig:125 - part.edit.btn 部品を編集 - - Part-DB1\templates\Parts\info\_tools.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:14 - templates\Parts\show_part_info.html.twig:135 - part.clone.btn 部品を複製 - - Part-DB1\templates\Parts\info\_tools.html.twig:24 - Part-DB1\templates\Parts\lists\_action_bar.html.twig:4 - templates\Parts\show_part_info.html.twig:143 - part.create.btn 新規部品作成 - - Part-DB1\templates\Parts\info\_tools.html.twig:31 - Part-DB1\templates\Parts\info\_tools.html.twig:29 - part.delete.confirm_title 本当にこの部品を削除しますか? - - Part-DB1\templates\Parts\info\_tools.html.twig:32 - Part-DB1\templates\Parts\info\_tools.html.twig:30 - part.delete.message この部品と、関連付けられた情報(添付ファイル、価格など)は削除されます。この操作はやり直しできません! - - Part-DB1\templates\Parts\info\_tools.html.twig:39 - Part-DB1\templates\Parts\info\_tools.html.twig:37 - part.delete 部品を削除 - - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - parts_list.all.title すべての部品 - - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - parts_list.category.title 部品とカテゴリー - - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - parts_list.footprint.title 部品とフットプリント - - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - parts_list.manufacturer.title 部品とメーカー - - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - parts_list.search.title 部品を検索 - - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - parts_list.storelocation.title 部品と保管場所 - - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - parts_list.supplier.title 部品とサプライヤー - - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - parts_list.tags.title 部品とタグ - - Part-DB1\templates\Parts\lists\_info_card.html.twig:22 - Part-DB1\templates\Parts\lists\_info_card.html.twig:17 - entity.info.common.tab 一般 - - Part-DB1\templates\Parts\lists\_info_card.html.twig:26 - Part-DB1\templates\Parts\lists\_info_card.html.twig:20 - entity.info.statistics.tab 統計情報 - - Part-DB1\templates\Parts\lists\_info_card.html.twig:31 - entity.info.attachments.tab 添付ファイル - - Part-DB1\templates\Parts\lists\_info_card.html.twig:37 - entity.info.parameters.tab パラメーター - - Part-DB1\templates\Parts\lists\_info_card.html.twig:54 - Part-DB1\templates\Parts\lists\_info_card.html.twig:30 - entity.info.name 名称 - - Part-DB1\templates\Parts\lists\_info_card.html.twig:58 - Part-DB1\templates\Parts\lists\_info_card.html.twig:96 - Part-DB1\templates\Parts\lists\_info_card.html.twig:34 - Part-DB1\templates\Parts\lists\_info_card.html.twig:67 - entity.info.parent - - Part-DB1\templates\Parts\lists\_info_card.html.twig:70 - Part-DB1\templates\Parts\lists\_info_card.html.twig:46 - entity.edit.btn 編集 - - Part-DB1\templates\Parts\lists\_info_card.html.twig:92 - Part-DB1\templates\Parts\lists\_info_card.html.twig:63 - entity.info.children_count 子要素の数 - - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - tfa.check.title 二要素認証が必要 - - Part-DB1\templates\security\2fa_base_form.html.twig:39 - Part-DB1\templates\security\2fa_base_form.html.twig:39 - tfa.code.trusted_pc このコンピューターを信頼(有効化すると、このコンピューターで二要素認証は求められません) - - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - login.btn ログイン - - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:42 - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:40 - user.logout ログアウト - - Part-DB1\templates\security\2fa_form.html.twig:6 - Part-DB1\templates\security\2fa_form.html.twig:6 - tfa.check.code.label 認証アプリのコード - - Part-DB1\templates\security\2fa_form.html.twig:10 - Part-DB1\templates\security\2fa_form.html.twig:10 - tfa.check.code.help 認証アプリの6桁のコードを入力してください。アプリを使用できない場合はバックアップコードを入力してください。 - - Part-DB1\templates\security\login.html.twig:3 - Part-DB1\templates\security\login.html.twig:3 - templates\security\login.html.twig:3 - login.title ログイン - - Part-DB1\templates\security\login.html.twig:7 - Part-DB1\templates\security\login.html.twig:7 - templates\security\login.html.twig:7 - login.card_title ログイン - - Part-DB1\templates\security\login.html.twig:31 - Part-DB1\templates\security\login.html.twig:31 - templates\security\login.html.twig:31 - login.username.label ユーザー名 - - Part-DB1\templates\security\login.html.twig:34 - Part-DB1\templates\security\login.html.twig:34 - templates\security\login.html.twig:34 - login.username.placeholder ユーザー名 - - Part-DB1\templates\security\login.html.twig:38 - Part-DB1\templates\security\login.html.twig:38 - templates\security\login.html.twig:38 - login.password.label パスワード - - Part-DB1\templates\security\login.html.twig:40 - Part-DB1\templates\security\login.html.twig:40 - templates\security\login.html.twig:40 - login.password.placeholder パスワード - - Part-DB1\templates\security\login.html.twig:50 - Part-DB1\templates\security\login.html.twig:50 - templates\security\login.html.twig:50 - login.rememberme 記憶する(共用コンピューターでは使用しないでください) - - Part-DB1\templates\security\login.html.twig:64 - Part-DB1\templates\security\login.html.twig:64 - pw_reset.password_forget ユーザー名/パスワードを忘れた - - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - pw_reset.new_pw.header.title 新しいパスワードを設定 - - Part-DB1\templates\security\pw_reset_request.html.twig:5 - Part-DB1\templates\security\pw_reset_request.html.twig:5 - pw_reset.request.header.title 新しいパスワードを要求 - - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - tfa_u2f.http_warning 安全でないHTTPでアクセスしているため、U2Fが動作しない可能性が高いです(Bad Requestのエラーメッセージ)。セキュリティー キーを使用したい場合は、管理者に安全なHTTPSにするよう依頼してください。 - - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - r_u2f_two_factor.pressbutton セキュリティー キーを挿入しボタンを押してください。 - - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - tfa_u2f.add_key.title セキュリティー キーを追加 - - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - tfa_u2f.explanation U2F/FIDO互換のセキュリティキー(例: YubiKeyやNitroKey)により、ユーザーフレンドリーで安全な二要素認証を実現できます。セキュリティキーはここで登録することができ、二要素認証が必要な場合は、USB経由でキーを挿入するか、NFC経由でデバイスに入力するだけです。 - - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - tfa_u2f.add_key.backup_hint 鍵を紛失しても確実にアクセスできるように、別のキーををバックアップとして登録し、大切に保管しておくことをおすすめします。 - - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - tfa_u2f.add_key.add_button セキュリティー キーを追加 - - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - tfa_u2f.add_key.back_to_settings 設定に戻る @@ -3032,10 +1788,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 new @@ -3045,8 +1797,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:14 - Part-DB1\templates\Statistics\statistics.html.twig:14 new @@ -3056,8 +1806,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:19 - Part-DB1\templates\Statistics\statistics.html.twig:19 new @@ -3067,8 +1815,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:24 - Part-DB1\templates\Statistics\statistics.html.twig:24 new @@ -3078,12 +1824,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 new @@ -3093,12 +1833,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 new @@ -3108,8 +1842,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:40 - Part-DB1\templates\Statistics\statistics.html.twig:40 new @@ -3119,8 +1851,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:44 - Part-DB1\templates\Statistics\statistics.html.twig:44 new @@ -3130,8 +1860,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:48 - Part-DB1\templates\Statistics\statistics.html.twig:48 new @@ -3141,8 +1869,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:65 - Part-DB1\templates\Statistics\statistics.html.twig:65 new @@ -3152,8 +1878,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:69 - Part-DB1\templates\Statistics\statistics.html.twig:69 new @@ -3163,8 +1887,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:73 - Part-DB1\templates\Statistics\statistics.html.twig:73 new @@ -3174,8 +1896,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:77 - Part-DB1\templates\Statistics\statistics.html.twig:77 new @@ -3185,8 +1905,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:81 - Part-DB1\templates\Statistics\statistics.html.twig:81 new @@ -3196,8 +1914,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:85 - Part-DB1\templates\Statistics\statistics.html.twig:85 new @@ -3207,8 +1923,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:89 - Part-DB1\templates\Statistics\statistics.html.twig:89 new @@ -3218,8 +1932,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:93 - Part-DB1\templates\Statistics\statistics.html.twig:93 new @@ -3229,8 +1941,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:110 - Part-DB1\templates\Statistics\statistics.html.twig:110 new @@ -3240,8 +1950,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:114 - Part-DB1\templates\Statistics\statistics.html.twig:114 new @@ -3251,8 +1959,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:118 - Part-DB1\templates\Statistics\statistics.html.twig:118 new @@ -3262,8 +1968,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:122 - Part-DB1\templates\Statistics\statistics.html.twig:122 new @@ -3273,8 +1977,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:126 - Part-DB1\templates\Statistics\statistics.html.twig:126 new @@ -3283,302 +1985,156 @@ - - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - tfa_backup.codes.title バックアップコード - - Part-DB1\templates\Users\backup_codes.html.twig:12 - Part-DB1\templates\Users\backup_codes.html.twig:12 - tfa_backup.codes.explanation このコードを印刷し大切に保管してください。 - - Part-DB1\templates\Users\backup_codes.html.twig:13 - Part-DB1\templates\Users\backup_codes.html.twig:13 - tfa_backup.codes.help このコードのうち1つを使うことで、スマートフォンの紛失やデータ破損等で認証アプリをインストールしたデバイスが使えない場合にアカウントにアクセスし、新しい認証アプリを設定できます。それぞれのコードは1回のみ使えます。使用済みのコードは削除することをおすすめします。また、このコードは安全な場所に保管してください。第三者がアカウントに不正にアクセスする恐れがあります。 - - Part-DB1\templates\Users\backup_codes.html.twig:16 - Part-DB1\templates\Users\backup_codes.html.twig:16 - tfa_backup.username ユーザー名 - - Part-DB1\templates\Users\backup_codes.html.twig:29 - Part-DB1\templates\Users\backup_codes.html.twig:29 - tfa_backup.codes.page_generated_on ページは%date%に生成されました - - Part-DB1\templates\Users\backup_codes.html.twig:32 - Part-DB1\templates\Users\backup_codes.html.twig:32 - tfa_backup.codes.print 印刷 - - Part-DB1\templates\Users\backup_codes.html.twig:35 - Part-DB1\templates\Users\backup_codes.html.twig:35 - tfa_backup.codes.copy_clipboard クリップボードにコピー - - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:40 - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:38 - templates\base.html.twig:99 - templates\Users\user_info.html.twig:3 - templates\Users\user_info.html.twig:6 - user.info.label ユーザー情報 - - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - templates\Users\user_info.html.twig:18 - src\Form\UserSettingsType.php:32 - user.firstName.label - - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - templates\Users\user_info.html.twig:24 - src\Form\UserSettingsType.php:35 - user.lastName.label - - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - templates\Users\user_info.html.twig:30 - src\Form\UserSettingsType.php:41 - user.email.label メールアドレス - - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - templates\Users\user_info.html.twig:37 - src\Form\UserSettingsType.php:38 - user.department.label 部署 - - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - templates\Users\user_info.html.twig:47 - src\Form\UserSettingsType.php:30 - user.username.label ユーザー名 - - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - templates\Users\user_info.html.twig:53 - group.label グループ - - Part-DB1\templates\Users\user_info.html.twig:67 - Part-DB1\templates\Users\user_info.html.twig:67 - user.permissions 権限 - - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:39 - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:37 - templates\base.html.twig:98 - templates\Users\user_settings.html.twig:3 - templates\Users\user_settings.html.twig:6 - user.settings.label ユーザー設定 - - Part-DB1\templates\Users\user_settings.html.twig:18 - Part-DB1\templates\Users\user_settings.html.twig:18 - templates\Users\user_settings.html.twig:14 - user_settings.data.label 個人データ - - Part-DB1\templates\Users\user_settings.html.twig:22 - Part-DB1\templates\Users\user_settings.html.twig:22 - templates\Users\user_settings.html.twig:18 - user_settings.configuration.label 設定 - - Part-DB1\templates\Users\user_settings.html.twig:55 - Part-DB1\templates\Users\user_settings.html.twig:55 - templates\Users\user_settings.html.twig:48 - user.settings.change_pw パスワード変更 - - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - user.settings.2fa_settings 二要素認証 - - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - tfa.settings.google.tab 認証アプリ - - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - tfa.settings.bakup.tab バックアップ コード - - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - tfa.settings.u2f.tab セキュリティ キー (U2F) - - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - tfa.settings.trustedDevices.tab 信頼された端末 - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_title 本当に認証アプリを無効化しますか? - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_message 認証アプリを無効化すると、すべてのバックアップ コードが削除されます。もう一度印刷が必要な場合があります。<br> @@ -3586,262 +2142,156 @@ - - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - tfa_google.disabled_message 認証アプリを無効化しました。 - - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - tfa_google.step.download 認証アプリをダウンロード (例: <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a> や <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp">FreeOTP Authenticator</a>) - - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - tfa_google.step.scan 表示されているQRコードをアプリでスキャンするか、データを手動で入力 - - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - tfa_google.step.input_code アプリに表示されたコードを下に入力し確認 - - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - tfa_google.step.download_backup バックアップ コードを印刷し安全に保管 - - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - tfa_google.manual_setup 手動設定 - - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - tfa_google.manual_setup.type タイプ - - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - tfa_google.manual_setup.username ユーザー名 - - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - tfa_google.manual_setup.secret シークレット - - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - tfa_google.manual_setup.digit_count 桁数 - - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - tfa_google.enabled_message 認証アプリが有効になりました - - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - tfa_backup.disabled バックアップコードが無効です。有効化するためには認証アプリを設定してください。 - - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - tfa_backup.explanation バックアップコードを使えば、端末を紛失してもアカウントにアクセスすることができます。コードを印刷して大切に保管してください。 - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_title 本当にコードをリセットしますか? - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_message これにより、以前のコードはすべて削除され、新しいコードのセットが生成されます。この操作はやり直せません。新しいコードは印刷して、安全な場所に保管してください。 - - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - tfa_backup.enabled バックアップ コードが有効 - - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - tfa_backup.show_codes バックアップ コードを表示 - - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - tfa_u2f.table_caption 登録されたセキュリティー キー - - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - tfa_u2f.delete_u2f.confirm_title 本当にセキュリティー キーを削除しますか? - - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - tfa_u2f.delete_u2f.confirm_message このキーを削除すると、このキーを使ってログインできなくなります。他のセキュリティー キーがない場合は、二要素認証が無効化されます。 - - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - tfa_u2f.keys.name キーの名前 - - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - tfa_u2f.keys.added_date 登録日 - - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - tfa_u2f.key_delete キーを削除 - - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - tfa_u2f.no_keys_registered キーが登録されていません。 - - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - tfa_u2f.add_new_key 新しいセキュリティー キーを登録 - - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - tfa_trustedDevices.explanation 2つ目の要素をチェックすると、現在のコンピューターは信頼できるとマークされるので、このコンピューターの2つ目の要素チェックはもう必要ありません。 @@ -3849,310 +2299,162 @@ - - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - tfa_trustedDevices.invalidate.confirm_title 本当に登録されたコンピューターを全て削除しますか? - - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - tfa_trustedDevices.invalidate.confirm_message 全てのコンピューターでもう一度二要素認証をする必要があります。二要素認証に使う端末を手元に用意してください。 - - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - tfa_trustedDevices.invalidate.btn 信頼した端末をリセット - - Part-DB1\templates\_navbar.html.twig:4 - Part-DB1\templates\_navbar.html.twig:4 - templates\base.html.twig:29 - sidebar.toggle サイドバーを切り替え - - Part-DB1\templates\_navbar.html.twig:22 - navbar.scanner.link スキャナー - - Part-DB1\templates\_navbar.html.twig:38 - Part-DB1\templates\_navbar.html.twig:36 - templates\base.html.twig:97 - user.loggedin.label 以下としてログイン: - - Part-DB1\templates\_navbar.html.twig:44 - Part-DB1\templates\_navbar.html.twig:42 - templates\base.html.twig:103 - user.login ログイン - - Part-DB1\templates\_navbar.html.twig:50 - Part-DB1\templates\_navbar.html.twig:48 - ui.toggle_darkmode ダークモード - - Part-DB1\templates\_navbar.html.twig:54 - Part-DB1\src\Form\UserSettingsType.php:97 - Part-DB1\templates\_navbar.html.twig:52 - Part-DB1\src\Form\UserSettingsType.php:97 - templates\base.html.twig:106 - src\Form\UserSettingsType.php:44 - user.language_select 言語切り替え - - Part-DB1\templates\_navbar_search.html.twig:4 - Part-DB1\templates\_navbar_search.html.twig:4 - templates\base.html.twig:49 - search.options.label 検索オプション - - Part-DB1\templates\_navbar_search.html.twig:23 - tags.label タグ - - Part-DB1\templates\_navbar_search.html.twig:27 - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - templates\base.html.twig:60 - templates\Parts\show_part_info.html.twig:36 - src\Form\PartType.php:77 - storelocation.label 保管場所 - - Part-DB1\templates\_navbar_search.html.twig:36 - Part-DB1\templates\_navbar_search.html.twig:31 - templates\base.html.twig:65 - ordernumber.label.short 注文番号 - - Part-DB1\templates\_navbar_search.html.twig:40 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - Part-DB1\templates\_navbar_search.html.twig:35 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - templates\base.html.twig:67 - supplier.label サプライヤー - - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_navbar_search.html.twig:56 - templates\base.html.twig:77 - search.regexmatching 正規表現で検索 - - Part-DB1\templates\_sidebar.html.twig:2 - Part-DB1\templates\_sidebar.html.twig:2 - templates\base.html.twig:165 - templates\base.html.twig:192 - templates\base.html.twig:220 - actions アクション - - Part-DB1\templates\_sidebar.html.twig:6 - Part-DB1\templates\_sidebar.html.twig:6 - templates\base.html.twig:169 - templates\base.html.twig:196 - templates\base.html.twig:224 - datasource データソース - - Part-DB1\templates\_sidebar.html.twig:10 - Part-DB1\templates\_sidebar.html.twig:10 - templates\base.html.twig:173 - templates\base.html.twig:200 - templates\base.html.twig:228 - manufacturer.labelp メーカー - - Part-DB1\templates\_sidebar.html.twig:11 - Part-DB1\templates\_sidebar.html.twig:11 - templates\base.html.twig:174 - templates\base.html.twig:201 - templates\base.html.twig:229 - supplier.labelp サプライヤー - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:213 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:293 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:293 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:181 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:243 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:268 - attachment.download_failed 外部ファイルのダウンロードに失敗しました。 - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:222 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:190 - entity.edit_flash 変更が保存されました。 - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:231 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:196 - entity.edit_flash.invalid 変更を保存できません。入力を確認してください。 - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:302 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:252 - entity.created_flash 要素が作成されました。 - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:308 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:258 - entity.created_flash.invalid 要素が作成できません。入力を確認してください。 - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:399 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:352 - src\Controller\BaseAdminController.php:154 - attachment_type.deleted 要素が削除されました。 - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:401 - Part-DB1\src\Controller\UserController.php:109 - Part-DB1\src\Controller\UserSettingsController.php:159 - Part-DB1\src\Controller\UserSettingsController.php:193 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:354 - Part-DB1\src\Controller\UserController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:150 - Part-DB1\src\Controller\UserSettingsController.php:182 - csfr_invalid CSRFトークンが無効です。このページを再読み込みしてください。このメッセージが消えない場合は管理者に連絡してください。 - - Part-DB1\src\Controller\LabelController.php:125 - label_generator.no_entities_found この範囲に該当するエンティティはありません @@ -4160,8 +2462,6 @@ - Part-DB1\src\Controller\LogController.php:149 - Part-DB1\src\Controller\LogController.php:154 new @@ -4171,8 +2471,6 @@ - Part-DB1\src\Controller\LogController.php:156 - Part-DB1\src\Controller\LogController.php:160 new @@ -4182,8 +2480,6 @@ - Part-DB1\src\Controller\LogController.php:176 - Part-DB1\src\Controller\LogController.php:180 new @@ -4193,8 +2489,6 @@ - Part-DB1\src\Controller\LogController.php:178 - Part-DB1\src\Controller\LogController.php:182 new @@ -4204,8 +2498,6 @@ - Part-DB1\src\Controller\LogController.php:185 - Part-DB1\src\Controller\LogController.php:189 new @@ -4215,8 +2507,6 @@ - Part-DB1\src\Controller\LogController.php:187 - Part-DB1\src\Controller\LogController.php:191 new @@ -4226,8 +2516,6 @@ - Part-DB1\src\Controller\LogController.php:194 - Part-DB1\src\Controller\LogController.php:198 new @@ -4237,8 +2525,6 @@ - Part-DB1\src\Controller\LogController.php:196 - Part-DB1\src\Controller\LogController.php:200 new @@ -4248,8 +2534,6 @@ - Part-DB1\src\Controller\LogController.php:199 - Part-DB1\src\Controller\LogController.php:203 new @@ -4258,306 +2542,168 @@ - - Part-DB1\src\Controller\PartController.php:182 - Part-DB1\src\Controller\PartController.php:182 - src\Controller\PartController.php:80 - part.edited_flash 変更を保存しました。 - - Part-DB1\src\Controller\PartController.php:216 - Part-DB1\src\Controller\PartController.php:219 - part.deleted 部品は正常に削除されました。 - - Part-DB1\src\Controller\PartController.php:302 - Part-DB1\src\Controller\PartController.php:277 - Part-DB1\src\Controller\PartController.php:317 - src\Controller\PartController.php:113 - src\Controller\PartController.php:142 - part.created_flash 部品が作成されました。 - - Part-DB1\src\Controller\PartController.php:308 - Part-DB1\src\Controller\PartController.php:283 - part.created_flash.invalid 作成中のエラー: 入力を確認してください。 - - Part-DB1\src\Controller\ScanController.php:68 - Part-DB1\src\Controller\ScanController.php:90 - scan.qr_not_found このバーコードに該当するものはありません - - Part-DB1\src\Controller\ScanController.php:71 - scan.format_unknown フォーマットが不明です - - Part-DB1\src\Controller\ScanController.php:86 - scan.qr_success 該当するものが見つかりました - - Part-DB1\src\Controller\SecurityController.php:114 - Part-DB1\src\Controller\SecurityController.php:109 - pw_reset.user_or_email ユーザー名/メールアドレス - - Part-DB1\src\Controller\SecurityController.php:131 - Part-DB1\src\Controller\SecurityController.php:126 - pw_reset.request.success リセット要求に成功しました。メールを確認して指示に従ってください。 - - Part-DB1\src\Controller\SecurityController.php:162 - Part-DB1\src\Controller\SecurityController.php:160 - pw_reset.username ユーザー名 - - Part-DB1\src\Controller\SecurityController.php:165 - Part-DB1\src\Controller\SecurityController.php:163 - pw_reset.token トークン - - Part-DB1\src\Controller\SecurityController.php:194 - Part-DB1\src\Controller\SecurityController.php:192 - pw_reset.new_pw.error ユーザー名またはトークンが無効です。入力を確認してください。 - - Part-DB1\src\Controller\SecurityController.php:196 - Part-DB1\src\Controller\SecurityController.php:194 - pw_reset.new_pw.success パスワードは正常にリセットされました。新しいパスワードでログインしてください。 - - Part-DB1\src\Controller\UserController.php:107 - Part-DB1\src\Controller\UserController.php:99 - user.edit.reset_success すべての二要素認証を無効化しました。 - - Part-DB1\src\Controller\UserSettingsController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:92 - tfa_backup.no_codes_enabled 有効なバックアップ コードがありません。 - - Part-DB1\src\Controller\UserSettingsController.php:138 - Part-DB1\src\Controller\UserSettingsController.php:132 - tfa_u2f.u2f_delete.not_existing このIDに紐付けられたセキュリティ キーがありません。 - - Part-DB1\src\Controller\UserSettingsController.php:145 - Part-DB1\src\Controller\UserSettingsController.php:139 - tfa_u2f.u2f_delete.access_denied 他人のセキュリティ キーは削除できません。 - - Part-DB1\src\Controller\UserSettingsController.php:153 - Part-DB1\src\Controller\UserSettingsController.php:147 - tfa.u2f.u2f_delete.success セキュリティ キーは正常に削除されました。 - - Part-DB1\src\Controller\UserSettingsController.php:188 - Part-DB1\src\Controller\UserSettingsController.php:180 - tfa_trustedDevice.invalidate.success 信頼されたデバイスは正常にリセットされました。 - - Part-DB1\src\Controller\UserSettingsController.php:235 - Part-DB1\src\Controller\UserSettingsController.php:226 - src\Controller\UserController.php:98 - user.settings.saved_flash 設定を保存しました。 - - Part-DB1\src\Controller\UserSettingsController.php:297 - Part-DB1\src\Controller\UserSettingsController.php:288 - src\Controller\UserController.php:130 - user.settings.pw_changed_flash パスワードを変更しました。 - - Part-DB1\src\Controller\UserSettingsController.php:317 - Part-DB1\src\Controller\UserSettingsController.php:306 - user.settings.2fa.google.activated 認証アプリが正常に有効化されました。 - - Part-DB1\src\Controller\UserSettingsController.php:328 - Part-DB1\src\Controller\UserSettingsController.php:315 - user.settings.2fa.google.disabled 認証アプリが正常に無効化されました。 - - Part-DB1\src\Controller\UserSettingsController.php:346 - Part-DB1\src\Controller\UserSettingsController.php:332 - user.settings.2fa.backup_codes.regenerated 新しいバックアップ コードが正常に生成されました。 - - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - attachment.table.filesize ファイルサイズ - - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:245 - Part-DB1\src\DataTables\PartsDataTable.php:252 - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:193 - Part-DB1\src\DataTables\PartsDataTable.php:200 - true はい - - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:246 - Part-DB1\src\DataTables\PartsDataTable.php:253 - Part-DB1\src\Form\Type\SIUnitType.php:139 - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:201 - Part-DB1\src\Form\Type\SIUnitType.php:139 - false いいえ - - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:128 - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:119 - log.target_deleted 削除されました @@ -4565,8 +2711,6 @@ - Part-DB1\src\DataTables\Column\RevertLogColumn.php:57 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:60 new @@ -4576,8 +2720,6 @@ - Part-DB1\src\DataTables\Column\RevertLogColumn.php:63 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:66 new @@ -4587,8 +2729,6 @@ - Part-DB1\src\DataTables\Column\RevertLogColumn.php:83 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:86 new @@ -4597,70 +2737,42 @@ - - Part-DB1\src\DataTables\LogDataTable.php:173 - Part-DB1\src\DataTables\LogDataTable.php:161 - log.id ID - - Part-DB1\src\DataTables\LogDataTable.php:178 - Part-DB1\src\DataTables\LogDataTable.php:166 - log.timestamp タイムスタンプ - - Part-DB1\src\DataTables\LogDataTable.php:183 - Part-DB1\src\DataTables\LogDataTable.php:171 - log.type イベント - - Part-DB1\src\DataTables\LogDataTable.php:191 - Part-DB1\src\DataTables\LogDataTable.php:179 - log.level レベル - - Part-DB1\src\DataTables\LogDataTable.php:200 - Part-DB1\src\DataTables\LogDataTable.php:188 - log.user ユーザー - - Part-DB1\src\DataTables\LogDataTable.php:213 - Part-DB1\src\DataTables\LogDataTable.php:201 - log.target_type 対象タイプ - - Part-DB1\src\DataTables\LogDataTable.php:226 - Part-DB1\src\DataTables\LogDataTable.php:214 - log.target 対象 @@ -4668,8 +2780,6 @@ - Part-DB1\src\DataTables\LogDataTable.php:231 - Part-DB1\src\DataTables\LogDataTable.php:218 new @@ -4678,100 +2788,60 @@ - - Part-DB1\src\DataTables\PartsDataTable.php:168 - Part-DB1\src\DataTables\PartsDataTable.php:116 - part.table.name 名称 - - Part-DB1\src\DataTables\PartsDataTable.php:178 - Part-DB1\src\DataTables\PartsDataTable.php:126 - part.table.id ID - - Part-DB1\src\DataTables\PartsDataTable.php:182 - Part-DB1\src\DataTables\PartsDataTable.php:130 - part.table.description 説明 - - Part-DB1\src\DataTables\PartsDataTable.php:185 - Part-DB1\src\DataTables\PartsDataTable.php:133 - part.table.category カテゴリー - - Part-DB1\src\DataTables\PartsDataTable.php:190 - Part-DB1\src\DataTables\PartsDataTable.php:138 - part.table.footprint フットプリント - - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:142 - part.table.manufacturer メーカー - - Part-DB1\src\DataTables\PartsDataTable.php:197 - Part-DB1\src\DataTables\PartsDataTable.php:145 - part.table.storeLocations 保管場所 - - Part-DB1\src\DataTables\PartsDataTable.php:216 - Part-DB1\src\DataTables\PartsDataTable.php:164 - part.table.amount 数量 - - Part-DB1\src\DataTables\PartsDataTable.php:224 - Part-DB1\src\DataTables\PartsDataTable.php:172 - part.table.minamount 最小数量 - - Part-DB1\src\DataTables\PartsDataTable.php:232 - Part-DB1\src\DataTables\PartsDataTable.php:180 - part.table.partUnit 単位 @@ -4784,864 +2854,522 @@ - - Part-DB1\src\DataTables\PartsDataTable.php:236 - Part-DB1\src\DataTables\PartsDataTable.php:184 - part.table.addedDate 作成日: - - Part-DB1\src\DataTables\PartsDataTable.php:240 - Part-DB1\src\DataTables\PartsDataTable.php:188 - part.table.lastModified 最終更新: - - Part-DB1\src\DataTables\PartsDataTable.php:244 - Part-DB1\src\DataTables\PartsDataTable.php:192 - part.table.needsReview 確認が必要 - - Part-DB1\src\DataTables\PartsDataTable.php:251 - Part-DB1\src\DataTables\PartsDataTable.php:199 - part.table.favorite お気に入り - - Part-DB1\src\DataTables\PartsDataTable.php:258 - Part-DB1\src\DataTables\PartsDataTable.php:206 - part.table.manufacturingStatus 状態 - - Part-DB1\src\DataTables\PartsDataTable.php:260 - Part-DB1\src\DataTables\PartsDataTable.php:262 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:208 - Part-DB1\src\DataTables\PartsDataTable.php:210 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.unknown 不明 - - Part-DB1\src\DataTables\PartsDataTable.php:263 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:211 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.announced アナウンス済み - - Part-DB1\src\DataTables\PartsDataTable.php:264 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.active アクティブ - - Part-DB1\src\DataTables\PartsDataTable.php:265 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:213 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.nrfnd 新規設計に非推奨 - - Part-DB1\src\DataTables\PartsDataTable.php:266 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:214 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.eol 製造終了 - - Part-DB1\src\DataTables\PartsDataTable.php:267 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:215 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.discontinued 廃止 - - Part-DB1\src\DataTables\PartsDataTable.php:271 - Part-DB1\src\DataTables\PartsDataTable.php:219 - part.table.mpn MPN - - Part-DB1\src\DataTables\PartsDataTable.php:275 - Part-DB1\src\DataTables\PartsDataTable.php:223 - part.table.mass 質量 - - Part-DB1\src\DataTables\PartsDataTable.php:279 - Part-DB1\src\DataTables\PartsDataTable.php:227 - part.table.tags タグ - - Part-DB1\src\DataTables\PartsDataTable.php:283 - Part-DB1\src\DataTables\PartsDataTable.php:231 - part.table.attachments 添付ファイル - - Part-DB1\src\EventSubscriber\UserSystem\LoginSuccessSubscriber.php:82 - Part-DB1\src\EventSubscriber\LoginSuccessListener.php:82 - flash.login_successful ログインに成功しました - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - JSON JSON - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - XML XML - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - CSV CSV - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - YAML YAML - - Part-DB1\src\Form\AdminPages\ImportType.php:124 - Part-DB1\src\Form\AdminPages\ImportType.php:124 - import.abort_on_validation.help このオプションを選択すると、無効なデータが検出された場合に全てのインポートが中断されます。選択しない場合は、無効なデータは無視され他の要素のインポートを試みます。 - - Part-DB1\src\Form\AdminPages\ImportType.php:86 - Part-DB1\src\Form\AdminPages\ImportType.php:86 - src\Form\ImportType.php:70 - import.csv_separator CSVの区切り文字 - - Part-DB1\src\Form\AdminPages\ImportType.php:93 - Part-DB1\src\Form\AdminPages\ImportType.php:93 - src\Form\ImportType.php:72 - parent.label 親要素 - - Part-DB1\src\Form\AdminPages\ImportType.php:101 - Part-DB1\src\Form\AdminPages\ImportType.php:101 - src\Form\ImportType.php:75 - import.file ファイル - - Part-DB1\src\Form\AdminPages\ImportType.php:111 - Part-DB1\src\Form\AdminPages\ImportType.php:111 - src\Form\ImportType.php:78 - import.preserve_children インポート時に子要素を残す - - Part-DB1\src\Form\AdminPages\ImportType.php:120 - Part-DB1\src\Form\AdminPages\ImportType.php:120 - src\Form\ImportType.php:80 - import.abort_on_validation  無効なデータがある場合に中断する - - Part-DB1\src\Form\AdminPages\ImportType.php:132 - Part-DB1\src\Form\AdminPages\ImportType.php:132 - src\Form\ImportType.php:85 - import.btn インポート - - Part-DB1\src\Form\AttachmentFormType.php:113 - Part-DB1\src\Form\AttachmentFormType.php:109 - attachment.edit.secure_file.help プライベートとマークされた添付ファイルは、適切な権限を持つ認証済みユーザーのみがアクセスできます。この項目を有効化すると、サムネイルは生成されません。またファイルへのアクセスが不便になります。 - - Part-DB1\src\Form\AttachmentFormType.php:127 - Part-DB1\src\Form\AttachmentFormType.php:123 - attachment.edit.url.help 外部ファイルのURLを指定できます。内部リソース(例: フットプリント)の検索に使用するキーワードを入力することもできます。 - - Part-DB1\src\Form\AttachmentFormType.php:82 - Part-DB1\src\Form\AttachmentFormType.php:79 - attachment.edit.name 名称 - - Part-DB1\src\Form\AttachmentFormType.php:85 - Part-DB1\src\Form\AttachmentFormType.php:82 - attachment.edit.attachment_type 添付ファイルの種類 - - Part-DB1\src\Form\AttachmentFormType.php:94 - Part-DB1\src\Form\AttachmentFormType.php:91 - attachment.edit.show_in_table 表として表示 - - Part-DB1\src\Form\AttachmentFormType.php:105 - Part-DB1\src\Form\AttachmentFormType.php:102 - attachment.edit.secure_file プライベートな添付ファイル - - Part-DB1\src\Form\AttachmentFormType.php:119 - Part-DB1\src\Form\AttachmentFormType.php:115 - attachment.edit.url URL - - Part-DB1\src\Form\AttachmentFormType.php:133 - Part-DB1\src\Form\AttachmentFormType.php:129 - attachment.edit.download_url 外部ファイルをダウンロード - - Part-DB1\src\Form\AttachmentFormType.php:146 - Part-DB1\src\Form\AttachmentFormType.php:142 - attachment.edit.file ファイルをアップロード - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:86 - part.label 部品 - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:87 - part_lot.label 部品ロット - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.none なし - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.qr QRコード (推奨) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code128 Code 128 (推奨) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code39 Code 39 (推奨) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code93 Code 93 - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.datamatrix Datamatrix - - Part-DB1\src\Form\LabelOptionsType.php:122 - label_options.lines_mode.html プレースホルダー - - Part-DB1\src\Form\LabelOptionsType.php:122 - label.options.lines_mode.twig Twig - - Part-DB1\src\Form\LabelOptionsType.php:126 - label_options.lines_mode.help ここでTwigを選択すると、コンテンツフィールドはTwigテンプレートとして解釈されます。詳細については <a href="https://twig.symfony.com/doc/3.x/templates.html">Twig documentation</a> や <a href="https://github.com/Part-DB/Part-DB-symfony/wiki/Labels#twig-mode">Wiki</a> を参照してください。 - - Part-DB1\src\Form\LabelOptionsType.php:47 - label_options.page_size.label ラベルサイズ - - Part-DB1\src\Form\LabelOptionsType.php:66 - label_options.supported_elements.label 対象 - - Part-DB1\src\Form\LabelOptionsType.php:75 - label_options.barcode_type.label バーコード - - Part-DB1\src\Form\LabelOptionsType.php:102 - label_profile.lines.label 内容 - - Part-DB1\src\Form\LabelOptionsType.php:111 - label_options.additional_css.label 追加のスタイル (CSS) - - Part-DB1\src\Form\LabelOptionsType.php:120 - label_options.lines_mode.label パーサーモード - - Part-DB1\src\Form\LabelOptionsType.php:51 - label_options.width.placeholder - - Part-DB1\src\Form\LabelOptionsType.php:60 - label_options.height.placeholder 高さ - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:49 - label_generator.target_id.range_hint 一度に複数のラベルを作成する場合は、複数のID (例: 1,2,3) や範囲 (例: 1-3) で指定します。 - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:46 - label_generator.target_id.label 対象のID - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:59 - label_generator.update 更新 - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:36 - scan_dialog.input 入力 - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:44 - scan_dialog.submit 送信 - - Part-DB1\src\Form\ParameterType.php:41 - parameters.name.placeholder 例: DC電流ゲイン - - Part-DB1\src\Form\ParameterType.php:50 - parameters.symbol.placeholder 例: h_{FE} - - Part-DB1\src\Form\ParameterType.php:60 - parameters.text.placeholder 例: 試験条件 - - Part-DB1\src\Form\ParameterType.php:71 - parameters.max.placeholder 例: 350 - - Part-DB1\src\Form\ParameterType.php:82 - parameters.min.placeholder 例: 100 - - Part-DB1\src\Form\ParameterType.php:93 - parameters.typical.placeholder 例: 200 - - Part-DB1\src\Form\ParameterType.php:103 - parameters.unit.placeholder 例: V - - Part-DB1\src\Form\ParameterType.php:114 - parameter.group.placeholder 例: 技術仕様 - - Part-DB1\src\Form\Part\OrderdetailType.php:72 - Part-DB1\src\Form\Part\OrderdetailType.php:75 - orderdetails.edit.supplierpartnr 注文番号 - - Part-DB1\src\Form\Part\OrderdetailType.php:81 - Part-DB1\src\Form\Part\OrderdetailType.php:84 - orderdetails.edit.supplier サプライヤー - - Part-DB1\src\Form\Part\OrderdetailType.php:87 - Part-DB1\src\Form\Part\OrderdetailType.php:90 - orderdetails.edit.url オファーへのリンク - - Part-DB1\src\Form\Part\OrderdetailType.php:93 - Part-DB1\src\Form\Part\OrderdetailType.php:96 - orderdetails.edit.obsolete 利用できません - - Part-DB1\src\Form\Part\OrderdetailType.php:75 - Part-DB1\src\Form\Part\OrderdetailType.php:78 - orderdetails.edit.supplierpartnr.placeholder 例: BC 547 - - Part-DB1\src\Form\Part\PartBaseType.php:101 - Part-DB1\src\Form\Part\PartBaseType.php:99 - part.edit.name 名称 - - Part-DB1\src\Form\Part\PartBaseType.php:109 - Part-DB1\src\Form\Part\PartBaseType.php:107 - part.edit.description 説明 - - Part-DB1\src\Form\Part\PartBaseType.php:120 - Part-DB1\src\Form\Part\PartBaseType.php:118 - part.edit.mininstock 最小在庫数量 - - Part-DB1\src\Form\Part\PartBaseType.php:129 - Part-DB1\src\Form\Part\PartBaseType.php:127 - part.edit.category カテゴリー - - Part-DB1\src\Form\Part\PartBaseType.php:135 - Part-DB1\src\Form\Part\PartBaseType.php:133 - part.edit.footprint フットプリント - - Part-DB1\src\Form\Part\PartBaseType.php:142 - Part-DB1\src\Form\Part\PartBaseType.php:140 - part.edit.tags タグ - - Part-DB1\src\Form\Part\PartBaseType.php:154 - Part-DB1\src\Form\Part\PartBaseType.php:152 - part.edit.manufacturer.label メーカー - - Part-DB1\src\Form\Part\PartBaseType.php:161 - Part-DB1\src\Form\Part\PartBaseType.php:159 - part.edit.manufacturer_url.label 製品ページへのリンク - - Part-DB1\src\Form\Part\PartBaseType.php:167 - Part-DB1\src\Form\Part\PartBaseType.php:165 - part.edit.mpn メーカー型番 - - Part-DB1\src\Form\Part\PartBaseType.php:173 - Part-DB1\src\Form\Part\PartBaseType.php:171 - part.edit.manufacturing_status 製造状況 - - Part-DB1\src\Form\Part\PartBaseType.php:181 - Part-DB1\src\Form\Part\PartBaseType.php:179 - part.edit.needs_review 確認が必要 - - Part-DB1\src\Form\Part\PartBaseType.php:189 - Part-DB1\src\Form\Part\PartBaseType.php:187 - part.edit.is_favorite お気に入り - - Part-DB1\src\Form\Part\PartBaseType.php:197 - Part-DB1\src\Form\Part\PartBaseType.php:195 - part.edit.mass 質量 - - Part-DB1\src\Form\Part\PartBaseType.php:203 - Part-DB1\src\Form\Part\PartBaseType.php:201 - part.edit.partUnit 単位 @@ -5654,277 +3382,162 @@ - - Part-DB1\src\Form\Part\PartBaseType.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:210 - part.edit.comment コメント - - Part-DB1\src\Form\Part\PartBaseType.php:250 - Part-DB1\src\Form\Part\PartBaseType.php:246 - part.edit.master_attachment プレビュー画像 - - Part-DB1\src\Form\Part\PartBaseType.php:295 - Part-DB1\src\Form\Part\PartBaseType.php:276 - src\Form\PartType.php:91 - part.edit.save 変更を保存 - - Part-DB1\src\Form\Part\PartBaseType.php:296 - Part-DB1\src\Form\Part\PartBaseType.php:277 - src\Form\PartType.php:92 - part.edit.reset 変更をリセット - - Part-DB1\src\Form\Part\PartBaseType.php:105 - Part-DB1\src\Form\Part\PartBaseType.php:103 - part.edit.name.placeholder 例: BC547 - - Part-DB1\src\Form\Part\PartBaseType.php:115 - Part-DB1\src\Form\Part\PartBaseType.php:113 - part.edit.description.placeholder 例: NPN 45V, 0,1A, 0,5W - - Part-DB1\src\Form\Part\PartBaseType.php:123 - Part-DB1\src\Form\Part\PartBaseType.php:121 - part.editmininstock.placeholder 例: 1 - - Part-DB1\src\Form\Part\PartLotType.php:69 - Part-DB1\src\Form\Part\PartLotType.php:69 - part_lot.edit.description 説明 - - Part-DB1\src\Form\Part\PartLotType.php:78 - Part-DB1\src\Form\Part\PartLotType.php:78 - part_lot.edit.location 保管場所 - - Part-DB1\src\Form\Part\PartLotType.php:89 - Part-DB1\src\Form\Part\PartLotType.php:89 - part_lot.edit.amount 数量 - - Part-DB1\src\Form\Part\PartLotType.php:98 - Part-DB1\src\Form\Part\PartLotType.php:97 - part_lot.edit.instock_unknown 数量不明 - - Part-DB1\src\Form\Part\PartLotType.php:109 - Part-DB1\src\Form\Part\PartLotType.php:108 - part_lot.edit.needs_refill 補充が必要 - - Part-DB1\src\Form\Part\PartLotType.php:120 - Part-DB1\src\Form\Part\PartLotType.php:119 - part_lot.edit.expiration_date 有効期限 - - Part-DB1\src\Form\Part\PartLotType.php:128 - Part-DB1\src\Form\Part\PartLotType.php:125 - part_lot.edit.comment コメント - - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - perm.group.other その他 - - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - tfa_google.enable 認証アプリを有効化 - - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - tfa_google.disable 認証アプリを無効化 - - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - google_confirmation 確認コード - - Part-DB1\src\Form\UserSettingsType.php:108 - Part-DB1\src\Form\UserSettingsType.php:108 - src\Form\UserSettingsType.php:46 - user.timezone.label タイムゾーン - - Part-DB1\src\Form\UserSettingsType.php:133 - Part-DB1\src\Form\UserSettingsType.php:132 - user.currency.label メインの通貨 - - Part-DB1\src\Form\UserSettingsType.php:140 - Part-DB1\src\Form\UserSettingsType.php:139 - src\Form\UserSettingsType.php:53 - save 変更を保存 - - Part-DB1\src\Form\UserSettingsType.php:141 - Part-DB1\src\Form\UserSettingsType.php:140 - src\Form\UserSettingsType.php:54 - reset 変更を破棄 - - Part-DB1\src\Form\UserSettingsType.php:104 - Part-DB1\src\Form\UserSettingsType.php:104 - src\Form\UserSettingsType.php:45 - user_settings.language.placeholder サーバー全体の言語 - - Part-DB1\src\Form\UserSettingsType.php:115 - Part-DB1\src\Form\UserSettingsType.php:115 - src\Form\UserSettingsType.php:48 - user_settings.timezone.placeholder サーバー全体のタイムゾーン - - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - attachment.label 添付ファイル - - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - attachment_type.label 添付ファイルの種類 - - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - measurement_unit.label 単位 @@ -5937,58 +3550,36 @@ - - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - currency.label 通貨 - - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - orderdetail.label 注文詳細 - - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - pricedetail.label 価格詳細 - - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - user.label ユーザー - - Part-DB1\src\Services\ElementTypeNameGenerator.php:95 - parameter.label パラメーター - - Part-DB1\src\Services\ElementTypeNameGenerator.php:96 - label_profile.label ラベルプロファイル @@ -5996,8 +3587,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:176 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:161 new @@ -6006,163 +3595,96 @@ - - Part-DB1\src\Services\MarkdownParser.php:73 - Part-DB1\src\Services\MarkdownParser.php:73 - markdown.loading Markdownを読み込んでいます。このメッセージが消えない場合はページを再読み込みしてください。 - - Part-DB1\src\Services\PasswordResetManager.php:98 - Part-DB1\src\Services\PasswordResetManager.php:98 - pw_reset.email.subject Part-DBアカウントのパスワードをリセット - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - tree.tools.tools ツール - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:107 - src\Services\ToolsTreeBuilder.php:74 - tree.tools.edit 編集 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:110 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - src\Services\ToolsTreeBuilder.php:81 - tree.tools.show 表示 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:111 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - tree.tools.system システム - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:123 - tree.tools.tools.label_dialog ラベルジェネレータ - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:130 - tree.tools.tools.label_scanner スキャナー - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:149 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:126 - src\Services\ToolsTreeBuilder.php:62 - tree.tools.edit.attachment_types 添付ファイルの種類 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:155 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:132 - src\Services\ToolsTreeBuilder.php:64 - tree.tools.edit.categories カテゴリー - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:167 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:144 - src\Services\ToolsTreeBuilder.php:68 - tree.tools.edit.suppliers サプライヤー - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:173 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:150 - src\Services\ToolsTreeBuilder.php:70 - tree.tools.edit.manufacturer メーカー - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:179 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:156 - tree.tools.edit.storelocation 保管場所 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:185 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:162 - tree.tools.edit.footprint フットプリント - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:191 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:168 - tree.tools.edit.currency 通貨 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:174 - tree.tools.edit.measurement_unit 単位 @@ -6175,40 +3697,24 @@ - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.edit.label_profile ラベルプロファイル - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:209 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:180 - tree.tools.edit.part 部品 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:226 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - src\Services\ToolsTreeBuilder.php:77 - tree.tools.show.all_parts 全ての部品を表示 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:232 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.show.all_attachments 添付ファイル @@ -6216,8 +3722,6 @@ - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:239 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:210 new @@ -6226,20 +3730,12 @@ - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:258 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:229 - tree.tools.system.users ユーザー - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:264 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:235 - tree.tools.system.groups グループ @@ -6247,8 +3743,6 @@ - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:271 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:242 new @@ -6257,11 +3751,6 @@ - - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - src\Services\TreeBuilder.php:124 - entity.tree.new 新規作成 @@ -6269,7 +3758,6 @@ - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 obsolete @@ -6279,8 +3767,6 @@ - Part-DB1\templates\_navbar.html.twig:27 - templates\base.html.twig:88 obsolete @@ -6290,8 +3776,6 @@ - Part-DB1\src\Form\UserSettingsType.php:119 - src\Form\UserSettingsType.php:49 obsolete @@ -6301,8 +3785,6 @@ - Part-DB1\src\Form\UserSettingsType.php:129 - src\Form\UserSettingsType.php:50 obsolete @@ -6312,7 +3794,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:100 new obsolete @@ -6323,10 +3804,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:128 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:150 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:169 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:207 new obsolete @@ -6337,10 +3814,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:130 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:152 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:171 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:209 new obsolete @@ -6351,7 +3824,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:139 new obsolete @@ -6362,7 +3834,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:160 new obsolete @@ -6373,7 +3844,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:184 new obsolete @@ -6384,7 +3854,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:198 new obsolete @@ -6395,7 +3864,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:214 new obsolete @@ -6406,7 +3874,6 @@ - templates\base.html.twig:81 obsolete obsolete @@ -6417,7 +3884,6 @@ - templates\base.html.twig:109 obsolete obsolete @@ -6428,7 +3894,6 @@ - templates\base.html.twig:112 obsolete obsolete @@ -6719,7 +4184,6 @@ - src\Form\PartType.php:63 obsolete obsolete @@ -7390,7 +4854,6 @@ Exampletown - templates\Parts\show_part_info.html.twig:194 obsolete obsolete @@ -7401,7 +4864,6 @@ Exampletown - src\Form\PartType.php:83 obsolete obsolete @@ -8813,4 +6275,4 @@ Exampletown - + \ No newline at end of file diff --git a/translations/messages.nl.xlf b/translations/messages.nl.xlf index 58cd8599..377beeaf 100644 --- a/translations/messages.nl.xlf +++ b/translations/messages.nl.xlf @@ -2,11 +2,6 @@ - - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - attachment_type.caption Bijlage bestandstypen @@ -14,7 +9,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:12 new @@ -24,7 +18,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:16 new @@ -33,45 +26,18 @@ - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - templates\AdminPages\CategoryAdmin.html.twig:4 - templates\base.html.twig:163 - templates\base.html.twig:170 - templates\base.html.twig:197 - templates\base.html.twig:225 - category.labelp Categorieën - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:19 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:11 - templates\AdminPages\CategoryAdmin.html.twig:8 - admin.options Opties - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - templates\AdminPages\CategoryAdmin.html.twig:9 - admin.advanced Geavanceerd @@ -79,7 +45,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:13 new @@ -89,7 +54,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:17 new @@ -98,30 +62,18 @@ - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - currency.caption Valuta - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - currency.iso_code.caption ISO-code - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - currency.symbol.caption Valutateken @@ -129,7 +81,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:29 new @@ -139,7 +90,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:33 new @@ -149,7 +99,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:8 new @@ -159,7 +108,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:12 new @@ -168,89 +116,36 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Zoeken - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - templates\AdminPages\EntityAdminBase.html.twig:13 - templates\base.html.twig:166 - templates\base.html.twig:193 - templates\base.html.twig:221 - expandAll Alles uitvouwen - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - templates\AdminPages\EntityAdminBase.html.twig:17 - templates\base.html.twig:167 - templates\base.html.twig:194 - templates\base.html.twig:222 - reduceAll Alles inklappen - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - part.info.timetravel_hint Dit is hoe het component er uitzag voor %timestamp%. <i>Let op: deze feature is nog experimenteel, de getoonde informatie kan onnauwkeurig zijn.</i> - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - templates\AdminPages\EntityAdminBase.html.twig:42 - standard.label Eigenschappen - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - templates\AdminPages\EntityAdminBase.html.twig:43 - infos.label Informatie @@ -258,8 +153,6 @@ - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 new @@ -268,120 +161,66 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - templates\AdminPages\EntityAdminBase.html.twig:45 - export.label Exporteren - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - templates\AdminPages\EntityAdminBase.html.twig:47 - import_export.label Importeren/Exporteren - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - mass_creation.label Bulk toevoegen - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - templates\AdminPages\EntityAdminBase.html.twig:59 - admin.common Algemeen - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - admin.attachments Bijlagen - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:90 - admin.parameters Parameters - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:179 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:167 - templates\AdminPages\EntityAdminBase.html.twig:142 - export_all.label Exporteer alle elementen - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:185 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:173 - mass_creation.help Elke regel wordt geïnterpreteerd als de naam van een element, dat aangemaakt zal worden. Je kunt geneste structuren maken d.m.v. indentatie. - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - templates\AdminPages\EntityAdminBase.html.twig:35 - edit.caption Bewerk element "%name" - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - templates\AdminPages\EntityAdminBase.html.twig:37 - new.caption Nieuw element - - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - templates\base.html.twig:172 - templates\base.html.twig:199 - templates\base.html.twig:227 - footprint.labelp Voetafdruk @@ -389,7 +228,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:13 new @@ -399,7 +237,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:17 new @@ -408,22 +245,12 @@ - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - group.edit.caption Groepen - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - user.edit.permissions Rechten @@ -431,7 +258,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:24 new @@ -441,7 +267,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:28 new @@ -450,27 +275,18 @@ - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:4 - label_profile.caption Label profiel - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:8 - label_profile.advanced Geavanceerd - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:9 - label_profile.comment Notities @@ -478,7 +294,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:55 new @@ -488,7 +303,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:59 new @@ -497,11 +311,6 @@ - - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - templates\AdminPages\ManufacturerAdmin.html.twig:4 - manufacturer.caption Fabrikanten @@ -509,7 +318,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:8 new @@ -519,7 +327,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:12 new @@ -528,10 +335,6 @@ - - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - measurement_unit.caption Meeteenheden @@ -544,15 +347,6 @@ - - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:5 - Part-DB1\templates\_sidebar.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:8 - templates\base.html.twig:171 - templates\base.html.twig:198 - templates\base.html.twig:226 - storelocation.labelp Opslag locaties @@ -560,7 +354,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:32 new @@ -570,7 +363,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:36 new @@ -580,7 +372,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:16 new @@ -590,7 +381,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:20 new @@ -599,110 +389,60 @@ - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - user.edit.caption Gebruikers - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - user.edit.configuration Instellingen - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - user.edit.password Wachtwoord - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - user.edit.tfa.caption Tweefactorauthenticatie - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - user.edit.tfa.google_active Tweefactorauthenticatie-app actief - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - tfa_backup.remaining_tokens Aantal resterende back-up codes - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - tfa_backup.generation_date Datum waarop de back-up codes gegenereerd zijn - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - user.edit.tfa.disabled Methode niet geactiveerd - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - user.edit.tfa.u2f_keys_count Actieve beveiligingssleutels - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_title Weet u zeker dat u wilt doorgaan? @@ -850,4 +590,4 @@ - + \ No newline at end of file diff --git a/translations/messages.pl.xlf b/translations/messages.pl.xlf index 7409e4df..a4eb1cda 100644 --- a/translations/messages.pl.xlf +++ b/translations/messages.pl.xlf @@ -2,11 +2,6 @@ - - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - attachment_type.caption Typy plików dla załącznikówRegPrzerwanie w przypadku nieprawidłowych danychport @@ -14,7 +9,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:12 new @@ -24,7 +18,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:16 new @@ -33,45 +26,18 @@ - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - templates\AdminPages\CategoryAdmin.html.twig:4 - templates\base.html.twig:163 - templates\base.html.twig:170 - templates\base.html.twig:197 - templates\base.html.twig:225 - category.labelp Kategorie - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:19 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:11 - templates\AdminPages\CategoryAdmin.html.twig:8 - admin.options Opcje - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - templates\AdminPages\CategoryAdmin.html.twig:9 - admin.advanced Zaawansowane @@ -79,7 +45,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:13 new @@ -89,7 +54,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:17 new @@ -98,30 +62,18 @@ - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - currency.caption Waluta - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - currency.iso_code.caption Kod ISO waluty - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - currency.symbol.caption Symbol waluty @@ -129,7 +81,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:29 new @@ -139,7 +90,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:33 new @@ -149,7 +99,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:8 new @@ -159,7 +108,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:12 new @@ -168,89 +116,36 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Szukaj - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - templates\AdminPages\EntityAdminBase.html.twig:13 - templates\base.html.twig:166 - templates\base.html.twig:193 - templates\base.html.twig:221 - expandAll Rozwiń wszystko - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - templates\AdminPages\EntityAdminBase.html.twig:17 - templates\base.html.twig:167 - templates\base.html.twig:194 - templates\base.html.twig:222 - reduceAll Zwiń wszystko - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - part.info.timetravel_hint Tak wyglądał komponent przed %timestamp%. <i>Należy pamiętać, że ta funkcja jest eksperymentalna, a wyświetlane informacje niekoniecznie są poprawne.</i>or - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - templates\AdminPages\EntityAdminBase.html.twig:42 - standard.label Właściwości - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - templates\AdminPages\EntityAdminBase.html.twig:43 - infos.label Informacje @@ -258,8 +153,6 @@ - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 new @@ -268,120 +161,66 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - templates\AdminPages\EntityAdminBase.html.twig:45 - export.label Eksport - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - templates\AdminPages\EntityAdminBase.html.twig:47 - import_export.label Importuj / Eksportuj - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - mass_creation.label Masowe tworzenie - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - templates\AdminPages\EntityAdminBase.html.twig:59 - admin.common Ogólne - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - admin.attachments Załączniki - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:90 - admin.parameters Parametry - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:179 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:167 - templates\AdminPages\EntityAdminBase.html.twig:142 - export_all.label Eksportuj wszystkie elementy - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:185 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:173 - mass_creation.help Każda linia będzie interpretowana jako nazwa elementu, który zostanie utworzony. Struktury zagnieżdżone można tworzyć poprzez wcięcia. - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - templates\AdminPages\EntityAdminBase.html.twig:35 - edit.caption Edytuj element - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - templates\AdminPages\EntityAdminBase.html.twig:37 - new.caption Nowy element - - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - templates\base.html.twig:172 - templates\base.html.twig:199 - templates\base.html.twig:227 - footprint.labelp Pola lutownicze @@ -389,7 +228,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:13 new @@ -399,7 +237,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:17 new @@ -408,22 +245,12 @@ - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - group.edit.caption Grupy - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - user.edit.permissions Uprawnienia @@ -431,7 +258,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:24 new @@ -441,7 +267,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:28 new @@ -450,27 +275,18 @@ - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:4 - label_profile.caption Profile etykiet - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:8 - label_profile.advanced Zaawansowane - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:9 - label_profile.comment Komentarz @@ -478,7 +294,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:55 new @@ -488,7 +303,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:59 new @@ -497,11 +311,6 @@ - - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - templates\AdminPages\ManufacturerAdmin.html.twig:4 - manufacturer.caption Producenci @@ -509,7 +318,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:8 new @@ -519,7 +327,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:12 new @@ -528,10 +335,6 @@ - - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - measurement_unit.caption Jednostka miary @@ -544,15 +347,6 @@ - - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:5 - Part-DB1\templates\_sidebar.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:8 - templates\base.html.twig:171 - templates\base.html.twig:198 - templates\base.html.twig:226 - storelocation.labelp Lokalizacja miejsca przechowywania @@ -560,7 +354,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:32 new @@ -570,7 +363,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:36 new @@ -580,7 +372,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:16 new @@ -590,7 +381,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:20 new @@ -599,130 +389,72 @@ - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - user.edit.caption Użytkownicy - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - user.edit.configuration Konfiguracja - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - user.edit.password Hasło - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - user.edit.tfa.caption Uwierzytelnianie dwuskładnikowe - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - user.edit.tfa.google_active Aplikacja uwierzytelniająca aktywna - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - tfa_backup.remaining_tokens Pozostałe kody zapasowe - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - tfa_backup.generation_date Data utworzenia kodów zapasowych - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - user.edit.tfa.disabled Metoda wyłączona - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - user.edit.tfa.u2f_keys_count Aktywne klucze bezpieczeństwa - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_title Czy na pewno chcesz kontynuować? - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_message Dostęp zabroniony! Zaloguj się, aby kontynuować. - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - user.edit.tfa.disable_tfa.btn Wyłącz wszystkie metody uwierzytelniania dwuskładnikowego @@ -730,7 +462,6 @@ - Part-DB1\templates\AdminPages\UserAdmin.html.twig:85 new @@ -740,7 +471,6 @@ - Part-DB1\templates\AdminPages\UserAdmin.html.twig:89 new @@ -749,129 +479,60 @@ - - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:63 - attachment.delete Usuń - - Part-DB1\templates\AdminPages\_attachments.html.twig:41 - Part-DB1\templates\Parts\edit\_attachments.html.twig:38 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:35 - Part-DB1\src\DataTables\AttachmentDataTable.php:159 - Part-DB1\templates\Parts\edit\_attachments.html.twig:38 - Part-DB1\src\DataTables\AttachmentDataTable.php:159 - attachment.external Zewnętrzny - - Part-DB1\templates\AdminPages\_attachments.html.twig:49 - Part-DB1\templates\Parts\edit\_attachments.html.twig:47 - Part-DB1\templates\AdminPages\_attachments.html.twig:47 - Part-DB1\templates\Parts\edit\_attachments.html.twig:45 - attachment.preview.alt Miniaturka załącznika - - Part-DB1\templates\AdminPages\_attachments.html.twig:52 - Part-DB1\templates\Parts\edit\_attachments.html.twig:50 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 - Part-DB1\templates\AdminPages\_attachments.html.twig:50 - Part-DB1\templates\Parts\edit\_attachments.html.twig:48 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:45 - attachment.view Widok - - Part-DB1\templates\AdminPages\_attachments.html.twig:58 - Part-DB1\templates\Parts\edit\_attachments.html.twig:56 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:43 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - Part-DB1\templates\AdminPages\_attachments.html.twig:56 - Part-DB1\templates\Parts\edit\_attachments.html.twig:54 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:38 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - attachment.file_not_found Plik nie znaleziony - - Part-DB1\templates\AdminPages\_attachments.html.twig:66 - Part-DB1\templates\Parts\edit\_attachments.html.twig:64 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:48 - Part-DB1\templates\Parts\edit\_attachments.html.twig:62 - attachment.secure Załącznik prywatny - - Part-DB1\templates\AdminPages\_attachments.html.twig:79 - Part-DB1\templates\Parts\edit\_attachments.html.twig:77 - Part-DB1\templates\AdminPages\_attachments.html.twig:77 - Part-DB1\templates\Parts\edit\_attachments.html.twig:75 - attachment.create Utwórz załącznik - - Part-DB1\templates\AdminPages\_attachments.html.twig:84 - Part-DB1\templates\Parts\edit\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - Part-DB1\templates\AdminPages\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_attachments.html.twig:80 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - part_lot.edit.delete.confirm Czy na pewno chcesz usunąć magazyn? Tej operacji nie można cofnąć. - - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - templates\AdminPages\_delete_form.html.twig:2 - entity.delete.confirm_title Czy na pewno chcesz usunąć %name%? - - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - templates\AdminPages\_delete_form.html.twig:3 - entity.delete.message Tego działania nie można cofnąć! @@ -880,11 +541,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - templates\AdminPages\_delete_form.html.twig:9 - entity.delete Usuń element @@ -892,12 +548,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:45 - Part-DB1\src\Form\Part\PartBaseType.php:286 - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:43 - Part-DB1\src\Form\Part\PartBaseType.php:267 new @@ -906,561 +556,300 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - templates\AdminPages\_delete_form.html.twig:12 - entity.delete.recursive Usuń rekursywnie (wszystkie elementy podrzędne) - - Part-DB1\templates\AdminPages\_duplicate.html.twig:3 - entity.duplicate Duplikat - - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - templates\AdminPages\_export_form.html.twig:4 - src\Form\ImportType.php:67 - export.format Typ pliku - - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - templates\AdminPages\_export_form.html.twig:16 - export.level Szczegółowość - - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - templates\AdminPages\_export_form.html.twig:19 - export.level.simple Podstawowa - - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - templates\AdminPages\_export_form.html.twig:20 - export.level.extended Rozszerzona - - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - templates\AdminPages\_export_form.html.twig:21 - export.level.full Pełna - - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - templates\AdminPages\_export_form.html.twig:31 - export.include_children Eksportuj również podelementy - - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - templates\AdminPages\_export_form.html.twig:39 - export.btn Eksport - - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - templates\AdminPages\EntityAdminBase.html.twig:94 - templates\Parts\edit_part_info.html.twig:12 - templates\Parts\show_part_info.html.twig:11 - id.label ID - - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:76 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:77 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:77 - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:59 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:60 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:53 - templates\AdminPages\EntityAdminBase.html.twig:101 - templates\Parts\show_part_info.html.twig:248 - createdAt Utworzony o - - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:73 - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:49 - templates\AdminPages\EntityAdminBase.html.twig:114 - templates\Parts\show_part_info.html.twig:263 - lastModified Ostatnio zmodyfikowany - - Part-DB1\templates\AdminPages\_info.html.twig:38 - Part-DB1\templates\AdminPages\_info.html.twig:38 - entity.info.parts_count Liczba komponentów z tym elementem - - Part-DB1\templates\AdminPages\_parameters.html.twig:6 - Part-DB1\templates\helper.twig:125 - Part-DB1\templates\Parts\edit\_specifications.html.twig:6 - specifications.property Parametr - - Part-DB1\templates\AdminPages\_parameters.html.twig:7 - Part-DB1\templates\Parts\edit\_specifications.html.twig:7 - specifications.symbol Symbol - - Part-DB1\templates\AdminPages\_parameters.html.twig:8 - Part-DB1\templates\Parts\edit\_specifications.html.twig:8 - specifications.value_min Wartość minimalna - - Part-DB1\templates\AdminPages\_parameters.html.twig:9 - Part-DB1\templates\Parts\edit\_specifications.html.twig:9 - specifications.value_typ Wartość nominalna - - Part-DB1\templates\AdminPages\_parameters.html.twig:10 - Part-DB1\templates\Parts\edit\_specifications.html.twig:10 - specifications.value_max Wartość maksymalna - - Part-DB1\templates\AdminPages\_parameters.html.twig:11 - Part-DB1\templates\Parts\edit\_specifications.html.twig:11 - specifications.unit Jednostka - - Part-DB1\templates\AdminPages\_parameters.html.twig:12 - Part-DB1\templates\Parts\edit\_specifications.html.twig:12 - specifications.text Tekst - - Part-DB1\templates\AdminPages\_parameters.html.twig:13 - Part-DB1\templates\Parts\edit\_specifications.html.twig:13 - specifications.group Grupa - - Part-DB1\templates\AdminPages\_parameters.html.twig:26 - Part-DB1\templates\Parts\edit\_specifications.html.twig:26 - specification.create Nowy parametr - - Part-DB1\templates\AdminPages\_parameters.html.twig:31 - Part-DB1\templates\Parts\edit\_specifications.html.twig:31 - parameter.delete.confirm Czy na pewno chcesz usunąć ten parametr? - - Part-DB1\templates\attachment_list.html.twig:3 - Part-DB1\templates\attachment_list.html.twig:3 - attachment.list.title Lista załączników - - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - part_list.loading.caption Ładowanie - - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - part_list.loading.message To może chwilę potrwać. Jeśli ten komunikat nie zniknie, spróbuj ponownie załadować stronę. - - Part-DB1\templates\base.html.twig:68 - Part-DB1\templates\base.html.twig:68 - templates\base.html.twig:246 - vendor.base.javascript_hint Aktywuj JavaScript, aby móc korzystać ze wszystkich funkcji! - - Part-DB1\templates\base.html.twig:73 - Part-DB1\templates\base.html.twig:73 - sidebar.big.toggle Pokaż/ukryj pasek boczny - - Part-DB1\templates\base.html.twig:95 - Part-DB1\templates\base.html.twig:95 - templates\base.html.twig:271 - loading.caption Ładowanie: - - Part-DB1\templates\base.html.twig:96 - Part-DB1\templates\base.html.twig:96 - templates\base.html.twig:272 - loading.message To może chwilę potrwać. Jeśli ten komunikat będzie się wyświetlał przez dłuższy czas, spróbuj ponownie załadować stronę. - - Part-DB1\templates\base.html.twig:101 - Part-DB1\templates\base.html.twig:101 - templates\base.html.twig:277 - loading.bar Ładowanie... - - Part-DB1\templates\base.html.twig:112 - Part-DB1\templates\base.html.twig:112 - templates\base.html.twig:288 - back_to_top Powrót na górę strony - - Part-DB1\templates\Form\permissionLayout.html.twig:35 - Part-DB1\templates\Form\permissionLayout.html.twig:35 - permission.edit.permission Uprawnienia - - Part-DB1\templates\Form\permissionLayout.html.twig:36 - Part-DB1\templates\Form\permissionLayout.html.twig:36 - permission.edit.value Wartość - - Part-DB1\templates\Form\permissionLayout.html.twig:53 - Part-DB1\templates\Form\permissionLayout.html.twig:53 - permission.legend.title Wyjaśnienie stanów - - Part-DB1\templates\Form\permissionLayout.html.twig:57 - Part-DB1\templates\Form\permissionLayout.html.twig:57 - permission.legend.disallow Nie zezwalaj - - Part-DB1\templates\Form\permissionLayout.html.twig:61 - Part-DB1\templates\Form\permissionLayout.html.twig:61 - permission.legend.allow Zezwalaj - - Part-DB1\templates\Form\permissionLayout.html.twig:65 - Part-DB1\templates\Form\permissionLayout.html.twig:65 - permission.legend.inherit Dziedziczenie z grupy (nadrzędnej) - - Part-DB1\templates\helper.twig:3 - Part-DB1\templates\helper.twig:3 - bool.true Prawda - - Part-DB1\templates\helper.twig:5 - Part-DB1\templates\helper.twig:5 - bool.false Fałsz - - Part-DB1\templates\helper.twig:92 - Part-DB1\templates\helper.twig:87 - Yes Tak - - Part-DB1\templates\helper.twig:94 - Part-DB1\templates\helper.twig:89 - No Nie - - Part-DB1\templates\helper.twig:126 - specifications.value Wartość - - Part-DB1\templates\homepage.html.twig:7 - Part-DB1\templates\homepage.html.twig:7 - templates\homepage.html.twig:7 - version.caption Wersja - - Part-DB1\templates\homepage.html.twig:22 - Part-DB1\templates\homepage.html.twig:22 - templates\homepage.html.twig:19 - homepage.license Licencja - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.caption Strona projektu - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.text Kod źródłowy, pliki do pobrania, raporty o błędach, listę rzeczy do zrobienia itp. można znaleźć na stronie projektu <a class=„link-external” target=„_blank” href=„%href%”>GitHub</a> - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.caption Pomoc - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.text Pomoc i wskazówki można znaleźć w Wiki na stronie <a href=„%href%” class=„link-external” target=„_blank”>GitHub</a>. - - Part-DB1\templates\homepage.html.twig:33 - Part-DB1\templates\homepage.html.twig:33 - templates\homepage.html.twig:30 - homepage.forum.caption Forum @@ -1468,8 +857,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\homepage.html.twig:45 - Part-DB1\templates\homepage.html.twig:45 new @@ -1478,138 +865,90 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - - Part-DB1\templates\LabelSystem\dialog.html.twig:3 - Part-DB1\templates\LabelSystem\dialog.html.twig:6 - label_generator.title Generator etykiet - - Part-DB1\templates\LabelSystem\dialog.html.twig:16 - label_generator.common Ogólne - - Part-DB1\templates\LabelSystem\dialog.html.twig:20 - label_generator.advanced Zaawansowane - - Part-DB1\templates\LabelSystem\dialog.html.twig:24 - label_generator.profiles Profile - - Part-DB1\templates\LabelSystem\dialog.html.twig:58 - label_generator.selected_profile Aktualnie wybrany profil - - Part-DB1\templates\LabelSystem\dialog.html.twig:62 - label_generator.edit_profile Edytuj profil - - Part-DB1\templates\LabelSystem\dialog.html.twig:75 - label_generator.load_profile Załaduj profil - - Part-DB1\templates\LabelSystem\dialog.html.twig:102 - label_generator.download Pobierz - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:3 - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:5 - label_generator.label_btn Wygeneruj etykietę - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:20 - label_generator.label_empty Utwórz pustą etykietę - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:3 - label_scanner.title Skaner etykiet - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.title Nie znaleziono kamery - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.text Potrzebujesz kamery internetowej oraz wyrazić zgodę na korzystanie z funkcji skanera. Poniżej możesz ręcznie wprowadzić kod kreskowy. - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:27 - label_scanner.source_select Wybierz źródło - - Part-DB1\templates\LogSystem\log_list.html.twig:3 - Part-DB1\templates\LogSystem\log_list.html.twig:3 - log.list.title Dziennik systemowy @@ -1617,8 +956,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\LogSystem\_log_table.html.twig:1 - Part-DB1\templates\LogSystem\_log_table.html.twig:1 new @@ -1628,8 +965,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\LogSystem\_log_table.html.twig:2 - Part-DB1\templates\LogSystem\_log_table.html.twig:2 new @@ -1638,194 +973,114 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.email_sent_by Ten e-mail został wysłany automatycznie przez - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.dont_reply Nie odpowiadaj na tego e-maila. - - Part-DB1\templates\mail\pw_reset.html.twig:6 - Part-DB1\templates\mail\pw_reset.html.twig:6 - email.hi %name% Cześć %name% - - Part-DB1\templates\mail\pw_reset.html.twig:7 - Part-DB1\templates\mail\pw_reset.html.twig:7 - email.pw_reset.message ktoś (miejmy nadzieję, że Ty) poprosił o zresetowanie Twojego hasła. Jeżeli to nie Ty wysłałeś tę prośbę, zignoruj tę wiadomość. - - Part-DB1\templates\mail\pw_reset.html.twig:9 - Part-DB1\templates\mail\pw_reset.html.twig:9 - email.pw_reset.button Kliknij tutaj, aby zresetować hasło - - Part-DB1\templates\mail\pw_reset.html.twig:11 - Part-DB1\templates\mail\pw_reset.html.twig:11 - email.pw_reset.fallback Jeśli to nie zadziała, zadzwoń pod numer <a href="%url%">%url%</a> i wprowadź następujące informacje - - Part-DB1\templates\mail\pw_reset.html.twig:16 - Part-DB1\templates\mail\pw_reset.html.twig:16 - email.pw_reset.username Nazwa użytkownika - - Part-DB1\templates\mail\pw_reset.html.twig:19 - Part-DB1\templates\mail\pw_reset.html.twig:19 - email.pw_reset.token Token - - Part-DB1\templates\mail\pw_reset.html.twig:24 - Part-DB1\templates\mail\pw_reset.html.twig:24 - email.pw_reset.valid_unit %date% Token resetowania jest ważny do <i>%date%</i> - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:18 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:78 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - orderdetail.delete Usuń - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - pricedetails.edit.min_qty Minimalna ilość zamówienia - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - pricedetails.edit.price Cena - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - pricedetails.edit.price_qty dla ilości - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - pricedetail.create Utwórz cenę - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - templates\Parts\edit_part_info.html.twig:4 - part.edit.title Edytuj komponent %name% - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - templates\Parts\edit_part_info.html.twig:9 - part.edit.card_title Edytuj komponent - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - part.edit.tab.common Ogólne - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - part.edit.tab.manufacturer Producent - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - part.edit.tab.advanced Zaawansowane @@ -1892,279 +1147,156 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - part.edit.tab.part_lots Zapasy - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - part.edit.tab.attachments Załączniki - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - part.edit.tab.orderdetails Informacja o zakupie - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.specifications Parametry - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:64 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.comment Notatki - - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - templates\Parts\new_part.html.twig:8 - part.new.card_title Utwórz nowy komponent - - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - part_lot.delete Usuń - - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - part_lot.create Dodaj zapas - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - orderdetail.create Dodaj dystrybutora - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - pricedetails.edit.delete.confirm Czy na pewno chcesz usunąć tę cenę? Tego nie da się cofnąć! - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:62 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:61 - orderdetails.edit.delete.confirm Czy naprawdę chcesz usunąć tego dostawcę? Nie można tego cofnąć! - - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - templates\Parts\show_part_info.html.twig:4 - templates\Parts\show_part_info.html.twig:9 - part.info.title Informacje szczegółowe dla komponentu - - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - part.part_lots.label Zapasy - - Part-DB1\templates\Parts\info\show_part_info.html.twig:56 - Part-DB1\templates\Parts\lists\_info_card.html.twig:43 - Part-DB1\templates\_navbar_search.html.twig:31 - Part-DB1\templates\_navbar_search.html.twig:26 - templates\base.html.twig:62 - templates\Parts\show_part_info.html.twig:74 - src\Form\PartType.php:86 - comment.label Notatki - - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - part.info.specifications Parametry - - Part-DB1\templates\Parts\info\show_part_info.html.twig:74 - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - templates\Parts\show_part_info.html.twig:82 - attachment.labelp Załączniki - - Part-DB1\templates\Parts\info\show_part_info.html.twig:83 - Part-DB1\templates\Parts\info\show_part_info.html.twig:71 - templates\Parts\show_part_info.html.twig:88 - vendor.partinfo.shopping_infos Informacje o zakupach - - Part-DB1\templates\Parts\info\show_part_info.html.twig:91 - Part-DB1\templates\Parts\info\show_part_info.html.twig:78 - templates\Parts\show_part_info.html.twig:94 - vendor.partinfo.history Historia - - Part-DB1\templates\Parts\info\show_part_info.html.twig:97 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - Part-DB1\templates\Parts\info\show_part_info.html.twig:84 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - templates\base.html.twig:176 - templates\base.html.twig:203 - templates\base.html.twig:217 - templates\base.html.twig:231 - templates\Parts\show_part_info.html.twig:100 - tools.label Narzędzia - - Part-DB1\templates\Parts\info\show_part_info.html.twig:103 - Part-DB1\templates\Parts\info\show_part_info.html.twig:90 - extended_info.label Informacje rozszerzone - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - attachment.name Nazwa - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - attachment.attachment_type Typ załącznika - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - attachment.file_name Nazwa pliku - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - attachment.file_size Rozmiar pliku - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:54 - attachment.preview Podgląd obrazu - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:67 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:50 - attachment.download Pobierz @@ -2172,8 +1304,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 new @@ -2182,14 +1312,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Unknown Nieznany @@ -2197,10 +1319,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 new @@ -2210,8 +1328,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 new @@ -2220,49 +1336,24 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - part.isFavorite Ulubiony - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - part.minOrderAmount Minimalna ilość zamawiana - - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:46 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:41 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - templates\base.html.twig:70 - templates\Parts\show_part_info.html.twig:24 - src\Form\PartType.php:80 - manufacturer.label Producent - - Part-DB1\templates\Parts\info\_main_infos.html.twig:24 - Part-DB1\templates\_navbar_search.html.twig:11 - templates\base.html.twig:54 - src\Form\PartType.php:62 - name.label Nazwa @@ -2270,8 +1361,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 new @@ -2280,767 +1369,432 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:19 - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:18 - templates\base.html.twig:58 - templates\Parts\show_part_info.html.twig:31 - src\Form\PartType.php:65 - description.label Opis - - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:15 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:14 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - templates\base.html.twig:56 - templates\Parts\show_part_info.html.twig:32 - src\Form\PartType.php:74 - category.label Kategoria - - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - templates\Parts\show_part_info.html.twig:42 - src\Form\PartType.php:69 - instock.label Na stanie - - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - templates\Parts\show_part_info.html.twig:44 - src\Form\PartType.php:72 - mininstock.label Minimalny stan zapasów - - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:52 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:47 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - templates\base.html.twig:73 - templates\Parts\show_part_info.html.twig:47 - footprint.label Układ padów (footprint) - - Part-DB1\templates\Parts\info\_main_infos.html.twig:56 - Part-DB1\templates\Parts\info\_main_infos.html.twig:59 - Part-DB1\templates\Parts\info\_main_infos.html.twig:57 - Part-DB1\templates\Parts\info\_main_infos.html.twig:60 - templates\Parts\show_part_info.html.twig:51 - part.avg_price.label Średnia cena - - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - part.supplier.name Nazwa - - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - part.supplier.partnr Nr zamówienia - - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - part.order.minamount Ilość minimalna - - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - part.order.price Cena - - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - part.order.single_price Cena jednostkowa - - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - Part-DB1\templates\Parts\info\_part_lots.html.twig:6 - part_lots.description Opis - - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - part_lots.storage_location Miejsce przechowywania - - Part-DB1\templates\Parts\info\_part_lots.html.twig:9 - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - part_lots.amount Ilość - - Part-DB1\templates\Parts\info\_part_lots.html.twig:24 - Part-DB1\templates\Parts\info\_part_lots.html.twig:22 - part_lots.location_unknown Miejsce przechowywania nieznane - - Part-DB1\templates\Parts\info\_part_lots.html.twig:31 - Part-DB1\templates\Parts\info\_part_lots.html.twig:29 - part_lots.instock_unknown Ilość nieznana - - Part-DB1\templates\Parts\info\_part_lots.html.twig:40 - Part-DB1\templates\Parts\info\_part_lots.html.twig:38 - part_lots.expiration_date Data ważności - - Part-DB1\templates\Parts\info\_part_lots.html.twig:48 - Part-DB1\templates\Parts\info\_part_lots.html.twig:46 - part_lots.is_expired Wygasł - - Part-DB1\templates\Parts\info\_part_lots.html.twig:55 - Part-DB1\templates\Parts\info\_part_lots.html.twig:53 - part_lots.need_refill Wymaga uzupełnienia - - Part-DB1\templates\Parts\info\_picture.html.twig:15 - Part-DB1\templates\Parts\info\_picture.html.twig:15 - part.info.prev_picture Poprzedni obraz - - Part-DB1\templates\Parts\info\_picture.html.twig:19 - Part-DB1\templates\Parts\info\_picture.html.twig:19 - part.info.next_picture Następny obraz - - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - part.mass.tooltip Masa - - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - part.needs_review.badge Wymaga recenzji - - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - part.favorite.badge Ulubiony - - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - part.obsolete.badge Nie dostępny - - Part-DB1\templates\Parts\info\_specifications.html.twig:10 - parameters.extracted_from_description Automatycznie pobrane z opisu - - Part-DB1\templates\Parts\info\_specifications.html.twig:15 - parameters.auto_extracted_from_comment Automatycznie pobierane z notatek - - Part-DB1\templates\Parts\info\_tools.html.twig:6 - Part-DB1\templates\Parts\info\_tools.html.twig:4 - templates\Parts\show_part_info.html.twig:125 - part.edit.btn Edytuj komponent - - Part-DB1\templates\Parts\info\_tools.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:14 - templates\Parts\show_part_info.html.twig:135 - part.clone.btn Sklonuj komponent - - Part-DB1\templates\Parts\info\_tools.html.twig:24 - Part-DB1\templates\Parts\lists\_action_bar.html.twig:4 - templates\Parts\show_part_info.html.twig:143 - part.create.btn Utwórz nowy komponent - - Part-DB1\templates\Parts\info\_tools.html.twig:31 - Part-DB1\templates\Parts\info\_tools.html.twig:29 - part.delete.confirm_title Na pewno chcesz usunąć ten komponent? - - Part-DB1\templates\Parts\info\_tools.html.twig:32 - Part-DB1\templates\Parts\info\_tools.html.twig:30 - part.delete.message Ta część i wszelkie powiązane z nią informacje (takie jak załączniki, informacje o cenie itp.) zostaną usunięte. Nie można tego cofnąć! - - Part-DB1\templates\Parts\info\_tools.html.twig:39 - Part-DB1\templates\Parts\info\_tools.html.twig:37 - part.delete Usuń komponent - - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - parts_list.all.title Wszystkie komponenty - - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - parts_list.category.title Komponenty z kategorią - - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - parts_list.footprint.title Komponenty z polami lutowniczymi - - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - parts_list.manufacturer.title Komponenty z producentem - - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - parts_list.search.title Wyszukiwarka komponentów - - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - parts_list.storelocation.title Komponenty z lokalizacją magazynu - - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - parts_list.supplier.title Komponenty z dostawcą - - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - parts_list.tags.title Komponenty z etykietą - - Part-DB1\templates\Parts\lists\_info_card.html.twig:22 - Part-DB1\templates\Parts\lists\_info_card.html.twig:17 - entity.info.common.tab Ogólne - - Part-DB1\templates\Parts\lists\_info_card.html.twig:26 - Part-DB1\templates\Parts\lists\_info_card.html.twig:20 - entity.info.statistics.tab Statystyki - - Part-DB1\templates\Parts\lists\_info_card.html.twig:31 - entity.info.attachments.tab Załączniki - - Part-DB1\templates\Parts\lists\_info_card.html.twig:37 - entity.info.parameters.tab Parametry - - Part-DB1\templates\Parts\lists\_info_card.html.twig:54 - Part-DB1\templates\Parts\lists\_info_card.html.twig:30 - entity.info.name Nazwa - - Part-DB1\templates\Parts\lists\_info_card.html.twig:58 - Part-DB1\templates\Parts\lists\_info_card.html.twig:96 - Part-DB1\templates\Parts\lists\_info_card.html.twig:34 - Part-DB1\templates\Parts\lists\_info_card.html.twig:67 - entity.info.parent Nadrzędny - - Part-DB1\templates\Parts\lists\_info_card.html.twig:70 - Part-DB1\templates\Parts\lists\_info_card.html.twig:46 - entity.edit.btn Edycja - - Part-DB1\templates\Parts\lists\_info_card.html.twig:92 - Part-DB1\templates\Parts\lists\_info_card.html.twig:63 - entity.info.children_count Ilość elementów podrzędnych - - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - tfa.check.title Wymagane uwierzytelnianie dwuskładnikowe - - Part-DB1\templates\security\2fa_base_form.html.twig:39 - Part-DB1\templates\security\2fa_base_form.html.twig:39 - tfa.code.trusted_pc To jest zaufany komputer (jeśli ta opcja jest włączona, na tym komputerze nie są wykonywane żadne dalsze zapytania dwuskładnikowe). - - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - login.btn Zaloguj - - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:42 - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:40 - user.logout Wyloguj - - Part-DB1\templates\security\2fa_form.html.twig:6 - Part-DB1\templates\security\2fa_form.html.twig:6 - tfa.check.code.label Kod z aplikacji Authenticator - - Part-DB1\templates\security\2fa_form.html.twig:10 - Part-DB1\templates\security\2fa_form.html.twig:10 - tfa.check.code.help Wprowadź 6-cyfrowy kod z aplikacji Authenticator lub jeden z kodów zapasowych, jeśli Authenticator nie jest dostępny. - - Part-DB1\templates\security\login.html.twig:3 - Part-DB1\templates\security\login.html.twig:3 - templates\security\login.html.twig:3 - login.title Login - - Part-DB1\templates\security\login.html.twig:7 - Part-DB1\templates\security\login.html.twig:7 - templates\security\login.html.twig:7 - login.card_title Login - - Part-DB1\templates\security\login.html.twig:31 - Part-DB1\templates\security\login.html.twig:31 - templates\security\login.html.twig:31 - login.username.label Nazwa użytkownika - - Part-DB1\templates\security\login.html.twig:34 - Part-DB1\templates\security\login.html.twig:34 - templates\security\login.html.twig:34 - login.username.placeholder Nazwa użytkownika - - Part-DB1\templates\security\login.html.twig:38 - Part-DB1\templates\security\login.html.twig:38 - templates\security\login.html.twig:38 - login.password.label Hasło - - Part-DB1\templates\security\login.html.twig:40 - Part-DB1\templates\security\login.html.twig:40 - templates\security\login.html.twig:40 - login.password.placeholder Hasło - - Part-DB1\templates\security\login.html.twig:50 - Part-DB1\templates\security\login.html.twig:50 - templates\security\login.html.twig:50 - login.rememberme Zapamiętaj mnie (nie należy używać na współdzielonych komputerach) - - Part-DB1\templates\security\login.html.twig:64 - Part-DB1\templates\security\login.html.twig:64 - pw_reset.password_forget Nie pamiętasz nazwy użytkownika/hasła? - - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - pw_reset.new_pw.header.title Ustaw nowe hasło - - Part-DB1\templates\security\pw_reset_request.html.twig:5 - Part-DB1\templates\security\pw_reset_request.html.twig:5 - pw_reset.request.header.title Poproś o nowe hasło - - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - tfa_u2f.http_warning Uzyskujesz dostęp do tej strony przy użyciu niezabezpieczonej metody HTTP, więc KLUCZ U2F najprawdopodobniej nie będzie działać (komunikat o błędzie Bad Request). Jeśli chcesz używać kluczy bezpieczeństwa, poproś administratora o skonfigurowanie bezpiecznej metody HTTPS. - - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - r_u2f_two_factor.pressbutton Podłącz klucz bezpieczeństwa i naciśnij jego przycisk! - - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - tfa_u2f.add_key.title Dodaj klucz bezpieczeństwa - - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - tfa_u2f.explanation Za pomocą klucza bezpieczeństwa kompatybilnego z U2F/FIDO (np. YubiKey lub NitroKey) można osiągnąć przyjazne dla użytkownika i bezpieczne uwierzytelnianie dwuskładnikowe. Klucze bezpieczeństwa można tutaj zarejestrować, a jeśli wymagana jest weryfikacja dwuskładnikowa, wystarczy włożyć klucz przez USB lub wpisać go na urządzeniu za pomocą NFC. - - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - tfa_u2f.add_key.backup_hint Aby mieć pewność dostępu nawet w przypadku zgubienia klucza, zaleca się zarejestrowanie drugiego klucza jako kopię zapasową i przechowywanie go w bezpiecznym miejscu! - - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - tfa_u2f.add_key.add_button Dodaj klucz - - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - tfa_u2f.add_key.back_to_settings Powrót do ustawień @@ -3048,10 +1802,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 new @@ -3061,8 +1811,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:14 - Part-DB1\templates\Statistics\statistics.html.twig:14 new @@ -3072,8 +1820,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:19 - Part-DB1\templates\Statistics\statistics.html.twig:19 new @@ -3083,8 +1829,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:24 - Part-DB1\templates\Statistics\statistics.html.twig:24 new @@ -3094,12 +1838,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 new @@ -3109,12 +1847,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 new @@ -3124,8 +1856,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:40 - Part-DB1\templates\Statistics\statistics.html.twig:40 new @@ -3135,8 +1865,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:44 - Part-DB1\templates\Statistics\statistics.html.twig:44 new @@ -3146,8 +1874,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:48 - Part-DB1\templates\Statistics\statistics.html.twig:48 new @@ -3157,8 +1883,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:65 - Part-DB1\templates\Statistics\statistics.html.twig:65 new @@ -3168,8 +1892,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:69 - Part-DB1\templates\Statistics\statistics.html.twig:69 new @@ -3179,8 +1901,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:73 - Part-DB1\templates\Statistics\statistics.html.twig:73 new @@ -3190,8 +1910,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:77 - Part-DB1\templates\Statistics\statistics.html.twig:77 new @@ -3201,8 +1919,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:81 - Part-DB1\templates\Statistics\statistics.html.twig:81 new @@ -3212,8 +1928,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:85 - Part-DB1\templates\Statistics\statistics.html.twig:85 new @@ -3223,8 +1937,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:89 - Part-DB1\templates\Statistics\statistics.html.twig:89 new @@ -3234,8 +1946,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:93 - Part-DB1\templates\Statistics\statistics.html.twig:93 new @@ -3245,8 +1955,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:110 - Part-DB1\templates\Statistics\statistics.html.twig:110 new @@ -3256,8 +1964,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:114 - Part-DB1\templates\Statistics\statistics.html.twig:114 new @@ -3267,8 +1973,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:118 - Part-DB1\templates\Statistics\statistics.html.twig:118 new @@ -3278,8 +1982,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:122 - Part-DB1\templates\Statistics\statistics.html.twig:122 new @@ -3289,8 +1991,6 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - Part-DB1\templates\Statistics\statistics.html.twig:126 - Part-DB1\templates\Statistics\statistics.html.twig:126 new @@ -3299,564 +1999,312 @@ Po usunięciu pod elementy zostaną przeniesione na górę. - - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - tfa_backup.codes.title Kody zapasowe - - Part-DB1\templates\Users\backup_codes.html.twig:12 - Part-DB1\templates\Users\backup_codes.html.twig:12 - tfa_backup.codes.explanation Wydrukuj te kody i przechowuj je w bezpiecznym miejscu! - - Part-DB1\templates\Users\backup_codes.html.twig:13 - Part-DB1\templates\Users\backup_codes.html.twig:13 - tfa_backup.codes.help Jeśli nie masz już dostępu do urządzenia z aplikacją Authenticator (zgubiony smartfon, utrata danych itp.), możesz użyć jednego z tych kodów, aby uzyskać dostęp do swojego konta i ewentualnie skonfigurować nową aplikację Authenticator. Każdy z tych kodów można użyć tylko raz, zaleca się usunięcie wykorzystanych kodów. Każdy, kto ma dostęp do tych kodów, może potencjalnie uzyskać dostęp do Twojego konta, dlatego przechowuj je w bezpiecznym miejscu. - - Part-DB1\templates\Users\backup_codes.html.twig:16 - Part-DB1\templates\Users\backup_codes.html.twig:16 - tfa_backup.username Nazwa użytkownika - - Part-DB1\templates\Users\backup_codes.html.twig:29 - Part-DB1\templates\Users\backup_codes.html.twig:29 - tfa_backup.codes.page_generated_on Strona wygenerowana w dniu %date% - - Part-DB1\templates\Users\backup_codes.html.twig:32 - Part-DB1\templates\Users\backup_codes.html.twig:32 - tfa_backup.codes.print Drukuj - - Part-DB1\templates\Users\backup_codes.html.twig:35 - Part-DB1\templates\Users\backup_codes.html.twig:35 - tfa_backup.codes.copy_clipboard Kopiuj do schowka - - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:40 - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:38 - templates\base.html.twig:99 - templates\Users\user_info.html.twig:3 - templates\Users\user_info.html.twig:6 - user.info.label Informacje o użytkowniku - - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - templates\Users\user_info.html.twig:18 - src\Form\UserSettingsType.php:32 - user.firstName.label Imię - - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - templates\Users\user_info.html.twig:24 - src\Form\UserSettingsType.php:35 - user.lastName.label Nazwisko - - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - templates\Users\user_info.html.twig:30 - src\Form\UserSettingsType.php:41 - user.email.label E-mail - - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - templates\Users\user_info.html.twig:37 - src\Form\UserSettingsType.php:38 - user.department.label Dział - - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - templates\Users\user_info.html.twig:47 - src\Form\UserSettingsType.php:30 - user.username.label Nazwa użytkownika - - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - templates\Users\user_info.html.twig:53 - group.label Grupa - - Part-DB1\templates\Users\user_info.html.twig:67 - Part-DB1\templates\Users\user_info.html.twig:67 - user.permissions Uprawnienia - - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:39 - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:37 - templates\base.html.twig:98 - templates\Users\user_settings.html.twig:3 - templates\Users\user_settings.html.twig:6 - user.settings.label Ustawienia użytkownika - - Part-DB1\templates\Users\user_settings.html.twig:18 - Part-DB1\templates\Users\user_settings.html.twig:18 - templates\Users\user_settings.html.twig:14 - user_settings.data.label Dane personalne - - Part-DB1\templates\Users\user_settings.html.twig:22 - Part-DB1\templates\Users\user_settings.html.twig:22 - templates\Users\user_settings.html.twig:18 - user_settings.configuration.label Konfiguracja - - Part-DB1\templates\Users\user_settings.html.twig:55 - Part-DB1\templates\Users\user_settings.html.twig:55 - templates\Users\user_settings.html.twig:48 - user.settings.change_pw Zmień hasło - - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - user.settings.2fa_settings Uwierzytelnianie dwuskładnikowe - - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - tfa.settings.google.tab Aplikacja Authenticator - - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - tfa.settings.bakup.tab Kody zapasowe - - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - tfa.settings.u2f.tab Klucze bezpieczeństwa (U2F) - - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - tfa.settings.trustedDevices.tab Zaufane urządzenia - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_title Czy naprawdę chcesz wyłączyć aplikację Authenticator? - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_message Jeśli wyłączysz aplikację Authenticator, wszystkie kody zapasowe zostaną usunięte, więc możesz potrzebować ich ponownego wydrukowania.<br> Również pamiętaj, że bez weryfikacji dwuetapowej Twoje konto nie jest już tak dobrze chronione przed atakami! - - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - tfa_google.disabled_message Aplikacja Authenticator wyłączona! - - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - tfa_google.step.download Pobierz aplikację uwierzytelniającą (np. <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a> oder <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp">FreeOTP Authenticator</a>) - - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - tfa_google.step.scan Zeskanuj sąsiedni kod QR za pomocą aplikacji lub wprowadź dane ręcznie. - - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - tfa_google.step.input_code Zeskanuj sąsiadujący kod QR za pomocą aplikacji lub wprowadź dane ręcznie. - - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - tfa_google.step.download_backup Wydrukuj kody zapasowe i przechowuj je w bezpiecznym miejscu. - - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - tfa_google.manual_setup Konfiguracja ręczna - - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - tfa_google.manual_setup.type Typ - - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - tfa_google.manual_setup.username Nazwa użytkownika - - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - tfa_google.manual_setup.secret Sekret - - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - tfa_google.manual_setup.digit_count Liczba cyfr - - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - tfa_google.enabled_message Włączona aplikacja Authenticator - - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - tfa_backup.disabled Kody zapasowe wyłączone. Skonfiguruj aplikację uwierzytelniającą, aby włączyć kody zapasowe. - - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - tfa_backup.explanation Możesz użyć tych kodów zapasowych, aby uzyskać dostęp do konta, nawet jeśli zgubisz urządzenie z aplikacją Authenticator. Wydrukuj kody i przechowuj je w bezpiecznym miejscu. - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_title Naprawdę zresetować kody? - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_message Spowoduje to usunięcie wszystkich poprzednich kodów i wygenerowanie zestawu nowych kodów. Nie można tego cofnąć. Pamiętaj, aby wydrukować nowe kody i przechowywać je w bezpiecznym miejscu! - - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - tfa_backup.enabled Kody zapasowe włączone - - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - tfa_backup.show_codes Pokaż kody zapasowe - - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - tfa_u2f.table_caption Zarejestrowane klucze bezpieczeństwa - - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - tfa_u2f.delete_u2f.confirm_title Naprawdę usunąć ten klucz bezpieczeństwa? - - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - tfa_u2f.delete_u2f.confirm_message Jeśli usuniesz ten klucz, logowanie za jego pomocą nie będzie już możliwe. Jeśli nie pozostaną żadne klucze zabezpieczeń, uwierzytelnianie dwuskładnikowe zostanie wyłączone. - - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - tfa_u2f.keys.name Nazwa klucza - - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - tfa_u2f.keys.added_date Data dodania - - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - tfa_u2f.key_delete Usuń klucz - - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - tfa_u2f.no_keys_registered Brak zarejestrowanych kluczy - - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - tfa_u2f.add_new_key Dodaj nowy klucz - - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - tfa_trustedDevices.explanation Podczas sprawdzania drugiego czynnika bieżący komputer może zostać oznaczony jako godny zaufania, więc nie są już wymagane żadne kontrole dwuskładnikowe na tym komputerze. @@ -3864,326 +2312,168 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - tfa_trustedDevices.invalidate.confirm_title Naprawdę usunąć wszystkie zaufane komputery? - - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - tfa_trustedDevices.invalidate.confirm_message Konieczne będzie ponowne przeprowadzenie uwierzytelniania dwuskładnikowego na wszystkich komputerach. Upewnij się, że masz pod ręką swoje urządzenie dwuskładnikowe. - - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - tfa_trustedDevices.invalidate.btn Resetuj zaufane urządzenia - - Part-DB1\templates\_navbar.html.twig:4 - Part-DB1\templates\_navbar.html.twig:4 - templates\base.html.twig:29 - sidebar.toggle Przełącz pasek boczny - - Part-DB1\templates\_navbar.html.twig:22 - navbar.scanner.link Skaner - - Part-DB1\templates\_navbar.html.twig:38 - Part-DB1\templates\_navbar.html.twig:36 - templates\base.html.twig:97 - user.loggedin.label Zalogowany jako - - Part-DB1\templates\_navbar.html.twig:44 - Part-DB1\templates\_navbar.html.twig:42 - templates\base.html.twig:103 - user.login Zaloguj - - Part-DB1\templates\_navbar.html.twig:50 - Part-DB1\templates\_navbar.html.twig:48 - ui.toggle_darkmode Tryb ciemny - - Part-DB1\templates\_navbar.html.twig:54 - Part-DB1\src\Form\UserSettingsType.php:97 - Part-DB1\templates\_navbar.html.twig:52 - Part-DB1\src\Form\UserSettingsType.php:97 - templates\base.html.twig:106 - src\Form\UserSettingsType.php:44 - user.language_select Język - - Part-DB1\templates\_navbar_search.html.twig:4 - Part-DB1\templates\_navbar_search.html.twig:4 - templates\base.html.twig:49 - search.options.label Opcje wyszukiwania - - Part-DB1\templates\_navbar_search.html.twig:23 - tags.label Tagi - - Part-DB1\templates\_navbar_search.html.twig:27 - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - templates\base.html.twig:60 - templates\Parts\show_part_info.html.twig:36 - src\Form\PartType.php:77 - storelocation.label Miejsce przechowywania - - Part-DB1\templates\_navbar_search.html.twig:36 - Part-DB1\templates\_navbar_search.html.twig:31 - templates\base.html.twig:65 - ordernumber.label.short Nr zamówienia. - - Part-DB1\templates\_navbar_search.html.twig:40 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - Part-DB1\templates\_navbar_search.html.twig:35 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - templates\base.html.twig:67 - supplier.label Dostawca - - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_navbar_search.html.twig:56 - templates\base.html.twig:77 - search.regexmatching Dopasowywanie Reg.Ex. - - Part-DB1\templates\_sidebar.html.twig:37 - Part-DB1\templates\_sidebar.html.twig:12 - Part-DB1\templates\_sidebar.html.twig:37 - Part-DB1\templates\_sidebar.html.twig:12 - templates\base.html.twig:175 - templates\base.html.twig:189 - templates\base.html.twig:202 - templates\base.html.twig:230 - project.labelp Projekty - - Part-DB1\templates\_sidebar.html.twig:2 - Part-DB1\templates\_sidebar.html.twig:2 - templates\base.html.twig:165 - templates\base.html.twig:192 - templates\base.html.twig:220 - actions Akcje - - Part-DB1\templates\_sidebar.html.twig:6 - Part-DB1\templates\_sidebar.html.twig:6 - templates\base.html.twig:169 - templates\base.html.twig:196 - templates\base.html.twig:224 - datasource Źródło danych - - Part-DB1\templates\_sidebar.html.twig:10 - Part-DB1\templates\_sidebar.html.twig:10 - templates\base.html.twig:173 - templates\base.html.twig:200 - templates\base.html.twig:228 - manufacturer.labelp Producenci - - Part-DB1\templates\_sidebar.html.twig:11 - Part-DB1\templates\_sidebar.html.twig:11 - templates\base.html.twig:174 - templates\base.html.twig:201 - templates\base.html.twig:229 - supplier.labelp Dostawcy - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:213 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:293 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:293 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:181 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:243 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:268 - attachment.download_failed Pobieranie zewnętrznego załącznika nie powiodło się. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:222 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:190 - entity.edit_flash Zmiany zostały pomyślnie zapisane. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:231 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:196 - entity.edit_flash.invalid Nie można zapisać zmienionych danych. Sprawdź wprowadzone dane! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:302 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:252 - entity.created_flash Utworzony element. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:308 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:258 - entity.created_flash.invalid Nie można utworzyć elementu. Sprawdź wprowadzone dane! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:399 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:352 - src\Controller\BaseAdminController.php:154 - attachment_type.deleted Element usunięty! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:401 - Part-DB1\src\Controller\UserController.php:109 - Part-DB1\src\Controller\UserSettingsController.php:159 - Part-DB1\src\Controller\UserSettingsController.php:193 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:354 - Part-DB1\src\Controller\UserController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:150 - Part-DB1\src\Controller\UserSettingsController.php:182 - csfr_invalid Token CSRF jest nieprawidłowy. Załaduj ponownie tę stronę lub skontaktuj się z administratorem, jeśli ten komunikat będzie się powtarzał. - - Part-DB1\src\Controller\LabelController.php:125 - label_generator.no_entities_found Nie znaleziono żadnych elementów @@ -4191,8 +2481,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Controller\LogController.php:149 - Part-DB1\src\Controller\LogController.php:154 new @@ -4202,8 +2490,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Controller\LogController.php:156 - Part-DB1\src\Controller\LogController.php:160 new @@ -4213,8 +2499,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Controller\LogController.php:176 - Part-DB1\src\Controller\LogController.php:180 new @@ -4224,8 +2508,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Controller\LogController.php:178 - Part-DB1\src\Controller\LogController.php:182 new @@ -4235,8 +2517,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Controller\LogController.php:185 - Part-DB1\src\Controller\LogController.php:189 new @@ -4246,8 +2526,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Controller\LogController.php:187 - Part-DB1\src\Controller\LogController.php:191 new @@ -4257,8 +2535,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Controller\LogController.php:194 - Part-DB1\src\Controller\LogController.php:198 new @@ -4268,8 +2544,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Controller\LogController.php:196 - Part-DB1\src\Controller\LogController.php:200 new @@ -4279,8 +2553,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Controller\LogController.php:199 - Part-DB1\src\Controller\LogController.php:203 new @@ -4289,306 +2561,168 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - - Part-DB1\src\Controller\PartController.php:182 - Part-DB1\src\Controller\PartController.php:182 - src\Controller\PartController.php:80 - part.edited_flash Zmiany zapisane! - - Part-DB1\src\Controller\PartController.php:216 - Part-DB1\src\Controller\PartController.php:219 - part.deleted Komponent został pomyślnie usunięty. - - Part-DB1\src\Controller\PartController.php:302 - Part-DB1\src\Controller\PartController.php:277 - Part-DB1\src\Controller\PartController.php:317 - src\Controller\PartController.php:113 - src\Controller\PartController.php:142 - part.created_flash Komponenty zostały utworzone pomyślnie! - - Part-DB1\src\Controller\PartController.php:308 - Part-DB1\src\Controller\PartController.php:283 - part.created_flash.invalid Błąd podczas tworzenia: Proszę sprawdzić swoje dane wejściowe! - - Part-DB1\src\Controller\ScanController.php:68 - Part-DB1\src\Controller\ScanController.php:90 - scan.qr_not_found Nie znaleziono elementu dla podanego kodu kreskowego. - - Part-DB1\src\Controller\ScanController.php:71 - scan.format_unknown Format nieznany - - Part-DB1\src\Controller\ScanController.php:86 - scan.qr_success Element znaleziono - - Part-DB1\src\Controller\SecurityController.php:114 - Part-DB1\src\Controller\SecurityController.php:109 - pw_reset.user_or_email Nazwa użytkownika / adres e-mail - - Part-DB1\src\Controller\SecurityController.php:131 - Part-DB1\src\Controller\SecurityController.php:126 - pw_reset.request.success Prośba o zresetowanie została pomyślnie wykonana! Aby uzyskać dalsze instrukcje, sprawdź swoją pocztę e-mail. - - Part-DB1\src\Controller\SecurityController.php:162 - Part-DB1\src\Controller\SecurityController.php:160 - pw_reset.username Nazwa użytkownika - - Part-DB1\src\Controller\SecurityController.php:165 - Part-DB1\src\Controller\SecurityController.php:163 - pw_reset.token Token - - Part-DB1\src\Controller\SecurityController.php:194 - Part-DB1\src\Controller\SecurityController.php:192 - pw_reset.new_pw.error Nazwa użytkownika lub token są nieprawidłowe! Sprawdź wprowadzone dane. - - Part-DB1\src\Controller\SecurityController.php:196 - Part-DB1\src\Controller\SecurityController.php:194 - pw_reset.new_pw.success Hasło zostało pomyślnie zresetowane. Możesz teraz zalogować się przy użyciu nowego hasła. - - Part-DB1\src\Controller\UserController.php:107 - Part-DB1\src\Controller\UserController.php:99 - user.edit.reset_success Wszystkie metody uwierzytelniania dwuskładnikowego zostały pomyślnie wyłączone. - - Part-DB1\src\Controller\UserSettingsController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:92 - tfa_backup.no_codes_enabled Nie włączono żadnych kodów zapasowych! - - Part-DB1\src\Controller\UserSettingsController.php:138 - Part-DB1\src\Controller\UserSettingsController.php:132 - tfa_u2f.u2f_delete.not_existing Żaden klucz bezpieczeństwa o tym identyfikatorze nie istnieje. - - Part-DB1\src\Controller\UserSettingsController.php:145 - Part-DB1\src\Controller\UserSettingsController.php:139 - tfa_u2f.u2f_delete.access_denied Nie możesz usuwać kluczy bezpieczeństwa innych użytkowników! - - Part-DB1\src\Controller\UserSettingsController.php:153 - Part-DB1\src\Controller\UserSettingsController.php:147 - tfa.u2f.u2f_delete.success Klucz bezpieczeństwa został pomyślnie usunięty. - - Part-DB1\src\Controller\UserSettingsController.php:188 - Part-DB1\src\Controller\UserSettingsController.php:180 - tfa_trustedDevice.invalidate.success Zaufane urządzenia zostały pomyślnie zresetowane. - - Part-DB1\src\Controller\UserSettingsController.php:235 - Part-DB1\src\Controller\UserSettingsController.php:226 - src\Controller\UserController.php:98 - user.settings.saved_flash Ustawienia zapisane! - - Part-DB1\src\Controller\UserSettingsController.php:297 - Part-DB1\src\Controller\UserSettingsController.php:288 - src\Controller\UserController.php:130 - user.settings.pw_changed_flash Hasło zostało zmienione! - - Part-DB1\src\Controller\UserSettingsController.php:317 - Part-DB1\src\Controller\UserSettingsController.php:306 - user.settings.2fa.google.activated Aplikacja uwierzytelniająca została pomyślnie aktywowana. - - Part-DB1\src\Controller\UserSettingsController.php:328 - Part-DB1\src\Controller\UserSettingsController.php:315 - user.settings.2fa.google.disabled Aplikacja uwierzytelniająca została pomyślnie dezaktywowana. - - Part-DB1\src\Controller\UserSettingsController.php:346 - Part-DB1\src\Controller\UserSettingsController.php:332 - user.settings.2fa.backup_codes.regenerated Pomyślnie wygenerowano nowe kody zapasowe. - - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - attachment.table.filesize Rozmiar pliku - - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:245 - Part-DB1\src\DataTables\PartsDataTable.php:252 - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:193 - Part-DB1\src\DataTables\PartsDataTable.php:200 - true prawda - - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:246 - Part-DB1\src\DataTables\PartsDataTable.php:253 - Part-DB1\src\Form\Type\SIUnitType.php:139 - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:201 - Part-DB1\src\Form\Type\SIUnitType.php:139 - false fałsz - - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:128 - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:119 - log.target_deleted usunięto @@ -4596,8 +2730,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\DataTables\Column\RevertLogColumn.php:57 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:60 new @@ -4607,8 +2739,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\DataTables\Column\RevertLogColumn.php:63 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:66 new @@ -4618,8 +2748,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\DataTables\Column\RevertLogColumn.php:83 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:86 new @@ -4628,70 +2756,42 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - - Part-DB1\src\DataTables\LogDataTable.php:173 - Part-DB1\src\DataTables\LogDataTable.php:161 - log.id ID - - Part-DB1\src\DataTables\LogDataTable.php:178 - Part-DB1\src\DataTables\LogDataTable.php:166 - log.timestamp Znacznik czasu - - Part-DB1\src\DataTables\LogDataTable.php:183 - Part-DB1\src\DataTables\LogDataTable.php:171 - log.type Zdarzenie - - Part-DB1\src\DataTables\LogDataTable.php:191 - Part-DB1\src\DataTables\LogDataTable.php:179 - log.level Poziom - - Part-DB1\src\DataTables\LogDataTable.php:200 - Part-DB1\src\DataTables\LogDataTable.php:188 - log.user Użytkownik - - Part-DB1\src\DataTables\LogDataTable.php:213 - Part-DB1\src\DataTables\LogDataTable.php:201 - log.target_type Typ docelowy - - Part-DB1\src\DataTables\LogDataTable.php:226 - Part-DB1\src\DataTables\LogDataTable.php:214 - log.target Target @@ -4699,8 +2799,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\DataTables\LogDataTable.php:231 - Part-DB1\src\DataTables\LogDataTable.php:218 new @@ -4709,100 +2807,60 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - - Part-DB1\src\DataTables\PartsDataTable.php:168 - Part-DB1\src\DataTables\PartsDataTable.php:116 - part.table.name Nazwa - - Part-DB1\src\DataTables\PartsDataTable.php:178 - Part-DB1\src\DataTables\PartsDataTable.php:126 - part.table.id ID - - Part-DB1\src\DataTables\PartsDataTable.php:182 - Part-DB1\src\DataTables\PartsDataTable.php:130 - part.table.description Opis - - Part-DB1\src\DataTables\PartsDataTable.php:185 - Part-DB1\src\DataTables\PartsDataTable.php:133 - part.table.category Kategoria - - Part-DB1\src\DataTables\PartsDataTable.php:190 - Part-DB1\src\DataTables\PartsDataTable.php:138 - part.table.footprint Pola lutownicze - - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:142 - part.table.manufacturer Producent - - Part-DB1\src\DataTables\PartsDataTable.php:197 - Part-DB1\src\DataTables\PartsDataTable.php:145 - part.table.storeLocations Miejsca przechowywania - - Part-DB1\src\DataTables\PartsDataTable.php:216 - Part-DB1\src\DataTables\PartsDataTable.php:164 - part.table.amount Ilość - - Part-DB1\src\DataTables\PartsDataTable.php:224 - Part-DB1\src\DataTables\PartsDataTable.php:172 - part.table.minamount Ilość minimalna - - Part-DB1\src\DataTables\PartsDataTable.php:232 - Part-DB1\src\DataTables\PartsDataTable.php:180 - part.table.partUnit Jednostka pomiarowa @@ -4815,864 +2873,522 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - - Part-DB1\src\DataTables\PartsDataTable.php:236 - Part-DB1\src\DataTables\PartsDataTable.php:184 - part.table.addedDate Data dodania - - Part-DB1\src\DataTables\PartsDataTable.php:240 - Part-DB1\src\DataTables\PartsDataTable.php:188 - part.table.lastModified Ostatnio zmodyfikowany - - Part-DB1\src\DataTables\PartsDataTable.php:244 - Part-DB1\src\DataTables\PartsDataTable.php:192 - part.table.needsReview Wymaga sprawdzenia - - Part-DB1\src\DataTables\PartsDataTable.php:251 - Part-DB1\src\DataTables\PartsDataTable.php:199 - part.table.favorite Ulubiony - - Part-DB1\src\DataTables\PartsDataTable.php:258 - Part-DB1\src\DataTables\PartsDataTable.php:206 - part.table.manufacturingStatus Status - - Part-DB1\src\DataTables\PartsDataTable.php:260 - Part-DB1\src\DataTables\PartsDataTable.php:262 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:208 - Part-DB1\src\DataTables\PartsDataTable.php:210 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.unknown Nieznany - - Part-DB1\src\DataTables\PartsDataTable.php:263 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:211 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.announced Ogłoszono - - Part-DB1\src\DataTables\PartsDataTable.php:264 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.active Aktywny - - Part-DB1\src\DataTables\PartsDataTable.php:265 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:213 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.nrfnd Nie zalecane dla nowych projektów - - Part-DB1\src\DataTables\PartsDataTable.php:266 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:214 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.eol End of life - - Part-DB1\src\DataTables\PartsDataTable.php:267 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:215 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.discontinued Wycofany - - Part-DB1\src\DataTables\PartsDataTable.php:271 - Part-DB1\src\DataTables\PartsDataTable.php:219 - part.table.mpn MPN - - Part-DB1\src\DataTables\PartsDataTable.php:275 - Part-DB1\src\DataTables\PartsDataTable.php:223 - part.table.mass Masa - - Part-DB1\src\DataTables\PartsDataTable.php:279 - Part-DB1\src\DataTables\PartsDataTable.php:227 - part.table.tags Tagi - - Part-DB1\src\DataTables\PartsDataTable.php:283 - Part-DB1\src\DataTables\PartsDataTable.php:231 - part.table.attachments Załączniki - - Part-DB1\src\EventSubscriber\UserSystem\LoginSuccessSubscriber.php:82 - Part-DB1\src\EventSubscriber\LoginSuccessListener.php:82 - flash.login_successful Zalogowano poprawnie - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - JSON JSON - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - XML XML - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - CSV CSV - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - YAML YAML - - Part-DB1\src\Form\AdminPages\ImportType.php:124 - Part-DB1\src\Form\AdminPages\ImportType.php:124 - import.abort_on_validation.help Gdy ta opcja jest aktywna, cały proces importu jest przerywany w przypadku wykrycia nieprawidłowych danych. Jeśli opcja ta nie zostanie wybrana, nieprawidłowe dane zostaną zignorowane, a importer spróbuje zaimportować pozostałe elementy. - - Part-DB1\src\Form\AdminPages\ImportType.php:86 - Part-DB1\src\Form\AdminPages\ImportType.php:86 - src\Form\ImportType.php:70 - import.csv_separator Separator CSV - - Part-DB1\src\Form\AdminPages\ImportType.php:93 - Part-DB1\src\Form\AdminPages\ImportType.php:93 - src\Form\ImportType.php:72 - parent.label Element nadrzędny - - Part-DB1\src\Form\AdminPages\ImportType.php:101 - Part-DB1\src\Form\AdminPages\ImportType.php:101 - src\Form\ImportType.php:75 - import.file Plik - - Part-DB1\src\Form\AdminPages\ImportType.php:111 - Part-DB1\src\Form\AdminPages\ImportType.php:111 - src\Form\ImportType.php:78 - import.preserve_children Zachowaj elementy podrzędne podczas importu - - Part-DB1\src\Form\AdminPages\ImportType.php:120 - Part-DB1\src\Form\AdminPages\ImportType.php:120 - src\Form\ImportType.php:80 - import.abort_on_validation Przerwij w przypadku nieprawidłowych danych - - Part-DB1\src\Form\AdminPages\ImportType.php:132 - Part-DB1\src\Form\AdminPages\ImportType.php:132 - src\Form\ImportType.php:85 - import.btn Importuj - - Part-DB1\src\Form\AttachmentFormType.php:113 - Part-DB1\src\Form\AttachmentFormType.php:109 - attachment.edit.secure_file.help Załącznik oznaczony jako prywatny może być dostępny tylko dla uwierzytelnionych użytkowników z odpowiednimi uprawnieniami. Jeśli ta opcja jest włączona, nie są generowane miniatury, a dostęp do pliku jest mniej wydajny. - - Part-DB1\src\Form\AttachmentFormType.php:127 - Part-DB1\src\Form\AttachmentFormType.php:123 - attachment.edit.url.help W tym miejscu można wprowadzić adres URL do pliku zewnętrznego lub słowo kluczowe w celu wyszukiwania we wbudowanych zasobach (np. footprints). - - Part-DB1\src\Form\AttachmentFormType.php:82 - Part-DB1\src\Form\AttachmentFormType.php:79 - attachment.edit.name Nazwa - - Part-DB1\src\Form\AttachmentFormType.php:85 - Part-DB1\src\Form\AttachmentFormType.php:82 - attachment.edit.attachment_type Typ załącznika - - Part-DB1\src\Form\AttachmentFormType.php:94 - Part-DB1\src\Form\AttachmentFormType.php:91 - attachment.edit.show_in_table Pokaż w tabeli - - Part-DB1\src\Form\AttachmentFormType.php:105 - Part-DB1\src\Form\AttachmentFormType.php:102 - attachment.edit.secure_file Załącznik prywatny - - Part-DB1\src\Form\AttachmentFormType.php:119 - Part-DB1\src\Form\AttachmentFormType.php:115 - attachment.edit.url Adres URL - - Part-DB1\src\Form\AttachmentFormType.php:133 - Part-DB1\src\Form\AttachmentFormType.php:129 - attachment.edit.download_url Pobierz plik zewnętrzny - - Part-DB1\src\Form\AttachmentFormType.php:146 - Part-DB1\src\Form\AttachmentFormType.php:142 - attachment.edit.file Wyślij plik - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:86 - part.label Komponent - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:87 - part_lot.label Spis komponentów - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.none Brak - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.qr QR Code (zalecane) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code128 Code 128 (zalecane) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code39 Code 39 (zalecane) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code93 Code 93 - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.datamatrix Datamatrix - - Part-DB1\src\Form\LabelOptionsType.php:122 - label_options.lines_mode.html Placeholders (symbole zastępcze) - - Part-DB1\src\Form\LabelOptionsType.php:122 - label.options.lines_mode.twig Twig - - Part-DB1\src\Form\LabelOptionsType.php:126 - label_options.lines_mode.help Jeśli wybierzesz Twig tutaj, pole treści będzie interpretowane jako szablon Twig. Zobacz <a href="https://twig.symfony.com/doc/3.x/templates.html">dokumentację Twig</a> oraz <a href="https://docs.part-db.de/usage/labels.html#twig-mode">Wiki</a>, aby uzyskać więcej informacji. - - Part-DB1\src\Form\LabelOptionsType.php:47 - label_options.page_size.label Rozmiar etykiety - - Part-DB1\src\Form\LabelOptionsType.php:66 - label_options.supported_elements.label Typ docelowy - - Part-DB1\src\Form\LabelOptionsType.php:75 - label_options.barcode_type.label Kod kreskowy - - Part-DB1\src\Form\LabelOptionsType.php:102 - label_profile.lines.label Treść - - Part-DB1\src\Form\LabelOptionsType.php:111 - label_options.additional_css.label Style dodatkowe (CSS) - - Part-DB1\src\Form\LabelOptionsType.php:120 - label_options.lines_mode.label Tryb parsera - - Part-DB1\src\Form\LabelOptionsType.php:51 - label_options.width.placeholder Szerokość - - Part-DB1\src\Form\LabelOptionsType.php:60 - label_options.height.placeholder Wysokość - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:49 - label_generator.target_id.range_hint W tym miejscu można określić wiele identyfikatorów ID (np. 1,2,3) i/lub zakres (1-3), aby wygenerować etykiety dla wielu elementów jednocześnie. - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:46 - label_generator.target_id.label ID obiektu - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:59 - label_generator.update Aktualizacja - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:36 - scan_dialog.input Wejście - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:44 - scan_dialog.submit Prześlij - - Part-DB1\src\Form\ParameterType.php:41 - parameters.name.placeholder np. DC Current Gain - - Part-DB1\src\Form\ParameterType.php:50 - parameters.symbol.placeholder np. h_{FE} - - Part-DB1\src\Form\ParameterType.php:60 - parameters.text.placeholder np. Warunki testowe - - Part-DB1\src\Form\ParameterType.php:71 - parameters.max.placeholder np. 350 - - Part-DB1\src\Form\ParameterType.php:82 - parameters.min.placeholder np. 100 - - Part-DB1\src\Form\ParameterType.php:93 - parameters.typical.placeholder np. 200 - - Part-DB1\src\Form\ParameterType.php:103 - parameters.unit.placeholder np. V - - Part-DB1\src\Form\ParameterType.php:114 - parameter.group.placeholder np. Specyfikacje techniczne - - Part-DB1\src\Form\Part\OrderdetailType.php:72 - Part-DB1\src\Form\Part\OrderdetailType.php:75 - orderdetails.edit.supplierpartnr Numer katalogowy dostawcy - - Part-DB1\src\Form\Part\OrderdetailType.php:81 - Part-DB1\src\Form\Part\OrderdetailType.php:84 - orderdetails.edit.supplier Dostawca - - Part-DB1\src\Form\Part\OrderdetailType.php:87 - Part-DB1\src\Form\Part\OrderdetailType.php:90 - orderdetails.edit.url Link do oferty - - Part-DB1\src\Form\Part\OrderdetailType.php:93 - Part-DB1\src\Form\Part\OrderdetailType.php:96 - orderdetails.edit.obsolete Już niedostępne - - Part-DB1\src\Form\Part\OrderdetailType.php:75 - Part-DB1\src\Form\Part\OrderdetailType.php:78 - orderdetails.edit.supplierpartnr.placeholder np. BC 547 - - Part-DB1\src\Form\Part\PartBaseType.php:101 - Part-DB1\src\Form\Part\PartBaseType.php:99 - part.edit.name Nazwa - - Part-DB1\src\Form\Part\PartBaseType.php:109 - Part-DB1\src\Form\Part\PartBaseType.php:107 - part.edit.description Opis - - Part-DB1\src\Form\Part\PartBaseType.php:120 - Part-DB1\src\Form\Part\PartBaseType.php:118 - part.edit.mininstock Minimalny stan magazynowy - - Part-DB1\src\Form\Part\PartBaseType.php:129 - Part-DB1\src\Form\Part\PartBaseType.php:127 - part.edit.category Kategoria - - Part-DB1\src\Form\Part\PartBaseType.php:135 - Part-DB1\src\Form\Part\PartBaseType.php:133 - part.edit.footprint Pola lutownicze - - Part-DB1\src\Form\Part\PartBaseType.php:142 - Part-DB1\src\Form\Part\PartBaseType.php:140 - part.edit.tags Tagi - - Part-DB1\src\Form\Part\PartBaseType.php:154 - Part-DB1\src\Form\Part\PartBaseType.php:152 - part.edit.manufacturer.label Producent - - Part-DB1\src\Form\Part\PartBaseType.php:161 - Part-DB1\src\Form\Part\PartBaseType.php:159 - part.edit.manufacturer_url.label Link do strony produktu - - Part-DB1\src\Form\Part\PartBaseType.php:167 - Part-DB1\src\Form\Part\PartBaseType.php:165 - part.edit.mpn Numer katalogowy producenta - - Part-DB1\src\Form\Part\PartBaseType.php:173 - Part-DB1\src\Form\Part\PartBaseType.php:171 - part.edit.manufacturing_status Status produkcji - - Part-DB1\src\Form\Part\PartBaseType.php:181 - Part-DB1\src\Form\Part\PartBaseType.php:179 - part.edit.needs_review Wymaga sprawdzenia - - Part-DB1\src\Form\Part\PartBaseType.php:189 - Part-DB1\src\Form\Part\PartBaseType.php:187 - part.edit.is_favorite Ulubiony - - Part-DB1\src\Form\Part\PartBaseType.php:197 - Part-DB1\src\Form\Part\PartBaseType.php:195 - part.edit.mass Masa - - Part-DB1\src\Form\Part\PartBaseType.php:203 - Part-DB1\src\Form\Part\PartBaseType.php:201 - part.edit.partUnit Jednostka pomiarowa @@ -5685,287 +3401,168 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - - Part-DB1\src\Form\Part\PartBaseType.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:210 - part.edit.comment Komentarz - - Part-DB1\src\Form\Part\PartBaseType.php:250 - Part-DB1\src\Form\Part\PartBaseType.php:246 - part.edit.master_attachment Miniaturka - - Part-DB1\src\Form\Part\PartBaseType.php:295 - Part-DB1\src\Form\Part\PartBaseType.php:276 - src\Form\PartType.php:91 - part.edit.save Zapisz zmiany - - Part-DB1\src\Form\Part\PartBaseType.php:296 - Part-DB1\src\Form\Part\PartBaseType.php:277 - src\Form\PartType.php:92 - part.edit.reset Zresetuj zmiany - - Part-DB1\src\Form\Part\PartBaseType.php:105 - Part-DB1\src\Form\Part\PartBaseType.php:103 - part.edit.name.placeholder np. BC547 - - Part-DB1\src\Form\Part\PartBaseType.php:115 - Part-DB1\src\Form\Part\PartBaseType.php:113 - part.edit.description.placeholder np. NPN 45V, 0,1A, 0,5W - - Part-DB1\src\Form\Part\PartBaseType.php:123 - Part-DB1\src\Form\Part\PartBaseType.php:121 - part.editmininstock.placeholder np. 1 - - Part-DB1\src\Form\Part\PartLotType.php:69 - Part-DB1\src\Form\Part\PartLotType.php:69 - part_lot.edit.description Opis - - Part-DB1\src\Form\Part\PartLotType.php:78 - Part-DB1\src\Form\Part\PartLotType.php:78 - part_lot.edit.location Miejsce przechowywania - - Part-DB1\src\Form\Part\PartLotType.php:89 - Part-DB1\src\Form\Part\PartLotType.php:89 - part_lot.edit.amount Ilość - - Part-DB1\src\Form\Part\PartLotType.php:98 - Part-DB1\src\Form\Part\PartLotType.php:97 - part_lot.edit.instock_unknown Ilość nieznana - - Part-DB1\src\Form\Part\PartLotType.php:109 - Part-DB1\src\Form\Part\PartLotType.php:108 - part_lot.edit.needs_refill Wymaga uzupełnienia - - Part-DB1\src\Form\Part\PartLotType.php:120 - Part-DB1\src\Form\Part\PartLotType.php:119 - part_lot.edit.expiration_date Data wygaśnięcia - - Part-DB1\src\Form\Part\PartLotType.php:128 - Part-DB1\src\Form\Part\PartLotType.php:125 - part_lot.edit.comment Komentarz - - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - perm.group.other Różne - - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - tfa_google.enable Włącz aplikację uwierzytelniającą - - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - tfa_google.disable Dezaktywacja aplikacji uwierzytelniającej - - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - google_confirmation Kod potwierdzenia - - Part-DB1\src\Form\UserSettingsType.php:108 - Part-DB1\src\Form\UserSettingsType.php:108 - src\Form\UserSettingsType.php:46 - user.timezone.label Strefa czasowa - - Part-DB1\src\Form\UserSettingsType.php:133 - Part-DB1\src\Form\UserSettingsType.php:132 - user.currency.label Preferowana waluta - - Part-DB1\src\Form\UserSettingsType.php:140 - Part-DB1\src\Form\UserSettingsType.php:139 - src\Form\UserSettingsType.php:53 - save Zapisz zmiany - - Part-DB1\src\Form\UserSettingsType.php:141 - Part-DB1\src\Form\UserSettingsType.php:140 - src\Form\UserSettingsType.php:54 - reset Porzuć zmiany - - Part-DB1\src\Form\UserSettingsType.php:104 - Part-DB1\src\Form\UserSettingsType.php:104 - src\Form\UserSettingsType.php:45 - user_settings.language.placeholder Język obowiązujący na serwerze - - Part-DB1\src\Form\UserSettingsType.php:115 - Part-DB1\src\Form\UserSettingsType.php:115 - src\Form\UserSettingsType.php:48 - user_settings.timezone.placeholder Strefa czasowa obejmująca cały serwer - - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - attachment.label Załącznik - - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - attachment_type.label Typ załącznika - - Part-DB1\src\Services\ElementTypeNameGenerator.php:82 - Part-DB1\src\Services\ElementTypeNameGenerator.php:82 - project.label Projekt - - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - measurement_unit.label Jednostka pomiarowa @@ -5978,58 +3575,36 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - currency.label Waluta - - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - orderdetail.label Szczegóły zamówienia - - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - pricedetail.label Szczegóły ceny - - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - user.label Użytkownik - - Part-DB1\src\Services\ElementTypeNameGenerator.php:95 - parameter.label Parametr - - Part-DB1\src\Services\ElementTypeNameGenerator.php:96 - label_profile.label Profil etykiety @@ -6037,8 +3612,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:176 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:161 new @@ -6047,174 +3620,102 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - - Part-DB1\src\Services\MarkdownParser.php:73 - Part-DB1\src\Services\MarkdownParser.php:73 - markdown.loading Ładowanie Markdown. Jeśli ta wiadomość nie zniknie, spróbuj odświeżyć stronę. - - Part-DB1\src\Services\PasswordResetManager.php:98 - Part-DB1\src\Services\PasswordResetManager.php:98 - pw_reset.email.subject Resetowanie hasła do konta Part-DB - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - tree.tools.tools Narzędzia - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:107 - src\Services\ToolsTreeBuilder.php:74 - tree.tools.edit Edycja - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:110 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - src\Services\ToolsTreeBuilder.php:81 - tree.tools.show Pokaż - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:111 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - tree.tools.system System - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:123 - tree.tools.tools.label_dialog Generator etykiet - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:130 - tree.tools.tools.label_scanner Skaner - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:149 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:126 - src\Services\ToolsTreeBuilder.php:62 - tree.tools.edit.attachment_types Typy załączników - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:155 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:132 - src\Services\ToolsTreeBuilder.php:64 - tree.tools.edit.categories Kategorie - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:161 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:138 - src\Services\ToolsTreeBuilder.php:66 - tree.tools.edit.projects Projekty - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:167 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:144 - src\Services\ToolsTreeBuilder.php:68 - tree.tools.edit.suppliers Dostawcy - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:173 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:150 - src\Services\ToolsTreeBuilder.php:70 - tree.tools.edit.manufacturer Producenci - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:179 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:156 - tree.tools.edit.storelocation Miejsca przechowywania - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:185 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:162 - tree.tools.edit.footprint Pola lutownicze - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:191 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:168 - tree.tools.edit.currency Waluty - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:174 - tree.tools.edit.measurement_unit Jednostka miary @@ -6227,40 +3728,24 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.edit.label_profile Profile etykiet - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:209 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:180 - tree.tools.edit.part Nowy komponent - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:226 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - src\Services\ToolsTreeBuilder.php:77 - tree.tools.show.all_parts Pokaż wszystkie części - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:232 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.show.all_attachments Załączniki @@ -6268,8 +3753,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:239 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:210 new @@ -6278,20 +3761,12 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:258 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:229 - tree.tools.system.users Użytkownicy - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:264 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:235 - tree.tools.system.groups Grupy @@ -6299,8 +3774,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:271 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:242 new @@ -6309,11 +3782,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - src\Services\TreeBuilder.php:124 - entity.tree.new Nowy element @@ -6321,7 +3789,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 obsolete @@ -6331,8 +3798,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\templates\_navbar.html.twig:27 - templates\base.html.twig:88 obsolete @@ -6342,8 +3807,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Form\UserSettingsType.php:119 - src\Form\UserSettingsType.php:49 obsolete @@ -6353,8 +3816,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Form\UserSettingsType.php:129 - src\Form\UserSettingsType.php:50 obsolete @@ -6364,7 +3825,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:100 new obsolete @@ -6375,10 +3835,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:128 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:150 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:169 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:207 new obsolete @@ -6389,10 +3845,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:130 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:152 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:171 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:209 new obsolete @@ -6403,7 +3855,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:139 new obsolete @@ -6414,7 +3865,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:160 new obsolete @@ -6425,7 +3875,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:184 new obsolete @@ -6436,7 +3885,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:198 new obsolete @@ -6447,7 +3895,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:214 new obsolete @@ -6458,7 +3905,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - templates\base.html.twig:81 obsolete obsolete @@ -6469,7 +3915,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - templates\base.html.twig:109 obsolete obsolete @@ -6480,7 +3925,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - templates\base.html.twig:112 obsolete obsolete @@ -6771,7 +4215,6 @@ Jeśli zrobiłeś to niepoprawnie lub komputer nie jest już godny zaufania, mo - src\Form\PartType.php:63 obsolete obsolete @@ -7444,7 +4887,6 @@ Element 3 - templates\Parts\show_part_info.html.twig:194 obsolete obsolete @@ -7455,7 +4897,6 @@ Element 3 - src\Form\PartType.php:83 obsolete obsolete @@ -12161,4 +9602,4 @@ Należy pamiętać, że nie możesz udawać nieaktywnych użytkowników. Jeśli - + \ No newline at end of file diff --git a/translations/messages.ru.xlf b/translations/messages.ru.xlf index c5100410..4fd2aa82 100644 --- a/translations/messages.ru.xlf +++ b/translations/messages.ru.xlf @@ -2,11 +2,6 @@ - - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - attachment_type.caption Типы прикрепленных файлов @@ -14,7 +9,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:12 new @@ -24,7 +18,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:16 new @@ -33,45 +26,18 @@ - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - templates\AdminPages\CategoryAdmin.html.twig:4 - templates\base.html.twig:163 - templates\base.html.twig:170 - templates\base.html.twig:197 - templates\base.html.twig:225 - category.labelp Категории - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:19 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:11 - templates\AdminPages\CategoryAdmin.html.twig:8 - admin.options Опции - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - templates\AdminPages\CategoryAdmin.html.twig:9 - admin.advanced Расширенные @@ -79,7 +45,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:13 new @@ -89,7 +54,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:17 new @@ -98,30 +62,18 @@ - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - currency.caption Валюта - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - currency.iso_code.caption Код ISO - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - currency.symbol.caption Знак валюты @@ -129,7 +81,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:29 new @@ -139,7 +90,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:33 new @@ -149,7 +99,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:8 new @@ -159,7 +108,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:12 new @@ -168,89 +116,36 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder Поиск - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - templates\AdminPages\EntityAdminBase.html.twig:13 - templates\base.html.twig:166 - templates\base.html.twig:193 - templates\base.html.twig:221 - expandAll Раскрыть всё - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - templates\AdminPages\EntityAdminBase.html.twig:17 - templates\base.html.twig:167 - templates\base.html.twig:194 - templates\base.html.twig:222 - reduceAll Свернуть всё - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - part.info.timetravel_hint Так этот компонент выглядел до %timestamp%. <i>Это экспериментальная возможность, поэтому информация может быть неверной.</i> - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - templates\AdminPages\EntityAdminBase.html.twig:42 - standard.label Свойства - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - templates\AdminPages\EntityAdminBase.html.twig:43 - infos.label Информация @@ -258,8 +153,6 @@ - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 new @@ -268,120 +161,66 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - templates\AdminPages\EntityAdminBase.html.twig:45 - export.label Экспорт - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - templates\AdminPages\EntityAdminBase.html.twig:47 - import_export.label Импорт / Экспорт - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - mass_creation.label Создать несколько - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - templates\AdminPages\EntityAdminBase.html.twig:59 - admin.common Общие - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - admin.attachments Вложения - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:90 - admin.parameters Параметры - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:179 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:167 - templates\AdminPages\EntityAdminBase.html.twig:142 - export_all.label Экспортировать всё - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:185 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:173 - mass_creation.help Каждая строка будет интерпретирована как имя создаваемого элемента - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - templates\AdminPages\EntityAdminBase.html.twig:35 - edit.caption Редактировать элемент "%name" - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - templates\AdminPages\EntityAdminBase.html.twig:37 - new.caption Новый элемент - - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - templates\base.html.twig:172 - templates\base.html.twig:199 - templates\base.html.twig:227 - footprint.labelp Посадочные места @@ -389,7 +228,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:13 new @@ -399,7 +237,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:17 new @@ -408,22 +245,12 @@ - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - group.edit.caption Группы - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - user.edit.permissions Разрешения @@ -431,7 +258,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:24 new @@ -441,7 +267,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:28 new @@ -450,27 +275,18 @@ - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:4 - label_profile.caption Профили этикеток - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:8 - label_profile.advanced Расширенные - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:9 - label_profile.comment Комментарий @@ -478,7 +294,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:55 new @@ -488,7 +303,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:59 new @@ -497,11 +311,6 @@ - - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - templates\AdminPages\ManufacturerAdmin.html.twig:4 - manufacturer.caption Производители @@ -509,7 +318,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:8 new @@ -519,7 +327,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:12 new @@ -528,10 +335,6 @@ - - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - measurement_unit.caption Единица измерения @@ -544,15 +347,6 @@ - - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:5 - Part-DB1\templates\_sidebar.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:8 - templates\base.html.twig:171 - templates\base.html.twig:198 - templates\base.html.twig:226 - storelocation.labelp Хранилища @@ -560,7 +354,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:32 new @@ -570,7 +363,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:36 new @@ -580,7 +372,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:16 new @@ -590,7 +381,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:20 new @@ -599,120 +389,66 @@ - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - user.edit.caption Пользователь - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - user.edit.configuration Конфигурация - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - user.edit.password Пароль - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - user.edit.tfa.caption Двухфакторная аутентификация - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - user.edit.tfa.google_active Приложение аутентификации активно - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - tfa_backup.remaining_tokens Количество оставшихся резервных кодов - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - tfa_backup.generation_date Дата создания резервных кодов - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - user.edit.tfa.disabled Способ выключен - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - user.edit.tfa.u2f_keys_count Активные ключи безопасности - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_title Вы действительно хотите продолжить? - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_message Это выключит <b>все активные двухфакторной способы аутентификации пользователя</b>и удалит <b>резервные коды</b>! @@ -722,10 +458,6 @@ - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - user.edit.tfa.disable_tfa.btn Запретить все способы двухфакторной аутентификации @@ -733,7 +465,6 @@ - Part-DB1\templates\AdminPages\UserAdmin.html.twig:85 new @@ -743,7 +474,6 @@ - Part-DB1\templates\AdminPages\UserAdmin.html.twig:89 new @@ -752,129 +482,60 @@ - - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:63 - attachment.delete Удалить - - Part-DB1\templates\AdminPages\_attachments.html.twig:41 - Part-DB1\templates\Parts\edit\_attachments.html.twig:38 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:35 - Part-DB1\src\DataTables\AttachmentDataTable.php:159 - Part-DB1\templates\Parts\edit\_attachments.html.twig:38 - Part-DB1\src\DataTables\AttachmentDataTable.php:159 - attachment.external Внешний - - Part-DB1\templates\AdminPages\_attachments.html.twig:49 - Part-DB1\templates\Parts\edit\_attachments.html.twig:47 - Part-DB1\templates\AdminPages\_attachments.html.twig:47 - Part-DB1\templates\Parts\edit\_attachments.html.twig:45 - attachment.preview.alt Значок вложения - - Part-DB1\templates\AdminPages\_attachments.html.twig:52 - Part-DB1\templates\Parts\edit\_attachments.html.twig:50 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 - Part-DB1\templates\AdminPages\_attachments.html.twig:50 - Part-DB1\templates\Parts\edit\_attachments.html.twig:48 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:45 - attachment.view Посмотреть - - Part-DB1\templates\AdminPages\_attachments.html.twig:58 - Part-DB1\templates\Parts\edit\_attachments.html.twig:56 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:43 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - Part-DB1\templates\AdminPages\_attachments.html.twig:56 - Part-DB1\templates\Parts\edit\_attachments.html.twig:54 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:38 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - attachment.file_not_found Файл не найден - - Part-DB1\templates\AdminPages\_attachments.html.twig:66 - Part-DB1\templates\Parts\edit\_attachments.html.twig:64 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:48 - Part-DB1\templates\Parts\edit\_attachments.html.twig:62 - attachment.secure Личное - - Part-DB1\templates\AdminPages\_attachments.html.twig:79 - Part-DB1\templates\Parts\edit\_attachments.html.twig:77 - Part-DB1\templates\AdminPages\_attachments.html.twig:77 - Part-DB1\templates\Parts\edit\_attachments.html.twig:75 - attachment.create Добавить вложение - - Part-DB1\templates\AdminPages\_attachments.html.twig:84 - Part-DB1\templates\Parts\edit\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - Part-DB1\templates\AdminPages\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_attachments.html.twig:80 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - part_lot.edit.delete.confirm Вы уверены, что хотите удалить этот склад? Это не может быть отменено! - - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - templates\AdminPages\_delete_form.html.twig:2 - entity.delete.confirm_title Вы действительно хотите удалить %name%? - - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - templates\AdminPages\_delete_form.html.twig:3 - entity.delete.message Это не может быть отменено! @@ -883,11 +544,6 @@ - - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - templates\AdminPages\_delete_form.html.twig:9 - entity.delete Удалить элемент @@ -895,12 +551,6 @@ - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:45 - Part-DB1\src\Form\Part\PartBaseType.php:286 - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:43 - Part-DB1\src\Form\Part\PartBaseType.php:267 new @@ -909,561 +559,300 @@ - - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - templates\AdminPages\_delete_form.html.twig:12 - entity.delete.recursive Удалить рекурсивно (все подэлементы) - - Part-DB1\templates\AdminPages\_duplicate.html.twig:3 - entity.duplicate Повторный элемент - - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - templates\AdminPages\_export_form.html.twig:4 - src\Form\ImportType.php:67 - export.format Формат файла - - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - templates\AdminPages\_export_form.html.twig:16 - export.level Уровень детализации - - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - templates\AdminPages\_export_form.html.twig:19 - export.level.simple Простой - - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - templates\AdminPages\_export_form.html.twig:20 - export.level.extended Расширенный - - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - templates\AdminPages\_export_form.html.twig:21 - export.level.full Полный - - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - templates\AdminPages\_export_form.html.twig:31 - export.include_children Включить подэлементы в экспорт - - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - templates\AdminPages\_export_form.html.twig:39 - export.btn Экспорт - - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - templates\AdminPages\EntityAdminBase.html.twig:94 - templates\Parts\edit_part_info.html.twig:12 - templates\Parts\show_part_info.html.twig:11 - id.label ID - - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:76 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:77 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:77 - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:59 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:60 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:53 - templates\AdminPages\EntityAdminBase.html.twig:101 - templates\Parts\show_part_info.html.twig:248 - createdAt Создан - - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:73 - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:49 - templates\AdminPages\EntityAdminBase.html.twig:114 - templates\Parts\show_part_info.html.twig:263 - lastModified Последнее изменение - - Part-DB1\templates\AdminPages\_info.html.twig:38 - Part-DB1\templates\AdminPages\_info.html.twig:38 - entity.info.parts_count Количество компонентов в этом элементе - - Part-DB1\templates\AdminPages\_parameters.html.twig:6 - Part-DB1\templates\helper.twig:125 - Part-DB1\templates\Parts\edit\_specifications.html.twig:6 - specifications.property Параметр - - Part-DB1\templates\AdminPages\_parameters.html.twig:7 - Part-DB1\templates\Parts\edit\_specifications.html.twig:7 - specifications.symbol Символ - - Part-DB1\templates\AdminPages\_parameters.html.twig:8 - Part-DB1\templates\Parts\edit\_specifications.html.twig:8 - specifications.value_min Мин. - - Part-DB1\templates\AdminPages\_parameters.html.twig:9 - Part-DB1\templates\Parts\edit\_specifications.html.twig:9 - specifications.value_typ Тип. - - Part-DB1\templates\AdminPages\_parameters.html.twig:10 - Part-DB1\templates\Parts\edit\_specifications.html.twig:10 - specifications.value_max Макс. - - Part-DB1\templates\AdminPages\_parameters.html.twig:11 - Part-DB1\templates\Parts\edit\_specifications.html.twig:11 - specifications.unit Единица - - Part-DB1\templates\AdminPages\_parameters.html.twig:12 - Part-DB1\templates\Parts\edit\_specifications.html.twig:12 - specifications.text Текст - - Part-DB1\templates\AdminPages\_parameters.html.twig:13 - Part-DB1\templates\Parts\edit\_specifications.html.twig:13 - specifications.group Группа - - Part-DB1\templates\AdminPages\_parameters.html.twig:26 - Part-DB1\templates\Parts\edit\_specifications.html.twig:26 - specification.create Новый Параметр - - Part-DB1\templates\AdminPages\_parameters.html.twig:31 - Part-DB1\templates\Parts\edit\_specifications.html.twig:31 - parameter.delete.confirm Вы точно уверены что хотите удалить этот параметр ? - - Part-DB1\templates\attachment_list.html.twig:3 - Part-DB1\templates\attachment_list.html.twig:3 - attachment.list.title Список вложений - - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - part_list.loading.caption Загрузка - - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - part_list.loading.message Это может занять время. Если это сообщение не пропадает, попробуйте перегрузить страницу. - - Part-DB1\templates\base.html.twig:68 - Part-DB1\templates\base.html.twig:68 - templates\base.html.twig:246 - vendor.base.javascript_hint Включите Javascript чтобы использовать весь функционал! - - Part-DB1\templates\base.html.twig:73 - Part-DB1\templates\base.html.twig:73 - sidebar.big.toggle Показать/Скрыть боковую панель - - Part-DB1\templates\base.html.twig:95 - Part-DB1\templates\base.html.twig:95 - templates\base.html.twig:271 - loading.caption Загрузка: - - Part-DB1\templates\base.html.twig:96 - Part-DB1\templates\base.html.twig:96 - templates\base.html.twig:272 - loading.message Это может занять время. Если это сообщение показывается слишком долго, попробуйте перегрузить страницу. - - Part-DB1\templates\base.html.twig:101 - Part-DB1\templates\base.html.twig:101 - templates\base.html.twig:277 - loading.bar Загрузка... - - Part-DB1\templates\base.html.twig:112 - Part-DB1\templates\base.html.twig:112 - templates\base.html.twig:288 - back_to_top Назад на верх страницы - - Part-DB1\templates\Form\permissionLayout.html.twig:35 - Part-DB1\templates\Form\permissionLayout.html.twig:35 - permission.edit.permission Разрешения - - Part-DB1\templates\Form\permissionLayout.html.twig:36 - Part-DB1\templates\Form\permissionLayout.html.twig:36 - permission.edit.value Значение - - Part-DB1\templates\Form\permissionLayout.html.twig:53 - Part-DB1\templates\Form\permissionLayout.html.twig:53 - permission.legend.title Объяснение состояний - - Part-DB1\templates\Form\permissionLayout.html.twig:57 - Part-DB1\templates\Form\permissionLayout.html.twig:57 - permission.legend.disallow Запрещено - - Part-DB1\templates\Form\permissionLayout.html.twig:61 - Part-DB1\templates\Form\permissionLayout.html.twig:61 - permission.legend.allow Разрешено - - Part-DB1\templates\Form\permissionLayout.html.twig:65 - Part-DB1\templates\Form\permissionLayout.html.twig:65 - permission.legend.inherit Наследовать от родительской группы - - Part-DB1\templates\helper.twig:3 - Part-DB1\templates\helper.twig:3 - bool.true Да - - Part-DB1\templates\helper.twig:5 - Part-DB1\templates\helper.twig:5 - bool.false Нет - - Part-DB1\templates\helper.twig:92 - Part-DB1\templates\helper.twig:87 - Yes Да - - Part-DB1\templates\helper.twig:94 - Part-DB1\templates\helper.twig:89 - No Нет - - Part-DB1\templates\helper.twig:126 - specifications.value Значение - - Part-DB1\templates\homepage.html.twig:7 - Part-DB1\templates\homepage.html.twig:7 - templates\homepage.html.twig:7 - version.caption Версия - - Part-DB1\templates\homepage.html.twig:22 - Part-DB1\templates\homepage.html.twig:22 - templates\homepage.html.twig:19 - homepage.license Информация о лицензии - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.caption Страница проекта - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.text Загрузки, отчеты об ошибках, список пожеланий и т.д. находятся на <a href="%href%" class="link-external" target="_blank">странице проекта в GitHub</a> - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.caption Помощь - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.text Помощь и подсказки находятся в документах Wiki <a href="%href%" class="link-external" target="_blank">на странице в GitHub</a> - - Part-DB1\templates\homepage.html.twig:33 - Part-DB1\templates\homepage.html.twig:33 - templates\homepage.html.twig:30 - homepage.forum.caption Форум @@ -1471,8 +860,6 @@ - Part-DB1\templates\homepage.html.twig:45 - Part-DB1\templates\homepage.html.twig:45 new @@ -1481,138 +868,90 @@ - - Part-DB1\templates\LabelSystem\dialog.html.twig:3 - Part-DB1\templates\LabelSystem\dialog.html.twig:6 - label_generator.title Генератор этикеток - - Part-DB1\templates\LabelSystem\dialog.html.twig:16 - label_generator.common Общее - - Part-DB1\templates\LabelSystem\dialog.html.twig:20 - label_generator.advanced Расширенные - - Part-DB1\templates\LabelSystem\dialog.html.twig:24 - label_generator.profiles Профили - - Part-DB1\templates\LabelSystem\dialog.html.twig:58 - label_generator.selected_profile Выбранный профиль - - Part-DB1\templates\LabelSystem\dialog.html.twig:62 - label_generator.edit_profile Изменить профиль - - Part-DB1\templates\LabelSystem\dialog.html.twig:75 - label_generator.load_profile Загрузить профиль - - Part-DB1\templates\LabelSystem\dialog.html.twig:102 - label_generator.download Скачать - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:3 - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:5 - label_generator.label_btn Генерировать этикетку - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:20 - label_generator.label_empty Новая пустая этикетка - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:3 - label_scanner.title Сканер этикеток - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.title Веб-камера не найдена - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.text Чтобы использовать функцию сканирования вам понадобится веб-камера и разрешение для ее использования. Ниже, вы можете ввести штрихкод вручную. - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:27 - label_scanner.source_select Выбор источника - - Part-DB1\templates\LogSystem\log_list.html.twig:3 - Part-DB1\templates\LogSystem\log_list.html.twig:3 - log.list.title Системный лог @@ -1620,8 +959,6 @@ - Part-DB1\templates\LogSystem\_log_table.html.twig:1 - Part-DB1\templates\LogSystem\_log_table.html.twig:1 new @@ -1631,8 +968,6 @@ - Part-DB1\templates\LogSystem\_log_table.html.twig:2 - Part-DB1\templates\LogSystem\_log_table.html.twig:2 new @@ -1641,194 +976,114 @@ - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.email_sent_by Это письмо послано автоматически от - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.dont_reply Не отвечайте на это письмо. - - Part-DB1\templates\mail\pw_reset.html.twig:6 - Part-DB1\templates\mail\pw_reset.html.twig:6 - email.hi %name% Привет %name% - - Part-DB1\templates\mail\pw_reset.html.twig:7 - Part-DB1\templates\mail\pw_reset.html.twig:7 - email.pw_reset.message кто-то (надеемся что Вы) запросил сброс пароля. Если это сделали не Вы - игнорируйте это письмо. - - Part-DB1\templates\mail\pw_reset.html.twig:9 - Part-DB1\templates\mail\pw_reset.html.twig:9 - email.pw_reset.button Нажмите здесь для сброса пароля - - Part-DB1\templates\mail\pw_reset.html.twig:11 - Part-DB1\templates\mail\pw_reset.html.twig:11 - email.pw_reset.fallback Если это не помогло, откройте ссылку <a href="%url%">%url%</a> и введите следующую информацию - - Part-DB1\templates\mail\pw_reset.html.twig:16 - Part-DB1\templates\mail\pw_reset.html.twig:16 - email.pw_reset.username Имя пользователя - - Part-DB1\templates\mail\pw_reset.html.twig:19 - Part-DB1\templates\mail\pw_reset.html.twig:19 - email.pw_reset.token Жетон - - Part-DB1\templates\mail\pw_reset.html.twig:24 - Part-DB1\templates\mail\pw_reset.html.twig:24 - email.pw_reset.valid_unit %date% Жетон на сброс будет действителен до <i>%date%</i> - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:18 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:78 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - orderdetail.delete Удалить - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - pricedetails.edit.min_qty Минимальное количество для скидки - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - pricedetails.edit.price Цена - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - pricedetails.edit.price_qty для количества - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - pricedetail.create Добавить цену - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - templates\Parts\edit_part_info.html.twig:4 - part.edit.title Редактировать %name% - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - templates\Parts\edit_part_info.html.twig:9 - part.edit.card_title Редактировать информацию о компоненте - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - part.edit.tab.common Общие - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - part.edit.tab.manufacturer Производитель - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - part.edit.tab.advanced Расширенные @@ -1895,279 +1150,156 @@ - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - part.edit.tab.part_lots Склады - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - part.edit.tab.attachments Вложения - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - part.edit.tab.orderdetails Информация для заказа - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.specifications Параметры - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:64 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.comment Комментарий - - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - templates\Parts\new_part.html.twig:8 - part.new.card_title Добавить новый компонент - - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - part_lot.delete Удалить - - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - part_lot.create Добавить склад - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - orderdetail.create Добавить дистрибьютора - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - pricedetails.edit.delete.confirm Вы действительно хотите удалить эту цену? Это не может быть отменено. - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:62 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:61 - orderdetails.edit.delete.confirm Вы действительно хотите удалить эту информацию о дистрибьюторе? Это не может быть отменено! - - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - templates\Parts\show_part_info.html.twig:4 - templates\Parts\show_part_info.html.twig:9 - part.info.title Детальная информация о компоненте - - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - part.part_lots.label Склады - - Part-DB1\templates\Parts\info\show_part_info.html.twig:56 - Part-DB1\templates\Parts\lists\_info_card.html.twig:43 - Part-DB1\templates\_navbar_search.html.twig:31 - Part-DB1\templates\_navbar_search.html.twig:26 - templates\base.html.twig:62 - templates\Parts\show_part_info.html.twig:74 - src\Form\PartType.php:86 - comment.label Комментарий - - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - part.info.specifications Параметры - - Part-DB1\templates\Parts\info\show_part_info.html.twig:74 - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - templates\Parts\show_part_info.html.twig:82 - attachment.labelp Вложения - - Part-DB1\templates\Parts\info\show_part_info.html.twig:83 - Part-DB1\templates\Parts\info\show_part_info.html.twig:71 - templates\Parts\show_part_info.html.twig:88 - vendor.partinfo.shopping_infos Информация о покупках - - Part-DB1\templates\Parts\info\show_part_info.html.twig:91 - Part-DB1\templates\Parts\info\show_part_info.html.twig:78 - templates\Parts\show_part_info.html.twig:94 - vendor.partinfo.history История - - Part-DB1\templates\Parts\info\show_part_info.html.twig:97 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - Part-DB1\templates\Parts\info\show_part_info.html.twig:84 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - templates\base.html.twig:176 - templates\base.html.twig:203 - templates\base.html.twig:217 - templates\base.html.twig:231 - templates\Parts\show_part_info.html.twig:100 - tools.label Инструменты - - Part-DB1\templates\Parts\info\show_part_info.html.twig:103 - Part-DB1\templates\Parts\info\show_part_info.html.twig:90 - extended_info.label Расширенная информ. - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - attachment.name Имя - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - attachment.attachment_type Тип вложения - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - attachment.file_name Имя файла - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - attachment.file_size Размер файла - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:54 - attachment.preview Предпросмотр - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:67 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:50 - attachment.download Скачать @@ -2175,8 +1307,6 @@ - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 new @@ -2185,14 +1315,6 @@ - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Unknown Неизвестный тип @@ -2200,10 +1322,6 @@ - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 new @@ -2213,8 +1331,6 @@ - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 new @@ -2223,49 +1339,24 @@ - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - part.isFavorite Избранное - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - part.minOrderAmount Минимальное количество для заказа - - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:46 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:41 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - templates\base.html.twig:70 - templates\Parts\show_part_info.html.twig:24 - src\Form\PartType.php:80 - manufacturer.label Производитель - - Part-DB1\templates\Parts\info\_main_infos.html.twig:24 - Part-DB1\templates\_navbar_search.html.twig:11 - templates\base.html.twig:54 - src\Form\PartType.php:62 - name.label Имя @@ -2273,8 +1364,6 @@ - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 new @@ -2283,346 +1372,192 @@ - - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:19 - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:18 - templates\base.html.twig:58 - templates\Parts\show_part_info.html.twig:31 - src\Form\PartType.php:65 - description.label Описание - - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:15 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:14 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - templates\base.html.twig:56 - templates\Parts\show_part_info.html.twig:32 - src\Form\PartType.php:74 - category.label Категория - - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - templates\Parts\show_part_info.html.twig:42 - src\Form\PartType.php:69 - instock.label В наличии - - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - templates\Parts\show_part_info.html.twig:44 - src\Form\PartType.php:72 - mininstock.label Минимально в наличии - - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:52 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:47 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - templates\base.html.twig:73 - templates\Parts\show_part_info.html.twig:47 - footprint.label Посадочное место - - Part-DB1\templates\Parts\info\_main_infos.html.twig:56 - Part-DB1\templates\Parts\info\_main_infos.html.twig:59 - Part-DB1\templates\Parts\info\_main_infos.html.twig:57 - Part-DB1\templates\Parts\info\_main_infos.html.twig:60 - templates\Parts\show_part_info.html.twig:51 - part.avg_price.label Средняя цена - - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - part.supplier.name Название - - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - part.supplier.partnr Номер.комп. - - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - part.order.minamount Миним. количество - - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - part.order.price Цена - - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - part.order.single_price Цена за единицу - - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - Part-DB1\templates\Parts\info\_part_lots.html.twig:6 - part_lots.description Описание - - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - part_lots.storage_location Место хранения - - Part-DB1\templates\Parts\info\_part_lots.html.twig:9 - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - part_lots.amount Количество - - Part-DB1\templates\Parts\info\_part_lots.html.twig:24 - Part-DB1\templates\Parts\info\_part_lots.html.twig:22 - part_lots.location_unknown Место хранения неизвестно - - Part-DB1\templates\Parts\info\_part_lots.html.twig:31 - Part-DB1\templates\Parts\info\_part_lots.html.twig:29 - part_lots.instock_unknown Наличие неизвестно - - Part-DB1\templates\Parts\info\_part_lots.html.twig:40 - Part-DB1\templates\Parts\info\_part_lots.html.twig:38 - part_lots.expiration_date Дата истечения - - Part-DB1\templates\Parts\info\_part_lots.html.twig:48 - Part-DB1\templates\Parts\info\_part_lots.html.twig:46 - part_lots.is_expired Истекло - - Part-DB1\templates\Parts\info\_part_lots.html.twig:55 - Part-DB1\templates\Parts\info\_part_lots.html.twig:53 - part_lots.need_refill Нужно пополнить - - Part-DB1\templates\Parts\info\_picture.html.twig:15 - Part-DB1\templates\Parts\info\_picture.html.twig:15 - part.info.prev_picture Предыдущая картинка - - Part-DB1\templates\Parts\info\_picture.html.twig:19 - Part-DB1\templates\Parts\info\_picture.html.twig:19 - part.info.next_picture Следующая картинка - - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - part.mass.tooltip Вес - - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - part.needs_review.badge Нужно рассмотреть - - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - part.favorite.badge Избранное - - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - part.obsolete.badge Больше не доступно - - Part-DB1\templates\Parts\info\_specifications.html.twig:10 - parameters.extracted_from_description Автоматически получено из описания - - Part-DB1\templates\Parts\info\_specifications.html.twig:15 - parameters.auto_extracted_from_comment Автоматически получено из комментария - - Part-DB1\templates\Parts\info\_tools.html.twig:6 - Part-DB1\templates\Parts\info\_tools.html.twig:4 - templates\Parts\show_part_info.html.twig:125 - part.edit.btn Редактировать компонент - - Part-DB1\templates\Parts\info\_tools.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:14 - templates\Parts\show_part_info.html.twig:135 - part.clone.btn Клонировать компонент - - Part-DB1\templates\Parts\info\_tools.html.twig:24 - Part-DB1\templates\Parts\lists\_action_bar.html.twig:4 - templates\Parts\show_part_info.html.twig:143 - part.create.btn Создать новый компонент - - Part-DB1\templates\Parts\info\_tools.html.twig:31 - Part-DB1\templates\Parts\info\_tools.html.twig:29 - part.delete.confirm_title Вы действительно хотите удалить этот компонент? - - Part-DB1\templates\Parts\info\_tools.html.twig:32 - Part-DB1\templates\Parts\info\_tools.html.twig:30 - part.delete.message Этот компонент и любые связанные с ним данные (вложения, цены и т.п.) будут удалены. @@ -2630,421 +1565,240 @@ - - Part-DB1\templates\Parts\info\_tools.html.twig:39 - Part-DB1\templates\Parts\info\_tools.html.twig:37 - part.delete Удалить компонент - - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - parts_list.all.title Все компоненты - - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - parts_list.category.title Компоненты с категорией - - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - parts_list.footprint.title Компоненты с посадочным местом - - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - parts_list.manufacturer.title Компоненты производителя - - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - parts_list.search.title Поиск компонентов - - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - parts_list.storelocation.title Компоненты хранилища - - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - parts_list.supplier.title Компоненты поставщика - - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - parts_list.tags.title Компоненты с меткой - - Part-DB1\templates\Parts\lists\_info_card.html.twig:22 - Part-DB1\templates\Parts\lists\_info_card.html.twig:17 - entity.info.common.tab Общие - - Part-DB1\templates\Parts\lists\_info_card.html.twig:26 - Part-DB1\templates\Parts\lists\_info_card.html.twig:20 - entity.info.statistics.tab Статистика - - Part-DB1\templates\Parts\lists\_info_card.html.twig:31 - entity.info.attachments.tab Вложения - - Part-DB1\templates\Parts\lists\_info_card.html.twig:37 - entity.info.parameters.tab Параметры - - Part-DB1\templates\Parts\lists\_info_card.html.twig:54 - Part-DB1\templates\Parts\lists\_info_card.html.twig:30 - entity.info.name Имя - - Part-DB1\templates\Parts\lists\_info_card.html.twig:58 - Part-DB1\templates\Parts\lists\_info_card.html.twig:96 - Part-DB1\templates\Parts\lists\_info_card.html.twig:34 - Part-DB1\templates\Parts\lists\_info_card.html.twig:67 - entity.info.parent Родитель - - Part-DB1\templates\Parts\lists\_info_card.html.twig:70 - Part-DB1\templates\Parts\lists\_info_card.html.twig:46 - entity.edit.btn Редактировать - - Part-DB1\templates\Parts\lists\_info_card.html.twig:92 - Part-DB1\templates\Parts\lists\_info_card.html.twig:63 - entity.info.children_count Количество дочерних элементов - - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - tfa.check.title Нужна двухфакторная аутентификация - - Part-DB1\templates\security\2fa_base_form.html.twig:39 - Part-DB1\templates\security\2fa_base_form.html.twig:39 - tfa.code.trusted_pc Это доверенный компьютер (если включено то двухфакторная аутентификация на этом компьютере больше не будет запрашиваться) - - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - login.btn Вход - - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:42 - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:40 - user.logout Выход - - Part-DB1\templates\security\2fa_form.html.twig:6 - Part-DB1\templates\security\2fa_form.html.twig:6 - tfa.check.code.label код приложения Аутентификатор - - Part-DB1\templates\security\2fa_form.html.twig:10 - Part-DB1\templates\security\2fa_form.html.twig:10 - tfa.check.code.help Введите 6-значный код из вашего приложения Аутентификатор или один из резервных кодов если приложение не доступно. - - Part-DB1\templates\security\login.html.twig:3 - Part-DB1\templates\security\login.html.twig:3 - templates\security\login.html.twig:3 - login.title Вход - - Part-DB1\templates\security\login.html.twig:7 - Part-DB1\templates\security\login.html.twig:7 - templates\security\login.html.twig:7 - login.card_title Вход - - Part-DB1\templates\security\login.html.twig:31 - Part-DB1\templates\security\login.html.twig:31 - templates\security\login.html.twig:31 - login.username.label Имя пользователя - - Part-DB1\templates\security\login.html.twig:34 - Part-DB1\templates\security\login.html.twig:34 - templates\security\login.html.twig:34 - login.username.placeholder Имя пользователя - - Part-DB1\templates\security\login.html.twig:38 - Part-DB1\templates\security\login.html.twig:38 - templates\security\login.html.twig:38 - login.password.label Пароль - - Part-DB1\templates\security\login.html.twig:40 - Part-DB1\templates\security\login.html.twig:40 - templates\security\login.html.twig:40 - login.password.placeholder Пароль - - Part-DB1\templates\security\login.html.twig:50 - Part-DB1\templates\security\login.html.twig:50 - templates\security\login.html.twig:50 - login.rememberme Запомнить меня (включайте это только на личном компьютере) - - Part-DB1\templates\security\login.html.twig:64 - Part-DB1\templates\security\login.html.twig:64 - pw_reset.password_forget Забыл имя пользователя/пароль? - - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - pw_reset.new_pw.header.title Установить новый пароль - - Part-DB1\templates\security\pw_reset_request.html.twig:5 - Part-DB1\templates\security\pw_reset_request.html.twig:5 - pw_reset.request.header.title Запросить новый пароль - - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - tfa_u2f.http_warning Вы зашли на эту страницу используя небезопасный протокол HTTP, поэтому U2F скорее всего не будет работать (сообщение об ошибке: Неверный запрос). Попросите администратора настроить HTTPS если Вы хотите использовать ключи безопасности. - - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - r_u2f_two_factor.pressbutton Пожалуйста вставьте Ваш ключ безопасности и нажмите на нем кнопку! - - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - tfa_u2f.add_key.title Добавить ключ безопасности - - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - tfa_u2f.explanation U2F/FIDO совместимый ключ (например YubiKey или NitroKey) предоставляет удобный и безопасный двухфакторный способ аутентификации. Здесь вы можете зарегистрировать свои ключи безопасности и, если Вас запросят пройти двухфакторную проверку, просто вставьте ключ в USB порт или поднесите его к устройству считывания NFC. - - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - tfa_u2f.add_key.backup_hint Чтобы не утратить доступ в случае потери ключа мы рекомендуем зарегистрировать еще один как резервный и хранить его в безопасном месте! - - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - tfa_u2f.add_key.add_button Добавить ключ безопасности - - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - tfa_u2f.add_key.back_to_settings Вернуться к настройкам @@ -3052,10 +1806,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 new @@ -3065,8 +1815,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:14 - Part-DB1\templates\Statistics\statistics.html.twig:14 new @@ -3076,8 +1824,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:19 - Part-DB1\templates\Statistics\statistics.html.twig:19 new @@ -3087,8 +1833,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:24 - Part-DB1\templates\Statistics\statistics.html.twig:24 new @@ -3098,12 +1842,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 new @@ -3113,12 +1851,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 new @@ -3128,8 +1860,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:40 - Part-DB1\templates\Statistics\statistics.html.twig:40 new @@ -3139,8 +1869,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:44 - Part-DB1\templates\Statistics\statistics.html.twig:44 new @@ -3150,8 +1878,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:48 - Part-DB1\templates\Statistics\statistics.html.twig:48 new @@ -3161,8 +1887,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:65 - Part-DB1\templates\Statistics\statistics.html.twig:65 new @@ -3172,8 +1896,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:69 - Part-DB1\templates\Statistics\statistics.html.twig:69 new @@ -3183,8 +1905,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:73 - Part-DB1\templates\Statistics\statistics.html.twig:73 new @@ -3194,8 +1914,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:77 - Part-DB1\templates\Statistics\statistics.html.twig:77 new @@ -3205,8 +1923,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:81 - Part-DB1\templates\Statistics\statistics.html.twig:81 new @@ -3216,8 +1932,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:85 - Part-DB1\templates\Statistics\statistics.html.twig:85 new @@ -3227,8 +1941,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:89 - Part-DB1\templates\Statistics\statistics.html.twig:89 new @@ -3238,8 +1950,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:93 - Part-DB1\templates\Statistics\statistics.html.twig:93 new @@ -3249,8 +1959,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:110 - Part-DB1\templates\Statistics\statistics.html.twig:110 new @@ -3260,8 +1968,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:114 - Part-DB1\templates\Statistics\statistics.html.twig:114 new @@ -3271,8 +1977,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:118 - Part-DB1\templates\Statistics\statistics.html.twig:118 new @@ -3282,8 +1986,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:122 - Part-DB1\templates\Statistics\statistics.html.twig:122 new @@ -3293,8 +1995,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:126 - Part-DB1\templates\Statistics\statistics.html.twig:126 new @@ -3303,302 +2003,156 @@ - - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - tfa_backup.codes.title Резервные коды - - Part-DB1\templates\Users\backup_codes.html.twig:12 - Part-DB1\templates\Users\backup_codes.html.twig:12 - tfa_backup.codes.explanation Распечатайте эти коды и храните их в безопасном месте! - - Part-DB1\templates\Users\backup_codes.html.twig:13 - Part-DB1\templates\Users\backup_codes.html.twig:13 - tfa_backup.codes.help Если Вы больше не можете использовать приложение Аутентификатор (потеряли смартфон, утратили данные и т.п.) то используйте один из этих кодов чтобы получить доступ к своему аккаунту и возможности заново настроить приложение Аутентификатор. Каждый из этих кодов может быть использован только один раз, после чего мы рекомендуем уничтожить использованные коды. Храните коды в безопасном месте, в противном случае любой кто получит к ним доступ сможет зайти в Ваш аккаунт. - - Part-DB1\templates\Users\backup_codes.html.twig:16 - Part-DB1\templates\Users\backup_codes.html.twig:16 - tfa_backup.username Имя пользователя - - Part-DB1\templates\Users\backup_codes.html.twig:29 - Part-DB1\templates\Users\backup_codes.html.twig:29 - tfa_backup.codes.page_generated_on Дата генерации страницы %date% - - Part-DB1\templates\Users\backup_codes.html.twig:32 - Part-DB1\templates\Users\backup_codes.html.twig:32 - tfa_backup.codes.print Печать - - Part-DB1\templates\Users\backup_codes.html.twig:35 - Part-DB1\templates\Users\backup_codes.html.twig:35 - tfa_backup.codes.copy_clipboard Скопировать в буфер обмена - - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:40 - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:38 - templates\base.html.twig:99 - templates\Users\user_info.html.twig:3 - templates\Users\user_info.html.twig:6 - user.info.label Информация о пользователе - - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - templates\Users\user_info.html.twig:18 - src\Form\UserSettingsType.php:32 - user.firstName.label Имя - - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - templates\Users\user_info.html.twig:24 - src\Form\UserSettingsType.php:35 - user.lastName.label Фамилия - - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - templates\Users\user_info.html.twig:30 - src\Form\UserSettingsType.php:41 - user.email.label Email - - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - templates\Users\user_info.html.twig:37 - src\Form\UserSettingsType.php:38 - user.department.label Отдел - - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - templates\Users\user_info.html.twig:47 - src\Form\UserSettingsType.php:30 - user.username.label Имя пользователя - - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - templates\Users\user_info.html.twig:53 - group.label Группа - - Part-DB1\templates\Users\user_info.html.twig:67 - Part-DB1\templates\Users\user_info.html.twig:67 - user.permissions Разрешения - - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:39 - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:37 - templates\base.html.twig:98 - templates\Users\user_settings.html.twig:3 - templates\Users\user_settings.html.twig:6 - user.settings.label Настройки пользователя - - Part-DB1\templates\Users\user_settings.html.twig:18 - Part-DB1\templates\Users\user_settings.html.twig:18 - templates\Users\user_settings.html.twig:14 - user_settings.data.label Личные данные - - Part-DB1\templates\Users\user_settings.html.twig:22 - Part-DB1\templates\Users\user_settings.html.twig:22 - templates\Users\user_settings.html.twig:18 - user_settings.configuration.label Конфигурация - - Part-DB1\templates\Users\user_settings.html.twig:55 - Part-DB1\templates\Users\user_settings.html.twig:55 - templates\Users\user_settings.html.twig:48 - user.settings.change_pw Сменить пароль - - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - user.settings.2fa_settings Двухфакторная аутентификация - - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - tfa.settings.google.tab приложение Аутентификатор - - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - tfa.settings.bakup.tab Резервные коды - - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - tfa.settings.u2f.tab Ключи безопасности (U2F) - - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - tfa.settings.trustedDevices.tab Доверенные устройства - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_title Вы действительно хотите отключить приложение Аутентификатор? - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_message Если вы выключите приложение Аутентификатор все резервные коды будут удалены и Вам придется печатать их снова<br> @@ -3606,152 +2160,90 @@ - - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - tfa_google.disabled_message приложение Аутентификатор выключено! - - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - tfa_google.step.download Скачать приложение для аутентификации можно по ссылке (e.g. <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a> oder <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp">FreeOTP Authenticator</a>) - - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - tfa_google.step.scan Считать QR код используя приложение или ввести данные вручную - - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - tfa_google.step.input_code Введите сгенерированный код в поле внизу и нажмите на "Подтвердить" - - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - tfa_google.step.download_backup Распечатать резервные коды и сохранить из в безопасном месте - - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - tfa_google.manual_setup Настроить вручную - - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - tfa_google.manual_setup.type Тип - - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - tfa_google.manual_setup.username Имя пользователя - - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - tfa_google.manual_setup.secret Секрет - - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - tfa_google.manual_setup.digit_count Количество цифр - - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - tfa_google.enabled_message Приложения Аутентификатор разрешено - - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - tfa_backup.disabled Резервные коды запрещены. Установите приложение чтобы разрешить резервные коды. - - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - tfa_backup.explanation Вы можете использовать эти резервные коды для доступа в ваш аккаунт если вы потеряли устройство на котором установлено приложение Аутентификатор. Распечатайте коды и храните их в безопасном месте. - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_title Точно хотите сбросить коды? - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_message Это удалит все предыдущие коды и создаст набор новых. Это не может быть отменено. @@ -3759,110 +2251,66 @@ - - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - tfa_backup.enabled Резервные коды разрешены - - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - tfa_backup.show_codes Показать резервные коды - - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - tfa_u2f.table_caption Зарегистрировать ключи безопасности - - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - tfa_u2f.delete_u2f.confirm_title Точно хотите удалить этот ключ безопасности? - - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - tfa_u2f.delete_u2f.confirm_message Если вы удалите этот ключ то вы больше не сможете использовать его для входа. Если не останется зарегистрированных ключей то двухфакторная аутентификация будет запрещена. - - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - tfa_u2f.keys.name Имя ключа - - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - tfa_u2f.keys.added_date Дата регистрации - - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - tfa_u2f.key_delete Удалить ключ - - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - tfa_u2f.no_keys_registered Еще нет зарегистрированных ключей. - - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - tfa_u2f.add_new_key Зарегистрировать новый ключ безопасности - - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - tfa_trustedDevices.explanation Когда второй этап подтверждения успешно произведен, этот компьютер может быть отмечен как доверенный и больше не потребуется использовать двухфакторную аутентификацию. @@ -3870,326 +2318,168 @@ - - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - tfa_trustedDevices.invalidate.confirm_title Точно хотите удалить все доверенные компьютеры? - - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - tfa_trustedDevices.invalidate.confirm_message Вам снова нужно будет использовать двухфакторную аутентификацию на всех компьютерах. Убедитесь что у вас есть на руках устройство для двухфакторного подтверждения. - - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - tfa_trustedDevices.invalidate.btn Сбросить доверенные устройства - - Part-DB1\templates\_navbar.html.twig:4 - Part-DB1\templates\_navbar.html.twig:4 - templates\base.html.twig:29 - sidebar.toggle Переключить боковую панель - - Part-DB1\templates\_navbar.html.twig:22 - navbar.scanner.link Сканер - - Part-DB1\templates\_navbar.html.twig:38 - Part-DB1\templates\_navbar.html.twig:36 - templates\base.html.twig:97 - user.loggedin.label Вошел как - - Part-DB1\templates\_navbar.html.twig:44 - Part-DB1\templates\_navbar.html.twig:42 - templates\base.html.twig:103 - user.login Вход - - Part-DB1\templates\_navbar.html.twig:50 - Part-DB1\templates\_navbar.html.twig:48 - ui.toggle_darkmode Темный режим - - Part-DB1\templates\_navbar.html.twig:54 - Part-DB1\src\Form\UserSettingsType.php:97 - Part-DB1\templates\_navbar.html.twig:52 - Part-DB1\src\Form\UserSettingsType.php:97 - templates\base.html.twig:106 - src\Form\UserSettingsType.php:44 - user.language_select Выбрать язык - - Part-DB1\templates\_navbar_search.html.twig:4 - Part-DB1\templates\_navbar_search.html.twig:4 - templates\base.html.twig:49 - search.options.label Опции поиска - - Part-DB1\templates\_navbar_search.html.twig:23 - tags.label Метки - - Part-DB1\templates\_navbar_search.html.twig:27 - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - templates\base.html.twig:60 - templates\Parts\show_part_info.html.twig:36 - src\Form\PartType.php:77 - storelocation.label Место хранения - - Part-DB1\templates\_navbar_search.html.twig:36 - Part-DB1\templates\_navbar_search.html.twig:31 - templates\base.html.twig:65 - ordernumber.label.short Ном.заказа - - Part-DB1\templates\_navbar_search.html.twig:40 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - Part-DB1\templates\_navbar_search.html.twig:35 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - templates\base.html.twig:67 - supplier.label Поставщик - - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_navbar_search.html.twig:56 - templates\base.html.twig:77 - search.regexmatching Соответствие рег.выраж. - - Part-DB1\templates\_sidebar.html.twig:37 - Part-DB1\templates\_sidebar.html.twig:12 - Part-DB1\templates\_sidebar.html.twig:37 - Part-DB1\templates\_sidebar.html.twig:12 - templates\base.html.twig:175 - templates\base.html.twig:189 - templates\base.html.twig:202 - templates\base.html.twig:230 - project.labelp Проекты - - Part-DB1\templates\_sidebar.html.twig:2 - Part-DB1\templates\_sidebar.html.twig:2 - templates\base.html.twig:165 - templates\base.html.twig:192 - templates\base.html.twig:220 - actions Действия - - Part-DB1\templates\_sidebar.html.twig:6 - Part-DB1\templates\_sidebar.html.twig:6 - templates\base.html.twig:169 - templates\base.html.twig:196 - templates\base.html.twig:224 - datasource Источник данных - - Part-DB1\templates\_sidebar.html.twig:10 - Part-DB1\templates\_sidebar.html.twig:10 - templates\base.html.twig:173 - templates\base.html.twig:200 - templates\base.html.twig:228 - manufacturer.labelp Производители - - Part-DB1\templates\_sidebar.html.twig:11 - Part-DB1\templates\_sidebar.html.twig:11 - templates\base.html.twig:174 - templates\base.html.twig:201 - templates\base.html.twig:229 - supplier.labelp Поставщики - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:213 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:293 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:293 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:181 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:243 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:268 - attachment.download_failed Не удалось скачать внешнее вложение. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:222 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:190 - entity.edit_flash Изменения успешно сохранены. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:231 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:196 - entity.edit_flash.invalid Изменения не могут быть сохранены! Проверьте введенные данные! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:302 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:252 - entity.created_flash Элемент создан. - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:308 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:258 - entity.created_flash.invalid Не могу создать элемент. Проверьте введенные данные! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:399 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:352 - src\Controller\BaseAdminController.php:154 - attachment_type.deleted Элемент удален! - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:401 - Part-DB1\src\Controller\UserController.php:109 - Part-DB1\src\Controller\UserSettingsController.php:159 - Part-DB1\src\Controller\UserSettingsController.php:193 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:354 - Part-DB1\src\Controller\UserController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:150 - Part-DB1\src\Controller\UserSettingsController.php:182 - csfr_invalid CSFR жетон неверен. Перегрузите эту страницу или свяжитесь с администратором если это сообщение остаётся на экране. - - Part-DB1\src\Controller\LabelController.php:125 - label_generator.no_entities_found Ничего не найдено @@ -4197,8 +2487,6 @@ - Part-DB1\src\Controller\LogController.php:149 - Part-DB1\src\Controller\LogController.php:154 new @@ -4208,8 +2496,6 @@ - Part-DB1\src\Controller\LogController.php:156 - Part-DB1\src\Controller\LogController.php:160 new @@ -4219,8 +2505,6 @@ - Part-DB1\src\Controller\LogController.php:176 - Part-DB1\src\Controller\LogController.php:180 new @@ -4230,8 +2514,6 @@ - Part-DB1\src\Controller\LogController.php:178 - Part-DB1\src\Controller\LogController.php:182 new @@ -4241,8 +2523,6 @@ - Part-DB1\src\Controller\LogController.php:185 - Part-DB1\src\Controller\LogController.php:189 new @@ -4252,8 +2532,6 @@ - Part-DB1\src\Controller\LogController.php:187 - Part-DB1\src\Controller\LogController.php:191 new @@ -4263,8 +2541,6 @@ - Part-DB1\src\Controller\LogController.php:194 - Part-DB1\src\Controller\LogController.php:198 new @@ -4274,8 +2550,6 @@ - Part-DB1\src\Controller\LogController.php:196 - Part-DB1\src\Controller\LogController.php:200 new @@ -4285,8 +2559,6 @@ - Part-DB1\src\Controller\LogController.php:199 - Part-DB1\src\Controller\LogController.php:203 new @@ -4295,306 +2567,168 @@ - - Part-DB1\src\Controller\PartController.php:182 - Part-DB1\src\Controller\PartController.php:182 - src\Controller\PartController.php:80 - part.edited_flash Изменения сохранены! - - Part-DB1\src\Controller\PartController.php:216 - Part-DB1\src\Controller\PartController.php:219 - part.deleted Компонент успешно удален. - - Part-DB1\src\Controller\PartController.php:302 - Part-DB1\src\Controller\PartController.php:277 - Part-DB1\src\Controller\PartController.php:317 - src\Controller\PartController.php:113 - src\Controller\PartController.php:142 - part.created_flash Компонент создан! - - Part-DB1\src\Controller\PartController.php:308 - Part-DB1\src\Controller\PartController.php:283 - part.created_flash.invalid Пожалуйста проверьте введенные данные! - - Part-DB1\src\Controller\ScanController.php:68 - Part-DB1\src\Controller\ScanController.php:90 - scan.qr_not_found По данному штрихкоду совпадений не найдено. - - Part-DB1\src\Controller\ScanController.php:71 - scan.format_unknown Неизвестный формат! - - Part-DB1\src\Controller\ScanController.php:86 - scan.qr_success Элемент найден. - - Part-DB1\src\Controller\SecurityController.php:114 - Part-DB1\src\Controller\SecurityController.php:109 - pw_reset.user_or_email Имя пользователя / Email - - Part-DB1\src\Controller\SecurityController.php:131 - Part-DB1\src\Controller\SecurityController.php:126 - pw_reset.request.success Запрос на сброс пароля прошел успешно! Проверьте почтовый ящик для дальнейших инструкций. - - Part-DB1\src\Controller\SecurityController.php:162 - Part-DB1\src\Controller\SecurityController.php:160 - pw_reset.username Имя пользователя - - Part-DB1\src\Controller\SecurityController.php:165 - Part-DB1\src\Controller\SecurityController.php:163 - pw_reset.token Жетон - - Part-DB1\src\Controller\SecurityController.php:194 - Part-DB1\src\Controller\SecurityController.php:192 - pw_reset.new_pw.error Имя пользователя или Жетон неверные! Проверьте введенные данные. - - Part-DB1\src\Controller\SecurityController.php:196 - Part-DB1\src\Controller\SecurityController.php:194 - pw_reset.new_pw.success Пароль успешно сброшен. Теперь вы можете зайти используя новый пароль. - - Part-DB1\src\Controller\UserController.php:107 - Part-DB1\src\Controller\UserController.php:99 - user.edit.reset_success Все двухфакторные способы аутентификации успешно запрещены. - - Part-DB1\src\Controller\UserSettingsController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:92 - tfa_backup.no_codes_enabled Нет разрешенных резервных кодов! - - Part-DB1\src\Controller\UserSettingsController.php:138 - Part-DB1\src\Controller\UserSettingsController.php:132 - tfa_u2f.u2f_delete.not_existing Для этого ID нет привязанных ключей безопасности. - - Part-DB1\src\Controller\UserSettingsController.php:145 - Part-DB1\src\Controller\UserSettingsController.php:139 - tfa_u2f.u2f_delete.access_denied Вы не можете удалять ключи безопасности других пользователей! - - Part-DB1\src\Controller\UserSettingsController.php:153 - Part-DB1\src\Controller\UserSettingsController.php:147 - tfa.u2f.u2f_delete.success Ключ безопасности успешно удален. - - Part-DB1\src\Controller\UserSettingsController.php:188 - Part-DB1\src\Controller\UserSettingsController.php:180 - tfa_trustedDevice.invalidate.success Доверенные устройства успешно сброшены. - - Part-DB1\src\Controller\UserSettingsController.php:235 - Part-DB1\src\Controller\UserSettingsController.php:226 - src\Controller\UserController.php:98 - user.settings.saved_flash Настройки сохранены! - - Part-DB1\src\Controller\UserSettingsController.php:297 - Part-DB1\src\Controller\UserSettingsController.php:288 - src\Controller\UserController.php:130 - user.settings.pw_changed_flash Пароль изменен! - - Part-DB1\src\Controller\UserSettingsController.php:317 - Part-DB1\src\Controller\UserSettingsController.php:306 - user.settings.2fa.google.activated Приложение Аутентификатор успешно активировано! - - Part-DB1\src\Controller\UserSettingsController.php:328 - Part-DB1\src\Controller\UserSettingsController.php:315 - user.settings.2fa.google.disabled Приложение Аутентификатор успешно запрещено! - - Part-DB1\src\Controller\UserSettingsController.php:346 - Part-DB1\src\Controller\UserSettingsController.php:332 - user.settings.2fa.backup_codes.regenerated Новые резервные коды успешно сгенерированы. - - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - attachment.table.filesize Размер файла - - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:245 - Part-DB1\src\DataTables\PartsDataTable.php:252 - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:193 - Part-DB1\src\DataTables\PartsDataTable.php:200 - true истина - - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:246 - Part-DB1\src\DataTables\PartsDataTable.php:253 - Part-DB1\src\Form\Type\SIUnitType.php:139 - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:201 - Part-DB1\src\Form\Type\SIUnitType.php:139 - false ложь - - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:128 - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:119 - log.target_deleted Объект удален @@ -4602,8 +2736,6 @@ - Part-DB1\src\DataTables\Column\RevertLogColumn.php:57 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:60 new @@ -4613,8 +2745,6 @@ - Part-DB1\src\DataTables\Column\RevertLogColumn.php:63 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:66 new @@ -4624,8 +2754,6 @@ - Part-DB1\src\DataTables\Column\RevertLogColumn.php:83 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:86 new @@ -4634,70 +2762,42 @@ - - Part-DB1\src\DataTables\LogDataTable.php:173 - Part-DB1\src\DataTables\LogDataTable.php:161 - log.id ID - - Part-DB1\src\DataTables\LogDataTable.php:178 - Part-DB1\src\DataTables\LogDataTable.php:166 - log.timestamp Время события - - Part-DB1\src\DataTables\LogDataTable.php:183 - Part-DB1\src\DataTables\LogDataTable.php:171 - log.type Тип - - Part-DB1\src\DataTables\LogDataTable.php:191 - Part-DB1\src\DataTables\LogDataTable.php:179 - log.level Уровень - - Part-DB1\src\DataTables\LogDataTable.php:200 - Part-DB1\src\DataTables\LogDataTable.php:188 - log.user Пользователь - - Part-DB1\src\DataTables\LogDataTable.php:213 - Part-DB1\src\DataTables\LogDataTable.php:201 - log.target_type Тип объекта - - Part-DB1\src\DataTables\LogDataTable.php:226 - Part-DB1\src\DataTables\LogDataTable.php:214 - log.target Объект @@ -4705,8 +2805,6 @@ - Part-DB1\src\DataTables\LogDataTable.php:231 - Part-DB1\src\DataTables\LogDataTable.php:218 new @@ -4715,100 +2813,60 @@ - - Part-DB1\src\DataTables\PartsDataTable.php:168 - Part-DB1\src\DataTables\PartsDataTable.php:116 - part.table.name Имя - - Part-DB1\src\DataTables\PartsDataTable.php:178 - Part-DB1\src\DataTables\PartsDataTable.php:126 - part.table.id ID - - Part-DB1\src\DataTables\PartsDataTable.php:182 - Part-DB1\src\DataTables\PartsDataTable.php:130 - part.table.description Описание - - Part-DB1\src\DataTables\PartsDataTable.php:185 - Part-DB1\src\DataTables\PartsDataTable.php:133 - part.table.category Категория - - Part-DB1\src\DataTables\PartsDataTable.php:190 - Part-DB1\src\DataTables\PartsDataTable.php:138 - part.table.footprint Посад.место - - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:142 - part.table.manufacturer Производитель - - Part-DB1\src\DataTables\PartsDataTable.php:197 - Part-DB1\src\DataTables\PartsDataTable.php:145 - part.table.storeLocations Хранилища - - Part-DB1\src\DataTables\PartsDataTable.php:216 - Part-DB1\src\DataTables\PartsDataTable.php:164 - part.table.amount Количество - - Part-DB1\src\DataTables\PartsDataTable.php:224 - Part-DB1\src\DataTables\PartsDataTable.php:172 - part.table.minamount Мин. Количество - - Part-DB1\src\DataTables\PartsDataTable.php:232 - Part-DB1\src\DataTables\PartsDataTable.php:180 - part.table.partUnit Единица измерения @@ -4821,864 +2879,522 @@ - - Part-DB1\src\DataTables\PartsDataTable.php:236 - Part-DB1\src\DataTables\PartsDataTable.php:184 - part.table.addedDate Дата добавления - - Part-DB1\src\DataTables\PartsDataTable.php:240 - Part-DB1\src\DataTables\PartsDataTable.php:188 - part.table.lastModified Дата последнего изменения - - Part-DB1\src\DataTables\PartsDataTable.php:244 - Part-DB1\src\DataTables\PartsDataTable.php:192 - part.table.needsReview Требует рассмотрения - - Part-DB1\src\DataTables\PartsDataTable.php:251 - Part-DB1\src\DataTables\PartsDataTable.php:199 - part.table.favorite Избранное - - Part-DB1\src\DataTables\PartsDataTable.php:258 - Part-DB1\src\DataTables\PartsDataTable.php:206 - part.table.manufacturingStatus Статус - - Part-DB1\src\DataTables\PartsDataTable.php:260 - Part-DB1\src\DataTables\PartsDataTable.php:262 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:208 - Part-DB1\src\DataTables\PartsDataTable.php:210 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.unknown Неизвестно - - Part-DB1\src\DataTables\PartsDataTable.php:263 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:211 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.announced Заявлено - - Part-DB1\src\DataTables\PartsDataTable.php:264 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.active Активно - - Part-DB1\src\DataTables\PartsDataTable.php:265 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:213 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.nrfnd Не рекомендовано для новых дизайнов - - Part-DB1\src\DataTables\PartsDataTable.php:266 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:214 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.eol Окончание срока службы - - Part-DB1\src\DataTables\PartsDataTable.php:267 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:215 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.discontinued Прекращено - - Part-DB1\src\DataTables\PartsDataTable.php:271 - Part-DB1\src\DataTables\PartsDataTable.php:219 - part.table.mpn MPN - - Part-DB1\src\DataTables\PartsDataTable.php:275 - Part-DB1\src\DataTables\PartsDataTable.php:223 - part.table.mass Вес - - Part-DB1\src\DataTables\PartsDataTable.php:279 - Part-DB1\src\DataTables\PartsDataTable.php:227 - part.table.tags Метки - - Part-DB1\src\DataTables\PartsDataTable.php:283 - Part-DB1\src\DataTables\PartsDataTable.php:231 - part.table.attachments Вложения - - Part-DB1\src\EventSubscriber\UserSystem\LoginSuccessSubscriber.php:82 - Part-DB1\src\EventSubscriber\LoginSuccessListener.php:82 - flash.login_successful Успешный вход - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - JSON JSON - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - XML XML - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - CSV CSV - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - YAML YAML - - Part-DB1\src\Form\AdminPages\ImportType.php:124 - Part-DB1\src\Form\AdminPages\ImportType.php:124 - import.abort_on_validation.help Когда эта опция включена весь процесс импорта прерывается в случае обнаружения неверных данных в любой записи. Если выключена то записи с неверными данными будут игнорированы а все прочие успешно импортированы. - - Part-DB1\src\Form\AdminPages\ImportType.php:86 - Part-DB1\src\Form\AdminPages\ImportType.php:86 - src\Form\ImportType.php:70 - import.csv_separator Разделитель CSV - - Part-DB1\src\Form\AdminPages\ImportType.php:93 - Part-DB1\src\Form\AdminPages\ImportType.php:93 - src\Form\ImportType.php:72 - parent.label Родительский элемент - - Part-DB1\src\Form\AdminPages\ImportType.php:101 - Part-DB1\src\Form\AdminPages\ImportType.php:101 - src\Form\ImportType.php:75 - import.file Файл - - Part-DB1\src\Form\AdminPages\ImportType.php:111 - Part-DB1\src\Form\AdminPages\ImportType.php:111 - src\Form\ImportType.php:78 - import.preserve_children Создавать дочерние элементы при импорте - - Part-DB1\src\Form\AdminPages\ImportType.php:120 - Part-DB1\src\Form\AdminPages\ImportType.php:120 - src\Form\ImportType.php:80 - import.abort_on_validation Прерывать при неверных данных - - Part-DB1\src\Form\AdminPages\ImportType.php:132 - Part-DB1\src\Form\AdminPages\ImportType.php:132 - src\Form\ImportType.php:85 - import.btn Импорт - - Part-DB1\src\Form\AttachmentFormType.php:113 - Part-DB1\src\Form\AttachmentFormType.php:109 - attachment.edit.secure_file.help Вложение отмеченное как личное может быть просмотрено только пользователем с соответствующим разрешением. Если это включено то миниатюра не формируется и доступ к файлу менее производителен. - - Part-DB1\src\Form\AttachmentFormType.php:127 - Part-DB1\src\Form\AttachmentFormType.php:123 - attachment.edit.url.help Здесь вы можете задать url для внешнего файла или указать ключевое слово по которому будет произведен поиск в базе данных (например в базе посадочных мест) - - Part-DB1\src\Form\AttachmentFormType.php:82 - Part-DB1\src\Form\AttachmentFormType.php:79 - attachment.edit.name Имя - - Part-DB1\src\Form\AttachmentFormType.php:85 - Part-DB1\src\Form\AttachmentFormType.php:82 - attachment.edit.attachment_type Тип вложения - - Part-DB1\src\Form\AttachmentFormType.php:94 - Part-DB1\src\Form\AttachmentFormType.php:91 - attachment.edit.show_in_table Показать в таблице - - Part-DB1\src\Form\AttachmentFormType.php:105 - Part-DB1\src\Form\AttachmentFormType.php:102 - attachment.edit.secure_file Личное вложение - - Part-DB1\src\Form\AttachmentFormType.php:119 - Part-DB1\src\Form\AttachmentFormType.php:115 - attachment.edit.url URL - - Part-DB1\src\Form\AttachmentFormType.php:133 - Part-DB1\src\Form\AttachmentFormType.php:129 - attachment.edit.download_url Скачать внешний файл - - Part-DB1\src\Form\AttachmentFormType.php:146 - Part-DB1\src\Form\AttachmentFormType.php:142 - attachment.edit.file Выгрузить файл - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:86 - part.label Компонент - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:87 - part_lot.label Лот на компонент - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.none Ничто - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.qr QR Код (рекомендуется) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code128 Код 128 (рекомендуется) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code39 Код 39 (рекомендуется) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code93 Код 93 - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.datamatrix Матричный Штрихкод - - Part-DB1\src\Form\LabelOptionsType.php:122 - label_options.lines_mode.html HTML - - Part-DB1\src\Form\LabelOptionsType.php:122 - label.options.lines_mode.twig Twig - - Part-DB1\src\Form\LabelOptionsType.php:126 - label_options.lines_mode.help Если здесь выбиран Twig, содержимое поля интерпретируется как шаблон Twig. Смотри <a href="https://twig.symfony.com/doc/3.x/templates.html">документация Twig</a> и <a href="https://github.com/Part-DB/Part-DB-symfony/wiki/Labels#twig-mode">Wiki</a> для пополнительной информации. - - Part-DB1\src\Form\LabelOptionsType.php:47 - label_options.page_size.label Размер этикетки - - Part-DB1\src\Form\LabelOptionsType.php:66 - label_options.supported_elements.label Тип элемента - - Part-DB1\src\Form\LabelOptionsType.php:75 - label_options.barcode_type.label Штрихкод - - Part-DB1\src\Form\LabelOptionsType.php:102 - label_profile.lines.label Содержание - - Part-DB1\src\Form\LabelOptionsType.php:111 - label_options.additional_css.label Дополнительные стили (CSS) - - Part-DB1\src\Form\LabelOptionsType.php:120 - label_options.lines_mode.label Режим парсера - - Part-DB1\src\Form\LabelOptionsType.php:51 - label_options.width.placeholder Ширина - - Part-DB1\src\Form\LabelOptionsType.php:60 - label_options.height.placeholder Высота - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:49 - label_generator.target_id.range_hint Вы можете указать несколько ID (например 1,2,3) и/или диапазон (1-3) чтобы создать этикетки для нескольких элементов сразу. - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:46 - label_generator.target_id.label ID элемента - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:59 - label_generator.update Обновить - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:36 - scan_dialog.input Ввод - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:44 - scan_dialog.submit Отправить - - Part-DB1\src\Form\ParameterType.php:41 - parameters.name.placeholder н.р. Коэффициент усиления - - Part-DB1\src\Form\ParameterType.php:50 - parameters.symbol.placeholder н.р. h_{FE} - - Part-DB1\src\Form\ParameterType.php:60 - parameters.text.placeholder н.р. Тестовые условия - - Part-DB1\src\Form\ParameterType.php:71 - parameters.max.placeholder н.р. 350 - - Part-DB1\src\Form\ParameterType.php:82 - parameters.min.placeholder н.р. 100 - - Part-DB1\src\Form\ParameterType.php:93 - parameters.typical.placeholder н.р. 200 - - Part-DB1\src\Form\ParameterType.php:103 - parameters.unit.placeholder н.р. V - - Part-DB1\src\Form\ParameterType.php:114 - parameter.group.placeholder н.р. Технические спецификации - - Part-DB1\src\Form\Part\OrderdetailType.php:72 - Part-DB1\src\Form\Part\OrderdetailType.php:75 - orderdetails.edit.supplierpartnr Номер заказа - - Part-DB1\src\Form\Part\OrderdetailType.php:81 - Part-DB1\src\Form\Part\OrderdetailType.php:84 - orderdetails.edit.supplier Поставщик - - Part-DB1\src\Form\Part\OrderdetailType.php:87 - Part-DB1\src\Form\Part\OrderdetailType.php:90 - orderdetails.edit.url Ссылка на предложение - - Part-DB1\src\Form\Part\OrderdetailType.php:93 - Part-DB1\src\Form\Part\OrderdetailType.php:96 - orderdetails.edit.obsolete Больше не доступно - - Part-DB1\src\Form\Part\OrderdetailType.php:75 - Part-DB1\src\Form\Part\OrderdetailType.php:78 - orderdetails.edit.supplierpartnr.placeholder н.р. BC 547 - - Part-DB1\src\Form\Part\PartBaseType.php:101 - Part-DB1\src\Form\Part\PartBaseType.php:99 - part.edit.name Имя - - Part-DB1\src\Form\Part\PartBaseType.php:109 - Part-DB1\src\Form\Part\PartBaseType.php:107 - part.edit.description Описание - - Part-DB1\src\Form\Part\PartBaseType.php:120 - Part-DB1\src\Form\Part\PartBaseType.php:118 - part.edit.mininstock Минимальный запас - - Part-DB1\src\Form\Part\PartBaseType.php:129 - Part-DB1\src\Form\Part\PartBaseType.php:127 - part.edit.category Категория - - Part-DB1\src\Form\Part\PartBaseType.php:135 - Part-DB1\src\Form\Part\PartBaseType.php:133 - part.edit.footprint Посадочное место - - Part-DB1\src\Form\Part\PartBaseType.php:142 - Part-DB1\src\Form\Part\PartBaseType.php:140 - part.edit.tags Метки - - Part-DB1\src\Form\Part\PartBaseType.php:154 - Part-DB1\src\Form\Part\PartBaseType.php:152 - part.edit.manufacturer.label Производитель - - Part-DB1\src\Form\Part\PartBaseType.php:161 - Part-DB1\src\Form\Part\PartBaseType.php:159 - part.edit.manufacturer_url.label Ссылка на страницу продукта - - Part-DB1\src\Form\Part\PartBaseType.php:167 - Part-DB1\src\Form\Part\PartBaseType.php:165 - part.edit.mpn Код компонента производителя - - Part-DB1\src\Form\Part\PartBaseType.php:173 - Part-DB1\src\Form\Part\PartBaseType.php:171 - part.edit.manufacturing_status Статус производства - - Part-DB1\src\Form\Part\PartBaseType.php:181 - Part-DB1\src\Form\Part\PartBaseType.php:179 - part.edit.needs_review Нужно рассмотреть - - Part-DB1\src\Form\Part\PartBaseType.php:189 - Part-DB1\src\Form\Part\PartBaseType.php:187 - part.edit.is_favorite Избранное - - Part-DB1\src\Form\Part\PartBaseType.php:197 - Part-DB1\src\Form\Part\PartBaseType.php:195 - part.edit.mass Вес - - Part-DB1\src\Form\Part\PartBaseType.php:203 - Part-DB1\src\Form\Part\PartBaseType.php:201 - part.edit.partUnit Единица измерения @@ -5691,287 +3407,168 @@ - - Part-DB1\src\Form\Part\PartBaseType.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:210 - part.edit.comment Комментарий - - Part-DB1\src\Form\Part\PartBaseType.php:250 - Part-DB1\src\Form\Part\PartBaseType.php:246 - part.edit.master_attachment Предварительный просмотр картинки - - Part-DB1\src\Form\Part\PartBaseType.php:295 - Part-DB1\src\Form\Part\PartBaseType.php:276 - src\Form\PartType.php:91 - part.edit.save Сохранить изменения - - Part-DB1\src\Form\Part\PartBaseType.php:296 - Part-DB1\src\Form\Part\PartBaseType.php:277 - src\Form\PartType.php:92 - part.edit.reset Сбросить изменения - - Part-DB1\src\Form\Part\PartBaseType.php:105 - Part-DB1\src\Form\Part\PartBaseType.php:103 - part.edit.name.placeholder н.р. BC547 - - Part-DB1\src\Form\Part\PartBaseType.php:115 - Part-DB1\src\Form\Part\PartBaseType.php:113 - part.edit.description.placeholder н.р. NPN 45V, 0,1A, 0,5W - - Part-DB1\src\Form\Part\PartBaseType.php:123 - Part-DB1\src\Form\Part\PartBaseType.php:121 - part.editmininstock.placeholder н.р. 1 - - Part-DB1\src\Form\Part\PartLotType.php:69 - Part-DB1\src\Form\Part\PartLotType.php:69 - part_lot.edit.description Описание - - Part-DB1\src\Form\Part\PartLotType.php:78 - Part-DB1\src\Form\Part\PartLotType.php:78 - part_lot.edit.location Хранилище - - Part-DB1\src\Form\Part\PartLotType.php:89 - Part-DB1\src\Form\Part\PartLotType.php:89 - part_lot.edit.amount Количество - - Part-DB1\src\Form\Part\PartLotType.php:98 - Part-DB1\src\Form\Part\PartLotType.php:97 - part_lot.edit.instock_unknown Количество неизвестно - - Part-DB1\src\Form\Part\PartLotType.php:109 - Part-DB1\src\Form\Part\PartLotType.php:108 - part_lot.edit.needs_refill Нужно пополнить - - Part-DB1\src\Form\Part\PartLotType.php:120 - Part-DB1\src\Form\Part\PartLotType.php:119 - part_lot.edit.expiration_date Дата истечения - - Part-DB1\src\Form\Part\PartLotType.php:128 - Part-DB1\src\Form\Part\PartLotType.php:125 - part_lot.edit.comment Комментарий - - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - perm.group.other Разное - - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - tfa_google.enable Включить приложение аутентификации - - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - tfa_google.disable Выключить приложение аутентификации - - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - google_confirmation Код подтверждения - - Part-DB1\src\Form\UserSettingsType.php:108 - Part-DB1\src\Form\UserSettingsType.php:108 - src\Form\UserSettingsType.php:46 - user.timezone.label Временная зона - - Part-DB1\src\Form\UserSettingsType.php:133 - Part-DB1\src\Form\UserSettingsType.php:132 - user.currency.label Предпочитаемая валюта - - Part-DB1\src\Form\UserSettingsType.php:140 - Part-DB1\src\Form\UserSettingsType.php:139 - src\Form\UserSettingsType.php:53 - save Применить изменения - - Part-DB1\src\Form\UserSettingsType.php:141 - Part-DB1\src\Form\UserSettingsType.php:140 - src\Form\UserSettingsType.php:54 - reset Отменить изменения - - Part-DB1\src\Form\UserSettingsType.php:104 - Part-DB1\src\Form\UserSettingsType.php:104 - src\Form\UserSettingsType.php:45 - user_settings.language.placeholder Язык для всего сервера - - Part-DB1\src\Form\UserSettingsType.php:115 - Part-DB1\src\Form\UserSettingsType.php:115 - src\Form\UserSettingsType.php:48 - user_settings.timezone.placeholder Временная зона для всего сервера - - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - attachment.label Вложение - - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - attachment_type.label Тип вложения - - Part-DB1\src\Services\ElementTypeNameGenerator.php:82 - Part-DB1\src\Services\ElementTypeNameGenerator.php:82 - project.label Проект - - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - measurement_unit.label Единица измерения @@ -5984,58 +3581,36 @@ - - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - currency.label Валюта - - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - orderdetail.label Детали заказа - - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - pricedetail.label Детали цены - - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - user.label Пользователь - - Part-DB1\src\Services\ElementTypeNameGenerator.php:95 - parameter.label Параметр - - Part-DB1\src\Services\ElementTypeNameGenerator.php:96 - label_profile.label Профиль этикетки @@ -6043,8 +3618,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:176 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:161 new @@ -6053,174 +3626,102 @@ - - Part-DB1\src\Services\MarkdownParser.php:73 - Part-DB1\src\Services\MarkdownParser.php:73 - markdown.loading Загрузка документа. Если это сообщение не пропадает, попробуйте перегрузить страницу. - - Part-DB1\src\Services\PasswordResetManager.php:98 - Part-DB1\src\Services\PasswordResetManager.php:98 - pw_reset.email.subject Сброс пароль для вашего Part-DB аккаунта - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - tree.tools.tools Инструменты - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:107 - src\Services\ToolsTreeBuilder.php:74 - tree.tools.edit Редактировать - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:110 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - src\Services\ToolsTreeBuilder.php:81 - tree.tools.show Показать - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:111 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - tree.tools.system Система - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:123 - tree.tools.tools.label_dialog Генератор этикеток - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:130 - tree.tools.tools.label_scanner Сканер - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:149 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:126 - src\Services\ToolsTreeBuilder.php:62 - tree.tools.edit.attachment_types Типы вложений - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:155 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:132 - src\Services\ToolsTreeBuilder.php:64 - tree.tools.edit.categories Категории - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:161 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:138 - src\Services\ToolsTreeBuilder.php:66 - tree.tools.edit.projects Проекты - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:167 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:144 - src\Services\ToolsTreeBuilder.php:68 - tree.tools.edit.suppliers Поставщики - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:173 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:150 - src\Services\ToolsTreeBuilder.php:70 - tree.tools.edit.manufacturer Производители - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:179 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:156 - tree.tools.edit.storelocation Хранилища - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:185 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:162 - tree.tools.edit.footprint Посадочные места - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:191 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:168 - tree.tools.edit.currency Валюты - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:174 - tree.tools.edit.measurement_unit Единица измерения @@ -6233,40 +3734,24 @@ - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.edit.label_profile Профили этикетки - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:209 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:180 - tree.tools.edit.part Компонент - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:226 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - src\Services\ToolsTreeBuilder.php:77 - tree.tools.show.all_parts Показать все компоненты - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:232 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.show.all_attachments Вложения @@ -6274,8 +3759,6 @@ - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:239 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:210 new @@ -6284,20 +3767,12 @@ - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:258 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:229 - tree.tools.system.users Пользователи - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:264 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:235 - tree.tools.system.groups Группы @@ -6305,8 +3780,6 @@ - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:271 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:242 new @@ -6315,11 +3788,6 @@ - - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - src\Services\TreeBuilder.php:124 - entity.tree.new Новый Элемент @@ -6327,7 +3795,6 @@ - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 obsolete @@ -6337,8 +3804,6 @@ - Part-DB1\templates\_navbar.html.twig:27 - templates\base.html.twig:88 obsolete @@ -6348,8 +3813,6 @@ - Part-DB1\src\Form\UserSettingsType.php:119 - src\Form\UserSettingsType.php:49 obsolete @@ -6359,8 +3822,6 @@ - Part-DB1\src\Form\UserSettingsType.php:129 - src\Form\UserSettingsType.php:50 obsolete @@ -6370,7 +3831,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:100 new obsolete @@ -6381,10 +3841,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:128 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:150 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:169 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:207 new obsolete @@ -6395,10 +3851,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:130 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:152 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:171 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:209 new obsolete @@ -6409,7 +3861,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:139 new obsolete @@ -6420,7 +3871,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:160 new obsolete @@ -6431,7 +3881,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:184 new obsolete @@ -6442,7 +3891,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:198 new obsolete @@ -6453,7 +3901,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:214 new obsolete @@ -6464,7 +3911,6 @@ - templates\base.html.twig:81 obsolete obsolete @@ -6475,7 +3921,6 @@ - templates\base.html.twig:109 obsolete obsolete @@ -6486,7 +3931,6 @@ - templates\base.html.twig:112 obsolete obsolete @@ -6777,7 +4221,6 @@ - src\Form\PartType.php:63 obsolete obsolete @@ -7448,7 +4891,6 @@ - templates\Parts\show_part_info.html.twig:194 obsolete obsolete @@ -7459,7 +4901,6 @@ - src\Form\PartType.php:83 obsolete obsolete @@ -12261,4 +9702,4 @@ - + \ No newline at end of file diff --git a/translations/messages.zh.xlf b/translations/messages.zh.xlf index 44678eb6..9455240c 100644 --- a/translations/messages.zh.xlf +++ b/translations/messages.zh.xlf @@ -2,11 +2,6 @@ - - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - templates\AdminPages\AttachmentTypeAdmin.html.twig:4 - attachment_type.caption 附件类型 @@ -14,7 +9,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:12 new @@ -24,7 +18,6 @@ - Part-DB1\templates\AdminPages\AttachmentTypeAdmin.html.twig:16 new @@ -33,45 +26,18 @@ - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:22 - Part-DB1\templates\_sidebar.html.twig:7 - templates\AdminPages\CategoryAdmin.html.twig:4 - templates\base.html.twig:163 - templates\base.html.twig:170 - templates\base.html.twig:197 - templates\base.html.twig:225 - category.labelp 类别 - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:19 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:11 - templates\AdminPages\CategoryAdmin.html.twig:8 - admin.options 选项 - - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:9 - Part-DB1\templates\AdminPages\CompanyAdminBase.html.twig:15 - templates\AdminPages\CategoryAdmin.html.twig:9 - admin.advanced 高级 @@ -79,7 +45,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:13 new @@ -89,7 +54,6 @@ - Part-DB1\templates\AdminPages\CategoryAdmin.html.twig:17 new @@ -98,30 +62,18 @@ - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:4 - currency.caption 货币 - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:12 - currency.iso_code.caption 货币ISO代码 - - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:15 - currency.symbol.caption 货币符号 @@ -129,7 +81,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:29 new @@ -139,7 +90,6 @@ - Part-DB1\templates\AdminPages\CurrencyAdmin.html.twig:33 new @@ -149,7 +99,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:8 new @@ -159,7 +108,6 @@ - Part-DB1\templates\AdminPages\DeviceAdmin.html.twig:12 new @@ -168,89 +116,36 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:67 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:19 - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_sidebar.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:43 - Part-DB1\templates\_sidebar.html.twig:63 - templates\AdminPages\EntityAdminBase.html.twig:9 - templates\base.html.twig:80 - templates\base.html.twig:179 - templates\base.html.twig:206 - templates\base.html.twig:237 - search.placeholder 搜索 - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:23 - Part-DB1\templates\_sidebar.html.twig:3 - templates\AdminPages\EntityAdminBase.html.twig:13 - templates\base.html.twig:166 - templates\base.html.twig:193 - templates\base.html.twig:221 - expandAll 全部展开 - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:27 - Part-DB1\templates\_sidebar.html.twig:4 - templates\AdminPages\EntityAdminBase.html.twig:17 - templates\base.html.twig:167 - templates\base.html.twig:194 - templates\base.html.twig:222 - reduceAll 全部收起 - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:54 - Part-DB1\templates\Parts\info\_sidebar.html.twig:4 - part.info.timetravel_hint 在 %timestamp% 之前,部件是这样显示的。 <i>请注意,这是试验性功能,信息可能不正确。</i> - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:60 - templates\AdminPages\EntityAdminBase.html.twig:42 - standard.label 属性 - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:61 - templates\AdminPages\EntityAdminBase.html.twig:43 - infos.label 信息 @@ -258,8 +153,6 @@ - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:63 new @@ -268,120 +161,66 @@ - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:66 - templates\AdminPages\EntityAdminBase.html.twig:45 - export.label 导出 - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:68 - templates\AdminPages\EntityAdminBase.html.twig:47 - import_export.label 导入/导出 - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:69 - mass_creation.label 大量创建 - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:82 - templates\AdminPages\EntityAdminBase.html.twig:59 - admin.common 基本 - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:86 - admin.attachments 附件 - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:90 - admin.parameters 参数 - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:179 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:167 - templates\AdminPages\EntityAdminBase.html.twig:142 - export_all.label 导出所有元素 - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:185 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:173 - mass_creation.help 每一行将被解析为新建元素的名称。可以通过缩进创建嵌套元素。 - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:45 - templates\AdminPages\EntityAdminBase.html.twig:35 - edit.caption 编辑元素 "%name" - - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - Part-DB1\templates\AdminPages\EntityAdminBase.html.twig:50 - templates\AdminPages\EntityAdminBase.html.twig:37 - new.caption 新建元素 - - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:9 - templates\base.html.twig:172 - templates\base.html.twig:199 - templates\base.html.twig:227 - footprint.labelp 封装 @@ -389,7 +228,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:13 new @@ -399,7 +237,6 @@ - Part-DB1\templates\AdminPages\FootprintAdmin.html.twig:17 new @@ -408,22 +245,12 @@ - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:4 - group.edit.caption - - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:9 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:16 - user.edit.permissions 权限 @@ -431,7 +258,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:24 new @@ -441,7 +267,6 @@ - Part-DB1\templates\AdminPages\GroupAdmin.html.twig:28 new @@ -450,27 +275,18 @@ - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:4 - label_profile.caption 标签配置 - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:8 - label_profile.advanced 高级 - - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:9 - label_profile.comment 注释 @@ -478,7 +294,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:55 new @@ -488,7 +303,6 @@ - Part-DB1\templates\AdminPages\LabelProfileAdmin.html.twig:59 new @@ -497,11 +311,6 @@ - - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:4 - templates\AdminPages\ManufacturerAdmin.html.twig:4 - manufacturer.caption 制造商 @@ -509,7 +318,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:8 new @@ -519,7 +327,6 @@ - Part-DB1\templates\AdminPages\ManufacturerAdmin.html.twig:12 new @@ -528,10 +335,6 @@ - - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - Part-DB1\templates\AdminPages\MeasurementUnitAdmin.html.twig:4 - measurement_unit.caption 计量单位 @@ -544,15 +347,6 @@ - - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:5 - Part-DB1\templates\_sidebar.html.twig:8 - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:4 - Part-DB1\templates\_sidebar.html.twig:8 - templates\base.html.twig:171 - templates\base.html.twig:198 - templates\base.html.twig:226 - storelocation.labelp 储存位置 @@ -560,7 +354,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:32 new @@ -570,7 +363,6 @@ - Part-DB1\templates\AdminPages\StorelocationAdmin.html.twig:36 new @@ -580,7 +372,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:16 new @@ -590,7 +381,6 @@ - Part-DB1\templates\AdminPages\SupplierAdmin.html.twig:20 new @@ -599,120 +389,66 @@ - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:8 - user.edit.caption Users - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:14 - user.edit.configuration 配置 - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:15 - user.edit.password 密码 - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:45 - user.edit.tfa.caption 2FA身份验证 - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:47 - user.edit.tfa.google_active 身份验证器应用处于活动状态 - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:48 - Part-DB1\templates\Users\backup_codes.html.twig:15 - Part-DB1\templates\Users\_2fa_settings.html.twig:95 - tfa_backup.remaining_tokens 剩余备份代码计数 - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:49 - Part-DB1\templates\Users\backup_codes.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:96 - tfa_backup.generation_date 备份代码的生成日期 - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:53 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:60 - user.edit.tfa.disabled 方法未启用 - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:56 - user.edit.tfa.u2f_keys_count 主动安全密钥 - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_title 确定继续? - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:72 - user.edit.tfa.disable_tfa_message 这将禁用 <b>账号的所有活动2FA身份验证方法</b> 并删除 <b>备份代码</b>! @@ -722,10 +458,6 @@ - - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - Part-DB1\templates\AdminPages\UserAdmin.html.twig:73 - user.edit.tfa.disable_tfa.btn 禁用所有2FA身份验证方法 @@ -733,7 +465,6 @@ - Part-DB1\templates\AdminPages\UserAdmin.html.twig:85 new @@ -743,7 +474,6 @@ - Part-DB1\templates\AdminPages\UserAdmin.html.twig:89 new @@ -752,129 +482,60 @@ - - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\AdminPages\_attachments.html.twig:4 - Part-DB1\templates\Parts\edit\_attachments.html.twig:4 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:63 - attachment.delete 删除 - - Part-DB1\templates\AdminPages\_attachments.html.twig:41 - Part-DB1\templates\Parts\edit\_attachments.html.twig:38 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:35 - Part-DB1\src\DataTables\AttachmentDataTable.php:159 - Part-DB1\templates\Parts\edit\_attachments.html.twig:38 - Part-DB1\src\DataTables\AttachmentDataTable.php:159 - attachment.external 外部 - - Part-DB1\templates\AdminPages\_attachments.html.twig:49 - Part-DB1\templates\Parts\edit\_attachments.html.twig:47 - Part-DB1\templates\AdminPages\_attachments.html.twig:47 - Part-DB1\templates\Parts\edit\_attachments.html.twig:45 - attachment.preview.alt 附件缩略图 - - Part-DB1\templates\AdminPages\_attachments.html.twig:52 - Part-DB1\templates\Parts\edit\_attachments.html.twig:50 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 - Part-DB1\templates\AdminPages\_attachments.html.twig:50 - Part-DB1\templates\Parts\edit\_attachments.html.twig:48 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:45 - attachment.view 查看 - - Part-DB1\templates\AdminPages\_attachments.html.twig:58 - Part-DB1\templates\Parts\edit\_attachments.html.twig:56 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:43 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - Part-DB1\templates\AdminPages\_attachments.html.twig:56 - Part-DB1\templates\Parts\edit\_attachments.html.twig:54 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:38 - Part-DB1\src\DataTables\AttachmentDataTable.php:166 - attachment.file_not_found 文件未找到 - - Part-DB1\templates\AdminPages\_attachments.html.twig:66 - Part-DB1\templates\Parts\edit\_attachments.html.twig:64 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:48 - Part-DB1\templates\Parts\edit\_attachments.html.twig:62 - attachment.secure 私有附件 - - Part-DB1\templates\AdminPages\_attachments.html.twig:79 - Part-DB1\templates\Parts\edit\_attachments.html.twig:77 - Part-DB1\templates\AdminPages\_attachments.html.twig:77 - Part-DB1\templates\Parts\edit\_attachments.html.twig:75 - attachment.create 添加附件 - - Part-DB1\templates\AdminPages\_attachments.html.twig:84 - Part-DB1\templates\Parts\edit\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - Part-DB1\templates\AdminPages\_attachments.html.twig:82 - Part-DB1\templates\Parts\edit\_attachments.html.twig:80 - Part-DB1\templates\Parts\edit\_lots.html.twig:33 - part_lot.edit.delete.confirm 确认删除 该库存 ? 该操作不能被撤消 - - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - Part-DB1\templates\AdminPages\_delete_form.html.twig:2 - templates\AdminPages\_delete_form.html.twig:2 - entity.delete.confirm_title 确定删除 %name%? - - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - Part-DB1\templates\AdminPages\_delete_form.html.twig:3 - templates\AdminPages\_delete_form.html.twig:3 - entity.delete.message 该操作不能被撤销 @@ -883,11 +544,6 @@ - - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - Part-DB1\templates\AdminPages\_delete_form.html.twig:11 - templates\AdminPages\_delete_form.html.twig:9 - entity.delete Delete element @@ -895,12 +551,6 @@ - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:45 - Part-DB1\src\Form\Part\PartBaseType.php:286 - Part-DB1\templates\AdminPages\_delete_form.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:43 - Part-DB1\src\Form\Part\PartBaseType.php:267 new @@ -909,561 +559,300 @@ - - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - Part-DB1\templates\AdminPages\_delete_form.html.twig:24 - templates\AdminPages\_delete_form.html.twig:12 - entity.delete.recursive 递归删除(所有子元素) - - Part-DB1\templates\AdminPages\_duplicate.html.twig:3 - entity.duplicate 重复元素 - - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - Part-DB1\templates\AdminPages\_export_form.html.twig:4 - Part-DB1\src\Form\AdminPages\ImportType.php:76 - templates\AdminPages\_export_form.html.twig:4 - src\Form\ImportType.php:67 - export.format 文件格式 - - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - Part-DB1\templates\AdminPages\_export_form.html.twig:16 - templates\AdminPages\_export_form.html.twig:16 - export.level 详细程度 - - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - Part-DB1\templates\AdminPages\_export_form.html.twig:19 - templates\AdminPages\_export_form.html.twig:19 - export.level.simple 简单 - - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - Part-DB1\templates\AdminPages\_export_form.html.twig:20 - templates\AdminPages\_export_form.html.twig:20 - export.level.extended 扩展 - - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - Part-DB1\templates\AdminPages\_export_form.html.twig:21 - templates\AdminPages\_export_form.html.twig:21 - export.level.full 完全 - - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - Part-DB1\templates\AdminPages\_export_form.html.twig:31 - templates\AdminPages\_export_form.html.twig:31 - export.include_children 在导出中包含子元素 - - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - Part-DB1\templates\AdminPages\_export_form.html.twig:39 - templates\AdminPages\_export_form.html.twig:39 - export.btn 导出 - - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - Part-DB1\templates\AdminPages\_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:12 - Part-DB1\templates\Parts\info\show_part_info.html.twig:24 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:36 - templates\AdminPages\EntityAdminBase.html.twig:94 - templates\Parts\edit_part_info.html.twig:12 - templates\Parts\show_part_info.html.twig:11 - id.label ID - - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:76 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:77 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:77 - Part-DB1\templates\AdminPages\_info.html.twig:11 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:59 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:60 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:69 - Part-DB1\templates\Parts\info\_sidebar.html.twig:12 - Part-DB1\templates\Parts\lists\_info_card.html.twig:53 - templates\AdminPages\EntityAdminBase.html.twig:101 - templates\Parts\show_part_info.html.twig:248 - createdAt 创建于 - - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:73 - Part-DB1\templates\AdminPages\_info.html.twig:25 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:8 - Part-DB1\templates\Parts\lists\_info_card.html.twig:49 - templates\AdminPages\EntityAdminBase.html.twig:114 - templates\Parts\show_part_info.html.twig:263 - lastModified 上次修改 - - Part-DB1\templates\AdminPages\_info.html.twig:38 - Part-DB1\templates\AdminPages\_info.html.twig:38 - entity.info.parts_count 具有该元素的部件数量 - - Part-DB1\templates\AdminPages\_parameters.html.twig:6 - Part-DB1\templates\helper.twig:125 - Part-DB1\templates\Parts\edit\_specifications.html.twig:6 - specifications.property 参数 - - Part-DB1\templates\AdminPages\_parameters.html.twig:7 - Part-DB1\templates\Parts\edit\_specifications.html.twig:7 - specifications.symbol 符号 - - Part-DB1\templates\AdminPages\_parameters.html.twig:8 - Part-DB1\templates\Parts\edit\_specifications.html.twig:8 - specifications.value_min 最小. - - Part-DB1\templates\AdminPages\_parameters.html.twig:9 - Part-DB1\templates\Parts\edit\_specifications.html.twig:9 - specifications.value_typ 标称. - - Part-DB1\templates\AdminPages\_parameters.html.twig:10 - Part-DB1\templates\Parts\edit\_specifications.html.twig:10 - specifications.value_max 最大. - - Part-DB1\templates\AdminPages\_parameters.html.twig:11 - Part-DB1\templates\Parts\edit\_specifications.html.twig:11 - specifications.unit 单位 - - Part-DB1\templates\AdminPages\_parameters.html.twig:12 - Part-DB1\templates\Parts\edit\_specifications.html.twig:12 - specifications.text 文本 - - Part-DB1\templates\AdminPages\_parameters.html.twig:13 - Part-DB1\templates\Parts\edit\_specifications.html.twig:13 - specifications.group Group - - Part-DB1\templates\AdminPages\_parameters.html.twig:26 - Part-DB1\templates\Parts\edit\_specifications.html.twig:26 - specification.create 新建参数 - - Part-DB1\templates\AdminPages\_parameters.html.twig:31 - Part-DB1\templates\Parts\edit\_specifications.html.twig:31 - parameter.delete.confirm 确实删除该参数? - - Part-DB1\templates\attachment_list.html.twig:3 - Part-DB1\templates\attachment_list.html.twig:3 - attachment.list.title 附件列表 - - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - Part-DB1\templates\attachment_list.html.twig:10 - Part-DB1\templates\LogSystem\_log_table.html.twig:8 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:6 - part_list.loading.caption 加载中... - - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - Part-DB1\templates\attachment_list.html.twig:11 - Part-DB1\templates\LogSystem\_log_table.html.twig:9 - Part-DB1\templates\Parts\lists\_parts_list.html.twig:7 - part_list.loading.message 这可能需要一些时间。如果此消息没有消失,请尝试重新加载页面。 - - Part-DB1\templates\base.html.twig:68 - Part-DB1\templates\base.html.twig:68 - templates\base.html.twig:246 - vendor.base.javascript_hint 需要激活 Javascript 才能使用所有功能 - - Part-DB1\templates\base.html.twig:73 - Part-DB1\templates\base.html.twig:73 - sidebar.big.toggle 显示/隐藏 侧边栏 - - Part-DB1\templates\base.html.twig:95 - Part-DB1\templates\base.html.twig:95 - templates\base.html.twig:271 - loading.caption 加载中: - - Part-DB1\templates\base.html.twig:96 - Part-DB1\templates\base.html.twig:96 - templates\base.html.twig:272 - loading.message 这可能需要一段时间。如果此消息长时间存在,请尝试重新加载页面。 - - Part-DB1\templates\base.html.twig:101 - Part-DB1\templates\base.html.twig:101 - templates\base.html.twig:277 - loading.bar 加载中... - - Part-DB1\templates\base.html.twig:112 - Part-DB1\templates\base.html.twig:112 - templates\base.html.twig:288 - back_to_top 返回页面顶部 - - Part-DB1\templates\Form\permissionLayout.html.twig:35 - Part-DB1\templates\Form\permissionLayout.html.twig:35 - permission.edit.permission 权限 - - Part-DB1\templates\Form\permissionLayout.html.twig:36 - Part-DB1\templates\Form\permissionLayout.html.twig:36 - permission.edit.value 配置 - - Part-DB1\templates\Form\permissionLayout.html.twig:53 - Part-DB1\templates\Form\permissionLayout.html.twig:53 - permission.legend.title 状态说明 - - Part-DB1\templates\Form\permissionLayout.html.twig:57 - Part-DB1\templates\Form\permissionLayout.html.twig:57 - permission.legend.disallow 禁止 - - Part-DB1\templates\Form\permissionLayout.html.twig:61 - Part-DB1\templates\Form\permissionLayout.html.twig:61 - permission.legend.allow 允许 - - Part-DB1\templates\Form\permissionLayout.html.twig:65 - Part-DB1\templates\Form\permissionLayout.html.twig:65 - permission.legend.inherit 继承 - - Part-DB1\templates\helper.twig:3 - Part-DB1\templates\helper.twig:3 - bool.true TRUE - - Part-DB1\templates\helper.twig:5 - Part-DB1\templates\helper.twig:5 - bool.false FALSE - - Part-DB1\templates\helper.twig:92 - Part-DB1\templates\helper.twig:87 - Yes YES - - Part-DB1\templates\helper.twig:94 - Part-DB1\templates\helper.twig:89 - No NO - - Part-DB1\templates\helper.twig:126 - specifications.value - - Part-DB1\templates\homepage.html.twig:7 - Part-DB1\templates\homepage.html.twig:7 - templates\homepage.html.twig:7 - version.caption 版本 - - Part-DB1\templates\homepage.html.twig:22 - Part-DB1\templates\homepage.html.twig:22 - templates\homepage.html.twig:19 - homepage.license 许可信息 - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.caption 项目页面 - - Part-DB1\templates\homepage.html.twig:31 - Part-DB1\templates\homepage.html.twig:31 - templates\homepage.html.twig:28 - homepage.github.text 源代码、下载、错误报告、待办事项列表等可以在 <a href="%href%" class="link-external" target="_blank">项目仓库</a> 上找到。 - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.caption 帮助 - - Part-DB1\templates\homepage.html.twig:32 - Part-DB1\templates\homepage.html.twig:32 - templates\homepage.html.twig:29 - homepage.help.text 帮助和提示可以在 <a href="%href%" class="link-external" target="_blank">文档</a>中找到。 - - Part-DB1\templates\homepage.html.twig:33 - Part-DB1\templates\homepage.html.twig:33 - templates\homepage.html.twig:30 - homepage.forum.caption 论坛 @@ -1471,8 +860,6 @@ - Part-DB1\templates\homepage.html.twig:45 - Part-DB1\templates\homepage.html.twig:45 new @@ -1481,138 +868,90 @@ - - Part-DB1\templates\LabelSystem\dialog.html.twig:3 - Part-DB1\templates\LabelSystem\dialog.html.twig:6 - label_generator.title 标签生成器 - - Part-DB1\templates\LabelSystem\dialog.html.twig:16 - label_generator.common 基本 - - Part-DB1\templates\LabelSystem\dialog.html.twig:20 - label_generator.advanced 高级 - - Part-DB1\templates\LabelSystem\dialog.html.twig:24 - label_generator.profiles 标签配置 - - Part-DB1\templates\LabelSystem\dialog.html.twig:58 - label_generator.selected_profile 当前选择的配置 - - Part-DB1\templates\LabelSystem\dialog.html.twig:62 - label_generator.edit_profile 编辑配置 - - Part-DB1\templates\LabelSystem\dialog.html.twig:75 - label_generator.load_profile 载入配置 - - Part-DB1\templates\LabelSystem\dialog.html.twig:102 - label_generator.download 下载 - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:3 - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:5 - label_generator.label_btn 生成标签 - - Part-DB1\templates\LabelSystem\dropdown_macro.html.twig:20 - label_generator.label_empty 新建空标签 - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:3 - label_scanner.title 标签扫描器 - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.title 未找到摄像头 - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:7 - label_scanner.no_cam_found.text 您需要一个摄像头并授予权限。或在下面手动输入条形码。 - - Part-DB1\templates\LabelSystem\Scanner\dialog.html.twig:27 - label_scanner.source_select 选择源 - - Part-DB1\templates\LogSystem\log_list.html.twig:3 - Part-DB1\templates\LogSystem\log_list.html.twig:3 - log.list.title 系统日志 @@ -1620,8 +959,6 @@ - Part-DB1\templates\LogSystem\_log_table.html.twig:1 - Part-DB1\templates\LogSystem\_log_table.html.twig:1 new @@ -1631,8 +968,6 @@ - Part-DB1\templates\LogSystem\_log_table.html.twig:2 - Part-DB1\templates\LogSystem\_log_table.html.twig:2 new @@ -1641,194 +976,114 @@ - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.email_sent_by 这封电子邮件是自动发送的,由 - - Part-DB1\templates\mail\base.html.twig:24 - Part-DB1\templates\mail\base.html.twig:24 - mail.footer.dont_reply 不要回复此电子邮件。 - - Part-DB1\templates\mail\pw_reset.html.twig:6 - Part-DB1\templates\mail\pw_reset.html.twig:6 - email.hi %name% 你好 %name% - - Part-DB1\templates\mail\pw_reset.html.twig:7 - Part-DB1\templates\mail\pw_reset.html.twig:7 - email.pw_reset.message 有人请求重置您的密码。 如果此请求不是您提出的,请忽略此邮件。 - - Part-DB1\templates\mail\pw_reset.html.twig:9 - Part-DB1\templates\mail\pw_reset.html.twig:9 - email.pw_reset.button 单击此处重置密码 - - Part-DB1\templates\mail\pw_reset.html.twig:11 - Part-DB1\templates\mail\pw_reset.html.twig:11 - email.pw_reset.fallback 如果这对您不起作用,请转到 <a href="%url%">%url%</a> 并输入以下信息 - - Part-DB1\templates\mail\pw_reset.html.twig:16 - Part-DB1\templates\mail\pw_reset.html.twig:16 - email.pw_reset.username 用户名 - - Part-DB1\templates\mail\pw_reset.html.twig:19 - Part-DB1\templates\mail\pw_reset.html.twig:19 - email.pw_reset.token Token - - Part-DB1\templates\mail\pw_reset.html.twig:24 - Part-DB1\templates\mail\pw_reset.html.twig:24 - email.pw_reset.valid_unit %date% 重置令牌将在 <i>%date%</i> 之前有效。 - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:18 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:78 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:58 - orderdetail.delete Delete - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:39 - pricedetails.edit.min_qty 最低折扣数量 - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:40 - pricedetails.edit.price 价格 - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:41 - pricedetails.edit.price_qty 数量 - - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - Part-DB1\templates\Parts\edit\edit_form_styles.html.twig:54 - pricedetail.create 添加价格 - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:4 - templates\Parts\edit_part_info.html.twig:4 - part.edit.title 编辑部件 - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:9 - templates\Parts\edit_part_info.html.twig:9 - part.edit.card_title 编辑部件 - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:22 - part.edit.tab.common 基础 - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:28 - part.edit.tab.manufacturer 制造商 - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:34 - part.edit.tab.advanced 高级 @@ -1895,279 +1150,156 @@ - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:40 - part.edit.tab.part_lots 库存 - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:46 - part.edit.tab.attachments 附件 - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:52 - part.edit.tab.orderdetails 采购信息 - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.specifications 参数 - - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:64 - Part-DB1\templates\Parts\edit\edit_part_info.html.twig:58 - part.edit.tab.comment 注释 - - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - Part-DB1\templates\Parts\edit\new_part.html.twig:8 - templates\Parts\new_part.html.twig:8 - part.new.card_title 创建新部件 - - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - Part-DB1\templates\Parts\edit\_lots.html.twig:5 - part_lot.delete 删除 - - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - Part-DB1\templates\Parts\edit\_lots.html.twig:28 - part_lot.create 增加库存 - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:13 - orderdetail.create 添加经销商 - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:18 - pricedetails.edit.delete.confirm 确实删除此价格? 该操作不能被撤消 - - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:62 - Part-DB1\templates\Parts\edit\_orderdetails.html.twig:61 - orderdetails.edit.delete.confirm 确实要删除此经销商信息? 该操作不能被撤消 - - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - Part-DB1\templates\Parts\info\show_part_info.html.twig:4 - Part-DB1\templates\Parts\info\show_part_info.html.twig:19 - templates\Parts\show_part_info.html.twig:4 - templates\Parts\show_part_info.html.twig:9 - part.info.title 部件的详细信息 - - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - Part-DB1\templates\Parts\info\show_part_info.html.twig:47 - part.part_lots.label 库存 - - Part-DB1\templates\Parts\info\show_part_info.html.twig:56 - Part-DB1\templates\Parts\lists\_info_card.html.twig:43 - Part-DB1\templates\_navbar_search.html.twig:31 - Part-DB1\templates\_navbar_search.html.twig:26 - templates\base.html.twig:62 - templates\Parts\show_part_info.html.twig:74 - src\Form\PartType.php:86 - comment.label 注释 - - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - part.info.specifications 参数 - - Part-DB1\templates\Parts\info\show_part_info.html.twig:74 - Part-DB1\templates\Parts\info\show_part_info.html.twig:64 - templates\Parts\show_part_info.html.twig:82 - attachment.labelp 附件 - - Part-DB1\templates\Parts\info\show_part_info.html.twig:83 - Part-DB1\templates\Parts\info\show_part_info.html.twig:71 - templates\Parts\show_part_info.html.twig:88 - vendor.partinfo.shopping_infos 采购信息 - - Part-DB1\templates\Parts\info\show_part_info.html.twig:91 - Part-DB1\templates\Parts\info\show_part_info.html.twig:78 - templates\Parts\show_part_info.html.twig:94 - vendor.partinfo.history 历史 - - Part-DB1\templates\Parts\info\show_part_info.html.twig:97 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - Part-DB1\templates\Parts\info\show_part_info.html.twig:84 - Part-DB1\templates\_sidebar.html.twig:54 - Part-DB1\templates\_sidebar.html.twig:13 - templates\base.html.twig:176 - templates\base.html.twig:203 - templates\base.html.twig:217 - templates\base.html.twig:231 - templates\Parts\show_part_info.html.twig:100 - tools.label 工具 - - Part-DB1\templates\Parts\info\show_part_info.html.twig:103 - Part-DB1\templates\Parts\info\show_part_info.html.twig:90 - extended_info.label 扩展信息 - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:7 - attachment.name 名称 - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:8 - attachment.attachment_type 附件类型 - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:9 - attachment.file_name 文件名 - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:10 - attachment.file_size 文件大小 - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:54 - attachment.preview 预览图片 - - Part-DB1\templates\Parts\info\_attachments_info.html.twig:67 - Part-DB1\templates\Parts\info\_attachments_info.html.twig:50 - attachment.download 下载 @@ -2175,8 +1307,6 @@ - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:11 new @@ -2185,14 +1315,6 @@ - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:13 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:28 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:50 - Unknown 未知 @@ -2200,10 +1322,6 @@ - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:15 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:30 new @@ -2213,8 +1331,6 @@ - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:26 new @@ -2223,49 +1339,24 @@ - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:41 - part.isFavorite Favorite - - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - Part-DB1\templates\Parts\info\_extended_infos.html.twig:46 - part.minOrderAmount 最低订购量 - - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:46 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - Part-DB1\templates\Parts\info\_main_infos.html.twig:8 - Part-DB1\templates\_navbar_search.html.twig:41 - Part-DB1\src\Services\ElementTypeNameGenerator.php:84 - templates\base.html.twig:70 - templates\Parts\show_part_info.html.twig:24 - src\Form\PartType.php:80 - manufacturer.label 制造商 - - Part-DB1\templates\Parts\info\_main_infos.html.twig:24 - Part-DB1\templates\_navbar_search.html.twig:11 - templates\base.html.twig:54 - src\Form\PartType.php:62 - name.label 名称 @@ -2273,8 +1364,6 @@ - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 - Part-DB1\templates\Parts\info\_main_infos.html.twig:27 new @@ -2283,767 +1372,432 @@ - - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:19 - Part-DB1\templates\Parts\info\_main_infos.html.twig:32 - Part-DB1\templates\_navbar_search.html.twig:18 - templates\base.html.twig:58 - templates\Parts\show_part_info.html.twig:31 - src\Form\PartType.php:65 - description.label 描述 - - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:15 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - Part-DB1\templates\Parts\info\_main_infos.html.twig:34 - Part-DB1\templates\_navbar_search.html.twig:14 - Part-DB1\src\Services\ElementTypeNameGenerator.php:80 - templates\base.html.twig:56 - templates\Parts\show_part_info.html.twig:32 - src\Form\PartType.php:74 - category.label 类别 - - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - Part-DB1\templates\Parts\info\_main_infos.html.twig:39 - templates\Parts\show_part_info.html.twig:42 - src\Form\PartType.php:69 - instock.label 在库 - - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - Part-DB1\templates\Parts\info\_main_infos.html.twig:41 - templates\Parts\show_part_info.html.twig:44 - src\Form\PartType.php:72 - mininstock.label 最低库存 - - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:52 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - Part-DB1\templates\Parts\info\_main_infos.html.twig:45 - Part-DB1\templates\_navbar_search.html.twig:47 - Part-DB1\src\Services\ElementTypeNameGenerator.php:83 - templates\base.html.twig:73 - templates\Parts\show_part_info.html.twig:47 - footprint.label 封装 - - Part-DB1\templates\Parts\info\_main_infos.html.twig:56 - Part-DB1\templates\Parts\info\_main_infos.html.twig:59 - Part-DB1\templates\Parts\info\_main_infos.html.twig:57 - Part-DB1\templates\Parts\info\_main_infos.html.twig:60 - templates\Parts\show_part_info.html.twig:51 - part.avg_price.label 平均价格 - - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - Part-DB1\templates\Parts\info\_order_infos.html.twig:5 - part.supplier.name 名称 - - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - Part-DB1\templates\Parts\info\_order_infos.html.twig:6 - part.supplier.partnr 合作伙伴. - - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - Part-DB1\templates\Parts\info\_order_infos.html.twig:28 - part.order.minamount 最低数量 - - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - Part-DB1\templates\Parts\info\_order_infos.html.twig:29 - part.order.price 价格 - - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - Part-DB1\templates\Parts\info\_order_infos.html.twig:31 - part.order.single_price 单价 - - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - Part-DB1\templates\Parts\info\_part_lots.html.twig:6 - part_lots.description 描述 - - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - Part-DB1\templates\Parts\info\_part_lots.html.twig:7 - part_lots.storage_location 存储位置 - - Part-DB1\templates\Parts\info\_part_lots.html.twig:9 - Part-DB1\templates\Parts\info\_part_lots.html.twig:8 - part_lots.amount 数量 - - Part-DB1\templates\Parts\info\_part_lots.html.twig:24 - Part-DB1\templates\Parts\info\_part_lots.html.twig:22 - part_lots.location_unknown 存储位置未知 - - Part-DB1\templates\Parts\info\_part_lots.html.twig:31 - Part-DB1\templates\Parts\info\_part_lots.html.twig:29 - part_lots.instock_unknown 数量未知 - - Part-DB1\templates\Parts\info\_part_lots.html.twig:40 - Part-DB1\templates\Parts\info\_part_lots.html.twig:38 - part_lots.expiration_date 到期时间 - - Part-DB1\templates\Parts\info\_part_lots.html.twig:48 - Part-DB1\templates\Parts\info\_part_lots.html.twig:46 - part_lots.is_expired 已到期 - - Part-DB1\templates\Parts\info\_part_lots.html.twig:55 - Part-DB1\templates\Parts\info\_part_lots.html.twig:53 - part_lots.need_refill 需要补充 - - Part-DB1\templates\Parts\info\_picture.html.twig:15 - Part-DB1\templates\Parts\info\_picture.html.twig:15 - part.info.prev_picture 上一张图片 - - Part-DB1\templates\Parts\info\_picture.html.twig:19 - Part-DB1\templates\Parts\info\_picture.html.twig:19 - part.info.next_picture 下一张图片 - - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - Part-DB1\templates\Parts\info\_sidebar.html.twig:21 - part.mass.tooltip 重量 - - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - Part-DB1\templates\Parts\info\_sidebar.html.twig:30 - part.needs_review.badge 需要审查 - - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - Part-DB1\templates\Parts\info\_sidebar.html.twig:39 - part.favorite.badge 收藏 - - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - Part-DB1\templates\Parts\info\_sidebar.html.twig:47 - part.obsolete.badge 不再可用 - - Part-DB1\templates\Parts\info\_specifications.html.twig:10 - parameters.extracted_from_description 从描述中自动提取 - - Part-DB1\templates\Parts\info\_specifications.html.twig:15 - parameters.auto_extracted_from_comment 从注释中自动提取 - - Part-DB1\templates\Parts\info\_tools.html.twig:6 - Part-DB1\templates\Parts\info\_tools.html.twig:4 - templates\Parts\show_part_info.html.twig:125 - part.edit.btn 编辑部件 - - Part-DB1\templates\Parts\info\_tools.html.twig:16 - Part-DB1\templates\Parts\info\_tools.html.twig:14 - templates\Parts\show_part_info.html.twig:135 - part.clone.btn 克隆部件 - - Part-DB1\templates\Parts\info\_tools.html.twig:24 - Part-DB1\templates\Parts\lists\_action_bar.html.twig:4 - templates\Parts\show_part_info.html.twig:143 - part.create.btn 新建部件 - - Part-DB1\templates\Parts\info\_tools.html.twig:31 - Part-DB1\templates\Parts\info\_tools.html.twig:29 - part.delete.confirm_title 确定删除该部件? - - Part-DB1\templates\Parts\info\_tools.html.twig:32 - Part-DB1\templates\Parts\info\_tools.html.twig:30 - part.delete.message 此部件与它的任何相关信息(如附件、价格信息等)将被删除。 该操作不能被撤消 - - Part-DB1\templates\Parts\info\_tools.html.twig:39 - Part-DB1\templates\Parts\info\_tools.html.twig:37 - part.delete 删除部件 - - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - Part-DB1\templates\Parts\lists\all_list.html.twig:4 - parts_list.all.title 所有部件 - - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - Part-DB1\templates\Parts\lists\category_list.html.twig:4 - parts_list.category.title 部件(根据类别) - - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - Part-DB1\templates\Parts\lists\footprint_list.html.twig:4 - parts_list.footprint.title 部件(根据封装) - - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - Part-DB1\templates\Parts\lists\manufacturer_list.html.twig:4 - parts_list.manufacturer.title 部件(根据制造商) - - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - Part-DB1\templates\Parts\lists\search_list.html.twig:4 - parts_list.search.title 搜索部件 - - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - Part-DB1\templates\Parts\lists\store_location_list.html.twig:4 - parts_list.storelocation.title 部件(根据存储位置) - - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - Part-DB1\templates\Parts\lists\supplier_list.html.twig:4 - parts_list.supplier.title 部件(根据供应商) - - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - Part-DB1\templates\Parts\lists\tags_list.html.twig:4 - parts_list.tags.title 部件(根据标签) - - Part-DB1\templates\Parts\lists\_info_card.html.twig:22 - Part-DB1\templates\Parts\lists\_info_card.html.twig:17 - entity.info.common.tab 基本 - - Part-DB1\templates\Parts\lists\_info_card.html.twig:26 - Part-DB1\templates\Parts\lists\_info_card.html.twig:20 - entity.info.statistics.tab 统计数据 - - Part-DB1\templates\Parts\lists\_info_card.html.twig:31 - entity.info.attachments.tab 附件 - - Part-DB1\templates\Parts\lists\_info_card.html.twig:37 - entity.info.parameters.tab 参数 - - Part-DB1\templates\Parts\lists\_info_card.html.twig:54 - Part-DB1\templates\Parts\lists\_info_card.html.twig:30 - entity.info.name 名称 - - Part-DB1\templates\Parts\lists\_info_card.html.twig:58 - Part-DB1\templates\Parts\lists\_info_card.html.twig:96 - Part-DB1\templates\Parts\lists\_info_card.html.twig:34 - Part-DB1\templates\Parts\lists\_info_card.html.twig:67 - entity.info.parent 父元素 - - Part-DB1\templates\Parts\lists\_info_card.html.twig:70 - Part-DB1\templates\Parts\lists\_info_card.html.twig:46 - entity.edit.btn 编辑 - - Part-DB1\templates\Parts\lists\_info_card.html.twig:92 - Part-DB1\templates\Parts\lists\_info_card.html.twig:63 - entity.info.children_count 子元素计数 - - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - Part-DB1\templates\security\2fa_base_form.html.twig:3 - Part-DB1\templates\security\2fa_base_form.html.twig:5 - tfa.check.title 需要2FA身份验证 - - Part-DB1\templates\security\2fa_base_form.html.twig:39 - Part-DB1\templates\security\2fa_base_form.html.twig:39 - tfa.code.trusted_pc 这是受信任的计算机(如果启用此功能,则不会在此计算机上执行进一步的2FA查询) - - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - Part-DB1\templates\security\2fa_base_form.html.twig:52 - Part-DB1\templates\security\login.html.twig:58 - login.btn 登录 - - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:42 - Part-DB1\templates\security\2fa_base_form.html.twig:53 - Part-DB1\templates\security\U2F\u2f_login.html.twig:13 - Part-DB1\templates\_navbar.html.twig:40 - user.logout 注销 - - Part-DB1\templates\security\2fa_form.html.twig:6 - Part-DB1\templates\security\2fa_form.html.twig:6 - tfa.check.code.label 身份验证器应用代码 - - Part-DB1\templates\security\2fa_form.html.twig:10 - Part-DB1\templates\security\2fa_form.html.twig:10 - tfa.check.code.help 输入身份验证器应用中的6位代码,如果身份验证器不可用,请输入备用代码之一。 - - Part-DB1\templates\security\login.html.twig:3 - Part-DB1\templates\security\login.html.twig:3 - templates\security\login.html.twig:3 - login.title 登录 - - Part-DB1\templates\security\login.html.twig:7 - Part-DB1\templates\security\login.html.twig:7 - templates\security\login.html.twig:7 - login.card_title 登录 - - Part-DB1\templates\security\login.html.twig:31 - Part-DB1\templates\security\login.html.twig:31 - templates\security\login.html.twig:31 - login.username.label 用户名 - - Part-DB1\templates\security\login.html.twig:34 - Part-DB1\templates\security\login.html.twig:34 - templates\security\login.html.twig:34 - login.username.placeholder 用户名 - - Part-DB1\templates\security\login.html.twig:38 - Part-DB1\templates\security\login.html.twig:38 - templates\security\login.html.twig:38 - login.password.label 密码 - - Part-DB1\templates\security\login.html.twig:40 - Part-DB1\templates\security\login.html.twig:40 - templates\security\login.html.twig:40 - login.password.placeholder 密码 - - Part-DB1\templates\security\login.html.twig:50 - Part-DB1\templates\security\login.html.twig:50 - templates\security\login.html.twig:50 - login.rememberme 记住我(不应在公共计算机上使用) - - Part-DB1\templates\security\login.html.twig:64 - Part-DB1\templates\security\login.html.twig:64 - pw_reset.password_forget 忘记用户名/密码? - - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - Part-DB1\templates\security\pw_reset_new_pw.html.twig:5 - pw_reset.new_pw.header.title 设置新密码 - - Part-DB1\templates\security\pw_reset_request.html.twig:5 - Part-DB1\templates\security\pw_reset_request.html.twig:5 - pw_reset.request.header.title 要求新的密码 - - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - Part-DB1\templates\security\U2F\u2f_login.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:10 - tfa_u2f.http_warning 您正在使用不安全的 HTTP 方法访问此页面,因此 U2F 很可能无法工作(错误请求错误消息)。 如果您想使用安全密钥,请要求管理员设置安全 HTTPS 方法。 - - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - Part-DB1\templates\security\U2F\u2f_login.html.twig:10 - Part-DB1\templates\security\U2F\u2f_register.html.twig:22 - r_u2f_two_factor.pressbutton 请插入您的安全密钥并按下其按钮 - - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - Part-DB1\templates\security\U2F\u2f_register.html.twig:3 - tfa_u2f.add_key.title 添加安全密钥 - - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - Part-DB1\templates\security\U2F\u2f_register.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:111 - tfa_u2f.explanation 借助 U2F/FIDO 兼容的安全密钥(例如 YubiKey 或 NitroKey),可以实现用户友好且安全的2FA身份验证。 可以在此处注册安全密钥,如果需要两步验证,只需通过 USB 插入密钥或通过 NFC 在设备上输入密钥即可。 - - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - Part-DB1\templates\security\U2F\u2f_register.html.twig:7 - tfa_u2f.add_key.backup_hint 为了确保即使密钥丢失也能访问,建议注册第二个密钥作为备份并将其存放在安全的地方! - - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - Part-DB1\templates\security\U2F\u2f_register.html.twig:19 - tfa_u2f.add_key.add_button 添加安全密钥 - - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - Part-DB1\templates\security\U2F\u2f_register.html.twig:27 - tfa_u2f.add_key.back_to_settings 返回设置 @@ -3051,10 +1805,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 - Part-DB1\templates\Statistics\statistics.html.twig:5 - Part-DB1\templates\Statistics\statistics.html.twig:8 new @@ -3064,8 +1814,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:14 - Part-DB1\templates\Statistics\statistics.html.twig:14 new @@ -3075,8 +1823,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:19 - Part-DB1\templates\Statistics\statistics.html.twig:19 new @@ -3086,8 +1832,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:24 - Part-DB1\templates\Statistics\statistics.html.twig:24 new @@ -3097,12 +1841,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 - Part-DB1\templates\Statistics\statistics.html.twig:34 - Part-DB1\templates\Statistics\statistics.html.twig:59 - Part-DB1\templates\Statistics\statistics.html.twig:104 new @@ -3112,12 +1850,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 - Part-DB1\templates\Statistics\statistics.html.twig:35 - Part-DB1\templates\Statistics\statistics.html.twig:60 - Part-DB1\templates\Statistics\statistics.html.twig:105 new @@ -3127,8 +1859,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:40 - Part-DB1\templates\Statistics\statistics.html.twig:40 new @@ -3138,8 +1868,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:44 - Part-DB1\templates\Statistics\statistics.html.twig:44 new @@ -3149,8 +1877,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:48 - Part-DB1\templates\Statistics\statistics.html.twig:48 new @@ -3160,8 +1886,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:65 - Part-DB1\templates\Statistics\statistics.html.twig:65 new @@ -3171,8 +1895,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:69 - Part-DB1\templates\Statistics\statistics.html.twig:69 new @@ -3182,8 +1904,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:73 - Part-DB1\templates\Statistics\statistics.html.twig:73 new @@ -3193,8 +1913,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:77 - Part-DB1\templates\Statistics\statistics.html.twig:77 new @@ -3204,8 +1922,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:81 - Part-DB1\templates\Statistics\statistics.html.twig:81 new @@ -3215,8 +1931,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:85 - Part-DB1\templates\Statistics\statistics.html.twig:85 new @@ -3226,8 +1940,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:89 - Part-DB1\templates\Statistics\statistics.html.twig:89 new @@ -3237,8 +1949,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:93 - Part-DB1\templates\Statistics\statistics.html.twig:93 new @@ -3248,8 +1958,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:110 - Part-DB1\templates\Statistics\statistics.html.twig:110 new @@ -3259,8 +1967,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:114 - Part-DB1\templates\Statistics\statistics.html.twig:114 new @@ -3270,8 +1976,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:118 - Part-DB1\templates\Statistics\statistics.html.twig:118 new @@ -3281,8 +1985,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:122 - Part-DB1\templates\Statistics\statistics.html.twig:122 new @@ -3292,8 +1994,6 @@ - Part-DB1\templates\Statistics\statistics.html.twig:126 - Part-DB1\templates\Statistics\statistics.html.twig:126 new @@ -3302,302 +2002,156 @@ - - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - Part-DB1\templates\Users\backup_codes.html.twig:3 - Part-DB1\templates\Users\backup_codes.html.twig:9 - tfa_backup.codes.title 备份代码 - - Part-DB1\templates\Users\backup_codes.html.twig:12 - Part-DB1\templates\Users\backup_codes.html.twig:12 - tfa_backup.codes.explanation 打印这些代码并将其保存在安全的地方! - - Part-DB1\templates\Users\backup_codes.html.twig:13 - Part-DB1\templates\Users\backup_codes.html.twig:13 - tfa_backup.codes.help 如果您无法再使用身份验证器应用程序访问您的设备(智能手机丢失、数据丢失等),您可以使用这些代码之一来访问您的帐户,并可能设置一个新的身份验证器应用程序。 每个代码只能使用一次,建议删除已使用的代码。 有权访问这些代码的任何人都可能访问您的帐户,因此请将它们保存在安全的地方。 - - Part-DB1\templates\Users\backup_codes.html.twig:16 - Part-DB1\templates\Users\backup_codes.html.twig:16 - tfa_backup.username 用户名 - - Part-DB1\templates\Users\backup_codes.html.twig:29 - Part-DB1\templates\Users\backup_codes.html.twig:29 - tfa_backup.codes.page_generated_on 页面生成于 %date% - - Part-DB1\templates\Users\backup_codes.html.twig:32 - Part-DB1\templates\Users\backup_codes.html.twig:32 - tfa_backup.codes.print 打印 - - Part-DB1\templates\Users\backup_codes.html.twig:35 - Part-DB1\templates\Users\backup_codes.html.twig:35 - tfa_backup.codes.copy_clipboard 复制到剪贴板 - - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:40 - Part-DB1\templates\Users\user_info.html.twig:3 - Part-DB1\templates\Users\user_info.html.twig:6 - Part-DB1\templates\_navbar.html.twig:38 - templates\base.html.twig:99 - templates\Users\user_info.html.twig:3 - templates\Users\user_info.html.twig:6 - user.info.label 用户信息 - - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - Part-DB1\templates\Users\user_info.html.twig:18 - Part-DB1\src\Form\UserSettingsType.php:77 - templates\Users\user_info.html.twig:18 - src\Form\UserSettingsType.php:32 - user.firstName.label 名称 - - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - Part-DB1\templates\Users\user_info.html.twig:24 - Part-DB1\src\Form\UserSettingsType.php:82 - templates\Users\user_info.html.twig:24 - src\Form\UserSettingsType.php:35 - user.lastName.label 姓氏 - - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - Part-DB1\templates\Users\user_info.html.twig:30 - Part-DB1\src\Form\UserSettingsType.php:92 - templates\Users\user_info.html.twig:30 - src\Form\UserSettingsType.php:41 - user.email.label 邮件 - - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - Part-DB1\templates\Users\user_info.html.twig:37 - Part-DB1\src\Form\UserSettingsType.php:87 - templates\Users\user_info.html.twig:37 - src\Form\UserSettingsType.php:38 - user.department.label 部门 - - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - Part-DB1\templates\Users\user_info.html.twig:47 - Part-DB1\src\Form\UserSettingsType.php:73 - templates\Users\user_info.html.twig:47 - src\Form\UserSettingsType.php:30 - user.username.label 用户名 - - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - Part-DB1\templates\Users\user_info.html.twig:53 - Part-DB1\src\Services\ElementTypeNameGenerator.php:93 - templates\Users\user_info.html.twig:53 - group.label 组: - - Part-DB1\templates\Users\user_info.html.twig:67 - Part-DB1\templates\Users\user_info.html.twig:67 - user.permissions 权限 - - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:39 - Part-DB1\templates\Users\user_settings.html.twig:3 - Part-DB1\templates\Users\user_settings.html.twig:6 - Part-DB1\templates\_navbar.html.twig:37 - templates\base.html.twig:98 - templates\Users\user_settings.html.twig:3 - templates\Users\user_settings.html.twig:6 - user.settings.label 用户设置 - - Part-DB1\templates\Users\user_settings.html.twig:18 - Part-DB1\templates\Users\user_settings.html.twig:18 - templates\Users\user_settings.html.twig:14 - user_settings.data.label 个人资料 - - Part-DB1\templates\Users\user_settings.html.twig:22 - Part-DB1\templates\Users\user_settings.html.twig:22 - templates\Users\user_settings.html.twig:18 - user_settings.configuration.label 配置 - - Part-DB1\templates\Users\user_settings.html.twig:55 - Part-DB1\templates\Users\user_settings.html.twig:55 - templates\Users\user_settings.html.twig:48 - user.settings.change_pw 修改密码 - - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - Part-DB1\templates\Users\_2fa_settings.html.twig:6 - user.settings.2fa_settings 2FA身份验证 - - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - Part-DB1\templates\Users\_2fa_settings.html.twig:13 - tfa.settings.google.tab 验证器应用 - - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - Part-DB1\templates\Users\_2fa_settings.html.twig:17 - tfa.settings.bakup.tab 备份代码 - - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - Part-DB1\templates\Users\_2fa_settings.html.twig:21 - tfa.settings.u2f.tab 安全密钥 (U2F) - - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - Part-DB1\templates\Users\_2fa_settings.html.twig:25 - tfa.settings.trustedDevices.tab 可信设备 - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_title 确定禁用身份验证器应用? - - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - Part-DB1\templates\Users\_2fa_settings.html.twig:33 - tfa_google.disable.confirm_message 如果禁用验证器应用,所有备份代码将被删除。<br> @@ -3605,262 +2159,156 @@ - - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - Part-DB1\templates\Users\_2fa_settings.html.twig:39 - tfa_google.disabled_message 身份验证器应用已停用! - - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - Part-DB1\templates\Users\_2fa_settings.html.twig:48 - tfa_google.step.download 下载验证器应用(例如<a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Authenticator</a> oder <a class="link-external" target="_blank" href="https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp">FreeOTP Authenticator</a>) - - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - Part-DB1\templates\Users\_2fa_settings.html.twig:49 - tfa_google.step.scan 使用应用程序扫描二维码或手动输入数据 - - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - Part-DB1\templates\Users\_2fa_settings.html.twig:50 - tfa_google.step.input_code 在下方输入生成的代码并确认 - - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - Part-DB1\templates\Users\_2fa_settings.html.twig:51 - tfa_google.step.download_backup 打印备份代码并妥善保存 - - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - Part-DB1\templates\Users\_2fa_settings.html.twig:58 - tfa_google.manual_setup 手动设置 - - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - Part-DB1\templates\Users\_2fa_settings.html.twig:62 - tfa_google.manual_setup.type 类型 - - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - Part-DB1\templates\Users\_2fa_settings.html.twig:63 - tfa_google.manual_setup.username 用户名 - - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - Part-DB1\templates\Users\_2fa_settings.html.twig:64 - tfa_google.manual_setup.secret 保密 - - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - Part-DB1\templates\Users\_2fa_settings.html.twig:65 - tfa_google.manual_setup.digit_count 位数 - - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - Part-DB1\templates\Users\_2fa_settings.html.twig:74 - tfa_google.enabled_message 身份验证器应用已启用 - - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - Part-DB1\templates\Users\_2fa_settings.html.twig:83 - tfa_backup.disabled 备份代码已禁用。 设置验证器应用以启用备份代码。 - - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - Part-DB1\templates\Users\_2fa_settings.html.twig:84 - Part-DB1\templates\Users\_2fa_settings.html.twig:92 - tfa_backup.explanation 即使身份验证器应用设备丢失,也可以使用备份代码来访问帐户。 - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_title 确认重置备份代码? - - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - Part-DB1\templates\Users\_2fa_settings.html.twig:88 - tfa_backup.reset_codes.confirm_message 这将删除所有旧备份代码并生成新备份代码。操作不能被撤消。 - - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - Part-DB1\templates\Users\_2fa_settings.html.twig:91 - tfa_backup.enabled 备份代码已启用 - - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - Part-DB1\templates\Users\_2fa_settings.html.twig:99 - tfa_backup.show_codes 显示备份代码 - - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - Part-DB1\templates\Users\_2fa_settings.html.twig:114 - tfa_u2f.table_caption 已注册的安全密钥 - - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - Part-DB1\templates\Users\_2fa_settings.html.twig:115 - tfa_u2f.delete_u2f.confirm_title 确认删除安全密钥? - - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - Part-DB1\templates\Users\_2fa_settings.html.twig:116 - tfa_u2f.delete_u2f.confirm_message 如果删除此密钥,将无法再使用此密钥登录。如果没有可用的安全密钥,2FA身份验证将被禁用。 - - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - Part-DB1\templates\Users\_2fa_settings.html.twig:123 - tfa_u2f.keys.name 密钥名称 - - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - Part-DB1\templates\Users\_2fa_settings.html.twig:124 - tfa_u2f.keys.added_date 注册日期 - - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - Part-DB1\templates\Users\_2fa_settings.html.twig:134 - tfa_u2f.key_delete 删除密钥 - - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - Part-DB1\templates\Users\_2fa_settings.html.twig:141 - tfa_u2f.no_keys_registered 尚未注册密钥。 - - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - Part-DB1\templates\Users\_2fa_settings.html.twig:144 - tfa_u2f.add_new_key 注册新的安全密钥 - - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - Part-DB1\templates\Users\_2fa_settings.html.twig:148 - tfa_trustedDevices.explanation 在检查第二因素时,可以将当前计算机标记为可信,因此不再需要对此计算机进行2FA检查。 @@ -3868,326 +2316,168 @@ - - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - Part-DB1\templates\Users\_2fa_settings.html.twig:149 - tfa_trustedDevices.invalidate.confirm_title 确认删除所有受信任的计算机? - - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - Part-DB1\templates\Users\_2fa_settings.html.twig:150 - tfa_trustedDevices.invalidate.confirm_message 必须在所有计算机上再次执行2FA身份验证。确保有可用的身份验证器应用设备。 - - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - Part-DB1\templates\Users\_2fa_settings.html.twig:154 - tfa_trustedDevices.invalidate.btn 重置受信任设备 - - Part-DB1\templates\_navbar.html.twig:4 - Part-DB1\templates\_navbar.html.twig:4 - templates\base.html.twig:29 - sidebar.toggle 切换侧边栏 - - Part-DB1\templates\_navbar.html.twig:22 - navbar.scanner.link 扫描器 - - Part-DB1\templates\_navbar.html.twig:38 - Part-DB1\templates\_navbar.html.twig:36 - templates\base.html.twig:97 - user.loggedin.label 登录: - - Part-DB1\templates\_navbar.html.twig:44 - Part-DB1\templates\_navbar.html.twig:42 - templates\base.html.twig:103 - user.login 登录 - - Part-DB1\templates\_navbar.html.twig:50 - Part-DB1\templates\_navbar.html.twig:48 - ui.toggle_darkmode 暗色模式 - - Part-DB1\templates\_navbar.html.twig:54 - Part-DB1\src\Form\UserSettingsType.php:97 - Part-DB1\templates\_navbar.html.twig:52 - Part-DB1\src\Form\UserSettingsType.php:97 - templates\base.html.twig:106 - src\Form\UserSettingsType.php:44 - user.language_select 切换语言 - - Part-DB1\templates\_navbar_search.html.twig:4 - Part-DB1\templates\_navbar_search.html.twig:4 - templates\base.html.twig:49 - search.options.label 搜索选项 - - Part-DB1\templates\_navbar_search.html.twig:23 - tags.label 标签 - - Part-DB1\templates\_navbar_search.html.twig:27 - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - Part-DB1\src\Services\ElementTypeNameGenerator.php:88 - templates\base.html.twig:60 - templates\Parts\show_part_info.html.twig:36 - src\Form\PartType.php:77 - storelocation.label 存储位置 - - Part-DB1\templates\_navbar_search.html.twig:36 - Part-DB1\templates\_navbar_search.html.twig:31 - templates\base.html.twig:65 - ordernumber.label.short 供应商合作伙伴 - - Part-DB1\templates\_navbar_search.html.twig:40 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - Part-DB1\templates\_navbar_search.html.twig:35 - Part-DB1\src\Services\ElementTypeNameGenerator.php:89 - templates\base.html.twig:67 - supplier.label 供应商 - - Part-DB1\templates\_navbar_search.html.twig:61 - Part-DB1\templates\_navbar_search.html.twig:56 - templates\base.html.twig:77 - search.regexmatching 正则匹配 - - Part-DB1\templates\_sidebar.html.twig:37 - Part-DB1\templates\_sidebar.html.twig:12 - Part-DB1\templates\_sidebar.html.twig:37 - Part-DB1\templates\_sidebar.html.twig:12 - templates\base.html.twig:175 - templates\base.html.twig:189 - templates\base.html.twig:202 - templates\base.html.twig:230 - project.labelp 项目 - - Part-DB1\templates\_sidebar.html.twig:2 - Part-DB1\templates\_sidebar.html.twig:2 - templates\base.html.twig:165 - templates\base.html.twig:192 - templates\base.html.twig:220 - actions 操作 - - Part-DB1\templates\_sidebar.html.twig:6 - Part-DB1\templates\_sidebar.html.twig:6 - templates\base.html.twig:169 - templates\base.html.twig:196 - templates\base.html.twig:224 - datasource 数据源 - - Part-DB1\templates\_sidebar.html.twig:10 - Part-DB1\templates\_sidebar.html.twig:10 - templates\base.html.twig:173 - templates\base.html.twig:200 - templates\base.html.twig:228 - manufacturer.labelp 制造商 - - Part-DB1\templates\_sidebar.html.twig:11 - Part-DB1\templates\_sidebar.html.twig:11 - templates\base.html.twig:174 - templates\base.html.twig:201 - templates\base.html.twig:229 - supplier.labelp 供应商 - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:213 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:293 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:293 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:181 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:243 - Part-DB1\src\Controller\PartController.php:173 - Part-DB1\src\Controller\PartController.php:268 - attachment.download_failed 外部附件下载失败。 - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:222 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:190 - entity.edit_flash 更改保存成功。 - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:231 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:196 - entity.edit_flash.invalid 无法保存更改。请检查输入 - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:302 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:252 - entity.created_flash 元素已创建。 - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:308 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:258 - entity.created_flash.invalid 无法创建元素。请检查输入 - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:399 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:352 - src\Controller\BaseAdminController.php:154 - attachment_type.deleted 元素已删除。 - - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:401 - Part-DB1\src\Controller\UserController.php:109 - Part-DB1\src\Controller\UserSettingsController.php:159 - Part-DB1\src\Controller\UserSettingsController.php:193 - Part-DB1\src\Controller\AdminPages\BaseAdminController.php:354 - Part-DB1\src\Controller\UserController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:150 - Part-DB1\src\Controller\UserSettingsController.php:182 - csfr_invalid CSRF Token 无效。如果此消息仍然存在,请重新加载此页面或联系管理员。 - - Part-DB1\src\Controller\LabelController.php:125 - label_generator.no_entities_found 未找到匹配的实体。 @@ -4195,8 +2485,6 @@ - Part-DB1\src\Controller\LogController.php:149 - Part-DB1\src\Controller\LogController.php:154 new @@ -4206,8 +2494,6 @@ - Part-DB1\src\Controller\LogController.php:156 - Part-DB1\src\Controller\LogController.php:160 new @@ -4217,8 +2503,6 @@ - Part-DB1\src\Controller\LogController.php:176 - Part-DB1\src\Controller\LogController.php:180 new @@ -4228,8 +2512,6 @@ - Part-DB1\src\Controller\LogController.php:178 - Part-DB1\src\Controller\LogController.php:182 new @@ -4239,8 +2521,6 @@ - Part-DB1\src\Controller\LogController.php:185 - Part-DB1\src\Controller\LogController.php:189 new @@ -4250,8 +2530,6 @@ - Part-DB1\src\Controller\LogController.php:187 - Part-DB1\src\Controller\LogController.php:191 new @@ -4261,8 +2539,6 @@ - Part-DB1\src\Controller\LogController.php:194 - Part-DB1\src\Controller\LogController.php:198 new @@ -4272,8 +2548,6 @@ - Part-DB1\src\Controller\LogController.php:196 - Part-DB1\src\Controller\LogController.php:200 new @@ -4283,8 +2557,6 @@ - Part-DB1\src\Controller\LogController.php:199 - Part-DB1\src\Controller\LogController.php:203 new @@ -4293,306 +2565,168 @@ - - Part-DB1\src\Controller\PartController.php:182 - Part-DB1\src\Controller\PartController.php:182 - src\Controller\PartController.php:80 - part.edited_flash 已保存更改。 - - Part-DB1\src\Controller\PartController.php:216 - Part-DB1\src\Controller\PartController.php:219 - part.deleted 部件删除成功。 - - Part-DB1\src\Controller\PartController.php:302 - Part-DB1\src\Controller\PartController.php:277 - Part-DB1\src\Controller\PartController.php:317 - src\Controller\PartController.php:113 - src\Controller\PartController.php:142 - part.created_flash 部件已创建。 - - Part-DB1\src\Controller\PartController.php:308 - Part-DB1\src\Controller\PartController.php:283 - part.created_flash.invalid 创建过程中出错。请检查输入 - - Part-DB1\src\Controller\ScanController.php:68 - Part-DB1\src\Controller\ScanController.php:90 - scan.qr_not_found 未找到匹配条形码的元素。 - - Part-DB1\src\Controller\ScanController.php:71 - scan.format_unknown 格式未知。 - - Part-DB1\src\Controller\ScanController.php:86 - scan.qr_success 找到元素。 - - Part-DB1\src\Controller\SecurityController.php:114 - Part-DB1\src\Controller\SecurityController.php:109 - pw_reset.user_or_email 用户名或邮件 - - Part-DB1\src\Controller\SecurityController.php:131 - Part-DB1\src\Controller\SecurityController.php:126 - pw_reset.request.success 重置请求成功。请检查邮箱 - - Part-DB1\src\Controller\SecurityController.php:162 - Part-DB1\src\Controller\SecurityController.php:160 - pw_reset.username 用户名 - - Part-DB1\src\Controller\SecurityController.php:165 - Part-DB1\src\Controller\SecurityController.php:163 - pw_reset.token Token - - Part-DB1\src\Controller\SecurityController.php:194 - Part-DB1\src\Controller\SecurityController.php:192 - pw_reset.new_pw.error 用户名或Token无效。请检查输入 - - Part-DB1\src\Controller\SecurityController.php:196 - Part-DB1\src\Controller\SecurityController.php:194 - pw_reset.new_pw.success 密码重置成功。现在可以使用新密码登录。 - - Part-DB1\src\Controller\UserController.php:107 - Part-DB1\src\Controller\UserController.php:99 - user.edit.reset_success 成功禁用所有2FA身份验证。 - - Part-DB1\src\Controller\UserSettingsController.php:101 - Part-DB1\src\Controller\UserSettingsController.php:92 - tfa_backup.no_codes_enabled 未启用备份代码。 - - Part-DB1\src\Controller\UserSettingsController.php:138 - Part-DB1\src\Controller\UserSettingsController.php:132 - tfa_u2f.u2f_delete.not_existing 不存在此ID的安全密钥。 - - Part-DB1\src\Controller\UserSettingsController.php:145 - Part-DB1\src\Controller\UserSettingsController.php:139 - tfa_u2f.u2f_delete.access_denied 无法删除其他用户的安全密钥。 - - Part-DB1\src\Controller\UserSettingsController.php:153 - Part-DB1\src\Controller\UserSettingsController.php:147 - tfa.u2f.u2f_delete.success 成功删除安全密钥。 - - Part-DB1\src\Controller\UserSettingsController.php:188 - Part-DB1\src\Controller\UserSettingsController.php:180 - tfa_trustedDevice.invalidate.success 成功重置受信任设备。 - - Part-DB1\src\Controller\UserSettingsController.php:235 - Part-DB1\src\Controller\UserSettingsController.php:226 - src\Controller\UserController.php:98 - user.settings.saved_flash 设置已保存。 - - Part-DB1\src\Controller\UserSettingsController.php:297 - Part-DB1\src\Controller\UserSettingsController.php:288 - src\Controller\UserController.php:130 - user.settings.pw_changed_flash 密码已更改。 - - Part-DB1\src\Controller\UserSettingsController.php:317 - Part-DB1\src\Controller\UserSettingsController.php:306 - user.settings.2fa.google.activated 成功激活身份验证器应用。 - - Part-DB1\src\Controller\UserSettingsController.php:328 - Part-DB1\src\Controller\UserSettingsController.php:315 - user.settings.2fa.google.disabled 成功停用身份验证器应用。 - - Part-DB1\src\Controller\UserSettingsController.php:346 - Part-DB1\src\Controller\UserSettingsController.php:332 - user.settings.2fa.backup_codes.regenerated 成功生成新备份代码。 - - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - Part-DB1\src\DataTables\AttachmentDataTable.php:153 - attachment.table.filesize 文件大小 - - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:245 - Part-DB1\src\DataTables\PartsDataTable.php:252 - Part-DB1\src\DataTables\AttachmentDataTable.php:183 - Part-DB1\src\DataTables\AttachmentDataTable.php:191 - Part-DB1\src\DataTables\AttachmentDataTable.php:200 - Part-DB1\src\DataTables\AttachmentDataTable.php:209 - Part-DB1\src\DataTables\PartsDataTable.php:193 - Part-DB1\src\DataTables\PartsDataTable.php:200 - true TRUE - - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:246 - Part-DB1\src\DataTables\PartsDataTable.php:253 - Part-DB1\src\Form\Type\SIUnitType.php:139 - Part-DB1\src\DataTables\AttachmentDataTable.php:184 - Part-DB1\src\DataTables\AttachmentDataTable.php:192 - Part-DB1\src\DataTables\AttachmentDataTable.php:201 - Part-DB1\src\DataTables\AttachmentDataTable.php:210 - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:201 - Part-DB1\src\Form\Type\SIUnitType.php:139 - false FALSE - - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:128 - Part-DB1\src\DataTables\Column\LogEntryTargetColumn.php:119 - log.target_deleted 已删除 @@ -4600,8 +2734,6 @@ - Part-DB1\src\DataTables\Column\RevertLogColumn.php:57 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:60 new @@ -4611,8 +2743,6 @@ - Part-DB1\src\DataTables\Column\RevertLogColumn.php:63 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:66 new @@ -4622,8 +2752,6 @@ - Part-DB1\src\DataTables\Column\RevertLogColumn.php:83 - Part-DB1\src\DataTables\Column\RevertLogColumn.php:86 new @@ -4632,70 +2760,42 @@ - - Part-DB1\src\DataTables\LogDataTable.php:173 - Part-DB1\src\DataTables\LogDataTable.php:161 - log.id ID - - Part-DB1\src\DataTables\LogDataTable.php:178 - Part-DB1\src\DataTables\LogDataTable.php:166 - log.timestamp 时间戳 - - Part-DB1\src\DataTables\LogDataTable.php:183 - Part-DB1\src\DataTables\LogDataTable.php:171 - log.type 事件 - - Part-DB1\src\DataTables\LogDataTable.php:191 - Part-DB1\src\DataTables\LogDataTable.php:179 - log.level 等级 - - Part-DB1\src\DataTables\LogDataTable.php:200 - Part-DB1\src\DataTables\LogDataTable.php:188 - log.user 用户 - - Part-DB1\src\DataTables\LogDataTable.php:213 - Part-DB1\src\DataTables\LogDataTable.php:201 - log.target_type 目标类型 - - Part-DB1\src\DataTables\LogDataTable.php:226 - Part-DB1\src\DataTables\LogDataTable.php:214 - log.target 目标 @@ -4703,8 +2803,6 @@ - Part-DB1\src\DataTables\LogDataTable.php:231 - Part-DB1\src\DataTables\LogDataTable.php:218 new @@ -4713,100 +2811,60 @@ - - Part-DB1\src\DataTables\PartsDataTable.php:168 - Part-DB1\src\DataTables\PartsDataTable.php:116 - part.table.name 名称 - - Part-DB1\src\DataTables\PartsDataTable.php:178 - Part-DB1\src\DataTables\PartsDataTable.php:126 - part.table.id Id - - Part-DB1\src\DataTables\PartsDataTable.php:182 - Part-DB1\src\DataTables\PartsDataTable.php:130 - part.table.description 描述 - - Part-DB1\src\DataTables\PartsDataTable.php:185 - Part-DB1\src\DataTables\PartsDataTable.php:133 - part.table.category 类别 - - Part-DB1\src\DataTables\PartsDataTable.php:190 - Part-DB1\src\DataTables\PartsDataTable.php:138 - part.table.footprint 封装 - - Part-DB1\src\DataTables\PartsDataTable.php:194 - Part-DB1\src\DataTables\PartsDataTable.php:142 - part.table.manufacturer 制造商 - - Part-DB1\src\DataTables\PartsDataTable.php:197 - Part-DB1\src\DataTables\PartsDataTable.php:145 - part.table.storeLocations 储存地点 - - Part-DB1\src\DataTables\PartsDataTable.php:216 - Part-DB1\src\DataTables\PartsDataTable.php:164 - part.table.amount 数量 - - Part-DB1\src\DataTables\PartsDataTable.php:224 - Part-DB1\src\DataTables\PartsDataTable.php:172 - part.table.minamount 最小数量 - - Part-DB1\src\DataTables\PartsDataTable.php:232 - Part-DB1\src\DataTables\PartsDataTable.php:180 - part.table.partUnit 计量单位 @@ -4819,864 +2877,522 @@ - - Part-DB1\src\DataTables\PartsDataTable.php:236 - Part-DB1\src\DataTables\PartsDataTable.php:184 - part.table.addedDate 创建时间 - - Part-DB1\src\DataTables\PartsDataTable.php:240 - Part-DB1\src\DataTables\PartsDataTable.php:188 - part.table.lastModified 修改时间 - - Part-DB1\src\DataTables\PartsDataTable.php:244 - Part-DB1\src\DataTables\PartsDataTable.php:192 - part.table.needsReview 需要审查 - - Part-DB1\src\DataTables\PartsDataTable.php:251 - Part-DB1\src\DataTables\PartsDataTable.php:199 - part.table.favorite 收藏 - - Part-DB1\src\DataTables\PartsDataTable.php:258 - Part-DB1\src\DataTables\PartsDataTable.php:206 - part.table.manufacturingStatus 状态 - - Part-DB1\src\DataTables\PartsDataTable.php:260 - Part-DB1\src\DataTables\PartsDataTable.php:262 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:208 - Part-DB1\src\DataTables\PartsDataTable.php:210 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.unknown 未知 - - Part-DB1\src\DataTables\PartsDataTable.php:263 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:211 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.announced 公布 - - Part-DB1\src\DataTables\PartsDataTable.php:264 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.active 活动 - - Part-DB1\src\DataTables\PartsDataTable.php:265 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:213 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.nrfnd 不推荐用于新设计 - - Part-DB1\src\DataTables\PartsDataTable.php:266 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:214 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.eol 即将停产 - - Part-DB1\src\DataTables\PartsDataTable.php:267 - Part-DB1\src\Form\Part\PartBaseType.php:90 - Part-DB1\src\DataTables\PartsDataTable.php:215 - Part-DB1\src\Form\Part\PartBaseType.php:88 - m_status.discontinued 停产 - - Part-DB1\src\DataTables\PartsDataTable.php:271 - Part-DB1\src\DataTables\PartsDataTable.php:219 - part.table.mpn MPN - - Part-DB1\src\DataTables\PartsDataTable.php:275 - Part-DB1\src\DataTables\PartsDataTable.php:223 - part.table.mass 重量 - - Part-DB1\src\DataTables\PartsDataTable.php:279 - Part-DB1\src\DataTables\PartsDataTable.php:227 - part.table.tags 标签 - - Part-DB1\src\DataTables\PartsDataTable.php:283 - Part-DB1\src\DataTables\PartsDataTable.php:231 - part.table.attachments 附件 - - Part-DB1\src\EventSubscriber\UserSystem\LoginSuccessSubscriber.php:82 - Part-DB1\src\EventSubscriber\LoginSuccessListener.php:82 - flash.login_successful 登陆成功 - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - JSON JSON - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - XML XML - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - CSV CSV - - Part-DB1\src\Form\AdminPages\ImportType.php:77 - Part-DB1\src\Form\AdminPages\ImportType.php:77 - src\Form\ImportType.php:68 - YAML YAML - - Part-DB1\src\Form\AdminPages\ImportType.php:124 - Part-DB1\src\Form\AdminPages\ImportType.php:124 - import.abort_on_validation.help 遇到无效数据时停止导入 - - Part-DB1\src\Form\AdminPages\ImportType.php:86 - Part-DB1\src\Form\AdminPages\ImportType.php:86 - src\Form\ImportType.php:70 - import.csv_separator CSV分隔符 - - Part-DB1\src\Form\AdminPages\ImportType.php:93 - Part-DB1\src\Form\AdminPages\ImportType.php:93 - src\Form\ImportType.php:72 - parent.label 父元素 - - Part-DB1\src\Form\AdminPages\ImportType.php:101 - Part-DB1\src\Form\AdminPages\ImportType.php:101 - src\Form\ImportType.php:75 - import.file 文件 - - Part-DB1\src\Form\AdminPages\ImportType.php:111 - Part-DB1\src\Form\AdminPages\ImportType.php:111 - src\Form\ImportType.php:78 - import.preserve_children 导入时保留子元素 - - Part-DB1\src\Form\AdminPages\ImportType.php:120 - Part-DB1\src\Form\AdminPages\ImportType.php:120 - src\Form\ImportType.php:80 - import.abort_on_validation 遇到无效数据时中止 - - Part-DB1\src\Form\AdminPages\ImportType.php:132 - Part-DB1\src\Form\AdminPages\ImportType.php:132 - src\Form\ImportType.php:85 - import.btn 导入 - - Part-DB1\src\Form\AttachmentFormType.php:113 - Part-DB1\src\Form\AttachmentFormType.php:109 - attachment.edit.secure_file.help 私有附件只能通过授权的用户访问。私有附件不会生成缩略图,文件访问性能会降低。 - - Part-DB1\src\Form\AttachmentFormType.php:127 - Part-DB1\src\Form\AttachmentFormType.php:123 - attachment.edit.url.help 可以在此处指定外部文件的URL,或输入用于搜索内置资源的关键字 - - Part-DB1\src\Form\AttachmentFormType.php:82 - Part-DB1\src\Form\AttachmentFormType.php:79 - attachment.edit.name 名称 - - Part-DB1\src\Form\AttachmentFormType.php:85 - Part-DB1\src\Form\AttachmentFormType.php:82 - attachment.edit.attachment_type 附件类型 - - Part-DB1\src\Form\AttachmentFormType.php:94 - Part-DB1\src\Form\AttachmentFormType.php:91 - attachment.edit.show_in_table 显示在表中 - - Part-DB1\src\Form\AttachmentFormType.php:105 - Part-DB1\src\Form\AttachmentFormType.php:102 - attachment.edit.secure_file 私有附件 - - Part-DB1\src\Form\AttachmentFormType.php:119 - Part-DB1\src\Form\AttachmentFormType.php:115 - attachment.edit.url URL - - Part-DB1\src\Form\AttachmentFormType.php:133 - Part-DB1\src\Form\AttachmentFormType.php:129 - attachment.edit.download_url 下载外部文件 - - Part-DB1\src\Form\AttachmentFormType.php:146 - Part-DB1\src\Form\AttachmentFormType.php:142 - attachment.edit.file 上传文件 - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:86 - part.label 部件 - - Part-DB1\src\Form\LabelOptionsType.php:68 - Part-DB1\src\Services\ElementTypeNameGenerator.php:87 - part_lot.label 部件批次 - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.none - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.qr 二维码(推荐) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code128 Code 128(推荐) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code39 Code 39(推荐) - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.code93 Code 93 - - Part-DB1\src\Form\LabelOptionsType.php:78 - label_options.barcode_type.datamatrix 数据矩阵 - - Part-DB1\src\Form\LabelOptionsType.php:122 - label_options.lines_mode.html 占位符 - - Part-DB1\src\Form\LabelOptionsType.php:122 - label.options.lines_mode.twig Twig - - Part-DB1\src\Form\LabelOptionsType.php:126 - label_options.lines_mode.help 如果您在此处选择Twig,则内容字段将被解释为Twig模板。前往 <a href="https://twig.symfony.com/doc/3.x/templates.html">Twig文档</a> and <a href="https://docs.part-db.de/usage/labels.html#twig-mode">Wiki</a> 了解更多信息。 - - Part-DB1\src\Form\LabelOptionsType.php:47 - label_options.page_size.label Label size - - Part-DB1\src\Form\LabelOptionsType.php:66 - label_options.supported_elements.label 目标类型 - - Part-DB1\src\Form\LabelOptionsType.php:75 - label_options.barcode_type.label 条码 - - Part-DB1\src\Form\LabelOptionsType.php:102 - label_profile.lines.label 内容 - - Part-DB1\src\Form\LabelOptionsType.php:111 - label_options.additional_css.label 附加样式(CSS) - - Part-DB1\src\Form\LabelOptionsType.php:120 - label_options.lines_mode.label 解析器模式 - - Part-DB1\src\Form\LabelOptionsType.php:51 - label_options.width.placeholder 宽度 - - Part-DB1\src\Form\LabelOptionsType.php:60 - label_options.height.placeholder 高度 - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:49 - label_generator.target_id.range_hint 可以在此处指定多个ID(1、2、3 或 1-3) ,为多个元素生成标签。 - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:46 - label_generator.target_id.label 目标 ID - - Part-DB1\src\Form\LabelSystem\LabelDialogType.php:59 - label_generator.update Update - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:36 - scan_dialog.input 输入 - - Part-DB1\src\Form\LabelSystem\ScanDialogType.php:44 - scan_dialog.submit Submit - - Part-DB1\src\Form\ParameterType.php:41 - parameters.name.placeholder - - Part-DB1\src\Form\ParameterType.php:50 - parameters.symbol.placeholder - - Part-DB1\src\Form\ParameterType.php:60 - parameters.text.placeholder - - Part-DB1\src\Form\ParameterType.php:71 - parameters.max.placeholder - - Part-DB1\src\Form\ParameterType.php:82 - parameters.min.placeholder - - Part-DB1\src\Form\ParameterType.php:93 - parameters.typical.placeholder - - Part-DB1\src\Form\ParameterType.php:103 - parameters.unit.placeholder - - Part-DB1\src\Form\ParameterType.php:114 - parameter.group.placeholder - - Part-DB1\src\Form\Part\OrderdetailType.php:72 - Part-DB1\src\Form\Part\OrderdetailType.php:75 - orderdetails.edit.supplierpartnr 供应商部件号 - - Part-DB1\src\Form\Part\OrderdetailType.php:81 - Part-DB1\src\Form\Part\OrderdetailType.php:84 - orderdetails.edit.supplier 供应商 - - Part-DB1\src\Form\Part\OrderdetailType.php:87 - Part-DB1\src\Form\Part\OrderdetailType.php:90 - orderdetails.edit.url 供应商链接 - - Part-DB1\src\Form\Part\OrderdetailType.php:93 - Part-DB1\src\Form\Part\OrderdetailType.php:96 - orderdetails.edit.obsolete 不再可用 - - Part-DB1\src\Form\Part\OrderdetailType.php:75 - Part-DB1\src\Form\Part\OrderdetailType.php:78 - orderdetails.edit.supplierpartnr.placeholder - - Part-DB1\src\Form\Part\PartBaseType.php:101 - Part-DB1\src\Form\Part\PartBaseType.php:99 - part.edit.name 名称 - - Part-DB1\src\Form\Part\PartBaseType.php:109 - Part-DB1\src\Form\Part\PartBaseType.php:107 - part.edit.description 描述 - - Part-DB1\src\Form\Part\PartBaseType.php:120 - Part-DB1\src\Form\Part\PartBaseType.php:118 - part.edit.mininstock 最小库存 - - Part-DB1\src\Form\Part\PartBaseType.php:129 - Part-DB1\src\Form\Part\PartBaseType.php:127 - part.edit.category 类别 - - Part-DB1\src\Form\Part\PartBaseType.php:135 - Part-DB1\src\Form\Part\PartBaseType.php:133 - part.edit.footprint 封装 - - Part-DB1\src\Form\Part\PartBaseType.php:142 - Part-DB1\src\Form\Part\PartBaseType.php:140 - part.edit.tags 标签 - - Part-DB1\src\Form\Part\PartBaseType.php:154 - Part-DB1\src\Form\Part\PartBaseType.php:152 - part.edit.manufacturer.label 制造商 - - Part-DB1\src\Form\Part\PartBaseType.php:161 - Part-DB1\src\Form\Part\PartBaseType.php:159 - part.edit.manufacturer_url.label 制造商链接 - - Part-DB1\src\Form\Part\PartBaseType.php:167 - Part-DB1\src\Form\Part\PartBaseType.php:165 - part.edit.mpn 制造商部件号 - - Part-DB1\src\Form\Part\PartBaseType.php:173 - Part-DB1\src\Form\Part\PartBaseType.php:171 - part.edit.manufacturing_status 生产状态 - - Part-DB1\src\Form\Part\PartBaseType.php:181 - Part-DB1\src\Form\Part\PartBaseType.php:179 - part.edit.needs_review 需要审查 - - Part-DB1\src\Form\Part\PartBaseType.php:189 - Part-DB1\src\Form\Part\PartBaseType.php:187 - part.edit.is_favorite 收藏 - - Part-DB1\src\Form\Part\PartBaseType.php:197 - Part-DB1\src\Form\Part\PartBaseType.php:195 - part.edit.mass 重量 - - Part-DB1\src\Form\Part\PartBaseType.php:203 - Part-DB1\src\Form\Part\PartBaseType.php:201 - part.edit.partUnit 计量单位 @@ -5689,287 +3405,168 @@ - - Part-DB1\src\Form\Part\PartBaseType.php:212 - Part-DB1\src\Form\Part\PartBaseType.php:210 - part.edit.comment 注释 - - Part-DB1\src\Form\Part\PartBaseType.php:250 - Part-DB1\src\Form\Part\PartBaseType.php:246 - part.edit.master_attachment 预览图像 - - Part-DB1\src\Form\Part\PartBaseType.php:295 - Part-DB1\src\Form\Part\PartBaseType.php:276 - src\Form\PartType.php:91 - part.edit.save 保存更改 - - Part-DB1\src\Form\Part\PartBaseType.php:296 - Part-DB1\src\Form\Part\PartBaseType.php:277 - src\Form\PartType.php:92 - part.edit.reset 重置更改 - - Part-DB1\src\Form\Part\PartBaseType.php:105 - Part-DB1\src\Form\Part\PartBaseType.php:103 - part.edit.name.placeholder - - Part-DB1\src\Form\Part\PartBaseType.php:115 - Part-DB1\src\Form\Part\PartBaseType.php:113 - part.edit.description.placeholder - - Part-DB1\src\Form\Part\PartBaseType.php:123 - Part-DB1\src\Form\Part\PartBaseType.php:121 - part.editmininstock.placeholder - - Part-DB1\src\Form\Part\PartLotType.php:69 - Part-DB1\src\Form\Part\PartLotType.php:69 - part_lot.edit.description 描述 - - Part-DB1\src\Form\Part\PartLotType.php:78 - Part-DB1\src\Form\Part\PartLotType.php:78 - part_lot.edit.location 存储位置 - - Part-DB1\src\Form\Part\PartLotType.php:89 - Part-DB1\src\Form\Part\PartLotType.php:89 - part_lot.edit.amount 数量 - - Part-DB1\src\Form\Part\PartLotType.php:98 - Part-DB1\src\Form\Part\PartLotType.php:97 - part_lot.edit.instock_unknown 数量未知 - - Part-DB1\src\Form\Part\PartLotType.php:109 - Part-DB1\src\Form\Part\PartLotType.php:108 - part_lot.edit.needs_refill 需要补充 - - Part-DB1\src\Form\Part\PartLotType.php:120 - Part-DB1\src\Form\Part\PartLotType.php:119 - part_lot.edit.expiration_date 有效期 - - Part-DB1\src\Form\Part\PartLotType.php:128 - Part-DB1\src\Form\Part\PartLotType.php:125 - part_lot.edit.comment 注释 - - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - Part-DB1\src\Form\Permissions\PermissionsType.php:99 - perm.group.other 杂项 - - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - Part-DB1\src\Form\TFAGoogleSettingsType.php:97 - tfa_google.enable 启用验证器应用 - - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - Part-DB1\src\Form\TFAGoogleSettingsType.php:101 - tfa_google.disable 停用验证器应用 - - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - Part-DB1\src\Form\TFAGoogleSettingsType.php:74 - google_confirmation 验证码 - - Part-DB1\src\Form\UserSettingsType.php:108 - Part-DB1\src\Form\UserSettingsType.php:108 - src\Form\UserSettingsType.php:46 - user.timezone.label 时区 - - Part-DB1\src\Form\UserSettingsType.php:133 - Part-DB1\src\Form\UserSettingsType.php:132 - user.currency.label 首选货币 - - Part-DB1\src\Form\UserSettingsType.php:140 - Part-DB1\src\Form\UserSettingsType.php:139 - src\Form\UserSettingsType.php:53 - save 应用更改 - - Part-DB1\src\Form\UserSettingsType.php:141 - Part-DB1\src\Form\UserSettingsType.php:140 - src\Form\UserSettingsType.php:54 - reset 放弃更改 - - Part-DB1\src\Form\UserSettingsType.php:104 - Part-DB1\src\Form\UserSettingsType.php:104 - src\Form\UserSettingsType.php:45 - user_settings.language.placeholder 默认语言 - - Part-DB1\src\Form\UserSettingsType.php:115 - Part-DB1\src\Form\UserSettingsType.php:115 - src\Form\UserSettingsType.php:48 - user_settings.timezone.placeholder 默认时区 - - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - Part-DB1\src\Services\ElementTypeNameGenerator.php:79 - attachment.label 附件 - - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - Part-DB1\src\Services\ElementTypeNameGenerator.php:81 - attachment_type.label 附件类型 - - Part-DB1\src\Services\ElementTypeNameGenerator.php:82 - Part-DB1\src\Services\ElementTypeNameGenerator.php:82 - project.label 项目 - - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - Part-DB1\src\Services\ElementTypeNameGenerator.php:85 - measurement_unit.label 计量单位 @@ -5982,58 +3579,36 @@ - - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - Part-DB1\src\Services\ElementTypeNameGenerator.php:90 - currency.label 货币 - - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - Part-DB1\src\Services\ElementTypeNameGenerator.php:91 - orderdetail.label 订单详情 - - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - Part-DB1\src\Services\ElementTypeNameGenerator.php:92 - pricedetail.label 价格详情 - - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - Part-DB1\src\Services\ElementTypeNameGenerator.php:94 - user.label 用户 - - Part-DB1\src\Services\ElementTypeNameGenerator.php:95 - parameter.label 参数 - - Part-DB1\src\Services\ElementTypeNameGenerator.php:96 - label_profile.label 标签配置 @@ -6041,8 +3616,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:176 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:161 new @@ -6051,174 +3624,102 @@ - - Part-DB1\src\Services\MarkdownParser.php:73 - Part-DB1\src\Services\MarkdownParser.php:73 - markdown.loading 正在加载 Markdown。如果此消息没有消失,请尝试重新加载页面。 - - Part-DB1\src\Services\PasswordResetManager.php:98 - Part-DB1\src\Services\PasswordResetManager.php:98 - pw_reset.email.subject 重置密码 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - tree.tools.tools 工具 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:107 - src\Services\ToolsTreeBuilder.php:74 - tree.tools.edit 编辑 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:110 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:108 - src\Services\ToolsTreeBuilder.php:81 - tree.tools.show 统计 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:111 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:109 - tree.tools.system 系统 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:123 - tree.tools.tools.label_dialog 标签生成器 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:130 - tree.tools.tools.label_scanner 扫描器 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:149 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:126 - src\Services\ToolsTreeBuilder.php:62 - tree.tools.edit.attachment_types 附件类型 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:155 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:132 - src\Services\ToolsTreeBuilder.php:64 - tree.tools.edit.categories 类别 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:161 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:138 - src\Services\ToolsTreeBuilder.php:66 - tree.tools.edit.projects 项目 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:167 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:144 - src\Services\ToolsTreeBuilder.php:68 - tree.tools.edit.suppliers 供应商 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:173 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:150 - src\Services\ToolsTreeBuilder.php:70 - tree.tools.edit.manufacturer 制造商 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:179 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:156 - tree.tools.edit.storelocation 储存位置 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:185 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:162 - tree.tools.edit.footprint 封装 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:191 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:168 - tree.tools.edit.currency 货币 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:174 - tree.tools.edit.measurement_unit 计量单位 @@ -6231,40 +3732,24 @@ - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.edit.label_profile 标签配置 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:209 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:180 - tree.tools.edit.part 新建部件 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:226 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:197 - src\Services\ToolsTreeBuilder.php:77 - tree.tools.show.all_parts 所有部件 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:232 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:203 - tree.tools.show.all_attachments 所有附件 @@ -6272,8 +3757,6 @@ - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:239 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:210 new @@ -6282,20 +3765,12 @@ - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:258 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:229 - tree.tools.system.users 用户 - - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:264 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:235 - tree.tools.system.groups @@ -6303,8 +3778,6 @@ - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:271 - Part-DB1\src\Services\Trees\ToolsTreeBuilder.php:242 new @@ -6313,11 +3786,6 @@ - - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - Part-DB1\src\Services\Trees\TreeViewGenerator.php:95 - src\Services\TreeBuilder.php:124 - entity.tree.new 新建 @@ -6325,7 +3793,6 @@ - Part-DB1\templates\Parts\info\_attachments_info.html.twig:62 obsolete @@ -6335,8 +3802,6 @@ - Part-DB1\templates\_navbar.html.twig:27 - templates\base.html.twig:88 obsolete @@ -6346,8 +3811,6 @@ - Part-DB1\src\Form\UserSettingsType.php:119 - src\Form\UserSettingsType.php:49 obsolete @@ -6357,8 +3820,6 @@ - Part-DB1\src\Form\UserSettingsType.php:129 - src\Form\UserSettingsType.php:50 obsolete @@ -6368,7 +3829,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:100 new obsolete @@ -6379,10 +3839,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:128 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:150 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:169 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:207 new obsolete @@ -6393,10 +3849,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:130 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:152 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:171 - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:209 new obsolete @@ -6407,7 +3859,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:139 new obsolete @@ -6418,7 +3869,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:160 new obsolete @@ -6429,7 +3879,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:184 new obsolete @@ -6440,7 +3889,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:198 new obsolete @@ -6451,7 +3899,6 @@ - Part-DB1\src\Services\LogSystem\LogEntryExtraFormatter.php:214 new obsolete @@ -6462,7 +3909,6 @@ - templates\base.html.twig:81 obsolete obsolete @@ -6473,7 +3919,6 @@ - templates\base.html.twig:109 obsolete obsolete @@ -6484,7 +3929,6 @@ - templates\base.html.twig:112 obsolete obsolete @@ -6775,7 +4219,6 @@ - src\Form\PartType.php:63 obsolete obsolete @@ -7447,7 +4890,6 @@ Element 3 - templates\Parts\show_part_info.html.twig:194 obsolete obsolete @@ -7458,7 +4900,6 @@ Element 3 - src\Form\PartType.php:83 obsolete obsolete @@ -12146,4 +9587,4 @@ Element 3 - + \ No newline at end of file diff --git a/translations/security.cs.xlf b/translations/security.cs.xlf index 4e9570c2..59de9f9f 100644 --- a/translations/security.cs.xlf +++ b/translations/security.cs.xlf @@ -20,4 +20,4 @@ - + \ No newline at end of file diff --git a/translations/security.da.xlf b/translations/security.da.xlf index ab35c605..99329533 100644 --- a/translations/security.da.xlf +++ b/translations/security.da.xlf @@ -20,4 +20,4 @@ - + \ No newline at end of file diff --git a/translations/security.de.xlf b/translations/security.de.xlf index 927f8f9c..2a357094 100644 --- a/translations/security.de.xlf +++ b/translations/security.de.xlf @@ -20,4 +20,4 @@ - + \ No newline at end of file diff --git a/translations/security.el.xlf b/translations/security.el.xlf index 9ab60206..fb14dc50 100644 --- a/translations/security.el.xlf +++ b/translations/security.el.xlf @@ -8,4 +8,4 @@ - + \ No newline at end of file diff --git a/translations/security.en.xlf b/translations/security.en.xlf index 0b0b4569..5a79d6ec 100644 --- a/translations/security.en.xlf +++ b/translations/security.en.xlf @@ -20,4 +20,4 @@ - + \ No newline at end of file diff --git a/translations/security.es.xlf b/translations/security.es.xlf index e9baee3d..163e6a1a 100644 --- a/translations/security.es.xlf +++ b/translations/security.es.xlf @@ -20,4 +20,4 @@ - + \ No newline at end of file diff --git a/translations/security.fr.xlf b/translations/security.fr.xlf index 334f9c21..9e40b8bf 100644 --- a/translations/security.fr.xlf +++ b/translations/security.fr.xlf @@ -20,4 +20,4 @@ - + \ No newline at end of file diff --git a/translations/security.hr.xlf b/translations/security.hr.xlf index 46664730..be52f241 100644 --- a/translations/security.hr.xlf +++ b/translations/security.hr.xlf @@ -14,4 +14,4 @@ - + \ No newline at end of file diff --git a/translations/security.hu.xlf b/translations/security.hu.xlf index 7c448da0..3c885815 100644 --- a/translations/security.hu.xlf +++ b/translations/security.hu.xlf @@ -20,4 +20,4 @@ - + \ No newline at end of file diff --git a/translations/security.it.xlf b/translations/security.it.xlf index 9200458c..b75de148 100644 --- a/translations/security.it.xlf +++ b/translations/security.it.xlf @@ -20,4 +20,4 @@ - + \ No newline at end of file diff --git a/translations/security.ja.xlf b/translations/security.ja.xlf index 8e496e9e..8e31057f 100644 --- a/translations/security.ja.xlf +++ b/translations/security.ja.xlf @@ -8,4 +8,4 @@ - + \ No newline at end of file diff --git a/translations/security.nl.xlf b/translations/security.nl.xlf index 7ba9fcc1..0e4ecc41 100644 --- a/translations/security.nl.xlf +++ b/translations/security.nl.xlf @@ -20,4 +20,4 @@ - + \ No newline at end of file diff --git a/translations/security.pl.xlf b/translations/security.pl.xlf index 2ae0f64b..14e8652b 100644 --- a/translations/security.pl.xlf +++ b/translations/security.pl.xlf @@ -20,4 +20,4 @@ - + \ No newline at end of file diff --git a/translations/security.ru.xlf b/translations/security.ru.xlf index ebd29669..b506b2fc 100644 --- a/translations/security.ru.xlf +++ b/translations/security.ru.xlf @@ -20,4 +20,4 @@ - + \ No newline at end of file diff --git a/translations/security.uk.xlf b/translations/security.uk.xlf index 12737cf3..03be9410 100644 --- a/translations/security.uk.xlf +++ b/translations/security.uk.xlf @@ -20,4 +20,4 @@ - + \ No newline at end of file diff --git a/translations/security.vi.xlf b/translations/security.vi.xlf index de4647bf..c5c46e84 100644 --- a/translations/security.vi.xlf +++ b/translations/security.vi.xlf @@ -14,4 +14,4 @@ - + \ No newline at end of file diff --git a/translations/security.zh.xlf b/translations/security.zh.xlf index 58fbb26f..181c9c0f 100644 --- a/translations/security.zh.xlf +++ b/translations/security.zh.xlf @@ -20,4 +20,4 @@ - + \ No newline at end of file diff --git a/translations/validators.cs.xlf b/translations/validators.cs.xlf index c298266a..5a1c723f 100644 --- a/translations/validators.cs.xlf +++ b/translations/validators.cs.xlf @@ -2,166 +2,42 @@ - - Part-DB1\src\Entity\Attachments\AttachmentContainingDBElement.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\LabelSystem\LabelProfile.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - part.master_attachment.must_be_picture Příloha náhledu musí být platný obrázek! - - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - src\Entity\AttachmentType.php:0 - src\Entity\Category.php:0 - src\Entity\Company.php:0 - src\Entity\Device.php:0 - src\Entity\Footprint.php:0 - src\Entity\Group.php:0 - src\Entity\Manufacturer.php:0 - src\Entity\PartsContainingDBElement.php:0 - src\Entity\Storelocation.php:0 - src\Entity\StructuralDBElement.php:0 - src\Entity\Supplier.php:0 - structural.entity.unique_name Prvek s tímto názvem již na této úrovni existuje! - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_typical Hodnota musí být menší nebo rovna typické hodnotě ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_max Hodnota musí být menší než maximální hodnota ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.max_greater_typical Hodnota musí být větší nebo rovna typické hodnotě ({{ compared_value }}). - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - validator.user.username_already_used Uživatel s tímto jménem již existuje - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - user.invalid_username Uživatelské jméno musí obsahovat pouze písmena, číslice, podtržítka, tečky, plusy nebo mínusy! @@ -366,4 +242,4 @@ - + \ No newline at end of file diff --git a/translations/validators.da.xlf b/translations/validators.da.xlf index fac84f4c..e7379173 100644 --- a/translations/validators.da.xlf +++ b/translations/validators.da.xlf @@ -2,166 +2,42 @@ - - Part-DB1\src\Entity\Attachments\AttachmentContainingDBElement.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\LabelSystem\LabelProfile.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - part.master_attachment.must_be_picture Forhåndsvisnings-bilaget skal være et rigtigt billede! - - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - src\Entity\AttachmentType.php:0 - src\Entity\Category.php:0 - src\Entity\Company.php:0 - src\Entity\Device.php:0 - src\Entity\Footprint.php:0 - src\Entity\Group.php:0 - src\Entity\Manufacturer.php:0 - src\Entity\PartsContainingDBElement.php:0 - src\Entity\Storelocation.php:0 - src\Entity\StructuralDBElement.php:0 - src\Entity\Supplier.php:0 - structural.entity.unique_name Der eksisterer allerede et element med dette navn på dette niveau! - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_typical Værdi skal være mindre end eller lig med den typiske værdi ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_max Værdi skal være mindre end maksumumværdien ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.max_greater_typical Værdi skal være større eller lig med den typiske værdi ({{ compared_value }}). - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - validator.user.username_already_used Der eksisterer allerede en bruger med dette navn - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - user.invalid_username Brugernavn skal må kun indeholde bogstager, tal, understregningstegn, punktummer, plusser og minusser! @@ -372,4 +248,4 @@ - + \ No newline at end of file diff --git a/translations/validators.de.xlf b/translations/validators.de.xlf index 1cc7c00f..17dc1641 100644 --- a/translations/validators.de.xlf +++ b/translations/validators.de.xlf @@ -2,166 +2,42 @@ - - Part-DB1\src\Entity\Attachments\AttachmentContainingDBElement.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\LabelSystem\LabelProfile.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - part.master_attachment.must_be_picture Der Vorschauanhang muss ein gültiges Bild sein! - - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - src\Entity\AttachmentType.php:0 - src\Entity\Category.php:0 - src\Entity\Company.php:0 - src\Entity\Device.php:0 - src\Entity\Footprint.php:0 - src\Entity\Group.php:0 - src\Entity\Manufacturer.php:0 - src\Entity\PartsContainingDBElement.php:0 - src\Entity\Storelocation.php:0 - src\Entity\StructuralDBElement.php:0 - src\Entity\Supplier.php:0 - structural.entity.unique_name Es kann auf jeder Ebene nur ein Objekt mit dem gleichem Namen geben! - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_typical Wert muss kleiner oder gleich als der typische Wert sein ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_max Wert muss kleiner als der Maximalwert sein ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.max_greater_typical Wert muss größer oder gleich dem typischen Wert sein ({{ compared_value }}). - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - validator.user.username_already_used Es existiert bereits ein Benutzer mit diesem Namen. - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - user.invalid_username Der Benutzername darf nur Buchstaben, Zahlen, Unterstriche, Punkte, Plus- oder Minuszeichen enthalten und darf nicht mit einem @ beginnen. @@ -372,4 +248,4 @@ - + \ No newline at end of file diff --git a/translations/validators.el.xlf b/translations/validators.el.xlf index 9ef5b3de..c4f1d8b1 100644 --- a/translations/validators.el.xlf +++ b/translations/validators.el.xlf @@ -8,4 +8,4 @@ - + \ No newline at end of file diff --git a/translations/validators.en.xlf b/translations/validators.en.xlf index c1d6f6b8..e2e70d03 100644 --- a/translations/validators.en.xlf +++ b/translations/validators.en.xlf @@ -2,166 +2,42 @@ - - Part-DB1\src\Entity\Attachments\AttachmentContainingDBElement.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\LabelSystem\LabelProfile.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - part.master_attachment.must_be_picture The preview attachment must be a valid picture! - - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - src\Entity\AttachmentType.php:0 - src\Entity\Category.php:0 - src\Entity\Company.php:0 - src\Entity\Device.php:0 - src\Entity\Footprint.php:0 - src\Entity\Group.php:0 - src\Entity\Manufacturer.php:0 - src\Entity\PartsContainingDBElement.php:0 - src\Entity\Storelocation.php:0 - src\Entity\StructuralDBElement.php:0 - src\Entity\Supplier.php:0 - structural.entity.unique_name An element with this name already exists on this level! - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_typical Value must be less than or equal to the typical value ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_max Value must be less than the maximum value ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.max_greater_typical Value must be greater than or equal to the typical value ({{ compared_value }}). - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - validator.user.username_already_used A user with this name already exists - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - user.invalid_username The username must contain only letters, numbers, underscores, dots, pluses or minuses and must not begin with an @! @@ -372,4 +248,4 @@ - + \ No newline at end of file diff --git a/translations/validators.fr.xlf b/translations/validators.fr.xlf index 45c992c0..ac1ea192 100644 --- a/translations/validators.fr.xlf +++ b/translations/validators.fr.xlf @@ -2,166 +2,42 @@ - - Part-DB1\src\Entity\Attachments\AttachmentContainingDBElement.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\LabelSystem\LabelProfile.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - part.master_attachment.must_be_picture La pièce jointe de l'aperçu doit être une image valide ! - - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - src\Entity\AttachmentType.php:0 - src\Entity\Category.php:0 - src\Entity\Company.php:0 - src\Entity\Device.php:0 - src\Entity\Footprint.php:0 - src\Entity\Group.php:0 - src\Entity\Manufacturer.php:0 - src\Entity\PartsContainingDBElement.php:0 - src\Entity\Storelocation.php:0 - src\Entity\StructuralDBElement.php:0 - src\Entity\Supplier.php:0 - structural.entity.unique_name Un élément portant ce nom existe déjà à ce niveau ! - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_typical La valeur doit être inférieure ou égale à la valeur type ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_max La valeur doit être inférieure à la valeur maximale ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.max_greater_typical La valeur doit être supérieure ou égale à la valeur type ({{ compared_value)}}. - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - validator.user.username_already_used Un utilisateur portant ce nom existe déjà - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - user.invalid_username Le nom d'utilisateur ne doit contenir que des lettres, des chiffres, des traits de soulignement, des points, des plus ou des moins. @@ -366,4 +242,4 @@ - + \ No newline at end of file diff --git a/translations/validators.hr.xlf b/translations/validators.hr.xlf index 29e32a16..1effea8d 100644 --- a/translations/validators.hr.xlf +++ b/translations/validators.hr.xlf @@ -2,166 +2,42 @@ - - Part-DB1\src\Entity\Attachments\AttachmentContainingDBElement.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\LabelSystem\LabelProfile.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - part.master_attachment.must_be_picture Pretpregledna fotografija mora biti validna fotografija! - - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - src\Entity\AttachmentType.php:0 - src\Entity\Category.php:0 - src\Entity\Company.php:0 - src\Entity\Device.php:0 - src\Entity\Footprint.php:0 - src\Entity\Group.php:0 - src\Entity\Manufacturer.php:0 - src\Entity\PartsContainingDBElement.php:0 - src\Entity\Storelocation.php:0 - src\Entity\StructuralDBElement.php:0 - src\Entity\Supplier.php:0 - structural.entity.unique_name Element s ovim nazivom već postoji! - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_typical Vrijednost mora biti manja ili jednaka od tipične vrijednosti ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_max Vrijednost mora biti manja od maksimalne vrijednosti ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.max_greater_typical Vrijednost mora biti veća ili jednaka od tipične vrijednosti ({{ compared_value }}). - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - validator.user.username_already_used Korisnik s ovim imenom već postoji. - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - user.invalid_username Korisničko ime mora sadržavati samo slova, brojeve, donje crte, točke, pluseve ili minuse! @@ -360,4 +236,4 @@ - + \ No newline at end of file diff --git a/translations/validators.hu.xlf b/translations/validators.hu.xlf index 58d2e66b..b70a3761 100644 --- a/translations/validators.hu.xlf +++ b/translations/validators.hu.xlf @@ -2,166 +2,42 @@ - - Part-DB1\src\Entity\Attachments\AttachmentContainingDBElement.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\LabelSystem\LabelProfile.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - part.master_attachment.must_be_picture Az előnézeti mellékletnek érvényes képnek kell lennie! - - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - src\Entity\AttachmentType.php:0 - src\Entity\Category.php:0 - src\Entity\Company.php:0 - src\Entity\Device.php:0 - src\Entity\Footprint.php:0 - src\Entity\Group.php:0 - src\Entity\Manufacturer.php:0 - src\Entity\PartsContainingDBElement.php:0 - src\Entity\Storelocation.php:0 - src\Entity\StructuralDBElement.php:0 - src\Entity\Supplier.php:0 - structural.entity.unique_name Egy elem ezzel a névvel már létezik ezen a szinten! - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_typical Az értéknek kisebbnek vagy egyenlőnek kell lennie a tipikus értékkel ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_max Az értéknek kisebbnek kell lennie a maximális értéknél ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.max_greater_typical Az értéknek nagyobbnak vagy egyenlőnek kell lennie a tipikus értéknél ({{ compared_value }}). - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - validator.user.username_already_used Egy felhasználó ezzel a névvel már létezik - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - user.invalid_username A felhasználónév csak betűket, számokat, aláhúzásokat, pontokat, pluszokat vagy mínuszokat tartalmazhat és nem kezdődhet @ jellel! @@ -366,4 +242,4 @@ - + \ No newline at end of file diff --git a/translations/validators.it.xlf b/translations/validators.it.xlf index 7043f4f3..ee13b814 100644 --- a/translations/validators.it.xlf +++ b/translations/validators.it.xlf @@ -2,166 +2,42 @@ - - Part-DB1\src\Entity\Attachments\AttachmentContainingDBElement.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\LabelSystem\LabelProfile.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - part.master_attachment.must_be_picture L'anteprima di un allegato deve essere un'immagine valida! - - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - src\Entity\AttachmentType.php:0 - src\Entity\Category.php:0 - src\Entity\Company.php:0 - src\Entity\Device.php:0 - src\Entity\Footprint.php:0 - src\Entity\Group.php:0 - src\Entity\Manufacturer.php:0 - src\Entity\PartsContainingDBElement.php:0 - src\Entity\Storelocation.php:0 - src\Entity\StructuralDBElement.php:0 - src\Entity\Supplier.php:0 - structural.entity.unique_name Un elemento con questo nome esiste già a questo livello! - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_typical Il valore deve essere inferiore o uguale al valore tipico ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_max Il valore deve essere inferiore al valore massimo ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.max_greater_typical Il valore deve essere maggiore o uguale al valore tipico ({{ compared_value }}). - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - validator.user.username_already_used Esiste già un utente con questo nome - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - user.invalid_username Il nome utente deve contenere solo lettere, numeri, trattini bassi, punti, più o meno! @@ -360,4 +236,4 @@ - + \ No newline at end of file diff --git a/translations/validators.ja.xlf b/translations/validators.ja.xlf index 01cc3f77..c72b8441 100644 --- a/translations/validators.ja.xlf +++ b/translations/validators.ja.xlf @@ -2,166 +2,42 @@ - - Part-DB1\src\Entity\Attachments\AttachmentContainingDBElement.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\LabelSystem\LabelProfile.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - part.master_attachment.must_be_picture プレビュー用の添付ファイルは有効な画像ファイルである必要があります。 - - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - src\Entity\AttachmentType.php:0 - src\Entity\Category.php:0 - src\Entity\Company.php:0 - src\Entity\Device.php:0 - src\Entity\Footprint.php:0 - src\Entity\Group.php:0 - src\Entity\Manufacturer.php:0 - src\Entity\PartsContainingDBElement.php:0 - src\Entity\Storelocation.php:0 - src\Entity\StructuralDBElement.php:0 - src\Entity\Supplier.php:0 - structural.entity.unique_name 同じレベルにすでにこの名前を持つ要素があります。 - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_typical 値は標準値 ({{ compared_value }}) 以下である必要があります。 - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_max 値は最大値 ({{ compared_value }}) 未満である必要があります。 - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.max_greater_typical 値は標準値 ({{ compared_value }}) 以上である必要があります。 - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - validator.user.username_already_used 同じ名前のユーザーがすでに存在します。 - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - user.invalid_username ユーザー名にはアルファベット・数字・アンダースコア・ドット・プラス・マイナスのみを使用できます。 @@ -204,4 +80,4 @@ - + \ No newline at end of file diff --git a/translations/validators.nl.xlf b/translations/validators.nl.xlf index 91b5e26f..c2815002 100644 --- a/translations/validators.nl.xlf +++ b/translations/validators.nl.xlf @@ -2,166 +2,42 @@ - - Part-DB1\src\Entity\Attachments\AttachmentContainingDBElement.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\LabelSystem\LabelProfile.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - part.master_attachment.must_be_picture De voorbeeldbijlage moet een geldige afbeelding zijn! - - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - src\Entity\AttachmentType.php:0 - src\Entity\Category.php:0 - src\Entity\Company.php:0 - src\Entity\Device.php:0 - src\Entity\Footprint.php:0 - src\Entity\Group.php:0 - src\Entity\Manufacturer.php:0 - src\Entity\PartsContainingDBElement.php:0 - src\Entity\Storelocation.php:0 - src\Entity\StructuralDBElement.php:0 - src\Entity\Supplier.php:0 - structural.entity.unique_name Een element met deze naam bestaat al op dit niveau! - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_typical Waarde moet minder dan of gelijk zijn aan de typische waarde ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_max Waarde moet minder zijn dan de maximale waarde ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.max_greater_typical Waarde moet groter of gelijk zijn aan de typische waarde ({{ compared_value }}). - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - validator.user.username_already_used Een gebruiker met deze naam bestaat al - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - user.invalid_username De gebruikersnaam mag alleen letters, nummers, underscores, puntjes, plusjes of minnen bevatten en mag niet beginnen met een @! @@ -366,4 +242,4 @@ - + \ No newline at end of file diff --git a/translations/validators.pl.xlf b/translations/validators.pl.xlf index 6c997798..03942667 100644 --- a/translations/validators.pl.xlf +++ b/translations/validators.pl.xlf @@ -2,166 +2,42 @@ - - Part-DB1\src\Entity\Attachments\AttachmentContainingDBElement.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\LabelSystem\LabelProfile.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - part.master_attachment.must_be_picture Załącznik podglądowy musi zawierać prawidłowe zdjęcie! - - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - src\Entity\AttachmentType.php:0 - src\Entity\Category.php:0 - src\Entity\Company.php:0 - src\Entity\Device.php:0 - src\Entity\Footprint.php:0 - src\Entity\Group.php:0 - src\Entity\Manufacturer.php:0 - src\Entity\PartsContainingDBElement.php:0 - src\Entity\Storelocation.php:0 - src\Entity\StructuralDBElement.php:0 - src\Entity\Supplier.php:0 - structural.entity.unique_name Element o tej nazwie już istnieje na tym poziomie! - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_typical Wartość musi być mniejsza lub równa wartości nominalnej ({{compare_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_max Wartość musi być mniejsza niż wartość maksymalna ({{ compare_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.max_greater_typical Wartość musi być większa lub równa wartości nominalnej ({{ compare_value }}). - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - validator.user.username_already_used Użytkownik o tej nazwie już istnieje - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - user.invalid_username Nazwa użytkownika może zawierać wyłącznie litery, cyfry, podkreślenia, kropki, plusy i minusy! @@ -360,4 +236,4 @@ - + \ No newline at end of file diff --git a/translations/validators.ru.xlf b/translations/validators.ru.xlf index 0f97c478..5ed1278d 100644 --- a/translations/validators.ru.xlf +++ b/translations/validators.ru.xlf @@ -2,166 +2,42 @@ - - Part-DB1\src\Entity\Attachments\AttachmentContainingDBElement.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\LabelSystem\LabelProfile.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - part.master_attachment.must_be_picture Предварительный просмотр возможен только для картинок! - - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - src\Entity\AttachmentType.php:0 - src\Entity\Category.php:0 - src\Entity\Company.php:0 - src\Entity\Device.php:0 - src\Entity\Footprint.php:0 - src\Entity\Group.php:0 - src\Entity\Manufacturer.php:0 - src\Entity\PartsContainingDBElement.php:0 - src\Entity\Storelocation.php:0 - src\Entity\StructuralDBElement.php:0 - src\Entity\Supplier.php:0 - structural.entity.unique_name Элемент с таким именем уже существует на данном уровне! - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_typical Значение должно быть меньше или равно типичного значения ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_max Значение должно быть меньше максимального значения ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.max_greater_typical Значение должно быть больше или равно типичного значения ({{ compared_value }}). - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - validator.user.username_already_used Пользователь с таким именем уже существует - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - user.invalid_username Имя пользователя должно содержать только буквы, цифры, знак подчеркивания, знаки препинания, плюс и минус. @@ -360,4 +236,4 @@ - + \ No newline at end of file diff --git a/translations/validators.uk.xlf b/translations/validators.uk.xlf index 3f14daeb..a4eee60d 100644 --- a/translations/validators.uk.xlf +++ b/translations/validators.uk.xlf @@ -2,166 +2,42 @@ - - Part-DB1\src\Entity\Attachments\AttachmentContainingDBElement.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\LabelSystem\LabelProfile.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - part.master_attachment.must_be_picture Вкладення для попереднього перегляду має бути коректним зображенням! - - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - src\Entity\AttachmentType.php:0 - src\Entity\Category.php:0 - src\Entity\Company.php:0 - src\Entity\Device.php:0 - src\Entity\Footprint.php:0 - src\Entity\Group.php:0 - src\Entity\Manufacturer.php:0 - src\Entity\PartsContainingDBElement.php:0 - src\Entity\Storelocation.php:0 - src\Entity\StructuralDBElement.php:0 - src\Entity\Supplier.php:0 - structural.entity.unique_name Елемент із такою назвою вже існує на цьому рівні! - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_typical Значення має бути меншим або рівним типовому значенню ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_max Значення має бути меншим за максимальне значення ({{ compared_value }}). - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.max_greater_typical Значення має бути більшим або рівним типовому значенню ({{ compared_value }}). - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - validator.user.username_already_used Користувач із таким ім'ям вже існує - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - user.invalid_username Ім'я користувача має містити лише літери, цифри, підкреслення, крапки, знаки плюс або мінус і не може починатися з @! @@ -372,4 +248,4 @@ - + \ No newline at end of file diff --git a/translations/validators.zh.xlf b/translations/validators.zh.xlf index 90775edf..8e3e50a9 100644 --- a/translations/validators.zh.xlf +++ b/translations/validators.zh.xlf @@ -2,166 +2,42 @@ - - Part-DB1\src\Entity\Attachments\AttachmentContainingDBElement.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\LabelSystem\LabelProfile.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Part.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - part.master_attachment.must_be_picture 预览附件必须是有效的图片 - - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - Part-DB1\src\Entity\Attachments\AttachmentType.php:0 - Part-DB1\src\Entity\Base\AbstractCompany.php:0 - Part-DB1\src\Entity\Base\AbstractPartsContainingDBElement.php:0 - Part-DB1\src\Entity\Base\AbstractStructuralDBElement.php:0 - Part-DB1\src\Entity\Devices\Device.php:0 - Part-DB1\src\Entity\Parts\Category.php:0 - Part-DB1\src\Entity\Parts\Footprint.php:0 - Part-DB1\src\Entity\Parts\Manufacturer.php:0 - Part-DB1\src\Entity\Parts\MeasurementUnit.php:0 - Part-DB1\src\Entity\Parts\Storelocation.php:0 - Part-DB1\src\Entity\Parts\Supplier.php:0 - Part-DB1\src\Entity\PriceInformations\Currency.php:0 - Part-DB1\src\Entity\UserSystem\Group.php:0 - src\Entity\AttachmentType.php:0 - src\Entity\Category.php:0 - src\Entity\Company.php:0 - src\Entity\Device.php:0 - src\Entity\Footprint.php:0 - src\Entity\Group.php:0 - src\Entity\Manufacturer.php:0 - src\Entity\PartsContainingDBElement.php:0 - src\Entity\Storelocation.php:0 - src\Entity\StructuralDBElement.php:0 - src\Entity\Supplier.php:0 - structural.entity.unique_name 相同层下已存在同名元素 - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_typical 值必须小于或等于标称值 ({{compare_value}})。 - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.min_lesser_max 值必须小于最大值 ({{compare_value}})。 - - Part-DB1\src\Entity\Parameters\AbstractParameter.php:0 - Part-DB1\src\Entity\Parameters\AttachmentTypeParameter.php:0 - Part-DB1\src\Entity\Parameters\CategoryParameter.php:0 - Part-DB1\src\Entity\Parameters\CurrencyParameter.php:0 - Part-DB1\src\Entity\Parameters\DeviceParameter.php:0 - Part-DB1\src\Entity\Parameters\FootprintParameter.php:0 - Part-DB1\src\Entity\Parameters\GroupParameter.php:0 - Part-DB1\src\Entity\Parameters\ManufacturerParameter.php:0 - Part-DB1\src\Entity\Parameters\MeasurementUnitParameter.php:0 - Part-DB1\src\Entity\Parameters\PartParameter.php:0 - Part-DB1\src\Entity\Parameters\StorelocationParameter.php:0 - Part-DB1\src\Entity\Parameters\SupplierParameter.php:0 - parameters.validator.max_greater_typical 值必须大于或等于标称值 ({{compare_value}})。 - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - validator.user.username_already_used 已存在同名用户 - - Part-DB1\src\Entity\UserSystem\User.php:0 - Part-DB1\src\Entity\UserSystem\User.php:0 - user.invalid_username 用户名只能包含字母、数字、下划线、点、加号或减号。 @@ -372,4 +248,4 @@ - + \ No newline at end of file From cae0cd8ac101f77ac15262a769f26768c6e1e98f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 7 Feb 2026 19:07:37 +0100 Subject: [PATCH 087/172] Bumped version to 2.6.0 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 8f87ff7d..e70b4523 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.6.0-dev +2.6.0 From c2a51e57b7cdda52be7896bd530d5a1ebcf41058 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 7 Feb 2026 19:14:35 +0100 Subject: [PATCH 088/172] New Crowdin updates (#1227) * New translations security.en.xlf (French) * New translations security.en.xlf (Spanish) * New translations security.en.xlf (Czech) * New translations security.en.xlf (Italian) * New translations security.en.xlf (Polish) * New translations security.en.xlf (Russian) * New translations frontend.en.xlf (French) * New translations frontend.en.xlf (Spanish) * New translations frontend.en.xlf (Czech) * New translations frontend.en.xlf (Italian) * New translations frontend.en.xlf (Polish) * New translations frontend.en.xlf (Russian) --- translations/frontend.cs.xlf | 94 ++++++++++++++++++------------------ translations/frontend.es.xlf | 94 ++++++++++++++++++------------------ translations/frontend.fr.xlf | 74 ++++++++++++++++++++-------- translations/frontend.it.xlf | 94 ++++++++++++++++++------------------ translations/frontend.pl.xlf | 94 ++++++++++++++++++------------------ translations/frontend.ru.xlf | 94 ++++++++++++++++++------------------ translations/security.cs.xlf | 2 +- translations/security.es.xlf | 2 +- translations/security.fr.xlf | 2 +- translations/security.it.xlf | 2 +- translations/security.pl.xlf | 2 +- translations/security.ru.xlf | 2 +- 12 files changed, 296 insertions(+), 260 deletions(-) diff --git a/translations/frontend.cs.xlf b/translations/frontend.cs.xlf index 08bd2b5e..4ba1f913 100644 --- a/translations/frontend.cs.xlf +++ b/translations/frontend.cs.xlf @@ -1,59 +1,59 @@ - + - - search.placeholder - Hledat - - + + search.placeholder + Hledat + + - - part.labelp - Díly - - + + part.labelp + Díly + + - - entity.select.group.new_not_added_to_DB - Nový (zatím nebyl přidán do DB) - - + + entity.select.group.new_not_added_to_DB + Nový (zatím nebyl přidán do DB) + + - - user.password_strength.very_weak - Velmi slabé - - + + user.password_strength.very_weak + Velmi slabé + + - - user.password_strength.weak - Slabé - - + + user.password_strength.weak + Slabé + + - - user.password_strength.medium - Střední - - + + user.password_strength.medium + Střední + + - - user.password_strength.strong - Silné - - + + user.password_strength.strong + Silné + + - - user.password_strength.very_strong - Velmi silné - - + + user.password_strength.very_strong + Velmi silné + + - - search.submit - Jdi! - - + + search.submit + Jdi! + + - \ No newline at end of file + diff --git a/translations/frontend.es.xlf b/translations/frontend.es.xlf index 361d9104..7d339959 100644 --- a/translations/frontend.es.xlf +++ b/translations/frontend.es.xlf @@ -1,59 +1,59 @@ - + - - search.placeholder - Buscar - - + + search.placeholder + Buscar + + - - part.labelp - Componentes - - + + part.labelp + Componentes + + - - entity.select.group.new_not_added_to_DB - Nuevo (no añadido a la base de datos) - - + + entity.select.group.new_not_added_to_DB + Nuevo (no añadido a la base de datos) + + - - user.password_strength.very_weak - Muy débil - - + + user.password_strength.very_weak + Muy débil + + - - user.password_strength.weak - Débil - - + + user.password_strength.weak + Débil + + - - user.password_strength.medium - Medio - - + + user.password_strength.medium + Medio + + - - user.password_strength.strong - Fuerte - - + + user.password_strength.strong + Fuerte + + - - user.password_strength.very_strong - Muy fuerte - - + + user.password_strength.very_strong + Muy fuerte + + - - search.submit - ¡Vamos! - - + + search.submit + ¡Vamos! + + - \ No newline at end of file + diff --git a/translations/frontend.fr.xlf b/translations/frontend.fr.xlf index 353c9002..5ebfca51 100644 --- a/translations/frontend.fr.xlf +++ b/translations/frontend.fr.xlf @@ -1,23 +1,59 @@ - - - - search.placeholder - Recherche - - + + + + search.placeholder + Recherche + + - - part.labelp - Composants - - - - - search.submit - Rechercher! - - + + part.labelp + Composants + + + + + entity.select.group.new_not_added_to_DB + Nouveau (pas encore ajouté à la BDD) + + + + + user.password_strength.very_weak + Très faible + + + + + user.password_strength.weak + Faible + + + + + user.password_strength.medium + Moyen + + + + + user.password_strength.strong + Fort + + + + + user.password_strength.very_strong + Très fort + + + + + search.submit + Rechercher ! + + - \ No newline at end of file + diff --git a/translations/frontend.it.xlf b/translations/frontend.it.xlf index 56d0e0f0..f163e3e2 100644 --- a/translations/frontend.it.xlf +++ b/translations/frontend.it.xlf @@ -1,59 +1,59 @@ - + - - search.placeholder - Ricerca - - + + search.placeholder + Ricerca + + - - part.labelp - Componenti - - + + part.labelp + Componenti + + - - entity.select.group.new_not_added_to_DB - Nuovo (non ancora aggiunto al DB) - - + + entity.select.group.new_not_added_to_DB + Nuovo (non ancora aggiunto al DB) + + - - user.password_strength.very_weak - Molto debole - - + + user.password_strength.very_weak + Molto debole + + - - user.password_strength.weak - Debole - - + + user.password_strength.weak + Debole + + - - user.password_strength.medium - Media - - + + user.password_strength.medium + Media + + - - user.password_strength.strong - Forte - - + + user.password_strength.strong + Forte + + - - user.password_strength.very_strong - Molto forte - - + + user.password_strength.very_strong + Molto forte + + - - search.submit - Cerca! - - + + search.submit + Cerca! + + - \ No newline at end of file + diff --git a/translations/frontend.pl.xlf b/translations/frontend.pl.xlf index dfdd8887..fface684 100644 --- a/translations/frontend.pl.xlf +++ b/translations/frontend.pl.xlf @@ -1,59 +1,59 @@ - + - - search.placeholder - Szukaj - - + + search.placeholder + Szukaj + + - - part.labelp - Komponenty - - + + part.labelp + Komponenty + + - - entity.select.group.new_not_added_to_DB - Nowość (jeszcze niedodana do DB) - - + + entity.select.group.new_not_added_to_DB + Nowość (jeszcze niedodana do DB) + + - - user.password_strength.very_weak - Bardzo słabe - - + + user.password_strength.very_weak + Bardzo słabe + + - - user.password_strength.weak - Słabe - - + + user.password_strength.weak + Słabe + + - - user.password_strength.medium - Średnie - - + + user.password_strength.medium + Średnie + + - - user.password_strength.strong - Mocne - - + + user.password_strength.strong + Mocne + + - - user.password_strength.very_strong - Bardzo mocne - - + + user.password_strength.very_strong + Bardzo mocne + + - - search.submit - Idź! - - + + search.submit + Idź! + + - \ No newline at end of file + diff --git a/translations/frontend.ru.xlf b/translations/frontend.ru.xlf index a09cb348..f4665a74 100644 --- a/translations/frontend.ru.xlf +++ b/translations/frontend.ru.xlf @@ -1,59 +1,59 @@ - + - - search.placeholder - Поиск - - + + search.placeholder + Поиск + +
- - part.labelp - Компоненты - - + + part.labelp + Компоненты + +
- - entity.select.group.new_not_added_to_DB - Новый (еще не добавленный в БД) - - + + entity.select.group.new_not_added_to_DB + Новый (еще не добавленный в БД) + +
- - user.password_strength.very_weak - Очень слабый - - + + user.password_strength.very_weak + Очень слабый + +
- - user.password_strength.weak - Слабый - - + + user.password_strength.weak + Слабый + +
- - user.password_strength.medium - Средний - - + + user.password_strength.medium + Средний + +
- - user.password_strength.strong - Сильный - - + + user.password_strength.strong + Сильный + +
- - user.password_strength.very_strong - Очень сильный - - + + user.password_strength.very_strong + Очень сильный + +
- - search.submit - Поехали! - - + + search.submit + Поехали! + +
- \ No newline at end of file + diff --git a/translations/security.cs.xlf b/translations/security.cs.xlf index 59de9f9f..4e9570c2 100644 --- a/translations/security.cs.xlf +++ b/translations/security.cs.xlf @@ -20,4 +20,4 @@
- \ No newline at end of file + diff --git a/translations/security.es.xlf b/translations/security.es.xlf index 163e6a1a..e9baee3d 100644 --- a/translations/security.es.xlf +++ b/translations/security.es.xlf @@ -20,4 +20,4 @@
- \ No newline at end of file + diff --git a/translations/security.fr.xlf b/translations/security.fr.xlf index 9e40b8bf..334f9c21 100644 --- a/translations/security.fr.xlf +++ b/translations/security.fr.xlf @@ -20,4 +20,4 @@
- \ No newline at end of file + diff --git a/translations/security.it.xlf b/translations/security.it.xlf index b75de148..9200458c 100644 --- a/translations/security.it.xlf +++ b/translations/security.it.xlf @@ -20,4 +20,4 @@
- \ No newline at end of file + diff --git a/translations/security.pl.xlf b/translations/security.pl.xlf index 14e8652b..2ae0f64b 100644 --- a/translations/security.pl.xlf +++ b/translations/security.pl.xlf @@ -20,4 +20,4 @@
- \ No newline at end of file + diff --git a/translations/security.ru.xlf b/translations/security.ru.xlf index b506b2fc..ebd29669 100644 --- a/translations/security.ru.xlf +++ b/translations/security.ru.xlf @@ -20,4 +20,4 @@
- \ No newline at end of file + From 7fd7697c02e483ed75b16cbba48fffe0a53ef8f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 8 Feb 2026 14:17:58 +0100 Subject: [PATCH 089/172] Added GTIN fields and others to DB --- migrations/Version20260208131116.php | 130 ++++++++++++++++++ src/Entity/Attachments/Attachment.php | 2 +- src/Entity/Attachments/AttachmentType.php | 6 + src/Entity/Parts/Part.php | 1 + src/Entity/Parts/PartLot.php | 28 ++++ .../PartTraits/AdvancedPropertyTrait.php | 30 ++++ src/Entity/PriceInformations/Pricedetail.php | 29 ++++ 7 files changed, 225 insertions(+), 1 deletion(-) create mode 100644 migrations/Version20260208131116.php diff --git a/migrations/Version20260208131116.php b/migrations/Version20260208131116.php new file mode 100644 index 00000000..7ffc47a8 --- /dev/null +++ b/migrations/Version20260208131116.php @@ -0,0 +1,130 @@ +addSql('ALTER TABLE attachment_types ADD allowed_targets LONGTEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE part_lots ADD last_stocktake_at DATETIME DEFAULT NULL'); + $this->addSql('ALTER TABLE parts ADD gtin VARCHAR(255) DEFAULT NULL'); + $this->addSql('CREATE INDEX parts_idx_gtin ON parts (gtin)'); + $this->addSql('ALTER TABLE pricedetails ADD include_vat TINYINT DEFAULT NULL'); + } + + public function mySQLDown(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE `attachment_types` DROP allowed_targets'); + $this->addSql('DROP INDEX parts_idx_gtin ON `parts`'); + $this->addSql('ALTER TABLE `parts` DROP gtin'); + $this->addSql('ALTER TABLE part_lots DROP last_stocktake_at'); + $this->addSql('ALTER TABLE `pricedetails` DROP include_vat'); + } + + public function sqLiteUp(Schema $schema): void + { + $this->addSql('ALTER TABLE attachment_types ADD COLUMN allowed_targets CLOB DEFAULT NULL'); + $this->addSql('ALTER TABLE part_lots ADD COLUMN last_stocktake_at DATETIME DEFAULT NULL'); + $this->addSql('CREATE TEMPORARY TABLE __temp__parts AS SELECT id, id_preview_attachment, id_category, id_footprint, id_part_unit, id_manufacturer, id_part_custom_state, order_orderdetails_id, built_project_id, datetime_added, name, last_modified, needs_review, tags, mass, description, comment, visible, favorite, minamount, manufacturer_product_url, manufacturer_product_number, manufacturing_status, order_quantity, manual_order, ipn, provider_reference_provider_key, provider_reference_provider_id, provider_reference_provider_url, provider_reference_last_updated, eda_info_reference_prefix, eda_info_value, eda_info_invisible, eda_info_exclude_from_bom, eda_info_exclude_from_board, eda_info_exclude_from_sim, eda_info_kicad_symbol, eda_info_kicad_footprint FROM parts'); + $this->addSql('DROP TABLE parts'); + $this->addSql('CREATE TABLE parts (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, id_preview_attachment INTEGER DEFAULT NULL, id_category INTEGER NOT NULL, id_footprint INTEGER DEFAULT NULL, id_part_unit INTEGER DEFAULT NULL, id_manufacturer INTEGER DEFAULT NULL, id_part_custom_state INTEGER DEFAULT NULL, order_orderdetails_id INTEGER DEFAULT NULL, built_project_id INTEGER DEFAULT NULL, datetime_added DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, name VARCHAR(255) NOT NULL, last_modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, needs_review BOOLEAN NOT NULL, tags CLOB NOT NULL, mass DOUBLE PRECISION DEFAULT NULL, description CLOB NOT NULL, comment CLOB NOT NULL, visible BOOLEAN NOT NULL, favorite BOOLEAN NOT NULL, minamount DOUBLE PRECISION NOT NULL, manufacturer_product_url CLOB NOT NULL, manufacturer_product_number VARCHAR(255) NOT NULL, manufacturing_status VARCHAR(255) DEFAULT NULL, order_quantity INTEGER NOT NULL, manual_order BOOLEAN NOT NULL, ipn VARCHAR(100) DEFAULT NULL, provider_reference_provider_key VARCHAR(255) DEFAULT NULL, provider_reference_provider_id VARCHAR(255) DEFAULT NULL, provider_reference_provider_url VARCHAR(2048) DEFAULT NULL, provider_reference_last_updated DATETIME DEFAULT NULL, eda_info_reference_prefix VARCHAR(255) DEFAULT NULL, eda_info_value VARCHAR(255) DEFAULT NULL, eda_info_invisible BOOLEAN DEFAULT NULL, eda_info_exclude_from_bom BOOLEAN DEFAULT NULL, eda_info_exclude_from_board BOOLEAN DEFAULT NULL, eda_info_exclude_from_sim BOOLEAN DEFAULT NULL, eda_info_kicad_symbol VARCHAR(255) DEFAULT NULL, eda_info_kicad_footprint VARCHAR(255) DEFAULT NULL, gtin VARCHAR(255) DEFAULT NULL, CONSTRAINT FK_6940A7FEEA7100A1 FOREIGN KEY (id_preview_attachment) REFERENCES attachments (id) ON UPDATE NO ACTION ON DELETE SET NULL NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_6940A7FE5697F554 FOREIGN KEY (id_category) REFERENCES categories (id) ON UPDATE NO ACTION ON DELETE NO ACTION NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_6940A7FE7E371A10 FOREIGN KEY (id_footprint) REFERENCES footprints (id) ON UPDATE NO ACTION ON DELETE NO ACTION NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_6940A7FE2626CEF9 FOREIGN KEY (id_part_unit) REFERENCES measurement_units (id) ON UPDATE NO ACTION ON DELETE NO ACTION NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_6940A7FE1ECB93AE FOREIGN KEY (id_manufacturer) REFERENCES manufacturers (id) ON UPDATE NO ACTION ON DELETE NO ACTION NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_6940A7FEA3ED1215 FOREIGN KEY (id_part_custom_state) REFERENCES part_custom_states (id) ON UPDATE NO ACTION ON DELETE NO ACTION NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_6940A7FE81081E9B FOREIGN KEY (order_orderdetails_id) REFERENCES orderdetails (id) ON UPDATE NO ACTION ON DELETE NO ACTION NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_6940A7FEE8AE70D9 FOREIGN KEY (built_project_id) REFERENCES projects (id) ON UPDATE NO ACTION ON DELETE NO ACTION NOT DEFERRABLE INITIALLY IMMEDIATE)'); + $this->addSql('INSERT INTO parts (id, id_preview_attachment, id_category, id_footprint, id_part_unit, id_manufacturer, id_part_custom_state, order_orderdetails_id, built_project_id, datetime_added, name, last_modified, needs_review, tags, mass, description, comment, visible, favorite, minamount, manufacturer_product_url, manufacturer_product_number, manufacturing_status, order_quantity, manual_order, ipn, provider_reference_provider_key, provider_reference_provider_id, provider_reference_provider_url, provider_reference_last_updated, eda_info_reference_prefix, eda_info_value, eda_info_invisible, eda_info_exclude_from_bom, eda_info_exclude_from_board, eda_info_exclude_from_sim, eda_info_kicad_symbol, eda_info_kicad_footprint) SELECT id, id_preview_attachment, id_category, id_footprint, id_part_unit, id_manufacturer, id_part_custom_state, order_orderdetails_id, built_project_id, datetime_added, name, last_modified, needs_review, tags, mass, description, comment, visible, favorite, minamount, manufacturer_product_url, manufacturer_product_number, manufacturing_status, order_quantity, manual_order, ipn, provider_reference_provider_key, provider_reference_provider_id, provider_reference_provider_url, provider_reference_last_updated, eda_info_reference_prefix, eda_info_value, eda_info_invisible, eda_info_exclude_from_bom, eda_info_exclude_from_board, eda_info_exclude_from_sim, eda_info_kicad_symbol, eda_info_kicad_footprint FROM __temp__parts'); + $this->addSql('DROP TABLE __temp__parts'); + $this->addSql('CREATE INDEX parts_idx_name ON parts (name)'); + $this->addSql('CREATE INDEX parts_idx_ipn ON parts (ipn)'); + $this->addSql('CREATE INDEX parts_idx_datet_name_last_id_needs ON parts (datetime_added, name, last_modified, id, needs_review)'); + $this->addSql('CREATE UNIQUE INDEX UNIQ_6940A7FEE8AE70D9 ON parts (built_project_id)'); + $this->addSql('CREATE UNIQUE INDEX UNIQ_6940A7FE81081E9B ON parts (order_orderdetails_id)'); + $this->addSql('CREATE UNIQUE INDEX UNIQ_6940A7FE3D721C14 ON parts (ipn)'); + $this->addSql('CREATE INDEX IDX_6940A7FEEA7100A1 ON parts (id_preview_attachment)'); + $this->addSql('CREATE INDEX IDX_6940A7FE7E371A10 ON parts (id_footprint)'); + $this->addSql('CREATE INDEX IDX_6940A7FE5697F554 ON parts (id_category)'); + $this->addSql('CREATE INDEX IDX_6940A7FE2626CEF9 ON parts (id_part_unit)'); + $this->addSql('CREATE INDEX IDX_6940A7FE1ECB93AE ON parts (id_manufacturer)'); + $this->addSql('CREATE INDEX IDX_6940A7FEA3ED1215 ON parts (id_part_custom_state)'); + $this->addSql('CREATE INDEX parts_idx_gtin ON parts (gtin)'); + $this->addSql('ALTER TABLE pricedetails ADD COLUMN include_vat BOOLEAN DEFAULT NULL'); + } + + public function sqLiteDown(Schema $schema): void + { + $this->addSql('CREATE TEMPORARY TABLE __temp__attachment_types AS SELECT id, name, last_modified, datetime_added, comment, not_selectable, alternative_names, filetype_filter, parent_id, id_preview_attachment FROM "attachment_types"'); + $this->addSql('DROP TABLE "attachment_types"'); + $this->addSql('CREATE TABLE "attachment_types" (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name VARCHAR(255) NOT NULL, last_modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, datetime_added DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, comment CLOB NOT NULL, not_selectable BOOLEAN NOT NULL, alternative_names CLOB DEFAULT NULL, filetype_filter CLOB NOT NULL, parent_id INTEGER DEFAULT NULL, id_preview_attachment INTEGER DEFAULT NULL, CONSTRAINT FK_EFAED719727ACA70 FOREIGN KEY (parent_id) REFERENCES "attachment_types" (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_EFAED719EA7100A1 FOREIGN KEY (id_preview_attachment) REFERENCES "attachments" (id) ON DELETE SET NULL NOT DEFERRABLE INITIALLY IMMEDIATE)'); + $this->addSql('INSERT INTO "attachment_types" (id, name, last_modified, datetime_added, comment, not_selectable, alternative_names, filetype_filter, parent_id, id_preview_attachment) SELECT id, name, last_modified, datetime_added, comment, not_selectable, alternative_names, filetype_filter, parent_id, id_preview_attachment FROM __temp__attachment_types'); + $this->addSql('DROP TABLE __temp__attachment_types'); + $this->addSql('CREATE INDEX IDX_EFAED719727ACA70 ON "attachment_types" (parent_id)'); + $this->addSql('CREATE INDEX IDX_EFAED719EA7100A1 ON "attachment_types" (id_preview_attachment)'); + $this->addSql('CREATE INDEX attachment_types_idx_name ON "attachment_types" (name)'); + $this->addSql('CREATE INDEX attachment_types_idx_parent_name ON "attachment_types" (parent_id, name)'); + $this->addSql('CREATE TEMPORARY TABLE __temp__part_lots AS SELECT id, description, comment, expiration_date, instock_unknown, amount, needs_refill, vendor_barcode, last_modified, datetime_added, id_store_location, id_part, id_owner FROM part_lots'); + $this->addSql('DROP TABLE part_lots'); + $this->addSql('CREATE TABLE part_lots (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, description CLOB NOT NULL, comment CLOB NOT NULL, expiration_date DATETIME DEFAULT NULL, instock_unknown BOOLEAN NOT NULL, amount DOUBLE PRECISION NOT NULL, needs_refill BOOLEAN NOT NULL, vendor_barcode VARCHAR(255) DEFAULT NULL, last_modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, datetime_added DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, id_store_location INTEGER DEFAULT NULL, id_part INTEGER NOT NULL, id_owner INTEGER DEFAULT NULL, CONSTRAINT FK_EBC8F9435D8F4B37 FOREIGN KEY (id_store_location) REFERENCES "storelocations" (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_EBC8F943C22F6CC4 FOREIGN KEY (id_part) REFERENCES "parts" (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_EBC8F94321E5A74C FOREIGN KEY (id_owner) REFERENCES "users" (id) ON DELETE SET NULL NOT DEFERRABLE INITIALLY IMMEDIATE)'); + $this->addSql('INSERT INTO part_lots (id, description, comment, expiration_date, instock_unknown, amount, needs_refill, vendor_barcode, last_modified, datetime_added, id_store_location, id_part, id_owner) SELECT id, description, comment, expiration_date, instock_unknown, amount, needs_refill, vendor_barcode, last_modified, datetime_added, id_store_location, id_part, id_owner FROM __temp__part_lots'); + $this->addSql('DROP TABLE __temp__part_lots'); + $this->addSql('CREATE INDEX IDX_EBC8F9435D8F4B37 ON part_lots (id_store_location)'); + $this->addSql('CREATE INDEX IDX_EBC8F943C22F6CC4 ON part_lots (id_part)'); + $this->addSql('CREATE INDEX IDX_EBC8F94321E5A74C ON part_lots (id_owner)'); + $this->addSql('CREATE INDEX part_lots_idx_instock_un_expiration_id_part ON part_lots (instock_unknown, expiration_date, id_part)'); + $this->addSql('CREATE INDEX part_lots_idx_needs_refill ON part_lots (needs_refill)'); + $this->addSql('CREATE INDEX part_lots_idx_barcode ON part_lots (vendor_barcode)'); + $this->addSql('CREATE TEMPORARY TABLE __temp__parts AS SELECT id, name, last_modified, datetime_added, needs_review, tags, mass, ipn, description, comment, visible, favorite, minamount, manufacturer_product_url, manufacturer_product_number, manufacturing_status, order_quantity, manual_order, provider_reference_provider_key, provider_reference_provider_id, provider_reference_provider_url, provider_reference_last_updated, eda_info_reference_prefix, eda_info_value, eda_info_invisible, eda_info_exclude_from_bom, eda_info_exclude_from_board, eda_info_exclude_from_sim, eda_info_kicad_symbol, eda_info_kicad_footprint, id_preview_attachment, id_part_custom_state, id_category, id_footprint, id_part_unit, id_manufacturer, order_orderdetails_id, built_project_id FROM "parts"'); + $this->addSql('DROP TABLE "parts"'); + $this->addSql('CREATE TABLE "parts" (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name VARCHAR(255) NOT NULL, last_modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, datetime_added DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, needs_review BOOLEAN NOT NULL, tags CLOB NOT NULL, mass DOUBLE PRECISION DEFAULT NULL, ipn VARCHAR(100) DEFAULT NULL, description CLOB NOT NULL, comment CLOB NOT NULL, visible BOOLEAN NOT NULL, favorite BOOLEAN NOT NULL, minamount DOUBLE PRECISION NOT NULL, manufacturer_product_url CLOB NOT NULL, manufacturer_product_number VARCHAR(255) NOT NULL, manufacturing_status VARCHAR(255) DEFAULT NULL, order_quantity INTEGER NOT NULL, manual_order BOOLEAN NOT NULL, provider_reference_provider_key VARCHAR(255) DEFAULT NULL, provider_reference_provider_id VARCHAR(255) DEFAULT NULL, provider_reference_provider_url VARCHAR(2048) DEFAULT NULL, provider_reference_last_updated DATETIME DEFAULT NULL, eda_info_reference_prefix VARCHAR(255) DEFAULT NULL, eda_info_value VARCHAR(255) DEFAULT NULL, eda_info_invisible BOOLEAN DEFAULT NULL, eda_info_exclude_from_bom BOOLEAN DEFAULT NULL, eda_info_exclude_from_board BOOLEAN DEFAULT NULL, eda_info_exclude_from_sim BOOLEAN DEFAULT NULL, eda_info_kicad_symbol VARCHAR(255) DEFAULT NULL, eda_info_kicad_footprint VARCHAR(255) DEFAULT NULL, id_preview_attachment INTEGER DEFAULT NULL, id_part_custom_state INTEGER DEFAULT NULL, id_category INTEGER NOT NULL, id_footprint INTEGER DEFAULT NULL, id_part_unit INTEGER DEFAULT NULL, id_manufacturer INTEGER DEFAULT NULL, order_orderdetails_id INTEGER DEFAULT NULL, built_project_id INTEGER DEFAULT NULL, CONSTRAINT FK_6940A7FEEA7100A1 FOREIGN KEY (id_preview_attachment) REFERENCES "attachments" (id) ON DELETE SET NULL NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_6940A7FEA3ED1215 FOREIGN KEY (id_part_custom_state) REFERENCES "part_custom_states" (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_6940A7FE5697F554 FOREIGN KEY (id_category) REFERENCES "categories" (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_6940A7FE7E371A10 FOREIGN KEY (id_footprint) REFERENCES "footprints" (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_6940A7FE2626CEF9 FOREIGN KEY (id_part_unit) REFERENCES "measurement_units" (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_6940A7FE1ECB93AE FOREIGN KEY (id_manufacturer) REFERENCES "manufacturers" (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_6940A7FE81081E9B FOREIGN KEY (order_orderdetails_id) REFERENCES "orderdetails" (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_6940A7FEE8AE70D9 FOREIGN KEY (built_project_id) REFERENCES projects (id) NOT DEFERRABLE INITIALLY IMMEDIATE)'); + $this->addSql('INSERT INTO "parts" (id, name, last_modified, datetime_added, needs_review, tags, mass, ipn, description, comment, visible, favorite, minamount, manufacturer_product_url, manufacturer_product_number, manufacturing_status, order_quantity, manual_order, provider_reference_provider_key, provider_reference_provider_id, provider_reference_provider_url, provider_reference_last_updated, eda_info_reference_prefix, eda_info_value, eda_info_invisible, eda_info_exclude_from_bom, eda_info_exclude_from_board, eda_info_exclude_from_sim, eda_info_kicad_symbol, eda_info_kicad_footprint, id_preview_attachment, id_part_custom_state, id_category, id_footprint, id_part_unit, id_manufacturer, order_orderdetails_id, built_project_id) SELECT id, name, last_modified, datetime_added, needs_review, tags, mass, ipn, description, comment, visible, favorite, minamount, manufacturer_product_url, manufacturer_product_number, manufacturing_status, order_quantity, manual_order, provider_reference_provider_key, provider_reference_provider_id, provider_reference_provider_url, provider_reference_last_updated, eda_info_reference_prefix, eda_info_value, eda_info_invisible, eda_info_exclude_from_bom, eda_info_exclude_from_board, eda_info_exclude_from_sim, eda_info_kicad_symbol, eda_info_kicad_footprint, id_preview_attachment, id_part_custom_state, id_category, id_footprint, id_part_unit, id_manufacturer, order_orderdetails_id, built_project_id FROM __temp__parts'); + $this->addSql('DROP TABLE __temp__parts'); + $this->addSql('CREATE UNIQUE INDEX UNIQ_6940A7FE3D721C14 ON "parts" (ipn)'); + $this->addSql('CREATE INDEX IDX_6940A7FEEA7100A1 ON "parts" (id_preview_attachment)'); + $this->addSql('CREATE INDEX IDX_6940A7FEA3ED1215 ON "parts" (id_part_custom_state)'); + $this->addSql('CREATE INDEX IDX_6940A7FE5697F554 ON "parts" (id_category)'); + $this->addSql('CREATE INDEX IDX_6940A7FE7E371A10 ON "parts" (id_footprint)'); + $this->addSql('CREATE INDEX IDX_6940A7FE2626CEF9 ON "parts" (id_part_unit)'); + $this->addSql('CREATE INDEX IDX_6940A7FE1ECB93AE ON "parts" (id_manufacturer)'); + $this->addSql('CREATE UNIQUE INDEX UNIQ_6940A7FE81081E9B ON "parts" (order_orderdetails_id)'); + $this->addSql('CREATE UNIQUE INDEX UNIQ_6940A7FEE8AE70D9 ON "parts" (built_project_id)'); + $this->addSql('CREATE INDEX parts_idx_datet_name_last_id_needs ON "parts" (datetime_added, name, last_modified, id, needs_review)'); + $this->addSql('CREATE INDEX parts_idx_name ON "parts" (name)'); + $this->addSql('CREATE INDEX parts_idx_ipn ON "parts" (ipn)'); + $this->addSql('CREATE TEMPORARY TABLE __temp__pricedetails AS SELECT id, price, price_related_quantity, min_discount_quantity, manual_input, last_modified, datetime_added, id_currency, orderdetails_id FROM "pricedetails"'); + $this->addSql('DROP TABLE "pricedetails"'); + $this->addSql('CREATE TABLE "pricedetails" (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, price NUMERIC(11, 5) NOT NULL, price_related_quantity DOUBLE PRECISION NOT NULL, min_discount_quantity DOUBLE PRECISION NOT NULL, manual_input BOOLEAN NOT NULL, last_modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, datetime_added DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, id_currency INTEGER DEFAULT NULL, orderdetails_id INTEGER NOT NULL, CONSTRAINT FK_C68C4459398D64AA FOREIGN KEY (id_currency) REFERENCES currencies (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_C68C44594A01DDC7 FOREIGN KEY (orderdetails_id) REFERENCES "orderdetails" (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE)'); + $this->addSql('INSERT INTO "pricedetails" (id, price, price_related_quantity, min_discount_quantity, manual_input, last_modified, datetime_added, id_currency, orderdetails_id) SELECT id, price, price_related_quantity, min_discount_quantity, manual_input, last_modified, datetime_added, id_currency, orderdetails_id FROM __temp__pricedetails'); + $this->addSql('DROP TABLE __temp__pricedetails'); + $this->addSql('CREATE INDEX IDX_C68C4459398D64AA ON "pricedetails" (id_currency)'); + $this->addSql('CREATE INDEX IDX_C68C44594A01DDC7 ON "pricedetails" (orderdetails_id)'); + $this->addSql('CREATE INDEX pricedetails_idx_min_discount ON "pricedetails" (min_discount_quantity)'); + $this->addSql('CREATE INDEX pricedetails_idx_min_discount_price_qty ON "pricedetails" (min_discount_quantity, price_related_quantity)'); + } + + public function postgreSQLUp(Schema $schema): void + { + $this->addSql('ALTER TABLE attachment_types ADD allowed_targets TEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE part_lots ADD last_stocktake_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL'); + $this->addSql('ALTER TABLE parts ADD gtin VARCHAR(255) DEFAULT NULL'); + $this->addSql('CREATE INDEX parts_idx_gtin ON parts (gtin)'); + $this->addSql('ALTER TABLE pricedetails ADD include_vat BOOLEAN DEFAULT NULL'); + } + + public function postgreSQLDown(Schema $schema): void + { + $this->addSql('ALTER TABLE "attachment_types" DROP allowed_targets'); + $this->addSql('ALTER TABLE part_lots DROP last_stocktake_at'); + $this->addSql('DROP INDEX parts_idx_gtin'); + $this->addSql('ALTER TABLE "parts" DROP gtin'); + $this->addSql('ALTER TABLE "pricedetails" DROP include_vat'); + } +} diff --git a/src/Entity/Attachments/Attachment.php b/src/Entity/Attachments/Attachment.php index 259785cb..ac625e92 100644 --- a/src/Entity/Attachments/Attachment.php +++ b/src/Entity/Attachments/Attachment.php @@ -97,7 +97,7 @@ use function in_array; #[DiscriminatorMap(typeProperty: '_type', mapping: self::API_DISCRIMINATOR_MAP)] abstract class Attachment extends AbstractNamedDBElement { - private const ORM_DISCRIMINATOR_MAP = ['Part' => PartAttachment::class, 'PartCustomState' => PartCustomStateAttachment::class, 'Device' => ProjectAttachment::class, + final public const ORM_DISCRIMINATOR_MAP = ['Part' => PartAttachment::class, 'PartCustomState' => PartCustomStateAttachment::class, 'Device' => ProjectAttachment::class, 'AttachmentType' => AttachmentTypeAttachment::class, 'Category' => CategoryAttachment::class, 'Footprint' => FootprintAttachment::class, 'Manufacturer' => ManufacturerAttachment::class, 'Currency' => CurrencyAttachment::class, 'Group' => GroupAttachment::class, 'MeasurementUnit' => MeasurementUnitAttachment::class, diff --git a/src/Entity/Attachments/AttachmentType.php b/src/Entity/Attachments/AttachmentType.php index 22333c16..273e800a 100644 --- a/src/Entity/Attachments/AttachmentType.php +++ b/src/Entity/Attachments/AttachmentType.php @@ -134,6 +134,12 @@ class AttachmentType extends AbstractStructuralDBElement #[ORM\OneToMany(mappedBy: 'attachment_type', targetEntity: Attachment::class)] protected Collection $attachments_with_type; + /** + * @var array|null A list of allowed targets where this attachment type can be assigned to. + */ + #[ORM\Column(type: Types::SIMPLE_ARRAY, nullable: true)] + protected ?array $allowed_targets = null; + #[Groups(['attachment_type:read'])] protected ?\DateTimeImmutable $addedDate = null; #[Groups(['attachment_type:read'])] diff --git a/src/Entity/Parts/Part.php b/src/Entity/Parts/Part.php index d0a279e3..5ac81b60 100644 --- a/src/Entity/Parts/Part.php +++ b/src/Entity/Parts/Part.php @@ -80,6 +80,7 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface; #[ORM\Index(columns: ['datetime_added', 'name', 'last_modified', 'id', 'needs_review'], name: 'parts_idx_datet_name_last_id_needs')] #[ORM\Index(columns: ['name'], name: 'parts_idx_name')] #[ORM\Index(columns: ['ipn'], name: 'parts_idx_ipn')] +#[ORM\Index(columns: ['gtin'], name: 'parts_idx_gtin')] #[ApiResource( operations: [ new Get(normalizationContext: [ diff --git a/src/Entity/Parts/PartLot.php b/src/Entity/Parts/PartLot.php index d893e6de..53ecd3d5 100644 --- a/src/Entity/Parts/PartLot.php +++ b/src/Entity/Parts/PartLot.php @@ -171,6 +171,14 @@ class PartLot extends AbstractDBElement implements TimeStampableInterface, Named #[Length(max: 255)] protected ?string $user_barcode = null; + /** + * @var \DateTimeImmutable|null The date when the last stocktake was performed for this part lot. Set to null, if no stocktake was performed yet. + */ + #[Groups(['extended', 'full', 'import', 'part_lot:read', 'part_lot:write'])] + #[ORM\Column( type: Types::DATETIME_IMMUTABLE, nullable: true)] + #[Year2038BugWorkaround] + protected ?\DateTimeImmutable $last_stocktake_at = null; + public function __clone() { if ($this->id) { @@ -391,6 +399,26 @@ class PartLot extends AbstractDBElement implements TimeStampableInterface, Named return $this; } + /** + * Returns the date when the last stocktake was performed for this part lot. Returns null, if no stocktake was performed yet. + * @return \DateTimeImmutable|null + */ + public function getLastStocktakeAt(): ?\DateTimeImmutable + { + return $this->last_stocktake_at; + } + + /** + * Sets the date when the last stocktake was performed for this part lot. Set to null, if no stocktake was performed yet. + * @param \DateTimeImmutable|null $last_stocktake_at + * @return $this + */ + public function setLastStocktakeAt(?\DateTimeImmutable $last_stocktake_at): self + { + $this->last_stocktake_at = $last_stocktake_at; + return $this; + } + #[Assert\Callback] diff --git a/src/Entity/Parts/PartTraits/AdvancedPropertyTrait.php b/src/Entity/Parts/PartTraits/AdvancedPropertyTrait.php index 2cee7f1a..38130f0d 100644 --- a/src/Entity/Parts/PartTraits/AdvancedPropertyTrait.php +++ b/src/Entity/Parts/PartTraits/AdvancedPropertyTrait.php @@ -84,6 +84,14 @@ trait AdvancedPropertyTrait #[ORM\JoinColumn(name: 'id_part_custom_state')] protected ?PartCustomState $partCustomState = null; + /** + * @var string|null The GTIN (Global Trade Item Number) of the part, for example a UPC or EAN code + */ + #[Groups(['extended', 'full', 'import', 'part:read', 'part:write'])] + #[ORM\Column(type: Types::STRING, nullable: true)] + #[Length(max: 14)] + protected ?string $gtin = null; + /** * Checks if this part is marked, for that it needs further review. */ @@ -211,4 +219,26 @@ trait AdvancedPropertyTrait return $this; } + + /** + * Gets the GTIN (Global Trade Item Number) of the part, for example a UPC or EAN code. + * Returns null if no GTIN is set. + */ + public function getGtin(): ?string + { + return $this->gtin; + } + + /** + * Sets the GTIN (Global Trade Item Number) of the part, for example a UPC or EAN code. + * + * @param string|null $gtin The new GTIN of the part + * + * @return $this + */ + public function setGtin(?string $gtin): self + { + $this->gtin = $gtin; + return $this; + } } diff --git a/src/Entity/PriceInformations/Pricedetail.php b/src/Entity/PriceInformations/Pricedetail.php index 86a7bcd5..b98ee056 100644 --- a/src/Entity/PriceInformations/Pricedetail.php +++ b/src/Entity/PriceInformations/Pricedetail.php @@ -121,6 +121,13 @@ class Pricedetail extends AbstractDBElement implements TimeStampableInterface #[Groups(['pricedetail:read:standalone', 'pricedetail:write'])] protected ?Orderdetail $orderdetail = null; + /** + * @var bool|null Whether the price includes VAT or not. Null means, that it is not specified, if the price includes VAT or not. + */ + #[ORM\Column(type: Types::BOOLEAN, nullable: true)] + #[Groups(['extended', 'full', 'import', 'pricedetail:read', 'pricedetail:write'])] + protected ?bool $include_vat = null; + public function __construct() { $this->price = BigDecimal::zero()->toScale(self::PRICE_PRECISION); @@ -360,4 +367,26 @@ class Pricedetail extends AbstractDBElement implements TimeStampableInterface return $this; } + + /** + * Returns whether the price includes VAT or not. Null means, that it is not specified, if the price includes VAT or not. + * @return bool|null + */ + public function getIncludeVat(): ?bool + { + return $this->include_vat; + } + + /** + * Sets whether the price includes VAT or not. Null means, that it is not specified, if the price includes VAT or not. + * @param bool|null $include_vat + * @return $this + */ + public function setIncludeVat(?bool $include_vat): self + { + $this->include_vat = $include_vat; + return $this; + } + + } From 57c8368b5e9f02154f33940f2625d073ae6a172c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 8 Feb 2026 14:44:56 +0100 Subject: [PATCH 090/172] Allow to edit the GTIN property of a part and validate the GTIN --- composer.json | 1 + composer.lock | 50 ++++++++++++- .../PartTraits/AdvancedPropertyTrait.php | 3 +- src/Form/Part/PartBaseType.php | 8 ++- src/Validator/Constraints/ValidGTIN.php | 35 +++++++++ .../Constraints/ValidGTINValidator.php | 54 ++++++++++++++ templates/parts/edit/_advanced.html.twig | 3 +- .../Constraints/ValidGTINValidatorTest.php | 72 +++++++++++++++++++ translations/messages.en.xlf | 8 ++- translations/validators.en.xlf | 8 ++- 10 files changed, 236 insertions(+), 6 deletions(-) create mode 100644 src/Validator/Constraints/ValidGTIN.php create mode 100644 src/Validator/Constraints/ValidGTINValidator.php create mode 100644 tests/Validator/Constraints/ValidGTINValidatorTest.php diff --git a/composer.json b/composer.json index 36dd461e..dd12097c 100644 --- a/composer.json +++ b/composer.json @@ -90,6 +90,7 @@ "symfony/yaml": "7.4.*", "symplify/easy-coding-standard": "^12.5.20", "tecnickcom/tc-lib-barcode": "^2.1.4", + "tiendanube/gtinvalidation": "^1.0", "twig/cssinliner-extra": "^3.0", "twig/extra-bundle": "^3.8", "twig/html-extra": "^3.8", diff --git a/composer.lock b/composer.lock index b56a61f9..9ccb922e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7ca9c95fb85f6bf3d9b8a3aa98ca33f6", + "content-hash": "b47c8579efa64349c5e65296e2a44206", "packages": [ { "name": "amphp/amp", @@ -16830,6 +16830,54 @@ ], "time": "2025-05-14T06:15:44+00:00" }, + { + "name": "tiendanube/gtinvalidation", + "version": "v1.0", + "source": { + "type": "git", + "url": "https://github.com/TiendaNube/GtinValidator.git", + "reference": "7ff5794b6293eb748bf1efcddf4e20a657c31855" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TiendaNube/GtinValidator/zipball/7ff5794b6293eb748bf1efcddf4e20a657c31855", + "reference": "7ff5794b6293eb748bf1efcddf4e20a657c31855", + "shasum": "" + }, + "require": { + "php": ">=5.4" + }, + "require-dev": { + "phpunit/phpunit": "4.6.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "GtinValidation\\": "src/GtinValidation" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ryan Blakemore", + "homepage": "https://github.com/ryanblak", + "role": "developer" + } + ], + "description": "Validates GTIN product codes.", + "keywords": [ + "gtin", + "product codes" + ], + "support": { + "issues": "https://github.com/TiendaNube/GtinValidator/issues", + "source": "https://github.com/TiendaNube/GtinValidator/tree/master" + }, + "time": "2018-07-25T22:31:29+00:00" + }, { "name": "tijsverkoyen/css-to-inline-styles", "version": "v2.4.0", diff --git a/src/Entity/Parts/PartTraits/AdvancedPropertyTrait.php b/src/Entity/Parts/PartTraits/AdvancedPropertyTrait.php index 38130f0d..065469b5 100644 --- a/src/Entity/Parts/PartTraits/AdvancedPropertyTrait.php +++ b/src/Entity/Parts/PartTraits/AdvancedPropertyTrait.php @@ -24,6 +24,7 @@ namespace App\Entity\Parts\PartTraits; use App\Entity\Parts\InfoProviderReference; use App\Entity\Parts\PartCustomState; +use App\Validator\Constraints\ValidGTIN; use Doctrine\DBAL\Types\Types; use App\Entity\Parts\Part; use Doctrine\ORM\Mapping as ORM; @@ -89,7 +90,7 @@ trait AdvancedPropertyTrait */ #[Groups(['extended', 'full', 'import', 'part:read', 'part:write'])] #[ORM\Column(type: Types::STRING, nullable: true)] - #[Length(max: 14)] + #[ValidGTIN] protected ?string $gtin = null; /** diff --git a/src/Form/Part/PartBaseType.php b/src/Form/Part/PartBaseType.php index b8276589..902aff40 100644 --- a/src/Form/Part/PartBaseType.php +++ b/src/Form/Part/PartBaseType.php @@ -216,7 +216,13 @@ class PartBaseType extends AbstractType 'disable_not_selectable' => true, 'label' => 'part.edit.partCustomState', ]) - ->add('ipn', TextType::class, $ipnOptions); + ->add('ipn', TextType::class, $ipnOptions) + ->add('gtin', TextType::class, [ + 'required' => false, + 'empty_data' => null, + 'label' => 'part.gtin', + ]) + ; //Comment section $builder->add('comment', RichTextEditorType::class, [ diff --git a/src/Validator/Constraints/ValidGTIN.php b/src/Validator/Constraints/ValidGTIN.php new file mode 100644 index 00000000..20e81f1d --- /dev/null +++ b/src/Validator/Constraints/ValidGTIN.php @@ -0,0 +1,35 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Validator\Constraints; + +use Symfony\Component\Validator\Constraint; + +/** + * A constraint to ensure that a GTIN is valid. + */ +#[\Attribute(\Attribute::TARGET_PROPERTY)] +class ValidGTIN extends Constraint +{ + +} diff --git a/src/Validator/Constraints/ValidGTINValidator.php b/src/Validator/Constraints/ValidGTINValidator.php new file mode 100644 index 00000000..57eb23e6 --- /dev/null +++ b/src/Validator/Constraints/ValidGTINValidator.php @@ -0,0 +1,54 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Validator\Constraints; + +use GtinValidation\GtinValidator; +use Symfony\Component\Validator\Constraint; +use Symfony\Component\Validator\ConstraintValidator; +use Symfony\Component\Validator\Exception\UnexpectedTypeException; + +class ValidGTINValidator extends ConstraintValidator +{ + + public function validate(mixed $value, Constraint $constraint): void + { + if (!$constraint instanceof ValidGTIN) { + throw new UnexpectedTypeException($constraint, ValidGTIN::class); + } + + if (null === $value || '' === $value) { + return; + } + + if (!is_string($value)) { + throw new UnexpectedTypeException($value, 'string'); + } + + $gtinValidator = new GtinValidator($value); + if (!$gtinValidator->isValid()) { + $this->context->buildViolation('validator.invalid_gtin') + ->addViolation(); + } + } +} diff --git a/templates/parts/edit/_advanced.html.twig b/templates/parts/edit/_advanced.html.twig index b0f1ff86..30479d11 100644 --- a/templates/parts/edit/_advanced.html.twig +++ b/templates/parts/edit/_advanced.html.twig @@ -13,4 +13,5 @@ {{ form_row(form.ipn) }} {{ form_row(form.partUnit) }} -{{ form_row(form.partCustomState) }} \ No newline at end of file +{{ form_row(form.partCustomState) }} +{{ form_row(form.gtin) }} diff --git a/tests/Validator/Constraints/ValidGTINValidatorTest.php b/tests/Validator/Constraints/ValidGTINValidatorTest.php new file mode 100644 index 00000000..f35b053a --- /dev/null +++ b/tests/Validator/Constraints/ValidGTINValidatorTest.php @@ -0,0 +1,72 @@ +. + */ + +namespace App\Tests\Validator\Constraints; + +use App\Validator\Constraints\ValidGTINValidator; +use PHPUnit\Framework\TestCase; +use Symfony\Component\Validator\ConstraintValidatorInterface; +use Symfony\Component\Validator\Test\ConstraintValidatorTestCase; + +class ValidGTINValidatorTest extends ConstraintValidatorTestCase +{ + + public function testAllowNull(): void + { + $this->validator->validate(null, new \App\Validator\Constraints\ValidGTIN()); + $this->assertNoViolation(); + } + + public function testValidGTIN8(): void + { + $this->validator->validate('12345670', new \App\Validator\Constraints\ValidGTIN()); + $this->assertNoViolation(); + } + + public function testValidGTIN12(): void + { + $this->validator->validate('123456789012', new \App\Validator\Constraints\ValidGTIN()); + $this->assertNoViolation(); + } + + public function testValidGTIN13(): void + { + $this->validator->validate('1234567890128', new \App\Validator\Constraints\ValidGTIN()); + $this->assertNoViolation(); + } + + public function testValidGTIN14(): void + { + $this->validator->validate('12345678901231', new \App\Validator\Constraints\ValidGTIN()); + $this->assertNoViolation(); + } + + public function testInvalidGTIN(): void + { + $this->validator->validate('1234567890123', new \App\Validator\Constraints\ValidGTIN()); + $this->buildViolation('validator.invalid_gtin') + ->assertRaised(); + } + + protected function createValidator(): ConstraintValidatorInterface + { + return new ValidGTINValidator(); + } +} diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 5692ed25..66053133 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -12401,5 +12401,11 @@ Buerklin-API Authentication server: Update to
+ + + part.gtin + GTIN / EAN + + - \ No newline at end of file + diff --git a/translations/validators.en.xlf b/translations/validators.en.xlf index e2e70d03..ed824f0b 100644 --- a/translations/validators.en.xlf +++ b/translations/validators.en.xlf @@ -247,5 +247,11 @@ There is already a translation defined for this type and language!
+ + + validator.invalid_gtin + This is not an valid GTIN / EAN! + + - \ No newline at end of file + From fd76ca12fc67aeb76d46b867c64d69e75896e563 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 8 Feb 2026 15:32:35 +0100 Subject: [PATCH 091/172] Allow to import GTIN from info providers --- src/Services/InfoProviderSystem/DTOs/PartDetailDTO.php | 2 ++ src/Services/InfoProviderSystem/DTOs/SearchResultDTO.php | 4 ++++ src/Services/InfoProviderSystem/DTOtoEntityConverter.php | 2 ++ .../InfoProviderSystem/Providers/ConradProvider.php | 4 ++++ .../InfoProviderSystem/Providers/ProviderCapabilities.php | 6 ++++++ templates/info_providers/search/part_search.html.twig | 8 +++++++- templates/parts/info/_sidebar.html.twig | 8 ++++++++ translations/messages.en.xlf | 6 ++++++ 8 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/Services/InfoProviderSystem/DTOs/PartDetailDTO.php b/src/Services/InfoProviderSystem/DTOs/PartDetailDTO.php index 41d50510..9700ae57 100644 --- a/src/Services/InfoProviderSystem/DTOs/PartDetailDTO.php +++ b/src/Services/InfoProviderSystem/DTOs/PartDetailDTO.php @@ -42,6 +42,7 @@ class PartDetailDTO extends SearchResultDTO ?ManufacturingStatus $manufacturing_status = null, ?string $provider_url = null, ?string $footprint = null, + ?string $gtin = null, public readonly ?string $notes = null, /** @var FileDTO[]|null */ public readonly ?array $datasheets = null, @@ -68,6 +69,7 @@ class PartDetailDTO extends SearchResultDTO manufacturing_status: $manufacturing_status, provider_url: $provider_url, footprint: $footprint, + gtin: $gtin ); } } diff --git a/src/Services/InfoProviderSystem/DTOs/SearchResultDTO.php b/src/Services/InfoProviderSystem/DTOs/SearchResultDTO.php index a70b2486..085ae17e 100644 --- a/src/Services/InfoProviderSystem/DTOs/SearchResultDTO.php +++ b/src/Services/InfoProviderSystem/DTOs/SearchResultDTO.php @@ -59,6 +59,8 @@ class SearchResultDTO public readonly ?string $provider_url = null, /** @var string|null A footprint representation of the providers page */ public readonly ?string $footprint = null, + /** @var string|null The GTIN / EAN of the part */ + public readonly ?string $gtin = null, ) { if ($preview_image_url !== null) { @@ -90,6 +92,7 @@ class SearchResultDTO 'manufacturing_status' => $this->manufacturing_status?->value, 'provider_url' => $this->provider_url, 'footprint' => $this->footprint, + 'gtin' => $this->gtin, ]; } @@ -112,6 +115,7 @@ class SearchResultDTO manufacturing_status: isset($data['manufacturing_status']) ? ManufacturingStatus::tryFrom($data['manufacturing_status']) : null, provider_url: $data['provider_url'] ?? null, footprint: $data['footprint'] ?? null, + gtin: $data['gtin'] ?? null, ); } } diff --git a/src/Services/InfoProviderSystem/DTOtoEntityConverter.php b/src/Services/InfoProviderSystem/DTOtoEntityConverter.php index a655a0df..d3a7c52c 100644 --- a/src/Services/InfoProviderSystem/DTOtoEntityConverter.php +++ b/src/Services/InfoProviderSystem/DTOtoEntityConverter.php @@ -175,6 +175,8 @@ final class DTOtoEntityConverter $entity->setManufacturingStatus($dto->manufacturing_status ?? ManufacturingStatus::NOT_SET); $entity->setManufacturerProductURL($dto->manufacturer_product_url ?? ''); + $entity->setGtin($dto->gtin); + //Set the provider reference on the part $entity->setProviderReference(InfoProviderReference::fromPartDTO($dto)); diff --git a/src/Services/InfoProviderSystem/Providers/ConradProvider.php b/src/Services/InfoProviderSystem/Providers/ConradProvider.php index 32434dee..3086b7d8 100644 --- a/src/Services/InfoProviderSystem/Providers/ConradProvider.php +++ b/src/Services/InfoProviderSystem/Providers/ConradProvider.php @@ -120,6 +120,7 @@ readonly class ConradProvider implements InfoProviderInterface, URLHandlerInfoPr preview_image_url: $result['image'] ?? null, provider_url: $this->getProductUrl($result['productId']), footprint: $this->getFootprintFromTechnicalDetails($result['technicalDetails'] ?? []), + gtin: $result['ean'] ?? null, ); } @@ -302,6 +303,7 @@ readonly class ConradProvider implements InfoProviderInterface, URLHandlerInfoPr preview_image_url: $data['productShortInformation']['mainImage']['imageUrl'] ?? null, provider_url: $this->getProductUrl($data['shortProductNumber']), footprint: $this->getFootprintFromTechnicalAttributes($data['productFullInformation']['technicalAttributes'] ?? []), + gtin: $data['productFullInformation']['eanCode'] ?? null, notes: $data['productFullInformation']['description'] ?? null, datasheets: $this->productMediaToDatasheets($data['productMedia'] ?? []), parameters: $this->technicalAttributesToParameters($data['productFullInformation']['technicalAttributes'] ?? []), @@ -316,6 +318,8 @@ readonly class ConradProvider implements InfoProviderInterface, URLHandlerInfoPr ProviderCapabilities::PICTURE, ProviderCapabilities::DATASHEET, ProviderCapabilities::PRICE, + ProviderCapabilities::FOOTPRINT, + ProviderCapabilities::GTIN, ]; } diff --git a/src/Services/InfoProviderSystem/Providers/ProviderCapabilities.php b/src/Services/InfoProviderSystem/Providers/ProviderCapabilities.php index bced19de..21fba53b 100644 --- a/src/Services/InfoProviderSystem/Providers/ProviderCapabilities.php +++ b/src/Services/InfoProviderSystem/Providers/ProviderCapabilities.php @@ -43,6 +43,9 @@ enum ProviderCapabilities /** Information about the footprint of a part */ case FOOTPRINT; + /** Provider can provide GTIN for a part */ + case GTIN; + /** * Get the order index for displaying capabilities in a stable order. * @return int @@ -55,6 +58,7 @@ enum ProviderCapabilities self::DATASHEET => 3, self::PRICE => 4, self::FOOTPRINT => 5, + self::GTIN => 6, }; } @@ -66,6 +70,7 @@ enum ProviderCapabilities self::PICTURE => 'picture', self::DATASHEET => 'datasheet', self::PRICE => 'price', + self::GTIN => 'gtin', }; } @@ -77,6 +82,7 @@ enum ProviderCapabilities self::PICTURE => 'fa-image', self::DATASHEET => 'fa-file-alt', self::PRICE => 'fa-money-bill-wave', + self::GTIN => 'fa-barcode', }; } } diff --git a/templates/info_providers/search/part_search.html.twig b/templates/info_providers/search/part_search.html.twig index 3d741c34..a5602618 100644 --- a/templates/info_providers/search/part_search.html.twig +++ b/templates/info_providers/search/part_search.html.twig @@ -94,7 +94,13 @@ {{ dto.footprint }} {% endif %} - {{ helper.m_status_to_badge(dto.manufacturing_status) }} + + {{ helper.m_status_to_badge(dto.manufacturing_status) }} + {% if dto.gtin %} +
+ {{ dto.gtin }} + {% endif %} + {% if dto.provider_url %} diff --git a/templates/parts/info/_sidebar.html.twig b/templates/parts/info/_sidebar.html.twig index 0c353d8f..12060241 100644 --- a/templates/parts/info/_sidebar.html.twig +++ b/templates/parts/info/_sidebar.html.twig @@ -27,6 +27,14 @@ {% endif %} +{% if part.gtin %} +
+
+ {{ part.gtin }} +
+
+{% endif %} + {# Needs Review tag #} {% if part.needsReview %}
diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 66053133..f9689089 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -12407,5 +12407,11 @@ Buerklin-API Authentication server: GTIN / EAN + + + info_providers.capabilities.gtin + GTIN / EAN + + From 1130f71075926084222b8683e9eabf1bc4cdbc44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 8 Feb 2026 15:43:50 +0100 Subject: [PATCH 092/172] Added ability to get GTINs for reichelt and Generic WebURL --- .../Providers/GenericWebProvider.php | 6 ++++-- .../Providers/ReicheltProvider.php | 17 +++++++++++++++-- .../DTOtoEntityConverterTest.php | 15 +++++++++------ 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php index 7fbf5a58..ada72ea2 100644 --- a/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php +++ b/src/Services/InfoProviderSystem/Providers/GenericWebProvider.php @@ -227,10 +227,11 @@ class GenericWebProvider implements InfoProviderInterface mpn: $product->mpn?->toString(), preview_image_url: $image, provider_url: $url, + gtin: $product->gtin14?->toString() ?? $product->gtin13?->toString() ?? $product->gtin12?->toString() ?? $product->gtin8?->toString(), notes: $notes, parameters: $parameters, vendor_infos: $vendor_infos, - mass: $mass + mass: $mass, ); } @@ -429,7 +430,8 @@ class GenericWebProvider implements InfoProviderInterface return [ ProviderCapabilities::BASIC, ProviderCapabilities::PICTURE, - ProviderCapabilities::PRICE + ProviderCapabilities::PRICE, + ProviderCapabilities::GTIN, ]; } } diff --git a/src/Services/InfoProviderSystem/Providers/ReicheltProvider.php b/src/Services/InfoProviderSystem/Providers/ReicheltProvider.php index 5c8efbf1..0adf9ab6 100644 --- a/src/Services/InfoProviderSystem/Providers/ReicheltProvider.php +++ b/src/Services/InfoProviderSystem/Providers/ReicheltProvider.php @@ -84,6 +84,8 @@ class ReicheltProvider implements InfoProviderInterface $name = $element->filter('meta[itemprop="name"]')->attr('content'); $sku = $element->filter('meta[itemprop="sku"]')->attr('content'); + + //Try to extract a picture URL: $pictureURL = $element->filter("div.al_artlogo img")->attr('src'); @@ -95,7 +97,8 @@ class ReicheltProvider implements InfoProviderInterface category: null, manufacturer: $sku, preview_image_url: $pictureURL, - provider_url: $element->filter('a.al_artinfo_link')->attr('href') + provider_url: $element->filter('a.al_artinfo_link')->attr('href'), + ); }); @@ -146,6 +149,14 @@ class ReicheltProvider implements InfoProviderInterface $priceString = $dom->filter('meta[itemprop="price"]')->attr('content'); $currency = $dom->filter('meta[itemprop="priceCurrency"]')->attr('content', 'EUR'); + foreach (['gtin13', 'gtin14', 'gtin12', 'gtin8'] as $gtinType) { + if ($dom->filter("[itemprop=\"$gtinType\"]")->count() > 0) { + $gtin = $dom->filter("[itemprop=\"$gtinType\"]")->innerText(); + break; + } + } + + //Create purchase info $purchaseInfo = new PurchaseInfoDTO( distributor_name: self::DISTRIBUTOR_NAME, @@ -167,10 +178,11 @@ class ReicheltProvider implements InfoProviderInterface mpn: $this->parseMPN($dom), preview_image_url: $json[0]['article_picture'], provider_url: $productPage, + gtin: $gtin, notes: $notes, datasheets: $datasheets, parameters: $this->parseParameters($dom), - vendor_infos: [$purchaseInfo] + vendor_infos: [$purchaseInfo], ); } @@ -273,6 +285,7 @@ class ReicheltProvider implements InfoProviderInterface ProviderCapabilities::PICTURE, ProviderCapabilities::DATASHEET, ProviderCapabilities::PRICE, + ProviderCapabilities::GTIN, ]; } } diff --git a/tests/Services/InfoProviderSystem/DTOtoEntityConverterTest.php b/tests/Services/InfoProviderSystem/DTOtoEntityConverterTest.php index 6c933472..78e79167 100644 --- a/tests/Services/InfoProviderSystem/DTOtoEntityConverterTest.php +++ b/tests/Services/InfoProviderSystem/DTOtoEntityConverterTest.php @@ -159,12 +159,13 @@ class DTOtoEntityConverterTest extends WebTestCase $shopping_infos = [new PurchaseInfoDTO('TestDistributor', 'TestOrderNumber', [new PriceDTO(1, "10.0", 'EUR')])]; $dto = new PartDetailDTO( - provider_key: 'test_provider', provider_id: 'test_id', provider_url: 'https://invalid.invalid/test_id', - name: 'TestPart', description: 'TestDescription', category: 'TestCategory', - manufacturer: 'TestManufacturer', mpn: 'TestMPN', manufacturing_status: ManufacturingStatus::EOL, - preview_image_url: 'https://invalid.invalid/image.png', - footprint: 'DIP8', notes: 'TestNotes', mass: 10.4, - parameters: $parameters, datasheets: $datasheets, vendor_infos: $shopping_infos, images: $images + provider_key: 'test_provider', provider_id: 'test_id', name: 'TestPart', + description: 'TestDescription', category: 'TestCategory', manufacturer: 'TestManufacturer', + mpn: 'TestMPN', preview_image_url: 'https://invalid.invalid/image.png', + manufacturing_status: ManufacturingStatus::EOL, + provider_url: 'https://invalid.invalid/test_id', + footprint: 'DIP8', gtin: "1234567890123", notes: 'TestNotes', datasheets: $datasheets, + images: $images, parameters: $parameters, vendor_infos: $shopping_infos, mass: 10.4 ); $entity = $this->service->convertPart($dto); @@ -180,6 +181,8 @@ class DTOtoEntityConverterTest extends WebTestCase $this->assertEquals($dto->mass, $entity->getMass()); $this->assertEquals($dto->footprint, $entity->getFootprint()); + $this->assertEquals($dto->gtin, $entity->getGtin()); + //We just check that the lenghts of parameters, datasheets, images and shopping infos are the same //The actual content is tested in the corresponding tests $this->assertCount(count($parameters), $entity->getParameters()); From a962e5e019568447cdac17e8d4a13ada6906000a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 8 Feb 2026 15:51:39 +0100 Subject: [PATCH 093/172] Allow to order and filter by GTIN in part tables --- src/DataTables/Filters/PartFilter.php | 2 ++ src/DataTables/PartsDataTable.php | 4 ++++ src/Form/Filters/PartFilterType.php | 4 ++++ src/Settings/BehaviorSettings/PartTableColumns.php | 1 + templates/parts/lists/_filter.html.twig | 3 ++- translations/messages.en.xlf | 6 ++++++ 6 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/DataTables/Filters/PartFilter.php b/src/DataTables/Filters/PartFilter.php index cf185dfd..a08293ca 100644 --- a/src/DataTables/Filters/PartFilter.php +++ b/src/DataTables/Filters/PartFilter.php @@ -66,6 +66,7 @@ class PartFilter implements FilterInterface public readonly BooleanConstraint $favorite; public readonly BooleanConstraint $needsReview; public readonly NumberConstraint $mass; + public readonly TextConstraint $gtin; public readonly DateTimeConstraint $lastModified; public readonly DateTimeConstraint $addedDate; public readonly EntityConstraint $category; @@ -132,6 +133,7 @@ class PartFilter implements FilterInterface $this->measurementUnit = new EntityConstraint($nodesListBuilder, MeasurementUnit::class, 'part.partUnit'); $this->partCustomState = new EntityConstraint($nodesListBuilder, PartCustomState::class, 'part.partCustomState'); $this->mass = new NumberConstraint('part.mass'); + $this->gtin = new TextConstraint('part.gtin'); $this->dbId = new IntConstraint('part.id'); $this->ipn = new TextConstraint('part.ipn'); $this->addedDate = new DateTimeConstraint('part.addedDate'); diff --git a/src/DataTables/PartsDataTable.php b/src/DataTables/PartsDataTable.php index 0baee630..fbc5211d 100644 --- a/src/DataTables/PartsDataTable.php +++ b/src/DataTables/PartsDataTable.php @@ -218,6 +218,10 @@ final class PartsDataTable implements DataTableTypeInterface 'label' => $this->translator->trans('part.table.mass'), 'unit' => 'g' ]) + ->add('gtin', TextColumn::class, [ + 'label' => $this->translator->trans('part.table.gtin'), + 'orderField' => 'NATSORT(part.gtin)' + ]) ->add('tags', TagsColumn::class, [ 'label' => $this->translator->trans('part.table.tags'), ]) diff --git a/src/Form/Filters/PartFilterType.php b/src/Form/Filters/PartFilterType.php index e101c635..25fe70b2 100644 --- a/src/Form/Filters/PartFilterType.php +++ b/src/Form/Filters/PartFilterType.php @@ -135,6 +135,10 @@ class PartFilterType extends AbstractType 'min' => 0, ]); + $builder->add('gtin', TextConstraintType::class, [ + 'label' => 'part.gtin', + ]); + $builder->add('measurementUnit', StructuralEntityConstraintType::class, [ 'label' => 'part.edit.partUnit', 'entity_class' => MeasurementUnit::class diff --git a/src/Settings/BehaviorSettings/PartTableColumns.php b/src/Settings/BehaviorSettings/PartTableColumns.php index c025c952..2ea66525 100644 --- a/src/Settings/BehaviorSettings/PartTableColumns.php +++ b/src/Settings/BehaviorSettings/PartTableColumns.php @@ -48,6 +48,7 @@ enum PartTableColumns : string implements TranslatableInterface case MPN = "manufacturer_product_number"; case CUSTOM_PART_STATE = 'partCustomState'; case MASS = "mass"; + case GTIN = "gtin"; case TAGS = "tags"; case ATTACHMENTS = "attachments"; case EDIT = "edit"; diff --git a/templates/parts/lists/_filter.html.twig b/templates/parts/lists/_filter.html.twig index 2fb5bff2..3130f379 100644 --- a/templates/parts/lists/_filter.html.twig +++ b/templates/parts/lists/_filter.html.twig @@ -65,6 +65,7 @@ {{ form_row(filterForm.mass) }} {{ form_row(filterForm.dbId) }} {{ form_row(filterForm.ipn) }} + {{ form_row(filterForm.gtin) }} {{ form_row(filterForm.lastModified) }} {{ form_row(filterForm.addedDate) }}
@@ -163,4 +164,4 @@ {{ form_end(filterForm) }} - \ No newline at end of file + diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index f9689089..8953982d 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -12413,5 +12413,11 @@ Buerklin-API Authentication server: GTIN / EAN
+ + + part.table.gtin + GTIN + + From 4de6dbba278489c296ad9344eb775bc35665a1da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 8 Feb 2026 15:53:45 +0100 Subject: [PATCH 094/172] Show GTIN in part extended info tab --- templates/parts/info/_extended_infos.html.twig | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/templates/parts/info/_extended_infos.html.twig b/templates/parts/info/_extended_infos.html.twig index 4ed60a09..9cb4e4e5 100644 --- a/templates/parts/info/_extended_infos.html.twig +++ b/templates/parts/info/_extended_infos.html.twig @@ -42,6 +42,11 @@ {{ part.ipn ?? 'part.ipn.not_defined'|trans }} + + {% trans %}part.gtin{% endtrans %} + {{ part.gtin ?? '' }} + + {# Favorite status #} {% trans %}part.isFavorite{% endtrans %} {{ helper.boolean_badge(part.favorite) }} @@ -106,4 +111,4 @@ - \ No newline at end of file + From 35e844dd7bfbe079d1e093c98f11cf6332d15ced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 8 Feb 2026 16:06:01 +0100 Subject: [PATCH 095/172] Allow to scan gtin barcodes and find parts via it --- src/Form/LabelSystem/ScanDialogType.php | 3 +- .../BarcodeScanner/BarcodeRedirector.php | 14 ++++ .../BarcodeScanner/BarcodeScanHelper.php | 13 ++++ .../BarcodeScanner/BarcodeSourceType.php | 7 +- .../BarcodeScanner/GTINBarcodeScanResult.php | 64 +++++++++++++++++++ translations/messages.en.xlf | 6 ++ 6 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 src/Services/LabelSystem/BarcodeScanner/GTINBarcodeScanResult.php diff --git a/src/Form/LabelSystem/ScanDialogType.php b/src/Form/LabelSystem/ScanDialogType.php index 13ff8e6f..9199c31d 100644 --- a/src/Form/LabelSystem/ScanDialogType.php +++ b/src/Form/LabelSystem/ScanDialogType.php @@ -75,7 +75,8 @@ class ScanDialogType extends AbstractType BarcodeSourceType::INTERNAL => 'scan_dialog.mode.internal', BarcodeSourceType::IPN => 'scan_dialog.mode.ipn', BarcodeSourceType::USER_DEFINED => 'scan_dialog.mode.user', - BarcodeSourceType::EIGP114 => 'scan_dialog.mode.eigp' + BarcodeSourceType::EIGP114 => 'scan_dialog.mode.eigp', + BarcodeSourceType::GTIN => 'scan_dialog.mode.gtin', }, ]); diff --git a/src/Services/LabelSystem/BarcodeScanner/BarcodeRedirector.php b/src/Services/LabelSystem/BarcodeScanner/BarcodeRedirector.php index d5ddc1de..1a3c29c2 100644 --- a/src/Services/LabelSystem/BarcodeScanner/BarcodeRedirector.php +++ b/src/Services/LabelSystem/BarcodeScanner/BarcodeRedirector.php @@ -77,6 +77,10 @@ final class BarcodeRedirector return $this->getURLVendorBarcode($barcodeScan); } + if ($barcodeScan instanceof GTINBarcodeScanResult) { + return $this->getURLGTINBarcode($barcodeScan); + } + throw new InvalidArgumentException('Unknown $barcodeScan type: '.get_class($barcodeScan)); } @@ -111,6 +115,16 @@ final class BarcodeRedirector return $this->urlGenerator->generate('app_part_show', ['id' => $part->getID()]); } + private function getURLGTINBarcode(GTINBarcodeScanResult $barcodeScan): string + { + $part = $this->em->getRepository(Part::class)->findOneBy(['gtin' => $barcodeScan->gtin]); + if (!$part instanceof Part) { + throw new EntityNotFoundException(); + } + + return $this->urlGenerator->generate('app_part_show', ['id' => $part->getID()]); + } + /** * Gets a part from a scan of a Vendor Barcode by filtering for parts * with the same Info Provider Id or, if that fails, by looking for parts with a diff --git a/src/Services/LabelSystem/BarcodeScanner/BarcodeScanHelper.php b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanHelper.php index e5930b36..520c9f3b 100644 --- a/src/Services/LabelSystem/BarcodeScanner/BarcodeScanHelper.php +++ b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanHelper.php @@ -92,6 +92,9 @@ final class BarcodeScanHelper if ($type === BarcodeSourceType::EIGP114) { return $this->parseEIGP114Barcode($input); } + if ($type === BarcodeSourceType::GTIN) { + return $this->parseGTINBarcode($input); + } //Null means auto and we try the different formats $result = $this->parseInternalBarcode($input); @@ -117,9 +120,19 @@ final class BarcodeScanHelper return $result; } + //If the result is a valid GTIN barcode, we can parse it directly + if (GTINBarcodeScanResult::isValidGTIN($input)) { + return $this->parseGTINBarcode($input); + } + throw new InvalidArgumentException('Unknown barcode'); } + private function parseGTINBarcode(string $input): GTINBarcodeScanResult + { + return new GTINBarcodeScanResult($input); + } + private function parseEIGP114Barcode(string $input): EIGP114BarcodeScanResult { return EIGP114BarcodeScanResult::parseFormat06Code($input); diff --git a/src/Services/LabelSystem/BarcodeScanner/BarcodeSourceType.php b/src/Services/LabelSystem/BarcodeScanner/BarcodeSourceType.php index 40f707de..43643d12 100644 --- a/src/Services/LabelSystem/BarcodeScanner/BarcodeSourceType.php +++ b/src/Services/LabelSystem/BarcodeScanner/BarcodeSourceType.php @@ -42,4 +42,9 @@ enum BarcodeSourceType * EIGP114 formatted barcodes like used by digikey, mouser, etc. */ case EIGP114; -} \ No newline at end of file + + /** + * GTIN /EAN barcodes, which are used on most products in the world. These are checked with the GTIN field of a part. + */ + case GTIN; +} diff --git a/src/Services/LabelSystem/BarcodeScanner/GTINBarcodeScanResult.php b/src/Services/LabelSystem/BarcodeScanner/GTINBarcodeScanResult.php new file mode 100644 index 00000000..389bfdcc --- /dev/null +++ b/src/Services/LabelSystem/BarcodeScanner/GTINBarcodeScanResult.php @@ -0,0 +1,64 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Services\LabelSystem\BarcodeScanner; + +use GtinValidation\GtinValidator; + +readonly class GTINBarcodeScanResult implements BarcodeScanResultInterface +{ + + private GtinValidator $validator; + + public function __construct( + public string $gtin, + ) { + $this->validator = new GtinValidator($this->gtin); + } + + public function getDecodedForInfoMode(): array + { + $obj = $this->validator->getGtinObject(); + return [ + 'GTIN' => $this->gtin, + 'GTIN type' => $obj->getType(), + 'Valid' => $this->validator->isValid() ? 'Yes' : 'No', + 'Reference Number' => $obj->getReferenceNumber(), + 'Check Digit' => $obj->getCheckDigit(), + ]; + } + + /** + * Checks if the given input is a valid GTIN. This is used to determine whether a scanned barcode should be interpreted as a GTIN or not. + * @param string $input + * @return bool + */ + public static function isValidGTIN(string $input): bool + { + try { + return (new GtinValidator($input))->isValid(); + } catch (\Exception $e) { + return false; + } + } +} diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 8953982d..b2a577b0 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -12419,5 +12419,11 @@ Buerklin-API Authentication server: GTIN
+ + + scan_dialog.mode.gtin + GTIN / EAN + + From 2c56ec746c6a5878052dee63a8f6d83428c1b1e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 8 Feb 2026 16:07:11 +0100 Subject: [PATCH 096/172] Improved translation --- translations/messages.en.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index b2a577b0..a1ebc9b9 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -12422,7 +12422,7 @@ Buerklin-API Authentication server: scan_dialog.mode.gtin - GTIN / EAN + GTIN / EAN barcode From a4c2b8f885b1358e971897af9ed57ca16448f6a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 8 Feb 2026 19:30:06 +0100 Subject: [PATCH 097/172] Added the option to only show attachment types for certain element classes --- src/Entity/Attachments/Attachment.php | 2 +- src/Entity/Attachments/AttachmentType.php | 84 ++++++++++++++++++- .../AdminPages/AttachmentTypeAdminForm.php | 27 +++++- src/Form/AttachmentFormType.php | 5 +- src/Form/Type/AttachmentTypeType.php | 56 +++++++++++++ .../admin/attachment_type_admin.html.twig | 1 + .../Entity/Attachments/AttachmentTypeTest.php | 49 +++++++++++ translations/messages.en.xlf | 12 +++ 8 files changed, 231 insertions(+), 5 deletions(-) create mode 100644 src/Form/Type/AttachmentTypeType.php diff --git a/src/Entity/Attachments/Attachment.php b/src/Entity/Attachments/Attachment.php index ac625e92..d4b15ac7 100644 --- a/src/Entity/Attachments/Attachment.php +++ b/src/Entity/Attachments/Attachment.php @@ -136,7 +136,7 @@ abstract class Attachment extends AbstractNamedDBElement * @var string The class of the element that can be passed to this attachment. Must be overridden in subclasses. * @phpstan-var class-string */ - protected const ALLOWED_ELEMENT_CLASS = AttachmentContainingDBElement::class; + public const ALLOWED_ELEMENT_CLASS = AttachmentContainingDBElement::class; /** * @var AttachmentUpload|null The options used for uploading a file to this attachment or modify it. diff --git a/src/Entity/Attachments/AttachmentType.php b/src/Entity/Attachments/AttachmentType.php index 273e800a..375defa0 100644 --- a/src/Entity/Attachments/AttachmentType.php +++ b/src/Entity/Attachments/AttachmentType.php @@ -135,11 +135,16 @@ class AttachmentType extends AbstractStructuralDBElement protected Collection $attachments_with_type; /** - * @var array|null A list of allowed targets where this attachment type can be assigned to. + * @var string[]|null A list of allowed targets where this attachment type can be assigned to, as a list of portable names */ #[ORM\Column(type: Types::SIMPLE_ARRAY, nullable: true)] protected ?array $allowed_targets = null; + /** + * @var class-string[]|null + */ + protected ?array $allowed_targets_parsed_cache = null; + #[Groups(['attachment_type:read'])] protected ?\DateTimeImmutable $addedDate = null; #[Groups(['attachment_type:read'])] @@ -190,4 +195,81 @@ class AttachmentType extends AbstractStructuralDBElement return $this; } + + /** + * Returns a list of allowed targets as class names (e.g. PartAttachment::class), where this attachment type can be assigned to. If null, there are no restrictions. + * @return class-string[]|null + */ + public function getAllowedTargets(): ?array + { + //Use cached value if available + if ($this->allowed_targets_parsed_cache !== null) { + return $this->allowed_targets_parsed_cache; + } + + if (empty($this->allowed_targets)) { + return null; + } + + $tmp = []; + foreach ($this->allowed_targets as $target) { + if (Attachment::ORM_DISCRIMINATOR_MAP[$target]) { + $tmp[] = Attachment::ORM_DISCRIMINATOR_MAP[$target]; + } + //Otherwise ignore the entry, as it is invalid + } + + //Cache the parsed value + $this->allowed_targets_parsed_cache = $tmp; + return $tmp; + } + + /** + * Sets the allowed targets for this attachment type. Allowed targets are specified as a list of class names (e.g. PartAttachment::class). If null is passed, there are no restrictions. + * @param class-string[]|null $allowed_targets + * @return $this + */ + public function setAllowedTargets(?array $allowed_targets): self + { + if ($allowed_targets === null) { + $this->allowed_targets = null; + } else { + $tmp = []; + foreach ($allowed_targets as $target) { + $discriminator = array_search($target, Attachment::ORM_DISCRIMINATOR_MAP, true); + if ($discriminator !== false) { + $tmp[] = $discriminator; + } else { + throw new \InvalidArgumentException("Invalid allowed target: $target. Allowed targets must be a class name of an Attachment subclass."); + } + } + $this->allowed_targets = $tmp; + } + + //Reset the cache + $this->allowed_targets_parsed_cache = null; + return $this; + } + + /** + * Checks if this attachment type is allowed for the given attachment target. + * @param Attachment|string $attachment + * @return bool + */ + public function isAllowedForTarget(Attachment|string $attachment): bool + { + //If no restrictions are set, allow all targets + if ($this->getAllowedTargets() === null) { + return true; + } + + //Iterate over all allowed targets and check if the attachment is an instance of any of them + foreach ($this->getAllowedTargets() as $allowed_target) { + if (is_a($attachment, $allowed_target, true)) { + return true; + } + } + + return false; + } } diff --git a/src/Form/AdminPages/AttachmentTypeAdminForm.php b/src/Form/AdminPages/AttachmentTypeAdminForm.php index d777d4d4..cf410a43 100644 --- a/src/Form/AdminPages/AttachmentTypeAdminForm.php +++ b/src/Form/AdminPages/AttachmentTypeAdminForm.php @@ -22,17 +22,23 @@ declare(strict_types=1); namespace App\Form\AdminPages; +use App\Entity\Attachments\Attachment; +use App\Entity\Attachments\PartAttachment; +use App\Entity\Attachments\ProjectAttachment; +use App\Services\ElementTypeNameGenerator; use Symfony\Bundle\SecurityBundle\Security; use App\Entity\Base\AbstractNamedDBElement; use App\Services\Attachments\FileTypeFilterTools; use App\Services\LogSystem\EventCommentNeededHelper; use Symfony\Component\Form\CallbackTransformer; +use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\Translation\StaticMessage; class AttachmentTypeAdminForm extends BaseEntityAdminForm { - public function __construct(Security $security, protected FileTypeFilterTools $filterTools, EventCommentNeededHelper $eventCommentNeededHelper) + public function __construct(Security $security, protected FileTypeFilterTools $filterTools, EventCommentNeededHelper $eventCommentNeededHelper, private readonly ElementTypeNameGenerator $elementTypeNameGenerator) { parent::__construct($security, $eventCommentNeededHelper); } @@ -41,6 +47,25 @@ class AttachmentTypeAdminForm extends BaseEntityAdminForm { $is_new = null === $entity->getID(); + + $choiceLabel = function (string $class) { + if (!is_a($class, Attachment::class, true)) { + return $class; + } + return new StaticMessage($this->elementTypeNameGenerator->typeLabel($class::ALLOWED_ELEMENT_CLASS)); + }; + + + $builder->add('allowed_targets', ChoiceType::class, [ + 'required' => false, + 'choices' => array_values(Attachment::ORM_DISCRIMINATOR_MAP), + 'choice_label' => $choiceLabel, + 'preferred_choices' => [PartAttachment::class, ProjectAttachment::class], + 'label' => 'attachment_type.edit.allowed_targets', + 'help' => 'attachment_type.edit.allowed_targets.help', + 'multiple' => true, + ]); + $builder->add('filetype_filter', TextType::class, [ 'required' => false, 'label' => 'attachment_type.edit.filetype_filter', diff --git a/src/Form/AttachmentFormType.php b/src/Form/AttachmentFormType.php index eb484a58..5cbde178 100644 --- a/src/Form/AttachmentFormType.php +++ b/src/Form/AttachmentFormType.php @@ -22,6 +22,7 @@ declare(strict_types=1); namespace App\Form; +use App\Form\Type\AttachmentTypeType; use App\Settings\SystemSettings\AttachmentsSettings; use Symfony\Bundle\SecurityBundle\Security; use App\Entity\Attachments\Attachment; @@ -67,10 +68,10 @@ class AttachmentFormType extends AbstractType 'required' => false, 'empty_data' => '', ]) - ->add('attachment_type', StructuralEntityType::class, [ + ->add('attachment_type', AttachmentTypeType::class, [ 'label' => 'attachment.edit.attachment_type', - 'class' => AttachmentType::class, 'disable_not_selectable' => true, + 'attachment_filter_class' => $options['data_class'] ?? null, 'allow_add' => $this->security->isGranted('@attachment_types.create'), ]); diff --git a/src/Form/Type/AttachmentTypeType.php b/src/Form/Type/AttachmentTypeType.php new file mode 100644 index 00000000..099ed282 --- /dev/null +++ b/src/Form/Type/AttachmentTypeType.php @@ -0,0 +1,56 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Form\Type; + +use App\Entity\Attachments\AttachmentType; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\OptionsResolver\Options; +use Symfony\Component\OptionsResolver\OptionsResolver; + +/** + * Form type to select the AttachmentType to use in an attachment form. This is used to filter the available attachment types based on the target class. + */ +class AttachmentTypeType extends AbstractType +{ + public function getParent(): ?string + { + return StructuralEntityType::class; + } + + public function configureOptions(OptionsResolver $resolver) + { + $resolver->define('attachment_filter_class')->allowedTypes('null', 'string')->default(null); + + $resolver->setDefault('class', AttachmentType::class); + + $resolver->setDefault('choice_filter', function (Options $options) { + if (is_a($options['class'], AttachmentType::class, true) && $options['attachment_filter_class'] !== null) { + return static function (?AttachmentType $choice) use ($options) { + return $choice?->isAllowedForTarget($options['attachment_filter_class']); + }; + } + return null; + }); + } +} diff --git a/templates/admin/attachment_type_admin.html.twig b/templates/admin/attachment_type_admin.html.twig index 87a053af..9aeba934 100644 --- a/templates/admin/attachment_type_admin.html.twig +++ b/templates/admin/attachment_type_admin.html.twig @@ -6,6 +6,7 @@ {% block additional_controls %} {{ form_row(form.filetype_filter) }} + {{ form_row(form.allowed_targets) }} {{ form_row(form.alternative_names) }} {% endblock %} diff --git a/tests/Entity/Attachments/AttachmentTypeTest.php b/tests/Entity/Attachments/AttachmentTypeTest.php index f9f781d8..ea80db11 100644 --- a/tests/Entity/Attachments/AttachmentTypeTest.php +++ b/tests/Entity/Attachments/AttachmentTypeTest.php @@ -23,6 +23,8 @@ declare(strict_types=1); namespace App\Tests\Entity\Attachments; use App\Entity\Attachments\AttachmentType; +use App\Entity\Attachments\PartAttachment; +use App\Entity\Attachments\UserAttachment; use Doctrine\Common\Collections\Collection; use PHPUnit\Framework\TestCase; @@ -34,4 +36,51 @@ class AttachmentTypeTest extends TestCase $this->assertInstanceOf(Collection::class, $attachment_type->getAttachmentsForType()); $this->assertEmpty($attachment_type->getFiletypeFilter()); } + + public function testSetAllowedTargets(): void + { + $attachmentType = new AttachmentType(); + + + $this->expectException(\InvalidArgumentException::class); + $attachmentType->setAllowedTargets(['target1', 'target2']); + } + + public function testGetSetAllowedTargets(): void + { + $attachmentType = new AttachmentType(); + + $attachmentType->setAllowedTargets([PartAttachment::class, UserAttachment::class]); + $this->assertSame([PartAttachment::class, UserAttachment::class], $attachmentType->getAllowedTargets()); + //Caching should also work + $this->assertSame([PartAttachment::class, UserAttachment::class], $attachmentType->getAllowedTargets()); + + //Setting null should reset the allowed targets + $attachmentType->setAllowedTargets(null); + $this->assertNull($attachmentType->getAllowedTargets()); + } + + public function testIsAllowedForTarget(): void + { + $attachmentType = new AttachmentType(); + + //By default, all targets should be allowed + $this->assertTrue($attachmentType->isAllowedForTarget(PartAttachment::class)); + $this->assertTrue($attachmentType->isAllowedForTarget(UserAttachment::class)); + + //Set specific allowed targets + $attachmentType->setAllowedTargets([PartAttachment::class]); + $this->assertTrue($attachmentType->isAllowedForTarget(PartAttachment::class)); + $this->assertFalse($attachmentType->isAllowedForTarget(UserAttachment::class)); + + //Set both targets + $attachmentType->setAllowedTargets([PartAttachment::class, UserAttachment::class]); + $this->assertTrue($attachmentType->isAllowedForTarget(PartAttachment::class)); + $this->assertTrue($attachmentType->isAllowedForTarget(UserAttachment::class)); + + //Reset allowed targets + $attachmentType->setAllowedTargets(null); + $this->assertTrue($attachmentType->isAllowedForTarget(PartAttachment::class)); + $this->assertTrue($attachmentType->isAllowedForTarget(UserAttachment::class)); + } } diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index a1ebc9b9..f47c4e9e 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -12425,5 +12425,17 @@ Buerklin-API Authentication server: GTIN / EAN barcode
+ + + attachment_type.edit.allowed_targets + Use only for + + + + + attachment_type.edit.allowed_targets.help + Make this attachment type only available for certain element classes. Leave empty to show this attachment type for all element classes. + + From 90c82aab2e4d4e9bed3c184cf772783d93d85af7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 8 Feb 2026 19:31:45 +0100 Subject: [PATCH 098/172] Only show the created avatar attachment type for user attachments --- src/Form/AdminPages/AttachmentTypeAdminForm.php | 2 +- src/Services/UserSystem/UserAvatarHelper.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Form/AdminPages/AttachmentTypeAdminForm.php b/src/Form/AdminPages/AttachmentTypeAdminForm.php index cf410a43..7f9e7646 100644 --- a/src/Form/AdminPages/AttachmentTypeAdminForm.php +++ b/src/Form/AdminPages/AttachmentTypeAdminForm.php @@ -52,7 +52,7 @@ class AttachmentTypeAdminForm extends BaseEntityAdminForm if (!is_a($class, Attachment::class, true)) { return $class; } - return new StaticMessage($this->elementTypeNameGenerator->typeLabel($class::ALLOWED_ELEMENT_CLASS)); + return new StaticMessage($this->elementTypeNameGenerator->typeLabelPlural($class::ALLOWED_ELEMENT_CLASS)); }; diff --git a/src/Services/UserSystem/UserAvatarHelper.php b/src/Services/UserSystem/UserAvatarHelper.php index 9dbe9c12..a1a69cb9 100644 --- a/src/Services/UserSystem/UserAvatarHelper.php +++ b/src/Services/UserSystem/UserAvatarHelper.php @@ -154,6 +154,7 @@ class UserAvatarHelper $attachment_type = new AttachmentType(); $attachment_type->setName('Avatars'); $attachment_type->setFiletypeFilter('image/*'); + $attachment_type->setAllowedTargets([UserAttachment::class]); $this->entityManager->persist($attachment_type); } From f95e39748e7d138bc22083d29a9efce99b1aa39f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 8 Feb 2026 19:37:44 +0100 Subject: [PATCH 099/172] Fixed PHPstan issue --- src/Entity/Attachments/AttachmentType.php | 2 +- src/Services/EntityMergers/Mergers/PartMerger.php | 3 ++- src/Services/InfoProviderSystem/Providers/ReicheltProvider.php | 1 + .../LabelSystem/BarcodeScanner/GTINBarcodeScanResult.php | 2 -- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Entity/Attachments/AttachmentType.php b/src/Entity/Attachments/AttachmentType.php index 375defa0..7a314ffe 100644 --- a/src/Entity/Attachments/AttachmentType.php +++ b/src/Entity/Attachments/AttachmentType.php @@ -213,7 +213,7 @@ class AttachmentType extends AbstractStructuralDBElement $tmp = []; foreach ($this->allowed_targets as $target) { - if (Attachment::ORM_DISCRIMINATOR_MAP[$target]) { + if (isset(Attachment::ORM_DISCRIMINATOR_MAP[$target])) { $tmp[] = Attachment::ORM_DISCRIMINATOR_MAP[$target]; } //Otherwise ignore the entry, as it is invalid diff --git a/src/Services/EntityMergers/Mergers/PartMerger.php b/src/Services/EntityMergers/Mergers/PartMerger.php index d1f5c137..8397257e 100644 --- a/src/Services/EntityMergers/Mergers/PartMerger.php +++ b/src/Services/EntityMergers/Mergers/PartMerger.php @@ -59,6 +59,7 @@ class PartMerger implements EntityMergerInterface $this->useOtherValueIfNotEmtpy($target, $other, 'manufacturer_product_number'); $this->useOtherValueIfNotEmtpy($target, $other, 'mass'); $this->useOtherValueIfNotEmtpy($target, $other, 'ipn'); + $this->useOtherValueIfNotEmtpy($target, $other, 'gtin'); //Merge relations to other entities $this->useOtherValueIfNotNull($target, $other, 'manufacturer'); @@ -184,4 +185,4 @@ class PartMerger implements EntityMergerInterface } } } -} \ No newline at end of file +} diff --git a/src/Services/InfoProviderSystem/Providers/ReicheltProvider.php b/src/Services/InfoProviderSystem/Providers/ReicheltProvider.php index 0adf9ab6..88bf33cb 100644 --- a/src/Services/InfoProviderSystem/Providers/ReicheltProvider.php +++ b/src/Services/InfoProviderSystem/Providers/ReicheltProvider.php @@ -149,6 +149,7 @@ class ReicheltProvider implements InfoProviderInterface $priceString = $dom->filter('meta[itemprop="price"]')->attr('content'); $currency = $dom->filter('meta[itemprop="priceCurrency"]')->attr('content', 'EUR'); + $gtin = null; foreach (['gtin13', 'gtin14', 'gtin12', 'gtin8'] as $gtinType) { if ($dom->filter("[itemprop=\"$gtinType\"]")->count() > 0) { $gtin = $dom->filter("[itemprop=\"$gtinType\"]")->innerText(); diff --git a/src/Services/LabelSystem/BarcodeScanner/GTINBarcodeScanResult.php b/src/Services/LabelSystem/BarcodeScanner/GTINBarcodeScanResult.php index 389bfdcc..30aaa223 100644 --- a/src/Services/LabelSystem/BarcodeScanner/GTINBarcodeScanResult.php +++ b/src/Services/LabelSystem/BarcodeScanner/GTINBarcodeScanResult.php @@ -43,8 +43,6 @@ readonly class GTINBarcodeScanResult implements BarcodeScanResultInterface 'GTIN' => $this->gtin, 'GTIN type' => $obj->getType(), 'Valid' => $this->validator->isValid() ? 'Yes' : 'No', - 'Reference Number' => $obj->getReferenceNumber(), - 'Check Digit' => $obj->getCheckDigit(), ]; } From 3bff5fa8bd313889c7a52243e86e6fc379aeae11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 8 Feb 2026 21:54:34 +0100 Subject: [PATCH 100/172] Allow to set if prices contain VAT or not in orderdetail --- .../elements/collection_type_controller.js | 12 ++- assets/js/tristate_checkboxes.js | 3 +- src/Entity/PriceInformations/Orderdetail.php | 45 ++++++++++++ src/Entity/PriceInformations/Pricedetail.php | 32 ++++---- src/Form/Part/OrderdetailType.php | 6 ++ .../parts/edit/edit_form_styles.html.twig | 3 +- tests/Entity/PriceSystem/OrderdetailTest.php | 73 +++++++++++++++++++ translations/messages.en.xlf | 6 ++ 8 files changed, 159 insertions(+), 21 deletions(-) diff --git a/assets/controllers/elements/collection_type_controller.js b/assets/controllers/elements/collection_type_controller.js index 14b683e0..67022ef2 100644 --- a/assets/controllers/elements/collection_type_controller.js +++ b/assets/controllers/elements/collection_type_controller.js @@ -74,16 +74,24 @@ export default class extends Controller { const newElementStr = this.htmlDecode(prototype.replace(regex, this.generateUID())); + let ret = null; + //Insert new html after the last child element //If the table has a tbody, insert it there //Afterwards return the newly created row if(targetTable.tBodies[0]) { targetTable.tBodies[0].insertAdjacentHTML('beforeend', newElementStr); - return targetTable.tBodies[0].lastElementChild; + ret = targetTable.tBodies[0].lastElementChild; } else { //Otherwise just insert it targetTable.insertAdjacentHTML('beforeend', newElementStr); - return targetTable.lastElementChild; + ret = targetTable.lastElementChild; } + + //Trigger an event to notify other components that a new element has been created, so they can for example initialize select2 on it + targetTable.dispatchEvent(new CustomEvent("collection:elementAdded", {bubbles: true})); + + return ret; + } /** diff --git a/assets/js/tristate_checkboxes.js b/assets/js/tristate_checkboxes.js index 4cf4fc1e..467099ab 100644 --- a/assets/js/tristate_checkboxes.js +++ b/assets/js/tristate_checkboxes.js @@ -56,7 +56,8 @@ class TristateHelper { document.addEventListener("turbo:load", listener); document.addEventListener("turbo:render", listener); + document.addEventListener("collection:elementAdded", listener); } } -export default new TristateHelper(); \ No newline at end of file +export default new TristateHelper(); diff --git a/src/Entity/PriceInformations/Orderdetail.php b/src/Entity/PriceInformations/Orderdetail.php index 8ed76a46..9a9a2823 100644 --- a/src/Entity/PriceInformations/Orderdetail.php +++ b/src/Entity/PriceInformations/Orderdetail.php @@ -52,6 +52,7 @@ use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; use Symfony\Component\Serializer\Annotation\Groups; +use Symfony\Component\Serializer\Annotation\SerializedName; use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Constraints\Length; @@ -388,6 +389,50 @@ class Orderdetail extends AbstractDBElement implements TimeStampableInterface, N return $this; } + /** + * Checks if the prices of this orderdetail include VAT. This is determined by checking the pricedetails of this + * orderdetail. If there are no pricedetails or if the pricedetails have conflicting values, null is returned. + * @return bool|null + */ + #[Groups(['orderdetail:read'])] + #[SerializedName('prices_include_vat')] + public function getPricesIncludesVAT(): ?bool + { + $value = null; + //We determine that via the pricedetails + foreach ($this->getPricedetails() as $pricedetail) { + /** @var Pricedetail $pricedetail */ + if ($pricedetail->getIncludesVat() === null) { + return null; // If any pricedetail doesn't specify this, we can't determine it + } + + if ($value === null) { + $value = $pricedetail->getIncludesVat(); // Set initial value + } elseif ($value !== $pricedetail->getIncludesVat()) { + return null; // If there are conflicting values, we can't determine it + } + } + + return $value; + } + + /** + * Sets whether the prices of this orderdetail include VAT. This is set for all pricedetails of this orderdetail. + * @param bool|null $includesVat + * @return $this + */ + #[Groups(['orderdetail:write'])] + #[SerializedName('prices_include_vat')] + public function setPricesIncludesVAT(?bool $includesVat): self + { + foreach ($this->getPricedetails() as $pricedetail) { + /** @var Pricedetail $pricedetail */ + $pricedetail->setIncludesVat($includesVat); + } + + return $this; + } + public function getName(): string { return $this->getSupplierPartNr(); diff --git a/src/Entity/PriceInformations/Pricedetail.php b/src/Entity/PriceInformations/Pricedetail.php index b98ee056..7deb64f9 100644 --- a/src/Entity/PriceInformations/Pricedetail.php +++ b/src/Entity/PriceInformations/Pricedetail.php @@ -124,9 +124,9 @@ class Pricedetail extends AbstractDBElement implements TimeStampableInterface /** * @var bool|null Whether the price includes VAT or not. Null means, that it is not specified, if the price includes VAT or not. */ - #[ORM\Column(type: Types::BOOLEAN, nullable: true)] + #[ORM\Column(name: "include_vat", type: Types::BOOLEAN, nullable: true)] #[Groups(['extended', 'full', 'import', 'pricedetail:read', 'pricedetail:write'])] - protected ?bool $include_vat = null; + protected ?bool $includes_vat = null; public function __construct() { @@ -271,6 +271,15 @@ class Pricedetail extends AbstractDBElement implements TimeStampableInterface return $this->currency?->getIsoCode(); } + /** + * Returns whether the price includes VAT or not. Null means, that it is not specified, if the price includes VAT or not. + * @return bool|null + */ + public function getIncludesVat(): ?bool + { + return $this->includes_vat; + } + /******************************************************************************** * * Setters @@ -369,24 +378,13 @@ class Pricedetail extends AbstractDBElement implements TimeStampableInterface } /** - * Returns whether the price includes VAT or not. Null means, that it is not specified, if the price includes VAT or not. - * @return bool|null - */ - public function getIncludeVat(): ?bool - { - return $this->include_vat; - } - - /** - * Sets whether the price includes VAT or not. Null means, that it is not specified, if the price includes VAT or not. - * @param bool|null $include_vat + * Set whether the price includes VAT or not. Null means, that it is not specified, if the price includes VAT or not. + * @param bool|null $includes_vat * @return $this */ - public function setIncludeVat(?bool $include_vat): self + public function setIncludesVat(?bool $includes_vat): self { - $this->include_vat = $include_vat; + $this->includes_vat = $includes_vat; return $this; } - - } diff --git a/src/Form/Part/OrderdetailType.php b/src/Form/Part/OrderdetailType.php index 53240821..ca295c7e 100644 --- a/src/Form/Part/OrderdetailType.php +++ b/src/Form/Part/OrderdetailType.php @@ -22,6 +22,7 @@ declare(strict_types=1); namespace App\Form\Part; +use App\Form\Type\TriStateCheckboxType; use Symfony\Bundle\SecurityBundle\Security; use App\Entity\Parts\MeasurementUnit; use App\Entity\Parts\Supplier; @@ -73,6 +74,11 @@ class OrderdetailType extends AbstractType 'label' => 'orderdetails.edit.obsolete', ]); + $builder->add('pricesIncludesVAT', TriStateCheckboxType::class, [ + 'required' => false, + 'label' => 'orderdetails.edit.prices_includes_vat', + ]); + //Add pricedetails after we know the data, so we can set the default currency $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($options): void { /** @var Orderdetail $orderdetail */ diff --git a/templates/parts/edit/edit_form_styles.html.twig b/templates/parts/edit/edit_form_styles.html.twig index c2a89b6a..aa68f38a 100644 --- a/templates/parts/edit/edit_form_styles.html.twig +++ b/templates/parts/edit/edit_form_styles.html.twig @@ -32,6 +32,7 @@ {{ form_row(form.supplierpartnr, {'attr': {'class': 'form-control-sm'}}) }} {{ form_row(form.supplier_product_url, {'attr': {'class': 'form-control-sm'}}) }} {{ form_widget(form.obsolete) }} + {{ form_row(form.pricesIncludesVAT) }}
@@ -226,4 +227,4 @@ {{ form_errors(form) }} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/tests/Entity/PriceSystem/OrderdetailTest.php b/tests/Entity/PriceSystem/OrderdetailTest.php index 497f9ab3..7eae93aa 100644 --- a/tests/Entity/PriceSystem/OrderdetailTest.php +++ b/tests/Entity/PriceSystem/OrderdetailTest.php @@ -61,4 +61,77 @@ class OrderdetailTest extends TestCase $this->assertSame($price5, $orderdetail->findPriceForQty(5.3)); $this->assertSame($price5, $orderdetail->findPriceForQty(10000)); } + + public function testGetPricesIncludesVAT(): void + { + $orderdetail = new Orderdetail(); + + //By default, the pricesIncludesVAT property should be null for empty orderdetails + $this->assertNull($orderdetail->getPricesIncludesVAT()); + + $price0 = (new Pricedetail())->setMinDiscountQuantity(0.23); + $price1 = (new Pricedetail())->setMinDiscountQuantity(1); + $price5 = (new Pricedetail())->setMinDiscountQuantity(5.3); + + $orderdetail->addPricedetail($price0)->addPricedetail($price1)->addPricedetail($price5); + + //With empty pricedetails, the pricesIncludesVAT property should still be null + $this->assertNull($orderdetail->getPricesIncludesVAT()); + + //If all of the pricedetails have the same value for includesVAT, the pricesIncludesVAT property should return this value + $price0->setIncludesVAT(true); + $price1->setIncludesVAT(true); + $price5->setIncludesVAT(true); + $this->assertTrue($orderdetail->getPricesIncludesVAT()); + + $price0->setIncludesVAT(false); + $price1->setIncludesVAT(false); + $price5->setIncludesVAT(false); + $this->assertFalse($orderdetail->getPricesIncludesVAT()); + + //If the pricedetails have different values for includesVAT, the pricesIncludesVAT property should return null + $price0->setIncludesVAT(true); + $price1->setIncludesVAT(false); + $price5->setIncludesVAT(true); + $this->assertNull($orderdetail->getPricesIncludesVAT()); + + //If the pricedetails have different values for includesVAT, the pricesIncludesVAT property should return null, even if one of them is null + $price0->setIncludesVAT(null); + $price1->setIncludesVAT(false); + $price5->setIncludesVAT(false); + $this->assertNull($orderdetail->getPricesIncludesVAT()); + } + + public function testSetPricesIncludesVAT(): void + { + $orderdetail = new Orderdetail(); + $price0 = (new Pricedetail())->setMinDiscountQuantity(0.23); + $price1 = (new Pricedetail())->setMinDiscountQuantity(1); + $price5 = (new Pricedetail())->setMinDiscountQuantity(5.3); + + $orderdetail->addPricedetail($price0)->addPricedetail($price1)->addPricedetail($price5); + + $this->assertNull($orderdetail->getPricesIncludesVAT()); + + $orderdetail->setPricesIncludesVAT(true); + $this->assertTrue($orderdetail->getPricesIncludesVAT()); + //Ensure that the pricesIncludesVAT property is correctly propagated to the pricedetails + foreach ($orderdetail->getPricedetails() as $pricedetail) { + $this->assertTrue($pricedetail->getIncludesVAT()); + } + + $orderdetail->setPricesIncludesVAT(false); + $this->assertFalse($orderdetail->getPricesIncludesVAT()); + //Ensure that the pricesIncludesVAT property is correctly propagated to the pricedetails + foreach ($orderdetail->getPricedetails() as $pricedetail) { + $this->assertFalse($pricedetail->getIncludesVAT()); + } + + $orderdetail->setPricesIncludesVAT(null); + $this->assertNull($orderdetail->getPricesIncludesVAT()); + //Ensure that the pricesIncludesVAT property is correctly propagated to the pricedetails + foreach ($orderdetail->getPricedetails() as $pricedetail) { + $this->assertNull($pricedetail->getIncludesVAT()); + } + } } diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index f47c4e9e..2310286c 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -12437,5 +12437,11 @@ Buerklin-API Authentication server: Make this attachment type only available for certain element classes. Leave empty to show this attachment type for all element classes. + + + orderdetails.edit.prices_includes_vat + Prices include VAT + + From 5a47b15c97922385efa28342920888fa539ce64a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 8 Feb 2026 21:58:14 +0100 Subject: [PATCH 101/172] Use the information from info provider whether prices includes VAT or not --- assets/controllers/elements/collection_type_controller.js | 2 +- src/Services/InfoProviderSystem/DTOtoEntityConverter.php | 3 ++- tests/Services/InfoProviderSystem/DTOtoEntityConverterTest.php | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/assets/controllers/elements/collection_type_controller.js b/assets/controllers/elements/collection_type_controller.js index 67022ef2..048600a9 100644 --- a/assets/controllers/elements/collection_type_controller.js +++ b/assets/controllers/elements/collection_type_controller.js @@ -86,7 +86,7 @@ export default class extends Controller { targetTable.insertAdjacentHTML('beforeend', newElementStr); ret = targetTable.lastElementChild; } - + //Trigger an event to notify other components that a new element has been created, so they can for example initialize select2 on it targetTable.dispatchEvent(new CustomEvent("collection:elementAdded", {bubbles: true})); diff --git a/src/Services/InfoProviderSystem/DTOtoEntityConverter.php b/src/Services/InfoProviderSystem/DTOtoEntityConverter.php index d3a7c52c..1a93b111 100644 --- a/src/Services/InfoProviderSystem/DTOtoEntityConverter.php +++ b/src/Services/InfoProviderSystem/DTOtoEntityConverter.php @@ -94,13 +94,14 @@ final class DTOtoEntityConverter $entity->setPrice($dto->getPriceAsBigDecimal()); $entity->setPriceRelatedQuantity($dto->price_related_quantity); - //Currency TODO if ($dto->currency_iso_code !== null) { $entity->setCurrency($this->getCurrency($dto->currency_iso_code)); } else { $entity->setCurrency(null); } + $entity->setIncludesVat($dto->includes_tax); + return $entity; } diff --git a/tests/Services/InfoProviderSystem/DTOtoEntityConverterTest.php b/tests/Services/InfoProviderSystem/DTOtoEntityConverterTest.php index 78e79167..54878bbf 100644 --- a/tests/Services/InfoProviderSystem/DTOtoEntityConverterTest.php +++ b/tests/Services/InfoProviderSystem/DTOtoEntityConverterTest.php @@ -101,6 +101,8 @@ class DTOtoEntityConverterTest extends WebTestCase //For base currencies, the currency field is null $this->assertNull($entity->getCurrency()); + + $this->assertTrue($entity->getIncludesVat()); } public function testConvertPurchaseInfo(): void From 4740b6d19ef6868584f15a1fc8eae1fc0a209721 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 8 Feb 2026 22:09:36 +0100 Subject: [PATCH 102/172] Show in part info page whether price is inclusive VAT or not --- templates/helper.twig | 10 +++- templates/parts/info/_order_infos.html.twig | 59 +++++++++++---------- translations/messages.en.xlf | 12 +++++ 3 files changed, 52 insertions(+), 29 deletions(-) diff --git a/templates/helper.twig b/templates/helper.twig index 66268a96..9e68d56c 100644 --- a/templates/helper.twig +++ b/templates/helper.twig @@ -192,7 +192,7 @@ {% set preview_attach = part_preview_generator.tablePreviewAttachment(part) %} {% if preview_attach %} Part image + {{ stimulus_controller('elements/hoverpic') }} data-thumbnail="{{ attachment_thumbnail(preview_attach) }}"> {% endif %} {{ part.name }} {% endmacro %} @@ -241,3 +241,11 @@ {{ datetime|format_datetime }} {% endif %} {% endmacro %} + +{% macro vat_text(bool) %} + {% if bool === true %} + ({% trans %}prices.incl_vat{% endtrans %}) + {% elseif bool === false %} + ({% trans %}prices.excl_vat{% endtrans %}) + {% endif %} +{% endmacro %} diff --git a/templates/parts/info/_order_infos.html.twig b/templates/parts/info/_order_infos.html.twig index 68462de5..59b904df 100644 --- a/templates/parts/info/_order_infos.html.twig +++ b/templates/parts/info/_order_infos.html.twig @@ -24,8 +24,8 @@ {% if order.pricedetails is not empty %} - - +
+ @@ -36,32 +36,35 @@ {% endif %} - - - {% for detail in order.pricedetails %} - + + + {% for detail in order.pricedetails %} + {# @var detail App\Entity\PriceInformations\Pricedetail #} + - - - - - {% endfor %} - -
{% trans %}part.order.minamount{% endtrans %} {% trans %}part.order.price{% endtrans %}
- {{ detail.MinDiscountQuantity | format_amount(part.partUnit) }} - - {{ detail.price | format_money(detail.currency) }} / {{ detail.PriceRelatedQuantity | format_amount(part.partUnit) }} - {% set tmp = pricedetail_helper.convertMoneyToCurrency(detail.price, detail.currency) %} - {% if detail.currency != (app.user.currency ?? null) and tmp is not null and tmp.GreaterThan(0) %} - ({{ pricedetail_helper.convertMoneyToCurrency(detail.price, detail.currency, app.user.currency ?? null) | format_money(app.user.currency ?? null) }}) - {% endif %} - - {{ detail.PricePerUnit | format_money(detail.currency) }} - {% set tmp = pricedetail_helper.convertMoneyToCurrency(detail.PricePerUnit, detail.currency) %} - {% if detail.currency != (app.user.currency ?? null) and tmp is not null and tmp.GreaterThan(0) %} - ({{ pricedetail_helper.convertMoneyToCurrency(detail.PricePerUnit, detail.currency, app.user.currency ?? null) | format_money(app.user.currency ?? null) }}) - {% endif %} -
+ + {{ detail.MinDiscountQuantity | format_amount(part.partUnit) }} + + + {{ detail.price | format_money(detail.currency) }} / {{ detail.PriceRelatedQuantity | format_amount(part.partUnit) }} + {% set tmp = pricedetail_helper.convertMoneyToCurrency(detail.price, detail.currency) %} + {% if detail.currency != (app.user.currency ?? null) and tmp is not null and tmp.GreaterThan(0) %} + ({{ pricedetail_helper.convertMoneyToCurrency(detail.price, detail.currency, app.user.currency ?? null) | format_money(app.user.currency ?? null) }}) + {% endif %} + {{- helper.vat_text(detail.includesVAT) -}} + + + {{ detail.PricePerUnit | format_money(detail.currency) }} + {% set tmp = pricedetail_helper.convertMoneyToCurrency(detail.PricePerUnit, detail.currency) %} + {% if detail.currency != (app.user.currency ?? null) and tmp is not null and tmp.GreaterThan(0) %} + ({{ pricedetail_helper.convertMoneyToCurrency(detail.PricePerUnit, detail.currency, app.user.currency ?? null) | format_money(app.user.currency ?? null) }}) + {% endif %} + {{- helper.vat_text(detail.includesVAT) -}} + + + {% endfor %} + + {% endif %} {# Action for order information #} @@ -80,4 +83,4 @@ {% endfor %} -
\ No newline at end of file + diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 2310286c..a776eb9d 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -12443,5 +12443,17 @@ Buerklin-API Authentication server: Prices include VAT
+ + + prices.incl_vat + Incl. VAT + + + + + prices.excl_vat + Excl. VAT + + From 41252d8bb9e0364ca5f692e00082f975b0c2a299 Mon Sep 17 00:00:00 2001 From: Marc Date: Tue, 10 Feb 2026 15:26:26 +0100 Subject: [PATCH 103/172] Implement URLHandlerInfoProviderInterface in BuerklinProvider (#1235) * Implement URLHandlerInfoProviderInterface in BuerklinProvider Added URL handling capabilities to BuerklinProvider. * Refactor ID extraction logic in BuerklinProvider * Add tests for BuerklinProvider URLHandlerInfoProviderInterface * Revert "Refactor ID extraction logic in BuerklinProvider" This reverts commit 5f651766362ff165b1c3082ce918189e0aa2bdd3. * Exclude 'p' from valid ID return in BuerklinProvider --- .../Providers/BuerklinProvider.php | 33 +++++++- .../Providers/BuerklinProviderTest.php | 76 +++++++++++++++++++ 2 files changed, 108 insertions(+), 1 deletion(-) diff --git a/src/Services/InfoProviderSystem/Providers/BuerklinProvider.php b/src/Services/InfoProviderSystem/Providers/BuerklinProvider.php index 07125c73..aa165bfe 100644 --- a/src/Services/InfoProviderSystem/Providers/BuerklinProvider.php +++ b/src/Services/InfoProviderSystem/Providers/BuerklinProvider.php @@ -34,7 +34,7 @@ use App\Settings\InfoProviderSystem\BuerklinSettings; use Psr\Cache\CacheItemPoolInterface; use Symfony\Contracts\HttpClient\HttpClientInterface; -class BuerklinProvider implements BatchInfoProviderInterface +class BuerklinProvider implements BatchInfoProviderInterface, URLHandlerInfoProviderInterface { private const ENDPOINT_URL = 'https://www.buerklin.com/buerklinws/v2/buerklin'; @@ -636,4 +636,35 @@ class BuerklinProvider implements BatchInfoProviderInterface ); } + public function getHandledDomains(): array + { + return ['buerklin.com']; + } + + public function getIDFromURL(string $url): ?string + { + //Inputs: + //https://www.buerklin.com/de/p/bkl-electronic/niedervoltsteckverbinder/072341-l/40F1332/ + //https://www.buerklin.com/de/p/40F1332/ + //https://www.buerklin.com/en/p/bkl-electronic/dc-connectors/072341-l/40F1332/ + //https://www.buerklin.com/en/p/40F1332/ + //The ID is the last part after the manufacturer/category/mpn segment and before the final slash + //https://www.buerklin.com/de/p/bkl-electronic/niedervoltsteckverbinder/072341-l/40F1332/#download should also work + + $path = parse_url($url, PHP_URL_PATH); + + if (!$path) { + return null; + } + + // Ensure it's actually a product URL + if (strpos($path, '/p/') === false) { + return null; + } + + $id = basename(rtrim($path, '/')); + + return $id !== '' && $id !== 'p' ? $id : null; + } + } diff --git a/tests/Services/InfoProviderSystem/Providers/BuerklinProviderTest.php b/tests/Services/InfoProviderSystem/Providers/BuerklinProviderTest.php index 3193db89..8283b7d3 100644 --- a/tests/Services/InfoProviderSystem/Providers/BuerklinProviderTest.php +++ b/tests/Services/InfoProviderSystem/Providers/BuerklinProviderTest.php @@ -268,4 +268,80 @@ class BuerklinProviderTest extends TestCase $this->assertSame('PartX', $dto->name); $this->assertSame('https://img', $dto->preview_image_url); } + public function testGetHandledDomains(): void + { + $this->assertSame(['buerklin.com'], $this->provider->getHandledDomains()); + } + + /** + * @dataProvider buerklinIdFromUrlProvider + */ + public function testGetIDFromURLExtractsId(string $url, ?string $expected): void + { + $this->assertSame($expected, $this->provider->getIDFromURL($url)); + } + + public static function buerklinIdFromUrlProvider(): array + { + return [ + 'de long path' => [ + 'https://www.buerklin.com/de/p/bkl-electronic/niedervoltsteckverbinder/072341-l/40F1332/', + '40F1332', + ], + 'de short path' => [ + 'https://www.buerklin.com/de/p/40F1332/', + '40F1332', + ], + 'en long path' => [ + 'https://www.buerklin.com/en/p/bkl-electronic/dc-connectors/072341-l/40F1332/', + '40F1332', + ], + 'en short path' => [ + 'https://www.buerklin.com/en/p/40F1332/', + '40F1332', + ], + 'fragment should be ignored' => [ + 'https://www.buerklin.com/de/p/bkl-electronic/niedervoltsteckverbinder/072341-l/40F1332/#download', + '40F1332', + ], + 'no trailing slash' => [ + 'https://www.buerklin.com/en/p/40F1332', + '40F1332', + ], + 'query should be ignored' => [ + 'https://www.buerklin.com/en/p/40F1332/?foo=bar', + '40F1332', + ], + 'query and fragment should be ignored' => [ + 'https://www.buerklin.com/en/p/40F1332/?foo=bar#download', + '40F1332', + ], + + // Negative cases + 'not a product url (no /p/ segment)' => [ + 'https://www.buerklin.com/de/impressum/', + null, + ], + 'path contains "p" but not "/p/"' => [ + 'https://www.buerklin.com/de/help/price/', + null, + ], + 'ends with /p/ (no id)' => [ + 'https://www.buerklin.com/de/p/', + null, + ], + 'ends with /p (no trailing slash)' => [ + 'https://www.buerklin.com/de/p', + null, + ], + 'empty string' => [ + '', + null, + ], + 'not a url string' => [ + 'not a url', + null, + ], + ]; + } } From 586375d9210967467fe3bd8031c9dcb0f8eadaf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 10 Feb 2026 16:53:41 +0100 Subject: [PATCH 104/172] Moved VAT include info from pricedetail to orderdetail level That makes implementing the form easier --- migrations/Version20260208131116.php | 27 ++++---- src/Entity/PriceInformations/Orderdetail.php | 39 ++++-------- src/Entity/PriceInformations/Pricedetail.php | 20 +----- .../InfoProviderSystem/DTOs/PriceDTO.php | 4 +- .../DTOs/PurchaseInfoDTO.php | 16 +++++ .../DTOtoEntityConverter.php | 4 +- tests/Entity/PriceSystem/OrderdetailTest.php | 61 +------------------ .../DTOs/PurchaseInfoDTOTest.php | 37 +++++++++++ .../DTOtoEntityConverterTest.php | 5 +- 9 files changed, 88 insertions(+), 125 deletions(-) diff --git a/migrations/Version20260208131116.php b/migrations/Version20260208131116.php index 7ffc47a8..d05d3e4c 100644 --- a/migrations/Version20260208131116.php +++ b/migrations/Version20260208131116.php @@ -22,7 +22,7 @@ final class Version20260208131116 extends AbstractMultiPlatformMigration $this->addSql('ALTER TABLE part_lots ADD last_stocktake_at DATETIME DEFAULT NULL'); $this->addSql('ALTER TABLE parts ADD gtin VARCHAR(255) DEFAULT NULL'); $this->addSql('CREATE INDEX parts_idx_gtin ON parts (gtin)'); - $this->addSql('ALTER TABLE pricedetails ADD include_vat TINYINT DEFAULT NULL'); + $this->addSql('ALTER TABLE orderdetails ADD prices_includes_vat TINYINT DEFAULT NULL'); } public function mySQLDown(Schema $schema): void @@ -32,7 +32,7 @@ final class Version20260208131116 extends AbstractMultiPlatformMigration $this->addSql('DROP INDEX parts_idx_gtin ON `parts`'); $this->addSql('ALTER TABLE `parts` DROP gtin'); $this->addSql('ALTER TABLE part_lots DROP last_stocktake_at'); - $this->addSql('ALTER TABLE `pricedetails` DROP include_vat'); + $this->addSql('ALTER TABLE `orderdetails` DROP prices_includes_vat'); } public function sqLiteUp(Schema $schema): void @@ -57,7 +57,7 @@ final class Version20260208131116 extends AbstractMultiPlatformMigration $this->addSql('CREATE INDEX IDX_6940A7FE1ECB93AE ON parts (id_manufacturer)'); $this->addSql('CREATE INDEX IDX_6940A7FEA3ED1215 ON parts (id_part_custom_state)'); $this->addSql('CREATE INDEX parts_idx_gtin ON parts (gtin)'); - $this->addSql('ALTER TABLE pricedetails ADD COLUMN include_vat BOOLEAN DEFAULT NULL'); + $this->addSql('ALTER TABLE orderdetails ADD COLUMN prices_includes_vat BOOLEAN DEFAULT NULL'); } public function sqLiteDown(Schema $schema): void @@ -99,15 +99,14 @@ final class Version20260208131116 extends AbstractMultiPlatformMigration $this->addSql('CREATE INDEX parts_idx_datet_name_last_id_needs ON "parts" (datetime_added, name, last_modified, id, needs_review)'); $this->addSql('CREATE INDEX parts_idx_name ON "parts" (name)'); $this->addSql('CREATE INDEX parts_idx_ipn ON "parts" (ipn)'); - $this->addSql('CREATE TEMPORARY TABLE __temp__pricedetails AS SELECT id, price, price_related_quantity, min_discount_quantity, manual_input, last_modified, datetime_added, id_currency, orderdetails_id FROM "pricedetails"'); - $this->addSql('DROP TABLE "pricedetails"'); - $this->addSql('CREATE TABLE "pricedetails" (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, price NUMERIC(11, 5) NOT NULL, price_related_quantity DOUBLE PRECISION NOT NULL, min_discount_quantity DOUBLE PRECISION NOT NULL, manual_input BOOLEAN NOT NULL, last_modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, datetime_added DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, id_currency INTEGER DEFAULT NULL, orderdetails_id INTEGER NOT NULL, CONSTRAINT FK_C68C4459398D64AA FOREIGN KEY (id_currency) REFERENCES currencies (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_C68C44594A01DDC7 FOREIGN KEY (orderdetails_id) REFERENCES "orderdetails" (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE)'); - $this->addSql('INSERT INTO "pricedetails" (id, price, price_related_quantity, min_discount_quantity, manual_input, last_modified, datetime_added, id_currency, orderdetails_id) SELECT id, price, price_related_quantity, min_discount_quantity, manual_input, last_modified, datetime_added, id_currency, orderdetails_id FROM __temp__pricedetails'); - $this->addSql('DROP TABLE __temp__pricedetails'); - $this->addSql('CREATE INDEX IDX_C68C4459398D64AA ON "pricedetails" (id_currency)'); - $this->addSql('CREATE INDEX IDX_C68C44594A01DDC7 ON "pricedetails" (orderdetails_id)'); - $this->addSql('CREATE INDEX pricedetails_idx_min_discount ON "pricedetails" (min_discount_quantity)'); - $this->addSql('CREATE INDEX pricedetails_idx_min_discount_price_qty ON "pricedetails" (min_discount_quantity, price_related_quantity)'); + $this->addSql('CREATE TEMPORARY TABLE __temp__orderdetails AS SELECT id, supplierpartnr, obsolete, supplier_product_url, last_modified, datetime_added, part_id, id_supplier FROM "orderdetails"'); + $this->addSql('DROP TABLE "orderdetails"'); + $this->addSql('CREATE TABLE "orderdetails" (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, supplierpartnr VARCHAR(255) NOT NULL, obsolete BOOLEAN NOT NULL, supplier_product_url CLOB NOT NULL, last_modified DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, datetime_added DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, part_id INTEGER NOT NULL, id_supplier INTEGER DEFAULT NULL, CONSTRAINT FK_489AFCDC4CE34BEC FOREIGN KEY (part_id) REFERENCES "parts" (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_489AFCDCCBF180EB FOREIGN KEY (id_supplier) REFERENCES "suppliers" (id) NOT DEFERRABLE INITIALLY IMMEDIATE)'); + $this->addSql('INSERT INTO "orderdetails" (id, supplierpartnr, obsolete, supplier_product_url, last_modified, datetime_added, part_id, id_supplier) SELECT id, supplierpartnr, obsolete, supplier_product_url, last_modified, datetime_added, part_id, id_supplier FROM __temp__orderdetails'); + $this->addSql('DROP TABLE __temp__orderdetails'); + $this->addSql('CREATE INDEX IDX_489AFCDC4CE34BEC ON "orderdetails" (part_id)'); + $this->addSql('CREATE INDEX IDX_489AFCDCCBF180EB ON "orderdetails" (id_supplier)'); + $this->addSql('CREATE INDEX orderdetails_supplier_part_nr ON "orderdetails" (supplierpartnr)'); } public function postgreSQLUp(Schema $schema): void @@ -116,7 +115,7 @@ final class Version20260208131116 extends AbstractMultiPlatformMigration $this->addSql('ALTER TABLE part_lots ADD last_stocktake_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL'); $this->addSql('ALTER TABLE parts ADD gtin VARCHAR(255) DEFAULT NULL'); $this->addSql('CREATE INDEX parts_idx_gtin ON parts (gtin)'); - $this->addSql('ALTER TABLE pricedetails ADD include_vat BOOLEAN DEFAULT NULL'); + $this->addSql('ALTER TABLE orderdetails ADD prices_includes_vat BOOLEAN DEFAULT NULL'); } public function postgreSQLDown(Schema $schema): void @@ -125,6 +124,6 @@ final class Version20260208131116 extends AbstractMultiPlatformMigration $this->addSql('ALTER TABLE part_lots DROP last_stocktake_at'); $this->addSql('DROP INDEX parts_idx_gtin'); $this->addSql('ALTER TABLE "parts" DROP gtin'); - $this->addSql('ALTER TABLE "pricedetails" DROP include_vat'); + $this->addSql('ALTER TABLE "orderdetails" DROP prices_includes_vat'); } } diff --git a/src/Entity/PriceInformations/Orderdetail.php b/src/Entity/PriceInformations/Orderdetail.php index 9a9a2823..58f69598 100644 --- a/src/Entity/PriceInformations/Orderdetail.php +++ b/src/Entity/PriceInformations/Orderdetail.php @@ -148,6 +148,13 @@ class Orderdetail extends AbstractDBElement implements TimeStampableInterface, N #[ORM\JoinColumn(name: 'id_supplier')] protected ?Supplier $supplier = null; + /** + * @var bool|null Whether the prices includes VAT or not. Null means, that it is not specified, if the prices includes VAT or not. + */ + #[ORM\Column(type: Types::BOOLEAN, nullable: true)] + #[Groups(['extended', 'full', 'import', 'orderdetail:read', 'orderdetail:write'])] + protected ?bool $prices_includes_vat = null; + public function __construct() { $this->pricedetails = new ArrayCollection(); @@ -390,45 +397,23 @@ class Orderdetail extends AbstractDBElement implements TimeStampableInterface, N } /** - * Checks if the prices of this orderdetail include VAT. This is determined by checking the pricedetails of this - * orderdetail. If there are no pricedetails or if the pricedetails have conflicting values, null is returned. + * Checks if the prices of this orderdetail include VAT. Null means, that it is not specified, if the prices includes + * VAT or not. * @return bool|null */ - #[Groups(['orderdetail:read'])] - #[SerializedName('prices_include_vat')] public function getPricesIncludesVAT(): ?bool { - $value = null; - //We determine that via the pricedetails - foreach ($this->getPricedetails() as $pricedetail) { - /** @var Pricedetail $pricedetail */ - if ($pricedetail->getIncludesVat() === null) { - return null; // If any pricedetail doesn't specify this, we can't determine it - } - - if ($value === null) { - $value = $pricedetail->getIncludesVat(); // Set initial value - } elseif ($value !== $pricedetail->getIncludesVat()) { - return null; // If there are conflicting values, we can't determine it - } - } - - return $value; + return $this->prices_includes_vat; } /** - * Sets whether the prices of this orderdetail include VAT. This is set for all pricedetails of this orderdetail. + * Sets whether the prices of this orderdetail include VAT. * @param bool|null $includesVat * @return $this */ - #[Groups(['orderdetail:write'])] - #[SerializedName('prices_include_vat')] public function setPricesIncludesVAT(?bool $includesVat): self { - foreach ($this->getPricedetails() as $pricedetail) { - /** @var Pricedetail $pricedetail */ - $pricedetail->setIncludesVat($includesVat); - } + $this->prices_includes_vat = $includesVat; return $this; } diff --git a/src/Entity/PriceInformations/Pricedetail.php b/src/Entity/PriceInformations/Pricedetail.php index 7deb64f9..553b07a3 100644 --- a/src/Entity/PriceInformations/Pricedetail.php +++ b/src/Entity/PriceInformations/Pricedetail.php @@ -121,12 +121,7 @@ class Pricedetail extends AbstractDBElement implements TimeStampableInterface #[Groups(['pricedetail:read:standalone', 'pricedetail:write'])] protected ?Orderdetail $orderdetail = null; - /** - * @var bool|null Whether the price includes VAT or not. Null means, that it is not specified, if the price includes VAT or not. - */ - #[ORM\Column(name: "include_vat", type: Types::BOOLEAN, nullable: true)] - #[Groups(['extended', 'full', 'import', 'pricedetail:read', 'pricedetail:write'])] - protected ?bool $includes_vat = null; + public function __construct() { @@ -277,7 +272,7 @@ class Pricedetail extends AbstractDBElement implements TimeStampableInterface */ public function getIncludesVat(): ?bool { - return $this->includes_vat; + return $this->orderdetail?->getPricesIncludesVAT(); } /******************************************************************************** @@ -376,15 +371,4 @@ class Pricedetail extends AbstractDBElement implements TimeStampableInterface return $this; } - - /** - * Set whether the price includes VAT or not. Null means, that it is not specified, if the price includes VAT or not. - * @param bool|null $includes_vat - * @return $this - */ - public function setIncludesVat(?bool $includes_vat): self - { - $this->includes_vat = $includes_vat; - return $this; - } } diff --git a/src/Services/InfoProviderSystem/DTOs/PriceDTO.php b/src/Services/InfoProviderSystem/DTOs/PriceDTO.php index 2acf3e57..cf1f577d 100644 --- a/src/Services/InfoProviderSystem/DTOs/PriceDTO.php +++ b/src/Services/InfoProviderSystem/DTOs/PriceDTO.php @@ -39,7 +39,9 @@ readonly class PriceDTO public string $price, /** @var string The currency of the used ISO code of this price detail */ public ?string $currency_iso_code, - /** @var bool If the price includes tax */ + /** @var bool If the price includes tax + * @deprecated Use the prices_include_vat property of the PurchaseInfoDTO instead, as this property is not reliable if there are multiple prices with different values for includes_tax + */ public ?bool $includes_tax = true, /** @var float the price related quantity */ public ?float $price_related_quantity = 1.0, diff --git a/src/Services/InfoProviderSystem/DTOs/PurchaseInfoDTO.php b/src/Services/InfoProviderSystem/DTOs/PurchaseInfoDTO.php index 9ac142ff..446d04dc 100644 --- a/src/Services/InfoProviderSystem/DTOs/PurchaseInfoDTO.php +++ b/src/Services/InfoProviderSystem/DTOs/PurchaseInfoDTO.php @@ -29,6 +29,9 @@ namespace App\Services\InfoProviderSystem\DTOs; */ readonly class PurchaseInfoDTO { + /** @var bool|null If the prices contain VAT or not. Null if state is unknown. */ + public ?bool $prices_include_vat; + public function __construct( public string $distributor_name, public string $order_number, @@ -36,6 +39,7 @@ readonly class PurchaseInfoDTO public array $prices, /** @var string|null An url to the product page of the vendor */ public ?string $product_url = null, + ?bool $prices_include_vat = null, ) { //Ensure that the prices are PriceDTO instances @@ -44,5 +48,17 @@ readonly class PurchaseInfoDTO throw new \InvalidArgumentException('The prices array must only contain PriceDTO instances'); } } + + //If no prices_include_vat information is given, try to deduct it from the prices + if ($prices_include_vat === null) { + $vatValues = array_unique(array_map(fn(PriceDTO $price) => $price->includes_tax, $this->prices)); + if (count($vatValues) === 1) { + $this->prices_include_vat = $vatValues[0]; //Use the value of the prices if they are all the same + } else { + $this->prices_include_vat = null; //If there are different values for the prices, we cannot determine if the prices include VAT or not + } + } else { + $this->prices_include_vat = $prices_include_vat; + } } } diff --git a/src/Services/InfoProviderSystem/DTOtoEntityConverter.php b/src/Services/InfoProviderSystem/DTOtoEntityConverter.php index 1a93b111..c7c15673 100644 --- a/src/Services/InfoProviderSystem/DTOtoEntityConverter.php +++ b/src/Services/InfoProviderSystem/DTOtoEntityConverter.php @@ -100,8 +100,6 @@ final class DTOtoEntityConverter $entity->setCurrency(null); } - $entity->setIncludesVat($dto->includes_tax); - return $entity; } @@ -118,6 +116,8 @@ final class DTOtoEntityConverter $entity->addPricedetail($this->convertPrice($price)); } + $entity->setPricesIncludesVAT($dto->prices_include_vat); + return $entity; } diff --git a/tests/Entity/PriceSystem/OrderdetailTest.php b/tests/Entity/PriceSystem/OrderdetailTest.php index 7eae93aa..df86ab34 100644 --- a/tests/Entity/PriceSystem/OrderdetailTest.php +++ b/tests/Entity/PriceSystem/OrderdetailTest.php @@ -62,76 +62,17 @@ class OrderdetailTest extends TestCase $this->assertSame($price5, $orderdetail->findPriceForQty(10000)); } - public function testGetPricesIncludesVAT(): void + public function testGetSetPricesIncludesVAT(): void { $orderdetail = new Orderdetail(); //By default, the pricesIncludesVAT property should be null for empty orderdetails $this->assertNull($orderdetail->getPricesIncludesVAT()); - $price0 = (new Pricedetail())->setMinDiscountQuantity(0.23); - $price1 = (new Pricedetail())->setMinDiscountQuantity(1); - $price5 = (new Pricedetail())->setMinDiscountQuantity(5.3); - - $orderdetail->addPricedetail($price0)->addPricedetail($price1)->addPricedetail($price5); - - //With empty pricedetails, the pricesIncludesVAT property should still be null - $this->assertNull($orderdetail->getPricesIncludesVAT()); - - //If all of the pricedetails have the same value for includesVAT, the pricesIncludesVAT property should return this value - $price0->setIncludesVAT(true); - $price1->setIncludesVAT(true); - $price5->setIncludesVAT(true); - $this->assertTrue($orderdetail->getPricesIncludesVAT()); - - $price0->setIncludesVAT(false); - $price1->setIncludesVAT(false); - $price5->setIncludesVAT(false); - $this->assertFalse($orderdetail->getPricesIncludesVAT()); - - //If the pricedetails have different values for includesVAT, the pricesIncludesVAT property should return null - $price0->setIncludesVAT(true); - $price1->setIncludesVAT(false); - $price5->setIncludesVAT(true); - $this->assertNull($orderdetail->getPricesIncludesVAT()); - - //If the pricedetails have different values for includesVAT, the pricesIncludesVAT property should return null, even if one of them is null - $price0->setIncludesVAT(null); - $price1->setIncludesVAT(false); - $price5->setIncludesVAT(false); - $this->assertNull($orderdetail->getPricesIncludesVAT()); - } - - public function testSetPricesIncludesVAT(): void - { - $orderdetail = new Orderdetail(); - $price0 = (new Pricedetail())->setMinDiscountQuantity(0.23); - $price1 = (new Pricedetail())->setMinDiscountQuantity(1); - $price5 = (new Pricedetail())->setMinDiscountQuantity(5.3); - - $orderdetail->addPricedetail($price0)->addPricedetail($price1)->addPricedetail($price5); - - $this->assertNull($orderdetail->getPricesIncludesVAT()); - $orderdetail->setPricesIncludesVAT(true); $this->assertTrue($orderdetail->getPricesIncludesVAT()); - //Ensure that the pricesIncludesVAT property is correctly propagated to the pricedetails - foreach ($orderdetail->getPricedetails() as $pricedetail) { - $this->assertTrue($pricedetail->getIncludesVAT()); - } $orderdetail->setPricesIncludesVAT(false); $this->assertFalse($orderdetail->getPricesIncludesVAT()); - //Ensure that the pricesIncludesVAT property is correctly propagated to the pricedetails - foreach ($orderdetail->getPricedetails() as $pricedetail) { - $this->assertFalse($pricedetail->getIncludesVAT()); - } - - $orderdetail->setPricesIncludesVAT(null); - $this->assertNull($orderdetail->getPricesIncludesVAT()); - //Ensure that the pricesIncludesVAT property is correctly propagated to the pricedetails - foreach ($orderdetail->getPricedetails() as $pricedetail) { - $this->assertNull($pricedetail->getIncludesVAT()); - } } } diff --git a/tests/Services/InfoProviderSystem/DTOs/PurchaseInfoDTOTest.php b/tests/Services/InfoProviderSystem/DTOs/PurchaseInfoDTOTest.php index 14a3c03f..1c909e67 100644 --- a/tests/Services/InfoProviderSystem/DTOs/PurchaseInfoDTOTest.php +++ b/tests/Services/InfoProviderSystem/DTOs/PurchaseInfoDTOTest.php @@ -22,6 +22,7 @@ declare(strict_types=1); */ namespace App\Tests\Services\InfoProviderSystem\DTOs; +use App\Services\InfoProviderSystem\DTOs\PriceDTO; use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO; use PHPUnit\Framework\TestCase; @@ -33,4 +34,40 @@ class PurchaseInfoDTOTest extends TestCase $this->expectExceptionMessage('The prices array must only contain PriceDTO instances'); new PurchaseInfoDTO('test', 'test', [new \stdClass()]); } + + public function testPricesIncludesVATHandling(): void + { + $pricesTrue = [ + new PriceDTO(minimum_discount_amount: 1, price: '10.00', currency_iso_code: 'USD', includes_tax: true), + new PriceDTO(minimum_discount_amount: 5, price: '9.00', currency_iso_code: 'USD', includes_tax: true), + ]; + $pricesFalse = [ + new PriceDTO(minimum_discount_amount: 1, price: '10.00', currency_iso_code: 'USD', includes_tax: false), + new PriceDTO(minimum_discount_amount: 5, price: '9.00', currency_iso_code: 'USD', includes_tax: false), + ]; + $pricesMixed = [ + new PriceDTO(minimum_discount_amount: 1, price: '10.00', currency_iso_code: 'USD', includes_tax: true), + new PriceDTO(minimum_discount_amount: 5, price: '9.00', currency_iso_code: 'USD', includes_tax: false), + ]; + $pricesNull = [ + new PriceDTO(minimum_discount_amount: 1, price: '10.00', currency_iso_code: 'USD', includes_tax: null), + new PriceDTO(minimum_discount_amount: 5, price: '9.00', currency_iso_code: 'USD', includes_tax: null), + ]; + + //If the prices_include_vat parameter is given, use it: + $dto = new PurchaseInfoDTO('test', 'test', $pricesMixed, prices_include_vat: true); + $this->assertTrue($dto->prices_include_vat); + $dto = new PurchaseInfoDTO('test', 'test', $pricesMixed, prices_include_vat: false); + $this->assertFalse($dto->prices_include_vat); + + //If the prices_include_vat parameter is not given, try to deduct it from the prices: + $dto = new PurchaseInfoDTO('test', 'test', $pricesTrue); + $this->assertTrue($dto->prices_include_vat); + $dto = new PurchaseInfoDTO('test', 'test', $pricesFalse); + $this->assertFalse($dto->prices_include_vat); + $dto = new PurchaseInfoDTO('test', 'test', $pricesMixed); + $this->assertNull($dto->prices_include_vat); + $dto = new PurchaseInfoDTO('test', 'test', $pricesNull); + $this->assertNull($dto->prices_include_vat); + } } diff --git a/tests/Services/InfoProviderSystem/DTOtoEntityConverterTest.php b/tests/Services/InfoProviderSystem/DTOtoEntityConverterTest.php index 54878bbf..45ea9984 100644 --- a/tests/Services/InfoProviderSystem/DTOtoEntityConverterTest.php +++ b/tests/Services/InfoProviderSystem/DTOtoEntityConverterTest.php @@ -94,15 +94,12 @@ class DTOtoEntityConverterTest extends WebTestCase minimum_discount_amount: 5, price: "10.0", currency_iso_code: 'EUR', - includes_tax: true, ); $entity = $this->service->convertPrice($dto); //For base currencies, the currency field is null $this->assertNull($entity->getCurrency()); - - $this->assertTrue($entity->getIncludesVat()); } public function testConvertPurchaseInfo(): void @@ -117,6 +114,7 @@ class DTOtoEntityConverterTest extends WebTestCase order_number: 'TestOrderNumber', prices: $prices, product_url: 'https://example.com', + prices_include_vat: true, ); $entity = $this->service->convertPurchaseInfo($dto); @@ -124,6 +122,7 @@ class DTOtoEntityConverterTest extends WebTestCase $this->assertSame($dto->distributor_name, $entity->getSupplier()->getName()); $this->assertSame($dto->order_number, $entity->getSupplierPartNr()); $this->assertEquals($dto->product_url, $entity->getSupplierProductUrl()); + $this->assertTrue($dto->prices_include_vat); } public function testConvertFileWithName(): void From 8ac874379247bd45c8af607c20a1edc0dd353734 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 10 Feb 2026 16:54:13 +0100 Subject: [PATCH 105/172] Fixed phpunit tests --- .../InfoProviderSystem/DTOs/BulkSearchResponseDTOTest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/Services/InfoProviderSystem/DTOs/BulkSearchResponseDTOTest.php b/tests/Services/InfoProviderSystem/DTOs/BulkSearchResponseDTOTest.php index b4dc0dea..ce7564da 100644 --- a/tests/Services/InfoProviderSystem/DTOs/BulkSearchResponseDTOTest.php +++ b/tests/Services/InfoProviderSystem/DTOs/BulkSearchResponseDTOTest.php @@ -108,6 +108,7 @@ class BulkSearchResponseDTOTest extends KernelTestCase 'manufacturing_status' => NULL, 'provider_url' => NULL, 'footprint' => NULL, + 'gtin' => NULL, ), 'source_field' => 'mpn', 'source_keyword' => '1234', @@ -129,6 +130,7 @@ class BulkSearchResponseDTOTest extends KernelTestCase 'manufacturing_status' => NULL, 'provider_url' => NULL, 'footprint' => NULL, + 'gtin' => NULL, ), 'source_field' => 'name', 'source_keyword' => '1234', From e5231e29f2ffbd7e933b3e990e03a4fed41100f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 10 Feb 2026 17:13:54 +0100 Subject: [PATCH 106/172] Allow to set a global default if new orderdetails should contain VAT or not --- src/Form/Part/PartBaseType.php | 7 ++++++- .../SystemSettings/LocalizationSettings.php | 13 ++++++++++++- templates/form/extended_bootstrap_layout.html.twig | 11 +++++++++++ templates/parts/edit/edit_form_styles.html.twig | 2 +- translations/messages.en.xlf | 12 ++++++++++++ 5 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/Form/Part/PartBaseType.php b/src/Form/Part/PartBaseType.php index 902aff40..2145db93 100644 --- a/src/Form/Part/PartBaseType.php +++ b/src/Form/Part/PartBaseType.php @@ -43,6 +43,7 @@ use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; use App\Services\LogSystem\EventCommentNeededHelper; use App\Services\LogSystem\EventCommentType; use App\Settings\MiscSettings\IpnSuggestSettings; +use App\Settings\SystemSettings\LocalizationSettings; use Symfony\Bundle\SecurityBundle\Security; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\CheckboxType; @@ -63,6 +64,7 @@ class PartBaseType extends AbstractType protected UrlGeneratorInterface $urlGenerator, protected EventCommentNeededHelper $event_comment_needed_helper, protected IpnSuggestSettings $ipnSuggestSettings, + private readonly LocalizationSettings $localizationSettings, ) { } @@ -267,6 +269,9 @@ class PartBaseType extends AbstractType 'entity' => $part, ]); + $orderdetailPrototype = new Orderdetail(); + $orderdetailPrototype->setPricesIncludesVAT($this->localizationSettings->pricesIncludeTaxByDefault); + //Orderdetails section $builder->add('orderdetails', CollectionType::class, [ 'entry_type' => OrderdetailType::class, @@ -275,7 +280,7 @@ class PartBaseType extends AbstractType 'allow_delete' => true, 'label' => false, 'by_reference' => false, - 'prototype_data' => new Orderdetail(), + 'prototype_data' => $orderdetailPrototype, 'entry_options' => [ 'measurement_unit' => $part->getPartUnit(), ], diff --git a/src/Settings/SystemSettings/LocalizationSettings.php b/src/Settings/SystemSettings/LocalizationSettings.php index c6780c6c..d0c3ce75 100644 --- a/src/Settings/SystemSettings/LocalizationSettings.php +++ b/src/Settings/SystemSettings/LocalizationSettings.php @@ -25,6 +25,7 @@ namespace App\Settings\SystemSettings; use App\Form\Settings\LanguageMenuEntriesType; use App\Form\Type\LocaleSelectType; +use App\Form\Type\TriStateCheckboxType; use App\Settings\SettingsIcon; use Jbtronics\SettingsBundle\Metadata\EnvVarMode; use Jbtronics\SettingsBundle\ParameterTypes\ArrayType; @@ -46,7 +47,7 @@ class LocalizationSettings #[Assert\Locale()] #[Assert\NotBlank()] #[SettingsParameter(label: new TM("settings.system.localization.locale"), formType: LocaleSelectType::class, - envVar: "string:DEFAULT_LANG", envVarMode: EnvVarMode::OVERWRITE)] + envVar: "string:DEFAULT_LANG", envVarMode: EnvVarMode::OVERWRITE)] public string $locale = 'en'; #[Assert\Timezone()] @@ -73,4 +74,14 @@ class LocalizationSettings )] #[Assert\All([new Assert\Locale()])] public array $languageMenuEntries = []; + + #[SettingsParameter(label: new TM("settings.system.localization.prices_include_tax_by_default"), + description: new TM("settings.system.localization.prices_include_tax_by_default.description"), + formType: TriStateCheckboxType::class + )] + /** + * Indicates whether prices should include tax by default. This is used when creating new pricedetails. + * Null means that the VAT state should be indetermine by default. + */ + public ?bool $pricesIncludeTaxByDefault = null; } diff --git a/templates/form/extended_bootstrap_layout.html.twig b/templates/form/extended_bootstrap_layout.html.twig index 75e44a15..ecd7caf0 100644 --- a/templates/form/extended_bootstrap_layout.html.twig +++ b/templates/form/extended_bootstrap_layout.html.twig @@ -100,6 +100,17 @@ {%- endif -%} {%- endblock tristate_widget %} +{% block tristate_row -%} + {#--#} +
{#--#} +
+ {{- form_widget(form) -}} + {{- form_help(form) -}} + {{- form_errors(form) -}} +
{#--#} + +{%- endblock tristate_row %} + {%- block choice_widget_collapsed -%} {# Only add the BS5 form-select class if we dont use bootstrap-selectpicker #} {# {% if attr["data-controller"] is defined and attr["data-controller"] not in ["elements--selectpicker"] %} diff --git a/templates/parts/edit/edit_form_styles.html.twig b/templates/parts/edit/edit_form_styles.html.twig index aa68f38a..1856dbff 100644 --- a/templates/parts/edit/edit_form_styles.html.twig +++ b/templates/parts/edit/edit_form_styles.html.twig @@ -32,7 +32,7 @@ {{ form_row(form.supplierpartnr, {'attr': {'class': 'form-control-sm'}}) }} {{ form_row(form.supplier_product_url, {'attr': {'class': 'form-control-sm'}}) }} {{ form_widget(form.obsolete) }} - {{ form_row(form.pricesIncludesVAT) }} + {{ form_widget(form.pricesIncludesVAT) }}
diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index a776eb9d..36fc10d1 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -12455,5 +12455,17 @@ Buerklin-API Authentication server: Excl. VAT + + + settings.system.localization.prices_include_tax_by_default + Prices include VAT by default + + + + + settings.system.localization.prices_include_tax_by_default.description + The default value for newly created purchase infos, if prices include VAT or not. + + From 2f9601364ee58c273e093eda035d878680d39bc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 10 Feb 2026 22:23:54 +0100 Subject: [PATCH 107/172] Allow to set stocktake date for part lots --- config/permissions.yaml | 3 ++ src/Form/Part/PartLotType.php | 9 ++++ src/Security/Voter/PartLotVoter.php | 4 +- .../parts/edit/edit_form_styles.html.twig | 1 + templates/parts/info/_part_lots.html.twig | 49 ++++++++++--------- translations/messages.en.xlf | 12 +++++ 6 files changed, 53 insertions(+), 25 deletions(-) diff --git a/config/permissions.yaml b/config/permissions.yaml index 0dabf9d3..39e91b57 100644 --- a/config/permissions.yaml +++ b/config/permissions.yaml @@ -68,6 +68,9 @@ perms: # Here comes a list with all Permission names (they have a perm_[name] co move: label: "perm.parts_stock.move" apiTokenRole: ROLE_API_EDIT + stocktake: + label: "perm.parts_stock.stocktake" + apiTokenRole: ROLE_API_EDIT storelocations: &PART_CONTAINING diff --git a/src/Form/Part/PartLotType.php b/src/Form/Part/PartLotType.php index 7d545340..ae86fb61 100644 --- a/src/Form/Part/PartLotType.php +++ b/src/Form/Part/PartLotType.php @@ -31,6 +31,7 @@ use App\Form\Type\StructuralEntityType; use App\Form\Type\UserSelectType; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\CheckboxType; +use Symfony\Component\Form\Extension\Core\Type\DateTimeType; use Symfony\Component\Form\Extension\Core\Type\DateType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; @@ -110,6 +111,14 @@ class PartLotType extends AbstractType //Do not remove whitespace chars on the beginning and end of the string 'trim' => false, ]); + + $builder->add('last_stocktake_at', DateTimeType::class, [ + 'label' => 'part_lot.edit.last_stocktake_at', + 'widget' => 'single_text', + 'disabled' => !$this->security->isGranted('@parts_stock.stocktake'), + 'required' => false, + 'empty_data' => null, + ]); } public function configureOptions(OptionsResolver $resolver): void diff --git a/src/Security/Voter/PartLotVoter.php b/src/Security/Voter/PartLotVoter.php index 87c3d135..5748f4af 100644 --- a/src/Security/Voter/PartLotVoter.php +++ b/src/Security/Voter/PartLotVoter.php @@ -58,13 +58,13 @@ final class PartLotVoter extends Voter { } - protected const ALLOWED_PERMS = ['read', 'edit', 'create', 'delete', 'show_history', 'revert_element', 'withdraw', 'add', 'move']; + protected const ALLOWED_PERMS = ['read', 'edit', 'create', 'delete', 'show_history', 'revert_element', 'withdraw', 'add', 'move', 'stocktake']; protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token, ?Vote $vote = null): bool { $user = $this->helper->resolveUser($token); - if (in_array($attribute, ['withdraw', 'add', 'move'], true)) + if (in_array($attribute, ['withdraw', 'add', 'move', 'stocktake'], true)) { $base_permission = $this->helper->isGranted($token, 'parts_stock', $attribute, $vote); diff --git a/templates/parts/edit/edit_form_styles.html.twig b/templates/parts/edit/edit_form_styles.html.twig index 1856dbff..844c8700 100644 --- a/templates/parts/edit/edit_form_styles.html.twig +++ b/templates/parts/edit/edit_form_styles.html.twig @@ -110,6 +110,7 @@ {{ form_row(form.comment) }} {{ form_row(form.owner) }} {{ form_row(form.user_barcode) }} + {{ form_row(form.last_stocktake_at) }}
diff --git a/templates/parts/info/_part_lots.html.twig b/templates/parts/info/_part_lots.html.twig index 1ef25ae4..f4ee4812 100644 --- a/templates/parts/info/_part_lots.html.twig +++ b/templates/parts/info/_part_lots.html.twig @@ -19,53 +19,56 @@ {% for lot in part.partLots %} + {# @var lot App\Entity\Parts\PartLot #} {{ lot.description }} {% if lot.storageLocation %} {{ helper.structural_entity_link(lot.storageLocation) }} {% else %} - + {% trans %}part_lots.location_unknown{% endtrans %} {% endif %} {% if lot.instockUnknown %} - + {% trans %}part_lots.instock_unknown{% endtrans %} {% else %} {{ lot.amount | format_amount(part.partUnit, {'decimals': 5}) }} {% endif %} - -
- {% if lot.owner %} - + + {% if lot.owner %} + {{ helper.user_icon_link(lot.owner) }} -
- {% endif %} - {% if lot.expirationDate %} - + + {% endif %} + {% if lot.expirationDate %} + {{ lot.expirationDate | format_date() }}
- {% endif %} - {% if lot.expired %} -
- + {% endif %} + {% if lot.expired %} + {% trans %}part_lots.is_expired{% endtrans %} - {% endif %} - {% if lot.needsRefill %} -
- - - {% trans %}part_lots.need_refill{% endtrans %} - - {% endif %} -
+ {% endif %} + {% if lot.needsRefill %} + + + {% trans %}part_lots.need_refill{% endtrans %} + + {% endif %} + {% if lot.lastStocktakeAt %} + + + {{ lot.lastStocktakeAt | format_datetime("short") }} + + {% endif %}
diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 36fc10d1..e73caaf2 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -12467,5 +12467,17 @@ Buerklin-API Authentication server: The default value for newly created purchase infos, if prices include VAT or not. + + + part_lot.edit.last_stocktake_at + Last stocktake + + + + + perm.parts_stock.stocktake + Stocktake + + From d8fdaa9529224207836f338974556f3803f498a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 10 Feb 2026 23:17:10 +0100 Subject: [PATCH 108/172] Added a modal to stocktake / set part lots amount from info page --- .../pages/part_stocktake_modal_controller.js | 27 ++++++++ src/Controller/PartController.php | 50 +++++++++++++++ src/Entity/LogSystem/PartStockChangeType.php | 4 ++ .../LogSystem/PartStockChangedLogEntry.php | 5 ++ .../Parts/PartLotWithdrawAddHelper.php | 41 ++++++++++++ templates/parts/info/_part_lots.html.twig | 7 ++- .../parts/info/_stocktake_modal.html.twig | 63 +++++++++++++++++++ translations/messages.en.xlf | 30 +++++++++ 8 files changed, 225 insertions(+), 2 deletions(-) create mode 100644 assets/controllers/pages/part_stocktake_modal_controller.js create mode 100644 templates/parts/info/_stocktake_modal.html.twig diff --git a/assets/controllers/pages/part_stocktake_modal_controller.js b/assets/controllers/pages/part_stocktake_modal_controller.js new file mode 100644 index 00000000..7aef2906 --- /dev/null +++ b/assets/controllers/pages/part_stocktake_modal_controller.js @@ -0,0 +1,27 @@ +import {Controller} from "@hotwired/stimulus"; +import {Modal} from "bootstrap"; + +export default class extends Controller +{ + connect() { + this.element.addEventListener('show.bs.modal', event => this._handleModalOpen(event)); + } + + _handleModalOpen(event) { + // Button that triggered the modal + const button = event.relatedTarget; + + const amountInput = this.element.querySelector('input[name="amount"]'); + + // Extract info from button attributes + const lotID = button.getAttribute('data-lot-id'); + const lotAmount = button.getAttribute('data-lot-amount'); + + //Find the expected amount field and set the value to the lot amount + const expectedAmountInput = this.element.querySelector('#stocktake-modal-expected-amount'); + expectedAmountInput.textContent = lotAmount; + + //Set the action and lotID inputs in the form + this.element.querySelector('input[name="lot_id"]').setAttribute('value', lotID); + } +} diff --git a/src/Controller/PartController.php b/src/Controller/PartController.php index ef2bae5f..d9fcd7f1 100644 --- a/src/Controller/PartController.php +++ b/src/Controller/PartController.php @@ -54,12 +54,14 @@ use Exception; use Omines\DataTablesBundle\DataTableFactory; use Symfony\Bridge\Doctrine\Attribute\MapEntity; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\ExpressionLanguage\Expression; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Security\Core\Exception\AccessDeniedException; +use Symfony\Component\Security\Http\Attribute\IsCsrfTokenValid; use Symfony\Contracts\Translation\TranslatorInterface; use function Symfony\Component\Translation\t; @@ -463,6 +465,54 @@ final class PartController extends AbstractController ); } + #[Route(path: '/{id}/stocktake', name: 'part_stocktake', methods: ['POST'])] + #[IsCsrfTokenValid(new Expression("'part_stocktake-' ~ args['part'].getid()"), '_token')] + public function stocktakeHandler(Part $part, EntityManagerInterface $em, PartLotWithdrawAddHelper $withdrawAddHelper, + Request $request, + ): Response + { + $partLot = $em->find(PartLot::class, $request->request->get('lot_id')); + + //Check that the user is allowed to stocktake the partlot + $this->denyAccessUnlessGranted('stocktake', $partLot); + + if (!$partLot instanceof PartLot) { + throw new \RuntimeException('Part lot not found!'); + } + //Ensure that the partlot belongs to the part + if ($partLot->getPart() !== $part) { + throw new \RuntimeException("The origin partlot does not belong to the part!"); + } + + $actualAmount = (float) $request->request->get('actual_amount'); + $comment = $request->request->get('comment'); + + $timestamp = null; + $timestamp_str = $request->request->getString('timestamp', ''); + //Try to parse the timestamp + if ($timestamp_str !== '') { + $timestamp = new DateTime($timestamp_str); + } + + $withdrawAddHelper->stocktake($partLot, $actualAmount, $comment, $timestamp); + + //Ensure that the timestamp is not in the future + if ($timestamp !== null && $timestamp > new DateTime("+20min")) { + throw new \LogicException("The timestamp must not be in the future!"); + } + + //Save the changes to the DB + $em->flush(); + $this->addFlash('success', 'part.withdraw.success'); + + //If a redirect was passed, then redirect there + if ($request->request->get('_redirect')) { + return $this->redirect($request->request->get('_redirect')); + } + //Otherwise just redirect to the part page + return $this->redirectToRoute('part_info', ['id' => $part->getID()]); + } + #[Route(path: '/{id}/add_withdraw', name: 'part_add_withdraw', methods: ['POST'])] public function withdrawAddHandler(Part $part, Request $request, EntityManagerInterface $em, PartLotWithdrawAddHelper $withdrawAddHelper): Response { diff --git a/src/Entity/LogSystem/PartStockChangeType.php b/src/Entity/LogSystem/PartStockChangeType.php index f69fe95f..79e4c6da 100644 --- a/src/Entity/LogSystem/PartStockChangeType.php +++ b/src/Entity/LogSystem/PartStockChangeType.php @@ -28,6 +28,8 @@ enum PartStockChangeType: string case WITHDRAW = "withdraw"; case MOVE = "move"; + case STOCKTAKE = "stock_take"; + /** * Converts the type to a short representation usable in the extra field of the log entry. * @return string @@ -38,6 +40,7 @@ enum PartStockChangeType: string self::ADD => 'a', self::WITHDRAW => 'w', self::MOVE => 'm', + self::STOCKTAKE => 's', }; } @@ -52,6 +55,7 @@ enum PartStockChangeType: string 'a' => self::ADD, 'w' => self::WITHDRAW, 'm' => self::MOVE, + 's' => self::STOCKTAKE, default => throw new \InvalidArgumentException("Invalid short type: $value"), }; } diff --git a/src/Entity/LogSystem/PartStockChangedLogEntry.php b/src/Entity/LogSystem/PartStockChangedLogEntry.php index 1bac9e9f..a46f2ecf 100644 --- a/src/Entity/LogSystem/PartStockChangedLogEntry.php +++ b/src/Entity/LogSystem/PartStockChangedLogEntry.php @@ -122,6 +122,11 @@ class PartStockChangedLogEntry extends AbstractLogEntry return new self(PartStockChangeType::MOVE, $lot, $old_stock, $new_stock, $new_total_part_instock, $comment, $move_to_target, action_timestamp: $action_timestamp); } + public static function stocktake(PartLot $lot, float $old_stock, float $new_stock, float $new_total_part_instock, string $comment, ?\DateTimeInterface $action_timestamp = null): self + { + return new self(PartStockChangeType::STOCKTAKE, $lot, $old_stock, $new_stock, $new_total_part_instock, $comment, action_timestamp: $action_timestamp); + } + /** * Returns the instock change type of this entry * @return PartStockChangeType diff --git a/src/Services/Parts/PartLotWithdrawAddHelper.php b/src/Services/Parts/PartLotWithdrawAddHelper.php index 34ec4c1d..d6a95b34 100644 --- a/src/Services/Parts/PartLotWithdrawAddHelper.php +++ b/src/Services/Parts/PartLotWithdrawAddHelper.php @@ -197,4 +197,45 @@ final class PartLotWithdrawAddHelper $this->entityManager->remove($origin); } } + + /** + * Perform a stocktake for the given part lot, setting the amount to the given actual amount. + * Please note that the changes are not flushed to DB yet, you have to do this yourself + * @param PartLot $lot + * @param float $actualAmount + * @param string|null $comment + * @param \DateTimeInterface|null $action_timestamp + * @return void + */ + public function stocktake(PartLot $lot, float $actualAmount, ?string $comment = null, ?\DateTimeInterface $action_timestamp = null): void + { + if ($actualAmount < 0) { + throw new \InvalidArgumentException('Actual amount must be non-negative'); + } + + $part = $lot->getPart(); + + //Check whether we have to round the amount + if (!$part->useFloatAmount()) { + $actualAmount = round($actualAmount); + } + + $oldAmount = $lot->getAmount(); + //Clear any unknown status when doing a stocktake, as we now have a known amount + $lot->setInstockUnknown(false); + $lot->setAmount($actualAmount); + if ($action_timestamp) { + $lot->setLastStocktakeAt(\DateTimeImmutable::createFromInterface($action_timestamp)); + } else { + $lot->setLastStocktakeAt(new \DateTimeImmutable()); //Use now if no timestamp is given + } + + $event = PartStockChangedLogEntry::stocktake($lot, $oldAmount, $lot->getAmount(), $part->getAmountSum() , $comment, $action_timestamp); + $this->eventLogger->log($event); + + //Apply the comment also to global events, so it gets associated with the elementChanged log entry + if (!$this->eventCommentHelper->isMessageSet() && ($comment !== null && $comment !== '')) { + $this->eventCommentHelper->setMessage($comment); + } + } } diff --git a/templates/parts/info/_part_lots.html.twig b/templates/parts/info/_part_lots.html.twig index f4ee4812..cfb7190b 100644 --- a/templates/parts/info/_part_lots.html.twig +++ b/templates/parts/info/_part_lots.html.twig @@ -2,6 +2,7 @@ {% import "label_system/dropdown_macro.html.twig" as dropdown %} {% include "parts/info/_withdraw_modal.html.twig" %} +{% include "parts/info/_stocktake_modal.html.twig" %}
@@ -93,12 +94,15 @@ > + + - - {% endfor %} diff --git a/templates/parts/info/_stocktake_modal.html.twig b/templates/parts/info/_stocktake_modal.html.twig new file mode 100644 index 00000000..5e8c1ae5 --- /dev/null +++ b/templates/parts/info/_stocktake_modal.html.twig @@ -0,0 +1,63 @@ + diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index e73caaf2..bbd96ac6 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -12479,5 +12479,35 @@ Buerklin-API Authentication server: Stocktake + + + part.info.stocktake_modal.title + Stocktake lot + + + + + part.info.stocktake_modal.expected_amount + Expected amount + + + + + part.info.stocktake_modal.actual_amount + Actual amount + + + + + log.part_stock_changed.stock_take + Stocktake + + + + + log.element_edited.changed_fields.last_stocktake_at + Last stocktake + + From 3c87fe093204aec51bb384440683f449b9be27b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 10 Feb 2026 23:19:57 +0100 Subject: [PATCH 109/172] Added test for stocktake method on PartLotWithdrawAddHelper --- .../Parts/PartLotWithdrawAddHelperTest.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/Services/Parts/PartLotWithdrawAddHelperTest.php b/tests/Services/Parts/PartLotWithdrawAddHelperTest.php index 697d3983..b033f07e 100644 --- a/tests/Services/Parts/PartLotWithdrawAddHelperTest.php +++ b/tests/Services/Parts/PartLotWithdrawAddHelperTest.php @@ -154,4 +154,19 @@ class PartLotWithdrawAddHelperTest extends WebTestCase $this->assertEqualsWithDelta(5.0, $this->partLot2->getAmount(), PHP_FLOAT_EPSILON); $this->assertEqualsWithDelta(2.0, $this->partLot3->getAmount(), PHP_FLOAT_EPSILON); } + + public function testStocktake(): void + { + //Stocktake lot 1 to 20 + $this->service->stocktake($this->partLot1, 20, "Test"); + $this->assertEqualsWithDelta(20.0, $this->partLot1->getAmount(), PHP_FLOAT_EPSILON); + $this->assertNotNull($this->partLot1->getLastStocktakeAt()); //Stocktake date should be set + + //Stocktake lot 2 to 5 + $this->partLot2->setInstockUnknown(true); + $this->service->stocktake($this->partLot2, 0, "Test"); + $this->assertEqualsWithDelta(0.0, $this->partLot2->getAmount(), PHP_FLOAT_EPSILON); + $this->assertFalse($this->partLot2->isInstockUnknown()); //Instock unknown should be cleared + + } } From 35598df354e679ccfc43d2a70384412ce0dff386 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 10 Feb 2026 23:24:40 +0100 Subject: [PATCH 110/172] Automatically set the stocktake permission if a user can already add and withdraw from a lot --- src/Entity/UserSystem/PermissionData.php | 2 +- .../UserSystem/PermissionSchemaUpdater.php | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Entity/UserSystem/PermissionData.php b/src/Entity/UserSystem/PermissionData.php index 9ebdc9c9..b7d1ff8f 100644 --- a/src/Entity/UserSystem/PermissionData.php +++ b/src/Entity/UserSystem/PermissionData.php @@ -43,7 +43,7 @@ final class PermissionData implements \JsonSerializable /** * The current schema version of the permission data */ - public const CURRENT_SCHEMA_VERSION = 3; + public const CURRENT_SCHEMA_VERSION = 4; /** * Creates a new Permission Data Instance using the given data. diff --git a/src/Services/UserSystem/PermissionSchemaUpdater.php b/src/Services/UserSystem/PermissionSchemaUpdater.php index 104800dc..fd85ee7c 100644 --- a/src/Services/UserSystem/PermissionSchemaUpdater.php +++ b/src/Services/UserSystem/PermissionSchemaUpdater.php @@ -157,4 +157,20 @@ class PermissionSchemaUpdater $permissions->setPermissionValue('system', 'show_updates', $new_value); } } + + private function upgradeSchemaToVersion4(HasPermissionsInterface $holder): void //@phpstan-ignore-line This is called via reflection + { + $permissions = $holder->getPermissions(); + + //If the reports.generate permission is not defined yet, set it to the value of reports.read + if (!$permissions->isPermissionSet('parts_stock', 'stocktake')) { + //Set the new permission to true only if both add and withdraw are allowed + $new_value = TrinaryLogicHelper::and( + $permissions->getPermissionValue('parts_stock', 'withdraw'), + $permissions->getPermissionValue('parts_stock', 'add') + ); + + $permissions->setPermissionValue('parts_stock', 'stocktake', $new_value); + } + } } From 76f0b05a096fcd06db15d505e7d1f8a7f37b7d6a Mon Sep 17 00:00:00 2001 From: buchmann Date: Wed, 11 Feb 2026 14:10:05 +0100 Subject: [PATCH 111/172] Autofocus for frequently used input fields Fixes #1157. - Focus `name` field on new part - Focus `amount` on add/withdraw modal - Focus first "number type" input on any newly added collectionType table row... (debatable) It would be even more favorable if the user could configure if they want to use autofocus and/or for which fields/dialogs it should be enabled. --- assets/controllers/elements/collection_type_controller.js | 4 ++++ assets/controllers/pages/part_withdraw_modal_controller.js | 5 +++++ src/Form/AdminPages/BaseEntityAdminForm.php | 1 + src/Form/Part/PartBaseType.php | 1 + 4 files changed, 11 insertions(+) diff --git a/assets/controllers/elements/collection_type_controller.js b/assets/controllers/elements/collection_type_controller.js index 14b683e0..19f5c531 100644 --- a/assets/controllers/elements/collection_type_controller.js +++ b/assets/controllers/elements/collection_type_controller.js @@ -79,9 +79,13 @@ export default class extends Controller { //Afterwards return the newly created row if(targetTable.tBodies[0]) { targetTable.tBodies[0].insertAdjacentHTML('beforeend', newElementStr); + var fields = targetTable.tBodies[0].querySelectorAll("input[type=number]"); + fields[fields.length - 1].focus(); return targetTable.tBodies[0].lastElementChild; } else { //Otherwise just insert it targetTable.insertAdjacentHTML('beforeend', newElementStr); + var fields = targetTable.querySelectorAll("input[type=number]"); + fields[fields.length - 1].focus(); return targetTable.lastElementChild; } } diff --git a/assets/controllers/pages/part_withdraw_modal_controller.js b/assets/controllers/pages/part_withdraw_modal_controller.js index 2d6742b4..0e5c0fc5 100644 --- a/assets/controllers/pages/part_withdraw_modal_controller.js +++ b/assets/controllers/pages/part_withdraw_modal_controller.js @@ -5,6 +5,7 @@ export default class extends Controller { connect() { this.element.addEventListener('show.bs.modal', event => this._handleModalOpen(event)); + this.element.addEventListener('shown.bs.modal', event => this._handleModalShown(event)); } _handleModalOpen(event) { @@ -61,4 +62,8 @@ export default class extends Controller amountInput.setAttribute('max', lotAmount); } } + + _handleModalShown(event) { + this.element.querySelector('input[name="amount"]').focus(); + } } \ No newline at end of file diff --git a/src/Form/AdminPages/BaseEntityAdminForm.php b/src/Form/AdminPages/BaseEntityAdminForm.php index 5a4ef5bc..64ccbdb9 100644 --- a/src/Form/AdminPages/BaseEntityAdminForm.php +++ b/src/Form/AdminPages/BaseEntityAdminForm.php @@ -71,6 +71,7 @@ class BaseEntityAdminForm extends AbstractType 'label' => 'name.label', 'attr' => [ 'placeholder' => 'part.name.placeholder', + 'autofocus' => true, ], 'disabled' => !$this->security->isGranted($is_new ? 'create' : 'edit', $entity), ]); diff --git a/src/Form/Part/PartBaseType.php b/src/Form/Part/PartBaseType.php index b8276589..0b69d477 100644 --- a/src/Form/Part/PartBaseType.php +++ b/src/Form/Part/PartBaseType.php @@ -115,6 +115,7 @@ class PartBaseType extends AbstractType 'label' => 'part.edit.name', 'attr' => [ 'placeholder' => 'part.edit.name.placeholder', + 'autofocus' => true, ], ]) ->add('description', RichTextEditorType::class, [ From 47c0d7898576bef007b8399cbf7ef0df7951d682 Mon Sep 17 00:00:00 2001 From: buchmann Date: Wed, 11 Feb 2026 14:26:36 +0100 Subject: [PATCH 112/172] only autofocus if new --- src/Form/AdminPages/BaseEntityAdminForm.php | 2 +- src/Form/Part/PartBaseType.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Form/AdminPages/BaseEntityAdminForm.php b/src/Form/AdminPages/BaseEntityAdminForm.php index 64ccbdb9..f4bf37f8 100644 --- a/src/Form/AdminPages/BaseEntityAdminForm.php +++ b/src/Form/AdminPages/BaseEntityAdminForm.php @@ -71,7 +71,7 @@ class BaseEntityAdminForm extends AbstractType 'label' => 'name.label', 'attr' => [ 'placeholder' => 'part.name.placeholder', - 'autofocus' => true, + 'autofocus' => $is_new, ], 'disabled' => !$this->security->isGranted($is_new ? 'create' : 'edit', $entity), ]); diff --git a/src/Form/Part/PartBaseType.php b/src/Form/Part/PartBaseType.php index 0b69d477..89787f60 100644 --- a/src/Form/Part/PartBaseType.php +++ b/src/Form/Part/PartBaseType.php @@ -115,7 +115,7 @@ class PartBaseType extends AbstractType 'label' => 'part.edit.name', 'attr' => [ 'placeholder' => 'part.edit.name.placeholder', - 'autofocus' => true, + 'autofocus' => $new_part, ], ]) ->add('description', RichTextEditorType::class, [ From 66040b687f4466b55024574a3d80a53cb29e86ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 14 Feb 2026 22:17:05 +0100 Subject: [PATCH 113/172] Updated dependencies --- composer.lock | 326 ++++++------ yarn.lock | 1397 +++++++++++++++++++++++++------------------------ 2 files changed, 878 insertions(+), 845 deletions(-) diff --git a/composer.lock b/composer.lock index 9ccb922e..4806ee9c 100644 --- a/composer.lock +++ b/composer.lock @@ -968,16 +968,16 @@ }, { "name": "api-platform/doctrine-common", - "version": "v4.2.15", + "version": "v4.2.16", "source": { "type": "git", "url": "https://github.com/api-platform/doctrine-common.git", - "reference": "4967ed6ba91465d6a6a047119658984d40f89a0e" + "reference": "566acb646b001f21bc6aa7bd36a109e075f5c131" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/doctrine-common/zipball/4967ed6ba91465d6a6a047119658984d40f89a0e", - "reference": "4967ed6ba91465d6a6a047119658984d40f89a0e", + "url": "https://api.github.com/repos/api-platform/doctrine-common/zipball/566acb646b001f21bc6aa7bd36a109e075f5c131", + "reference": "566acb646b001f21bc6aa7bd36a109e075f5c131", "shasum": "" }, "require": { @@ -1052,22 +1052,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/doctrine-common/tree/v4.2.15" + "source": "https://github.com/api-platform/doctrine-common/tree/v4.2.16" }, - "time": "2026-01-27T07:12:16+00:00" + "time": "2026-02-13T15:07:33+00:00" }, { "name": "api-platform/doctrine-orm", - "version": "v4.2.15", + "version": "v4.2.16", "source": { "type": "git", "url": "https://github.com/api-platform/doctrine-orm.git", - "reference": "cf5c99a209a7be3e508c6f5d0fa4d853d43cff84" + "reference": "99d8b8cdee4ca79fd3abb351991bda6b42696eee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/doctrine-orm/zipball/cf5c99a209a7be3e508c6f5d0fa4d853d43cff84", - "reference": "cf5c99a209a7be3e508c6f5d0fa4d853d43cff84", + "url": "https://api.github.com/repos/api-platform/doctrine-orm/zipball/99d8b8cdee4ca79fd3abb351991bda6b42696eee", + "reference": "99d8b8cdee4ca79fd3abb351991bda6b42696eee", "shasum": "" }, "require": { @@ -1139,13 +1139,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/doctrine-orm/tree/v4.2.15" + "source": "https://github.com/api-platform/doctrine-orm/tree/v4.2.16" }, - "time": "2026-01-26T15:38:30+00:00" + "time": "2026-02-13T17:30:49+00:00" }, { "name": "api-platform/documentation", - "version": "v4.2.15", + "version": "v4.2.16", "source": { "type": "git", "url": "https://github.com/api-platform/documentation.git", @@ -1202,22 +1202,22 @@ ], "description": "API Platform documentation controller.", "support": { - "source": "https://github.com/api-platform/documentation/tree/v4.2.15" + "source": "https://github.com/api-platform/documentation/tree/v4.2.16" }, "time": "2025-12-27T22:15:57+00:00" }, { "name": "api-platform/http-cache", - "version": "v4.2.15", + "version": "v4.2.16", "source": { "type": "git", "url": "https://github.com/api-platform/http-cache.git", - "reference": "04a9239b67425f68ed2d372c2c731f14342dea45" + "reference": "ec5f9068d3d66be63db4d80acaf518868dea1321" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/http-cache/zipball/04a9239b67425f68ed2d372c2c731f14342dea45", - "reference": "04a9239b67425f68ed2d372c2c731f14342dea45", + "url": "https://api.github.com/repos/api-platform/http-cache/zipball/ec5f9068d3d66be63db4d80acaf518868dea1321", + "reference": "ec5f9068d3d66be63db4d80acaf518868dea1321", "shasum": "" }, "require": { @@ -1282,22 +1282,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/http-cache/tree/v4.2.15" + "source": "https://github.com/api-platform/http-cache/tree/v4.2.16" }, - "time": "2026-01-12T13:36:15+00:00" + "time": "2026-02-13T15:07:33+00:00" }, { "name": "api-platform/hydra", - "version": "v4.2.15", + "version": "v4.2.16", "source": { "type": "git", "url": "https://github.com/api-platform/hydra.git", - "reference": "32ca5ff3ac5197d0606a846a6570127239091422" + "reference": "ddba613f615caa8372df3d478a36a910b77f6d28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/hydra/zipball/32ca5ff3ac5197d0606a846a6570127239091422", - "reference": "32ca5ff3ac5197d0606a846a6570127239091422", + "url": "https://api.github.com/repos/api-platform/hydra/zipball/ddba613f615caa8372df3d478a36a910b77f6d28", + "reference": "ddba613f615caa8372df3d478a36a910b77f6d28", "shasum": "" }, "require": { @@ -1369,22 +1369,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/hydra/tree/v4.2.15" + "source": "https://github.com/api-platform/hydra/tree/v4.2.16" }, - "time": "2026-01-30T09:06:20+00:00" + "time": "2026-02-13T15:07:33+00:00" }, { "name": "api-platform/json-api", - "version": "v4.2.15", + "version": "v4.2.16", "source": { "type": "git", "url": "https://github.com/api-platform/json-api.git", - "reference": "32ca38f977203f8a59f6efee9637261ae4651c29" + "reference": "6c5b5b83f693667371b7b31a65a50925e10c6d46" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/json-api/zipball/32ca38f977203f8a59f6efee9637261ae4651c29", - "reference": "32ca38f977203f8a59f6efee9637261ae4651c29", + "url": "https://api.github.com/repos/api-platform/json-api/zipball/6c5b5b83f693667371b7b31a65a50925e10c6d46", + "reference": "6c5b5b83f693667371b7b31a65a50925e10c6d46", "shasum": "" }, "require": { @@ -1451,22 +1451,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/json-api/tree/v4.2.15" + "source": "https://github.com/api-platform/json-api/tree/v4.2.16" }, - "time": "2026-01-26T15:38:30+00:00" + "time": "2026-02-13T17:30:49+00:00" }, { "name": "api-platform/json-schema", - "version": "v4.2.15", + "version": "v4.2.16", "source": { "type": "git", "url": "https://github.com/api-platform/json-schema.git", - "reference": "4487398c59a07beefeec870a1213c34ae362cb00" + "reference": "3569ab8e3e5c01d77f00964683254809571fa078" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/json-schema/zipball/4487398c59a07beefeec870a1213c34ae362cb00", - "reference": "4487398c59a07beefeec870a1213c34ae362cb00", + "url": "https://api.github.com/repos/api-platform/json-schema/zipball/3569ab8e3e5c01d77f00964683254809571fa078", + "reference": "3569ab8e3e5c01d77f00964683254809571fa078", "shasum": "" }, "require": { @@ -1532,22 +1532,22 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/json-schema/tree/v4.2.15" + "source": "https://github.com/api-platform/json-schema/tree/v4.2.16" }, - "time": "2026-01-26T15:38:30+00:00" + "time": "2026-02-13T15:07:33+00:00" }, { "name": "api-platform/jsonld", - "version": "v4.2.15", + "version": "v4.2.16", "source": { "type": "git", "url": "https://github.com/api-platform/jsonld.git", - "reference": "ef0a361b0f29158243478d3fff5038ec2f5aa76c" + "reference": "08593fc073466badae67b8f4999ec19e3ade9eab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/jsonld/zipball/ef0a361b0f29158243478d3fff5038ec2f5aa76c", - "reference": "ef0a361b0f29158243478d3fff5038ec2f5aa76c", + "url": "https://api.github.com/repos/api-platform/jsonld/zipball/08593fc073466badae67b8f4999ec19e3ade9eab", + "reference": "08593fc073466badae67b8f4999ec19e3ade9eab", "shasum": "" }, "require": { @@ -1612,22 +1612,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/jsonld/tree/v4.2.15" + "source": "https://github.com/api-platform/jsonld/tree/v4.2.16" }, - "time": "2026-01-12T13:36:15+00:00" + "time": "2026-02-13T17:30:49+00:00" }, { "name": "api-platform/metadata", - "version": "v4.2.15", + "version": "v4.2.16", "source": { "type": "git", "url": "https://github.com/api-platform/metadata.git", - "reference": "4d10dbd7b8f036d24df35eb3ec02c0f0befcf397" + "reference": "f90cd4258477821e0174788a6666507824c7c6b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/metadata/zipball/4d10dbd7b8f036d24df35eb3ec02c0f0befcf397", - "reference": "4d10dbd7b8f036d24df35eb3ec02c0f0befcf397", + "url": "https://api.github.com/repos/api-platform/metadata/zipball/f90cd4258477821e0174788a6666507824c7c6b9", + "reference": "f90cd4258477821e0174788a6666507824c7c6b9", "shasum": "" }, "require": { @@ -1710,13 +1710,13 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/metadata/tree/v4.2.15" + "source": "https://github.com/api-platform/metadata/tree/v4.2.16" }, - "time": "2026-01-27T07:12:16+00:00" + "time": "2026-02-13T15:07:33+00:00" }, { "name": "api-platform/openapi", - "version": "v4.2.15", + "version": "v4.2.16", "source": { "type": "git", "url": "https://github.com/api-platform/openapi.git", @@ -1800,22 +1800,22 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/openapi/tree/v4.2.15" + "source": "https://github.com/api-platform/openapi/tree/v4.2.16" }, "time": "2026-01-26T15:38:30+00:00" }, { "name": "api-platform/serializer", - "version": "v4.2.15", + "version": "v4.2.16", "source": { "type": "git", "url": "https://github.com/api-platform/serializer.git", - "reference": "4d45483a9911b598a262dd2035166ab2040e430f" + "reference": "e01024d458c26d230eafbe8ac79dc8e28c3dc379" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/serializer/zipball/4d45483a9911b598a262dd2035166ab2040e430f", - "reference": "4d45483a9911b598a262dd2035166ab2040e430f", + "url": "https://api.github.com/repos/api-platform/serializer/zipball/e01024d458c26d230eafbe8ac79dc8e28c3dc379", + "reference": "e01024d458c26d230eafbe8ac79dc8e28c3dc379", "shasum": "" }, "require": { @@ -1893,22 +1893,22 @@ "serializer" ], "support": { - "source": "https://github.com/api-platform/serializer/tree/v4.2.15" + "source": "https://github.com/api-platform/serializer/tree/v4.2.16" }, - "time": "2026-01-26T15:38:30+00:00" + "time": "2026-02-13T17:30:49+00:00" }, { "name": "api-platform/state", - "version": "v4.2.15", + "version": "v4.2.16", "source": { "type": "git", "url": "https://github.com/api-platform/state.git", - "reference": "89c0999206b4885c2e55204751b4db07061f3fd3" + "reference": "0fcd612696acac4632a626bb5dfc6bd99ec3b44a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/state/zipball/89c0999206b4885c2e55204751b4db07061f3fd3", - "reference": "89c0999206b4885c2e55204751b4db07061f3fd3", + "url": "https://api.github.com/repos/api-platform/state/zipball/0fcd612696acac4632a626bb5dfc6bd99ec3b44a", + "reference": "0fcd612696acac4632a626bb5dfc6bd99ec3b44a", "shasum": "" }, "require": { @@ -1990,22 +1990,22 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/state/tree/v4.2.15" + "source": "https://github.com/api-platform/state/tree/v4.2.16" }, - "time": "2026-01-26T15:38:30+00:00" + "time": "2026-02-13T15:07:33+00:00" }, { "name": "api-platform/symfony", - "version": "v4.2.15", + "version": "v4.2.16", "source": { "type": "git", "url": "https://github.com/api-platform/symfony.git", - "reference": "93fdcbe189a1866412f5da04e26fa5615e99b210" + "reference": "769f5bc29ce59a5c68006ca5876c409072340e92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/symfony/zipball/93fdcbe189a1866412f5da04e26fa5615e99b210", - "reference": "93fdcbe189a1866412f5da04e26fa5615e99b210", + "url": "https://api.github.com/repos/api-platform/symfony/zipball/769f5bc29ce59a5c68006ca5876c409072340e92", + "reference": "769f5bc29ce59a5c68006ca5876c409072340e92", "shasum": "" }, "require": { @@ -2118,13 +2118,13 @@ "symfony" ], "support": { - "source": "https://github.com/api-platform/symfony/tree/v4.2.15" + "source": "https://github.com/api-platform/symfony/tree/v4.2.16" }, - "time": "2026-01-30T13:31:50+00:00" + "time": "2026-02-13T17:30:49+00:00" }, { "name": "api-platform/validator", - "version": "v4.2.15", + "version": "v4.2.16", "source": { "type": "git", "url": "https://github.com/api-platform/validator.git", @@ -2194,7 +2194,7 @@ "validator" ], "support": { - "source": "https://github.com/api-platform/validator/tree/v4.2.15" + "source": "https://github.com/api-platform/validator/tree/v4.2.16" }, "time": "2026-01-26T15:45:40+00:00" }, @@ -3791,16 +3791,16 @@ }, { "name": "doctrine/migrations", - "version": "3.9.5", + "version": "3.9.6", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "1b823afbc40f932dae8272574faee53f2755eac5" + "reference": "ffd8355cdd8505fc650d9604f058bf62aedd80a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/1b823afbc40f932dae8272574faee53f2755eac5", - "reference": "1b823afbc40f932dae8272574faee53f2755eac5", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/ffd8355cdd8505fc650d9604f058bf62aedd80a1", + "reference": "ffd8355cdd8505fc650d9604f058bf62aedd80a1", "shasum": "" }, "require": { @@ -3874,7 +3874,7 @@ ], "support": { "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/3.9.5" + "source": "https://github.com/doctrine/migrations/tree/3.9.6" }, "funding": [ { @@ -3890,7 +3890,7 @@ "type": "tidelift" } ], - "time": "2025-11-20T11:15:36+00:00" + "time": "2026-02-11T06:46:11+00:00" }, { "name": "doctrine/orm", @@ -4075,16 +4075,16 @@ }, { "name": "doctrine/sql-formatter", - "version": "1.5.3", + "version": "1.5.4", "source": { "type": "git", "url": "https://github.com/doctrine/sql-formatter.git", - "reference": "a8af23a8e9d622505baa2997465782cbe8bb7fc7" + "reference": "9563949f5cd3bd12a17d12fb980528bc141c5806" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/a8af23a8e9d622505baa2997465782cbe8bb7fc7", - "reference": "a8af23a8e9d622505baa2997465782cbe8bb7fc7", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/9563949f5cd3bd12a17d12fb980528bc141c5806", + "reference": "9563949f5cd3bd12a17d12fb980528bc141c5806", "shasum": "" }, "require": { @@ -4124,9 +4124,9 @@ ], "support": { "issues": "https://github.com/doctrine/sql-formatter/issues", - "source": "https://github.com/doctrine/sql-formatter/tree/1.5.3" + "source": "https://github.com/doctrine/sql-formatter/tree/1.5.4" }, - "time": "2025-10-26T09:35:14+00:00" + "time": "2026-02-08T16:21:46+00:00" }, { "name": "dompdf/dompdf", @@ -5489,16 +5489,16 @@ }, { "name": "knpuniversity/oauth2-client-bundle", - "version": "v2.20.1", + "version": "v2.20.2", "source": { "type": "git", "url": "https://github.com/knpuniversity/oauth2-client-bundle.git", - "reference": "d59e4dc61484e777b6f19df2efcf8b1bcc03828a" + "reference": "9ce4fcea69dbbf4d19ee7368b8d623ec2d73d3c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/knpuniversity/oauth2-client-bundle/zipball/d59e4dc61484e777b6f19df2efcf8b1bcc03828a", - "reference": "d59e4dc61484e777b6f19df2efcf8b1bcc03828a", + "url": "https://api.github.com/repos/knpuniversity/oauth2-client-bundle/zipball/9ce4fcea69dbbf4d19ee7368b8d623ec2d73d3c7", + "reference": "9ce4fcea69dbbf4d19ee7368b8d623ec2d73d3c7", "shasum": "" }, "require": { @@ -5543,9 +5543,9 @@ ], "support": { "issues": "https://github.com/knpuniversity/oauth2-client-bundle/issues", - "source": "https://github.com/knpuniversity/oauth2-client-bundle/tree/v2.20.1" + "source": "https://github.com/knpuniversity/oauth2-client-bundle/tree/v2.20.2" }, - "time": "2025-12-04T15:46:43+00:00" + "time": "2026-02-12T17:07:18+00:00" }, { "name": "lcobucci/clock", @@ -7237,16 +7237,16 @@ }, { "name": "nette/schema", - "version": "v1.3.3", + "version": "v1.3.4", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004" + "reference": "086497a2f34b82fede9b5a41cc8e131d087cd8f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/2befc2f42d7c715fd9d95efc31b1081e5d765004", - "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004", + "url": "https://api.github.com/repos/nette/schema/zipball/086497a2f34b82fede9b5a41cc8e131d087cd8f7", + "reference": "086497a2f34b82fede9b5a41cc8e131d087cd8f7", "shasum": "" }, "require": { @@ -7254,8 +7254,8 @@ "php": "8.1 - 8.5" }, "require-dev": { - "nette/tester": "^2.5.2", - "phpstan/phpstan-nette": "^2.0@stable", + "nette/tester": "^2.6", + "phpstan/phpstan": "^2.0@stable", "tracy/tracy": "^2.8" }, "type": "library", @@ -7296,22 +7296,22 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.3" + "source": "https://github.com/nette/schema/tree/v1.3.4" }, - "time": "2025-10-30T22:57:59+00:00" + "time": "2026-02-08T02:54:00+00:00" }, { "name": "nette/utils", - "version": "v4.1.2", + "version": "v4.1.3", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "f76b5dc3d6c6d3043c8d937df2698515b99cbaf5" + "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/f76b5dc3d6c6d3043c8d937df2698515b99cbaf5", - "reference": "f76b5dc3d6c6d3043c8d937df2698515b99cbaf5", + "url": "https://api.github.com/repos/nette/utils/zipball/bb3ea637e3d131d72acc033cfc2746ee893349fe", + "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe", "shasum": "" }, "require": { @@ -7323,8 +7323,10 @@ }, "require-dev": { "jetbrains/phpstorm-attributes": "^1.2", + "nette/phpstan-rules": "^1.0", "nette/tester": "^2.5", - "phpstan/phpstan": "^2.0@stable", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1@stable", "tracy/tracy": "^2.9" }, "suggest": { @@ -7385,9 +7387,9 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.1.2" + "source": "https://github.com/nette/utils/tree/v4.1.3" }, - "time": "2026-02-03T17:21:09+00:00" + "time": "2026-02-13T03:05:33+00:00" }, { "name": "nikolaposa/version", @@ -17800,16 +17802,16 @@ }, { "name": "webmozart/assert", - "version": "2.1.2", + "version": "2.1.3", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649" + "reference": "6976757ba8dd70bf8cbaea0914ad84d8b51a9f46" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/ce6a2f100c404b2d32a1dd1270f9b59ad4f57649", - "reference": "ce6a2f100c404b2d32a1dd1270f9b59ad4f57649", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6976757ba8dd70bf8cbaea0914ad84d8b51a9f46", + "reference": "6976757ba8dd70bf8cbaea0914ad84d8b51a9f46", "shasum": "" }, "require": { @@ -17856,9 +17858,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/2.1.2" + "source": "https://github.com/webmozarts/assert/tree/2.1.3" }, - "time": "2026-01-13T14:02:24+00:00" + "time": "2026-02-13T21:01:40+00:00" }, { "name": "willdurand/negotiation", @@ -18495,11 +18497,11 @@ }, { "name": "phpstan/phpstan", - "version": "2.1.38", + "version": "2.1.39", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/dfaf1f530e1663aa167bc3e52197adb221582629", - "reference": "dfaf1f530e1663aa167bc3e52197adb221582629", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c6f73a2af4cbcd99c931d0fb8f08548cc0fa8224", + "reference": "c6f73a2af4cbcd99c931d0fb8f08548cc0fa8224", "shasum": "" }, "require": { @@ -18544,20 +18546,20 @@ "type": "github" } ], - "time": "2026-01-30T17:12:46+00:00" + "time": "2026-02-11T14:48:56+00:00" }, { "name": "phpstan/phpstan-doctrine", - "version": "2.0.14", + "version": "2.0.16", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-doctrine.git", - "reference": "70cd3e82fef49171163ff682a89cfe793d88581c" + "reference": "f4ff6084a26d91174b3f0b047589af293a893104" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/70cd3e82fef49171163ff682a89cfe793d88581c", - "reference": "70cd3e82fef49171163ff682a89cfe793d88581c", + "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/f4ff6084a26d91174b3f0b047589af293a893104", + "reference": "f4ff6084a26d91174b3f0b047589af293a893104", "shasum": "" }, "require": { @@ -18613,29 +18615,32 @@ "MIT" ], "description": "Doctrine extensions for PHPStan", + "keywords": [ + "static analysis" + ], "support": { "issues": "https://github.com/phpstan/phpstan-doctrine/issues", - "source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.14" + "source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.16" }, - "time": "2026-01-25T14:56:09+00:00" + "time": "2026-02-11T08:54:45+00:00" }, { "name": "phpstan/phpstan-strict-rules", - "version": "2.0.8", + "version": "2.0.10", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-strict-rules.git", - "reference": "1ed9e626a37f7067b594422411539aa807190573" + "reference": "1aba28b697c1e3b6bbec8a1725f8b11b6d3e5a5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/1ed9e626a37f7067b594422411539aa807190573", - "reference": "1ed9e626a37f7067b594422411539aa807190573", + "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/1aba28b697c1e3b6bbec8a1725f8b11b6d3e5a5f", + "reference": "1aba28b697c1e3b6bbec8a1725f8b11b6d3e5a5f", "shasum": "" }, "require": { "php": "^7.4 || ^8.0", - "phpstan/phpstan": "^2.1.29" + "phpstan/phpstan": "^2.1.39" }, "require-dev": { "php-parallel-lint/php-parallel-lint": "^1.2", @@ -18661,24 +18666,27 @@ "MIT" ], "description": "Extra strict and opinionated rules for PHPStan", + "keywords": [ + "static analysis" + ], "support": { "issues": "https://github.com/phpstan/phpstan-strict-rules/issues", - "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.8" + "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.10" }, - "time": "2026-01-27T08:10:25+00:00" + "time": "2026-02-11T14:17:32+00:00" }, { "name": "phpstan/phpstan-symfony", - "version": "2.0.12", + "version": "2.0.14", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-symfony.git", - "reference": "a46dd92eaf15146cd932d897a272e59cd4108ce2" + "reference": "678136545a552a33b07f1a59a013f76df286cc34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/a46dd92eaf15146cd932d897a272e59cd4108ce2", - "reference": "a46dd92eaf15146cd932d897a272e59cd4108ce2", + "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/678136545a552a33b07f1a59a013f76df286cc34", + "reference": "678136545a552a33b07f1a59a013f76df286cc34", "shasum": "" }, "require": { @@ -18732,11 +18740,14 @@ } ], "description": "Symfony Framework extensions and rules for PHPStan", + "keywords": [ + "static analysis" + ], "support": { "issues": "https://github.com/phpstan/phpstan-symfony/issues", - "source": "https://github.com/phpstan/phpstan-symfony/tree/2.0.12" + "source": "https://github.com/phpstan/phpstan-symfony/tree/2.0.14" }, - "time": "2026-01-23T09:04:33+00:00" + "time": "2026-02-11T12:27:30+00:00" }, { "name": "phpunit/php-code-coverage", @@ -19087,16 +19098,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.51", + "version": "11.5.53", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "ad14159f92910b0f0e3928c13e9b2077529de091" + "reference": "a997a653a82845f1240d73ee73a8a4e97e4b0607" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ad14159f92910b0f0e3928c13e9b2077529de091", - "reference": "ad14159f92910b0f0e3928c13e9b2077529de091", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a997a653a82845f1240d73ee73a8a4e97e4b0607", + "reference": "a997a653a82845f1240d73ee73a8a4e97e4b0607", "shasum": "" }, "require": { @@ -19169,7 +19180,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.51" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.53" }, "funding": [ { @@ -19193,7 +19204,7 @@ "type": "tidelift" } ], - "time": "2026-02-05T07:59:30+00:00" + "time": "2026-02-10T12:28:25+00:00" }, { "name": "rector/rector", @@ -19261,12 +19272,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "7ea2d110787f6807213e27a1255c6b858ad99d89" + "reference": "7f3e95c9ebf1b16e002dd2c913d30d962c2a6a16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/7ea2d110787f6807213e27a1255c6b858ad99d89", - "reference": "7ea2d110787f6807213e27a1255c6b858ad99d89", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/7f3e95c9ebf1b16e002dd2c913d30d962c2a6a16", + "reference": "7f3e95c9ebf1b16e002dd2c913d30d962c2a6a16", "shasum": "" }, "conflict": { @@ -19297,6 +19308,7 @@ "amphp/artax": "<1.0.6|>=2,<2.0.6", "amphp/http": "<=1.7.2|>=2,<=2.1", "amphp/http-client": ">=4,<4.4", + "amphp/http-server": ">=2.0.0.0-RC1-dev,<2.1.10|>=3.0.0.0-beta1,<3.4.4", "anchorcms/anchor-cms": "<=0.12.7", "andreapollastri/cipi": "<=3.1.15", "andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<1.0.2|>=2,<2.2.5", @@ -19373,6 +19385,7 @@ "causal/oidc": "<4", "cecil/cecil": "<7.47.1", "centreon/centreon": "<22.10.15", + "cesargb/laravel-magiclink": ">=2,<2.25.1", "cesnet/simplesamlphp-module-proxystatistics": "<3.1", "chriskacerguis/codeigniter-restserver": "<=2.7.1", "chrome-php/chrome": "<1.14", @@ -19407,9 +19420,10 @@ "cosenary/instagram": "<=2.3", "couleurcitron/tarteaucitron-wp": "<0.3", "cpsit/typo3-mailqueue": "<0.4.3|>=0.5,<0.5.1", - "craftcms/cms": "<=4.16.16|>=5,<=5.8.20", + "craftcms/cms": "<4.17.0.0-beta1|>=5,<5.9.0.0-beta1", "craftcms/commerce": ">=4.0.0.0-RC1-dev,<=4.10|>=5,<=5.5.1", "craftcms/composer": ">=4.0.0.0-RC1-dev,<=4.10|>=5.0.0.0-RC1-dev,<=5.5.1", + "craftcms/craft": ">=3.5,<=4.16.17|>=5.0.0.0-RC1-dev,<=5.8.21", "croogo/croogo": "<=4.0.7", "cuyz/valinor": "<0.12", "czim/file-handling": "<1.5|>=2,<2.3", @@ -19562,6 +19576,7 @@ "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", "froala/wysiwyg-editor": "<=4.3", + "frosh/adminer-platform": "<2.2.1", "froxlor/froxlor": "<=2.2.5", "frozennode/administrator": "<=5.0.12", "fuel/core": "<1.8.1", @@ -19612,7 +19627,7 @@ "ibexa/solr": ">=4.5,<4.5.4", "ibexa/user": ">=4,<4.4.3|>=5,<5.0.4", "icecoder/icecoder": "<=8.1", - "idno/known": "<=1.3.1", + "idno/known": "<=1.6.2", "ilicmiljan/secure-props": ">=1.2,<1.2.2", "illuminate/auth": "<5.5.10", "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<6.18.31|>=7,<7.22.4", @@ -19866,6 +19881,7 @@ "phpwhois/phpwhois": "<=4.2.5", "phpxmlrpc/extras": "<0.6.1", "phpxmlrpc/phpxmlrpc": "<4.9.2", + "phraseanet/phraseanet": "==4.0.3", "pi/pi": "<=2.5", "pimcore/admin-ui-classic-bundle": "<=1.7.15|>=2.0.0.0-RC1-dev,<=2.2.2", "pimcore/customer-management-framework-bundle": "<4.2.1", @@ -20003,7 +20019,7 @@ "starcitizentools/short-description": ">=4,<4.0.1", "starcitizentools/tabber-neue": ">=1.9.1,<2.7.2|>=3,<3.1.1", "starcitizenwiki/embedvideo": "<=4", - "statamic/cms": "<=5.22", + "statamic/cms": "<5.73.6|>=6,<6.2.5", "stormpath/sdk": "<9.9.99", "studio-42/elfinder": "<=2.1.64", "studiomitte/friendlycaptcha": "<0.1.4", @@ -20142,7 +20158,7 @@ "vertexvaar/falsftp": "<0.2.6", "villagedefrance/opencart-overclocked": "<=1.11.1", "vova07/yii2-fileapi-widget": "<0.1.9", - "vrana/adminer": "<=4.8.1", + "vrana/adminer": "<5.4.2", "vufind/vufind": ">=2,<9.1.1", "waldhacker/hcaptcha": "<2.1.2", "wallabag/tcpdf": "<6.2.22", @@ -20272,7 +20288,7 @@ "type": "tidelift" } ], - "time": "2026-02-05T22:08:29+00:00" + "time": "2026-02-13T23:11:21+00:00" }, { "name": "sebastian/cli-parser", @@ -21462,16 +21478,16 @@ }, { "name": "symfony/maker-bundle", - "version": "v1.65.1", + "version": "v1.66.0", "source": { "type": "git", "url": "https://github.com/symfony/maker-bundle.git", - "reference": "eba30452d212769c9a5bcf0716959fd8ba1e54e3" + "reference": "b5b4afa2a570b926682e9f34615a6766dd560ff4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/eba30452d212769c9a5bcf0716959fd8ba1e54e3", - "reference": "eba30452d212769c9a5bcf0716959fd8ba1e54e3", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/b5b4afa2a570b926682e9f34615a6766dd560ff4", + "reference": "b5b4afa2a570b926682e9f34615a6766dd560ff4", "shasum": "" }, "require": { @@ -21494,7 +21510,7 @@ }, "require-dev": { "composer/semver": "^3.0", - "doctrine/doctrine-bundle": "^2.5.0|^3.0.0", + "doctrine/doctrine-bundle": "^2.10|^3.0", "doctrine/orm": "^2.15|^3", "doctrine/persistence": "^3.1|^4.0", "symfony/http-client": "^6.4|^7.0|^8.0", @@ -21536,7 +21552,7 @@ ], "support": { "issues": "https://github.com/symfony/maker-bundle/issues", - "source": "https://github.com/symfony/maker-bundle/tree/v1.65.1" + "source": "https://github.com/symfony/maker-bundle/tree/v1.66.0" }, "funding": [ { @@ -21556,7 +21572,7 @@ "type": "tidelift" } ], - "time": "2025-12-02T07:14:37+00:00" + "time": "2026-02-09T08:55:54+00:00" }, { "name": "symfony/phpunit-bridge", diff --git a/yarn.lock b/yarn.lock index 6bcc4032..e890f0fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -837,159 +837,160 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.28.5" -"@ckeditor/ckeditor5-adapter-ckfinder@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-47.4.0.tgz#7ff01dc465a8cd71f7a1acd0e9f943649ffce9df" - integrity sha512-g90RXXOoyBL0hsUMo6/IsCKF6qlKtxYlwzeTch+XboZOxkvJmozETKY4mnkR+XI1xZeO1bqqzLe8sKiFRvG7Hg== +"@ckeditor/ckeditor5-adapter-ckfinder@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-47.5.0.tgz#76d6d289e7603da1ff209210a53fefbe3e5d114c" + integrity sha512-fOAmkBcSIWrGFDoz7kdb9XE/8yU7MnmzJ5JNbDVGNnpX+IL/1xRwvsnipwJzvJn8i3vo25kbyKLrh7FA8CsFtA== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-upload" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-upload" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-alignment@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-47.4.0.tgz#a0d4fc432e1a8bcc15255cd383fbaf9ca2c37642" - integrity sha512-MI4PrumF62HZ5kG824WOhqtntDS6oPhmlFwg2vOd8L8fW1Gn4SgigvhqxARLi/OIf0ExnNcXFunS30B6lz1Ciw== +"@ckeditor/ckeditor5-alignment@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-47.5.0.tgz#e808468e40b7abf9b31f3d4ba4711cbc5deb22a3" + integrity sha512-XI+olNUE92MmD4EMbhPhDmk63wt/b+QGNssH0kG/KjNJ/awoQIe+T9r4/k8WzMK7B2j4mdycgI62+ib5rH6XPw== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-autoformat@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-47.4.0.tgz#1e14143970abd433ebfcc5b4b6ffcc65d86069fc" - integrity sha512-dYjPpSaIt8z8d7em+I54+S6Y0m/4fXX27DF6gXMHG+79TIzZxakHK096RJBxj3cIjpzSjHI+v9FQ1Y+nO/M79Q== +"@ckeditor/ckeditor5-autoformat@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-47.5.0.tgz#c38a3e1a2e18b23e9b74d7ad4fa1c49d7bb3f72c" + integrity sha512-Z9f589prwjroiEJPLRNFqSzaALloOm3oPPUN4jH/YyyRnn1mv+7vI6TEPm7ZLKks3ztBN3yv1hFnrAd9oGqY+g== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-heading" "47.4.0" - "@ckeditor/ckeditor5-typing" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-heading" "47.5.0" + "@ckeditor/ckeditor5-typing" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-autosave@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-47.4.0.tgz#e3d85027040d48eb46306c3fca0c0066b00e34a0" - integrity sha512-1DpjdGn+xXfYoeDd6SIcQbkUiOeHQbjN7qmjQWrd6JvowQ6loPtDPGL9OHmL4OFubrVn5GM4dS3E1+cU29SVHg== +"@ckeditor/ckeditor5-autosave@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-47.5.0.tgz#ded3ffef4b96ad7a9576a709b512c165532444d1" + integrity sha512-KKtgL/uJdVLP2srSXG6MbYEZTCjzC2sy3kVcKtkyD6T+q3SA8OWsjH6jCLIPBZkDLNNedNnKnaeUR9+Na4i7Bg== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-basic-styles@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-47.4.0.tgz#c277f33868f80e071a9761e187a2c95c3b444bf8" - integrity sha512-nCVP7W5ryshBG7UfXuFRv58qb/HmSS9Gjb2UUM84ODLOjYPFxvzWgQ5bV5t+x1bYAT8z/Xqfv9Ycs9ywEwOA9A== +"@ckeditor/ckeditor5-basic-styles@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-47.5.0.tgz#f14399bfba8503c4d0284cd0a7590c5ee9b7ccf6" + integrity sha512-az6yy2hShx9TO9tk9oUEy4akO6V7CKl6d8R4PjGij+PxYeGbiHXSPRMjLrJkoRqj72okl+5S22YmhEf1KIpoPw== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-typing" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-typing" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-block-quote@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-47.4.0.tgz#2288acbe34cb8e489e57b67192a0edc90510ab76" - integrity sha512-B1iX0p5ByU/y7AVREgevr0Kfobt9uT1n9rtXToXbA9W4u4yZIVJULpceTgDw+/OJNU8lyKbq/S/6trjYFsyf0Q== +"@ckeditor/ckeditor5-block-quote@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-47.5.0.tgz#fafeff003cd6ac3c10b8c9ed88aba26c8a0a97c0" + integrity sha512-x2T+dn+2CU/r5hmun8AaVwSqNviaod/z483oh0XoexxXDcXE6wLr2FN591INLIdzO4/N2ez3AhcBt0focXYAbg== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-enter" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-typing" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-enter" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-typing" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-bookmark@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-47.4.0.tgz#7cd5d324ad48992c8c4a5ad2b4a09bd07cb3b23e" - integrity sha512-XBAOfYpy0TdVqAXsBgKSKCD46S7kR/oohqP9UKTGUGrNjojW6FS1k1IxvcpRVATn0xPHjZld58wkwizIdeJveg== +"@ckeditor/ckeditor5-bookmark@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-47.5.0.tgz#c559ead16e24b8b5b07243adbaa16d4271cb2296" + integrity sha512-5EkwJE5BuVTMHjw3VDKscVbMoG4kxD0wDCN2DTnhRo/drPNZ3q2Jw+3SJigpUrFWYUtzhF0s7+Mm6TL94rSBaA== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-link" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - "@ckeditor/ckeditor5-widget" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-link" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + "@ckeditor/ckeditor5-widget" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-ckbox@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-47.4.0.tgz#e9cdb256c318bfbb0263a23bfb25637f24923e81" - integrity sha512-Utk9nYwzVRLQXYVVR+oi3x4xN7C0lzt+ZUyPjBRf3k60ijP/OpA8lsJJWzonuEEsdELsLzaBNSivTa9hjLZLDA== +"@ckeditor/ckeditor5-ckbox@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-47.5.0.tgz#8d1efbd62e8c87509fe8796d64d79139c9d46e47" + integrity sha512-OvTjDZSU+XNNzEmny6X3D90lhGF14DsnS00TcYj7uRqiwOUtnWw0ba0Hw4ulJ9Jrfs2CzG+rz2YokMm5iMgQHw== dependencies: - "@ckeditor/ckeditor5-cloud-services" "47.4.0" - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-image" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-upload" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" + "@ckeditor/ckeditor5-cloud-services" "47.5.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-image" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-upload" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" blurhash "2.0.5" - ckeditor5 "47.4.0" + ckeditor5 "47.5.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-ckfinder@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-47.4.0.tgz#bde9e251ca17984fc8095bc1abdf8002d7b57e84" - integrity sha512-jXWwDfzFOn2S/oK84Io6cB7I0W9I7CwMyBfg5YbCEhYtv5aeNQBpRqwik/5cfmMrBMBXrPu1QRs60NIwegk/Eg== +"@ckeditor/ckeditor5-ckfinder@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-47.5.0.tgz#a0ba717932942c8bdac9e62d08bc411a87fd4e1c" + integrity sha512-QoyPTGypDiPgehwaaykzfH8ZUzr2qhHKj0BC7pqhAuHZaWzdCl49g2ZTI2PlMZRIrYNWr0io5zxQq/elSOgwcA== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-image" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-image" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-clipboard@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-47.4.0.tgz#72558f987e559d91ddee17ce6594dbc96ade9fd0" - integrity sha512-LUR5yTXjHxLn8YLKrJj4/DBtqk6zdPg5SAVXkpNSz5UxU63aaj/L7jKCInr36Uy23Ov5TgT6FkgXPaBtakAqDA== +"@ckeditor/ckeditor5-clipboard@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-47.5.0.tgz#aec63eb1d509e8476079cd7d6012611b469dad19" + integrity sha512-LB+KSXasEOL9/3OC2WBPwbLaKd+tDkix+4RVaki9hciQb4XgwQB3q6TWIbKcR1lPjw3Ox8tT/Io11x9AEtOzkg== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - "@ckeditor/ckeditor5-widget" "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + "@ckeditor/ckeditor5-widget" "47.5.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-cloud-services@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-47.4.0.tgz#d3978b92528fe4600f8bacc5e8239a5ac7c4fbe5" - integrity sha512-6xUiyoMkcW8F/8OJrEGeKrMixRGLeQYHxij7tYyrXUqugdCJmZ5WNfvsoyVBwk7g3XQDSKnfKG28gSVBPirwBQ== +"@ckeditor/ckeditor5-cloud-services@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-47.5.0.tgz#36810ef954fb08e5c0e8cc36c6e8462ce27b0ee1" + integrity sha512-lsvOK5w99+GfwQz9UyXaKEbH70+DEy0+wvO+82lgd5vpOiqMYfHz18b1abi5ICCTMo+m3KZyFFj33NoelRWq6w== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-code-block@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-47.4.0.tgz#0898ebb555689eda97c50345eb2094e1e208dc9b" - integrity sha512-lfZd1Zu6FvHbOEXa1yJnuRDK0jYXZR0OaV9ek6A2ZQ6Z169Brc+aH1sTakw7r6S8m1clTz+vRH3UuVk7ETsQGA== +"@ckeditor/ckeditor5-code-block@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-47.5.0.tgz#564ca4e1bbf571e72256a89c726ca5729064cc34" + integrity sha512-DdfmlvIu4nRgX41bUTkGlkL0PGJEIKcL3vVRniLXjgqnNrAsR5kWdbYTOu+qSvlCVzr4Z11nAG49QZIJ/aeAGg== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.4.0" - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-enter" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-clipboard" "47.5.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-enter" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-core@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.4.0.tgz#16413d2fe25e456ddd97b67d3e2b4bdf1ff1b4c1" - integrity sha512-upV/3x9fhgFWxVVtwR47zCOAvZKgP8a8N7UQOFwfs3Tr52+oE1gULWKTiS9079MBaXaIqtM/EbelNdvBh4gOGg== +"@ckeditor/ckeditor5-core@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-47.5.0.tgz#5919f424fa538437914418cdc4311342ca36cc11" + integrity sha512-4LdO9HIJ/ygN+YC4pty5plmFqlvHmjuQx1zdzzmbL3VSR4MCsaongDX4vVqpUcRVLzxM/1kErP0Da6cpVbkqzw== dependencies: - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - "@ckeditor/ckeditor5-watchdog" "47.4.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + "@ckeditor/ckeditor5-watchdog" "47.5.0" es-toolkit "1.39.5" "@ckeditor/ckeditor5-dev-translations@^43.0.1", "@ckeditor/ckeditor5-dev-translations@^43.1.0": @@ -1033,316 +1034,318 @@ terser-webpack-plugin "^4.2.3" through2 "^3.0.1" -"@ckeditor/ckeditor5-easy-image@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-47.4.0.tgz#fcbb1d470e1e4e80c0198a92ca8d6bc077b55dcf" - integrity sha512-YMxvD3Gh6kVux1OKdtdubvjtUHu4TIN7YgCThqsfnuumpnx94Dhq3+wy8o/dO73dRcq/iVvb/9LmkivT4+8uXg== +"@ckeditor/ckeditor5-easy-image@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-47.5.0.tgz#c47e54bb58b40649f0986f886faad5a2958f9502" + integrity sha512-e71gKQyA0UnSun4XLXawg5SP+IV2N/jhw8mu4FoFcRxhqV51FAwonldzwfdNgfD9lpX6bhYi3gREPGnuwdVPgA== dependencies: - "@ckeditor/ckeditor5-cloud-services" "47.4.0" - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-upload" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-cloud-services" "47.5.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-upload" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-editor-balloon@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-47.4.0.tgz#489dd513869036b673d5d9f4d7408dd39693bb58" - integrity sha512-FZuHy5EhzssTQZTuXQF7aVRJyvY0QaIOr6yj8fttRoWQgIDMzJNm+rVW9C9FRa1+j1i9tlrE21+GYIhCgEGyOg== +"@ckeditor/ckeditor5-editor-balloon@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-47.5.0.tgz#229cfb65c61069a00297fd8857f22333e91876c4" + integrity sha512-UrMEb65RrEmV/v/DvPpGIfFVa8KCoVnONALyDRPQ8zsdp745vKuMi+i2jHGGdhKWz6SYDfzJROQ10dq3FMxuuQ== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-classic@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-47.4.0.tgz#c41243dfe3e2029d432db43c537ff73775c2f483" - integrity sha512-b698aEHRJSC4jMP0fYD78tdqMw5oQHtCpUL6lU8LFsysCe5M0cqgab4V0hEjeIsg4Ft/UmkgFd1aAleRCDftJg== +"@ckeditor/ckeditor5-editor-classic@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-47.5.0.tgz#2b74e7698a8b8ed0ac432c7bf8ef230ac830fd58" + integrity sha512-OPu3OiaXm03r+mGhzQMdRyMFnJYMT9VPC8+e91e52GVQh/8sR03rwoow2RbNvsznP/+fAVnH4LrIgRR8K5cgUg== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-decoupled@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-47.4.0.tgz#df4bcd16c03addcedb2c5b56887850eba592558c" - integrity sha512-4Nk/fe5Sob9aUf8gf4K7GQjqI0XftDThGRjX1eKOSDs+OGXRyB4Fxtu+tHLCyCt8cITac/PAMWaO7dwqbAK8bA== +"@ckeditor/ckeditor5-editor-decoupled@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-47.5.0.tgz#b6503cea5ed12485ddf606091e113521957b5655" + integrity sha512-bO8+DysIcgdrqo26InvoZ6geyoCBExs/V6c3DPhbG/pUuMXc9F7Zfn/hmKo1iOWL8E+gEJosu7psP/PiYM8RAw== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-inline@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-47.4.0.tgz#05576fe4bd2a6c41ab4845ca4584981c52ae08bf" - integrity sha512-/xKtAwq0Pg3Zq7q9QcmrUnqc8XScrUlixWnl58gOxsdmflaSaK4qLtnId0FmSrax0tqVp1qihsUfvE5uUNnyGg== +"@ckeditor/ckeditor5-editor-inline@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-47.5.0.tgz#28a083c28b86e6cde1696a3d0fa1b074b4e378a1" + integrity sha512-L+YSTq7Hlt9nmip9xwPBAW1rNQlS8WGIfgXAgOhcdXsUE7r43PA5gjyckvRB0vKASOF5+c6PTDjiLpapNVnv4g== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-editor-multi-root@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-47.4.0.tgz#bb41b4c5a076c23f8dcb51660ecfbef300db84b5" - integrity sha512-gKYQeg2QI+9JM2gujYVBaLVlh7Dw4XfkX1g4jYMEqq4YG5E17Hpbc1A/IqUb0LLpAd1TG64AR4s/vxK0JrnY1g== +"@ckeditor/ckeditor5-editor-multi-root@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-47.5.0.tgz#f5900fc795a2319ba8e9787cf66aae052339be01" + integrity sha512-tpI5VMwT+O3dXktORZ1Z4eCDp9sFEsxxEDDv/mmGz/6s2h+9rjEIfi8KqVnRfEC+uW/H2pu+q6r5y6/S3c+unA== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-emoji@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-47.4.0.tgz#b3214f8668f6e8c1621153f3535154015d356030" - integrity sha512-PbTqvbBzMfvKaxTzAt72VskT8ifGoKRNKzskEmm74RCLu6a60rUaqL/4ChkTsF1FKPvB07VDbyDQx4XkvUOBIA== +"@ckeditor/ckeditor5-emoji@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-47.5.0.tgz#31a2ce0fe2013052d8fbf80d86b3a566036ed73c" + integrity sha512-NVSg4hMpzyq0eVmVugBmY//McJpiyK0/XsXx72qySSh1b4FfKVT1couNB0m1pM5sFm7hXYB33WXyTpB4imyKyA== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-mention" "47.4.0" - "@ckeditor/ckeditor5-typing" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-mention" "47.5.0" + "@ckeditor/ckeditor5-typing" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" es-toolkit "1.39.5" fuzzysort "3.1.0" -"@ckeditor/ckeditor5-engine@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.4.0.tgz#7711c1e3bfc7912f56ba22310d8299691e18b02c" - integrity sha512-U3Zq3qZ86Si6L4BslJIXotK9oVXu59zAuDVWlx3prAUS5Mrz7MfVlWdz9HeWu9W1i2FmUGVksX+uoO/ng2CZUA== +"@ckeditor/ckeditor5-engine@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-47.5.0.tgz#c9bc555284dd691aea17a3f4a0eb72d88638ed8f" + integrity sha512-4T6MzgjV5C7em5VgaHJ+RuN4gipryTErqtjtmb/RJXvfrEg37CYOpdHurM/VwY8hiD7yGUADB2iJGroLtytzCQ== dependencies: - "@ckeditor/ckeditor5-utils" "47.4.0" + "@ckeditor/ckeditor5-utils" "47.5.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-enter@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-47.4.0.tgz#9d6b5038a43c926cb0245f6bd19c52d80151e99a" - integrity sha512-BQjJ7CjXENoF8Inv8ydRl+luRMKQvw1ohkiYsTEruHjGKkAFyDTGrorzkoGp2IU98n5SVGJE+XwVxpKgjsKAVQ== +"@ckeditor/ckeditor5-enter@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-47.5.0.tgz#5e7221ce635369ae2f6c94e280f12c42b560e4f8" + integrity sha512-knpo3bZwFURor6gnDN2oS2mAA9qoPvMsEjuS3hce5K6pQAKqyUHqGSIQax7dLBW1spaWExvI+OTi/UNtNyPLWA== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" -"@ckeditor/ckeditor5-essentials@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-47.4.0.tgz#f0100ebe4ec1dedf427648848571d722d076faa8" - integrity sha512-M+8xGJF+PKEcTjTeqofNe6cjcTnsy6EomqwGrbHDHhyAXC4d8k/vRrptymjonW7H9IsuOcQ5t2eZj3d+yl03gg== +"@ckeditor/ckeditor5-essentials@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-47.5.0.tgz#4622134a31ade31a1e45d402849e8660b1a41872" + integrity sha512-uEdq/jnWPuN2KL6RufpQW9smnJGnU2f5/a5/QuP+rIfzPmpCmwCjgQto+8/lpCzWvEjUoHUsuIHlIT4TFYUYEQ== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.4.0" - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-enter" "47.4.0" - "@ckeditor/ckeditor5-select-all" "47.4.0" - "@ckeditor/ckeditor5-typing" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-undo" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-clipboard" "47.5.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-enter" "47.5.0" + "@ckeditor/ckeditor5-select-all" "47.5.0" + "@ckeditor/ckeditor5-typing" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-undo" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-find-and-replace@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-47.4.0.tgz#7ae9606af2def3a71f75883d6d69e126034e3911" - integrity sha512-CZAX1XxrJcnOAwENfw4x4DiLyZ6uOHUHJqFXyyJdQC9qfEizvFYTXn3zO6fbViyDd/k4ugAoLBjpaZh6p9FyOQ== +"@ckeditor/ckeditor5-find-and-replace@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-47.5.0.tgz#df21b3c6afe49e5aac0e299aa8a73bbf66d9836d" + integrity sha512-30yr8zzztiVxVmYzKgp8snDWh4sJJc1FbS3UM+u9coNGdlxzpuy9SdseNRPOi+tTXsK1OI6/amWJltYmDsAseA== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-font@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-font/-/ckeditor5-font-47.4.0.tgz#c93d96c7c96a584f708d98380658e20e6781e7a9" - integrity sha512-QRIThyZg0kT1R4LTotD6cV9gm0NX3Z0Cq/IOQtuwTbRb3wa+kWXhVfKZPV9Qru5HifvrCrcWXMjkBRRIdfqp+Q== +"@ckeditor/ckeditor5-font@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-font/-/ckeditor5-font-47.5.0.tgz#6c04c37db3c319c8aad73e730040bd21d35b30b4" + integrity sha512-qh9GLJ9+9DsdPXgZg8dH8D5mv/ZZ0mK+Ulwct0rSxIBLruFK5EhjXjngIG8HUv30BGCIpXPawGDTPv2txQ4vlw== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-fullscreen@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-fullscreen/-/ckeditor5-fullscreen-47.4.0.tgz#a1eaae21a4f3de061bf86fa34c1ff37f18cc9491" - integrity sha512-DdroZD1cgNU3up74ZQq84vXyCDknQJJyyxQIXS5CKJy7qNR9YmixpVmyXpYJmZzdSVvp/p8Ej87VlOXfju3ilQ== +"@ckeditor/ckeditor5-fullscreen@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-fullscreen/-/ckeditor5-fullscreen-47.5.0.tgz#130a8ec9624d0a70c3fc67e74a41c6aafa6c168c" + integrity sha512-cdgpNSOKrqKZMslG9hnQQoWRUy+tAVi7r0oGIbDfMezvLnaJDoG7GmYSWbGe1/+l90/TMtxKwYM7cQ6dmqutFA== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-editor-classic" "47.4.0" - "@ckeditor/ckeditor5-editor-decoupled" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-editor-classic" "47.5.0" + "@ckeditor/ckeditor5-editor-decoupled" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-heading@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-47.4.0.tgz#632bbc6eb40fcccce90fd2177e53e588cceadc0d" - integrity sha512-VWBxQ2ngrT0x50Tb1klZyIOykgNPby8sw5rBq/nv/UXBb2Ql/crp50miC8pBCOvkbTP16qzVbl5HoiltJQkH/g== +"@ckeditor/ckeditor5-heading@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-47.5.0.tgz#56c097ea5f4316e34069fbc2c7c7f54fbdc7993e" + integrity sha512-TEHY+unz+1fnx3554TgoYNGw27Vct7aDm0qw0U5/+PkZIyAxLcElkzRqXu3HhAPy6qs6pqxpPfKWWtREJhKluQ== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-paragraph" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-paragraph" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-highlight@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-47.4.0.tgz#3ff7a0314c72649d3754b578699f4ae88d538aba" - integrity sha512-SHBkoMVu/uTkvE0/1zaehlvCpEqYuh/u1Rh7SHNysrD05Nacs1t5jw+l2lTFoyJnhTy+RA9IONYSDF+5tK3dqQ== +"@ckeditor/ckeditor5-highlight@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-47.5.0.tgz#387550fe2965c4308a6f390fabd78cea4e7e6b3f" + integrity sha512-ajLkP2jA51B+K83g/Ujyuvpe+Wst9iniPBASmMn03pkC3ZNkdDRtCmz1Kkhe0UpYIvhCIKeWHIaH+7BS0DlbAQ== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-horizontal-line@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-47.4.0.tgz#02e27c27fa0f928ad41bafb9b8cfd961e5049396" - integrity sha512-UvL0x55QxRGiem8EPO9n/WQk6218TDNatKSCRueZkAYUrFC1bmtVs9g6GqvSl59RoRGcTxVcz0fXbsxrhZY6HA== +"@ckeditor/ckeditor5-horizontal-line@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-47.5.0.tgz#726bfa24532d4c9f7b579d97cf36f70a61db0291" + integrity sha512-/lPpkiish+KLFCV+oSJ11XldS4MJdOogfKAtWkpdlzLS64/Duw0fxOUTk8lzo3tHAgZgP7Ji9FJM1HtiNehTNw== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - "@ckeditor/ckeditor5-widget" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + "@ckeditor/ckeditor5-widget" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-html-embed@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-47.4.0.tgz#6cbcdd19341f18513c1c8349c68004bf53a7dd54" - integrity sha512-SnidyadvuC0ohT2kZ0crsnFy8adQwhHcRaGUNXx5qAHRK7K1wGp3nxdnyOW5GdK2CIe8DTo+H3v8nXfvt7VgnQ== +"@ckeditor/ckeditor5-html-embed@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-47.5.0.tgz#10a35f39e4aa249f5e98fae21815fca9a628070f" + integrity sha512-7gDouRaElSoICODnCwmziNxKJnvApur/QPLt374q7gz2l3sCrSM7LuDuCDAXWTQGQGkA1291OrOKQtuXGwY/xQ== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - "@ckeditor/ckeditor5-widget" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + "@ckeditor/ckeditor5-widget" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-html-support@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-47.4.0.tgz#69111ef5781ee732876beb77c40c1e347b2bc4d3" - integrity sha512-SGd6wvPB9VGNqEWvoEdK1kQJ3lpvrTNfsA5Pg02V/Zr3gIxnAqajYEArWDYtsz3ajaUDs06i1tFdpCbFB7JRMg== +"@ckeditor/ckeditor5-html-support@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-47.5.0.tgz#e126a6674ef4bdc05038592d8e54c7d170299918" + integrity sha512-e/OuWdlh6EbE1ZrQDu0/QnMd+V1XdwTmUJkOQrwwZ0x8CSKvKOt+Nb40ac0ShjTE190dMD1tGfOjM0yDpp0neQ== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-enter" "47.4.0" - "@ckeditor/ckeditor5-heading" "47.4.0" - "@ckeditor/ckeditor5-image" "47.4.0" - "@ckeditor/ckeditor5-list" "47.4.0" - "@ckeditor/ckeditor5-remove-format" "47.4.0" - "@ckeditor/ckeditor5-table" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - "@ckeditor/ckeditor5-widget" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-enter" "47.5.0" + "@ckeditor/ckeditor5-heading" "47.5.0" + "@ckeditor/ckeditor5-image" "47.5.0" + "@ckeditor/ckeditor5-list" "47.5.0" + "@ckeditor/ckeditor5-remove-format" "47.5.0" + "@ckeditor/ckeditor5-table" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + "@ckeditor/ckeditor5-widget" "47.5.0" + ckeditor5 "47.5.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-icons@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-icons/-/ckeditor5-icons-47.4.0.tgz#73a1fbd70f14cb859ee71118978690489cdb2b9c" - integrity sha512-2THOymXou/dBR+Jk69+/DzE3lK3QVk8+9eSKdWQ4+kvYom9MXT9RwKJNe3BlvqUNxBymI8eVBjdaQjfv3AOT0Q== +"@ckeditor/ckeditor5-icons@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-icons/-/ckeditor5-icons-47.5.0.tgz#9aecb267dc60f366b4281bea16e6811f2f1966fa" + integrity sha512-1LKzMsMrKHOEtLc9rw2C6iV5Wx6YCjd8I4WxFKQnxtW+F7+e4H4+rWU7ILpUxYjubEx0FSUJsyyNB9B98GMUgg== -"@ckeditor/ckeditor5-image@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-image/-/ckeditor5-image-47.4.0.tgz#6222e3ae17fe6d94b609afabbd7e0d605e1ffcb0" - integrity sha512-Z0q+cANAvzvW/3lIMg0rpvVHx4nlWbUsfPw78gM7/DmB4qpdbKsX07iTut84ZnWvOP+WU3XIrhinMXTvl6IqEw== +"@ckeditor/ckeditor5-image@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-image/-/ckeditor5-image-47.5.0.tgz#8855bb8cd4542c9a59daf974f18fe2d457885833" + integrity sha512-Zm9Qvj5UUC+bKHtQNmPJisTS9Sy1z6UQ6pbH2OxKPcw7ckhozQIeRtZQqoSSKQWq9B9iJ+CPvE3b+7FYkOXkew== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.4.0" - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-typing" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-undo" "47.4.0" - "@ckeditor/ckeditor5-upload" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - "@ckeditor/ckeditor5-widget" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-clipboard" "47.5.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-typing" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-undo" "47.5.0" + "@ckeditor/ckeditor5-upload" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + "@ckeditor/ckeditor5-widget" "47.5.0" + ckeditor5 "47.5.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-indent@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-47.4.0.tgz#ddbd56d04ab80c4a5bf2039197e778ca4e0487b1" - integrity sha512-lFPYPUSuByK6GHiTnkHeLkWHD5/SbXCQ5TJVzRJ3uaWvbqo0b0Hvoz92vtKueOwi1QsgXD38aYhMljs0h8eP5g== +"@ckeditor/ckeditor5-indent@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-47.5.0.tgz#2c439c83d5fa6b40786519d08adab9079e919de9" + integrity sha512-ZioulqHdwXBqirZGwESdkXWiYa1AE+EVbhegMO+a8tNa+SCDIt4do5PsrWxyz+PtW5jGBTKY831TY4NIGTihvQ== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-heading" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-list" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-heading" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-list" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-language@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-language/-/ckeditor5-language-47.4.0.tgz#30ea15cde33cc28d7e1582bd7f44578becf67534" - integrity sha512-3FEoS59ZOTm6m0m0O5qEpsf4tGX/r+r0LjkDrRjhIcaGJh0W4Ao2J6cSrXv7hikDpgBjbHIkEy0V6KkIWWAZpg== +"@ckeditor/ckeditor5-language@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-language/-/ckeditor5-language-47.5.0.tgz#d718d54328b8ea9ca99d6e489b77ddd886b91ed0" + integrity sha512-BSSUxiqXNGEz9knYTgMJF6wpKjCY9NEsFBmfVzsXiIuNpYSXrS281Efl49E1ivjlnsgyEJLvmed6DOa+mkUHpQ== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-link@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-link/-/ckeditor5-link-47.4.0.tgz#f6aad2f7f03d2688db0171632c5f06c775725f80" - integrity sha512-AF7TVV64iOqia4x4psHakYYznPoS3I5j1Gijoa7jiTLGJZSaAL7xAc1qAajgWQ66o7DWuVGL7QkZwKIo1jlTPg== +"@ckeditor/ckeditor5-link@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-link/-/ckeditor5-link-47.5.0.tgz#1d62c5a3f010f42c630894d99cf14310b707604a" + integrity sha512-sxsB0dSEsJL1g+GTJ4dTQ33eulS4/mZ2wwU8TgN5EtpPjGR1DcsFM/Hbhpr+nC6pyGfYzjV5GnhgOT/aYGE2lg== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.4.0" - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-image" "47.4.0" - "@ckeditor/ckeditor5-typing" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - "@ckeditor/ckeditor5-widget" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-clipboard" "47.5.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-image" "47.5.0" + "@ckeditor/ckeditor5-typing" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + "@ckeditor/ckeditor5-widget" "47.5.0" + ckeditor5 "47.5.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-list@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-47.4.0.tgz#daecd93432dd43a0d8eba9b58923c131a4fa8a46" - integrity sha512-OGvAgS+NB1dzrqhN1xEVfN8PTM73pjMnmDvQeQurwIfjQdJaO07jGPRqujQzNostckWvNPtQysXkbnp+QiCPOw== +"@ckeditor/ckeditor5-list@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-47.5.0.tgz#07dcf8aab14a054d1885d173aa8ed8cb7f04a021" + integrity sha512-9Yq2Jsgebbdxe6As3jviwFXL4CH38Mb+YUjlO2oEZZEw6fDvwjc83ziBXA/t+6cyBTdLjibbFhGLyPeiy+Y0Lw== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.4.0" - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-enter" "47.4.0" - "@ckeditor/ckeditor5-font" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-typing" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-clipboard" "47.5.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-enter" "47.5.0" + "@ckeditor/ckeditor5-font" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-typing" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-markdown-gfm@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-47.4.0.tgz#7ec446c002d000d53b0c5ee1a756add477718019" - integrity sha512-2W1dBzxPIdEsE0CiU19K4xQfBS2jSBruJh5XV924eyuJPh76CdXKDGPBwuVd6i1oK7x+ji0Griu9Y+R2F0jRIw== +"@ckeditor/ckeditor5-markdown-gfm@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-47.5.0.tgz#6dd060188b2397a5b221dce26608f9ef6a04bb70" + integrity sha512-sxttfFji9jTHDKdDklN13w480tI+tLwATIOHO2xTDbsA18tp8opeBFNUUfEeQ8XoZkAxckwv5tFu9Au2XuAdJg== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.4.0" - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" + "@ckeditor/ckeditor5-clipboard" "47.5.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" "@types/hast" "3.0.4" - ckeditor5 "47.4.0" + ckeditor5 "47.5.0" hast-util-from-dom "5.0.1" hast-util-to-html "9.0.5" hast-util-to-mdast "10.1.2" @@ -1358,271 +1361,271 @@ unified "11.0.5" unist-util-visit "5.0.0" -"@ckeditor/ckeditor5-media-embed@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-47.4.0.tgz#611ea3ccc49c4a529da966bd792cd210a3ef6515" - integrity sha512-oL/In6Q3dtgj23FyyKbtYa704sl1eEx8JeO4ODRL3scCNI2/7qx9nGMexydiJi+Saulvs/3g7A8PbXiI+iArog== +"@ckeditor/ckeditor5-media-embed@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-47.5.0.tgz#0c40872aaad5d68853c5c59bf09c42a784165243" + integrity sha512-aA+MALRNzyeXcfXoEKDJiun0VU5p8llVrXibrXKBK4Kpx53TdBd75+OUe4z8wOcKYN50ntRf7YSGCLB0yqJuLw== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.4.0" - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-typing" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-undo" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - "@ckeditor/ckeditor5-widget" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-clipboard" "47.5.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-typing" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-undo" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + "@ckeditor/ckeditor5-widget" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-mention@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-47.4.0.tgz#362e1e63898215f8df4c2abbcd908bb7408a6056" - integrity sha512-1niRMaI5HxYbSTosxjU/6F5Uo+2hCEa3s18emwIBMTG1zOu0OViubuj+P8wCOqmSmpzvfkNybl4kk74MahGk0w== +"@ckeditor/ckeditor5-mention@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-47.5.0.tgz#278c4cb3851b0c74fdd6d4121a0b6e19923a8bfd" + integrity sha512-AhfdHcG6TNRLP/gEJIPdZM792vbjzQUR6lwXy7vFRIfVwDZ+qanEIKsTJue0x1oJYkdxC0hSRx2ZN+4QHwEOFw== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-typing" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-typing" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-minimap@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-47.4.0.tgz#0aeffe10bc25f850bb57656d183c5c80faad3b42" - integrity sha512-j0bOrjhEB5U6wCrz8CgW8ueFgHJJORtgqkOiRfQd++SBHGULSRr/WJwvaObcrhhNrY4Mlme8Nws6s5YJxzlFhA== +"@ckeditor/ckeditor5-minimap@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-47.5.0.tgz#ef05d0f2f9d6cf477b26bec3d820da9c400bf58b" + integrity sha512-GarVZ6e29UY6KWlKZcCQRgEggU1oqep3J6wiXJ0hxrcvYOsDS06Zo326xdcs9zQEC3M/siBO/4WW77gBZdjB0Q== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-page-break@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-47.4.0.tgz#bf25609dd31c6e184570522ed54f60855056167e" - integrity sha512-v4VR4OhLqj5Rp/Dwb9BSb9lSNAkGVF9n5ThvC0dFeHMikC4ENcqH8NpcbVnaua4tsM9tX0jZLHbcX+jMune4IQ== +"@ckeditor/ckeditor5-page-break@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-47.5.0.tgz#113c0834e610e833b82c7cf1beba7e931f5f4535" + integrity sha512-e7//l3ls4vVsRXcsX9Lg6r9EBjT5Aq6UfHB5KWpi3bH+S2tqE8CoeQZPKFF7fa6W2V1BVUolkUeN72iiOkCi6w== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - "@ckeditor/ckeditor5-widget" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + "@ckeditor/ckeditor5-widget" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-paragraph@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-47.4.0.tgz#dfd2f314bcb3b0557a16e9c8ae7be5e5d5201a95" - integrity sha512-epw82iXcK6togOeE/rolQBkyxCfz8m30VoH0bdq0YKkg8+HJ5uzB2FweFDH+l/cyoubdB2f1370G2dAMp6huBg== +"@ckeditor/ckeditor5-paragraph@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-47.5.0.tgz#7016e3440e532acf1fb60ac43a0efb50f438abf5" + integrity sha512-dEOJ876f8kvpkNBCOSj9g+2x6Ig9e41k0Gdp3WrkNcX+3QCthNeWa5XJfPDsQqTINldv+L9GBwxgFEMRi0Fq/g== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" -"@ckeditor/ckeditor5-paste-from-office@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-47.4.0.tgz#b1b37e743ca71548e6b3e7d258be34ce4e42a9df" - integrity sha512-yKOk+CDV0dAy+XeqUcP5Drur1u69h6UCdLwDUEbS/egSv/+o+tJwCGrTCRzPqBeUxIahUGBMk0obID7v6xT9IQ== +"@ckeditor/ckeditor5-paste-from-office@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-47.5.0.tgz#5f2ebb0d30ec317dff6d74610f93bf7dfdca3a89" + integrity sha512-xF9TXExWPPVgIEA1gxf+oFNMVSOsbpGgRSNKS23gN5scxLupNGN/G1hj0UGTgHaYczBiOqW44bu82Lgduz7/GQ== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.4.0" - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-clipboard" "47.5.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-remove-format@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-47.4.0.tgz#1461db9343d708a79c24c0af07c70e54a783d999" - integrity sha512-XD6LY76m3bZr/twRGTjNRnU4z0VU1akDC7evVMhRPaDruR71km00VT1YNPRChCDmdssEVeWEynHhLQ/kRjy+0w== +"@ckeditor/ckeditor5-remove-format@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-47.5.0.tgz#530d52bd163a9a46c9643f505ab9da4bac2fca65" + integrity sha512-QTR9ye1iWfnGu7h5a4RONEf2e4y21dC847opNUozO06g51/e7G6iXybEcRtBqs51gpVddKelUbxUV2Zp7tm8iw== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-restricted-editing@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-47.4.0.tgz#29df0b5763d973d5e1713fea194abe6e72d32c85" - integrity sha512-roywT2jKCs0NVd6TVhYlmrnP0oI4499M5L1mV8Vqq4wc9puVeEPSIKoZNdIF5YWXsHjpCUCMejpuigLTIbf9MQ== +"@ckeditor/ckeditor5-restricted-editing@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-47.5.0.tgz#6511a83f91bbbed157242252f829aec6023b548b" + integrity sha512-hL6pr3L1xaERwGBNG37AcLwj5XVXqAzYUWKF/pDbT8FnHymA7jn1dbsUHHbmPaqXtk8zu7W9k+aGKXwrkPUFVg== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-select-all@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-47.4.0.tgz#6759a9474ecac0df1d75b2361b0521a7f5e8e7eb" - integrity sha512-9fVsmNFmSj53kJKPKUmCkgpXUev2OeMJ5cFVKXvzEvsm6jFTO8/9iHRTbN/j/ZzWuK5MoO/I3gVn4wGOIX//zw== +"@ckeditor/ckeditor5-select-all@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-47.5.0.tgz#5fce145bb23e1565aa039cf4604b5ab8e8d75d16" + integrity sha512-g+bLHv5aqgtuGhqLo9FNYS4aSGZztb15myydHXvUBJ7OgY3YlVDILi0xd9WrySPpO+Axi0ATdl9evO42rPYVJg== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" -"@ckeditor/ckeditor5-show-blocks@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-47.4.0.tgz#0ae9ebbc8f13a48f54cb969dfa09145fc552ecee" - integrity sha512-uIFHsH2HMPYRWmK+heZoiXRVqbxFJZwYZY1WmNKjE5g7OM8y+PVowe0ZYICjauV2/Z2rwCWtodDKb1bnVnl+mQ== +"@ckeditor/ckeditor5-show-blocks@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-47.5.0.tgz#124c93f6e066e9daf0d5883bf05d733909b076cd" + integrity sha512-G902a+fvVv9IMcLm634yaehf7VYwWrSZqRQtD+rpV2wDaHcps5aXCHSPNrk5JdbInheF1d+V3uiySzbkc823IA== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-source-editing@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-47.4.0.tgz#59635fd5d85988f84885bc455da8839bd79ca26d" - integrity sha512-AtamOK+Dya6abkuo9XYME05FYFigBRic5gr3/KzhyFfHh7qiFlZFLCDH0S/JEQ0AduFjfgUx4h0ST22RIhiYoA== +"@ckeditor/ckeditor5-source-editing@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-47.5.0.tgz#7716a5c492a23cbb745502a8b1047e533e2dab73" + integrity sha512-YmTaRSVkbx441xa9foOz/z+cYqJ385yKC6cW+MACsDVdHj2ruvj1QUDrRpvPc8T0irTSAuhxQhhmCSIEnt61WQ== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-theme-lark" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-theme-lark" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-special-characters@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-47.4.0.tgz#e220194e45a2cf0563cc30d2e81ed87a3a2853d6" - integrity sha512-eYP23WZY8ayA0q8LNVCUcP85yf9J2gSpVE9E6LNIku4rbzox6mCf0sZF0ZhzvqHyXyj9Mn+S21IZpLOTuTUW0g== +"@ckeditor/ckeditor5-special-characters@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-47.5.0.tgz#2739d4f930447d2c7388f51324a1a6b562cf52a5" + integrity sha512-Wou/dBJnv3Qiuz7io8YTL5LJGS3JqiGwpw6nLKPxADinZfI8Rr+ZOvw5BL8ifYkPudOwLFKFwMY3/4I7tZQAhA== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-typing" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-typing" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" -"@ckeditor/ckeditor5-style@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-style/-/ckeditor5-style-47.4.0.tgz#e6077f4875309733e7d56bccd02f284b57ae08c3" - integrity sha512-R6kt9jX9FOnYRXKn7kX0ZdIdW5A3S7ZZBfcdwzG9O/t7r5IIkp+yhC1y6/uBAc2twvvqMhG7Gu5KH2o/TVVjSg== +"@ckeditor/ckeditor5-style@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-style/-/ckeditor5-style-47.5.0.tgz#46763990d05acaca5a52b607024379727bcf102b" + integrity sha512-JmXOZQvRoOeNotZyXdColDncBw9GIl6nFbL8lVHZL/BF6wFxRHlJSjy7W/VdYAsHv3GaOKlKWMRg72k+17mgUg== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-html-support" "47.4.0" - "@ckeditor/ckeditor5-list" "47.4.0" - "@ckeditor/ckeditor5-table" "47.4.0" - "@ckeditor/ckeditor5-typing" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-html-support" "47.5.0" + "@ckeditor/ckeditor5-list" "47.5.0" + "@ckeditor/ckeditor5-table" "47.5.0" + "@ckeditor/ckeditor5-typing" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-table@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-table/-/ckeditor5-table-47.4.0.tgz#079fca2e5d4739966b59c6b5e0d6df41c9d97e25" - integrity sha512-gWraeB14YnpR+ELySu3xgSFlfur07ZBPN76rQuiIobrecKwhh1Az8rk7Qo4c1K/q/f4pHmqh87nhSprn7Mo7+w== +"@ckeditor/ckeditor5-table@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-table/-/ckeditor5-table-47.5.0.tgz#b97f6eb3715144229b496b0663f7c7089b8001c0" + integrity sha512-aB4Sn9+DLuDHd5pn5d/QdSGQYzGBLJg2+zlzSddcxSeUS0gj7qtOhtce2ChY899D1pszbdQHXbM/Lnwgy1ZrCQ== dependencies: - "@ckeditor/ckeditor5-clipboard" "47.4.0" - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - "@ckeditor/ckeditor5-widget" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-clipboard" "47.5.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + "@ckeditor/ckeditor5-widget" "47.5.0" + ckeditor5 "47.5.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-theme-lark@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-47.4.0.tgz#1731c864b4fc46d7440b7c5bc6e136527f1c1da2" - integrity sha512-kdtwV5HJ+8/oNcsGM8sdpULhXr2TfM7gEKlH/EAdycLDa6topcJuTl7iVSEu4hZzwVo2agiEMmdUIf3dvWweow== +"@ckeditor/ckeditor5-theme-lark@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-47.5.0.tgz#8f34b0fe81cc845290d698f49ce40f938c20b144" + integrity sha512-vmQJyT6UnsmTF9rIWhYWWRGGpDhoxo9vd7aJ+m3b+gJqCLMziGadP6Dz3dezDQpbaW41Fk5CF61QPnMqaHuk7g== dependencies: - "@ckeditor/ckeditor5-ui" "47.4.0" + "@ckeditor/ckeditor5-ui" "47.5.0" -"@ckeditor/ckeditor5-typing@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.4.0.tgz#4135bb117f0e7c38d63d1ee7c98e02283ff00d5d" - integrity sha512-+YmCUTLVAryK5h68TgQ0qxDngs1MTCLKPDXxHzNqs0oXHai9YkJv/zg4zeb0/RQRIps7jh3bPapZoi2hP2iN3A== +"@ckeditor/ckeditor5-typing@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-47.5.0.tgz#6fee4243f88e869a7d561dc1b9b41b8b3429f03f" + integrity sha512-/MoO59Cl/XJ4f79ecc5BHBb0sEnZttMosXpm1wjhwRKE7PyEICt2t+Uqi0zp9txl21O2z+Gmjz716X5InMa/4w== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-ui@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.4.0.tgz#3a2c653dbf890abd04dfb42edeb5ef833e30a541" - integrity sha512-sL67wp2DX+P3zxeJLo2I7yLhBlX6Zhd0xfUAB6vX6SkjhMeC0L2gLOIr3kKq/OMKEuS+0iZ+qVvEN1j+2Flzlg== +"@ckeditor/ckeditor5-ui@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-47.5.0.tgz#5efa9d41038e270529a93f8cb465af729fe1465b" + integrity sha512-wn55rqImjQ44CPavijdc9+MGHZZJ9lS9++NEAmt95b45ywd9nAyJ4QcuXDZ6f+xjwfeTuLX7jhBSuz7w8FWcwA== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-editor-multi-root" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-editor-multi-root" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" "@types/color-convert" "2.0.4" color-convert "3.1.0" color-parse "2.0.2" es-toolkit "1.39.5" vanilla-colorful "0.7.2" -"@ckeditor/ckeditor5-undo@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-47.4.0.tgz#8d92e91efb8929206a83374119a6692490fee036" - integrity sha512-OnxpJb9glDwuSTl59Yb4+6bjWW5h4BA+94YhesKZXeIaXjyzwFmNGxM07nRyaX4KXwGVP5y5JZC2xv5bCOXKSQ== +"@ckeditor/ckeditor5-undo@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-47.5.0.tgz#8a9dbbb74b62e17895c832add712fa78bccd27bd" + integrity sha512-StiwvLrAlRqog1BSR8YZ5S6pdUdFB5BCPWPPJEAcMiBfRmG4pSzs+k3LIMgnyVoGwGBUcjdLVayqaESxe89Oeg== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" -"@ckeditor/ckeditor5-upload@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-47.4.0.tgz#b0b6c232945ffea4f21d136b499393b837e566e5" - integrity sha512-9gMfYltVNi5aYNs8IixTXww9kyU0+oEeY9pN8W6YLrhToVJdnN14pW3yNkQJKJPK7HS2RgM6L1Y+u50qu/IL2g== +"@ckeditor/ckeditor5-upload@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-47.5.0.tgz#6348083b0b301a64cc9cc49b9f2e8bdb8088aa1d" + integrity sha512-F1DPVYUGsb9P1/35vqPk7E+Y7wlubyb51DDR9irjUCAFyqQzolVQJ2bcsvrUXx+P8LT63sLCzH2do0pwMacGyQ== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" -"@ckeditor/ckeditor5-utils@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.4.0.tgz#27477eed00a0b6059c29727783a77f26d2cecad9" - integrity sha512-+5v1k3+8Yr0VUnO+3GfP7MsDCqt5KD9f9Z5wUVRig/J61hPTv8cUQp0859K87IuOLdAP/rZ1iQpdi1psanQeIQ== +"@ckeditor/ckeditor5-utils@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-47.5.0.tgz#a590672797cf2dcd7f62c70309c1206260894634" + integrity sha512-gkjlbVLjqkmZXo1lacY0kHRi9FTZjfJfL/OkF6WGauh0VLoDAIJHIv73PjqH6Sh7nF0Dx2p78NJ42W0t/KWxug== dependencies: - "@ckeditor/ckeditor5-ui" "47.4.0" + "@ckeditor/ckeditor5-ui" "47.5.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-watchdog@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-47.4.0.tgz#8ce4b3836032cf4635960dd6162e6bba46b5597c" - integrity sha512-MEfHIVYV4SILXi++G00y3wREm/1gT5dO+pTGpQY+NNYw8wgi32rg1q8hO2P/upsVaPzbeD3WLURyqeIxKwY20Q== +"@ckeditor/ckeditor5-watchdog@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-47.5.0.tgz#1b6ad7b68c2327cc936e38971902256846a20879" + integrity sha512-nmSnCvCvf9ChNS2C5YIdszSMeoGQRvd+CD4cDtLmkmaBqSuV/kePr5nGvqT8lMt5MrMtdqG/KmgE/xxmE4QIHg== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-editor-multi-root" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-editor-multi-root" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-widget@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-47.4.0.tgz#2d63a8faa2df59f1c12d0c31b772a097e1bda048" - integrity sha512-wffwrMQ6h+Hdu9IMG0H0QAf0YWWn+AGeJwPs69cRjRwB5pNOCUmMyM4h8MtNp15UEvGGARlhOjFf1TniMUkKrw== +"@ckeditor/ckeditor5-widget@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-47.5.0.tgz#a5c71a0f1c0f6284d161553c067576587361060c" + integrity sha512-o8wFSP5Dx2kR6t2XDzpdw1IZoqOrCXdJ51iZvClsUn6zQ+EosZonlmej8oA96ZsRK/nw9GOSt2cM0Snzv3zDtQ== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-enter" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-typing" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-enter" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-typing" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" es-toolkit "1.39.5" -"@ckeditor/ckeditor5-word-count@47.4.0": - version "47.4.0" - resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-47.4.0.tgz#4fb9a5a23c347bbf56c9baccab6951d7e3d1b95c" - integrity sha512-JeiwHJyBdlUCdzfW3K2KoGO/QhDe1qOKNPXiVXzExIyZpww+hm5HjV/zi5gX4xAvWg9ew0UaQRco5Dy7mBBfRQ== +"@ckeditor/ckeditor5-word-count@47.5.0": + version "47.5.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-47.5.0.tgz#839000c7f28a0b116f47394dc65e7784be1a4eb7" + integrity sha512-zsATU4eI7iFWC+3axpj9JG7Gm6IRzDzjW8fQqYho0xMc3hN71XxgIbPZR7jLpwNo29WirCsNxAfqi4Q2Ws8c6w== dependencies: - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - ckeditor5 "47.4.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + ckeditor5 "47.5.0" es-toolkit "1.39.5" "@csstools/selector-resolve-nested@^3.1.0": @@ -1830,9 +1833,9 @@ tslib "^2.8.0" "@fortawesome/fontawesome-free@^7.0.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-7.1.0.tgz#8eb76278515341720aa74485266f8be121089529" - integrity sha512-+WxNld5ZCJHvPQCr/GnzCTVREyStrAJjisUPtUxG5ngDA8TMlPnKp6dddlTpai4+1GNmltAeuk1hJEkBohwZYA== + version "7.2.0" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-7.2.0.tgz#188c1053ce422ad1f934d7df242a973fcb89636d" + integrity sha512-3DguDv/oUE+7vjMeTSOjCSG+KeawgVQOHrKRnvUuqYh1mfArrh7s+s8hXW3e4RerBA1+Wh+hBqf8sJNpqNrBWg== "@gar/promisify@^1.0.1": version "1.1.3" @@ -1854,17 +1857,10 @@ resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-8.0.23.tgz#a6eebc9ab4a5faadae265a4cbec8cfcb5731e77c" integrity sha512-GZ7cijxEZ6Ig71u7rD6LHaRv/wcE/hNsc+nEfiWOkLNqUgLOwo5MNGWOy5ZV9ZUDSiQx1no7YxjTNnT4O6//cQ== -"@isaacs/balanced-match@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29" - integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ== - -"@isaacs/brace-expansion@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz#0ef5a92d91f2fff2a37646ce54da9e5f599f6eff" - integrity sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ== - dependencies: - "@isaacs/balanced-match" "^4.0.1" +"@isaacs/cliui@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-9.0.0.tgz#4d0a3f127058043bf2e7ee169eaf30ed901302f3" + integrity sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg== "@jbtronics/bs-treeview@^1.0.1": version "1.0.6" @@ -2169,9 +2165,9 @@ integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/node@*": - version "25.2.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-25.2.1.tgz#378021f9e765bb65ba36de16f3c3a8622c1fa03d" - integrity sha512-CPrnr8voK8vC6eEtyRzvMpgp3VyVRhgclonE7qYi6P9sXwYb59ucfrnmFBTaP0yUi8Gk4yZg/LlTJULGxvTNsg== + version "25.2.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.2.3.tgz#9c18245be768bdb4ce631566c7da303a5c99a7f8" + integrity sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ== dependencies: undici-types "~7.16.0" @@ -2453,9 +2449,9 @@ ajv@^6.12.5: uri-js "^4.2.2" ajv@^8.0.0, ajv@^8.9.0: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" - integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + version "8.18.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.18.0.tgz#8864186b6738d003eb3a933172bb3833e10cefbc" + integrity sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A== dependencies: fast-deep-equal "^3.1.3" fast-uri "^3.0.1" @@ -2609,6 +2605,13 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +balanced-match@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.2.tgz#241591ea634702bef9c482696f2469406e16d233" + integrity sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg== + dependencies: + jackspeak "^4.2.3" + barcode-detector@^3.0.0, barcode-detector@^3.0.5: version "3.0.8" resolved "https://registry.yarnpkg.com/barcode-detector/-/barcode-detector-3.0.8.tgz#09a3363cb24699d1d6389a291383113c44420324" @@ -2674,6 +2677,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.2.tgz#b6c16d0791087af6c2bc463f52a8142046c06b6f" + integrity sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw== + dependencies: + balanced-match "^4.0.2" + braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" @@ -2869,72 +2879,72 @@ ci-info@^4.2.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.4.0.tgz#7d54eff9f54b45b62401c26032696eb59c8bd18c" integrity sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg== -ckeditor5@47.4.0, ckeditor5@^47.0.0: - version "47.4.0" - resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-47.4.0.tgz#eb7879a23e780c356a2a48d477663d857494721a" - integrity sha512-6RTRV2w6nhmBSLBnA0O9QzcBC/Cf74ogziaKHOK61H+PcM6aP3ltb/fNScGyy3NVw3+OzaxjbPF7NSykVmmMMw== +ckeditor5@47.5.0, ckeditor5@^47.0.0: + version "47.5.0" + resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-47.5.0.tgz#f40b2eef70fe768f9e23438bc6d32ac7362199b2" + integrity sha512-Ow4eLxOxXoaIeuugBh4fCidLuu3zICInWO6ugB0+nZRGn9dfz9ENfdk6UlShyV2B0C5Ocu2n6Fm6I5hlByC/qA== dependencies: - "@ckeditor/ckeditor5-adapter-ckfinder" "47.4.0" - "@ckeditor/ckeditor5-alignment" "47.4.0" - "@ckeditor/ckeditor5-autoformat" "47.4.0" - "@ckeditor/ckeditor5-autosave" "47.4.0" - "@ckeditor/ckeditor5-basic-styles" "47.4.0" - "@ckeditor/ckeditor5-block-quote" "47.4.0" - "@ckeditor/ckeditor5-bookmark" "47.4.0" - "@ckeditor/ckeditor5-ckbox" "47.4.0" - "@ckeditor/ckeditor5-ckfinder" "47.4.0" - "@ckeditor/ckeditor5-clipboard" "47.4.0" - "@ckeditor/ckeditor5-cloud-services" "47.4.0" - "@ckeditor/ckeditor5-code-block" "47.4.0" - "@ckeditor/ckeditor5-core" "47.4.0" - "@ckeditor/ckeditor5-easy-image" "47.4.0" - "@ckeditor/ckeditor5-editor-balloon" "47.4.0" - "@ckeditor/ckeditor5-editor-classic" "47.4.0" - "@ckeditor/ckeditor5-editor-decoupled" "47.4.0" - "@ckeditor/ckeditor5-editor-inline" "47.4.0" - "@ckeditor/ckeditor5-editor-multi-root" "47.4.0" - "@ckeditor/ckeditor5-emoji" "47.4.0" - "@ckeditor/ckeditor5-engine" "47.4.0" - "@ckeditor/ckeditor5-enter" "47.4.0" - "@ckeditor/ckeditor5-essentials" "47.4.0" - "@ckeditor/ckeditor5-find-and-replace" "47.4.0" - "@ckeditor/ckeditor5-font" "47.4.0" - "@ckeditor/ckeditor5-fullscreen" "47.4.0" - "@ckeditor/ckeditor5-heading" "47.4.0" - "@ckeditor/ckeditor5-highlight" "47.4.0" - "@ckeditor/ckeditor5-horizontal-line" "47.4.0" - "@ckeditor/ckeditor5-html-embed" "47.4.0" - "@ckeditor/ckeditor5-html-support" "47.4.0" - "@ckeditor/ckeditor5-icons" "47.4.0" - "@ckeditor/ckeditor5-image" "47.4.0" - "@ckeditor/ckeditor5-indent" "47.4.0" - "@ckeditor/ckeditor5-language" "47.4.0" - "@ckeditor/ckeditor5-link" "47.4.0" - "@ckeditor/ckeditor5-list" "47.4.0" - "@ckeditor/ckeditor5-markdown-gfm" "47.4.0" - "@ckeditor/ckeditor5-media-embed" "47.4.0" - "@ckeditor/ckeditor5-mention" "47.4.0" - "@ckeditor/ckeditor5-minimap" "47.4.0" - "@ckeditor/ckeditor5-page-break" "47.4.0" - "@ckeditor/ckeditor5-paragraph" "47.4.0" - "@ckeditor/ckeditor5-paste-from-office" "47.4.0" - "@ckeditor/ckeditor5-remove-format" "47.4.0" - "@ckeditor/ckeditor5-restricted-editing" "47.4.0" - "@ckeditor/ckeditor5-select-all" "47.4.0" - "@ckeditor/ckeditor5-show-blocks" "47.4.0" - "@ckeditor/ckeditor5-source-editing" "47.4.0" - "@ckeditor/ckeditor5-special-characters" "47.4.0" - "@ckeditor/ckeditor5-style" "47.4.0" - "@ckeditor/ckeditor5-table" "47.4.0" - "@ckeditor/ckeditor5-theme-lark" "47.4.0" - "@ckeditor/ckeditor5-typing" "47.4.0" - "@ckeditor/ckeditor5-ui" "47.4.0" - "@ckeditor/ckeditor5-undo" "47.4.0" - "@ckeditor/ckeditor5-upload" "47.4.0" - "@ckeditor/ckeditor5-utils" "47.4.0" - "@ckeditor/ckeditor5-watchdog" "47.4.0" - "@ckeditor/ckeditor5-widget" "47.4.0" - "@ckeditor/ckeditor5-word-count" "47.4.0" + "@ckeditor/ckeditor5-adapter-ckfinder" "47.5.0" + "@ckeditor/ckeditor5-alignment" "47.5.0" + "@ckeditor/ckeditor5-autoformat" "47.5.0" + "@ckeditor/ckeditor5-autosave" "47.5.0" + "@ckeditor/ckeditor5-basic-styles" "47.5.0" + "@ckeditor/ckeditor5-block-quote" "47.5.0" + "@ckeditor/ckeditor5-bookmark" "47.5.0" + "@ckeditor/ckeditor5-ckbox" "47.5.0" + "@ckeditor/ckeditor5-ckfinder" "47.5.0" + "@ckeditor/ckeditor5-clipboard" "47.5.0" + "@ckeditor/ckeditor5-cloud-services" "47.5.0" + "@ckeditor/ckeditor5-code-block" "47.5.0" + "@ckeditor/ckeditor5-core" "47.5.0" + "@ckeditor/ckeditor5-easy-image" "47.5.0" + "@ckeditor/ckeditor5-editor-balloon" "47.5.0" + "@ckeditor/ckeditor5-editor-classic" "47.5.0" + "@ckeditor/ckeditor5-editor-decoupled" "47.5.0" + "@ckeditor/ckeditor5-editor-inline" "47.5.0" + "@ckeditor/ckeditor5-editor-multi-root" "47.5.0" + "@ckeditor/ckeditor5-emoji" "47.5.0" + "@ckeditor/ckeditor5-engine" "47.5.0" + "@ckeditor/ckeditor5-enter" "47.5.0" + "@ckeditor/ckeditor5-essentials" "47.5.0" + "@ckeditor/ckeditor5-find-and-replace" "47.5.0" + "@ckeditor/ckeditor5-font" "47.5.0" + "@ckeditor/ckeditor5-fullscreen" "47.5.0" + "@ckeditor/ckeditor5-heading" "47.5.0" + "@ckeditor/ckeditor5-highlight" "47.5.0" + "@ckeditor/ckeditor5-horizontal-line" "47.5.0" + "@ckeditor/ckeditor5-html-embed" "47.5.0" + "@ckeditor/ckeditor5-html-support" "47.5.0" + "@ckeditor/ckeditor5-icons" "47.5.0" + "@ckeditor/ckeditor5-image" "47.5.0" + "@ckeditor/ckeditor5-indent" "47.5.0" + "@ckeditor/ckeditor5-language" "47.5.0" + "@ckeditor/ckeditor5-link" "47.5.0" + "@ckeditor/ckeditor5-list" "47.5.0" + "@ckeditor/ckeditor5-markdown-gfm" "47.5.0" + "@ckeditor/ckeditor5-media-embed" "47.5.0" + "@ckeditor/ckeditor5-mention" "47.5.0" + "@ckeditor/ckeditor5-minimap" "47.5.0" + "@ckeditor/ckeditor5-page-break" "47.5.0" + "@ckeditor/ckeditor5-paragraph" "47.5.0" + "@ckeditor/ckeditor5-paste-from-office" "47.5.0" + "@ckeditor/ckeditor5-remove-format" "47.5.0" + "@ckeditor/ckeditor5-restricted-editing" "47.5.0" + "@ckeditor/ckeditor5-select-all" "47.5.0" + "@ckeditor/ckeditor5-show-blocks" "47.5.0" + "@ckeditor/ckeditor5-source-editing" "47.5.0" + "@ckeditor/ckeditor5-special-characters" "47.5.0" + "@ckeditor/ckeditor5-style" "47.5.0" + "@ckeditor/ckeditor5-table" "47.5.0" + "@ckeditor/ckeditor5-theme-lark" "47.5.0" + "@ckeditor/ckeditor5-typing" "47.5.0" + "@ckeditor/ckeditor5-ui" "47.5.0" + "@ckeditor/ckeditor5-undo" "47.5.0" + "@ckeditor/ckeditor5-upload" "47.5.0" + "@ckeditor/ckeditor5-utils" "47.5.0" + "@ckeditor/ckeditor5-watchdog" "47.5.0" + "@ckeditor/ckeditor5-widget" "47.5.0" + "@ckeditor/ckeditor5-word-count" "47.5.0" clean-stack@^2.0.0: version "2.2.0" @@ -3421,18 +3431,18 @@ datatables.net-colreorder@2.1.2: jquery ">=1.7" datatables.net-fixedheader-bs5@^4.0.0: - version "4.0.5" - resolved "https://registry.yarnpkg.com/datatables.net-fixedheader-bs5/-/datatables.net-fixedheader-bs5-4.0.5.tgz#84f405e7351ac719022db6f97c5027b5bce5143a" - integrity sha512-R0m4Mntda7wfRCpyjGS2RWFw2861X8e4trn6SnBHID2htuMPPdk11bK4RVJMipgFDxdMfJbvEMH5Hkx5XKrNuA== + version "4.0.6" + resolved "https://registry.yarnpkg.com/datatables.net-fixedheader-bs5/-/datatables.net-fixedheader-bs5-4.0.6.tgz#25bc9d2d5f9ded665ea4915b26a433f74e3c2979" + integrity sha512-V5KhTssDq2osUG8aXur5wf8j6tXE9kSP/34C5k0DKIFkHjvZiK1yWPyadP6/T9JJRKWuJppPaLiJ1PzB+nlwPw== dependencies: datatables.net-bs5 "^2" - datatables.net-fixedheader "4.0.5" + datatables.net-fixedheader "4.0.6" jquery ">=1.7" -datatables.net-fixedheader@4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/datatables.net-fixedheader/-/datatables.net-fixedheader-4.0.5.tgz#075fff97f47efac9f3ba72d34f8f0ea67470f165" - integrity sha512-cobQhOhjzqIYXTvMRrHUulULS8Re+hd2mmgFiOGKcZwHV0mofIwBlgiU3Ol4LHikHUCvsGnTEXoI+C7Ozma5sA== +datatables.net-fixedheader@4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/datatables.net-fixedheader/-/datatables.net-fixedheader-4.0.6.tgz#0c361a8a90542d75402f897db401085433efcebe" + integrity sha512-icYg/qKDpqGDrAVRWfsjt0xQdngk48R7LWkS9t8kaZFp9c4xrLFcmmPtRLgPp5/S4JHZbbsxmVkF16kscjNZjg== dependencies: datatables.net "^2" jquery ">=1.7" @@ -4833,6 +4843,13 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== +jackspeak@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.2.3.tgz#27ef80f33b93412037c3bea4f8eddf80e1931483" + integrity sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg== + dependencies: + "@isaacs/cliui" "^9.0.0" + javascript-stringify@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3" @@ -5102,9 +5119,9 @@ marked-mangle@^1.0.1: integrity sha512-bRrqNcfU9v3iRECb7YPvA+/xKZMjHojd9R92YwHbFjdPQ+Wc7vozkbGKAv4U8AUl798mNUuY3DTBQkedsV3TeQ== marked@^17.0.1: - version "17.0.1" - resolved "https://registry.yarnpkg.com/marked/-/marked-17.0.1.tgz#9db34197ac145e5929572ee49ef701e37ee9b2e6" - integrity sha512-boeBdiS0ghpWcSwoNm/jJBwdpFaMnZWRzjA6SkUMYb40SVaN1x7mmfGKp0jvexGcx+7y2La5zRZsYFZI6Qpypg== + version "17.0.2" + resolved "https://registry.yarnpkg.com/marked/-/marked-17.0.2.tgz#a103f82bed9653dd1d74c15f74107c84ddbe749d" + integrity sha512-s5HZGFQea7Huv5zZcAGhJLT3qLpAfnY7v7GWkICUr0+Wd5TFEtdlRR2XUL5Gg+RH7u2Df595ifrxR03mBaw7gA== math-intrinsics@^1.1.0: version "1.1.0" @@ -5589,11 +5606,11 @@ mini-css-extract-plugin@^2.4.2, mini-css-extract-plugin@^2.6.0: tapable "^2.2.1" minimatch@*: - version "10.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.1.2.tgz#6c3f289f9de66d628fa3feb1842804396a43d81c" - integrity sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw== + version "10.2.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.0.tgz#e710473e66e3e1aaf376d0aa82438375cac86e9e" + integrity sha512-ugkC31VaVg9cF0DFVoADH12k6061zNZkZON+aX8AWsR9GhPcErkcMBceb6znR8wLERM2AkkOxy2nWRLpT9Jq5w== dependencies: - "@isaacs/brace-expansion" "^5.0.1" + brace-expansion "^5.0.2" minimatch@3.0.4: version "3.0.4" @@ -7455,9 +7472,9 @@ to-regex-range@^5.0.1: is-number "^7.0.0" tom-select@^2.1.0: - version "2.4.6" - resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.4.6.tgz#23acdfc09ee235eb752706d418c9c9ae6ccf67f0" - integrity sha512-Hhqi15AiTl0+FjaHVTXvUkF3t7x4W5LXUHxLYlzp7r8bcIgGJyz9M+3ZvrHdTRvEmV4EmNyJPbHJJnZOjr5Iig== + version "2.5.1" + resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.5.1.tgz#8c8d3f11e5c1780b5f26c9e90f4e650842ff9596" + integrity sha512-63D5/Qf6bb6kLSgksEuas/60oawDcuUHrD90jZofeOpF6bkQFYriKrvtpJBQQ4xIA5dUGcjhBbk/yrlfOQsy3g== dependencies: "@orchidjs/sifter" "^1.1.0" "@orchidjs/unicode-variants" "^1.1.2" @@ -7499,9 +7516,9 @@ tslib@^2.8.0: integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== type-fest@^5.2.0: - version "5.4.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-5.4.3.tgz#b4c7e028da129098911ee2162a0c30df8a1be904" - integrity sha512-AXSAQJu79WGc79/3e9/CR77I/KQgeY1AhNvcShIH4PTcGYyC4xv6H4R4AUOwkPS5799KlVDAu8zExeCrkGquiA== + version "5.4.4" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-5.4.4.tgz#577f165b5ecb44cfc686559cc54ca77f62aa374d" + integrity sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw== dependencies: tagged-tag "^1.0.0" @@ -7843,9 +7860,9 @@ webpack-sources@^3.3.3: integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== webpack@^5.74.0: - version "5.105.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.0.tgz#38b5e6c5db8cbe81debbd16e089335ada05ea23a" - integrity sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw== + version "5.105.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.2.tgz#f3b76f9fc36f1152e156e63ffda3bbb82e6739ea" + integrity sha512-dRXm0a2qcHPUBEzVk8uph0xWSjV/xZxenQQbLwnwP7caQCYpqG1qddwlyEkIDkYn0K8tvmcrZ+bOrzoQ3HxCDw== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.8" From df0ac76394c4a95cb26ed970ff0571340acd1c03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 14 Feb 2026 22:24:36 +0100 Subject: [PATCH 114/172] Updated composer dependencies that required major version changes --- composer.json | 8 ++-- composer.lock | 95 ++++++++++++++++++++++---------------------- config/reference.php | 25 ------------ 3 files changed, 51 insertions(+), 77 deletions(-) diff --git a/composer.json b/composer.json index dd12097c..ea7ce627 100644 --- a/composer.json +++ b/composer.json @@ -17,7 +17,7 @@ "api-platform/json-api": "^4.0.0", "api-platform/symfony": "^4.0.0", "beberlei/doctrineextensions": "^1.2", - "brick/math": "^0.13.1", + "brick/math": "^0.14.8", "brick/schema": "^0.2.0", "composer/ca-bundle": "^1.5", "composer/package-versions-deprecated": "^1.11.99.5", @@ -28,7 +28,7 @@ "doctrine/orm": "^3.2.0", "dompdf/dompdf": "^3.1.2", "gregwar/captcha-bundle": "^2.1.0", - "hshn/base64-encoded-file": "^5.0", + "hshn/base64-encoded-file": "^6.0", "jbtronics/2fa-webauthn": "^3.0.0", "jbtronics/dompdf-font-loader-bundle": "^1.0.0", "jbtronics/settings-bundle": "^3.0.0", @@ -70,7 +70,7 @@ "symfony/http-client": "7.4.*", "symfony/http-kernel": "7.4.*", "symfony/mailer": "7.4.*", - "symfony/monolog-bundle": "^3.1", + "symfony/monolog-bundle": "^4.0", "symfony/process": "7.4.*", "symfony/property-access": "7.4.*", "symfony/property-info": "7.4.*", @@ -88,7 +88,7 @@ "symfony/web-link": "7.4.*", "symfony/webpack-encore-bundle": "^v2.0.1", "symfony/yaml": "7.4.*", - "symplify/easy-coding-standard": "^12.5.20", + "symplify/easy-coding-standard": "^13.0", "tecnickcom/tc-lib-barcode": "^2.1.4", "tiendanube/gtinvalidation": "^1.0", "twig/cssinliner-extra": "^3.0", diff --git a/composer.lock b/composer.lock index 4806ee9c..5840c670 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b47c8579efa64349c5e65296e2a44206", + "content-hash": "f130cbf9b9906fed8da1a71b75a995a0", "packages": [ { "name": "amphp/amp", @@ -2329,25 +2329,25 @@ }, { "name": "brick/math", - "version": "0.13.1", + "version": "0.14.8", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04" + "reference": "63422359a44b7f06cae63c3b429b59e8efcc0629" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/fc7ed316430118cc7836bf45faff18d5dfc8de04", - "reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04", + "url": "https://api.github.com/repos/brick/math/zipball/63422359a44b7f06cae63c3b429b59e8efcc0629", + "reference": "63422359a44b7f06cae63c3b429b59e8efcc0629", "shasum": "" }, "require": { - "php": "^8.1" + "php": "^8.2" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^10.1", - "vimeo/psalm": "6.8.8" + "phpstan/phpstan": "2.1.22", + "phpunit/phpunit": "^11.5" }, "type": "library", "autoload": { @@ -2377,7 +2377,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.13.1" + "source": "https://github.com/brick/math/tree/0.14.8" }, "funding": [ { @@ -2385,7 +2385,7 @@ "type": "github" } ], - "time": "2025-03-29T13:50:30+00:00" + "time": "2026-02-10T14:33:43+00:00" }, { "name": "brick/schema", @@ -4869,30 +4869,30 @@ }, { "name": "hshn/base64-encoded-file", - "version": "v5.0.3", + "version": "v6.0.0", "source": { "type": "git", "url": "https://github.com/hshn/base64-encoded-file.git", - "reference": "74984c7e69fbed9378dbf1d64e632522cc1b6d95" + "reference": "f379875f5582ebcda20111bb68d6a3268dddf345" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hshn/base64-encoded-file/zipball/74984c7e69fbed9378dbf1d64e632522cc1b6d95", - "reference": "74984c7e69fbed9378dbf1d64e632522cc1b6d95", + "url": "https://api.github.com/repos/hshn/base64-encoded-file/zipball/f379875f5582ebcda20111bb68d6a3268dddf345", + "reference": "f379875f5582ebcda20111bb68d6a3268dddf345", "shasum": "" }, "require": { "php": "^8.1.0", - "symfony/http-foundation": "^5.4 || ^6.0 || ^7.0", - "symfony/mime": "^5.4 || ^6.0 || ^7.0" + "symfony/http-foundation": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/mime": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "require-dev": { "phpunit/phpunit": "^9.0.0", - "symfony/config": "^5.4 || ^6.0 || ^7.0", - "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", - "symfony/form": "^5.4 || ^6.0 || ^7.0", - "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0", - "symfony/serializer": "^5.4 || ^6.0 || ^7.0" + "symfony/config": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/form": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/serializer": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "suggest": { "symfony/config": "to use the bundle in a Symfony project", @@ -4904,7 +4904,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.x-dev" + "dev-master": "6.x-dev" } }, "autoload": { @@ -4925,9 +4925,9 @@ "description": "Provides handling base64 encoded files, and the integration of symfony/form", "support": { "issues": "https://github.com/hshn/base64-encoded-file/issues", - "source": "https://github.com/hshn/base64-encoded-file/tree/v5.0.3" + "source": "https://github.com/hshn/base64-encoded-file/tree/v6.0.0" }, - "time": "2025-10-06T10:34:52+00:00" + "time": "2025-12-05T15:24:18+00:00" }, { "name": "imagine/imagine", @@ -12890,33 +12890,32 @@ }, { "name": "symfony/monolog-bundle", - "version": "v3.11.1", + "version": "v4.0.1", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bundle.git", - "reference": "0e675a6e08f791ef960dc9c7e392787111a3f0c1" + "reference": "3b4ee2717ee56c5e1edb516140a175eb2a72bc66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/0e675a6e08f791ef960dc9c7e392787111a3f0c1", - "reference": "0e675a6e08f791ef960dc9c7e392787111a3f0c1", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/3b4ee2717ee56c5e1edb516140a175eb2a72bc66", + "reference": "3b4ee2717ee56c5e1edb516140a175eb2a72bc66", "shasum": "" }, "require": { "composer-runtime-api": "^2.0", - "monolog/monolog": "^1.25.1 || ^2.0 || ^3.0", - "php": ">=8.1", - "symfony/config": "^6.4 || ^7.0", - "symfony/dependency-injection": "^6.4 || ^7.0", - "symfony/deprecation-contracts": "^2.5 || ^3.0", - "symfony/http-kernel": "^6.4 || ^7.0", - "symfony/monolog-bridge": "^6.4 || ^7.0", + "monolog/monolog": "^3.5", + "php": ">=8.2", + "symfony/config": "^7.3 || ^8.0", + "symfony/dependency-injection": "^7.3 || ^8.0", + "symfony/http-kernel": "^7.3 || ^8.0", + "symfony/monolog-bridge": "^7.3 || ^8.0", "symfony/polyfill-php84": "^1.30" }, "require-dev": { - "symfony/console": "^6.4 || ^7.0", - "symfony/phpunit-bridge": "^7.3.3", - "symfony/yaml": "^6.4 || ^7.0" + "phpunit/phpunit": "^11.5.41 || ^12.3", + "symfony/console": "^7.3 || ^8.0", + "symfony/yaml": "^7.3 || ^8.0" }, "type": "symfony-bundle", "autoload": { @@ -12946,7 +12945,7 @@ ], "support": { "issues": "https://github.com/symfony/monolog-bundle/issues", - "source": "https://github.com/symfony/monolog-bundle/tree/v3.11.1" + "source": "https://github.com/symfony/monolog-bundle/tree/v4.0.1" }, "funding": [ { @@ -12966,7 +12965,7 @@ "type": "tidelift" } ], - "time": "2025-12-08T07:58:26+00:00" + "time": "2025-12-08T08:00:13+00:00" }, { "name": "symfony/options-resolver", @@ -16463,24 +16462,24 @@ }, { "name": "symplify/easy-coding-standard", - "version": "12.6.2", + "version": "13.0.4", "source": { "type": "git", "url": "https://github.com/easy-coding-standard/easy-coding-standard.git", - "reference": "7a6798aa424f0ecafb1542b6f5207c5a99704d3d" + "reference": "5c7e7a07e5d6a98b9dd2e6fc0a9155efb7c166c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/7a6798aa424f0ecafb1542b6f5207c5a99704d3d", - "reference": "7a6798aa424f0ecafb1542b6f5207c5a99704d3d", + "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/5c7e7a07e5d6a98b9dd2e6fc0a9155efb7c166c8", + "reference": "5c7e7a07e5d6a98b9dd2e6fc0a9155efb7c166c8", "shasum": "" }, "require": { "php": ">=7.2" }, "conflict": { - "friendsofphp/php-cs-fixer": "<3.46", - "phpcsstandards/php_codesniffer": "<3.8", + "friendsofphp/php-cs-fixer": "<3.92.4", + "phpcsstandards/php_codesniffer": "<4.0.1", "symplify/coding-standard": "<12.1" }, "suggest": { @@ -16508,7 +16507,7 @@ ], "support": { "issues": "https://github.com/easy-coding-standard/easy-coding-standard/issues", - "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.6.2" + "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/13.0.4" }, "funding": [ { @@ -16520,7 +16519,7 @@ "type": "github" } ], - "time": "2025-10-29T08:51:50+00:00" + "time": "2026-01-05T09:10:04+00:00" }, { "name": "tecnickcom/tc-lib-barcode", diff --git a/config/reference.php b/config/reference.php index a1a077aa..978a82f9 100644 --- a/config/reference.php +++ b/config/reference.php @@ -1387,7 +1387,6 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * bubble?: bool|Param, // Default: true * interactive_only?: bool|Param, // Default: false * app_name?: scalar|Param|null, // Default: null - * fill_extra_context?: bool|Param, // Default: false * include_stacktraces?: bool|Param, // Default: false * process_psr_3_messages?: array{ * enabled?: bool|Param|null, // Default: null @@ -1407,7 +1406,6 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * activation_strategy?: scalar|Param|null, // Default: null * stop_buffering?: bool|Param, // Default: true * passthru_level?: scalar|Param|null, // Default: null - * excluded_404s?: list, * excluded_http_codes?: list, @@ -1421,9 +1419,6 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * url?: scalar|Param|null, * exchange?: scalar|Param|null, * exchange_name?: scalar|Param|null, // Default: "log" - * room?: scalar|Param|null, - * message_format?: scalar|Param|null, // Default: "text" - * api_version?: scalar|Param|null, // Default: null * channel?: scalar|Param|null, // Default: null * bot_name?: scalar|Param|null, // Default: "Monolog" * use_attachment?: scalar|Param|null, // Default: true @@ -1432,9 +1427,6 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * icon_emoji?: scalar|Param|null, // Default: null * webhook_url?: scalar|Param|null, * exclude_fields?: list, - * team?: scalar|Param|null, - * notify?: scalar|Param|null, // Default: false - * nickname?: scalar|Param|null, // Default: "Monolog" * token?: scalar|Param|null, * region?: scalar|Param|null, * source?: scalar|Param|null, @@ -1452,12 +1444,6 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * store?: scalar|Param|null, // Default: null * connection_timeout?: scalar|Param|null, * persistent?: bool|Param, - * dsn?: scalar|Param|null, - * hub_id?: scalar|Param|null, // Default: null - * client_id?: scalar|Param|null, // Default: null - * auto_log_stacks?: scalar|Param|null, // Default: false - * release?: scalar|Param|null, // Default: null - * environment?: scalar|Param|null, // Default: null * message_type?: scalar|Param|null, // Default: 0 * parse_mode?: scalar|Param|null, // Default: null * disable_webpage_preview?: bool|Param|null, // Default: null @@ -1467,7 +1453,6 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * topic?: int|Param, // Default: null * factor?: int|Param, // Default: 1 * tags?: list, - * console_formater_options?: mixed, // Deprecated: "monolog.handlers..console_formater_options.console_formater_options" is deprecated, use "monolog.handlers..console_formater_options.console_formatter_options" instead. * console_formatter_options?: mixed, // Default: [] * formatter?: scalar|Param|null, * nested?: bool|Param, // Default: false @@ -1478,15 +1463,6 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * chunk_size?: scalar|Param|null, // Default: 1420 * encoder?: "json"|"compressed_json"|Param, * }, - * mongo?: string|array{ - * id?: scalar|Param|null, - * host?: scalar|Param|null, - * port?: scalar|Param|null, // Default: 27017 - * user?: scalar|Param|null, - * pass?: scalar|Param|null, - * database?: scalar|Param|null, // Default: "monolog" - * collection?: scalar|Param|null, // Default: "logs" - * }, * mongodb?: string|array{ * id?: scalar|Param|null, // ID of a MongoDB\Client service * uri?: scalar|Param|null, @@ -1529,7 +1505,6 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param; * id: scalar|Param|null, * method?: scalar|Param|null, // Default: null * }, - * lazy?: bool|Param, // Default: true * verbosity_levels?: array{ * VERBOSITY_QUIET?: scalar|Param|null, // Default: "ERROR" * VERBOSITY_NORMAL?: scalar|Param|null, // Default: "WARNING" From bc9a93d71fa378e98168c93f6112b8bc7abbc0b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 14 Feb 2026 22:31:53 +0100 Subject: [PATCH 115/172] Removed sodium compat, as all supported PHP versions support it natively nowadays --- composer.json | 3 +- composer.lock | 138 +------------------------------------------------- 2 files changed, 2 insertions(+), 139 deletions(-) diff --git a/composer.json b/composer.json index ea7ce627..89e0f19b 100644 --- a/composer.json +++ b/composer.json @@ -45,7 +45,6 @@ "nelmio/security-bundle": "^3.0", "nyholm/psr7": "^1.1", "omines/datatables-bundle": "^0.10.0", - "paragonie/sodium_compat": "^1.21", "part-db/label-fonts": "^1.0", "part-db/swap-bundle": "^6.0.0", "phpoffice/phpspreadsheet": "^5.0.0", @@ -129,7 +128,7 @@ }, "suggest": { "ext-bcmath": "Used to improve price calculation performance", - "ext-gmp": "Used to improve price calculation performanice" + "ext-gmp": "Used to improve price calculation performance" }, "config": { "preferred-install": { diff --git a/composer.lock b/composer.lock index 5840c670..16f32d31 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f130cbf9b9906fed8da1a71b75a995a0", + "content-hash": "32c5677a31185e0ed124904012500154", "packages": [ { "name": "amphp/amp", @@ -7783,142 +7783,6 @@ }, "time": "2025-09-24T15:06:41+00:00" }, - { - "name": "paragonie/random_compat", - "version": "v9.99.100", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", - "shasum": "" - }, - "require": { - "php": ">= 7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/random_compat/issues", - "source": "https://github.com/paragonie/random_compat" - }, - "time": "2020-10-15T08:29:30+00:00" - }, - { - "name": "paragonie/sodium_compat", - "version": "v1.24.0", - "source": { - "type": "git", - "url": "https://github.com/paragonie/sodium_compat.git", - "reference": "2cb48f26130919f92f30650bdcc30e6f4ebe45ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/2cb48f26130919f92f30650bdcc30e6f4ebe45ac", - "reference": "2cb48f26130919f92f30650bdcc30e6f4ebe45ac", - "shasum": "" - }, - "require": { - "paragonie/random_compat": ">=1", - "php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7|^8" - }, - "require-dev": { - "phpunit/phpunit": "^3|^4|^5|^6|^7|^8|^9" - }, - "suggest": { - "ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.", - "ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security." - }, - "type": "library", - "autoload": { - "files": [ - "autoload.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com" - }, - { - "name": "Frank Denis", - "email": "jedisct1@pureftpd.org" - } - ], - "description": "Pure PHP implementation of libsodium; uses the PHP extension if it exists", - "keywords": [ - "Authentication", - "BLAKE2b", - "ChaCha20", - "ChaCha20-Poly1305", - "Chapoly", - "Curve25519", - "Ed25519", - "EdDSA", - "Edwards-curve Digital Signature Algorithm", - "Elliptic Curve Diffie-Hellman", - "Poly1305", - "Pure-PHP cryptography", - "RFC 7748", - "RFC 8032", - "Salpoly", - "Salsa20", - "X25519", - "XChaCha20-Poly1305", - "XSalsa20-Poly1305", - "Xchacha20", - "Xsalsa20", - "aead", - "cryptography", - "ecdh", - "elliptic curve", - "elliptic curve cryptography", - "encryption", - "libsodium", - "php", - "public-key cryptography", - "secret-key cryptography", - "side-channel resistant" - ], - "support": { - "issues": "https://github.com/paragonie/sodium_compat/issues", - "source": "https://github.com/paragonie/sodium_compat/tree/v1.24.0" - }, - "time": "2025-12-30T16:16:35+00:00" - }, { "name": "part-db/exchanger", "version": "v3.1.0", From 43d72faf482a6f52c8df86de84f5bfe835f958ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 14 Feb 2026 22:46:46 +0100 Subject: [PATCH 116/172] Updated label fonts --- composer.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/composer.lock b/composer.lock index 16f32d31..6566ebbc 100644 --- a/composer.lock +++ b/composer.lock @@ -7862,16 +7862,16 @@ }, { "name": "part-db/label-fonts", - "version": "v1.2.0", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/Part-DB/label-fonts.git", - "reference": "c85aeb051d6492961a2c59bc291979f15ce60e88" + "reference": "f93cbc8885c96792ab86f42d76e58cf8825975d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Part-DB/label-fonts/zipball/c85aeb051d6492961a2c59bc291979f15ce60e88", - "reference": "c85aeb051d6492961a2c59bc291979f15ce60e88", + "url": "https://api.github.com/repos/Part-DB/label-fonts/zipball/f93cbc8885c96792ab86f42d76e58cf8825975d9", + "reference": "f93cbc8885c96792ab86f42d76e58cf8825975d9", "shasum": "" }, "type": "library", @@ -7894,9 +7894,9 @@ ], "support": { "issues": "https://github.com/Part-DB/label-fonts/issues", - "source": "https://github.com/Part-DB/label-fonts/tree/v1.2.0" + "source": "https://github.com/Part-DB/label-fonts/tree/v1.3.0" }, - "time": "2025-09-07T15:42:51+00:00" + "time": "2026-02-14T21:44:31+00:00" }, { "name": "part-db/swap", From b21d294cf890b9281be529b7be00012e09bd299d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 14 Feb 2026 23:32:43 +0100 Subject: [PATCH 117/172] Ran rector and made tests final --- tests/API/APIDocsAvailabilityTest.php | 2 +- tests/API/APITokenAuthenticationTest.php | 2 +- tests/API/Endpoints/ApiTokenEnpointTest.php | 2 +- .../Endpoints/AttachmentTypeEndpointTest.php | 2 +- .../API/Endpoints/AttachmentsEndpointTest.php | 2 +- tests/API/Endpoints/CategoryEndpointTest.php | 2 +- tests/API/Endpoints/CurrencyEndpointTest.php | 2 +- .../API/Endpoints/FootprintsEndpointTest.php | 2 +- tests/API/Endpoints/InfoEndpointTest.php | 2 +- .../Endpoints/ManufacturersEndpointTest.php | 2 +- .../MeasurementUnitsEndpointTest.php | 2 +- .../Endpoints/OrderdetailsEndpointTest.php | 2 +- .../API/Endpoints/ParametersEndpointTest.php | 2 +- .../PartAssociationsEndpointTest.php | 2 +- .../Endpoints/PartCustomStateEndpointTest.php | 2 +- tests/API/Endpoints/PartEndpointTest.php | 2 +- tests/API/Endpoints/PartLotsEndpointTest.php | 2 +- .../Endpoints/PricedetailsEndpointTest.php | 2 +- .../ProjectBOMEntriesEndpointTest.php | 2 +- tests/API/Endpoints/ProjectsEndpointTest.php | 2 +- .../StorageLocationsEndpointTest.php | 2 +- tests/API/Endpoints/SuppliersEndpointTest.php | 2 +- tests/API/Endpoints/UsersEndpointTest.php | 2 +- .../ApplicationAvailabilityFunctionalTest.php | 2 +- .../AdminPages/AttachmentTypeController.php | 2 +- .../AdminPages/CategoryController.php | 2 +- .../AdminPages/CurrencyController.php | 2 +- .../AdminPages/FootprintController.php | 2 +- .../AdminPages/LabelProfileController.php | 2 +- .../AdminPages/ManufacturerController.php | 2 +- .../AdminPages/MeasurementUnitController.php | 2 +- .../PartCustomStateControllerTest.php | 2 +- .../AdminPages/ProjectController.php | 2 +- .../AdminPages/StorelocationController.php | 2 +- .../AdminPages/SupplierController.php | 2 +- .../BulkInfoProviderImportControllerTest.php | 32 +++-- tests/Controller/KiCadApiControllerTest.php | 2 +- tests/Controller/PartControllerTest.php | 2 +- tests/Controller/RedirectControllerTest.php | 2 +- tests/Controller/ScanControllerTest.php | 2 +- .../Filters/CompoundFilterTraitTest.php | 10 +- .../Filters/Constraints/FilterTraitTest.php | 2 +- .../BulkImportJobStatusConstraintTest.php | 8 +- .../BulkImportPartStatusConstraintTest.php | 10 +- tests/DatatablesAvailabilityTest.php | 2 +- tests/Doctrine/SQLiteRegexMiddlewareTest.php | 2 +- tests/Entity/Attachments/AttachmentTest.php | 2 +- .../Entity/Attachments/AttachmentTypeTest.php | 2 +- .../Base/AbstractStructuralDBElementTest.php | 2 +- tests/Entity/BulkImportJobStatusTest.php | 2 +- .../BulkInfoProviderImportJobPartTest.php | 47 +++---- .../Entity/BulkInfoProviderImportJobTest.php | 58 ++++---- .../Entity/LogSystem/AbstractLogEntryTest.php | 2 +- tests/Entity/LogSystem/LogLevelTest.php | 2 +- tests/Entity/LogSystem/LogTargetTypeTest.php | 2 +- tests/Entity/Parameters/PartParameterTest.php | 2 +- .../Parts/InfoProviderReferenceTest.php | 2 +- tests/Entity/Parts/PartAssociationTest.php | 2 +- tests/Entity/Parts/PartLotTest.php | 2 +- tests/Entity/Parts/PartTest.php | 2 +- tests/Entity/PriceSystem/CurrencyTest.php | 2 +- tests/Entity/PriceSystem/OrderdetailTest.php | 2 +- tests/Entity/PriceSystem/PricedetailTest.php | 2 +- tests/Entity/UserSystem/ApiTokenTypeTest.php | 2 +- .../Entity/UserSystem/PermissionDataTest.php | 2 +- tests/Entity/UserSystem/UserTest.php | 2 +- .../AddSlashEnvVarProcessorTest.php | 6 +- ...terSynonymsAsTranslationParametersTest.php | 6 +- .../PasswordChangeNeededSubscriberTest.php | 2 +- tests/Exceptions/TwigModeExceptionTest.php | 2 +- .../GlobalFieldMappingTypeTest.php | 2 +- .../Helpers/BBCodeToMarkdownConverterTest.php | 2 +- tests/Helpers/IPAnonymizerTest.php | 2 +- .../Projects/ProjectBuildRequestTest.php | 2 +- tests/Helpers/TreeViewNodeTest.php | 2 +- tests/Helpers/TrinaryLogicHelperTest.php | 2 +- ...hmentContainingDBElementRepositoryTest.php | 2 +- tests/Repository/DBElementRepositoryTest.php | 2 +- tests/Repository/LogEntryRepositoryTest.php | 9 +- .../NamedDBElementRepositoryTest.php | 2 +- tests/Repository/PartRepositoryTest.php | 8 +- .../StructuralDBElementRepositoryTest.php | 4 +- tests/Repository/UserRepositoryTest.php | 2 +- .../EnsureSAMLUserForSAMLLoginCheckerTest.php | 2 +- tests/Security/SamlUserFactoryTest.php | 2 +- tests/Security/UserCheckerTest.php | 2 +- tests/Serializer/BigNumberNormalizerTest.php | 2 +- tests/Serializer/PartNormalizerTest.php | 2 +- .../StructuralElementDenormalizerTest.php | 2 +- ...ucturalElementFromNameDenormalizerTest.php | 2 +- .../StructuralElementNormalizerTest.php | 2 +- .../AttachmentPathResolverTest.php | 8 +- .../AttachmentURLGeneratorTest.php | 2 +- .../BuiltinAttachmentsFinderTest.php | 2 +- .../Attachments/FileTypeFilterToolsTest.php | 2 +- .../Services/ElementTypeNameGeneratorTest.php | 2 +- tests/Services/ElementTypesTest.php | 6 +- .../Mergers/EntityMergerHelperTraitTest.php | 2 +- .../EntityMergers/Mergers/PartMergerTest.php | 2 +- .../Formatters/AmountFormatterTest.php | 2 +- tests/Services/Formatters/SIFormatterTest.php | 2 +- .../ImportExportSystem/BOMImporterTest.php | 22 +-- .../BOMValidationServiceTest.php | 16 +-- .../ImportExportSystem/EntityExporterTest.php | 4 +- .../ImportExportSystem/EntityImporterTest.php | 2 +- .../DTOs/BulkSearchFieldMappingDTOTest.php | 9 +- .../DTOs/BulkSearchPartResultsDTOTest.php | 28 ++-- .../DTOs/BulkSearchResponseDTOTest.php | 6 +- .../InfoProviderSystem/DTOs/FileDTOTest.php | 2 +- .../DTOs/ParameterDTOTest.php | 2 +- .../DTOs/PurchaseInfoDTOTest.php | 2 +- .../DTOs/SearchResultDTOTest.php | 2 +- .../DTOtoEntityConverterTest.php | 2 +- .../ProviderRegistryTest.php | 2 +- .../Providers/BuerklinProviderTest.php | 128 +++++++++--------- .../Providers/LCSCProviderTest.php | 32 ++--- .../BarcodeScanner/BarcodeScanHelperTest.php | 2 +- .../EIGP114BarcodeScanResultTest.php | 2 +- .../Barcodes/BarcodeContentGeneratorTest.php | 2 +- .../Barcodes/BarcodeHelperTest.php | 2 +- .../LabelSystem/LabelGeneratorTest.php | 2 +- .../LabelSystem/LabelTextReplacerTest.php | 2 +- .../AbstractElementProviderTest.php | 2 +- .../GlobalProvidersTest.php | 2 +- .../NamedElementProviderTest.php | 2 +- .../PartLotProviderTest.php | 2 +- .../PlaceholderProviders/PartProviderTest.php | 13 +- .../TimestampableElementProviderTest.php | 2 +- .../LabelSystem/SandboxedTwigFactoryTest.php | 2 +- .../LogSystem/EventCommentHelperTest.php | 2 +- .../EventCommentNeededHelperTest.php | 2 +- tests/Services/LogSystem/EventLoggerTest.php | 2 +- tests/Services/LogSystem/TimeTravelTest.php | 2 +- tests/Services/Misc/FAIconGeneratorTest.php | 2 +- .../Misc/MySQLDumpXMLConverterTest.php | 2 +- tests/Services/Misc/RangeParserTest.php | 2 +- .../Parameters/ParameterExtractorTest.php | 2 +- .../Parts/PartLotWithdrawAddHelperTest.php | 2 +- .../Parts/PartsTableActionHandlerTest.php | 2 +- .../Services/Parts/PricedetailHelperTest.php | 2 +- .../ProjectSystem/ProjectBuildHelperTest.php | 2 +- .../ProjectBuildPartHelperTest.php | 2 +- tests/Services/System/BackupManagerTest.php | 16 +-- tests/Services/System/UpdateExecutorTest.php | 2 +- tests/Services/Trees/NodesListBuilderTest.php | 2 +- .../Services/Trees/TreeViewGeneratorTest.php | 2 +- .../UserSystem/PermissionManagerTest.php | 2 +- .../PermissionSchemaUpdaterTest.php | 2 +- .../TFA/BackupCodeGeneratorTest.php | 2 +- .../UserSystem/TFA/BackupCodeManagerTest.php | 2 +- tests/Services/UserSystem/VoterHelperTest.php | 2 +- tests/Settings/SynonymSettingsTest.php | 6 +- tests/Twig/EntityExtensionTest.php | 2 +- tests/Twig/TwigCoreExtensionTest.php | 2 +- tests/Twig/UserExtensionTest.php | 2 +- .../NoneOfItsChildrenValidatorTest.php | 17 +-- .../Constraints/SelectableValidatorTest.php | 2 +- .../UniqueObjectCollectionValidatorTest.php | 2 +- .../Constraints/UrlOrBuiltinValidatorTest.php | 2 +- .../Constraints/ValidGTINValidatorTest.php | 19 +-- .../ValidGoogleAuthCodeValidatorTest.php | 2 +- .../Constraints/ValidThemeValidatorTest.php | 2 +- 162 files changed, 407 insertions(+), 393 deletions(-) diff --git a/tests/API/APIDocsAvailabilityTest.php b/tests/API/APIDocsAvailabilityTest.php index b7caa873..a7bba3d6 100644 --- a/tests/API/APIDocsAvailabilityTest.php +++ b/tests/API/APIDocsAvailabilityTest.php @@ -28,7 +28,7 @@ use App\Entity\UserSystem\User; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class APIDocsAvailabilityTest extends WebTestCase +final class APIDocsAvailabilityTest extends WebTestCase { #[DataProvider('urlProvider')] public function testDocAvailabilityForLoggedInUser(string $url): void diff --git a/tests/API/APITokenAuthenticationTest.php b/tests/API/APITokenAuthenticationTest.php index a78b0594..803a1819 100644 --- a/tests/API/APITokenAuthenticationTest.php +++ b/tests/API/APITokenAuthenticationTest.php @@ -27,7 +27,7 @@ use ApiPlatform\Symfony\Bundle\Test\ApiTestCase; use App\DataFixtures\APITokenFixtures; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use ApiPlatform\Symfony\Bundle\Test\Client; -class APITokenAuthenticationTest extends ApiTestCase +final class APITokenAuthenticationTest extends ApiTestCase { public function testUnauthenticated(): void { diff --git a/tests/API/Endpoints/ApiTokenEnpointTest.php b/tests/API/Endpoints/ApiTokenEnpointTest.php index 99340182..f21716bd 100644 --- a/tests/API/Endpoints/ApiTokenEnpointTest.php +++ b/tests/API/Endpoints/ApiTokenEnpointTest.php @@ -25,7 +25,7 @@ namespace App\Tests\API\Endpoints; use App\Tests\API\AuthenticatedApiTestCase; -class ApiTokenEnpointTest extends AuthenticatedApiTestCase +final class ApiTokenEnpointTest extends AuthenticatedApiTestCase { public function testGetCurrentToken(): void { diff --git a/tests/API/Endpoints/AttachmentTypeEndpointTest.php b/tests/API/Endpoints/AttachmentTypeEndpointTest.php index f90f3d94..fb5770d5 100644 --- a/tests/API/Endpoints/AttachmentTypeEndpointTest.php +++ b/tests/API/Endpoints/AttachmentTypeEndpointTest.php @@ -25,7 +25,7 @@ namespace App\Tests\API\Endpoints; use App\Tests\API\Endpoints\CrudEndpointTestCase; -class AttachmentTypeEndpointTest extends CrudEndpointTestCase +final class AttachmentTypeEndpointTest extends CrudEndpointTestCase { protected function getBasePath(): string diff --git a/tests/API/Endpoints/AttachmentsEndpointTest.php b/tests/API/Endpoints/AttachmentsEndpointTest.php index 8f4d7e77..999b7ad3 100644 --- a/tests/API/Endpoints/AttachmentsEndpointTest.php +++ b/tests/API/Endpoints/AttachmentsEndpointTest.php @@ -25,7 +25,7 @@ namespace App\Tests\API\Endpoints; use App\Tests\API\AuthenticatedApiTestCase; -class AttachmentsEndpointTest extends AuthenticatedApiTestCase +final class AttachmentsEndpointTest extends AuthenticatedApiTestCase { public function testGetCollection(): void { diff --git a/tests/API/Endpoints/CategoryEndpointTest.php b/tests/API/Endpoints/CategoryEndpointTest.php index 68f4fd2d..5f54d1dd 100644 --- a/tests/API/Endpoints/CategoryEndpointTest.php +++ b/tests/API/Endpoints/CategoryEndpointTest.php @@ -25,7 +25,7 @@ namespace App\Tests\API\Endpoints; use App\Tests\API\Endpoints\CrudEndpointTestCase; -class CategoryEndpointTest extends CrudEndpointTestCase +final class CategoryEndpointTest extends CrudEndpointTestCase { protected function getBasePath(): string diff --git a/tests/API/Endpoints/CurrencyEndpointTest.php b/tests/API/Endpoints/CurrencyEndpointTest.php index a463daeb..a9f36633 100644 --- a/tests/API/Endpoints/CurrencyEndpointTest.php +++ b/tests/API/Endpoints/CurrencyEndpointTest.php @@ -24,7 +24,7 @@ declare(strict_types=1); namespace App\Tests\API\Endpoints; -class CurrencyEndpointTest extends CrudEndpointTestCase +final class CurrencyEndpointTest extends CrudEndpointTestCase { protected function getBasePath(): string diff --git a/tests/API/Endpoints/FootprintsEndpointTest.php b/tests/API/Endpoints/FootprintsEndpointTest.php index f3f359a2..fd6374f9 100644 --- a/tests/API/Endpoints/FootprintsEndpointTest.php +++ b/tests/API/Endpoints/FootprintsEndpointTest.php @@ -25,7 +25,7 @@ namespace App\Tests\API\Endpoints; use App\Tests\API\Endpoints\CrudEndpointTestCase; -class FootprintsEndpointTest extends CrudEndpointTestCase +final class FootprintsEndpointTest extends CrudEndpointTestCase { protected function getBasePath(): string diff --git a/tests/API/Endpoints/InfoEndpointTest.php b/tests/API/Endpoints/InfoEndpointTest.php index 09f02e8a..6e996c0c 100644 --- a/tests/API/Endpoints/InfoEndpointTest.php +++ b/tests/API/Endpoints/InfoEndpointTest.php @@ -25,7 +25,7 @@ namespace API\Endpoints; use App\Tests\API\AuthenticatedApiTestCase; -class InfoEndpointTest extends AuthenticatedApiTestCase +final class InfoEndpointTest extends AuthenticatedApiTestCase { public function testGetInfo(): void { diff --git a/tests/API/Endpoints/ManufacturersEndpointTest.php b/tests/API/Endpoints/ManufacturersEndpointTest.php index 482ec98d..80447c93 100644 --- a/tests/API/Endpoints/ManufacturersEndpointTest.php +++ b/tests/API/Endpoints/ManufacturersEndpointTest.php @@ -25,7 +25,7 @@ namespace App\Tests\API\Endpoints; use App\Tests\API\Endpoints\CrudEndpointTestCase; -class ManufacturersEndpointTest extends CrudEndpointTestCase +final class ManufacturersEndpointTest extends CrudEndpointTestCase { protected function getBasePath(): string diff --git a/tests/API/Endpoints/MeasurementUnitsEndpointTest.php b/tests/API/Endpoints/MeasurementUnitsEndpointTest.php index db7341db..d659fb1c 100644 --- a/tests/API/Endpoints/MeasurementUnitsEndpointTest.php +++ b/tests/API/Endpoints/MeasurementUnitsEndpointTest.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace App\Tests\API\Endpoints; -class MeasurementUnitsEndpointTest extends CrudEndpointTestCase +final class MeasurementUnitsEndpointTest extends CrudEndpointTestCase { protected function getBasePath(): string diff --git a/tests/API/Endpoints/OrderdetailsEndpointTest.php b/tests/API/Endpoints/OrderdetailsEndpointTest.php index 92823103..d7d132d9 100644 --- a/tests/API/Endpoints/OrderdetailsEndpointTest.php +++ b/tests/API/Endpoints/OrderdetailsEndpointTest.php @@ -25,7 +25,7 @@ namespace App\Tests\API\Endpoints; use App\Tests\API\Endpoints\CrudEndpointTestCase; -class OrderdetailsEndpointTest extends CrudEndpointTestCase +final class OrderdetailsEndpointTest extends CrudEndpointTestCase { protected function getBasePath(): string diff --git a/tests/API/Endpoints/ParametersEndpointTest.php b/tests/API/Endpoints/ParametersEndpointTest.php index 733df59a..323fc7b8 100644 --- a/tests/API/Endpoints/ParametersEndpointTest.php +++ b/tests/API/Endpoints/ParametersEndpointTest.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace App\Tests\API\Endpoints; -class ParametersEndpointTest extends CrudEndpointTestCase +final class ParametersEndpointTest extends CrudEndpointTestCase { protected function getBasePath(): string diff --git a/tests/API/Endpoints/PartAssociationsEndpointTest.php b/tests/API/Endpoints/PartAssociationsEndpointTest.php index 62408dbb..7ac81ff6 100644 --- a/tests/API/Endpoints/PartAssociationsEndpointTest.php +++ b/tests/API/Endpoints/PartAssociationsEndpointTest.php @@ -25,7 +25,7 @@ namespace App\Tests\API\Endpoints; use App\Tests\API\Endpoints\CrudEndpointTestCase; -class PartAssociationsEndpointTest extends CrudEndpointTestCase +final class PartAssociationsEndpointTest extends CrudEndpointTestCase { protected function getBasePath(): string diff --git a/tests/API/Endpoints/PartCustomStateEndpointTest.php b/tests/API/Endpoints/PartCustomStateEndpointTest.php index ac353d9c..8d1253f3 100644 --- a/tests/API/Endpoints/PartCustomStateEndpointTest.php +++ b/tests/API/Endpoints/PartCustomStateEndpointTest.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace App\Tests\API\Endpoints; -class PartCustomStateEndpointTest extends CrudEndpointTestCase +final class PartCustomStateEndpointTest extends CrudEndpointTestCase { protected function getBasePath(): string diff --git a/tests/API/Endpoints/PartEndpointTest.php b/tests/API/Endpoints/PartEndpointTest.php index 9406fc78..8d66d362 100644 --- a/tests/API/Endpoints/PartEndpointTest.php +++ b/tests/API/Endpoints/PartEndpointTest.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace App\Tests\API\Endpoints; -class PartEndpointTest extends CrudEndpointTestCase +final class PartEndpointTest extends CrudEndpointTestCase { protected function getBasePath(): string diff --git a/tests/API/Endpoints/PartLotsEndpointTest.php b/tests/API/Endpoints/PartLotsEndpointTest.php index 38aa6b18..70f1f9ab 100644 --- a/tests/API/Endpoints/PartLotsEndpointTest.php +++ b/tests/API/Endpoints/PartLotsEndpointTest.php @@ -25,7 +25,7 @@ namespace App\Tests\API\Endpoints; use App\Tests\API\Endpoints\CrudEndpointTestCase; -class PartLotsEndpointTest extends CrudEndpointTestCase +final class PartLotsEndpointTest extends CrudEndpointTestCase { protected function getBasePath(): string diff --git a/tests/API/Endpoints/PricedetailsEndpointTest.php b/tests/API/Endpoints/PricedetailsEndpointTest.php index 8895365f..5661c0c7 100644 --- a/tests/API/Endpoints/PricedetailsEndpointTest.php +++ b/tests/API/Endpoints/PricedetailsEndpointTest.php @@ -25,7 +25,7 @@ namespace App\Tests\API\Endpoints; use App\Tests\API\Endpoints\CrudEndpointTestCase; -class PricedetailsEndpointTest extends CrudEndpointTestCase +final class PricedetailsEndpointTest extends CrudEndpointTestCase { protected function getBasePath(): string diff --git a/tests/API/Endpoints/ProjectBOMEntriesEndpointTest.php b/tests/API/Endpoints/ProjectBOMEntriesEndpointTest.php index cafb57dc..10dbf747 100644 --- a/tests/API/Endpoints/ProjectBOMEntriesEndpointTest.php +++ b/tests/API/Endpoints/ProjectBOMEntriesEndpointTest.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace App\Tests\API\Endpoints; -class ProjectBOMEntriesEndpointTest extends CrudEndpointTestCase +final class ProjectBOMEntriesEndpointTest extends CrudEndpointTestCase { protected function getBasePath(): string diff --git a/tests/API/Endpoints/ProjectsEndpointTest.php b/tests/API/Endpoints/ProjectsEndpointTest.php index 9daf584a..ea9cc6b4 100644 --- a/tests/API/Endpoints/ProjectsEndpointTest.php +++ b/tests/API/Endpoints/ProjectsEndpointTest.php @@ -25,7 +25,7 @@ namespace App\Tests\API\Endpoints; use App\Tests\API\Endpoints\CrudEndpointTestCase; -class ProjectsEndpointTest extends CrudEndpointTestCase +final class ProjectsEndpointTest extends CrudEndpointTestCase { protected function getBasePath(): string diff --git a/tests/API/Endpoints/StorageLocationsEndpointTest.php b/tests/API/Endpoints/StorageLocationsEndpointTest.php index 8d9641c4..11947e71 100644 --- a/tests/API/Endpoints/StorageLocationsEndpointTest.php +++ b/tests/API/Endpoints/StorageLocationsEndpointTest.php @@ -25,7 +25,7 @@ namespace API\Endpoints; use App\Tests\API\Endpoints\CrudEndpointTestCase; -class StorageLocationsEndpointTest extends CrudEndpointTestCase +final class StorageLocationsEndpointTest extends CrudEndpointTestCase { protected function getBasePath(): string diff --git a/tests/API/Endpoints/SuppliersEndpointTest.php b/tests/API/Endpoints/SuppliersEndpointTest.php index 1941f849..bbb64e90 100644 --- a/tests/API/Endpoints/SuppliersEndpointTest.php +++ b/tests/API/Endpoints/SuppliersEndpointTest.php @@ -25,7 +25,7 @@ namespace App\Tests\API\Endpoints; use App\Tests\API\Endpoints\CrudEndpointTestCase; -class SuppliersEndpointTest extends CrudEndpointTestCase +final class SuppliersEndpointTest extends CrudEndpointTestCase { protected function getBasePath(): string diff --git a/tests/API/Endpoints/UsersEndpointTest.php b/tests/API/Endpoints/UsersEndpointTest.php index 0f075a7c..e6e18930 100644 --- a/tests/API/Endpoints/UsersEndpointTest.php +++ b/tests/API/Endpoints/UsersEndpointTest.php @@ -23,7 +23,7 @@ declare(strict_types=1); namespace App\Tests\API\Endpoints; -class UsersEndpointTest extends CrudEndpointTestCase +final class UsersEndpointTest extends CrudEndpointTestCase { protected function getBasePath(): string diff --git a/tests/ApplicationAvailabilityFunctionalTest.php b/tests/ApplicationAvailabilityFunctionalTest.php index d5bced49..c7449411 100644 --- a/tests/ApplicationAvailabilityFunctionalTest.php +++ b/tests/ApplicationAvailabilityFunctionalTest.php @@ -32,7 +32,7 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; */ #[Group('DB')] #[Group('slow')] -class ApplicationAvailabilityFunctionalTest extends WebTestCase +final class ApplicationAvailabilityFunctionalTest extends WebTestCase { #[DataProvider('urlProvider')] public function testPageIsSuccessful(string $url): void diff --git a/tests/Controller/AdminPages/AttachmentTypeController.php b/tests/Controller/AdminPages/AttachmentTypeController.php index 599a6f69..90e6583d 100644 --- a/tests/Controller/AdminPages/AttachmentTypeController.php +++ b/tests/Controller/AdminPages/AttachmentTypeController.php @@ -27,7 +27,7 @@ use App\Entity\Attachments\AttachmentType; #[Group('slow')] #[Group('DB')] -class AttachmentTypeController extends AbstractAdminController +final class AttachmentTypeController extends AbstractAdminController { protected static string $base_path = '/en/attachment_type'; protected static string $entity_class = AttachmentType::class; diff --git a/tests/Controller/AdminPages/CategoryController.php b/tests/Controller/AdminPages/CategoryController.php index c1bac093..5d8396e7 100644 --- a/tests/Controller/AdminPages/CategoryController.php +++ b/tests/Controller/AdminPages/CategoryController.php @@ -27,7 +27,7 @@ use App\Entity\Parts\Category; #[Group('slow')] #[Group('DB')] -class CategoryController extends AbstractAdminController +final class CategoryController extends AbstractAdminController { protected static string $base_path = '/en/category'; protected static string $entity_class = Category::class; diff --git a/tests/Controller/AdminPages/CurrencyController.php b/tests/Controller/AdminPages/CurrencyController.php index 21f94a29..4ebd82e2 100644 --- a/tests/Controller/AdminPages/CurrencyController.php +++ b/tests/Controller/AdminPages/CurrencyController.php @@ -28,7 +28,7 @@ use App\Entity\Parts\Manufacturer; #[Group('slow')] #[Group('DB')] -class CurrencyController extends AbstractAdminController +final class CurrencyController extends AbstractAdminController { protected static string $base_path = '/en/currency'; protected static string $entity_class = Currency::class; diff --git a/tests/Controller/AdminPages/FootprintController.php b/tests/Controller/AdminPages/FootprintController.php index 7d617ba8..2643d3f1 100644 --- a/tests/Controller/AdminPages/FootprintController.php +++ b/tests/Controller/AdminPages/FootprintController.php @@ -27,7 +27,7 @@ use App\Entity\Parts\Footprint; #[Group('slow')] #[Group('DB')] -class FootprintController extends AbstractAdminController +final class FootprintController extends AbstractAdminController { protected static string $base_path = '/en/footprint'; protected static string $entity_class = Footprint::class; diff --git a/tests/Controller/AdminPages/LabelProfileController.php b/tests/Controller/AdminPages/LabelProfileController.php index 838d872e..d407701a 100644 --- a/tests/Controller/AdminPages/LabelProfileController.php +++ b/tests/Controller/AdminPages/LabelProfileController.php @@ -46,7 +46,7 @@ use PHPUnit\Framework\Attributes\Group; use App\Entity\LabelSystem\LabelProfile; use Symfony\Component\Security\Core\Exception\AccessDeniedException; -class LabelProfileController extends AbstractAdminController +final class LabelProfileController extends AbstractAdminController { protected static string $base_path = '/en/label_profile'; protected static string $entity_class = LabelProfile::class; diff --git a/tests/Controller/AdminPages/ManufacturerController.php b/tests/Controller/AdminPages/ManufacturerController.php index c2666f72..2a5ed386 100644 --- a/tests/Controller/AdminPages/ManufacturerController.php +++ b/tests/Controller/AdminPages/ManufacturerController.php @@ -27,7 +27,7 @@ use App\Entity\Parts\Manufacturer; #[Group('slow')] #[Group('DB')] -class ManufacturerController extends AbstractAdminController +final class ManufacturerController extends AbstractAdminController { protected static string $base_path = '/en/manufacturer'; protected static string $entity_class = Manufacturer::class; diff --git a/tests/Controller/AdminPages/MeasurementUnitController.php b/tests/Controller/AdminPages/MeasurementUnitController.php index 351f4e51..c15d4af4 100644 --- a/tests/Controller/AdminPages/MeasurementUnitController.php +++ b/tests/Controller/AdminPages/MeasurementUnitController.php @@ -27,7 +27,7 @@ use App\Entity\Parts\MeasurementUnit; #[Group('slow')] #[Group('DB')] -class MeasurementUnitController extends AbstractAdminController +final class MeasurementUnitController extends AbstractAdminController { protected static string $base_path = '/en/measurement_unit'; protected static string $entity_class = MeasurementUnit::class; diff --git a/tests/Controller/AdminPages/PartCustomStateControllerTest.php b/tests/Controller/AdminPages/PartCustomStateControllerTest.php index 3e87dfe2..77d1127c 100644 --- a/tests/Controller/AdminPages/PartCustomStateControllerTest.php +++ b/tests/Controller/AdminPages/PartCustomStateControllerTest.php @@ -27,7 +27,7 @@ use PHPUnit\Framework\Attributes\Group; #[Group('slow')] #[Group('DB')] -class PartCustomStateControllerTest extends AbstractAdminController +final class PartCustomStateControllerTest extends AbstractAdminController { protected static string $base_path = '/en/part_custom_state'; protected static string $entity_class = PartCustomState::class; diff --git a/tests/Controller/AdminPages/ProjectController.php b/tests/Controller/AdminPages/ProjectController.php index 1de4bf52..d7bec069 100644 --- a/tests/Controller/AdminPages/ProjectController.php +++ b/tests/Controller/AdminPages/ProjectController.php @@ -28,7 +28,7 @@ use App\Entity\ProjectSystem\Project; #[Group('slow')] #[Group('DB')] -class ProjectController extends AbstractAdminController +final class ProjectController extends AbstractAdminController { protected static string $base_path = '/en/project'; protected static string $entity_class = Project::class; diff --git a/tests/Controller/AdminPages/StorelocationController.php b/tests/Controller/AdminPages/StorelocationController.php index fee06c67..f19a5f6a 100644 --- a/tests/Controller/AdminPages/StorelocationController.php +++ b/tests/Controller/AdminPages/StorelocationController.php @@ -27,7 +27,7 @@ use App\Entity\Parts\StorageLocation; #[Group('slow')] #[Group('DB')] -class StorelocationController extends AbstractAdminController +final class StorelocationController extends AbstractAdminController { protected static string $base_path = '/en/store_location'; protected static string $entity_class = StorageLocation::class; diff --git a/tests/Controller/AdminPages/SupplierController.php b/tests/Controller/AdminPages/SupplierController.php index 3549eb4b..1e1d720a 100644 --- a/tests/Controller/AdminPages/SupplierController.php +++ b/tests/Controller/AdminPages/SupplierController.php @@ -27,7 +27,7 @@ use App\Entity\Parts\Supplier; #[Group('slow')] #[Group('DB')] -class SupplierController extends AbstractAdminController +final class SupplierController extends AbstractAdminController { protected static string $base_path = '/en/supplier'; protected static string $entity_class = Supplier::class; diff --git a/tests/Controller/BulkInfoProviderImportControllerTest.php b/tests/Controller/BulkInfoProviderImportControllerTest.php index 8961d23b..ec3629fe 100644 --- a/tests/Controller/BulkInfoProviderImportControllerTest.php +++ b/tests/Controller/BulkInfoProviderImportControllerTest.php @@ -22,6 +22,8 @@ declare(strict_types=1); namespace App\Tests\Controller; +use App\Services\InfoProviderSystem\BulkInfoProviderService; +use App\Services\InfoProviderSystem\DTOs\BulkSearchFieldMappingDTO; use App\Entity\InfoProviderSystem\BulkImportJobStatus; use App\Entity\InfoProviderSystem\BulkInfoProviderImportJob; use App\Entity\Parts\Part; @@ -36,7 +38,7 @@ use Symfony\Component\HttpFoundation\Response; #[Group("slow")] #[Group("DB")] -class BulkInfoProviderImportControllerTest extends WebTestCase +final class BulkInfoProviderImportControllerTest extends WebTestCase { public function testStep1WithoutIds(): void { @@ -174,8 +176,8 @@ class BulkInfoProviderImportControllerTest extends WebTestCase // Verify the template rendered the source_field and source_keyword correctly $content = $client->getResponse()->getContent(); - $this->assertStringContainsString('test_field', $content); - $this->assertStringContainsString('test_keyword', $content); + $this->assertStringContainsString('test_field', (string) $content); + $this->assertStringContainsString('test_keyword', (string) $content); // Clean up - find by ID to avoid detached entity issues $jobId = $job->getId(); @@ -607,7 +609,7 @@ class BulkInfoProviderImportControllerTest extends WebTestCase } $this->assertResponseStatusCodeSame(Response::HTTP_OK); - $this->assertStringContainsString('Bulk Info Provider Import', $client->getResponse()->getContent()); + $this->assertStringContainsString('Bulk Info Provider Import', (string) $client->getResponse()->getContent()); } public function testStep1FormSubmissionWithErrors(): void @@ -630,7 +632,7 @@ class BulkInfoProviderImportControllerTest extends WebTestCase } $this->assertResponseStatusCodeSame(Response::HTTP_OK); - $this->assertStringContainsString('Bulk Info Provider Import', $client->getResponse()->getContent()); + $this->assertStringContainsString('Bulk Info Provider Import', (string) $client->getResponse()->getContent()); } public function testBulkInfoProviderServiceKeywordExtraction(): void @@ -647,18 +649,18 @@ class BulkInfoProviderImportControllerTest extends WebTestCase } // Test that the service can extract keywords from parts - $bulkService = $client->getContainer()->get(\App\Services\InfoProviderSystem\BulkInfoProviderService::class); + $bulkService = $client->getContainer()->get(BulkInfoProviderService::class); // Create field mappings to verify the service works $fieldMappings = [ - new \App\Services\InfoProviderSystem\DTOs\BulkSearchFieldMappingDTO('name', ['test'], 1), - new \App\Services\InfoProviderSystem\DTOs\BulkSearchFieldMappingDTO('mpn', ['test'], 2) + new BulkSearchFieldMappingDTO('name', ['test'], 1), + new BulkSearchFieldMappingDTO('mpn', ['test'], 2) ]; // The service may return an empty result or throw when no results are found try { $result = $bulkService->performBulkSearch([$part], $fieldMappings, false); - $this->assertInstanceOf(\App\Services\InfoProviderSystem\DTOs\BulkSearchResponseDTO::class, $result); + $this->assertInstanceOf(BulkSearchResponseDTO::class, $result); } catch (\RuntimeException $e) { $this->assertStringContainsString('No search results found', $e->getMessage()); } @@ -725,12 +727,12 @@ class BulkInfoProviderImportControllerTest extends WebTestCase } // Test that the service can handle supplier part number fields - $bulkService = $client->getContainer()->get(\App\Services\InfoProviderSystem\BulkInfoProviderService::class); + $bulkService = $client->getContainer()->get(BulkInfoProviderService::class); // Create field mappings with supplier SPN field mapping $fieldMappings = [ - new \App\Services\InfoProviderSystem\DTOs\BulkSearchFieldMappingDTO('invalid_field', ['test'], 1), - new \App\Services\InfoProviderSystem\DTOs\BulkSearchFieldMappingDTO('test_supplier_spn', ['test'], 2) + new BulkSearchFieldMappingDTO('invalid_field', ['test'], 1), + new BulkSearchFieldMappingDTO('test_supplier_spn', ['test'], 2) ]; // The service should be able to process the request and throw an exception when no results are found @@ -756,11 +758,11 @@ class BulkInfoProviderImportControllerTest extends WebTestCase } // Test that the service can handle batch processing - $bulkService = $client->getContainer()->get(\App\Services\InfoProviderSystem\BulkInfoProviderService::class); + $bulkService = $client->getContainer()->get(BulkInfoProviderService::class); // Create field mappings with multiple keywords $fieldMappings = [ - new \App\Services\InfoProviderSystem\DTOs\BulkSearchFieldMappingDTO('empty', ['test'], 1) + new BulkSearchFieldMappingDTO('empty', ['test'], 1) ]; // The service should be able to process the request and throw an exception when no results are found @@ -786,7 +788,7 @@ class BulkInfoProviderImportControllerTest extends WebTestCase } // Test that the service can handle prefetch details - $bulkService = $client->getContainer()->get(\App\Services\InfoProviderSystem\BulkInfoProviderService::class); + $bulkService = $client->getContainer()->get(BulkInfoProviderService::class); // Create empty search results to test prefetch method $searchResults = new BulkSearchResponseDTO([ diff --git a/tests/Controller/KiCadApiControllerTest.php b/tests/Controller/KiCadApiControllerTest.php index a66cb8a4..9d33512a 100644 --- a/tests/Controller/KiCadApiControllerTest.php +++ b/tests/Controller/KiCadApiControllerTest.php @@ -27,7 +27,7 @@ use App\DataFixtures\APITokenFixtures; use Symfony\Bundle\FrameworkBundle\KernelBrowser; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class KiCadApiControllerTest extends WebTestCase +final class KiCadApiControllerTest extends WebTestCase { private const BASE_URL = '/en/kicad-api/v1'; diff --git a/tests/Controller/PartControllerTest.php b/tests/Controller/PartControllerTest.php index 8c9f3729..c15bdd51 100644 --- a/tests/Controller/PartControllerTest.php +++ b/tests/Controller/PartControllerTest.php @@ -38,7 +38,7 @@ use Symfony\Component\HttpFoundation\Response; #[Group("slow")] #[Group("DB")] -class PartControllerTest extends WebTestCase +final class PartControllerTest extends WebTestCase { public function testShowPart(): void { diff --git a/tests/Controller/RedirectControllerTest.php b/tests/Controller/RedirectControllerTest.php index ac2776e5..420b0f49 100644 --- a/tests/Controller/RedirectControllerTest.php +++ b/tests/Controller/RedirectControllerTest.php @@ -33,7 +33,7 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; #[Group('slow')] #[Group('DB')] -class RedirectControllerTest extends WebTestCase +final class RedirectControllerTest extends WebTestCase { protected EntityManagerInterface $em; protected UserRepository $userRepo; diff --git a/tests/Controller/ScanControllerTest.php b/tests/Controller/ScanControllerTest.php index 98992e09..b504cd29 100644 --- a/tests/Controller/ScanControllerTest.php +++ b/tests/Controller/ScanControllerTest.php @@ -25,7 +25,7 @@ namespace App\Tests\Controller; use Symfony\Bundle\FrameworkBundle\KernelBrowser; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class ScanControllerTest extends WebTestCase +final class ScanControllerTest extends WebTestCase { private ?KernelBrowser $client = null; diff --git a/tests/DataTables/Filters/CompoundFilterTraitTest.php b/tests/DataTables/Filters/CompoundFilterTraitTest.php index 93f3c1e1..d9bf20b0 100644 --- a/tests/DataTables/Filters/CompoundFilterTraitTest.php +++ b/tests/DataTables/Filters/CompoundFilterTraitTest.php @@ -27,7 +27,7 @@ use App\DataTables\Filters\FilterInterface; use Doctrine\ORM\QueryBuilder; use PHPUnit\Framework\TestCase; -class CompoundFilterTraitTest extends TestCase +final class CompoundFilterTraitTest extends TestCase { public function testFindAllChildFiltersEmpty(): void @@ -49,9 +49,9 @@ class CompoundFilterTraitTest extends TestCase public function testFindAllChildFilters(): void { - $f1 = $this->createMock(FilterInterface::class); - $f2 = $this->createMock(FilterInterface::class); - $f3 = $this->createMock(FilterInterface::class); + $f1 = $this->createStub(FilterInterface::class); + $f2 = $this->createStub(FilterInterface::class); + $f3 = $this->createStub(FilterInterface::class); $filter = new class($f1, $f2, $f3, null) { use CompoundFilterTrait; @@ -108,7 +108,7 @@ class CompoundFilterTraitTest extends TestCase } }; - $qb = $this->createMock(QueryBuilder::class); + $qb = $this->createStub(QueryBuilder::class); $filter->_applyAllChildFilters($qb); } diff --git a/tests/DataTables/Filters/Constraints/FilterTraitTest.php b/tests/DataTables/Filters/Constraints/FilterTraitTest.php index e1e459d5..a7493dcf 100644 --- a/tests/DataTables/Filters/Constraints/FilterTraitTest.php +++ b/tests/DataTables/Filters/Constraints/FilterTraitTest.php @@ -26,7 +26,7 @@ use PHPUnit\Framework\Attributes\DataProvider; use App\DataTables\Filters\Constraints\FilterTrait; use PHPUnit\Framework\TestCase; -class FilterTraitTest extends TestCase +final class FilterTraitTest extends TestCase { use FilterTrait; diff --git a/tests/DataTables/Filters/Constraints/Part/BulkImportJobStatusConstraintTest.php b/tests/DataTables/Filters/Constraints/Part/BulkImportJobStatusConstraintTest.php index 816a8035..333b9af5 100644 --- a/tests/DataTables/Filters/Constraints/Part/BulkImportJobStatusConstraintTest.php +++ b/tests/DataTables/Filters/Constraints/Part/BulkImportJobStatusConstraintTest.php @@ -28,7 +28,7 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\QueryBuilder; use PHPUnit\Framework\TestCase; -class BulkImportJobStatusConstraintTest extends TestCase +final class BulkImportJobStatusConstraintTest extends TestCase { private BulkImportJobStatusConstraint $constraint; private QueryBuilder $queryBuilder; @@ -46,7 +46,7 @@ class BulkImportJobStatusConstraintTest extends TestCase public function testConstructor(): void { - $this->assertEquals([], $this->constraint->getValue()); + $this->assertSame([], $this->constraint->getValue()); $this->assertEmpty($this->constraint->getOperator()); $this->assertFalse($this->constraint->isEnabled()); } @@ -56,7 +56,7 @@ class BulkImportJobStatusConstraintTest extends TestCase $values = ['pending', 'in_progress']; $this->constraint->setValue($values); - $this->assertEquals($values, $this->constraint->getValue()); + $this->assertSame($values, $this->constraint->getValue()); } public function testGetAndSetOperator(): void @@ -64,7 +64,7 @@ class BulkImportJobStatusConstraintTest extends TestCase $operator = 'ANY'; $this->constraint->setOperator($operator); - $this->assertEquals($operator, $this->constraint->getOperator()); + $this->assertSame($operator, $this->constraint->getOperator()); } public function testIsEnabledWithEmptyValues(): void diff --git a/tests/DataTables/Filters/Constraints/Part/BulkImportPartStatusConstraintTest.php b/tests/DataTables/Filters/Constraints/Part/BulkImportPartStatusConstraintTest.php index bc110eda..e2b37287 100644 --- a/tests/DataTables/Filters/Constraints/Part/BulkImportPartStatusConstraintTest.php +++ b/tests/DataTables/Filters/Constraints/Part/BulkImportPartStatusConstraintTest.php @@ -28,7 +28,7 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\QueryBuilder; use PHPUnit\Framework\TestCase; -class BulkImportPartStatusConstraintTest extends TestCase +final class BulkImportPartStatusConstraintTest extends TestCase { private BulkImportPartStatusConstraint $constraint; private QueryBuilder $queryBuilder; @@ -46,7 +46,7 @@ class BulkImportPartStatusConstraintTest extends TestCase public function testConstructor(): void { - $this->assertEquals([], $this->constraint->getValue()); + $this->assertSame([], $this->constraint->getValue()); $this->assertEmpty($this->constraint->getOperator()); $this->assertFalse($this->constraint->isEnabled()); } @@ -56,7 +56,7 @@ class BulkImportPartStatusConstraintTest extends TestCase $values = ['pending', 'completed', 'skipped']; $this->constraint->setValue($values); - $this->assertEquals($values, $this->constraint->getValue()); + $this->assertSame($values, $this->constraint->getValue()); } public function testGetAndSetOperator(): void @@ -64,7 +64,7 @@ class BulkImportPartStatusConstraintTest extends TestCase $operator = 'ANY'; $this->constraint->setOperator($operator); - $this->assertEquals($operator, $this->constraint->getOperator()); + $this->assertSame($operator, $this->constraint->getOperator()); } public function testIsEnabledWithEmptyValues(): void @@ -294,6 +294,6 @@ class BulkImportPartStatusConstraintTest extends TestCase $this->constraint->apply($this->queryBuilder); - $this->assertEquals($statusValues, $this->constraint->getValue()); + $this->assertSame($statusValues, $this->constraint->getValue()); } } diff --git a/tests/DatatablesAvailabilityTest.php b/tests/DatatablesAvailabilityTest.php index dad61be3..1447da73 100644 --- a/tests/DatatablesAvailabilityTest.php +++ b/tests/DatatablesAvailabilityTest.php @@ -44,7 +44,7 @@ namespace App\Tests; use PHPUnit\Framework\Attributes\DataProvider; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class DatatablesAvailabilityTest extends WebTestCase +final class DatatablesAvailabilityTest extends WebTestCase { #[DataProvider('urlProvider')] public function testDataTable(string $url, ?array $ordering = null): void diff --git a/tests/Doctrine/SQLiteRegexMiddlewareTest.php b/tests/Doctrine/SQLiteRegexMiddlewareTest.php index 67410f76..aa5e4da1 100644 --- a/tests/Doctrine/SQLiteRegexMiddlewareTest.php +++ b/tests/Doctrine/SQLiteRegexMiddlewareTest.php @@ -26,7 +26,7 @@ use PHPUnit\Framework\Attributes\DataProvider; use App\Doctrine\Middleware\SQLiteRegexExtensionMiddlewareDriver; use PHPUnit\Framework\TestCase; -class SQLiteRegexMiddlewareTest extends TestCase +final class SQLiteRegexMiddlewareTest extends TestCase { public static function regexpDataProvider(): \Generator diff --git a/tests/Entity/Attachments/AttachmentTest.php b/tests/Entity/Attachments/AttachmentTest.php index 35222d63..ca55424c 100644 --- a/tests/Entity/Attachments/AttachmentTest.php +++ b/tests/Entity/Attachments/AttachmentTest.php @@ -55,7 +55,7 @@ use InvalidArgumentException; use PHPUnit\Framework\TestCase; use ReflectionClass; -class AttachmentTest extends TestCase +final class AttachmentTest extends TestCase { public function testEmptyState(): void { diff --git a/tests/Entity/Attachments/AttachmentTypeTest.php b/tests/Entity/Attachments/AttachmentTypeTest.php index ea80db11..c966d23f 100644 --- a/tests/Entity/Attachments/AttachmentTypeTest.php +++ b/tests/Entity/Attachments/AttachmentTypeTest.php @@ -28,7 +28,7 @@ use App\Entity\Attachments\UserAttachment; use Doctrine\Common\Collections\Collection; use PHPUnit\Framework\TestCase; -class AttachmentTypeTest extends TestCase +final class AttachmentTypeTest extends TestCase { public function testEmptyState(): void { diff --git a/tests/Entity/Base/AbstractStructuralDBElementTest.php b/tests/Entity/Base/AbstractStructuralDBElementTest.php index 3f8157ad..90a7dee2 100644 --- a/tests/Entity/Base/AbstractStructuralDBElementTest.php +++ b/tests/Entity/Base/AbstractStructuralDBElementTest.php @@ -31,7 +31,7 @@ use PHPUnit\Framework\TestCase; * Test StructuralDBElement entities. * Note: Because StructuralDBElement is abstract we use AttachmentType here as a placeholder. */ -class AbstractStructuralDBElementTest extends TestCase +final class AbstractStructuralDBElementTest extends TestCase { protected AttachmentType $root; protected AttachmentType $child1; diff --git a/tests/Entity/BulkImportJobStatusTest.php b/tests/Entity/BulkImportJobStatusTest.php index e8b4a977..c38d62e2 100644 --- a/tests/Entity/BulkImportJobStatusTest.php +++ b/tests/Entity/BulkImportJobStatusTest.php @@ -25,7 +25,7 @@ namespace App\Tests\Entity; use App\Entity\InfoProviderSystem\BulkImportJobStatus; use PHPUnit\Framework\TestCase; -class BulkImportJobStatusTest extends TestCase +final class BulkImportJobStatusTest extends TestCase { public function testEnumValues(): void { diff --git a/tests/Entity/BulkInfoProviderImportJobPartTest.php b/tests/Entity/BulkInfoProviderImportJobPartTest.php index dd9600dd..fdae58e5 100644 --- a/tests/Entity/BulkInfoProviderImportJobPartTest.php +++ b/tests/Entity/BulkInfoProviderImportJobPartTest.php @@ -28,32 +28,27 @@ use App\Entity\InfoProviderSystem\BulkInfoProviderImportJobPart; use App\Entity\Parts\Part; use PHPUnit\Framework\TestCase; -class BulkInfoProviderImportJobPartTest extends TestCase +final class BulkInfoProviderImportJobPartTest extends TestCase { - private BulkInfoProviderImportJob $job; - private Part $part; private BulkInfoProviderImportJobPart $jobPart; protected function setUp(): void { - $this->job = $this->createMock(BulkInfoProviderImportJob::class); - $this->part = $this->createMock(Part::class); - - $this->jobPart = new BulkInfoProviderImportJobPart($this->job, $this->part); + $this->jobPart = new BulkInfoProviderImportJobPart($this->createStub(BulkInfoProviderImportJob::class), $this->createStub(Part::class)); } public function testConstructor(): void { - $this->assertSame($this->job, $this->jobPart->getJob()); - $this->assertSame($this->part, $this->jobPart->getPart()); - $this->assertEquals(BulkImportPartStatus::PENDING, $this->jobPart->getStatus()); + $this->assertSame($this->createStub(BulkInfoProviderImportJob::class), $this->jobPart->getJob()); + $this->assertSame($this->createStub(Part::class), $this->jobPart->getPart()); + $this->assertSame(BulkImportPartStatus::PENDING, $this->jobPart->getStatus()); $this->assertNull($this->jobPart->getReason()); $this->assertNull($this->jobPart->getCompletedAt()); } public function testGetAndSetJob(): void { - $newJob = $this->createMock(BulkInfoProviderImportJob::class); + $newJob = $this->createStub(BulkInfoProviderImportJob::class); $result = $this->jobPart->setJob($newJob); @@ -63,7 +58,7 @@ class BulkInfoProviderImportJobPartTest extends TestCase public function testGetAndSetPart(): void { - $newPart = $this->createMock(Part::class); + $newPart = $this->createStub(Part::class); $result = $this->jobPart->setPart($newPart); @@ -76,7 +71,7 @@ class BulkInfoProviderImportJobPartTest extends TestCase $result = $this->jobPart->setStatus(BulkImportPartStatus::COMPLETED); $this->assertSame($this->jobPart, $result); - $this->assertEquals(BulkImportPartStatus::COMPLETED, $this->jobPart->getStatus()); + $this->assertSame(BulkImportPartStatus::COMPLETED, $this->jobPart->getStatus()); } public function testGetAndSetReason(): void @@ -86,7 +81,7 @@ class BulkInfoProviderImportJobPartTest extends TestCase $result = $this->jobPart->setReason($reason); $this->assertSame($this->jobPart, $result); - $this->assertEquals($reason, $this->jobPart->getReason()); + $this->assertSame($reason, $this->jobPart->getReason()); } public function testGetAndSetCompletedAt(): void @@ -108,7 +103,7 @@ class BulkInfoProviderImportJobPartTest extends TestCase $afterTime = new \DateTimeImmutable(); $this->assertSame($this->jobPart, $result); - $this->assertEquals(BulkImportPartStatus::COMPLETED, $this->jobPart->getStatus()); + $this->assertSame(BulkImportPartStatus::COMPLETED, $this->jobPart->getStatus()); $this->assertInstanceOf(\DateTimeImmutable::class, $this->jobPart->getCompletedAt()); $this->assertGreaterThanOrEqual($beforeTime, $this->jobPart->getCompletedAt()); $this->assertLessThanOrEqual($afterTime, $this->jobPart->getCompletedAt()); @@ -124,8 +119,8 @@ class BulkInfoProviderImportJobPartTest extends TestCase $afterTime = new \DateTimeImmutable(); $this->assertSame($this->jobPart, $result); - $this->assertEquals(BulkImportPartStatus::SKIPPED, $this->jobPart->getStatus()); - $this->assertEquals($reason, $this->jobPart->getReason()); + $this->assertSame(BulkImportPartStatus::SKIPPED, $this->jobPart->getStatus()); + $this->assertSame($reason, $this->jobPart->getReason()); $this->assertInstanceOf(\DateTimeImmutable::class, $this->jobPart->getCompletedAt()); $this->assertGreaterThanOrEqual($beforeTime, $this->jobPart->getCompletedAt()); $this->assertLessThanOrEqual($afterTime, $this->jobPart->getCompletedAt()); @@ -136,8 +131,8 @@ class BulkInfoProviderImportJobPartTest extends TestCase $result = $this->jobPart->markAsSkipped(); $this->assertSame($this->jobPart, $result); - $this->assertEquals(BulkImportPartStatus::SKIPPED, $this->jobPart->getStatus()); - $this->assertEquals('', $this->jobPart->getReason()); + $this->assertSame(BulkImportPartStatus::SKIPPED, $this->jobPart->getStatus()); + $this->assertSame('', $this->jobPart->getReason()); $this->assertInstanceOf(\DateTimeImmutable::class, $this->jobPart->getCompletedAt()); } @@ -151,8 +146,8 @@ class BulkInfoProviderImportJobPartTest extends TestCase $afterTime = new \DateTimeImmutable(); $this->assertSame($this->jobPart, $result); - $this->assertEquals(BulkImportPartStatus::FAILED, $this->jobPart->getStatus()); - $this->assertEquals($reason, $this->jobPart->getReason()); + $this->assertSame(BulkImportPartStatus::FAILED, $this->jobPart->getStatus()); + $this->assertSame($reason, $this->jobPart->getReason()); $this->assertInstanceOf(\DateTimeImmutable::class, $this->jobPart->getCompletedAt()); $this->assertGreaterThanOrEqual($beforeTime, $this->jobPart->getCompletedAt()); $this->assertLessThanOrEqual($afterTime, $this->jobPart->getCompletedAt()); @@ -163,8 +158,8 @@ class BulkInfoProviderImportJobPartTest extends TestCase $result = $this->jobPart->markAsFailed(); $this->assertSame($this->jobPart, $result); - $this->assertEquals(BulkImportPartStatus::FAILED, $this->jobPart->getStatus()); - $this->assertEquals('', $this->jobPart->getReason()); + $this->assertSame(BulkImportPartStatus::FAILED, $this->jobPart->getStatus()); + $this->assertSame('', $this->jobPart->getReason()); $this->assertInstanceOf(\DateTimeImmutable::class, $this->jobPart->getCompletedAt()); } @@ -176,7 +171,7 @@ class BulkInfoProviderImportJobPartTest extends TestCase $result = $this->jobPart->markAsPending(); $this->assertSame($this->jobPart, $result); - $this->assertEquals(BulkImportPartStatus::PENDING, $this->jobPart->getStatus()); + $this->assertSame(BulkImportPartStatus::PENDING, $this->jobPart->getStatus()); $this->assertNull($this->jobPart->getReason()); $this->assertNull($this->jobPart->getCompletedAt()); } @@ -281,7 +276,7 @@ class BulkInfoProviderImportJobPartTest extends TestCase // After marking as skipped, should have reason and completion time $this->jobPart->markAsSkipped('Skipped reason'); - $this->assertEquals('Skipped reason', $this->jobPart->getReason()); + $this->assertSame('Skipped reason', $this->jobPart->getReason()); $this->assertInstanceOf(\DateTimeImmutable::class, $this->jobPart->getCompletedAt()); // After marking as pending, reason and completion time should be cleared @@ -291,7 +286,7 @@ class BulkInfoProviderImportJobPartTest extends TestCase // After marking as failed, should have reason and completion time $this->jobPart->markAsFailed('Failed reason'); - $this->assertEquals('Failed reason', $this->jobPart->getReason()); + $this->assertSame('Failed reason', $this->jobPart->getReason()); $this->assertInstanceOf(\DateTimeImmutable::class, $this->jobPart->getCompletedAt()); // After marking as completed, should have completion time (reason may remain from previous state) diff --git a/tests/Entity/BulkInfoProviderImportJobTest.php b/tests/Entity/BulkInfoProviderImportJobTest.php index c9841ac4..d1a854cd 100644 --- a/tests/Entity/BulkInfoProviderImportJobTest.php +++ b/tests/Entity/BulkInfoProviderImportJobTest.php @@ -22,6 +22,8 @@ declare(strict_types=1); namespace App\Tests\Entity; +use App\Entity\Parts\Part; +use App\Services\InfoProviderSystem\DTOs\BulkSearchPartResultsDTO; use App\Entity\InfoProviderSystem\BulkImportJobStatus; use App\Entity\InfoProviderSystem\BulkInfoProviderImportJob; use App\Entity\UserSystem\User; @@ -31,7 +33,7 @@ use App\Services\InfoProviderSystem\DTOs\BulkSearchResponseDTO; use App\Services\InfoProviderSystem\DTOs\SearchResultDTO; use PHPUnit\Framework\TestCase; -class BulkInfoProviderImportJobTest extends TestCase +final class BulkInfoProviderImportJobTest extends TestCase { private BulkInfoProviderImportJob $job; private User $user; @@ -45,9 +47,9 @@ class BulkInfoProviderImportJobTest extends TestCase $this->job->setCreatedBy($this->user); } - private function createMockPart(int $id): \App\Entity\Parts\Part + private function createMockPart(int $id): Part { - $part = $this->createMock(\App\Entity\Parts\Part::class); + $part = $this->createMock(Part::class); $part->method('getId')->willReturn($id); $part->method('getName')->willReturn("Test Part {$id}"); return $part; @@ -58,7 +60,7 @@ class BulkInfoProviderImportJobTest extends TestCase $job = new BulkInfoProviderImportJob(); $this->assertInstanceOf(\DateTimeImmutable::class, $job->getCreatedAt()); - $this->assertEquals(BulkImportJobStatus::PENDING, $job->getStatus()); + $this->assertSame(BulkImportJobStatus::PENDING, $job->getStatus()); $this->assertEmpty($job->getPartIds()); $this->assertEmpty($job->getFieldMappings()); $this->assertEmpty($job->getSearchResultsRaw()); @@ -70,14 +72,14 @@ class BulkInfoProviderImportJobTest extends TestCase public function testBasicGettersSetters(): void { $this->job->setName('Test Job'); - $this->assertEquals('Test Job', $this->job->getName()); + $this->assertSame('Test Job', $this->job->getName()); // Test with actual parts - this is what actually works $parts = [$this->createMockPart(1), $this->createMockPart(2), $this->createMockPart(3)]; foreach ($parts as $part) { $this->job->addPart($part); } - $this->assertEquals([1, 2, 3], $this->job->getPartIds()); + $this->assertSame([1, 2, 3], $this->job->getPartIds()); $fieldMappings = [new BulkSearchFieldMappingDTO(field: 'field1', providers: ['provider1', 'provider2'])]; $this->job->setFieldMappings($fieldMappings); @@ -98,24 +100,24 @@ class BulkInfoProviderImportJobTest extends TestCase $this->assertFalse($this->job->isStopped()); $this->job->markAsInProgress(); - $this->assertEquals(BulkImportJobStatus::IN_PROGRESS, $this->job->getStatus()); + $this->assertSame(BulkImportJobStatus::IN_PROGRESS, $this->job->getStatus()); $this->assertTrue($this->job->isInProgress()); $this->assertFalse($this->job->isPending()); $this->job->markAsCompleted(); - $this->assertEquals(BulkImportJobStatus::COMPLETED, $this->job->getStatus()); + $this->assertSame(BulkImportJobStatus::COMPLETED, $this->job->getStatus()); $this->assertTrue($this->job->isCompleted()); $this->assertNotNull($this->job->getCompletedAt()); $job2 = new BulkInfoProviderImportJob(); $job2->markAsFailed(); - $this->assertEquals(BulkImportJobStatus::FAILED, $job2->getStatus()); + $this->assertSame(BulkImportJobStatus::FAILED, $job2->getStatus()); $this->assertTrue($job2->isFailed()); $this->assertNotNull($job2->getCompletedAt()); $job3 = new BulkInfoProviderImportJob(); $job3->markAsStopped(); - $this->assertEquals(BulkImportJobStatus::STOPPED, $job3->getStatus()); + $this->assertSame(BulkImportJobStatus::STOPPED, $job3->getStatus()); $this->assertTrue($job3->isStopped()); $this->assertNotNull($job3->getCompletedAt()); } @@ -139,7 +141,7 @@ class BulkInfoProviderImportJobTest extends TestCase public function testPartCount(): void { - $this->assertEquals(0, $this->job->getPartCount()); + $this->assertSame(0, $this->job->getPartCount()); // Test with actual parts - setPartIds doesn't actually add parts $parts = [ @@ -152,31 +154,31 @@ class BulkInfoProviderImportJobTest extends TestCase foreach ($parts as $part) { $this->job->addPart($part); } - $this->assertEquals(5, $this->job->getPartCount()); + $this->assertSame(5, $this->job->getPartCount()); } public function testResultCount(): void { - $this->assertEquals(0, $this->job->getResultCount()); + $this->assertSame(0, $this->job->getResultCount()); $searchResults = new BulkSearchResponseDTO([ - new \App\Services\InfoProviderSystem\DTOs\BulkSearchPartResultsDTO( + new BulkSearchPartResultsDTO( part: $this->createMockPart(1), searchResults: [new BulkSearchPartResultDTO(searchResult: new SearchResultDTO(provider_key: 'dummy', provider_id: '1234', name: 'Part 1', description: 'A part'))] ), - new \App\Services\InfoProviderSystem\DTOs\BulkSearchPartResultsDTO( + new BulkSearchPartResultsDTO( part: $this->createMockPart(2), searchResults: [new BulkSearchPartResultDTO(searchResult: new SearchResultDTO(provider_key: 'dummy', provider_id: '1234', name: 'Part 2', description: 'A part')), new BulkSearchPartResultDTO(searchResult: new SearchResultDTO(provider_key: 'dummy', provider_id: '5678', name: 'Part 2 Alt', description: 'Another part'))] ), - new \App\Services\InfoProviderSystem\DTOs\BulkSearchPartResultsDTO( + new BulkSearchPartResultsDTO( part: $this->createMockPart(3), searchResults: [] ) ]); $this->job->setSearchResults($searchResults); - $this->assertEquals(3, $this->job->getResultCount()); + $this->assertSame(3, $this->job->getResultCount()); } public function testPartProgressTracking(): void @@ -222,21 +224,21 @@ class BulkInfoProviderImportJobTest extends TestCase $this->job->addPart($part); } - $this->assertEquals(0, $this->job->getCompletedPartsCount()); - $this->assertEquals(0, $this->job->getSkippedPartsCount()); + $this->assertSame(0, $this->job->getCompletedPartsCount()); + $this->assertSame(0, $this->job->getSkippedPartsCount()); $this->job->markPartAsCompleted(1); $this->job->markPartAsCompleted(2); $this->job->markPartAsSkipped(3, 'Error'); - $this->assertEquals(2, $this->job->getCompletedPartsCount()); - $this->assertEquals(1, $this->job->getSkippedPartsCount()); + $this->assertSame(2, $this->job->getCompletedPartsCount()); + $this->assertSame(1, $this->job->getSkippedPartsCount()); } public function testProgressPercentage(): void { $emptyJob = new BulkInfoProviderImportJob(); - $this->assertEquals(100.0, $emptyJob->getProgressPercentage()); + $this->assertEqualsWithDelta(100.0, $emptyJob->getProgressPercentage(), PHP_FLOAT_EPSILON); // Test with actual parts - setPartIds doesn't actually add parts $parts = [ @@ -250,18 +252,18 @@ class BulkInfoProviderImportJobTest extends TestCase $this->job->addPart($part); } - $this->assertEquals(0.0, $this->job->getProgressPercentage()); + $this->assertEqualsWithDelta(0.0, $this->job->getProgressPercentage(), PHP_FLOAT_EPSILON); $this->job->markPartAsCompleted(1); $this->job->markPartAsCompleted(2); - $this->assertEquals(40.0, $this->job->getProgressPercentage()); + $this->assertEqualsWithDelta(40.0, $this->job->getProgressPercentage(), PHP_FLOAT_EPSILON); $this->job->markPartAsSkipped(3, 'Error'); - $this->assertEquals(60.0, $this->job->getProgressPercentage()); + $this->assertEqualsWithDelta(60.0, $this->job->getProgressPercentage(), PHP_FLOAT_EPSILON); $this->job->markPartAsCompleted(4); $this->job->markPartAsCompleted(5); - $this->assertEquals(100.0, $this->job->getProgressPercentage()); + $this->assertEqualsWithDelta(100.0, $this->job->getProgressPercentage(), PHP_FLOAT_EPSILON); } public function testIsAllPartsCompleted(): void @@ -301,8 +303,8 @@ class BulkInfoProviderImportJobTest extends TestCase $this->job->addPart($part); } - $this->assertEquals('info_providers.bulk_import.job_name_template', $this->job->getDisplayNameKey()); - $this->assertEquals(['%count%' => 3], $this->job->getDisplayNameParams()); + $this->assertSame('info_providers.bulk_import.job_name_template', $this->job->getDisplayNameKey()); + $this->assertSame(['%count%' => 3], $this->job->getDisplayNameParams()); } public function testFormattedTimestamp(): void diff --git a/tests/Entity/LogSystem/AbstractLogEntryTest.php b/tests/Entity/LogSystem/AbstractLogEntryTest.php index 3f223693..d99b8e73 100644 --- a/tests/Entity/LogSystem/AbstractLogEntryTest.php +++ b/tests/Entity/LogSystem/AbstractLogEntryTest.php @@ -58,7 +58,7 @@ use App\Entity\UserSystem\Group; use App\Entity\UserSystem\User; use PHPUnit\Framework\TestCase; -class AbstractLogEntryTest extends TestCase +final class AbstractLogEntryTest extends TestCase { public function testSetGetTarget(): void { diff --git a/tests/Entity/LogSystem/LogLevelTest.php b/tests/Entity/LogSystem/LogLevelTest.php index 402942e1..0125b0cd 100644 --- a/tests/Entity/LogSystem/LogLevelTest.php +++ b/tests/Entity/LogSystem/LogLevelTest.php @@ -25,7 +25,7 @@ namespace App\Tests\Entity\LogSystem; use App\Entity\LogSystem\LogLevel; use PHPUnit\Framework\TestCase; -class LogLevelTest extends TestCase +final class LogLevelTest extends TestCase { public function testToPSR3LevelString(): void diff --git a/tests/Entity/LogSystem/LogTargetTypeTest.php b/tests/Entity/LogSystem/LogTargetTypeTest.php index 46682496..06e2ead1 100644 --- a/tests/Entity/LogSystem/LogTargetTypeTest.php +++ b/tests/Entity/LogSystem/LogTargetTypeTest.php @@ -30,7 +30,7 @@ use App\Entity\Parts\Category; use App\Entity\UserSystem\User; use PHPUnit\Framework\TestCase; -class LogTargetTypeTest extends TestCase +final class LogTargetTypeTest extends TestCase { public function testToClass(): void diff --git a/tests/Entity/Parameters/PartParameterTest.php b/tests/Entity/Parameters/PartParameterTest.php index 64550eee..6a07468e 100644 --- a/tests/Entity/Parameters/PartParameterTest.php +++ b/tests/Entity/Parameters/PartParameterTest.php @@ -45,7 +45,7 @@ use PHPUnit\Framework\Attributes\DataProvider; use App\Entity\Parameters\PartParameter; use PHPUnit\Framework\TestCase; -class PartParameterTest extends TestCase +final class PartParameterTest extends TestCase { public static function valueWithUnitDataProvider(): \Iterator { diff --git a/tests/Entity/Parts/InfoProviderReferenceTest.php b/tests/Entity/Parts/InfoProviderReferenceTest.php index a1a8d5de..dcc6a43c 100644 --- a/tests/Entity/Parts/InfoProviderReferenceTest.php +++ b/tests/Entity/Parts/InfoProviderReferenceTest.php @@ -26,7 +26,7 @@ use App\Entity\Parts\InfoProviderReference; use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; use PHPUnit\Framework\TestCase; -class InfoProviderReferenceTest extends TestCase +final class InfoProviderReferenceTest extends TestCase { public function testNoProvider(): void { diff --git a/tests/Entity/Parts/PartAssociationTest.php b/tests/Entity/Parts/PartAssociationTest.php index e002846e..25487d1f 100644 --- a/tests/Entity/Parts/PartAssociationTest.php +++ b/tests/Entity/Parts/PartAssociationTest.php @@ -26,7 +26,7 @@ use App\Entity\Parts\AssociationType; use App\Entity\Parts\PartAssociation; use PHPUnit\Framework\TestCase; -class PartAssociationTest extends TestCase +final class PartAssociationTest extends TestCase { public function testGetTypeTranslationKey(): void diff --git a/tests/Entity/Parts/PartLotTest.php b/tests/Entity/Parts/PartLotTest.php index 30687b72..10cc80b9 100644 --- a/tests/Entity/Parts/PartLotTest.php +++ b/tests/Entity/Parts/PartLotTest.php @@ -26,7 +26,7 @@ use App\Entity\Parts\PartLot; use DateTime; use PHPUnit\Framework\TestCase; -class PartLotTest extends TestCase +final class PartLotTest extends TestCase { public function testIsExpired(): void { diff --git a/tests/Entity/Parts/PartTest.php b/tests/Entity/Parts/PartTest.php index c1ae8935..e855c340 100644 --- a/tests/Entity/Parts/PartTest.php +++ b/tests/Entity/Parts/PartTest.php @@ -29,7 +29,7 @@ use DateTime; use Doctrine\Common\Collections\Collection; use PHPUnit\Framework\TestCase; -class PartTest extends TestCase +final class PartTest extends TestCase { public function testAddRemovePartLot(): void { diff --git a/tests/Entity/PriceSystem/CurrencyTest.php b/tests/Entity/PriceSystem/CurrencyTest.php index 0058d501..018092e5 100644 --- a/tests/Entity/PriceSystem/CurrencyTest.php +++ b/tests/Entity/PriceSystem/CurrencyTest.php @@ -26,7 +26,7 @@ use App\Entity\PriceInformations\Currency; use Brick\Math\BigDecimal; use PHPUnit\Framework\TestCase; -class CurrencyTest extends TestCase +final class CurrencyTest extends TestCase { public function testGetInverseExchangeRate(): void { diff --git a/tests/Entity/PriceSystem/OrderdetailTest.php b/tests/Entity/PriceSystem/OrderdetailTest.php index df86ab34..2becb74e 100644 --- a/tests/Entity/PriceSystem/OrderdetailTest.php +++ b/tests/Entity/PriceSystem/OrderdetailTest.php @@ -27,7 +27,7 @@ use App\Entity\PriceInformations\Pricedetail; use Doctrine\Common\Collections\Collection; use PHPUnit\Framework\TestCase; -class OrderdetailTest extends TestCase +final class OrderdetailTest extends TestCase { public function testAddRemovePricdetails(): void { diff --git a/tests/Entity/PriceSystem/PricedetailTest.php b/tests/Entity/PriceSystem/PricedetailTest.php index 8a3cf328..effe6fd6 100644 --- a/tests/Entity/PriceSystem/PricedetailTest.php +++ b/tests/Entity/PriceSystem/PricedetailTest.php @@ -28,7 +28,7 @@ use App\Entity\PriceInformations\Pricedetail; use Brick\Math\BigDecimal; use PHPUnit\Framework\TestCase; -class PricedetailTest extends TestCase +final class PricedetailTest extends TestCase { public function testGetPricePerUnit(): void { diff --git a/tests/Entity/UserSystem/ApiTokenTypeTest.php b/tests/Entity/UserSystem/ApiTokenTypeTest.php index a8e520f1..7a4506ba 100644 --- a/tests/Entity/UserSystem/ApiTokenTypeTest.php +++ b/tests/Entity/UserSystem/ApiTokenTypeTest.php @@ -25,7 +25,7 @@ namespace App\Tests\Entity\UserSystem; use App\Entity\UserSystem\ApiTokenType; use PHPUnit\Framework\TestCase; -class ApiTokenTypeTest extends TestCase +final class ApiTokenTypeTest extends TestCase { public function testGetTokenPrefix(): void diff --git a/tests/Entity/UserSystem/PermissionDataTest.php b/tests/Entity/UserSystem/PermissionDataTest.php index 4fd8c5ce..3d250a81 100644 --- a/tests/Entity/UserSystem/PermissionDataTest.php +++ b/tests/Entity/UserSystem/PermissionDataTest.php @@ -25,7 +25,7 @@ namespace App\Tests\Entity\UserSystem; use App\Entity\UserSystem\PermissionData; use PHPUnit\Framework\TestCase; -class PermissionDataTest extends TestCase +final class PermissionDataTest extends TestCase { public function testGetSetIs(): void diff --git a/tests/Entity/UserSystem/UserTest.php b/tests/Entity/UserSystem/UserTest.php index a4349e1d..12797ad1 100644 --- a/tests/Entity/UserSystem/UserTest.php +++ b/tests/Entity/UserSystem/UserTest.php @@ -31,7 +31,7 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\Uid\Uuid; use Webauthn\TrustPath\EmptyTrustPath; -class UserTest extends TestCase +final class UserTest extends TestCase { public function testGetFullName(): void { diff --git a/tests/EnvVarProcessors/AddSlashEnvVarProcessorTest.php b/tests/EnvVarProcessors/AddSlashEnvVarProcessorTest.php index 4099f0ee..c4c9f04b 100644 --- a/tests/EnvVarProcessors/AddSlashEnvVarProcessorTest.php +++ b/tests/EnvVarProcessors/AddSlashEnvVarProcessorTest.php @@ -1,4 +1,7 @@ . */ - namespace App\Tests\EnvVarProcessors; use App\EnvVarProcessors\AddSlashEnvVarProcessor; use PHPUnit\Framework\TestCase; -class AddSlashEnvVarProcessorTest extends TestCase +final class AddSlashEnvVarProcessorTest extends TestCase { protected AddSlashEnvVarProcessor $processor; diff --git a/tests/EventListener/RegisterSynonymsAsTranslationParametersTest.php b/tests/EventListener/RegisterSynonymsAsTranslationParametersTest.php index 58573ae6..3a35c670 100644 --- a/tests/EventListener/RegisterSynonymsAsTranslationParametersTest.php +++ b/tests/EventListener/RegisterSynonymsAsTranslationParametersTest.php @@ -1,4 +1,7 @@ . */ - namespace App\Tests\EventListener; use App\EventListener\RegisterSynonymsAsTranslationParametersListener; use PHPUnit\Framework\TestCase; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; -class RegisterSynonymsAsTranslationParametersTest extends KernelTestCase +final class RegisterSynonymsAsTranslationParametersTest extends KernelTestCase { private RegisterSynonymsAsTranslationParametersListener $listener; diff --git a/tests/EventSubscriber/PasswordChangeNeededSubscriberTest.php b/tests/EventSubscriber/PasswordChangeNeededSubscriberTest.php index 0eaf931c..3d2089e1 100644 --- a/tests/EventSubscriber/PasswordChangeNeededSubscriberTest.php +++ b/tests/EventSubscriber/PasswordChangeNeededSubscriberTest.php @@ -33,7 +33,7 @@ use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage; use Symfony\Component\Uid\Uuid; use Webauthn\TrustPath\EmptyTrustPath; -class PasswordChangeNeededSubscriberTest extends TestCase +final class PasswordChangeNeededSubscriberTest extends TestCase { public function testTFARedirectNeeded(): void { diff --git a/tests/Exceptions/TwigModeExceptionTest.php b/tests/Exceptions/TwigModeExceptionTest.php index 686a87a2..09468291 100644 --- a/tests/Exceptions/TwigModeExceptionTest.php +++ b/tests/Exceptions/TwigModeExceptionTest.php @@ -27,7 +27,7 @@ use PHPUnit\Framework\TestCase; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; use Twig\Error\Error; -class TwigModeExceptionTest extends KernelTestCase +final class TwigModeExceptionTest extends KernelTestCase { private string $projectPath; diff --git a/tests/Form/InfoProviderSystem/GlobalFieldMappingTypeTest.php b/tests/Form/InfoProviderSystem/GlobalFieldMappingTypeTest.php index 89e362e4..07106505 100644 --- a/tests/Form/InfoProviderSystem/GlobalFieldMappingTypeTest.php +++ b/tests/Form/InfoProviderSystem/GlobalFieldMappingTypeTest.php @@ -29,7 +29,7 @@ use Symfony\Component\Form\FormFactoryInterface; #[Group("slow")] #[Group("DB")] -class GlobalFieldMappingTypeTest extends KernelTestCase +final class GlobalFieldMappingTypeTest extends KernelTestCase { private FormFactoryInterface $formFactory; diff --git a/tests/Helpers/BBCodeToMarkdownConverterTest.php b/tests/Helpers/BBCodeToMarkdownConverterTest.php index 9506cba4..07fca505 100644 --- a/tests/Helpers/BBCodeToMarkdownConverterTest.php +++ b/tests/Helpers/BBCodeToMarkdownConverterTest.php @@ -26,7 +26,7 @@ use PHPUnit\Framework\Attributes\DataProvider; use App\Helpers\BBCodeToMarkdownConverter; use PHPUnit\Framework\TestCase; -class BBCodeToMarkdownConverterTest extends TestCase +final class BBCodeToMarkdownConverterTest extends TestCase { protected BBCodeToMarkdownConverter $converter; diff --git a/tests/Helpers/IPAnonymizerTest.php b/tests/Helpers/IPAnonymizerTest.php index e16368eb..7efd27ac 100644 --- a/tests/Helpers/IPAnonymizerTest.php +++ b/tests/Helpers/IPAnonymizerTest.php @@ -26,7 +26,7 @@ use PHPUnit\Framework\Attributes\DataProvider; use App\Helpers\IPAnonymizer; use PHPUnit\Framework\TestCase; -class IPAnonymizerTest extends TestCase +final class IPAnonymizerTest extends TestCase { public static function anonymizeDataProvider(): \Generator diff --git a/tests/Helpers/Projects/ProjectBuildRequestTest.php b/tests/Helpers/Projects/ProjectBuildRequestTest.php index 1158d89a..c1fd1498 100644 --- a/tests/Helpers/Projects/ProjectBuildRequestTest.php +++ b/tests/Helpers/Projects/ProjectBuildRequestTest.php @@ -30,7 +30,7 @@ use App\Entity\ProjectSystem\ProjectBOMEntry; use App\Helpers\Projects\ProjectBuildRequest; use PHPUnit\Framework\TestCase; -class ProjectBuildRequestTest extends TestCase +final class ProjectBuildRequestTest extends TestCase { /** @var Project */ diff --git a/tests/Helpers/TreeViewNodeTest.php b/tests/Helpers/TreeViewNodeTest.php index 9005651d..b1179f6c 100644 --- a/tests/Helpers/TreeViewNodeTest.php +++ b/tests/Helpers/TreeViewNodeTest.php @@ -25,7 +25,7 @@ namespace App\Tests\Helpers; use App\Helpers\Trees\TreeViewNode; use PHPUnit\Framework\TestCase; -class TreeViewNodeTest extends TestCase +final class TreeViewNodeTest extends TestCase { /** * @var TreeViewNode diff --git a/tests/Helpers/TrinaryLogicHelperTest.php b/tests/Helpers/TrinaryLogicHelperTest.php index 3082571b..4b8c9f01 100644 --- a/tests/Helpers/TrinaryLogicHelperTest.php +++ b/tests/Helpers/TrinaryLogicHelperTest.php @@ -25,7 +25,7 @@ namespace App\Tests\Helpers; use App\Helpers\TrinaryLogicHelper; use PHPUnit\Framework\TestCase; -class TrinaryLogicHelperTest extends TestCase +final class TrinaryLogicHelperTest extends TestCase { public function testNot() diff --git a/tests/Repository/AttachmentContainingDBElementRepositoryTest.php b/tests/Repository/AttachmentContainingDBElementRepositoryTest.php index f61750d9..38aca071 100644 --- a/tests/Repository/AttachmentContainingDBElementRepositoryTest.php +++ b/tests/Repository/AttachmentContainingDBElementRepositoryTest.php @@ -28,7 +28,7 @@ use Doctrine\ORM\EntityManagerInterface; use PHPUnit\Framework\TestCase; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; -class AttachmentContainingDBElementRepositoryTest extends KernelTestCase +final class AttachmentContainingDBElementRepositoryTest extends KernelTestCase { private EntityManagerInterface $entityManager; diff --git a/tests/Repository/DBElementRepositoryTest.php b/tests/Repository/DBElementRepositoryTest.php index 05ede7e2..5f1ac0e1 100644 --- a/tests/Repository/DBElementRepositoryTest.php +++ b/tests/Repository/DBElementRepositoryTest.php @@ -33,7 +33,7 @@ use Doctrine\ORM\EntityManagerInterface; use PHPUnit\Framework\TestCase; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; -class DBElementRepositoryTest extends KernelTestCase +final class DBElementRepositoryTest extends KernelTestCase { private EntityManagerInterface $entityManager; diff --git a/tests/Repository/LogEntryRepositoryTest.php b/tests/Repository/LogEntryRepositoryTest.php index f6cc991d..46093a9e 100644 --- a/tests/Repository/LogEntryRepositoryTest.php +++ b/tests/Repository/LogEntryRepositoryTest.php @@ -33,7 +33,7 @@ use Doctrine\ORM\EntityManagerInterface; use PHPUnit\Framework\TestCase; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; -class LogEntryRepositoryTest extends KernelTestCase +final class LogEntryRepositoryTest extends KernelTestCase { private EntityManagerInterface $entityManager; @@ -75,6 +75,7 @@ class LogEntryRepositoryTest extends KernelTestCase //We have a edit log entry for the category with ID 1 $category = $this->entityManager->find(Category::class, 1); $adminUser = $this->entityManager->getRepository(User::class)->findOneBy(['name' => 'admin']); + $this->assertInstanceOf(Category::class, $category); $user = $this->repo->getLastEditingUser($category); @@ -83,6 +84,7 @@ class LogEntryRepositoryTest extends KernelTestCase //For the category 2, the user must be null $category = $this->entityManager->find(Category::class, 2); + $this->assertInstanceOf(Category::class, $category); $user = $this->repo->getLastEditingUser($category); $this->assertNull($user); } @@ -92,6 +94,7 @@ class LogEntryRepositoryTest extends KernelTestCase //We have a edit log entry for the category with ID 1 $category = $this->entityManager->find(Category::class, 1); $adminUser = $this->entityManager->getRepository(User::class)->findOneBy(['name' => 'admin']); + $this->assertInstanceOf(Category::class, $category); $user = $this->repo->getCreatingUser($category); @@ -100,6 +103,7 @@ class LogEntryRepositoryTest extends KernelTestCase //For the category 2, the user must be null $category = $this->entityManager->find(Category::class, 2); + $this->assertInstanceOf(Category::class, $category); $user = $this->repo->getCreatingUser($category); $this->assertNull($user); } @@ -119,6 +123,7 @@ class LogEntryRepositoryTest extends KernelTestCase public function testGetElementExistedAtTimestamp(): void { $part = $this->entityManager->find(Part::class, 3); + $this->assertInstanceOf(Part::class, $part); //Assume that the part is existing now $this->assertTrue($this->repo->getElementExistedAtTimestamp($part, new \DateTimeImmutable())); @@ -130,6 +135,7 @@ class LogEntryRepositoryTest extends KernelTestCase public function testGetElementHistory(): void { $category = $this->entityManager->find(Category::class, 1); + $this->assertInstanceOf(Category::class, $category); $history = $this->repo->getElementHistory($category); @@ -141,6 +147,7 @@ class LogEntryRepositoryTest extends KernelTestCase public function testGetTimetravelDataForElement(): void { $category = $this->entityManager->find(Category::class, 1); + $this->assertInstanceOf(Category::class, $category); $data = $this->repo->getTimetravelDataForElement($category, new \DateTimeImmutable('2020-01-01')); //The data must contain only ElementChangedLogEntry diff --git a/tests/Repository/NamedDBElementRepositoryTest.php b/tests/Repository/NamedDBElementRepositoryTest.php index 117d7d0e..dc8b2a5c 100644 --- a/tests/Repository/NamedDBElementRepositoryTest.php +++ b/tests/Repository/NamedDBElementRepositoryTest.php @@ -30,7 +30,7 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; /** * @Group DB */ -class NamedDBElementRepositoryTest extends WebTestCase +final class NamedDBElementRepositoryTest extends WebTestCase { /** * @var StructuralDBElementRepository diff --git a/tests/Repository/PartRepositoryTest.php b/tests/Repository/PartRepositoryTest.php index 68b75abb..c2e7858a 100644 --- a/tests/Repository/PartRepositoryTest.php +++ b/tests/Repository/PartRepositoryTest.php @@ -60,8 +60,8 @@ final class PartRepositoryTest extends TestCase $classMetadata = new ClassMetadata(Part::class); $emMock->method('getClassMetadata')->with(Part::class)->willReturn($classMetadata); - $translatorMock = $this->createMock(TranslatorInterface::class); - $ipnSuggestSettings = $this->createMock(IpnSuggestSettings::class); + $translatorMock = $this->createStub(TranslatorInterface::class); + $ipnSuggestSettings = $this->createStub(IpnSuggestSettings::class); $repo = $this->getMockBuilder(PartRepository::class) ->setConstructorArgs([$emMock, $translatorMock, $ipnSuggestSettings]) @@ -120,7 +120,7 @@ final class PartRepositoryTest extends TestCase return $id; }); - $ipnSuggestSettings = $this->createMock(IpnSuggestSettings::class); + $ipnSuggestSettings = $this->createStub(IpnSuggestSettings::class); $ipnSuggestSettings->suggestPartDigits = 4; $ipnSuggestSettings->useDuplicateDescription = false; @@ -204,7 +204,7 @@ final class PartRepositoryTest extends TestCase return $id; }); - $ipnSuggestSettings = $this->createMock(IpnSuggestSettings::class); + $ipnSuggestSettings = $this->createStub(IpnSuggestSettings::class); $ipnSuggestSettings->suggestPartDigits = 4; $ipnSuggestSettings->useDuplicateDescription = false; diff --git a/tests/Repository/StructuralDBElementRepositoryTest.php b/tests/Repository/StructuralDBElementRepositoryTest.php index 5ab8b788..16e92837 100644 --- a/tests/Repository/StructuralDBElementRepositoryTest.php +++ b/tests/Repository/StructuralDBElementRepositoryTest.php @@ -22,6 +22,7 @@ declare(strict_types=1); namespace App\Tests\Repository; +use App\Entity\Base\AbstractStructuralDBElement; use App\Entity\Attachments\AttachmentType; use App\Helpers\Trees\TreeViewNode; use App\Repository\StructuralDBElementRepository; @@ -30,7 +31,7 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; /** * @Group DB */ -class StructuralDBElementRepositoryTest extends WebTestCase +final class StructuralDBElementRepositoryTest extends WebTestCase { /** * @var StructuralDBElementRepository @@ -108,6 +109,7 @@ class StructuralDBElementRepositoryTest extends WebTestCase { //List all nodes that are children to Node 1 $node1 = $this->repo->find(1); + $this->assertInstanceOf(AbstractStructuralDBElement::class, $node1); $nodes = $this->repo->getFlatList($node1); $this->assertCount(3, $nodes); diff --git a/tests/Repository/UserRepositoryTest.php b/tests/Repository/UserRepositoryTest.php index 67a77aea..24a2d657 100644 --- a/tests/Repository/UserRepositoryTest.php +++ b/tests/Repository/UserRepositoryTest.php @@ -27,7 +27,7 @@ use App\Repository\UserRepository; use PHPUnit\Framework\TestCase; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class UserRepositoryTest extends WebTestCase +final class UserRepositoryTest extends WebTestCase { /** diff --git a/tests/Security/EnsureSAMLUserForSAMLLoginCheckerTest.php b/tests/Security/EnsureSAMLUserForSAMLLoginCheckerTest.php index c9a14426..2fedf108 100644 --- a/tests/Security/EnsureSAMLUserForSAMLLoginCheckerTest.php +++ b/tests/Security/EnsureSAMLUserForSAMLLoginCheckerTest.php @@ -30,7 +30,7 @@ use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; use Symfony\Component\Security\Core\Event\AuthenticationSuccessEvent; use Symfony\Component\Security\Core\Exception\CustomUserMessageAccountStatusException; -class EnsureSAMLUserForSAMLLoginCheckerTest extends WebTestCase +final class EnsureSAMLUserForSAMLLoginCheckerTest extends WebTestCase { /** @var EnsureSAMLUserForSAMLLoginChecker */ protected $service; diff --git a/tests/Security/SamlUserFactoryTest.php b/tests/Security/SamlUserFactoryTest.php index 7780b4be..b975ca0d 100644 --- a/tests/Security/SamlUserFactoryTest.php +++ b/tests/Security/SamlUserFactoryTest.php @@ -26,7 +26,7 @@ use App\Entity\UserSystem\User; use App\Security\SamlUserFactory; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class SamlUserFactoryTest extends WebTestCase +final class SamlUserFactoryTest extends WebTestCase { /** @var SamlUserFactory */ diff --git a/tests/Security/UserCheckerTest.php b/tests/Security/UserCheckerTest.php index 35c2e1e5..e32d5bfe 100644 --- a/tests/Security/UserCheckerTest.php +++ b/tests/Security/UserCheckerTest.php @@ -27,7 +27,7 @@ use App\Security\UserChecker; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use Symfony\Component\Security\Core\Exception\CustomUserMessageAccountStatusException; -class UserCheckerTest extends WebTestCase +final class UserCheckerTest extends WebTestCase { protected $service; diff --git a/tests/Serializer/BigNumberNormalizerTest.php b/tests/Serializer/BigNumberNormalizerTest.php index f64347ee..509d6352 100644 --- a/tests/Serializer/BigNumberNormalizerTest.php +++ b/tests/Serializer/BigNumberNormalizerTest.php @@ -29,7 +29,7 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use Brick\Math\BigDecimal; use Brick\Math\BigNumber; -class BigNumberNormalizerTest extends WebTestCase +final class BigNumberNormalizerTest extends WebTestCase { /** @var BigNumberNormalizer */ protected $service; diff --git a/tests/Serializer/PartNormalizerTest.php b/tests/Serializer/PartNormalizerTest.php index 9baff750..2f07f36d 100644 --- a/tests/Serializer/PartNormalizerTest.php +++ b/tests/Serializer/PartNormalizerTest.php @@ -31,7 +31,7 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use Symfony\Component\Serializer\Normalizer\DenormalizerInterface; use Symfony\Component\Serializer\Normalizer\NormalizerInterface; -class PartNormalizerTest extends WebTestCase +final class PartNormalizerTest extends WebTestCase { /** @var PartNormalizer */ protected DenormalizerInterface&NormalizerInterface $service; diff --git a/tests/Serializer/StructuralElementDenormalizerTest.php b/tests/Serializer/StructuralElementDenormalizerTest.php index 31c9f0bb..e8e46611 100644 --- a/tests/Serializer/StructuralElementDenormalizerTest.php +++ b/tests/Serializer/StructuralElementDenormalizerTest.php @@ -27,7 +27,7 @@ use App\Entity\Parts\Category; use App\Serializer\StructuralElementDenormalizer; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class StructuralElementDenormalizerTest extends WebTestCase +final class StructuralElementDenormalizerTest extends WebTestCase { /** @var StructuralElementDenormalizer */ diff --git a/tests/Serializer/StructuralElementFromNameDenormalizerTest.php b/tests/Serializer/StructuralElementFromNameDenormalizerTest.php index b344508c..b4bdcdac 100644 --- a/tests/Serializer/StructuralElementFromNameDenormalizerTest.php +++ b/tests/Serializer/StructuralElementFromNameDenormalizerTest.php @@ -26,7 +26,7 @@ use App\Entity\Parts\Category; use App\Serializer\StructuralElementFromNameDenormalizer; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class StructuralElementFromNameDenormalizerTest extends WebTestCase +final class StructuralElementFromNameDenormalizerTest extends WebTestCase { /** @var StructuralElementFromNameDenormalizer */ diff --git a/tests/Serializer/StructuralElementNormalizerTest.php b/tests/Serializer/StructuralElementNormalizerTest.php index 79f739fa..4b335bcd 100644 --- a/tests/Serializer/StructuralElementNormalizerTest.php +++ b/tests/Serializer/StructuralElementNormalizerTest.php @@ -30,7 +30,7 @@ use App\Serializer\StructuralElementNormalizer; use PHPUnit\Framework\TestCase; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class StructuralElementNormalizerTest extends WebTestCase +final class StructuralElementNormalizerTest extends WebTestCase { /** @var StructuralElementNormalizer */ diff --git a/tests/Services/Attachments/AttachmentPathResolverTest.php b/tests/Services/Attachments/AttachmentPathResolverTest.php index 69658e13..b145e482 100644 --- a/tests/Services/Attachments/AttachmentPathResolverTest.php +++ b/tests/Services/Attachments/AttachmentPathResolverTest.php @@ -28,10 +28,8 @@ use App\Services\Attachments\AttachmentPathResolver; use const DIRECTORY_SEPARATOR; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class AttachmentPathResolverTest extends WebTestCase +final class AttachmentPathResolverTest extends WebTestCase { - protected string $media_path; - protected string $footprint_path; protected $projectDir_orig; protected $projectDir; /** @@ -46,8 +44,8 @@ class AttachmentPathResolverTest extends WebTestCase $this->projectDir_orig = realpath(self::$kernel->getProjectDir()); $this->projectDir = str_replace('\\', '/', $this->projectDir_orig); - $this->media_path = $this->projectDir.'/public/media'; - $this->footprint_path = $this->projectDir.'/public/img/footprints'; + $media_path = $this->projectDir.'/public/media'; + $footprint_path = $this->projectDir.'/public/img/footprints'; $this->service = self::getContainer()->get(AttachmentPathResolver::class); } diff --git a/tests/Services/Attachments/AttachmentURLGeneratorTest.php b/tests/Services/Attachments/AttachmentURLGeneratorTest.php index e9e6d992..4359c1b9 100644 --- a/tests/Services/Attachments/AttachmentURLGeneratorTest.php +++ b/tests/Services/Attachments/AttachmentURLGeneratorTest.php @@ -26,7 +26,7 @@ use PHPUnit\Framework\Attributes\DataProvider; use App\Services\Attachments\AttachmentURLGenerator; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class AttachmentURLGeneratorTest extends WebTestCase +final class AttachmentURLGeneratorTest extends WebTestCase { protected const PUBLIC_DIR = '/public'; diff --git a/tests/Services/Attachments/BuiltinAttachmentsFinderTest.php b/tests/Services/Attachments/BuiltinAttachmentsFinderTest.php index 80c699ac..5198ddea 100644 --- a/tests/Services/Attachments/BuiltinAttachmentsFinderTest.php +++ b/tests/Services/Attachments/BuiltinAttachmentsFinderTest.php @@ -26,7 +26,7 @@ use PHPUnit\Framework\Attributes\DataProvider; use App\Services\Attachments\BuiltinAttachmentsFinder; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class BuiltinAttachmentsFinderTest extends WebTestCase +final class BuiltinAttachmentsFinderTest extends WebTestCase { protected static array $mock_list = [ '%FOOTPRINTS%/test/test.jpg', '%FOOTPRINTS%/test/test.png', '%FOOTPRINTS%/123.jpg', '%FOOTPRINTS%/123.jpeg', diff --git a/tests/Services/Attachments/FileTypeFilterToolsTest.php b/tests/Services/Attachments/FileTypeFilterToolsTest.php index 1b85eaeb..f089feec 100644 --- a/tests/Services/Attachments/FileTypeFilterToolsTest.php +++ b/tests/Services/Attachments/FileTypeFilterToolsTest.php @@ -26,7 +26,7 @@ use PHPUnit\Framework\Attributes\DataProvider; use App\Services\Attachments\FileTypeFilterTools; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class FileTypeFilterToolsTest extends WebTestCase +final class FileTypeFilterToolsTest extends WebTestCase { protected static $service; diff --git a/tests/Services/ElementTypeNameGeneratorTest.php b/tests/Services/ElementTypeNameGeneratorTest.php index 8739dd06..21797137 100644 --- a/tests/Services/ElementTypeNameGeneratorTest.php +++ b/tests/Services/ElementTypeNameGeneratorTest.php @@ -35,7 +35,7 @@ use App\Services\Formatters\AmountFormatter; use App\Settings\SynonymSettings; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class ElementTypeNameGeneratorTest extends WebTestCase +final class ElementTypeNameGeneratorTest extends WebTestCase { protected ElementTypeNameGenerator $service; private SynonymSettings $synonymSettings; diff --git a/tests/Services/ElementTypesTest.php b/tests/Services/ElementTypesTest.php index d4fa77ff..15e5d8bb 100644 --- a/tests/Services/ElementTypesTest.php +++ b/tests/Services/ElementTypesTest.php @@ -1,4 +1,7 @@ . */ - namespace App\Tests\Services; use App\Entity\Parameters\CategoryParameter; @@ -26,7 +28,7 @@ use App\Exceptions\EntityNotSupportedException; use App\Services\ElementTypes; use PHPUnit\Framework\TestCase; -class ElementTypesTest extends TestCase +final class ElementTypesTest extends TestCase { public function testFromClass(): void diff --git a/tests/Services/EntityMergers/Mergers/EntityMergerHelperTraitTest.php b/tests/Services/EntityMergers/Mergers/EntityMergerHelperTraitTest.php index 22fa220b..f5fd8334 100644 --- a/tests/Services/EntityMergers/Mergers/EntityMergerHelperTraitTest.php +++ b/tests/Services/EntityMergers/Mergers/EntityMergerHelperTraitTest.php @@ -28,7 +28,7 @@ use PHPUnit\Framework\TestCase; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; use Symfony\Component\PropertyAccess\PropertyAccessorInterface; -class EntityMergerHelperTraitTest extends KernelTestCase +final class EntityMergerHelperTraitTest extends KernelTestCase { use EntityMergerHelperTrait; diff --git a/tests/Services/EntityMergers/Mergers/PartMergerTest.php b/tests/Services/EntityMergers/Mergers/PartMergerTest.php index 7db4ddd6..f6a75790 100644 --- a/tests/Services/EntityMergers/Mergers/PartMergerTest.php +++ b/tests/Services/EntityMergers/Mergers/PartMergerTest.php @@ -36,7 +36,7 @@ use App\Services\EntityMergers\Mergers\PartMerger; use PHPUnit\Framework\TestCase; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; -class PartMergerTest extends KernelTestCase +final class PartMergerTest extends KernelTestCase { /** @var PartMerger|null */ diff --git a/tests/Services/Formatters/AmountFormatterTest.php b/tests/Services/Formatters/AmountFormatterTest.php index 40f9b7cf..9fdeb441 100644 --- a/tests/Services/Formatters/AmountFormatterTest.php +++ b/tests/Services/Formatters/AmountFormatterTest.php @@ -27,7 +27,7 @@ use App\Services\Formatters\AmountFormatter; use InvalidArgumentException; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class AmountFormatterTest extends WebTestCase +final class AmountFormatterTest extends WebTestCase { /** * @var AmountFormatter diff --git a/tests/Services/Formatters/SIFormatterTest.php b/tests/Services/Formatters/SIFormatterTest.php index 79668589..62ca0187 100644 --- a/tests/Services/Formatters/SIFormatterTest.php +++ b/tests/Services/Formatters/SIFormatterTest.php @@ -25,7 +25,7 @@ namespace App\Tests\Services\Formatters; use App\Services\Formatters\SIFormatter; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class SIFormatterTest extends WebTestCase +final class SIFormatterTest extends WebTestCase { /** * @var SIFormatter diff --git a/tests/Services/ImportExportSystem/BOMImporterTest.php b/tests/Services/ImportExportSystem/BOMImporterTest.php index a8841f17..5a9d4121 100644 --- a/tests/Services/ImportExportSystem/BOMImporterTest.php +++ b/tests/Services/ImportExportSystem/BOMImporterTest.php @@ -22,6 +22,8 @@ declare(strict_types=1); */ namespace App\Tests\Services\ImportExportSystem; +use App\Entity\PriceInformations\Orderdetail; +use App\Entity\Parts\Category; use App\Entity\Parts\Part; use App\Entity\Parts\Supplier; use App\Entity\ProjectSystem\Project; @@ -31,7 +33,7 @@ use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use Symfony\Component\HttpFoundation\File\File; -class BOMImporterTest extends WebTestCase +final class BOMImporterTest extends WebTestCase { /** @@ -391,7 +393,7 @@ class BOMImporterTest extends WebTestCase // Check first entry $this->assertEquals('R1,R2', $bom_entries[0]->getMountnames()); - $this->assertEquals(2.0, $bom_entries[0]->getQuantity()); + $this->assertEqualsWithDelta(2.0, $bom_entries[0]->getQuantity(), PHP_FLOAT_EPSILON); $this->assertEquals('CRCW080510K0FKEA (R_0805_2012Metric)', $bom_entries[0]->getName()); $this->assertStringContainsString('Value: 10k', $bom_entries[0]->getComment()); $this->assertStringContainsString('MPN: CRCW080510K0FKEA', $bom_entries[0]->getComment()); @@ -402,7 +404,7 @@ class BOMImporterTest extends WebTestCase // Check second entry $this->assertEquals('C1', $bom_entries[1]->getMountnames()); - $this->assertEquals(1.0, $bom_entries[1]->getQuantity()); + $this->assertEqualsWithDelta(1.0, $bom_entries[1]->getQuantity(), PHP_FLOAT_EPSILON); $this->assertStringContainsString('LCSC SPN: C789012', $bom_entries[1]->getComment()); $this->assertStringContainsString('Mouser SPN: 80-CL21A104KOCLRNC', $bom_entries[1]->getComment()); @@ -542,7 +544,7 @@ class BOMImporterTest extends WebTestCase $this->assertCount(1, $bom_entries); // Should merge into one entry $this->assertEquals('R1,R2', $bom_entries[0]->getMountnames()); - $this->assertEquals(2.0, $bom_entries[0]->getQuantity()); + $this->assertEqualsWithDelta(2.0, $bom_entries[0]->getQuantity(), PHP_FLOAT_EPSILON); $this->assertEquals('CRCW080510K0FKEA', $bom_entries[0]->getName()); } @@ -630,7 +632,7 @@ class BOMImporterTest extends WebTestCase $this->entityManager->persist($part); // Create orderdetail linking the part to a supplier SPN - $orderdetail = new \App\Entity\PriceInformations\Orderdetail(); + $orderdetail = new Orderdetail(); $orderdetail->setPart($part); $orderdetail->setSupplier($lcscSupplier); $orderdetail->setSupplierpartnr('C123456'); @@ -664,7 +666,7 @@ class BOMImporterTest extends WebTestCase $this->assertSame($part, $bom_entries[0]->getPart()); $this->assertEquals('Test Resistor 10k 0805', $bom_entries[0]->getName()); $this->assertEquals('R1,R2', $bom_entries[0]->getMountnames()); - $this->assertEquals(2.0, $bom_entries[0]->getQuantity()); + $this->assertEqualsWithDelta(2.0, $bom_entries[0]->getQuantity(), PHP_FLOAT_EPSILON); $this->assertStringContainsString('LCSC SPN: C123456', $bom_entries[0]->getComment()); $this->assertStringContainsString('Part-DB ID: ' . $part->getID(), $bom_entries[0]->getComment()); @@ -691,7 +693,7 @@ class BOMImporterTest extends WebTestCase $part1->setCategory($this->getDefaultCategory($this->entityManager)); $this->entityManager->persist($part1); - $orderdetail1 = new \App\Entity\PriceInformations\Orderdetail(); + $orderdetail1 = new Orderdetail(); $orderdetail1->setPart($part1); $orderdetail1->setSupplier($lcscSupplier); $orderdetail1->setSupplierpartnr('C123456'); @@ -703,7 +705,7 @@ class BOMImporterTest extends WebTestCase $part2->setCategory($this->getDefaultCategory($this->entityManager)); $this->entityManager->persist($part2); - $orderdetail2 = new \App\Entity\PriceInformations\Orderdetail(); + $orderdetail2 = new Orderdetail(); $orderdetail2->setPart($part2); $orderdetail2->setSupplier($mouserSupplier); $orderdetail2->setSupplierpartnr('789-CAP100NF'); @@ -794,12 +796,12 @@ class BOMImporterTest extends WebTestCase private function getDefaultCategory(EntityManagerInterface $entityManager) { // Get the first available category or create a default one - $categoryRepo = $entityManager->getRepository(\App\Entity\Parts\Category::class); + $categoryRepo = $entityManager->getRepository(Category::class); $categories = $categoryRepo->findAll(); if (empty($categories)) { // Create a default category if none exists - $category = new \App\Entity\Parts\Category(); + $category = new Category(); $category->setName('Default Category'); $entityManager->persist($category); $entityManager->flush(); diff --git a/tests/Services/ImportExportSystem/BOMValidationServiceTest.php b/tests/Services/ImportExportSystem/BOMValidationServiceTest.php index 055db8b4..a6c103db 100644 --- a/tests/Services/ImportExportSystem/BOMValidationServiceTest.php +++ b/tests/Services/ImportExportSystem/BOMValidationServiceTest.php @@ -32,18 +32,16 @@ use Symfony\Contracts\Translation\TranslatorInterface; /** * @see \App\Services\ImportExportSystem\BOMValidationService */ -class BOMValidationServiceTest extends WebTestCase +final class BOMValidationServiceTest extends WebTestCase { private BOMValidationService $validationService; - private EntityManagerInterface $entityManager; - private TranslatorInterface $translator; protected function setUp(): void { self::bootKernel(); - $this->entityManager = self::getContainer()->get(EntityManagerInterface::class); - $this->translator = self::getContainer()->get(TranslatorInterface::class); - $this->validationService = new BOMValidationService($this->entityManager, $this->translator); + $entityManager = self::getContainer()->get(EntityManagerInterface::class); + $translator = self::getContainer()->get(TranslatorInterface::class); + $this->validationService = new BOMValidationService($entityManager, $translator); } public function testValidateBOMEntryWithValidData(): void @@ -244,7 +242,7 @@ class BOMValidationServiceTest extends WebTestCase $this->assertTrue($result['is_valid']); $this->assertCount(1, $result['info']); - $this->assertStringContainsString('library prefix', $result['info'][0]); + $this->assertStringContainsString('library prefix', (string) $result['info'][0]); } public function testValidateBOMEntriesWithMultipleEntries(): void @@ -314,7 +312,7 @@ class BOMValidationServiceTest extends WebTestCase $this->assertEquals(2, $stats['error_count']); $this->assertEquals(1, $stats['warning_count']); $this->assertEquals(2, $stats['info_count']); - $this->assertEquals(80.0, $stats['success_rate']); + $this->assertEqualsWithDelta(80.0, $stats['success_rate'], PHP_FLOAT_EPSILON); } public function testGetErrorMessage(): void @@ -344,6 +342,6 @@ class BOMValidationServiceTest extends WebTestCase $message = $this->validationService->getErrorMessage($validation_result); - $this->assertEquals('', $message); + $this->assertSame('', $message); } } \ No newline at end of file diff --git a/tests/Services/ImportExportSystem/EntityExporterTest.php b/tests/Services/ImportExportSystem/EntityExporterTest.php index e9b924b1..8029a2d9 100644 --- a/tests/Services/ImportExportSystem/EntityExporterTest.php +++ b/tests/Services/ImportExportSystem/EntityExporterTest.php @@ -28,7 +28,7 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use Symfony\Component\HttpFoundation\Request; use PhpOffice\PhpSpreadsheet\IOFactory; -class EntityExporterTest extends WebTestCase +final class EntityExporterTest extends WebTestCase { /** * @var EntityExporter @@ -111,6 +111,6 @@ class EntityExporterTest extends WebTestCase $response = $this->service->exportEntityFromRequest($entities, $request); $this->assertSame('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', $response->headers->get('Content-Type')); - $this->assertStringContainsString('export_Category_simple.xlsx', $response->headers->get('Content-Disposition')); + $this->assertStringContainsString('export_Category_simple.xlsx', (string) $response->headers->get('Content-Disposition')); } } diff --git a/tests/Services/ImportExportSystem/EntityImporterTest.php b/tests/Services/ImportExportSystem/EntityImporterTest.php index 83367f80..b0044dda 100644 --- a/tests/Services/ImportExportSystem/EntityImporterTest.php +++ b/tests/Services/ImportExportSystem/EntityImporterTest.php @@ -41,7 +41,7 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; #[Group('DB')] -class EntityImporterTest extends WebTestCase +final class EntityImporterTest extends WebTestCase { /** * @var EntityImporter diff --git a/tests/Services/InfoProviderSystem/DTOs/BulkSearchFieldMappingDTOTest.php b/tests/Services/InfoProviderSystem/DTOs/BulkSearchFieldMappingDTOTest.php index e300e2bf..2fd50f9a 100644 --- a/tests/Services/InfoProviderSystem/DTOs/BulkSearchFieldMappingDTOTest.php +++ b/tests/Services/InfoProviderSystem/DTOs/BulkSearchFieldMappingDTOTest.php @@ -1,4 +1,7 @@ . */ - namespace App\Tests\Services\InfoProviderSystem\DTOs; +use App\Services\InfoProviderSystem\Providers\InfoProviderInterface; use App\Services\InfoProviderSystem\DTOs\BulkSearchFieldMappingDTO; use PHPUnit\Framework\TestCase; -class BulkSearchFieldMappingDTOTest extends TestCase +final class BulkSearchFieldMappingDTOTest extends TestCase { public function testProviderInstanceNormalization(): void { - $mockProvider = $this->createMock(\App\Services\InfoProviderSystem\Providers\InfoProviderInterface::class); + $mockProvider = $this->createMock(InfoProviderInterface::class); $mockProvider->method('getProviderKey')->willReturn('mock_provider'); $fieldMapping = new BulkSearchFieldMappingDTO(field: 'mpn', providers: ['provider1', $mockProvider], priority: 5); diff --git a/tests/Services/InfoProviderSystem/DTOs/BulkSearchPartResultsDTOTest.php b/tests/Services/InfoProviderSystem/DTOs/BulkSearchPartResultsDTOTest.php index 09fa4973..d3170d9e 100644 --- a/tests/Services/InfoProviderSystem/DTOs/BulkSearchPartResultsDTOTest.php +++ b/tests/Services/InfoProviderSystem/DTOs/BulkSearchPartResultsDTOTest.php @@ -1,4 +1,7 @@ . */ - namespace App\Tests\Services\InfoProviderSystem\DTOs; +use App\Entity\Parts\Part; +use App\Services\InfoProviderSystem\DTOs\BulkSearchPartResultDTO; use App\Services\InfoProviderSystem\DTOs\BulkSearchPartResultsDTO; use PHPUnit\Framework\TestCase; -class BulkSearchPartResultsDTOTest extends TestCase +final class BulkSearchPartResultsDTOTest extends TestCase { public function testHasErrors(): void { - $test = new BulkSearchPartResultsDTO($this->createMock(\App\Entity\Parts\Part::class), [], []); + $test = new BulkSearchPartResultsDTO($this->createStub(Part::class), [], []); $this->assertFalse($test->hasErrors()); - $test = new BulkSearchPartResultsDTO($this->createMock(\App\Entity\Parts\Part::class), [], ['error1']); + $test = new BulkSearchPartResultsDTO($this->createStub(Part::class), [], ['error1']); $this->assertTrue($test->hasErrors()); } public function testGetErrorCount(): void { - $test = new BulkSearchPartResultsDTO($this->createMock(\App\Entity\Parts\Part::class), [], []); + $test = new BulkSearchPartResultsDTO($this->createStub(Part::class), [], []); $this->assertCount(0, $test->errors); - $test = new BulkSearchPartResultsDTO($this->createMock(\App\Entity\Parts\Part::class), [], ['error1', 'error2']); + $test = new BulkSearchPartResultsDTO($this->createStub(Part::class), [], ['error1', 'error2']); $this->assertCount(2, $test->errors); } public function testHasResults(): void { - $test = new BulkSearchPartResultsDTO($this->createMock(\App\Entity\Parts\Part::class), [], []); + $test = new BulkSearchPartResultsDTO($this->createStub(Part::class), [], []); $this->assertFalse($test->hasResults()); - $test = new BulkSearchPartResultsDTO($this->createMock(\App\Entity\Parts\Part::class), [ $this->createMock(\App\Services\InfoProviderSystem\DTOs\BulkSearchPartResultDTO::class) ], []); + $test = new BulkSearchPartResultsDTO($this->createStub(Part::class), [ $this->createStub(BulkSearchPartResultDTO::class) ], []); $this->assertTrue($test->hasResults()); } public function testGetResultCount(): void { - $test = new BulkSearchPartResultsDTO($this->createMock(\App\Entity\Parts\Part::class), [], []); + $test = new BulkSearchPartResultsDTO($this->createStub(Part::class), [], []); $this->assertCount(0, $test->searchResults); - $test = new BulkSearchPartResultsDTO($this->createMock(\App\Entity\Parts\Part::class), [ - $this->createMock(\App\Services\InfoProviderSystem\DTOs\BulkSearchPartResultDTO::class), - $this->createMock(\App\Services\InfoProviderSystem\DTOs\BulkSearchPartResultDTO::class) + $test = new BulkSearchPartResultsDTO($this->createStub(Part::class), [ + $this->createStub(BulkSearchPartResultDTO::class), + $this->createStub(BulkSearchPartResultDTO::class) ], []); $this->assertCount(2, $test->searchResults); } diff --git a/tests/Services/InfoProviderSystem/DTOs/BulkSearchResponseDTOTest.php b/tests/Services/InfoProviderSystem/DTOs/BulkSearchResponseDTOTest.php index ce7564da..f79d8ce8 100644 --- a/tests/Services/InfoProviderSystem/DTOs/BulkSearchResponseDTOTest.php +++ b/tests/Services/InfoProviderSystem/DTOs/BulkSearchResponseDTOTest.php @@ -1,4 +1,7 @@ . */ - namespace App\Tests\Services\InfoProviderSystem\DTOs; use App\Entity\Parts\Part; @@ -29,7 +31,7 @@ use Doctrine\ORM\EntityManagerInterface; use PHPUnit\Framework\TestCase; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; -class BulkSearchResponseDTOTest extends KernelTestCase +final class BulkSearchResponseDTOTest extends KernelTestCase { private EntityManagerInterface $entityManager; diff --git a/tests/Services/InfoProviderSystem/DTOs/FileDTOTest.php b/tests/Services/InfoProviderSystem/DTOs/FileDTOTest.php index 10312aca..fe563fb1 100644 --- a/tests/Services/InfoProviderSystem/DTOs/FileDTOTest.php +++ b/tests/Services/InfoProviderSystem/DTOs/FileDTOTest.php @@ -26,7 +26,7 @@ use PHPUnit\Framework\Attributes\DataProvider; use App\Services\InfoProviderSystem\DTOs\FileDTO; use PHPUnit\Framework\TestCase; -class FileDTOTest extends TestCase +final class FileDTOTest extends TestCase { diff --git a/tests/Services/InfoProviderSystem/DTOs/ParameterDTOTest.php b/tests/Services/InfoProviderSystem/DTOs/ParameterDTOTest.php index 4c4e9bfe..6361dc10 100644 --- a/tests/Services/InfoProviderSystem/DTOs/ParameterDTOTest.php +++ b/tests/Services/InfoProviderSystem/DTOs/ParameterDTOTest.php @@ -26,7 +26,7 @@ use PHPUnit\Framework\Attributes\DataProvider; use App\Services\InfoProviderSystem\DTOs\ParameterDTO; use PHPUnit\Framework\TestCase; -class ParameterDTOTest extends TestCase +final class ParameterDTOTest extends TestCase { public static function parseValueFieldDataProvider(): \Generator diff --git a/tests/Services/InfoProviderSystem/DTOs/PurchaseInfoDTOTest.php b/tests/Services/InfoProviderSystem/DTOs/PurchaseInfoDTOTest.php index 1c909e67..480ff924 100644 --- a/tests/Services/InfoProviderSystem/DTOs/PurchaseInfoDTOTest.php +++ b/tests/Services/InfoProviderSystem/DTOs/PurchaseInfoDTOTest.php @@ -26,7 +26,7 @@ use App\Services\InfoProviderSystem\DTOs\PriceDTO; use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO; use PHPUnit\Framework\TestCase; -class PurchaseInfoDTOTest extends TestCase +final class PurchaseInfoDTOTest extends TestCase { public function testThrowOnInvalidType(): void { diff --git a/tests/Services/InfoProviderSystem/DTOs/SearchResultDTOTest.php b/tests/Services/InfoProviderSystem/DTOs/SearchResultDTOTest.php index dd516c8d..4fbac1f3 100644 --- a/tests/Services/InfoProviderSystem/DTOs/SearchResultDTOTest.php +++ b/tests/Services/InfoProviderSystem/DTOs/SearchResultDTOTest.php @@ -25,7 +25,7 @@ namespace App\Tests\Services\InfoProviderSystem\DTOs; use App\Services\InfoProviderSystem\DTOs\SearchResultDTO; use PHPUnit\Framework\TestCase; -class SearchResultDTOTest extends TestCase +final class SearchResultDTOTest extends TestCase { public function testPreviewImageURL(): void { diff --git a/tests/Services/InfoProviderSystem/DTOtoEntityConverterTest.php b/tests/Services/InfoProviderSystem/DTOtoEntityConverterTest.php index 45ea9984..8ea6c71a 100644 --- a/tests/Services/InfoProviderSystem/DTOtoEntityConverterTest.php +++ b/tests/Services/InfoProviderSystem/DTOtoEntityConverterTest.php @@ -35,7 +35,7 @@ use PhpParser\Node\Param; use PHPUnit\Framework\TestCase; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class DTOtoEntityConverterTest extends WebTestCase +final class DTOtoEntityConverterTest extends WebTestCase { private ?DTOtoEntityConverter $service = null; diff --git a/tests/Services/InfoProviderSystem/ProviderRegistryTest.php b/tests/Services/InfoProviderSystem/ProviderRegistryTest.php index 48a1847f..d3fce441 100644 --- a/tests/Services/InfoProviderSystem/ProviderRegistryTest.php +++ b/tests/Services/InfoProviderSystem/ProviderRegistryTest.php @@ -27,7 +27,7 @@ use App\Services\InfoProviderSystem\Providers\InfoProviderInterface; use App\Services\InfoProviderSystem\Providers\URLHandlerInfoProviderInterface; use PHPUnit\Framework\TestCase; -class ProviderRegistryTest extends TestCase +final class ProviderRegistryTest extends TestCase { /** @var InfoProviderInterface[] */ diff --git a/tests/Services/InfoProviderSystem/Providers/BuerklinProviderTest.php b/tests/Services/InfoProviderSystem/Providers/BuerklinProviderTest.php index 8283b7d3..ef446c9a 100644 --- a/tests/Services/InfoProviderSystem/Providers/BuerklinProviderTest.php +++ b/tests/Services/InfoProviderSystem/Providers/BuerklinProviderTest.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace App\Tests\Services\InfoProviderSystem\Providers; +use PHPUnit\Framework\Attributes\DataProvider; use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; use App\Services\InfoProviderSystem\DTOs\SearchResultDTO; use App\Services\InfoProviderSystem\Providers\BuerklinProvider; @@ -18,7 +19,7 @@ use Symfony\Contracts\HttpClient\ResponseInterface; * Full behavioral test suite for BuerklinProvider. * Includes parameter parsing, compliance parsing, images, prices and batch mode. */ -class BuerklinProviderTest extends TestCase +final class BuerklinProviderTest extends TestCase { private HttpClientInterface $httpClient; private CacheItemPoolInterface $cache; @@ -108,14 +109,14 @@ class BuerklinProviderTest extends TestCase $this->assertSame('Zener voltage', $params[0]->name); $this->assertNull($params[0]->value_text); - $this->assertSame(12.0, $params[0]->value_typ); + $this->assertEqualsWithDelta(12.0, $params[0]->value_typ, PHP_FLOAT_EPSILON); $this->assertNull($params[0]->value_min); $this->assertNull($params[0]->value_max); $this->assertSame('V', $params[0]->unit); $this->assertSame('Length', $params[1]->name); $this->assertNull($params[1]->value_text); - $this->assertSame(2.9, $params[1]->value_typ); + $this->assertEqualsWithDelta(2.9, $params[1]->value_typ, PHP_FLOAT_EPSILON); $this->assertSame('mm', $params[1]->unit); $this->assertSame('Assembly', $params[2]->name); @@ -273,75 +274,70 @@ class BuerklinProviderTest extends TestCase $this->assertSame(['buerklin.com'], $this->provider->getHandledDomains()); } - /** - * @dataProvider buerklinIdFromUrlProvider - */ + #[DataProvider('buerklinIdFromUrlProvider')] public function testGetIDFromURLExtractsId(string $url, ?string $expected): void { $this->assertSame($expected, $this->provider->getIDFromURL($url)); } - public static function buerklinIdFromUrlProvider(): array + public static function buerklinIdFromUrlProvider(): \Iterator { - return [ - 'de long path' => [ - 'https://www.buerklin.com/de/p/bkl-electronic/niedervoltsteckverbinder/072341-l/40F1332/', - '40F1332', - ], - 'de short path' => [ - 'https://www.buerklin.com/de/p/40F1332/', - '40F1332', - ], - 'en long path' => [ - 'https://www.buerklin.com/en/p/bkl-electronic/dc-connectors/072341-l/40F1332/', - '40F1332', - ], - 'en short path' => [ - 'https://www.buerklin.com/en/p/40F1332/', - '40F1332', - ], - 'fragment should be ignored' => [ - 'https://www.buerklin.com/de/p/bkl-electronic/niedervoltsteckverbinder/072341-l/40F1332/#download', - '40F1332', - ], - 'no trailing slash' => [ - 'https://www.buerklin.com/en/p/40F1332', - '40F1332', - ], - 'query should be ignored' => [ - 'https://www.buerklin.com/en/p/40F1332/?foo=bar', - '40F1332', - ], - 'query and fragment should be ignored' => [ - 'https://www.buerklin.com/en/p/40F1332/?foo=bar#download', - '40F1332', - ], - - // Negative cases - 'not a product url (no /p/ segment)' => [ - 'https://www.buerklin.com/de/impressum/', - null, - ], - 'path contains "p" but not "/p/"' => [ - 'https://www.buerklin.com/de/help/price/', - null, - ], - 'ends with /p/ (no id)' => [ - 'https://www.buerklin.com/de/p/', - null, - ], - 'ends with /p (no trailing slash)' => [ - 'https://www.buerklin.com/de/p', - null, - ], - 'empty string' => [ - '', - null, - ], - 'not a url string' => [ - 'not a url', - null, - ], + yield 'de long path' => [ + 'https://www.buerklin.com/de/p/bkl-electronic/niedervoltsteckverbinder/072341-l/40F1332/', + '40F1332', + ]; + yield 'de short path' => [ + 'https://www.buerklin.com/de/p/40F1332/', + '40F1332', + ]; + yield 'en long path' => [ + 'https://www.buerklin.com/en/p/bkl-electronic/dc-connectors/072341-l/40F1332/', + '40F1332', + ]; + yield 'en short path' => [ + 'https://www.buerklin.com/en/p/40F1332/', + '40F1332', + ]; + yield 'fragment should be ignored' => [ + 'https://www.buerklin.com/de/p/bkl-electronic/niedervoltsteckverbinder/072341-l/40F1332/#download', + '40F1332', + ]; + yield 'no trailing slash' => [ + 'https://www.buerklin.com/en/p/40F1332', + '40F1332', + ]; + yield 'query should be ignored' => [ + 'https://www.buerklin.com/en/p/40F1332/?foo=bar', + '40F1332', + ]; + yield 'query and fragment should be ignored' => [ + 'https://www.buerklin.com/en/p/40F1332/?foo=bar#download', + '40F1332', + ]; + // Negative cases + yield 'not a product url (no /p/ segment)' => [ + 'https://www.buerklin.com/de/impressum/', + null, + ]; + yield 'path contains "p" but not "/p/"' => [ + 'https://www.buerklin.com/de/help/price/', + null, + ]; + yield 'ends with /p/ (no id)' => [ + 'https://www.buerklin.com/de/p/', + null, + ]; + yield 'ends with /p (no trailing slash)' => [ + 'https://www.buerklin.com/de/p', + null, + ]; + yield 'empty string' => [ + '', + null, + ]; + yield 'not a url string' => [ + 'not a url', + null, ]; } } diff --git a/tests/Services/InfoProviderSystem/Providers/LCSCProviderTest.php b/tests/Services/InfoProviderSystem/Providers/LCSCProviderTest.php index 57527f57..dc19de6b 100644 --- a/tests/Services/InfoProviderSystem/Providers/LCSCProviderTest.php +++ b/tests/Services/InfoProviderSystem/Providers/LCSCProviderTest.php @@ -37,7 +37,7 @@ use Symfony\Component\HttpClient\MockHttpClient; use Symfony\Component\HttpClient\Response\MockResponse; use Symfony\Contracts\HttpClient\HttpClientInterface; -class LCSCProviderTest extends TestCase +final class LCSCProviderTest extends TestCase { private LCSCSettings $settings; private LCSCProvider $provider; @@ -67,7 +67,7 @@ class LCSCProviderTest extends TestCase public function testGetProviderKey(): void { - $this->assertEquals('lcsc', $this->provider->getProviderKey()); + $this->assertSame('lcsc', $this->provider->getProviderKey()); } public function testIsActiveWhenEnabled(): void @@ -125,8 +125,8 @@ class LCSCProviderTest extends TestCase $this->assertIsArray($results); $this->assertCount(1, $results); $this->assertInstanceOf(PartDetailDTO::class, $results[0]); - $this->assertEquals('C123456', $results[0]->provider_id); - $this->assertEquals('Test Component', $results[0]->name); + $this->assertSame('C123456', $results[0]->provider_id); + $this->assertSame('Test Component', $results[0]->name); } public function testSearchByKeywordWithRegularTerm(): void @@ -162,8 +162,8 @@ class LCSCProviderTest extends TestCase $this->assertIsArray($results); $this->assertCount(1, $results); $this->assertInstanceOf(PartDetailDTO::class, $results[0]); - $this->assertEquals('C789012', $results[0]->provider_id); - $this->assertEquals('Regular Component', $results[0]->name); + $this->assertSame('C789012', $results[0]->provider_id); + $this->assertSame('Regular Component', $results[0]->name); } public function testSearchByKeywordWithTipProduct(): void @@ -202,8 +202,8 @@ class LCSCProviderTest extends TestCase $this->assertIsArray($results); $this->assertCount(1, $results); $this->assertInstanceOf(PartDetailDTO::class, $results[0]); - $this->assertEquals('C555555', $results[0]->provider_id); - $this->assertEquals('Tip Component', $results[0]->name); + $this->assertSame('C555555', $results[0]->provider_id); + $this->assertSame('Tip Component', $results[0]->name); } public function testSearchByKeywordsBatch(): void @@ -288,12 +288,12 @@ class LCSCProviderTest extends TestCase $result = $this->provider->getDetails('C123456'); $this->assertInstanceOf(PartDetailDTO::class, $result); - $this->assertEquals('C123456', $result->provider_id); - $this->assertEquals('Detailed Component', $result->name); - $this->assertEquals('Detailed description', $result->description); - $this->assertEquals('Detailed Manufacturer', $result->manufacturer); + $this->assertSame('C123456', $result->provider_id); + $this->assertSame('Detailed Component', $result->name); + $this->assertSame('Detailed description', $result->description); + $this->assertSame('Detailed Manufacturer', $result->manufacturer); $this->assertEquals('0603', $result->footprint); - $this->assertEquals('https://www.lcsc.com/product-detail/C123456.html', $result->provider_url); + $this->assertSame('https://www.lcsc.com/product-detail/C123456.html', $result->provider_url); $this->assertCount(1, $result->images); $this->assertCount(2, $result->parameters); $this->assertCount(1, $result->vendor_infos); @@ -465,8 +465,8 @@ class LCSCProviderTest extends TestCase $this->assertIsArray($result); $this->assertCount(1, $result); $this->assertInstanceOf(PurchaseInfoDTO::class, $result[0]); - $this->assertEquals('LCSC', $result[0]->distributor_name); - $this->assertEquals('C123456', $result[0]->order_number); + $this->assertSame('LCSC', $result[0]->distributor_name); + $this->assertSame('C123456', $result[0]->order_number); $this->assertCount(2, $result[0]->prices); } @@ -493,7 +493,7 @@ class LCSCProviderTest extends TestCase $this->httpClient->setResponseFactory([$mockResponse]); $result = $this->provider->getDetails('C123456'); - $this->assertEquals('Electronic Components -> Resistors (SMT)', $result->category); + $this->assertSame('Electronic Components -> Resistors (SMT)', $result->category); } public function testEmptyFootprintHandling(): void diff --git a/tests/Services/LabelSystem/BarcodeScanner/BarcodeScanHelperTest.php b/tests/Services/LabelSystem/BarcodeScanner/BarcodeScanHelperTest.php index fcea7730..248f1ae9 100644 --- a/tests/Services/LabelSystem/BarcodeScanner/BarcodeScanHelperTest.php +++ b/tests/Services/LabelSystem/BarcodeScanner/BarcodeScanHelperTest.php @@ -50,7 +50,7 @@ use App\Services\LabelSystem\BarcodeScanner\EIGP114BarcodeScanResult; use App\Services\LabelSystem\BarcodeScanner\LocalBarcodeScanResult; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class BarcodeScanHelperTest extends WebTestCase +final class BarcodeScanHelperTest extends WebTestCase { private ?BarcodeScanHelper $service = null; diff --git a/tests/Services/LabelSystem/BarcodeScanner/EIGP114BarcodeScanResultTest.php b/tests/Services/LabelSystem/BarcodeScanner/EIGP114BarcodeScanResultTest.php index 3a414997..6d69a773 100644 --- a/tests/Services/LabelSystem/BarcodeScanner/EIGP114BarcodeScanResultTest.php +++ b/tests/Services/LabelSystem/BarcodeScanner/EIGP114BarcodeScanResultTest.php @@ -25,7 +25,7 @@ namespace App\Tests\Services\LabelSystem\BarcodeScanner; use App\Services\LabelSystem\BarcodeScanner\EIGP114BarcodeScanResult; use PHPUnit\Framework\TestCase; -class EIGP114BarcodeScanResultTest extends TestCase +final class EIGP114BarcodeScanResultTest extends TestCase { public function testGuessBarcodeVendor(): void diff --git a/tests/Services/LabelSystem/Barcodes/BarcodeContentGeneratorTest.php b/tests/Services/LabelSystem/Barcodes/BarcodeContentGeneratorTest.php index 69458734..d9185735 100644 --- a/tests/Services/LabelSystem/Barcodes/BarcodeContentGeneratorTest.php +++ b/tests/Services/LabelSystem/Barcodes/BarcodeContentGeneratorTest.php @@ -48,7 +48,7 @@ use App\Entity\Parts\StorageLocation; use App\Services\LabelSystem\Barcodes\BarcodeContentGenerator; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; -class BarcodeContentGeneratorTest extends KernelTestCase +final class BarcodeContentGeneratorTest extends KernelTestCase { private ?object $service = null; diff --git a/tests/Services/LabelSystem/Barcodes/BarcodeHelperTest.php b/tests/Services/LabelSystem/Barcodes/BarcodeHelperTest.php index d681b3b9..e03221e5 100644 --- a/tests/Services/LabelSystem/Barcodes/BarcodeHelperTest.php +++ b/tests/Services/LabelSystem/Barcodes/BarcodeHelperTest.php @@ -27,7 +27,7 @@ use App\Services\LabelSystem\Barcodes\BarcodeHelper; use PHPUnit\Framework\TestCase; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class BarcodeHelperTest extends WebTestCase +final class BarcodeHelperTest extends WebTestCase { protected ?BarcodeHelper $service = null; diff --git a/tests/Services/LabelSystem/LabelGeneratorTest.php b/tests/Services/LabelSystem/LabelGeneratorTest.php index 916d4317..5f6d8f04 100644 --- a/tests/Services/LabelSystem/LabelGeneratorTest.php +++ b/tests/Services/LabelSystem/LabelGeneratorTest.php @@ -51,7 +51,7 @@ use App\Entity\Parts\StorageLocation; use App\Services\LabelSystem\LabelGenerator; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class LabelGeneratorTest extends WebTestCase +final class LabelGeneratorTest extends WebTestCase { /** * @var LabelGenerator diff --git a/tests/Services/LabelSystem/LabelTextReplacerTest.php b/tests/Services/LabelSystem/LabelTextReplacerTest.php index 346d1bab..c4a140d8 100644 --- a/tests/Services/LabelSystem/LabelTextReplacerTest.php +++ b/tests/Services/LabelSystem/LabelTextReplacerTest.php @@ -47,7 +47,7 @@ use App\Entity\Parts\PartLot; use App\Services\LabelSystem\LabelTextReplacer; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class LabelTextReplacerTest extends WebTestCase +final class LabelTextReplacerTest extends WebTestCase { /** * @var LabelTextReplacer diff --git a/tests/Services/LabelSystem/PlaceholderProviders/AbstractElementProviderTest.php b/tests/Services/LabelSystem/PlaceholderProviders/AbstractElementProviderTest.php index fb917b82..584f708a 100644 --- a/tests/Services/LabelSystem/PlaceholderProviders/AbstractElementProviderTest.php +++ b/tests/Services/LabelSystem/PlaceholderProviders/AbstractElementProviderTest.php @@ -46,7 +46,7 @@ use App\Entity\Base\AbstractDBElement; use App\Services\LabelSystem\PlaceholderProviders\AbstractDBElementProvider; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class AbstractElementProviderTest extends WebTestCase +final class AbstractElementProviderTest extends WebTestCase { /** * @var AbstractDBElementProvider diff --git a/tests/Services/LabelSystem/PlaceholderProviders/GlobalProvidersTest.php b/tests/Services/LabelSystem/PlaceholderProviders/GlobalProvidersTest.php index d74bb215..80b6b76f 100644 --- a/tests/Services/LabelSystem/PlaceholderProviders/GlobalProvidersTest.php +++ b/tests/Services/LabelSystem/PlaceholderProviders/GlobalProvidersTest.php @@ -46,7 +46,7 @@ use App\Entity\Parts\Part; use App\Services\LabelSystem\PlaceholderProviders\GlobalProviders; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class GlobalProvidersTest extends WebTestCase +final class GlobalProvidersTest extends WebTestCase { /** * @var GlobalProviders diff --git a/tests/Services/LabelSystem/PlaceholderProviders/NamedElementProviderTest.php b/tests/Services/LabelSystem/PlaceholderProviders/NamedElementProviderTest.php index c5efc768..88b77e8e 100644 --- a/tests/Services/LabelSystem/PlaceholderProviders/NamedElementProviderTest.php +++ b/tests/Services/LabelSystem/PlaceholderProviders/NamedElementProviderTest.php @@ -46,7 +46,7 @@ use App\Entity\Contracts\NamedElementInterface; use App\Services\LabelSystem\PlaceholderProviders\NamedElementProvider; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class NamedElementProviderTest extends WebTestCase +final class NamedElementProviderTest extends WebTestCase { /** * @var NamedElementProvider diff --git a/tests/Services/LabelSystem/PlaceholderProviders/PartLotProviderTest.php b/tests/Services/LabelSystem/PlaceholderProviders/PartLotProviderTest.php index 5aa8f1bd..68425250 100644 --- a/tests/Services/LabelSystem/PlaceholderProviders/PartLotProviderTest.php +++ b/tests/Services/LabelSystem/PlaceholderProviders/PartLotProviderTest.php @@ -49,7 +49,7 @@ use App\Entity\UserSystem\User; use App\Services\LabelSystem\PlaceholderProviders\PartLotProvider; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class PartLotProviderTest extends WebTestCase +final class PartLotProviderTest extends WebTestCase { /** * @var PartLotProvider diff --git a/tests/Services/LabelSystem/PlaceholderProviders/PartProviderTest.php b/tests/Services/LabelSystem/PlaceholderProviders/PartProviderTest.php index 7af936cd..9f1c74f7 100644 --- a/tests/Services/LabelSystem/PlaceholderProviders/PartProviderTest.php +++ b/tests/Services/LabelSystem/PlaceholderProviders/PartProviderTest.php @@ -53,7 +53,7 @@ use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; #[Group('DB')] -class PartProviderTest extends WebTestCase +final class PartProviderTest extends WebTestCase { /** * @var PartProvider @@ -62,20 +62,15 @@ class PartProviderTest extends WebTestCase protected Part $target; - /** - * @var EntityManager - */ - protected $em; - protected function setUp(): void { self::bootKernel(); $this->service = self::getContainer()->get(PartProvider::class); $this->target = new Part(); - $this->em = self::getContainer()->get(EntityManagerInterface::class); + $em = self::getContainer()->get(EntityManagerInterface::class); - $this->target->setCategory($this->em->find(Category::class, 6)); - $this->target->setFootprint($this->em->find(Footprint::class, 6)); + $this->target->setCategory($em->find(Category::class, 6)); + $this->target->setFootprint($em->find(Footprint::class, 6)); $this->target->setManufacturer(null); $this->target->setMass(1234.2); diff --git a/tests/Services/LabelSystem/PlaceholderProviders/TimestampableElementProviderTest.php b/tests/Services/LabelSystem/PlaceholderProviders/TimestampableElementProviderTest.php index 6aa152b9..b5415131 100644 --- a/tests/Services/LabelSystem/PlaceholderProviders/TimestampableElementProviderTest.php +++ b/tests/Services/LabelSystem/PlaceholderProviders/TimestampableElementProviderTest.php @@ -48,7 +48,7 @@ use App\Services\LabelSystem\PlaceholderProviders\TimestampableElementProvider; use DateTime; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class TimestampableElementProviderTest extends WebTestCase +final class TimestampableElementProviderTest extends WebTestCase { /** * @var GlobalProviders diff --git a/tests/Services/LabelSystem/SandboxedTwigFactoryTest.php b/tests/Services/LabelSystem/SandboxedTwigFactoryTest.php index 32317435..f10ef333 100644 --- a/tests/Services/LabelSystem/SandboxedTwigFactoryTest.php +++ b/tests/Services/LabelSystem/SandboxedTwigFactoryTest.php @@ -52,7 +52,7 @@ use App\Services\LabelSystem\SandboxedTwigFactory; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use Twig\Sandbox\SecurityError; -class SandboxedTwigFactoryTest extends WebTestCase +final class SandboxedTwigFactoryTest extends WebTestCase { private ?SandboxedTwigFactory $service = null; diff --git a/tests/Services/LogSystem/EventCommentHelperTest.php b/tests/Services/LogSystem/EventCommentHelperTest.php index 9c78d4c6..616c1ddf 100644 --- a/tests/Services/LogSystem/EventCommentHelperTest.php +++ b/tests/Services/LogSystem/EventCommentHelperTest.php @@ -44,7 +44,7 @@ namespace App\Tests\Services\LogSystem; use App\Services\LogSystem\EventCommentHelper; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class EventCommentHelperTest extends WebTestCase +final class EventCommentHelperTest extends WebTestCase { /** * @var EventCommentHelper diff --git a/tests/Services/LogSystem/EventCommentNeededHelperTest.php b/tests/Services/LogSystem/EventCommentNeededHelperTest.php index 2eb2aceb..3ef238c5 100644 --- a/tests/Services/LogSystem/EventCommentNeededHelperTest.php +++ b/tests/Services/LogSystem/EventCommentNeededHelperTest.php @@ -28,7 +28,7 @@ use App\Settings\SystemSettings\HistorySettings; use App\Tests\SettingsTestHelper; use PHPUnit\Framework\TestCase; -class EventCommentNeededHelperTest extends TestCase +final class EventCommentNeededHelperTest extends TestCase { public function testIsCommentNeeded(): void { diff --git a/tests/Services/LogSystem/EventLoggerTest.php b/tests/Services/LogSystem/EventLoggerTest.php index 0dbb85a3..69870ac8 100644 --- a/tests/Services/LogSystem/EventLoggerTest.php +++ b/tests/Services/LogSystem/EventLoggerTest.php @@ -48,7 +48,7 @@ use App\Entity\LogSystem\UserLogoutLogEntry; use App\Services\LogSystem\EventLogger; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class EventLoggerTest extends WebTestCase +final class EventLoggerTest extends WebTestCase { /** * @var EventLogger diff --git a/tests/Services/LogSystem/TimeTravelTest.php b/tests/Services/LogSystem/TimeTravelTest.php index f0068778..9b51592d 100644 --- a/tests/Services/LogSystem/TimeTravelTest.php +++ b/tests/Services/LogSystem/TimeTravelTest.php @@ -29,7 +29,7 @@ use Doctrine\ORM\EntityManagerInterface; use PHPUnit\Framework\TestCase; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; -class TimeTravelTest extends KernelTestCase +final class TimeTravelTest extends KernelTestCase { private TimeTravel $service; diff --git a/tests/Services/Misc/FAIconGeneratorTest.php b/tests/Services/Misc/FAIconGeneratorTest.php index 1aec5d02..445c167c 100644 --- a/tests/Services/Misc/FAIconGeneratorTest.php +++ b/tests/Services/Misc/FAIconGeneratorTest.php @@ -26,7 +26,7 @@ use PHPUnit\Framework\Attributes\DataProvider; use App\Services\Misc\FAIconGenerator; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class FAIconGeneratorTest extends WebTestCase +final class FAIconGeneratorTest extends WebTestCase { /** * @var FAIconGenerator diff --git a/tests/Services/Misc/MySQLDumpXMLConverterTest.php b/tests/Services/Misc/MySQLDumpXMLConverterTest.php index 98614b4b..a56083d8 100644 --- a/tests/Services/Misc/MySQLDumpXMLConverterTest.php +++ b/tests/Services/Misc/MySQLDumpXMLConverterTest.php @@ -25,7 +25,7 @@ namespace App\Tests\Services\Misc; use App\Services\ImportExportSystem\PartKeeprImporter\MySQLDumpXMLConverter; use PHPUnit\Framework\TestCase; -class MySQLDumpXMLConverterTest extends TestCase +final class MySQLDumpXMLConverterTest extends TestCase { public function testConvertMySQLDumpXMLDataToArrayStructure(): void diff --git a/tests/Services/Misc/RangeParserTest.php b/tests/Services/Misc/RangeParserTest.php index 084ca80b..894034be 100644 --- a/tests/Services/Misc/RangeParserTest.php +++ b/tests/Services/Misc/RangeParserTest.php @@ -45,7 +45,7 @@ use PHPUnit\Framework\Attributes\DataProvider; use App\Services\Misc\RangeParser; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class RangeParserTest extends WebTestCase +final class RangeParserTest extends WebTestCase { /** * @var RangeParser diff --git a/tests/Services/Parameters/ParameterExtractorTest.php b/tests/Services/Parameters/ParameterExtractorTest.php index d0b8fed0..353a0697 100644 --- a/tests/Services/Parameters/ParameterExtractorTest.php +++ b/tests/Services/Parameters/ParameterExtractorTest.php @@ -46,7 +46,7 @@ use App\Entity\Parameters\AbstractParameter; use App\Services\Parameters\ParameterExtractor; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class ParameterExtractorTest extends WebTestCase +final class ParameterExtractorTest extends WebTestCase { protected $service; diff --git a/tests/Services/Parts/PartLotWithdrawAddHelperTest.php b/tests/Services/Parts/PartLotWithdrawAddHelperTest.php index b033f07e..de684094 100644 --- a/tests/Services/Parts/PartLotWithdrawAddHelperTest.php +++ b/tests/Services/Parts/PartLotWithdrawAddHelperTest.php @@ -18,7 +18,7 @@ class TestPartLot extends PartLot } } -class PartLotWithdrawAddHelperTest extends WebTestCase +final class PartLotWithdrawAddHelperTest extends WebTestCase { /** diff --git a/tests/Services/Parts/PartsTableActionHandlerTest.php b/tests/Services/Parts/PartsTableActionHandlerTest.php index c5105cd7..1772195e 100644 --- a/tests/Services/Parts/PartsTableActionHandlerTest.php +++ b/tests/Services/Parts/PartsTableActionHandlerTest.php @@ -27,7 +27,7 @@ use App\Services\Parts\PartsTableActionHandler; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use Symfony\Component\HttpFoundation\RedirectResponse; -class PartsTableActionHandlerTest extends WebTestCase +final class PartsTableActionHandlerTest extends WebTestCase { private PartsTableActionHandler $service; diff --git a/tests/Services/Parts/PricedetailHelperTest.php b/tests/Services/Parts/PricedetailHelperTest.php index 5d9bd351..08a5d6dd 100644 --- a/tests/Services/Parts/PricedetailHelperTest.php +++ b/tests/Services/Parts/PricedetailHelperTest.php @@ -30,7 +30,7 @@ use App\Services\Formatters\AmountFormatter; use App\Services\Parts\PricedetailHelper; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class PricedetailHelperTest extends WebTestCase +final class PricedetailHelperTest extends WebTestCase { /** * @var AmountFormatter diff --git a/tests/Services/ProjectSystem/ProjectBuildHelperTest.php b/tests/Services/ProjectSystem/ProjectBuildHelperTest.php index 5009f849..fb31b51e 100644 --- a/tests/Services/ProjectSystem/ProjectBuildHelperTest.php +++ b/tests/Services/ProjectSystem/ProjectBuildHelperTest.php @@ -29,7 +29,7 @@ use App\Entity\ProjectSystem\ProjectBOMEntry; use App\Services\ProjectSystem\ProjectBuildHelper; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class ProjectBuildHelperTest extends WebTestCase +final class ProjectBuildHelperTest extends WebTestCase { /** @var ProjectBuildHelper */ protected $service; diff --git a/tests/Services/ProjectSystem/ProjectBuildPartHelperTest.php b/tests/Services/ProjectSystem/ProjectBuildPartHelperTest.php index 4baa7cf3..894f6315 100644 --- a/tests/Services/ProjectSystem/ProjectBuildPartHelperTest.php +++ b/tests/Services/ProjectSystem/ProjectBuildPartHelperTest.php @@ -26,7 +26,7 @@ use App\Entity\ProjectSystem\Project; use App\Services\ProjectSystem\ProjectBuildPartHelper; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class ProjectBuildPartHelperTest extends WebTestCase +final class ProjectBuildPartHelperTest extends WebTestCase { /** @var ProjectBuildPartHelper */ protected $service; diff --git a/tests/Services/System/BackupManagerTest.php b/tests/Services/System/BackupManagerTest.php index 145b039d..f75ef8f3 100644 --- a/tests/Services/System/BackupManagerTest.php +++ b/tests/Services/System/BackupManagerTest.php @@ -25,7 +25,7 @@ namespace App\Tests\Services\System; use App\Services\System\BackupManager; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; -class BackupManagerTest extends KernelTestCase +final class BackupManagerTest extends KernelTestCase { private ?BackupManager $backupManager = null; @@ -77,9 +77,9 @@ class BackupManagerTest extends KernelTestCase $result = preg_match('/pre-update-v([\d.]+)-to-v?([\d.]+)-/', $filename, $matches); - $this->assertEquals(1, $result); - $this->assertEquals('2.5.1', $matches[1]); - $this->assertEquals('2.6.0', $matches[2]); + $this->assertSame(1, $result); + $this->assertSame('2.5.1', $matches[1]); + $this->assertSame('2.6.0', $matches[2]); } /** @@ -90,13 +90,13 @@ class BackupManagerTest extends KernelTestCase // Without 'v' prefix on target version $filename1 = 'pre-update-v1.0.0-to-2.0.0-2024-01-30-185400.zip'; preg_match('/pre-update-v([\d.]+)-to-v?([\d.]+)-/', $filename1, $matches1); - $this->assertEquals('1.0.0', $matches1[1]); - $this->assertEquals('2.0.0', $matches1[2]); + $this->assertSame('1.0.0', $matches1[1]); + $this->assertSame('2.0.0', $matches1[2]); // With 'v' prefix on target version $filename2 = 'pre-update-v1.0.0-to-v2.0.0-2024-01-30-185400.zip'; preg_match('/pre-update-v([\d.]+)-to-v?([\d.]+)-/', $filename2, $matches2); - $this->assertEquals('1.0.0', $matches2[1]); - $this->assertEquals('2.0.0', $matches2[2]); + $this->assertSame('1.0.0', $matches2[1]); + $this->assertSame('2.0.0', $matches2[2]); } } diff --git a/tests/Services/System/UpdateExecutorTest.php b/tests/Services/System/UpdateExecutorTest.php index 851d060c..48cddf8d 100644 --- a/tests/Services/System/UpdateExecutorTest.php +++ b/tests/Services/System/UpdateExecutorTest.php @@ -25,7 +25,7 @@ namespace App\Tests\Services\System; use App\Services\System\UpdateExecutor; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; -class UpdateExecutorTest extends KernelTestCase +final class UpdateExecutorTest extends KernelTestCase { private ?UpdateExecutor $updateExecutor = null; diff --git a/tests/Services/Trees/NodesListBuilderTest.php b/tests/Services/Trees/NodesListBuilderTest.php index 8f4bf23b..d314114d 100644 --- a/tests/Services/Trees/NodesListBuilderTest.php +++ b/tests/Services/Trees/NodesListBuilderTest.php @@ -30,7 +30,7 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; /** * @Group DB */ -class NodesListBuilderTest extends WebTestCase +final class NodesListBuilderTest extends WebTestCase { protected $em; /** diff --git a/tests/Services/Trees/TreeViewGeneratorTest.php b/tests/Services/Trees/TreeViewGeneratorTest.php index ebec94d6..190f1068 100644 --- a/tests/Services/Trees/TreeViewGeneratorTest.php +++ b/tests/Services/Trees/TreeViewGeneratorTest.php @@ -31,7 +31,7 @@ use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; #[Group('DB')] -class TreeViewGeneratorTest extends WebTestCase +final class TreeViewGeneratorTest extends WebTestCase { protected $em; /** diff --git a/tests/Services/UserSystem/PermissionManagerTest.php b/tests/Services/UserSystem/PermissionManagerTest.php index 478202f4..e6da72d4 100644 --- a/tests/Services/UserSystem/PermissionManagerTest.php +++ b/tests/Services/UserSystem/PermissionManagerTest.php @@ -30,7 +30,7 @@ use App\Services\UserSystem\PermissionManager; use InvalidArgumentException; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class PermissionManagerTest extends WebTestCase +final class PermissionManagerTest extends WebTestCase { protected ?User $user_withoutGroup = null; diff --git a/tests/Services/UserSystem/PermissionSchemaUpdaterTest.php b/tests/Services/UserSystem/PermissionSchemaUpdaterTest.php index 1e41474c..738ff649 100644 --- a/tests/Services/UserSystem/PermissionSchemaUpdaterTest.php +++ b/tests/Services/UserSystem/PermissionSchemaUpdaterTest.php @@ -39,7 +39,7 @@ class TestPermissionHolder implements HasPermissionsInterface } } -class PermissionSchemaUpdaterTest extends WebTestCase +final class PermissionSchemaUpdaterTest extends WebTestCase { /** * @var PermissionSchemaUpdater diff --git a/tests/Services/UserSystem/TFA/BackupCodeGeneratorTest.php b/tests/Services/UserSystem/TFA/BackupCodeGeneratorTest.php index 2b6c22d1..5a54f2f3 100644 --- a/tests/Services/UserSystem/TFA/BackupCodeGeneratorTest.php +++ b/tests/Services/UserSystem/TFA/BackupCodeGeneratorTest.php @@ -27,7 +27,7 @@ use App\Services\UserSystem\TFA\BackupCodeGenerator; use PHPUnit\Framework\TestCase; use RuntimeException; -class BackupCodeGeneratorTest extends TestCase +final class BackupCodeGeneratorTest extends TestCase { /** * Test if an exception is thrown if you are using a too high code length. diff --git a/tests/Services/UserSystem/TFA/BackupCodeManagerTest.php b/tests/Services/UserSystem/TFA/BackupCodeManagerTest.php index 35b7f4f8..4b1a0496 100644 --- a/tests/Services/UserSystem/TFA/BackupCodeManagerTest.php +++ b/tests/Services/UserSystem/TFA/BackupCodeManagerTest.php @@ -26,7 +26,7 @@ use App\Entity\UserSystem\User; use App\Services\UserSystem\TFA\BackupCodeManager; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class BackupCodeManagerTest extends WebTestCase +final class BackupCodeManagerTest extends WebTestCase { /** * @var BackupCodeManager diff --git a/tests/Services/UserSystem/VoterHelperTest.php b/tests/Services/UserSystem/VoterHelperTest.php index 53d7ee82..3f21c9ab 100644 --- a/tests/Services/UserSystem/VoterHelperTest.php +++ b/tests/Services/UserSystem/VoterHelperTest.php @@ -34,7 +34,7 @@ use Symfony\Component\Security\Core\Authentication\Token\NullToken; use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; use Symfony\Component\Security\Http\Authenticator\Token\PostAuthenticationToken; -class VoterHelperTest extends KernelTestCase +final class VoterHelperTest extends KernelTestCase { protected ?VoterHelper $service = null; diff --git a/tests/Settings/SynonymSettingsTest.php b/tests/Settings/SynonymSettingsTest.php index 2d1407ac..00e5be4c 100644 --- a/tests/Settings/SynonymSettingsTest.php +++ b/tests/Settings/SynonymSettingsTest.php @@ -1,4 +1,7 @@ . */ - namespace App\Tests\Settings; use App\Services\ElementTypes; @@ -25,7 +27,7 @@ use App\Settings\SynonymSettings; use App\Tests\SettingsTestHelper; use PHPUnit\Framework\TestCase; -class SynonymSettingsTest extends TestCase +final class SynonymSettingsTest extends TestCase { public function testGetSingularSynonymForType(): void diff --git a/tests/Twig/EntityExtensionTest.php b/tests/Twig/EntityExtensionTest.php index 18fe970b..f3d5bef9 100644 --- a/tests/Twig/EntityExtensionTest.php +++ b/tests/Twig/EntityExtensionTest.php @@ -39,7 +39,7 @@ use App\Entity\UserSystem\User; use App\Twig\EntityExtension; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class EntityExtensionTest extends WebTestCase +final class EntityExtensionTest extends WebTestCase { /** @var EntityExtension */ protected $service; diff --git a/tests/Twig/TwigCoreExtensionTest.php b/tests/Twig/TwigCoreExtensionTest.php index 1aa1f7ca..be8ced04 100644 --- a/tests/Twig/TwigCoreExtensionTest.php +++ b/tests/Twig/TwigCoreExtensionTest.php @@ -26,7 +26,7 @@ use App\Twig\TwigCoreExtension; use PHPUnit\Framework\TestCase; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class TwigCoreExtensionTest extends WebTestCase +final class TwigCoreExtensionTest extends WebTestCase { /** @var TwigCoreExtension */ protected $service; diff --git a/tests/Twig/UserExtensionTest.php b/tests/Twig/UserExtensionTest.php index 235d39c1..f8422a2c 100644 --- a/tests/Twig/UserExtensionTest.php +++ b/tests/Twig/UserExtensionTest.php @@ -27,7 +27,7 @@ use App\Twig\UserExtension; use PHPUnit\Framework\TestCase; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; -class UserExtensionTest extends WebTestCase +final class UserExtensionTest extends WebTestCase { protected $service; diff --git a/tests/Validator/Constraints/NoneOfItsChildrenValidatorTest.php b/tests/Validator/Constraints/NoneOfItsChildrenValidatorTest.php index 0efcd5de..e4b721ca 100644 --- a/tests/Validator/Constraints/NoneOfItsChildrenValidatorTest.php +++ b/tests/Validator/Constraints/NoneOfItsChildrenValidatorTest.php @@ -28,15 +28,12 @@ use App\Validator\Constraints\NoneOfItsChildren; use App\Validator\Constraints\NoneOfItsChildrenValidator; use Symfony\Component\Validator\Test\ConstraintValidatorTestCase; -class NoneOfItsChildrenValidatorTest extends ConstraintValidatorTestCase +final class NoneOfItsChildrenValidatorTest extends ConstraintValidatorTestCase { protected AttachmentType $root_node; protected AttachmentType $child1; - protected AttachmentType $child2; - protected AttachmentType $child3; protected AttachmentType $child1_1; - protected AttachmentType $child1_2; protected function setUp(): void { @@ -49,14 +46,14 @@ class NoneOfItsChildrenValidatorTest extends ConstraintValidatorTestCase $this->root_node->setName('root')->setParent(null); $this->child1 = new AttachmentType(); $this->child1->setParent($this->root_node)->setName('child1'); - $this->child2 = new AttachmentType(); - $this->child2->setName('child2')->setParent($this->root_node); - $this->child3 = new AttachmentType(); - $this->child3->setName('child3')->setParent($this->root_node); + $child2 = new AttachmentType(); + $child2->setName('child2')->setParent($this->root_node); + $child3 = new AttachmentType(); + $child3->setName('child3')->setParent($this->root_node); $this->child1_1 = new AttachmentType(); $this->child1_1->setName('child1_1')->setParent($this->child1); - $this->child1_2 = new AttachmentType(); - $this->child1_2->setName('child1_2')->setParent($this->child1); + $child1_2 = new AttachmentType(); + $child1_2->setName('child1_2')->setParent($this->child1); } diff --git a/tests/Validator/Constraints/SelectableValidatorTest.php b/tests/Validator/Constraints/SelectableValidatorTest.php index bc520621..68f36f87 100644 --- a/tests/Validator/Constraints/SelectableValidatorTest.php +++ b/tests/Validator/Constraints/SelectableValidatorTest.php @@ -29,7 +29,7 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\Validator\Exception\UnexpectedValueException; use Symfony\Component\Validator\Test\ConstraintValidatorTestCase; -class SelectableValidatorTest extends ConstraintValidatorTestCase +final class SelectableValidatorTest extends ConstraintValidatorTestCase { protected function createValidator(): SelectableValidator { diff --git a/tests/Validator/Constraints/UniqueObjectCollectionValidatorTest.php b/tests/Validator/Constraints/UniqueObjectCollectionValidatorTest.php index d9fab6cf..3863d604 100644 --- a/tests/Validator/Constraints/UniqueObjectCollectionValidatorTest.php +++ b/tests/Validator/Constraints/UniqueObjectCollectionValidatorTest.php @@ -30,7 +30,7 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\Validator\Exception\UnexpectedValueException; use Symfony\Component\Validator\Test\ConstraintValidatorTestCase; -class UniqueObjectCollectionValidatorTest extends ConstraintValidatorTestCase +final class UniqueObjectCollectionValidatorTest extends ConstraintValidatorTestCase { protected function createValidator(): UniqueObjectCollectionValidator { diff --git a/tests/Validator/Constraints/UrlOrBuiltinValidatorTest.php b/tests/Validator/Constraints/UrlOrBuiltinValidatorTest.php index c75754df..326809df 100644 --- a/tests/Validator/Constraints/UrlOrBuiltinValidatorTest.php +++ b/tests/Validator/Constraints/UrlOrBuiltinValidatorTest.php @@ -27,7 +27,7 @@ use App\Validator\Constraints\UrlOrBuiltinValidator; use PHPUnit\Framework\TestCase; use Symfony\Component\Validator\Test\ConstraintValidatorTestCase; -class UrlOrBuiltinValidatorTest extends ConstraintValidatorTestCase +final class UrlOrBuiltinValidatorTest extends ConstraintValidatorTestCase { protected function createValidator(): UrlOrBuiltinValidator diff --git a/tests/Validator/Constraints/ValidGTINValidatorTest.php b/tests/Validator/Constraints/ValidGTINValidatorTest.php index f35b053a..6b01519b 100644 --- a/tests/Validator/Constraints/ValidGTINValidatorTest.php +++ b/tests/Validator/Constraints/ValidGTINValidatorTest.php @@ -1,4 +1,7 @@ . */ - namespace App\Tests\Validator\Constraints; +use App\Validator\Constraints\ValidGTIN; use App\Validator\Constraints\ValidGTINValidator; use PHPUnit\Framework\TestCase; use Symfony\Component\Validator\ConstraintValidatorInterface; use Symfony\Component\Validator\Test\ConstraintValidatorTestCase; -class ValidGTINValidatorTest extends ConstraintValidatorTestCase +final class ValidGTINValidatorTest extends ConstraintValidatorTestCase { public function testAllowNull(): void { - $this->validator->validate(null, new \App\Validator\Constraints\ValidGTIN()); + $this->validator->validate(null, new ValidGTIN()); $this->assertNoViolation(); } public function testValidGTIN8(): void { - $this->validator->validate('12345670', new \App\Validator\Constraints\ValidGTIN()); + $this->validator->validate('12345670', new ValidGTIN()); $this->assertNoViolation(); } public function testValidGTIN12(): void { - $this->validator->validate('123456789012', new \App\Validator\Constraints\ValidGTIN()); + $this->validator->validate('123456789012', new ValidGTIN()); $this->assertNoViolation(); } public function testValidGTIN13(): void { - $this->validator->validate('1234567890128', new \App\Validator\Constraints\ValidGTIN()); + $this->validator->validate('1234567890128', new ValidGTIN()); $this->assertNoViolation(); } public function testValidGTIN14(): void { - $this->validator->validate('12345678901231', new \App\Validator\Constraints\ValidGTIN()); + $this->validator->validate('12345678901231', new ValidGTIN()); $this->assertNoViolation(); } public function testInvalidGTIN(): void { - $this->validator->validate('1234567890123', new \App\Validator\Constraints\ValidGTIN()); + $this->validator->validate('1234567890123', new ValidGTIN()); $this->buildViolation('validator.invalid_gtin') ->assertRaised(); } diff --git a/tests/Validator/Constraints/ValidGoogleAuthCodeValidatorTest.php b/tests/Validator/Constraints/ValidGoogleAuthCodeValidatorTest.php index 6eb9270e..4924f34b 100644 --- a/tests/Validator/Constraints/ValidGoogleAuthCodeValidatorTest.php +++ b/tests/Validator/Constraints/ValidGoogleAuthCodeValidatorTest.php @@ -34,7 +34,7 @@ use Symfony\Component\Validator\ConstraintValidator; use Symfony\Component\Validator\ConstraintValidatorInterface; use Symfony\Component\Validator\Test\ConstraintValidatorTestCase; -class ValidGoogleAuthCodeValidatorTest extends ConstraintValidatorTestCase +final class ValidGoogleAuthCodeValidatorTest extends ConstraintValidatorTestCase { protected function createValidator(): ConstraintValidatorInterface diff --git a/tests/Validator/Constraints/ValidThemeValidatorTest.php b/tests/Validator/Constraints/ValidThemeValidatorTest.php index 9db8f33b..50b11820 100644 --- a/tests/Validator/Constraints/ValidThemeValidatorTest.php +++ b/tests/Validator/Constraints/ValidThemeValidatorTest.php @@ -27,7 +27,7 @@ use App\Validator\Constraints\ValidThemeValidator; use PHPUnit\Framework\TestCase; use Symfony\Component\Validator\Test\ConstraintValidatorTestCase; -class ValidThemeValidatorTest extends ConstraintValidatorTestCase +final class ValidThemeValidatorTest extends ConstraintValidatorTestCase { protected function createValidator(): ValidThemeValidator From 097041a43ade83a4e6e0351a3c4926a04e985374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 14 Feb 2026 23:33:40 +0100 Subject: [PATCH 118/172] Ran rector --- config/packages/doctrine.php | 4 +++- rector.php | 2 -- src/Controller/PartController.php | 7 ++++--- src/DataTables/Filters/PartSearchFilter.php | 2 +- .../UserSystem/PartUniqueIpnSubscriber.php | 2 ++ .../InfoProviderSystem/FieldToProviderMappingType.php | 3 ++- src/Services/ImportExportSystem/BOMImporter.php | 10 ++++++---- src/Services/ImportExportSystem/EntityExporter.php | 3 ++- src/Services/ImportExportSystem/EntityImporter.php | 5 +++-- .../InfoProviderSystem/DTOs/BulkSearchResponseDTO.php | 3 ++- .../InfoProviderSystem/Providers/BuerklinProvider.php | 2 +- src/Services/System/BackupManager.php | 6 ++++-- src/Validator/Constraints/UniquePartIpnConstraint.php | 2 ++ src/Validator/Constraints/UniquePartIpnValidator.php | 2 ++ 14 files changed, 34 insertions(+), 19 deletions(-) diff --git a/config/packages/doctrine.php b/config/packages/doctrine.php index 47584ed7..e5be011f 100644 --- a/config/packages/doctrine.php +++ b/config/packages/doctrine.php @@ -20,12 +20,14 @@ declare(strict_types=1); +use Symfony\Config\DoctrineConfig; + /** * This class extends the default doctrine ORM configuration to enable native lazy objects on PHP 8.4+. * We have to do this in a PHP file, because the yaml file does not support conditionals on PHP version. */ -return static function(\Symfony\Config\DoctrineConfig $doctrine) { +return static function(DoctrineConfig $doctrine) { //On PHP 8.4+ we can use native lazy objects, which are much more efficient than proxies. if (PHP_VERSION_ID >= 80400) { $doctrine->orm()->enableNativeLazyObjects(true); diff --git a/rector.php b/rector.php index 936b447e..3444f60c 100644 --- a/rector.php +++ b/rector.php @@ -36,8 +36,6 @@ return RectorConfig::configure() PHPUnitSetList::PHPUNIT_90, PHPUnitSetList::PHPUNIT_110, PHPUnitSetList::PHPUNIT_CODE_QUALITY, - - ]) ->withRules([ diff --git a/src/Controller/PartController.php b/src/Controller/PartController.php index d9fcd7f1..b4f46a27 100644 --- a/src/Controller/PartController.php +++ b/src/Controller/PartController.php @@ -22,6 +22,7 @@ declare(strict_types=1); namespace App\Controller; +use App\Entity\InfoProviderSystem\BulkInfoProviderImportJob; use App\DataTables\LogDataTable; use App\Entity\Attachments\AttachmentUpload; use App\Entity\Parts\Category; @@ -151,7 +152,7 @@ final class PartController extends AbstractController $jobId = $request->query->get('jobId'); $bulkJob = null; if ($jobId) { - $bulkJob = $this->em->getRepository(\App\Entity\InfoProviderSystem\BulkInfoProviderImportJob::class)->find($jobId); + $bulkJob = $this->em->getRepository(BulkInfoProviderImportJob::class)->find($jobId); // Verify user owns this job if ($bulkJob && $bulkJob->getCreatedBy() !== $this->getUser()) { $bulkJob = null; @@ -172,7 +173,7 @@ final class PartController extends AbstractController throw $this->createAccessDeniedException('Invalid CSRF token'); } - $bulkJob = $this->em->getRepository(\App\Entity\InfoProviderSystem\BulkInfoProviderImportJob::class)->find($jobId); + $bulkJob = $this->em->getRepository(BulkInfoProviderImportJob::class)->find($jobId); if (!$bulkJob || $bulkJob->getCreatedBy() !== $this->getUser()) { throw $this->createNotFoundException('Bulk import job not found'); } @@ -338,7 +339,7 @@ final class PartController extends AbstractController $jobId = $request->query->get('jobId'); $bulkJob = null; if ($jobId) { - $bulkJob = $this->em->getRepository(\App\Entity\InfoProviderSystem\BulkInfoProviderImportJob::class)->find($jobId); + $bulkJob = $this->em->getRepository(BulkInfoProviderImportJob::class)->find($jobId); // Verify user owns this job if ($bulkJob && $bulkJob->getCreatedBy() !== $this->getUser()) { $bulkJob = null; diff --git a/src/DataTables/Filters/PartSearchFilter.php b/src/DataTables/Filters/PartSearchFilter.php index c0951d3a..9f6734e5 100644 --- a/src/DataTables/Filters/PartSearchFilter.php +++ b/src/DataTables/Filters/PartSearchFilter.php @@ -160,7 +160,7 @@ class PartSearchFilter implements FilterInterface if ($search_dbId) { $expressions[] = $queryBuilder->expr()->eq('part.id', ':id_exact'); $queryBuilder->setParameter('id_exact', (int) $this->keyword, - \Doctrine\DBAL\ParameterType::INTEGER); + ParameterType::INTEGER); } //Guard condition diff --git a/src/EventSubscriber/UserSystem/PartUniqueIpnSubscriber.php b/src/EventSubscriber/UserSystem/PartUniqueIpnSubscriber.php index ecc25b4f..690448a5 100644 --- a/src/EventSubscriber/UserSystem/PartUniqueIpnSubscriber.php +++ b/src/EventSubscriber/UserSystem/PartUniqueIpnSubscriber.php @@ -1,5 +1,7 @@ 'width: 80px;' ], 'constraints' => [ - new \Symfony\Component\Validator\Constraints\Range(['min' => 1, 'max' => 10]), + new Range(['min' => 1, 'max' => 10]), ], ]); } diff --git a/src/Services/ImportExportSystem/BOMImporter.php b/src/Services/ImportExportSystem/BOMImporter.php index 8a91c825..abf72d74 100644 --- a/src/Services/ImportExportSystem/BOMImporter.php +++ b/src/Services/ImportExportSystem/BOMImporter.php @@ -22,6 +22,8 @@ declare(strict_types=1); */ namespace App\Services\ImportExportSystem; +use App\Entity\Parts\Supplier; +use App\Entity\PriceInformations\Orderdetail; use App\Entity\Parts\Part; use App\Entity\ProjectSystem\Project; use App\Entity\ProjectSystem\ProjectBOMEntry; @@ -275,7 +277,7 @@ class BOMImporter $mapped_entries = []; // Collect all mapped entries for validation // Fetch suppliers once for efficiency - $suppliers = $this->entityManager->getRepository(\App\Entity\Parts\Supplier::class)->findAll(); + $suppliers = $this->entityManager->getRepository(Supplier::class)->findAll(); $supplierSPNKeys = []; $suppliersByName = []; // Map supplier names to supplier objects foreach ($suppliers as $supplier) { @@ -371,7 +373,7 @@ class BOMImporter if ($supplier_spn !== null) { // Query for orderdetails with matching supplier and SPN - $orderdetail = $this->entityManager->getRepository(\App\Entity\PriceInformations\Orderdetail::class) + $orderdetail = $this->entityManager->getRepository(Orderdetail::class) ->findOneBy([ 'supplier' => $supplier, 'supplierpartnr' => $supplier_spn, @@ -535,7 +537,7 @@ class BOMImporter ]; // Add dynamic supplier fields based on available suppliers in the database - $suppliers = $this->entityManager->getRepository(\App\Entity\Parts\Supplier::class)->findAll(); + $suppliers = $this->entityManager->getRepository(Supplier::class)->findAll(); foreach ($suppliers as $supplier) { $supplierName = $supplier->getName(); $targets[$supplierName . ' SPN'] = [ @@ -570,7 +572,7 @@ class BOMImporter ]; // Add supplier-specific patterns - $suppliers = $this->entityManager->getRepository(\App\Entity\Parts\Supplier::class)->findAll(); + $suppliers = $this->entityManager->getRepository(Supplier::class)->findAll(); foreach ($suppliers as $supplier) { $supplierName = $supplier->getName(); $supplierLower = strtolower($supplierName); diff --git a/src/Services/ImportExportSystem/EntityExporter.php b/src/Services/ImportExportSystem/EntityExporter.php index 70feb8e6..9ed027ae 100644 --- a/src/Services/ImportExportSystem/EntityExporter.php +++ b/src/Services/ImportExportSystem/EntityExporter.php @@ -22,6 +22,7 @@ declare(strict_types=1); namespace App\Services\ImportExportSystem; +use PhpOffice\PhpSpreadsheet\Cell\Coordinate; use App\Entity\Base\AbstractNamedDBElement; use App\Entity\Base\AbstractStructuralDBElement; use App\Helpers\FilenameSanatizer; @@ -177,7 +178,7 @@ class EntityExporter $colIndex = 1; foreach ($columns as $column) { - $cellCoordinate = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::stringFromColumnIndex($colIndex) . $rowIndex; + $cellCoordinate = Coordinate::stringFromColumnIndex($colIndex) . $rowIndex; $worksheet->setCellValue($cellCoordinate, $column); $colIndex++; } diff --git a/src/Services/ImportExportSystem/EntityImporter.php b/src/Services/ImportExportSystem/EntityImporter.php index a89be9dc..7b928d6c 100644 --- a/src/Services/ImportExportSystem/EntityImporter.php +++ b/src/Services/ImportExportSystem/EntityImporter.php @@ -22,6 +22,7 @@ declare(strict_types=1); namespace App\Services\ImportExportSystem; +use PhpOffice\PhpSpreadsheet\Cell\Coordinate; use App\Entity\Base\AbstractNamedDBElement; use App\Entity\Base\AbstractStructuralDBElement; use App\Entity\Parts\Category; @@ -419,14 +420,14 @@ class EntityImporter 'worksheet_title' => $worksheet->getTitle() ]); - $highestColumnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn); + $highestColumnIndex = Coordinate::columnIndexFromString($highestColumn); for ($row = 1; $row <= $highestRow; $row++) { $rowData = []; // Read all columns using numeric index for ($colIndex = 1; $colIndex <= $highestColumnIndex; $colIndex++) { - $col = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::stringFromColumnIndex($colIndex); + $col = Coordinate::stringFromColumnIndex($colIndex); try { $cellValue = $worksheet->getCell("{$col}{$row}")->getCalculatedValue(); $rowData[] = $cellValue ?? ''; diff --git a/src/Services/InfoProviderSystem/DTOs/BulkSearchResponseDTO.php b/src/Services/InfoProviderSystem/DTOs/BulkSearchResponseDTO.php index 58e9e240..3db09de3 100644 --- a/src/Services/InfoProviderSystem/DTOs/BulkSearchResponseDTO.php +++ b/src/Services/InfoProviderSystem/DTOs/BulkSearchResponseDTO.php @@ -22,6 +22,7 @@ declare(strict_types=1); namespace App\Services\InfoProviderSystem\DTOs; +use Doctrine\ORM\Exception\ORMException; use App\Entity\Parts\Part; use Doctrine\ORM\EntityManagerInterface; use Traversable; @@ -176,7 +177,7 @@ readonly class BulkSearchResponseDTO implements \ArrayAccess, \IteratorAggregate * @param array $data * @param EntityManagerInterface $entityManager * @return BulkSearchResponseDTO - * @throws \Doctrine\ORM\Exception\ORMException + * @throws ORMException */ public static function fromSerializableRepresentation(array $data, EntityManagerInterface $entityManager): BulkSearchResponseDTO { diff --git a/src/Services/InfoProviderSystem/Providers/BuerklinProvider.php b/src/Services/InfoProviderSystem/Providers/BuerklinProvider.php index aa165bfe..c2291107 100644 --- a/src/Services/InfoProviderSystem/Providers/BuerklinProvider.php +++ b/src/Services/InfoProviderSystem/Providers/BuerklinProvider.php @@ -365,7 +365,7 @@ class BuerklinProvider implements BatchInfoProviderInterface, URLHandlerInfoProv * - prefers 'zoom' format, then 'product' format, then all others * * @param array|null $images - * @return \App\Services\InfoProviderSystem\DTOs\FileDTO[] + * @return FileDTO[] */ private function getProductImages(?array $images): array { diff --git a/src/Services/System/BackupManager.php b/src/Services/System/BackupManager.php index 9bdc7f71..4946bc24 100644 --- a/src/Services/System/BackupManager.php +++ b/src/Services/System/BackupManager.php @@ -22,6 +22,8 @@ declare(strict_types=1); namespace App\Services\System; +use Doctrine\DBAL\Platforms\AbstractMySQLPlatform; +use Doctrine\DBAL\Platforms\PostgreSQLPlatform; use Doctrine\ORM\EntityManagerInterface; use Psr\Log\LoggerInterface; use Shivas\VersioningBundle\Service\VersionManagerInterface; @@ -334,7 +336,7 @@ readonly class BackupManager $params = $connection->getParams(); $platform = $connection->getDatabasePlatform(); - if ($platform instanceof \Doctrine\DBAL\Platforms\AbstractMySQLPlatform) { + if ($platform instanceof AbstractMySQLPlatform) { // Use mysql command to import - need to use shell to handle input redirection $mysqlCmd = 'mysql'; if (isset($params['host'])) { @@ -361,7 +363,7 @@ readonly class BackupManager if (!$process->isSuccessful()) { throw new \RuntimeException('MySQL import failed: ' . $process->getErrorOutput()); } - } elseif ($platform instanceof \Doctrine\DBAL\Platforms\PostgreSQLPlatform) { + } elseif ($platform instanceof PostgreSQLPlatform) { // Use psql command to import $psqlCmd = 'psql'; if (isset($params['host'])) { diff --git a/src/Validator/Constraints/UniquePartIpnConstraint.php b/src/Validator/Constraints/UniquePartIpnConstraint.php index ca32f9ef..652f2bcd 100644 --- a/src/Validator/Constraints/UniquePartIpnConstraint.php +++ b/src/Validator/Constraints/UniquePartIpnConstraint.php @@ -1,5 +1,7 @@ Date: Sat, 14 Feb 2026 23:46:39 +0100 Subject: [PATCH 119/172] Fixed phpunit tests --- tests/Entity/BulkInfoProviderImportJobPartTest.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/Entity/BulkInfoProviderImportJobPartTest.php b/tests/Entity/BulkInfoProviderImportJobPartTest.php index fdae58e5..94b05637 100644 --- a/tests/Entity/BulkInfoProviderImportJobPartTest.php +++ b/tests/Entity/BulkInfoProviderImportJobPartTest.php @@ -39,8 +39,6 @@ final class BulkInfoProviderImportJobPartTest extends TestCase public function testConstructor(): void { - $this->assertSame($this->createStub(BulkInfoProviderImportJob::class), $this->jobPart->getJob()); - $this->assertSame($this->createStub(Part::class), $this->jobPart->getPart()); $this->assertSame(BulkImportPartStatus::PENDING, $this->jobPart->getStatus()); $this->assertNull($this->jobPart->getReason()); $this->assertNull($this->jobPart->getCompletedAt()); From c8b1320bb9b81b18d90226e313a457f60f1cc3ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 14 Feb 2026 23:50:42 +0100 Subject: [PATCH 120/172] Updated rector config --- rector.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rector.php b/rector.php index 3444f60c..5a77a882 100644 --- a/rector.php +++ b/rector.php @@ -18,7 +18,7 @@ use Rector\Symfony\Set\SymfonySetList; use Rector\TypeDeclaration\Rector\StmtsAwareInterface\DeclareStrictTypesRector; return RectorConfig::configure() - ->withComposerBased(phpunit: true) + ->withComposerBased(phpunit: true, symfony: true) ->withSymfonyContainerPhp(__DIR__ . '/tests/symfony-container.php') ->withSymfonyContainerXml(__DIR__ . '/var/cache/dev/App_KernelDevDebugContainer.xml') @@ -57,6 +57,9 @@ return RectorConfig::configure() PreferPHPUnitThisCallRector::class, //Do not replace 'GET' with class constant, LiteralGetToRequestClassConstantRector::class, + + //Do not move help text of commands to the command class, as we want to keep the help text in the command definition for better readability + \Rector\Symfony\Symfony73\Rector\Class_\CommandHelpToAttributeRector::class ]) //Do not apply rules to Symfony own files @@ -65,6 +68,7 @@ return RectorConfig::configure() __DIR__ . '/src/Kernel.php', __DIR__ . '/config/preload.php', __DIR__ . '/config/bundles.php', + __DIR__ . '/config/reference.php' ]) ; From f69b0889ebc2381299022a46a38c90e2c3996516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sat, 14 Feb 2026 23:53:31 +0100 Subject: [PATCH 121/172] Ran rector to convert some our twig extensions to use #[AsTwigXX] attributes --- src/Controller/SecurityController.php | 5 +---- src/Controller/UserSettingsController.php | 5 +---- src/Form/AttachmentFormType.php | 4 +--- .../FieldToProviderMappingType.php | 2 +- src/Form/UserAdminForm.php | 5 +---- src/Form/UserSettingsType.php | 4 +--- src/Twig/InfoProviderExtension.php | 17 ++++++---------- src/Twig/MiscExtension.php | 20 +++++++------------ src/Twig/TwigCoreExtension.php | 15 +++++--------- src/Twig/UpdateExtension.php | 15 +++++--------- src/Twig/UserExtension.php | 9 +++++---- 11 files changed, 34 insertions(+), 67 deletions(-) diff --git a/src/Controller/SecurityController.php b/src/Controller/SecurityController.php index 4e2077c4..ad4d272f 100644 --- a/src/Controller/SecurityController.php +++ b/src/Controller/SecurityController.php @@ -147,10 +147,7 @@ class SecurityController extends AbstractController 'label' => 'user.settings.pw_confirm.label', ], 'invalid_message' => 'password_must_match', - 'constraints' => [new Length([ - 'min' => 6, - 'max' => 128, - ])], + 'constraints' => [new Length(min: 6, max: 128)], ]); $builder->add('submit', SubmitType::class, [ diff --git a/src/Controller/UserSettingsController.php b/src/Controller/UserSettingsController.php index 4e56015a..3f54e99c 100644 --- a/src/Controller/UserSettingsController.php +++ b/src/Controller/UserSettingsController.php @@ -295,10 +295,7 @@ class UserSettingsController extends AbstractController 'autocomplete' => 'new-password', ], ], - 'constraints' => [new Length([ - 'min' => 6, - 'max' => 128, - ])], + 'constraints' => [new Length(min: 6, max: 128)], ]) ->add('submit', SubmitType::class, [ 'label' => 'save', diff --git a/src/Form/AttachmentFormType.php b/src/Form/AttachmentFormType.php index 5cbde178..d9fe2cd2 100644 --- a/src/Form/AttachmentFormType.php +++ b/src/Form/AttachmentFormType.php @@ -122,9 +122,7 @@ class AttachmentFormType extends AbstractType ], 'constraints' => [ //new AllowedFileExtension(), - new File([ - 'maxSize' => $options['max_file_size'], - ]), + new File(maxSize: $options['max_file_size']), ], ]); diff --git a/src/Form/InfoProviderSystem/FieldToProviderMappingType.php b/src/Form/InfoProviderSystem/FieldToProviderMappingType.php index 1a094f7e..7df8985e 100644 --- a/src/Form/InfoProviderSystem/FieldToProviderMappingType.php +++ b/src/Form/InfoProviderSystem/FieldToProviderMappingType.php @@ -62,7 +62,7 @@ class FieldToProviderMappingType extends AbstractType 'style' => 'width: 80px;' ], 'constraints' => [ - new Range(['min' => 1, 'max' => 10]), + new Range(min: 1, max: 10), ], ]); } diff --git a/src/Form/UserAdminForm.php b/src/Form/UserAdminForm.php index 69be181f..457a6e0b 100644 --- a/src/Form/UserAdminForm.php +++ b/src/Form/UserAdminForm.php @@ -177,10 +177,7 @@ class UserAdminForm extends AbstractType 'required' => false, 'mapped' => false, 'disabled' => !$this->security->isGranted('set_password', $entity) || $entity->isSamlUser(), - 'constraints' => [new Length([ - 'min' => 6, - 'max' => 128, - ])], + 'constraints' => [new Length(min: 6, max: 128)], ]) ->add('need_pw_change', CheckboxType::class, [ diff --git a/src/Form/UserSettingsType.php b/src/Form/UserSettingsType.php index 0c7cb169..968d8063 100644 --- a/src/Form/UserSettingsType.php +++ b/src/Form/UserSettingsType.php @@ -92,9 +92,7 @@ class UserSettingsType extends AbstractType 'accept' => 'image/*', ], 'constraints' => [ - new File([ - 'maxSize' => '5M', - ]), + new File(maxSize: '5M'), ], ]) ->add('aboutMe', RichTextEditorType::class, [ diff --git a/src/Twig/InfoProviderExtension.php b/src/Twig/InfoProviderExtension.php index a963b778..dc64a80a 100644 --- a/src/Twig/InfoProviderExtension.php +++ b/src/Twig/InfoProviderExtension.php @@ -23,31 +23,25 @@ declare(strict_types=1); namespace App\Twig; +use Twig\Attribute\AsTwigFunction; use App\Services\InfoProviderSystem\ProviderRegistry; use App\Services\InfoProviderSystem\Providers\InfoProviderInterface; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; -class InfoProviderExtension extends AbstractExtension +class InfoProviderExtension { public function __construct( private readonly ProviderRegistry $providerRegistry ) {} - public function getFunctions(): array - { - return [ - new TwigFunction('info_provider', $this->getInfoProvider(...)), - new TwigFunction('info_provider_label', $this->getInfoProviderName(...)) - ]; - } - /** * Gets the info provider with the given key. Returns null, if the provider does not exist. * @param string $key * @return InfoProviderInterface|null */ - private function getInfoProvider(string $key): ?InfoProviderInterface + #[AsTwigFunction(name: 'info_provider')] + public function getInfoProvider(string $key): ?InfoProviderInterface { try { return $this->providerRegistry->getProviderByKey($key); @@ -61,7 +55,8 @@ class InfoProviderExtension extends AbstractExtension * @param string $key * @return string|null */ - private function getInfoProviderName(string $key): ?string + #[AsTwigFunction(name: 'info_provider_label')] + public function getInfoProviderName(string $key): ?string { try { return $this->providerRegistry->getProviderByKey($key)->getProviderInfo()['name']; diff --git a/src/Twig/MiscExtension.php b/src/Twig/MiscExtension.php index 8b6ebc68..9691abc0 100644 --- a/src/Twig/MiscExtension.php +++ b/src/Twig/MiscExtension.php @@ -22,6 +22,7 @@ declare(strict_types=1); */ namespace App\Twig; +use Twig\Attribute\AsTwigFunction; use App\Settings\SettingsIcon; use Symfony\Component\HttpFoundation\Request; use App\Services\LogSystem\EventCommentType; @@ -31,23 +32,14 @@ use Twig\TwigFunction; use App\Services\LogSystem\EventCommentNeededHelper; use Twig\Extension\AbstractExtension; -final class MiscExtension extends AbstractExtension +final class MiscExtension { public function __construct(private readonly EventCommentNeededHelper $eventCommentNeededHelper) { } - public function getFunctions(): array - { - return [ - new TwigFunction('event_comment_needed', $this->evenCommentNeeded(...)), - - new TwigFunction('settings_icon', $this->settingsIcon(...)), - new TwigFunction('uri_without_host', $this->uri_without_host(...)) - ]; - } - - private function evenCommentNeeded(string|EventCommentType $operation_type): bool + #[AsTwigFunction(name: 'event_comment_needed')] + public function evenCommentNeeded(string|EventCommentType $operation_type): bool { if (is_string($operation_type)) { $operation_type = EventCommentType::from($operation_type); @@ -63,7 +55,8 @@ final class MiscExtension extends AbstractExtension * @return string|null * @throws \ReflectionException */ - private function settingsIcon(string|object $objectOrClass): ?string + #[AsTwigFunction(name: 'settings_icon')] + public function settingsIcon(string|object $objectOrClass): ?string { //If the given object is a proxy, then get the real object if (is_a($objectOrClass, SettingsProxyInterface::class)) { @@ -82,6 +75,7 @@ final class MiscExtension extends AbstractExtension * @param Request $request * @return string */ + #[AsTwigFunction(name: 'uri_without_host')] public function uri_without_host(Request $request): string { if (null !== $qs = $request->getQueryString()) { diff --git a/src/Twig/TwigCoreExtension.php b/src/Twig/TwigCoreExtension.php index 7b2b58f8..58f991b4 100644 --- a/src/Twig/TwigCoreExtension.php +++ b/src/Twig/TwigCoreExtension.php @@ -22,6 +22,8 @@ declare(strict_types=1); */ namespace App\Twig; +use Symfony\Component\Serializer\Normalizer\NormalizerInterface; +use Twig\Attribute\AsTwigFunction; use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; use Twig\Extension\AbstractExtension; use Twig\TwigFilter; @@ -32,23 +34,15 @@ use Twig\TwigTest; * The functionalities here extend the Twig with some core functions, which are independently of Part-DB. * @see \App\Tests\Twig\TwigCoreExtensionTest */ -final class TwigCoreExtension extends AbstractExtension +final class TwigCoreExtension { - private readonly ObjectNormalizer $objectNormalizer; + private readonly NormalizerInterface $objectNormalizer; public function __construct() { $this->objectNormalizer = new ObjectNormalizer(); } - public function getFunctions(): array - { - return [ - /* Returns the enum cases as values */ - new TwigFunction('enum_cases', $this->getEnumCases(...)), - ]; - } - public function getTests(): array { return [ @@ -66,6 +60,7 @@ final class TwigCoreExtension extends AbstractExtension * @param string $enum_class * @phpstan-param class-string $enum_class */ + #[AsTwigFunction(name: 'enum_cases')] public function getEnumCases(string $enum_class): array { if (!enum_exists($enum_class)) { diff --git a/src/Twig/UpdateExtension.php b/src/Twig/UpdateExtension.php index ee3bb16c..552335ae 100644 --- a/src/Twig/UpdateExtension.php +++ b/src/Twig/UpdateExtension.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace App\Twig; +use Twig\Attribute\AsTwigFunction; use App\Services\System\UpdateAvailableFacade; use Symfony\Bundle\SecurityBundle\Security; use Twig\Extension\AbstractExtension; @@ -31,7 +32,7 @@ use Twig\TwigFunction; /** * Twig extension for update-related functions. */ -final class UpdateExtension extends AbstractExtension +final class UpdateExtension { public function __construct(private readonly UpdateAvailableFacade $updateAvailableManager, private readonly Security $security) @@ -39,18 +40,10 @@ final class UpdateExtension extends AbstractExtension } - public function getFunctions(): array - { - return [ - new TwigFunction('is_update_available', $this->isUpdateAvailable(...)), - new TwigFunction('get_latest_version', $this->getLatestVersion(...)), - new TwigFunction('get_latest_version_url', $this->getLatestVersionUrl(...)), - ]; - } - /** * Check if an update is available and the user has permission to see it. */ + #[AsTwigFunction(name: 'is_update_available')] public function isUpdateAvailable(): bool { // Only show to users with the show_updates permission @@ -64,6 +57,7 @@ final class UpdateExtension extends AbstractExtension /** * Get the latest available version string. */ + #[AsTwigFunction(name: 'get_latest_version')] public function getLatestVersion(): string { return $this->updateAvailableManager->getLatestVersionString(); @@ -72,6 +66,7 @@ final class UpdateExtension extends AbstractExtension /** * Get the URL to the latest version release page. */ + #[AsTwigFunction(name: 'get_latest_version_url')] public function getLatestVersionUrl(): string { return $this->updateAvailableManager->getLatestVersionUrl(); diff --git a/src/Twig/UserExtension.php b/src/Twig/UserExtension.php index 5045257a..687f4e84 100644 --- a/src/Twig/UserExtension.php +++ b/src/Twig/UserExtension.php @@ -41,6 +41,7 @@ declare(strict_types=1); namespace App\Twig; +use Twig\Attribute\AsTwigFunction; use App\Entity\Base\AbstractDBElement; use App\Entity\UserSystem\User; use App\Entity\LogSystem\AbstractLogEntry; @@ -57,7 +58,7 @@ use Twig\TwigFunction; /** * @see \App\Tests\Twig\UserExtensionTest */ -final class UserExtension extends AbstractExtension +final class UserExtension { private readonly LogEntryRepository $repo; @@ -82,9 +83,6 @@ final class UserExtension extends AbstractExtension new TwigFunction('last_editing_user', fn(AbstractDBElement $element): ?User => $this->repo->getLastEditingUser($element)), /* Returns the user which has created the given entity. */ new TwigFunction('creating_user', fn(AbstractDBElement $element): ?User => $this->repo->getCreatingUser($element)), - new TwigFunction('impersonator_user', $this->getImpersonatorUser(...)), - new TwigFunction('impersonation_active', $this->isImpersonationActive(...)), - new TwigFunction('impersonation_path', $this->getImpersonationPath(...)), ]; } @@ -93,6 +91,7 @@ final class UserExtension extends AbstractExtension * If the current user is not impersonated, null is returned. * @return User|null */ + #[AsTwigFunction(name: 'impersonator_user')] public function getImpersonatorUser(): ?User { $token = $this->security->getToken(); @@ -107,11 +106,13 @@ final class UserExtension extends AbstractExtension return null; } + #[AsTwigFunction(name: 'impersonation_active')] public function isImpersonationActive(): bool { return $this->security->isGranted('IS_IMPERSONATOR'); } + #[AsTwigFunction(name: 'impersonation_path')] public function getImpersonationPath(User $user, string $route_name = 'homepage'): string { if (! $this->security->isGranted('CAN_SWITCH_USER', $user)) { From 1996db6a53ba634a55f51ec5943f328369be3ddd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Feb 2026 00:23:30 +0100 Subject: [PATCH 122/172] Moved remaining twig extensions to new attributes system --- src/Services/LogSystem/LogDiffFormatter.php | 2 +- src/Twig/AttachmentExtension.php | 30 +++-- src/Twig/BarcodeExtension.php | 17 +-- src/Twig/EntityExtension.php | 128 +++++++++++++------- src/Twig/FormatExtension.php | 48 ++++---- src/Twig/InfoProviderExtension.php | 6 +- src/Twig/LogExtension.php | 19 +-- src/Twig/MiscExtension.php | 4 +- src/Twig/TwigCoreExtension.php | 59 ++++----- src/Twig/UpdateExtension.php | 6 +- src/Twig/UserExtension.php | 33 +++-- tests/Twig/EntityExtensionTest.php | 28 ++--- 12 files changed, 212 insertions(+), 168 deletions(-) diff --git a/src/Services/LogSystem/LogDiffFormatter.php b/src/Services/LogSystem/LogDiffFormatter.php index 8b165d5a..1ac5a2f5 100644 --- a/src/Services/LogSystem/LogDiffFormatter.php +++ b/src/Services/LogSystem/LogDiffFormatter.php @@ -32,7 +32,7 @@ class LogDiffFormatter * @param $old_data * @param $new_data */ - public function formatDiff($old_data, $new_data): string + public function formatDiff(mixed $old_data, mixed $new_data): string { if (is_string($old_data) && is_string($new_data)) { return $this->diffString($old_data, $new_data); diff --git a/src/Twig/AttachmentExtension.php b/src/Twig/AttachmentExtension.php index 9f81abe6..3d5ec611 100644 --- a/src/Twig/AttachmentExtension.php +++ b/src/Twig/AttachmentExtension.php @@ -25,22 +25,34 @@ namespace App\Twig; use App\Entity\Attachments\Attachment; use App\Services\Attachments\AttachmentURLGenerator; use App\Services\Misc\FAIconGenerator; +use Twig\Attribute\AsTwigFunction; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; -final class AttachmentExtension extends AbstractExtension +final readonly class AttachmentExtension { - public function __construct(protected AttachmentURLGenerator $attachmentURLGenerator, protected FAIconGenerator $FAIconGenerator) + public function __construct(private AttachmentURLGenerator $attachmentURLGenerator, private FAIconGenerator $FAIconGenerator) { } - public function getFunctions(): array + /** + * Returns the URL of the thumbnail of the given attachment. Returns null if no thumbnail is available. + */ + #[AsTwigFunction("attachment_thumbnail")] + public function attachmentThumbnail(Attachment $attachment, string $filter_name = 'thumbnail_sm'): ?string { - return [ - /* Returns the URL to a thumbnail of the given attachment */ - new TwigFunction('attachment_thumbnail', fn(Attachment $attachment, string $filter_name = 'thumbnail_sm'): ?string => $this->attachmentURLGenerator->getThumbnailURL($attachment, $filter_name)), - /* Returns the font awesome icon class which is representing the given file extension (We allow null here for attachments without extension) */ - new TwigFunction('ext_to_fa_icon', fn(?string $extension): string => $this->FAIconGenerator->fileExtensionToFAType($extension ?? '')), - ]; + return $this->attachmentURLGenerator->getThumbnailURL($attachment, $filter_name); + } + + /** + * Return the font-awesome icon type for the given file extension. Returns "file" if no specific icon is available. + * Null is allowed for files withot extension + * @param string|null $extension + * @return string + */ + #[AsTwigFunction("ext_to_fa_icon")] + public function extToFAIcon(?string $extension): string + { + return $this->FAIconGenerator->fileExtensionToFAType($extension ?? ''); } } diff --git a/src/Twig/BarcodeExtension.php b/src/Twig/BarcodeExtension.php index ae1973e3..25c0d78e 100644 --- a/src/Twig/BarcodeExtension.php +++ b/src/Twig/BarcodeExtension.php @@ -23,19 +23,14 @@ declare(strict_types=1); namespace App\Twig; use Com\Tecnick\Barcode\Barcode; -use Twig\Extension\AbstractExtension; -use Twig\TwigFunction; +use Twig\Attribute\AsTwigFunction; -final class BarcodeExtension extends AbstractExtension +final class BarcodeExtension { - public function getFunctions(): array - { - return [ - /* Generates a barcode with the given Type and Data and returns it as an SVG represenation */ - new TwigFunction('barcode_svg', fn(string $content, string $type = 'QRCODE'): string => $this->barcodeSVG($content, $type)), - ]; - } - + /** + * Generates a barcode in SVG format for the given content and type. + */ + #[AsTwigFunction('barcode_svg')] public function barcodeSVG(string $content, string $type = 'QRCODE'): string { $barcodeFactory = new Barcode(); diff --git a/src/Twig/EntityExtension.php b/src/Twig/EntityExtension.php index 427a39b5..bff21eb8 100644 --- a/src/Twig/EntityExtension.php +++ b/src/Twig/EntityExtension.php @@ -41,6 +41,9 @@ use App\Exceptions\EntityNotSupportedException; use App\Services\ElementTypeNameGenerator; use App\Services\EntityURLGenerator; use App\Services\Trees\TreeViewGenerator; +use Twig\Attribute\AsTwigFunction; +use Twig\Attribute\AsTwigTest; +use Twig\DeprecatedCallableInfo; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; use Twig\TwigTest; @@ -48,61 +51,27 @@ use Twig\TwigTest; /** * @see \App\Tests\Twig\EntityExtensionTest */ -final class EntityExtension extends AbstractExtension +final readonly class EntityExtension { - public function __construct(protected EntityURLGenerator $entityURLGenerator, protected TreeViewGenerator $treeBuilder, private readonly ElementTypeNameGenerator $nameGenerator) + public function __construct(private EntityURLGenerator $entityURLGenerator, private TreeViewGenerator $treeBuilder, private ElementTypeNameGenerator $nameGenerator) { } - public function getTests(): array + /** + * Checks if the given variable is an entity (instance of AbstractDBElement). + */ + #[AsTwigTest("entity")] + public function entityTest(mixed $var): bool { - return [ - /* Checks if the given variable is an entitity (instance of AbstractDBElement) */ - new TwigTest('entity', static fn($var) => $var instanceof AbstractDBElement), - ]; + return $var instanceof AbstractDBElement; } - public function getFunctions(): array - { - return [ - /* Returns a string representation of the given entity */ - new TwigFunction('entity_type', fn(object $entity): ?string => $this->getEntityType($entity)), - /* Returns the URL to the given entity */ - new TwigFunction('entity_url', fn(AbstractDBElement $entity, string $method = 'info'): string => $this->generateEntityURL($entity, $method)), - /* Returns the URL to the given entity in timetravel mode */ - new TwigFunction('timetravel_url', fn(AbstractDBElement $element, \DateTimeInterface $dateTime): ?string => $this->timeTravelURL($element, $dateTime)), - /* Generates a JSON array of the given tree */ - new TwigFunction('tree_data', fn(AbstractDBElement $element, string $type = 'newEdit'): string => $this->treeData($element, $type)), - /* Gets a human readable label for the type of the given entity */ - new TwigFunction('entity_type_label', fn(object|string $entity): string => $this->nameGenerator->getLocalizedTypeLabel($entity)), - new TwigFunction('type_label', fn(object|string $entity): string => $this->nameGenerator->typeLabel($entity)), - new TwigFunction('type_label_p', fn(object|string $entity): string => $this->nameGenerator->typeLabelPlural($entity)), - ]; - } - - public function timeTravelURL(AbstractDBElement $element, \DateTimeInterface $dateTime): ?string - { - try { - return $this->entityURLGenerator->timeTravelURL($element, $dateTime); - } catch (EntityNotSupportedException) { - return null; - } - } - - public function treeData(AbstractDBElement $element, string $type = 'newEdit'): string - { - $tree = $this->treeBuilder->getTreeView($element::class, null, $type, $element); - - return json_encode($tree, JSON_THROW_ON_ERROR); - } - - public function generateEntityURL(AbstractDBElement $entity, string $method = 'info'): string - { - return $this->entityURLGenerator->getURL($entity, $method); - } - - public function getEntityType(object $entity): ?string + /** + * Returns a string representation of the given entity + */ + #[AsTwigFunction("entity_type")] + public function entityType(object $entity): ?string { $map = [ Part::class => 'part', @@ -129,4 +98,69 @@ final class EntityExtension extends AbstractExtension return null; } + + /** + * Returns the URL for the given entity and method. E.g. for a Part and method "edit", it will return the URL to edit this part. + */ + #[AsTwigFunction("entity_url")] + public function entityURL(AbstractDBElement $entity, string $method = 'info'): string + { + return $this->entityURLGenerator->getURL($entity, $method); + } + + + /** + * Returns the URL for the given entity in timetravel mode. + */ + #[AsTwigFunction("timetravel_url")] + public function timeTravelURL(AbstractDBElement $element, \DateTimeInterface $dateTime): ?string + { + try { + return $this->entityURLGenerator->timeTravelURL($element, $dateTime); + } catch (EntityNotSupportedException) { + return null; + } + } + + /** + * Generates a tree data structure for the given element, which can be used to display a tree view of the element and its related entities. + * The type parameter can be used to specify the type of tree view (e.g. "newEdit" for the tree view in the new/edit pages). The returned data is a JSON string. + */ + #[AsTwigFunction("tree_data")] + public function treeData(AbstractDBElement $element, string $type = 'newEdit'): string + { + $tree = $this->treeBuilder->getTreeView($element::class, null, $type, $element); + + return json_encode($tree, JSON_THROW_ON_ERROR); + } + + /** + * Gets the localized type label for the given entity. E.g. for a Part, it will return "Part" in English and "Bauteil" in German. + * @deprecated Use the "type_label" function instead, which does the same but is more concise. + */ + #[AsTwigFunction("entity_type_label", deprecationInfo: new DeprecatedCallableInfo("Part-DB", "2", "Use the 'type_label' function instead."))] + public function entityTypeLabel(object|string $entity): string + { + return $this->nameGenerator->getLocalizedTypeLabel($entity); + } + + /** + * Gets the localized type label for the given entity. E.g. for a Part, it will return "Part" in English and "Bauteil" in German. + */ + #[AsTwigFunction("type_label")] + public function typeLabel(object|string $entity): string + { + return $this->nameGenerator->typeLabel($entity); + } + + /** + * Gets the localized plural type label for the given entity. E.g. for a Part, it will return "Parts" in English and "Bauteile" in German. + * @param object|string $entity + * @return string + */ + #[AsTwigFunction("type_label_p")] + public function typeLabelPlural(object|string $entity): string + { + return $this->nameGenerator->typeLabelPlural($entity); + } } diff --git a/src/Twig/FormatExtension.php b/src/Twig/FormatExtension.php index 46313aaf..b91b7e11 100644 --- a/src/Twig/FormatExtension.php +++ b/src/Twig/FormatExtension.php @@ -29,35 +29,28 @@ use App\Services\Formatters\MarkdownParser; use App\Services\Formatters\MoneyFormatter; use App\Services\Formatters\SIFormatter; use Brick\Math\BigDecimal; -use Twig\Extension\AbstractExtension; -use Twig\TwigFilter; +use Twig\Attribute\AsTwigFilter; -final class FormatExtension extends AbstractExtension +final readonly class FormatExtension { - public function __construct(protected MarkdownParser $markdownParser, protected MoneyFormatter $moneyFormatter, protected SIFormatter $siformatter, protected AmountFormatter $amountFormatter) + public function __construct(private MarkdownParser $markdownParser, private MoneyFormatter $moneyFormatter, private SIFormatter $siformatter, private AmountFormatter $amountFormatter) { } - public function getFilters(): array + /** + * Mark the given text as markdown, which will be rendered in the browser + */ + #[AsTwigFilter("format_markdown", isSafe: ['html'], preEscape: 'html')] + public function formatMarkdown(string $markdown, bool $inline_mode = false): string { - return [ - /* Mark the given text as markdown, which will be rendered in the browser */ - new TwigFilter('format_markdown', fn(string $markdown, bool $inline_mode = false): string => $this->markdownParser->markForRendering($markdown, $inline_mode), [ - 'pre_escape' => 'html', - 'is_safe' => ['html'], - ]), - /* Format the given amount as money, using a given currency */ - new TwigFilter('format_money', fn($amount, ?Currency $currency = null, int $decimals = 5): string => $this->formatCurrency($amount, $currency, $decimals)), - /* Format the given number using SI prefixes and the given unit (string) */ - new TwigFilter('format_si', fn($value, $unit, $decimals = 2, bool $show_all_digits = false): string => $this->siFormat($value, $unit, $decimals, $show_all_digits)), - /** Format the given amount using the given MeasurementUnit */ - new TwigFilter('format_amount', fn($value, ?MeasurementUnit $unit, array $options = []): string => $this->amountFormat($value, $unit, $options)), - /** Format the given number of bytes as human-readable number */ - new TwigFilter('format_bytes', fn(int $bytes, int $precision = 2): string => $this->formatBytes($bytes, $precision)), - ]; + return $this->markdownParser->markForRendering($markdown, $inline_mode); } - public function formatCurrency($amount, ?Currency $currency = null, int $decimals = 5): string + /** + * Format the given amount as money, using a given currency + */ + #[AsTwigFilter("format_money")] + public function formatMoney(BigDecimal|float|string $amount, ?Currency $currency = null, int $decimals = 5): string { if ($amount instanceof BigDecimal) { $amount = (string) $amount; @@ -66,19 +59,22 @@ final class FormatExtension extends AbstractExtension return $this->moneyFormatter->format($amount, $currency, $decimals); } - public function siFormat($value, $unit, $decimals = 2, bool $show_all_digits = false): string + /** + * Format the given number using SI prefixes and the given unit (string) + */ + #[AsTwigFilter("format_si")] + public function siFormat(float $value, string $unit, int $decimals = 2, bool $show_all_digits = false): string { return $this->siformatter->format($value, $unit, $decimals); } - public function amountFormat($value, ?MeasurementUnit $unit, array $options = []): string + #[AsTwigFilter("format_amount")] + public function amountFormat(float|int|string $value, ?MeasurementUnit $unit, array $options = []): string { return $this->amountFormatter->format($value, $unit, $options); } - /** - * @param $bytes - */ + #[AsTwigFilter("format_bytes")] public function formatBytes(int $bytes, int $precision = 2): string { $size = ['B','kB','MB','GB','TB','PB','EB','ZB','YB']; diff --git a/src/Twig/InfoProviderExtension.php b/src/Twig/InfoProviderExtension.php index dc64a80a..54dbf93a 100644 --- a/src/Twig/InfoProviderExtension.php +++ b/src/Twig/InfoProviderExtension.php @@ -29,10 +29,10 @@ use App\Services\InfoProviderSystem\Providers\InfoProviderInterface; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; -class InfoProviderExtension +final readonly class InfoProviderExtension { public function __construct( - private readonly ProviderRegistry $providerRegistry + private ProviderRegistry $providerRegistry ) {} /** @@ -64,4 +64,4 @@ class InfoProviderExtension return null; } } -} \ No newline at end of file +} diff --git a/src/Twig/LogExtension.php b/src/Twig/LogExtension.php index 34dad988..738a24c2 100644 --- a/src/Twig/LogExtension.php +++ b/src/Twig/LogExtension.php @@ -25,21 +25,26 @@ namespace App\Twig; use App\Entity\LogSystem\AbstractLogEntry; use App\Services\LogSystem\LogDataFormatter; use App\Services\LogSystem\LogDiffFormatter; +use Twig\Attribute\AsTwigFunction; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; -final class LogExtension extends AbstractExtension +final readonly class LogExtension { - public function __construct(private readonly LogDataFormatter $logDataFormatter, private readonly LogDiffFormatter $logDiffFormatter) + public function __construct(private LogDataFormatter $logDataFormatter, private LogDiffFormatter $logDiffFormatter) { } - public function getFunctions(): array + #[AsTwigFunction(name: 'format_log_data', isSafe: ['html'])] + public function formatLogData(mixed $data, AbstractLogEntry $logEntry, string $fieldName): string { - return [ - new TwigFunction('format_log_data', fn($data, AbstractLogEntry $logEntry, string $fieldName): string => $this->logDataFormatter->formatData($data, $logEntry, $fieldName), ['is_safe' => ['html']]), - new TwigFunction('format_log_diff', fn($old_data, $new_data): string => $this->logDiffFormatter->formatDiff($old_data, $new_data), ['is_safe' => ['html']]), - ]; + return $this->logDataFormatter->formatData($data, $logEntry, $fieldName); + } + + #[AsTwigFunction(name: 'format_log_diff', isSafe: ['html'])] + public function formatLogDiff(mixed $old_data, mixed $new_data): string + { + return $this->logDiffFormatter->formatDiff($old_data, $new_data); } } diff --git a/src/Twig/MiscExtension.php b/src/Twig/MiscExtension.php index 9691abc0..390ad084 100644 --- a/src/Twig/MiscExtension.php +++ b/src/Twig/MiscExtension.php @@ -32,9 +32,9 @@ use Twig\TwigFunction; use App\Services\LogSystem\EventCommentNeededHelper; use Twig\Extension\AbstractExtension; -final class MiscExtension +final readonly class MiscExtension { - public function __construct(private readonly EventCommentNeededHelper $eventCommentNeededHelper) + public function __construct(private EventCommentNeededHelper $eventCommentNeededHelper) { } diff --git a/src/Twig/TwigCoreExtension.php b/src/Twig/TwigCoreExtension.php index 58f991b4..ceb4ce82 100644 --- a/src/Twig/TwigCoreExtension.php +++ b/src/Twig/TwigCoreExtension.php @@ -23,8 +23,10 @@ declare(strict_types=1); namespace App\Twig; use Symfony\Component\Serializer\Normalizer\NormalizerInterface; +use Twig\Attribute\AsTwigFilter; use Twig\Attribute\AsTwigFunction; use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; +use Twig\Attribute\AsTwigTest; use Twig\Extension\AbstractExtension; use Twig\TwigFilter; use Twig\TwigFunction; @@ -34,51 +36,54 @@ use Twig\TwigTest; * The functionalities here extend the Twig with some core functions, which are independently of Part-DB. * @see \App\Tests\Twig\TwigCoreExtensionTest */ -final class TwigCoreExtension +final readonly class TwigCoreExtension { - private readonly NormalizerInterface $objectNormalizer; + private NormalizerInterface $objectNormalizer; public function __construct() { $this->objectNormalizer = new ObjectNormalizer(); } - public function getTests(): array + /** + * Checks if the given variable is an instance of the given class/interface/enum. E.g. `x is instanceof('App\Entity\Parts\Part')` + * @param mixed $var + * @param string $instance + * @return bool + */ + #[AsTwigTest("instanceof")] + public function testInstanceOf(mixed $var, string $instance): bool { - return [ - /* - * Checks if a given variable is an instance of a given class. E.g. ` x is instanceof('App\Entity\Parts\Part')` - */ - new TwigTest('instanceof', static fn($var, $instance) => $var instanceof $instance), - /* Checks if a given variable is an object. E.g. `x is object` */ - new TwigTest('object', static fn($var): bool => is_object($var)), - new TwigTest('enum', fn($var) => $var instanceof \UnitEnum), - ]; + if (!class_exists($instance) && !interface_exists($instance) && !enum_exists($instance)) { + throw new \InvalidArgumentException(sprintf('The given class/interface/enum "%s" does not exist!', $instance)); + } + + return $var instanceof $instance; } /** - * @param string $enum_class - * @phpstan-param class-string $enum_class + * Checks if the given variable is an object. This can be used to check if a variable is an object, without knowing the exact class of the object. E.g. `x is object` + * @param mixed $var + * @return bool */ - #[AsTwigFunction(name: 'enum_cases')] - public function getEnumCases(string $enum_class): array + #[AsTwigTest("object")] + public function testObject(mixed $var): bool { - if (!enum_exists($enum_class)) { - throw new \InvalidArgumentException(sprintf('The given class "%s" is not an enum!', $enum_class)); - } - - /** @noinspection PhpUndefinedMethodInspection */ - return ($enum_class)::cases(); + return is_object($var); } - public function getFilters(): array + /** + * Checks if the given variable is an enum (instance of UnitEnum). This can be used to check if a variable is an enum, without knowing the exact class of the enum. E.g. `x is enum` + * @param mixed $var + * @return bool + */ + #[AsTwigTest("enum")] + public function testEnum(mixed $var): bool { - return [ - /* Converts the given object to an array representation of the public/accessible properties */ - new TwigFilter('to_array', fn($object) => $this->toArray($object)), - ]; + return $var instanceof \UnitEnum; } + #[AsTwigFilter('to_array')] public function toArray(object|array $object): array { //If it is already an array, we can just return it diff --git a/src/Twig/UpdateExtension.php b/src/Twig/UpdateExtension.php index 552335ae..7ec7897b 100644 --- a/src/Twig/UpdateExtension.php +++ b/src/Twig/UpdateExtension.php @@ -32,10 +32,10 @@ use Twig\TwigFunction; /** * Twig extension for update-related functions. */ -final class UpdateExtension +final readonly class UpdateExtension { - public function __construct(private readonly UpdateAvailableFacade $updateAvailableManager, - private readonly Security $security) + public function __construct(private UpdateAvailableFacade $updateAvailableManager, + private Security $security) { } diff --git a/src/Twig/UserExtension.php b/src/Twig/UserExtension.php index 687f4e84..3cf76e63 100644 --- a/src/Twig/UserExtension.php +++ b/src/Twig/UserExtension.php @@ -41,6 +41,7 @@ declare(strict_types=1); namespace App\Twig; +use Twig\Attribute\AsTwigFilter; use Twig\Attribute\AsTwigFunction; use App\Entity\Base\AbstractDBElement; use App\Entity\UserSystem\User; @@ -51,39 +52,34 @@ use Symfony\Bundle\SecurityBundle\Security; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken; use Symfony\Component\Security\Core\Exception\AccessDeniedException; -use Twig\Extension\AbstractExtension; -use Twig\TwigFilter; -use Twig\TwigFunction; /** * @see \App\Tests\Twig\UserExtensionTest */ -final class UserExtension +final readonly class UserExtension { - private readonly LogEntryRepository $repo; + private LogEntryRepository $repo; public function __construct(EntityManagerInterface $em, - private readonly Security $security, - private readonly UrlGeneratorInterface $urlGenerator) + private Security $security, + private UrlGeneratorInterface $urlGenerator) { $this->repo = $em->getRepository(AbstractLogEntry::class); } - public function getFilters(): array + /** + * Returns the user which has edited the given entity the last time. + */ + #[AsTwigFunction('last_editing_user')] + public function lastEditingUser(AbstractDBElement $element): ?User { - return [ - new TwigFilter('remove_locale_from_path', fn(string $path): string => $this->removeLocaleFromPath($path)), - ]; + return $this->repo->getLastEditingUser($element); } - public function getFunctions(): array + #[AsTwigFunction('creating_user')] + public function creatingUser(AbstractDBElement $element): ?User { - return [ - /* Returns the user which has edited the given entity the last time. */ - new TwigFunction('last_editing_user', fn(AbstractDBElement $element): ?User => $this->repo->getLastEditingUser($element)), - /* Returns the user which has created the given entity. */ - new TwigFunction('creating_user', fn(AbstractDBElement $element): ?User => $this->repo->getCreatingUser($element)), - ]; + return $this->repo->getCreatingUser($element); } /** @@ -125,6 +121,7 @@ final class UserExtension /** * This function/filter generates a path. */ + #[AsTwigFilter(name: 'remove_locale_from_path')] public function removeLocaleFromPath(string $path): string { //Ensure the path has the correct format diff --git a/tests/Twig/EntityExtensionTest.php b/tests/Twig/EntityExtensionTest.php index f3d5bef9..d206b941 100644 --- a/tests/Twig/EntityExtensionTest.php +++ b/tests/Twig/EntityExtensionTest.php @@ -55,20 +55,20 @@ final class EntityExtensionTest extends WebTestCase public function testGetEntityType(): void { - $this->assertSame('part', $this->service->getEntityType(new Part())); - $this->assertSame('footprint', $this->service->getEntityType(new Footprint())); - $this->assertSame('storelocation', $this->service->getEntityType(new StorageLocation())); - $this->assertSame('manufacturer', $this->service->getEntityType(new Manufacturer())); - $this->assertSame('category', $this->service->getEntityType(new Category())); - $this->assertSame('device', $this->service->getEntityType(new Project())); - $this->assertSame('attachment', $this->service->getEntityType(new PartAttachment())); - $this->assertSame('supplier', $this->service->getEntityType(new Supplier())); - $this->assertSame('user', $this->service->getEntityType(new User())); - $this->assertSame('group', $this->service->getEntityType(new Group())); - $this->assertSame('currency', $this->service->getEntityType(new Currency())); - $this->assertSame('measurement_unit', $this->service->getEntityType(new MeasurementUnit())); - $this->assertSame('label_profile', $this->service->getEntityType(new LabelProfile())); - $this->assertSame('part_custom_state', $this->service->getEntityType(new PartCustomState())); + $this->assertSame('part', $this->service->entityType(new Part())); + $this->assertSame('footprint', $this->service->entityType(new Footprint())); + $this->assertSame('storelocation', $this->service->entityType(new StorageLocation())); + $this->assertSame('manufacturer', $this->service->entityType(new Manufacturer())); + $this->assertSame('category', $this->service->entityType(new Category())); + $this->assertSame('device', $this->service->entityType(new Project())); + $this->assertSame('attachment', $this->service->entityType(new PartAttachment())); + $this->assertSame('supplier', $this->service->entityType(new Supplier())); + $this->assertSame('user', $this->service->entityType(new User())); + $this->assertSame('group', $this->service->entityType(new Group())); + $this->assertSame('currency', $this->service->entityType(new Currency())); + $this->assertSame('measurement_unit', $this->service->entityType(new MeasurementUnit())); + $this->assertSame('label_profile', $this->service->entityType(new LabelProfile())); + $this->assertSame('part_custom_state', $this->service->entityType(new PartCustomState())); } } From 6b83c772cc263716e07706a8db9534f10970eff9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Feb 2026 00:28:40 +0100 Subject: [PATCH 123/172] Moved user twig functions requiring repo access to its own extension service --- src/Twig/UserExtension.php | 23 +------------- src/Twig/UserRepoExtension.php | 56 ++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 22 deletions(-) create mode 100644 src/Twig/UserRepoExtension.php diff --git a/src/Twig/UserExtension.php b/src/Twig/UserExtension.php index 3cf76e63..81ff0857 100644 --- a/src/Twig/UserExtension.php +++ b/src/Twig/UserExtension.php @@ -43,11 +43,7 @@ namespace App\Twig; use Twig\Attribute\AsTwigFilter; use Twig\Attribute\AsTwigFunction; -use App\Entity\Base\AbstractDBElement; use App\Entity\UserSystem\User; -use App\Entity\LogSystem\AbstractLogEntry; -use App\Repository\LogEntryRepository; -use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\SecurityBundle\Security; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken; @@ -58,28 +54,11 @@ use Symfony\Component\Security\Core\Exception\AccessDeniedException; */ final readonly class UserExtension { - private LogEntryRepository $repo; - public function __construct(EntityManagerInterface $em, + public function __construct( private Security $security, private UrlGeneratorInterface $urlGenerator) { - $this->repo = $em->getRepository(AbstractLogEntry::class); - } - - /** - * Returns the user which has edited the given entity the last time. - */ - #[AsTwigFunction('last_editing_user')] - public function lastEditingUser(AbstractDBElement $element): ?User - { - return $this->repo->getLastEditingUser($element); - } - - #[AsTwigFunction('creating_user')] - public function creatingUser(AbstractDBElement $element): ?User - { - return $this->repo->getCreatingUser($element); } /** diff --git a/src/Twig/UserRepoExtension.php b/src/Twig/UserRepoExtension.php new file mode 100644 index 00000000..51ac113c --- /dev/null +++ b/src/Twig/UserRepoExtension.php @@ -0,0 +1,56 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Twig; + +use App\Entity\Base\AbstractDBElement; +use App\Entity\UserSystem\User; +use App\Repository\LogEntryRepository; +use Doctrine\ORM\EntityManagerInterface; +use Twig\Attribute\AsTwigFunction; + +final readonly class UserRepoExtension +{ + + public function __construct(private EntityManagerInterface $entityManager) + { + } + + /** + * Returns the user which has edited the given entity the last time. + */ + #[AsTwigFunction('creating_user')] + public function creatingUser(AbstractDBElement $element): ?User + { + return $this->entityManager->getRepository(LogEntryRepository::class)->getCreatingUser($element); + } + + /** + * Returns the user which has edited the given entity the last time. + */ + #[AsTwigFunction('last_editing_user')] + public function lastEditingUser(AbstractDBElement $element): ?User + { + return $this->entityManager->getRepository(LogEntryRepository::class)->getLastEditingUser($element); + } +} From 233c5e85500118d0bb2c60a5fcd95e65ddaea86a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Feb 2026 00:49:12 +0100 Subject: [PATCH 124/172] Fixed phpunit and phpstan issues --- .../LabelSystem/SandboxedTwigFactory.php | 17 ++++++++++++----- src/Twig/UserRepoExtension.php | 5 +++-- templates/parts/lists/_info_card.html.twig | 4 ++-- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/Services/LabelSystem/SandboxedTwigFactory.php b/src/Services/LabelSystem/SandboxedTwigFactory.php index d5e09fa5..b4f1d9f6 100644 --- a/src/Services/LabelSystem/SandboxedTwigFactory.php +++ b/src/Services/LabelSystem/SandboxedTwigFactory.php @@ -70,12 +70,14 @@ use App\Twig\Sandbox\SandboxedLabelExtension; use App\Twig\TwigCoreExtension; use InvalidArgumentException; use Twig\Environment; +use Twig\Extension\AttributeExtension; use Twig\Extension\SandboxExtension; use Twig\Extra\Html\HtmlExtension; use Twig\Extra\Intl\IntlExtension; use Twig\Extra\Markdown\MarkdownExtension; use Twig\Extra\String\StringExtension; use Twig\Loader\ArrayLoader; +use Twig\RuntimeLoader\FactoryRuntimeLoader; use Twig\Sandbox\SecurityPolicyInterface; /** @@ -186,13 +188,18 @@ final class SandboxedTwigFactory $twig->addExtension(new StringExtension()); $twig->addExtension(new HtmlExtension()); - //Add Part-DB specific extension - $twig->addExtension($this->formatExtension); - $twig->addExtension($this->barcodeExtension); - $twig->addExtension($this->entityExtension); - $twig->addExtension($this->twigCoreExtension); $twig->addExtension($this->sandboxedLabelExtension); + //Our other extensions are using attributes, we need a bit more work to load them + $dynamicExtensions = [$this->formatExtension, $this->barcodeExtension, $this->entityExtension, $this->twigCoreExtension]; + $dynamicExtensionsMap = []; + + foreach ($dynamicExtensions as $extension) { + $twig->addExtension(new AttributeExtension($extension::class)); + $dynamicExtensionsMap[$extension::class] = static fn () => $extension; + } + $twig->addRuntimeLoader(new FactoryRuntimeLoader($dynamicExtensionsMap)); + return $twig; } diff --git a/src/Twig/UserRepoExtension.php b/src/Twig/UserRepoExtension.php index 51ac113c..1dcc6706 100644 --- a/src/Twig/UserRepoExtension.php +++ b/src/Twig/UserRepoExtension.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace App\Twig; use App\Entity\Base\AbstractDBElement; +use App\Entity\LogSystem\AbstractLogEntry; use App\Entity\UserSystem\User; use App\Repository\LogEntryRepository; use Doctrine\ORM\EntityManagerInterface; @@ -42,7 +43,7 @@ final readonly class UserRepoExtension #[AsTwigFunction('creating_user')] public function creatingUser(AbstractDBElement $element): ?User { - return $this->entityManager->getRepository(LogEntryRepository::class)->getCreatingUser($element); + return $this->entityManager->getRepository(AbstractLogEntry::class)->getCreatingUser($element); } /** @@ -51,6 +52,6 @@ final readonly class UserRepoExtension #[AsTwigFunction('last_editing_user')] public function lastEditingUser(AbstractDBElement $element): ?User { - return $this->entityManager->getRepository(LogEntryRepository::class)->getLastEditingUser($element); + return $this->entityManager->getRepository(AbstractLogEntry::class)->getLastEditingUser($element); } } diff --git a/templates/parts/lists/_info_card.html.twig b/templates/parts/lists/_info_card.html.twig index 876bd31b..a35e2862 100644 --- a/templates/parts/lists/_info_card.html.twig +++ b/templates/parts/lists/_info_card.html.twig @@ -84,7 +84,7 @@ - {% if entity is instanceof("App\\Entity\\Parts\\Storelocation") %} + {% if entity is instanceof("App\\Entity\\Parts\\StorageLocation") %} {{ dropdown.profile_dropdown('storelocation', entity.id, true, 'btn-secondary w-100 mt-2') }} {% endif %} @@ -136,4 +136,4 @@ {% if filterForm is defined %} {% include "parts/lists/_filter.html.twig" %} {% endif %} - \ No newline at end of file + From aed2652f1d078436be5655543a9165f6bd5fd8d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Feb 2026 13:52:56 +0100 Subject: [PATCH 125/172] Added functions to retrieve associated parts of an element within twig labels This fixes #1239 --- docs/usage/labels.md | 26 ++++++----- .../LabelSystem/SandboxedTwigFactory.php | 1 + src/Twig/Sandbox/SandboxedLabelExtension.php | 46 ++++++++++++++++++- 3 files changed, 60 insertions(+), 13 deletions(-) diff --git a/docs/usage/labels.md b/docs/usage/labels.md index 4c3f8b32..7d0d2ed3 100644 --- a/docs/usage/labels.md +++ b/docs/usage/labels.md @@ -91,7 +91,7 @@ in [official documentation](https://twig.symfony.com/doc/3.x/). Twig allows you for much more complex and dynamic label generation. You can use loops, conditions, and functions to create the label content and you can access almost all data Part-DB offers. The label templates are evaluated in a special sandboxed environment, -where only certain operations are allowed. Only read access to entities is allowed. However as it circumvents Part-DB normal permission system, +where only certain operations are allowed. Only read access to entities is allowed. However, as it circumvents Part-DB normal permission system, the twig mode is only available to users with the "Twig mode" permission. The following variables are in injected into Twig and can be accessed using `{% raw %}{{ variable }}{% endraw %}` ( @@ -99,10 +99,10 @@ or `{% raw %}{{ variable.property }}{% endraw %}`): | Variable name | Description | |--------------------------------------------|--------------------------------------------------------------------------------------| -| `{% raw %}{{ element }}{% endraw %}` | The target element, selected in label dialog. | +| `{% raw %}{{ element }}{% endraw %}` | The target element, selected in label dialog. | | `{% raw %}{{ user }}{% endraw %}` | The current logged in user. Null if you are not logged in | | `{% raw %}{{ install_title }}{% endraw %}` | The name of the current Part-DB instance (similar to [[INSTALL_NAME]] placeholder). | -| `{% raw %}{{ page }}{% endraw %}` | The page number (the nth-element for which the label is generated | +| `{% raw %}{{ page }}{% endraw %}` | The page number (the nth-element for which the label is generated ) | | `{% raw %}{{ last_page }}{% endraw %}` | The page number of the last element. Equals the number of all pages / element labels | | `{% raw %}{{ paper_width }}{% endraw %}` | The width of the label paper in mm | | `{% raw %}{{ paper_height }}{% endraw %}` | The height of the label paper in mm | @@ -236,12 +236,16 @@ certain data: #### Functions -| Function name | Description | -|----------------------------------------------|-----------------------------------------------------------------------------------------------| -| `placeholder(placeholder, element)` | Get the value of a placeholder of an element | -| `entity_type(element)` | Get the type of an entity as string | -| `entity_url(element, type)` | Get the URL to a specific entity type page (e.g. `info`, `edit`, etc.) | -| `barcode_svg(content, type)` | Generate a barcode SVG from the content and type (e.g. `QRCODE`, `CODE128` etc.). A svg string is returned, which you need to data uri encode to inline it. | +| Function name | Description | +|------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `placeholder(placeholder, element)` | Get the value of a placeholder of an element | +| `entity_type(element)` | Get the type of an entity as string | +| `entity_url(element, type)` | Get the URL to a specific entity type page (e.g. `info`, `edit`, etc.) | +| `barcode_svg(content, type)` | Generate a barcode SVG from the content and type (e.g. `QRCODE`, `CODE128` etc.). A svg string is returned, which you need to data uri encode to inline it. | +| `associated_parts(element)` | Get the associated parts of an element like a storagelocation, footprint, etc. Only the directly associated parts are returned | +| `associated_parts_r(element)` | Get the associated parts of an element like a storagelocation, footprint, etc. including all sub-entities recursively (e.g. sub-locations) | +| `associated_parts_count(element)` | Get the count of associated parts of an element like a storagelocation, footprint, excluding sub-entities | +| `associated_parts_count_r(element)` | Get the count of associated parts of an element like a storagelocation, footprint, including all sub-entities recursively (e.g. sub-locations) | ### Filters @@ -285,5 +289,5 @@ If you want to use a different (more beautiful) font, you can use the [custom fo feature. There is the [Noto](https://www.google.com/get/noto/) font family from Google, which supports a lot of languages and is available in different styles (regular, bold, italic, bold-italic). -For example, you can use [Noto CJK](https://github.com/notofonts/noto-cjk) for more beautiful Chinese, Japanese, -and Korean characters. \ No newline at end of file +For example, you can use [Noto CJK](https://github.com/notofonts/noto-cjk) for more beautiful Chinese, Japanese, +and Korean characters. diff --git a/src/Services/LabelSystem/SandboxedTwigFactory.php b/src/Services/LabelSystem/SandboxedTwigFactory.php index b4f1d9f6..b89b3c0c 100644 --- a/src/Services/LabelSystem/SandboxedTwigFactory.php +++ b/src/Services/LabelSystem/SandboxedTwigFactory.php @@ -114,6 +114,7 @@ final class SandboxedTwigFactory 'barcode_svg', //SandboxedLabelExtension 'placeholder', + 'associated_parts', 'associated_parts_count', 'associated_parts_r', 'associated_parts_count_r', ]; private const ALLOWED_METHODS = [ diff --git a/src/Twig/Sandbox/SandboxedLabelExtension.php b/src/Twig/Sandbox/SandboxedLabelExtension.php index 59fb0af0..3b8eeed2 100644 --- a/src/Twig/Sandbox/SandboxedLabelExtension.php +++ b/src/Twig/Sandbox/SandboxedLabelExtension.php @@ -23,14 +23,18 @@ declare(strict_types=1); namespace App\Twig\Sandbox; +use App\Entity\Base\AbstractPartsContainingDBElement; +use App\Entity\Parts\Part; +use App\Repository\AbstractPartsContainingRepository; use App\Services\LabelSystem\LabelTextReplacer; +use Doctrine\ORM\EntityManagerInterface; use Twig\Extension\AbstractExtension; use Twig\TwigFilter; use Twig\TwigFunction; class SandboxedLabelExtension extends AbstractExtension { - public function __construct(private readonly LabelTextReplacer $labelTextReplacer) + public function __construct(private readonly LabelTextReplacer $labelTextReplacer, private readonly EntityManagerInterface $em) { } @@ -39,6 +43,11 @@ class SandboxedLabelExtension extends AbstractExtension { return [ new TwigFunction('placeholder', fn(string $text, object $label_target) => $this->labelTextReplacer->handlePlaceholderOrReturnNull($text, $label_target)), + + new TwigFunction("associated_parts", $this->associatedParts(...)), + new TwigFunction("associated_parts_count", $this->associatedPartsCount(...)), + new TwigFunction("associated_parts_r", $this->associatedPartsRecursive(...)), + new TwigFunction("associated_parts_count_r", $this->associatedPartsCountRecursive(...)), ]; } @@ -48,4 +57,37 @@ class SandboxedLabelExtension extends AbstractExtension new TwigFilter('placeholders', fn(string $text, object $label_target) => $this->labelTextReplacer->replace($text, $label_target)), ]; } -} \ No newline at end of file + + /** + * Returns all parts associated with the given element. + * @param AbstractPartsContainingDBElement $element + * @return Part[] + */ + public function associatedParts(AbstractPartsContainingDBElement $element): array + { + /** @var AbstractPartsContainingRepository $repo */ + $repo = $this->em->getRepository($element::class); + return $repo->getParts($element); + } + + public function associatedPartsCount(AbstractPartsContainingDBElement $element): int + { + /** @var AbstractPartsContainingRepository $repo */ + $repo = $this->em->getRepository($element::class); + return $repo->getPartsCount($element); + } + + public function associatedPartsRecursive(AbstractPartsContainingDBElement $element): array + { + /** @var AbstractPartsContainingRepository $repo */ + $repo = $this->em->getRepository($element::class); + return $repo->getPartsRecursive($element); + } + + public function associatedPartsCountRecursive(AbstractPartsContainingDBElement $element): int + { + /** @var AbstractPartsContainingRepository $repo */ + $repo = $this->em->getRepository($element::class); + return $repo->getPartsCountRecursive($element); + } +} From 1c6bf3f47292b3c1ab025b8ac5390466cd5b069e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Feb 2026 14:07:50 +0100 Subject: [PATCH 126/172] Allow more useful functions in twig labels --- docs/usage/labels.md | 2 ++ .../LabelSystem/SandboxedTwigFactory.php | 20 +++++++++---------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/docs/usage/labels.md b/docs/usage/labels.md index 7d0d2ed3..6896ccb7 100644 --- a/docs/usage/labels.md +++ b/docs/usage/labels.md @@ -246,6 +246,8 @@ certain data: | `associated_parts_r(element)` | Get the associated parts of an element like a storagelocation, footprint, etc. including all sub-entities recursively (e.g. sub-locations) | | `associated_parts_count(element)` | Get the count of associated parts of an element like a storagelocation, footprint, excluding sub-entities | | `associated_parts_count_r(element)` | Get the count of associated parts of an element like a storagelocation, footprint, including all sub-entities recursively (e.g. sub-locations) | +| `type_label(element)` | Get the name of the type of an element (e.g. "Part", "Storage location", etc.) | +| `type_label_p(element)` | Get the name of the type of an element in plural form (e.g. "Parts", "Storage locations", etc.) | ### Filters diff --git a/src/Services/LabelSystem/SandboxedTwigFactory.php b/src/Services/LabelSystem/SandboxedTwigFactory.php index b89b3c0c..fb3b6362 100644 --- a/src/Services/LabelSystem/SandboxedTwigFactory.php +++ b/src/Services/LabelSystem/SandboxedTwigFactory.php @@ -86,11 +86,11 @@ use Twig\Sandbox\SecurityPolicyInterface; */ final class SandboxedTwigFactory { - private const ALLOWED_TAGS = ['apply', 'autoescape', 'do', 'for', 'if', 'set', 'verbatim', 'with']; + private const ALLOWED_TAGS = ['apply', 'autoescape', 'do', 'for', 'if', 'set', 'types', 'verbatim', 'with']; private const ALLOWED_FILTERS = ['abs', 'batch', 'capitalize', 'column', 'country_name', - 'currency_name', 'currency_symbol', 'date', 'date_modify', 'data_uri', 'default', 'escape', 'filter', 'first', 'format', + 'currency_name', 'currency_symbol', 'date', 'date_modify', 'data_uri', 'default', 'escape', 'filter', 'find', 'first', 'format', 'format_currency', 'format_date', 'format_datetime', 'format_number', 'format_time', 'html_to_markdown', 'join', 'keys', - 'language_name', 'last', 'length', 'locale_name', 'lower', 'map', 'markdown_to_html', 'merge', 'nl2br', 'raw', 'number_format', + 'language_name', 'last', 'length', 'locale_name', 'lower', 'map', 'markdown_to_html', 'merge', 'nl2br', 'number_format', 'raw', 'reduce', 'replace', 'reverse', 'round', 'slice', 'slug', 'sort', 'spaceless', 'split', 'striptags', 'timezone_name', 'title', 'trim', 'u', 'upper', 'url_encode', @@ -104,12 +104,12 @@ final class SandboxedTwigFactory ]; private const ALLOWED_FUNCTIONS = ['country_names', 'country_timezones', 'currency_names', 'cycle', - 'date', 'html_classes', 'language_names', 'locale_names', 'max', 'min', 'random', 'range', 'script_names', - 'template_from_string', 'timezone_names', + 'date', 'enum', 'enum_cases', 'html_classes', 'language_names', 'locale_names', 'max', 'min', 'random', 'range', 'script_names', + 'timezone_names', //Part-DB specific extensions: //EntityExtension: - 'entity_type', 'entity_url', + 'entity_type', 'entity_url', 'type_label', 'type_label_plural', //BarcodeExtension: 'barcode_svg', //SandboxedLabelExtension @@ -131,7 +131,7 @@ final class SandboxedTwigFactory 'getValueTypical', 'getUnit', 'getValueText', ], MeasurementUnit::class => ['getUnit', 'isInteger', 'useSIPrefix'], PartLot::class => ['isExpired', 'getDescription', 'getComment', 'getExpirationDate', 'getStorageLocation', - 'getPart', 'isInstockUnknown', 'getAmount', 'getNeedsRefill', 'getVendorBarcode'], + 'getPart', 'isInstockUnknown', 'getAmount', 'getOwner', 'getLastStocktakeAt', 'getNeedsRefill', 'getVendorBarcode'], StorageLocation::class => ['isFull', 'isOnlySinglePart', 'isLimitToExistingParts', 'getStorageType'], Supplier::class => ['getShippingCosts', 'getDefaultCurrency'], Part::class => ['isNeedsReview', 'getTags', 'getMass', 'getIpn', 'getProviderReference', @@ -142,13 +142,13 @@ final class SandboxedTwigFactory 'getParameters', 'getGroupedParameters', 'isProjectBuildPart', 'getBuiltProject', 'getAssociatedPartsAsOwner', 'getAssociatedPartsAsOther', 'getAssociatedPartsAll', - 'getEdaInfo' + 'getEdaInfo', 'getGtin' ], Currency::class => ['getIsoCode', 'getInverseExchangeRate', 'getExchangeRate'], Orderdetail::class => ['getPart', 'getSupplier', 'getSupplierPartNr', 'getObsolete', - 'getPricedetails', 'findPriceForQty', 'isObsolete', 'getSupplierProductUrl'], + 'getPricedetails', 'findPriceForQty', 'isObsolete', 'getSupplierProductUrl', 'getPricesIncludesVAT'], Pricedetail::class => ['getOrderdetail', 'getPrice', 'getPricePerUnit', 'getPriceRelatedQuantity', - 'getMinDiscountQuantity', 'getCurrency', 'getCurrencyISOCode'], + 'getMinDiscountQuantity', 'getCurrency', 'getCurrencyISOCode', 'getIncludesVat'], InfoProviderReference:: class => ['getProviderKey', 'getProviderId', 'getProviderUrl', 'getLastUpdated', 'isProviderCreated'], PartAssociation::class => ['getType', 'getComment', 'getOwner', 'getOther', 'getOtherType'], From 5e9f7a11a368245a3eaf57a87090519395e22ffb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Feb 2026 14:11:31 +0100 Subject: [PATCH 127/172] Catch more errors of twig labels --- src/Exceptions/TwigModeException.php | 5 ++--- src/Services/LabelSystem/LabelHTMLGenerator.php | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Exceptions/TwigModeException.php b/src/Exceptions/TwigModeException.php index b76d14d3..ea84667a 100644 --- a/src/Exceptions/TwigModeException.php +++ b/src/Exceptions/TwigModeException.php @@ -42,15 +42,14 @@ declare(strict_types=1); namespace App\Exceptions; use RuntimeException; -use Twig\Error\Error; class TwigModeException extends RuntimeException { private const PROJECT_PATH = __DIR__ . '/../../'; - public function __construct(?Error $previous = null) + public function __construct(?\Throwable $previous = null) { - parent::__construct($previous->getMessage(), 0, $previous); + parent::__construct($previous?->getMessage() ?? "Unknown message", 0, $previous); } /** diff --git a/src/Services/LabelSystem/LabelHTMLGenerator.php b/src/Services/LabelSystem/LabelHTMLGenerator.php index 8a5201ff..31093953 100644 --- a/src/Services/LabelSystem/LabelHTMLGenerator.php +++ b/src/Services/LabelSystem/LabelHTMLGenerator.php @@ -95,7 +95,7 @@ final class LabelHTMLGenerator 'paper_height' => $options->getHeight(), ] ); - } catch (Error $exception) { + } catch (\Throwable $exception) { throw new TwigModeException($exception); } } else { From 7998cdcd714972f0be14b2377ddb03b1729af0aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Feb 2026 14:24:31 +0100 Subject: [PATCH 128/172] Added hint about HTML block to twig label documentation --- docs/usage/labels.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/usage/labels.md b/docs/usage/labels.md index 6896ccb7..c804cebb 100644 --- a/docs/usage/labels.md +++ b/docs/usage/labels.md @@ -94,6 +94,8 @@ the label content and you can access almost all data Part-DB offers. The label t where only certain operations are allowed. Only read access to entities is allowed. However, as it circumvents Part-DB normal permission system, the twig mode is only available to users with the "Twig mode" permission. +It is useful to use the HTML embed feature of the editor, to have a block where you can write the twig code without worrying about the WYSIWYG editor messing with your code. + The following variables are in injected into Twig and can be accessed using `{% raw %}{{ variable }}{% endraw %}` ( or `{% raw %}{{ variable.property }}{% endraw %}`): From 97a74815d3e8647d581c255b8c87861c47269627 Mon Sep 17 00:00:00 2001 From: d-buchmann Date: Sun, 15 Feb 2026 14:41:25 +0100 Subject: [PATCH 129/172] Fix fallback filename (#1238) Fixes #1231. Modify tests to account for this case. --- src/Services/ImportExportSystem/EntityExporter.php | 5 ++++- .../ImportExportSystem/EntityExporterTest.php | 14 +++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/Services/ImportExportSystem/EntityExporter.php b/src/Services/ImportExportSystem/EntityExporter.php index 9ed027ae..ab87a905 100644 --- a/src/Services/ImportExportSystem/EntityExporter.php +++ b/src/Services/ImportExportSystem/EntityExporter.php @@ -266,11 +266,14 @@ class EntityExporter //Sanitize the filename $filename = FilenameSanatizer::sanitizeFilename($filename); + //Remove percent for fallback + $fallback = str_replace("%", "_", $filename); + // Create the disposition of the file $disposition = $response->headers->makeDisposition( ResponseHeaderBag::DISPOSITION_ATTACHMENT, $filename, - u($filename)->ascii()->toString(), + $fallback, ); // Set the content disposition $response->headers->set('Content-Disposition', $disposition); diff --git a/tests/Services/ImportExportSystem/EntityExporterTest.php b/tests/Services/ImportExportSystem/EntityExporterTest.php index 8029a2d9..e4518961 100644 --- a/tests/Services/ImportExportSystem/EntityExporterTest.php +++ b/tests/Services/ImportExportSystem/EntityExporterTest.php @@ -43,9 +43,9 @@ final class EntityExporterTest extends WebTestCase private function getEntities(): array { - $entity1 = (new Category())->setName('Enitity 1')->setComment('Test'); - $entity1_1 = (new Category())->setName('Enitity 1.1')->setParent($entity1); - $entity2 = (new Category())->setName('Enitity 2'); + $entity1 = (new Category())->setName('Entity%1')->setComment('Test'); + $entity1_1 = (new Category())->setName('Entity 1.1')->setParent($entity1); + $entity2 = (new Category())->setName('Entity 2'); return [$entity1, $entity1_1, $entity2]; } @@ -55,12 +55,12 @@ final class EntityExporterTest extends WebTestCase $entities = $this->getEntities(); $json_without_children = $this->service->exportEntities($entities, ['format' => 'json', 'level' => 'simple']); - $this->assertJsonStringEqualsJsonString('[{"name":"Enitity 1","type":"category","full_name":"Enitity 1"},{"name":"Enitity 1.1","type":"category","full_name":"Enitity 1->Enitity 1.1"},{"name":"Enitity 2","type":"category","full_name":"Enitity 2"}]', + $this->assertJsonStringEqualsJsonString('[{"name":"Entity%1","type":"category","full_name":"Entity%1"},{"name":"Entity 1.1","type":"category","full_name":"Entity%1->Entity 1.1"},{"name":"Entity 2","type":"category","full_name":"Entity 2"}]', $json_without_children); $json_with_children = $this->service->exportEntities($entities, ['format' => 'json', 'level' => 'simple', 'include_children' => true]); - $this->assertJsonStringEqualsJsonString('[{"children":[{"children":[],"name":"Enitity 1.1","type":"category","full_name":"Enitity 1->Enitity 1.1"}],"name":"Enitity 1","type":"category","full_name":"Enitity 1"},{"children":[],"name":"Enitity 1.1","type":"category","full_name":"Enitity 1->Enitity 1.1"},{"children":[],"name":"Enitity 2","type":"category","full_name":"Enitity 2"}]', + $this->assertJsonStringEqualsJsonString('[{"children":[{"children":[],"name":"Entity 1.1","type":"category","full_name":"Entity%1->Entity 1.1"}],"name":"Entity%1","type":"category","full_name":"Entity%1"},{"children":[],"name":"Entity 1.1","type":"category","full_name":"Entity%1->Entity 1.1"},{"children":[],"name":"Entity 2","type":"category","full_name":"Entity 2"}]', $json_with_children); } @@ -95,8 +95,8 @@ final class EntityExporterTest extends WebTestCase $this->assertSame('name', $worksheet->getCell('A1')->getValue()); $this->assertSame('full_name', $worksheet->getCell('B1')->getValue()); - $this->assertSame('Enitity 1', $worksheet->getCell('A2')->getValue()); - $this->assertSame('Enitity 1', $worksheet->getCell('B2')->getValue()); + $this->assertSame('Entity%1', $worksheet->getCell('A2')->getValue()); + $this->assertSame('Entity%1', $worksheet->getCell('B2')->getValue()); unlink($tempFile); } From 1641708508adc6f4aedfe04d5f5ffa3cc4dda648 Mon Sep 17 00:00:00 2001 From: Niklas <44636701+MayNiklas@users.noreply.github.com> Date: Sun, 15 Feb 2026 16:03:07 +0100 Subject: [PATCH 130/172] Added API endpoint for generating labels (#1234) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * init API endpoint for generating labels * Improved API docs for label endpoint * Improved LabelGenerationProcessor --------- Co-authored-by: Jan Böhmer --- src/ApiResource/LabelGenerationRequest.php | 84 ++++++++++ src/Entity/LabelSystem/LabelProfile.php | 27 ++- src/State/LabelGenerationProcessor.php | 141 ++++++++++++++++ tests/API/Endpoints/LabelEndpointTest.php | 186 +++++++++++++++++++++ 4 files changed, 436 insertions(+), 2 deletions(-) create mode 100644 src/ApiResource/LabelGenerationRequest.php create mode 100644 src/State/LabelGenerationProcessor.php create mode 100644 tests/API/Endpoints/LabelEndpointTest.php diff --git a/src/ApiResource/LabelGenerationRequest.php b/src/ApiResource/LabelGenerationRequest.php new file mode 100644 index 00000000..9b4462a0 --- /dev/null +++ b/src/ApiResource/LabelGenerationRequest.php @@ -0,0 +1,84 @@ +. + */ + +namespace App\ApiResource; + +use ApiPlatform\Metadata\ApiProperty; +use ApiPlatform\Metadata\ApiResource; +use ApiPlatform\Metadata\Post; +use ApiPlatform\OpenApi\Model\Operation; +use ApiPlatform\OpenApi\Model\RequestBody; +use ApiPlatform\OpenApi\Model\Response; +use App\Entity\LabelSystem\LabelSupportedElement; +use App\State\LabelGenerationProcessor; +use App\Validator\Constraints\Misc\ValidRange; +use Symfony\Component\Validator\Constraints as Assert; + +/** + * API Resource for generating PDF labels for parts, part lots, or storage locations. + * This endpoint allows generating labels using saved label profiles. + */ +#[ApiResource( + uriTemplate: '/labels/generate', + description: 'Generate PDF labels for parts, part lots, or storage locations using label profiles.', + operations: [ + new Post( + inputFormats: ['json' => ['application/json']], + outputFormats: [], + openapi: new Operation( + responses: [ + "200" => new Response(description: "PDF file containing the generated labels"), + ], + summary: 'Generate PDF labels', + description: 'Generate PDF labels for one or more elements using a label profile. Returns a PDF file.', + requestBody: new RequestBody( + description: 'Label generation request', + required: true, + ), + ), + ) + ], + processor: LabelGenerationProcessor::class, +)] +class LabelGenerationRequest +{ + /** + * @var int The ID of the label profile to use for generation + */ + #[Assert\NotBlank(message: 'Profile ID is required')] + #[Assert\Positive(message: 'Profile ID must be a positive integer')] + public int $profileId = 0; + + /** + * @var string Comma-separated list of element IDs or ranges (e.g., "1,2,5-10,15") + */ + #[Assert\NotBlank(message: 'Element IDs are required')] + #[ValidRange()] + #[ApiProperty(example: "1,2,5-10,15")] + public string $elementIds = ''; + + /** + * @var LabelSupportedElement|null Optional: Override the element type. If not provided, uses profile's default. + */ + public ?LabelSupportedElement $elementType = null; +} diff --git a/src/Entity/LabelSystem/LabelProfile.php b/src/Entity/LabelSystem/LabelProfile.php index d3616c34..236c07f7 100644 --- a/src/Entity/LabelSystem/LabelProfile.php +++ b/src/Entity/LabelSystem/LabelProfile.php @@ -41,6 +41,12 @@ declare(strict_types=1); namespace App\Entity\LabelSystem; +use ApiPlatform\Doctrine\Orm\Filter\SearchFilter; +use ApiPlatform\Metadata\ApiFilter; +use ApiPlatform\Metadata\ApiResource; +use ApiPlatform\Metadata\Get; +use ApiPlatform\Metadata\GetCollection; +use ApiPlatform\OpenApi\Model\Operation; use Doctrine\Common\Collections\Criteria; use App\Entity\Attachments\Attachment; use App\Repository\LabelProfileRepository; @@ -58,6 +64,22 @@ use Symfony\Component\Validator\Constraints as Assert; /** * @extends AttachmentContainingDBElement */ +#[ApiResource( + operations: [ + new Get( + normalizationContext: ['groups' => ['label_profile:read', 'simple']], + security: "is_granted('read', object)", + openapi: new Operation(summary: 'Get a label profile by ID') + ), + new GetCollection( + normalizationContext: ['groups' => ['label_profile:read', 'simple']], + security: "is_granted('@labels.create_labels')", + openapi: new Operation(summary: 'List all available label profiles') + ), + ], + paginationEnabled: false, +)] +#[ApiFilter(SearchFilter::class, properties: ['options.supported_element' => 'exact', 'show_in_dropdown' => 'exact'])] #[UniqueEntity(['name', 'options.supported_element'])] #[ORM\Entity(repositoryClass: LabelProfileRepository::class)] #[ORM\EntityListeners([TreeCacheInvalidationListener::class])] @@ -80,20 +102,21 @@ class LabelProfile extends AttachmentContainingDBElement */ #[Assert\Valid] #[ORM\Embedded(class: 'LabelOptions')] - #[Groups(["extended", "full", "import"])] + #[Groups(["extended", "full", "import", "label_profile:read"])] protected LabelOptions $options; /** * @var string The comment info for this element */ #[ORM\Column(type: Types::TEXT)] + #[Groups(["extended", "full", "import", "label_profile:read"])] protected string $comment = ''; /** * @var bool determines, if this label profile should be shown in the dropdown quick menu */ #[ORM\Column(type: Types::BOOLEAN)] - #[Groups(["extended", "full", "import"])] + #[Groups(["extended", "full", "import", "label_profile:read"])] protected bool $show_in_dropdown = true; public function __construct() diff --git a/src/State/LabelGenerationProcessor.php b/src/State/LabelGenerationProcessor.php new file mode 100644 index 00000000..0472bbbd --- /dev/null +++ b/src/State/LabelGenerationProcessor.php @@ -0,0 +1,141 @@ +. + */ + +namespace App\State; + +use ApiPlatform\Metadata\Operation; +use ApiPlatform\State\ProcessorInterface; +use App\ApiResource\LabelGenerationRequest; +use App\Entity\Base\AbstractDBElement; +use App\Entity\LabelSystem\LabelProfile; +use App\Repository\DBElementRepository; +use App\Repository\LabelProfileRepository; +use App\Services\ElementTypeNameGenerator; +use App\Services\LabelSystem\LabelGenerator; +use App\Services\Misc\RangeParser; +use Doctrine\ORM\EntityManagerInterface; +use Symfony\Bundle\SecurityBundle\Security; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; +use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; + +class LabelGenerationProcessor implements ProcessorInterface +{ + public function __construct( + private readonly EntityManagerInterface $entityManager, + private readonly LabelGenerator $labelGenerator, + private readonly RangeParser $rangeParser, + private readonly ElementTypeNameGenerator $elementTypeNameGenerator, + private readonly Security $security, + ) { + } + + public function process(mixed $data, Operation $operation, array $uriVariables = [], array $context = []): Response + { + // Check if user has permission to create labels + if (!$this->security->isGranted('@labels.create_labels')) { + throw new AccessDeniedHttpException('You do not have permission to generate labels.'); + } + + if (!$data instanceof LabelGenerationRequest) { + throw new BadRequestHttpException('Invalid request data for label generation.'); + } + + /** @var LabelGenerationRequest $request */ + $request = $data; + + // Fetch the label profile + /** @var LabelProfileRepository $profileRepo */ + $profileRepo = $this->entityManager->getRepository(LabelProfile::class); + $profile = $profileRepo->find($request->profileId); + if (!$profile instanceof LabelProfile) { + throw new NotFoundHttpException(sprintf('Label profile with ID %d not found.', $request->profileId)); + } + + // Check if user has read permission for the profile + if (!$this->security->isGranted('read', $profile)) { + throw new AccessDeniedHttpException('You do not have permission to access this label profile.'); + } + + // Get label options from profile + $options = $profile->getOptions(); + + // Override element type if provided, otherwise use profile's default + if ($request->elementType !== null) { + $options->setSupportedElement($request->elementType); + } + + // Parse element IDs from the range string + try { + $idArray = $this->rangeParser->parse($request->elementIds); + } catch (\InvalidArgumentException $e) { + throw new BadRequestHttpException('Invalid element IDs format: ' . $e->getMessage()); + } + + if (empty($idArray)) { + throw new BadRequestHttpException('No valid element IDs provided.'); + } + + // Fetch the target entities + /** @var DBElementRepository $repo */ + $repo = $this->entityManager->getRepository($options->getSupportedElement()->getEntityClass()); + + $elements = $repo->getElementsFromIDArray($idArray); + + if (empty($elements)) { + throw new NotFoundHttpException('No elements found with the provided IDs.'); + } + + // Generate the PDF + try { + $pdfContent = $this->labelGenerator->generateLabel($options, $elements); + } catch (\Exception $e) { + throw new BadRequestHttpException('Failed to generate label: ' . $e->getMessage()); + } + + // Generate filename + $filename = $this->generateFilename($elements[0], $profile); + + + // Return PDF as response + return new Response( + $pdfContent, + Response::HTTP_OK, + [ + 'Content-Type' => 'application/pdf', + 'Content-Disposition' => sprintf('attachment; filename="%s"', $filename), + 'Content-Length' => (string) strlen($pdfContent), + ] + ); + } + + private function generateFilename(AbstractDBElement $element, LabelProfile $profile): string + { + $ret = 'label_' . $this->elementTypeNameGenerator->typeLabel($element); + $ret .= $element->getID(); + $ret .= '_' . preg_replace('/[^a-z0-9_\-]/i', '_', $profile->getName()); + + return $ret . '.pdf'; + } +} diff --git a/tests/API/Endpoints/LabelEndpointTest.php b/tests/API/Endpoints/LabelEndpointTest.php new file mode 100644 index 00000000..338af836 --- /dev/null +++ b/tests/API/Endpoints/LabelEndpointTest.php @@ -0,0 +1,186 @@ +. + */ + +declare(strict_types=1); + +namespace App\Tests\API\Endpoints; + +use App\Tests\API\AuthenticatedApiTestCase; + +class LabelEndpointTest extends AuthenticatedApiTestCase +{ + public function testGetLabelProfiles(): void + { + $response = self::createAuthenticatedClient()->request('GET', '/api/label_profiles'); + + self::assertResponseIsSuccessful(); + self::assertResponseHeaderSame('content-type', 'application/ld+json; charset=utf-8'); + + // Check that we get an array of label profiles + $json = $response->toArray(); + self::assertIsArray($json['hydra:member']); + self::assertNotEmpty($json['hydra:member']); + + // Check the structure of the first profile + $firstProfile = $json['hydra:member'][0]; + self::assertArrayHasKey('@id', $firstProfile); + self::assertArrayHasKey('name', $firstProfile); + self::assertArrayHasKey('options', $firstProfile); + self::assertArrayHasKey('show_in_dropdown', $firstProfile); + } + + public function testGetSingleLabelProfile(): void + { + $response = self::createAuthenticatedClient()->request('GET', '/api/label_profiles/1'); + + self::assertResponseIsSuccessful(); + self::assertJsonContains([ + '@id' => '/api/label_profiles/1', + ]); + + $json = $response->toArray(); + self::assertArrayHasKey('name', $json); + self::assertArrayHasKey('options', $json); + // Note: options is serialized but individual fields like width/height + // are only available in 'extended' or 'full' serialization groups + self::assertIsArray($json['options']); + } + + public function testFilterLabelProfilesByElementType(): void + { + $response = self::createAuthenticatedClient()->request('GET', '/api/label_profiles?options.supported_element=part'); + + self::assertResponseIsSuccessful(); + + $json = $response->toArray(); + // Check that we get results - the filter should work even if the field isn't in response + self::assertIsArray($json['hydra:member']); + // verify we got profiles + self::assertNotEmpty($json['hydra:member']); + } + + public function testGenerateLabelPdf(): void + { + $response = self::createAuthenticatedClient()->request('POST', '/api/labels/generate', [ + 'json' => [ + 'profileId' => 1, + 'elementIds' => '1', + ], + ]); + + self::assertResponseIsSuccessful(); + self::assertResponseHeaderSame('content-type', 'application/pdf'); + + // Check that the response contains PDF data + $content = $response->getContent(); + self::assertStringStartsWith('%PDF-', $content); + + // Check Content-Disposition header contains attachment and .pdf + $headers = $response->getHeaders(); + self::assertArrayHasKey('content-disposition', $headers); + $disposition = $headers['content-disposition'][0]; + self::assertStringContainsString('attachment', $disposition); + self::assertStringContainsString('.pdf', $disposition); + } + + public function testGenerateLabelPdfWithMultipleElements(): void + { + $response = self::createAuthenticatedClient()->request('POST', '/api/labels/generate', [ + 'json' => [ + 'profileId' => 1, + 'elementIds' => '1,2,3', + ], + ]); + + self::assertResponseIsSuccessful(); + self::assertResponseHeaderSame('content-type', 'application/pdf'); + self::assertStringStartsWith('%PDF-', $response->getContent()); + } + + public function testGenerateLabelPdfWithRange(): void + { + $response = self::createAuthenticatedClient()->request('POST', '/api/labels/generate', [ + 'json' => [ + 'profileId' => 1, + 'elementIds' => '1-3', + ], + ]); + + self::assertResponseIsSuccessful(); + self::assertResponseHeaderSame('content-type', 'application/pdf'); + self::assertStringStartsWith('%PDF-', $response->getContent()); + } + + public function testGenerateLabelPdfWithInvalidProfileId(): void + { + self::createAuthenticatedClient()->request('POST', '/api/labels/generate', [ + 'json' => [ + 'profileId' => 99999, + 'elementIds' => '1', + ], + ]); + + self::assertResponseStatusCodeSame(404); + } + + public function testGenerateLabelPdfWithInvalidElementIds(): void + { + $client = self::createAuthenticatedClient(); + $client->request('POST', '/api/labels/generate', [ + 'json' => [ + 'profileId' => 1, + 'elementIds' => 'invalid', + ], + ]); + + // Should return 400 or 422 (validation error) + $response = $client->getResponse(); + $statusCode = $response->getStatusCode(); + self::assertTrue( + $statusCode === 400 || $statusCode === 422, + "Expected status code 400 or 422, got {$statusCode}" + ); + } + + public function testGenerateLabelPdfWithNonExistentElements(): void + { + self::createAuthenticatedClient()->request('POST', '/api/labels/generate', [ + 'json' => [ + 'profileId' => 1, + 'elementIds' => '99999', + ], + ]); + + self::assertResponseStatusCodeSame(404); + } + + public function testGenerateLabelPdfRequiresAuthentication(): void + { + // Create a non-authenticated client + self::createClient()->request('POST', '/api/labels/generate', [ + 'json' => [ + 'profileId' => 1, + 'elementIds' => '1', + ], + ]); + + self::assertResponseStatusCodeSame(401); + } +} From f6764170e1c3666b3f6b2201d5d44ec67bca52ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Feb 2026 16:16:15 +0100 Subject: [PATCH 131/172] Fixed phpstan issues --- src/Twig/Sandbox/SandboxedLabelExtension.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Twig/Sandbox/SandboxedLabelExtension.php b/src/Twig/Sandbox/SandboxedLabelExtension.php index 3b8eeed2..6fe85e80 100644 --- a/src/Twig/Sandbox/SandboxedLabelExtension.php +++ b/src/Twig/Sandbox/SandboxedLabelExtension.php @@ -65,28 +65,28 @@ class SandboxedLabelExtension extends AbstractExtension */ public function associatedParts(AbstractPartsContainingDBElement $element): array { - /** @var AbstractPartsContainingRepository $repo */ + /** @var AbstractPartsContainingRepository $repo */ $repo = $this->em->getRepository($element::class); return $repo->getParts($element); } public function associatedPartsCount(AbstractPartsContainingDBElement $element): int { - /** @var AbstractPartsContainingRepository $repo */ + /** @var AbstractPartsContainingRepository $repo */ $repo = $this->em->getRepository($element::class); return $repo->getPartsCount($element); } public function associatedPartsRecursive(AbstractPartsContainingDBElement $element): array { - /** @var AbstractPartsContainingRepository $repo */ + /** @var AbstractPartsContainingRepository $repo */ $repo = $this->em->getRepository($element::class); return $repo->getPartsRecursive($element); } public function associatedPartsCountRecursive(AbstractPartsContainingDBElement $element): int { - /** @var AbstractPartsContainingRepository $repo */ + /** @var AbstractPartsContainingRepository $repo */ $repo = $this->em->getRepository($element::class); return $repo->getPartsCountRecursive($element); } From e19929249ffb731cfa410b6b27e8d35009dcc705 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Feb 2026 19:30:53 +0100 Subject: [PATCH 132/172] Mark parts datatables query as read only for some memory optimizations --- src/DataTables/PartsDataTable.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/DataTables/PartsDataTable.php b/src/DataTables/PartsDataTable.php index fbc5211d..e6ed7c10 100644 --- a/src/DataTables/PartsDataTable.php +++ b/src/DataTables/PartsDataTable.php @@ -47,6 +47,7 @@ use App\Services\EntityURLGenerator; use App\Services\Formatters\AmountFormatter; use App\Settings\BehaviorSettings\TableSettings; use Doctrine\ORM\AbstractQuery; +use Doctrine\ORM\Query; use Doctrine\ORM\QueryBuilder; use Omines\DataTablesBundle\Adapter\Doctrine\ORM\SearchCriteriaProvider; use Omines\DataTablesBundle\Column\TextColumn; @@ -364,7 +365,10 @@ final class PartsDataTable implements DataTableTypeInterface ->addGroupBy('attachments') ->addGroupBy('partUnit') ->addGroupBy('partCustomState') - ->addGroupBy('parameters'); + ->addGroupBy('parameters') + + ->setHint(Query::HINT_READ_ONLY, true) + ; //Get the results in the same order as the IDs were passed FieldHelper::addOrderByFieldParam($builder, 'part.id', 'ids'); From 8e0fcdb73bde8a909aae3c5eb8c74fe292f7664f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Feb 2026 20:07:38 +0100 Subject: [PATCH 133/172] Added some part datatables optimization --- src/DataTables/PartsDataTable.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/DataTables/PartsDataTable.php b/src/DataTables/PartsDataTable.php index e6ed7c10..d2faba76 100644 --- a/src/DataTables/PartsDataTable.php +++ b/src/DataTables/PartsDataTable.php @@ -334,6 +334,7 @@ final class PartsDataTable implements DataTableTypeInterface ->addSelect('orderdetails') ->addSelect('attachments') ->addSelect('storelocations') + ->addSelect('projectBomEntries') ->from(Part::class, 'part') ->leftJoin('part.category', 'category') ->leftJoin('part.master_picture_attachment', 'master_picture_attachment') @@ -348,6 +349,7 @@ final class PartsDataTable implements DataTableTypeInterface ->leftJoin('part.partUnit', 'partUnit') ->leftJoin('part.partCustomState', 'partCustomState') ->leftJoin('part.parameters', 'parameters') + ->leftJoin('part.project_bom_entries', 'projectBomEntries') ->where('part.id IN (:ids)') ->setParameter('ids', $ids) @@ -366,8 +368,10 @@ final class PartsDataTable implements DataTableTypeInterface ->addGroupBy('partUnit') ->addGroupBy('partCustomState') ->addGroupBy('parameters') + ->addGroupBy('projectBomEntries') ->setHint(Query::HINT_READ_ONLY, true) + ->setHint(Query::HINT_FORCE_PARTIAL_LOAD, false) ; //Get the results in the same order as the IDs were passed From c00556829a4dc5c58483568e3509c46aef1cda9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Feb 2026 21:43:47 +0100 Subject: [PATCH 134/172] Focus the first newly created number input for collection_types Improves PR #1240 --- .../elements/collection_type_controller.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/assets/controllers/elements/collection_type_controller.js b/assets/controllers/elements/collection_type_controller.js index 06815a7c..647ed5e5 100644 --- a/assets/controllers/elements/collection_type_controller.js +++ b/assets/controllers/elements/collection_type_controller.js @@ -81,23 +81,29 @@ export default class extends Controller { //Afterwards return the newly created row if(targetTable.tBodies[0]) { targetTable.tBodies[0].insertAdjacentHTML('beforeend', newElementStr); - var fields = targetTable.tBodies[0].querySelectorAll("input[type=number]"); - fields[fields.length - 1].focus(); ret = targetTable.tBodies[0].lastElementChild; } else { //Otherwise just insert it targetTable.insertAdjacentHTML('beforeend', newElementStr); - var fields = targetTable.querySelectorAll("input[type=number]"); - fields[fields.length - 1].focus(); ret = targetTable.lastElementChild; } //Trigger an event to notify other components that a new element has been created, so they can for example initialize select2 on it targetTable.dispatchEvent(new CustomEvent("collection:elementAdded", {bubbles: true})); + this.focusNumberInput(ret); + return ret; } + focusNumberInput(element) { + const fields = element.querySelectorAll("input[type=number]"); + //Focus the first available number input field to open the numeric keyboard on mobile devices + if(fields.length > 0) { + fields[0].focus(); + } + } + /** * This action opens a file dialog to select multiple files and then creates a new element for each file, where * the file is assigned to the input field. From c17cf2baa1350701ef6d8547fdade52fea7ad238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Feb 2026 21:49:18 +0100 Subject: [PATCH 135/172] Fixed rendering of tristate checkboxes --- templates/form/extended_bootstrap_layout.html.twig | 5 +++++ templates/parts/edit/_eda.html.twig | 8 ++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/templates/form/extended_bootstrap_layout.html.twig b/templates/form/extended_bootstrap_layout.html.twig index ecd7caf0..1227750c 100644 --- a/templates/form/extended_bootstrap_layout.html.twig +++ b/templates/form/extended_bootstrap_layout.html.twig @@ -155,3 +155,8 @@ {{- parent() -}} {% endif %} {% endblock %} + +{% block boolean_constraint_widget %} + {{ form_widget(form.value) }} + {{ form_errors(form.value) }} +{% endblock %} diff --git a/templates/parts/edit/_eda.html.twig b/templates/parts/edit/_eda.html.twig index 4df675c4..1383871e 100644 --- a/templates/parts/edit/_eda.html.twig +++ b/templates/parts/edit/_eda.html.twig @@ -1,11 +1,7 @@ {{ form_row(form.eda_info.reference_prefix) }} {{ form_row(form.eda_info.value) }} -
-
- {{ form_row(form.eda_info.visibility) }} -
-
+{{ form_row(form.eda_info.visibility) }}
@@ -21,4 +17,4 @@
{{ form_row(form.eda_info.kicad_symbol) }} -{{ form_row(form.eda_info.kicad_footprint) }} \ No newline at end of file +{{ form_row(form.eda_info.kicad_footprint) }} From 6afca44897b2cc7a9eab442fdb12cd0f00a0269e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Feb 2026 22:19:44 +0100 Subject: [PATCH 136/172] Use xxh3 hashes instead of encoding for info provider cache keys --- src/Services/InfoProviderSystem/PartInfoRetriever.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Services/InfoProviderSystem/PartInfoRetriever.php b/src/Services/InfoProviderSystem/PartInfoRetriever.php index 0eb74642..9a24f3ae 100644 --- a/src/Services/InfoProviderSystem/PartInfoRetriever.php +++ b/src/Services/InfoProviderSystem/PartInfoRetriever.php @@ -82,7 +82,7 @@ final class PartInfoRetriever protected function searchInProvider(InfoProviderInterface $provider, string $keyword): array { //Generate key and escape reserved characters from the provider id - $escaped_keyword = urlencode($keyword); + $escaped_keyword = hash('xxh3', $keyword); return $this->partInfoCache->get("search_{$provider->getProviderKey()}_{$escaped_keyword}", function (ItemInterface $item) use ($provider, $keyword) { //Set the expiration time $item->expiresAfter(!$this->debugMode ? self::CACHE_RESULT_EXPIRATION : 1); @@ -108,7 +108,7 @@ final class PartInfoRetriever } //Generate key and escape reserved characters from the provider id - $escaped_part_id = urlencode($part_id); + $escaped_part_id = hash('xxh3', $part_id); return $this->partInfoCache->get("details_{$provider_key}_{$escaped_part_id}", function (ItemInterface $item) use ($provider, $part_id) { //Set the expiration time $item->expiresAfter(!$this->debugMode ? self::CACHE_DETAIL_EXPIRATION : 1); @@ -145,4 +145,4 @@ final class PartInfoRetriever return $this->dto_to_entity_converter->convertPart($details); } -} \ No newline at end of file +} From 7354b37ef6b29bdf8d09984232e3bad51742b8b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Feb 2026 22:24:00 +0100 Subject: [PATCH 137/172] New Crowdin updates (#1228) * New translations messages.en.xlf (German) * New translations messages.en.xlf (German) * New translations validators.en.xlf (Polish) * New translations security.en.xlf (Danish) * New translations security.en.xlf (Ukrainian) * New translations security.en.xlf (German) * New translations security.en.xlf (Hungarian) * New translations security.en.xlf (Dutch) * New translations security.en.xlf (Chinese Simplified) * New translations messages.en.xlf (English) * New translations validators.en.xlf (English) * New translations security.en.xlf (English) * New translations frontend.en.xlf (Danish) * New translations frontend.en.xlf (German) * New translations frontend.en.xlf (Hungarian) * New translations frontend.en.xlf (Ukrainian) * New translations frontend.en.xlf (Chinese Simplified) * New translations frontend.en.xlf (English) * New translations messages.en.xlf (German) --- translations/frontend.da.xlf | 2 +- translations/frontend.de.xlf | 2 +- translations/frontend.en.xlf | 2 +- translations/frontend.hu.xlf | 2 +- translations/frontend.uk.xlf | 2 +- translations/frontend.zh.xlf | 2 +- translations/messages.de.xlf | 120 +++++++++++++++++++++++++++++++-- translations/messages.en.xlf | 36 +++++----- translations/security.da.xlf | 2 +- translations/security.de.xlf | 2 +- translations/security.en.xlf | 2 +- translations/security.hu.xlf | 2 +- translations/security.nl.xlf | 2 +- translations/security.uk.xlf | 2 +- translations/security.zh.xlf | 2 +- translations/validators.en.xlf | 2 +- translations/validators.pl.xlf | 16 ++++- 17 files changed, 160 insertions(+), 40 deletions(-) diff --git a/translations/frontend.da.xlf b/translations/frontend.da.xlf index 9c6b3129..4b6a15b9 100644 --- a/translations/frontend.da.xlf +++ b/translations/frontend.da.xlf @@ -56,4 +56,4 @@ - \ No newline at end of file + diff --git a/translations/frontend.de.xlf b/translations/frontend.de.xlf index 4eaded60..9ebd0d32 100644 --- a/translations/frontend.de.xlf +++ b/translations/frontend.de.xlf @@ -56,4 +56,4 @@ - \ No newline at end of file + diff --git a/translations/frontend.en.xlf b/translations/frontend.en.xlf index aa3cf2d9..91617f79 100644 --- a/translations/frontend.en.xlf +++ b/translations/frontend.en.xlf @@ -56,4 +56,4 @@ - \ No newline at end of file + diff --git a/translations/frontend.hu.xlf b/translations/frontend.hu.xlf index bdcda170..c303dedc 100644 --- a/translations/frontend.hu.xlf +++ b/translations/frontend.hu.xlf @@ -56,4 +56,4 @@ - \ No newline at end of file + diff --git a/translations/frontend.uk.xlf b/translations/frontend.uk.xlf index 86f51f95..fee1b03e 100644 --- a/translations/frontend.uk.xlf +++ b/translations/frontend.uk.xlf @@ -56,4 +56,4 @@ - \ No newline at end of file + diff --git a/translations/frontend.zh.xlf b/translations/frontend.zh.xlf index d2ea6fd0..8bb063b8 100644 --- a/translations/frontend.zh.xlf +++ b/translations/frontend.zh.xlf @@ -56,4 +56,4 @@ - \ No newline at end of file + diff --git a/translations/messages.de.xlf b/translations/messages.de.xlf index c4f2d5d8..c20e8152 100644 --- a/translations/messages.de.xlf +++ b/translations/messages.de.xlf @@ -11868,7 +11868,7 @@ Buerklin-API-Authentication-Server: update_manager.view_release - update_manager.view_release + Release ansehen @@ -11964,7 +11964,7 @@ Buerklin-API-Authentication-Server: update_manager.view_release_notes - update_manager.view_release_notes + Release notes ansehen @@ -12102,7 +12102,7 @@ Buerklin-API-Authentication-Server: perm.system.manage_updates - perm.system.manage_updates + Part-DB Updated verwalten @@ -12354,13 +12354,13 @@ Buerklin-API-Authentication-Server: settings.ips.generic_web_provider.enabled.help - settings.ips.generic_web_provider.enabled.help + Wenn der Anbieter aktiviert ist, können Benutzer im Namen des Part-DB-Servers Anfragen an beliebige Websites stellen. Aktivieren Sie diese Option nur, wenn Sie sich der möglichen Folgen bewusst sind. info_providers.from_url.title - Erstelle [part] aus URL + Erstelle [Part] aus URL @@ -12399,5 +12399,113 @@ Buerklin-API-Authentication-Server: Update zu + + + part.gtin + GTIN / EAN + + + + + info_providers.capabilities.gtin + GTIN / EAN + + + + + part.table.gtin + GTIN + + + + + scan_dialog.mode.gtin + GTIN / EAN Barcode + + + + + attachment_type.edit.allowed_targets + Nur verwenden für + + + + + attachment_type.edit.allowed_targets.help + Machen Sie diesen Anhangstyp nur für bestimmte Elementtypen verfügbar. Leer lassen, um diesen Anhangstyp für alle Elementtypen anzuzeigen. + + + + + orderdetails.edit.prices_includes_vat + Preise einschl. MwSt. + + + + + prices.incl_vat + Inkl. MwSt. + + + + + prices.excl_vat + Exkl. MwSt. + + + + + settings.system.localization.prices_include_tax_by_default + Preise enthalten standardmäßig Mehrwertsteuer + + + + + settings.system.localization.prices_include_tax_by_default.description + Der Standardwert für neu erstellte Einkaufinformationen, ob die Preise Mehrwertsteuer enthalten oder nicht. + + + + + part_lot.edit.last_stocktake_at + Letzte Inventur + + + + + perm.parts_stock.stocktake + Inventur + + + + + part.info.stocktake_modal.title + Inventur des Bestandes + + + + + part.info.stocktake_modal.expected_amount + Erwartete Menge + + + + + part.info.stocktake_modal.actual_amount + Tatsächliche Menge + + + + + log.part_stock_changed.stock_take + Inventur + + + + + log.element_edited.changed_fields.last_stocktake_at + Letzte Inventur + + - \ No newline at end of file + diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index bbd96ac6..d9418563 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -12402,109 +12402,109 @@ Buerklin-API Authentication server: - + part.gtin GTIN / EAN - + info_providers.capabilities.gtin GTIN / EAN - + part.table.gtin GTIN - + scan_dialog.mode.gtin GTIN / EAN barcode - + attachment_type.edit.allowed_targets Use only for - + attachment_type.edit.allowed_targets.help Make this attachment type only available for certain element classes. Leave empty to show this attachment type for all element classes. - + orderdetails.edit.prices_includes_vat Prices include VAT - + prices.incl_vat Incl. VAT - + prices.excl_vat Excl. VAT - + settings.system.localization.prices_include_tax_by_default Prices include VAT by default - + settings.system.localization.prices_include_tax_by_default.description The default value for newly created purchase infos, if prices include VAT or not. - + part_lot.edit.last_stocktake_at Last stocktake - + perm.parts_stock.stocktake Stocktake - + part.info.stocktake_modal.title Stocktake lot - + part.info.stocktake_modal.expected_amount Expected amount - + part.info.stocktake_modal.actual_amount Actual amount - + log.part_stock_changed.stock_take Stocktake - + log.element_edited.changed_fields.last_stocktake_at Last stocktake diff --git a/translations/security.da.xlf b/translations/security.da.xlf index 99329533..ab35c605 100644 --- a/translations/security.da.xlf +++ b/translations/security.da.xlf @@ -20,4 +20,4 @@ - \ No newline at end of file + diff --git a/translations/security.de.xlf b/translations/security.de.xlf index 2a357094..927f8f9c 100644 --- a/translations/security.de.xlf +++ b/translations/security.de.xlf @@ -20,4 +20,4 @@ - \ No newline at end of file + diff --git a/translations/security.en.xlf b/translations/security.en.xlf index 5a79d6ec..0b0b4569 100644 --- a/translations/security.en.xlf +++ b/translations/security.en.xlf @@ -20,4 +20,4 @@ - \ No newline at end of file + diff --git a/translations/security.hu.xlf b/translations/security.hu.xlf index 3c885815..7c448da0 100644 --- a/translations/security.hu.xlf +++ b/translations/security.hu.xlf @@ -20,4 +20,4 @@ - \ No newline at end of file + diff --git a/translations/security.nl.xlf b/translations/security.nl.xlf index 0e4ecc41..7ba9fcc1 100644 --- a/translations/security.nl.xlf +++ b/translations/security.nl.xlf @@ -20,4 +20,4 @@ - \ No newline at end of file + diff --git a/translations/security.uk.xlf b/translations/security.uk.xlf index 03be9410..12737cf3 100644 --- a/translations/security.uk.xlf +++ b/translations/security.uk.xlf @@ -20,4 +20,4 @@ - \ No newline at end of file + diff --git a/translations/security.zh.xlf b/translations/security.zh.xlf index 181c9c0f..58fbb26f 100644 --- a/translations/security.zh.xlf +++ b/translations/security.zh.xlf @@ -20,4 +20,4 @@ - \ No newline at end of file + diff --git a/translations/validators.en.xlf b/translations/validators.en.xlf index ed824f0b..624c6a89 100644 --- a/translations/validators.en.xlf +++ b/translations/validators.en.xlf @@ -248,7 +248,7 @@ - + validator.invalid_gtin This is not an valid GTIN / EAN! diff --git a/translations/validators.pl.xlf b/translations/validators.pl.xlf index 03942667..e5392d76 100644 --- a/translations/validators.pl.xlf +++ b/translations/validators.pl.xlf @@ -148,7 +148,7 @@ project.bom_has_to_include_all_subelement_parts - BOM projektu musi zawierać wszystkie komponenty produkcyjne podprojektów. Brakuje komponentu %part_name% projektu %project_name%! + BOM projektu musi zawierać wszystkie komponenty produkcyjne pod projektów @@ -223,6 +223,12 @@ Ze względu na ograniczenia techniczne nie jest możliwe wybranie daty po 19 stycznia 2038 w systemach 32-bitowych! + + + validator.fileSize.invalidFormat + Niewłaściwy format + + validator.invalid_range @@ -235,5 +241,11 @@ Nieprawidłowy kod. Sprawdź, czy aplikacja uwierzytelniająca jest poprawnie skonfigurowana i czy zarówno serwer, jak i urządzenie uwierzytelniające mają poprawnie ustawiony czas. + + + settings.synonyms.type_synonyms.collection_type.duplicate + Duplikuj + + - \ No newline at end of file + From be808e28bcaeb4d60f4b076fb3cd4336dcbb6690 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 15 Feb 2026 22:29:16 +0100 Subject: [PATCH 138/172] Updated dependencies --- composer.lock | 16 ++++++++++------ yarn.lock | 12 ++++++------ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/composer.lock b/composer.lock index 6566ebbc..2db828a5 100644 --- a/composer.lock +++ b/composer.lock @@ -16558,16 +16558,16 @@ }, { "name": "thecodingmachine/safe", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/thecodingmachine/safe.git", - "reference": "2cdd579eeaa2e78e51c7509b50cc9fb89a956236" + "reference": "705683a25bacf0d4860c7dea4d7947bfd09eea19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/2cdd579eeaa2e78e51c7509b50cc9fb89a956236", - "reference": "2cdd579eeaa2e78e51c7509b50cc9fb89a956236", + "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/705683a25bacf0d4860c7dea4d7947bfd09eea19", + "reference": "705683a25bacf0d4860c7dea4d7947bfd09eea19", "shasum": "" }, "require": { @@ -16677,7 +16677,7 @@ "description": "PHP core functions that throw exceptions instead of returning FALSE on error", "support": { "issues": "https://github.com/thecodingmachine/safe/issues", - "source": "https://github.com/thecodingmachine/safe/tree/v3.3.0" + "source": "https://github.com/thecodingmachine/safe/tree/v3.4.0" }, "funding": [ { @@ -16688,12 +16688,16 @@ "url": "https://github.com/shish", "type": "github" }, + { + "url": "https://github.com/silasjoisten", + "type": "github" + }, { "url": "https://github.com/staabm", "type": "github" } ], - "time": "2025-05-14T06:15:44+00:00" + "time": "2026-02-04T18:08:13+00:00" }, { "name": "tiendanube/gtinvalidation", diff --git a/yarn.lock b/yarn.lock index e890f0fe..e3d72ad7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2800,9 +2800,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759: - version "1.0.30001769" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz#1ad91594fad7dc233777c2781879ab5409f7d9c2" - integrity sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg== + version "1.0.30001770" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz#4dc47d3b263a50fbb243448034921e0a88591a84" + integrity sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw== ccount@^2.0.0: version "2.0.1" @@ -7855,9 +7855,9 @@ webpack-sources@^2.0.1, webpack-sources@^2.2.0: source-map "^0.6.1" webpack-sources@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.3.tgz#d4bf7f9909675d7a070ff14d0ef2a4f3c982c723" - integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== + version "3.3.4" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.4.tgz#a338b95eb484ecc75fbb196cbe8a2890618b4891" + integrity sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q== webpack@^5.74.0: version "5.105.2" From 7069af4054fdc9bd65d37c7ed880e52b18019dfb Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Mon, 16 Feb 2026 12:50:52 +0100 Subject: [PATCH 139/172] Updated dockerfiles to not rely on node deb packages, that are not supported for armhf anymore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Initial plan * Refactor Dockerfiles to use Node.js multistage builds Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com> * Fix node-builder stage with stub translations file Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com> * Improve stub translations file creation using heredoc Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com> * Build real translations in node-builder stage via cache warmup Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com> * Improve error handling for cache warmup fallback Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com> * Use native build platform for node-builder stage Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com> * Do not include fallback for case that translations not exist * Use newer format for dockerfile-frankenphp * Dockfile added caching to package managers * Fixed frankenphp build * Fixed complain about missing symfony runtime * Use caching for frankenphp dockerfile * add target arch to dockerfile caches, to avoid problems * add targetarch arg * moved targetarch argument to correct position --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com> Co-authored-by: Jan Böhmer --- .docker/frankenphp/conf.d/app.ini | 4 +- .docker/frankenphp/worker.Caddyfile | 1 - Dockerfile | 115 ++++++++++++++++++++-------- Dockerfile-frankenphp | 99 +++++++++++++++++------- 4 files changed, 157 insertions(+), 62 deletions(-) diff --git a/.docker/frankenphp/conf.d/app.ini b/.docker/frankenphp/conf.d/app.ini index 10a062f2..08c71700 100644 --- a/.docker/frankenphp/conf.d/app.ini +++ b/.docker/frankenphp/conf.d/app.ini @@ -12,7 +12,7 @@ opcache.max_accelerated_files = 20000 opcache.memory_consumption = 256 opcache.enable_file_override = 1 -memory_limit = 256M +memory_limit = 512M upload_max_filesize=256M -post_max_size=300M \ No newline at end of file +post_max_size=300M diff --git a/.docker/frankenphp/worker.Caddyfile b/.docker/frankenphp/worker.Caddyfile index d384ae4c..eaea1892 100644 --- a/.docker/frankenphp/worker.Caddyfile +++ b/.docker/frankenphp/worker.Caddyfile @@ -1,4 +1,3 @@ worker { file ./public/index.php - env APP_RUNTIME Runtime\FrankenPhpSymfony\Runtime } diff --git a/Dockerfile b/Dockerfile index 8ebd320c..e848acc1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,75 @@ +# syntax=docker/dockerfile:1 ARG BASE_IMAGE=debian:bookworm-slim ARG PHP_VERSION=8.4 +ARG NODE_VERSION=22 +# Node.js build stage for building frontend assets +# Use native platform for build stage as it's platform-independent +FROM --platform=$BUILDPLATFORM node:${NODE_VERSION}-bookworm-slim AS node-builder +ARG TARGETARCH +WORKDIR /app +# Install composer and minimal PHP for running Symfony commands +COPY --from=composer:latest /usr/bin/composer /usr/bin/composer + +# Use BuildKit cache mounts for apt in builder stage +RUN --mount=type=cache,id=apt-cache-node-$TARGETARCH,target=/var/cache/apt \ + --mount=type=cache,id=apt-lists-node-$TARGETARCH,target=/var/lib/apt/lists \ + apt-get update && apt-get install -y --no-install-recommends \ + php-cli \ + php-xml \ + php-mbstring \ + unzip \ + git \ + && apt-get clean && rm -rf /var/lib/apt/lists/* + +# Copy composer files and install dependencies (needed for Symfony UX assets) +COPY composer.json composer.lock symfony.lock ./ + +# Use BuildKit cache for Composer downloads +RUN --mount=type=cache,id=composer-cache,target=/root/.cache/composer \ + composer install --no-scripts --no-autoloader --no-dev --prefer-dist --ignore-platform-reqs + +# Copy all application files needed for cache warmup and webpack build +COPY .env* ./ +COPY bin ./bin +COPY config ./config +COPY src ./src +COPY translations ./translations +COPY public ./public +COPY assets ./assets +COPY webpack.config.js ./ + +# Generate autoloader +RUN composer dump-autoload + +# Create required directories for cache warmup +RUN mkdir -p var/cache var/log uploads public/media + +# Dump translations, which we need for cache warmup +RUN php bin/console cache:warmup -n --env=prod 2>&1 + +# Copy package files and install node dependencies +COPY package.json yarn.lock ./ +# Use BuildKit cache for yarn/npm +RUN --mount=type=cache,id=yarn-cache,target=/root/.cache/yarn \ + --mount=type=cache,id=npm-cache,target=/root/.npm \ + yarn install --network-timeout 600000 + +# Build the assets +RUN yarn build + +# Clean up +RUN yarn cache clean && rm -rf node_modules/ + +# Base stage for PHP FROM ${BASE_IMAGE} AS base ARG PHP_VERSION +ARG TARGETARCH -# Install needed dependencies for PHP build -#RUN apt-get update && apt-get install -y pkg-config curl libcurl4-openssl-dev libicu-dev \ -# libpng-dev libjpeg-dev libfreetype6-dev gnupg zip libzip-dev libjpeg62-turbo-dev libonig-dev libxslt-dev libwebp-dev vim \ -# && apt-get -y autoremove && apt-get clean autoclean && rm -rf /var/lib/apt/lists/* - -RUN apt-get update && apt-get -y install \ +# Use BuildKit cache mounts for apt in base stage +RUN --mount=type=cache,id=apt-cache-$TARGETARCH,target=/var/cache/apt \ + --mount=type=cache,id=apt-lists-$TARGETARCH,target=/var/lib/apt/lists \ + apt-get update && apt-get -y install \ apt-transport-https \ lsb-release \ ca-certificates \ @@ -39,19 +99,10 @@ RUN apt-get update && apt-get -y install \ gpg \ sudo \ && apt-get -y autoremove && apt-get clean autoclean && rm -rf /var/lib/apt/lists/* \ -# Create workdir and set permissions if directory does not exists && mkdir -p /var/www/html \ && chown -R www-data:www-data /var/www/html \ -# delete the "index.html" that installing Apache drops in here && rm -rvf /var/www/html/* -# Install node and yarn -RUN curl -sL https://deb.nodesource.com/setup_22.x | bash - && \ - apt-get update && apt-get install -y \ - nodejs \ - && apt-get -y autoremove && apt-get clean autoclean && rm -rf /var/lib/apt/lists/* && \ - npm install -g yarn - # Install composer COPY --from=composer:latest /usr/bin/composer /usr/bin/composer @@ -65,14 +116,12 @@ ENV APACHE_ENVVARS=$APACHE_CONFDIR/envvars # : ${APACHE_RUN_USER:=www-data} # export APACHE_RUN_USER # so that they can be overridden at runtime ("-e APACHE_RUN_USER=...") -RUN sed -ri 's/^export ([^=]+)=(.*)$/: ${\1:=\2}\nexport \1/' "$APACHE_ENVVARS"; \ - set -eux; . "$APACHE_ENVVARS"; \ - \ - # logs should go to stdout / stderr - ln -sfT /dev/stderr "$APACHE_LOG_DIR/error.log"; \ - ln -sfT /dev/stdout "$APACHE_LOG_DIR/access.log"; \ - ln -sfT /dev/stdout "$APACHE_LOG_DIR/other_vhosts_access.log"; \ - chown -R --no-dereference "$APACHE_RUN_USER:$APACHE_RUN_GROUP" "$APACHE_LOG_DIR"; +RUN sed -ri 's/^export ([^=]+)=(.*)$/: ${\1:=\2}\nexport \1/' "$APACHE_ENVVARS" && \ + set -eux; . "$APACHE_ENVVARS" && \ + ln -sfT /dev/stderr "$APACHE_LOG_DIR/error.log" && \ + ln -sfT /dev/stdout "$APACHE_LOG_DIR/access.log" && \ + ln -sfT /dev/stdout "$APACHE_LOG_DIR/other_vhosts_access.log" && \ + chown -R --no-dereference "$APACHE_RUN_USER:$APACHE_RUN_GROUP" "$APACHE_LOG_DIR" # --- @@ -141,7 +190,6 @@ COPY --chown=www-data:www-data . . # Setup apache2 RUN a2dissite 000-default.conf && \ a2ensite symfony.conf && \ -# Enable php-fpm a2enmod proxy_fcgi setenvif && \ a2enconf php${PHP_VERSION}-fpm && \ a2enconf docker-php && \ @@ -149,12 +197,13 @@ RUN a2dissite 000-default.conf && \ # Install composer and yarn dependencies for Part-DB USER www-data -RUN composer install -a --no-dev && \ +# Use BuildKit cache for Composer when running as www-data by setting COMPOSER_CACHE_DIR +RUN --mount=type=cache,id=composer-cache,target=/tmp/.composer-cache \ + COMPOSER_CACHE_DIR=/tmp/.composer-cache composer install -a --no-dev && \ composer clear-cache -RUN yarn install --network-timeout 600000 && \ - yarn build && \ - yarn cache clean && \ - rm -rf node_modules/ + +# Copy built frontend assets from node-builder stage +COPY --from=node-builder --chown=www-data:www-data /app/public/build ./public/build # Use docker env to output logs to stdout ENV APP_ENV=docker @@ -166,10 +215,12 @@ USER root RUN sed -i "s/PHP_VERSION/${PHP_VERSION}/g" ./.docker/partdb-entrypoint.sh # Copy entrypoint and apache2-foreground to /usr/local/bin and make it executable -RUN install ./.docker/partdb-entrypoint.sh /usr/local/bin && \ - install ./.docker/apache2-foreground /usr/local/bin +# Convert CRLF -> LF and install entrypoint scripts with executable mode +RUN sed -i 's/\r$//' ./.docker/partdb-entrypoint.sh ./.docker/apache2-foreground && \ + install -m 0755 ./.docker/partdb-entrypoint.sh /usr/local/bin/ && \ + install -m 0755 ./.docker/apache2-foreground /usr/local/bin/ ENTRYPOINT ["partdb-entrypoint.sh"] -CMD ["apache2-foreground"] +CMD ["/usr/local/bin/apache2-foreground"] # https://httpd.apache.org/docs/2.4/stopping.html#gracefulstop STOPSIGNAL SIGWINCH diff --git a/Dockerfile-frankenphp b/Dockerfile-frankenphp index 69b9bacd..4bf9eeeb 100644 --- a/Dockerfile-frankenphp +++ b/Dockerfile-frankenphp @@ -1,6 +1,72 @@ -FROM dunglas/frankenphp:1-php8.4 AS frankenphp_upstream +ARG NODE_VERSION=22 -RUN apt-get update && apt-get -y install \ +# Node.js build stage for building frontend assets +# Use native platform for build stage as it's platform-independent +FROM --platform=$BUILDPLATFORM node:${NODE_VERSION}-bookworm-slim AS node-builder +ARG TARGETARCH +WORKDIR /app + +# Install composer and minimal PHP for running Symfony commands +COPY --from=composer:latest /usr/bin/composer /usr/bin/composer + +# Use BuildKit cache mounts for apt in builder stage +RUN --mount=type=cache,id=apt-cache-node-$TARGETARCH,target=/var/cache/apt \ + --mount=type=cache,id=apt-lists-node-$TARGETARCH,target=/var/lib/apt/lists \ + apt-get update && apt-get install -y --no-install-recommends \ + php-cli \ + php-xml \ + php-mbstring \ + unzip \ + git \ + && apt-get clean && rm -rf /var/lib/apt/lists/* + +# Copy composer files and install dependencies (needed for Symfony UX assets) +COPY composer.json composer.lock symfony.lock ./ + +# Use BuildKit cache for Composer downloads +RUN --mount=type=cache,id=composer-cache,target=/root/.cache/composer \ + composer install --no-scripts --no-autoloader --no-dev --prefer-dist --ignore-platform-reqs + +# Copy all application files needed for cache warmup and webpack build +COPY .env* ./ +COPY bin ./bin +COPY config ./config +COPY src ./src +COPY translations ./translations +COPY public ./public +COPY assets ./assets +COPY webpack.config.js ./ + +# Generate autoloader +RUN composer dump-autoload + +# Create required directories for cache warmup +RUN mkdir -p var/cache var/log uploads public/media + +# Dump translations, which we need for cache warmup +RUN php bin/console cache:warmup -n --env=prod 2>&1 + +# Copy package files and install node dependencies +COPY package.json yarn.lock ./ + +# Use BuildKit cache for yarn/npm +RUN --mount=type=cache,id=yarn-cache,target=/root/.cache/yarn \ + --mount=type=cache,id=npm-cache,target=/root/.npm \ + yarn install --network-timeout 600000 + + +# Build the assets +RUN yarn build + +# Clean up +RUN yarn cache clean && rm -rf node_modules/ + +# FrankenPHP base stage +FROM dunglas/frankenphp:1-php8.4 AS frankenphp_upstream +ARG TARGETARCH +RUN --mount=type=cache,id=apt-cache-$TARGETARCH,target=/var/cache/apt \ + --mount=type=cache,id=apt-lists-$TARGETARCH,target=/var/lib/apt/lists \ + apt-get update && apt-get -y install \ curl \ ca-certificates \ mariadb-client \ @@ -13,24 +79,6 @@ RUN apt-get update && apt-get -y install \ zip \ && apt-get -y autoremove && apt-get clean autoclean && rm -rf /var/lib/apt/lists/*; -RUN set -eux; \ - # Run NodeSource setup script - curl -sL https://deb.nodesource.com/setup_22.x | bash -; \ - \ - # Install Node.js - apt-get update; \ - apt-get install -y --no-install-recommends \ - nodejs; \ - \ - # Cleanup - apt-get -y autoremove; \ - apt-get clean autoclean; \ - rm -rf /var/lib/apt/lists/*; \ - \ - # Install Yarn via npm - npm install -g yarn - - # Install PHP RUN set -eux; \ install-php-extensions \ @@ -76,14 +124,11 @@ COPY --link . ./ RUN set -eux; \ mkdir -p var/cache var/log; \ composer dump-autoload --classmap-authoritative --no-dev; \ - composer dump-env prod; \ composer run-script --no-dev post-install-cmd; \ chmod +x bin/console; sync; -RUN yarn install --network-timeout 600000 && \ - yarn build && \ - yarn cache clean && \ - rm -rf node_modules/ +# Copy built frontend assets from node-builder stage +COPY --from=node-builder /app/public/build ./public/build # Use docker env to output logs to stdout ENV APP_ENV=docker @@ -102,8 +147,8 @@ VOLUME ["/var/www/html/uploads", "/var/www/html/public/media"] HEALTHCHECK --start-period=60s CMD curl -f http://localhost:2019/metrics || exit 1 # See https://caddyserver.com/docs/conventions#file-locations for details -ENV XDG_CONFIG_HOME /config -ENV XDG_DATA_HOME /data +ENV XDG_CONFIG_HOME=/config +ENV XDG_DATA_HOME=/data EXPOSE 80 EXPOSE 443 From 80492a7b680ac452f4978c2e44f947fbdceb7c11 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Mon, 16 Feb 2026 13:15:52 +0100 Subject: [PATCH 140/172] Use native ARM runners for ARM Docker image builds (#1248) * Initial plan * Use ARM runners for ARM Docker image builds Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com> * Fix artifact naming and add comments for latest=false flavor Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com> * Remove trailing commas from tag configuration in merge job Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com> * Remove duplicate tag entries and clean up configuration Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com> --- .github/workflows/docker_build.yml | 113 ++++++++++++++++++++---- .github/workflows/docker_frankenphp.yml | 113 ++++++++++++++++++++---- 2 files changed, 194 insertions(+), 32 deletions(-) diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml index ce3243ca..2e0d533c 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -15,8 +15,20 @@ on: - 'v*.*.*-**' jobs: - docker: - runs-on: ubuntu-latest + build: + strategy: + matrix: + include: + - platform: linux/amd64 + runner: ubuntu-latest + platform-slug: amd64 + - platform: linux/arm64 + runner: ubuntu-24.04-arm + platform-slug: arm64 + - platform: linux/arm/v7 + runner: ubuntu-24.04-arm + platform-slug: armv7 + runs-on: ${{ matrix.runner }} steps: - name: Checkout @@ -32,13 +44,12 @@ jobs: # Mark the image build from master as latest (as we dont have really releases yet) tags: | type=edge,branch=master - type=ref,event=branch, - type=ref,event=tag, + type=ref,event=branch + type=ref,event=tag type=schedule type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} - type=ref,event=branch type=ref,event=pr labels: | org.opencontainers.image.source=${{ github.event.repository.clone_url }} @@ -49,12 +60,10 @@ jobs: org.opencontainers.image.source=https://github.com/Part-DB/Part-DB-symfony org.opencontainers.image.authors=Jan Böhmer org.opencontainers.licenses=AGPL-3.0-or-later + # Disable automatic 'latest' tag in build jobs - it will be created in merge job + flavor: | + latest=false - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - with: - platforms: 'arm64,arm' - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 @@ -67,13 +76,85 @@ jobs: password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Build and push + name: Build and push by digest + id: build uses: docker/build-push-action@v6 with: context: . - platforms: linux/amd64,linux/arm64,linux/arm/v7 - push: ${{ github.event_name != 'pull_request' }} - tags: ${{ steps.docker_meta.outputs.tags }} + platforms: ${{ matrix.platform }} labels: ${{ steps.docker_meta.outputs.labels }} - cache-from: type=gha - cache-to: type=gha,mode=max + outputs: type=image,name=jbtronics/part-db1,push-by-digest=true,name-canonical=true,push=${{ github.event_name != 'pull_request' }} + cache-from: type=gha,scope=build-${{ matrix.platform }} + cache-to: type=gha,mode=max,scope=build-${{ matrix.platform }} + + - + name: Export digest + if: github.event_name != 'pull_request' + run: | + mkdir -p /tmp/digests + digest="${{ steps.build.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}" + + - + name: Upload digest + if: github.event_name != 'pull_request' + uses: actions/upload-artifact@v4 + with: + name: digests-${{ matrix.platform-slug }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + merge: + runs-on: ubuntu-latest + needs: + - build + if: github.event_name != 'pull_request' + steps: + - + name: Download digests + uses: actions/download-artifact@v4 + with: + path: /tmp/digests + pattern: digests-* + merge-multiple: true + + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - + name: Docker meta + id: docker_meta + uses: docker/metadata-action@v5 + with: + images: | + jbtronics/part-db1 + tags: | + type=edge,branch=master + type=ref,event=branch + type=ref,event=tag + type=schedule + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=ref,event=pr + + - + name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - + name: Create manifest list and push + working-directory: /tmp/digests + run: | + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf 'jbtronics/part-db1@sha256:%s ' *) + + - + name: Inspect image + run: | + docker buildx imagetools inspect jbtronics/part-db1:${{ steps.docker_meta.outputs.version }} diff --git a/.github/workflows/docker_frankenphp.yml b/.github/workflows/docker_frankenphp.yml index 1180f0c5..10e62dfc 100644 --- a/.github/workflows/docker_frankenphp.yml +++ b/.github/workflows/docker_frankenphp.yml @@ -15,8 +15,20 @@ on: - 'v*.*.*-**' jobs: - docker: - runs-on: ubuntu-latest + build: + strategy: + matrix: + include: + - platform: linux/amd64 + runner: ubuntu-latest + platform-slug: amd64 + - platform: linux/arm64 + runner: ubuntu-24.04-arm + platform-slug: arm64 + - platform: linux/arm/v7 + runner: ubuntu-24.04-arm + platform-slug: armv7 + runs-on: ${{ matrix.runner }} steps: - name: Checkout @@ -32,13 +44,12 @@ jobs: # Mark the image build from master as latest (as we dont have really releases yet) tags: | type=edge,branch=master - type=ref,event=branch, - type=ref,event=tag, + type=ref,event=branch + type=ref,event=tag type=schedule type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} - type=ref,event=branch type=ref,event=pr labels: | org.opencontainers.image.source=${{ github.event.repository.clone_url }} @@ -49,12 +60,10 @@ jobs: org.opencontainers.image.source=https://github.com/Part-DB/Part-DB-server org.opencontainers.image.authors=Jan Böhmer org.opencontainers.licenses=AGPL-3.0-or-later + # Disable automatic 'latest' tag in build jobs - it will be created in merge job + flavor: | + latest=false - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - with: - platforms: 'arm64,arm' - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 @@ -67,14 +76,86 @@ jobs: password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Build and push + name: Build and push by digest + id: build uses: docker/build-push-action@v6 with: context: . file: Dockerfile-frankenphp - platforms: linux/amd64,linux/arm64,linux/arm/v7 - push: ${{ github.event_name != 'pull_request' }} - tags: ${{ steps.docker_meta.outputs.tags }} + platforms: ${{ matrix.platform }} labels: ${{ steps.docker_meta.outputs.labels }} - cache-from: type=gha - cache-to: type=gha,mode=max + outputs: type=image,name=partdborg/part-db,push-by-digest=true,name-canonical=true,push=${{ github.event_name != 'pull_request' }} + cache-from: type=gha,scope=build-${{ matrix.platform }} + cache-to: type=gha,mode=max,scope=build-${{ matrix.platform }} + + - + name: Export digest + if: github.event_name != 'pull_request' + run: | + mkdir -p /tmp/digests + digest="${{ steps.build.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}" + + - + name: Upload digest + if: github.event_name != 'pull_request' + uses: actions/upload-artifact@v4 + with: + name: digests-${{ matrix.platform-slug }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + merge: + runs-on: ubuntu-latest + needs: + - build + if: github.event_name != 'pull_request' + steps: + - + name: Download digests + uses: actions/download-artifact@v4 + with: + path: /tmp/digests + pattern: digests-* + merge-multiple: true + + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - + name: Docker meta + id: docker_meta + uses: docker/metadata-action@v5 + with: + images: | + partdborg/part-db + tags: | + type=edge,branch=master + type=ref,event=branch + type=ref,event=tag + type=schedule + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=ref,event=pr + + - + name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - + name: Create manifest list and push + working-directory: /tmp/digests + run: | + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf 'partdborg/part-db@sha256:%s ' *) + + - + name: Inspect image + run: | + docker buildx imagetools inspect partdborg/part-db:${{ steps.docker_meta.outputs.version }} From 7d6b84af3d4dbc263f96825165179cacf0b4c30c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 16 Feb 2026 13:32:13 +0100 Subject: [PATCH 141/172] Bumped version to 2.7.0 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index e70b4523..24ba9a38 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.6.0 +2.7.0 From d7ed2225b495f59afa7bd9f32b3936bd8e978068 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 16 Feb 2026 15:09:55 +0100 Subject: [PATCH 142/172] Ensure that part tables are correctly sorted on initial load --- .../elements/datatables/datatables_controller.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/assets/controllers/elements/datatables/datatables_controller.js b/assets/controllers/elements/datatables/datatables_controller.js index 5a50623d..9ac23483 100644 --- a/assets/controllers/elements/datatables/datatables_controller.js +++ b/assets/controllers/elements/datatables/datatables_controller.js @@ -108,11 +108,19 @@ export default class extends Controller { const raw_order = saved_state.order; settings.initial_order = raw_order.map((order) => { + //Skip if direction is empty, as this is the default, otherwise datatables server is confused when the order is sent in the request, but the initial order is set to an empty direction + if (order[1] === '') { + return null; + } + return { column: order[0], dir: order[1] } }); + + //Remove null values from the initial_order array + settings.initial_order = settings.initial_order.filter(order => order !== null); } let options = { From 8ad3c2e61298685005be42267790ca4d0c0cb4e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 16 Feb 2026 18:25:41 +0100 Subject: [PATCH 143/172] Allow stocktake date to be empty on part lot form Fixes issue #1250 --- src/Form/Part/PartLotType.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Form/Part/PartLotType.php b/src/Form/Part/PartLotType.php index ae86fb61..fc330bb1 100644 --- a/src/Form/Part/PartLotType.php +++ b/src/Form/Part/PartLotType.php @@ -117,7 +117,6 @@ class PartLotType extends AbstractType 'widget' => 'single_text', 'disabled' => !$this->security->isGranted('@parts_stock.stocktake'), 'required' => false, - 'empty_data' => null, ]); } From 5b4c1505b7772a69dea52295f729ec8073b2e48e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 16 Feb 2026 18:29:34 +0100 Subject: [PATCH 144/172] Fixed visual bug of tags column in parts lot --- templates/parts/info/_part_lots.html.twig | 34 ++++++++++++----------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/templates/parts/info/_part_lots.html.twig b/templates/parts/info/_part_lots.html.twig index cfb7190b..70e5dc4e 100644 --- a/templates/parts/info/_part_lots.html.twig +++ b/templates/parts/info/_part_lots.html.twig @@ -41,35 +41,37 @@ {{ lot.amount | format_amount(part.partUnit, {'decimals': 5}) }} {% endif %} -
{{ dropdown.profile_dropdown('part_lot', lot.id, false) }} {# Action for order information #}
- {% if lot.owner %} - + +
+ {% if lot.owner %} + {{ helper.user_icon_link(lot.owner) }} - {% endif %} - {% if lot.expirationDate %} - + {% endif %} + {% if lot.expirationDate %} + {{ lot.expirationDate | format_date() }}
- {% endif %} - {% if lot.expired %} - + {% endif %} + {% if lot.expired %} + {% trans %}part_lots.is_expired{% endtrans %} - {% endif %} - {% if lot.needsRefill %} - + {% endif %} + {% if lot.needsRefill %} + {% trans %}part_lots.need_refill{% endtrans %} - {% endif %} - {% if lot.lastStocktakeAt %} - + {% endif %} + {% if lot.lastStocktakeAt %} + {{ lot.lastStocktakeAt | format_datetime("short") }} - {% endif %} + {% endif %} +
From 28e6ca52fe95c75448b9573cf7771760e50bc3cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 16 Feb 2026 18:30:41 +0100 Subject: [PATCH 145/172] New translations messages.en.xlf (German) (#1249) --- translations/messages.de.xlf | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/translations/messages.de.xlf b/translations/messages.de.xlf index c20e8152..a9674614 100644 --- a/translations/messages.de.xlf +++ b/translations/messages.de.xlf @@ -11832,7 +11832,7 @@ Buerklin-API-Authentication-Server: update_manager.latest_release - update_manager.latest_release + Neueste Version @@ -12078,25 +12078,25 @@ Buerklin-API-Authentication-Server: update_manager.run_command_to_update - update_manager.run_command_to_update + Führen Sie den folgenden Befehl in Ihrem Terminal aus, um auf diese Version zu aktualisieren: update_manager.log_viewer - update_manager.log_viewer + Protokollanzeige update_manager.update_log - update_manager.update_log + Update-Protokoll update_manager.bytes - update_manager.bytes + Bytes @@ -12108,43 +12108,43 @@ Buerklin-API-Authentication-Server: update_manager.create_backup - update_manager.create_backup + Erstelle vor dem Update ein Backup (empfohlen) update_manager.confirm_update - update_manager.confirm_update + Sind Sie sicher, dass Sie Part-DB aktualisieren möchten? Vor dem Update wird ein Backup erstellt. update_manager.already_up_to_date - update_manager.already_up_to_date + Sie verwenden bereits die neueste Version von Part-DB. update_manager.progress.title - update_manager.progress.title + Update-Fortschritt update_manager.progress.updating - update_manager.progress.updating + Part-DB wird aktualisiert... update_manager.progress.completed - update_manager.progress.completed + Update abgeschlossen! update_manager.progress.failed - update_manager.progress.failed + Update fehlgeschlagen From 70cde4c3a816024fb989386414592cafe5a9f181 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 16 Feb 2026 18:34:20 +0100 Subject: [PATCH 146/172] Bumped version to 2.7.1 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 24ba9a38..860487ca 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.7.0 +2.7.1 From 3ffb5e827852ec1d9f274cd4ee6a9fa8b9ae0b14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Mon, 16 Feb 2026 22:05:49 +0100 Subject: [PATCH 147/172] Implemented Amazon info provider using canopy --- .../Providers/CanopyProvider.php | 177 ++++++++++++++++++ .../InfoProviderSystem/CanopySettings.php | 46 +++++ 2 files changed, 223 insertions(+) create mode 100644 src/Services/InfoProviderSystem/Providers/CanopyProvider.php create mode 100644 src/Settings/InfoProviderSystem/CanopySettings.php diff --git a/src/Services/InfoProviderSystem/Providers/CanopyProvider.php b/src/Services/InfoProviderSystem/Providers/CanopyProvider.php new file mode 100644 index 00000000..e6ca3961 --- /dev/null +++ b/src/Services/InfoProviderSystem/Providers/CanopyProvider.php @@ -0,0 +1,177 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Services\InfoProviderSystem\Providers; + +use App\Services\InfoProviderSystem\DTOs\FileDTO; +use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; +use App\Services\InfoProviderSystem\DTOs\PriceDTO; +use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO; +use App\Services\InfoProviderSystem\DTOs\SearchResultDTO; +use App\Settings\InfoProviderSystem\BuerklinSettings; +use App\Settings\InfoProviderSystem\CanopySettings; +use Symfony\Component\DependencyInjection\Attribute\When; +use Symfony\Contracts\HttpClient\HttpClientInterface; + +/** + * Use canopy API to retrieve infos from amazon + */ +class CanopyProvider implements InfoProviderInterface +{ + + public const BASE_URL = "https://rest.canopyapi.co/api"; + public const SEARCH_API_URL = self::BASE_URL . "/amazon/search"; + public const DETAIL_API_URL = self::BASE_URL . "/amazon/product"; + + public const DISTRIBUTOR_NAME = 'Amazon'; + + public function __construct(private readonly CanopySettings $settings, private readonly HttpClientInterface $httpClient) + { + + } + + public function getProviderInfo(): array + { + return [ + 'name' => 'Amazon (Canopy)', + 'description' => 'Retrieves part infos from Amazon using the Canopy API', + 'url' => 'https://canopyapi.co', + 'disabled_help' => 'Set Canopy API key in the provider configuration to enable this provider', + 'settings_class' => CanopySettings::class + ]; + } + + public function getProviderKey(): string + { + return 'canopy'; + } + + public function isActive(): bool + { + return $this->settings->apiKey !== null; + } + + private function productPageFromASIN(string $asin): string + { + return "https://www.amazon.{$this->settings->domain}/dp/{$asin}"; + } + + public function searchByKeyword(string $keyword): array + { + $response = $this->httpClient->request('GET', self::SEARCH_API_URL, [ + 'query' => [ + 'domain' => $this->settings->domain, + 'searchTerm' => $keyword, + ], + 'headers' => [ + 'API-KEY' => $this->settings->apiKey, + ] + ]); + + $data = $response->toArray(); + $results = $data['data']['amazonProductSearchResults']['productResults']['results'] ?? []; + + $out = []; + foreach ($results as $result) { + $out[] = new SearchResultDTO( + provider_key: $this->getProviderKey(), + provider_id: $result['asin'], + name: $result["title"], + description: "", + preview_image_url: $result["mainImageUrl"] ?? null, + provider_url: $this->productPageFromASIN($result['asin']), + ); + } + + return $out; + } + + private function categoriesToCategory(array $categories): ?string + { + if (count($categories) === 0) { + return null; + } + + return implode(" -> ", array_map(static fn($cat) => $cat['name'], $categories)); + } + + private function feauturesBulletsToNotes(array $featureBullets): string + { + $notes = "
    "; + foreach ($featureBullets as $bullet) { + $notes .= "
  • " . $bullet . "
  • "; + } + $notes .= "
"; + return $notes; + } + + private function priceToPurchaseInfo(array $price, string $asin): PurchaseInfoDTO + { + $priceDto = new PriceDTO(minimum_discount_amount: 1, price: (string) $price['value'], currency_iso_code: $price['currency'], includes_tax: true); + + return new PurchaseInfoDTO(self::DISTRIBUTOR_NAME, order_number: $asin, prices: [$priceDto], product_url: $this->productPageFromASIN($asin)); + } + + public function getDetails(string $id): PartDetailDTO + { + //Check that the id is a valid ASIN (10 characters, letters and numbers) + if (!preg_match('/^[A-Z0-9]{10}$/', $id)) { + throw new \InvalidArgumentException("The id must be a valid ASIN (10 characters, letters and numbers)"); + } + + $response = $this->httpClient->request('GET', self::DETAIL_API_URL, [ + 'query' => [ + 'asin' => $id, + 'domain' => $this->settings->domain, + ], + 'headers' => [ + 'API-KEY' => $this->settings->apiKey, + ], + ]); + + $product = $response->toArray()['data']['amazonProduct']; + + + return new PartDetailDTO( + provider_key: $this->getProviderKey(), + provider_id: $product['asin'], + name: $product['title'], + description: '', + category: $this->categoriesToCategory($product['categories']), + manufacturer: $product['brand'] ?? null, + preview_image_url: $product['mainImageUrl'] ?? $product['imageUrls'][0] ?? null, + provider_url: $this->productPageFromASIN($product['asin']), + notes: $this->feauturesBulletsToNotes($product['featureBullets'] ?? []), + vendor_infos: [$this->priceToPurchaseInfo($product['price'], $product['asin'])] + ); + } + + public function getCapabilities(): array + { + return [ + ProviderCapabilities::BASIC, + ProviderCapabilities::PICTURE, + ProviderCapabilities::PRICE, + ]; + } +} diff --git a/src/Settings/InfoProviderSystem/CanopySettings.php b/src/Settings/InfoProviderSystem/CanopySettings.php new file mode 100644 index 00000000..bc40bff1 --- /dev/null +++ b/src/Settings/InfoProviderSystem/CanopySettings.php @@ -0,0 +1,46 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Settings\InfoProviderSystem; + +use App\Form\Type\APIKeyType; +use App\Settings\SettingsIcon; +use Jbtronics\SettingsBundle\Metadata\EnvVarMode; +use Jbtronics\SettingsBundle\Settings\Settings; +use Jbtronics\SettingsBundle\Settings\SettingsParameter; +use Jbtronics\SettingsBundle\Settings\SettingsTrait; +use Symfony\Component\Translation\TranslatableMessage as TM; + +#[Settings(label: new TM("settings.ips.canopy"), description: new TM("settings.ips.canopy.help"))] +#[SettingsIcon("fa-plug")] +class CanopySettings +{ + use SettingsTrait; + + #[SettingsParameter(label: new TM("settings.ips.canopy.apiKey"), + formType: APIKeyType::class, + formOptions: ["help_html" => true], envVar: "PROVIDER_CANOPY_API_KEY", envVarMode: EnvVarMode::OVERWRITE)] + public ?string $apiKey = null; + + public string $domain = "de"; +} From d4d1964aea355e6b87327552c59aa990c4970e4b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 21 Feb 2026 21:34:50 +0100 Subject: [PATCH 148/172] Bump actions/download-artifact from 4 to 7 (#1252) Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 7. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/v4...v7) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker_build.yml | 2 +- .github/workflows/docker_frankenphp.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml index 2e0d533c..016d58d2 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -113,7 +113,7 @@ jobs: steps: - name: Download digests - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: path: /tmp/digests pattern: digests-* diff --git a/.github/workflows/docker_frankenphp.yml b/.github/workflows/docker_frankenphp.yml index 10e62dfc..2fffa6de 100644 --- a/.github/workflows/docker_frankenphp.yml +++ b/.github/workflows/docker_frankenphp.yml @@ -114,7 +114,7 @@ jobs: steps: - name: Download digests - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: path: /tmp/digests pattern: digests-* From 8ef9dd432f045c62f0e913997b4371fa577d9e2b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 21 Feb 2026 21:35:00 +0100 Subject: [PATCH 149/172] Bump actions/upload-artifact from 4 to 6 (#1253) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 6. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v4...v6) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker_build.yml | 2 +- .github/workflows/docker_frankenphp.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml index 016d58d2..1eff846e 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -98,7 +98,7 @@ jobs: - name: Upload digest if: github.event_name != 'pull_request' - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: digests-${{ matrix.platform-slug }} path: /tmp/digests/* diff --git a/.github/workflows/docker_frankenphp.yml b/.github/workflows/docker_frankenphp.yml index 2fffa6de..8acb5c22 100644 --- a/.github/workflows/docker_frankenphp.yml +++ b/.github/workflows/docker_frankenphp.yml @@ -99,7 +99,7 @@ jobs: - name: Upload digest if: github.event_name != 'pull_request' - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: digests-${{ matrix.platform-slug }} path: /tmp/digests/* From c29605ef2356cc50cf39261a11a645153451003a Mon Sep 17 00:00:00 2001 From: swdee Date: Mon, 23 Feb 2026 09:26:44 +1300 Subject: [PATCH 150/172] Label Scanner Enhancements: LCSC barcode, create part, augmented scanning (#1194) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 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 --- assets/controllers/common/toast_controller.js | 6 +- .../pages/barcode_scan_controller.js | 72 +++- assets/css/app/images.css | 6 + src/Controller/ScanController.php | 123 +++++-- .../InfoProviderNotActiveException.php | 48 +++ src/Form/LabelSystem/ScanDialogType.php | 1 + src/Repository/PartRepository.php | 65 ++++ .../InfoProviderSystem/PartInfoRetriever.php | 15 +- .../BarcodeScanner/BarcodeRedirector.php | 180 ---------- .../BarcodeScanner/BarcodeScanHelper.php | 15 + .../BarcodeScanResultHandler.php | 315 ++++++++++++++++++ .../BarcodeScanResultInterface.php | 2 +- .../BarcodeScanner/BarcodeSourceType.php | 15 +- .../BarcodeScanner/LCSCBarcodeScanResult.php | 157 +++++++++ src/Twig/AttachmentExtension.php | 25 +- templates/_turbo_control.html.twig | 28 +- .../label_system/scanner/_info_mode.html.twig | 154 +++++++++ .../label_system/scanner/scanner.html.twig | 41 +-- .../BarcodeScanner/BarcodeRedirectorTest.php | 85 ----- .../BarcodeScanner/BarcodeScanHelperTest.php | 38 +++ .../BarcodeScanResultHandlerTest.php | 183 ++++++++++ .../LCSCBarcodeScanResultTest.php | 86 +++++ translations/messages.en.xlf | 54 +++ 23 files changed, 1370 insertions(+), 344 deletions(-) create mode 100644 src/Exceptions/InfoProviderNotActiveException.php delete mode 100644 src/Services/LabelSystem/BarcodeScanner/BarcodeRedirector.php create mode 100644 src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandler.php create mode 100644 src/Services/LabelSystem/BarcodeScanner/LCSCBarcodeScanResult.php create mode 100644 templates/label_system/scanner/_info_mode.html.twig delete mode 100644 tests/Services/LabelSystem/BarcodeScanner/BarcodeRedirectorTest.php create mode 100644 tests/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandlerTest.php create mode 100644 tests/Services/LabelSystem/BarcodeScanner/LCSCBarcodeScanResultTest.php diff --git a/assets/controllers/common/toast_controller.js b/assets/controllers/common/toast_controller.js index 36b7f3cc..196692fb 100644 --- a/assets/controllers/common/toast_controller.js +++ b/assets/controllers/common/toast_controller.js @@ -20,6 +20,10 @@ import { Controller } from '@hotwired/stimulus'; import { Toast } from 'bootstrap'; +/** + * The purpose of this controller, is to show all containers. + * They should already be added via turbo-streams, but have to be called for to show them. + */ export default class extends Controller { connect() { //Move all toasts from the page into our toast container and show them @@ -33,4 +37,4 @@ export default class extends Controller { const toast = new Toast(this.element); toast.show(); } -} \ No newline at end of file +} diff --git a/assets/controllers/pages/barcode_scan_controller.js b/assets/controllers/pages/barcode_scan_controller.js index 200dd2a7..ae51e951 100644 --- a/assets/controllers/pages/barcode_scan_controller.js +++ b/assets/controllers/pages/barcode_scan_controller.js @@ -21,17 +21,31 @@ import {Controller} from "@hotwired/stimulus"; //import * as ZXing from "@zxing/library"; import {Html5QrcodeScanner, Html5Qrcode} from "@part-db/html5-qrcode"; +import { generateCsrfToken, generateCsrfHeaders } from "../csrf_protection_controller"; /* stimulusFetch: 'lazy' */ + export default class extends Controller { - - //codeReader = null; - _scanner = null; - + _submitting = false; + _lastDecodedText = ""; + _onInfoChange = null; connect() { - console.log('Init Scanner'); + + // Prevent double init if connect fires twice + if (this._scanner) return; + + // clear last decoded barcode when state changes on info box + const info = document.getElementById("scan_dialog_info_mode"); + if (info) { + this._onInfoChange = () => { + this._lastDecodedText = ""; + }; + info.addEventListener("change", this._onInfoChange); + } + + const isMobile = window.matchMedia("(max-width: 768px)").matches; //This function ensures, that the qrbox is 70% of the total viewport let qrboxFunction = function(viewfinderWidth, viewfinderHeight) { @@ -45,29 +59,61 @@ export default class extends Controller { } //Try to get the number of cameras. If the number is 0, then the promise will fail, and we show the warning dialog - Html5Qrcode.getCameras().catch((devices) => { - document.getElementById('scanner-warning').classList.remove('d-none'); + Html5Qrcode.getCameras().catch(() => { + document.getElementById("scanner-warning")?.classList.remove("d-none"); }); this._scanner = new Html5QrcodeScanner(this.element.id, { fps: 10, qrbox: qrboxFunction, + // Key change: shrink preview height on mobile + ...(isMobile ? { aspectRatio: 1.0 } : {}), experimentalFeatures: { //This option improves reading quality on android chrome - useBarCodeDetectorIfSupported: true - } + useBarCodeDetectorIfSupported: true, + }, }, false); this._scanner.render(this.onScanSuccess.bind(this)); } disconnect() { - this._scanner.pause(); - this._scanner.clear(); + + // If we already stopped/cleared before submit, nothing to do. + const scanner = this._scanner; + this._scanner = null; + this._lastDecodedText = ""; + + // Unbind info-mode change handler (always do this, even if scanner is null) + const info = document.getElementById("scan_dialog_info_mode"); + if (info && this._onInfoChange) { + info.removeEventListener("change", this._onInfoChange); + } + this._onInfoChange = null; + + if (!scanner) return; + + try { + const p = scanner.clear?.(); + if (p && typeof p.then === "function") p.catch(() => {}); + } catch (_) { + // ignore + } } - onScanSuccess(decodedText, decodedResult) { - //Put our decoded Text into the input box + + onScanSuccess(decodedText) { + if (!decodedText) return; + + const normalized = String(decodedText).trim(); + if (!normalized) return; + + // scan once per barcode + if (normalized === this._lastDecodedText) return; + + // Mark as handled immediately (prevents spam even if callback fires repeatedly) + this._lastDecodedText = normalized; + document.getElementById('scan_dialog_input').value = decodedText; //Submit form document.getElementById('scan_dialog_form').requestSubmit(); diff --git a/assets/css/app/images.css b/assets/css/app/images.css index 0212a85b..7fa23a9e 100644 --- a/assets/css/app/images.css +++ b/assets/css/app/images.css @@ -58,6 +58,12 @@ object-fit: contain; } +@media (max-width: 768px) { + .part-info-image { + max-height: 100px; + } +} + .object-fit-cover { object-fit: cover; } diff --git a/src/Controller/ScanController.php b/src/Controller/ScanController.php index aebadd89..65eccf27 100644 --- a/src/Controller/ScanController.php +++ b/src/Controller/ScanController.php @@ -41,11 +41,16 @@ declare(strict_types=1); namespace App\Controller; +use App\Exceptions\InfoProviderNotActiveException; use App\Form\LabelSystem\ScanDialogType; -use App\Services\LabelSystem\BarcodeScanner\BarcodeRedirector; +use App\Services\InfoProviderSystem\Providers\LCSCProvider; +use App\Services\LabelSystem\BarcodeScanner\BarcodeScanResultHandler; use App\Services\LabelSystem\BarcodeScanner\BarcodeScanHelper; +use App\Services\LabelSystem\BarcodeScanner\BarcodeScanResultInterface; use App\Services\LabelSystem\BarcodeScanner\BarcodeSourceType; use App\Services\LabelSystem\BarcodeScanner\LocalBarcodeScanResult; +use App\Services\LabelSystem\BarcodeScanner\LCSCBarcodeScanResult; +use App\Services\LabelSystem\BarcodeScanner\EIGP114BarcodeScanResult; use Doctrine\ORM\EntityNotFoundException; use InvalidArgumentException; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; @@ -53,6 +58,13 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Attribute\MapQueryParameter; use Symfony\Component\Routing\Attribute\Route; +use App\Services\InfoProviderSystem\PartInfoRetriever; +use App\Services\InfoProviderSystem\ProviderRegistry; +use Symfony\Component\HttpFoundation\JsonResponse; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; +use App\Entity\Parts\Part; +use \App\Entity\Parts\StorageLocation; +use Symfony\UX\Turbo\TurboBundle; /** * @see \App\Tests\Controller\ScanControllerTest @@ -60,9 +72,10 @@ use Symfony\Component\Routing\Attribute\Route; #[Route(path: '/scan')] class ScanController extends AbstractController { - public function __construct(protected BarcodeRedirector $barcodeParser, protected BarcodeScanHelper $barcodeNormalizer) - { - } + public function __construct( + protected BarcodeScanResultHandler $resultHandler, + protected BarcodeScanHelper $barcodeNormalizer, + ) {} #[Route(path: '', name: 'scan_dialog')] public function dialog(Request $request, #[MapQueryParameter] ?string $input = null): Response @@ -72,35 +85,86 @@ class ScanController extends AbstractController $form = $this->createForm(ScanDialogType::class); $form->handleRequest($request); + // If JS is working, scanning uses /scan/lookup and this action just renders the page. + // This fallback only runs if user submits the form manually or uses ?input=... if ($input === null && $form->isSubmitted() && $form->isValid()) { $input = $form['input']->getData(); - $mode = $form['mode']->getData(); } - $infoModeData = null; - if ($input !== null) { + if ($input !== null && $input !== '') { + $mode = $form->isSubmitted() ? $form['mode']->getData() : null; + $infoMode = $form->isSubmitted() && $form['info_mode']->getData(); + try { - $scan_result = $this->barcodeNormalizer->scanBarcodeContent($input, $mode ?? null); - //Perform a redirect if the info mode is not enabled - if (!$form['info_mode']->getData()) { - try { - return $this->redirect($this->barcodeParser->getRedirectURL($scan_result)); - } catch (EntityNotFoundException) { - $this->addFlash('success', 'scan.qr_not_found'); + $scan = $this->barcodeNormalizer->scanBarcodeContent($input, $mode ?? null); + + // If not in info mode, mimic “normal scan” behavior: redirect if possible. + if (!$infoMode) { + + // Try to get an Info URL if possible + $url = $this->resultHandler->getInfoURL($scan); + if ($url !== null) { + return $this->redirect($url); + } + + //Try to get an creation URL if possible (only for vendor codes) + $createUrl = $this->buildCreateUrlForScanResult($scan); + if ($createUrl !== null) { + return $this->redirect($createUrl); + } + + //// Otherwise: show “not found” (not “format unknown”) + $this->addFlash('warning', 'scan.qr_not_found'); + } else { // Info mode + // Info mode fallback: render page with prefilled result + $decoded = $scan->getDecodedForInfoMode(); + + //Try to resolve to an entity, to enhance info mode with entity-specific data + $dbEntity = $this->resultHandler->resolveEntity($scan); + $resolvedPart = $this->resultHandler->resolvePart($scan); + $openUrl = $this->resultHandler->getInfoURL($scan); + + //If no entity is found, try to create an URL for creating a new part (only for vendor codes) + $createUrl = null; + if ($dbEntity === null) { + $createUrl = $this->buildCreateUrlForScanResult($scan); + } + + if (TurboBundle::STREAM_FORMAT === $request->getPreferredFormat()) { + $request->setRequestFormat(TurboBundle::STREAM_FORMAT); + return $this->renderBlock('label_system/scanner/scanner.html.twig', 'scan_results', [ + 'decoded' => $decoded, + 'entity' => $dbEntity, + 'part' => $resolvedPart, + 'openUrl' => $openUrl, + 'createUrl' => $createUrl, + ]); } - } else { //Otherwise retrieve infoModeData - $infoModeData = $scan_result->getDecodedForInfoMode(); } - } catch (InvalidArgumentException) { - $this->addFlash('error', 'scan.format_unknown'); + } catch (\Throwable $e) { + // Keep fallback user-friendly; avoid 500 + $this->addFlash('warning', 'scan.format_unknown'); } } + //When we reach here, only the flash messages are relevant, so if it's a Turbo request, only send the flash message fragment, so the client can show it without a full page reload + if (TurboBundle::STREAM_FORMAT === $request->getPreferredFormat()) { + $request->setRequestFormat(TurboBundle::STREAM_FORMAT); + //Only send our flash message, so the client can show it without a full page reload + return $this->renderBlock('_turbo_control.html.twig', 'flashes'); + } + return $this->render('label_system/scanner/scanner.html.twig', [ 'form' => $form, - 'infoModeData' => $infoModeData, + + //Info mode + 'decoded' => $decoded ?? null, + 'entity' => $dbEntity ?? null, + 'part' => $resolvedPart ?? null, + 'openUrl' => $openUrl ?? null, + 'createUrl' => $createUrl ?? null, ]); } @@ -125,11 +189,30 @@ class ScanController extends AbstractController source_type: BarcodeSourceType::INTERNAL ); - return $this->redirect($this->barcodeParser->getRedirectURL($scan_result)); + return $this->redirect($this->resultHandler->getInfoURL($scan_result) ?? throw new EntityNotFoundException("Not found")); } catch (EntityNotFoundException) { $this->addFlash('success', 'scan.qr_not_found'); return $this->redirectToRoute('homepage'); } } + + /** + * Builds a URL for creating a new part based on the barcode data, handles exceptions and shows user-friendly error messages if the provider is not active or if there is an error during URL generation. + * @param BarcodeScanResultInterface $scanResult + * @return string|null + */ + private function buildCreateUrlForScanResult(BarcodeScanResultInterface $scanResult): ?string + { + try { + return $this->resultHandler->getCreationURL($scanResult); + } catch (InfoProviderNotActiveException $e) { + $this->addFlash('error', $e->getMessage()); + } catch (\Throwable) { + // Don’t break scanning UX if provider lookup fails + $this->addFlash('error', 'An error occurred while looking up the provider for this barcode. Please try again later.'); + } + + return null; + } } diff --git a/src/Exceptions/InfoProviderNotActiveException.php b/src/Exceptions/InfoProviderNotActiveException.php new file mode 100644 index 00000000..02f7cfb7 --- /dev/null +++ b/src/Exceptions/InfoProviderNotActiveException.php @@ -0,0 +1,48 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Exceptions; + +use App\Services\InfoProviderSystem\Providers\InfoProviderInterface; + +/** + * An exception denoting that a required info provider is not active. This can be used to display a user-friendly error message, + * when a user tries to use an info provider that is not active. + */ +class InfoProviderNotActiveException extends \RuntimeException +{ + public function __construct(public readonly string $providerKey, public readonly string $friendlyName) + { + parent::__construct(sprintf('The info provider "%s" (%s) is not active.', $this->friendlyName, $this->providerKey)); + } + + /** + * Creates an instance of this exception from an info provider instance + * @param InfoProviderInterface $provider + * @return self + */ + public static function fromProvider(InfoProviderInterface $provider): self + { + return new self($provider->getProviderKey(), $provider->getProviderInfo()['name'] ?? '???'); + } +} diff --git a/src/Form/LabelSystem/ScanDialogType.php b/src/Form/LabelSystem/ScanDialogType.php index 9199c31d..d9c1de0e 100644 --- a/src/Form/LabelSystem/ScanDialogType.php +++ b/src/Form/LabelSystem/ScanDialogType.php @@ -77,6 +77,7 @@ class ScanDialogType extends AbstractType BarcodeSourceType::USER_DEFINED => 'scan_dialog.mode.user', BarcodeSourceType::EIGP114 => 'scan_dialog.mode.eigp', BarcodeSourceType::GTIN => 'scan_dialog.mode.gtin', + BarcodeSourceType::LCSC => 'scan_dialog.mode.lcsc', }, ]); diff --git a/src/Repository/PartRepository.php b/src/Repository/PartRepository.php index 9d5fee5e..49342301 100644 --- a/src/Repository/PartRepository.php +++ b/src/Repository/PartRepository.php @@ -389,4 +389,69 @@ class PartRepository extends NamedDBElementRepository return $baseIpn . '_' . ($maxSuffix + 1); } + /** + * Finds a part based on the provided info provider key and ID, with an option for case sensitivity. + * If no part is found with the given provider key and ID, null is returned. + * @param string $providerID + * @param string|null $providerKey If null, the provider key will not be included in the search criteria, and only the provider ID will be used for matching. + * @param bool $caseInsensitive If true, the provider ID comparison will be case-insensitive. Default is true. + * @return Part|null + */ + public function getPartByProviderInfo(string $providerID, ?string $providerKey = null, bool $caseInsensitive = true): ?Part + { + $qb = $this->createQueryBuilder('part'); + $qb->select('part'); + + if ($providerKey) { + $qb->where("part.providerReference.provider_key = :providerKey"); + $qb->setParameter('providerKey', $providerKey); + } + + + if ($caseInsensitive) { + $qb->andWhere("LOWER(part.providerReference.provider_id) = LOWER(:providerID)"); + } else { + $qb->andWhere("part.providerReference.provider_id = :providerID"); + } + + $qb->setParameter('providerID', $providerID); + + return $qb->getQuery()->getOneOrNullResult(); + } + + /** + * Finds a part based on the provided MPN (Manufacturer Part Number), with an option for case sensitivity. + * If no part is found with the given MPN, null is returned. + * @param string $mpn + * @param string|null $manufacturerName If provided, the search will also include a match for the manufacturer's name. If null, the manufacturer name will not be included in the search criteria. + * @param bool $caseInsensitive If true, the MPN comparison will be case-insensitive. Default is true (case-insensitive). + * @return Part|null + */ + public function getPartByMPN(string $mpn, ?string $manufacturerName = null, bool $caseInsensitive = true): ?Part + { + $qb = $this->createQueryBuilder('part'); + $qb->select('part'); + + if ($caseInsensitive) { + $qb->where("LOWER(part.manufacturer_product_number) = LOWER(:mpn)"); + } else { + $qb->where("part.manufacturer_product_number = :mpn"); + } + + if ($manufacturerName !== null) { + $qb->leftJoin('part.manufacturer', 'manufacturer'); + + if ($caseInsensitive) { + $qb->andWhere("LOWER(manufacturer.name) = LOWER(:manufacturerName)"); + } else { + $qb->andWhere("manufacturer.name = :manufacturerName"); + } + $qb->setParameter('manufacturerName', $manufacturerName); + } + + $qb->setParameter('mpn', $mpn); + + return $qb->getQuery()->getOneOrNullResult(); + } + } diff --git a/src/Services/InfoProviderSystem/PartInfoRetriever.php b/src/Services/InfoProviderSystem/PartInfoRetriever.php index 9a24f3ae..5cc23f05 100644 --- a/src/Services/InfoProviderSystem/PartInfoRetriever.php +++ b/src/Services/InfoProviderSystem/PartInfoRetriever.php @@ -24,10 +24,15 @@ declare(strict_types=1); namespace App\Services\InfoProviderSystem; use App\Entity\Parts\Part; +use App\Exceptions\InfoProviderNotActiveException; +use App\Exceptions\OAuthReconnectRequiredException; use App\Services\InfoProviderSystem\DTOs\PartDetailDTO; use App\Services\InfoProviderSystem\DTOs\SearchResultDTO; use App\Services\InfoProviderSystem\Providers\InfoProviderInterface; +use Psr\Http\Client\ClientExceptionInterface; use Symfony\Component\DependencyInjection\Attribute\Autowire; +use Symfony\Component\HttpClient\Exception\ClientException; +use Symfony\Component\HttpClient\Exception\TransportException; use Symfony\Contracts\Cache\CacheInterface; use Symfony\Contracts\Cache\ItemInterface; @@ -49,6 +54,11 @@ final class PartInfoRetriever * @param string[]|InfoProviderInterface[] $providers A list of providers to search in, either as provider keys or as provider instances * @param string $keyword The keyword to search for * @return SearchResultDTO[] The search results + * @throws InfoProviderNotActiveException if any of the given providers is not active + * @throws ClientException if any of the providers throws an exception during the search + * @throws \InvalidArgumentException if any of the given providers is not a valid provider key or instance + * @throws TransportException if any of the providers throws an exception during the search + * @throws OAuthReconnectRequiredException if any of the providers throws an exception during the search that indicates that the OAuth token needs to be refreshed */ public function searchByKeyword(string $keyword, array $providers): array { @@ -61,7 +71,7 @@ final class PartInfoRetriever //Ensure that the provider is active if (!$provider->isActive()) { - throw new \RuntimeException("The provider with key {$provider->getProviderKey()} is not active!"); + throw InfoProviderNotActiveException::fromProvider($provider); } if (!$provider instanceof InfoProviderInterface) { @@ -97,6 +107,7 @@ final class PartInfoRetriever * @param string $provider_key * @param string $part_id * @return PartDetailDTO + * @throws InfoProviderNotActiveException if the the given providers is not active */ public function getDetails(string $provider_key, string $part_id): PartDetailDTO { @@ -104,7 +115,7 @@ final class PartInfoRetriever //Ensure that the provider is active if (!$provider->isActive()) { - throw new \RuntimeException("The provider with key $provider_key is not active!"); + throw InfoProviderNotActiveException::fromProvider($provider); } //Generate key and escape reserved characters from the provider id diff --git a/src/Services/LabelSystem/BarcodeScanner/BarcodeRedirector.php b/src/Services/LabelSystem/BarcodeScanner/BarcodeRedirector.php deleted file mode 100644 index 1a3c29c2..00000000 --- a/src/Services/LabelSystem/BarcodeScanner/BarcodeRedirector.php +++ /dev/null @@ -1,180 +0,0 @@ -. - */ - -declare(strict_types=1); - -/** - * This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony). - * - * Copyright (C) 2019 - 2022 Jan Böhmer (https://github.com/jbtronics) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -namespace App\Services\LabelSystem\BarcodeScanner; - -use App\Entity\LabelSystem\LabelSupportedElement; -use App\Entity\Parts\Manufacturer; -use App\Entity\Parts\Part; -use App\Entity\Parts\PartLot; -use Doctrine\ORM\EntityManagerInterface; -use Doctrine\ORM\EntityNotFoundException; -use InvalidArgumentException; -use Symfony\Component\Routing\Generator\UrlGeneratorInterface; - -/** - * @see \App\Tests\Services\LabelSystem\Barcodes\BarcodeRedirectorTest - */ -final class BarcodeRedirector -{ - public function __construct(private readonly UrlGeneratorInterface $urlGenerator, private readonly EntityManagerInterface $em) - { - } - - /** - * Determines the URL to which the user should be redirected, when scanning a QR code. - * - * @param BarcodeScanResultInterface $barcodeScan The result of the barcode scan - * @return string the URL to which should be redirected - * - * @throws EntityNotFoundException - */ - public function getRedirectURL(BarcodeScanResultInterface $barcodeScan): string - { - if($barcodeScan instanceof LocalBarcodeScanResult) { - return $this->getURLLocalBarcode($barcodeScan); - } - - if ($barcodeScan instanceof EIGP114BarcodeScanResult) { - return $this->getURLVendorBarcode($barcodeScan); - } - - if ($barcodeScan instanceof GTINBarcodeScanResult) { - return $this->getURLGTINBarcode($barcodeScan); - } - - throw new InvalidArgumentException('Unknown $barcodeScan type: '.get_class($barcodeScan)); - } - - private function getURLLocalBarcode(LocalBarcodeScanResult $barcodeScan): string - { - switch ($barcodeScan->target_type) { - case LabelSupportedElement::PART: - return $this->urlGenerator->generate('app_part_show', ['id' => $barcodeScan->target_id]); - case LabelSupportedElement::PART_LOT: - //Try to determine the part to the given lot - $lot = $this->em->find(PartLot::class, $barcodeScan->target_id); - if (!$lot instanceof PartLot) { - throw new EntityNotFoundException(); - } - - return $this->urlGenerator->generate('app_part_show', ['id' => $lot->getPart()->getID(), 'highlightLot' => $lot->getID()]); - - case LabelSupportedElement::STORELOCATION: - return $this->urlGenerator->generate('part_list_store_location', ['id' => $barcodeScan->target_id]); - - default: - throw new InvalidArgumentException('Unknown $type: '.$barcodeScan->target_type->name); - } - } - - /** - * Gets the URL to a part from a scan of a Vendor Barcode - */ - private function getURLVendorBarcode(EIGP114BarcodeScanResult $barcodeScan): string - { - $part = $this->getPartFromVendor($barcodeScan); - return $this->urlGenerator->generate('app_part_show', ['id' => $part->getID()]); - } - - private function getURLGTINBarcode(GTINBarcodeScanResult $barcodeScan): string - { - $part = $this->em->getRepository(Part::class)->findOneBy(['gtin' => $barcodeScan->gtin]); - if (!$part instanceof Part) { - throw new EntityNotFoundException(); - } - - return $this->urlGenerator->generate('app_part_show', ['id' => $part->getID()]); - } - - /** - * Gets a part from a scan of a Vendor Barcode by filtering for parts - * with the same Info Provider Id or, if that fails, by looking for parts with a - * matching manufacturer product number. Only returns the first matching part. - */ - private function getPartFromVendor(EIGP114BarcodeScanResult $barcodeScan) : Part - { - // first check via the info provider ID (e.g. Vendor ID). This might fail if the part was not added via - // the info provider system or if the part was bought from a different vendor than the data was retrieved - // from. - if($barcodeScan->digikeyPartNumber) { - $qb = $this->em->getRepository(Part::class)->createQueryBuilder('part'); - //Lower() to be case insensitive - $qb->where($qb->expr()->like('LOWER(part.providerReference.provider_id)', 'LOWER(:vendor_id)')); - $qb->setParameter('vendor_id', $barcodeScan->digikeyPartNumber); - $results = $qb->getQuery()->getResult(); - if ($results) { - return $results[0]; - } - } - - if(!$barcodeScan->supplierPartNumber){ - throw new EntityNotFoundException(); - } - - //Fallback to the manufacturer part number. This may return false positives, since it is common for - //multiple manufacturers to use the same part number for their version of a common product - //We assume the user is able to realize when this returns the wrong part - //If the barcode specifies the manufacturer we try to use that as well - $mpnQb = $this->em->getRepository(Part::class)->createQueryBuilder('part'); - $mpnQb->where($mpnQb->expr()->like('LOWER(part.manufacturer_product_number)', 'LOWER(:mpn)')); - $mpnQb->setParameter('mpn', $barcodeScan->supplierPartNumber); - - if($barcodeScan->mouserManufacturer){ - $manufacturerQb = $this->em->getRepository(Manufacturer::class)->createQueryBuilder("manufacturer"); - $manufacturerQb->where($manufacturerQb->expr()->like("LOWER(manufacturer.name)", "LOWER(:manufacturer_name)")); - $manufacturerQb->setParameter("manufacturer_name", $barcodeScan->mouserManufacturer); - $manufacturers = $manufacturerQb->getQuery()->getResult(); - - if($manufacturers) { - $mpnQb->andWhere($mpnQb->expr()->eq("part.manufacturer", ":manufacturer")); - $mpnQb->setParameter("manufacturer", $manufacturers); - } - - } - - $results = $mpnQb->getQuery()->getResult(); - if($results){ - return $results[0]; - } - throw new EntityNotFoundException(); - } -} diff --git a/src/Services/LabelSystem/BarcodeScanner/BarcodeScanHelper.php b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanHelper.php index 520c9f3b..b2363ec8 100644 --- a/src/Services/LabelSystem/BarcodeScanner/BarcodeScanHelper.php +++ b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanHelper.php @@ -92,10 +92,15 @@ final class BarcodeScanHelper if ($type === BarcodeSourceType::EIGP114) { return $this->parseEIGP114Barcode($input); } + if ($type === BarcodeSourceType::GTIN) { return $this->parseGTINBarcode($input); } + if ($type === BarcodeSourceType::LCSC) { + return $this->parseLCSCBarcode($input); + } + //Null means auto and we try the different formats $result = $this->parseInternalBarcode($input); @@ -125,6 +130,11 @@ final class BarcodeScanHelper return $this->parseGTINBarcode($input); } + // Try LCSC barcode + if (LCSCBarcodeScanResult::isLCSCBarcode($input)) { + return $this->parseLCSCBarcode($input); + } + throw new InvalidArgumentException('Unknown barcode'); } @@ -138,6 +148,11 @@ final class BarcodeScanHelper return EIGP114BarcodeScanResult::parseFormat06Code($input); } + private function parseLCSCBarcode(string $input): LCSCBarcodeScanResult + { + return LCSCBarcodeScanResult::parse($input); + } + private function parseUserDefinedBarcode(string $input): ?LocalBarcodeScanResult { $lot_repo = $this->entityManager->getRepository(PartLot::class); diff --git a/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandler.php b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandler.php new file mode 100644 index 00000000..372e976e --- /dev/null +++ b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandler.php @@ -0,0 +1,315 @@ +. + */ + +declare(strict_types=1); + +/** + * This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony). + * + * Copyright (C) 2019 - 2022 Jan Böhmer (https://github.com/jbtronics) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +namespace App\Services\LabelSystem\BarcodeScanner; + +use App\Entity\LabelSystem\LabelSupportedElement; +use App\Entity\Parts\Manufacturer; +use App\Entity\Parts\Part; +use App\Entity\Parts\PartLot; +use App\Entity\Parts\StorageLocation; +use App\Exceptions\InfoProviderNotActiveException; +use App\Repository\Parts\PartRepository; +use App\Services\InfoProviderSystem\PartInfoRetriever; +use App\Services\InfoProviderSystem\ProviderRegistry; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\EntityNotFoundException; +use InvalidArgumentException; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; + +/** + * This class handles the result of a barcode scan and determines further actions, like which URL the user should be redirected to. + * + * @see \App\Tests\Services\LabelSystem\Barcodes\BarcodeRedirectorTest + */ +final readonly class BarcodeScanResultHandler +{ + public function __construct(private UrlGeneratorInterface $urlGenerator, private EntityManagerInterface $em, private PartInfoRetriever $infoRetriever, + private ProviderRegistry $providerRegistry) + { + } + + /** + * Determines the URL to which the user should be redirected, when scanning a QR code. + * + * @param BarcodeScanResultInterface $barcodeScan The result of the barcode scan + * @return string|null the URL to which should be redirected, or null if no suitable URL could be determined for the given barcode scan result + */ + public function getInfoURL(BarcodeScanResultInterface $barcodeScan): ?string + { + //For other barcodes try to resolve the part first and then redirect to the part page + $entity = $this->resolveEntity($barcodeScan); + + if ($entity === null) { + return null; + } + + if ($entity instanceof Part) { + return $this->urlGenerator->generate('app_part_show', ['id' => $entity->getID()]); + } + + if ($entity instanceof PartLot) { + return $this->urlGenerator->generate('app_part_show', ['id' => $entity->getPart()->getID(), 'highlightLot' => $entity->getID()]); + } + + if ($entity instanceof StorageLocation) { + return $this->urlGenerator->generate('part_list_store_location', ['id' => $entity->getID()]); + } + + //@phpstan-ignore-next-line This should never happen, since resolveEntity should only return Part, PartLot or StorageLocation + throw new \LogicException("Resolved entity is of unknown type: ".get_class($entity)); + } + + /** + * Returns a URL to create a new part based on this barcode scan result, if possible. + * @param BarcodeScanResultInterface $scanResult + * @return string|null + * @throws InfoProviderNotActiveException If the scan result contains information for a provider which is currently not active in the system + */ + public function getCreationURL(BarcodeScanResultInterface $scanResult): ?string + { + $infos = $this->getCreateInfos($scanResult); + if ($infos === null) { + return null; + } + + //Ensure that the provider is active, otherwise we should not generate a creation URL for it + $provider = $this->providerRegistry->getProviderByKey($infos['providerKey']); + if (!$provider->isActive()) { + throw InfoProviderNotActiveException::fromProvider($provider); + } + + return $this->urlGenerator->generate('info_providers_create_part', ['providerKey' => $infos['providerKey'], 'providerId' => $infos['providerId']]); + } + + /** + * Tries to resolve the given barcode scan result to a local entity. This can be a Part, a PartLot or a StorageLocation, depending on the type of the barcode and the information contained in it. + * Returns null if no matching entity could be found. + * @param BarcodeScanResultInterface $barcodeScan + * @return Part|PartLot|StorageLocation|null + */ + public function resolveEntity(BarcodeScanResultInterface $barcodeScan): Part|PartLot|StorageLocation|null + { + if ($barcodeScan instanceof LocalBarcodeScanResult) { + return $this->resolvePartFromLocal($barcodeScan); + } + + if ($barcodeScan instanceof EIGP114BarcodeScanResult) { + return $this->resolvePartFromVendor($barcodeScan); + } + + if ($barcodeScan instanceof GTINBarcodeScanResult) { + return $this->em->getRepository(Part::class)->findOneBy(['gtin' => $barcodeScan->gtin]); + } + + if ($barcodeScan instanceof LCSCBarcodeScanResult) { + return $this->resolvePartFromLCSC($barcodeScan); + } + + throw new \InvalidArgumentException("Barcode does not support resolving to a local entity: ".get_class($barcodeScan)); + } + + /** + * Tries to resolve a Part from the given barcode scan result. Returns null if no part could be found for the given barcode, + * or the barcode doesn't contain information allowing to resolve to a local part. + * @param BarcodeScanResultInterface $barcodeScan + * @return Part|null + * @throws \InvalidArgumentException if the barcode scan result type is unknown and cannot be handled this function + */ + public function resolvePart(BarcodeScanResultInterface $barcodeScan): ?Part + { + $entity = $this->resolveEntity($barcodeScan); + if ($entity instanceof Part) { + return $entity; + } + if ($entity instanceof PartLot) { + return $entity->getPart(); + } + //Storage locations are not associated with a specific part, so we cannot resolve a part for + //a storage location barcode + return null; + } + + private function resolvePartFromLocal(LocalBarcodeScanResult $barcodeScan): Part|PartLot|StorageLocation|null + { + return match ($barcodeScan->target_type) { + LabelSupportedElement::PART => $this->em->find(Part::class, $barcodeScan->target_id), + LabelSupportedElement::PART_LOT => $this->em->find(PartLot::class, $barcodeScan->target_id), + LabelSupportedElement::STORELOCATION => $this->em->find(StorageLocation::class, $barcodeScan->target_id), + }; + } + + /** + * Gets a part from a scan of a Vendor Barcode by filtering for parts + * with the same Info Provider Id or, if that fails, by looking for parts with a + * matching manufacturer product number. Only returns the first matching part. + */ + private function resolvePartFromVendor(EIGP114BarcodeScanResult $barcodeScan) : ?Part + { + // first check via the info provider ID (e.g. Vendor ID). This might fail if the part was not added via + // the info provider system or if the part was bought from a different vendor than the data was retrieved + // from. + if($barcodeScan->digikeyPartNumber) { + + $part = $this->em->getRepository(Part::class)->getPartByProviderInfo($barcodeScan->digikeyPartNumber); + if ($part !== null) { + return $part; + } + } + + if (!$barcodeScan->supplierPartNumber){ + return null; + } + + //Fallback to the manufacturer part number. This may return false positives, since it is common for + //multiple manufacturers to use the same part number for their version of a common product + //We assume the user is able to realize when this returns the wrong part + //If the barcode specifies the manufacturer we try to use that as well + + return $this->em->getRepository(Part::class)->getPartByMPN($barcodeScan->supplierPartNumber, $barcodeScan->mouserManufacturer); + } + + /** + * Resolve LCSC barcode -> Part. + * Strategy: + * 1) Try providerReference.provider_id == pc (LCSC "Cxxxxxx") if you store it there + * 2) Fallback to manufacturer_product_number == pm (MPN) + * Returns first match (consistent with EIGP114 logic) + */ + private function resolvePartFromLCSC(LCSCBarcodeScanResult $barcodeScan): ?Part + { + // Try LCSC code (pc) as provider id if available + $pc = $barcodeScan->lcscCode; // e.g. C138033 + if ($pc) { + $part = $this->em->getRepository(Part::class)->getPartByProviderInfo($pc); + if ($part !== null) { + return $part; + } + } + + // Fallback to MPN (pm) + $pm = $barcodeScan->mpn; // e.g. RC0402FR-071ML + if (!$pm) { + return null; + } + + return $this->em->getRepository(Part::class)->getPartByMPN($pm); + } + + + /** + * Tries to extract creation information for a part from the given barcode scan result. This can be used to + * automatically fill in the info provider reference of a part, when creating a new part based on the scan result. + * Returns null if no provider information could be extracted from the scan result, or if the scan result type is unknown and cannot be handled by this function. + * It is not necessarily checked that the provider is active, or that the result actually exists on the provider side. + * @param BarcodeScanResultInterface $scanResult + * @return array{providerKey: string, providerId: string}|null + * @throws InfoProviderNotActiveException If the scan result contains information for a provider which is currently not active in the system + */ + public function getCreateInfos(BarcodeScanResultInterface $scanResult): ?array + { + // LCSC + if ($scanResult instanceof LCSCBarcodeScanResult) { + return [ + 'providerKey' => 'lcsc', + 'providerId' => $scanResult->lcscCode, + ]; + } + + if ($scanResult instanceof EIGP114BarcodeScanResult) { + return $this->getCreationInfoForEIGP114($scanResult); + } + + return null; + + } + + /** + * @param EIGP114BarcodeScanResult $scanResult + * @return array{providerKey: string, providerId: string}|null + */ + private function getCreationInfoForEIGP114(EIGP114BarcodeScanResult $scanResult): ?array + { + $vendor = $scanResult->guessBarcodeVendor(); + + // Mouser: use supplierPartNumber -> search provider -> provider_id + if ($vendor === 'mouser' && $scanResult->supplierPartNumber !== null + ) { + // Search Mouser using the MPN + $dtos = $this->infoRetriever->searchByKeyword( + keyword: $scanResult->supplierPartNumber, + providers: ["mouser"] + ); + + // If there are results, provider_id is MouserPartNumber (per MouserProvider.php) + $best = $dtos[0] ?? null; + + if ($best !== null) { + return [ + 'providerKey' => 'mouser', + 'providerId' => $best->provider_id, + ]; + } + + return null; + } + + // Digi-Key: can use customerPartNumber or supplierPartNumber directly + if ($vendor === 'digikey') { + return [ + 'providerKey' => 'digikey', + 'providerId' => $scanResult->customerPartNumber ?? $scanResult->supplierPartNumber, + ]; + } + + // Element14: can use supplierPartNumber directly + if ($vendor === 'element14') { + return [ + 'providerKey' => 'element14', + 'providerId' => $scanResult->supplierPartNumber, + ]; + } + + return null; + } + + +} diff --git a/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultInterface.php b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultInterface.php index 88130351..befa91b6 100644 --- a/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultInterface.php +++ b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultInterface.php @@ -33,4 +33,4 @@ interface BarcodeScanResultInterface * @return array */ public function getDecodedForInfoMode(): array; -} \ No newline at end of file +} diff --git a/src/Services/LabelSystem/BarcodeScanner/BarcodeSourceType.php b/src/Services/LabelSystem/BarcodeScanner/BarcodeSourceType.php index 43643d12..13ab4bf3 100644 --- a/src/Services/LabelSystem/BarcodeScanner/BarcodeSourceType.php +++ b/src/Services/LabelSystem/BarcodeScanner/BarcodeSourceType.php @@ -26,25 +26,28 @@ namespace App\Services\LabelSystem\BarcodeScanner; /** * This enum represents the different types, where a barcode/QR-code can be generated from */ -enum BarcodeSourceType +enum BarcodeSourceType: string { /** This Barcode was generated using Part-DB internal recommended barcode generator */ - case INTERNAL; + case INTERNAL = 'internal'; /** This barcode is containing an internal part number (IPN) */ - case IPN; + case IPN = 'ipn'; /** * This barcode is a user defined barcode defined on a part lot */ - case USER_DEFINED; + case USER_DEFINED = 'user_defined'; /** * EIGP114 formatted barcodes like used by digikey, mouser, etc. */ - case EIGP114; + case EIGP114 = 'eigp114'; /** * GTIN /EAN barcodes, which are used on most products in the world. These are checked with the GTIN field of a part. */ - case GTIN; + case GTIN = 'gtin'; + + /** For LCSC.com formatted QR codes */ + case LCSC = 'lcsc'; } diff --git a/src/Services/LabelSystem/BarcodeScanner/LCSCBarcodeScanResult.php b/src/Services/LabelSystem/BarcodeScanner/LCSCBarcodeScanResult.php new file mode 100644 index 00000000..0151cffa --- /dev/null +++ b/src/Services/LabelSystem/BarcodeScanner/LCSCBarcodeScanResult.php @@ -0,0 +1,157 @@ + $fields + */ + public function __construct( + public array $fields, + public string $rawInput, + ) { + + $this->pickBatchNumber = $this->fields['pbn'] ?? null; + $this->orderNumber = $this->fields['on'] ?? null; + $this->lcscCode = $this->fields['pc'] ?? null; + $this->mpn = $this->fields['pm'] ?? null; + $this->quantity = isset($this->fields['qty']) ? (int)$this->fields['qty'] : null; + $this->countryChannel = $this->fields['cc'] ?? null; + $this->warehouseCode = $this->fields['wc'] ?? null; + $this->pdi = $this->fields['pdi'] ?? null; + $this->hp = $this->fields['hp'] ?? null; + + } + + public function getSourceType(): BarcodeSourceType + { + return BarcodeSourceType::LCSC; + } + + /** + * @return array|float[]|int[]|null[]|string[] An array of fields decoded from the barcode + */ + public function getDecodedForInfoMode(): array + { + // Keep it human-friendly + return [ + 'Barcode type' => 'LCSC', + 'MPN (pm)' => $this->mpn ?? '', + 'LCSC code (pc)' => $this->lcscCode ?? '', + 'Qty' => $this->quantity !== null ? (string) $this->quantity : '', + 'Order No (on)' => $this->orderNumber ?? '', + 'Pick Batch (pbn)' => $this->pickBatchNumber ?? '', + 'Warehouse (wc)' => $this->warehouseCode ?? '', + 'Country/Channel (cc)' => $this->countryChannel ?? '', + 'PDI (unknown meaning)' => $this->pdi ?? '', + 'HP (unknown meaning)' => $this->hp ?? '', + ]; + } + + /** + * Parses the barcode data to see if the input matches the expected format used by lcsc.com + * @param string $input + * @return bool + */ + public static function isLCSCBarcode(string $input): bool + { + $s = trim($input); + + // Your example: {pbn:...,on:...,pc:...,pm:...,qty:...} + if (!str_starts_with($s, '{') || !str_ends_with($s, '}')) { + return false; + } + + // Must contain at least pm: and pc: (common for LCSC labels) + return (stripos($s, 'pm:') !== false) && (stripos($s, 'pc:') !== false); + } + + /** + * Parse the barcode input string into the fields used by lcsc.com + * @param string $input + * @return self + */ + public static function parse(string $input): self + { + $raw = trim($input); + + if (!self::isLCSCBarcode($raw)) { + throw new InvalidArgumentException('Not an LCSC barcode'); + } + + $inner = substr($raw, 1, -1); // remove { } + + $fields = []; + + // This format is comma-separated pairs, values do not contain commas in your sample. + $pairs = array_filter( + array_map(trim(...), explode(',', $inner)), + static fn(string $s): bool => $s !== '' + ); + + foreach ($pairs as $pair) { + $pos = strpos($pair, ':'); + if ($pos === false) { + continue; + } + + $k = trim(substr($pair, 0, $pos)); + $v = trim(substr($pair, $pos + 1)); + + if ($k === '') { + continue; + } + + $fields[$k] = $v; + } + + if (!isset($fields['pm']) || trim($fields['pm']) === '') { + throw new InvalidArgumentException('LCSC barcode missing pm field'); + } + + return new self($fields, $raw); + } +} diff --git a/src/Twig/AttachmentExtension.php b/src/Twig/AttachmentExtension.php index 3d5ec611..23ab7d6e 100644 --- a/src/Twig/AttachmentExtension.php +++ b/src/Twig/AttachmentExtension.php @@ -23,7 +23,10 @@ declare(strict_types=1); namespace App\Twig; use App\Entity\Attachments\Attachment; +use App\Entity\Attachments\AttachmentContainingDBElement; +use App\Entity\Parts\Part; use App\Services\Attachments\AttachmentURLGenerator; +use App\Services\Attachments\PartPreviewGenerator; use App\Services\Misc\FAIconGenerator; use Twig\Attribute\AsTwigFunction; use Twig\Extension\AbstractExtension; @@ -31,7 +34,7 @@ use Twig\TwigFunction; final readonly class AttachmentExtension { - public function __construct(private AttachmentURLGenerator $attachmentURLGenerator, private FAIconGenerator $FAIconGenerator) + public function __construct(private AttachmentURLGenerator $attachmentURLGenerator, private FAIconGenerator $FAIconGenerator, private PartPreviewGenerator $partPreviewGenerator) { } @@ -44,6 +47,26 @@ final readonly class AttachmentExtension return $this->attachmentURLGenerator->getThumbnailURL($attachment, $filter_name); } + /** + * Returns the URL of the thumbnail of the given element. Returns null if no thumbnail is available. + * For parts, a special preview image is generated, for other entities, the master picture is used as preview (if available). + */ + #[AsTwigFunction("entity_thumbnail")] + public function entityThumbnail(AttachmentContainingDBElement $element, string $filter_name = 'thumbnail_sm'): ?string + { + if ($element instanceof Part) { + $preview_attachment = $this->partPreviewGenerator->getTablePreviewAttachment($element); + } else { // For other entities, we just use the master picture as preview, if available + $preview_attachment = $element->getMasterPictureAttachment(); + } + + if ($preview_attachment === null) { + return null; + } + + return $this->attachmentURLGenerator->getThumbnailURL($preview_attachment, $filter_name); + } + /** * Return the font-awesome icon type for the given file extension. Returns "file" if no specific icon is available. * Null is allowed for files withot extension diff --git a/templates/_turbo_control.html.twig b/templates/_turbo_control.html.twig index 90ae8d9a..cf65f0da 100644 --- a/templates/_turbo_control.html.twig +++ b/templates/_turbo_control.html.twig @@ -1,14 +1,20 @@ -{# Insert flashes #} -
- {% for label, messages in app.flashes() %} - {% for message in messages %} - {{ include('_toast.html.twig', { - 'label': label, - 'message': message - }) }} - {% endfor %} - {% endfor %} -
+{% block flashes %} + {# Insert flashes #} + + + +{% endblock %} {# Allow pages to request a fully reload of everything #} {% if global_reload_needed is defined and global_reload_needed %} diff --git a/templates/label_system/scanner/_info_mode.html.twig b/templates/label_system/scanner/_info_mode.html.twig new file mode 100644 index 00000000..23deb6d3 --- /dev/null +++ b/templates/label_system/scanner/_info_mode.html.twig @@ -0,0 +1,154 @@ +{% import "helper.twig" as helper %} + +{% if decoded is not empty %} +
+ + {% if part %} {# Show detailed info when it is a part #} +
+
+ {% trans %}label_scanner.db_part_found{% endtrans %} + {% if openUrl %} +
+ + + +
+ {% endif %} + +
+
+
+ +
+ + +
+

{{ part.name }}

+
{{ part.description | format_markdown(true) }}
+
+
+ {% trans %}category.label{% endtrans %} + +
+
+ {{ helper.structural_entity_link(part.category) }} +
+
+ +
+
+ {% trans %}footprint.label{% endtrans %} + +
+
+ {{ helper.structural_entity_link(part.footprint) }} +
+
+ + {# Show part lots / locations #} + {% if part.partLots is not empty %} + + + + + + + + + {% for lot in part.partLots %} + + + + + {% endfor %} + +
{% trans %}part_lots.storage_location{% endtrans %} + {% trans %}part_lots.amount{% endtrans %} +
+ {% if lot.storageLocation %} + {{ helper.structural_entity_link(lot.storageLocation) }} + {% else %} + + {% endif %} + + {% if lot.instockUnknown %} + ? + {% else %} + {{ lot.amount | format_amount(part.partUnit, {'decimals': 5}) }} + {% endif %} +
+ {% else %} +
{% trans %}label_scanner.no_locations{% endtrans %}
+ {% endif %} + +
+
+
+ + {% elseif entity %} {# If we have an entity but that is not an part #} + +
+
+ {% trans %}label_scanner.target_found{% endtrans %}: {{ type_label(entity) }} + {% if openUrl %} +
+ + + +
+ {% endif %} + +
+
+
+ +
+ + +
+

{{ entity.name }}

+

{% trans %}id.label{% endtrans %}: {{ entity.id }} ({{ type_label(entity) }})

+ + {% if entity.fullPath is defined %} + {{ helper.breadcrumb_entity_link(entity)}} + {% endif %} +
+
+
+ + {% endif %} + + + {% if createUrl %} +
+

{% trans %}label_scanner.part_can_be_created{% endtrans %}

+

{% trans %}label_scanner.part_can_be_created.help{% endtrans %}

+
+ {% trans %}label_scanner.part_create_btn{% endtrans %} +
+ {% endif %} + +

+ {% trans %}label_scanner.scan_result.title{% endtrans %} +

+ + {# Decoded barcode fields #} + + + {% for key, value in decoded %} + + + + + {% endfor %} + +
{{ key }}{{ value }}
+ + {# Whitespace under table and Input form fields #} +
+ +{% endif %} diff --git a/templates/label_system/scanner/scanner.html.twig b/templates/label_system/scanner/scanner.html.twig index 1f978a9b..f9b51388 100644 --- a/templates/label_system/scanner/scanner.html.twig +++ b/templates/label_system/scanner/scanner.html.twig @@ -10,35 +10,28 @@
-
+
+ {% include "label_system/scanner/_info_mode.html.twig" %} +
+ + {{ form_start(form, {'attr': {'id': 'scan_dialog_form'}}) }} + + {{ form_end(form) }}
- - {{ form_start(form, {'attr': {'id': 'scan_dialog_form'}}) }} - - {{ form_end(form) }} - - - {% if infoModeData %} -
-

{% trans %}label_scanner.decoded_info.title{% endtrans %}

- - - - {% for key, value in infoModeData %} - - - - - {% endfor %} - -
{{ key }}{{ value }}
- - {% endif %} - +{% endblock %} + +{% block scan_results %} + + + {% endblock %} diff --git a/tests/Services/LabelSystem/BarcodeScanner/BarcodeRedirectorTest.php b/tests/Services/LabelSystem/BarcodeScanner/BarcodeRedirectorTest.php deleted file mode 100644 index c5bdb02d..00000000 --- a/tests/Services/LabelSystem/BarcodeScanner/BarcodeRedirectorTest.php +++ /dev/null @@ -1,85 +0,0 @@ -. - */ - -declare(strict_types=1); - -/** - * This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony). - * - * Copyright (C) 2019 - 2020 Jan Böhmer (https://github.com/jbtronics) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -namespace App\Tests\Services\LabelSystem\BarcodeScanner; - -use PHPUnit\Framework\Attributes\DataProvider; -use PHPUnit\Framework\Attributes\Group; -use App\Entity\LabelSystem\LabelSupportedElement; -use App\Services\LabelSystem\BarcodeScanner\BarcodeRedirector; -use App\Services\LabelSystem\BarcodeScanner\BarcodeSourceType; -use App\Services\LabelSystem\BarcodeScanner\LocalBarcodeScanResult; -use Doctrine\ORM\EntityNotFoundException; -use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; - -final class BarcodeRedirectorTest extends KernelTestCase -{ - private ?BarcodeRedirector $service = null; - - protected function setUp(): void - { - self::bootKernel(); - $this->service = self::getContainer()->get(BarcodeRedirector::class); - } - - public static function urlDataProvider(): \Iterator - { - yield [new LocalBarcodeScanResult(LabelSupportedElement::PART, 1, BarcodeSourceType::INTERNAL), '/en/part/1']; - //Part lot redirects to Part info page (Part lot 1 is associated with part 3) - yield [new LocalBarcodeScanResult(LabelSupportedElement::PART_LOT, 1, BarcodeSourceType::INTERNAL), '/en/part/3?highlightLot=1']; - yield [new LocalBarcodeScanResult(LabelSupportedElement::STORELOCATION, 1, BarcodeSourceType::INTERNAL), '/en/store_location/1/parts']; - } - - #[DataProvider('urlDataProvider')] - #[Group('DB')] - public function testGetRedirectURL(LocalBarcodeScanResult $scanResult, string $url): void - { - $this->assertSame($url, $this->service->getRedirectURL($scanResult)); - } - - public function testGetRedirectEntityNotFount(): void - { - $this->expectException(EntityNotFoundException::class); - //If we encounter an invalid lot, we must throw an exception - $this->service->getRedirectURL(new LocalBarcodeScanResult(LabelSupportedElement::PART_LOT, - 12_345_678, BarcodeSourceType::INTERNAL)); - } -} diff --git a/tests/Services/LabelSystem/BarcodeScanner/BarcodeScanHelperTest.php b/tests/Services/LabelSystem/BarcodeScanner/BarcodeScanHelperTest.php index 248f1ae9..8f8c7a18 100644 --- a/tests/Services/LabelSystem/BarcodeScanner/BarcodeScanHelperTest.php +++ b/tests/Services/LabelSystem/BarcodeScanner/BarcodeScanHelperTest.php @@ -49,6 +49,7 @@ use App\Services\LabelSystem\BarcodeScanner\BarcodeSourceType; use App\Services\LabelSystem\BarcodeScanner\EIGP114BarcodeScanResult; use App\Services\LabelSystem\BarcodeScanner\LocalBarcodeScanResult; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; +use App\Services\LabelSystem\BarcodeScanner\LCSCBarcodeScanResult; final class BarcodeScanHelperTest extends WebTestCase { @@ -124,6 +125,14 @@ final class BarcodeScanHelperTest extends WebTestCase ]); yield [$eigp114Result, "[)>\x1E06\x1DP596-777A1-ND\x1D1PXAF4444\x1DQ3\x1D10D1452\x1D1TBF1103\x1D4LUS\x1E\x04"]; + + $lcscInput = '{pc:C138033,pm:RC0402FR-071ML,qty:10}'; + $lcscResult = new LCSCBarcodeScanResult( + ['pc' => 'C138033', 'pm' => 'RC0402FR-071ML', 'qty' => '10'], + $lcscInput + ); + + yield [$lcscResult, $lcscInput]; } public static function invalidDataProvider(): \Iterator @@ -153,4 +162,33 @@ final class BarcodeScanHelperTest extends WebTestCase $this->expectException(\InvalidArgumentException::class); $this->service->scanBarcodeContent($input); } + + public function testAutoDetectLcscBarcode(): void + { + $input = '{pbn:PB1,on:ON1,pc:C138033,pm:RC0402FR-071ML,qty:10}'; + + $result = $this->service->scanBarcodeContent($input); + + $this->assertInstanceOf(LCSCBarcodeScanResult::class, $result); + $this->assertSame('C138033', $result->lcscCode); + $this->assertSame('RC0402FR-071ML', $result->mpn); + } + + public function testLcscExplicitTypeParses(): void + { + $input = '{pc:C138033,pm:RC0402FR-071ML,qty:10}'; + + $result = $this->service->scanBarcodeContent($input, BarcodeSourceType::LCSC); + + $this->assertInstanceOf(LCSCBarcodeScanResult::class, $result); + $this->assertSame('C138033', $result->lcscCode); + $this->assertSame('RC0402FR-071ML', $result->mpn); + } + + public function testLcscExplicitTypeRejectsNonLcsc(): void + { + $this->expectException(\InvalidArgumentException::class); + + $this->service->scanBarcodeContent('not-an-lcsc', BarcodeSourceType::LCSC); + } } diff --git a/tests/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandlerTest.php b/tests/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandlerTest.php new file mode 100644 index 00000000..840e84c0 --- /dev/null +++ b/tests/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandlerTest.php @@ -0,0 +1,183 @@ +. + */ + +declare(strict_types=1); + +/** + * This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony). + * + * Copyright (C) 2019 - 2020 Jan Böhmer (https://github.com/jbtronics) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +namespace App\Tests\Services\LabelSystem\BarcodeScanner; + +use App\Entity\Parts\Part; +use App\Entity\Parts\PartLot; +use App\Entity\Parts\StorageLocation; +use App\Services\LabelSystem\BarcodeScanner\BarcodeScanResultHandler; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use App\Entity\LabelSystem\LabelSupportedElement; +use App\Services\LabelSystem\BarcodeScanner\BarcodeSourceType; +use App\Services\LabelSystem\BarcodeScanner\LocalBarcodeScanResult; +use Doctrine\ORM\EntityNotFoundException; +use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; +use App\Services\LabelSystem\BarcodeScanner\EIGP114BarcodeScanResult; +use App\Services\LabelSystem\BarcodeScanner\LCSCBarcodeScanResult; +use App\Services\LabelSystem\BarcodeScanner\BarcodeScanResultInterface; +use InvalidArgumentException; + + +final class BarcodeScanResultHandlerTest extends KernelTestCase +{ + private ?BarcodeScanResultHandler $service = null; + + protected function setUp(): void + { + self::bootKernel(); + $this->service = self::getContainer()->get(BarcodeScanResultHandler::class); + } + + public static function urlDataProvider(): \Iterator + { + yield [new LocalBarcodeScanResult(LabelSupportedElement::PART, 1, BarcodeSourceType::INTERNAL), '/en/part/1']; + //Part lot redirects to Part info page (Part lot 1 is associated with part 3) + yield [new LocalBarcodeScanResult(LabelSupportedElement::PART_LOT, 1, BarcodeSourceType::INTERNAL), '/en/part/3?highlightLot=1']; + yield [new LocalBarcodeScanResult(LabelSupportedElement::STORELOCATION, 1, BarcodeSourceType::INTERNAL), '/en/store_location/1/parts']; + } + + #[DataProvider('urlDataProvider')] + #[Group('DB')] + public function testGetRedirectURL(LocalBarcodeScanResult $scanResult, string $url): void + { + $this->assertSame($url, $this->service->getInfoURL($scanResult)); + } + + public function testGetRedirectEntityNotFound(): void + { + //If we encounter an invalid lot, we must get an null result + $url = $this->service->getInfoURL(new LocalBarcodeScanResult(LabelSupportedElement::PART_LOT, + 12_345_678, BarcodeSourceType::INTERNAL)); + + $this->assertNull($url); + } + + public function testGetRedirectURLThrowsOnUnknownScanType(): void + { + $unknown = new class implements BarcodeScanResultInterface { + public function getDecodedForInfoMode(): array + { + return []; + } + }; + + $this->expectException(InvalidArgumentException::class); + $this->service->getInfoURL($unknown); + } + + public function testEIGPBarcodeResolvePartOrNullReturnsNullWhenNotFound(): void + { + $scan = new EIGP114BarcodeScanResult([]); + + $this->assertNull($this->service->resolvePart($scan)); + $this->assertNull($this->service->getInfoURL($scan)); + } + + public function testLCSCBarcodeResolvePartOrNullReturnsNullWhenNotFound(): void + { + $scan = new LCSCBarcodeScanResult( + fields: ['pc' => 'C0000000', 'pm' => ''], + rawInput: '{pc:C0000000,pm:}' + ); + + $this->assertNull($this->service->resolvePart($scan)); + $this->assertNull($this->service->getInfoURL($scan)); + } + + public function testResolveEntityThrowsOnUnknownScanType(): void + { + $unknown = new class implements BarcodeScanResultInterface { + public function getDecodedForInfoMode(): array + { + return []; + } + }; + + $this->expectException(InvalidArgumentException::class); + $this->service->resolvePart($unknown); + } + + public function testResolveEntity(): void + { + $scan = new LocalBarcodeScanResult(LabelSupportedElement::PART, 1, BarcodeSourceType::INTERNAL); + $part = $this->service->resolveEntity($scan); + + $this->assertSame(1, $part->getId()); + $this->assertInstanceOf(Part::class, $part); + + $scan = new LocalBarcodeScanResult(LabelSupportedElement::PART_LOT, 1, BarcodeSourceType::INTERNAL); + $entity = $this->service->resolveEntity($scan); + $this->assertSame(1, $entity->getId()); + $this->assertInstanceOf(PartLot::class, $entity); + + $scan = new LocalBarcodeScanResult(LabelSupportedElement::STORELOCATION, 1, BarcodeSourceType::INTERNAL); + $entity = $this->service->resolveEntity($scan); + $this->assertSame(1, $entity->getId()); + $this->assertInstanceOf(StorageLocation::class, $entity); + } + + public function testResolvePart(): void + { + $scan = new LocalBarcodeScanResult(LabelSupportedElement::PART, 1, BarcodeSourceType::INTERNAL); + $part = $this->service->resolvePart($scan); + + $this->assertSame(1, $part->getId()); + + $scan = new LocalBarcodeScanResult(LabelSupportedElement::PART_LOT, 1, BarcodeSourceType::INTERNAL); + $part = $this->service->resolvePart($scan); + $this->assertSame(3, $part->getId()); + + $scan = new LocalBarcodeScanResult(LabelSupportedElement::STORELOCATION, 1, BarcodeSourceType::INTERNAL); + $part = $this->service->resolvePart($scan); + $this->assertNull($part); //Store location does not resolve to a part + } + + public function testGetCreateInfos(): void + { + $lcscScan = LCSCBarcodeScanResult::parse('{pbn:PB1,on:ON1,pc:C138033,pm:RC0402FR-071ML,qty:10}'); + $infos = $this->service->getCreateInfos($lcscScan); + + $this->assertSame('lcsc', $infos['providerKey']); + $this->assertSame('C138033', $infos['providerId']); + } +} diff --git a/tests/Services/LabelSystem/BarcodeScanner/LCSCBarcodeScanResultTest.php b/tests/Services/LabelSystem/BarcodeScanner/LCSCBarcodeScanResultTest.php new file mode 100644 index 00000000..2128f113 --- /dev/null +++ b/tests/Services/LabelSystem/BarcodeScanner/LCSCBarcodeScanResultTest.php @@ -0,0 +1,86 @@ +. + */ + +namespace App\Tests\Services\LabelSystem\BarcodeScanner; + +use App\Services\LabelSystem\BarcodeScanner\LCSCBarcodeScanResult; +use InvalidArgumentException; +use PHPUnit\Framework\TestCase; + +class LCSCBarcodeScanResultTest extends TestCase +{ + public function testIsLCSCBarcode(): void + { + $this->assertFalse(LCSCBarcodeScanResult::isLCSCBarcode('invalid')); + $this->assertFalse(LCSCBarcodeScanResult::isLCSCBarcode('LCSC-12345')); + $this->assertFalse(LCSCBarcodeScanResult::isLCSCBarcode('')); + + $this->assertTrue(LCSCBarcodeScanResult::isLCSCBarcode('{pbn:PB1,on:ON1,pc:C138033,pm:RC0402FR-071ML,qty:10}')); + $this->assertTrue(LCSCBarcodeScanResult::isLCSCBarcode('{pbn:PICK2506270148,on:GB2506270877,pc:C22437266,pm:IA0509S-2W,qty:3,mc:,cc:1,pdi:164234874,hp:null,wc:ZH}')); + } + + public function testConstruct(): void + { + $raw = '{pbn:PB1,on:ON1,pc:C138033,pm:RC0402FR-071ML,qty:10}'; + $fields = ['pbn' => 'PB1', 'on' => 'ON1', 'pc' => 'C138033', 'pm' => 'RC0402FR-071ML', 'qty' => '10']; + $scan = new LCSCBarcodeScanResult($fields, $raw); + //Splitting up should work and assign the correct values to the properties: + $this->assertSame('RC0402FR-071ML', $scan->mpn); + $this->assertSame('C138033', $scan->lcscCode); + + //Fields and raw input should be preserved + $this->assertSame($fields, $scan->fields); + $this->assertSame($raw, $scan->rawInput); + } + + public function testLCSCParseInvalidFormatThrows(): void + { + $this->expectException(InvalidArgumentException::class); + LCSCBarcodeScanResult::parse('not-an-lcsc-barcode'); + } + + public function testParse(): void + { + $scan = LCSCBarcodeScanResult::parse('{pbn:PICK2506270148,on:GB2506270877,pc:C22437266,pm:IA0509S-2W,qty:3,mc:,cc:1,pdi:164234874,hp:null,wc:ZH}'); + + $this->assertSame('IA0509S-2W', $scan->mpn); + $this->assertSame('C22437266', $scan->lcscCode); + $this->assertSame('PICK2506270148', $scan->pickBatchNumber); + $this->assertSame('GB2506270877', $scan->orderNumber); + $this->assertSame(3, $scan->quantity); + $this->assertSame('1', $scan->countryChannel); + $this->assertSame('164234874', $scan->pdi); + $this->assertSame('null', $scan->hp); + $this->assertSame('ZH', $scan->warehouseCode); + } + + public function testLCSCParseExtractsFields(): void + { + $scan = LCSCBarcodeScanResult::parse('{pbn:PB1,on:ON1,pc:C138033,pm:RC0402FR-071ML,qty:10}'); + + $this->assertSame('RC0402FR-071ML', $scan->mpn); + $this->assertSame('C138033', $scan->lcscCode); + + $decoded = $scan->getDecodedForInfoMode(); + $this->assertSame('LCSC', $decoded['Barcode type']); + $this->assertSame('RC0402FR-071ML', $decoded['MPN (pm)']); + $this->assertSame('C138033', $decoded['LCSC code (pc)']); + } +} diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index d9418563..31bc3884 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -9500,6 +9500,12 @@ Please note, that you can not impersonate a disabled user. If you try you will g EIGP 114 barcode (e.g. the datamatrix codes on digikey and mouser orders)
+ + + scan_dialog.mode.lcsc + LCSC.com barcode + + scan_dialog.info_mode @@ -9512,6 +9518,24 @@ Please note, that you can not impersonate a disabled user. If you try you will g Decoded information + + + label_scanner.target_found + Item found in database + + + + + label_scanner.scan_result.title + Scan result + + + + + label_scanner.no_locations + Part is not stored at any location. + + label_generator.edit_profiles @@ -12509,5 +12533,35 @@ Buerklin-API Authentication server: Last stocktake + + + label_scanner.open + View details + + + + + label_scanner.db_part_found + Database [part] found for barcode + + + + + label_scanner.part_can_be_created + [Part] can be created + + + + + label_scanner.part_can_be_created.help + No matching [part] was found in the database, but you can create a new [part] based of this barcode. + + + + + label_scanner.part_create_btn + Create [part] from barcode + + From f124fa0023c226ddadfa29a160e15c7d8e6a8bda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 22 Feb 2026 21:28:58 +0100 Subject: [PATCH 151/172] Made BarcodeScanResult classes readonly --- .../EIGP114BarcodeScanResult.php | 60 +++++++++---------- .../BarcodeScanner/LocalBarcodeScanResult.php | 10 ++-- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/Services/LabelSystem/BarcodeScanner/EIGP114BarcodeScanResult.php b/src/Services/LabelSystem/BarcodeScanner/EIGP114BarcodeScanResult.php index 0b4f4b56..37c03f55 100644 --- a/src/Services/LabelSystem/BarcodeScanner/EIGP114BarcodeScanResult.php +++ b/src/Services/LabelSystem/BarcodeScanner/EIGP114BarcodeScanResult.php @@ -28,40 +28,40 @@ namespace App\Services\LabelSystem\BarcodeScanner; * Based on PR 811, EIGP 114.2018 (https://www.ecianow.org/assets/docs/GIPC/EIGP-114.2018%20ECIA%20Labeling%20Specification%20for%20Product%20and%20Shipment%20Identification%20in%20the%20Electronics%20Industry%20-%202D%20Barcode.pdf), * , https://forum.digikey.com/t/digikey-product-labels-decoding-digikey-barcodes/41097 */ -class EIGP114BarcodeScanResult implements BarcodeScanResultInterface +readonly class EIGP114BarcodeScanResult implements BarcodeScanResultInterface { /** * @var string|null Ship date in format YYYYMMDD */ - public readonly ?string $shipDate; + public ?string $shipDate; /** * @var string|null Customer assigned part number – Optional based on * agreements between Distributor and Supplier */ - public readonly ?string $customerPartNumber; + public ?string $customerPartNumber; /** * @var string|null Supplier assigned part number */ - public readonly ?string $supplierPartNumber; + public ?string $supplierPartNumber; /** * @var int|null Quantity of product */ - public readonly ?int $quantity; + public ?int $quantity; /** * @var string|null Customer assigned purchase order number */ - public readonly ?string $customerPO; + public ?string $customerPO; /** * @var string|null Line item number from PO. Required on Logistic Label when * used on back of Packing Slip. See Section 4.9 */ - public readonly ?string $customerPOLine; + public ?string $customerPOLine; /** * 9D - YYWW (Year and Week of Manufacture). ) If no date code is used @@ -69,7 +69,7 @@ class EIGP114BarcodeScanResult implements BarcodeScanResultInterface * to indicate the product is Not Traceable by this data field. * @var string|null */ - public readonly ?string $dateCode; + public ?string $dateCode; /** * 10D - YYWW (Year and Week of Manufacture). ) If no date code is used @@ -77,7 +77,7 @@ class EIGP114BarcodeScanResult implements BarcodeScanResultInterface * to indicate the product is Not Traceable by this data field. * @var string|null */ - public readonly ?string $alternativeDateCode; + public ?string $alternativeDateCode; /** * Traceability number assigned to a batch or group of items. If @@ -86,14 +86,14 @@ class EIGP114BarcodeScanResult implements BarcodeScanResultInterface * by this data field. * @var string|null */ - public readonly ?string $lotCode; + public ?string $lotCode; /** * Country where part was manufactured. Two-letter code from * ISO 3166 country code list * @var string|null */ - public readonly ?string $countryOfOrigin; + public ?string $countryOfOrigin; /** * @var string|null Unique alphanumeric number assigned by supplier @@ -101,85 +101,85 @@ class EIGP114BarcodeScanResult implements BarcodeScanResultInterface * Carton. Always used in conjunction with a mixed logistic label * with a 5S data identifier for Package ID. */ - public readonly ?string $packageId1; + public ?string $packageId1; /** * @var string|null * 4S - Package ID for Logistic Carton with like items */ - public readonly ?string $packageId2; + public ?string $packageId2; /** * @var string|null * 5S - Package ID for Logistic Carton with mixed items */ - public readonly ?string $packageId3; + public ?string $packageId3; /** * @var string|null Unique alphanumeric number assigned by supplier. */ - public readonly ?string $packingListNumber; + public ?string $packingListNumber; /** * @var string|null Ship date in format YYYYMMDD */ - public readonly ?string $serialNumber; + public ?string $serialNumber; /** * @var string|null Code for sorting and classifying LEDs. Use when applicable */ - public readonly ?string $binCode; + public ?string $binCode; /** * @var int|null Sequential carton count in format “#/#” or “# of #” */ - public readonly ?int $packageCount; + public ?int $packageCount; /** * @var string|null Alphanumeric string assigned by the supplier to distinguish * from one closely-related design variation to another. Use as * required or when applicable */ - public readonly ?string $revisionNumber; + public ?string $revisionNumber; /** * @var string|null Digikey Extension: This is not represented in the ECIA spec, but the field being used is found in the ANSI MH10.8.2-2016 spec on which the ECIA spec is based. In the ANSI spec it is called First Level (Supplier Assigned) Part Number. */ - public readonly ?string $digikeyPartNumber; + public ?string $digikeyPartNumber; /** * @var string|null Digikey Extension: This can be shared across multiple invoices and time periods and is generated as an order enters our system from any vector (web, API, phone order, etc.) */ - public readonly ?string $digikeySalesOrderNumber; + public ?string $digikeySalesOrderNumber; /** * @var string|null Digikey extension: This is typically assigned per shipment as items are being released to be picked in the warehouse. A SO can have many Invoice numbers */ - public readonly ?string $digikeyInvoiceNumber; + public ?string $digikeyInvoiceNumber; /** * @var string|null Digikey extension: This is for internal DigiKey purposes and defines the label type. */ - public readonly ?string $digikeyLabelType; + public ?string $digikeyLabelType; /** * @var string|null You will also see this as the last part of a URL for a product detail page. Ex https://www.digikey.com/en/products/detail/w%C3%BCrth-elektronik/860010672008/5726907 */ - public readonly ?string $digikeyPartID; + public ?string $digikeyPartID; /** * @var string|null Digikey Extension: For internal use of Digikey. Probably not needed */ - public readonly ?string $digikeyNA; + public ?string $digikeyNA; /** * @var string|null Digikey Extension: This is a field of varying length used to keep the barcode approximately the same size between labels. It is safe to ignore. */ - public readonly ?string $digikeyPadding; + public ?string $digikeyPadding; - public readonly ?string $mouserPositionInOrder; + public ?string $mouserPositionInOrder; - public readonly ?string $mouserManufacturer; + public ?string $mouserManufacturer; @@ -187,7 +187,7 @@ class EIGP114BarcodeScanResult implements BarcodeScanResultInterface * * @param array $data The fields of the EIGP114 barcode, where the key is the field name and the value is the field content */ - public function __construct(public readonly array $data) + public function __construct(public array $data) { //IDs per EIGP 114.2018 $this->shipDate = $data['6D'] ?? null; @@ -329,4 +329,4 @@ class EIGP114BarcodeScanResult implements BarcodeScanResultInterface return $tmp; } -} \ No newline at end of file +} diff --git a/src/Services/LabelSystem/BarcodeScanner/LocalBarcodeScanResult.php b/src/Services/LabelSystem/BarcodeScanner/LocalBarcodeScanResult.php index 050aff6f..25fb4710 100644 --- a/src/Services/LabelSystem/BarcodeScanner/LocalBarcodeScanResult.php +++ b/src/Services/LabelSystem/BarcodeScanner/LocalBarcodeScanResult.php @@ -29,12 +29,12 @@ use App\Entity\LabelSystem\LabelSupportedElement; * This class represents the result of a barcode scan of a barcode that uniquely identifies a local entity, * like an internally generated barcode or a barcode that was added manually to the system by a user */ -class LocalBarcodeScanResult implements BarcodeScanResultInterface +readonly class LocalBarcodeScanResult implements BarcodeScanResultInterface { public function __construct( - public readonly LabelSupportedElement $target_type, - public readonly int $target_id, - public readonly BarcodeSourceType $source_type, + public LabelSupportedElement $target_type, + public int $target_id, + public BarcodeSourceType $source_type, ) { } @@ -46,4 +46,4 @@ class LocalBarcodeScanResult implements BarcodeScanResultInterface 'Target ID' => $this->target_id, ]; } -} \ No newline at end of file +} From 36e6c9a402d8223f5a13bf64be4e465ff997ab23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 22 Feb 2026 21:31:40 +0100 Subject: [PATCH 152/172] Updated dependencies --- composer.lock | 202 ++++++++++++++++++++++++++------------------------ yarn.lock | 194 ++++++++++++++++++++++-------------------------- 2 files changed, 195 insertions(+), 201 deletions(-) diff --git a/composer.lock b/composer.lock index 2db828a5..1daf67b5 100644 --- a/composer.lock +++ b/composer.lock @@ -968,7 +968,7 @@ }, { "name": "api-platform/doctrine-common", - "version": "v4.2.16", + "version": "v4.2.17", "source": { "type": "git", "url": "https://github.com/api-platform/doctrine-common.git", @@ -1052,13 +1052,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/doctrine-common/tree/v4.2.16" + "source": "https://github.com/api-platform/doctrine-common/tree/v4.3.0-alpha.1" }, "time": "2026-02-13T15:07:33+00:00" }, { "name": "api-platform/doctrine-orm", - "version": "v4.2.16", + "version": "v4.2.17", "source": { "type": "git", "url": "https://github.com/api-platform/doctrine-orm.git", @@ -1139,13 +1139,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/doctrine-orm/tree/v4.2.16" + "source": "https://github.com/api-platform/doctrine-orm/tree/v4.2.17" }, "time": "2026-02-13T17:30:49+00:00" }, { "name": "api-platform/documentation", - "version": "v4.2.16", + "version": "v4.2.17", "source": { "type": "git", "url": "https://github.com/api-platform/documentation.git", @@ -1202,13 +1202,13 @@ ], "description": "API Platform documentation controller.", "support": { - "source": "https://github.com/api-platform/documentation/tree/v4.2.16" + "source": "https://github.com/api-platform/documentation/tree/v4.3.0-alpha.1" }, "time": "2025-12-27T22:15:57+00:00" }, { "name": "api-platform/http-cache", - "version": "v4.2.16", + "version": "v4.2.17", "source": { "type": "git", "url": "https://github.com/api-platform/http-cache.git", @@ -1282,22 +1282,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/http-cache/tree/v4.2.16" + "source": "https://github.com/api-platform/http-cache/tree/v4.3.0-alpha.1" }, "time": "2026-02-13T15:07:33+00:00" }, { "name": "api-platform/hydra", - "version": "v4.2.16", + "version": "v4.2.17", "source": { "type": "git", "url": "https://github.com/api-platform/hydra.git", - "reference": "ddba613f615caa8372df3d478a36a910b77f6d28" + "reference": "392c44574a7746de03564d709c4eb5c652509440" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/hydra/zipball/ddba613f615caa8372df3d478a36a910b77f6d28", - "reference": "ddba613f615caa8372df3d478a36a910b77f6d28", + "url": "https://api.github.com/repos/api-platform/hydra/zipball/392c44574a7746de03564d709c4eb5c652509440", + "reference": "392c44574a7746de03564d709c4eb5c652509440", "shasum": "" }, "require": { @@ -1369,13 +1369,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/hydra/tree/v4.2.16" + "source": "https://github.com/api-platform/hydra/tree/v4.2.17" }, - "time": "2026-02-13T15:07:33+00:00" + "time": "2026-02-17T13:24:02+00:00" }, { "name": "api-platform/json-api", - "version": "v4.2.16", + "version": "v4.2.17", "source": { "type": "git", "url": "https://github.com/api-platform/json-api.git", @@ -1451,22 +1451,22 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/json-api/tree/v4.2.16" + "source": "https://github.com/api-platform/json-api/tree/v4.2.17" }, "time": "2026-02-13T17:30:49+00:00" }, { "name": "api-platform/json-schema", - "version": "v4.2.16", + "version": "v4.2.17", "source": { "type": "git", "url": "https://github.com/api-platform/json-schema.git", - "reference": "3569ab8e3e5c01d77f00964683254809571fa078" + "reference": "de96f482b6dcf913a2849a71ae102d2e45a61b52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/json-schema/zipball/3569ab8e3e5c01d77f00964683254809571fa078", - "reference": "3569ab8e3e5c01d77f00964683254809571fa078", + "url": "https://api.github.com/repos/api-platform/json-schema/zipball/de96f482b6dcf913a2849a71ae102d2e45a61b52", + "reference": "de96f482b6dcf913a2849a71ae102d2e45a61b52", "shasum": "" }, "require": { @@ -1532,13 +1532,13 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/json-schema/tree/v4.2.16" + "source": "https://github.com/api-platform/json-schema/tree/v4.2.17" }, - "time": "2026-02-13T15:07:33+00:00" + "time": "2026-02-20T20:33:01+00:00" }, { "name": "api-platform/jsonld", - "version": "v4.2.16", + "version": "v4.2.17", "source": { "type": "git", "url": "https://github.com/api-platform/jsonld.git", @@ -1612,13 +1612,13 @@ "rest" ], "support": { - "source": "https://github.com/api-platform/jsonld/tree/v4.2.16" + "source": "https://github.com/api-platform/jsonld/tree/v4.2.17" }, "time": "2026-02-13T17:30:49+00:00" }, { "name": "api-platform/metadata", - "version": "v4.2.16", + "version": "v4.2.17", "source": { "type": "git", "url": "https://github.com/api-platform/metadata.git", @@ -1710,13 +1710,13 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/metadata/tree/v4.2.16" + "source": "https://github.com/api-platform/metadata/tree/v4.2.17" }, "time": "2026-02-13T15:07:33+00:00" }, { "name": "api-platform/openapi", - "version": "v4.2.16", + "version": "v4.2.17", "source": { "type": "git", "url": "https://github.com/api-platform/openapi.git", @@ -1800,22 +1800,22 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/openapi/tree/v4.2.16" + "source": "https://github.com/api-platform/openapi/tree/v4.2.17" }, "time": "2026-01-26T15:38:30+00:00" }, { "name": "api-platform/serializer", - "version": "v4.2.16", + "version": "v4.2.17", "source": { "type": "git", "url": "https://github.com/api-platform/serializer.git", - "reference": "e01024d458c26d230eafbe8ac79dc8e28c3dc379" + "reference": "f021a31e6a409e8c3fd24bee1e5e183b995f9137" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/serializer/zipball/e01024d458c26d230eafbe8ac79dc8e28c3dc379", - "reference": "e01024d458c26d230eafbe8ac79dc8e28c3dc379", + "url": "https://api.github.com/repos/api-platform/serializer/zipball/f021a31e6a409e8c3fd24bee1e5e183b995f9137", + "reference": "f021a31e6a409e8c3fd24bee1e5e183b995f9137", "shasum": "" }, "require": { @@ -1893,22 +1893,22 @@ "serializer" ], "support": { - "source": "https://github.com/api-platform/serializer/tree/v4.2.16" + "source": "https://github.com/api-platform/serializer/tree/v4.2.17" }, - "time": "2026-02-13T17:30:49+00:00" + "time": "2026-02-20T09:35:37+00:00" }, { "name": "api-platform/state", - "version": "v4.2.16", + "version": "v4.2.17", "source": { "type": "git", "url": "https://github.com/api-platform/state.git", - "reference": "0fcd612696acac4632a626bb5dfc6bd99ec3b44a" + "reference": "1b6f69c75579ab0f132cd45e45d5f43ed19a15a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/state/zipball/0fcd612696acac4632a626bb5dfc6bd99ec3b44a", - "reference": "0fcd612696acac4632a626bb5dfc6bd99ec3b44a", + "url": "https://api.github.com/repos/api-platform/state/zipball/1b6f69c75579ab0f132cd45e45d5f43ed19a15a5", + "reference": "1b6f69c75579ab0f132cd45e45d5f43ed19a15a5", "shasum": "" }, "require": { @@ -1990,22 +1990,22 @@ "swagger" ], "support": { - "source": "https://github.com/api-platform/state/tree/v4.2.16" + "source": "https://github.com/api-platform/state/tree/v4.2.17" }, - "time": "2026-02-13T15:07:33+00:00" + "time": "2026-02-17T09:18:17+00:00" }, { "name": "api-platform/symfony", - "version": "v4.2.16", + "version": "v4.2.17", "source": { "type": "git", "url": "https://github.com/api-platform/symfony.git", - "reference": "769f5bc29ce59a5c68006ca5876c409072340e92" + "reference": "04052b61e26a1c059bb595b78670302ad4517b7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/symfony/zipball/769f5bc29ce59a5c68006ca5876c409072340e92", - "reference": "769f5bc29ce59a5c68006ca5876c409072340e92", + "url": "https://api.github.com/repos/api-platform/symfony/zipball/04052b61e26a1c059bb595b78670302ad4517b7f", + "reference": "04052b61e26a1c059bb595b78670302ad4517b7f", "shasum": "" }, "require": { @@ -2118,13 +2118,13 @@ "symfony" ], "support": { - "source": "https://github.com/api-platform/symfony/tree/v4.2.16" + "source": "https://github.com/api-platform/symfony/tree/v4.2.17" }, - "time": "2026-02-13T17:30:49+00:00" + "time": "2026-02-18T14:55:07+00:00" }, { "name": "api-platform/validator", - "version": "v4.2.16", + "version": "v4.2.17", "source": { "type": "git", "url": "https://github.com/api-platform/validator.git", @@ -2194,7 +2194,7 @@ "validator" ], "support": { - "source": "https://github.com/api-platform/validator/tree/v4.2.16" + "source": "https://github.com/api-platform/validator/tree/v4.2.17" }, "time": "2026-01-26T15:45:40+00:00" }, @@ -9500,33 +9500,35 @@ }, { "name": "sabberworm/php-css-parser", - "version": "v9.1.0", + "version": "v9.2.0", "source": { "type": "git", "url": "https://github.com/MyIntervals/PHP-CSS-Parser.git", - "reference": "1b363fdbdc6dd0ca0f4bf98d3a4d7f388133f1fb" + "reference": "59373045e11ad47b5c18fc615feee0219e42f6d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/1b363fdbdc6dd0ca0f4bf98d3a4d7f388133f1fb", - "reference": "1b363fdbdc6dd0ca0f4bf98d3a4d7f388133f1fb", + "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/59373045e11ad47b5c18fc615feee0219e42f6d3", + "reference": "59373045e11ad47b5c18fc615feee0219e42f6d3", "shasum": "" }, "require": { "ext-iconv": "*", "php": "^7.2.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", - "thecodingmachine/safe": "^1.3 || ^2.5 || ^3.3" + "thecodingmachine/safe": "^1.3 || ^2.5 || ^3.4" }, "require-dev": { "php-parallel-lint/php-parallel-lint": "1.4.0", "phpstan/extension-installer": "1.4.3", - "phpstan/phpstan": "1.12.28 || 2.1.25", - "phpstan/phpstan-phpunit": "1.4.2 || 2.0.7", - "phpstan/phpstan-strict-rules": "1.6.2 || 2.0.6", - "phpunit/phpunit": "8.5.46", + "phpstan/phpstan": "1.12.32 || 2.1.32", + "phpstan/phpstan-phpunit": "1.4.2 || 2.0.8", + "phpstan/phpstan-strict-rules": "1.6.2 || 2.0.7", + "phpunit/phpunit": "8.5.52", "rawr/phpunit-data-provider": "3.3.1", - "rector/rector": "1.2.10 || 2.1.7", - "rector/type-perfect": "1.0.0 || 2.1.0" + "rector/rector": "1.2.10 || 2.2.8", + "rector/type-perfect": "1.0.0 || 2.1.0", + "squizlabs/php_codesniffer": "4.0.1", + "thecodingmachine/phpstan-safe-rule": "1.2.0 || 1.4.1" }, "suggest": { "ext-mbstring": "for parsing UTF-8 CSS" @@ -9534,10 +9536,14 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "9.2.x-dev" + "dev-main": "9.3.x-dev" } }, "autoload": { + "files": [ + "src/Rule/Rule.php", + "src/RuleSet/RuleContainer.php" + ], "psr-4": { "Sabberworm\\CSS\\": "src/" } @@ -9568,9 +9574,9 @@ ], "support": { "issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues", - "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v9.1.0" + "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v9.2.0" }, - "time": "2025-09-14T07:37:21+00:00" + "time": "2026-02-21T17:12:03+00:00" }, { "name": "sabre/uri", @@ -17669,16 +17675,16 @@ }, { "name": "webmozart/assert", - "version": "2.1.3", + "version": "2.1.5", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "6976757ba8dd70bf8cbaea0914ad84d8b51a9f46" + "reference": "79155f94852fa27e2f73b459f6503f5e87e2c188" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6976757ba8dd70bf8cbaea0914ad84d8b51a9f46", - "reference": "6976757ba8dd70bf8cbaea0914ad84d8b51a9f46", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/79155f94852fa27e2f73b459f6503f5e87e2c188", + "reference": "79155f94852fa27e2f73b459f6503f5e87e2c188", "shasum": "" }, "require": { @@ -17725,9 +17731,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/2.1.3" + "source": "https://github.com/webmozarts/assert/tree/2.1.5" }, - "time": "2026-02-13T21:01:40+00:00" + "time": "2026-02-18T14:09:36+00:00" }, { "name": "willdurand/negotiation", @@ -18417,16 +18423,16 @@ }, { "name": "phpstan/phpstan-doctrine", - "version": "2.0.16", + "version": "2.0.17", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-doctrine.git", - "reference": "f4ff6084a26d91174b3f0b047589af293a893104" + "reference": "734ef36c2709b51943f04aacadddb76f239562d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/f4ff6084a26d91174b3f0b047589af293a893104", - "reference": "f4ff6084a26d91174b3f0b047589af293a893104", + "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/734ef36c2709b51943f04aacadddb76f239562d3", + "reference": "734ef36c2709b51943f04aacadddb76f239562d3", "shasum": "" }, "require": { @@ -18487,9 +18493,9 @@ ], "support": { "issues": "https://github.com/phpstan/phpstan-doctrine/issues", - "source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.16" + "source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.17" }, - "time": "2026-02-11T08:54:45+00:00" + "time": "2026-02-18T10:21:23+00:00" }, { "name": "phpstan/phpstan-strict-rules", @@ -18965,16 +18971,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.53", + "version": "11.5.55", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a997a653a82845f1240d73ee73a8a4e97e4b0607" + "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a997a653a82845f1240d73ee73a8a4e97e4b0607", - "reference": "a997a653a82845f1240d73ee73a8a4e97e4b0607", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/adc7262fccc12de2b30f12a8aa0b33775d814f00", + "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00", "shasum": "" }, "require": { @@ -19047,7 +19053,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.53" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.55" }, "funding": [ { @@ -19071,20 +19077,20 @@ "type": "tidelift" } ], - "time": "2026-02-10T12:28:25+00:00" + "time": "2026-02-18T12:37:06+00:00" }, { "name": "rector/rector", - "version": "2.3.6", + "version": "2.3.8", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "ca9ebb81d280cd362ea39474dabd42679e32ca6b" + "reference": "bbd37aedd8df749916cffa2a947cfc4714d1ba2c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/ca9ebb81d280cd362ea39474dabd42679e32ca6b", - "reference": "ca9ebb81d280cd362ea39474dabd42679e32ca6b", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/bbd37aedd8df749916cffa2a947cfc4714d1ba2c", + "reference": "bbd37aedd8df749916cffa2a947cfc4714d1ba2c", "shasum": "" }, "require": { @@ -19123,7 +19129,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.3.6" + "source": "https://github.com/rectorphp/rector/tree/2.3.8" }, "funding": [ { @@ -19131,7 +19137,7 @@ "type": "github" } ], - "time": "2026-02-06T14:25:06+00:00" + "time": "2026-02-22T09:45:50+00:00" }, { "name": "roave/security-advisories", @@ -19139,12 +19145,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "7f3e95c9ebf1b16e002dd2c913d30d962c2a6a16" + "reference": "92c5ec5685cfbcd7ef721a502e6622516728011c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/7f3e95c9ebf1b16e002dd2c913d30d962c2a6a16", - "reference": "7f3e95c9ebf1b16e002dd2c913d30d962c2a6a16", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/92c5ec5685cfbcd7ef721a502e6622516728011c", + "reference": "92c5ec5685cfbcd7ef721a502e6622516728011c", "shasum": "" }, "conflict": { @@ -19312,6 +19318,7 @@ "devgroup/dotplant": "<2020.09.14-dev", "digimix/wp-svg-upload": "<=1", "directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2", + "directorytree/imapengine": "<1.22.3", "dl/yag": "<3.0.1", "dmk/webkitpdf": "<1.1.4", "dnadesign/silverstripe-elemental": "<5.3.12", @@ -19414,7 +19421,7 @@ "filegator/filegator": "<7.8", "filp/whoops": "<2.1.13", "fineuploader/php-traditional-server": "<=1.2.2", - "firebase/php-jwt": "<6", + "firebase/php-jwt": "<7", "fisharebest/webtrees": "<=2.1.18", "fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2", "fixpunkt/fp-newsletter": "<1.1.1|>=1.2,<2.1.2|>=2.2,<3.2.6", @@ -19452,7 +19459,7 @@ "genix/cms": "<=1.1.11", "georgringer/news": "<1.3.3", "geshi/geshi": "<=1.0.9.1", - "getformwork/formwork": "<2.2", + "getformwork/formwork": "<=2.3.3", "getgrav/grav": "<1.11.0.0-beta1", "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1|>=5,<=5.2.1", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", @@ -19575,7 +19582,7 @@ "leantime/leantime": "<3.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<25.12", + "librenms/librenms": "<26.2", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", "limesurvey/limesurvey": "<6.5.12", @@ -19783,7 +19790,7 @@ "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", "propel/propel1": ">=1,<=1.7.1", "psy/psysh": "<=0.11.22|>=0.12,<=0.12.18", - "pterodactyl/panel": "<1.12", + "pterodactyl/panel": "<1.12.1", "ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2", "ptrofimov/beanstalk_console": "<1.7.14", "pubnub/pubnub": "<6.1", @@ -19886,7 +19893,7 @@ "starcitizentools/short-description": ">=4,<4.0.1", "starcitizentools/tabber-neue": ">=1.9.1,<2.7.2|>=3,<3.1.1", "starcitizenwiki/embedvideo": "<=4", - "statamic/cms": "<5.73.6|>=6,<6.2.5", + "statamic/cms": "<5.73.9|>=6,<6.3.2", "stormpath/sdk": "<9.9.99", "studio-42/elfinder": "<=2.1.64", "studiomitte/friendlycaptcha": "<0.1.4", @@ -20058,7 +20065,7 @@ "wpanel/wpanel4-cms": "<=4.3.1", "wpcloud/wp-stateless": "<3.2", "wpglobus/wpglobus": "<=1.9.6", - "wwbn/avideo": "<14.3", + "wwbn/avideo": "<21", "xataface/xataface": "<3", "xpressengine/xpressengine": "<3.0.15", "yab/quarx": "<2.4.5", @@ -20117,7 +20124,8 @@ "zf-commons/zfc-user": "<1.2.2", "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", "zfr/zfr-oauth2-server-module": "<0.1.2", - "zoujingli/thinkadmin": "<=6.1.53" + "zoujingli/thinkadmin": "<=6.1.53", + "zumba/json-serializer": "<3.2.3" }, "default-branch": true, "type": "metapackage", @@ -20155,7 +20163,7 @@ "type": "tidelift" } ], - "time": "2026-02-13T23:11:21+00:00" + "time": "2026-02-20T22:06:39+00:00" }, { "name": "sebastian/cli-parser", diff --git a/yarn.lock b/yarn.lock index e3d72ad7..5ab2d6b0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,58 +2,58 @@ # yarn lockfile v1 -"@algolia/autocomplete-core@1.19.5": - version "1.19.5" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.19.5.tgz#52d99aafce19493161220e417071f0222eeea7d6" - integrity sha512-/kAE3mMBage/9m0OGnKQteSa7/eIfvhiKx28OWj857+dJ6qYepEBuw5L8its2oTX8ZNM/6TA3fo49kMwgcwjlg== +"@algolia/autocomplete-core@1.19.6": + version "1.19.6" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.19.6.tgz#472ba8f84d3bd1d253d24759caeaac454db902e7" + integrity sha512-6EoD7PeM2WBq5GY1jm0gGonDW2JVU4BaHT9tAwDcaPkc6gYIRZeY7X7aFuwdRvk9R/jwsh8sz4flDao0+Kua6g== dependencies: - "@algolia/autocomplete-plugin-algolia-insights" "1.19.5" - "@algolia/autocomplete-shared" "1.19.5" + "@algolia/autocomplete-plugin-algolia-insights" "1.19.6" + "@algolia/autocomplete-shared" "1.19.6" -"@algolia/autocomplete-js@1.19.5", "@algolia/autocomplete-js@^1.17.0": - version "1.19.5" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-js/-/autocomplete-js-1.19.5.tgz#2ec3efd9d5efd505ea677775d0199e1207e4624e" - integrity sha512-C2/bEQeqq4nZ4PH2rySRvU9B224KbiCXAPZIn3pmMII/7BiXkppPQyDd+Fdly3ubOmnGFDH6BTzGHamySeOYeg== +"@algolia/autocomplete-js@1.19.6", "@algolia/autocomplete-js@^1.17.0": + version "1.19.6" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-js/-/autocomplete-js-1.19.6.tgz#a81b3b40e7e6356f22af75bfc1c92116d4a86243" + integrity sha512-rHYKT6P+2FZ1+7a1/JtWIuCmfioOt5eXsAcri6XTYsSutl3BIh8s2e98kbvjbhLfwEuuVDWtST1hdAY2pQdrKw== dependencies: - "@algolia/autocomplete-core" "1.19.5" - "@algolia/autocomplete-preset-algolia" "1.19.5" - "@algolia/autocomplete-shared" "1.19.5" + "@algolia/autocomplete-core" "1.19.6" + "@algolia/autocomplete-preset-algolia" "1.19.6" + "@algolia/autocomplete-shared" "1.19.6" htm "^3.1.1" preact "^10.13.2" -"@algolia/autocomplete-plugin-algolia-insights@1.19.5": - version "1.19.5" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.5.tgz#05246356fe9837475b08664ff4d6f55960127edc" - integrity sha512-5zbetV9h2VxH+Mxx27I7BH2EIACVRUBE1FNykBK+2c2M+mhXYMY4npHbbGYj6QDEw3VVvH2UxAnghFpCtC6B/w== +"@algolia/autocomplete-plugin-algolia-insights@1.19.6": + version "1.19.6" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.6.tgz#7db79ca4a107059477b56e31e8f7760513f265a2" + integrity sha512-VD53DBixhEwDvOB00D03DtBVhh5crgb1N0oH3QTscfYk4TpBH+CKrwmN/XrN/VdJAdP+4K6SgwLii/3OwM9dHw== dependencies: - "@algolia/autocomplete-shared" "1.19.5" + "@algolia/autocomplete-shared" "1.19.6" "@algolia/autocomplete-plugin-recent-searches@^1.17.0": - version "1.19.5" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-recent-searches/-/autocomplete-plugin-recent-searches-1.19.5.tgz#afd80f8abb281c4c01817a1edfde9a8aa95ed5db" - integrity sha512-lOEliMbohq0BsZJ7JXFHlfmGBNtuCsQW0PLq8m6X1SdMD4XAn8fFxiOO2Nk1A/IiymZcOoHQV71u6f14wiohDw== + version "1.19.6" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-recent-searches/-/autocomplete-plugin-recent-searches-1.19.6.tgz#13b6617f03bfc8257d947a0d6cf0435de5677847" + integrity sha512-HQdSxHXFlxPUx6okxYWrrSbVD2o3OrDstU/E83Qvdl3Pwya3eZKrjhBb84i3Tqkm71wuABRYmCMNjc/qGFX4hw== dependencies: - "@algolia/autocomplete-core" "1.19.5" - "@algolia/autocomplete-js" "1.19.5" - "@algolia/autocomplete-preset-algolia" "1.19.5" - "@algolia/autocomplete-shared" "1.19.5" + "@algolia/autocomplete-core" "1.19.6" + "@algolia/autocomplete-js" "1.19.6" + "@algolia/autocomplete-preset-algolia" "1.19.6" + "@algolia/autocomplete-shared" "1.19.6" -"@algolia/autocomplete-preset-algolia@1.19.5": - version "1.19.5" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.19.5.tgz#a9d5756090314c16b8895fa0c74ffccca7f8a1e2" - integrity sha512-afdgxUyBxgX1I34THLScCyC+ld2h8wnCTv7JndRxsRNIJjJpFtRNpnYDq0+HVcp+LYeNd1zksDu7CpltTSEsvA== +"@algolia/autocomplete-preset-algolia@1.19.6": + version "1.19.6" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.19.6.tgz#bf800e3e0e3f69f661476d9d1a3237b122e84aa5" + integrity sha512-/uQlHGK5Q2x5Nvrp3W7JMg4YNGG/ygkHtQLTltDbkpd45wnhV9jUiQA6aCnBed9cq0BXhOJZRxh1zGVZ3yRhBg== dependencies: - "@algolia/autocomplete-shared" "1.19.5" + "@algolia/autocomplete-shared" "1.19.6" -"@algolia/autocomplete-shared@1.19.5": - version "1.19.5" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.5.tgz#1a20f60fd400fd5641718358a2d5c3eb1893cf9c" - integrity sha512-yblBczNXtm2cCVzX4UAY3KkjdefmZPn1gWbIi8Q7qfBw7FjcKq2EjEl/65x4kU9nUc/ZkB5SeUf/bkqLEnA5gA== +"@algolia/autocomplete-shared@1.19.6": + version "1.19.6" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.6.tgz#5261f04a1cadf82138b6feb5a6df383106f50d60" + integrity sha512-DG1n2B6XQw6DWB5veO4RuzQ/N2oGNpG+sSzGT7gUbi7WhF+jN57abcv2QhB5flXZ0NgddE1i6h7dZuQmYBEorQ== "@algolia/autocomplete-theme-classic@^1.17.0": - version "1.19.5" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.19.5.tgz#7b0d3ac11f2dca33600fce9ac383056ab4202cdc" - integrity sha512-LjjhOmDbEXmV2IqaA7Xe8jh6lSpG087yC79ffLpXMKJOib4xSHFvPavsXC8NW25pWVHJFoAfplAAmxmeM2/jhw== + version "1.19.6" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.19.6.tgz#ba1c9760ac725283d086a9affd784823fdb72c71" + integrity sha512-lJg8fGK7ucuapoCwFqciTAvAOb7lI/BgWXN0VP+nW/oG0xtig6FvJz/XXxHxfvfVWLCfDvmW5Dw+vEAnbxXiFA== "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0": version "7.29.0" @@ -1857,11 +1857,6 @@ resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-8.0.23.tgz#a6eebc9ab4a5faadae265a4cbec8cfcb5731e77c" integrity sha512-GZ7cijxEZ6Ig71u7rD6LHaRv/wcE/hNsc+nEfiWOkLNqUgLOwo5MNGWOy5ZV9ZUDSiQx1no7YxjTNnT4O6//cQ== -"@isaacs/cliui@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-9.0.0.tgz#4d0a3f127058043bf2e7ee169eaf30ed901302f3" - integrity sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg== - "@jbtronics/bs-treeview@^1.0.1": version "1.0.6" resolved "https://registry.yarnpkg.com/@jbtronics/bs-treeview/-/bs-treeview-1.0.6.tgz#7fe126a2ca4716c824d97ab6d1a5f2417750445a" @@ -2165,11 +2160,11 @@ integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/node@*": - version "25.2.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-25.2.3.tgz#9c18245be768bdb4ce631566c7da303a5c99a7f8" - integrity sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ== + version "25.3.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.3.0.tgz#749b1bd4058e51b72e22bd41e9eab6ebd0180470" + integrity sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A== dependencies: - undici-types "~7.16.0" + undici-types "~7.18.0" "@types/parse-json@^4.0.0": version "4.0.2" @@ -2392,16 +2387,16 @@ acorn-import-phases@^1.0.3: integrity sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ== acorn-walk@^8.0.0: - version "8.3.4" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" - integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + version "8.3.5" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.5.tgz#8a6b8ca8fc5b34685af15dabb44118663c296496" + integrity sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw== dependencies: acorn "^8.11.0" acorn@^8.0.4, acorn@^8.11.0, acorn@^8.15.0: - version "8.15.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" - integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== + version "8.16.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a" + integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== adjust-sourcemap-loader@^4.0.0: version "4.0.0" @@ -2439,9 +2434,9 @@ ajv-keywords@^5.1.0: fast-deep-equal "^3.1.3" ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + version "6.14.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.14.0.tgz#fd067713e228210636ebb08c60bd3765d6dbe73a" + integrity sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -2606,11 +2601,9 @@ balanced-match@^1.0.0: integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== balanced-match@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.2.tgz#241591ea634702bef9c482696f2469406e16d233" - integrity sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg== - dependencies: - jackspeak "^4.2.3" + version "4.0.4" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a" + integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== barcode-detector@^3.0.0, barcode-detector@^3.0.5: version "3.0.8" @@ -2630,9 +2623,9 @@ base64-js@^1.1.2, base64-js@^1.3.0: integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== baseline-browser-mapping@^2.9.0: - version "2.9.19" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz#3e508c43c46d961eb4d7d2e5b8d1dd0f9ee4f488" - integrity sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg== + version "2.10.0" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz#5b09935025bf8a80e29130251e337c6a7fc8cbb9" + integrity sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA== big.js@^5.2.2: version "5.2.2" @@ -2678,9 +2671,9 @@ brace-expansion@^1.1.7: concat-map "0.0.1" brace-expansion@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.2.tgz#b6c16d0791087af6c2bc463f52a8142046c06b6f" - integrity sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw== + version "5.0.3" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.3.tgz#6a9c6c268f85b53959ec527aeafe0f7300258eef" + integrity sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA== dependencies: balanced-match "^4.0.2" @@ -2800,9 +2793,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759: - version "1.0.30001770" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz#4dc47d3b263a50fbb243448034921e0a88591a84" - integrity sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw== + version "1.0.30001772" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001772.tgz#aa8a176eba0006e78c965a8215c7a1ceb030122d" + integrity sha512-mIwLZICj+ntVTw4BT2zfp+yu/AqV6GMKfJVJMx3MwPxs+uk/uj2GLl2dH8LQbjiLDX66amCga5nKFyDgRR43kg== ccount@^2.0.0: version "2.0.1" @@ -3175,9 +3168,9 @@ css-loader@^5.2.7: semver "^7.3.5" css-loader@^7.1.0: - version "7.1.3" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-7.1.3.tgz#c0de715ceabe39b8531a85fcaf6734a430c4d99a" - integrity sha512-frbERmjT0UC5lMheWpJmMilnt9GEhbZJN/heUb7/zaJYeIzj5St9HvDcfshzzOqbsS+rYpMk++2SD3vGETDSyA== + version "7.1.4" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-7.1.4.tgz#8f6bf9f8fc8cbef7d2ef6e80acc6545eaefa90b1" + integrity sha512-vv3J9tlOl04WjiMvHQI/9tmIrCxVrj6PFbHemBB1iihpeRbi/I4h033eoFIhwxBBqLhI0KYFS7yvynBFhIZfTw== dependencies: icss-utils "^5.1.0" postcss "^8.4.40" @@ -3681,9 +3674,9 @@ dunder-proto@^1.0.0, dunder-proto@^1.0.1: gopd "^1.2.0" electron-to-chromium@^1.5.263: - version "1.5.286" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz#142be1ab5e1cd5044954db0e5898f60a4960384e" - integrity sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A== + version "1.5.302" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.302.tgz#032a5802b31f7119269959c69fe2015d8dad5edb" + integrity sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg== emoji-regex@^7.0.1: version "7.0.3" @@ -4843,13 +4836,6 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -jackspeak@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.2.3.tgz#27ef80f33b93412037c3bea4f8eddf80e1931483" - integrity sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg== - dependencies: - "@isaacs/cliui" "^9.0.0" - javascript-stringify@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3" @@ -4974,9 +4960,9 @@ jszip@^3.2.0: setimmediate "^1.0.5" katex@^0.16.0: - version "0.16.28" - resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.28.tgz#64068425b5a29b41b136aae0d51cbb2c71d64c39" - integrity sha512-YHzO7721WbmAL6Ov1uzN/l5mY5WWWhJBSW+jq4tkfZfsxmo1hu6frS0EOswvjBUnWE6NtjEs48SFn5CQESRLZg== + version "0.16.29" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.29.tgz#d6d2cc2e1840663c2ceb6fc764d4f0d9ca04fa4c" + integrity sha512-ef+wYUDehNgScWoA0ZhEngsNqUv9uIj4ftd/PapQmT+E85lXI6Wx6BvJO48v80Vhj3t/IjEoZWw9/ZPe8kHwHg== dependencies: commander "^8.3.0" @@ -5119,9 +5105,9 @@ marked-mangle@^1.0.1: integrity sha512-bRrqNcfU9v3iRECb7YPvA+/xKZMjHojd9R92YwHbFjdPQ+Wc7vozkbGKAv4U8AUl798mNUuY3DTBQkedsV3TeQ== marked@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/marked/-/marked-17.0.2.tgz#a103f82bed9653dd1d74c15f74107c84ddbe749d" - integrity sha512-s5HZGFQea7Huv5zZcAGhJLT3qLpAfnY7v7GWkICUr0+Wd5TFEtdlRR2XUL5Gg+RH7u2Df595ifrxR03mBaw7gA== + version "17.0.3" + resolved "https://registry.yarnpkg.com/marked/-/marked-17.0.3.tgz#0defa25b1ba288433aa847848475d11109e1b3fd" + integrity sha512-jt1v2ObpyOKR8p4XaUJVk3YWRJ5n+i4+rjQopxvV32rSndTJXvIzuUdWWIy/1pFQMkQmvTXawzDNqOH/CUmx6A== math-intrinsics@^1.1.0: version "1.1.0" @@ -5139,9 +5125,9 @@ mdast-util-find-and-replace@^3.0.0: unist-util-visit-parents "^6.0.0" mdast-util-from-markdown@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz#4850390ca7cf17413a9b9a0fbefcd1bc0eb4160a" - integrity sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA== + version "2.0.3" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz#c95822b91aab75f18a4cbe8b2f51b873ed2cf0c7" + integrity sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q== dependencies: "@types/mdast" "^4.0.0" "@types/unist" "^3.0.0" @@ -5606,9 +5592,9 @@ mini-css-extract-plugin@^2.4.2, mini-css-extract-plugin@^2.6.0: tapable "^2.2.1" minimatch@*: - version "10.2.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.0.tgz#e710473e66e3e1aaf376d0aa82438375cac86e9e" - integrity sha512-ugkC31VaVg9cF0DFVoADH12k6061zNZkZON+aX8AWsR9GhPcErkcMBceb6znR8wLERM2AkkOxy2nWRLpT9Jq5w== + version "10.2.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.2.tgz#361603ee323cfb83496fea2ae17cc44ea4e1f99f" + integrity sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw== dependencies: brace-expansion "^5.0.2" @@ -5620,9 +5606,9 @@ minimatch@3.0.4: brace-expansion "^1.1.7" minimatch@^3.0.4, minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + version "3.1.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.3.tgz#6a5cba9b31f503887018f579c89f81f61162e624" + integrity sha512-M2GCs7Vk83NxkUyQV1bkABc4yxgz9kILhHImZiBPAZ9ybuvCb0/H7lEl5XvIg3g+9d4eNotkZA5IWwYl0tibaA== dependencies: brace-expansion "^1.1.7" @@ -6530,9 +6516,9 @@ postcss@^8.2.14, postcss@^8.2.15, postcss@^8.4.12, postcss@^8.4.40: source-map-js "^1.2.1" preact@^10.13.2: - version "10.28.3" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.28.3.tgz#3c2171526b3e29628ad1a6c56a9e3ca867bbdee8" - integrity sha512-tCmoRkPQLpBeWzpmbhryairGnhW9tKV6c6gr/w+RhoRoKEJwsjzipwp//1oCpGPOchvSLaAPlpcJi9MwMmoPyA== + version "10.28.4" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.28.4.tgz#8ffab01c5c0590535bdaecdd548801f44c6e483a" + integrity sha512-uKFfOHWuSNpRFVTnljsCluEFq57OKT+0QdOiQo8XWnQ/pSvg7OpX5eNOejELXJMWy+BwM2nobz0FkvzmnpCNsQ== pretty-error@^4.0.0: version "4.0.0" @@ -7582,10 +7568,10 @@ unbox-primitive@^1.1.0: has-symbols "^1.1.0" which-boxed-primitive "^1.1.1" -undici-types@~7.16.0: - version "7.16.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" - integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== +undici-types@~7.18.0: + version "7.18.2" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.18.2.tgz#29357a89e7b7ca4aef3bf0fd3fd0cd73884229e9" + integrity sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w== unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.1" From b6d77af91be30d2963272a432cf3e560e0b6b5d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 22 Feb 2026 21:43:57 +0100 Subject: [PATCH 153/172] Removed title_controller as turbo 8 can handle the title changes natively --- assets/controllers/turbo/title_controller.js | 31 -------------------- templates/_turbo_control.html.twig | 3 -- 2 files changed, 34 deletions(-) delete mode 100644 assets/controllers/turbo/title_controller.js diff --git a/assets/controllers/turbo/title_controller.js b/assets/controllers/turbo/title_controller.js deleted file mode 100644 index 6bbebdf7..00000000 --- a/assets/controllers/turbo/title_controller.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony). - * - * Copyright (C) 2019 - 2022 Jan Böhmer (https://github.com/jbtronics) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import { Controller } from '@hotwired/stimulus'; - -export default class extends Controller { - connect() { - //If we encounter an element with this, then change the title of our document according to data-title - this.changeTitle(this.element.dataset.title); - } - - changeTitle(title) { - document.title = title; - } -} \ No newline at end of file diff --git a/templates/_turbo_control.html.twig b/templates/_turbo_control.html.twig index cf65f0da..236aaf2c 100644 --- a/templates/_turbo_control.html.twig +++ b/templates/_turbo_control.html.twig @@ -24,9 +24,6 @@ {# Insert info about when the sidebar trees were updated last time, so the sidebar_tree_controller can decide if it needs to reload the tree #} -{# The title block is already escaped, therefore we dont require any additional escaping here #} -
-
{% set locales = settings_instance('localization').languageMenuEntries %} {% if locales is empty %} From e2b43ba01f4c7be604ac719b4675dea9cdfc2184 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 22 Feb 2026 21:46:55 +0100 Subject: [PATCH 154/172] Use native turbo reload mechanism instead of our own global_reload controller --- .../turbo/global_reload_controller.js | 27 ------------------- templates/_turbo_control.html.twig | 5 +--- templates/base.html.twig | 5 ++++ 3 files changed, 6 insertions(+), 31 deletions(-) delete mode 100644 assets/controllers/turbo/global_reload_controller.js diff --git a/assets/controllers/turbo/global_reload_controller.js b/assets/controllers/turbo/global_reload_controller.js deleted file mode 100644 index ce8a6c72..00000000 --- a/assets/controllers/turbo/global_reload_controller.js +++ /dev/null @@ -1,27 +0,0 @@ -/* - * This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony). - * - * Copyright (C) 2019 - 2022 Jan Böhmer (https://github.com/jbtronics) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import { Controller } from '@hotwired/stimulus'; - -export default class extends Controller { - connect() { - //If we encounter an element with global reload controller, then reload the whole page - window.location.reload(); - } -} \ No newline at end of file diff --git a/templates/_turbo_control.html.twig b/templates/_turbo_control.html.twig index 236aaf2c..aad3d051 100644 --- a/templates/_turbo_control.html.twig +++ b/templates/_turbo_control.html.twig @@ -16,10 +16,7 @@ {% endblock %} -{# Allow pages to request a fully reload of everything #} -{% if global_reload_needed is defined and global_reload_needed %} -
-{% endif %} + {# Insert info about when the sidebar trees were updated last time, so the sidebar_tree_controller can decide if it needs to reload the tree #} diff --git a/templates/base.html.twig b/templates/base.html.twig index 2db726ee..8dc87239 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -26,6 +26,11 @@ + {# Allow pages to request a fully reload of everything #} + {% if global_reload_needed is defined and global_reload_needed %} + + {% endif %} + From 2ba0f2a95d8d03cdcc2f394037fbaf16e6053ff6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 22 Feb 2026 21:53:37 +0100 Subject: [PATCH 155/172] Use turbo-streams for handling updating locale menu in navbar --- .../turbo/locale_menu_controller.js | 27 ------------------- templates/_navbar.html.twig | 2 +- templates/_turbo_control.html.twig | 26 ++++++++++-------- 3 files changed, 16 insertions(+), 39 deletions(-) delete mode 100644 assets/controllers/turbo/locale_menu_controller.js diff --git a/assets/controllers/turbo/locale_menu_controller.js b/assets/controllers/turbo/locale_menu_controller.js deleted file mode 100644 index d55ff8da..00000000 --- a/assets/controllers/turbo/locale_menu_controller.js +++ /dev/null @@ -1,27 +0,0 @@ -/* - * This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony). - * - * Copyright (C) 2019 - 2022 Jan Böhmer (https://github.com/jbtronics) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import { Controller } from '@hotwired/stimulus'; - -export default class extends Controller { - connect() { - const menu = document.getElementById('locale-select-menu'); - menu.innerHTML = this.element.innerHTML; - } -} \ No newline at end of file diff --git a/templates/_navbar.html.twig b/templates/_navbar.html.twig index d327a4f6..54be3fd0 100644 --- a/templates/_navbar.html.twig +++ b/templates/_navbar.html.twig @@ -159,7 +159,7 @@
- {# This menu is filled by 'turbo/locale_menu' controller from the _turbo_control.html.twig template, to always have the correct path #} + {# This menu is filled by a turbo-stream in _turbo_contro.html.twig #}
diff --git a/templates/_turbo_control.html.twig b/templates/_turbo_control.html.twig index aad3d051..281b21f2 100644 --- a/templates/_turbo_control.html.twig +++ b/templates/_turbo_control.html.twig @@ -21,15 +21,19 @@ {# Insert info about when the sidebar trees were updated last time, so the sidebar_tree_controller can decide if it needs to reload the tree #} -
- {% set locales = settings_instance('localization').languageMenuEntries %} - {% if locales is empty %} - {% set locales = locale_menu %} - {% endif %} + + + + - {% for locale in locales %} - - {{ locale|language_name }} ({{ locale|upper }}) - {% endfor %} -
From cee6c0ef11a7b4e5a8bcc5a19ae71ea52141e504 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 22 Feb 2026 22:03:46 +0100 Subject: [PATCH 156/172] Added a "create from label scan button to navbar" --- templates/_navbar.html.twig | 9 +++++++++ translations/messages.en.xlf | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/templates/_navbar.html.twig b/templates/_navbar.html.twig index 54be3fd0..57331370 100644 --- a/templates/_navbar.html.twig +++ b/templates/_navbar.html.twig @@ -60,6 +60,15 @@ {% endif %} + + {% if is_granted("@tools.label_scanner") %} +
  • + + + {% trans %}parts.create_from_scan.title{% endtrans %} + +
  • + {% endif %} {% endif %} {% if is_granted('@parts.import') %} diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 31bc3884..b786957a 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -12563,5 +12563,11 @@ Buerklin-API Authentication server: Create [part] from barcode + + + parts.create_from_scan.title + Create [part] from label scan + + From aa9436a19b706d9a25594e4e5a9f3c0e33141771 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 22 Feb 2026 22:09:23 +0100 Subject: [PATCH 157/172] Fixed conrad provider if part does not have manuals --- src/Services/InfoProviderSystem/Providers/ConradProvider.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Services/InfoProviderSystem/Providers/ConradProvider.php b/src/Services/InfoProviderSystem/Providers/ConradProvider.php index 3086b7d8..39de1e23 100644 --- a/src/Services/InfoProviderSystem/Providers/ConradProvider.php +++ b/src/Services/InfoProviderSystem/Providers/ConradProvider.php @@ -201,7 +201,7 @@ readonly class ConradProvider implements InfoProviderInterface, URLHandlerInfoPr public function productMediaToDatasheets(array $productMedia): array { $files = []; - foreach ($productMedia['manuals'] as $manual) { + foreach ($productMedia['manuals'] ?? [] as $manual) { //Filter out unwanted languages if (!empty($this->settings->attachmentLanguageFilter) && !in_array($manual['language'], $this->settings->attachmentLanguageFilter, true)) { continue; From 258289482b1ad937e95b17b1b04293d875093cf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 22 Feb 2026 22:12:50 +0100 Subject: [PATCH 158/172] Increase debug detail expiration time to 10s to avoid double retrieval in one request --- src/Services/InfoProviderSystem/PartInfoRetriever.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Services/InfoProviderSystem/PartInfoRetriever.php b/src/Services/InfoProviderSystem/PartInfoRetriever.php index 5cc23f05..db1895e7 100644 --- a/src/Services/InfoProviderSystem/PartInfoRetriever.php +++ b/src/Services/InfoProviderSystem/PartInfoRetriever.php @@ -95,7 +95,7 @@ final class PartInfoRetriever $escaped_keyword = hash('xxh3', $keyword); return $this->partInfoCache->get("search_{$provider->getProviderKey()}_{$escaped_keyword}", function (ItemInterface $item) use ($provider, $keyword) { //Set the expiration time - $item->expiresAfter(!$this->debugMode ? self::CACHE_RESULT_EXPIRATION : 1); + $item->expiresAfter(!$this->debugMode ? self::CACHE_RESULT_EXPIRATION : 10); return $provider->searchByKeyword($keyword); }); @@ -122,7 +122,7 @@ final class PartInfoRetriever $escaped_part_id = hash('xxh3', $part_id); return $this->partInfoCache->get("details_{$provider_key}_{$escaped_part_id}", function (ItemInterface $item) use ($provider, $part_id) { //Set the expiration time - $item->expiresAfter(!$this->debugMode ? self::CACHE_DETAIL_EXPIRATION : 1); + $item->expiresAfter(!$this->debugMode ? self::CACHE_DETAIL_EXPIRATION : 10); return $provider->getDetails($part_id); }); From 87919eb445dd5bcbc4a8d9ddc09e750472842c11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 22 Feb 2026 22:29:44 +0100 Subject: [PATCH 159/172] Allow to cache amazon search results to reduce API calls --- .../Providers/CanopyProvider.php | 60 +++++++++++++++++-- .../InfoProviderSystem/CanopySettings.php | 5 ++ 2 files changed, 60 insertions(+), 5 deletions(-) diff --git a/src/Services/InfoProviderSystem/Providers/CanopyProvider.php b/src/Services/InfoProviderSystem/Providers/CanopyProvider.php index e6ca3961..f7683084 100644 --- a/src/Services/InfoProviderSystem/Providers/CanopyProvider.php +++ b/src/Services/InfoProviderSystem/Providers/CanopyProvider.php @@ -30,6 +30,7 @@ use App\Services\InfoProviderSystem\DTOs\PurchaseInfoDTO; use App\Services\InfoProviderSystem\DTOs\SearchResultDTO; use App\Settings\InfoProviderSystem\BuerklinSettings; use App\Settings\InfoProviderSystem\CanopySettings; +use Psr\Cache\CacheItemPoolInterface; use Symfony\Component\DependencyInjection\Attribute\When; use Symfony\Contracts\HttpClient\HttpClientInterface; @@ -45,7 +46,8 @@ class CanopyProvider implements InfoProviderInterface public const DISTRIBUTOR_NAME = 'Amazon'; - public function __construct(private readonly CanopySettings $settings, private readonly HttpClientInterface $httpClient) + public function __construct(private readonly CanopySettings $settings, + private readonly HttpClientInterface $httpClient, private readonly CacheItemPoolInterface $partInfoCache) { } @@ -76,6 +78,39 @@ class CanopyProvider implements InfoProviderInterface return "https://www.amazon.{$this->settings->domain}/dp/{$asin}"; } + /** + * Saves the given part to the cache. + * Everytime this function is called, the cache is overwritten. + * @param PartDetailDTO $part + * @return void + */ + private function saveToCache(PartDetailDTO $part): void + { + $key = 'canopy_part_'.$part->provider_id; + + $item = $this->partInfoCache->getItem($key); + $item->set($part); + $item->expiresAfter(3600 * 24); //Cache for 1 day + $this->partInfoCache->save($item); + } + + /** + * Retrieves a from the cache, or null if it was not cached yet. + * @param string $id + * @return PartDetailDTO|null + */ + private function getFromCache(string $id): ?PartDetailDTO + { + $key = 'canopy_part_'.$id; + + $item = $this->partInfoCache->getItem($key); + if ($item->isHit()) { + return $item->get(); + } + + return null; + } + public function searchByKeyword(string $keyword): array { $response = $this->httpClient->request('GET', self::SEARCH_API_URL, [ @@ -93,14 +128,20 @@ class CanopyProvider implements InfoProviderInterface $out = []; foreach ($results as $result) { - $out[] = new SearchResultDTO( + + + $dto = new PartDetailDTO( provider_key: $this->getProviderKey(), provider_id: $result['asin'], name: $result["title"], description: "", preview_image_url: $result["mainImageUrl"] ?? null, provider_url: $this->productPageFromASIN($result['asin']), + vendor_infos: [$this->priceToPurchaseInfo($result['price'], $result['asin'])] ); + + $out[] = $dto; + $this->saveToCache($dto); } return $out; @@ -125,11 +166,15 @@ class CanopyProvider implements InfoProviderInterface return $notes; } - private function priceToPurchaseInfo(array $price, string $asin): PurchaseInfoDTO + private function priceToPurchaseInfo(?array $price, string $asin): PurchaseInfoDTO { - $priceDto = new PriceDTO(minimum_discount_amount: 1, price: (string) $price['value'], currency_iso_code: $price['currency'], includes_tax: true); + $priceDtos = []; + if ($price !== null) { + $priceDtos[] = new PriceDTO(minimum_discount_amount: 1, price: (string) $price['value'], currency_iso_code: $price['currency'], includes_tax: true); + } - return new PurchaseInfoDTO(self::DISTRIBUTOR_NAME, order_number: $asin, prices: [$priceDto], product_url: $this->productPageFromASIN($asin)); + + return new PurchaseInfoDTO(self::DISTRIBUTOR_NAME, order_number: $asin, prices: $priceDtos, product_url: $this->productPageFromASIN($asin)); } public function getDetails(string $id): PartDetailDTO @@ -139,6 +184,11 @@ class CanopyProvider implements InfoProviderInterface throw new \InvalidArgumentException("The id must be a valid ASIN (10 characters, letters and numbers)"); } + //Use cached details if available and the settings allow it, to avoid unnecessary API requests, since the search results already contain most of the details + if(!$this->settings->alwaysGetDetails && ($cached = $this->getFromCache($id)) !== null) { + return $cached; + } + $response = $this->httpClient->request('GET', self::DETAIL_API_URL, [ 'query' => [ 'asin' => $id, diff --git a/src/Settings/InfoProviderSystem/CanopySettings.php b/src/Settings/InfoProviderSystem/CanopySettings.php index bc40bff1..f6a0494b 100644 --- a/src/Settings/InfoProviderSystem/CanopySettings.php +++ b/src/Settings/InfoProviderSystem/CanopySettings.php @@ -43,4 +43,9 @@ class CanopySettings public ?string $apiKey = null; public string $domain = "de"; + + /** + * @var bool If true, the provider will always retrieve details for a part, resulting in an additional API request + */ + public bool $alwaysGetDetails = false; } From 0b9b2cbf58f79f2ec4c978567ccce5de33a0fe38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 22 Feb 2026 23:16:39 +0100 Subject: [PATCH 160/172] Allow to read amazon labels for part retrieval and creation --- src/Form/LabelSystem/ScanDialogType.php | 7 +-- src/Repository/PartRepository.php | 24 ++++++++++ .../AmazonBarcodeScanResult.php | 46 +++++++++++++++++++ .../BarcodeScanner/BarcodeScanHelper.php | 9 ++++ .../BarcodeScanResultHandler.php | 14 +++++- .../BarcodeScanner/BarcodeSourceType.php | 6 ++- translations/messages.en.xlf | 6 +++ 7 files changed, 103 insertions(+), 9 deletions(-) create mode 100644 src/Services/LabelSystem/BarcodeScanner/AmazonBarcodeScanResult.php diff --git a/src/Form/LabelSystem/ScanDialogType.php b/src/Form/LabelSystem/ScanDialogType.php index d9c1de0e..cd1440c6 100644 --- a/src/Form/LabelSystem/ScanDialogType.php +++ b/src/Form/LabelSystem/ScanDialogType.php @@ -72,12 +72,7 @@ class ScanDialogType extends AbstractType 'placeholder' => 'scan_dialog.mode.auto', 'choice_label' => fn (?BarcodeSourceType $enum) => match($enum) { null => 'scan_dialog.mode.auto', - BarcodeSourceType::INTERNAL => 'scan_dialog.mode.internal', - BarcodeSourceType::IPN => 'scan_dialog.mode.ipn', - BarcodeSourceType::USER_DEFINED => 'scan_dialog.mode.user', - BarcodeSourceType::EIGP114 => 'scan_dialog.mode.eigp', - BarcodeSourceType::GTIN => 'scan_dialog.mode.gtin', - BarcodeSourceType::LCSC => 'scan_dialog.mode.lcsc', + default => 'scan_dialog.mode.' . $enum->value, }, ]); diff --git a/src/Repository/PartRepository.php b/src/Repository/PartRepository.php index 49342301..d5ccd3a6 100644 --- a/src/Repository/PartRepository.php +++ b/src/Repository/PartRepository.php @@ -454,4 +454,28 @@ class PartRepository extends NamedDBElementRepository return $qb->getQuery()->getOneOrNullResult(); } + /** + * Finds a part based on the provided SPN (Supplier Part Number), with an option for case sensitivity. + * If no part is found with the given SPN, null is returned. + * @param string $spn + * @param bool $caseInsensitive + * @return Part|null + */ + public function getPartBySPN(string $spn, bool $caseInsensitive = true): ?Part + { + $qb = $this->createQueryBuilder('part'); + $qb->select('part'); + + $qb->leftJoin('part.orderdetails', 'o'); + + if ($caseInsensitive) { + $qb->where("LOWER(o.supplierpartnr) = LOWER(:spn)"); + } else { + $qb->where("o.supplierpartnr = :spn"); + } + + $qb->setParameter('spn', $spn); + + return $qb->getQuery()->getOneOrNullResult(); + } } diff --git a/src/Services/LabelSystem/BarcodeScanner/AmazonBarcodeScanResult.php b/src/Services/LabelSystem/BarcodeScanner/AmazonBarcodeScanResult.php new file mode 100644 index 00000000..fb756043 --- /dev/null +++ b/src/Services/LabelSystem/BarcodeScanner/AmazonBarcodeScanResult.php @@ -0,0 +1,46 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Services\LabelSystem\BarcodeScanner; + +final readonly class AmazonBarcodeScanResult implements BarcodeScanResultInterface +{ + public function __construct(public string $asin) { + if (!self::isAmazonBarcode($asin)) { + throw new \InvalidArgumentException("The provided input '$asin' is not a valid Amazon barcode (ASIN)"); + } + } + + public static function isAmazonBarcode(string $input): bool + { + //Amazon barcodes are 10 alphanumeric characters + return preg_match('/^[A-Z0-9]{10}$/i', $input) === 1; + } + + public function getDecodedForInfoMode(): array + { + return [ + 'ASIN' => $this->asin, + ]; + } +} diff --git a/src/Services/LabelSystem/BarcodeScanner/BarcodeScanHelper.php b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanHelper.php index b2363ec8..0bee33a1 100644 --- a/src/Services/LabelSystem/BarcodeScanner/BarcodeScanHelper.php +++ b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanHelper.php @@ -101,6 +101,10 @@ final class BarcodeScanHelper return $this->parseLCSCBarcode($input); } + if ($type === BarcodeSourceType::AMAZON) { + return new AmazonBarcodeScanResult($input); + } + //Null means auto and we try the different formats $result = $this->parseInternalBarcode($input); @@ -135,6 +139,11 @@ final class BarcodeScanHelper return $this->parseLCSCBarcode($input); } + //Try amazon barcode + if (AmazonBarcodeScanResult::isAmazonBarcode($input)) { + return new AmazonBarcodeScanResult($input); + } + throw new InvalidArgumentException('Unknown barcode'); } diff --git a/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandler.php b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandler.php index 372e976e..e24c7077 100644 --- a/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandler.php +++ b/src/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandler.php @@ -144,7 +144,12 @@ final readonly class BarcodeScanResultHandler return $this->resolvePartFromLCSC($barcodeScan); } - throw new \InvalidArgumentException("Barcode does not support resolving to a local entity: ".get_class($barcodeScan)); + if ($barcodeScan instanceof AmazonBarcodeScanResult) { + return $this->em->getRepository(Part::class)->getPartByProviderInfo($barcodeScan->asin) + ?? $this->em->getRepository(Part::class)->getPartBySPN($barcodeScan->asin); + } + + return null; } /** @@ -258,6 +263,13 @@ final readonly class BarcodeScanResultHandler return $this->getCreationInfoForEIGP114($scanResult); } + if ($scanResult instanceof AmazonBarcodeScanResult) { + return [ + 'providerKey' => 'canopy', + 'providerId' => $scanResult->asin, + ]; + } + return null; } diff --git a/src/Services/LabelSystem/BarcodeScanner/BarcodeSourceType.php b/src/Services/LabelSystem/BarcodeScanner/BarcodeSourceType.php index 13ab4bf3..fb6eaa77 100644 --- a/src/Services/LabelSystem/BarcodeScanner/BarcodeSourceType.php +++ b/src/Services/LabelSystem/BarcodeScanner/BarcodeSourceType.php @@ -36,12 +36,12 @@ enum BarcodeSourceType: string /** * This barcode is a user defined barcode defined on a part lot */ - case USER_DEFINED = 'user_defined'; + case USER_DEFINED = 'user'; /** * EIGP114 formatted barcodes like used by digikey, mouser, etc. */ - case EIGP114 = 'eigp114'; + case EIGP114 = 'eigp'; /** * GTIN /EAN barcodes, which are used on most products in the world. These are checked with the GTIN field of a part. @@ -50,4 +50,6 @@ enum BarcodeSourceType: string /** For LCSC.com formatted QR codes */ case LCSC = 'lcsc'; + + case AMAZON = 'amazon'; } diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 31bc3884..c8c41b92 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -12563,5 +12563,11 @@ Buerklin-API Authentication server: Create [part] from barcode + + + scan_dialog.mode.amazon + Amazon barcode + + From 300382f6e33a172e26828f138ba6feafab3ce147 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 22 Feb 2026 23:38:56 +0100 Subject: [PATCH 161/172] Make Canopy provider configurable via UI --- .../Providers/CanopyProvider.php | 2 +- .../InfoProviderSystem/CanopySettings.php | 51 +++++++++++++++++-- .../InfoProviderSettings.php | 3 ++ translations/messages.en.xlf | 18 +++++++ 4 files changed, 70 insertions(+), 4 deletions(-) diff --git a/src/Services/InfoProviderSystem/Providers/CanopyProvider.php b/src/Services/InfoProviderSystem/Providers/CanopyProvider.php index f7683084..131db15f 100644 --- a/src/Services/InfoProviderSystem/Providers/CanopyProvider.php +++ b/src/Services/InfoProviderSystem/Providers/CanopyProvider.php @@ -75,7 +75,7 @@ class CanopyProvider implements InfoProviderInterface private function productPageFromASIN(string $asin): string { - return "https://www.amazon.{$this->settings->domain}/dp/{$asin}"; + return "https://www.{$this->settings->getRealDomain()}/dp/{$asin}"; } /** diff --git a/src/Settings/InfoProviderSystem/CanopySettings.php b/src/Settings/InfoProviderSystem/CanopySettings.php index f6a0494b..88e1fcb7 100644 --- a/src/Settings/InfoProviderSystem/CanopySettings.php +++ b/src/Settings/InfoProviderSystem/CanopySettings.php @@ -29,23 +29,68 @@ use Jbtronics\SettingsBundle\Metadata\EnvVarMode; use Jbtronics\SettingsBundle\Settings\Settings; use Jbtronics\SettingsBundle\Settings\SettingsParameter; use Jbtronics\SettingsBundle\Settings\SettingsTrait; +use Symfony\Component\Form\Extension\Core\Type\ChoiceType; +use Symfony\Component\Form\Extension\Core\Type\CountryType; use Symfony\Component\Translation\TranslatableMessage as TM; +use Symfony\Component\Validator\Constraints as Assert; -#[Settings(label: new TM("settings.ips.canopy"), description: new TM("settings.ips.canopy.help"))] +#[Settings(label: new TM("settings.ips.canopy"))] #[SettingsIcon("fa-plug")] class CanopySettings { + public const ALLOWED_DOMAINS = [ + "amazon.de" => "DE", + "amazon.com" => "US", + "amazon.co.uk" => "UK", + "amazon.fr" => "FR", + "amazon.it" => "IT", + "amazon.es" => "ES", + "amazon.ca" => "CA", + "amazon.com.au" => "AU", + "amazon.com.br" => "BR", + "amazon.com.mx" => "MX", + "amazon.in" => "IN", + "amazon.co.jp" => "JP", + "amazon.nl" => "NL", + "amazon.pl" => "PL", + "amazon.sa" => "SA", + "amazon.sg" => "SG", + "amazon.se" => "SE", + "amazon.com.tr" => "TR", + "amazon.ae" => "AE", + "amazon.com.be" => "BE", + "amazon.com.cn" => "CN", + ]; + use SettingsTrait; - #[SettingsParameter(label: new TM("settings.ips.canopy.apiKey"), + #[SettingsParameter(label: new TM("settings.ips.mouser.apiKey"), formType: APIKeyType::class, formOptions: ["help_html" => true], envVar: "PROVIDER_CANOPY_API_KEY", envVarMode: EnvVarMode::OVERWRITE)] public ?string $apiKey = null; - public string $domain = "de"; + /** + * @var string The domain used internally for the API requests. This is not necessarily the same as the domain shown to the user, which is determined by the keys of the ALLOWED_DOMAINS constant + */ + #[SettingsParameter(label: new TM("settings.ips.tme.country"), formType: ChoiceType::class, formOptions: ["choices" => self::ALLOWED_DOMAINS])] + public string $domain = "DE"; /** * @var bool If true, the provider will always retrieve details for a part, resulting in an additional API request */ + #[SettingsParameter(label: new TM("settings.ips.canopy.alwaysGetDetails"), description: new TM("settings.ips.canopy.alwaysGetDetails.help"))] public bool $alwaysGetDetails = false; + + /** + * Returns the real domain (e.g. amazon.de) based on the selected domain (e.g. DE) + * @return string + */ + public function getRealDomain(): string + { + $domain = array_search($this->domain, self::ALLOWED_DOMAINS); + if ($domain === false) { + throw new \InvalidArgumentException("Invalid domain selected"); + } + return $domain; + } } diff --git a/src/Settings/InfoProviderSystem/InfoProviderSettings.php b/src/Settings/InfoProviderSystem/InfoProviderSettings.php index 3e78233f..248fcedc 100644 --- a/src/Settings/InfoProviderSystem/InfoProviderSettings.php +++ b/src/Settings/InfoProviderSystem/InfoProviderSettings.php @@ -72,4 +72,7 @@ class InfoProviderSettings #[EmbeddedSettings] public ?ConradSettings $conrad = null; + + #[EmbeddedSettings] + public ?CanopySettings $canopy = null; } diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index c8c41b92..f422beb3 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -12569,5 +12569,23 @@ Buerklin-API Authentication server: Amazon barcode + + + settings.ips.canopy + Canopy + + + + + settings.ips.canopy.alwaysGetDetails + Always fetch details + + + + + settings.ips.canopy.alwaysGetDetails.help + When selected, more details will be fetched from canopy when creating a part. This causes an additional API request, but gives product bullet points and category info. + + From e283d9ced617b5d7b29ce5eb5574dfe1187b955f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 22 Feb 2026 23:43:36 +0100 Subject: [PATCH 162/172] Added docs for canopy info provider --- docs/usage/information_provider_system.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/usage/information_provider_system.md b/docs/usage/information_provider_system.md index 6cdb5183..1600d76f 100644 --- a/docs/usage/information_provider_system.md +++ b/docs/usage/information_provider_system.md @@ -303,7 +303,17 @@ That method is not officially supported nor encouraged by Part-DB, and might bre The following env configuration options are available: * `PROVIDER_CONRAD_API_KEY`: The API key you got from Conrad (mandatory) -### Custom provider +### Canopy / Amazon +The Canopy provider uses the [Canopy API](https://www.canopyapi.co/) to search for parts and get shopping information from Amazon. +Canopy is a third-party service that provides access to Amazon product data through their API. Their trial plan offers 100 requests per month for free, +and they also offer paid plans with higher limits. To use the Canopy provider, you need to create an account on the Canopy website and obtain an API key. +Once you have the API key, you can configure the Canopy provider in Part-DB using the web UI or environment variables: + +* `PROVIDER_CANOPY_API_KEY`: The API key you got from Canopy (mandatory) + + + +### Custom providers To create a custom provider, you have to create a new class implementing the `InfoProviderInterface` interface. As long as it is a valid Symfony service, it will be automatically loaded and can be used. From a67f106bc60cbf911ceb28ab95ae729a7115cbc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Sun, 22 Feb 2026 23:50:32 +0100 Subject: [PATCH 163/172] Fixed tests --- src/Settings/InfoProviderSystem/CanopySettings.php | 2 +- .../BarcodeScanner/BarcodeScanResultHandlerTest.php | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Settings/InfoProviderSystem/CanopySettings.php b/src/Settings/InfoProviderSystem/CanopySettings.php index 88e1fcb7..0858871b 100644 --- a/src/Settings/InfoProviderSystem/CanopySettings.php +++ b/src/Settings/InfoProviderSystem/CanopySettings.php @@ -87,7 +87,7 @@ class CanopySettings */ public function getRealDomain(): string { - $domain = array_search($this->domain, self::ALLOWED_DOMAINS); + $domain = array_search($this->domain, self::ALLOWED_DOMAINS, true); if ($domain === false) { throw new \InvalidArgumentException("Invalid domain selected"); } diff --git a/tests/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandlerTest.php b/tests/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandlerTest.php index 840e84c0..95313e13 100644 --- a/tests/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandlerTest.php +++ b/tests/Services/LabelSystem/BarcodeScanner/BarcodeScanResultHandlerTest.php @@ -92,7 +92,7 @@ final class BarcodeScanResultHandlerTest extends KernelTestCase $this->assertNull($url); } - public function testGetRedirectURLThrowsOnUnknownScanType(): void + public function testGetRedirectURLReturnsNullOnUnknownScanType(): void { $unknown = new class implements BarcodeScanResultInterface { public function getDecodedForInfoMode(): array @@ -101,8 +101,7 @@ final class BarcodeScanResultHandlerTest extends KernelTestCase } }; - $this->expectException(InvalidArgumentException::class); - $this->service->getInfoURL($unknown); + $this->assertNull($this->service->getInfoURL($unknown)); } public function testEIGPBarcodeResolvePartOrNullReturnsNullWhenNotFound(): void @@ -124,7 +123,7 @@ final class BarcodeScanResultHandlerTest extends KernelTestCase $this->assertNull($this->service->getInfoURL($scan)); } - public function testResolveEntityThrowsOnUnknownScanType(): void + public function testResolveEntityReturnNullOnUnknownScanType(): void { $unknown = new class implements BarcodeScanResultInterface { public function getDecodedForInfoMode(): array @@ -133,8 +132,7 @@ final class BarcodeScanResultHandlerTest extends KernelTestCase } }; - $this->expectException(InvalidArgumentException::class); - $this->service->resolvePart($unknown); + $this->assertNull($this->service->resolvePart($unknown)); } public function testResolveEntity(): void From a7a1026f9b0e746e079818df71d9c678875d0fd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 24 Feb 2026 20:30:29 +0100 Subject: [PATCH 164/172] Throw an exception if canopy does not return a product --- src/Services/InfoProviderSystem/Providers/CanopyProvider.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Services/InfoProviderSystem/Providers/CanopyProvider.php b/src/Services/InfoProviderSystem/Providers/CanopyProvider.php index 131db15f..18864a49 100644 --- a/src/Services/InfoProviderSystem/Providers/CanopyProvider.php +++ b/src/Services/InfoProviderSystem/Providers/CanopyProvider.php @@ -202,6 +202,10 @@ class CanopyProvider implements InfoProviderInterface $product = $response->toArray()['data']['amazonProduct']; + if ($product === null) { + throw new \RuntimeException("Product with ASIN $id not found"); + } + return new PartDetailDTO( provider_key: $this->getProviderKey(), provider_id: $product['asin'], From 63dd344c02e3abeec071973fd223dae679f971dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 24 Feb 2026 22:27:33 +0100 Subject: [PATCH 165/172] Added basic functionality for an HTML sandbox for relative safely rendering HTML attachments Fixed #1150 --- src/Controller/AttachmentFileController.php | 79 +++++++++++++------ .../SystemSettings/AttachmentsSettings.php | 9 ++- templates/attachments/html_sandbox.html.twig | 75 ++++++++++++++++++ translations/messages.en.xlf | 24 ++++++ 4 files changed, 161 insertions(+), 26 deletions(-) create mode 100644 templates/attachments/html_sandbox.html.twig diff --git a/src/Controller/AttachmentFileController.php b/src/Controller/AttachmentFileController.php index 81369e12..c16c1e85 100644 --- a/src/Controller/AttachmentFileController.php +++ b/src/Controller/AttachmentFileController.php @@ -30,6 +30,7 @@ use App\Form\Filters\AttachmentFilterType; use App\Services\Attachments\AttachmentManager; use App\Services\Trees\NodesListBuilder; use App\Settings\BehaviorSettings\TableSettings; +use App\Settings\SystemSettings\AttachmentsSettings; use Omines\DataTablesBundle\DataTableFactory; use RuntimeException; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; @@ -41,27 +42,50 @@ use Symfony\Component\Routing\Attribute\Route; class AttachmentFileController extends AbstractController { + + public function __construct(private readonly AttachmentManager $helper) + { + + } + + #[Route(path: '/attachment/{id}/sandbox', name: 'attachment_html_sandbox')] + public function htmlSandbox(Attachment $attachment, AttachmentsSettings $attachmentsSettings): Response + { + //Check if the sandbox is enabled in the settings, as it can be a security risk if used without proper precautions, so it should be opt-in + if (!$attachmentsSettings->showHTMLAttachments) { + throw $this->createAccessDeniedException('The HTML sandbox for attachments is disabled in the settings, as it can be a security risk if used without proper precautions. Please enable it in the settings if you want to use it.'); + } + + $this->checkPermissions($attachment); + + $file_path = $this->helper->toAbsoluteInternalFilePath($attachment); + + $attachmentContent = file_get_contents($file_path); + + $response = $this->render('attachments/html_sandbox.html.twig', [ + 'attachment' => $attachment, + 'content' => $attachmentContent, + ]); + + //Set an CSP that allows to run inline scripts, styles and images from external ressources, but does not allow any connections or others. + //Also set the sandbox CSP directive with only "allow-script" to run basic scripts + $response->headers->set('Content-Security-Policy', "default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; img-src data:; sandbox allow-scripts;"); + + //Forbid to embed the attachment render page in an iframe to prevent clickjacking, as it is not used anywhere else for now + $response->headers->set('X-Frame-Options', 'DENY'); + + return $response; + } + /** * Download the selected attachment. */ #[Route(path: '/attachment/{id}/download', name: 'attachment_download')] - public function download(Attachment $attachment, AttachmentManager $helper): BinaryFileResponse + public function download(Attachment $attachment): BinaryFileResponse { - $this->denyAccessUnlessGranted('read', $attachment); + $this->checkPermissions($attachment); - if ($attachment->isSecure()) { - $this->denyAccessUnlessGranted('show_private', $attachment); - } - - if (!$attachment->hasInternal()) { - throw $this->createNotFoundException('The file for this attachment is external and not stored locally!'); - } - - if (!$helper->isInternalFileExisting($attachment)) { - throw $this->createNotFoundException('The file associated with the attachment is not existing!'); - } - - $file_path = $helper->toAbsoluteInternalFilePath($attachment); + $file_path = $this->helper->toAbsoluteInternalFilePath($attachment); $response = new BinaryFileResponse($file_path); //Set header content disposition, so that the file will be downloaded @@ -74,7 +98,20 @@ class AttachmentFileController extends AbstractController * View the attachment. */ #[Route(path: '/attachment/{id}/view', name: 'attachment_view')] - public function view(Attachment $attachment, AttachmentManager $helper): BinaryFileResponse + public function view(Attachment $attachment): BinaryFileResponse + { + $this->checkPermissions($attachment); + + $file_path = $this->helper->toAbsoluteInternalFilePath($attachment); + $response = new BinaryFileResponse($file_path); + + //Set header content disposition, so that the file will be downloaded + $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_INLINE); + + return $response; + } + + private function checkPermissions(Attachment $attachment): void { $this->denyAccessUnlessGranted('read', $attachment); @@ -86,17 +123,9 @@ class AttachmentFileController extends AbstractController throw $this->createNotFoundException('The file for this attachment is external and not stored locally!'); } - if (!$helper->isInternalFileExisting($attachment)) { + if (!$this->helper->isInternalFileExisting($attachment)) { throw $this->createNotFoundException('The file associated with the attachment is not existing!'); } - - $file_path = $helper->toAbsoluteInternalFilePath($attachment); - $response = new BinaryFileResponse($file_path); - - //Set header content disposition, so that the file will be downloaded - $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_INLINE); - - return $response; } #[Route(path: '/attachment/list', name: 'attachment_list')] diff --git a/src/Settings/SystemSettings/AttachmentsSettings.php b/src/Settings/SystemSettings/AttachmentsSettings.php index 6d15c639..2a682b11 100644 --- a/src/Settings/SystemSettings/AttachmentsSettings.php +++ b/src/Settings/SystemSettings/AttachmentsSettings.php @@ -58,4 +58,11 @@ class AttachmentsSettings envVar: "bool:ATTACHMENT_DOWNLOAD_BY_DEFAULT", envVarMode: EnvVarMode::OVERWRITE )] public bool $downloadByDefault = false; -} \ No newline at end of file + + #[SettingsParameter( + label: new TM("settings.system.attachments.showHTMLAttachments"), + description: new TM("settings.system.attachments.showHTMLAttachments.help"), + envVar: "bool:ATTACHMENT_SHOW_HTML", envVarMode: EnvVarMode::OVERWRITE + )] + public bool $showHTMLAttachments = false; +} diff --git a/templates/attachments/html_sandbox.html.twig b/templates/attachments/html_sandbox.html.twig new file mode 100644 index 00000000..6706da7d --- /dev/null +++ b/templates/attachments/html_sandbox.html.twig @@ -0,0 +1,75 @@ + + + + + + {# The content block is already escaped. so we must not escape it again. #} + + + + + +{% block body %} + {# We have a fullscreen iframe, with an warning on top #} + +
    + +
    +
    + ⚠️ {% trans%}attachment.sandbox.warning{% endtrans %} + +
    + + {% trans%}[Attachment]{% endtrans%}: {{ attachment.name }} / {{ attachment.filename ?? "" }} ({% trans%}id.label{% endtrans %}: {{ attachment.id }}) + {% trans%}attachment.sandbox.back_to_partdb{% endtrans %} + +
    +
    + + + + +
    + +{% endblock %} + + + diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 356aa89a..e8475aab 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -12593,5 +12593,29 @@ Buerklin-API Authentication server: When selected, more details will be fetched from canopy when creating a part. This causes an additional API request, but gives product bullet points and category info. + + + attachment.sandbox.warning + WARNING: You are viewing an user uploaded attachment. This is untrusted content. Proceed with care. + + + + + attachment.sandbox.back_to_partdb + Back to Part-DB + + + + + settings.system.attachments.showHTMLAttachments + Show uploaded HTML file attachments (sandboxed) + + + + + settings.system.attachments.showHTMLAttachments.help + ⚠️ When enabled, user uploaded HTML attachments can be viewed directly in the browser. Many potential malicious functions are restricted, still this is a potential security risk and should only be enabled, if you trust the users who can upload files. + + From 4a5cc454ce49c4c21db604a13697ed9217092e5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 24 Feb 2026 22:40:23 +0100 Subject: [PATCH 166/172] Show HTML files in the HTML sandbox if enabled --- src/Entity/Attachments/Attachment.php | 16 +++++++++++ .../Attachments/AttachmentURLGenerator.php | 7 ++++- tests/Entity/Attachments/AttachmentTest.php | 28 +++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/src/Entity/Attachments/Attachment.php b/src/Entity/Attachments/Attachment.php index d4b15ac7..e0d1bd9d 100644 --- a/src/Entity/Attachments/Attachment.php +++ b/src/Entity/Attachments/Attachment.php @@ -296,6 +296,22 @@ abstract class Attachment extends AbstractNamedDBElement return in_array(strtolower($extension), static::MODEL_EXTS, true); } + /** + * Returns true if this is a locally stored HTML file, which can be shown by the sandbox viewer. + * This is the case if we have an internal path with a html extension. + * @return bool + */ + public function isLocalHTMLFile(): bool + { + if($this->hasInternal()){ + + $extension = pathinfo($this->getFilename(), PATHINFO_EXTENSION); + + return in_array(strtolower($extension), ['html', 'htm'], true); + } + return false; + } + /** * Checks if this attachment has a path to an external file * diff --git a/src/Services/Attachments/AttachmentURLGenerator.php b/src/Services/Attachments/AttachmentURLGenerator.php index e505408f..89856650 100644 --- a/src/Services/Attachments/AttachmentURLGenerator.php +++ b/src/Services/Attachments/AttachmentURLGenerator.php @@ -22,6 +22,7 @@ declare(strict_types=1); namespace App\Services\Attachments; +use App\Settings\SystemSettings\AttachmentsSettings; use Imagine\Exception\RuntimeException; use App\Entity\Attachments\Attachment; use InvalidArgumentException; @@ -40,7 +41,7 @@ class AttachmentURLGenerator public function __construct(protected Packages $assets, protected AttachmentPathResolver $pathResolver, protected UrlGeneratorInterface $urlGenerator, protected AttachmentManager $attachmentHelper, - protected CacheManager $thumbnailManager, protected LoggerInterface $logger) + protected CacheManager $thumbnailManager, protected LoggerInterface $logger, private readonly AttachmentsSettings $attachmentsSettings) { //Determine a normalized path to the public folder (assets are relative to this folder) $this->public_path = $this->pathResolver->parameterToAbsolutePath('public'); @@ -99,6 +100,10 @@ class AttachmentURLGenerator return null; } + if ($this->attachmentsSettings->showHTMLAttachments && $attachment->isLocalHTMLFile()) { + return $this->urlGenerator->generate('attachment_html_sandbox', ['id' => $attachment->getID()]); + } + $asset_path = $this->absolutePathToAssetPath($absolute_path); //If path is not relative to public path or marked as secure, serve it via controller if (null === $asset_path || $attachment->isSecure()) { diff --git a/tests/Entity/Attachments/AttachmentTest.php b/tests/Entity/Attachments/AttachmentTest.php index ca55424c..9e912b97 100644 --- a/tests/Entity/Attachments/AttachmentTest.php +++ b/tests/Entity/Attachments/AttachmentTest.php @@ -279,4 +279,32 @@ final class AttachmentTest extends TestCase $reflection_property->setAccessible(true); $reflection_property->setValue($object, $value); } + + public function testIsLocalHTMLFile(): void + { + $attachment = new PartAttachment(); + + $attachment->setExternalPath('https://google.de'); + $this->assertFalse($attachment->isLocalHTMLFile()); + + $attachment->setExternalPath('https://google.de/test.html'); + $this->assertFalse($attachment->isLocalHTMLFile()); + + $attachment->setInternalPath('%MEDIA%/test.html'); + $this->assertTrue($attachment->isLocalHTMLFile()); + + $attachment->setInternalPath('%MEDIA%/test.htm'); + $this->assertTrue($attachment->isLocalHTMLFile()); + + $attachment->setInternalPath('%MEDIA%/test.txt'); + $this->assertFalse($attachment->isLocalHTMLFile()); + + //It works however, if the file is stored as txt, and the internal filename ends with .html + $attachment->setInternalPath('%MEDIA%/test.txt'); + $this->setProtectedProperty($attachment, 'original_filename', 'test.html'); + $this->assertTrue($attachment->isLocalHTMLFile()); + + $this->setProtectedProperty($attachment, 'original_filename', 'test.htm'); + $this->assertTrue($attachment->isLocalHTMLFile()); + } } From a1fd3199d67b38deb13d9f532ba36219a74d7d22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 24 Feb 2026 22:48:18 +0100 Subject: [PATCH 167/172] Render HTML as plain text via attachment_view controller This makes it consistent with the public paths and ensures all HTML is only rendered in our sandbox --- src/Controller/AttachmentFileController.php | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/Controller/AttachmentFileController.php b/src/Controller/AttachmentFileController.php index c16c1e85..278bcf6e 100644 --- a/src/Controller/AttachmentFileController.php +++ b/src/Controller/AttachmentFileController.php @@ -88,8 +88,10 @@ class AttachmentFileController extends AbstractController $file_path = $this->helper->toAbsoluteInternalFilePath($attachment); $response = new BinaryFileResponse($file_path); + $response = $this->forbidHTMLContentType($response); + //Set header content disposition, so that the file will be downloaded - $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT); + $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $attachment->getFilename()); return $response; } @@ -105,8 +107,23 @@ class AttachmentFileController extends AbstractController $file_path = $this->helper->toAbsoluteInternalFilePath($attachment); $response = new BinaryFileResponse($file_path); + $response = $this->forbidHTMLContentType($response); + //Set header content disposition, so that the file will be downloaded - $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_INLINE); + $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_INLINE, $attachment->getFilename()); + + return $response; + } + + private function forbidHTMLContentType(BinaryFileResponse $response): BinaryFileResponse + { + $mimeType = $response->getFile()->getMimeType(); + + if ($mimeType === 'text/html') { + $mimeType = 'text/plain'; + } + + $response->headers->set('Content-Type', $mimeType); return $response; } From 628f794b3708f85db68e38fd61d746ee88d9ebca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=B6hmer?= Date: Tue, 24 Feb 2026 22:53:50 +0100 Subject: [PATCH 168/172] Improved HTML sandbox page --- templates/attachments/html_sandbox.html.twig | 7 +++++-- translations/messages.en.xlf | 12 ++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/templates/attachments/html_sandbox.html.twig b/templates/attachments/html_sandbox.html.twig index 6706da7d..11367bdf 100644 --- a/templates/attachments/html_sandbox.html.twig +++ b/templates/attachments/html_sandbox.html.twig @@ -4,8 +4,10 @@ + + {# The content block is already escaped. so we must not escape it again. #} - + {% trans %}attachment.sandbox.title{% endtrans %}: {{ attachment.filename }}