Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
96 commits
Select commit Hold shift + click to select a range
cdc0909
UI redesign
Feb 24, 2026
c52f529
remove unused
Mar 12, 2026
0764382
improve: adjustments with back end and customer id parsing
Mar 12, 2026
0b3664c
rename variable
Mar 12, 2026
cc7cc09
fix: fixing styles and credentials saving logic
Mar 15, 2026
6185eb8
pr fix
Mar 15, 2026
38f906b
fields settings licence block logic and licence fetching
Mar 16, 2026
dc360ed
feat: generate field access token endpoint and logic implementation
Mar 16, 2026
b5adaaa
feat: add Capture option to 3D Secure failure behavior setting
Mar 16, 2026
6b92b9f
remove upgrade
Mar 16, 2026
4e7eb47
feat: add Order reference on payment page toggle to control Descripti…
Mar 17, 2026
64baef3
feat: add ConfigSet field validation, move hosted field style to gene…
Mar 17, 2026
a766c17
feat: add accessibility improvements for EAA compliance
Mar 20, 2026
54c05a0
fix(a11y): add aria-label to mobile switches and tab triggers
May 8, 2026
04934a5
fix(a11y): improve color contrast for WCAG 2.1 AA compliance
May 8, 2026
2da0b7d
fix(a11y): add aria-label to hosted field style combobox
May 8, 2026
baca7a3
fix(a11y): add focus trap to log details modal
May 8, 2026
3456d45
fix(a11y): improve contrast on SaferpayOfficial admin order buttons
May 8, 2026
a78459d
fix(a11y): add scope=col to saved cards table headers
May 8, 2026
ce8d69f
fix(a11y): improve Remove link contrast on saved cards table
May 8, 2026
634beca
revert(a11y): drop PS theme contrast overrides
May 8, 2026
3476949
fix: prevent silent save with empty or invalid API credentials
May 8, 2026
07ba05d
fix: hide Saferpay Fields section per active environment license
May 8, 2026
65152b6
fix: log license fetch failures and surface honest warning toast on save
May 8, 2026
efbf236
Merge pull request #322 from Invertus/BUGFIX/disable-save-empty-crede…
TLabutis May 15, 2026
0fd7498
Merge pull request #323 from Invertus/BUGFIX/saferpay-fields-env-lice…
TLabutis May 15, 2026
1c91872
Merge pull request #324 from Invertus/INTERNAL/license-fetch-warning-…
TLabutis May 15, 2026
5338eea
fix: break out of SaferPay iframe on payment status redirect
May 15, 2026
b558f03
fix: use location.replace and guard window.top access
May 15, 2026
b94589a
BUGFIX: payment methods default to all countries/currencies and dropd…
May 15, 2026
216b7a0
Merge pull request #326 from Invertus/BUGFIX/payment-methods-all-rest…
TLabutis May 15, 2026
e0570d9
Merge pull request #325 from Invertus/BUGFIX/iframe-redirect-top-window
TLabutis May 15, 2026
20263c3
BUGFIX: redirect customer to cart instead of order history after Safe…
May 15, 2026
bb3e081
BUGFIX: clarify Hosted field style info banner to mention Custom form…
May 15, 2026
9147de8
Merge branch 'SL-346/accessibility-eaa-compliance' into BUGFIX/abort-…
TLabutis May 15, 2026
1319947
Merge pull request #327 from Invertus/BUGFIX/abort-redirect-secure-key
TLabutis May 15, 2026
bfab294
Merge pull request #328 from Invertus/BUGFIX/clarify-hosted-field-sty…
TLabutis May 15, 2026
7743a2d
BUGFIX: validate Merchant Emails field on save
May 15, 2026
1c5f676
Merge pull request #329 from Invertus/BUGFIX/merchant-emails-validation
TLabutis May 26, 2026
15841de
BUGFIX: ensure 3DS-fail behavior overrides default payment behavior
May 26, 2026
60d1e5a
BUGFIX: de-duplicate ApiRequest error logs
May 26, 2026
025b33a
CI: build React settings app in release/deploy/zip pipelines
Jun 4, 2026
e1959fd
Merge remote-tracking branch 'origin/SL-358/payment-field' into SL-34…
Jul 9, 2026
a6e3e4d
Merge pull request #320 from Invertus/SL-346/accessibility-eaa-compli…
justelis22 Jul 9, 2026
2001b75
Merge pull request #319 from Invertus/SL-358/payment-field
justelis22 Jul 9, 2026
87bcdd1
Merge pull request #318 from Invertus/SL-356/configurable-payment-des…
justelis22 Jul 9, 2026
84f1437
Merge pull request #317 from Invertus/SL-355/payment-capture-3ds
justelis22 Jul 9, 2026
2641c24
Merge pull request #316 from Invertus/SL-353/fields-settings-licence
justelis22 Jul 9, 2026
92388c5
Merge pull request #315 from Invertus/SL-350/overall-design-changes
justelis22 Jul 9, 2026
97ce036
Merge pull request #314 from Invertus/SL-351/parse-customer-id
justelis22 Jul 9, 2026
9bd2ea1
resolve conflicts
Jul 9, 2026
aa892b9
fix
Jul 9, 2026
1da00ba
feat(SL-350): settings copy & link fixes (SL-365/368/369/372/373)
Jul 10, 2026
01086e5
feat(SL-350): settings UX/logic fixes (SL-366/367/370)
Jul 10, 2026
7c4924a
feat(SL-371): auto-refresh account payment methods when settings open
Jul 10, 2026
1dfccf5
feat(SL-374): stop routing cards to the Transaction Interface
Jul 10, 2026
c2eb235
feat(SL-375): remove 'Inline Layout with Card' style; reposition + re…
Jul 10, 2026
8cf2cb8
feat(SL-375): render Saferpay Fields inline in the default checkout
Jul 10, 2026
bcc95ad
feat(SL-374/SL-375): remove Transaction Interface and retire hosted F…
Jul 10, 2026
2d21bf2
feat(SL-375): route grouped cards to the inline Fields form
Jul 10, 2026
074bd44
refactor(SL-365/373): single translatable credentials hint; correct t…
Jul 10, 2026
ab3c8bb
fix(SL-367): guard terminal type cast with is_scalar
Jul 10, 2026
53fc9f2
perf(SL-371): avoid duplicate account API call on settings open
Jul 10, 2026
ba97aad
fix(SL-375): harden inline Fields submit and initial render
Jul 10, 2026
9b4953a
fix(SL-375): improve inline Fields validation, placement and styling
Jul 10, 2026
b9a00d0
fix preview pass
Jul 10, 2026
5dda309
Merge pull request #333 from Invertus/SL-350/settings-copy
justelis22 Jul 10, 2026
2243e97
Merge remote-tracking branch 'origin/feature/react-admin-settings' in…
Jul 10, 2026
9b979c8
Merge pull request #334 from Invertus/SL-350/settings-ux-fixes
justelis22 Jul 10, 2026
05d9107
Merge branch 'feature/react-admin-settings' into SL-350/settings-auto…
justelis22 Jul 10, 2026
c493512
Merge pull request #335 from Invertus/SL-350/settings-autorefresh
justelis22 Jul 10, 2026
2a87677
Merge branch 'feature/react-admin-settings' into SL-350/settings-card…
justelis22 Jul 10, 2026
8915c31
Merge pull request #336 from Invertus/SL-350/settings-card-flow
justelis22 Jul 10, 2026
6f5255f
removed the hosted fields style
Jul 17, 2026
d7724a4
toast for the error in pament methods
Jul 17, 2026
e040517
checkout card form field styling
Jul 20, 2026
9ddc223
fix infinite spinner on fail
Jul 24, 2026
159fabd
guard order load before state transition in fail controller
Jul 24, 2026
b2376ab
Merge pull request #337 from Invertus/SL-380/infinite-spinner-fix
justelis22 Jul 24, 2026
b69d8e5
rename Custom form column to Saferpay Fields
Jul 28, 2026
56c577c
Fix misleading payment methods warning in settings
Jul 29, 2026
66b60f7
Merge pull request #338 from Invertus/BUGFIX/payment-methods-fetch-wa…
TLabutis Jul 29, 2026
0a66d5e
Merge pull request #330 from Invertus/INTERNAL/ci-build-react-settings
TLabutis Jul 29, 2026
3bbd377
CI: fix release builds blocked by Composer security advisories
Jul 29, 2026
06662c1
Merge pull request #339 from Invertus/BUGFIX/composer-advisory-releas…
TLabutis Jul 29, 2026
65f97bd
Set redesign release version to 2.1.0
Jul 29, 2026
c96cfd7
Merge pull request #340 from Invertus/INTERNAL/version-2.1.0
TLabutis Jul 29, 2026
bbe59a4
CI: run lint and phpstan without the private workspace repo
Jul 29, 2026
eb84340
Merge pull request #341 from Invertus/INTERNAL/ci-drop-private-workspace
TLabutis Jul 29, 2026
7effec9
Remove files deleted in 2.1.0 during the module upgrade
Jul 29, 2026
e038c9a
Merge pull request #342 from Invertus/INTERNAL/upgrade-remove-orphan-…
TLabutis Jul 29, 2026
89f5add
SL-375 Fix Saferpay Fields CVC and loading states in checkout
Jul 30, 2026
5036539
Merge pull request #343 from Invertus/BUGFIX/saferpay-fields-cvc-disa…
TLabutis Jul 30, 2026
1c6faac
SL-377 Fix API password field having no editable state or visible con…
Jul 30, 2026
f85a809
Merge branch 'feature/react-admin-settings' into BUGFIX/password-fiel…
TLabutis Aug 3, 2026
6d9be96
Merge pull request #344 from Invertus/BUGFIX/password-field-eye-icon-…
TLabutis Aug 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 15 additions & 45 deletions .github/workflows/cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@ jobs:
env:
# Change these values depending on project.
ps-module-name: saferpayofficial
project-workspace-dir: ${{ github.workspace }}/../workspace
container-name: ps-lint
strategy:
fail-fast: false
matrix:
PS: [ 1.7.8-7.4 ]
testsuite: [ lint, phpstan ]
Expand All @@ -33,59 +34,28 @@ jobs:
- name: Checkout
uses: actions/checkout@v4

