SellMe
SellMe

© 2025 SellMe - Sales Management System

badge Role: Guest
schedule Server Time: 21:27:55

Changelog - Version 0.3.3

Changelog


All notable changes to the SellMe application will be documented in this file.


[0.3.3] - 2025-12-27


Major Changes

  • Timezone Standardization: Comprehensive timezone consistency improvements across the entire application

Fixed

  • Database Timestamp Storage: Standardized all database timestamp operations to use UTC

- Replaced all NOW() and CURRENT_TIMESTAMP occurrences in SQL queries with UTC_TIMESTAMP()

- Fixed 32+ instances across controllers, models, and services

- Ensures consistent UTC storage regardless of server timezone configuration

- Affects: OrderController, PlannerController, User, Setting, ActivityLog, DisplaySession, JobHistory, SalesEvent, DashboardController, LiveDataProcessor, ApiWarningService, HelperModerator, and more


  • Date/Time Display Consistency: Fixed timezone conversion issues in UI displays

- Planner modal and tooltips now correctly display dates in local timezone

- Live stock view timer displays correct elapsed time

- Order creation form shows correct event dates

- Orders table displays dates and times correctly


  • API Endpoint Timestamps: Fixed timestamp handling in API responses

- All API timestamps now use UTC for consistency (using gmdate())

- SSE stream timestamps standardized to UTC

- Rate limiting reset times use UTC


  • User Lockout Timestamps: Fixed user lockout calculation to use UTC

- Lockout expiration times now calculated using UTC_TIMESTAMP() in SQL

- Prevents timezone-related lockout duration issues


Changed

  • PHPDoc Documentation: Enhanced documentation with timezone guidelines

- Added comprehensive UTC usage documentation to BaseModel

- Updated DateHelper documentation to clarify UTC input/output behavior

- Added timezone rule documentation to PlannerController and OrderController

- Updated method-level PHPDoc comments in models with UTC storage notes


  • DateHelper Improvements: Clarified timezone handling in helper methods

- Updated formatDateTime() documentation to specify UTC input expected

- Enhanced createDateTime() documentation for UTC conversion behavior

- All database dates are stored in UTC and converted to local timezone for display


Technical Details

  • Timezone Rule: "Store UTC, Display Local"

- All database timestamps MUST use UTC_TIMESTAMP() in SQL queries

- All datetime inputs from forms are converted from local time to UTC before storage

- All datetime outputs are converted from UTC to local timezone using DateHelper::formatDateTime()

- This ensures consistency regardless of server timezone configuration


  • Files Modified:

- Models: BaseModel, User, Setting, ActivityLog, DisplaySession, JobHistory, SalesEvent, Order, HelperModerator

- Controllers: PlannerController, OrderController, DashboardController, ApiController, LiveStockViewController

- Services: LiveDataProcessor, ApiWarningService

- Helpers: DateHelper (documentation only)


  • Database Queries: All timestamp-related SQL queries now use UTC_TIMESTAMP() instead of NOW()

---


[0.3.2] - 2025-12-27


Changed

  • Session Management: Extended session cookie lifetime from session-only to 30 days

- Prevents frequent re-logins by persisting sessions across browser sessions

- Session garbage collection (session.gc_maxlifetime) aligned with cookie lifetime

- Improves user experience with longer-lasting authentication


  • File Organization: Improved project structure and organization

- Moved Nginx configuration files from web root to Docs/nginx/ directory

- Better separation of documentation and configuration files from application code


  • Application Entry Point: Refactored public/index.php for better security and organization

- Removed web-accessible test script access (security improvement)

- Removed phpMyAdmin request handling (moved to Nginx configuration)

- Made error reporting environment-based using APP_DEBUG configuration

- Cleaned up commented-out debug code


  • Development Router: Simplified public/router.php

- Removed redundant TIFF file blocking logic (handled by Nginx in production)

- Updated documentation to reflect Nginx's role in file blocking


Fixed

  • Favicon References: Fixed broken favicon links in HTML templates

- Updated references from non-existent favicon-32x32.png and favicon-16x16.png to existing favicon.ico and icon.svg

- Corrected favicon links in main layout and 404 error page

- Eliminates 404 errors for favicon requests


  • Catalog Cache Management: Implemented automatic cleanup for catalog cache directory

- Added cleanupOldCacheFiles() method to ProductCatalogHelper

- Automatically removes cache files older than 24 hours (1% chance per cache write)

- Prevents indefinite growth of cache directory


Removed

  • Unused Dependencies: Cleaned up Composer dependencies

- Removed phpdocumentor/phpdocumentor from require-dev

- Cleaned up ~100+ unused dependencies from composer.lock

- Reduced vendor directory size and improved dependency clarity


  • Unused CSS Files: Removed unused stylesheets

- Deleted graphic-dashboard.css (unused)

- Deleted shootings.css (unused)


  • Boilerplate Code: Removed leftover boilerplate code

