* @param string $string
* E.g. "view all contacts". Syntax: "[prefix:]name".
* @param string|null $defaultPrefix
+ * @param string $validPrefixPattern
+ * A regular expression used to determine if a prefix is valid.
+ * To wit: Prefixes MUST be strictly alphanumeric.
*
* @return array
* (0 => string|NULL $prefix, 1 => string $value)
*/
- public static function parsePrefix($delim, $string, $defaultPrefix = NULL) {
+ public static function parsePrefix($delim, $string, $defaultPrefix = NULL, $validPrefixPattern = '/^[A-Za-z0-9]+$/') {
$pos = strpos($string, $delim);
if ($pos === FALSE) {
return [$defaultPrefix, $string];
}
- else {
- return [substr($string, 0, $pos), substr($string, 1 + $pos)];
- }
+
+ $lhs = substr($string, 0, $pos);
+ $rhs = substr($string, 1 + $pos);
+ return preg_match($validPrefixPattern, $lhs) ? [$lhs, $rhs] : [$defaultPrefix, $string];
}
/**
$cases = [];
$cases[] = ['administer CiviCRM', 'administer CiviCRM'];
+ $cases[] = ['create contributions of type Event Fee: Canada', 'create contributions of type Event Fee: Canada'];
$cases[] = ['cms:universal name', 'local name'];
$cases[] = ['cms:universal name2', 'local name2'];
$cases[] = ['cms:unknown universal name', CRM_Core_Permission::ALWAYS_DENY_PERMISSION];
public function parsePrefixData(): array {
$cases = [];
$cases[] = ['administer CiviCRM', NULL, [NULL, 'administer CiviCRM']];
+ $cases[] = ['create contributions of type Event Fee: Canada', NULL, [NULL, 'create contributions of type Event Fee: Canada']];
$cases[] = ['administer CiviCRM', 'com_civicrm', ['com_civicrm', 'administer CiviCRM']];
$cases[] = ['Drupal:access user profiles', NULL, ['Drupal', 'access user profiles']];
$cases[] = ['Joomla:component:perm', NULL, ['Joomla', 'component:perm']];