Missing Relationships

Hi
My Documents module has lost most of it relationships including Contacts, Accounts, Opportunities, Contracts.
I’m getting a lot of errors like the ones below:

Wed Oct 19 03:35:38 2016 [300045][1][FATAL] Missing relationship definition aos_contracts_documents. skipping aos_contracts_documents subpanel
Wed Oct 19 03:35:38 2016 [300045][1][FATAL] Missing relationship definition aos_quotes_aos_contracts. skipping aos_quotes_aos_contracts subpanel

If I try to run a quick repair it stops when it gets to the repair relationships part
If I try to run repair relationships it doesn’t appear to do anything

I have checked all file permissions

V 7.7.5 WHM Cpanel

HELP!

I tried to upgrade an old version of Suite to current version in case there was an issue with installer, but didn’t have any problems. Which version did you upgrade to 7.7.5 from and did you have any customisations?

Did you create a back up of the database before you upgraded that you could revert to?

The subpanels would be defined in modules/modulenamemetadata/subpaneldefs.php and the relationships will be in modules/modulename/vardefs.php.

Can you post the contents of the relevant files and I’ll see if I can work out what’s missing and see if we can fix it by editing those files?

The relationships are all present in those files as far as I can tell, the tables are also present in the DB
I have been doing successive upgrades when they are released, I didn’t have any issues after the last upgrade 2 weeks ago.
I reinstated an backup to a test server and the relationships were present.
When I ran the Repair Relationships tool, it killed the relationships again :S

Subpaneldefs


