├── .editorconfig
├── .gitattributes
├── .github
├── ISSUE_TEMPLATE
│ ├── Bug-Report.yml
│ ├── Feature-Request.yml
│ ├── Improvement.yml
│ └── config.yml
├── ci
│ ├── files
│ │ └── .env
│ └── scripts
│ │ └── setup-pimcore-environment.sh
└── workflows
│ ├── cla-check.yaml
│ ├── docs.yaml
│ ├── php-style.yml
│ ├── poeditor-export.yml
│ ├── stale.yml
│ └── static-analysis.yml
├── .gitignore
├── .php-cs-fixer.cache
├── .php-cs-fixer.dist.php
├── LICENSE.md
├── README.md
├── SECURITY.md
├── composer.json
├── doc
├── 00_Installation.md
├── 01_Extending_Filters.md
├── 02_Exclude_Fields.md
├── 03_Upgrade_Notes.md
├── 04_Opensearch.md
├── 05_Elasticsearch.md
└── img
│ └── screen.jpg
├── phpstan-baseline.neon
├── phpstan-bootstrap.php
├── phpstan.neon
└── src
├── AdvancedObjectSearchBundle.php
├── Command
├── ProcessUpdateQueueCommand.php
├── ReindexCommand.php
├── ServiceAwareCommand.php
└── UpdateMappingCommand.php
├── Controller
└── AdminController.php
├── DependencyInjection
├── AdvancedObjectSearchExtension.php
└── Configuration.php
├── Enum
└── ClientType.php
├── Event
├── AbstractFilterListener.php
├── AdvancedObjectSearchEvents.php
├── FilterListingEvent.php
├── FilterSearchEvent.php
├── SavedSearchEvent.php
└── SavedSearchEvents.php
├── EventListener
└── IndexUpdateListener.php
├── Factory
└── OpenSearch
│ └── LegacyServiceFactory.php
├── Filter
├── FieldDefinitionAdapter
│ ├── AdvancedManyToManyObjectRelation.php
│ ├── AdvancedManyToManyRelation.php
│ ├── CalculatedValue.php
│ ├── Checkbox.php
│ ├── Country.php
│ ├── Countrymultiselect.php
│ ├── Date.php
│ ├── Datetime.php
│ ├── DefaultAdapter.php
│ ├── FieldDefinitionAdapterInterface.php
│ ├── Fieldcollections.php
│ ├── Language.php
│ ├── Languagemultiselect.php
│ ├── Localizedfields.php
│ ├── ManyToManyObjectRelation.php
│ ├── ManyToManyRelation.php
│ ├── ManyToOneRelation.php
│ ├── Multiselect.php
│ ├── Numeric.php
│ ├── Objectbricks.php
│ ├── QuantityValue.php
│ ├── Select.php
│ ├── Table.php
│ ├── Time.php
│ └── User.php
├── FieldSelectionInformation.php
└── FilterEntry.php
├── Installer.php
├── Maintenance
└── UpdateQueueProcessor.php
├── Messenger
├── QueueHandler.php
└── QueueMessage.php
├── Migrations
├── PimcoreX
│ ├── Version20210305134111.php
│ └── Version20221130130306.php
├── Version20191218105114.php
└── Version20210305134111.php
├── Model
├── SavedSearch.php
└── SavedSearch
│ ├── Dao.php
│ ├── Listing.php
│ └── Listing
│ └── Dao.php
├── Resources
├── config
│ ├── doctrine_migrations.yml
│ ├── pimcore
│ │ ├── config.yml
│ │ └── routing.yml
│ └── services.yml
├── public
│ ├── css
│ │ └── admin.css
│ └── js
│ │ ├── events.js
│ │ ├── helper.js
│ │ ├── portlet
│ │ └── advancedObjectSearch.js
│ │ ├── searchConfig
│ │ ├── conditionAbstractPanel.js
│ │ ├── conditionEntryPanel.js
│ │ ├── conditionGroupPanel.js
│ │ ├── conditionPanel.js
│ │ ├── conditionPanelContainerBuilder.js
│ │ ├── fieldConditionPanel
│ │ │ ├── advancedManyToManyObjectRelation.js
│ │ │ ├── advancedManyToManyRelation.js
│ │ │ ├── checkbox.js
│ │ │ ├── country.js
│ │ │ ├── countrymultiselect.js
│ │ │ ├── date.js
│ │ │ ├── datetime.js
│ │ │ ├── default.js
│ │ │ ├── fieldcollections.js
│ │ │ ├── language.js
│ │ │ ├── languagemultiselect.js
│ │ │ ├── localizedfields.js
│ │ │ ├── manyToManyObjectRelation.js
│ │ │ ├── manyToManyOne.js
│ │ │ ├── manyToManyRelation.js
│ │ │ ├── multiselect.js
│ │ │ ├── numeric.js
│ │ │ ├── objectbricks.js
│ │ │ ├── quantityValue.js
│ │ │ ├── select.js
│ │ │ ├── table.js
│ │ │ ├── time.js
│ │ │ └── user.js
│ │ ├── resultAbstractPanel.js
│ │ ├── resultExtension.js
│ │ └── resultPanel.js
│ │ ├── searchConfigPanel.js
│ │ ├── selector.js
│ │ └── startup.js
└── translations
│ ├── admin.ca.yml
│ ├── admin.cs.yml
│ ├── admin.de.yml
│ ├── admin.en.yml
│ ├── admin.es.yml
│ ├── admin.fr.yml
│ ├── admin.hu.yml
│ ├── admin.it.yml
│ ├── admin.nl.yml
│ ├── admin.pl.yml
│ ├── admin.pt_br.yml
│ ├── admin.ro.yml
│ ├── admin.sk.yml
│ ├── admin.sv.yml
│ ├── admin.th.yml
│ └── admin.zh_Hans.yml
├── Service.php
└── Tools
└── IndexConfigService.php
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | indent_style = space
7 | indent_size = 4
8 |
9 | [*.php]
10 | insert_final_newline = true
11 | trim_trailing_whitespace = true
12 |
13 | [*.md]
14 | trim_trailing_whitespace = false
15 |
16 | [*.yml]
17 | indent_size = 4
18 |
19 | [composer.json]
20 | indent_style = space
21 | indent_size = 2
22 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 |
2 | * -text
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/Bug-Report.yml:
--------------------------------------------------------------------------------
1 | name: Bug Report
2 | description: File a bug report
3 | title: "[Bug]: "
4 | labels: [Bug]
5 | body:
6 | - type: markdown
7 | attributes:
8 | value: |
9 | ## Important notice
10 | As an open core project we love to work together with our community to improve and develop our products.
11 | It's also important for us to make clear that **we're not working for you or your company**,
12 | but we enjoy to work together to solve existing bugs.
13 | So we would love to see PRs with bugfixes, discuss them and we are happy to merge them when they are ready.
14 | For details see also our [contributing guidelines](https://github.com/pimcore/pimcore/blob/10.x/CONTRIBUTING.md).
15 |
16 | Bug reports that do not meet the conditions listed below will be closed/deleted without comment.
17 |
18 | - Bug was verified on the latest supported version.
19 | - This is not a security issue -> see [our security policy](https://github.com/pimcore/pimcore/security/policy) instead.
20 | - You are not able to provide a pull request that fixes the issue.
21 | - There's no existing ticket for the same issue.
22 |
23 | - type: textarea
24 | attributes:
25 | label: Expected behavior
26 | validations:
27 | required: true
28 | - type: textarea
29 | attributes:
30 | label: Actual behavior
31 | validations:
32 | required: true
33 | - type: textarea
34 | attributes:
35 | label: Steps to reproduce
36 | validations:
37 | required: true
38 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/Feature-Request.yml:
--------------------------------------------------------------------------------
1 | name: Feature Request
2 | description: Request or propose a new feature
3 | title: "[Feature]: "
4 | labels: ["New Feature"]
5 | body:
6 | - type: markdown
7 | attributes:
8 | value: |
9 | ## Important notice
10 | As an open core project we love to work together with our community to improve and develop our products.
11 | It's also important for us to make clear that **we're not working for you or your company**,
12 | but we enjoy to work together to improve or add new features to the product.
13 | So we are always ready to discuss features and improvements with our community.
14 | Especially for bigger topics, please [start a discussion](https://github.com/pimcore/pimcore/discussions) first to aviod unnecessary efforts.
15 |
16 | As soon as a topic is more specific, feel free to create issues for it or even better provide a corresponding PR as we love to
17 | review and merge contributions.
18 |
19 | Feature requests that do not meet the conditions listed below will be closed/deleted without comment.
20 | - There's no existing ticket for the same topic
21 | - This is already a specific ready-to-work-on feature request
22 |
23 | - type: textarea
24 | attributes:
25 | label: Feature description
26 | validations:
27 | required: true
28 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/Improvement.yml:
--------------------------------------------------------------------------------
1 | name: Improvement
2 | description: Request or propose an improvement
3 | title: "[Improvement]: "
4 | labels: ["Improvement"]
5 | body:
6 | - type: markdown
7 | attributes:
8 | value: |
9 | ## Important notice
10 | As an open core project we love to work together with our community to improve and develop our products.
11 | It's also important for us to make clear that **we're not working for you or your company**,
12 | but we enjoy to work together to improve or add new features to the product.
13 | So we are always ready to discuss features and improvements with our community.
14 | Especially for bigger topics, please [start a discussion](https://github.com/pimcore/pimcore/discussions) first to aviod unnecessary efforts.
15 |
16 | As soon as a topic is more specific, feel free to create issues for it or even better provide a corresponding PR as we love to
17 | review and merge contributions.
18 |
19 | Feature requests that do not meet the conditions listed below will be closed/deleted without comment.
20 | - There's no existing ticket for the same topic
21 | - This is already a specific ready-to-work-on feature request
22 |
23 | - type: textarea
24 | attributes:
25 | label: Improvement description
26 | validations:
27 | required: true
28 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: We are hiring!
4 | url: https://pimcore.com/en/careers?utm_source=github&utm_medium=issue-template-advanced-object-search&utm_campaign=careers
5 | about: Enjoy working with Pimcore? Join us on our mission!
6 | - name: Community Support
7 | url: https://github.com/pimcore/pimcore/discussions
8 | about: Please ask and answer questions here.
9 |
--------------------------------------------------------------------------------
/.github/ci/files/.env:
--------------------------------------------------------------------------------
1 | APP_ENV=test
2 |
--------------------------------------------------------------------------------
/.github/ci/scripts/setup-pimcore-environment.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -eu -o xtrace
4 |
5 | #cp -rv .github/ci/files/var .
6 | cp .github/ci/files/.env .
7 |
--------------------------------------------------------------------------------
/.github/workflows/cla-check.yaml:
--------------------------------------------------------------------------------
1 | name: CLA check
2 |
3 | on:
4 | issue_comment:
5 | types: [created]
6 | pull_request_target:
7 | types: [opened, closed, synchronize]
8 |
9 | jobs:
10 | cla-workflow:
11 | uses: pimcore/workflows-collection-public/.github/workflows/reusable-cla-check.yaml@v1.3.0
12 | if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
13 | secrets:
14 | CLA_ACTION_ACCESS_TOKEN: ${{ secrets.CLA_ACTION_ACCESS_TOKEN }}
--------------------------------------------------------------------------------
/.github/workflows/docs.yaml:
--------------------------------------------------------------------------------
1 |
2 | name: "Documentation"
3 |
4 | on:
5 | pull_request_target:
6 | branches:
7 | - "[0-9]+.[0-9]+"
8 | - "[0-9]+.x"
9 | paths:
10 | - 'doc/**'
11 | - '.github/workflows/docs.yaml'
12 | - 'README.md'
13 | push:
14 | branches:
15 | - "[0-9]+.[0-9]+"
16 | - "[0-9]+.x"
17 | - "*_actions"
18 | paths:
19 | - 'doc/**'
20 | - '.github/workflows/docs.yaml'
21 | - 'README.md'
22 |
23 | permissions:
24 | contents: read
25 |
26 | jobs:
27 | docs:
28 | name: "Generate docs Pimcore Docs Generator"
29 | runs-on: "ubuntu-latest"
30 | steps:
31 | - name: "Checkout code"
32 | uses: "actions/checkout@v3"
33 | with:
34 | ref: ${{ github.event.pull_request.head.sha }}
35 |
36 | - name: "Checkout Docs Generator"
37 | uses: "actions/checkout@v3"
38 | with:
39 | repository: "pimcore/docs-generator"
40 | ref: "main"
41 | path: "./docs-generator"
42 | token: ${{ secrets.DOCS_GENERATOR_ACCESS_TOKEN }}
43 |
44 | - name: "Install Node"
45 | uses: actions/setup-node@v3
46 | with:
47 | node-version: 19.x
48 | registry-url: 'https://registry.npmjs.org'
49 |
50 | - name: Prepare Docs
51 | working-directory: "./docs-generator"
52 | run: |
53 | mkdir docs
54 | # copy docs to working directory
55 | cp -r ../doc ./docs/
56 |
57 | # copy readme to working directory
58 | cp -r ../README.md ./docs/
59 |
60 | # copy index page
61 | cp bin/resources/00_index_empty.md ./docs/00_index.md
62 |
63 | # use special docusaurus config (to exclude search plugin) and check for broken links
64 | mv docusaurus.config.js.repos-tests docusaurus.config.js
65 |
66 | - name: Build Docs
67 | working-directory: "./docs-generator"
68 | run: |
69 | npm install
70 | npm run build
71 |
72 |
--------------------------------------------------------------------------------
/.github/workflows/php-style.yml:
--------------------------------------------------------------------------------
1 | name: "PHP-CS-Fixer"
2 |
3 | on:
4 | push:
5 | branches:
6 | - "[0-9]+.[0-9]+"
7 | - "[0-9]+.x"
8 |
9 | permissions:
10 | contents: write
11 |
12 | jobs:
13 | php-style:
14 | uses: pimcore/workflows-collection-public/.github/workflows/reusable-php-cs-fixer.yaml@main
15 | if: github.repository_owner == 'pimcore'
16 | secrets:
17 | PHP_CS_FIXER_GITHUB_TOKEN: ${{ secrets.PHP_CS_FIXER_GITHUB_TOKEN }}
18 | with:
19 | head_ref: ${{ github.event.pull_request.head.ref }}
20 | repository: ${{ github.event.pull_request.head.repo.full_name }}
21 | config_file: .php-cs-fixer.dist.php
22 |
--------------------------------------------------------------------------------
/.github/workflows/poeditor-export.yml:
--------------------------------------------------------------------------------
1 | name: "Trigger POEditor Translations Export"
2 |
3 | on:
4 | workflow_dispatch:
5 | push:
6 | branches:
7 | - "[0-9]+.x"
8 | paths:
9 | - 'src/Resources/translations/admin.en.yml'
10 |
11 | permissions:
12 | contents: read
13 |
14 | jobs:
15 | poeditor:
16 | runs-on: ubuntu-latest
17 | steps:
18 | - name: Trigger workflow in pimcore/poeditor-export-action
19 | env:
20 | GH_TOKEN: ${{ secrets.POEDITOR_ACTION_TRIGGER_TOKEN }}
21 | run: |
22 | gh workflow run -R pimcore/poeditor-export-action poeditor-export.yaml
23 |
--------------------------------------------------------------------------------
/.github/workflows/stale.yml:
--------------------------------------------------------------------------------
1 | name: Handle stale issues
2 |
3 | on:
4 | workflow_dispatch:
5 | schedule:
6 | - cron: '37 7 * * *'
7 |
8 | jobs:
9 | call-stale-workflow:
10 | uses: pimcore/workflows-collection-public/.github/workflows/stale.yml@v1.1.0
11 |
--------------------------------------------------------------------------------
/.github/workflows/static-analysis.yml:
--------------------------------------------------------------------------------
1 | name: "Static analysis centralised"
2 |
3 | on:
4 | schedule:
5 | - cron: '0 3 * * 1,3,5'
6 | workflow_dispatch:
7 | push:
8 | branches:
9 | - "[0-9]+.[0-9]+"
10 | - "[0-9]+.x"
11 | - "feature-*"
12 | pull_request:
13 | types: [ opened, synchronize, reopened ]
14 |
15 |
16 | env:
17 | PIMCORE_PROJECT_ROOT: ${{ github.workspace }}
18 | PRIVATE_REPO: ${{ github.event.repository.private }}
19 |
20 | jobs:
21 | setup-matrix:
22 | runs-on: ubuntu-latest
23 | outputs:
24 | php_versions: ${{ steps.parse-php-versions.outputs.php_versions }}
25 | matrix: ${{ steps.set-matrix.outputs.matrix }}
26 | private_repo: ${{ env.PRIVATE_REPO }}
27 | steps:
28 | - name: Checkout code
29 | uses: actions/checkout@v4
30 |
31 | - name: Checkout reusable workflow repo
32 | uses: actions/checkout@v4
33 | with:
34 | repository: pimcore/workflows-collection-public
35 | ref: main
36 | path: reusable-workflows
37 |
38 | - name: Parse PHP versions from composer.json
39 | id: parse-php-versions
40 | run: |
41 | if [ -f composer.json ]; then
42 | php_versions=$(jq -r '.require.php' composer.json | grep -oP '\d+\.\d+' | tr '\n' ',' | sed 's/,$//')
43 | if [ -z "$php_versions" ]; then
44 | echo "No PHP versions found in composer.json"
45 | echo "Setting default PHP value"
46 | echo "php_versions=default" >> $GITHUB_OUTPUT
47 | else
48 | echo "php_versions=$php_versions" >> $GITHUB_OUTPUT
49 | echo "#### php versions #### : $php_versions"
50 | fi
51 | else
52 | echo "composer.json not found"
53 | exit 1
54 | fi
55 |
56 | - name: Set up matrix
57 | id: set-matrix
58 | run: |
59 | php_versions="${{ steps.parse-php-versions.outputs.php_versions }}"
60 |
61 | MATRIX_JSON=$(cat reusable-workflows/phpstan-configuration/matrix-config.json)
62 |
63 | IFS=',' read -ra VERSIONS_ARRAY <<< "$php_versions"
64 |
65 | FILTERED_MATRIX_JSON=$(echo $MATRIX_JSON | jq --arg php_versions "$php_versions" '
66 | {
67 | matrix: [
68 | .configs[] |
69 | select(.php_version == $php_versions) |
70 | .matrix[]
71 | ]
72 | }')
73 |
74 | ENCODED_MATRIX_JSON=$(echo $FILTERED_MATRIX_JSON | jq -c .)
75 |
76 | echo "matrix=${ENCODED_MATRIX_JSON}" >> $GITHUB_OUTPUT
77 |
78 | static-analysis:
79 | needs: setup-matrix
80 | strategy:
81 | matrix: ${{ fromJson(needs.setup-matrix.outputs.matrix) }}
82 | uses: pimcore/workflows-collection-public/.github/workflows/reusable-static-analysis-centralized.yaml@main
83 | with:
84 | APP_ENV: test
85 | PIMCORE_TEST: 1
86 | PRIVATE_REPO: ${{ needs.setup-matrix.outputs.private_repo}}
87 | PHP_VERSION: ${{ matrix.matrix.php-version }}
88 | SYMFONY: ${{ matrix.matrix.symfony }}
89 | DEPENDENCIES: ${{ matrix.matrix.dependencies }}
90 | EXPERIMENTAL: ${{ matrix.matrix.experimental }}
91 | PIMCORE_VERSION: ${{ matrix.matrix.pimcore_version }}
92 | COMPOSER_OPTIONS: ${{ matrix.matrix.composer_options }}
93 | secrets:
94 | SSH_PRIVATE_KEY_PIMCORE_DEPLOYMENTS_USER: ${{ secrets.SSH_PRIVATE_KEY_PIMCORE_DEPLOYMENTS_USER }}
95 | COMPOSER_PIMCORE_REPO_PACKAGIST_TOKEN: ${{ secrets.COMPOSER_PIMCORE_REPO_PACKAGIST_TOKEN }}
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | Thumbs.db
3 | *.log
4 |
5 | # symfony default
6 | /.web-server-pid
7 | /app/config/parameters.yml
8 | /build/
9 | /phpunit.xml
10 | /web/bundles/
11 |
12 | # local config
13 | !/app/config/local
14 | /app/config/local/*
15 | !app/config/local/.gitkeep
16 |
17 | # pimcore legacy (remove this for your own development)
18 | !/legacy
19 | /legacy/*
20 | !legacy/.gitkeep
21 | !legacy/bundle
22 |
23 | /var/*
24 | !/var/.gitkeep
25 | !/var/classes/
26 | /var/classes/DataObject
27 |
28 | !/var/config
29 | /var/config/system.php
30 | /var/config/debug-mode.php
31 | /var/config/maintenance.php
32 |
33 | # project specific recommendations
34 | /var/config/tag-manager.php
35 | /var/config/reports.php
36 |
37 |
38 | /web/var/
39 |
40 | # PHP-CS-Fixer
41 | /.php_cs
42 | /.php_cs.cache
43 |
44 | # composer
45 | /composer.lock
46 | !/vendor
47 | /vendor/*
48 | !/vendor/.gitkeep
49 |
50 | # PhpStorm / IDEA
51 | .idea
52 | .idea_modules
53 | # NetBeans
54 | nbproject
55 |
56 | node_modules/
57 |
58 | # codeception (only stage *.dist.yml config files)
59 | /codeception.yml
60 | /pimcore/codeception.yml
61 | /pimcore/tests/*.suite.yml
62 | /pimcore/tests/_output/*
63 | /pimcore/tests/_support/_generated/*
64 |
65 | # keep legacy paths ignored for easier migration
66 | /plugins/
67 | /tools/
68 | /website/
69 |
--------------------------------------------------------------------------------
/.php-cs-fixer.dist.php:
--------------------------------------------------------------------------------
1 | in([__DIR__ . '/src'])
5 |
6 | // do not fix views
7 | ->notName('*.html.php');
8 |
9 | $config = new PhpCsFixer\Config();
10 | $config->setRules([
11 | '@PSR1' => true,
12 | '@PSR2' => true,
13 | 'array_syntax' => ['syntax' => 'short'],
14 |
15 | 'header_comment' => [
16 | 'comment_type' => 'PHPDoc',
17 | 'header' =>
18 | 'This source file is available under the terms of the' . PHP_EOL .
19 | 'Pimcore Open Core License (POCL)' . PHP_EOL .
20 | 'Full copyright and license information is available in' . PHP_EOL .
21 | 'LICENSE.md which is distributed with this source code.' . PHP_EOL .
22 | PHP_EOL .
23 | ' @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)' . PHP_EOL .
24 | ' @license Pimcore Open Core License (POCL)'
25 | ],
26 |
27 | 'blank_line_before_statement' => true,
28 | 'encoding' => true,
29 | 'function_typehint_space' => true,
30 | 'single_line_comment_style' => true,
31 | 'lowercase_cast' => true,
32 | 'magic_constant_casing' => true,
33 | 'method_argument_space' => ['on_multiline' => 'ignore'],
34 | 'native_function_casing' => true,
35 | 'no_blank_lines_after_class_opening' => true,
36 | 'no_blank_lines_after_phpdoc' => true,
37 | 'no_empty_comment' => true,
38 | 'no_empty_phpdoc' => true,
39 | 'no_empty_statement' => true,
40 | 'no_extra_blank_lines' => true,
41 | 'no_leading_import_slash' => true,
42 | 'no_leading_namespace_whitespace' => true,
43 | 'no_short_bool_cast' => true,
44 | 'no_spaces_around_offset' => true,
45 | 'no_unneeded_control_parentheses' => true,
46 | 'no_unused_imports' => true,
47 | 'no_whitespace_before_comma_in_array' => true,
48 | 'no_whitespace_in_blank_line' => true,
49 | 'object_operator_without_whitespace' => true,
50 | 'ordered_imports' => true,
51 | 'phpdoc_indent' => true,
52 | 'phpdoc_no_useless_inheritdoc' => true,
53 | 'phpdoc_scalar' => true,
54 | 'phpdoc_separation' => true,
55 | 'phpdoc_single_line_var_spacing' => true,
56 | 'return_type_declaration' => true,
57 | 'self_accessor' => true,
58 | 'short_scalar_cast' => true,
59 | 'single_blank_line_before_namespace' => true,
60 | 'single_quote' => true,
61 | 'space_after_semicolon' => true,
62 | 'standardize_not_equals' => true,
63 | 'ternary_operator_spaces' => true,
64 | 'whitespace_after_comma_in_array' => true,
65 | ]);
66 |
67 | $config->setFinder($finder);
68 | return $config;
69 |
70 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | ## Reporting a Vulnerability
4 |
5 | If you think that you have found a security issue,
6 | don’t use the bug tracker and don’t publish it publicly.
7 | Instead, all security issues must be reported via a private vulnerability report.
8 |
9 | Please follow the [instructions](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing-information-about-vulnerabilities/privately-reporting-a-security-vulnerability#privately-reporting-a-security-vulnerability) to submit a private report.
10 |
11 |
12 | ## Resolving Process
13 | Every submitted security issue is handled with top priority by following these steps:
14 |
15 | 1. Confirm the vulnerability
16 | 2. Determine the severity
17 | 3. Contact reporter
18 | 4. Work on a patch
19 | 5. Get a CVE identification number (may be done by the reporter or a security service provider)
20 | 6. Patch reviewing
21 | 7. Tagging a new release for supported versions
22 | 8. Publish security announcement
23 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "pimcore/advanced-object-search",
3 | "license": "proprietary",
4 | "type": "pimcore-bundle",
5 | "config": {
6 | "sort-packages": true
7 | },
8 | "prefer-stable": true,
9 | "minimum-stability": "dev",
10 | "require": {
11 | "php": "~8.3.0 || ~8.4.0",
12 | "handcraftedinthealps/elasticsearch-dsl": "^8.0",
13 | "doctrine/dbal": "^3.2 || ^4.0",
14 | "pimcore/opensearch-client": "^2.0",
15 | "pimcore/elasticsearch-client": "^2.0",
16 | "pimcore/pimcore": "^12.0",
17 | "symfony/config": "^6.2",
18 | "symfony/console": "^6.2",
19 | "symfony/dependency-injection": "^6.2",
20 | "symfony/event-dispatcher": "^6.2",
21 | "symfony/http-foundation": "^6.3",
22 | "symfony/http-kernel": "^6.2",
23 | "symfony/messenger": "^6.2",
24 | "symfony/routing": "^6.2"
25 | },
26 | "require-dev": {
27 | "phpstan/phpstan": "^1.12.15",
28 | "ergebnis/phpstan-rules": "^2.0"
29 | },
30 | "autoload": {
31 | "psr-4": {
32 | "AdvancedObjectSearchBundle\\": "src/"
33 | }
34 | },
35 | "extra": {
36 | "pimcore": {
37 | "bundles": [
38 | "AdvancedObjectSearchBundle\\AdvancedObjectSearchBundle"
39 | ]
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/doc/00_Installation.md:
--------------------------------------------------------------------------------
1 | # Installation of Advanced Object Search
2 |
3 | :::info
4 |
5 | This bundle is only supported on Pimcore Core Framework 11.
6 |
7 | This bundle requires minimum version of OpenSearch 2.7. or Elasticsearch 8.0.0.
8 |
9 | :::
10 |
11 | ## Installation
12 |
13 | To install Advanced Object Search Bundle, follow the three steps below:
14 |
15 | 1. Install the required dependencies:
16 | ```bash
17 | composer require pimcore/advanced-object-search
18 | ```
19 |
20 | 2. Make sure the bundle is enabled in the `config/bundles.php` file. The following lines should be added:
21 |
22 | ```php
23 |
24 | return [
25 | // ...
26 | AdvancedObjectSearchBundle\AdvancedObjectSearchBundle::class => ['all' => true],
27 | // ...
28 | ];
29 | ```
30 |
31 | 3. Install the bundle:
32 |
33 | ```bash
34 | bin/console pimcore:bundle:install AdvancedObjectSearchBundle
35 | ```
36 |
37 | ## Required Backend User Permission
38 | To access the Advanced Object Search feature, a user needs to meet at least one of the following criteria:
39 | * Be an `admin` user.
40 | * Have `bundle_advancedsearch_search` permission.
--------------------------------------------------------------------------------
/doc/02_Exclude_Fields.md:
--------------------------------------------------------------------------------
1 | # Exclude Fields
2 |
3 | It is possible to exclude specified fields from the search index by extending the services.yaml:
4 | ```yaml
5 | advanced_object_search:
6 | index_configuration:
7 | exclude_classes:
8 | - CustomerSegment
9 | - CustomerSegmentGroup
10 | exclude_fields:
11 | OfferToolOffer:
12 | - offernumber
13 | OfferToolOfferItem:
14 | - productName
15 | - productNumber
16 | ```
17 | Please Note: Currently is not possible to exclude any specific field under a structured fieldset like `Object Bricks` and `Field collections`, but it is only possible to exclude the field entirely for a specific class.
--------------------------------------------------------------------------------
/doc/03_Upgrade_Notes.md:
--------------------------------------------------------------------------------
1 | # Upgrade Notes
2 |
3 | ### Upgrade to v3.0.0
4 | - Reinstall of Bundle might be necessary - due to switch to MigrationInstaller.
5 | - Update ES mapping and reindex is necessary - run commands `advanced-object-search:update-mapping` and `advanced-object-search:re-index`.
6 |
7 | ### Upgrade to v4.0.0
8 | - Removed BC Layer for old configuration file. Configuration now only in symfony configuration tree.
9 | - Removed deprecated `IFieldDefinitionAdapter`, use `FieldDefinitionAdapterInterface` instead.
10 | - Data in Elasticsearch might be different, so recheck if you are depending directly on the data in Elasticsearch.
11 | - Execute all migrations of the bundle.
12 |
13 | #### Upgrade to Pimcore X
14 | - Update to latest (allowed) bundle version in Pimcore 6.9 and execute all migrations.
15 | - Make sure you are using ElasticSearch 7.
16 | - Then update to Pimcore X.
17 |
18 | ### Upgrade to v5.0.0
19 | - Removed Elasticsearch v6 and v7 support
20 | - Changed elasticsearch client configuration
21 |
22 | ### Upgrade to v6.0.0
23 | - Removed Pimcore 10 support
24 | - Removed Elasticsearch support and added OpenSearch support (Kept ONGR Elasticsearch library as it is compatible with OpenSearch)
25 |
26 | ### Upgrade to v6.1.0
27 | - Added support for Elasticsearch in parallel to Opensearch. Opensearch remains the default search technology. If you are using Elasticsearch, you need to update your symfony configuration as follows:
28 | ```yml
29 | advanced_object_search:
30 | client_name: default
31 | client_type: 'elasticsearch'
32 | ```
33 | - Introduced new service alias `pimcore.advanced_object_search.search-client`. This will replace deprecated alias `pimcore.advanced_object_search.opensearch-client` which will be removed in the next major version.
34 | The new service alias can be used to inject the search client into your services. This search client is an instance of `Pimcore\SearchClient\SearchClientInterface` which is a common interface for OpenSearch and Elasticsearch clients.
35 |
36 | ### Upgrade to v6.2.0
37 | - Added support for `doctrine/dbal` `v4`
38 |
--------------------------------------------------------------------------------
/doc/04_Opensearch.md:
--------------------------------------------------------------------------------
1 | # OpenSearch Client Setup
2 |
3 | :::info
4 |
5 | This bundle requires minimum version of OpenSearch 2.7.
6 |
7 | :::
8 |
9 | Following configuration is required to set up OpenSearch. The OpenSearch client configuration takes place via [Pimcore Opensearch Client](https://github.com/pimcore/opensearch-client) and has two parts:
10 | 1) Configuring an OpenSearch client.
11 | 2) Define the client to be used by Advanced Object Search bundle.
12 |
13 | ```yaml
14 | # Configuring an OpenSearch client
15 | pimcore_open_search_client:
16 | clients:
17 | default:
18 | hosts: ['https://opensearch:9200']
19 | password: 'admin'
20 | username: 'admin'
21 | ssl_verification: false
22 |
23 |
24 | # Define the client to be used by advanced object search
25 | advanced_object_search:
26 | client_name: default # default is default value here, just need to be specified when other client should be used.
27 | ```
28 |
29 | If nothing is configured, a default client connecting to `localhost:9200` is used.
30 |
31 | For the further configuration of the client, please refer to the [Pimcore OpenSearch Client documentation](https://github.com/pimcore/opensearch-client/blob/1.x/doc/02_Configuration.md).
--------------------------------------------------------------------------------
/doc/05_Elasticsearch.md:
--------------------------------------------------------------------------------
1 | # Elasticsearch Client Setup
2 |
3 | :::info
4 |
5 | This bundle requires minimum version of Elasticsearch 8.0.
6 |
7 | :::
8 |
9 | Following configuration is required to set up Elasticsearch. The Elasticsearch client configuration takes place via [Pimcore Elasticsearch Client](https://github.com/pimcore/elasticsearch-client) and has two parts:
10 | 1) Configuring an Elasticsearch client.
11 | 2) Define the client to be used by Advanced Object Search bundle.
12 |
13 | ```yaml
14 | # Configuring an Elasticsearch client
15 | pimcore_elasticsearch_client:
16 | es_clients:
17 | default:
18 | hosts: ['elastic:9200']
19 | username: 'elastic'
20 | password: 'somethingsecret'
21 | logger_channel: 'pimcore.elasicsearch'
22 |
23 | # Define the client to be used by advanced object search
24 | advanced_object_search:
25 | client_name: default # default is default value here, just need to be specified when other client should be used.
26 | client_type: 'elasticsearch' # default is 'openSearch'
27 | ```
28 |
29 | If nothing is configured, a default client connecting to `localhost:9200` is used.
30 |
31 | For the further configuration of the client, please refer to the [Pimcore Elasticsearch Client documentation](https://github.com/pimcore/elasticsearch-client/blob/1.x/README.md).
--------------------------------------------------------------------------------
/doc/img/screen.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/advanced-object-search/78cb4e160b3005181ce6ab2117a6235c367ca826/doc/img/screen.jpg
--------------------------------------------------------------------------------
/phpstan-baseline.neon:
--------------------------------------------------------------------------------
1 | parameters:
2 | ignoreErrors:
3 | -
4 | message: "#^Class Pimcore\\\\Bundle\\\\SimpleBackendSearchBundle\\\\Installer not found.$#"
5 | reportUnmatched: false
6 | count: 1
7 | path: src/Installer.php
8 |
9 | -
10 | message: "#^Instantiated class Pimcore\\\\Bundle\\\\SimpleBackendSearchBundle\\\\PimcoreSimpleBackendSearchBundle not found.$#"
11 | reportUnmatched: false
12 | count: 1
13 | path: src/AdvancedObjectSearchBundle.php
14 |
15 | -
16 | message: "#^Class Pimcore\\\\Bundle\\\\SimpleBackendSearchBundle\\\\PimcoreSimpleBackendSearchBundle not found.$#"
17 | reportUnmatched: false
18 | count: 1
19 | path: src/AdvancedObjectSearchBundle.php
--------------------------------------------------------------------------------
/phpstan-bootstrap.php:
--------------------------------------------------------------------------------
1 | setName('advanced-object-search:process-update-queue')
25 | ->setDescription('processes whole update queue of es search index')
26 | ;
27 | }
28 |
29 | protected function execute(InputInterface $input, OutputInterface $output): int
30 | {
31 | $count = 1;
32 |
33 | while ($count) {
34 | $count = $this->service->processUpdateQueue();
35 | }
36 |
37 | return 0;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/Command/ReindexCommand.php:
--------------------------------------------------------------------------------
1 | indexConfiguration = $indexConfiguration;
29 | parent::__construct();
30 | }
31 |
32 | protected function configure(): void
33 | {
34 | $this
35 | ->setName('advanced-object-search:re-index')
36 | ->setDescription('Reindex all objects of given class. Does not delete index first or resets update queue.')
37 | ->addOption('classes', 'c', InputOption::VALUE_OPTIONAL, 'just update specific classes, use "," (comma) to execute more than one class')
38 | ;
39 | }
40 |
41 | protected function execute(InputInterface $input, OutputInterface $output): int
42 | {
43 | $classes = [];
44 | if ($input->getOption('classes')) {
45 | $classNames = explode(',', $input->getOption('classes'));
46 | foreach ($classNames as $name) {
47 | $classes[] = ClassDefinition::getByName($name);
48 | }
49 | } else {
50 | $classes = new ClassDefinition\Listing();
51 | $classes->load();
52 | $classes = $classes->getClasses();
53 | }
54 |
55 | $classes = array_filter($classes);
56 | $elementsPerLoop = $this->indexConfiguration['elements_per_loop'];
57 |
58 | foreach ($classes as $class) {
59 | $listClassName = '\\Pimcore\\Model\\DataObject\\' . ucfirst($class->getName()) . '\\Listing';
60 | $list = new $listClassName();
61 | $list->setObjectTypes([AbstractObject::OBJECT_TYPE_OBJECT, AbstractObject::OBJECT_TYPE_VARIANT]);
62 | $list->setUnpublished(true);
63 |
64 | $elementsTotal = $list->getTotalCount();
65 |
66 | for ($i = 0; $i < (ceil($elementsTotal / $elementsPerLoop)); $i++) {
67 | $list->setLimit($elementsPerLoop);
68 | $list->setOffset($i * $elementsPerLoop);
69 |
70 | $this->output->writeln('Processing ' . $class->getName() . ': ' . min($list->getOffset() + $elementsPerLoop, $elementsTotal) . '/' . $elementsTotal);
71 |
72 | $objects = $list->load();
73 | foreach ($objects as $object) {
74 | try {
75 | $this->service->doUpdateIndexData($object, true);
76 | } catch (\Exception $e) {
77 | $this->writeError($e->getMessage());
78 | }
79 | }
80 | \Pimcore::collectGarbage();
81 | }
82 | }
83 |
84 | return 0;
85 | }
86 | }
87 |
--------------------------------------------------------------------------------
/src/Command/ServiceAwareCommand.php:
--------------------------------------------------------------------------------
1 | service;
33 | }
34 |
35 | /**
36 | * @param Service $service
37 | */
38 | #[Required]
39 | public function setService(Service $service): void
40 | {
41 | $this->service = $service;
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/src/Command/UpdateMappingCommand.php:
--------------------------------------------------------------------------------
1 | setName('advanced-object-search:update-mapping')
27 | ->setDescription('Deletes and recreates mapping of given classes. Resets update queue for given class.')
28 | ->addOption('classes', 'c', InputOption::VALUE_OPTIONAL, 'just update specific classes, use "," (comma) to execute more than one class')
29 | ;
30 | }
31 |
32 | protected function execute(InputInterface $input, OutputInterface $output): int
33 | {
34 | $classes = [];
35 |
36 | if ($input->getOption('classes')) {
37 | $classNames = explode(',', $input->getOption('classes'));
38 | foreach ($classNames as $name) {
39 | $classes[] = ClassDefinition::getByName($name);
40 | }
41 | } else {
42 | $classes = new ClassDefinition\Listing();
43 | $classes->load();
44 | $classes = $classes->getClasses();
45 | }
46 |
47 | $classes = array_filter($classes);
48 |
49 | foreach ($classes as $class) {
50 | $indexName = $this->service->getIndexName($class->getName());
51 |
52 | $this->output->writeln('Processing ' . $class->getName() . " -> index $indexName");
53 |
54 | $this->service->updateMapping($class);
55 | }
56 |
57 | return 0;
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/src/Enum/ClientType.php:
--------------------------------------------------------------------------------
1 | getCurrentRequest();
36 |
37 | $this->service = $service;
38 | if ($request) {
39 | $this->parameters = new ParameterBag(json_decode($request->request->getString('customFilter'), true) ?: []);
40 | } else {
41 | $this->parameters = new ParameterBag([]);
42 | }
43 | }
44 |
45 | /**
46 | * @return ParameterBag
47 | */
48 | protected function getParameters(): ParameterBag
49 | {
50 | return $this->parameters;
51 | }
52 |
53 | /**
54 | * @return Service
55 | */
56 | protected function getService(): Service
57 | {
58 | return $this->service;
59 | }
60 |
61 | /**
62 | * {@inheritdoc}
63 | */
64 | public static function getSubscribedEvents(): array
65 | {
66 | return [
67 | AdvancedObjectSearchEvents::SEARCH_FILTER => [
68 | ['onIndexSearch', 10],
69 | ],
70 |
71 | AdvancedObjectSearchEvents::LISTING_FILER => [
72 | ['onListing', 10]
73 | ]
74 | ];
75 | }
76 |
77 | public function onIndexSearch(FilterSearchEvent $event): void
78 | {
79 | if ($this->supports()) {
80 | $this->addIndexSearchFilter($event);
81 | }
82 | }
83 |
84 | public function onListing(FilterListingEvent $event): void
85 | {
86 | if ($this->supports()) {
87 | $this->addListingFiler($event);
88 | }
89 | }
90 |
91 | abstract protected function supports(): bool;
92 |
93 | protected function addIndexSearchFilter(FilterSearchEvent $event): void
94 | {
95 | }
96 |
97 | protected function addListingFiler(FilterListingEvent $event): void
98 | {
99 | }
100 | }
101 |
--------------------------------------------------------------------------------
/src/Event/AdvancedObjectSearchEvents.php:
--------------------------------------------------------------------------------
1 | listing = $listing;
29 | }
30 |
31 | /**
32 | * @return Listing
33 | */
34 | public function getListing(): Listing
35 | {
36 | return $this->listing;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/Event/FilterSearchEvent.php:
--------------------------------------------------------------------------------
1 | search = $search;
29 | }
30 |
31 | /**
32 | * @return Search
33 | */
34 | public function getSearch(): Search
35 | {
36 | return $this->search;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/Event/SavedSearchEvent.php:
--------------------------------------------------------------------------------
1 | search = $search;
29 | }
30 |
31 | /**
32 | * @return SavedSearch
33 | */
34 | public function getSavedSearch(): SavedSearch
35 | {
36 | return $this->search;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/Event/SavedSearchEvents.php:
--------------------------------------------------------------------------------
1 | service = $service;
33 | }
34 |
35 | public function updateObject(DataObjectEvent $event)
36 | {
37 | //do not update index when auto save or only saving version
38 | if (
39 | ($event->hasArgument('isAutoSave') && $event->getArgument('isAutoSave')) ||
40 | ($event->hasArgument('saveVersionOnly') && $event->getArgument('saveVersionOnly'))
41 | ) {
42 | return;
43 | }
44 |
45 | $inheritanceBackup = AbstractObject::getGetInheritedValues();
46 | AbstractObject::setGetInheritedValues(true);
47 |
48 | $object = $event->getObject();
49 | if ($object instanceof Concrete) {
50 | $this->service->doUpdateIndexData($object);
51 | }
52 |
53 | AbstractObject::setGetInheritedValues($inheritanceBackup);
54 | }
55 |
56 | public function deleteObject(DataObjectEvent $event)
57 | {
58 | $object = $event->getObject();
59 | if ($object instanceof Concrete) {
60 | $this->service->doDeleteFromIndex($object);
61 | }
62 | }
63 |
64 | public function updateMapping(ClassDefinitionEvent $event)
65 | {
66 | $classDefinition = $event->getClassDefinition();
67 | $this->service->updateMapping($classDefinition);
68 | }
69 |
70 | public function deleteIndex(ClassDefinitionEvent $event)
71 | {
72 | $classDefinition = $event->getClassDefinition();
73 |
74 | try {
75 | $this->service->deleteIndex($classDefinition);
76 | } catch (\Exception $e) {
77 | Logger::err($e->getMessage());
78 | }
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/src/Factory/OpenSearch/LegacyServiceFactory.php:
--------------------------------------------------------------------------------
1 | client instanceof OpenSearchClientInterface => $this->client->getOriginalClient(),
52 | $this->client instanceof ElasticsearchClientInterface => ClientBuilder::create()->build(),
53 | default => null,
54 | };
55 |
56 | if ($openSearchClient === null) {
57 | throw new RuntimeException('No client found for OpenSearch');
58 | }
59 |
60 | $service = new Service(
61 | $this->logger,
62 | $this->userResolver,
63 | $filterLocator,
64 | $this->eventDispatcher,
65 | $this->translator,
66 | $this->indexConfigService,
67 | $openSearchClient
68 | );
69 |
70 | $service->setSearchClientInterface($this->client);
71 |
72 | return $service;
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/src/Filter/FieldDefinitionAdapter/AdvancedManyToManyObjectRelation.php:
--------------------------------------------------------------------------------
1 | fieldDefinition->getName();
29 | $value = $this->loadRawDataFromContainer($object, $name);
30 |
31 | return (string) $value;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/Filter/FieldDefinitionAdapter/Checkbox.php:
--------------------------------------------------------------------------------
1 | considerInheritance) {
38 | return [
39 | $this->fieldDefinition->getName(),
40 | [
41 | 'properties' => [
42 | self::INDEX_MAPPING_PROPERTY_STANDARD => [
43 | 'type' => 'boolean',
44 | ],
45 | self::INDEX_MAPPING_PROPERTY_NOT_INHERITED => [
46 | 'type' => 'boolean',
47 | ]
48 | ]
49 | ]
50 | ];
51 | }
52 |
53 | return [
54 | $this->fieldDefinition->getName(),
55 | [
56 | 'type' => 'boolean',
57 | ]
58 | ];
59 | }
60 |
61 | /**
62 | * @param Concrete $object
63 | * @param bool $ignoreInheritance
64 | */
65 | protected function doGetIndexDataValue($object, $ignoreInheritance = false)
66 | {
67 | $inheritanceBackup = null;
68 | if ($ignoreInheritance) {
69 | $inheritanceBackup = AbstractObject::getGetInheritedValues();
70 | AbstractObject::setGetInheritedValues(false);
71 | }
72 |
73 | $value = $this->loadRawDataFromContainer($object, $this->fieldDefinition->getName());
74 |
75 | if ($ignoreInheritance) {
76 | AbstractObject::setGetInheritedValues($inheritanceBackup);
77 | }
78 |
79 | return (bool) $value;
80 | }
81 |
82 | /**
83 | * @param Concrete $object
84 | *
85 | * @return mixed
86 | */
87 | public function getIndexData($object)
88 | {
89 | $value = $this->doGetIndexDataValue($object, false);
90 |
91 | if ($this->considerInheritance) {
92 | $notInheritedValue = $this->doGetIndexDataValue($object, true);
93 |
94 | $returnValue = [];
95 | $returnValue[self::INDEX_MAPPING_PROPERTY_STANDARD] = $value;
96 | $returnValue[self::INDEX_MAPPING_PROPERTY_NOT_INHERITED] = $notInheritedValue;
97 |
98 | return $returnValue;
99 | } else {
100 | return $value;
101 | }
102 | }
103 |
104 | /**
105 | * @param bool|string $fieldFilter
106 | *
107 | * filter field format as follows:
108 | * - simple boolean like
109 | * true | false --> creates QueryStringQuery
110 | * @param bool $ignoreInheritance
111 | * @param string $path
112 | *
113 | * @return BuilderInterface
114 | */
115 | public function getQueryPart($fieldFilter, $ignoreInheritance = false, $path = '')
116 | {
117 | return new TermQuery($path . $this->fieldDefinition->getName() . $this->buildQueryFieldPostfix($ignoreInheritance), $fieldFilter);
118 | }
119 |
120 | /**
121 | * @inheritdoc
122 | */
123 | public function getFieldSelectionInformation()
124 | {
125 | return [new FieldSelectionInformation(
126 | $this->fieldDefinition->getName(),
127 | $this->fieldDefinition->getTitle(),
128 | $this->fieldType,
129 | [
130 | 'operators' => [BoolQuery::MUST, BoolQuery::MUST_NOT],
131 | 'classInheritanceEnabled' => $this->considerInheritance
132 | ]
133 | )];
134 | }
135 | }
136 |
--------------------------------------------------------------------------------
/src/Filter/FieldDefinitionAdapter/Country.php:
--------------------------------------------------------------------------------
1 | considerInheritance) {
37 | return [
38 | $this->fieldDefinition->getName(),
39 | [
40 | 'properties' => [
41 | self::INDEX_MAPPING_PROPERTY_STANDARD => [
42 | 'type' => 'date',
43 | ],
44 | self::INDEX_MAPPING_PROPERTY_NOT_INHERITED => [
45 | 'type' => 'date',
46 | ]
47 | ]
48 | ]
49 | ];
50 | } else {
51 | return [
52 | $this->fieldDefinition->getName(),
53 | [
54 | 'type' => 'date',
55 | ]
56 | ];
57 | }
58 | }
59 |
60 | /**
61 | * @param array|string $fieldFilter
62 | *
63 | * filter field format as follows:
64 | * - simple date like
65 | * 2017-02-26 --> creates TermQuery
66 | * - array with gt, gte, lt, lte like
67 | * ["gte" => 2017-02-26, "lte" => 2017-05-26] --> creates RangeQuery
68 | * @param bool $ignoreInheritance
69 | * @param string $path
70 | *
71 | * @return BuilderInterface
72 | */
73 | public function getQueryPart($fieldFilter, $ignoreInheritance = false, $path = '')
74 | {
75 | if (is_array($fieldFilter)) {
76 | foreach ($fieldFilter as &$value) {
77 | $datetime = new \DateTime($value);
78 | $value = $datetime->format(\DateTimeInterface::ATOM);
79 | }
80 |
81 | return new RangeQuery($path . $this->fieldDefinition->getName() . $this->buildQueryFieldPostfix($ignoreInheritance), $fieldFilter);
82 | } else {
83 | $datetime = new \DateTime($fieldFilter);
84 | $datetime = $datetime->format(\DateTimeInterface::ATOM);
85 |
86 | return new TermQuery($path . $this->fieldDefinition->getName() . $this->buildQueryFieldPostfix($ignoreInheritance), $datetime);
87 | }
88 | }
89 |
90 | /**
91 | * @param Concrete $object
92 | * @param bool $ignoreInheritance
93 | */
94 | protected function doGetIndexDataValue($object, $ignoreInheritance = false)
95 | {
96 | $inheritanceBackup = null;
97 | if ($ignoreInheritance) {
98 | $inheritanceBackup = AbstractObject::getGetInheritedValues();
99 | AbstractObject::setGetInheritedValues(false);
100 | }
101 |
102 | $value = null;
103 |
104 | $getter = 'get' . $this->fieldDefinition->getName();
105 | $valueObject = $object->$getter();
106 | if ($valueObject) {
107 | $value = $valueObject->format(\DateTimeInterface::ATOM);
108 | }
109 |
110 | if ($ignoreInheritance) {
111 | AbstractObject::setGetInheritedValues($inheritanceBackup);
112 | }
113 |
114 | return $value;
115 | }
116 | }
117 |
--------------------------------------------------------------------------------
/src/Filter/FieldDefinitionAdapter/FieldDefinitionAdapterInterface.php:
--------------------------------------------------------------------------------
1 | fieldDefinition->getClasses() as $class) {
42 | $allowedClasses[] = $class['classes'];
43 | }
44 |
45 | return [new FieldSelectionInformation(
46 | $this->fieldDefinition->getName(),
47 | $this->fieldDefinition->getTitle(),
48 | $this->fieldType,
49 | [
50 | 'operators' => [BoolQuery::MUST, BoolQuery::SHOULD, BoolQuery::MUST_NOT, FilterEntry::EXISTS, FilterEntry::NOT_EXISTS],
51 | 'allowedTypes' => $allowedTypes,
52 | 'allowedClasses' => $allowedClasses
53 | ]
54 | )];
55 | }
56 |
57 | /**
58 | * @inheritDoc
59 | */
60 | protected function doGetIndexDataValue($object, $ignoreInheritance = false)
61 | {
62 | $value = parent::doGetIndexDataValue($object, $ignoreInheritance);
63 |
64 | //rewrite all types to 'object' since 'variants' are not supported yet.
65 | $filteredValues = array_map(function ($item) {
66 | if (isset($item['element'])) {
67 | return [
68 | 'id' => $item['element']['id'],
69 | 'type' => 'object'
70 | ];
71 | } else {
72 | return [
73 | 'id' => $item['id'],
74 | 'type' => 'object'
75 | ];
76 | }
77 | }, $value);
78 |
79 | return $filteredValues;
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/src/Filter/FieldDefinitionAdapter/ManyToManyRelation.php:
--------------------------------------------------------------------------------
1 | considerInheritance) {
39 | return [
40 | $this->fieldDefinition->getName(),
41 | [
42 | 'properties' => [
43 | self::INDEX_MAPPING_PROPERTY_STANDARD => [
44 | 'type' => 'float',
45 | ],
46 | self::INDEX_MAPPING_PROPERTY_NOT_INHERITED => [
47 | 'type' => 'float',
48 | ]
49 | ]
50 | ]
51 | ];
52 | } else {
53 | return [
54 | $this->fieldDefinition->getName(),
55 | [
56 | 'type' => 'float',
57 | ]
58 | ];
59 | }
60 | }
61 |
62 | /**
63 | * @param array|mixed $fieldFilter
64 | *
65 | * filter field format as follows:
66 | * - simple number like
67 | * 234.54 --> creates TermQuery
68 | * - array with gt, gte, lt, lte like
69 | * ["gte" => 40, "lte" => 45] --> creates RangeQuery
70 | * @param bool $ignoreInheritance
71 | * @param string $path
72 | *
73 | * @return BuilderInterface
74 | */
75 | public function getQueryPart($fieldFilter, $ignoreInheritance = false, $path = '')
76 | {
77 | if (is_array($fieldFilter)) {
78 | return new RangeQuery($path . $this->fieldDefinition->getName() . $this->buildQueryFieldPostfix($ignoreInheritance), $fieldFilter);
79 | } else {
80 | return new TermQuery($path . $this->fieldDefinition->getName() . $this->buildQueryFieldPostfix($ignoreInheritance), $fieldFilter);
81 | }
82 | }
83 |
84 | /**
85 | * returns selectable fields with their type information for search frontend
86 | *
87 | * @return FieldSelectionInformation[]
88 | */
89 | public function getFieldSelectionInformation()
90 | {
91 | return [new FieldSelectionInformation(
92 | $this->fieldDefinition->getName(),
93 | $this->fieldDefinition->getTitle(),
94 | $this->fieldType,
95 | [
96 | 'operators' => ['lt', 'lte', 'eq', 'gte', 'gt', FilterEntry::EXISTS, FilterEntry::NOT_EXISTS ],
97 | 'classInheritanceEnabled' => $this->considerInheritance
98 | ]
99 | )];
100 | }
101 |
102 | /**
103 | * @param Concrete $object
104 | * @param bool $ignoreInheritance
105 | */
106 | protected function doGetIndexDataValue($object, $ignoreInheritance = false)
107 | {
108 | $inheritanceBackup = null;
109 | if ($ignoreInheritance) {
110 | $inheritanceBackup = AbstractObject::getGetInheritedValues();
111 | AbstractObject::setGetInheritedValues(false);
112 | }
113 |
114 | $value = $this->loadRawDataFromContainer($object, $this->fieldDefinition->getName());
115 |
116 | if ($ignoreInheritance) {
117 | AbstractObject::setGetInheritedValues($inheritanceBackup);
118 | }
119 |
120 | return $value;
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/src/Filter/FieldDefinitionAdapter/Select.php:
--------------------------------------------------------------------------------
1 | considerInheritance) {
42 | return [
43 | $this->fieldDefinition->getName(),
44 | [
45 | 'properties' => [
46 | self::INDEX_MAPPING_PROPERTY_STANDARD => ['type' => 'keyword'],
47 | self::INDEX_MAPPING_PROPERTY_NOT_INHERITED => ['type' => 'keyword']
48 | ]
49 | ]
50 | ];
51 | } else {
52 | return [
53 | $this->fieldDefinition->getName(),
54 | [
55 | 'type' => 'keyword',
56 | ]
57 | ];
58 | }
59 | }
60 |
61 | /**
62 | * @param Concrete $object
63 | * @param bool $ignoreInheritance
64 | */
65 | protected function doGetIndexDataValue($object, $ignoreInheritance = false)
66 | {
67 | $inheritanceBackup = null;
68 | if ($ignoreInheritance) {
69 | $inheritanceBackup = AbstractObject::getGetInheritedValues();
70 | AbstractObject::setGetInheritedValues(false);
71 | }
72 |
73 | $value = $this->loadRawDataFromContainer($object, $this->fieldDefinition->getName());
74 |
75 | if ($ignoreInheritance) {
76 | AbstractObject::setGetInheritedValues($inheritanceBackup);
77 | }
78 |
79 | return $value;
80 | }
81 |
82 | /**
83 | * @param string $fieldFilter
84 | *
85 | * filter field format as follows:
86 | * - simple string like
87 | * "filter for value" --> creates QueryStringQuery
88 | * @param bool $ignoreInheritance
89 | * @param string $path
90 | *
91 | * @return BuilderInterface
92 | */
93 | public function getQueryPart($fieldFilter, $ignoreInheritance = false, $path = '')
94 | {
95 | return new TermQuery($path . $this->fieldDefinition->getName() . $this->buildQueryFieldPostfix($ignoreInheritance), $fieldFilter);
96 | }
97 |
98 | /**
99 | * @inheritdoc
100 | */
101 | public function getFieldSelectionInformation()
102 | {
103 | return [new FieldSelectionInformation(
104 | $this->fieldDefinition->getName(),
105 | $this->fieldDefinition->getTitle(),
106 | $this->fieldType,
107 | [
108 | 'operators' => [BoolQuery::MUST, BoolQuery::SHOULD, BoolQuery::MUST_NOT, FilterEntry::EXISTS, FilterEntry::NOT_EXISTS],
109 | 'classInheritanceEnabled' => $this->considerInheritance,
110 | 'options' => $this->fieldDefinition->getOptions()
111 | ]
112 | )];
113 | }
114 | }
115 |
--------------------------------------------------------------------------------
/src/Filter/FieldDefinitionAdapter/Time.php:
--------------------------------------------------------------------------------
1 | fieldDefinition->getName();
43 | $valueObject = $object->$getter();
44 | if ($valueObject) {
45 | $valueObject = new \DateTime('0000-01-01T' . $valueObject);
46 | $value = $valueObject->format(\DateTimeInterface::ATOM);
47 | }
48 |
49 | if ($ignoreInheritance) {
50 | AbstractObject::setGetInheritedValues($inheritanceBackup);
51 | }
52 |
53 | return $value;
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/src/Filter/FieldDefinitionAdapter/User.php:
--------------------------------------------------------------------------------
1 | fieldName = $fieldName;
46 | $this->fieldLabel = $fieldLabel;
47 | $this->fieldType = $fieldType;
48 | $this->context = $context;
49 | }
50 |
51 | /**
52 | * @return string
53 | */
54 | public function getFieldName()
55 | {
56 | return $this->fieldName;
57 | }
58 |
59 | /**
60 | * @param string $fieldName
61 | */
62 | public function setFieldName($fieldName)
63 | {
64 | $this->fieldName = $fieldName;
65 | }
66 |
67 | /**
68 | * @return string
69 | */
70 | public function getFieldLabel()
71 | {
72 | return $this->fieldLabel;
73 | }
74 |
75 | /**
76 | * @param string $fieldLabel
77 | */
78 | public function setFieldLabel($fieldLabel)
79 | {
80 | $this->fieldLabel = $fieldLabel;
81 | }
82 |
83 | /**
84 | * @return string
85 | */
86 | public function getFieldType()
87 | {
88 | return $this->fieldType;
89 | }
90 |
91 | /**
92 | * @param string $fieldType
93 | */
94 | public function setFieldType($fieldType)
95 | {
96 | $this->fieldType = $fieldType;
97 | }
98 |
99 | /**
100 | * @return array
101 | */
102 | public function getContext()
103 | {
104 | return $this->context;
105 | }
106 |
107 | /**
108 | * @param array $context
109 | */
110 | public function setContext($context)
111 | {
112 | $this->context = $context;
113 | }
114 |
115 | public function toArray()
116 | {
117 | return [
118 | 'fieldName' => $this->fieldName,
119 | 'fieldLabel' => $this->fieldLabel,
120 | 'fieldType' => $this->fieldType,
121 | 'context' => $this->context
122 | ];
123 | }
124 | }
125 |
--------------------------------------------------------------------------------
/src/Filter/FilterEntry.php:
--------------------------------------------------------------------------------
1 | operator = $operator;
67 | }
68 | $this->fieldname = $fieldname;
69 | $this->filterEntryData = $filterEntryData;
70 | $this->ignoreInheritance = $ignoreInheritance;
71 | }
72 |
73 | /**
74 | * @return string
75 | */
76 | public function getOperator()
77 | {
78 | return $this->operator;
79 | }
80 |
81 | public function getOuterOperator()
82 | {
83 | if ($this->operator == self::EXISTS) {
84 | return BoolQuery::MUST;
85 | } elseif ($this->operator == self::NOT_EXISTS) {
86 | return BoolQuery::MUST_NOT;
87 | } else {
88 | return $this->operator;
89 | }
90 | }
91 |
92 | /**
93 | * @param string $operator
94 | */
95 | public function setOperator($operator)
96 | {
97 | $this->operator = $operator;
98 | }
99 |
100 | /**
101 | * @return string
102 | */
103 | public function getFieldname()
104 | {
105 | return $this->fieldname;
106 | }
107 |
108 | /**
109 | * @param string $fieldname
110 | */
111 | public function setFieldname($fieldname)
112 | {
113 | $this->fieldname = $fieldname;
114 | }
115 |
116 | /**
117 | * @return \stdClass | BuilderInterface | string | array
118 | */
119 | public function getFilterEntryData()
120 | {
121 | return $this->filterEntryData;
122 | }
123 |
124 | /**
125 | * @param \stdClass | BuilderInterface | string | array $filterEntryData
126 | */
127 | public function setFilterEntryData($filterEntryData)
128 | {
129 | $this->filterEntryData = $filterEntryData;
130 | }
131 |
132 | /**
133 | * @return bool
134 | */
135 | public function isGroup()
136 | {
137 | return $this->fieldname == self::FIELDNAME_GROUP;
138 | }
139 |
140 | /**
141 | * @return bool
142 | */
143 | public function getIgnoreInheritance()
144 | {
145 | return $this->ignoreInheritance;
146 | }
147 | }
148 |
--------------------------------------------------------------------------------
/src/Maintenance/UpdateQueueProcessor.php:
--------------------------------------------------------------------------------
1 | service = $service;
45 | $this->messengerQueueActivated = $messengerQueueActivated;
46 | $this->queueHandler = $queueHandler;
47 | }
48 |
49 | public function execute(): void
50 | {
51 | if ($this->messengerQueueActivated) {
52 | $this->queueHandler->dispatchMessages();
53 | } else {
54 | $this->service->processUpdateQueue(500);
55 | }
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/src/Messenger/QueueHandler.php:
--------------------------------------------------------------------------------
1 | queueService = $queueService;
33 | $this->messageBus = $messageBus;
34 | $this->workerCountLifeTime = $workerCountLifeTime;
35 | $this->workerItemCount = $workerItemCount;
36 | $this->workerCount = $workerCount;
37 | }
38 |
39 | public function __invoke(QueueMessage $message)
40 | {
41 | $this->queueService->doProcessUpdateQueue($message->getWorkerId(), $message->getEntries());
42 |
43 | $this->removeMessage($message->getWorkerId());
44 | $this->dispatchMessages();
45 | }
46 |
47 | public function dispatchMessages()
48 | {
49 | $dispatchedMessageCount = $this->getMessageCount();
50 |
51 | $addWorkers = true;
52 | while ($addWorkers && $dispatchedMessageCount < $this->workerCount) {
53 | $workerId = uniqid();
54 | $entries = $this->queueService->initUpdateQueue($workerId, $this->workerItemCount);
55 | if (!empty($entries)) {
56 | $this->addMessage($workerId);
57 | $this->messageBus->dispatch(new QueueMessage($workerId, $entries));
58 | $dispatchedMessageCount = $this->getMessageCount();
59 | } else {
60 | $addWorkers = false;
61 | }
62 | }
63 | }
64 |
65 | private function addMessage(string $messageId)
66 | {
67 | TmpStore::set(self::IMPORTER_WORKER_COUNT_TMP_STORE_KEY . $messageId, true, self::IMPORTER_WORKER_COUNT_TMP_STORE_KEY, $this->workerCountLifeTime);
68 | }
69 |
70 | private function removeMessage(string $messageId)
71 | {
72 | TmpStore::delete(self::IMPORTER_WORKER_COUNT_TMP_STORE_KEY . $messageId);
73 | }
74 |
75 | private function getMessageCount(): int
76 | {
77 | $ids = TmpStore::getIdsByTag(self::IMPORTER_WORKER_COUNT_TMP_STORE_KEY);
78 | $runningWorkers = [];
79 | foreach ($ids as $id) {
80 | $runningWorkers[] = TmpStore::get($id);
81 | }
82 |
83 | return count(array_filter($runningWorkers));
84 | }
85 | }
86 |
--------------------------------------------------------------------------------
/src/Messenger/QueueMessage.php:
--------------------------------------------------------------------------------
1 | workerId = $workerId;
28 | $this->entries = $entries;
29 | }
30 |
31 | /**
32 | * @return string
33 | */
34 | public function getWorkerId(): string
35 | {
36 | return $this->workerId;
37 | }
38 |
39 | /**
40 | * @return array
41 | */
42 | public function getEntries(): array
43 | {
44 | return $this->entries;
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/src/Migrations/PimcoreX/Version20210305134111.php:
--------------------------------------------------------------------------------
1 | getTable(Installer::QUEUE_TABLE_NAME);
36 | if ($table->hasColumn('o_id')) {
37 | $query = 'ALTER TABLE %s CHANGE COLUMN `o_id` `id` bigint DEFAULT 0 NOT NULL;';
38 | $this->addSql(sprintf($query, $table->getName()));
39 | }
40 | }
41 |
42 | public function down(Schema $schema): void
43 | {
44 | $table = $schema->getTable(Installer::QUEUE_TABLE_NAME);
45 | if ($table->hasColumn('id')) {
46 | $query = 'ALTER TABLE %s CHANGE COLUMN `id` `o_id` bigint DEFAULT 0 NOT NULL;';
47 | $this->addSql(sprintf($query, $table->getName()));
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/src/Migrations/Version20191218105114.php:
--------------------------------------------------------------------------------
1 | getTable(SavedSearch\Dao::TABLE_NAME);
28 | $execTable->addColumn('shareGlobally', 'boolean', ['default' => null, 'notnull' => false]);
29 | $execTable->addIndex(['shareGlobally'], 'shareGlobally');
30 | }
31 |
32 | /**
33 | * @param Schema $schema
34 | */
35 | public function down(Schema $schema)
36 | {
37 | $execTable = $schema->getTable(SavedSearch\Dao::TABLE_NAME);
38 | $execTable->dropColumn('shareGlobally');
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src/Migrations/Version20210305134111.php:
--------------------------------------------------------------------------------
1 | fetchAssociative(
40 | 'SELECT * FROM pimcore_migrations WHERE migration_set = ? AND version = ?',
41 | ['AdvancedObjectSearchBundle', '00000001']
42 | );
43 |
44 | if ($entry && !empty($entry['migrated_at'])) {
45 | SettingsStore::set('BUNDLE_INSTALLED__AdvancedObjectSearchBundle\\AdvancedObjectSearchBundle', true, 'bool', 'pimcore');
46 | }
47 | }
48 |
49 | /**
50 | * @param Schema $schema
51 | */
52 | public function down(Schema $schema)
53 | {
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/src/Model/SavedSearch/Dao.php:
--------------------------------------------------------------------------------
1 | db->fetchAssociative('SELECT * FROM ' . $this->db->quoteIdentifier(self::TABLE_NAME) . ' WHERE id = ?', [$id]);
35 | if (!$data['id']) {
36 | throw new \Exception('SavedSearch item with id ' . $id . ' not found');
37 | }
38 | $this->assignVariablesToModel($data);
39 | }
40 |
41 | /**
42 | * Save object to database
43 | *
44 | * @return bool
45 | */
46 | public function save()
47 | {
48 | $this->db->beginTransaction();
49 |
50 | try {
51 | $dataAttributes = get_object_vars($this->model);
52 |
53 | $data = [];
54 | foreach ($dataAttributes as $key => $value) {
55 | if (in_array($key, $this->getValidTableColumns(self::TABLE_NAME))) {
56 | if (in_array($key, ['sharedUserIds', 'shortCutUserIds'])) {
57 | // sharedUserIds and shortCustUserIds are stored as csv
58 | if (is_array($value)) {
59 | $value = ',' . implode(',', $value) . ',';
60 | }
61 | }
62 | $data[$key] = $value;
63 | }
64 | }
65 |
66 | $lastInsertId = Helper::upsert($this->db, self::TABLE_NAME, $data, $this->getPrimaryKey(self::TABLE_NAME));
67 | if ($lastInsertId !== null && !$this->model->getId()) {
68 | $this->model->setId((int) $lastInsertId);
69 | }
70 |
71 | $this->db->commit();
72 |
73 | return true;
74 | } catch (\Exception $e) {
75 | $this->db->rollBack();
76 |
77 | throw $e;
78 | }
79 | }
80 |
81 | /**
82 | * Deletes object from database
83 | *
84 | * @return void
85 | */
86 | public function delete()
87 | {
88 | $this->db->beginTransaction();
89 |
90 | try {
91 | $this->db->delete(self::TABLE_NAME, ['id' => $this->model->getId()]);
92 |
93 | $this->db->commit();
94 | } catch (\Exception $e) {
95 | $this->db->rollBack();
96 |
97 | throw $e;
98 | }
99 | }
100 | }
101 |
--------------------------------------------------------------------------------
/src/Model/SavedSearch/Listing.php:
--------------------------------------------------------------------------------
1 | savedSearches = $savedSearches;
50 |
51 | return $this;
52 | }
53 |
54 | /**
55 | * @return array
56 | */
57 | public function getSavedSearches()
58 | {
59 | return $this->savedSearches;
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/src/Model/SavedSearch/Listing/Dao.php:
--------------------------------------------------------------------------------
1 | db->fetchFirstColumn('SELECT id FROM ' . $this->db->quoteIdentifier(SavedSearch\Dao::TABLE_NAME) . ' ' . $this->getCondition() . $this->getOrder() . $this->getOffsetLimit(), $this->model->getConditionVariables());
35 |
36 | $searches = [];
37 | foreach ($searchIds as $id) {
38 | if ($savedSearch = SavedSearch::getById($id)) {
39 | $searches[] = $savedSearch;
40 | }
41 | }
42 |
43 | $this->model->setSavedSearches($searches);
44 |
45 | return $searches;
46 | }
47 |
48 | /**
49 | * @throws Exception
50 | */
51 | public function loadIdList()
52 | {
53 | return $this->db->fetchFirstColumn('SELECT id FROM ' . $this->db->quoteIdentifier(SavedSearch\Dao::TABLE_NAME) . ' ' . $this->getCondition() . $this->getGroupBy() . $this->getOrder() . $this->getOffsetLimit(), $this->model->getConditionVariables());
54 | }
55 |
56 | public function getTotalCount(): int
57 | {
58 | $amount = 0;
59 |
60 | try {
61 | $amount = (int) $this->db->fetchOne('SELECT COUNT(*) as amount FROM ' . $this->db->quoteIdentifier(SavedSearch\Dao::TABLE_NAME) . ' ' . $this->getCondition(), $this->model->getConditionVariables());
62 | } catch (\Exception $e) {
63 | }
64 |
65 | return $amount;
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/src/Resources/config/doctrine_migrations.yml:
--------------------------------------------------------------------------------
1 | doctrine_migrations:
2 | migrations_paths:
3 | 'AdvancedObjectSearchBundle\Migrations\PimcoreX': '@AdvancedObjectSearchBundle/Migrations/PimcoreX'
4 |
--------------------------------------------------------------------------------
/src/Resources/config/pimcore/routing.yml:
--------------------------------------------------------------------------------
1 | _pimcore_advancedobjectsearch_backend:
2 | resource: "@AdvancedObjectSearchBundle/Controller/"
3 | type: attribute
4 | prefix: /admin/bundle/advanced-object-search
5 |
--------------------------------------------------------------------------------
/src/Resources/public/css/admin.css:
--------------------------------------------------------------------------------
1 | /**
2 | * This source file is available under the terms of the
3 | * Pimcore Open Core License (POCL)
4 | * Full copyright and license information is available in
5 | * LICENSE.md which is distributed with this source code.
6 | *
7 | * @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.com)
8 | * @license Pimcore Open Core License (POCL)
9 | */
10 |
11 |
12 | .pimcore_bundle_advancedObjectSearch_saveAndShare {
13 | background: url("/bundles/pimcoreadmin/img/flat-color-icons/collaboration.svg") center center no-repeat !important;
14 | }
15 |
16 | .pimcore_bundle_advancedObjectSearch_grid {
17 | background: url("/bundles/pimcoreadmin/img/flat-color-icons/grid.svg") center center no-repeat !important;
18 | }
19 |
20 | .pimcore_bundle_advancedObjectSearch_filter {
21 | background: url("/bundles/pimcoreadmin/img/flat-color-icons/filled_filter.svg") center center no-repeat !important;
22 | }
23 |
24 | .pimcore_bundle_advancedObjectSearch {
25 | background: url("/bundles/pimcoreadmin/img/flat-color-icons/binoculars.svg") center center no-repeat !important;
26 | }
27 |
28 | .pimcore_bundle_nav_icon_advancedObjectSearch {
29 | background: url("/bundles/pimcoreadmin/img/flat-white-icons/binoculars.svg") center center no-repeat !important;
30 | }
31 |
32 | #pimcore_bundle_advancedObjectSearch_toolbar {
33 | background-image: url(/bundles/pimcoreadmin/img/flat-color-icons/binoculars.svg) !important;
34 | filter: grayscale(0%) !important;
35 | -webkit-filter: grayscale(0%) !important;
36 | position: relative;
37 | }
38 |
39 | #pimcore_bundle_advancedObjectSearch_toolbar:before {
40 | position: absolute;
41 | width: 12px;
42 | height: 12px;
43 | bottom: 0px;
44 | right: 5px;
45 | content: "";
46 | background: url(/bundles/pimcoreadmin/img/flat-color-icons/settings.svg) center center no-repeat !important;
47 | }
48 |
--------------------------------------------------------------------------------
/src/Resources/public/js/events.js:
--------------------------------------------------------------------------------
1 | /**
2 | * This source file is available under the terms of the
3 | * Pimcore Open Core License (POCL)
4 | * Full copyright and license information is available in
5 | * LICENSE.md which is distributed with this source code.
6 | *
7 | * @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.com)
8 | * @license Pimcore Open Core License (POCL)
9 | */
10 |
11 | /**
12 | * on search result initialize
13 | * extensionBag is passed as parameters
14 | */
15 | pimcore.events.onAdvancedObjectSearchResult = "pimcore.advancedObjectSearch.result.initialize";
16 |
17 | pimcore.events.onAdvancedObjectSearchResultRowContextMenu = "pimcore.advancedObjectSearch.result.onRowContextMenu";
18 |
19 | //TODO: delete once support for Pimcore 10.6 is dropped
20 |
21 | if(typeof addEventListenerCompatibilityForPlugins === "function") {
22 | let eventMappings = [];
23 | eventMappings["onAdvancedObjectSearchResult"] = pimcore.events.onAdvancedObjectSearchResult;
24 | addEventListenerCompatibilityForPlugins(eventMappings);
25 | console.warn("Deprecation: addEventListenerCompatibilityForPlugins will be not supported in Pimcore 11.");
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/src/Resources/public/js/portlet/advancedObjectSearch.js:
--------------------------------------------------------------------------------
1 | /**
2 | * This source file is available under the terms of the
3 | * Pimcore Open Core License (POCL)
4 | * Full copyright and license information is available in
5 | * LICENSE.md which is distributed with this source code.
6 | *
7 | * @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.com)
8 | * @license Pimcore Open Core License (POCL)
9 | */
10 |
11 |
12 | pimcore.registerNS("pimcore.layout.portlets.advancedObjectSearch");
13 | pimcore.layout.portlets.advancedObjectSearch = Class.create(pimcore.layout.portlets.abstract, {
14 |
15 | getType: function () {
16 | return "pimcore.layout.portlets.advancedObjectSearch";
17 | },
18 |
19 |
20 | getName: function () {
21 | return t("bundle_advancedObjectSearch");
22 | },
23 |
24 | getIcon: function () {
25 | return "pimcore_bundle_advancedObjectSearch";
26 | },
27 |
28 | getLayout: function (portletId) {
29 |
30 | var defaultConf = this.getDefaultConfig();
31 |
32 |
33 |
34 | defaultConf.tools = [
35 | {
36 | type:'search',
37 | handler: function() {
38 | pimcore.bundle.advancedObjectSearch.helper.openEsSearch(this.config);
39 | }.bind(this)
40 | },
41 | {
42 | type:'gear',
43 | handler: this.editSettings.bind(this)
44 | },
45 | {
46 | type:'close',
47 | handler: this.remove.bind(this)
48 | }
49 | ];
50 |
51 | this.layout = Ext.create('Portal.view.Portlet', Object.assign(defaultConf, {
52 | title: this.getName(),
53 | iconCls: this.getIcon(),
54 | height: 275,
55 | layout: "fit",
56 | items: []
57 | }));
58 |
59 | if(this.config) {
60 | this.updateChart();
61 | }
62 |
63 | this.layout.portletId = portletId;
64 | return this.layout;
65 | },
66 |
67 | editSettings: function () {
68 | var selector = new pimcore.bundle.advancedObjectSearch.selector(this.updateSettings.bind(this));
69 | },
70 |
71 | updateSettings: function(searchId, callback) {
72 |
73 | this.config = searchId;
74 | Ext.Ajax.request({
75 | url: "/admin/portal/update-portlet-config",
76 | method: 'PUT',
77 | params: {
78 | key: this.portal.key,
79 | id: this.layout.portletId,
80 | config: this.config
81 | },
82 | success: function () {
83 | this.updateChart();
84 | callback();
85 | }.bind(this)
86 | });
87 | },
88 |
89 | updateChart: function() {
90 | if(this.config) {
91 | Ext.Ajax.request({
92 | url: "/admin/bundle/advanced-object-search/admin/load-search",
93 | params: {
94 | id: this.config
95 | },
96 | method: "get",
97 | success: function (response) {
98 | var searchConfig = Ext.decode(response.responseText);
99 | var resultPanel = new pimcore.bundle.advancedObjectSearch.searchConfig.resultPanel(
100 | function() {
101 | return response.responseText;
102 | },
103 | searchConfig.gridConfig,
104 | true
105 | );
106 | var resultPanelLayout = resultPanel.getLayout();
107 | resultPanel.updateGrid(searchConfig.classId);
108 | this.layout.removeAll();
109 | this.layout.add(resultPanelLayout);
110 | this.layout.updateLayout();
111 |
112 | }.bind(this)
113 | });
114 |
115 |
116 | }
117 | }
118 |
119 | });
120 |
--------------------------------------------------------------------------------
/src/Resources/public/js/searchConfig/conditionAbstractPanel.js:
--------------------------------------------------------------------------------
1 | /**
2 | * This source file is available under the terms of the
3 | * Pimcore Open Core License (POCL)
4 | * Full copyright and license information is available in
5 | * LICENSE.md which is distributed with this source code.
6 | *
7 | * @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.com)
8 | * @license Pimcore Open Core License (POCL)
9 | */
10 |
11 |
12 | pimcore.registerNS("pimcore.bundle.advancedObjectSearch.searchConfig.conditionAbstractPanel");
13 | pimcore.bundle.advancedObjectSearch.searchConfig.conditionAbstractPanel = Class.create({
14 |
15 | fieldCondition: null,
16 | fieldConditionPanel: null,
17 | mainPanelLayout: "hbox",
18 | classId: null,
19 |
20 | initialize: function(classId, mainPanelLayout) {
21 | this.classId = classId;
22 | if(mainPanelLayout) {
23 | this.mainPanelLayout = mainPanelLayout;
24 | }
25 |
26 | },
27 |
28 | getTopBar: function (name, index, parent) {
29 | return [{
30 | xtype: "tbtext",
31 | text: "" + name + ""
32 | },"-",{
33 | iconCls: "pimcore_icon_up",
34 | handler: function (blockId, parent) {
35 |
36 | var container = parent.conditionsContainerInner;
37 | var blockElement = Ext.getCmp(blockId);
38 | var index = this.detectBlockIndex(blockElement, container);
39 |
40 | var newIndex = index-1;
41 | if(newIndex < 0) {
42 | newIndex = 0;
43 | }
44 |
45 | container.remove(blockElement, false);
46 | container.insert(newIndex, blockElement);
47 |
48 | pimcore.layout.refresh();
49 | }.bind(this, index, parent)
50 | },{
51 | iconCls: "pimcore_icon_down",
52 | handler: function (blockId, parent) {
53 | var container = parent.conditionsContainerInner;
54 | var blockElement = Ext.getCmp(blockId);
55 | var index = this.detectBlockIndex(blockElement, container);
56 |
57 | container.remove(blockElement, false);
58 | container.insert(index+1, blockElement);
59 |
60 | pimcore.layout.refresh();
61 | }.bind(this, index, parent)
62 | },"->",{
63 | iconCls: "pimcore_icon_delete",
64 | handler: function (index, parent) {
65 | parent.conditionsContainerInner.remove(Ext.getCmp(index));
66 | }.bind(window, index, parent)
67 | }];
68 | },
69 |
70 | detectBlockIndex: function (blockElement, container) {
71 | // detect index
72 | var index;
73 |
74 | for(var s=0; s < container.items.items.length; s++) {
75 | if(container.items.items[s].getId() == blockElement.getId()) {
76 | index = s;
77 | break;
78 | }
79 | }
80 | return index;
81 | }
82 | });
83 |
--------------------------------------------------------------------------------
/src/Resources/public/js/searchConfig/conditionGroupPanel.js:
--------------------------------------------------------------------------------
1 | /**
2 | * This source file is available under the terms of the
3 | * Pimcore Open Core License (POCL)
4 | * Full copyright and license information is available in
5 | * LICENSE.md which is distributed with this source code.
6 | *
7 | * @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.com)
8 | * @license Pimcore Open Core License (POCL)
9 | */
10 |
11 |
12 | pimcore.registerNS("pimcore.bundle.advancedObjectSearch.searchConfig.conditionGroupPanel");
13 | pimcore.bundle.advancedObjectSearch.searchConfig.conditionGroupPanel = Class.create(pimcore.bundle.advancedObjectSearch.searchConfig.conditionAbstractPanel, {
14 |
15 | getConditionPanel: function(panel, data) {
16 | this.panel = panel;
17 |
18 | var niceName = t("bundle_advancedObjectSearch_group");
19 |
20 | var myId = Ext.id();
21 |
22 | return Ext.create('Ext.panel.Panel', {
23 | id: myId,
24 | bodyStyle: "padding: 15px 10px;",
25 | tbar: this.getTopBar(niceName, myId, panel),
26 | layout: this.mainPanelLayout,
27 | scrollable: true,
28 | border: 1,
29 | panelInstance: this,
30 | items: [
31 | this.getInnerConditionPanel(myId, data)
32 | ]
33 | });
34 |
35 | },
36 |
37 | /**
38 | * legacy method since the parent panel of a condition entry panel can
39 | * either be a condition group panel or the condition panel itself
40 | */
41 | getPanel: function () {
42 | return this.panel.getPanel();
43 | },
44 |
45 | getInnerConditionPanel: function(myId, data) {
46 | var helper = new pimcore.bundle.advancedObjectSearch.searchConfig.conditionPanelContainerBuilder(this.classId, this, myId, this.conditionEntryPanelLayout);
47 | this.conditionsContainerInner = helper.buildConditionsContainerInner();
48 |
49 | if(data.filterEntryData) {
50 | helper.populateConditionsContainerInner(data.filterEntryData);
51 | }
52 |
53 | return Ext.create('Ext.panel.Panel',{
54 | border: false,
55 | width: "100%",
56 | items: [
57 | this.getOperatorCombobox(data),
58 | this.conditionsContainerInner
59 | ]
60 | });
61 | },
62 |
63 | getOperatorCombobox: function(data) {
64 | this.operatorField = Ext.create('Ext.form.ComboBox',
65 | {
66 |
67 | fieldLabel: t("bundle_advancedObjectSearch_operator"),
68 | store: ["must", "should"],
69 | value: data ? data.operator : "",
70 | queryMode: 'local',
71 | width: 300,
72 | listeners: {
73 | change: function( item, newValue, oldValue, eOpts ) {
74 |
75 | }.bind(this)
76 | }
77 | }
78 | );
79 |
80 | return this.operatorField;
81 | },
82 |
83 | getFilterValues: function() {
84 |
85 | var conditionsData = [];
86 | if(this.conditionsContainerInner) {
87 | var conditions = this.conditionsContainerInner.items.getRange();
88 | for (var i=0; i',
34 | '{[Ext.util.Format.stripTags(values.key)]}',
35 | ''
36 | )
37 | }
38 | );
39 |
40 | this.inheritanceField = Ext.create('Ext.form.field.Checkbox',
41 | {
42 | fieldLabel: t("bundle_advancedObjectSearch_ignoreInheritance"),
43 | style: "padding-left: 20px",
44 | value: this.data.ignoreInheritance,
45 | hidden: !this.fieldSelectionInformation.context.classInheritanceEnabled
46 | }
47 | );
48 |
49 | return Ext.create('Ext.panel.Panel', {
50 | layout: 'hbox',
51 | items: [
52 | this.getOperatorCombobox(this.data.operator),
53 | this.termField,
54 | this.inheritanceField
55 | ]
56 | });
57 | }
58 |
59 | });
60 |
--------------------------------------------------------------------------------
/src/Resources/public/js/searchConfig/fieldConditionPanel/time.js:
--------------------------------------------------------------------------------
1 | /**
2 | * This source file is available under the terms of the
3 | * Pimcore Open Core License (POCL)
4 | * Full copyright and license information is available in
5 | * LICENSE.md which is distributed with this source code.
6 | *
7 | * @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.com)
8 | * @license Pimcore Open Core License (POCL)
9 | */
10 |
11 |
12 | pimcore.registerNS("pimcore.bundle.advancedObjectSearch.searchConfig.fieldConditionPanel.time");
13 | pimcore.bundle.advancedObjectSearch.searchConfig.fieldConditionPanel.time = Class.create(pimcore.bundle.advancedObjectSearch.searchConfig.fieldConditionPanel.datetime, {
14 |
15 | showDateField: false,
16 |
17 | getFilterValues: function() {
18 |
19 | var filterEntryData = {};
20 | var operatorFieldValue = this.operatorField.getValue();
21 |
22 | var dateString = "0000-01-01";
23 | if (this.timefield.getValue()) {
24 | var timeValue = this.timefield.getValue();
25 | timeValue = Ext.Date.format(timeValue, "H:i:s");
26 |
27 | dateString += "T" + timeValue;
28 | }
29 |
30 | if(operatorFieldValue == "eq") {
31 | filterEntryData = dateString
32 | } else {
33 | filterEntryData[operatorFieldValue] = dateString;
34 | }
35 |
36 |
37 | var operator = "must";
38 | if(operatorFieldValue == "exists" || operatorFieldValue == "not_exists") {
39 | operator = operatorFieldValue;
40 | }
41 |
42 | return {
43 | fieldname: this.fieldSelectionInformation.fieldName,
44 | filterEntryData: filterEntryData,
45 | operator: operator,
46 | ignoreInheritance: this.inheritanceField.getValue()
47 | };
48 |
49 | }
50 |
51 | });
52 |
--------------------------------------------------------------------------------
/src/Resources/public/js/searchConfig/fieldConditionPanel/user.js:
--------------------------------------------------------------------------------
1 | /**
2 | * This source file is available under the terms of the
3 | * Pimcore Open Core License (POCL)
4 | * Full copyright and license information is available in
5 | * LICENSE.md which is distributed with this source code.
6 | *
7 | * @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.com)
8 | * @license Pimcore Open Core License (POCL)
9 | */
10 |
11 |
12 | pimcore.registerNS("pimcore.bundle.advancedObjectSearch.searchConfig.fieldConditionPanel.user");
13 | pimcore.bundle.advancedObjectSearch.searchConfig.fieldConditionPanel.user = Class.create(pimcore.bundle.advancedObjectSearch.searchConfig.fieldConditionPanel.select, {
14 |
15 | });
16 |
--------------------------------------------------------------------------------
/src/Resources/public/js/searchConfig/resultAbstractPanel.js:
--------------------------------------------------------------------------------
1 | /**
2 | * This source file is available under the terms of the
3 | * Pimcore Open Core License (POCL)
4 | * Full copyright and license information is available in
5 | * LICENSE.md which is distributed with this source code.
6 | *
7 | * @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.com)
8 | * @license Pimcore Open Core License (POCL)
9 | */
10 |
11 |
12 | pimcore.registerNS("pimcore.bundle.advancedObjectSearch.searchConfig.resultAbstractPanel");
13 | pimcore.bundle.advancedObjectSearch.searchConfig.resultAbstractPanel = Class.create(pimcore.object.helpers.gridTabAbstract, {
14 | systemColumns: ["id", "fullpath", "type", "subtype", "filename", "classname", "creationDate", "modificationDate"],
15 | noBatchColumns: [],
16 | batchAppendColumns: [],
17 | batchRemoveColumns: [],
18 |
19 | getSaveDataCallback: null,
20 | gridConfigData: {},
21 |
22 | portletMode: false,
23 |
24 | fieldObject: {},
25 |
26 | initialize: function($super) {
27 | $super();
28 |
29 | this.exportPrepareUrl = "/admin/bundle/advanced-object-search/admin/get-export-jobs";
30 | this.batchPrepareUrl = "/admin/bundle/advanced-object-search/admin/get-batch-jobs";
31 | },
32 |
33 | getLayout: function (initialFilter) {
34 | },
35 |
36 | updateGrid: function (classId) {
37 | },
38 |
39 | createGrid: function (fromConfig, response, settings, save) {
40 | }
41 | });
42 |
43 |
44 | pimcore.bundle.advancedObjectSearch.searchConfig.resultAbstractPanel.addMethods(pimcore.element.helpers.gridColumnConfig);
45 |
46 |
--------------------------------------------------------------------------------
/src/Resources/public/js/startup.js:
--------------------------------------------------------------------------------
1 | /**
2 | * This source file is available under the terms of the
3 | * Pimcore Open Core License (POCL)
4 | * Full copyright and license information is available in
5 | * LICENSE.md which is distributed with this source code.
6 | *
7 | * @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.com)
8 | * @license Pimcore Open Core License (POCL)
9 | */
10 |
11 |
12 | pimcore.registerNS("pimcore.bundle.advancedObjectSearch");
13 |
14 | pimcore.bundle.advancedObjectSearch = Class.create({
15 | getClassName: function() {
16 | return "pimcore.plugin.advancedObjectSearch";
17 | },
18 |
19 | initialize: function() {
20 | document.addEventListener(pimcore.events.pimcoreReady, this.onPimcoreReady.bind(this));
21 | document.addEventListener(pimcore.events.onPerspectiveEditorLoadPermissions, this.onPerspectiveEditorLoadPermissions.bind(this));
22 | },
23 |
24 | onPimcoreReady: function (e){
25 | var perspectiveCfg = pimcore.globalmanager.get("perspective");
26 | var user = pimcore.globalmanager.get("user");
27 |
28 | var searchMenu = pimcore.globalmanager.get("layout_toolbar").searchMenu;
29 | if(searchMenu && perspectiveCfg.inToolbar("search.advancedObjectSearch") && user.isAllowed("bundle_advancedsearch_search")) {
30 | pimcore.bundle.advancedObjectSearch.helper.rebuildEsSearchMenu();
31 | pimcore.bundle.advancedObjectSearch.helper.initializeStatusIcon();
32 | }
33 | },
34 |
35 | onPerspectiveEditorLoadPermissions: function (e) {
36 | let context = e.detail.context;
37 | let menu = e.detail.menu;
38 | let permissions = e.detail.permissions;
39 |
40 | if(context == 'toolbar' && menu == 'search' &&
41 | permissions[context][menu].indexOf('items.advancedObjectSearch') == -1) {
42 | permissions[context][menu].push('items.advancedObjectSearch');
43 | }
44 | }
45 | });
46 |
47 | var advancedObjectSearchPlugin = new pimcore.bundle.advancedObjectSearch();
48 |
49 |
--------------------------------------------------------------------------------
/src/Resources/translations/admin.ca.yml:
--------------------------------------------------------------------------------
1 | ---
2 | bundle_advancedObjectSearch: Advanced Object Search
3 | bundle_advancedObjectSearch_field: Field
4 | bundle_advancedObjectSearch_condition: Condition
5 | bundle_advancedObjectSearch_term: Term
6 | bundle_advancedObjectSearch_operator: Operator
7 | bundle_advancedObjectSearch_language: Language
8 | bundle_advancedObjectSearch_subclass: Class
9 | bundle_advancedObjectSearch_filter: Filter
10 | bundle_advancedObjectSearch_filters: Filters
11 | bundle_advancedObjectSearch_type: Type
12 | bundle_advancedObjectSearch_ids: IDs
13 | bundle_advancedObjectSearch_results: Results
14 | bundle_advancedObjectSearch_fulltextterm: Search Term
15 | bundle_advancedObjectSearch_save_and_share: Save And Share
16 | bundle_advancedObjectSearch_share: Sharing
17 | bundle_advancedObjectSearch_combine_entries_with: Combine Entries with
18 | bundle_advancedObjectSearch_combine_entries_with_must: MUST
19 | bundle_advancedObjectSearch_combine_entries_with_should: SHOULD
20 | bundle_advancedObjectSearch_group: Group
21 | bundle_advancedObjectSearch_save_success: Search saved successfully
22 | bundle_advancedObjectSearch_save_error: Error occurred during save search
23 | bundle_advancedObjectSearch_category: Category
24 | bundle_advancedObjectSearch_open_saved_searches: Open saved Searches
25 | bundle_advancedObjectSearch_new: New
26 | bundle_advancedObjectSearch_search: Open existing Saved Search
27 | bundle_advancedObjectSearch_users: Users
28 | bundle_advancedObjectSearch_owner: Owner
29 | bundle_advancedObjectSearch_save_as_copy: Save as Copy
30 | bundle_advancedObjectSearch_name_copy_suffix: (copy)
31 | bundle_advancedObjectSearch_delete_error: Error during deleting Saved Search
32 | bundle_advancedObjectSearch_delete_really: Do you really want to delete the Saved
33 | Search?
34 | bundle_advancedObjectSearch_add_to_shortcuts: Add To Short Cuts
35 | bundle_advancedObjectSearch_remove_from_shortcuts: Remove From Short Cuts
36 | bundle_advancedObjectSearch_short_cut_error: Cannot add short cut for not saved search
37 | bundle_advancedObjectSearch_ignoreInheritance: No Inheritance
38 | bundle_advancedObjectSearch_date: Date
39 | bundle_advancedObjectSearch_updating_index: Currently updating search index
40 | bundle_advancedsearch_search: Advanced Object Search
41 | bundle_advancedsearch_operator_lt: lower than
42 | bundle_advancedsearch_operator_lte: lower or equal
43 | bundle_advancedsearch_operator_gt: greater than
44 | bundle_advancedsearch_operator_gte: greater or equal
45 | bundle_advancedsearch_operator_eq: equal
46 | bundle_advancedsearch_operator_exists: exists
47 | bundle_advancedsearch_operator_not_exists: not exists
48 | bundle_advancedsearch_operator_must: must
49 | bundle_advancedsearch_operator_must_not: must not
50 | bundle_advancedsearch_operator_should: should
51 | bundle_advancedObjectSearch_roles: Roles
52 | bundle_advancedsearch_table_colum_config: Column
53 | ...
54 |
--------------------------------------------------------------------------------
/src/Resources/translations/admin.cs.yml:
--------------------------------------------------------------------------------
1 | ---
2 | bundle_advancedObjectSearch: Advanced Object Search
3 | bundle_advancedObjectSearch_field: Field
4 | bundle_advancedObjectSearch_condition: Condition
5 | bundle_advancedObjectSearch_term: Term
6 | bundle_advancedObjectSearch_operator: Operator
7 | bundle_advancedObjectSearch_language: Language
8 | bundle_advancedObjectSearch_subclass: Class
9 | bundle_advancedObjectSearch_filter: Filter
10 | bundle_advancedObjectSearch_filters: Filters
11 | bundle_advancedObjectSearch_type: Type
12 | bundle_advancedObjectSearch_ids: IDs
13 | bundle_advancedObjectSearch_results: Results
14 | bundle_advancedObjectSearch_fulltextterm: Search Term
15 | bundle_advancedObjectSearch_save_and_share: Save And Share
16 | bundle_advancedObjectSearch_share: Sharing
17 | bundle_advancedObjectSearch_combine_entries_with: Combine Entries with
18 | bundle_advancedObjectSearch_combine_entries_with_must: MUST
19 | bundle_advancedObjectSearch_combine_entries_with_should: SHOULD
20 | bundle_advancedObjectSearch_group: Group
21 | bundle_advancedObjectSearch_save_success: Search saved successfully
22 | bundle_advancedObjectSearch_save_error: Error occurred during save search
23 | bundle_advancedObjectSearch_category: Category
24 | bundle_advancedObjectSearch_open_saved_searches: Open saved Searches
25 | bundle_advancedObjectSearch_new: New
26 | bundle_advancedObjectSearch_search: Open existing Saved Search
27 | bundle_advancedObjectSearch_users: Users
28 | bundle_advancedObjectSearch_owner: Owner
29 | bundle_advancedObjectSearch_save_as_copy: Save as Copy
30 | bundle_advancedObjectSearch_name_copy_suffix: (copy)
31 | bundle_advancedObjectSearch_delete_error: Error during deleting Saved Search
32 | bundle_advancedObjectSearch_delete_really: Do you really want to delete the Saved
33 | Search?
34 | bundle_advancedObjectSearch_add_to_shortcuts: Add To Short Cuts
35 | bundle_advancedObjectSearch_remove_from_shortcuts: Remove From Short Cuts
36 | bundle_advancedObjectSearch_short_cut_error: Cannot add short cut for not saved search
37 | bundle_advancedObjectSearch_ignoreInheritance: No Inheritance
38 | bundle_advancedObjectSearch_date: Date
39 | bundle_advancedObjectSearch_updating_index: Currently updating search index
40 | bundle_advancedsearch_search: Advanced Object Search
41 | bundle_advancedsearch_operator_lt: lower than
42 | bundle_advancedsearch_operator_lte: lower or equal
43 | bundle_advancedsearch_operator_gt: greater than
44 | bundle_advancedsearch_operator_gte: greater or equal
45 | bundle_advancedsearch_operator_eq: equal
46 | bundle_advancedsearch_operator_exists: exists
47 | bundle_advancedsearch_operator_not_exists: not exists
48 | bundle_advancedsearch_operator_must: must
49 | bundle_advancedsearch_operator_must_not: must not
50 | bundle_advancedsearch_operator_should: should
51 | bundle_advancedObjectSearch_roles: Roles
52 | bundle_advancedsearch_table_colum_config: Column
53 | ...
54 |
--------------------------------------------------------------------------------
/src/Resources/translations/admin.de.yml:
--------------------------------------------------------------------------------
1 | ---
2 | bundle_advancedObjectSearch: Erweiterte Objektsuche
3 | bundle_advancedObjectSearch_field: Feld
4 | bundle_advancedObjectSearch_condition: Bedingung
5 | bundle_advancedObjectSearch_term: Wert
6 | bundle_advancedObjectSearch_operator: Operator
7 | bundle_advancedObjectSearch_language: Sprache
8 | bundle_advancedObjectSearch_subclass: Klasse
9 | bundle_advancedObjectSearch_filter: Filter
10 | bundle_advancedObjectSearch_filters: Filter
11 | bundle_advancedObjectSearch_type: Typ
12 | bundle_advancedObjectSearch_ids: IDs
13 | bundle_advancedObjectSearch_results: Ergebnisse
14 | bundle_advancedObjectSearch_fulltextterm: Suchbegriff
15 | bundle_advancedObjectSearch_save_and_share: Speichern & Teilen
16 | bundle_advancedObjectSearch_share: Teilen
17 | bundle_advancedObjectSearch_combine_entries_with: "Eintr\xE4ge kombinieren mit"
18 | bundle_advancedObjectSearch_combine_entries_with_must: MUSS
19 | bundle_advancedObjectSearch_combine_entries_with_should: SOLLTE
20 | bundle_advancedObjectSearch_group: Gruppe
21 | bundle_advancedObjectSearch_save_success: Suche gespeichert
22 | bundle_advancedObjectSearch_save_error: Fehler beim Speichern der Suche
23 | bundle_advancedObjectSearch_category: Kategorie
24 | bundle_advancedObjectSearch_open_saved_searches: "Gespeicherte Suchen \xF6ffnen"
25 | bundle_advancedObjectSearch_new: Neue Suche
26 | bundle_advancedObjectSearch_search: "Gespeicherte Suchen \xF6ffnen"
27 | bundle_advancedObjectSearch_users: Nutzer
28 | bundle_advancedObjectSearch_owner: Besitzer
29 | bundle_advancedObjectSearch_save_as_copy: Als Kopie speichern
30 | bundle_advancedObjectSearch_name_copy_suffix: (Kopie)
31 | bundle_advancedObjectSearch_delete_error: "Fehler beim l\xF6schen der gespeicherten
32 | Suche"
33 | bundle_advancedObjectSearch_delete_really: "M\xF6chten Sie die gespeicherte Suche
34 | wirklich l\xF6schen?"
35 | bundle_advancedObjectSearch_add_to_shortcuts: "Zu Schnellzugriff hinzuf\xFCgen"
36 | bundle_advancedObjectSearch_remove_from_shortcuts: Vom Schnellzugriff entfernen
37 | bundle_advancedObjectSearch_short_cut_error: "Suche kann nicht zum Schnellzugriff
38 | hinzugef\xFCgt werden. Bitte speichern Sie die Suche erst."
39 | bundle_advancedObjectSearch_ignoreInheritance: Keine Vererbung
40 | bundle_advancedObjectSearch_date: Datum
41 | bundle_advancedObjectSearch_updating_index: Suchindex wird aktualisiert
42 | bundle_advancedsearch_search: Erweiterte Objektsuche
43 | bundle_advancedsearch_operator_lt: kleiner als
44 | bundle_advancedsearch_operator_lte: kleiner gleich
45 | bundle_advancedsearch_operator_gt: "gr\xF6\xDFer als"
46 | bundle_advancedsearch_operator_gte: "gr\xF6\xDFer gleich"
47 | bundle_advancedsearch_operator_eq: gleich
48 | bundle_advancedsearch_operator_exists: existiert
49 | bundle_advancedsearch_operator_not_exists: existiert nicht
50 | bundle_advancedsearch_operator_must: muss
51 | bundle_advancedsearch_operator_must_not: darf nicht
52 | bundle_advancedsearch_operator_should: sollte
53 | bundle_advancedObjectSearch_roles: Rollen
54 | bundle_advancedsearch_table_colum_config: Spalte
55 | ...
56 |
--------------------------------------------------------------------------------
/src/Resources/translations/admin.en.yml:
--------------------------------------------------------------------------------
1 | bundle_advancedObjectSearch: Advanced Object Search
2 | bundle_advancedObjectSearch_field: Field
3 | bundle_advancedObjectSearch_condition: Condition
4 | bundle_advancedObjectSearch_term: Term
5 | bundle_advancedObjectSearch_operator: Operator
6 | bundle_advancedObjectSearch_language: Language
7 | bundle_advancedObjectSearch_subclass: Class
8 | bundle_advancedObjectSearch_filter: Filter
9 | bundle_advancedObjectSearch_filters: Filters
10 | bundle_advancedObjectSearch_type: Type
11 | bundle_advancedObjectSearch_ids: IDs
12 | bundle_advancedObjectSearch_results: Results
13 | bundle_advancedObjectSearch_fulltextterm: Search Term
14 | bundle_advancedObjectSearch_save_and_share: Save And Share
15 | bundle_advancedObjectSearch_share: Sharing
16 | bundle_advancedObjectSearch_combine_entries_with: Combine Entries with
17 | bundle_advancedObjectSearch_combine_entries_with_must: MUST
18 | bundle_advancedObjectSearch_combine_entries_with_should: SHOULD
19 | bundle_advancedObjectSearch_group: Group
20 | bundle_advancedObjectSearch_save_success: Search saved successfully
21 | bundle_advancedObjectSearch_save_error: Error occurred during save search
22 | bundle_advancedObjectSearch_category: Category
23 | bundle_advancedObjectSearch_open_saved_searches: Open saved Searches
24 | bundle_advancedObjectSearch_new: New
25 | bundle_advancedObjectSearch_search: Open existing Saved Search
26 | bundle_advancedObjectSearch_users: Users
27 | bundle_advancedObjectSearch_owner: Owner
28 | bundle_advancedObjectSearch_save_as_copy: Save as Copy
29 | bundle_advancedObjectSearch_name_copy_suffix: (copy)
30 | bundle_advancedObjectSearch_delete_error: Error during deleting Saved Search
31 | bundle_advancedObjectSearch_delete_really: Do you really want to delete the Saved Search?
32 | bundle_advancedObjectSearch_add_to_shortcuts: Add To Short Cuts
33 | bundle_advancedObjectSearch_remove_from_shortcuts: Remove From Short Cuts
34 | bundle_advancedObjectSearch_short_cut_error: Cannot add short cut for not saved search
35 | bundle_advancedObjectSearch_ignoreInheritance: No Inheritance
36 | bundle_advancedObjectSearch_date: Date
37 | bundle_advancedObjectSearch_updating_index: Currently updating search index
38 | bundle_advancedsearch_search: Advanced Object Search
39 | bundle_advancedsearch_operator_lt: lower than
40 | bundle_advancedsearch_operator_lte: lower or equal
41 | bundle_advancedsearch_operator_gt: greater than
42 | bundle_advancedsearch_operator_gte: greater or equal
43 | bundle_advancedsearch_operator_eq: equal
44 | bundle_advancedsearch_operator_exists: exists
45 | bundle_advancedsearch_operator_not_exists: not exists
46 | bundle_advancedsearch_operator_must: must
47 | bundle_advancedsearch_operator_must_not: must not
48 | bundle_advancedsearch_operator_should: should
49 | bundle_advancedObjectSearch_roles: Roles
50 | bundle_advancedsearch_table_colum_config: Column
51 |
--------------------------------------------------------------------------------
/src/Resources/translations/admin.es.yml:
--------------------------------------------------------------------------------
1 | ---
2 | bundle_advancedObjectSearch: Advanced Object Search
3 | bundle_advancedObjectSearch_field: Field
4 | bundle_advancedObjectSearch_condition: Condition
5 | bundle_advancedObjectSearch_term: Term
6 | bundle_advancedObjectSearch_operator: Operator
7 | bundle_advancedObjectSearch_language: Language
8 | bundle_advancedObjectSearch_subclass: Class
9 | bundle_advancedObjectSearch_filter: Filter
10 | bundle_advancedObjectSearch_filters: Filters
11 | bundle_advancedObjectSearch_type: Type
12 | bundle_advancedObjectSearch_ids: IDs
13 | bundle_advancedObjectSearch_results: Results
14 | bundle_advancedObjectSearch_fulltextterm: Search Term
15 | bundle_advancedObjectSearch_save_and_share: Save And Share
16 | bundle_advancedObjectSearch_share: Sharing
17 | bundle_advancedObjectSearch_combine_entries_with: Combine Entries with
18 | bundle_advancedObjectSearch_combine_entries_with_must: MUST
19 | bundle_advancedObjectSearch_combine_entries_with_should: SHOULD
20 | bundle_advancedObjectSearch_group: Group
21 | bundle_advancedObjectSearch_save_success: Search saved successfully
22 | bundle_advancedObjectSearch_save_error: Error occurred during save search
23 | bundle_advancedObjectSearch_category: Category
24 | bundle_advancedObjectSearch_open_saved_searches: Open saved Searches
25 | bundle_advancedObjectSearch_new: New
26 | bundle_advancedObjectSearch_search: Open existing Saved Search
27 | bundle_advancedObjectSearch_users: Users
28 | bundle_advancedObjectSearch_owner: Owner
29 | bundle_advancedObjectSearch_save_as_copy: Save as Copy
30 | bundle_advancedObjectSearch_name_copy_suffix: (copy)
31 | bundle_advancedObjectSearch_delete_error: Error during deleting Saved Search
32 | bundle_advancedObjectSearch_delete_really: Do you really want to delete the Saved
33 | Search?
34 | bundle_advancedObjectSearch_add_to_shortcuts: Add To Short Cuts
35 | bundle_advancedObjectSearch_remove_from_shortcuts: Remove From Short Cuts
36 | bundle_advancedObjectSearch_short_cut_error: Cannot add short cut for not saved search
37 | bundle_advancedObjectSearch_ignoreInheritance: No Inheritance
38 | bundle_advancedObjectSearch_date: Date
39 | bundle_advancedObjectSearch_updating_index: Currently updating search index
40 | bundle_advancedsearch_search: Advanced Object Search
41 | bundle_advancedsearch_operator_lt: lower than
42 | bundle_advancedsearch_operator_lte: lower or equal
43 | bundle_advancedsearch_operator_gt: greater than
44 | bundle_advancedsearch_operator_gte: greater or equal
45 | bundle_advancedsearch_operator_eq: equal
46 | bundle_advancedsearch_operator_exists: exists
47 | bundle_advancedsearch_operator_not_exists: not exists
48 | bundle_advancedsearch_operator_must: must
49 | bundle_advancedsearch_operator_must_not: must not
50 | bundle_advancedsearch_operator_should: should
51 | bundle_advancedObjectSearch_roles: Roles
52 | bundle_advancedsearch_table_colum_config: Column
53 | ...
54 |
--------------------------------------------------------------------------------
/src/Resources/translations/admin.fr.yml:
--------------------------------------------------------------------------------
1 | ---
2 | bundle_advancedObjectSearch: Advanced Object Search
3 | bundle_advancedObjectSearch_field: Champ
4 | bundle_advancedObjectSearch_condition: Condition
5 | bundle_advancedObjectSearch_term: Term
6 | bundle_advancedObjectSearch_operator: Operator
7 | bundle_advancedObjectSearch_language: Language
8 | bundle_advancedObjectSearch_subclass: Class
9 | bundle_advancedObjectSearch_filter: Filter
10 | bundle_advancedObjectSearch_filters: Filters
11 | bundle_advancedObjectSearch_type: Type
12 | bundle_advancedObjectSearch_ids: IDs
13 | bundle_advancedObjectSearch_results: Results
14 | bundle_advancedObjectSearch_fulltextterm: Search Term
15 | bundle_advancedObjectSearch_save_and_share: Save And Share
16 | bundle_advancedObjectSearch_share: Sharing
17 | bundle_advancedObjectSearch_combine_entries_with: Combine Entries with
18 | bundle_advancedObjectSearch_combine_entries_with_must: MUST
19 | bundle_advancedObjectSearch_combine_entries_with_should: SHOULD
20 | bundle_advancedObjectSearch_group: Group
21 | bundle_advancedObjectSearch_save_success: Search saved successfully
22 | bundle_advancedObjectSearch_save_error: Error occurred during save search
23 | bundle_advancedObjectSearch_category: Category
24 | bundle_advancedObjectSearch_open_saved_searches: Open saved Searches
25 | bundle_advancedObjectSearch_new: Nouveau
26 | bundle_advancedObjectSearch_search: Open existing Saved Search
27 | bundle_advancedObjectSearch_users: Utilisateurs
28 | bundle_advancedObjectSearch_owner: Owner
29 | bundle_advancedObjectSearch_save_as_copy: Sauvegarder une copie
30 | bundle_advancedObjectSearch_name_copy_suffix: (copie)
31 | bundle_advancedObjectSearch_delete_error: Error during deleting Saved Search
32 | bundle_advancedObjectSearch_delete_really: Do you really want to delete the Saved
33 | Search?
34 | bundle_advancedObjectSearch_add_to_shortcuts: Add To Short Cuts
35 | bundle_advancedObjectSearch_remove_from_shortcuts: Remove From Short Cuts
36 | bundle_advancedObjectSearch_short_cut_error: Cannot add short cut for not saved search
37 | bundle_advancedObjectSearch_ignoreInheritance: No Inheritance
38 | bundle_advancedObjectSearch_date: Date
39 | bundle_advancedObjectSearch_updating_index: Currently updating search index
40 | bundle_advancedsearch_search: Advanced Object Search
41 | bundle_advancedsearch_operator_lt: lower than
42 | bundle_advancedsearch_operator_lte: lower or equal
43 | bundle_advancedsearch_operator_gt: greater than
44 | bundle_advancedsearch_operator_gte: greater or equal
45 | bundle_advancedsearch_operator_eq: equal
46 | bundle_advancedsearch_operator_exists: exists
47 | bundle_advancedsearch_operator_not_exists: not exists
48 | bundle_advancedsearch_operator_must: must
49 | bundle_advancedsearch_operator_must_not: must not
50 | bundle_advancedsearch_operator_should: should
51 | bundle_advancedObjectSearch_roles: "R\xF4les"
52 | bundle_advancedsearch_table_colum_config: Colonne
53 | ...
54 |
--------------------------------------------------------------------------------
/src/Resources/translations/admin.hu.yml:
--------------------------------------------------------------------------------
1 | ---
2 | bundle_advancedObjectSearch: Advanced Object Search
3 | bundle_advancedObjectSearch_field: Field
4 | bundle_advancedObjectSearch_condition: Condition
5 | bundle_advancedObjectSearch_term: Term
6 | bundle_advancedObjectSearch_operator: Operator
7 | bundle_advancedObjectSearch_language: Language
8 | bundle_advancedObjectSearch_subclass: Class
9 | bundle_advancedObjectSearch_filter: Filter
10 | bundle_advancedObjectSearch_filters: Filters
11 | bundle_advancedObjectSearch_type: Type
12 | bundle_advancedObjectSearch_ids: IDs
13 | bundle_advancedObjectSearch_results: Results
14 | bundle_advancedObjectSearch_fulltextterm: Search Term
15 | bundle_advancedObjectSearch_save_and_share: Save And Share
16 | bundle_advancedObjectSearch_share: Sharing
17 | bundle_advancedObjectSearch_combine_entries_with: Combine Entries with
18 | bundle_advancedObjectSearch_combine_entries_with_must: MUST
19 | bundle_advancedObjectSearch_combine_entries_with_should: SHOULD
20 | bundle_advancedObjectSearch_group: Group
21 | bundle_advancedObjectSearch_save_success: Search saved successfully
22 | bundle_advancedObjectSearch_save_error: Error occurred during save search
23 | bundle_advancedObjectSearch_category: Category
24 | bundle_advancedObjectSearch_open_saved_searches: Open saved Searches
25 | bundle_advancedObjectSearch_new: New
26 | bundle_advancedObjectSearch_search: Open existing Saved Search
27 | bundle_advancedObjectSearch_users: Users
28 | bundle_advancedObjectSearch_owner: Owner
29 | bundle_advancedObjectSearch_save_as_copy: Save as Copy
30 | bundle_advancedObjectSearch_name_copy_suffix: (copy)
31 | bundle_advancedObjectSearch_delete_error: Error during deleting Saved Search
32 | bundle_advancedObjectSearch_delete_really: Do you really want to delete the Saved
33 | Search?
34 | bundle_advancedObjectSearch_add_to_shortcuts: Add To Short Cuts
35 | bundle_advancedObjectSearch_remove_from_shortcuts: Remove From Short Cuts
36 | bundle_advancedObjectSearch_short_cut_error: Cannot add short cut for not saved search
37 | bundle_advancedObjectSearch_ignoreInheritance: No Inheritance
38 | bundle_advancedObjectSearch_date: Date
39 | bundle_advancedObjectSearch_updating_index: Currently updating search index
40 | bundle_advancedsearch_search: Advanced Object Search
41 | bundle_advancedsearch_operator_lt: lower than
42 | bundle_advancedsearch_operator_lte: lower or equal
43 | bundle_advancedsearch_operator_gt: greater than
44 | bundle_advancedsearch_operator_gte: greater or equal
45 | bundle_advancedsearch_operator_eq: equal
46 | bundle_advancedsearch_operator_exists: exists
47 | bundle_advancedsearch_operator_not_exists: not exists
48 | bundle_advancedsearch_operator_must: must
49 | bundle_advancedsearch_operator_must_not: must not
50 | bundle_advancedsearch_operator_should: should
51 | bundle_advancedObjectSearch_roles: Roles
52 | bundle_advancedsearch_table_colum_config: Column
53 | ...
54 |
--------------------------------------------------------------------------------
/src/Resources/translations/admin.it.yml:
--------------------------------------------------------------------------------
1 | ---
2 | bundle_advancedObjectSearch: Advanced Object Search
3 | bundle_advancedObjectSearch_field: Field
4 | bundle_advancedObjectSearch_condition: Condition
5 | bundle_advancedObjectSearch_term: Term
6 | bundle_advancedObjectSearch_operator: Operator
7 | bundle_advancedObjectSearch_language: Language
8 | bundle_advancedObjectSearch_subclass: Class
9 | bundle_advancedObjectSearch_filter: Filter
10 | bundle_advancedObjectSearch_filters: Filters
11 | bundle_advancedObjectSearch_type: Type
12 | bundle_advancedObjectSearch_ids: IDs
13 | bundle_advancedObjectSearch_results: Results
14 | bundle_advancedObjectSearch_fulltextterm: Search Term
15 | bundle_advancedObjectSearch_save_and_share: Save And Share
16 | bundle_advancedObjectSearch_share: Sharing
17 | bundle_advancedObjectSearch_combine_entries_with: Combine Entries with
18 | bundle_advancedObjectSearch_combine_entries_with_must: MUST
19 | bundle_advancedObjectSearch_combine_entries_with_should: SHOULD
20 | bundle_advancedObjectSearch_group: Group
21 | bundle_advancedObjectSearch_save_success: Search saved successfully
22 | bundle_advancedObjectSearch_save_error: Error occurred during save search
23 | bundle_advancedObjectSearch_category: Category
24 | bundle_advancedObjectSearch_open_saved_searches: Open saved Searches
25 | bundle_advancedObjectSearch_new: New
26 | bundle_advancedObjectSearch_search: Open existing Saved Search
27 | bundle_advancedObjectSearch_users: Users
28 | bundle_advancedObjectSearch_owner: Owner
29 | bundle_advancedObjectSearch_save_as_copy: Save as Copy
30 | bundle_advancedObjectSearch_name_copy_suffix: (copy)
31 | bundle_advancedObjectSearch_delete_error: Error during deleting Saved Search
32 | bundle_advancedObjectSearch_delete_really: Do you really want to delete the Saved
33 | Search?
34 | bundle_advancedObjectSearch_add_to_shortcuts: Add To Short Cuts
35 | bundle_advancedObjectSearch_remove_from_shortcuts: Remove From Short Cuts
36 | bundle_advancedObjectSearch_short_cut_error: Cannot add short cut for not saved search
37 | bundle_advancedObjectSearch_ignoreInheritance: No Inheritance
38 | bundle_advancedObjectSearch_date: Date
39 | bundle_advancedObjectSearch_updating_index: Currently updating search index
40 | bundle_advancedsearch_search: Advanced Object Search
41 | bundle_advancedsearch_operator_lt: lower than
42 | bundle_advancedsearch_operator_lte: lower or equal
43 | bundle_advancedsearch_operator_gt: greater than
44 | bundle_advancedsearch_operator_gte: greater or equal
45 | bundle_advancedsearch_operator_eq: equal
46 | bundle_advancedsearch_operator_exists: exists
47 | bundle_advancedsearch_operator_not_exists: not exists
48 | bundle_advancedsearch_operator_must: must
49 | bundle_advancedsearch_operator_must_not: must not
50 | bundle_advancedsearch_operator_should: should
51 | bundle_advancedObjectSearch_roles: Roles
52 | bundle_advancedsearch_table_colum_config: Column
53 | ...
54 |
--------------------------------------------------------------------------------
/src/Resources/translations/admin.nl.yml:
--------------------------------------------------------------------------------
1 | ---
2 | bundle_advancedObjectSearch: Advanced Object Search
3 | bundle_advancedObjectSearch_field: Field
4 | bundle_advancedObjectSearch_condition: Condition
5 | bundle_advancedObjectSearch_term: Term
6 | bundle_advancedObjectSearch_operator: Operator
7 | bundle_advancedObjectSearch_language: Language
8 | bundle_advancedObjectSearch_subclass: Class
9 | bundle_advancedObjectSearch_filter: Filter
10 | bundle_advancedObjectSearch_filters: Filters
11 | bundle_advancedObjectSearch_type: Type
12 | bundle_advancedObjectSearch_ids: IDs
13 | bundle_advancedObjectSearch_results: Results
14 | bundle_advancedObjectSearch_fulltextterm: Search Term
15 | bundle_advancedObjectSearch_save_and_share: Save And Share
16 | bundle_advancedObjectSearch_share: Sharing
17 | bundle_advancedObjectSearch_combine_entries_with: Combine Entries with
18 | bundle_advancedObjectSearch_combine_entries_with_must: MUST
19 | bundle_advancedObjectSearch_combine_entries_with_should: SHOULD
20 | bundle_advancedObjectSearch_group: Group
21 | bundle_advancedObjectSearch_save_success: Search saved successfully
22 | bundle_advancedObjectSearch_save_error: Error occurred during save search
23 | bundle_advancedObjectSearch_category: Category
24 | bundle_advancedObjectSearch_open_saved_searches: Open saved Searches
25 | bundle_advancedObjectSearch_new: New
26 | bundle_advancedObjectSearch_search: Open existing Saved Search
27 | bundle_advancedObjectSearch_users: Users
28 | bundle_advancedObjectSearch_owner: Owner
29 | bundle_advancedObjectSearch_save_as_copy: Save as Copy
30 | bundle_advancedObjectSearch_name_copy_suffix: (copy)
31 | bundle_advancedObjectSearch_delete_error: Error during deleting Saved Search
32 | bundle_advancedObjectSearch_delete_really: Do you really want to delete the Saved
33 | Search?
34 | bundle_advancedObjectSearch_add_to_shortcuts: Add To Short Cuts
35 | bundle_advancedObjectSearch_remove_from_shortcuts: Remove From Short Cuts
36 | bundle_advancedObjectSearch_short_cut_error: Cannot add short cut for not saved search
37 | bundle_advancedObjectSearch_ignoreInheritance: No Inheritance
38 | bundle_advancedObjectSearch_date: Date
39 | bundle_advancedObjectSearch_updating_index: Currently updating search index
40 | bundle_advancedsearch_search: Advanced Object Search
41 | bundle_advancedsearch_operator_lt: lower than
42 | bundle_advancedsearch_operator_lte: lower or equal
43 | bundle_advancedsearch_operator_gt: greater than
44 | bundle_advancedsearch_operator_gte: greater or equal
45 | bundle_advancedsearch_operator_eq: equal
46 | bundle_advancedsearch_operator_exists: exists
47 | bundle_advancedsearch_operator_not_exists: not exists
48 | bundle_advancedsearch_operator_must: must
49 | bundle_advancedsearch_operator_must_not: must not
50 | bundle_advancedsearch_operator_should: should
51 | bundle_advancedObjectSearch_roles: Roles
52 | bundle_advancedsearch_table_colum_config: Column
53 | ...
54 |
--------------------------------------------------------------------------------
/src/Resources/translations/admin.pl.yml:
--------------------------------------------------------------------------------
1 | ---
2 | bundle_advancedObjectSearch: "Zaawansowane wyszukiwanie obiekt\xF3w"
3 | bundle_advancedObjectSearch_field: Pole
4 | bundle_advancedObjectSearch_condition: Warunek
5 | bundle_advancedObjectSearch_term: Fraza
6 | bundle_advancedObjectSearch_operator: Operator
7 | bundle_advancedObjectSearch_language: "J\u0119zyk"
8 | bundle_advancedObjectSearch_subclass: Podklasa
9 | bundle_advancedObjectSearch_filter: Filtr
10 | bundle_advancedObjectSearch_filters: Filtry
11 | bundle_advancedObjectSearch_type: Typ
12 | bundle_advancedObjectSearch_ids: IDs
13 | bundle_advancedObjectSearch_results: Wyniki
14 | bundle_advancedObjectSearch_fulltextterm: Fraza Wyszukiwania
15 | bundle_advancedObjectSearch_save_and_share: "Zapisz i Udost\u0119pnij"
16 | bundle_advancedObjectSearch_share: "Udost\u0119pnianie"
17 | bundle_advancedObjectSearch_combine_entries_with: Combine Entries with
18 | bundle_advancedObjectSearch_combine_entries_with_must: MUSI
19 | bundle_advancedObjectSearch_combine_entries_with_should: POWINIEN
20 | bundle_advancedObjectSearch_group: Grupa
21 | bundle_advancedObjectSearch_save_success: Konfiguracja zapisana poprawnie
22 | bundle_advancedObjectSearch_save_error: "Wyst\u0105pi\u0142 b\u0142\u0105d podczas
23 | zapisu konfiguracji"
24 | bundle_advancedObjectSearch_category: Kategoria
25 | bundle_advancedObjectSearch_open_saved_searches: "Otw\xF3rz zapisan\u0105 konfiguracj\u0119"
26 | bundle_advancedObjectSearch_new: Nowe
27 | bundle_advancedObjectSearch_search: "Otw\xF3rz istniej\u0105c\u0105 konfiguracj\u0119"
28 | bundle_advancedObjectSearch_users: "U\u017Cytkownicy"
29 | bundle_advancedObjectSearch_owner: "W\u0142a\u015Bciciel"
30 | bundle_advancedObjectSearch_save_as_copy: Zapisz jako kopia
31 | bundle_advancedObjectSearch_name_copy_suffix: (kopia)
32 | bundle_advancedObjectSearch_delete_error: "Wyst\u0105pi\u0142 b\u0142\u0105d podczas
33 | usuwania konfiguracji"
34 | bundle_advancedObjectSearch_delete_really: "Czy na pewno chcesz usun\u0105\u0107 konfiguracj\u0119?"
35 | bundle_advancedObjectSearch_add_to_shortcuts: "Dodaj skr\xF3t"
36 | bundle_advancedObjectSearch_remove_from_shortcuts: "Usu\u0144 skr\xF3t"
37 | bundle_advancedObjectSearch_short_cut_error: "Nie mo\u017Cna doda\u0107 skr\xF3tu
38 | dla nie zapisanej konfiguracji"
39 | bundle_advancedObjectSearch_ignoreInheritance: Bez dziedziczenia
40 | bundle_advancedObjectSearch_date: Data
41 | bundle_advancedObjectSearch_updating_index: Aktualizacja indeksu wyszukiwarki w trakcie
42 | bundle_advancedsearch_search: "Zaawansowane wyszukiwanie obiekt\xF3w"
43 | bundle_advancedsearch_operator_lt: mniejszy od
44 | bundle_advancedsearch_operator_lte: "mniejszy lub r\xF3wny"
45 | bundle_advancedsearch_operator_gt: "wi\u0119kszy od"
46 | bundle_advancedsearch_operator_gte: "wi\u0119kszy lub r\xF3wny"
47 | bundle_advancedsearch_operator_eq: "r\xF3wny"
48 | bundle_advancedsearch_operator_exists: istnieje
49 | bundle_advancedsearch_operator_not_exists: nie istnieje
50 | bundle_advancedsearch_operator_must: musi
51 | bundle_advancedsearch_operator_must_not: nie musi
52 | bundle_advancedsearch_operator_should: powinien
53 | bundle_advancedObjectSearch_roles: Role
54 | bundle_advancedsearch_table_colum_config: Column
55 | ...
56 |
--------------------------------------------------------------------------------
/src/Resources/translations/admin.pt_br.yml:
--------------------------------------------------------------------------------
1 | ---
2 | bundle_advancedObjectSearch: Advanced Object Search
3 | bundle_advancedObjectSearch_field: Field
4 | bundle_advancedObjectSearch_condition: Condition
5 | bundle_advancedObjectSearch_term: Term
6 | bundle_advancedObjectSearch_operator: Operator
7 | bundle_advancedObjectSearch_language: Language
8 | bundle_advancedObjectSearch_subclass: Class
9 | bundle_advancedObjectSearch_filter: Filter
10 | bundle_advancedObjectSearch_filters: Filters
11 | bundle_advancedObjectSearch_type: Type
12 | bundle_advancedObjectSearch_ids: IDs
13 | bundle_advancedObjectSearch_results: Results
14 | bundle_advancedObjectSearch_fulltextterm: Search Term
15 | bundle_advancedObjectSearch_save_and_share: Save And Share
16 | bundle_advancedObjectSearch_share: Sharing
17 | bundle_advancedObjectSearch_combine_entries_with: Combine Entries with
18 | bundle_advancedObjectSearch_combine_entries_with_must: MUST
19 | bundle_advancedObjectSearch_combine_entries_with_should: SHOULD
20 | bundle_advancedObjectSearch_group: Group
21 | bundle_advancedObjectSearch_save_success: Search saved successfully
22 | bundle_advancedObjectSearch_save_error: Error occurred during save search
23 | bundle_advancedObjectSearch_category: Category
24 | bundle_advancedObjectSearch_open_saved_searches: Open saved Searches
25 | bundle_advancedObjectSearch_new: New
26 | bundle_advancedObjectSearch_search: Open existing Saved Search
27 | bundle_advancedObjectSearch_users: Users
28 | bundle_advancedObjectSearch_owner: Owner
29 | bundle_advancedObjectSearch_save_as_copy: Save as Copy
30 | bundle_advancedObjectSearch_name_copy_suffix: (copy)
31 | bundle_advancedObjectSearch_delete_error: Error during deleting Saved Search
32 | bundle_advancedObjectSearch_delete_really: Do you really want to delete the Saved
33 | Search?
34 | bundle_advancedObjectSearch_add_to_shortcuts: Add To Short Cuts
35 | bundle_advancedObjectSearch_remove_from_shortcuts: Remove From Short Cuts
36 | bundle_advancedObjectSearch_short_cut_error: Cannot add short cut for not saved search
37 | bundle_advancedObjectSearch_ignoreInheritance: No Inheritance
38 | bundle_advancedObjectSearch_date: Date
39 | bundle_advancedObjectSearch_updating_index: Currently updating search index
40 | bundle_advancedsearch_search: Advanced Object Search
41 | bundle_advancedsearch_operator_lt: lower than
42 | bundle_advancedsearch_operator_lte: lower or equal
43 | bundle_advancedsearch_operator_gt: greater than
44 | bundle_advancedsearch_operator_gte: greater or equal
45 | bundle_advancedsearch_operator_eq: equal
46 | bundle_advancedsearch_operator_exists: exists
47 | bundle_advancedsearch_operator_not_exists: not exists
48 | bundle_advancedsearch_operator_must: must
49 | bundle_advancedsearch_operator_must_not: must not
50 | bundle_advancedsearch_operator_should: should
51 | bundle_advancedObjectSearch_roles: Roles
52 | bundle_advancedsearch_table_colum_config: Column
53 | ...
54 |
--------------------------------------------------------------------------------
/src/Resources/translations/admin.ro.yml:
--------------------------------------------------------------------------------
1 | ---
2 | bundle_advancedObjectSearch: Advanced Object Search
3 | bundle_advancedObjectSearch_field: Field
4 | bundle_advancedObjectSearch_condition: Condition
5 | bundle_advancedObjectSearch_term: Term
6 | bundle_advancedObjectSearch_operator: Operator
7 | bundle_advancedObjectSearch_language: Language
8 | bundle_advancedObjectSearch_subclass: Class
9 | bundle_advancedObjectSearch_filter: Filter
10 | bundle_advancedObjectSearch_filters: Filters
11 | bundle_advancedObjectSearch_type: Type
12 | bundle_advancedObjectSearch_ids: IDs
13 | bundle_advancedObjectSearch_results: Results
14 | bundle_advancedObjectSearch_fulltextterm: Search Term
15 | bundle_advancedObjectSearch_save_and_share: Save And Share
16 | bundle_advancedObjectSearch_share: Sharing
17 | bundle_advancedObjectSearch_combine_entries_with: Combine Entries with
18 | bundle_advancedObjectSearch_combine_entries_with_must: MUST
19 | bundle_advancedObjectSearch_combine_entries_with_should: SHOULD
20 | bundle_advancedObjectSearch_group: Group
21 | bundle_advancedObjectSearch_save_success: Search saved successfully
22 | bundle_advancedObjectSearch_save_error: Error occurred during save search
23 | bundle_advancedObjectSearch_category: Category
24 | bundle_advancedObjectSearch_open_saved_searches: Open saved Searches
25 | bundle_advancedObjectSearch_new: New
26 | bundle_advancedObjectSearch_search: Open existing Saved Search
27 | bundle_advancedObjectSearch_users: Users
28 | bundle_advancedObjectSearch_owner: Owner
29 | bundle_advancedObjectSearch_save_as_copy: Save as Copy
30 | bundle_advancedObjectSearch_name_copy_suffix: (copy)
31 | bundle_advancedObjectSearch_delete_error: Error during deleting Saved Search
32 | bundle_advancedObjectSearch_delete_really: Do you really want to delete the Saved
33 | Search?
34 | bundle_advancedObjectSearch_add_to_shortcuts: Add To Short Cuts
35 | bundle_advancedObjectSearch_remove_from_shortcuts: Remove From Short Cuts
36 | bundle_advancedObjectSearch_short_cut_error: Cannot add short cut for not saved search
37 | bundle_advancedObjectSearch_ignoreInheritance: No Inheritance
38 | bundle_advancedObjectSearch_date: Date
39 | bundle_advancedObjectSearch_updating_index: Currently updating search index
40 | bundle_advancedsearch_search: Advanced Object Search
41 | bundle_advancedsearch_operator_lt: lower than
42 | bundle_advancedsearch_operator_lte: lower or equal
43 | bundle_advancedsearch_operator_gt: greater than
44 | bundle_advancedsearch_operator_gte: greater or equal
45 | bundle_advancedsearch_operator_eq: equal
46 | bundle_advancedsearch_operator_exists: exists
47 | bundle_advancedsearch_operator_not_exists: not exists
48 | bundle_advancedsearch_operator_must: must
49 | bundle_advancedsearch_operator_must_not: must not
50 | bundle_advancedsearch_operator_should: should
51 | bundle_advancedObjectSearch_roles: Roles
52 | bundle_advancedsearch_table_colum_config: Column
53 | ...
54 |
--------------------------------------------------------------------------------
/src/Resources/translations/admin.sk.yml:
--------------------------------------------------------------------------------
1 | ---
2 | bundle_advancedObjectSearch: Advanced Object Search
3 | bundle_advancedObjectSearch_field: Field
4 | bundle_advancedObjectSearch_condition: Condition
5 | bundle_advancedObjectSearch_term: Term
6 | bundle_advancedObjectSearch_operator: Operator
7 | bundle_advancedObjectSearch_language: Language
8 | bundle_advancedObjectSearch_subclass: Class
9 | bundle_advancedObjectSearch_filter: Filter
10 | bundle_advancedObjectSearch_filters: Filters
11 | bundle_advancedObjectSearch_type: Type
12 | bundle_advancedObjectSearch_ids: IDs
13 | bundle_advancedObjectSearch_results: Results
14 | bundle_advancedObjectSearch_fulltextterm: Search Term
15 | bundle_advancedObjectSearch_save_and_share: Save And Share
16 | bundle_advancedObjectSearch_share: Sharing
17 | bundle_advancedObjectSearch_combine_entries_with: Combine Entries with
18 | bundle_advancedObjectSearch_combine_entries_with_must: MUST
19 | bundle_advancedObjectSearch_combine_entries_with_should: SHOULD
20 | bundle_advancedObjectSearch_group: Group
21 | bundle_advancedObjectSearch_save_success: Search saved successfully
22 | bundle_advancedObjectSearch_save_error: Error occurred during save search
23 | bundle_advancedObjectSearch_category: Category
24 | bundle_advancedObjectSearch_open_saved_searches: Open saved Searches
25 | bundle_advancedObjectSearch_new: New
26 | bundle_advancedObjectSearch_search: Open existing Saved Search
27 | bundle_advancedObjectSearch_users: Users
28 | bundle_advancedObjectSearch_owner: Owner
29 | bundle_advancedObjectSearch_save_as_copy: Save as Copy
30 | bundle_advancedObjectSearch_name_copy_suffix: (copy)
31 | bundle_advancedObjectSearch_delete_error: Error during deleting Saved Search
32 | bundle_advancedObjectSearch_delete_really: Do you really want to delete the Saved
33 | Search?
34 | bundle_advancedObjectSearch_add_to_shortcuts: Add To Short Cuts
35 | bundle_advancedObjectSearch_remove_from_shortcuts: Remove From Short Cuts
36 | bundle_advancedObjectSearch_short_cut_error: Cannot add short cut for not saved search
37 | bundle_advancedObjectSearch_ignoreInheritance: No Inheritance
38 | bundle_advancedObjectSearch_date: Date
39 | bundle_advancedObjectSearch_updating_index: Currently updating search index
40 | bundle_advancedsearch_search: Advanced Object Search
41 | bundle_advancedsearch_operator_lt: lower than
42 | bundle_advancedsearch_operator_lte: lower or equal
43 | bundle_advancedsearch_operator_gt: greater than
44 | bundle_advancedsearch_operator_gte: greater or equal
45 | bundle_advancedsearch_operator_eq: equal
46 | bundle_advancedsearch_operator_exists: exists
47 | bundle_advancedsearch_operator_not_exists: not exists
48 | bundle_advancedsearch_operator_must: must
49 | bundle_advancedsearch_operator_must_not: must not
50 | bundle_advancedsearch_operator_should: should
51 | bundle_advancedObjectSearch_roles: Roles
52 | bundle_advancedsearch_table_colum_config: Column
53 | ...
54 |
--------------------------------------------------------------------------------
/src/Resources/translations/admin.sv.yml:
--------------------------------------------------------------------------------
1 | ---
2 | bundle_advancedObjectSearch: Advanced Object Search
3 | bundle_advancedObjectSearch_field: Field
4 | bundle_advancedObjectSearch_condition: Condition
5 | bundle_advancedObjectSearch_term: Term
6 | bundle_advancedObjectSearch_operator: Operator
7 | bundle_advancedObjectSearch_language: Language
8 | bundle_advancedObjectSearch_subclass: Class
9 | bundle_advancedObjectSearch_filter: Filter
10 | bundle_advancedObjectSearch_filters: Filters
11 | bundle_advancedObjectSearch_type: Type
12 | bundle_advancedObjectSearch_ids: IDs
13 | bundle_advancedObjectSearch_results: Results
14 | bundle_advancedObjectSearch_fulltextterm: Search Term
15 | bundle_advancedObjectSearch_save_and_share: Save And Share
16 | bundle_advancedObjectSearch_share: Sharing
17 | bundle_advancedObjectSearch_combine_entries_with: Combine Entries with
18 | bundle_advancedObjectSearch_combine_entries_with_must: MUST
19 | bundle_advancedObjectSearch_combine_entries_with_should: SHOULD
20 | bundle_advancedObjectSearch_group: Group
21 | bundle_advancedObjectSearch_save_success: Search saved successfully
22 | bundle_advancedObjectSearch_save_error: Error occurred during save search
23 | bundle_advancedObjectSearch_category: Category
24 | bundle_advancedObjectSearch_open_saved_searches: Open saved Searches
25 | bundle_advancedObjectSearch_new: New
26 | bundle_advancedObjectSearch_search: Open existing Saved Search
27 | bundle_advancedObjectSearch_users: Users
28 | bundle_advancedObjectSearch_owner: Owner
29 | bundle_advancedObjectSearch_save_as_copy: Save as Copy
30 | bundle_advancedObjectSearch_name_copy_suffix: (copy)
31 | bundle_advancedObjectSearch_delete_error: Error during deleting Saved Search
32 | bundle_advancedObjectSearch_delete_really: Do you really want to delete the Saved
33 | Search?
34 | bundle_advancedObjectSearch_add_to_shortcuts: Add To Short Cuts
35 | bundle_advancedObjectSearch_remove_from_shortcuts: Remove From Short Cuts
36 | bundle_advancedObjectSearch_short_cut_error: Cannot add short cut for not saved search
37 | bundle_advancedObjectSearch_ignoreInheritance: No Inheritance
38 | bundle_advancedObjectSearch_date: Date
39 | bundle_advancedObjectSearch_updating_index: Currently updating search index
40 | bundle_advancedsearch_search: Advanced Object Search
41 | bundle_advancedsearch_operator_lt: lower than
42 | bundle_advancedsearch_operator_lte: lower or equal
43 | bundle_advancedsearch_operator_gt: greater than
44 | bundle_advancedsearch_operator_gte: greater or equal
45 | bundle_advancedsearch_operator_eq: equal
46 | bundle_advancedsearch_operator_exists: exists
47 | bundle_advancedsearch_operator_not_exists: not exists
48 | bundle_advancedsearch_operator_must: must
49 | bundle_advancedsearch_operator_must_not: must not
50 | bundle_advancedsearch_operator_should: should
51 | bundle_advancedObjectSearch_roles: Roles
52 | bundle_advancedsearch_table_colum_config: Column
53 | ...
54 |
--------------------------------------------------------------------------------
/src/Resources/translations/admin.th.yml:
--------------------------------------------------------------------------------
1 | ---
2 | bundle_advancedObjectSearch: Advanced Object Search
3 | bundle_advancedObjectSearch_field: Field
4 | bundle_advancedObjectSearch_condition: Condition
5 | bundle_advancedObjectSearch_term: Term
6 | bundle_advancedObjectSearch_operator: Operator
7 | bundle_advancedObjectSearch_language: Language
8 | bundle_advancedObjectSearch_subclass: Class
9 | bundle_advancedObjectSearch_filter: Filter
10 | bundle_advancedObjectSearch_filters: Filters
11 | bundle_advancedObjectSearch_type: Type
12 | bundle_advancedObjectSearch_ids: IDs
13 | bundle_advancedObjectSearch_results: Results
14 | bundle_advancedObjectSearch_fulltextterm: Search Term
15 | bundle_advancedObjectSearch_save_and_share: Save And Share
16 | bundle_advancedObjectSearch_share: Sharing
17 | bundle_advancedObjectSearch_combine_entries_with: Combine Entries with
18 | bundle_advancedObjectSearch_combine_entries_with_must: MUST
19 | bundle_advancedObjectSearch_combine_entries_with_should: SHOULD
20 | bundle_advancedObjectSearch_group: Group
21 | bundle_advancedObjectSearch_save_success: Search saved successfully
22 | bundle_advancedObjectSearch_save_error: Error occurred during save search
23 | bundle_advancedObjectSearch_category: Category
24 | bundle_advancedObjectSearch_open_saved_searches: Open saved Searches
25 | bundle_advancedObjectSearch_new: New
26 | bundle_advancedObjectSearch_search: Open existing Saved Search
27 | bundle_advancedObjectSearch_users: Users
28 | bundle_advancedObjectSearch_owner: Owner
29 | bundle_advancedObjectSearch_save_as_copy: Save as Copy
30 | bundle_advancedObjectSearch_name_copy_suffix: (copy)
31 | bundle_advancedObjectSearch_delete_error: Error during deleting Saved Search
32 | bundle_advancedObjectSearch_delete_really: Do you really want to delete the Saved
33 | Search?
34 | bundle_advancedObjectSearch_add_to_shortcuts: Add To Short Cuts
35 | bundle_advancedObjectSearch_remove_from_shortcuts: Remove From Short Cuts
36 | bundle_advancedObjectSearch_short_cut_error: Cannot add short cut for not saved search
37 | bundle_advancedObjectSearch_ignoreInheritance: No Inheritance
38 | bundle_advancedObjectSearch_date: Date
39 | bundle_advancedObjectSearch_updating_index: Currently updating search index
40 | bundle_advancedsearch_search: Advanced Object Search
41 | bundle_advancedsearch_operator_lt: lower than
42 | bundle_advancedsearch_operator_lte: lower or equal
43 | bundle_advancedsearch_operator_gt: greater than
44 | bundle_advancedsearch_operator_gte: greater or equal
45 | bundle_advancedsearch_operator_eq: equal
46 | bundle_advancedsearch_operator_exists: exists
47 | bundle_advancedsearch_operator_not_exists: not exists
48 | bundle_advancedsearch_operator_must: must
49 | bundle_advancedsearch_operator_must_not: must not
50 | bundle_advancedsearch_operator_should: should
51 | bundle_advancedObjectSearch_roles: Roles
52 | bundle_advancedsearch_table_colum_config: Column
53 | ...
54 |
--------------------------------------------------------------------------------
/src/Resources/translations/admin.zh_Hans.yml:
--------------------------------------------------------------------------------
1 | ---
2 | bundle_advancedObjectSearch: Advanced Object Search
3 | bundle_advancedObjectSearch_field: Field
4 | bundle_advancedObjectSearch_condition: Condition
5 | bundle_advancedObjectSearch_term: Term
6 | bundle_advancedObjectSearch_operator: Operator
7 | bundle_advancedObjectSearch_language: Language
8 | bundle_advancedObjectSearch_subclass: Class
9 | bundle_advancedObjectSearch_filter: Filter
10 | bundle_advancedObjectSearch_filters: Filters
11 | bundle_advancedObjectSearch_type: Type
12 | bundle_advancedObjectSearch_ids: IDs
13 | bundle_advancedObjectSearch_results: Results
14 | bundle_advancedObjectSearch_fulltextterm: Search Term
15 | bundle_advancedObjectSearch_save_and_share: Save And Share
16 | bundle_advancedObjectSearch_share: Sharing
17 | bundle_advancedObjectSearch_combine_entries_with: Combine Entries with
18 | bundle_advancedObjectSearch_combine_entries_with_must: MUST
19 | bundle_advancedObjectSearch_combine_entries_with_should: SHOULD
20 | bundle_advancedObjectSearch_group: Group
21 | bundle_advancedObjectSearch_save_success: Search saved successfully
22 | bundle_advancedObjectSearch_save_error: Error occurred during save search
23 | bundle_advancedObjectSearch_category: Category
24 | bundle_advancedObjectSearch_open_saved_searches: Open saved Searches
25 | bundle_advancedObjectSearch_new: New
26 | bundle_advancedObjectSearch_search: Open existing Saved Search
27 | bundle_advancedObjectSearch_users: Users
28 | bundle_advancedObjectSearch_owner: Owner
29 | bundle_advancedObjectSearch_save_as_copy: Save as Copy
30 | bundle_advancedObjectSearch_name_copy_suffix: (copy)
31 | bundle_advancedObjectSearch_delete_error: Error during deleting Saved Search
32 | bundle_advancedObjectSearch_delete_really: Do you really want to delete the Saved
33 | Search?
34 | bundle_advancedObjectSearch_add_to_shortcuts: Add To Short Cuts
35 | bundle_advancedObjectSearch_remove_from_shortcuts: Remove From Short Cuts
36 | bundle_advancedObjectSearch_short_cut_error: Cannot add short cut for not saved search
37 | bundle_advancedObjectSearch_ignoreInheritance: No Inheritance
38 | bundle_advancedObjectSearch_date: Date
39 | bundle_advancedObjectSearch_updating_index: Currently updating search index
40 | bundle_advancedsearch_search: Advanced Object Search
41 | bundle_advancedsearch_operator_lt: lower than
42 | bundle_advancedsearch_operator_lte: lower or equal
43 | bundle_advancedsearch_operator_gt: greater than
44 | bundle_advancedsearch_operator_gte: greater or equal
45 | bundle_advancedsearch_operator_eq: equal
46 | bundle_advancedsearch_operator_exists: exists
47 | bundle_advancedsearch_operator_not_exists: not exists
48 | bundle_advancedsearch_operator_must: must
49 | bundle_advancedsearch_operator_must_not: must not
50 | bundle_advancedsearch_operator_should: should
51 | bundle_advancedObjectSearch_roles: Roles
52 | bundle_advancedsearch_table_colum_config: Column
53 | ...
54 |
--------------------------------------------------------------------------------
/src/Tools/IndexConfigService.php:
--------------------------------------------------------------------------------
1 | indexNamePrefix = $indexNamePrefix;
43 | $this->indexConfiguration = $indexConfiguration;
44 | }
45 |
46 | /**
47 | * @return string
48 | */
49 | public function getIndexNamePrefix(): string
50 | {
51 | return $this->indexNamePrefix;
52 | }
53 |
54 | /**
55 | * @param string $indexNamePrefix
56 | */
57 | public function setIndexNamePrefix(string $indexNamePrefix): void
58 | {
59 | $this->indexNamePrefix = $indexNamePrefix;
60 | }
61 |
62 | /**
63 | * @param string $key
64 | *
65 | * @return mixed
66 | */
67 | public function getIndexConfiguration(string $key)
68 | {
69 | return $this->indexConfiguration[$key] ?? null;
70 | }
71 |
72 | /**
73 | * @return LoggerInterface|null
74 | */
75 | public function getLogger(): ?LoggerInterface
76 | {
77 | return $this->logger;
78 | }
79 | }
80 |
--------------------------------------------------------------------------------