Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
a6c3f0e
Initialise v1.1.0.7
gburton Sep 26, 2025
5a01733
Update ht_canonical.php
gburton Oct 12, 2025
63dd74a
Create outgoing.php
gburton Oct 15, 2025
27bf0dd
Update Order Thanks Scheduler
gburton Oct 15, 2025
244ffac
Action Recorder Infobox Removal
gburton Oct 17, 2025
3e55edf
PHP 8.4 compatibility - mostly implicit nullable parameters
Oct 29, 2025
26812de
Update collect.php
gburton Nov 4, 2025
c5a45cb
Language Typo
gburton Nov 6, 2025
7a7928e
Merge pull request #102 from BrockleyJohn/php84
gburton Nov 22, 2025
42a840c
Update language_explorer.php
gburton Nov 26, 2025
fafc0ea
Update minimum PHP version requirement to 7.3
ecartz Nov 28, 2025
f9225ef
Update tpl_cm_footer_account.php
gburton Dec 9, 2025
009696c
Update packingslip.php
gburton Dec 23, 2025
f550fe3
Update README.md
gburton Jan 4, 2026
d793aa3
Harden Input
gburton Jan 10, 2026
e28e9d2
Contact Us Cosmetic
gburton Jan 25, 2026
501d071
Update account_history_info.php
gburton Jan 25, 2026
7979fe2
Modularisation
gburton Jan 28, 2026
9df1485
Search Results
gburton Jan 28, 2026
c706e77
Search Title
gburton Jan 28, 2026
2a19462
Update tpl_nb_search.php
gburton Jan 28, 2026
9f273d7
Remove references to SID - deprecated in php 8.4
Jan 29, 2026
ba3c826
Update edit.php
gburton Jan 31, 2026
161c474
Update Demo Images
gburton Jan 31, 2026
b834ca0
Add Border to Images
gburton Jan 31, 2026
4066245
Update tpl_cm_in_category_listing.php
gburton Jan 31, 2026
5619548
Update Carousel Images
gburton Jan 31, 2026
67988fd
Update tpl_cm_i_slider.php
gburton Jan 31, 2026
57b625a
Update README.md
gburton Jan 31, 2026
4b13f74
Update Brand Images
gburton Feb 3, 2026
9c0db29
Merge pull request #103 from BrockleyJohn/SID_deprecated
gburton Feb 3, 2026
1d4d309
Update README.md
gburton Feb 4, 2026
b333b35
Update phoenix_data_sample.sql
gburton Feb 4, 2026
ce712bb
Search SQL
gburton Feb 9, 2026
9bc1ed2
Remove CSS artifacts
gburton Feb 9, 2026
58fb9ae
Update Customers to Tabbed Functionality
gburton Feb 11, 2026
51f7594
Update pi_date_available.php
gburton Feb 23, 2026
ec29440
Update phoenix.sql
gburton Mar 4, 2026
916e996
Update cm_footer_extra_copyright.php
gburton Mar 8, 2026
37e3229
Update phoenix_data_sample.sql
gburton Mar 9, 2026
cc96439
Update Text
gburton Mar 11, 2026
0b4bb99
Modernise Account Links
gburton Mar 13, 2026
6e94130
Update logoff.php
gburton Mar 13, 2026
f844cca
Modernise Account Navbar
gburton Mar 13, 2026
903a976
Revert Profile to Account
gburton Mar 13, 2026
5494a58
Reset Link Text
gburton Mar 13, 2026
ce437a2
Update write.php
gburton Mar 14, 2026
1037465
Allow CSS target per Slot
gburton Mar 15, 2026
b96f16c
Remove viewport display
gburton Mar 18, 2026
57c3e83
Extraneous end paragraph
gburton Mar 24, 2026
1654e62
Choose Options Button
gburton Mar 24, 2026
8869410
From Price
gburton Mar 24, 2026
6174235
Show Stock Status in Card
gburton Mar 24, 2026
867ed77
Update product_card.php
gburton Mar 24, 2026
e0447ee
Update account_history_info.php
gburton Mar 28, 2026
8c57a7b
Update tpl_cu_form.php
gburton Mar 29, 2026
7585607
Create php-lint.yml
gburton Mar 31, 2026
fabd348
Update select.php
gburton Apr 6, 2026
da64a49
Update add_attribute.php
gburton Apr 6, 2026
82da327
Update product_card.php
gburton Apr 6, 2026
8fe414d
Update Carousel Images & Text
gburton Apr 10, 2026
601cf6a
Remove Sub Adverts
gburton Apr 10, 2026
4514a35
Image Attribution
gburton Apr 11, 2026
3291170
Cosmetics in Language Files
gburton Apr 11, 2026
ac8bb4e
Uninstall Product Info Content Modules
gburton Apr 12, 2026
f811685
Introduce Product Info Layout Modules
gburton Apr 12, 2026
26e641c
Install Product Info Layout Modules
gburton Apr 12, 2026
70aeb2e
Update phoenix.sql
gburton Apr 12, 2026
80abf04
Remove Continue Button
gburton Apr 12, 2026
b2155d3
Install Search Result Modules
gburton Apr 12, 2026
3a87221
Update phoenix.sql
gburton Apr 12, 2026
2794dbc
Uninstall Index Brands and Hero
gburton Apr 12, 2026
c420092
Update phoenix_data_sample.sql
gburton Apr 12, 2026
dd7cff7
Update english.php
gburton Apr 15, 2026
d68e60f
Make Buttons Context Aware
gburton Apr 15, 2026
0827280
Move Reviews & Testimonials to Customers
gburton Apr 17, 2026
7d50597
Extend Admin Navbar positioning
gburton Apr 17, 2026
044259f
Update hMenu.php
gburton Apr 17, 2026
318c967
Remove CE text from public display
gburton Apr 17, 2026
8a8f01c
Introduce Content Module
gburton Apr 17, 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
2 changes: 1 addition & 1 deletion .github/SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ are made in the latest release.
To report a security vulnerability, please do one of the following:

1. Report the vulnerability using [Github Security Advisories](https://github.com/CE-PhoenixCart/PhoenixCart/security/advisories/new). This is our preferred method.
2. Join the [CE Phoenix Cart Forum](https://phoenixcart.org/forum/) and send a PM to ecartz and burt.
2. Join the [Phoenix Cart Forum](https://phoenixcart.org/forum/) and send a PM to ecartz and burt.
3. Email ecartz and gburton, using the commit email addresses.
53 changes: 53 additions & 0 deletions .github/workflows/php-lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: PHP Lint on Pull Requests

on:
pull_request:
branches-ignore:
- 'master'

jobs:
php-lint:
name: PHP Lint
runs-on: ubuntu-latest
strategy:
matrix:
php-version: ['7.4', '8.0', '8.1', '8.2']

steps:
- name: Check out code
uses: actions/checkout@v4

- name: Set up PHP ${{ matrix.php-version }}
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}

- name: Lint changed PHP files
id: lint
run: |
files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | grep '\.php$' || true)

if [ -z "$files" ]; then
echo "No PHP files changed in this PR."
exit 0
fi

error_count=0
failed_files=()

for file in $files; do
if ! php -l "$file" >/dev/null 2>&1; then
error_count=$((error_count+1))
failed_files+=("$file")
fi
done

if [ "$error_count" -eq 0 ]; then
echo "✔️ All PHP files passed linting on PHP ${{ matrix.php-version }}"
else
echo "❌ PHP Lint found $error_count file(s) with syntax errors on PHP ${{ matrix.php-version }}:"
for file in "${failed_files[@]}"; do
echo "----- $file -----"
php -l "$file"
done
exit 1
27 changes: 16 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ Please be aware that most language packs are maintained by volunteers so may not

## How to Support the Phoenix Project

Help Phoenix fly high...if you or your employer is commercially dependent on Phoenix (or a previous incarnation), please help to [sponsor](https://phoenixcart.org/phoenix_gopro.php) forward movement in the code-base. Phoenix needs you as much as you need Phoenix.
Help Phoenix fly high...if you or your employer is commercially dependent on Phoenix (or a previous incarnation), please help to sponsor forward movement in the code-base. Phoenix needs you as much as you need Phoenix.

Thank you to all shopowners, developers, consultants and business owners who are supporting the Project by volunteering their time and/or by supporting the project financially.

Expand All @@ -100,15 +100,14 @@ If you are looking for a developer for a paid-for project, please consider one o

### Join the Phoenix Forum

If you wish to help steer the future direction of the software, join the [Forum](https://phoenixcart.org/forum/) and consider [sponsoring](https://phoenixcart.org/phoenix_gopro.php) Phoenix.
If you wish to help steer the future direction of the software, join the [Forum](https://phoenixcart.org/forum/) and consider sponsoring Phoenix.

## Helpful Links

Channel | URL
------------ | -------------
Phoenix (Forum) | https://phoenixcart.org/forum/
Phoenix (Youtube) | https://www.youtube.com/@PhoenixCart/
Zipurman Coding (Youtube) | https://www.youtube.com/user/zipurman/videos
User Guide (Phoenix Cart) | https://phoenixcart.org/phoenixcartwiki/index.php
Add-ons Library (Phoenix Cart) | https://phoenixcart.org/forum/addons/

Expand All @@ -118,12 +117,18 @@ Images in the default installation are copyright their respective owners;

Image | Owner | Usage
------------ | ------------- | -------------
Phoenix Logos | Phoenix Cart | https://phoenixcart.org Phoenix Logos may not be used without prior written permission from the copyright owner.
Oranges, Lemons, Pears, Apples | [Eelffica](https://pixabay.com/users/eelffica-52436/) from Pixabay | https://pixabay.com/service/license/
Tomatoes | [Rocky_H](https://pixabay.com/users/rocky_h-11790006/) from Pixabay | https://pixabay.com/service/license/
Glasses | [Alexander Lesnitsky](https://pixabay.com/users/alles-2597842/) from Pixabay | https://pixabay.com/service/license/
Farm | [OpenClipart-Vectors](https://pixabay.com/users/openclipart-vectors-30363/) from Pixabay | https://pixabay.com/service/license/
Strawberries | [Gerd Altman](https://pixabay.com/users/geralt-9301/) from Pixabay | https://pixabay.com/service/license/
Phoenix Logos | Phoenix Cart | https://phoenixcart.org/marketing_media.php
Oranges | [Peggychoucair](https://pixabay.com/users/peggychoucair-1130890/) from Pixabay | https://pixabay.com/service/license/
Lemons | [JillWellington](https://pixabay.com/users/jillwellington-334088/) from Pixabay | https://pixabay.com/service/license/
Lemons | [zuzi99](https://pixabay.com/users/zuzi99-7340598/) from Pixabay | https://pixabay.com/service/license/
Pears | [JillWellington](https://pixabay.com/users/jillwellington-334088/) from Pixabay | https://pixabay.com/service/license/
Red Apples | [manja18081988](https://pixabay.com/users/manja18081988-52314215/) from Pixabay | https://pixabay.com/service/license/
Red Tomatoes | [RitaE](https://pixabay.com/users/ritae-19628/) from Pixabay | https://pixabay.com/service/license/
Green Tomatoes | [HBH-MEDIA-photography](https://pixabay.com/users/hbh-media-photography-193359/) from Pixabay | https://pixabay.com/service/license/
Green Apples | [Daria-Yakovleva](https://pixabay.com/users/daria-yakovleva-3938704/) from Pixabay | https://pixabay.com/service/license/
Grapefruit | [blandinejoannic](https://pixabay.com/users/blandinejoannic-15617008/) from Pixabay | https://pixabay.com/service/license/
Lime | [Congerdesign](https://pixabay.com/users/congerdesign-509903/) from Pixabay | https://pixabay.com/service/license/
Tractor | [The_Northern_Photographer](https://pixabay.com/users/the_northern_photographer-49449853/) from Pixabay | https://pixabay.com/service/license/
Strawberries | [MariyaKas](https://pixabay.com/users/mariyakas-16732382/) from Pixabay | https://pixabay.com/service/license/
Fruit, Laptop | [Ylanite Koppens](https://pixabay.com/users/nietjuhart-30460544/) from Pixabay | https://pixabay.com/service/license/

Other fruit images are based on modified images from the named owners.
Index Carousels | [congerdesign](https://pixabay.com/users/congerdesign-509903/">congerdesign</a> from Pixabay | https://pixabay.com/service/license/
2 changes: 1 addition & 1 deletion admin/administrators.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
$authuserfile_lines = [
'##### Phoenix ADMIN PROTECTION - BEGIN #####',
'AuthType Basic',
'AuthName "CE Phoenix Administration Tool"',
'AuthName "Phoenix Administration Tool"',
"AuthUserFile $htpasswd_path",
'Require valid-user',
'##### Phoenix ADMIN PROTECTION - END #####',
Expand Down
24 changes: 0 additions & 24 deletions admin/includes/actions/action_recorder/infoboxes/default.php

This file was deleted.

26 changes: 15 additions & 11 deletions admin/includes/actions/action_recorder/views/default.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@
$action_recorder_sql = "SELECT * FROM action_recorder";
if (count($filter) > 0) {
$action_recorder_sql .= " WHERE " . implode(" AND ", $filter);

$admin_hooks->set('actionRecorderButtons', 'reset_search', function () {
return $GLOBALS['Admin']->button(IMAGE_RESET, 'fas fa-angle-left', 'btn-light', $GLOBALS['Admin']->link('action_recorder.php'));
});
}
$action_recorder_sql .= " ORDER BY date_added DESC";

Expand All @@ -44,8 +48,15 @@
return htmlspecialchars($row['user_name']) . ' [' . (int)$row['user_id'] . ']';
},
],
[
'name' => TABLE_HEADING_IDENTIFIER,
'function' => function (&$row) {
return $row['identifier'] ?? '';
},
],
[
'name' => TABLE_HEADING_SUCCESS,
'class' => 'text-center',
'function' => function (&$row) {
return ($row['success'] == '1')
? '<i class="fas fa-check-circle text-success"></i>'
Expand All @@ -59,19 +70,14 @@
return $GLOBALS['date_time_formatter']->format((new Date($row['date_added']))->get_timestamp());
},
],
[
'name' => TABLE_HEADING_ACTION,
'class' => 'text-end',
'function' => function ($row) {
return (isset($row['info']->id) && ($row['info']->id === $row['id']))
? '<i class="fas fa-chevron-circle-right text-info"></i>'
: '<a href="' . $row['onclick'] . '"><i class="fas fa-info-circle text-muted"></i></a>';
},
],
],
'count_text' => TEXT_DISPLAY_NUMBER_OF_ENTRIES,
'hooks' => [
'button' => 'actionRecorderButtons',
],
'page' => $_GET['page'] ?? null,
'sql' => $action_recorder_sql,
'width' => 12,
];
$table_definition['split'] = new Paginator($table_definition);
$table_definition['function'] = function (&$row) use (&$table_definition) {
Expand All @@ -84,10 +90,8 @@
$table_definition['info'] = new objectInfo($row);
$row['info'] = &$table_definition['info'];

$row['onclick'] = $link->set_parameter('action', 'edit');
$row['css'] = ' class="table-active"';
} else {
$row['onclick'] = $link;
$row['css'] = '';
}
};
Expand Down
2 changes: 1 addition & 1 deletion admin/includes/actions/backup/backup_now.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
$fp = fopen(DIR_FS_BACKUP . $backup_file, 'w');

fputs($fp, sprintf(<<<'EOSQL'
# CE Phoenix, E-Commerce made Easy
# Phoenix, E-Commerce made Easy
# https://phoenixcart.org
#
# Database Backup For %s
Expand Down
77 changes: 48 additions & 29 deletions admin/includes/actions/customers/views/edit.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,47 +14,66 @@

$hooks =& $admin_hooks;
$Template = new Template('default');
?>

<div id="customerTabs">
<ul class="nav nav-tabs">
<li class="nav-item"><a class="nav-link active" data-bs-toggle="tab" href="#section_customer_details" role="tab"><?= TAB_TITLE_CUSTOMER_DETAILS ?></a></li>
</ul>

echo (new Form('customers', $Admin->link('customers.php')->retain_query_except()->set_parameter('action', 'update'), 'post'))
<div class="tab-content pt-3">
<div class="tab-pane fade show active" id="section_customer_details" role="tabpanel">
<?php
echo (new Form('customers', $Admin->link('customers.php')->retain_query_except()->set_parameter('action', 'update'), 'post'))
->hide('default_address_id', $customer_data->get('default_address_id', $customer_details));

$cwd = getcwd();
chdir(DIR_FS_CATALOG);
echo '<div class="row">';
$cwd = getcwd();
chdir(DIR_FS_CATALOG);

$page_fields = $customer_data->get_fields_for_page('customers');
$grouped_modules = $customer_data->get_grouped_modules();
$customer_data_group_query = $db->query(sprintf(<<<'EOSQL'
$page_fields = $customer_data->get_fields_for_page('customers');
$grouped_modules = $customer_data->get_grouped_modules();
$customer_data_group_query = $db->query(sprintf(<<<'EOSQL'
SELECT *
FROM customer_data_groups
WHERE language_id = %d
ORDER BY cdg_vertical_sort_order
EOSQL
, (int)$_SESSION['languages_id']));

while ($customer_data_group = $customer_data_group_query->fetch_assoc()) {
if (empty($grouped_modules[$customer_data_group['customer_data_groups_id']])) {
continue;
}
?>

<h5><?= $customer_data_group['customer_data_groups_name'] ?></h5>
while ($customer_data_group = $customer_data_group_query->fetch_assoc()) {
if (empty($grouped_modules[$customer_data_group['customer_data_groups_id']])) {
continue;
}
?>
<div class="<?= $customer_data_group['customer_data_groups_width'] ?>">
<p class="fs-4 fw-semibold mb-1"><?= $customer_data_group['customer_data_groups_name'] ?></p>

<?php
foreach ((array)$grouped_modules[$customer_data_group['customer_data_groups_id']] as $module) {
if (count(array_intersect(get_class($module)::PROVIDES, $page_fields)) > 0) {
$module->display_input($customer_details);
}
}
}
<?php
foreach ((array)$grouped_modules[$customer_data_group['customer_data_groups_id']] as $module) {
if (count(array_intersect(get_class($module)::PROVIDES, $page_fields)) > 0) {
$module->display_input($customer_details);
}
}
?>
</div>
<?php
}

chdir($cwd);
chdir($cwd);

echo $admin_hooks->cat('editForm');
echo $admin_hooks->cat('injectFormDisplay');
?>

<div class="d-grid mt-2">
<?= new Button(IMAGE_SAVE, 'fas fa-save', 'btn-success btn-lg') ?>
echo $admin_hooks->cat('editForm');
echo $admin_hooks->cat('injectFormDisplay');
?>

<div class="d-grid mt-2">
<?= new Button(IMAGE_SAVE, 'fas fa-save', 'btn-success') ?>
</div>
</div>
</form>
</div>

<?= $admin_hooks->cat('customerTab') ?>

</div>
</div>

</form>
2 changes: 1 addition & 1 deletion admin/includes/actions/orders/views/edit.php
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@
echo '<td class="text-end">' . Tax::format($product['tax']) . '%</td>';
echo '<td class="text-end">' . $currencies->format($product['final_price'], true, $order->info['currency'], $order->info['currency_value']) . '</td>';
echo '<td class="text-end">' . $currencies->format(Tax::add($product['final_price'], $product['tax']), true, $order->info['currency'], $order->info['currency_value']) . '</td>';
echo '<td class="text-end">' . $currencies->format($product['final_price'] * $product['qty'], true, $order->info['currency'], $order->info['currency_value']) . '</strong></td>';
echo '<td class="text-end">' . $currencies->format($product['final_price'] * $product['qty'], true, $order->info['currency'], $order->info['currency_value']) . '</td>';
echo '<th class="text-end">' . $currencies->format(Tax::add($product['final_price'], $product['tax']) * $product['qty'], true, $order->info['currency'], $order->info['currency_value']) . '</th>';
echo '</tr>';
}
Expand Down
2 changes: 1 addition & 1 deletion admin/includes/application_top.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
}

// Define the project version --- obsolete, now retrieved with Versions::get('Phoenix')
define('PROJECT_VERSION', 'CE Phoenix');
define('PROJECT_VERSION', 'Phoenix');

// set the type of request (secure or not)
$request_type = (getenv('HTTPS') === 'on') ? 'SSL' : 'NONSSL';
Expand Down
7 changes: 6 additions & 1 deletion admin/includes/boxes/configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,12 @@
Released under the GNU General Public License
*/

$cl_box_groups[] = ['sort' => 10, 'heading' => BOX_HEADING_CONFIGURATION, 'apps' => []];
$cl_box_groups[] = [
'nav' => 'end', // start | center | end
'sort' => 10,
'heading' => BOX_HEADING_CONFIGURATION,
'apps' => []
];

$configuration_groups_query = $GLOBALS['db']->query("SELECT configuration_group_id AS cgID, configuration_group_title AS cgTitle FROM configuration_group WHERE visible = '1' ORDER BY sort_order");
while ($configuration_groups = $configuration_groups_query->fetch_assoc()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@
/*
$Id$

CE Phoenix, E-Commerce made Easy
Phoenix, E-Commerce made Easy
https://phoenixcart.org

Copyright (c) 2021 Phoenix Cart
Copyright (c) 2026 Phoenix Cart

Released under the GNU General Public License
*/

foreach ( $cl_box_groups as &$group ) {
if ( $group['heading'] == BOX_HEADING_CATALOG ) {
if ( $group['heading'] == BOX_HEADING_CUSTOMERS ) {
$group['apps'][] = [
'code' => 'reviews.php',
'title' => MODULES_ADMIN_MENU_CATALOG_REVIEWS,
'title' => MODULES_ADMIN_MENU_CUSTOMERS_REVIEWS,
'link' => $GLOBALS['Admin']->link('reviews.php'),
];

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@
/*
$Id$

CE Phoenix, E-Commerce made Easy
Phoenix, E-Commerce made Easy
https://phoenixcart.org

Copyright (c) 2021 Phoenix Cart
Copyright (c) 2026 Phoenix Cart

Released under the GNU General Public License
*/

foreach ( $cl_box_groups as &$group ) {
if ( $group['heading'] == BOX_HEADING_CATALOG ) {
if ( $group['heading'] == BOX_HEADING_CUSTOMERS ) {
$group['apps'][] = [
'code' => 'testimonials.php',
'title' => MODULES_ADMIN_MENU_CATALOG_TESTIMONIALS,
'title' => MODULES_ADMIN_MENU_CUSTOMERS_TESTIMONIALS,
'link' => $GLOBALS['Admin']->link('testimonials.php'),
];

Expand Down
Loading