Skip to content

Commit e3de799

Browse files
authored
Merge pull request #422 from Art4/417-deprecate-all-redmineapigetidbyname-methods
Deprecate all `Redmine\Api\*::getIdBy...()` methods
2 parents a4da285 + b11e318 commit e3de799

21 files changed

+557
-148
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2323
### Deprecated
2424

2525
- `Redmine\Api\CustomField::listing()` is deprecated, use `\Redmine\Api\CustomField::listNames()` instead.
26+
- `Redmine\Api\CustomField::getIdByName()` is deprecated, use `\Redmine\Api\CustomField::listNames()` instead.
2627
- `Redmine\Api\Group::listing()` is deprecated, use `\Redmine\Api\Group::listNames()` instead.
2728
- `Redmine\Api\IssueCategory::listing()` is deprecated, use `\Redmine\Api\IssueCategory::listNamesByProject()` instead.
29+
- `Redmine\Api\IssueCategory::getIdByName()` is deprecated, use `\Redmine\Api\IssueCategory::listNamesByProject()` instead.
2830
- `Redmine\Api\IssueStatus::listing()` is deprecated, use `\Redmine\Api\IssueStatus::listNames()` instead.
31+
- `Redmine\Api\IssueStatus::getIdByName()` is deprecated, use `\Redmine\Api\IssueStatus::listNames()` instead.
2932
- `Redmine\Api\Project::listing()` is deprecated, use `\Redmine\Api\Project::listNames()` instead.
33+
- `Redmine\Api\Project::getIdByName()` is deprecated, use `\Redmine\Api\Project::listNames()` instead.
3034
- `Redmine\Api\Role::listing()` is deprecated, use `\Redmine\Api\Role::listNames()` instead.
3135
- `Redmine\Api\TimeEntryActivity::listing()` is deprecated, use `\Redmine\Api\TimeEntryActivity::listNames()` instead.
36+
- `Redmine\Api\TimeEntryActivity::getIdByName()` is deprecated, use `\Redmine\Api\TimeEntryActivity::listNames()` instead.
3237
- `Redmine\Api\Tracker::listing()` is deprecated, use `\Redmine\Api\Tracker::listNames()` instead.
38+
- `Redmine\Api\Tracker::getIdByName()` is deprecated, use `\Redmine\Api\Tracker::listNames()` instead.
3339
- `Redmine\Api\User::listing()` is deprecated, use `\Redmine\Api\User::listLogins()` instead.
40+
- `Redmine\Api\User::getIdByUsername()` is deprecated, use `\Redmine\Api\User::listLogins()` instead.
3441
- `Redmine\Api\Version::listing()` is deprecated, use `\Redmine\Api\Version::listNamesByProject()` instead.
42+
- `Redmine\Api\Version::getIdByName()` is deprecated, use `\Redmine\Api\Version::listNamesByProject()` instead.
3543

3644
## [v2.6.0](https://github.com/kbsali/php-redmine-api/compare/v2.5.0...v2.6.0) - 2024-03-25
3745

src/Redmine/Api/CustomField.php

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -111,19 +111,14 @@ public function listing($forceUpdate = false, array $params = [])
111111
{
112112
@trigger_error('`' . __METHOD__ . '()` is deprecated since v2.7.0, use `' . __CLASS__ . '::listNames()` instead.', E_USER_DEPRECATED);
113113

114-
if (empty($this->customFields) || $forceUpdate) {
115-
$this->customFields = $this->list($params);
116-
}
117-
$ret = [];
118-
foreach ($this->customFields['custom_fields'] as $e) {
119-
$ret[$e['name']] = (int) $e['id'];
120-
}
121-
122-
return $ret;
114+
return $this->doListing($forceUpdate, $params);
123115
}
124116

