Blackmine is a full-featured Redmine API client written in PHP8. It implements a simple interface and converts responses into models and collections.
composer require blackmine/blackmine
$options = new \Blackmine\Client\ClientOptions([
ClientOptions::CLIENT_OPTION_BASE_URL => "https://your.redmine.url",
ClientOptions::CLIENT_OPTION_API_KEY => "your.api.key"
]);
$client = new \Blackmine\Client\Client($options);
$issues = $client->getRepository("issues");
$data = $issues
->addFilter(Issues::ISSUE_FILTER_ISSUE_ID, [41432, 41436])
->with([Issues::ISSUE_RELATION_WATCHERS])
->search();
$issue = new \Blackmine\Model\Issue\Issue();
$issue->setSubject("Test Issue");
$issue->setDescription("An issue description, yeah, a real one...");
$issue->setStartDate(\Carbon\CarbonImmutable::create(2021, 10, 31));
$issue->setDueDate(\Carbon\CarbonImmutable::create(2022, 10, 31));
$issues->create($issue);Actually only JSON format is supported, yeah, JSON is cool and XML isn't. If you think XML is cool enough you can fork the project, start the feature/xml_is_cool branch and pull request your coolness.
Almost all exposed Redmine APIs are supported by Blackmine. There a few bugs that we are trying to fis as soon as possible.
Blackmine uses Requests as transport layer, in a near or not so near future, I will try to pivot to a PSR18 implementation. If you can't wait, you can fork the project, start the feature/psr18_or_death and pull request your hurry ups.
Blackmine uses Carbon to manage dates.
- Issues API
- Projects API
- Users API
- Time Entries API
- Issue Categories API
- Issue Statuses API
- Issue Relations API
- Trackers API
- Groups API
- Versions API
- Roles API
- Custom Fields API
- Memberships API
- Files API
- Enumerations API
- Attachments API
- Wiki Pages API (bugged)
- News API
- Caching responses (with Tag/TTL invalidation mechanism)
- Impersonating users (for admin users)
- Documentation
- Search fluent API (80%)
- Error handling and exceptions (0%)
- Model functionality (50%)
- Unit tests (0%)
- Magic methods signatures on models and repositories (50%)
- Date conversion from and to CarbonImmutable objects

