ABC Space Bridge

ABC Space Bridge moves selected HumHub Spaces between sites with their Custom Pages, Posts, Calendar entries, Wiki pages, files, profile images, banners, module activation and settings. It creates portable migration packages for backup, staging, consolidation and controlled restores without touching unrelated Spaces or existing target-site data.

EUR 25.00€ EUR 75.00€
EUR 75.00€
Buy Now

ABC Space Bridge is a practical migration and backup module for HumHub sites. It was developed from real-world migration work where selected Spaces had to be moved safely from one HumHub installation into another without damaging existing data on the receiving site.

Unlike a full database dump, ABC Space Bridge focuses on selected Spaces. You can export one Space, several Spaces, or groups of Spaces and move them into another HumHub installation through a portable ZIP package. This makes it useful for site consolidation, staging-to-production moves, customer onboarding, partial backups, controlled restores, and transferring community projects between HumHub platforms.

The module currently supports the most important HumHub Space data:

Core Space data
ABC Space Bridge exports and imports the Space record, content container, GUID structure, URL, title, description, module activation, content container settings, and basic admin membership. During import, it repairs the critical HumHub relationship between space.guid, contentcontainer.guid, and contentcontainer.pk, so imported Spaces behave like native Spaces.

Custom Pages
Custom Pages are moved with their page records, page settings, URLs, targets, visibility settings, and related HumHub content records.

Dashboard / Stream Posts
Space posts are exported with their content records and restored into the correct Space stream, including publication state and visibility handling.

Calendar Entries
Calendar events are moved with their linked content records. The importer preserves event titles, descriptions, dates, times, recurrence-related fields where possible, and connects them to the correct new Space.

Wiki Pages
Wiki pages and revisions are exported and restored, including the related content records and parent-page mapping where possible.

Files and Images
ABC Space Bridge handles both database file records and physical upload folders. It also moves standard HumHub Space profile images and banner images while keeping them in HumHub’s normal upload locations. This is important because images remain normal HumHub images and do not depend on ABC Space Bridge after import.

The module also creates internal transfer and mapping records, so administrators can trace which old Space, page, post, calendar entry, wiki page, or file became which new object on the receiving site. This makes migrations auditable and easier to repair if something needs adjustment later.

ABC Space Bridge is designed to be extendable through adapters. The next planned adapters are for further official HumHub modules such as Gallery, CFiles, Linklist, Polls, and ShareBetween, followed by optional adapters for ABC Suite modules.

This first version is ideal for administrators who need a safer, cleaner alternative to manual SQL migrations when moving selected HumHub Spaces between sites.

ABC Space Bridge — Complete User Manual

Version covered: abcspacebridge v26.05.25.4
Module ID: abcspacebridge
Purpose: Move selected HumHub Spaces from one HumHub site to another without replacing or damaging the receiving site’s existing Spaces.


1. What ABC Space Bridge does

ABC Space Bridge is a HumHub migration and backup module for selected Spaces. It was created from the real Phuket Proms → Phuketer migration workflow, where selected Spaces, their custom pages, stream posts, calendar entries, wiki pages, profile images, banner images, and attached files had to be moved safely into another existing HumHub site.

The important point is this:

ABC Space Bridge does not simply copy a whole database over another database. It exports selected Space data into a portable ZIP package and imports it into the receiving site as new Spaces.

This protects existing Spaces, existing users, existing modules, and existing content on the receiving HumHub installation.


2. Current feature set in this version

