[ADMIN] How to wire up screen contexts in sj-crm

For contextual Help tabs on actual CRM admin screens, map admin screen IDs to shh screen contexts via the filter shh_screen_context_for_admin.

Example mapping (in sj-crm or a small mu-plugin):

add_filter('shh_screen_context_for_admin', function($ctx, $screen) {
    $map = array(
        'toplevel_page_sj-crm'              => 'dashboard',
        'sj-crm_page_sj-crm-contacts'       => 'contacts',
        'sj-crm_page_sj-crm-businesses'     => 'businesses',
        'sj-crm_page_sj-crm-projects'       => 'projects',
        'sj-crm_page_sj-crm-items'          => 'items',
        'sj-crm_page_sj-crm-health'         => 'health',
        'sj-crm_page_sj-crm-rentals'        => 'rentals',
        'sj-crm_page_sj-crm-subscription'   => 'billing',
        'profile'                           => 'account',
    );
    return $map[$screen->id] ?? $ctx;
}, 10, 2);

Once this is wired, the contextual Help tab on each CRM screen pulls only entries tagged with that screen.

[ADMIN] How to deploy a plugin update to production

  1. Bump version in plugin header AND in the VERSION constant. Both must match.
  2. Update projects-map.json with new version.
  3. Add changelog entry to plugin’s readme.txt or CHANGELOG.md.
  4. Run a manual DB backup (Network Admin → Tools or hosting panel).
  5. Zip the plugin folder — user does this, not the agent.
  6. Upload via SFTP or Network Admin → Plugins → Upload.
  7. Network Activate (or activate per-site if it’s a single-tenant module).
  8. Smoke-test on one subsite: load each main screen, save one record.
  9. Purge LiteSpeed Cache: LiteSpeed Cache → Toolbox → Purge All.
  10. Log in SJ Journal: what changed, version bumped, any issues.