125117
/**
126-
* Get a tracket id given its name.
118+
* Get a custom field id given its name.
119+
*
120+
* @deprecated v2.7.0 Use listNames() instead.
121+
* @see CustomField::listNames()
127122
*
128123
* @param string|int $name customer field name
129124
* @param array $params optional parameters to be passed to the api (offset, limit, ...)
@@ -132,11 +127,29 @@ public function listing($forceUpdate = false, array $params = [])
132127
*/
133128
public function getIdByName($name, array $params = [])
134129
{
135-
$arr = $this->listing(false, $params);
130+
@trigger_error('`' . __METHOD__ . '()` is deprecated since v2.7.0, use `' . __CLASS__ . '::listNames()` instead.', E_USER_DEPRECATED);
131+
132+
$arr = $this->doListing(false, $params);
133+
136134
if (!isset($arr[$name])) {
137135
return false;
138136
}
139137

140138
return $arr[(string) $name];
141139
}
140+
141+
private function doListing(bool $forceUpdate, array $params)
142+
{
143+
if (empty($this->customFields) || $forceUpdate) {
144+
$this->customFields = $this->list($params);
145+
}
146+
147+
$ret = [];
148+
149+
foreach ($this->customFields['custom_fields'] as $e) {
150+
$ret[$e['name']] = (int) $e['id'];
151+
}
152+
153+
return $ret;
154+
}
142155
}

src/Redmine/Api/Issue.php

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ public function setIssueStatus($id, $status)
319319
$issueStatusApi = $this->getIssueStatusApi();
320320

321321
return $this->update($id, [
322-
'status_id' => $issueStatusApi->getIdByName($status),
322+
'status_id' => array_search($status, $issueStatusApi->listNames(), true),
323323
]);
324324
}
325325

@@ -348,42 +348,67 @@ private function cleanParams(array $params = [])
348348
if (isset($params['project'])) {
349349
$projectApi = $this->getProjectApi();
350350

351-
$params['project_id'] = $projectApi->getIdByName($params['project']);
351+
// TODO: project names are not unique; there could be collisions
352+
$params['project_id'] = array_search(
353+
$params['project'],
354+
$projectApi->listNames(),
355+
true,
356+
);
352357
unset($params['project']);
353358
}
354359

355360
if (isset($params['category']) && isset($params['project_id'])) {
356361
$issueCategoryApi = $this->getIssueCategoryApi();
357362

358-
$params['category_id'] = $issueCategoryApi->getIdByName($params['project_id'], $params['category']);
363+
$params['category_id'] = array_search(
364+
$params['category'],
365+
$issueCategoryApi->listNamesByProject($params['project_id']),
366+
true,
367+
);
359368
unset($params['category']);
360369
}
361370

362371
if (isset($params['status'])) {
363372
$issueStatusApi = $this->getIssueStatusApi();
364373

365-
$params['status_id'] = $issueStatusApi->getIdByName($params['status']);
374+
$params['status_id'] = array_search(
375+
$params['status'],
376+
$issueStatusApi->listNames(),
377+
true,
378+
);
366379
unset($params['status']);
367380
}
368381

369382
if (isset($params['tracker'])) {
370383
$trackerApi = $this->getTrackerApi();
371384

372-
$params['tracker_id'] = $trackerApi->getIdByName($params['tracker']);
385+
$params['tracker_id'] = array_search(
386+
$params['tracker'],
387+
$trackerApi->listNames(),
388+
true,
389+
);
373390
unset($params['tracker']);
374391
}
375392

376393
if (isset($params['assigned_to'])) {
377394
$userApi = $this->getUserApi();
378395

379-
$params['assigned_to_id'] = $userApi->getIdByUsername($params['assigned_to']);
396+
$params['assigned_to_id'] = array_search(
397+
$params['assigned_to'],
398+
$userApi->listLogins(),
399+
true,
400+
);
380401
unset($params['assigned_to']);
381402
}
382403

383404
if (isset($params['author'])) {
384405
$userApi = $this->getUserApi();
385406

386-
$params['author_id'] = $userApi->getIdByUsername($params['author']);
407+
$params['author_id'] = array_search(
408+
$params['author'],
409+
$userApi->listLogins(),
410+
true,
411+
);
387412
unset($params['author']);
388413
}
389414

