Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ayduns
dataprocessor
Commits
3f7c252b
Commit
3f7c252b
authored
Apr 29, 2020
by
jaapjansma
Browse files
Added Event Filter
parent
2d6a572b
Changes
4
Hide whitespace changes
Inline
Side-by-side
CHANGELOG.md
View file @
3f7c252b
# Version 1.7.0 (not yet released)
*
Changed Age field so aggeragation is working correctly.
*
Changed Field Specification to allow more advanced mysql functions
*
Changed Field Specification to allow more advanced mysql functions.
*
Added Event Filter
# Version 1.6.0
...
...
Civi/DataProcessor/Factory.php
View file @
3f7c252b
...
...
@@ -140,6 +140,7 @@ class Factory {
$this
->
addFilter
(
'date_filter'
,
new
Definition
(
'Civi\DataProcessor\FilterHandler\DateFilter'
),
E
::
ts
(
'Date filter'
));
$this
->
addFilter
(
'multiple_field_filter'
,
new
Definition
(
'Civi\DataProcessor\FilterHandler\MultipleFieldFilter'
),
E
::
ts
(
'Text in multiple fields Filter'
));
$this
->
addFilter
(
'activity_filter'
,
new
Definition
(
'Civi\DataProcessor\FilterHandler\ActivityFilter'
),
E
::
ts
(
'Activity filter'
));
$this
->
addFilter
(
'event_filter'
,
new
Definition
(
'Civi\DataProcessor\FilterHandler\EventFilter'
),
E
::
ts
(
'Event filter'
));
$this
->
addFilter
(
'contact_filter'
,
new
Definition
(
'Civi\DataProcessor\FilterHandler\ContactFilter'
),
E
::
ts
(
'Contact filter'
));
$this
->
addFilter
(
'contact_in_group_filter'
,
new
Definition
(
'Civi\DataProcessor\FilterHandler\ContactInGroupFilter'
),
E
::
ts
(
'Contact in Group filter'
));
$this
->
addFilter
(
'contact_with_tag_filter'
,
new
Definition
(
'Civi\DataProcessor\FilterHandler\ContactWithTagFilter'
),
E
::
ts
(
'Contact has Tag filter'
));
...
...
Civi/DataProcessor/FilterHandler/EventFilter.php
0 → 100644
View file @
3f7c252b
<?php
/**
* @author Jaap Jansma <jaap.jansma@civicoop.org>
* @license AGPL-3.0
*/
namespace
Civi\DataProcessor\FilterHandler
;
use
Civi\DataProcessor\Exception\InvalidConfigurationException
;
use
CRM_Dataprocessor_ExtensionUtil
as
E
;
class
EventFilter
extends
AbstractFieldFilterHandler
{
/**
* @var array
* Filter configuration
*/
protected
$configuration
;
public
function
__construct
()
{
parent
::
__construct
();
}
/**
* Initialize the filter
*
* @throws \Civi\DataProcessor\Exception\DataSourceNotFoundException
* @throws \Civi\DataProcessor\Exception\InvalidConfigurationException
* @throws \Civi\DataProcessor\Exception\FieldNotFoundException
*/
protected
function
doInitialization
()
{
if
(
!
isset
(
$this
->
configuration
[
'datasource'
])
||
!
isset
(
$this
->
configuration
[
'field'
]))
{
throw
new
InvalidConfigurationException
(
E
::
ts
(
"Filter %1 requires a field to filter on. None given."
,
array
(
1
=>
$this
->
title
)));
}
$this
->
initializeField
(
$this
->
configuration
[
'datasource'
],
$this
->
configuration
[
'field'
]);
}
/**
* Returns true when this filter has additional configuration
*
* @return bool
*/
public
function
hasConfiguration
()
{
return
true
;
}
/**
* When this filter type has additional configuration you can add
* the fields on the form with this function.
*
* @param \CRM_Core_Form $form
* @param array $filter
*/
public
function
buildConfigurationForm
(
\
CRM_Core_Form
$form
,
$filter
=
array
())
{
$fieldSelect
=
\
CRM_Dataprocessor_Utils_DataSourceFields
::
getAvailableFilterFieldsInDataSources
(
$filter
[
'data_processor_id'
]);
$form
->
add
(
'select'
,
'field'
,
E
::
ts
(
'Event ID Field'
),
$fieldSelect
,
true
,
array
(
'style'
=>
'min-width:250px'
,
'class'
=>
'crm-select2 huge data-processor-field-for-name'
,
'placeholder'
=>
E
::
ts
(
'- select -'
),
));
if
(
isset
(
$filter
[
'configuration'
]))
{
$configuration
=
$filter
[
'configuration'
];
$defaults
=
array
();
if
(
isset
(
$configuration
[
'field'
])
&&
isset
(
$configuration
[
'datasource'
]))
{
$defaults
[
'field'
]
=
$configuration
[
'datasource'
]
.
'::'
.
$configuration
[
'field'
];
}
$form
->
setDefaults
(
$defaults
);
}
}
/**
* When this filter type has configuration specify the template file name
* for the configuration form.
*
* @return false|string
*/
public
function
getConfigurationTemplateFileName
()
{
return
"CRM/Dataprocessor/Form/Filter/Configuration/EventFilter.tpl"
;
}
/**
* Process the submitted values and create a configuration array
*
* @param $submittedValues
* @return array
*/
public
function
processConfiguration
(
$submittedValues
)
{
list
(
$datasource
,
$field
)
=
explode
(
'::'
,
$submittedValues
[
'field'
],
2
);
$configuration
[
'field'
]
=
$field
;
$configuration
[
'datasource'
]
=
$datasource
;
return
$configuration
;
}
/**
* Add the elements to the filter form.
*
* @param \CRM_Core_Form $form
* @param array $defaultFilterValue
* @param string $size
* Possible values: full or compact
* @return array
* Return variables belonging to this filter.
*/
public
function
addToFilterForm
(
\
CRM_Core_Form
$form
,
$defaultFilterValue
,
$size
=
'full'
)
{
$fieldSpec
=
$this
->
getFieldSpecification
();
$operations
=
$this
->
getOperatorOptions
(
$fieldSpec
);
$defaults
=
array
();
$title
=
$fieldSpec
->
title
;
$alias
=
$fieldSpec
->
alias
;
if
(
$this
->
isRequired
())
{
$title
.
=
' <span class="crm-marker">*</span>'
;
}
$sizeClass
=
'huge'
;
$minWidth
=
'min-width: 250px;'
;
if
(
$size
==
'compact'
)
{
$sizeClass
=
'medium'
;
$minWidth
=
''
;
}
$form
->
add
(
'select'
,
"
{
$alias
}
_op"
,
E
::
ts
(
'Operator:'
),
$operations
,
true
,
[
'style'
=>
$minWidth
,
'class'
=>
'crm-select2 '
.
$sizeClass
,
'multiple'
=>
FALSE
,
'placeholder'
=>
E
::
ts
(
'- select -'
),
]);
$api_params
=
array
();
$props
=
array
(
'placeholder'
=>
E
::
ts
(
'Select an Event'
),
'entity'
=>
'Event'
,
'api'
=>
array
(
'params'
=>
$api_params
),
'select'
=>
[
'minimumInputLength'
=>
0
],
'create'
=>
false
,
'multiple'
=>
true
,
'style'
=>
$minWidth
,
'class'
=>
$sizeClass
,
);
$form
->
addEntityRef
(
"
{
$alias
}
_value"
,
''
,
$props
);
if
(
isset
(
$defaultFilterValue
[
'op'
]))
{
$defaults
[
$alias
.
'_op'
]
=
$defaultFilterValue
[
'op'
];
}
else
{
$defaults
[
$alias
.
'_op'
]
=
key
(
$operations
);
}
if
(
isset
(
$defaultFilterValue
[
'value'
]))
{
$defaults
[
$alias
.
'_value'
]
=
$defaultFilterValue
[
'value'
];
}
if
(
count
(
$defaults
))
{
$form
->
setDefaults
(
$defaults
);
}
$filter
[
'type'
]
=
$fieldSpec
->
type
;
$filter
[
'title'
]
=
$title
;
$filter
[
'alias'
]
=
$fieldSpec
->
alias
;
$filter
[
'size'
]
=
$size
;
return
$filter
;
}
protected
function
getOperatorOptions
(
\
Civi\DataProcessor\DataSpecification\FieldSpecification
$fieldSpec
)
{
return
array
(
'IN'
=>
E
::
ts
(
'Is one of'
),
'NOT IN'
=>
E
::
ts
(
'Is not one of'
),
'null'
=>
E
::
ts
(
'Is empty'
),
);
}
}
templates/CRM/Dataprocessor/Form/Filter/Configuration/EventFilter.tpl
0 → 100644
View file @
3f7c252b
{
crmScope
extensionKey
=
'dataprocessor'
}
<div
class=
"crm-section"
>
<div
class=
"label"
>
{
$form.field.label
}
</div>
<div
class=
"content"
>
{
$form.field.html
}
</div>
<div
class=
"clear"
></div>
</div>
{/
crmScope
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment