Migration Guide: v1.x to v2.0.0¶
This guide covers breaking changes and migration steps when upgrading from WebCalendar v1.x to v2.0.0.
For routine version upgrades within the 1.9.x line, see Upgrade Guide.
Table of Contents¶
- Before You Start
- Breaking Changes
- Installation System
- Database Schema Changes
- Configuration Changes
- PHP Version Requirements
- Removed Features
- Authentication Bridges
- Step-by-Step Migration
- Rollback
- Known Issues
Before You Start¶
-
Back up your database — this is not optional:
# MySQL / MariaDB mysqldump -u USERNAME -p DATABASE > backup-$(date +%F).sql # PostgreSQL pg_dump -U USERNAME DATABASE > backup-$(date +%F).sql # SQLite3 cp /path/to/webcalendar.db backup-$(date +%F).db -
Back up your configuration:
cp includes/settings.php includes/settings.php.backup -
Back up custom files (icons, themes).
-
Note your current version. Check in the admin panel or:
SELECT cal_value FROM webcal_config WHERE cal_setting = 'WEBCAL_PROGRAM_VERSION';
Breaking Changes¶
Installation System Replaced¶
| Before (v1.2 and earlier) | After (v1.9.13+) |
|---|---|
install/index.php |
wizard/index.php |
install/sql/ |
wizard/shared/ |
install/default_config.php |
wizard/shared/default_config.php |
install/settings.php (wizard password) |
includes/settings.php (all config) |
The old install/ directory no longer exists. If your deployment scripts
or cron jobs reference install/, they must be updated.
Documentation Moved¶
| Before | After |
|---|---|
docs/WebCalendar-SysAdmin.html |
docs/admin-guide.md |
docs/WebCalendar-UserManual.html |
docs/user-guide.md |
docs/WebCalendar-DeveloperGuide.html |
docs/developer-guide.md |
docs/WebCalendar-Functions.html |
Removed (use IDE/PHPDoc) |
UPGRADING.html |
docs/upgrade-guide.md |
Legacy HTML docs are preserved in docs/archive/legacy-html/ for
historical reference.
Database Schema Changes¶
The upgrade wizard handles all schema changes automatically. The following is for reference only — you do not need to run these manually.
Changes from v1.9.0 to v1.9.16¶
v1.9.6 — Entry categories primary key constraint:
-- webcal_entry_categories: cat_owner set to '' where NULL,
-- primary key constraint added
v1.9.11 — Category icons:
ALTER TABLE webcal_categories ADD cat_status CHAR DEFAULT 'A';
ALTER TABLE webcal_categories ADD cat_icon_mime VARCHAR(32) DEFAULT NULL;
ALTER TABLE webcal_categories ADD cat_icon_blob LONGBLOB DEFAULT NULL;
v1.9.12 — URL field widened:
ALTER TABLE webcal_nonuser_cals MODIFY cal_url VARCHAR(255);
ALTER TABLE webcal_entry MODIFY cal_url VARCHAR(255);
v1.9.13 — MCP API token:
ALTER TABLE webcal_user ADD cal_api_token VARCHAR(255) DEFAULT NULL;
v1.9.16 — Blob table ensured:
CREATE TABLE IF NOT EXISTS webcal_blob ( ... );
Upgrading from Very Old Versions (pre-1.9.0)¶
If upgrading from v1.3.x or earlier, the wizard applies all intermediate schema changes automatically. Major changes include:
- Timezone tables and GMT conversion (v1.1 → v1.3)
- Import tracking tables (v1.3 → v1.9)
- Reminder system overhaul (v1.1)
The wizard detects your current version by probing the database schema and applies only the changes needed.
Configuration Changes¶
settings.php Location¶
The configuration file has always been includes/settings.php. If your
old installation had a separate install/settings.php (wizard
password), that file is no longer used.
New Environment Variables¶
These environment variables were added in the v1.9.x series:
| Variable | Version | Purpose |
|---|---|---|
WEBCALENDAR_USE_ENV |
v1.9.12 | Enable env-based config |
WEBCALENDAR_DB_TYPE |
v1.9.12 | Database backend |
WEBCALENDAR_DB_HOST |
v1.9.12 | Database hostname |
WEBCALENDAR_DB_DATABASE |
v1.9.12 | Database name |
WEBCALENDAR_DB_LOGIN |
v1.9.12 | Database username |
WEBCALENDAR_DB_PASSWORD |
v1.9.12 | Database password |
WEBCALENDAR_MODE |
v1.9.12 | dev or prod |
MCP_TOKEN |
v1.9.13 | MCP server API token |
New Admin Settings¶
| Setting | Version | Purpose |
|---|---|---|
MCP_SERVER_ENABLED |
v1.9.13 | Enable/disable MCP server |
MCP_RATE_LIMIT |
v1.9.13 | MCP requests per minute |
PHP Version Requirements¶
| WebCalendar Version | PHP Minimum | Recommended |
|---|---|---|
| v1.9.0 - v1.9.10 | 7.4 | 8.0 |
| v1.9.11 - v1.9.16 | 8.0 | 8.2+ |
| v2.0.x | 8.0 | 8.2+ |
If upgrading from PHP 7.x, update PHP first and verify your application works before upgrading WebCalendar.
Removed Features¶
Old Installer (install/ directory)¶
The install/ directory and its contents were removed in v1.9.13,
replaced by the wizard/ system. The new wizard provides:
- Single-page Bootstrap 5 interface
- Headless CLI mode (
wizard/headless.php) - Automatic version detection and schema upgrades
- Environment variable support for containers
Legacy Database Backends¶
The following database backends have code in includes/dbi4php.php and
the wizard UI, but are not tested on PHP 8 and may not work:
| Backend | Issue |
|---|---|
| Oracle | Uses OCIParse/OCIExecute aliases removed in PHP 8.0 |
| IBM DB2 | Requires PECL ibm_db2 extension; untested |
| ODBC | Untested; no dedicated table creation SQL |
| Interbase/Firebird | ibase_* extension removed from PHP 8 core |
| SQLite (v2) | Extension removed from PHP 8.0; use sqlite3 |
If you are using one of these backends, you should migrate to MySQL, PostgreSQL, or SQLite3 before upgrading.
Legacy Documentation Toolchain¶
The Perl-based documentation generators (sql2html.pl, php2html.pl,
extractfaqs.pl) are archived. Documentation is now maintained as
Markdown files in docs/.
SQLite (Legacy)¶
The original SQLite extension (sqlite) is deprecated in favor of
sqlite3. If your $db_type is sqlite, change it to sqlite3 and
verify your database file is compatible.
Authentication Bridges¶
All authentication bridges remain compatible:
| Bridge | File | Status |
|---|---|---|
| Database (native) | user.php |
Supported |
| LDAP | user-ldap.php |
Supported |
| IMAP | user-imap.php |
Supported |
| NIS | user-nis.php |
Supported |
| Joomla | user-app-joomla.php |
Supported |
No changes to the authentication bridge API have been made. Custom
bridges (user-app-*.php) should continue to work without modification.
Step-by-Step Migration¶
From v1.9.x (any)¶
- Back up database and
includes/settings.php. - Download and extract the new release to a new directory.
- Copy
includes/settings.phpfrom your old installation. - Copy custom icons from
icons/. - Access WebCalendar — the wizard detects the version mismatch and prompts for schema updates.
- Review the SQL preview and apply.
- Verify the application works (see post-upgrade checklist).
From v1.3.x or Earlier¶
Same steps as above. The wizard handles all intermediate schema upgrades. Allow extra time — there are many schema changes between v1.3 and the current version.
From Docker¶
Update the image tag in your docker-compose file and recreate:
docker-compose down
docker-compose pull
docker-compose up -d
The wizard runs automatically on first access.
Rollback¶
If migration fails, restore your backup:
# Restore database
mysql -u USERNAME -p DATABASE < backup-YYYY-MM-DD.sql
# or
psql -U USERNAME DATABASE < backup-YYYY-MM-DD.sql
# or
cp backup-YYYY-MM-DD.db /path/to/webcalendar.db
# Restore settings
cp includes/settings.php.backup includes/settings.php
# Point web server back to old installation directory
Known Issues¶
-
PHP 8.1+ deprecation warnings: Some older code paths may emit deprecation notices on PHP 8.1+. These are cosmetic and do not affect functionality. Set
error_reporting = E_ALL & ~E_DEPRECATEDinphp.iniif they are disruptive. -
SQLite legacy driver: If using
$db_type = 'sqlite'(notsqlite3), you must migrate tosqlite3before upgrading. The legacy SQLite extension was removed from PHP 8.0. -
v2.0.x is a stability release. The 1.9.x series was the development line; 2.0.x is the corresponding production release. No new features are introduced — only bug fixes, security hardening, and code quality improvements.