src/Redmine/Api/IssueCategory.php

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -137,28 +137,26 @@ public function listing($project, $forceUpdate = false)
137137
{
138138
@trigger_error('`' . __METHOD__ . '()` is deprecated since v2.7.0, use `' . __CLASS__ . '::listNamesByProject()` instead.', E_USER_DEPRECATED);
139139

140-
if (true === $forceUpdate || empty($this->issueCategories)) {
141-
$this->issueCategories = $this->listByProject($project);
142-
}
143-
$ret = [];
144-
foreach ($this->issueCategories['issue_categories'] as $e) {
145-
$ret[$e['name']] = (int) $e['id'];
146-
}
147-
148-
return $ret;
140+
return $this->doListing($project, $forceUpdate);
149141
}
150142

151143
/**
152144
* Get a category id given its name and related project.
153145
*
146+
* @deprecated v2.7.0 Use listNamesByProject() instead.
147+
* @see IssueCategory::listNamesByProject()
148+
*
154149
* @param string|int $project project id or literal identifier
155150
* @param string $name
156151
*
157152
* @return int|false
158153
*/
159154
public function getIdByName($project, $name)
160155
{
161-
$arr = $this->listing($project);
156+
@trigger_error('`' . __METHOD__ . '()` is deprecated since v2.7.0, use `' . __CLASS__ . '::listNamesByProject()` instead.', E_USER_DEPRECATED);
157+
158+
$arr = $this->doListing($project, false);
159+
162160
if (!isset($arr[$name])) {
163161
return false;
164162
}
@@ -283,4 +281,19 @@ public function remove($id, array $params = [])
283281

284282
return $this->lastResponse->getContent();
285283
}
284+
285+
private function doListing($project, bool $forceUpdate)
286+
{
287+
if (true === $forceUpdate || empty($this->issueCategories)) {
288+
$this->issueCategories = $this->listByProject($project);
289+
}
290+
291+
$ret = [];
292+
293+
foreach ($this->issueCategories['issue_categories'] as $e) {
294+
$ret[$e['name']] = (int) $e['id'];
295+
}
296+
297+
return $ret;
298+
}
286299
}

src/Redmine/Api/IssueStatus.php

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -110,31 +110,44 @@ public function listing($forceUpdate = false)
110110
{
111111
@trigger_error('`' . __METHOD__ . '()` is deprecated since v2.7.0, use `' . __CLASS__ . '::listNames()` instead.', E_USER_DEPRECATED);
112112

113-
if (empty($this->issueStatuses) || $forceUpdate) {
114-
$this->issueStatuses = $this->list();
115-
}
116-
$ret = [];
117-
foreach ($this->issueStatuses['issue_statuses'] as $e) {
118-
$ret[$e['name']] = (int) $e['id'];
119-
}
120-
121-
return $ret;
113+
return $this->doListing($forceUpdate);
122114
}
123115

124116
/**
125117
* Get a status id given its name.
126118
*
119+
* @deprecated v2.7.0 Use listNames() instead.
120+
* @see IssueStatus::listNames()
121+
*
127122
* @param string $name
128123
*
129124
* @return int|false
130125
*/
131126
public function getIdByName($name)
132127
{
133-
$arr = $this->listing();
128+
@trigger_error('`' . __METHOD__ . '()` is deprecated since v2.7.0, use `' . __CLASS__ . '::listNames()` instead.', E_USER_DEPRECATED);
129+
130+
$arr = $this->doListing(false);
131+
134132
if (!isset($arr[$name])) {
135133
return false;
136134
}
137135

138136
return $arr[(string) $name];
139137
}
138+
139+
private function doListing(bool $forceUpdate)
140+
{
141+
if (empty($this->issueStatuses) || $forceUpdate) {
142+
$this->issueStatuses = $this->list();
143+
}
144+
145+
$ret = [];
146+
147+
foreach ($this->issueStatuses['issue_statuses'] as $e) {
148+
$ret[$e['name']] = (int) $e['id'];
149+
}
150+
151+
return $ret;
152+
}
140153
}

