Development
Architecture
- HTTP client —
OnePageCrmClient(src/Http/) sends authenticated requests tohttps://app.onepagecrm.com/api/v3using HTTP Basic Auth. Supports GET, POST, PUT, PATCH, DELETE. ImplementsOnePageCrmClientInterfacefor testability. - Services — One service per API resource in
src/Service/. Each depends onOnePageCrmClientInterfaceand exposes typed methods for each endpoint. - Configuration —
one_page_crm_api.settingswith settings form atsrc/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:
- Create a service class in
src/Service/that depends onOnePageCrmClientInterface. - Register it in
one_page_crm_api.services.ymlwith@one_page_crm_api.clientas the argument. - Optionally add a test form in
one_page_crm_api_uiextendingTestApiFormBase.
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