- name: Set Swap Space
uses: Invertus/set-swap-space@master
with:
swap-size-gb: 10

- name: Set up workspace
shell: bash
run: |
eval `ssh-agent -s`
ssh-add - <<< "${{ secrets.PS_MODULE_WORKSPACE_SAFERPAY_PRIVATE_KEY }}"
git clone git@github.com:Invertus/ps-module-workspace.git ${{ env.project-workspace-dir }}
cd ${{ env.project-workspace-dir }}
sed 's/PROJECT_NAME=.*/PROJECT_NAME=${{ env.ps-module-name }}/g' < .env.dist |
sed 's/PS_VERSION_TAG=.*/PS_VERSION_TAG=${{ matrix.PS }}/g' > .env
make create-modules-dir
cp -R ${{ github.workspace }} ${{ env.project-workspace-dir }}/prestashop/${{ matrix.PS }}/modules/${{ env.ps-module-name }}

- name: Run PrestaShop
run: |
(cd ${{ env.project-workspace-dir }} && docker compose up -d)

- name: Healthcheck
# lint and phpstan need the PrestaShop sources on disk and the matching PHP
# version, but no running shop, so the public image is started idle with the
# checked-out module mounted in place.
- name: Start PrestaShop container
run: |
timeout 120s sh -c 'until docker ps | grep ${{ env.ps-module-name }}-ps-prestashop-${{ matrix.PS }} | grep -q "(healthy)"; do echo "Waiting for container to be healthy..."; sleep 1; done'