$layout_defs['Documents'] = array(
    // list of what Subpanels to show in the DetailView
    'subpanel_setup' => array(
        'therevisions' => array(
            'order' => 10,
            'sort_order' => 'desc',
            'sort_by' => 'revision',
            'module' => 'DocumentRevisions',
            'subpanel_name' => 'default',
            'title_key' => 'LBL_DOC_REV_HEADER',
            'get_subpanel_data' => 'revisions',
            'fill_in_additional_fields' => true,
        ),
        'accounts' => array(
            'order' => 30,
            'module' => 'Accounts',
            'subpanel_name' => 'default',
            'sort_order' => 'asc',
            'sort_by' => 'id',
            'title_key' => 'LBL_ACCOUNTS_SUBPANEL_TITLE',
            'get_subpanel_data' => 'accounts',
            'top_buttons' =>
                array(
                    0 =>
                        array(
                            'widget_class' => 'SubPanelTopButtonQuickCreate',
                        ),
                    1 =>
                        array(
                            'widget_class' => 'SubPanelTopSelectButton',
                            'mode' => 'MultiSelect',
                        ),
                ),
        ),
        'contacts' => array(
            'order' => 40,
            'module' => 'Contacts',
            'subpanel_name' => 'default',
            'sort_order' => 'asc',
            'sort_by' => 'id',
            'title_key' => 'LBL_CONTACTS_SUBPANEL_TITLE',
            'get_subpanel_data' => 'contacts',
            'top_buttons' =>
                array(
                    0 =>
                        array(
                            'widget_class' => 'SubPanelTopButtonQuickCreate',
                        ),
                    1 =>
                        array(
                            'widget_class' => 'SubPanelTopSelectButton',
                            'mode' => 'MultiSelect',
                        ),
                ),
        ),
        'opportunities' => array(
            'order' => 40,
            'module' => 'Opportunities',
            'subpanel_name' => 'default',
            'sort_order' => 'asc',
            'sort_by' => 'id',
            'title_key' => 'LBL_OPPORTUNITIES_SUBPANEL_TITLE',
            'get_subpanel_data' => 'opportunities',
            'top_buttons' =>
                array(
                    0 =>
                        array(
                            'widget_class' => 'SubPanelTopButtonQuickCreate',
                        ),
                    1 =>
                        array(
                            'widget_class' => 'SubPanelTopSelectButton',
                            'mode' => 'MultiSelect',
                        ),
                ),
        ),
        'cases' => array(
            'order' => 50,
            'module' => 'Cases',
            'subpanel_name' => 'default',
            'sort_order' => 'asc',
            'sort_by' => 'id',
            'title_key' => 'LBL_CASES_SUBPANEL_TITLE',
            'get_subpanel_data' => 'cases',
            'top_buttons' =>
                array(
                    0 =>
                        array(
                            'widget_class' => 'SubPanelTopButtonQuickCreate',
                        ),
                    1 =>
                        array(
                            'widget_class' => 'SubPanelTopSelectButton',
                            'mode' => 'MultiSelect',
                        ),
                ),
        ),
        'bugs' => array(
            'order' => 60,
            'module' => 'Bugs',
            'subpanel_name' => 'default',
            'sort_order' => 'asc',
            'sort_by' => 'id',
            'title_key' => 'LBL_BUGS_SUBPANEL_TITLE',
            'get_subpanel_data' => 'bugs',
            'top_buttons' =>
                array(
                    0 =>
                        array(
                            'widget_class' => 'SubPanelTopButtonQuickCreate',
                        ),
                    1 =>
                        array(
                            'widget_class' => 'SubPanelTopSelectButton',
                            'mode' => 'MultiSelect',
                        ),
                ),
        ),
        'aos_contracts_documents' => array(
            'order' => 101,
            'module' => 'AOS_Contracts',
            'subpanel_name' => 'default',
            'sort_order' => 'asc',
            'sort_by' => 'id',
            'title_key' => 'AOS_Contracts',
            'get_subpanel_data' => 'documents',
            'top_buttons' =>
                array(
                    0 =>
                        array(
                            'widget_class' => 'SubPanelTopButtonQuickCreate',
                        ),
                    1 =>
                        array(
                            'widget_class' => 'SubPanelTopSelectButton',
                            'mode' => 'MultiSelect',
                        ),
                ),
        ),
        'securitygroups' => array(
            'top_buttons' => array(array('widget_class' => 'SubPanelTopSelectButton', 'popup_module' => 'SecurityGroups', 'mode' => 'MultiSelect'),),
            'order' => 900,
            'sort_by' => 'name',
            'sort_order' => 'asc',
            'module' => 'SecurityGroups',
            'refresh_page' => 1,
            'subpanel_name' => 'default',
            'get_subpanel_data' => 'SecurityGroups',
            'add_subpanel_data' => 'securitygroup_id',
            'title_key' => 'LBL_SECURITYGROUPS_SUBPANEL_TITLE',
        ),
    ),
);

Vardefs


