Skip to content

Development

Architecture

  • HTTP clientOnePageCrmClient (src/Http/) sends authenticated requests to https://app.onepagecrm.com/api/v3 using HTTP Basic Auth. Supports GET, POST, PUT, PATCH, DELETE. Implements OnePageCrmClientInterface for testability.
  • Services — One service per API resource in src/Service/. Each depends on OnePageCrmClientInterface and exposes typed methods for each endpoint.
  • Configurationone_page_crm_api.settings with settings form at src/Form/SettingsForm.php.

File layout

one_page_crm_api/
├── config/
│   ├── install/
│   └── schema/
├── src/
│   ├── Form/
│   │   └── SettingsForm.php
│   ├── Http/
│   │   ├── OnePageCrmClient.php
│   │   └── OnePageCrmClientInterface.php
│   └── Service/
│       ├── ActionsService.php
│       ├── AttachmentsService.php
│       ├── CallResultsService.php
│       ├── CallsService.php
│       ├── CompaniesService.php
│       ├── CompanyFieldsService.php
│       ├── ContactsService.php
│       ├── CountriesService.php
│       ├── CustomFieldsService.php
│       ├── DealFieldsService.php
│       ├── DealsService.php
│       ├── FiltersService.php
│       ├── LeadSourcesService.php
│       ├── MeetingsService.php
│       ├── NotesService.php
│       ├── NotificationsService.php
│       ├── PipelinesService.php
│       ├── PredefinedActionsService.php
│       ├── PredefinedItemGroupsService.php
│       ├── PredefinedItemsService.php
│       ├── RelationshipTypesService.php
│       ├── StatusesService.php
│       ├── UsersService.php
│       └── WebhooksService.php
├── tests/
│   └── src/Unit/
│       ├── Fixtures/
│       │   └── ApiResponses.php
│       └── Service/
│           └── OnePageCrm*ServiceTest.php
├── one_page_crm_api.services.yml
└── one_page_crm_api_ui/          # Optional submodule
    └── src/Form/
        └── Test*Form.php

UI submodule

one_page_crm_api_ui provides test forms for every API endpoint at /admin/config/services/one-page-crm-api/test/.... Forms are organized as:

  • Primary tabs: Settings | Contacts | Companies | Deals | Notes | Calls | Meetings | Actions | Attachments | Predefined | Reference | System
  • Secondary tabs under groups: e.g. Contacts > Contacts / Custom fields / Relationship types

Requires the Test One Page CRM API permission.

Extending

Add a new API resource:

  1. Create a service class in src/Service/ that depends on OnePageCrmClientInterface.
  2. Register it in one_page_crm_api.services.yml with @one_page_crm_api.client as the argument.
  3. Optionally add a test form in one_page_crm_api_ui extending TestApiFormBase.

Testing

Unit tests use PHPUnit with OnePageCrmClientInterface mocked. Fixtures are in tests/src/Unit/Fixtures/ApiResponses.php.

ddev phpunit
ddev phpcs
ddev phpstan

Coding standards

  • declare(strict_types=1); in all PHP files
  • Typed properties and return types
  • Constructor injection with private readonly
  • PHPDoc on all classes and public methods
  • Comments must not exceed 80 characters
  • Aligned => operators in multi-line arrays