GetFields
class GetFields extends BasicGetFieldsAction
Get information about CiviCRM settings.
Traits
Properties
protected int | $version | Api version number; cannot be changed. | from AbstractAction |
protected array | $chain | Additional api requests - will be called once per result. | from AbstractAction |
protected bool | $checkPermissions | Whether to enforce acl permissions based on the current user. | from AbstractAction |
protected string | $_entityName | from AbstractAction | |
protected string | $_actionName | from AbstractAction | |
protected array | $where | Criteria for selecting items. | from AbstractQueryAction |
protected array | $orderBy | Array of field(s) to use in ordering the results | from AbstractQueryAction |
protected int | $limit | Maximum number of results to return. | from AbstractQueryAction |
protected int | $offset | Zero-based index of first result to return. | from AbstractQueryAction |
protected array | $select | Fields to return. Defaults to all fields. | from AbstractGetAction |
protected bool | $loadOptions | Fetch option lists for fields? | from BasicGetFieldsAction |
protected string | $action | from BasicGetFieldsAction | |
protected int | $domainId | Domain id of settings. Leave NULL for default domain. |
Methods
Basic Get constructor.
Magic function to provide addFoo, getFoo and setFoo for params.
Get documentation for one or all params
Validates required fields for actions which create a new object.
This function is used internally for evaluating field annotations.
No description
Adds one or more AND/OR/NOT clause groups
A human-readable where clause, for the reading enjoyment of you humans.
Helper to parse the WHERE param for getRecords to perform simple pre-filtering.
Helper to see if a field should be selected by the getRecords function.
Walk through the where clause and check if a field is in use.
This Basic Get class is a general-purpose api for non-DAO-based entities.
Ensure every result contains, at minimum, the array keys as defined in $this->fields.
No description
Details
in BasicGetAction at line 64
__construct(string $entityName, string $actionName, callable $getter = NULL)
Basic Get constructor.
in AbstractAction at line 149
__set($name, $value)
Strictly enforce api parameters
in AbstractAction at line 158
$this
setVersion(int $val)
in AbstractAction at line 174
$this
addChain(string $name, AbstractAction $apiRequest, string|int $index = NULL)
in AbstractAction at line 187
AbstractAction|mixed
__call($name, $arguments)
Magic function to provide addFoo, getFoo and setFoo for params.
in AbstractAction at line 231
Result
execute()
Invoke api call.
At this point all the params have been sent in and we initiate the api call & return the result. This is basically the outer wrapper for api v4.
in BasicGetFieldsAction at line 78
_run(Result $result)
To implement getFields for your own entity:
- From your entity class add a static getFields method.
- That method should construct and return this class.
- The 3rd argument passed to this constructor should be a function that returns an array of fields for your entity's CRUD actions.
- For non-crud actions that need a different set of fields, you can override the list from step 3 on a per-action basis by defining a fields() method in that action. See for example BasicGetFieldsAction::fields() or GetActions::fields().
in AbstractAction at line 247
array
getParams()
Serialize this object's params into an array
in AbstractAction at line 265
array
getParamInfo(string $param = NULL)
Get documentation for one or all params
in AbstractAction at line 282
string
getEntityName()
in AbstractAction at line 290
string
getActionName()
in AbstractAction at line 298
bool
paramExists(string $param)
in AbstractAction at line 305
protected array
getParamDefaults()
in AbstractAction at line 312
offsetExists($offset)
in AbstractAction at line 319
offsetGet($offset)
in AbstractAction at line 344
offsetSet($offset, $value)
in AbstractAction at line 359
offsetUnset($offset)
in AbstractAction at line 373
bool
isAuthorized()
Is this api call permitted?
This function is called if checkPermissions is set to true.
in AbstractAction at line 381
array
getPermissions()
in AbstractAction at line 410
array
entityFields()
Returns schema fields for this entity & action.
Here we bypass the api wrapper and execute the getFields action directly. This is because we DON'T want the wrapper to check permissions as this is an internal op, but we DO want permissions to be checked inside the getFields request so e.g. the api_key field can be conditionally included.
in AbstractAction at line 429
ReflectionClass
reflect()
in AbstractAction at line 443
protected array
checkRequiredFields($values)
Validates required fields for actions which create a new object.
in AbstractAction at line 473
protected bool
evaluateCondition(string $expr, array $vars)
This function is used internally for evaluating field annotations.
It should never be passed raw user input.
in AbstractAction at line 50
bool
getCheckPermissions()
in AbstractAction at line 50
array
getChain()
in AbstractQueryAction at line 104
$this
addWhere(string $field, string $op, mixed $value = NULL)
in AbstractQueryAction at line 122
$this
addClause(string $operator, mixed $condition1)
Adds one or more AND/OR/NOT clause groups
in AbstractQueryAction at line 135
$this
addOrderBy(string $field, string $direction = 'ASC')
in AbstractQueryAction at line 147
protected string
whereClauseToString(array $whereClause = NULL, string $op = 'AND')
A human-readable where clause, for the reading enjoyment of you humans.
in AbstractQueryAction at line 54
array
getWhere()
in AbstractQueryAction at line 54
array
getOrderBy()
in AbstractQueryAction at line 54
int
getLimit()
in AbstractQueryAction at line 54
int
getOffset()
in AbstractGetAction at line 65
$this
selectRowCount()
Only return the number of found items.
in AbstractGetAction at line 78
protected
setDefaultWhereClause()
Adds field defaults to the where clause.
Note: it will skip adding field defaults when fetching records by id, or if that field has already been added to the where clause.
in AbstractGetAction at line 102
protected array|null
_itemsToGet(string $field)
Helper to parse the WHERE param for getRecords to perform simple pre-filtering.
This is intended to optimize some common use-cases e.g. calling the api to get one or more records by name or id.
Ex: If getRecords fetches a long list of items each with a unique name, but the user has specified a single record to retrieve, you can optimize the call by checking $this->_itemsToGet('name') and only fetching the item(s) with that name.
in AbstractGetAction at line 123
protected bool
_isFieldSelected(string $field)
Helper to see if a field should be selected by the getRecords function.
Checks the SELECT, WHERE and ORDER BY params to see what fields are needed.
Note that if no SELECT clause has been set then all fields should be selected and this function will always return TRUE.
in AbstractGetAction at line 137
protected bool
_whereContains(string $field, array $clauses = NULL)
Walk through the where clause and check if a field is in use.
in AbstractGetAction at line 49
array
getSelect()
in ArrayQueryActionTrait at line 55
protected array
queryArray(array $values)
in ArrayQueryActionTrait at line 67
protected array
filterArray(array $values)
in ArrayQueryActionTrait at line 186
protected array
sortArray($values)
in ArrayQueryActionTrait at line 213
protected array
selectArray($values)
in ArrayQueryActionTrait at line 229
protected array
limitArray($values)
at line 54
protected array
getRecords()
This Basic Get class is a general-purpose api for non-DAO-based entities.
Useful for fetching records from files or other places. You can specify any php function to retrieve the records, and this class will automatically filter, sort, select & limit the raw data from your callback.
You can implement this action in one of two ways: 1. Use this class directly by passing a callable ($getter) to the constructor. 2. Extend this class and override this function.
Either way, this function should return an array of arrays, each representing one retrieved object.
The simplest thing for your getter function to do is return every full record and allow this class to automatically do the sorting and filtering.
Sometimes however that may not be practical for performance reasons. To optimize your getter, it can use the following helpers from $this:
Use this->_itemsToGet() to match records to field values in the WHERE clause. Note the WHERE clause can potentially be very complex and it is not recommended to parse $this->where yourself.
Use $this->_isFieldSelected() to check if a field value is called for - useful if loading the field involves expensive calculations.
Be careful not to make assumptions, e.g. if LIMIT 100 is specified and your getter "helpfully" truncates the list at 100 without accounting for WHERE, ORDER BY and LIMIT clauses, the final filtered result may be very incorrect.
in BasicGetFieldsAction at line 104
protected
padResults(array $values)
Ensure every result contains, at minimum, the array keys as defined in $this->fields.
Attempt to set some sensible defaults for some fields.
In most cases it's not necessary to override this function, even if your entity is really weird. Instead just override $this->fields and thes function will respect that.