Commit Graph
14 Commits
Author SHA1 Message Date
objecttothisandClaude Sonnet 5 054d01265e Merge remote-tracking branch 'OpensourcePOS/master' into feat-export-toggle-all
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-11-06 15:10:28 +04:00
BudsieBuds 72a75152ad fix(security): harden container permissions, validate platform reqs, and use rolling base image (#4789)
- Dockerfile: use rolling php:8.2-apache with expose_php = Off.
- Dockerfile: validate runtime against composer.lock at build boundary via BuildKit composer check-platform-reqs.
- Dockerfile: enforce least-privilege permissions (root:www-data 0640 files, 0750 dirs), restricting write access to writable/ and public/uploads.
- dockerignore: include composer.json and composer.lock in build context for platform validation.
- CI: remove redundant bash version checks across workflows; enforce fresh upstream base via pull: true in build-release.yml.
- Docs & Changelog: remove security advisory identifiers while preserving minimum patch levels.
2026-11-03 20:06:39 +01:00
BudsieBuds 386f976dcc feat(php): add PHP 8.5 support, resolve deprecations, and optimize CI workflows (#4776)
- Extend composer.json and composer.lock PHP requirement to include PHP 8.5
- Add PHP 8.5 to test matrix in phpunit.yml and main.yml workflows
- Modernize php-linter.yml to use setup-php@v2 with parallel matrix for PHP 8.2–8.5
- Propagate PHP 8.2 lint failures via shell loop in find -exec + while retaining batching for 8.3–8.5
- Add permissions: contents: read and cancel-in-progress concurrency to php-linter.yml
- Remove obsolete Node.js and npm install steps from phpunit.yml
- Update phpunit.yml runner to ubuntu-latest and composer cache action to v4
- Address PHP 8.5 deprecations and syntax:
  - Replace deprecated switch-case semicolon with standard colon in app/Config/Database.php
  - Replace non-standard (double) cast with (float) in app/Libraries/Token_lib.php
  - Remove obsolete curl_close() calls in app/Config/Validation/OSPOSRules.php and app/Libraries/Mailchimp_lib.php
- Update INSTALL.md, workflows README, and bug report issue template to include PHP 8.5
2026-10-28 15:58:14 +04:00
objecttothis 8a3331f9d9 feat(export): gate XLSX export behind ext-zip availability
Move ExportPdfWriter out of export_helper.php into its own class
file under App\Libraries so the PDF writer can be autoloaded and
reused independently of the helper functions.

- Add runtime detection of the PHP zip extension and surface it to
  the frontend via window.ospos_ext_zip_enabled (app/Views/partial/lang_lines.php)
- Disable the XLSX export menu item in manage_tables.js and
  report_tables.js when ext-zip is missing, with a tooltip
  explaining why (new Common.export_xlsx_disabled_tooltip lang line)
- Show Zip extension status on the system info page
  (app/Views/configs/system_info.php)
- Document the new php-zip requirement and its optional nature for
  Excel/XLSX export in docs/BUILD.md and docs/INSTALL.md
- Add explicit namespaces to helper test files
  (export_helperTest.php, tabular_helperTest.php, tax_helperTest.php)
  for consistency with PSR-4 autoloading

This keeps the app fully functional without ext-zip, only disabling
the Excel export feature that depends on openspout/openspout.

Signed-off-by: objecttothis <17935339+objecttothis@users.noreply.github.com>
2026-10-23 12:39:19 +04:00
jekkos 01ba467948 fix(security): pin patched PHP 8.2.35+ for CVE-2026-109618/109619 (#4767)
* fix(security): pin patched PHP 8.2.35+ for CVE-2026-109618/109619

- Dockerfile: pin base image to php:8.2.35-apache (was floating php:8.2-apache)
- composer.json: raise minimum PHP to >=8.2.35
- CI (main, build-release, phpunit): add patch-level guard step
- docs/INSTALL.md: document minimum patch levels

Fixes #4765
2026-10-21 21:23:49 +02:00
jekkos 1e27f31673 feat(install): add one-line Ubuntu installer (#4550)
* feat(install): add one-line Ubuntu installer with CI test and docs

- Add scripts/install-ubuntu.sh: installs Apache/MariaDB/PHP, downloads the
  latest stable release, configures the DB + Apache, and optionally sets up
  Let's Encrypt SSL (interactive or via env vars).
- Add .github/workflows/install-script-test.yml: runs the installer in a fresh
  Ubuntu container and sanity-checks the result.
- Document the installer in INSTALL.md.
- Harden the script: identifier-safe DB_NAME, quote/pipe rejection in
  passwords, correct 'Candidate: (none)' PPA detection, keep unix_socket root
  auth when no root password is set, select the .zip release asset, and use the
  SSL domain as the public hostname for allowedHostnames.
2026-10-19 19:27:53 +02:00
jekkos f37021a860 docs: move BUILD.md, INSTALL.md, UPGRADE.md into docs/ (#4755)
* docs: move BUILD.md, INSTALL.md, UPGRADE.md into docs/

Closes #4751

- Move the three detailed guides from the repo root into docs/
- Update all links in README.md, .github/ISSUE_TEMPLATE.md,
  docker-compose.yml, and cross-references within the moved guides
- Add docs/**/* to the gulp compress task so release archives
  include the guides under their new docs/ path
- README now links to all three guides
- Root-level files (README, CHANGELOG, LICENSE, SECURITY.md,
  CODE_OF_CONDUCT.md, AGENTS.md) remain in place

* docs: add working-dir note and remove stale 'docs' .gitignore entry

- Add explicit note that Docker/install commands run from repo root
- Remove stale 'docs' line from .gitignore (leftover from old ApiGen
  output) so tracked files under docs/ can be modified normally
2026-10-16 09:20:45 +02:00
jekkos f0fd8a305b Cleanup source repository, create dist zip (#1305) 2017-08-06 02:10:18 +02:00
FrancescoUK 4a61119c3d Regen ApiGen code documentation 2017-07-28 18:15:35 +01:00
FrancescoUK 863988d2ab Regen ApiGen documentation 2017-07-06 22:13:18 +01:00
FrancescoUK 12b5ed43c6 Regen ApiGen documentation 2017-07-02 20:26:45 +01:00
FrancescoUK 95733ea476 Regen Apigen documentation 2017-07-02 11:23:09 +01:00
FrancescoUK d25c6dc8c1 Added ApiGen documentation to model/person class as an example 2017-04-30 23:27:15 +01:00
FrancescoUK f9fb9e44b3 Added apigen to generate OSPOS code documentation (see docs)
Added grunt-composer and grunt-apigen and scripted all the steps in Grunt
2017-04-29 23:43:15 +01:00