Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
92 changes: 92 additions & 0 deletions src/CrowdinApiClient/Api/UserApi.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use CrowdinApiClient\Model\ProjectMember;
use CrowdinApiClient\Model\ProjectMemberAddedStatistics;
use CrowdinApiClient\Model\User;
use CrowdinApiClient\Model\UserReportSettingsTemplate;
use CrowdinApiClient\ModelCollection;

/**
Expand Down Expand Up @@ -138,4 +139,95 @@ 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
{
return $this->_list(
sprintf('users/%d/reports/settings-templates', $userId),
UserReportSettingsTemplate::class,
$params
);
}

/**
* 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|null
*/
public function createReportSettingsTemplate(int $userId, array $data): ?UserReportSettingsTemplate
{
return $this->_create(
sprintf('users/%d/reports/settings-templates', $userId),
UserReportSettingsTemplate::class,
$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|null
*/
public function getReportSettingsTemplate(int $userId, int $reportSettingsTemplateId): ?UserReportSettingsTemplate
{
return $this->_get(
sprintf('users/%d/reports/settings-templates/%d', $userId, $reportSettingsTemplateId),
UserReportSettingsTemplate::class
);
}

/**
* 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 $reportSettingsTemplate
* @return UserReportSettingsTemplate|null
*/
public function updateReportSettingsTemplate(
int $userId,
UserReportSettingsTemplate $reportSettingsTemplate
): ?UserReportSettingsTemplate {
return $this->_update(
sprintf('users/%d/reports/settings-templates/%d', $userId, $reportSettingsTemplate->getId()),
$reportSettingsTemplate
);
}
}
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,
];
}
}
112 changes: 112 additions & 0 deletions src/CrowdinApiClient/Model/HourlyIndividualRates.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
<?php

declare(strict_types=1);

namespace CrowdinApiClient\Model;

use InvalidArgumentException;

/**
* @package Crowdin\Model
*/
class HourlyIndividualRates extends BaseModel
{
/**
* @var string[]
*/
protected $languageIds;

/**
* @var int[]
*/
protected $userIds;

/**
* @var float
*/
protected $hourly;

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

$this->languageIds = array_map(static function ($languageId): string {
return (string)$languageId;
}, $this->getDataProperty('languageIds') ?? []);
$this->userIds = array_map(static function ($userId): int {
return (int)$userId;
}, $this->getDataProperty('userIds') ?? []);
$this->hourly = (float)$this->getDataProperty('hourly');
}

/**
* @return string[]
*/
public function getLanguageIds(): array
{
return $this->languageIds;
}

/**
* @param string[] $languageIds
*/
public function setLanguageIds(array $languageIds): void
{
if ($languageIds === []) {
throw new InvalidArgumentException('Argument "languageIds" cannot be empty');
}

foreach ($languageIds as $languageId) {
if (!is_string($languageId)) {
throw new InvalidArgumentException('Argument "languageIds" must be an array of strings');
}
}

$this->languageIds = $languageIds;
}

/**
* @return int[]
*/
public function getUserIds(): array
{
return $this->userIds;
}

/**
* @param int[] $userIds
*/
public function setUserIds(array $userIds): void
{
if ($userIds === []) {
throw new InvalidArgumentException('Argument "userIds" cannot be empty');
}

foreach ($userIds as $userId) {
if (!is_int($userId)) {
throw new InvalidArgumentException('Argument "userIds" must be an array of integers');
}
}

$this->userIds = $userIds;
}

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

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

public function toArray(): array
{
return [
'languageIds' => $this->languageIds,
'userIds' => $this->userIds,
'hourly' => $this->hourly,
];
}
}
81 changes: 81 additions & 0 deletions src/CrowdinApiClient/Model/HourlyReportSettingsTemplateConfig.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
<?php

declare(strict_types=1);

namespace CrowdinApiClient\Model;

use InvalidArgumentException;

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

/**
* @var HourlyIndividualRates[]
*/
protected $individualRates;

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

$this->baseRates = new HourlyBaseRates($this->getDataProperty('baseRates') ?? []);
$this->individualRates = array_map(static function (array $individualRates): HourlyIndividualRates {
return new HourlyIndividualRates($individualRates);
}, $this->getDataProperty('individualRates') ?? []);
}

public function getBaseRates(): HourlyBaseRates
{
return $this->baseRates;
}

public function setBaseRates(HourlyBaseRates $baseRates): void
{
$this->baseRates = $baseRates;
}

/**
* @return HourlyIndividualRates[]
*/
public function getIndividualRates(): array
{
return $this->individualRates;
}

/**
* @param HourlyIndividualRates[] $individualRates
*/
public function setIndividualRates(array $individualRates): void
{
if ($individualRates === []) {
throw new InvalidArgumentException('Argument "individualRates" cannot be empty');
}

foreach ($individualRates as $individualRate) {
if (!$individualRate instanceof HourlyIndividualRates) {
throw new InvalidArgumentException(
'Argument "individualRates" must contain only IndividualRates objects'
Comment thread
bhdnb marked this conversation as resolved.
Outdated
);
}
}

$this->individualRates = $individualRates;
}

public function toArray(): array
{
return [
'baseRates' => $this->baseRates->toArray(),
'individualRates' => array_map(static function (HourlyIndividualRates $individualRate): array {
return $individualRate->toArray();
}, $this->individualRates),
];
}
}
2 changes: 1 addition & 1 deletion src/CrowdinApiClient/Model/IndividualRates.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public function getLanguageIds(): array
}

/**
* @param array $languageIds
* @param string[] $languageIds
*/
public function setLanguageIds(array $languageIds): void
{
Expand Down
2 changes: 2 additions & 0 deletions src/CrowdinApiClient/Model/Report.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,14 @@ class Report extends BaseModel
public const UNIT_WORDS = 'words';
public const UNIT_CHARS = 'chars';
public const UNIT_CHARS_WITH_SPACES = 'chars_with_spaces';
public const UNIT_HOURS = 'hours';

public const UNITS = [
self::UNIT_STRINGS,
self::UNIT_WORDS,
self::UNIT_CHARS,
self::UNIT_CHARS_WITH_SPACES,
self::UNIT_HOURS,
];

/**
Expand Down
Loading
Loading