- Removed getImageUrl() function and references to non-existent Image model

- Removed converted_dir configuration and related checks

- Removed references to libvips and word-generator from dependencies UI

- Removed phpmyadmin-handler.php file (functionality moved to Nginx)


Technical Details

  • Session configuration updated in app/Helpers/Session.php
  • Cache cleanup integrated into ProductCatalogHelper::setImportProgress()
  • Nginx configs moved to Docs/nginx/ directory
  • Favicon files properly referenced: favicon.ico, icon.svg, apple-touch-icon.png

---


[0.3.1] - 2025-12-26


Major Changes

  • Kiosk Display System: New extensible kiosk display authentication and management system for headless displays

Added

  • Kiosk Display Authentication: 4-digit code-based authentication system for kiosk displays

- Numeric code generation and display on authorization screen

- Admin interface in dashboard for authorizing displays (webadmin only)

- Automatic code expiration (15 minutes) with visual timer

- Session extension to 48 hours after successful authorization

- Automatic code regeneration when expired


  • Live Stock View Kiosk Display: Real-time inventory display for headless screens

- Server-Sent Events (SSE) for instant stock updates

- Card-based layout optimized for display screens

- Dynamic border colors based on stock levels (green/yellow/red with flashing)

- Digital clock and event elapsed time display

- No header, footer, or navigation (kiosk-optimized)

- Event selection from dashboard when multiple events are active


  • Kiosk Mode Hub: Central entry point for kiosk displays

- Accessible at /kioskmode

- Displays available kiosk display types

- Extensible architecture for future display types


  • Base Kiosk Controller: Shared base class for all kiosk display types

- BaseKioskController with common authentication logic

- Extensible design for adding new display types

- UTC timestamp handling to prevent timezone issues


  • Display Session Management: Database-backed session management

- display_sessions table for storing authorization codes

- Support for display-specific configuration (e.g., eventId)

- Automatic cleanup of expired sessions


  • Visual Timer Animation: SVG-based circular progress timer

- Starts green (100% remaining)

- Transitions to yellow as time runs out

- Red blinking animation in last 1 minute

- Timer resets to 15 minutes on page reload


Changed

  • Live Stock View: Converted to kiosk display with authentication

- Now requires authorization via 4-digit code

- Optimized for headless display screens

- Improved SSE stream performance with caching


  • Dashboard UI Improvements: Enhanced dashboard quick actions and authorization interface

- Live Stock View button: Removed text label, added tooltip, changed icon to live_tv

- Kiosk authorization: Moved "Enter 4-digit code:" text to input placeholder

- Inline layout: All authorization elements (button, input, authorize button) on same line

- Authorize button: Removed text label, icon-only with tooltip for space efficiency


Fixed

  • Session Lock Blocking: Fixed critical session lock issue in Live Stock View SSE stream

- Added session_write_close() after authorization to release session lock

- Prevents blocking other requests while SSE stream is active

- Improves overall application responsiveness during kiosk display usage


Technical Details

  • New database table: display_sessions (migration script: database/migrate_display_sessions.php)
  • New models: DisplaySession, BaseKioskController
  • New controllers: KioskController, DisplayController
  • New routes: /kioskmode, /displays/check-auth, /displays/authorize, /displays/active-sessions
  • SSE stream optimization: 3-second cache duration to reduce database load

---


[0.3.0] - 2025-12-23


Major Changes

  • Server Migration: Migrated to new server environment with updated infrastructure
  • Label Printer Enhancements: Major improvements to label printing functionality with mirror printing support

Added

  • Mirror Printing Feature: Complete mirror printing implementation for ZPL printers

- GD library-based mirrored graphic generation for Event Product ID

- Text rotation (180°) when mirror printing is enabled for readability from back of label

- Automatic graphic scaling to fit label width with configurable margins

- Uses proven ~DGR (download to RAM) + ^XGR (recall) ZPL format for reliable printing


  • QR Code Support: QR code generation and printing on labels

- Contains event_product_id:article_number data format

- Positioned below price/quantity line, right-aligned

- Only displayed when mirror printing is disabled (to avoid overlap)

- Configurable size (80 dots scaled with paper width)


  • Enhanced Label Layout: Improved label layout and spacing

- Event Product ID and Article Number on same line (large font, bold if contains colon)

- Price and Quantity on same line with proper spacing

- Dynamic label height calculation based on content

- 30mm top margin for mirrored graphic area

- 3mm safety margin at bottom


  • Label Data Fields: Enhanced label data support

- Price display (formatted with currency)

- Quantity display (formatted as "Menge: X")

- Improved font sizing and spacing

- Better text truncation for long product titles


Changed

  • Label Printer Helper: Comprehensive refactoring of LabelPrinterHelper.php

- Updated to use ~DGR/^XGR format for graphics (replacing ^GFA)

