Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 115 additions & 0 deletions src/CrowdinApiClient/Api/UserApi.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@

namespace CrowdinApiClient\Api;

use CrowdinApiClient\Model\HourlyUserReportSettingsTemplate;
use CrowdinApiClient\Model\ProjectMember;
use CrowdinApiClient\Model\ProjectMemberAddedStatistics;
use CrowdinApiClient\Model\Report;
use CrowdinApiClient\Model\User;
use CrowdinApiClient\Model\UserReportSettingsTemplate;
use CrowdinApiClient\ModelCollection;

/**
Expand Down Expand Up @@ -138,4 +141,116 @@ public function deleteMemberFromProject(int $projectId, int $memberId): void
{
$this->_delete(sprintf('projects/%d/members/%s', $projectId, $memberId));
}

/**
* List User Report Settings Templates
* @link https://developer.crowdin.com/api/v2/#operation/api.users.reports.settings-templates.getMany API Documentation
* @link https://developer.crowdin.com/enterprise/api/v2/#operation/api.users.reports.settings-templates.getMany API Documentation Enterprise
*
* @param int $userId
* @param array $params
* integer $params[limit]<br>
* integer $params[offset]
* @return ModelCollection
*/
public function listReportSettingsTemplates(int $userId, array $params = []): ModelCollection
{
$options = [];
if ($params !== []) {
$options['params'] = $params;
}

$path = sprintf('users/%d/reports/settings-templates', $userId);
$response = $this->client->apiRequest('get', $path, null, $options);

$modelCollection = new ModelCollection();
$modelCollection->setPagination($response['pagination']);

foreach ($response['data'] as $item) {
$modelCollection->add($this->makeUserReportSettingsTemplate($item['data']));
}

return $modelCollection;
}

/**
* Create User Report Settings Template
* @link https://developer.crowdin.com/api/v2/#operation/api.users.reports.settings-templates.post API Documentation
* @link https://developer.crowdin.com/enterprise/api/v2/#operation/api.users.reports.settings-templates.post API Documentation Enterprise
*
* @param int $userId
* @param array $data
* string $data[name] required<br>
* string $data[currency] required<br>
* string $data[unit] required<br>
* array $data[config] required
* @return UserReportSettingsTemplate|HourlyUserReportSettingsTemplate|null
*/
public function createReportSettingsTemplate(int $userId, array $data)
{
$path = sprintf('users/%d/reports/settings-templates', $userId);
$options = ['body' => json_encode($data), 'headers' => $this->getHeaders()];
$response = $this->client->apiRequest('post', $path, null, $options);

return $this->makeUserReportSettingsTemplate($response['data']);
}

/**
* Get User Report Settings Template
* @link https://developer.crowdin.com/api/v2/#operation/api.users.reports.settings-templates.get API Documentation
* @link https://developer.crowdin.com/enterprise/api/v2/#operation/api.users.reports.settings-templates.get API Documentation Enterprise
*
* @param int $userId
* @param int $reportSettingsTemplateId
* @return UserReportSettingsTemplate|HourlyUserReportSettingsTemplate|null
*/
public function getReportSettingsTemplate(int $userId, int $reportSettingsTemplateId)
{
$path = sprintf('users/%d/reports/settings-templates/%d', $userId, $reportSettingsTemplateId);
$response = $this->client->apiRequest('get', $path);

return $this->makeUserReportSettingsTemplate($response['data']);
}

/**
* Delete User Report Settings Template
* @link https://developer.crowdin.com/api/v2/#operation/api.users.reports.settings-templates.delete API Documentation
* @link https://developer.crowdin.com/enterprise/api/v2/#operation/api.users.reports.settings-templates.delete API Documentation Enterprise
*
* @param int $userId
* @param int $reportSettingsTemplateId
*/
public function deleteReportSettingsTemplate(int $userId, int $reportSettingsTemplateId): void
{
$this->_delete(sprintf('users/%d/reports/settings-templates/%d', $userId, $reportSettingsTemplateId));
}