- name: Cache composer folder
uses: actions/cache@v3
with:
path: ${{ env.project-workspace-dir }}/prestashop/${{ matrix.PS }}/modules/${{ env.ps-module-name }}/vendor
key: ${{ github.sha }}

- name: Install git
run: |
docker exec -i ${{ env.ps-module-name }}-ps-prestashop-${{ matrix.PS }} bash -c "apt update && apt install -y git"

- name: Remove old module
run: docker exec -i ${{ env.ps-module-name }}-ps-prestashop-${{ matrix.PS }} bash -c "cd /var/www/html/modules && rm -rf ${{ env.ps-module-name }}"

- name: Install module
run: docker exec -i ${{ env.ps-module-name }}-ps-prestashop-${{ matrix.PS }} bash -c "cd /var/www/html/modules && git clone https://github.com/Invertus/${{ env.ps-module-name }}"
docker run -d --name ${{ env.container-name }} \
-v ${{ github.workspace }}:/var/www/html/modules/${{ env.ps-module-name }} \
--entrypoint tail prestashop/prestashop:${{ matrix.PS }} -f /dev/null

- name: Switch to the correct branch
- name: Install git and composer in container
run: |
docker exec -i ${{ env.ps-module-name }}-ps-prestashop-${{ matrix.PS }} bash -c "cd /var/www/html/modules/${{ env.ps-module-name }} && git fetch origin && git checkout ${{ github.head_ref || github.ref_name }}"
docker exec -i ${{ env.container-name }} bash -c "apt-get update -qq && apt-get install -y -qq git"
docker exec -i ${{ env.container-name }} bash -c "php -r \"copy('https://getcomposer.org/installer', '/tmp/composer-setup.php');\" && php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer --quiet && composer --version"

