ryanwinchester/hubspot-php

View on GitHub
src/Endpoints/Engagements.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace SevenShores\Hubspot\Endpoints;

use SevenShores\Hubspot\Exceptions\BadRequest;

/**
 * @see https://developers.hubspot.com/docs/methods/engagements/engagements-overview
 */
class Engagements extends Endpoint
{
    /**
     * Create an engagement.
     *
     * @see https://developers.hubspot.com/docs/methods/engagements/create_engagement
     *
     * @param array $engagement   array of engagement engagement
     * @param array $associations array of engagement associations
     * @param array $metadata     array of engagement metadata
     * @param array $attachments  array of engagement attachments
     *
     * @return \SevenShores\Hubspot\Http\Response
     */
    public function create(array $engagement, array $associations, array $metadata, array $attachments = [])
    {
        $endpoint = 'https://api.hubapi.com/engagements/v1/engagements';

        return $this->client->request(
            'post',
            $endpoint,
            [
                'json' => [
                    'engagement' => $engagement,
                    'associations' => $associations,
                    'metadata' => $metadata,
                    'attachments' => $attachments,
                ],
            ]
        );
    }

    /**
     * Update an Engagement.
     *
     * @see https://developers.hubspot.com/docs/methods/engagements/update_engagement-patch
     *
     * @param int   $id         the engagement id
     * @param array $engagement the engagement engagement to update
     * @param array $metadata   the engagement metadata to update
     *
     * @throws \SevenShores\Hubspot\Exceptions\BadRequest
     *
     * @return \SevenShores\Hubspot\Http\Response
     */
    public function update($id, array $engagement, array $metadata, string $method = 'patch')
    {
        $availableMethods = ['put', 'patch'];

        if (!in_array($method, $availableMethods)) {
            throw new BadRequest('Method name '.$method.' is invalid', 400);
        }
        $endpoint = "https://api.hubapi.com/engagements/v1/engagements/{$id}";

        return $this->client->request(
            $method,
            $endpoint,
            [
                'json' => [
                    'engagement' => $engagement,
                    'metadata' => $metadata,
                ],
            ]
        );
    }

    /**
     * Get an engagement.
     *
     * @see https://developers.hubspot.com/docs/methods/engagements/get_engagement
     *
     * @param int $id
     *
     * @return \SevenShores\Hubspot\Http\Response
     */
    public function get($id)
    {
        $endpoint = "https://api.hubapi.com/engagements/v1/engagements/{$id}";

        return $this->client->request('get', $endpoint);
    }

    /**
     * Get all engagements.
     *
     * @see https://developers.hubspot.com/docs/methods/engagements/get-all-engagements
     *
     * @param array $params Array of optional parameters ['limit', 'offset']
     *
     * @return \SevenShores\Hubspot\Http\Response
     */
    public function all(array $params = [])
    {
        $endpoint = 'https://api.hubapi.com/engagements/v1/engagements/paged';

        return $this->client->request('get', $endpoint, [], build_query_string($params));
    }

    /**
     * Returns all recently created or updated engagements.
     *
     * @see https://developers.hubspot.com/docs/methods/engagements/get-recent-engagements
     *
     * @param array $params Array of optional parameters ['count', 'offset', 'since]
     *
     * @return \SevenShores\Hubspot\Http\Response
     */
    public function recent(array $params = [])
    {
        $endpoint = 'https://api.hubapi.com/engagements/v1/engagements/recent/modified';

        return $this->client->request('get', $endpoint, [], build_query_string($params));
    }

    /**
     * Delete an Engagement.
     *
     * @see https://developers.hubspot.com/docs/methods/engagements/delete-engagement
     *
     * @param int $id
     *
     * @return \SevenShores\Hubspot\Http\Response
     */
    public function delete($id)
    {
        $endpoint = "https://api.hubapi.com/engagements/v1/engagements/{$id}";

        return $this->client->request('delete', $endpoint);
    }

    /**
     * Associate Engagement with CRM object.
     *
     * @see https://developers.hubspot.com/docs/methods/engagements/associate_engagement
     * @see CrmAssociations::create is used to create associations between objects
     * @deprecated
     *
     * @param int $id
     * @param int $object_id
     *
     * @return \SevenShores\Hubspot\Http\Response
     */
    public function associate($id, string $object_type, $object_id)
    {
        $endpoint = "https://api.hubapi.com/engagements/v1/engagements/{$id}/associations/{$object_type}/{$object_id}";

        return $this->client->request('put', $endpoint);
    }

    /**
     * Get Associated Engagements.
     *
     * @see https://developers.hubspot.com/docs/methods/engagements/get_associated_engagements
     * @see CrmAssociations::get is used to get associations between objects
     * @deprecated
     *
     * @param int   $object_id
     * @param array $params    Array of optional parameters ['limit', 'offset']
     *
     * @return \SevenShores\Hubspot\Http\Response
     */
    public function associated(string $object_type, $object_id, array $params = [])
    {
        $endpoint = "https://api.hubapi.com/engagements/v1/engagements/associated/{$object_type}/{$object_id}/paged";

        return $this->client->request('get', $endpoint, [], build_query_string($params));
    }

    /**
     * @deprecated
     *
     * @return \SevenShores\Hubspot\Http\Response
     */
    public function activityTypes()
    {
        $endpoint = 'https://api.hubapi.com/engagements/v1/activity-types';

        return $this->client->request('get', $endpoint);
    }

    /**
     * Get call engagement dispositions.
     *
     * Get the possible dispositions for sales calls (stored as engagements), listed as
     * the outcome when viewing the call's outcome when viewing
     * the call in the timeline in HubSpot.
     *
     * @see https://developers.hubspot.com/docs/methods/engagements/get-call-dispositions
     *
     * @return \Psr\Http\Message\ResponseInterface|\SevenShores\Hubspot\Http\Response
     */
    public function getCallDispositions()
    {
        $endpoint = 'https://api.hubapi.com/calling/v1/dispositions';

        return $this->client->request('get', $endpoint);
    }
}