9
I Use This!
Inactive

Commits : Listings

Analyzed 4 days ago. based on code collected 4 days ago.
Jun 01, 2023 — Jun 01, 2024
Commit Message Contributor Files Modified Lines Added Lines Removed Code Location Date
* [Records/API/Upserts] Upserts are now supported in the abstract records API. An "upsert" is a single operation that updates an existing record when a match is found, or creates a new record when a match isn't found. Upserts are performed with a request like `PATCH /records/<record-type>/upsert.json`. The body has the same format as a `PUT` update using an array of `fields[key]=value`. Upserts require a `query` parameter with a quick search query that must match exactly 0 (insert) or 1 (update) rows. For instance, you could upsert an organization with the query `name:"Apple, Inc."`, and if an organization is found it is updated, and otherwise a new organization is created. To perform an upsert, a worker must have permission to create and modify records of the given type. They also must have access to update a matched record. Upserts are particularly useful when synchronizing records into Cerb from a third-party source. For instance, when issues are updated in a bug tracker (like GitHub Issues or JIRA), a webhook could prompt Cerb to pull those changes into a custom record. The upsert query could match on the external ID to determine if a record was previously synchronized or not. More... over 6 years ago
* [Records/API] Added a new `/records` endpoint to the API for performing abstract operations on all record types (e.g. create, retrieve, update, delete, search). The record type is specified in the path like `/records/tickets/`, and aliases are supported in addition to full context IDs. Custom records are supported. All fields are supported. All of the same validation logic from the UI is enforced in the abstract API (roles, record ownership, etc). This drastically simplifies working with the API. Previously, each record had to be specifically implemented as an API endpoint, with a limited number of fields, and code that used the API had to hardcode all of those paths. More... over 6 years ago
* [Workers/Cards] In the worker record editor, the delete option now uses a two-step confirmation. After deletion, the underlying card popup is automatically closed. More... over 6 years ago
* [Records/API/Validation] In records, all of the validation logic for creating and updating records has been consolidated for reuse between the web UI, API, packages, and bots. This makes it much simpler to do abstract record operations. More... over 6 years ago
[Code Cleanup] More... over 6 years ago
* [API] Fixed an issue with authorizing API request signatures. If a query argument was formatted like `&field` without a trailing `=` then the request signature would fail to validate. More... over 6 years ago
[Records] Refactored `getOwnerTree()` to use full context IDs rather than aliases since these are easier to deal with abstractly. More... over 6 years ago
* [Records/Validation] Added a `context()` validator to records. This ensures the context field is valid record type. It also accepts aliases like `ticket` rather than full IDs. More... over 6 years ago
* [Records/Validation] Added an `extension()` validator to records. This ensures the extension field is valid for the given extension point. More... over 6 years ago
* [Records/Validation] Added a `timezone()` validator to records. This ensures the timezone field is formatted like `America/Los_Angeles`. More... over 6 years ago
* [Records/Validation] Added a `language()` validator to records. This ensures the language is formatted like `en_US`. More... over 6 years ago
[Platform] The `DevblocksPlatform::strParseQueryString()` method now accepts an optional `$decode` argument for determining whether or not to urldecode() the contents. It defaults to `true`. More... over 6 years ago
* [Worklists/Mail/Templates] The email templates worklist doesn't show the `(+)` create option to non-admins. More... over 6 years ago
* [Worklists/Webhooks] The webhooks worklist doesn't show the `(+)` create option to non-admins. More... over 6 years ago
[Code Cleanup/Contexts] The abstract `CerberusContexts::isWriteableByDelegateOwner()` helper can now polymorph the `$actor` argument into a dictionary when needed. More... over 6 years ago
[Code Cleanup] Fixed abstract `CerberusContexts::isDeleteableByActor()`. More... over 6 years ago
[Code Cleanup/Contexts] The `CerberusContexts::isActorAnAdmin($actor)` helper can now automatically polymorph `$actor` into a dictionary if it isn't yet. More... over 6 years ago
[Code Cleanup] Removed an extraneous tag in the delete confirmation in card editors. More... over 6 years ago
[Bots/Behaviors/Roles] Fixed the security model for bot behaviors. While bots are not editable by non-admins, they can be owned by non-admins, and behaviors depend on ownership rather than delegated permissions on the bot. More... over 6 years ago
[Records/API] In context manifests, changed the 'create' option to 'records' for enabling the abstract records API. More... over 6 years ago
[Setup] Removed the Setup->Configuration->Custom Records menu until it's properly implemented. More... over 6 years ago
[Custom Fields/Validation] When validating a custom field change, the possible values of `type` are now returned when invalid. More... over 6 years ago
* [API/Webhooks] In the API, webhook records now display the `extension_params` key. More... over 6 years ago
* [API/Attachment] In the API, it's now possible to set a `content` key on attachment records during creation or modification. This accepts either a text value (the default), or a base64-encoded binary file in `data:mime/type;base64,` URI format. More... over 6 years ago
* [GPG Keys] Fixed an issue with GPG Public Key records. If the fingerprint in the database was somehow blank, the card for the key showed the subkeys of all other keys. More... over 6 years ago
* [Knowledgebase/API/Snippets] Placeholder dictionaries for knowledgebase categories can now expand the `parent_` placeholder. More... over 6 years ago
* [Time Tracking/Cards] Fixed an issue with time tracking cards. Administrators weren't able to edit time entries for other workers. More... over 6 years ago
* [Records/Validation] Fixed an issue in the validation service where custom record link fields always failed. These now properly validate using the record type configured on the field. More... over 6 years ago
* [Records/Validation] Fixed an issue with the validation service in Devblocks when a field key begins with `custom_` and isn't a custom field. More... over 6 years ago
[Records/API] Implemented `isCreateableByActor()` for all contexts. This defines the conditions required for an actor to create a new record, since `isWriteableByActor()` can only handle existing records, and the 'create' per-record privileges in roles don't contain logic. More... over 6 years ago