site_name: Developer Guide repo_url: https://github.com/civicrm/civicrm-dev-docs site_description: A guide for CiviCRM developers. site_author: The CiviCRM community theme: material pages: - Home: index.md - Basics: - Developer Community: basics/community.md - Requirements: basics/requirements.md - Useful Skills: basics/skills.md - Planning Your Project: basics/planning.md - Tools: - Development Tools: tools/index.md - Buildkit: tools/buildkit.md - civibuild: tools/civibuild.md - cividist: tools/cividist.md - civilint: tools/civilint.md - civi-test-run: tools/civi-test-run.md - Issue Tracking: tools/issue-tracking.md - Git, GitHub, & GitLab: tools/git.md - Jenkins: tools/jenkins.md - PhpStorm: tools/phpstorm.md - Debugging: tools/debugging.md - Universe: tools/universe.md - Core: - When to Edit Core: core/hacking.md - How to Contribute: core/contributing.md - Reviewing a PR: core/pr-review.md - Verifying a Bug Fix: core/verify-fix.md - Release Process: core/release-process.md - Financial: - Overview: financial/overview.md - Order API: financial/orderAPI.md - Payment API: financial/paymentAPI.md - Entities: financial/financialentities.md - Extensions: - Basics: extensions/index.md - Packaging Options: extensions/packaging.md - civix: extensions/civix.md - Extension Structure: extensions/structure.md - info.xml File: extensions/info-xml.md - Publishing Extensions: extensions/publish.md - Extension Lifecycle: extensions/lifecycle.md - Troubleshooting: extensions/troubleshooting.md - Advanced Patterns: extensions/advanced.md - Payment Processors: - Payment Processors: extensions/payment-processors/index.md - Payment Processor Types: extensions/payment-processors/types.md - Creating a Payment Processor: extensions/payment-processors/create.md - CMS-specific development: extensions/cms-specific.md - API: - API Intro: api/index.md - API Interfaces: api/interfaces.md - APIv4: - APIv4 Usage: api/v4/usage.md - APIv4 Actions: api/v4/actions.md - APIv4 Joins: api/v4/joins.md - APIv4 Chaining: api/v4/chaining.md - APIv4 Custom Data: api/v4/custom-data.md - Differences Between Api v3 and v4: api/v4/differences-with-v3.md - APIv4 Changes: api/v4/changes.md - APIv3: - APIv3 Usage: api/v3/usage.md - APIv3 Actions: api/v3/actions.md - APIv3 Options: api/v3/options.md - APIv3 Joins: api/v3/joins.md - APIv3 Chaining: api/v3/chaining.md - APIv3 Custom Data: api/v3/custom-data.md - APIv3 Examples: api/v3/examples.md - APIv3 Changes: api/v3/changes.md - Hooks: - Hooks Introduction: hooks/index.md - Usage: - Hooks in Extensions: hooks/usage/extension.md - Hooks in Symfony: hooks/usage/symfony.md - Hooks in Drupal: hooks/usage/drupal.md - Hooks in Joomla: hooks/usage/joomla.md - Hooks in WordPress: hooks/usage/wordpress.md - All Hooks: hooks/list.md - Batch Hooks: - hook_civicrm_batchItems: hooks/hook_civicrm_batchItems.md - hook_civicrm_batchQuery: hooks/hook_civicrm_batchQuery.md - Case Hooks: - hook_civicrm_caseChange: hooks/hook_civicrm_caseChange.md - hook_civicrm_caseTypes: hooks/hook_civicrm_caseTypes.md - hook_civicrm_post_case_merge: hooks/hook_civicrm_post_case_merge.md - hook_civicrm_pre_case_merge: hooks/hook_civicrm_pre_case_merge.md - Database Hooks: - hook_civicrm_alterLocationMergeData: hooks/hook_civicrm_alterLocationMergeData.md - hook_civicrm_copy: hooks/hook_civicrm_copy.md - hook_civicrm_custom: hooks/hook_civicrm_custom.md - hook_civicrm_managed: hooks/hook_civicrm_managed.md - hook_civicrm_merge: hooks/hook_civicrm_merge.md - hook_civicrm_post: hooks/hook_civicrm_post.md - hook_civicrm_postSave_table_name: hooks/hook_civicrm_postSave_table_name.md - hook_civicrm_pre: hooks/hook_civicrm_pre.md - hook_civicrm_referenceCounts: hooks/hook_civicrm_referenceCounts.md - hook_civicrm_triggerInfo: hooks/hook_civicrm_triggerInfo.md - Dedupe Hooks: - hook_civicrm_dupeQuery: hooks/hook_civicrm_dupeQuery.md - hook_civicrm_findDuplicates: hooks/hook_civicrm_findDuplicates.md - Entity Hooks: - hook_civicrm_entityTypes: hooks/hook_civicrm_entityTypes.md - Extension Lifecycle Hooks: - hook_civicrm_disable: hooks/hook_civicrm_disable.md - hook_civicrm_enable: hooks/hook_civicrm_enable.md - hook_civicrm_install: hooks/hook_civicrm_install.md - hook_civicrm_postInstall: hooks/hook_civicrm_postInstall.md - hook_civicrm_uninstall: hooks/hook_civicrm_uninstall.md - hook_civicrm_upgrade: hooks/hook_civicrm_upgrade.md - Form Hooks: - hook_civicrm_alterAngular: hooks/hook_civicrm_alterAngular.md - hook_civicrm_alterContent: hooks/hook_civicrm_alterContent.md - hook_civicrm_alterTemplateFile: hooks/hook_civicrm_alterTemplateFile.md - hook_civicrm_buildForm: hooks/hook_civicrm_buildForm.md - hook_civicrm_idsException: hooks/hook_civicrm_idsException.md - hook_civicrm_postProcess: hooks/hook_civicrm_postProcess.md - hook_civicrm_preProcess: hooks/hook_civicrm_preProcess.md - <del>hook_civicrm_validate</del>: hooks/hook_civicrm_validate.md - hook_civicrm_validateForm: hooks/hook_civicrm_validateForm.md - GUI Hooks: - hook_civicrm_activeTheme: hooks/hook_civicrm_activeTheme.md - hook_civicrm_alterEntityRefParams: hooks/hook_civicrm_alterEntityRefParams.md - hook_civicrm_alterMenu: hooks/hook_civicrm_alterMenu.md - hook_civicrm_buildAmount: hooks/hook_civicrm_buildAmount.md - hook_civicrm_caseSummary: hooks/hook_civicrm_caseSummary.md - hook_civicrm_contact_get_displayname: hooks/hook_civicrm_contact_get_displayname.md - <del>hook_civicrm_customFieldOptions</del>: hooks/hook_civicrm_customFieldOptions.md - hook_civicrm_dashboard: hooks/hook_civicrm_dashboard.md - hook_civicrm_dashboard_defaults: hooks/hook_civicrm_dashboard_defaults.md - hook_civicrm_entityRefFilters: hooks/hook_civicrm_entityRefFilters.md - hook_civicrm_fieldOptions: hooks/hook_civicrm_fieldOptions.md - hook_civicrm_links: hooks/hook_civicrm_links.md - hook_civicrm_navigationMenu: hooks/hook_civicrm_navigationMenu.md - hook_civicrm_pageRun: hooks/hook_civicrm_pageRun.md - hook_civicrm_searchColumns: hooks/hook_civicrm_searchColumns.md - hook_civicrm_searchTasks: hooks/hook_civicrm_searchTasks.md - hook_civicrm_summary: hooks/hook_civicrm_summary.md - hook_civicrm_summaryActions: hooks/hook_civicrm_summaryActions.md - hook_civicrm_themes: hooks/hook_civicrm_themes.md - <del>hook_civicrm_tabs</del>: hooks/hook_civicrm_tabs.md - hook_civicrm_tabset: hooks/hook_civicrm_tabset.md - hook_civicrm_xmlMenu: hooks/hook_civicrm_xmlMenu.md - Mail Hooks: - hook_civicrm_alterMailContent: hooks/hook_civicrm_alterMailContent.md - hook_civicrm_alterMailer: hooks/hook_civicrm_alterMailer.md - hook_civicrm_alterMailParams: hooks/hook_civicrm_alterMailParams.md - hook_civicrm_alterMailingRecipients: hooks/hook_civicrm_alterMailingRecipients.md - hook_civicrm_emailProcessor: hooks/hook_civicrm_emailProcessor.md - hook_civicrm_emailProcessorContact: hooks/hook_civicrm_emailProcessorContact.md - hook_civicrm_mailingGroups: hooks/hook_civicrm_mailingGroups.md - hook_civicrm_postEmailSend: hooks/hook_civicrm_postEmailSend.md - hook_civicrm_postMailing: hooks/hook_civicrm_postMailing.md - hook_civicrm_unsubscribeGroups: hooks/hook_civicrm_unsubscribeGroups.md - Membership Hooks: - hook_civicrm_alterCalculatedMembershipStatus: hooks/hook_civicrm_alterCalculatedMembershipStatus.md - hook_civicrm_membershipTypeValues: hooks/hook_civicrm_membershipTypeValues.md - Permission Hooks: - hook_civicrm_aclGroup: hooks/hook_civicrm_aclGroup.md - hook_civicrm_aclWhereClause: hooks/hook_civicrm_aclWhereClause.md - hook_civicrm_alterAPIPermissions: hooks/hook_civicrm_alterAPIPermissions.md - hook_civicrm_notePrivacy: hooks/hook_civicrm_notePrivacy.md - hook_civicrm_permission: hooks/hook_civicrm_permission.md - hook_civicrm_permission_check: hooks/hook_civicrm_permission_check.md - hook_civicrm_selectWhereClause: hooks/hook_civicrm_selectWhereClause.md - Profile Hooks: - hook_civicrm_buildProfile: hooks/hook_civicrm_buildProfile.md - hook_civicrm_buildUFGroupsForModule: hooks/hook_civicrm_buildUFGroupsForModule.md - hook_civicrm_processProfile: hooks/hook_civicrm_processProfile.md - hook_civicrm_searchProfile: hooks/hook_civicrm_searchProfile.md - hook_civicrm_validateProfile: hooks/hook_civicrm_validateProfile.md - hook_civicrm_viewProfile: hooks/hook_civicrm_viewProfile.md - Report Hooks: - hook_civicrm_alterReportVar: hooks/hook_civicrm_alterReportVar.md - SMS Hooks: - hook_civicrm_inboundSMS: hooks/hook_civicrm_inboundSMS.md - Scheduled Job / cron Hooks: - hook_civicrm_cron: hooks/hook_civicrm_cron.md - hook_civicrm_preJob: hooks/hook_civicrm_preJob.md - hook_civicrm_postJob: hooks/hook_civicrm_postJob.md - Uncategorized Hooks: - hook_civicrm_alterBadge: hooks/hook_civicrm_alterBadge.md - hook_civicrm_alterBarcode: hooks/hook_civicrm_alterBarcode.md - hook_civicrm_alterLogTables: hooks/hook_civicrm_alterLogTables.md - hook_civicrm_alterMailingLabelParams: hooks/hook_civicrm_alterMailingLabelParams.md - hook_civicrm_alterPaymentProcessorParams: hooks/hook_civicrm_alterPaymentProcessorParams.md - hook_civicrm_alterSettingsFolders: hooks/hook_civicrm_alterSettingsFolders.md - hook_civicrm_alterSettingsMetaData: hooks/hook_civicrm_alterSettingsMetaData.md - hook_civicrm_angularModules: hooks/hook_civicrm_angularModules.md - hook_civicrm_apiWrappers: hooks/hook_civicrm_apiWrappers.md - hook_civicrm_buildAsset: hooks/hook_civicrm_buildAsset.md - hook_civicrm_buildStateProvinceForCountry: hooks/hook_civicrm_buildStateProvinceForCountry.md - hook_civicrm_check: hooks/hook_civicrm_check.md - hook_civicrm_config: hooks/hook_civicrm_config.md - <del>hook_civicrm_contactListQuery</del>: hooks/hook_civicrm_contactListQuery.md - hook_civicrm_container: hooks/hook_civicrm_container.md - hook_civicrm_coreResourceList: hooks/hook_civicrm_coreResourceList.md - hook_civicrm_crudLink: hooks/hook_civicrm_crudLink.md - hook_civicrm_eventDiscount: hooks/hook_civicrm_eventDiscount.md - hook_civicrm_export: hooks/hook_civicrm_export.md - hook_civicrm_fileSearches: hooks/hook_civicrm_fileSearches.md - hook_civicrm_geocoderFormat: hooks/hook_civicrm_geocoderFormat.md - hook_civicrm_getAssetUrl: hooks/hook_civicrm_getAssetUrl.md - hook_civicrm_import: hooks/hook_civicrm_import.md - <del>hook_civicrm_optionValues</del>: hooks/hook_civicrm_optionValues.md - hook_civicrm_postIPNProcess: hooks/hook_civicrm_postIPNProcess.md - hook_civicrm_queryObjects: hooks/hook_civicrm_queryObjects.md - hook_civicrm_recent: hooks/hook_civicrm_recent.md - hook_civicrm_tokens: hooks/hook_civicrm_tokens.md - hook_civicrm_tokenValues: hooks/hook_civicrm_tokenValues.md - hook_civicrm_unhandledException: hooks/hook_civicrm_unhandledException.md - Testing: - Testing: testing/index.md - Continuous Integration: testing/continuous-integration.md - PHP: - PHPUnit Tests: testing/phpunit.md # - Codeception Tests: testing/codeception.md - Selenium Tests: testing/selenium.md - Javascript: - Karma Tests: testing/karma.md # - Protractor Tests: testing/protractor.md - QUnit Tests: testing/qunit.md - Other: - Upgrade Tests: testing/upgrades.md - Manual Tests: testing/manual.md - Security: - Secure Coding: security/index.md - Securing Inputs: security/inputs.md - Securing Outputs: security/outputs.md - Permissions: security/permissions.md - Access Control: security/access.md - Reporting Vulnerabilities: security/reporting.md - Framework: - AJAX Pages and Forms Reference: framework/ajax.md - AngularJS: - AngularJS Intro: framework/angular/index.md - AngularJS Quick Start: framework/angular/quickstart.md - AngularJS File Names: framework/angular/files.md - AngularJS Loader: framework/angular/loader.md - AngularJS Changesets: framework/angular/changeset.md - API Architecture: framework/api-architecture.md - Asset Builder: framework/asset-builder.md - Bootstrap Process: framework/bootstrap.md - Backbone Reference: framework/backbone.md - Cache Reference: framework/cache.md - CiviMail: framework/civimail.md - CiviReport: framework/civireport.md - Codebase: framework/codebase.md - Database: - Overview: framework/database/index.md - XML Schema definition: framework/database/schema-definition.md - Schema Design: framework/database/schema-design.md - Transaction Reference: framework/database/transactions.md - File System: framework/filesystem.md - PseudoConstant Reference: framework/pseudoconstant.md - QuickForm Reference: - QuickForm: framework/quickform/index.md - Entity Reference Field: framework/quickform/entityref.md - Queue Reference: framework/queues/index.md - Region Reference: framework/region.md - Routing: framework/routing.md - Resources Reference: framework/resources.md - Setting Reference: framework/setting.md - Template Reference: - Templates: framework/templates/index.md - Customizing Templates: framework/templates/customizing.md - Extending Smarty: framework/templates/extending-smarty.md - Theme Reference: framework/theme.md - Token Reference: framework/token.md - UI Reference: framework/ui.md - Upgrade Reference: framework/upgrade.md - Translation: - Translation: translation/index.md - Extensions Translation: translation/extensions.md - Database localized fields and upgrades: translation/database.md - Standards: - Coding Standards: standards/index.md - PHP Standards: standards/php.md - Javascript Standards: standards/javascript.md - Database Standards: standards/database.md - Review Standards: standards/review.md - Documentation: - Writing Documentation: documentation/index.md - Documenting Extensions: documentation/extensions.md - Markdown: documentation/markdown.md - Style Guide: documentation/style-guide.md markdown_extensions: - attr_list - admonition - def_list - toc: permalink: true - pymdownx.highlight: guess_lang: true extend_pygments_lang: - name: php lang: php options: startinline: true - pymdownx.superfences: css_class: codehilite - pymdownx.inlinehilite: css_class: codehilite - pymdownx.tilde - pymdownx.betterem - pymdownx.mark