Upgrading EasySocial to v5.1.4 caused a complete site outage — both frontend and backend were inaccessible for over an hour. The installation process stalled during "Extracting Files" / "Copying Files" and left the site in a broken state. Recovery required extensive manual intervention via SSH, including manually extracting nested ZIP archives, copying files to their correct destinations, and patching multiple installer controller files to bypass broken installation steps.
This ticket documents three architectural flaws in the EasySocial installer that caused this situation and made recovery unnecessarily difficult.
Issue 1: Installer Deletes the Source ZIP Before Installation CompletesFile: administrator/components/com_easysocial/setup/controllers/installation.extract.php
Problem: The execute() method deletes the component ZIP package (com_easysocial_BGv5.1.4_pro.zip) from the setup/packages/ directory immediately after extraction — regardless of whether the subsequent installation steps succeed:
php
// Line from installation.extract.php @File::delete($storage);
If the extract step times out, or if any subsequent step (Copying Files, Installing Applications, etc.) fails, the ZIP is already gone. The installer cannot retry because the source package no longer exists. The only recovery path is to manually re-upload and re-place the ZIP file via SSH.
Expected behavior: The ZIP should only be deleted after the entire installation process has completed successfully (i.e., after "Post Installation Cleanup"), not after the extract step. Alternatively, the ZIP should never be deleted — the admin can clean it up manually, or a cleanup step can handle it.
Issue 2: "Copying Files" Step Has No Batching, Resume, or Timeout HandlingFile: administrator/components/com_easysocial/setup/controllers/installation.copy.php
Problem: The copy step attempts to extract and copy all component files (admin, site, media, plugins, modules, languages — thousands of files) within a single HTTP request. On servers with standard PHP timeout settings (even with max_execution_time = 600), this request stalls and eventually times out. There is no:
- Batching: The step does not process files in chunks across multiple AJAX calls (unlike "Installing Applications," which does work in batches).
- Resume capability: If the request times out mid-copy, there is no way to resume. The installer shows the warning icon but clicking "Retry" starts the entire copy process from scratch — which also times out.
- Progress tracking: There is no indication of which files have been copied and which haven't.
The result is a half-installed component: some PHP files are present, but critical configuration files like defaults/site.json and defaults/users/social.params.json are missing.
Expected behavior: The copy step should work in batches (e.g., one sub-package at a time: admin, site, media, plugins, modules), with each batch processed in a separate AJAX request — exactly as the "Installing Applications" step already does. Each batch should verify completion before proceeding to the next.
Issue 3: Missing site.json Causes Complete Site Outage With No FallbackFile: administrator/components/com_easysocial/includes/config/config.php (line 89)
Problem: When the installation fails mid-copy and defaults/site.json is not present, EasySocial throws a fatal error on every page load — both frontend and backend:
An error has occurred. 0 Invalid json syntax in site.json
This error is not limited to EasySocial pages. Because EasySocial hooks into Joomla via system plugins and content plugins, the error fires on every page, including the Joomla administrator dashboard. The site becomes completely unusable.
Similarly, the missing defaults/users/social.params.json generates continuous PHP warnings on every request:
PHP Warning: file_get_contents(.../defaults/users/social.params.json): Failed to open stream: No such file or directory in .../includes/user/user.php on line 5356
Expected behavior:
- If site.json is missing or contains invalid JSON, EasySocial should fall back to a bundled default configuration rather than throwing a fatal error that takes down the entire site.
- The error should be contained to EasySocial's own component pages, not propagated to the entire Joomla site.
- If a critical file is missing, EasySocial should display a clear admin notice ("EasySocial configuration file is missing — please reinstall or restore from backup") rather than a cryptic JSON parse error.
- Have a running Joomla 6.1.2 site with EasySocial (previous version) installed.
- Upload and install com_easysocial_BGv5.1.4_joomla.zip via Joomla Extensions → Install → Upload Package File.
- The EasySocial installer opens and begins "Extracting Files."
- If the server's PHP execution time or network conditions cause this step to take longer than the configured timeout, the browser request fails.
- On retry, "Extracting Files" fails because the ZIP has been deleted (Issue 1).
- If the extract succeeds, "Copying Files" stalls due to the volume of files in a single request (Issue 2).
- After a failed or timed-out installation, the entire Joomla site (frontend and backend) becomes inaccessible due to the missing site.json (Issue 3).
For reference, recovering from this situation required the following manual SSH intervention:
- Locating and validating site.json from the installer's temp directory.
- Manually copying site.json and social.params.json to their correct locations.
- Re-extracting the inner component ZIP (com_easysocial_BGv5.1.4_pro.zip) and manually extracting each sub-package (admin.zip, site.zip, media.zip, plugins.zip, modules.zip, etc.) to their correct Joomla directories.
- Re-placing the deleted source ZIP back into setup/packages/.
- Patching 20+ installer controller files (installation.extract.php, installation.copy.php, installation.apps.php, installation.fields.php, etc.) to return immediate success responses, since the files were already in place.
- Restarting PHP-FPM to clear the opcode cache.
- Running the installer again with all controllers patched so the remaining database and configuration steps could complete.
- Restoring all patched controller files from backups after successful installation.
Total downtime: approximately 90 minutes.
Recommendations- Do not delete the source ZIP until the full installation is confirmed complete.
- Implement batched file copying with AJAX chunking, consistent with how "Installing Applications" already works.
- Add a fallback mechanism for missing or corrupt site.json — load defaults rather than crashing.
- Scope EasySocial errors so they do not propagate beyond the component's own pages.
- Add a "repair installation" option in the admin backend that can re-extract and re-copy files from a still-present ZIP without requiring SSH access.
- Server OS: Ubuntu 24.04.4 LTS
- Server Panel: Plesk
- Web Server: Apache with PHP-FPM
- PHP: 8.5.9 (Plesk-managed)
- PHP Settings at time of install:
- max_execution_time: 600
- memory_limit: 512M
- post_max_size: 200M
- upload_max_filesize: 200M
- Disk space: 1.7 TB free
- No other extensions were being installed simultaneously.
I am a long-time EasySocial customer and this is the first time an upgrade has caused this level of disruption. I would appreciate feedback on whether these issues are known and whether fixes are planned.