/**
* Update User Report Settings Template
* @link https://developer.crowdin.com/api/v2/#operation/api.users.reports.settings-templates.patch API Documentation
* @link https://developer.crowdin.com/enterprise/api/v2/#operation/api.users.reports.settings-templates.patch API Documentation Enterprise
*
* @param int $userId
* @param UserReportSettingsTemplate|HourlyUserReportSettingsTemplate $reportSettingsTemplate
* @return UserReportSettingsTemplate|HourlyUserReportSettingsTemplate|null
*/
public function updateReportSettingsTemplate(int $userId, $reportSettingsTemplate)
{
return $this->_update(
sprintf('users/%d/reports/settings-templates/%d', $userId, $reportSettingsTemplate->getId()),
$reportSettingsTemplate
);
}

/**
* @return HourlyUserReportSettingsTemplate|UserReportSettingsTemplate
*/
private function makeUserReportSettingsTemplate(array $data)
{
if (($data['unit'] ?? '') === Report::UNIT_HOURS) {
return new HourlyUserReportSettingsTemplate($data);
}

return new UserReportSettingsTemplate($data);
}
}
128 changes: 128 additions & 0 deletions src/CrowdinApiClient/Model/AbstractUserReportSettingsTemplate.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
<?php

declare(strict_types=1);

namespace CrowdinApiClient\Model;

use InvalidArgumentException;

abstract class AbstractUserReportSettingsTemplate extends BaseModel
{
public const SUPPORTED_UNITS = [
Report::UNIT_STRINGS,
Report::UNIT_WORDS,
Report::UNIT_CHARS,
Report::UNIT_CHARS_WITH_SPACES,
Report::UNIT_HOURS,
];

/**
* @var int
*/
protected $id;

/**
* @var string
*/
protected $name;

/**
* @var string
*/
protected $currency;

/**
* @var string
*/
protected $unit;

/**
* @var string
*/
protected $createdAt;

/**
* @var string|null
*/
protected $updatedAt;

public function getId(): int
{
return $this->id;
}

public function getName(): string
{
return $this->name;
}

public function setName(string $name): void
{
$this->name = $name;
}

public function getCurrency(): string
{
return $this->currency;
}

public function setCurrency(string $currency): void
{
if (!in_array($currency, Report::CURRENCIES, true)) {
throw new InvalidArgumentException(
sprintf(
'Argument "currency" must be one of the following values: %s',
implode(', ', Report::CURRENCIES)
)
);
}

$this->currency = $currency;
}

public function getUnit(): string
{
return $this->unit;
}

public function setUnit(string $unit): void
{
if (!in_array($unit, static::SUPPORTED_UNITS, true)) {
throw new InvalidArgumentException(
sprintf(
'Argument "unit" must be one of the following values: %s',
implode(', ', static::SUPPORTED_UNITS)
)
);
}

$this->unit = $unit;
}

public function getCreatedAt(): string
{
return $this->createdAt;
}

public function getUpdatedAt(): ?string
{
return $this->updatedAt;
}

public function toArray(): array
{
return [
'id' => $this->id,
'name' => $this->name,
'currency' => $this->currency,
'unit' => $this->unit,
'config' => $this->config->toArray(),
'createdAt' => $this->createdAt,
'updatedAt' => $this->updatedAt,
];
}

abstract public function getConfig();

abstract public function setConfig($config): void;
}
40 changes: 40 additions & 0 deletions src/CrowdinApiClient/Model/HourlyBaseRates.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

declare(strict_types=1);

namespace CrowdinApiClient\Model;

/**
* @package Crowdin\Model
*/
class HourlyBaseRates extends BaseModel
{
/**
* @var float
*/
protected $hourly;

public function __construct(array $data = [])
{
parent::__construct($data);

$this->hourly = (float)$this->getDataProperty('hourly');
}

public function getHourly(): float
{
return $this->hourly;
}

public function setHourly(float $hourly): void
{
$this->hourly = $hourly;
}

public function toArray(): array
{
return [
'hourly' => $this->hourly,
];
}
}
Loading
Loading