$dictionary['Document'] = array('table' => 'documents',
    'unified_search' => true,
    'full_text_search' => true,
    'unified_search_default_enabled' => true,
    'fields' => array(

        'document_name' =>
            array(
                'name' => 'document_name',
                'vname' => 'LBL_NAME',
                'type' => 'varchar',
                'len' => '255',
                'required' => true,
                'importable' => 'required',
                'unified_search' => true,
                'full_text_search' => array('boost' => 3),
            ),
        'name' => array(
            'name' => 'name',
            'vname' => 'LBL_NAME',
            'source' => 'non-db',
            'type' => 'varchar'
        ),
        'doc_id' =>
            array(
                'name' => 'doc_id',
                'vname' => 'LBL_DOC_ID',
                'type' => 'varchar',
                'len' => '100',
                'comment' => 'Document ID from documents web server provider',
                'importable' => false,
                'studio' => 'false',
            ),
        'doc_type' =>
            array(
                'name' => 'doc_type',
                'vname' => 'LBL_DOC_TYPE',
                'type' => 'enum',
                'function' => 'getDocumentsExternalApiDropDown',
                'len' => '100',
                'comment' => 'Document type (ex: Google, box.net, IBM SmartCloud)',
                'popupHelp' => 'LBL_DOC_TYPE_POPUP',
                'massupdate' => false,
                'options' => 'eapm_list',
                'default' => 'Sugar',
                'studio' => 'false',
            ),
        'doc_url' =>
            array(
                'name' => 'doc_url',
                'vname' => 'LBL_DOC_URL',
                'type' => 'varchar',
                'len' => '255',
                'comment' => 'Document URL from documents web server provider',
                'importable' => false,
                'massupdate' => false,
                'studio' => 'false',
            ),
        'filename' =>
            array(
                'name' => 'filename',
                'vname' => 'LBL_FILENAME',
                'type' => 'file',
                'source' => 'non-db',
                'comment' => 'The filename of the document attachment',
                'required' => true,
                'noChange' => true,
                'allowEapm' => true,
                'fileId' => 'document_revision_id',
                'docType' => 'doc_type',
                'docUrl' => 'doc_url',
                'docId' => 'doc_id',
            ),

        'active_date' =>
            array(
                'name' => 'active_date',
                'vname' => 'LBL_DOC_ACTIVE_DATE',
                'type' => 'date',
                'importable' => 'required',
                'required' => true,
                'display_default' => 'now',
            ),

        'exp_date' =>
            array(
                'name' => 'exp_date',
                'vname' => 'LBL_DOC_EXP_DATE',
                'type' => 'date',
            ),

        'category_id' =>
            array(
                'name' => 'category_id',
                'vname' => 'LBL_SF_CATEGORY',
                'type' => 'enum',
                'len' => 100,
                'options' => 'document_category_dom',
                'reportable' => true,
            ),

        'subcategory_id' =>
            array(
                'name' => 'subcategory_id',
                'vname' => 'LBL_SF_SUBCATEGORY',
                'type' => 'enum',
                'len' => 100,
                'options' => 'document_subcategory_dom',
                'reportable' => true,
            ),

        'status_id' =>
            array(
                'name' => 'status_id',
                'vname' => 'LBL_DOC_STATUS',
                'type' => 'enum',
                'len' => 100,
                'options' => 'document_status_dom',
                'reportable' => false,
            ),

        'status' =>
            array(
                'name' => 'status',
                'vname' => 'LBL_DOC_STATUS',
                'type' => 'varchar',
                'source' => 'non-db',
                'comment' => 'Document status for Meta-Data framework',
            ),

        'document_revision_id' =>
            array(
                'name' => 'document_revision_id',
                'vname' => 'LBL_LATEST_REVISION',
                'type' => 'varchar',
                'len' => '36',
                'reportable' => false,
            ),

        'revisions' =>
            array(
                'name' => 'revisions',
                'type' => 'link',
                'relationship' => 'document_revisions',
                'source' => 'non-db',
                'vname' => 'LBL_REVISIONS',
            ),

        'revision' =>
            array(
                'name' => 'revision',
                'vname' => 'LBL_DOC_VERSION',
                'type' => 'varchar',
                'reportable' => false,
                'required' => true,
                'source' => 'non-db',
                'importable' => 'required',
                'required' => true,
                'default' => '1',
            ),

        'last_rev_created_name' =>
            array(
                'name' => 'last_rev_created_name',
                'vname' => 'LBL_LAST_REV_CREATOR',
                'type' => 'varchar',
                'reportable' => false,
                'source' => 'non-db'
            ),
        'last_rev_mime_type' =>
            array(
                'name' => 'last_rev_mime_type',
                'vname' => 'LBL_LAST_REV_MIME_TYPE',
                'type' => 'varchar',
                'reportable' => false,
                'studio' => 'false',
                'source' => 'non-db'
            ),
        'latest_revision' =>
            array(
                'name' => 'latest_revision',
                'vname' => 'LBL_LATEST_REVISION',
                'type' => 'varchar',
                'reportable' => false,
                'source' => 'non-db'
            ),
        'last_rev_create_date' =>
            array(
                'name' => 'last_rev_create_date',
                'type' => 'date',
                'table' => 'document_revisions',
                'link' => 'revisions',
                'join_name' => 'document_revisions',
                'vname' => 'LBL_LAST_REV_CREATE_DATE',
                'rname' => 'date_entered',
                'reportable' => false,
                'source' => 'non-db'
            ),
        'contracts' => array(
            'name' => 'contracts',
            'type' => 'link',
            'relationship' => 'contracts_documents',
            'source' => 'non-db',
            'vname' => 'LBL_CONTRACTS',
        ),
        //todo remove
        'leads' => array(
            'name' => 'leads',
            'type' => 'link',
            'relationship' => 'leads_documents',
            'source' => 'non-db',
            'vname' => 'LBL_LEADS',
        ),
        // Links around the world
        'accounts' =>
            array(
                'name' => 'accounts',
                'type' => 'link',
                'relationship' => 'documents_accounts',
                'source' => 'non-db',
                'vname' => 'LBL_ACCOUNTS_SUBPANEL_TITLE',
            ),
        'contacts' =>
            array(
                'name' => 'contacts',
                'type' => 'link',
                'relationship' => 'documents_contacts',
                'source' => 'non-db',
                'vname' => 'LBL_CONTACTS_SUBPANEL_TITLE',
            ),
        'opportunities' =>
            array(
                'name' => 'opportunities',
                'type' => 'link',
                'relationship' => 'documents_opportunities',
                'source' => 'non-db',
                'vname' => 'LBL_OPPORTUNITIES_SUBPANEL_TITLE',
            ),
        'cases' =>
            array(
                'name' => 'cases',
                'type' => 'link',
                'relationship' => 'documents_cases',
                'source' => 'non-db',
                'vname' => 'LBL_CASES_SUBPANEL_TITLE',
            ),
        'bugs' =>
            array(
                'name' => 'bugs',
                'type' => 'link',
                'relationship' => 'documents_bugs',
                'source' => 'non-db',
                'vname' => 'LBL_BUGS_SUBPANEL_TITLE',
            ),
        'related_doc_id' =>
            array(
                'name' => 'related_doc_id',
                'vname' => 'LBL_RELATED_DOCUMENT_ID',
                'reportable' => false,
                'dbType' => 'id',
                'type' => 'varchar',
                'len' => '36',
            ),

        'related_doc_name' =>
            array(
                'name' => 'related_doc_name',
                'vname' => 'LBL_DET_RELATED_DOCUMENT',
                'type' => 'relate',
                'table' => 'documents',
                'id_name' => 'related_doc_id',
                'module' => 'Documents',
                'source' => 'non-db',
                'comment' => 'The related document name for Meta-Data framework',
            ),

        'related_doc_rev_id' =>
            array(
                'name' => 'related_doc_rev_id',
                'vname' => 'LBL_RELATED_DOCUMENT_REVISION_ID',
                'reportable' => false,
                'dbType' => 'id',
                'type' => 'varchar',
                'len' => '36',
            ),

        'related_doc_rev_number' =>
            array(
                'name' => 'related_doc_rev_number',
                'vname' => 'LBL_DET_RELATED_DOCUMENT_VERSION',
                'type' => 'varchar',
                'source' => 'non-db',
                'comment' => 'The related document version number for Meta-Data framework',
            ),

        'is_template' =>
            array(
                'name' => 'is_template',
                'vname' => 'LBL_IS_TEMPLATE',
                'type' => 'bool',
                'default' => 0,
                'reportable' => false,
            ),
        'template_type' =>
            array(
                'name' => 'template_type',
                'vname' => 'LBL_TEMPLATE_TYPE',
                'type' => 'enum',
                'len' => 100,
                'options' => 'document_template_type_dom',
                'reportable' => false,
            ),
//BEGIN field used for contract document subpanel.
        'latest_revision_name' =>
            array(
                'name' => 'latest_revision_name',
                'vname' => 'LBL_LASTEST_REVISION_NAME',
                'type' => 'varchar',
                'reportable' => false,
                'source' => 'non-db'
            ),

        'selected_revision_name' =>
            array(
                'name' => 'selected_revision_name',
                'vname' => 'LBL_SELECTED_REVISION_NAME',
                'type' => 'varchar',
                'reportable' => false,
                'source' => 'non-db'
            ),
        'contract_status' =>
            array(
                'name' => 'contract_status',
                'vname' => 'LBL_CONTRACT_STATUS',
                'type' => 'varchar',
                'reportable' => false,
                'source' => 'non-db'
            ),
        'contract_name' =>
            array(
                'name' => 'contract_name',
                'vname' => 'LBL_CONTRACT_NAME',
                'type' => 'varchar',
                'reportable' => false,
                'source' => 'non-db'
            ),
        'linked_id' =>
            array(
                'name' => 'linked_id',
                'vname' => 'LBL_LINKED_ID',
                'type' => 'varchar',
                'reportable' => false,
                'source' => 'non-db'
            ),
        'selected_revision_id' =>
            array(
                'name' => 'selected_revision_id',
                'vname' => 'LBL_SELECTED_REVISION_ID',
                'type' => 'varchar',
                'reportable' => false,
                'source' => 'non-db'
            ),
        'latest_revision_id' =>
            array(
                'name' => 'latest_revision_id',
                'vname' => 'LBL_LATEST_REVISION_ID',
                'type' => 'varchar',
                'reportable' => false,
                'source' => 'non-db'
            ),
        'selected_revision_filename' =>
            array(
                'name' => 'selected_revision_filename',
                'vname' => 'LBL_SELECTED_REVISION_FILENAME',
                'type' => 'varchar',
                'reportable' => false,
                'source' => 'non-db'
            ),
//END fields used for contract documents subpanel.
        'aos_contracts' => array(
            'name' => 'aos_contracts',
            'type' => 'link',
            'relationship' => 'aos_contracts_documents',
            'source' => 'non-db',
            'module' => 'AOS_Contracts',
        ),

    ),
    'indices' => array(
        array('name' => 'idx_doc_cat', 'type' => 'index', 'fields' => array('category_id', 'subcategory_id')),
    ),
    'relationships' => array(
        'document_revisions' => array('lhs_module' => 'Documents', 'lhs_table' => 'documents', 'lhs_key' => 'id',
            'rhs_module' => 'DocumentRevisions', 'rhs_table' => 'document_revisions', 'rhs_key' => 'document_id',
            'relationship_type' => 'one-to-many')

    , 'documents_modified_user' =>
            array('lhs_module' => 'Users', 'lhs_table' => 'users', 'lhs_key' => 'id',
                'rhs_module' => 'Documents', 'rhs_table' => 'documents', 'rhs_key' => 'modified_user_id',
                'relationship_type' => 'one-to-many')

    , 'documents_created_by' =>
            array('lhs_module' => 'Users', 'lhs_table' => 'users', 'lhs_key' => 'id',
                'rhs_module' => 'Documents', 'rhs_table' => 'documents', 'rhs_key' => 'created_by',
                'relationship_type' => 'one-to-many')
    ),

);
VardefManager::createVardef('Documents', 'Document', array('default', 'assignable', 'security_groups',
));

Further investigation reveals that all of my custom relationships are missing from Studio.
And any module where I have a custom relationship is one that is affected by not showing the subpanel!

Has anyone else been affected in this way after upgrading to 7.7.5 ?

I have managed to get the subpanels back
It turns out that my PHP version was not compatible!

However a couple of Modules had duplicated themselves Contacts_Documents in particular, I had to go through and remove all the Vardefs and QRR to get rid of the second subpanels