This version can export and import:

  1. Core Space records

    • Space name

    • Space description

    • Space about text, if available

    • Space URL/slug, with a safe prefix on import

    • Space type ID, if the receiving database supports it

    • Visibility/status fields

    • Content container record

    • Space-level module activation records

    • Space-level content container settings

    • New admin membership for the importing administrator

  2. Custom Pages

    • Space menu pages

    • Page title, icon, URL, content, abstract, iframe attributes, visibility, sort order, target, CSS class

    • Custom page settings, if used

    • Internal links are rewritten from old Space URLs to new Space URLs

  3. Dashboard / Stream Posts

    • Post records

    • Related HumHub content records

    • Stream visibility can be forced public during import

    • Stream sort date, state, hidden/archive flags, and published state are normalized so the posts can appear in the new Space stream

  4. Calendar entries

    • Calendar event records

    • Related HumHub content records

    • Participants, if the table exists

    • Reminders, if the table exists

    • Recurring-event fields are copied when both source and receiver support them

  5. Wiki pages

    • Wiki page records

    • Related HumHub content records

    • Wiki revisions

    • Parent relationships are remapped after import

  6. Files and images

    • File database records attached to supported objects

    • Physical file folders from /uploads/file/<first-letter>/<second-letter>/<guid>/

    • File GUIDs are preserved so existing file-guid:... references in posts and wiki text continue to work

    • Space profile images from /uploads/profile_image/

    • Space banner images from /uploads/profile_image/banner/

    • Space profile and banner images are renamed to the new Space GUID during import


3. What this version does not yet migrate

The first public test version focuses on the core migration path and the adapters already tested successfully.

The following adapters are planned next, but are not yet part of this version’s complete data migration:

  • Gallery

  • CFiles

  • Linklist

  • Polls

  • ShareBetween

  • Reviews and other third-party modules

  • Comments, likes, activities, and notifications as independent history tables

  • Full user account migration

  • Full membership migration for all old Space members

Important: the module can copy Space-level module activation rows for modules that exist and are enabled on the receiver, but that is not the same as migrating each module’s own content tables. For example, enabling gallery in a Space does not yet mean all gallery records are moved by this version.


4. The two-site concept: sender and receiver

ABC Space Bridge should be installed on both sites:

  • Sending site: the old site that contains the Spaces you want to export.

  • Receiving site: the new or main site where the Spaces will be imported.

Example from the first real migration:

  • Sender: Phuket Proms

  • Receiver: Phuketer

  • Imported URLs used the prefix proms-

  • Source Space kru-richie-band became proms-kru-richie-band

The prefix is important because it prevents URL collisions. If the receiver already has a Space with the same URL, ABC Space Bridge adds a numeric suffix automatically.

Example:

old URL: kru-richie-band
requested import prefix: proms-
new URL: proms-kru-richie-band

If proms-kru-richie-band already exists, the module will try:

proms-kru-richie-band-1
proms-kru-richie-band-2
proms-kru-richie-band-3

until it finds a free URL.


5. Installation

5.1 Upload the module

Upload the module folder to:

protected/modules/abcspacebridge

The module folder must contain module.json, Module.php, controllers, services, models, migrations, and the other module files.

5.2 Enable the module

Go to:

Administration → Modules

Find ABC Space Bridge and enable it.

During enable/install, the module creates its own management tables.

Representative SQL structure:

CREATE TABLE abcspacebridge_transfer (...);
CREATE TABLE abcspacebridge_space_map (...);
CREATE TABLE abcspacebridge_log (...);

The most important tables are:

  • abcspacebridge_transfer — one row per export or import job

  • abcspacebridge_space_map — old Space IDs/URLs mapped to new Space IDs/URLs

  • abcspacebridge_log — readable transfer messages, warnings, and errors

5.3 Confirm that the admin page opens

Open:

https://your-site.example/abcspacebridge/admin/index

You should see the transfer overview page with buttons for export and import.

If you get a database-table error, the migrations did not run. Disable and enable the module again, or run HumHub migrations from the console.


6. Preparing both HumHub sites

Before exporting or importing, check these points.

6.1 Make a backup

Always back up both:

  1. The database

  2. The upload folders

Important upload folders include:

uploads/file
uploads/profile_image
uploads/profile_image/banner

A Space migration touches database records and files. A backup is the fastest way back if something unexpected happens.

