All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- New class
Redmine\Http\HttpFactory
to createRedmine\Http\Request
andRedmine\Http\Response
instances.
- Behaviour-driven tests are run against Redmine 5.1.4, 5.0.10 and 4.2.10.
Redmine\Client\Client::requestGet()
is deprecated, use\Redmine\Client\Client::request()
instead.Redmine\Client\Client::requestPost()
is deprecated, use\Redmine\Client\Client::request()
instead.Redmine\Client\Client::requestPut()
is deprecated, use\Redmine\Client\Client::request()
instead.Redmine\Client\Client::requestDelete()
is deprecated, use\Redmine\Client\Client::request()
instead.Redmine\Client\Client::getLastResponseStatusCode()
is deprecated, use\Redmine\Client\Client::request()
or\Redmine\Api\AbstractApi::getLastResponse()->getStatusCode()
instead.Redmine\Client\Client::getLastResponseContentType()
is deprecated, use\Redmine\Client\Client::request()
or\Redmine\Api\AbstractApi::getLastResponse()->getContentType()
instead.Redmine\Client\Client::getLastResponseBody()
is deprecated, use\Redmine\Client\Client::request()
or\Redmine\Api\AbstractApi::getLastResponse()->getContent()
instead.
v2.7.0 - 2024-07-10
- New method
Redmine\Api\CustomField::listNames()
for listing the ids and names of all custom fields. - New method
Redmine\Api\Group::listNames()
for listing the ids and names of all groups. - New method
Redmine\Api\IssueCategory::listNamesByProject()
for listing the ids and names of all issue categories of a project. - New method
Redmine\Api\IssueStatus::listNames()
for listing the ids and names of all issue statuses. - New method
Redmine\Api\Project::listNames()
for listing the ids and names of all projects. - New method
Redmine\Api\Role::listNames()
for listing the ids and names of all roles. - New method
Redmine\Api\TimeEntryActivity::listNames()
for listing the ids and names of all time entry activities. - New method
Redmine\Api\Tracker::listNames()
for listing the ids and names of all trackers. - New method
Redmine\Api\User::listLogins()
for listing the ids and logins of all users. - New method
Redmine\Api\Version::listNamesByProject()
for listing the ids and names of all versions of a project. - Support for Redmine 4.2.x was added.
- Behaviour-driven tests are run against Redmine 4.2.10, 5.0.9 and 5.1.3.
Redmine\Api\CustomField::listing()
is deprecated, use\Redmine\Api\CustomField::listNames()
instead.Redmine\Api\CustomField::getIdByName()
is deprecated, use\Redmine\Api\CustomField::listNames()
instead.Redmine\Api\Group::listing()
is deprecated, use\Redmine\Api\Group::listNames()
instead.Redmine\Api\IssueCategory::listing()
is deprecated, use\Redmine\Api\IssueCategory::listNamesByProject()
instead.Redmine\Api\IssueCategory::getIdByName()
is deprecated, use\Redmine\Api\IssueCategory::listNamesByProject()
instead.Redmine\Api\IssueStatus::listing()
is deprecated, use\Redmine\Api\IssueStatus::listNames()
instead.Redmine\Api\IssueStatus::getIdByName()
is deprecated, use\Redmine\Api\IssueStatus::listNames()
instead.Redmine\Api\Project::listing()
is deprecated, use\Redmine\Api\Project::listNames()
instead.Redmine\Api\Project::getIdByName()
is deprecated, use\Redmine\Api\Project::listNames()
instead.Redmine\Api\Role::listing()
is deprecated, use\Redmine\Api\Role::listNames()
instead.Redmine\Api\TimeEntryActivity::listing()
is deprecated, use\Redmine\Api\TimeEntryActivity::listNames()
instead.Redmine\Api\TimeEntryActivity::getIdByName()
is deprecated, use\Redmine\Api\TimeEntryActivity::listNames()
instead.Redmine\Api\Tracker::listing()
is deprecated, use\Redmine\Api\Tracker::listNames()
instead.Redmine\Api\Tracker::getIdByName()
is deprecated, use\Redmine\Api\Tracker::listNames()
instead.Redmine\Api\User::listing()
is deprecated, use\Redmine\Api\User::listLogins()
instead.Redmine\Api\User::getIdByUsername()
is deprecated, use\Redmine\Api\User::listLogins()
instead.Redmine\Api\Version::listing()
is deprecated, use\Redmine\Api\Version::listNamesByProject()
instead.Redmine\Api\Version::getIdByName()
is deprecated, use\Redmine\Api\Version::listNamesByProject()
instead.
- Tests and development files were removed from releases.
v2.6.0 - 2024-03-25
- New method
Redmine\Api\Attachment::update()
for updating attachments. - New interface
Redmine\Http\HttpClient
for new minimalistic HTTP clients. - New interface
Redmine\Http\Request
for sending data with new minimalistic HTTP clients. - New method
Redmine\Api\...::getLastResponse()
to get the last response made by the API class. - Add support for custom arrays in
Redmine\Serializer\XmlSerializer
.
- Calling
Redmine\Api\IssueRelation::create()
without the mandatory parameterissue_to_id
throws aRedmine\Exception\MissingParameterException
instead of returning a error array
- Parameter types for IDs were fixed in API for attachments, groups, issues, project, users and versions.
- Return types were fixed in API for attachments, groups, time entries, issues, project, users, versions and wiki.
- Wiki pages with special characters are now handled correctly.
Redmine\Api\Attachment::download()
returns false on error instead of the HTML error page.
Redmine\Api\AbstractApi::get()
is deprecated, use\Redmine\Http\HttpClient::request()
instead.Redmine\Api\AbstractApi::post()
is deprecated, use\Redmine\Http\HttpClient::request()
instead.Redmine\Api\AbstractApi::put()
is deprecated, use\Redmine\Http\HttpClient::request()
instead.Redmine\Api\AbstractApi::delete()
is deprecated, use\Redmine\Http\HttpClient::request()
instead.- The constant
Redmine\Api\Issue::PRIO_LOW
is deprecated. - The constant
Redmine\Api\Issue::PRIO_NORMAL
is deprecated. - The constant
Redmine\Api\Issue::PRIO_HIGH
is deprecated. - The constant
Redmine\Api\Issue::PRIO_URGENT
is deprecated. - The constant
Redmine\Api\Issue::PRIO_IMMEDIATE
is deprecated.
v2.5.0 - 2024-02-05
- Added support for updating groups with method
Redmine\Api\Group::update()
. - New method
Redmine\Api\Project::close()
to close a project. - New method
Redmine\Api\Project::reopen()
to reopen a project. - New method
Redmine\Api\Project::archive()
to archive a project. - New method
Redmine\Api\Project::unarchive()
to unarchive a project. - New interface
Redmine\Http\Response
as a data object for Redmine server responses. - New method
UnexpectedResponseException::getResponse()
to get the last response responsible for the exception.
- The last response is saved in
Redmine\Api\AbstractApi
to prevent race conditions withRedmine\Client\Client
implementations.
v2.4.0 - 2024-01-04
- Added support for PHP 8.3
- New method
Redmine\Api\CustomField::list()
to list custom fields. - New method
Redmine\Api\Group::list()
to list groups. - New method
Redmine\Api\Issue::list()
to list issues. - New method
Redmine\Api\IssueCategory::listByProject()
to list issue categories from a project. - New method
Redmine\Api\IssuePriority::list()
to list issue priorities. - New method
Redmine\Api\IssueRelation::listByIssueId()
to list relations from an issue. - New method
Redmine\Api\IssueStatus::list()
to list issue statuses. - New method
Redmine\Api\Membership::listByProject()
to list memberships from a project. - New method
Redmine\Api\News::list()
to list news from all project. - New method
Redmine\Api\News::listByProject()
to list news from a project. - New method
Redmine\Api\Project::list()
to list projects. - New method
Redmine\Api\Query::list()
to list queries. - New method
Redmine\Api\Role::list()
to list roles. - New method
Redmine\Api\Search::listByQuery()
to list search results by query. - New method
Redmine\Api\TimeEntry::list()
to list time entries. - New method
Redmine\Api\TimeEntryActivity::list()
to list time entry activities. - New method
Redmine\Api\Tracker::list()
to list trackers. - New method
Redmine\Api\User::list()
to list users. - New method
Redmine\Api\Version::listByProject()
to list versions from a project. - New method
Redmine\Api\Wiki::listByProject()
to list wiki pages from a project. - New exception
Redmine\Exception\UnexpectedResponseException
if the Redmine server responded with an unexpected body.
- Restore BC in possible return types in
Redmine\Api\...::all()
methods
Redmine\Api\CustomField::all()
is deprecated, useRedmine\Api\CustomField::list()
insteadRedmine\Api\Group::all()
is deprecated, useRedmine\Api\Group::list()
insteadRedmine\Api\Issue::all()
is deprecated, useRedmine\Api\Issue::list()
insteadRedmine\Api\IssueCategory::all()
is deprecated, useRedmine\Api\IssueCategory::listByProject()
insteadRedmine\Api\IssuePriority::all()
is deprecated, useRedmine\Api\IssuePriority::list()
insteadRedmine\Api\IssueRelation::all()
is deprecated, useRedmine\Api\IssueRelation::listByIssueId()
insteadRedmine\Api\IssueStatus::all()
is deprecated, useRedmine\Api\IssueStatus::list()
insteadRedmine\Api\Membership::all()
is deprecated, useRedmine\Api\Membership::listByProject()
insteadRedmine\Api\News::all()
is deprecated, useRedmine\Api\News::list()
orRedmine\Api\News::listByProject()
insteadRedmine\Api\Project::all()
is deprecated, useRedmine\Api\Project::list()
insteadRedmine\Api\Query::all()
is deprecated, useRedmine\Api\Query::list()
insteadRedmine\Api\Role::all()
is deprecated, useRedmine\Api\Role::list()
insteadRedmine\Api\Search::search()
is deprecated, useRedmine\Api\Search::listByQuery()
insteadRedmine\Api\TimeEntry::all()
is deprecated, useRedmine\Api\TimeEntry::list()
insteadRedmine\Api\TimeEntryActivity::all()
is deprecated, useRedmine\Api\TimeEntryActivity::list()
insteadRedmine\Api\Tracker::all()
is deprecated, useRedmine\Api\Tracker::list()
insteadRedmine\Api\User::all()
is deprecated, useRedmine\Api\User::list()
insteadRedmine\Api\Version::all()
is deprecated, useRedmine\Api\Version::listByProject()
insteadRedmine\Api\Wiki::all()
is deprecated, useRedmine\Api\Wiki::listByProject()
instead
v2.3.0 - 2023-10-09
- New class
Redmine\Serializer\PathSerializer
to build an URL path with query parameters. - New class
Redmine\Serializer\JsonSerializer
to encode or normalize JSON data. - New class
Redmine\Serializer\XmlSerializer
to encode or normalize XML data. - Allow
Psr\Http\Message\RequestFactoryInterface
as Argument #2 ($requestFactory) inRedmine\Client\Psr18Client::__construct()
- Added support for PHP 8.2
- Providing Argument #2 ($requestFactory) in
Redmine\Client\Psr18Client::__construct()
as typePsr\Http\Message\ServerRequestFactoryInterface
is deprecated, provide as typePsr\Http\Message\RequestFactoryInterface
instead Redmine\Api\AbstractApi::attachCustomFieldXML()
is deprecated, useRedmine\Serializer\XmlSerializer::createFromArray()
insteadRedmine\Api\Project::prepareParamsXml()
is deprecated, useRedmine\Serializer\XmlSerializer::createFromArray()
instead
v2.2.0 - 2022-03-01
- New method
Redmine\Client\AbstractApi::retrieveData()
to retrieve as many elements as you want as array (even if the total number of elements is greater than 100). - New exception
Redmine\Client\SerializerException
for JSON/XML serializer related exceptions
- Allow unassign user from an issue
Redmine\Api\AbstractApi::retrieveAll()
is deprecated, useRedmine\Api\AbstractApi::retrieveData()
instead
v2.1.1 - 2022-01-15
- Special characters in comments when updating time entries will be escaped
v2.1.0 - 2022-01-04
- Added support for PHP 8.1
- New interface
Redmine\Exception
that is implemented by every library-related exception - New exception
Redmine\Exception\ClientException
for client related exceptions - New exception
Redmine\Exception\InvalidApiNameException
if an invalid API instance is requested - New exception
Redmine\Exception\InvalidParameterException
for invalid parameter provided to an API instance - New exception
Redmine\Exception\MissingParameterException
for missing parameter while using an API instance
- Switched from Travis-CI to Github Actions
- Avoid warning if path of uploaded file is longer than the maximum allowed path length
Redmine\Api\AbstractApi::lastCallFailed()
is deprecated, useRedmine\Client\Client::getLastResponseStatusCode()
instead- Uploading an attachment using
Redmine\Api\Attachment::upload()
with filepath is deprectead, usefile_get_contents()
to upload the file content instead
v2.0.1 - 2021-09-22
- Fixed the handling of a response if the content type header is missing
v2.0.0 - 2021-06-08
- BREAKING: Deprecated client
Redmine\Client
was removed, useRedmine\Client\NativeCurlClient
orRedmine\Client\Psr18Client
instead - BREAKING:
src/autoload.php
was removed, use thevendor/autoload.php
from Composer instead
v1.8.1 - 2021-06-01
AbstractApi::get()
returnsnull
on empty response body instead offalse
for BC reasons- Use uppercase in HTTP verbs
v1.8.0 - 2021-04-19
- New native cURL client
Redmine\Client\NativeCurlClient
as a replacement forRedmine\Client
- This
CHANGELOG.md
file
- Better type checking thanks to typed properties
- Move
example.php
into newdocs
folder
- Drop support for PHP 7.3
Redmine\Client::getCheckSslHost()
always returns as boolean
Redmine\Client
is deprecated, useRedmine\Client\NativeCurlClient
orRedmine\Client\Psr18Client
instead- Magic getter in
Redmine\Client
is deprecated, useRedmine\Client::getApi()
instead Redmine\Client::api()
is deprecated, useRedmine\Client::getApi()
insteadRedmine\Client::get()
is deprecated, useRedmine\Client::requestGet()
insteadRedmine\Client::post()
is deprecated, useRedmine\Client::requestPost()
insteadRedmine\Client::put()
is deprecated, useRedmine\Client::requestPut()
insteadRedmine\Client::delete()
is deprecated, useRedmine\Client::requestDelete()
insteadRedmine\Client::setCheckSslCertificate()
is deprecated, useRedmine\Client::setCurlOption()
insteadRedmine\Client::setCheckSslHost()
is deprecated, useRedmine\Client::setCurlOption()
insteadRedmine\Client::setSslVersion()
is deprecated, useRedmine\Client::setCurlOption()
insteadRedmine\Client::setUseHttpAuth()
is deprecated, useRedmine\Client::setCurlOption()
insteadRedmine\Client::setPort()
is deprecated, useRedmine\Client::setCurlOption()
insteadRedmine\Client::getResponseCode()
is deprecated, useRedmine\Client::getLastResponseStatusCode()
insteadRedmine\Client::setImpersonateUser()
is deprecated, useRedmine\Client::startImpersonateUser()
andRedmine\Client::stopImpersonateUser()
insteadRedmine\Client::setCustomHost()
is deprecated, useRedmine\Client::setCurlOption()
insteadRedmine\Client::getUrl()
is deprecated, you should stop using itRedmine\Client::decode()
is deprecated, you should stop using itRedmine\Client::getCheckSslCertificate()
is deprecated, you should stop using itRedmine\Client::getCheckSslHost()
is deprecated, you should stop using itRedmine\Client::getSslVersion()
is deprecated, you should stop using itRedmine\Client::getUseHttpAuth()
is deprecated, you should stop using itRedmine\Client::getPort()
is deprecated, you should stop using itRedmine\Client::getImpersonateUser()
is deprecated, you should stop using itRedmine\Client::getCustomHost()
is deprecated, you should stop using itRedmine\Client::getCurlOptions()
is deprecated, you should stop using itRedmine\Client::prepareRequest()
is deprecated, you should stop using itRedmine\Client::processCurlResponse()
is deprecated, you should stop using itRedmine\Client::runRequest()
is deprecated, you should stop using it
v1.7.0 - 2021-03-22
- New interface
Redmine\Client\Client
for all clients - New PSR-18 based client
Redmine\Client\Psr18Client
for usage with e.g.Guzzle
- New method
Redmine\Client::getApi()
for returning an API instance,Redmine\Client::api()
and magic getterRedmine\Client->issue
will be deprecated in future. - New method
Redmine\Client::startImpersonateUser()
to set an impersonated user,Redmine\Client::setImpersonateUser()
will be deprecated in future. - New method
Redmine\Client::stopImpersonateUser()
to stop impersonating an user. - New method
Redmine\Client::requestGet()
to create and send a GET request,Redmine\Client::get()
will be deprecated in future. - New method
Redmine\Client::requestPost()
to create and send a POST request,Redmine\Client::post()
will be deprecated in future. - New method
Redmine\Client::requestPut()
to create and send a PUT request,Redmine\Client::put()
will be deprecated in future. - New method
Redmine\Client::requestDelete()
to create and send a DELETE request,Redmine\Client::delete()
will be deprecated in future. - New method
Redmine\Client::getLastResponseStatusCode()
returns status code of the last response,Redmine\Client::getResponseCode()
will be deprecated in future. - New method
Redmine\Client::getLastResponseContentType()
returns the content type of the last response. - New method
Redmine\Client::getLastResponseBody()
returns the raw body of the last response.
- Move JSON and XML decoding directly into
Redmine\Api\AbstractApi
instead of the client.
- escape special chars in title, description, etc in wiki, issue, project and time_entry api.
v1.6.0 - 2021-01-02
- Added support for PHP 8.0
- New method
Redmine\Api\Attachment::remove()
to delete an attachment - New method
Redmine\Api\TimeEntryActivity::listing()
to list time entry activities - New method
Redmine\Api\TimeEntryActivity::getIdByName()
to get a time entry activity id by its name
- Removed support for PHP 5.6, 7.0, 7.1 and 7.2
v1.5.22 - 2020-08-07
- Added support for filename parameter to attachment upload
- Added file upload with wiki
- Fixed a warning on file upload
- Fixed a lot of warnings related to
custom_field
- Fixed custom field file type