- Added scaleImageToWidth() method for graphic scaling

- Renamed imageToZPLGF() to imageToZPLBitmap() for clarity

- Improved label height calculation for both mirror and non-mirror modes

- Enhanced PHPDoc documentation throughout


  • Label Height Calculation: Dynamic height calculation based on content

- Different calculation for mirror printing enabled vs disabled

- Accounts for QR code when mirror printing is disabled

- Accounts for graphic area when mirror printing is enabled

- 30mm reduction adjustment for optimal label length


  • Text Orientation: Conditional text rotation

- All text fields rotate 180° (^A0I) when mirror printing enabled

- Normal orientation (^A0N) when mirror printing disabled

- Ensures readability from back of label when mirror printed


Fixed

  • Graphic Scaling: Fixed graphic sizing issues

- Added automatic scaling to fit label width (with 40 dots margin per side)

- Prevents graphics from being too large for label


  • Label Length: Fixed label height calculation

- Adjusted height to prevent labels from being too long

- Added 30mm reduction when mirror printing enabled


Technical Details

  • Graphic generation uses GD library with TrueType font support
  • Bitmap conversion optimized for ZPL printer compatibility
  • Improved error handling with fallback to text if graphics fail
  • Comprehensive PHPDoc comments added for all methods
  • Label layout documentation updated in LABEL_DATA_DOCUMENTATION.md

---


[0.2.18] - 2025-12-23


Added

  • MariaDB Support: Full support for MariaDB in database backup functionality

- Automatic detection of mariadb-dump and mysqldump tools

- Support for both MySQL and MariaDB backup commands

- Linux/Debian path detection for MariaDB client tools

- Enhanced error messages with installation instructions for MariaDB client


  • Linux/Debian Compatibility: Improved compatibility with Linux/Debian server environments

- Fixed path resolution for backups directory using realpath()

- Added proper PATH environment variable handling for PHP-FPM

- Support for TCP connections (converts localhost to 127.0.0.1)

- Comprehensive error logging and diagnostics


Fixed

  • Backup Functionality: Fixed database backup issues on Linux/MariaDB

- Fixed path resolution that prevented backup directory writability checks

- Changed password syntax from -p to --password= for better compatibility

- Added localhost to 127.0.0.1 conversion to force TCP instead of socket connections

- Improved error handling and detailed error messages

- Fixed directory path resolution using absolute paths


  • Error Handling: Enhanced backup error reporting

- Detailed error messages with diagnostic information

- Proper error file handling and cleanup

- Logging of PHP user, tool paths, and execution context

- Better error output capture from backup commands


Changed

  • Backup Tool Detection: Improved backup tool detection algorithm

- Prioritizes mariadb-dump for MariaDB installations

- Checks Linux standard paths before macOS-specific paths

- More reliable tool path resolution

- Better handling of PHP-FPM execution context


  • Documentation: Updated PHPDoc comments

- Added comprehensive documentation for backup methods

- Documented MariaDB support and requirements

- Added usage examples and troubleshooting information


Technical Details

  • Updated findMysqldump() method to search for mariadb-dump first
  • Enhanced createBackup() with better error handling and logging
  • Fixed backups directory path resolution using dirname() and realpath()
  • Added PATH environment variable to backup command execution
  • Improved error file handling with proper cleanup

---


Previous Versions


*Changelog entries for versions prior to 0.2.18 are not available in this format.*



Third-Party Software

Core Technologies

  • PHP
    PHP Server-side scripting language - 8.4.16 ↗ Website
  • MariaDB
    MariaDB Open-source relational database management system ↗ Website

PHP Dependencies

  • mpdf/mpdf PHP library for generating PDF files from HTML (v8.2+) ↗ GitHub

JavaScript Libraries

  • jQuery JavaScript library for DOM manipulation and event handling ↗ Website
  • DataTables jQuery plugin for advanced tables with sorting, filtering, and pagination ↗ Website
  • Tippy.js Tooltip and popover library with customizable themes and animations ↗ Website
  • Popper.js Positioning engine for tooltips, popovers, and dropdowns (dependency of Tippy.js) ↗ Website
  • FullCalendar Full-featured calendar library for displaying events and scheduling (v6.1.10) ↗ Website
  • SortableJS JavaScript library for drag-and-drop reordering of list items ↗ Website

External Services

  • Google Material Icons Icon font library for Material Design icons (Material Icons Outlined) ↗ Website

Copyright & Legal

SellMe

Copyright © 2025 SellMe - Sales Management System. All rights reserved.

SellMe is a sales management system designed for managing sales events, products, and stream events.

Legal Information

This software is provided as-is for use in sales management and event workflows.

All content and data managed through this system remain the property of their respective owners. SellMe does not claim ownership of any user-uploaded content.

For questions regarding copyright or legal matters, please contact your system administrator.

Print Options

Select a print template
Choose how to view the generated PDF
Leave empty to use default filename