6.2 Install the same content modules on both sites

For this version, the receiver should have these modules installed if you want to import their data:

custom_pages
calendar
wiki
post/content stream
file handling

The receiver does not need every module from the sender, but a module must exist and be enabled if you want its Space-level module activation to be copied.

Internally, ABC Space Bridge checks the receiving site’s module_enabled table before inserting Space module activation rows. This avoids activating missing modules inside imported Spaces.

Representative query:

SELECT module_id
FROM module_enabled;

Then it inserts only module IDs that exist on the receiver.

6.3 Know the receiving admin user ID

During import, ABC Space Bridge adds the selected admin as the administrator of each imported Space. This is necessary because the original users may not exist on the receiving site.

To find admin users, you can use:

SELECT id, username, email, status
FROM `user`
ORDER BY id;

In the Phuket Proms → Phuketer migration, the receiving admin user ID was 9.

6.4 Check file permissions

After import, uploaded files must be readable by the web server user.

Example commands, adjusted to the server user used on the Phuketer system:

chown -R hub-school:hub-school /home/hub-school/public_html/uploads/file
chown -R hub-school:hub-school /home/hub-school/public_html/uploads/profile_image

find /home/hub-school/public_html/uploads/file -type d -exec chmod 755 {} ;
find /home/hub-school/public_html/uploads/file -type f -exec chmod 644 {} ;
find /home/hub-school/public_html/uploads/profile_image -type d -exec chmod 755 {} ;
find /home/hub-school/public_html/uploads/profile_image -type f -exec chmod 644 {} ;

Use the correct Linux user for the receiving site. Do not blindly copy hub-school if the site uses another account.


7. Exporting Spaces from the sending site

7.1 Open the export page

On the sending site, open:

ABC Space Bridge → Export

or directly:

https://your-sending-site.example/abcspacebridge/admin/export

7.2 Choose Spaces by URL

You can export one or more specific Spaces by entering their Space URLs.

Example:

miniheartband
kru-richie-band
absound

Use the Space URL part only, not the full URL.

Correct:

miniheartband

Not needed:

https://phuketproms.com/s/miniheartband

7.3 Choose Spaces by Space Type

If your HumHub site uses the space_type_id column, you can export groups of Spaces by type.

Example:

8,9,12

This is useful when one site contains Bands, Artists, Groups, Churches, Schools, Companies, or other structured Space groups.

7.4 Export only active Spaces

The export form has an option for active Spaces only. This is recommended for normal migrations because archived or inactive Spaces are often old test data.

Internally this behaves like:

SELECT *
FROM space
WHERE status = 1;

combined with the selected Space URLs and/or Space Type IDs.

7.5 Choose adapters

Adapters are the parts of the module that know how to export and import a specific content type.

Current adapters:

  • Core Spaces

  • Custom Pages

  • Posts

  • Calendar

  • Wiki

  • Files

For a complete current migration, keep all available adapters selected.

7.6 Create the export package

Click:

Create Export Package

The module creates a ZIP file. The ZIP contains JSONL data files and copied physical files.

The package is stored in the module runtime export folder and can be downloaded from the transfer overview.


8. What is inside an export package

The export package is a portable ZIP file.

Typical structure:

manifest.json

data/space.jsonl
data/contentcontainer.jsonl
data/contentcontainer_module.jsonl
data/contentcontainer_setting.jsonl

modules/custom_pages/pages.jsonl
modules/custom_pages/page_setting.jsonl
modules/post/post.jsonl
modules/post/content.jsonl
modules/calendar/entry.jsonl
modules/calendar/content.jsonl
modules/calendar/participant.jsonl
modules/calendar/reminder.jsonl
modules/wiki/page.jsonl
modules/wiki/revision.jsonl
modules/wiki/content.jsonl
modules/file/file.jsonl

files/file/<guid>/file
files/file/<guid>/preview-image
files/profile_image/<space-guid>.jpg
files/profile_image/banner/<space-guid>.jpg