- name: Install composer dependencies
run: docker exec -i ${{ env.ps-module-name }}-ps-prestashop-${{ matrix.PS }} bash -c "cd /var/www/html/modules/${{ env.ps-module-name }} && composer install"
run: docker exec -i ${{ env.container-name }} bash -c "cd /var/www/html/modules/${{ env.ps-module-name }} && composer install --no-interaction"

- name: PHP version
run: docker exec -i ${{ env.ps-module-name }}-ps-prestashop-${{ matrix.PS }} bash -c "php -v"
run: docker exec -i ${{ env.container-name }} bash -c "php -v"

- name: Run ${{ matrix.testsuite }} tests
run: docker exec -i ${{ env.ps-module-name }}-ps-prestashop-${{ matrix.PS }} bash -c "cd /var/www/html/modules/${{ env.ps-module-name }} && make ci-${{ matrix.testsuite }} ps_version_tag=${{ matrix.PS }}"
run: docker exec -i ${{ env.container-name }} bash -c "cd /var/www/html/modules/${{ env.ps-module-name }} && make ci-${{ matrix.testsuite }} ps_version_tag=${{ matrix.PS }}"

prepare-zip:
name: Prepare module ZIP artifact
Expand Down
19 changes: 19 additions & 0 deletions .github/workflows/create_zip.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,25 @@ jobs:
with:
fetch-depth: 0

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 9

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: pnpm
cache-dependency-path: views/js/admin/settings-app/pnpm-lock.yaml

- name: Build React settings app
run: |
cd views/js/admin/settings-app
pnpm install --frozen-lockfile
pnpm run build
rm -rf node_modules src

- name: Build module ZIP
run: |
composer install --no-dev --optimize-autoloader --classmap-authoritative
Expand Down
19 changes: 19 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,25 @@ jobs:
with:
php-version: '5.6'

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 9

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: pnpm
cache-dependency-path: views/js/admin/settings-app/pnpm-lock.yaml

- name: Build React settings app
run: |
cd views/js/admin/settings-app
pnpm install --frozen-lockfile
pnpm run build
rm -rf node_modules src

- name: Build module ZIP
# IF YOU EDIT THIS, DON'T FORGET TO EDIT release.yml
run: |
Expand Down
19 changes: 19 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,25 @@ jobs:
with:
php-version: '5.6'

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 9

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: pnpm
cache-dependency-path: views/js/admin/settings-app/pnpm-lock.yaml

