CRM Core
crm_core
CRM Core is a comprehensive contact relationship management system for Drupal providing contact management (individuals and organizations), activity tracking, duplicate detection, and user account synchronization.
Overview
CRM Core is a powerful and flexible CRM (Customer Relationship Management) system built natively for Drupal. It provides a complete framework for managing contacts, tracking activities, and maintaining relationships within your Drupal website.
The module supports two primary contact types: Individuals (people) and Organizations (companies, groups). Each contact type can have multiple subtypes (bundles) with custom fields. Contacts support revisions, ownership tracking, and publishing status.
CRM Core includes an activity tracking system that allows you to record interactions with contacts such as calls, meetings, emails, and notes. Activities can be linked to multiple participants and support custom activity types through a plugin system.
The module also provides a sophisticated duplicate detection framework with configurable matching engines. The default matching engine uses field-by-field comparison with weighted scores to identify potential duplicate contacts.
User synchronization functionality allows you to link Drupal user accounts with CRM contact records, enabling automatic contact creation when users register and displaying contact information on user profiles.
Features
- Contact Management: Create and manage Individual and Organization contacts with customizable types, revisions, and custom fields
- Activity Tracking: Record and track activities (calls, meetings, emails, notes) linked to one or more contacts
- Duplicate Detection: Identify potential duplicate contacts using configurable matching engines with field-by-field comparison and weighted scoring
- User Synchronization: Link Drupal user accounts to CRM contacts with automatic contact creation and profile display options
- Contact Merging: Merge multiple contacts of the same type, preserving selected field values and migrating related activities
- Primary Fields: Designate primary email, phone, and address fields for each contact type
- Revision Support: Track changes to contacts over time with full revision history
- Views Integration: Pre-configured Views for managing individuals, organizations, and activities
- Extensible Plugin Architecture: Add custom activity types and matching engines through Drupal's plugin system
- Granular Permissions: Per-bundle (type) permissions for create, view, edit, and delete operations
Use Cases
Customer Database Management
Use CRM Core to maintain a database of customers. Create an 'Individual' type called 'Customer' with custom fields for customer information. Track customer interactions using Activities. Use matching engines to prevent duplicate customer records.
Organization Contact Directory
Build a directory of partner organizations, vendors, or clients. Create Organization types for different categories. Add contact individuals associated with each organization using reference fields.
User Profile Extension
Enable CRM Core User Sync to automatically create contact records for registered users. Users can then edit their extended contact information through their profile. Useful for membership sites or customer portals.
Activity Logging for Support
Track support interactions with customers using Activities. Create activity types for 'Support Call', 'Email', 'Meeting'. Link activities to customer contacts to maintain a complete interaction history.
Lead Deduplication
Import leads from multiple sources and use CRM Core Match to identify duplicates. Configure matching rules based on email, name, and phone fields. Use the merge action to consolidate duplicate records while preserving important data.
Membership Management
Manage member contacts with custom individual types (e.g., 'Member', 'Prospect'). Use user sync to link member accounts with contact records. Track membership activities and communications.
Tips
- Use the 'primary_fields' setting on contact types to designate which email, phone, and address fields should be treated as the primary contact method.
- When merging contacts, carefully select which field values to keep - the merge action allows choosing values from any of the contacts being merged.
- Configure matching engine thresholds carefully - too low may create false positives, too high may miss actual duplicates.
- For large sites, consider disabling 'Load contact related to the current user' in User Sync settings if contacts have many fields to avoid performance issues.
- Create different Individual types for different purposes (Customer, Employee, Vendor) to keep permissions and workflows separate.
- Use Views Bulk Operations with the merge contacts action to efficiently clean up duplicate records.
- Activity types can have custom plugins for specialized behavior - extend ActivityTypePluginBase to create custom implementations.
Dependencies
Related Projects
Provides Views integration for all CRM entities. Includes pre-configured views for individual, organization, and activity listings.
Enables field management for contact and activity types through Drupal's standard field UI.
Used for Individual contact name fields with full name formatting support.
Used by Activity entity to reference multiple contacts of different types as participants.
Optional integration for tracking relationships between contacts. Contact merge action updates relations when contacts are merged.
Creates URL aliases when merging contacts to redirect old contact URLs to the merged primary contact.
Admin Pages
| Title | Path | Description |
|---|---|---|
| CRM Core | /admin/structure/crm-core |
Main administrative hub for CRM Core structure configuration. Provides access to contact type management, activity type configuration, and related settings. |
| CRM Core Configuration | /admin/config/crm-core |
Configuration overview page for all CRM Core settings including global settings, matching engines, and user synchronization. |
| CRM Core Settings | /admin/config/crm-core/settings |
Configure global CRM Core settings including the optional custom theme for CRM pages. |
| Individual Types | /admin/structure/crm-core/individual-types |
Manage individual (person) contact types. Create, edit, and delete bundles for categorizing individual contacts (e.g., Customer, Employee, Vendor). |
| Organization Types | /admin/structure/crm-core/organization-types |
Manage organization contact types. Create, edit, and delete bundles for categorizing organization contacts (e.g., Company, Supplier, Partner). |
| Activity Types | /admin/structure/crm-core/activity-types |
Manage activity types for recording interactions with contacts. Each type can have custom fields and a specific activity type plugin. |
| Matching Engines | /admin/config/crm-core/match |
Configure matching engines for duplicate contact detection. Create matchers with field-by-field rules and weighted scores to identify potential duplicates. |
| Add Matcher | /admin/config/crm-core/match/add |
Create a new matcher for duplicate detection with configurable threshold, return order, and field matching rules. |
| User Synchronization | /admin/config/crm-core/user-sync |
Configure how Drupal user accounts are synchronized with CRM contact records. Set up rules for automatic contact creation and display options. |
| CRM Core Dashboard | /crm-core |
Main CRM Core interface showing overview and quick access to contacts and activities. |
| Individuals | /crm-core/individual |
List and manage all individual contacts. Uses a Views-based interface with bulk operations including merge contacts. |
| Organizations | /crm-core/organization |
List and manage all organization contacts. Uses a Views-based interface with bulk operations. |
| Activities | /crm-core/activity |
List and manage all activities. View interactions recorded across all contacts. |
Permissions
| Permission | Description |
|---|---|
|
Allows users to perform any action on Individuals. |
|
Allows creating individual contacts of any bundle type. |
|
Allows editing individual contacts created by the user. |
|
Allows editing any individual contact regardless of owner. |
|
Allows viewing individual contacts created by the user. |
|
Allows viewing any individual contact. |
|
Allows users to perform any action on Organizations. |
|
Allows creating organization contacts of any bundle type. |
|
Allows editing organization contacts created by the user. |
|
Allows editing any organization contact regardless of owner. |
|
Allows viewing organization contacts created by the user. |
|
Allows viewing any organization contact. |
|
Allows the user to edit the types of individuals such as Customer. |
|
Allows the user to edit the types of organization such as Supplier, etc. |
|
Allows viewing revision history for all individuals. |
|
Allows reverting to previous revisions for all individuals. |
|
Allows viewing revision history for all organizations. |
|
Allows the user to revert organizations to previous revisions. |
|
Allows users to configure activity types and their fields. |
|
Allows access to the CRM dashboard. |
|
Allows creating and configuring matching engines for duplicate detection. |
|
Allows viewing matcher configuration without editing. |
|
Allows viewing duplicate match information for contacts. |
|
Access to configuration pages for User Synchronization. |
|
Allows user to edit his/her own contact record from the user profile form. |
Hooks
| Hook | Description |
|---|---|
hook_crm_core_individual_delete |
Responds when an individual contact is deleted. |
hook_theme |
Defines theme hooks for CRM Core entities. |
hook_entity_predelete |
Responds before entity deletion to handle related data. |
Security Notes
- Most administrative permissions have 'restrict access' flag requiring careful assignment.
- Per-bundle permissions allow granular access control - users can be restricted to specific contact types.
- The 'edit own contact information' permission should be granted carefully as it allows users to modify their linked contact record.
- Matching engine configuration should be restricted to prevent unauthorized access to duplicate detection rules.