JSONL means “one JSON record per line”. This format is safer for large exports than one huge JSON array because the system can read records line by line.

The manifest.json contains basic metadata such as source site, export time, selected adapters, and package information.


9. Importing into the receiving site

9.1 Open the import page

On the receiving site, open:

ABC Space Bridge → Import

or directly:

https://your-receiving-site.example/abcspacebridge/admin/import

9.2 Upload the ZIP package

Choose the export ZIP from the sending site.

The receiving site extracts the ZIP into a temporary work directory and reads the manifest.

9.3 Choose the receiving admin user ID

Enter the user ID of the admin who should own/manage the imported Spaces.

This admin will be inserted into space_membership as Space admin for every imported Space.

Representative insert:

INSERT INTO space_membership
    (space_id, user_id, originator_user_id, status, group_id, created_at, created_by, updated_at, updated_by)
VALUES
    (:newSpaceId, :adminUserId, :adminUserId, 3, 'admin', NOW(), :adminUserId, NOW(), :adminUserId);

9.4 Choose a URL prefix

Use a clear prefix to show where the imported Spaces came from and to avoid collisions.

Examples:

proms-
school-
church-
backup-

For Phuket Proms imported into Phuketer, the prefix was:

proms-

9.5 Choose status and visibility

Recommended normal import settings:

Status: Active
Visibility: Public
Force default content visibility: Yes
Force content public: Yes, when old private stream posts should become visible on the receiving public site

These settings help imported Spaces appear normally in the receiver.

9.6 Start import

Click the import button. The module then imports in adapter order:

  1. Core Spaces

  2. Custom Pages

  3. Posts

  4. Calendar entries

  5. Wiki pages

  6. Files and images

The order matters. Files need the imported post/wiki/calendar/custom-page IDs so they can attach to the new target objects.


10. What happens during import

10.1 Core Space import

For every exported Space, the module creates a new content container and a new Space.

Representative process:

INSERT INTO contentcontainer
    (guid, class, pk, owner_user_id)
VALUES
    (:newGuid, 'humhub\modules\space\models\Space', 0, :adminUserId);

Then it creates the Space:

INSERT INTO space
    (guid, url, contentcontainer_id, name, description, ...)
VALUES
    (:newGuid, :newUrl, :newContentcontainerId, :name, :description, ...);

Then it fixes the content container so it points to the new Space:

UPDATE contentcontainer
SET pk = :newSpaceId,
    guid = :newGuid
WHERE id = :newContentcontainerId;

This GUID alignment is very important in HumHub. The Space GUID and content container GUID must match. During the manual Phuket Proms migration, this was one of the key lessons learned.

10.2 Space module activation import

The module reads the exported contentcontainer_module rows and inserts only modules that are installed/enabled on the receiving site.

Representative SQL:

INSERT INTO contentcontainer_module
    (contentcontainer_id, module_id, module_state)
VALUES
    (:newContentcontainerId, :moduleId, :moduleState);

Duplicates are ignored safely.

10.3 Space settings import

Space-level settings from contentcontainer_setting are copied to the new content container.

Examples include module settings for Custom Pages, Linklist, ABC Header, or other Space-level options.

Representative SQL:

INSERT INTO contentcontainer_setting
    (module_id, contentcontainer_id, name, value)
VALUES
    (:moduleId, :newContentcontainerId, :name, :value);

10.4 Custom Pages import

Custom Pages are imported into custom_pages_page. Their related content records are inserted into content and connected to the new content container.

Internal links are rewritten using the Space URL map.

Example:

/s/kru-richie-band/page/facebook

becomes:

/s/proms-kru-richie-band/page/facebook

External links, such as Facebook or YouTube links, remain external.

10.5 Post import

Posts are imported into the post table. Their content rows are imported into the content table.

The module can normalize stream fields so posts appear correctly:

UPDATE content
SET stream_channel = 'default',
    stream_sort_date = COALESCE(stream_sort_date, created_at),
    state = 1,
    hidden = 0,
    archived = 0,
    was_published = 1,
    scheduled_at = NULL;

In practice, this is why old dashboard posts can appear in the receiving Space stream after import.

10.6 Calendar import

Calendar records are imported into calendar_entry, with content records added to content.

If available, participants and reminders are also copied:

calendar_entry
calendar_entry_participant
calendar_reminder

The import uses old-to-new entry maps so related rows point to the new calendar entry IDs.

10.7 Wiki import

Wiki pages are imported into wiki_page, their revisions into wiki_page_revision, and their content rows into content.

Parent page relationships are repaired after the new Wiki page IDs are known.

Example:

Old wiki page 19 → New wiki page 214

The final link then becomes:

/s/proms-absound/wiki/214/im-walking-here-beside-your-little-feet

10.8 File and image import

File records from the source file table are imported only when their target object was imported.

Supported file target objects in this version:

humhubmodulesspacemodelsSpace
humhubmodulespostmodelsPost
humhubmoduleswikimodelsWikiPage
humhubmodulescalendarmodelsCalendarEntry
humhubmodulescustom_pagesmodelsCustomPage

For normal uploaded files, the file GUID is kept. This is intentional because content may contain references like:

file-guid:87390665-e702-4cda-a59a-0f0656357e98

If the GUID stayed the same and the physical folder is copied, those references continue to work.

For Space profile and banner images, the old Space GUID is replaced with the new Space GUID because HumHub stores profile and banner images by Space GUID.

Example:

uploads/profile_image/<old-space-guid>.jpg

becomes:

uploads/profile_image/<new-space-guid>.jpg

and:

uploads/profile_image/banner/<old-space-guid>.jpg

becomes:

uploads/profile_image/banner/<new-space-guid>.jpg

11. Post-import checks

After import, check the result before announcing the migration as finished.

11.1 Check transfer status

SELECT id, guid, mode, status, source_site, target_site, started_at, finished_at
FROM abcspacebridge_transfer
ORDER BY id DESC
LIMIT 10;

Expected status:

finished

11.2 Check imported Space map

Replace 123 with the transfer ID.

SELECT old_space_id, old_url, new_space_id, new_url, status
FROM abcspacebridge_space_map
WHERE transfer_id = 123
ORDER BY old_url;

This shows exactly which old Space became which new Space.

11.3 Check GUID alignment

This is one of the most important checks.

SELECT
    s.id,
    s.url,
    s.guid AS space_guid,
    cc.guid AS contentcontainer_guid,
    CASE
        WHEN s.guid = cc.guid THEN 'OK_MATCH'
        ELSE 'BROKEN_MISMATCH'
    END AS guid_status
FROM space s
JOIN contentcontainer cc
  ON cc.id = s.contentcontainer_id
JOIN abcspacebridge_space_map m
  ON m.new_space_id = s.id
WHERE m.transfer_id = 123;

Expected result:

OK_MATCH

If GUIDs do not match, Space pages can fail with “Could not find requested page”. Current ABC Space Bridge creates matching GUIDs automatically.

11.4 Check imported content totals

SELECT c.object_model, COUNT(*) AS total
FROM content c
JOIN abcspacebridge_space_map m
  ON m.new_contentcontainer_id = c.contentcontainer_id
WHERE m.transfer_id = 123
GROUP BY c.object_model
ORDER BY total DESC;

Expected object models may include:

humhubmodulescustom_pagesmodelsCustomPage
humhubmodulespostmodelsPost
humhubmodulescalendarmodelsCalendarEntry
humhubmoduleswikimodelsWikiPage

11.5 Check Space module activation

SELECT s.url, cm.module_id, cm.module_state
FROM space s
JOIN abcspacebridge_space_map m
  ON m.new_space_id = s.id
