diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..ef9bcb1 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "eslint-config-ibexa/eslint" +} diff --git a/.github/workflows/backend-ci.yaml b/.github/workflows/backend-ci.yaml new file mode 100644 index 0000000..0f05780 --- /dev/null +++ b/.github/workflows/backend-ci.yaml @@ -0,0 +1,80 @@ +name: Backend build + +on: + push: + branches: + - main + - '[0-9]+.[0-9]+' + pull_request: ~ + +jobs: + cs-fix: + name: Run code style check + runs-on: "ubuntu-22.04" + strategy: + matrix: + php: + - '8.1' + steps: + - uses: actions/checkout@v3 + + - name: Setup PHP Action + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + coverage: none + extensions: 'pdo_sqlite, gd' + tools: cs2pr + + - uses: ramsey/composer-install@v2 + with: + dependency-versions: "highest" + + - name: Run code style check + run: composer run-script check-cs -- --format=checkstyle | cs2pr + + deptrac: + name: Deptrac + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Deptrac + uses: smoench/deptrac-action@master + + tests: + name: Tests + runs-on: "ubuntu-22.04" + timeout-minutes: 10 + + strategy: + fail-fast: false + matrix: + php: + - '7.4' + - '8.1' + - '8.2' + + steps: + - uses: actions/checkout@v2 + + - name: Setup PHP Action + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + coverage: none + extensions: pdo_sqlite, gd + tools: cs2pr + + - uses: "ramsey/composer-install@v1" + with: + dependency-versions: "highest" + composer-options: "--prefer-dist --no-progress --no-suggest" + + - name: Setup problem matchers for PHPUnit + run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" + + - name: Run PHPStan analysis + run: composer run-script phpstan + + - name: Run test suite + run: composer run-script --timeout=600 test diff --git a/.github/workflows/browser-tests.yaml b/.github/workflows/browser-tests.yaml new file mode 100644 index 0000000..4fead65 --- /dev/null +++ b/.github/workflows/browser-tests.yaml @@ -0,0 +1,18 @@ +name: Browser tests + +on: + push: + branches: + - main + - '[0-9]+.[0-9]+' + pull_request: ~ + +jobs: + browser-tests: + name: "Browser tests" + uses: ibexa/gh-workflows/.github/workflows/browser-tests.yml@main + with: + project-edition: 'oss' + test-suite: '--profile=browser --suite=core-search --config=vendor/ibexa/core-search/behat_suites.yaml' + secrets: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} diff --git a/.github/workflows/frontend-ci.yaml b/.github/workflows/frontend-ci.yaml new file mode 100644 index 0000000..c40c64a --- /dev/null +++ b/.github/workflows/frontend-ci.yaml @@ -0,0 +1,26 @@ +name: Frontend build + +on: + push: + paths: + - "**.js" + branches: + - main + - '[0-9]+.[0-9]+' + pull_request: + paths: + - "**.js" + +jobs: + frontend-test: + name: Frontend build test + runs-on: "ubuntu-20.04" + timeout-minutes: 5 + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: '14' + - run: yarn install + - run: yarn test diff --git a/.github/workflows/pr-assign.yaml b/.github/workflows/pr-assign.yaml new file mode 100644 index 0000000..ea9165c --- /dev/null +++ b/.github/workflows/pr-assign.yaml @@ -0,0 +1,10 @@ +name: Assign Pull Request to maintainers + +on: + pull_request_target: ~ + +jobs: + assign: + uses: ibexa/gh-workflows/.github/workflows/pr-assign.yml@main + secrets: + robot-token: ${{ secrets.EZROBOT_PAT }} diff --git a/.github/workflows/pr-check.yaml b/.github/workflows/pr-check.yaml new file mode 100644 index 0000000..d3413dc --- /dev/null +++ b/.github/workflows/pr-check.yaml @@ -0,0 +1,12 @@ +name: PR check +on: + pull_request: + types: + - opened + - synchronize + - reopened + - edited + +jobs: + test-base-branch: + uses: ibexa/gh-workflows/.github/workflows/pr-check.yml@main diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..fcb5645 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,44 @@ +name: Automatic Changelog Generator for tag + +on: + push: + tags: + - 'v*' + - '!v*-alpha*' + +jobs: + release: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@master + - name: Set Environment + run: | + echo "BUILD_TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV + - name: Get previous release tag based on type + id: prevrelease + uses: ibexa/version-logic-action@master + with: + currentTag: ${{ env.BUILD_TAG }} + + - name: Generate changelog + id: changelog + uses: ibexa/changelog-generator-action@v2 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + jira_token: ${{ secrets.JIRA_TOKEN }} + currentTag: ${{ env.BUILD_TAG }} + previousTag: ${{ steps.prevrelease.outputs.previousTag }} + + - name: Print the changelog + run: echo "${{ steps.changelog.outputs.changelog }}" + + - name: Create Release + id: create_release + uses: zendesk/action-create-release@v1 + with: + tag_name: ${{ env.BUILD_TAG }} + body: | + ${{ steps.changelog.outputs.changelog }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4d90817 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +/.php-cs-fixer.cache +/.phpunit.result.cache +/composer.lock +/node_modules/ +/vendor +/yarn.lock diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php new file mode 100644 index 0000000..6a82765 --- /dev/null +++ b/.php-cs-fixer.php @@ -0,0 +1,14 @@ +setFinder( + PhpCsFixer\Finder::create() + ->in(__DIR__ . '/src') + ->in(__DIR__ . '/tests') + ->files()->name('*.php') +); diff --git a/COPYRIGHT b/COPYRIGHT new file mode 100644 index 0000000..e7bbaa1 --- /dev/null +++ b/COPYRIGHT @@ -0,0 +1,18 @@ +Copyright (C) 1999-2024 Ibexa AS (formerly eZ Systems AS). All rights reserved. + +This source code is available separately under the following licenses: + +A - Ibexa Business Use License Agreement (Ibexa BUL), +version 2.3 or later versions (as license terms may be updated from time to time) +Ibexa BUL is granted by having a valid Ibexa DXP (formerly eZ Platform Enterprise) subscription, +as described at: https://www.ibexa.co/product +For the full Ibexa BUL license text, please see: +- LICENSE-bul file placed in the root of this source code, or +- https://www.ibexa.co/software-information/licenses-and-agreements (latest version applies) + +AND + +B - GNU General Public License, version 2 +Grants an copyleft open source license with ABSOLUTELY NO WARRANTY. For the full GPL license text, please see: +- LICENSE file placed in the root of this source code, or +- https://www.gnu.org/licenses/old-licenses/gpl-2.0.html diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..eb76224 --- /dev/null +++ b/LICENSE @@ -0,0 +1,360 @@ +Copyright (C) 1999-2024 Ibexa AS (formerly eZ Systems AS). All rights reserved. + +This source code is available separately under the following licenses: + +A - Ibexa Business Use License Agreement (Ibexa BUL), +version 2.4 or later versions (as license terms may be updated from time to time) +Ibexa BUL is granted by having a valid Ibexa DXP (formerly eZ Platform Enterprise) subscription, +as described at: https://www.ibexa.co/product +For the full Ibexa BUL license text, please see: +- LICENSE-bul file placed in the root of this source code, or +- https://www.ibexa.co/software-information/licenses-and-agreements (latest version applies) + +AND + +B - GNU General Public License, version 2 +Grants an copyleft open source license with ABSOLUTELY NO WARRANTY. +Full GPL license text below, or online on: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html + + +---------------------------------------------------------- + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/LICENSE-bul b/LICENSE-bul new file mode 100644 index 0000000..14e0e5a --- /dev/null +++ b/LICENSE-bul @@ -0,0 +1,214 @@ +Ibexa Business Use License Agreement ("Ibexa BUL") Version 2.4 + + +IMPORTANT: Please read the following license agreement carefully. + +This Ibexa Business License Agreement (“Ibexa BUL”) is between Ibexa AS +(Norwegian business registration no. 981601564), a Norwegian company +("Licensor", “Ibexa” or “we”), and the customer ("Licensee" +or "you"). By installing all or any portion of the Licensed Software (or +authorizing any other person to do so), you accept the terms and conditions of +this Ibexa BUL. If you acquired the Licensed Software without an opportunity to +review this Ibexa BUL and do not accept the Ibexa BUL, you must: (a) not use +the Licensed Software and (b) return or delete the Licensed Software, +with your certification of deletion, within thirty (30) days of the +purchase date. + +The parties hereby agree to the following terms and conditions: + +1. Definitions + +"Licensed Software" means the Ibexa Digital Experience Platform (DXP) +or other Ibexa software product (such as eZ Platform Enterprise Edition, +eZ Publish Platform) downloaded, ordered or otherwise legally acquired +(licensed) by you from Ibexa (or other party authorized by Ibexa). + +"Licensed Copy" means one sample of the Licensed Software. + +2. License grant + +2.1 You may +If you have entered into an Ibexa Subscription Agreement, you have paid the +correct fees and you comply with the terms of this Ibexa BUL, we grant you a +limited, non-exclusive and non-transferable right to: + +(a) install and run the Licensed Copy according to the terms +defined by the Ibexa Subscription Agreement + +(b) modify or make improvements, patches, workarounds and bug fixes +(collectively "Licensee Modifications") to the Licensed Copy, or permit +a third party to do so on Licensee's behalf, solely for use by the +Licensee and its subsidiaries or affiliates. + +Licensee may make a reasonable number of copies of the Licensed Copy as +required for backup and archival purposes only. + +2.2 You may not +Licensee may use the Licensed Software only as expressly granted in +section 2. Without limiting the foregoing, you may not: (a) give, lease, +license, sell, make available, or distribute any part of the Licensed +Software or Licensee Modifications to any third party, except as +otherwise expressly permitted herein; (b) use the Licensed Software to +operate as a time-sharing, outsourcing, service bureau, application +service provider, managed service provider environment or similar +service directed towards and performed on behalf or for the benefit of a +third party; (c) copy the Licensed Software onto any public or +distributed network; or (d) change any right notices which appear in the +Licensed Software. + +3. Your responsibility +Except as expressly described in this Ibexa BUL or in a separate written +agreement, you alone are solely responsible for the installation of the +Licensed Software, its operation, supervision, maintenance, management +and related training and support. The same shall apply to any related +installation, maintenance and configuration of computer hardware used by +the Licensed Software. + +4. Price and payment +You may use the Licensed Software free of charge if you are a current +and paying Ibexa Subscription Agreement customer, with a +subscription agreement covering the Licensed Software. If not, you may +not use the Licensed Software. + +Please see the Ibexa Subscription Agreement for the prices and terms of payment, +that apply. + +All use of the Licensed Software has to stop immediately after the termination or +expiration of any such Ibexa Subscription Agreement. + +5. Audit rights +To make sure everyone is contributing their part to enable us to +continue making great software, we need a right at all times to audit +our Licensors. During the term of this Ibexa BUL and for a three year +period following its termination, we therefor may conduct periodic +reviews of your records relating to the Licensed Software for the +purpose of verifying Licensee's compliance with this Ibexa BUL, Ibexa +Subscription Agreement and related agreements. During +this three year period, you are obliged to maintain complete and accurate +books and other records related to software licensing and related +payments. We must exercise its right of audit upon no fewer than 15 +days' prior notice. You will then provide us with reasonable access and +assistance for the audit, including reasonable use of personnel, +available office equipment and space. In return, we must give you a copy +of the results of the audit, if you ask us for it. + +6. Termination +Ibexa may terminate this Ibexa BUL immediately if you are in breach any of its +provisions and such breach remains uncured 30 days after you receive +notice of the breach. In the event that you (a) fail to pay Ibexa any +outstanding amounts, including subscription fees or license fees for +other software, on time, or (b) are or become liquidated, dissolved, +bankrupt or insolvent, whether voluntarily or involuntarily, or is to +take any action to be declared so, we may terminate this Ibexa BUL +immediately. Upon cancellation or other termination of this Ibexa BUL, for +any reason, you must immediately destroy all copies of the Licensed +Software, and confirm the destruction within 7 (seven) days. + +7. Intellectual property rights +You agree that no copyright, other intellectual property or proprietary +rights in the Licensed Software and related documentation are +transferred to you. No trademarks of Ibexa may be used by you without Ibexa’s +express written permission. If permission is granted, use must always +take place in accordance with our guidelines as they may be updated from +time to time. For Licensee Modifications, you must, in the modified +files and in a separate text file, clearly indicate that the Licensed +Software contains modifications and state their dates and location. + +8. Limited warranties +We warrant that the Licensed Software will remain in substantial +conformance with the current documentation of the Licensed Software. We +disclaim, and you waive, all warranties, whether express or implied, +including warranties of merchantability, fitness for a particular +purpose, non-infringement, system integration, non-interference and +accuracy of informational content. We do not warrant that the Licensed +Software will meet your requirements or that the operation of it will be +uninterrupted or error-free, or that errors will be corrected. The +entire risk of the Licensed Software's quality and performance is +therefore with you. + +9. Limitation of liability +To the extent permitted by law, we do not have liability with respect to +obligations described in this Ibexa BUL or otherwise for direct, +consequential, exemplary, special, indirect, incidental or punitive +damages, including any lost profits or lost savings (whether resulting +from impaired or lost data, software or computer failure or any other +cause), even if we have been advised of the possibility of such damages. + +This limitation of liability applies to any default, including breach of +contract, breach of warranty, negligence, misrepresentations and other +injury. We both agree that the remedies and limitations herein allocate +the risks between us as authorized by law. The license fee (none) is set +in reliance upon this allocation of risk and the exclusion of damages as +set forth in this Ibexa BUL. + +10. Miscellaneous + +10.1 Termination for patent action +This Ibexa BUL shall terminate automatically and you may no longer exercise +any of the rights granted to you by this Ibexa BUL as of the date you +commence an action, including a cross-claim or counterclaim, against Ibexa, +any third party supplier Ibexa is distributing software for, or other +licensee, alleging that the Licensed Software infringes a patent. + +10.2 Transfer +Without Ibexa’s written permission, you may not sublicense or otherwise +transfer your rights and obligations under this Ibexa BUL to any other +person or party. Any attempt by you to do so, will terminate this Ibexa BUL +without further notice. Ibexa may assign its rights hereunder at any time +without consent. + +10.3 Governing law +This Ibexa BUL is to be governed by the laws of Norway, without regard to +any conflict of law provisions. + +10.4 Disputes and legal venue +If we disagree, you and Ibexa will first attempt to resolve the +disagreement through discussions and negotiations. + +If you and Ibexa cannot agree, the dispute can be referred to Oslo City +Court as mandatory legal venue by either one of us. However, if you are +located in a country that does not have a bilateral or multilateral +ruling enforcement treaty with Norway, the dispute must be referred to +and finally determined by arbitration administered by the World +Intellectual Property Organization (WIPO) Arbitration and Mediation +Centre in accordance with the WIPO Arbitration Rules. + +The place of arbitration is to be Oslo, Norway. The arbitrator (only +one) will decide based on this Ibexa BUL and Norwegian law. We both agree +that the arbitrator will have the power to decide all matters, and to +award any remedies. All proceedings and documents shall remain strictly +confidential. + +In no event shall the United Nations Convention on Contracts for the +International Sale of Goods apply to, or govern, this Ibexa BUL. + +10.5 Notices +Any notices we need to send each other, must be delivered and addressed +to you at the address you provided to Ibexa (or our representative) at the +time of the order, and to Ibexa at + +Attn: Software Licensing Dept., + +Ibexa AS, +Solligata 2, +0254 Oslo +Norway + +Either party may change its address for notice purposes upon notice in +accordance with this section. + +10.6 Export law assurances +You are responsible for complying with any applicable local laws, +including export and import regulations. + +10.7 Entire agreement +This Ibexa BUL and Ibexa Subscription Agreement comprise the entire agreement, and replace all earlier +proposals, understandings and agreements, oral and written, between us. + +10.8 Update of terms +In order to be able to manage all those licensing software from us, we +may from time to time in our discretion issue new versions of this +license. Unless you within 30 days from when you were first made aware +or should have become aware of the new license have not objected in +writing to us, the new version of the Ibexa BUL is to be deemed as accepted +by you. diff --git a/README.md b/README.md new file mode 100644 index 0000000..79a3720 --- /dev/null +++ b/README.md @@ -0,0 +1,30 @@ +# core-search + +This package is part of [Ibexa DXP](https://ibexa.co). + +To use this package, [install Ibexa DXP](https://doc.ibexa.co/en/latest/install/). + + + +## COPYRIGHT + +Copyright (C) 1999-2024 Ibexa AS (formerly eZ Systems AS). All rights reserved. + +## LICENSE + +This source code is available separately under the following licenses: + +A - Ibexa Business Use License Agreement (Ibexa BUL), +version 2.4 or later versions (as license terms may be updated from time to time) +Ibexa BUL is granted by having a valid Ibexa DXP (formerly eZ Platform Enterprise) subscription, +as described at: https://www.ibexa.co/product +For the full Ibexa BUL license text, please see: +- LICENSE-bul file placed in the root of this source code, or +- https://www.ibexa.co/software-information/licenses-and-agreements (latest version applies) + +AND + +B - GNU General Public License, version 2 +Grants an copyleft open source license with ABSOLUTELY NO WARRANTY. For the full GPL license text, please see: +- LICENSE file placed in the root of this source code, or +- https://www.gnu.org/licenses/old-licenses/gpl-2.0.html diff --git a/behat_suites.yaml b/behat_suites.yaml new file mode 100644 index 0000000..3aeb18d --- /dev/null +++ b/behat_suites.yaml @@ -0,0 +1,11 @@ +imports: + - ../../ibexa/behat/behat_ibexa_oss.yaml + +browser: + suites: + core-search: + paths: + - '%paths.base%/features/browser' + contexts: + - Ibexa\Behat\API\Context\TestContext + - Ibexa\Behat\Browser\Context\AuthenticationContext diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..499dfd1 --- /dev/null +++ b/composer.json @@ -0,0 +1,64 @@ +{ + "name": "ibexa/core-search", + "license": "(GPL-2.0-only or proprietary)", + "type": "ibexa-bundle", + "keywords": [ + "ibexa-dxp" + ], + "require": { + "php": "^7.4 || ^8.0", + "ibexa/core": "~4.6.x-dev", + "symfony/config": "^5.4", + "symfony/dependency-injection": "^5.4", + "symfony/event-dispatcher": "^5.4", + "symfony/event-dispatcher-contracts": "^2.2", + "symfony/http-foundation": "^5.4", + "symfony/http-kernel": "^5.4", + "symfony/yaml": "^5.4" + }, + "require-dev": { + "ibexa/behat": "~4.6.x-dev", + "ibexa/code-style": "~2.0.0", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-phpunit": "^1.3", + "phpstan/phpstan-symfony": "^1.3", + "phpunit/phpunit": "^9.0", + "qossmic/deptrac-shim": "^0.24.0 || ^1.0.2" + }, + "autoload": { + "psr-4": { + "Ibexa\\Bundle\\CoreSearch\\": "src/bundle/", + "Ibexa\\Contracts\\CoreSearch\\": "src/contracts/", + "Ibexa\\CoreSearch\\": "src/lib/" + } + }, + "autoload-dev": { + "psr-4": { + "Ibexa\\Tests\\Bundle\\CoreSearch\\": "tests/bundle/", + "Ibexa\\Tests\\Integration\\CoreSearch\\": "tests/integration/", + "Ibexa\\Tests\\CoreSearch\\": "tests/lib/" + } + }, + "scripts": { + "fix-cs": "php-cs-fixer fix --config=.php-cs-fixer.php --show-progress=dots", + "check-cs": "@fix-cs --dry-run", + "test": "phpunit -c phpunit.xml.dist", + "phpstan": "phpstan analyse -c phpstan.neon", + "deptrac": "php vendor/bin/deptrac analyse" + }, + "scripts-descriptions": { + "fix-cs": "Automatically fixes code style in all files", + "check-cs": "Run code style checker for all files", + "test": "Run automatic tests", + "phpstan": "Run static code analysis", + "deptrac": "Run Deptrac architecture testing" + }, + "extra": { + "branch-alias": { + "dev-main": "4.6.x-dev" + } + }, + "config": { + "sort-packages": true + } +} diff --git a/deptrac.yaml b/deptrac.yaml new file mode 100644 index 0000000..174c771 --- /dev/null +++ b/deptrac.yaml @@ -0,0 +1,26 @@ +deptrac: + paths: + - ./src + layers: + - name: Bundle + collectors: + - type: directory + value: bundle/.* + - name: Contracts + collectors: + - type: directory + value: contracts/.* + - name: Library + collectors: + - type: directory + value: lib/.* + ruleset: + Bundle: + - Bundle + - Contracts + - Library + Contracts: + - Contracts + Library: + - Contracts + - Library diff --git a/features/browser/BasicLogin.feature b/features/browser/BasicLogin.feature new file mode 100644 index 0000000..533215c --- /dev/null +++ b/features/browser/BasicLogin.feature @@ -0,0 +1,6 @@ +@IbexaOSS +Feature: An example test checking if user can login and if behat config is proper. + + @javascript + Scenario: User can log in as admin user + Given I am logged as admin diff --git a/package.json b/package.json new file mode 100644 index 0000000..1bd2968 --- /dev/null +++ b/package.json @@ -0,0 +1,16 @@ +{ + "name": "core-search", + "repository": "git@github.com:ibexa/core-search.git", + "private": true, + "prettier": "eslint-config-ibexa/prettier", + "dependencies": {}, + "devDependencies": { + "eslint-config-ibexa": "https://github.com/ibexa/eslint-config-ibexa.git#v1.0.0" + }, + "scripts": { + "test": "yarn prettier-test && yarn eslint-test", + "fix": "yarn prettier-test --write && yarn eslint-test --fix", + "eslint-test": "eslint \"./src/bundle/Resources/**/*.js\" \"./src/bundle/ui-dev/**/*.js\"", + "prettier-test": "yarn prettier \"./src/bundle/Resources/**/*.{js,scss}\" \"./src/bundle/ui-dev/**/*.js\" --check" + } +} diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000..3756f56 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,9 @@ +includes: + - vendor/phpstan/phpstan-phpunit/extension.neon + - vendor/phpstan/phpstan-symfony/extension.neon + +parameters: + level: 8 + paths: + - src + - tests diff --git a/phpunit.xml.dist b/phpunit.xml.dist new file mode 100644 index 0000000..1e2e4ee --- /dev/null +++ b/phpunit.xml.dist @@ -0,0 +1,23 @@ + + + + tests/bundle + + + tests/integration + + + tests/lib + + + diff --git a/src/bundle/DependencyInjection/IbexaCoreSearchExtension.php b/src/bundle/DependencyInjection/IbexaCoreSearchExtension.php new file mode 100644 index 0000000..b604ef7 --- /dev/null +++ b/src/bundle/DependencyInjection/IbexaCoreSearchExtension.php @@ -0,0 +1,79 @@ + $configs + */ + public function load(array $configs, ContainerBuilder $container): void + { + $loader = new YamlFileLoader( + $container, + new FileLocator(__DIR__ . '/../Resources/config') + ); + + $loader->load('services.yaml'); + + if ($this->shouldLoadTestServices($container)) { + $loader->load('test/pages.yaml'); + $loader->load('test/components.yaml'); + $loader->load('test/contexts.yaml'); + } + } + + public function prepend(ContainerBuilder $container): void + { + $this->prependDefaultConfiguration($container); + $this->prependJMSTranslation($container); + } + + private function prependDefaultConfiguration(ContainerBuilder $container): void + { + $configFile = __DIR__ . '/../Resources/config/prepend.yaml'; + + $container->addResource(new FileResource($configFile)); + + $configs = Yaml::parseFile($configFile, Yaml::PARSE_CONSTANT) ?? []; + foreach ($configs as $name => $config) { + $container->prependExtensionConfig($name, $config); + } + } + + private function prependJMSTranslation(ContainerBuilder $container): void + { + $container->prependExtensionConfig('jms_translation', [ + 'configs' => [ + 'ibexa_core_search' => [ + 'dirs' => [ + __DIR__ . '/../../', + ], + 'excluded_dirs' => ['Behat'], + 'output_dir' => __DIR__ . '/../Resources/translations/', + 'output_format' => 'xliff', + ], + ], + ]); + } + + private function shouldLoadTestServices(ContainerBuilder $container): bool + { + return $container->hasParameter('ibexa.behat.browser.enabled') + && true === $container->getParameter('ibexa.behat.browser.enabled'); + } +} diff --git a/src/bundle/IbexaCoreSearchBundle.php b/src/bundle/IbexaCoreSearchBundle.php new file mode 100644 index 0000000..13ecd0b --- /dev/null +++ b/src/bundle/IbexaCoreSearchBundle.php @@ -0,0 +1,15 @@ +