}
/**
- * Get all tokens.
+ * List out the fields that are exposed.
*
- * This function will be removed once the parent class can determine it.
+ * For historical reasons these are the only exposed fields.
+ *
+ * It is also possible to list 'skippedFields'
+ *
+ * @return string[]
*/
- public function getAllTokens(): array {
- return array_merge(
- [
- 'fee' => ts('Membership Fee'),
- 'id' => ts('Membership ID'),
- 'join_date' => ts('Member Since'),
- 'start_date' => ts('Membership Start Date'),
- 'end_date' => ts('Membership Expiration Date'),
- 'status_id:label' => ts('Status'),
- 'membership_type_id:label' => ts('Membership Type'),
- ],
- CRM_Utils_Token::getCustomFieldTokens('Membership')
- );
+ protected function getExposedFields(): array {
+ return [
+ 'id',
+ 'join_date',
+ 'start_date',
+ 'end_date',
+ 'status_id',
+ 'membership_type_id',
+ 'source',
+ 'status_override_end_date',
+ ];
}
/**
}
}
+ /**
+ * Get any overrides for token metadata.
+ *
+ * This is most obviously used for setting the audience, which
+ * will affect widget-presence.
+ *
+ * Changing the audience is done in order to simplify the
+ * UI for more general users.
+ *
+ * @return \string[][]
+ */
+ protected function getTokenMetadataOverrides(): array {
+ return [
+ 'owner_membership_id' => ['audience' => 'sysadmin'],
+ 'max_related' => ['audience' => 'sysadmin'],
+ 'contribution_recur_id' => ['audience' => 'sysadmin'],
+ 'is_override' => ['audience' => 'sysadmin'],
+ 'is_test' => ['audience' => 'sysadmin'],
+ // Pay later is considered to be unreliable in the schema
+ // and will eventually be removed.
+ 'is_pay_later' => ['audience' => 'deprecated'],
+ ];
+ }
+
/**
* Get fields which need to be returned to render another token.
*
return ['fee' => 'membership_type_id'];
}
+ /**
+ * Get any tokens with custom calculation.
+ *
+ * In this case 'fee' should be converted to{membership.membership_type_id.fee}
+ * but we don't have the formatting support to do that with no
+ * custom intervention yet.
+ */
+ protected function getBespokeTokens(): array {
+ return [
+ 'fee' => [
+ 'title' => ts('Membership Fee'),
+ 'name' => 'fee',
+ 'type' => 'calculated',
+ 'options' => NULL,
+ 'data_type' => 'integer',
+ 'audience' => 'user',
+ ],
+ ];
+ }
+
}