LEFT JOIN contentcontainer_module cm
  ON cm.contentcontainer_id = s.contentcontainer_id
WHERE m.transfer_id = 123
ORDER BY s.url, cm.module_id;

This shows which modules are active in each imported Space.

11.6 Check file records

SELECT object_model, COUNT(*) AS files
FROM file
GROUP BY object_model
ORDER BY files DESC;

To check a known file GUID:

SELECT id, guid, file_name, object_model, object_id
FROM file
WHERE guid = '87390665-e702-4cda-a59a-0f0656357e98';

11.7 Check physical file access

Open a copied file URL in the browser or use curl:

curl -I -L https://your-site.example/uploads/profile_image/<new-space-guid>.jpg
curl -I -L https://your-site.example/uploads/profile_image/banner/<new-space-guid>.jpg

Expected result:

HTTP/2 200
content-type: image/jpeg

12. Clearing cache and assets

After a larger import, clear HumHub cache and public assets.

From the HumHub root folder:

cd /home/your-site/public_html
rm -rf assets/*

If your console commands are healthy, also run:

cd /home/your-site/public_html/protected
php yii cache/flush-all

If a module causes console errors, fix that module first. During the Phuket migration, one module accessed yiiconsoleRequest::pathInfo, which is a web-only request property. That type of module bug can break console maintenance commands.


13. Import by command line

For larger imports, command line import can be more stable than browser upload.

Example:

cd /home/your-site/public_html/protected
php yii abcspacebridge/import 
  --package=/path/to/abcspacebridge-export.zip 
  --adminUserId=9 
  --urlPrefix=proms- 
  --visibility=2 
  --status=1 
  --forceContentPublic=1

Typical options:

  • --package — full path to the export ZIP

  • --adminUserId — receiving admin user ID

  • --urlPrefix — prefix for imported Space URLs

  • --visibility — receiving visibility value

  • --status — receiving status value

  • --forceContentPublic — sets imported content visibility public when needed


14. Practical example: moving one artist Space

Goal:

Move miniheartband from Phuket Proms into Phuketer.

On sending site:

  1. Open ABC Space Bridge → Export.

  2. Enter Space URL:

miniheartband
  1. Select adapters:

Core Spaces
Custom Pages
Posts
Calendar
Wiki
Files
  1. Click Create Export Package.

  2. Download the ZIP.

On receiving site:

  1. Open ABC Space Bridge → Import.

  2. Upload the ZIP.

  3. Set admin user ID, for example:

9
  1. Set URL prefix:

proms-
  1. Import.

  2. Open:

https://phuketer.com/s/proms-miniheartband

Then check:

  • Space opens

  • Title and description show

  • Profile image shows

  • Banner image shows

  • Stream posts appear

  • Wiki pages open

  • Calendar entries appear

  • Files/images inside content load


15. Understanding safety behavior

ABC Space Bridge is designed to be additive.

That means:

  • It creates new Spaces.

  • It creates new content containers.

  • It creates new content rows.

  • It creates maps between old and new IDs.

  • It does not overwrite existing Space URLs.

  • It does not delete existing receiving-site content.

  • It does not replace the receiving database.

The safest normal import strategy is:

Always use a prefix.
Always import into new Space URLs.
Check the result.
Only then manually clean or merge if needed.

16. Troubleshooting

16.1 “Table abcspacebridge_transfer does not exist”

The module tables were not created.

Fix:

  1. Disable and enable the module again.

  2. Confirm migrations ran.

  3. Check that the database user has permission to create tables.

16.2 Duplicate GUID error in abcspacebridge_transfer

Older early builds missed automatic GUID generation for transfer rows. Current builds create the GUID before saving. Update to the latest package and reinstall/upgrade the module.

16.3 PHP compile error about adapter method signature

All adapters must implement the same method signature as TransferAdapterInterface.

Correct adapter method:

public function export(Transfer $transfer, string $workDir, array $spaceRows, array $options = []): array

If an adapter misses = [], PHP rejects it.

16.4 Imported Space shows “Could not find requested page”

Check GUID alignment:

SELECT s.id, s.url, s.guid, cc.guid
FROM space s
JOIN contentcontainer cc
  ON cc.id = s.contentcontainer_id
WHERE s.url = 'proms-example';

The Space GUID and content container GUID must match. Current ABC Space Bridge creates them correctly.

16.5 Space opens, but posts do not appear

Check imported content rows:

SELECT c.object_model, c.visibility, c.state, c.hidden, c.archived, c.was_published, COUNT(*) AS total
FROM content c
JOIN space s
  ON s.contentcontainer_id = c.contentcontainer_id
WHERE s.url = 'proms-example'
GROUP BY c.object_model, c.visibility, c.state, c.hidden, c.archived, c.was_published;

For public Space stream posts, you normally want:

visibility = 1
state = 1
hidden = 0
archived = 0
was_published = 1

16.6 Images are in the database but do not show

Check physical files and permissions:

ls -lah /home/your-site/public_html/uploads/file
ls -lah /home/your-site/public_html/uploads/profile_image

Then repair ownership and permissions if needed:

chown -R your-web-user:your-web-group /home/your-site/public_html/uploads/file
chown -R your-web-user:your-web-group /home/your-site/public_html/uploads/profile_image
find /home/your-site/public_html/uploads/file -type d -exec chmod 755 {} ;
find /home/your-site/public_html/uploads/file -type f -exec chmod 644 {} ;
find /home/your-site/public_html/uploads/profile_image -type d -exec chmod 755 {} ;
find /home/your-site/public_html/uploads/profile_image -type f -exec chmod 644 {} ;

16.7 Module activation copied, but module content missing

This means the module activation row was copied, but there is not yet an adapter for that module’s own tables.

Example:

  • gallery module may be enabled in the imported Space.

  • But gallery content is not fully migrated until a Gallery adapter exists.

Planned next adapters:

Gallery
CFiles
Linklist
Polls
ShareBetween

17. Recommended workflow for real migrations

Use this order for production migrations:

  1. Update both sites to compatible HumHub/module versions.

  2. Back up both databases.

  3. Back up both upload folders.

  4. Install ABC Space Bridge on both sites.

  5. Confirm module tables exist.

  6. Confirm target modules exist on the receiving site.

  7. Export one test Space first.

  8. Import that one test Space.

  9. Check Space page, stream, custom pages, wiki, calendar, profile image, banner image, and files.

  10. Only after the test is successful, export/import a larger group.

  11. Check abcspacebridge_transfer, abcspacebridge_space_map, and content counts.

  12. Clear assets/cache.

  13. Browse the imported Spaces manually.


18. Why this module matters

HumHub Spaces are not simple rows in one table. A Space is connected to:

  • space

  • contentcontainer

  • contentcontainer_module

  • contentcontainer_setting

  • space_membership

  • content

  • module-specific tables

  • file

  • physical upload folders

  • profile image and banner folders

A normal SQL copy can easily break GUIDs, content container IDs, file references, or module relationships. ABC Space Bridge handles these mappings step by step and records the old-to-new relationships so the migration can be checked and extended.

This makes it useful not only for moving a whole community section from one site to another, but also for selective backups, selective restores, project merges, and future cross-site Space exchange between compatible HumHub installations.


19. Current development roadmap

Next useful adapters:

  1. Gallery

  2. CFiles

  3. Linklist

  4. Polls

  5. ShareBetween

  6. Comments and likes

  7. Activity history

  8. Reviews and other ABC modules

  9. Optional full membership/user mapping

  10. Remote sender/receiver mode, where two sites communicate directly instead of manually uploading ZIP packages

 

The long-term goal is a safe Space migration framework where each module can register its own adapter and move its own tables without breaking existing data.