src/Redmine/Api/Project.php

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -132,28 +132,26 @@ public function listing($forceUpdate = false, $reverse = true, array $params = [
132132
{
133133
@trigger_error('`' . __METHOD__ . '()` is deprecated since v2.7.0, use `' . __CLASS__ . '::listNames()` instead.', E_USER_DEPRECATED);
134134

135-
if (true === $forceUpdate || empty($this->projects)) {
136-
$this->projects = $this->list($params);
137-
}
138-
$ret = [];
139-
foreach ($this->projects['projects'] as $e) {
140-
$ret[(int) $e['id']] = $e['name'];
141-
}
142-
143-
return $reverse ? array_flip($ret) : $ret;
135+
return $this->doListing($forceUpdate, $reverse, $params);
144136
}
145137

146138
/**
147139
* Get a project id given its name.
148140
*
141+
* @deprecated v2.7.0 Use listNames() instead.
142+
* @see Project::listNames()
143+
*
149144
* @param string $name
150145
* @param array $params to allow offset/limit (and more) to be passed
151146
*
152147
* @return int|bool
153148
*/
154149
public function getIdByName($name, array $params = [])
155150
{
156-
$arr = $this->listing(false, true, $params);
151+
@trigger_error('`' . __METHOD__ . '()` is deprecated since v2.7.0, use `' . __CLASS__ . '::listNames()` instead.', E_USER_DEPRECATED);
152+
153+
$arr = $this->doListing(false, true, $params);
154+
157155
if (!isset($arr[$name])) {
158156
return false;
159157
}
@@ -447,4 +445,19 @@ public function remove($id)
447445

448446
return $this->lastResponse->getContent();
449447
}
448+
449+
private function doListing(bool $forceUpdate, bool $reverse, array $params)
450+
{
451+
if (true === $forceUpdate || empty($this->projects)) {
452+
$this->projects = $this->list($params);
453+
}
454+
455+
$ret = [];
456+
457+
foreach ($this->projects['projects'] as $e) {
458+
$ret[(int) $e['id']] = $e['name'];
459+
}
460+
461+
return $reverse ? array_flip($ret) : $ret;
462+
}
450463
}

src/Redmine/Api/TimeEntryActivity.php

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -105,31 +105,44 @@ public function listing($forceUpdate = false)
105105
{
106106
@trigger_error('`' . __METHOD__ . '()` is deprecated since v2.7.0, use `' . __CLASS__ . '::listNames()` instead.', E_USER_DEPRECATED);
107107

108-
if (empty($this->timeEntryActivities) || $forceUpdate) {
109-
$this->timeEntryActivities = $this->list();
110-
}
111-
$ret = [];
112-
foreach ($this->timeEntryActivities['time_entry_activities'] as $e) {
113-
$ret[$e['name']] = (int) $e['id'];
114-
}
115-
116-
return $ret;
108+
return $this->doListing((bool) $forceUpdate);
117109
}
118110

119111
/**
120112
* Get a activities id given its name.
121113
*
114+
* @deprecated v2.7.0 Use listNames() instead.
115+
* @see Project::listNames()
116+
*
122117
* @param string $name
123118
*
124119
* @return int|false
125120
*/
126121
public function getIdByName($name)
127122
{
128-
$arr = $this->listing();
123+
@trigger_error('`' . __METHOD__ . '()` is deprecated since v2.7.0, use `' . __CLASS__ . '::listNames()` instead.', E_USER_DEPRECATED);
124+
125+
$arr = $this->doListing(false);
126+
129127
if (!isset($arr[$name])) {
130128
return false;
131129
}
132130

133131
return $arr[(string) $name];
134132
}
133+
134+
private function doListing(bool $forceUpdate)
135+
{
136+
if (empty($this->timeEntryActivities) || $forceUpdate) {
137+
$this->timeEntryActivities = $this->list();
138+
}
139+
140+
$ret = [];
141+
142+
foreach ($this->timeEntryActivities['time_entry_activities'] as $e) {
143+
$ret[$e['name']] = (int) $e['id'];
144+
}
145+
146+
return $ret;
147+
}
135148
}

0 commit comments

Comments
 (0)