- name: Build React settings app
run: |
cd views/js/admin/settings-app
pnpm install --frozen-lockfile
pnpm run build
rm -rf node_modules src

- name: build
# IF YOU EDIT THIS, DON'T FORGET TO EDIT deploy.yml
run: |
Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
/.idea
/config*.xml
/vendor
composer.lock
.php_cs.cache
tests/.env
/node_modules
var/cache/*
!var/cache/index.php
.DS_Store
views/js/admin/settings-app/node_modules/
views/js/admin/dist/
18 changes: 18 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -144,11 +144,29 @@ e2eh1786: test-e2e-headless-1786
test-e2e-headless-1786:
make e2e1786p

# target: build-react - Install deps and build the React admin settings app
build-react:
cd views/js/admin/settings-app && pnpm install && pnpm run build

# target: dev-react - Start React dev server with HMR
dev-react:
cd views/js/admin/settings-app && pnpm dev

# target: watch-react - Build React app and watch for changes
watch-react:
cd views/js/admin/settings-app && pnpm run build --watch

# target: lint-react - Run TypeScript type check
lint-react:
cd views/js/admin/settings-app && pnpm run tsc --noEmit

prepare-zip:
rm -rf vendor && \
composer install --no-dev --optimize-autoloader && \
cp .github/.htaccess vendor/.htaccess && \
cd views/js/admin/settings-app && pnpm install && pnpm run build && cd ../../../.. && \
rm -rf .git .github tests cypress .docker && \
rm -rf views/js/admin/settings-app && \
mkdir saferpayofficial && \
rsync -Rr ./ ./saferpayofficial && \
find . -maxdepth 1 ! -name saferpayofficial -exec mv {} saferpayofficial/ \; && \
Expand Down
17 changes: 16 additions & 1 deletion changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -197,9 +197,24 @@
- Remove WL Crypto payment method
- Added setting to toggle order confirmation email sending
- Added feature to group card payment methods into unified "Card" payment method
- Fixed issue when newly enabled payment methods did not appear in checkout because default "all countries/currencies" restriction was not created on save
- Fixed issue when payment method country/currency dropdowns showed "0" instead of indicating that all countries/currencies are allowed
- BO : Added validation for Merchant Emails field (frontend + backend) to prevent saving invalid addresses

## [2.0.3]
- Optimized database performance
- Dynamic termimal selection
- Removed uneccesary inputs from admin settings
- Checked overall module stability
- Checked overall module stability

## [2.1.0]
- BO : Redesigned back-office settings into a React single-page admin
- BO : Conditionally show/hide Saferpay Fields settings based on account license
- BO : Renamed the "Custom form" column in Payment methods to "Saferpay Fields"
- BO/FO : Accessibility improvements for EAA / WCAG 2.1 AA compliance
- Added configurable payment description and order reference on payment page
- API update to V1.50: added WERO and GIFTCARD payment methods, removed deprecated GIROPAY/PAYDIREKT/SOFORT
- BO : Fixed issue when a freshly installed module logged an account error before any API credentials were entered
- BO : Fixed issue when the "Could not reach your Saferpay account" warning kept showing after payment methods had loaded successfully
- Fixed issue when files removed in this version stayed on disk after an upgrade, leaving obsolete iframe checkout controllers reachable and re-creating obsolete menu tabs on module reset
- BO : Fixed issue when a saved API password offered no visible way to enter a new one, and browser password manager icons covered the show/hide password control
12 changes: 12 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,18 @@
},
"audit": {
"ignore": ["PKSA-wws7-mr54-jsny"]
},
"policy": {
"advisories": {
"ignore-id": [
"PKSA-v5yj-8nmz-sk2q",
"PKSA-ft77-7h5f-p3r6",
"PKSA-b14r-zh1d-vdrc",
"PKSA-z3gr-8qht-p93v",
"PKSA-rkkf-636k-qjb3",
"PKSA-wws7-mr54-jsny"
]
}
}
},
"repositories": {
Expand Down
Loading
Loading