Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
W
webform_civirules
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Partners
CiviCooP
webform_civirules
Commits
5aa93d25
Commit
5aa93d25
authored
Aug 03, 2018
by
jaapjansma
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Updated also trigger civirules when webform is submitted for online payment within webform civicrm.
parent
afb92e63
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
157 additions
and
17 deletions
+157
-17
webform_civirules.info
webform_civirules.info
+2
-1
webform_civirules.install
webform_civirules.install
+35
-1
webform_civirules.module
webform_civirules.module
+53
-15
webform_civirules_trigger.inc
webform_civirules_trigger.inc
+67
-0
No files found.
webform_civirules.info
View file @
5aa93d25
...
...
@@ -6,9 +6,10 @@ version = 7.x-2.0
dependencies
[]
=
civicrm
(>=
4.7
)
dependencies
[]
=
webform
(>=
7.
x
-
4.15
)
files
[]
=
webform_civirules_trigger
.
inc
files
[]
=
CRM
/
WebformCivirules
/
Trigger
.
php
files
[]
=
CRM
/
WebformCivirules
/
TriggerData
.
php
files
[]
=
CRM
/
WebformCivirules
/
Condition
/
WebformIs
.
php
files
[]
=
CRM
/
WebformCivirules
/
Condition
/
IsNthContactOnWebform
.
php
files
[]
=
CRM
/
WebformCivirules
/
Condition
/
Form
/
WebformIs
.
php
files
[]
=
CRM
/
WebformCivirules
/
Condition
/
Form
/
IsNthContactOnWebform
.
php
\ No newline at end of file
files
[]
=
CRM
/
WebformCivirules
/
Condition
/
Form
/
IsNthContactOnWebform
.
php
webform_civirules.install
View file @
5aa93d25
...
...
@@ -7,4 +7,38 @@ function webform_civirules_disable() {
civicrm_api3
(
'CiviRuleTrigger'
,
'delete'
,
array
(
'id'
=>
$triggerId
));
}
catch
(
CiviCRM_API3_Exception
$ex
)
{}
}
}
\ No newline at end of file
}
function
webform_civirules_schema
()
{
$schema
[
'webform_civicrm_submissions_civirules_trigger'
]
=
array
(
'description'
=>
'Link between form submissions and CiviCRM data.'
,
'fields'
=>
array
(
'sid'
=>
array
(
'type'
=>
'int'
,
'unsigned'
=>
TRUE
,
'not null'
=>
TRUE
,
'default'
=>
0
,
'description'
=>
'Webform Submission ID'
,
),
'trigger_fired'
=>
array
(
'type'
=>
'int'
,
'not null'
=>
TRUE
,
'default'
=>
'0'
,
'description'
=>
'Whether we triggered civirules for this submission'
,
),
),
'primary key'
=>
array
(
'sid'
),
);
return
$schema
;
}
/**
* Add the webform_civicrm_submissions_civirules_triggers table.
* This table is ued to determine whether a certain submission did already trigger civirules.
*
* @return null|string
*/
function
webform_civirules_update_1
()
{
$schema
=
webform_civirules_schema
();
db_create_table
(
'webform_civicrm_submissions_civirules_trigger'
,
$schema
[
'webform_civicrm_submissions_civirules_trigger'
]);
}
webform_civirules.module
View file @
5aa93d25
...
...
@@ -26,24 +26,32 @@ function webform_civirules_menu_get_item_alter(&$router_item, $path, $original_m
* @param $submission
*/
function
webform_civirules_webform_submission_insert
(
$node
,
$submission
)
{
$db
=
db_query
(
'SELECT * FROM {webform_civicrm_submissions} WHERE sid = :sid'
,
array
(
':sid'
=>
$submission
->
sid
));
if
(
$row
=
$db
->
fetchAssoc
())
{
$data
=
unserialize
(
$row
[
'civicrm_data'
]);
$contacts
=
array
();
if
(
$row
[
'contact_id'
])
{
foreach
(
explode
(
'-'
,
trim
(
$row
[
'contact_id'
],
'-'
))
as
$c
=>
$cid
)
{
$contacts
[
$c
]
=
$cid
;
}
foreach
(
$contacts
as
$c
=>
$cid
)
{
if
(
$cid
)
{
$trigger
=
new
CRM_WebformCivirules_Trigger
();
$trigger
->
triggerTrigger
(
$cid
,
$c
,
$data
,
$contacts
,
$submission
->
sid
,
$submission
->
nid
);
}
}
}
if
(
!
empty
(
$node
->
webform_civicrm
))
{
webform_civirules_trigger
::
getSingleton
()
->
setSubmission
(
$submission
)
->
trigger
();
}
}
/**
* Implementation of webform_submission_insert for CiviRules Webform Submission Trigger
*
* @param $node
* @param $submission
*/
function
webform_civirules_webform_submission_update
(
$node
,
$submission
)
{
if
(
!
empty
(
$node
->
webform_civicrm
))
{
webform_civirules_trigger
::
getSingleton
()
->
setSubmission
(
$submission
)
->
trigger
();
}
}
/**
* Implements hook_webform_submission_delete().
*/
function
webform_civirules_webform_submission_delete
(
$node
,
$submission
)
{
db_delete
(
'webform_civicrm_submissions_civirules_trigger'
)
->
condition
(
'sid'
,
$submission
->
sid
)
->
execute
();
}
/**
* Make sure that the hooks gets executed after webform_civicrm has done its processing.
*
...
...
@@ -70,6 +78,36 @@ function webform_civirules_module_implements_alter(&$module_list, $context) {
}
}
function
webform_civirules_webform_submission_presave
(
$node
,
&
$submission
)
{
if
(
!
$node
->
webform_civicrm
)
{
return
;
// is not a webform civicrm submission.
}
// Store the submission object so we can use it later on
// when the sid is set.
// As submission is an object and object are storeed by reference we can retrieve the new submission id.
webform_civirules_trigger
::
getSingleton
()
->
setSubmission
(
$submission
);
}
/**
* Implements hook_civicrm_alterPaymentProcessorParams().
*
* In this hook we check whether we do an online payment from a webform.
* If so we find out what the submission id is and and trigger civirules from that submission.
* Why do we do this? Because the webform_civicrm redirects to the pyament processor page and this
* levaes our hook webform_submission_insert uncalled and webform_submission_update would never be called afterwards.
*
* @param $paymentObj
* @param $rawParams
* @param $cookedParams
*/
function
webform_civirules_civicrm_alterPaymentProcessorParams
(
$paymentObj
,
&
$rawParams
,
&
$cookedParams
)
{
if
(
!
isset
(
$rawParams
[
'webform_redirect_success'
]))
{
return
;
// this is not a webform submission
}
webform_civirules_trigger
::
getSingleton
()
->
trigger
();
}
/**
* Implementation of hook_civicrm_managed
*
...
...
webform_civirules_trigger.inc
0 → 100644
View file @
5aa93d25
<?php
class
webform_civirules_trigger
{
private
static
$singleton
;
private
$submission
;
private
function
__construct
()
{
}
/**
* @return \webform_civirules_trigger
*/
public
static
function
getSingleton
()
{
if
(
!
self
::
$singleton
)
{
self
::
$singleton
=
new
webform_civirules_trigger
();
}
return
self
::
$singleton
;
}
/**
* @return \webform_civirules_trigger
*/
public
function
setSubmission
(
$submission
)
{
$this
->
submission
=
$submission
;
return
$this
;
}
public
function
trigger
()
{
if
(
!
$this
->
submission
||
!
$this
->
submission
->
sid
||
!
$this
->
submission
->
nid
)
{
return
;
}
$db
=
db_query
(
'SELECT * FROM {webform_civicrm_submissions_civirules_trigger} WHERE sid = :sid'
,
array
(
':sid'
=>
$this
->
submission
->
sid
));
if
((
$row
=
$db
->
fetchAssoc
())
&&
$row
->
trigger_fired
)
{
// This submission did already fire a civirules trigger.
return
;
}
$db
=
db_query
(
'SELECT * FROM {webform_civicrm_submissions} WHERE sid = :sid'
,
array
(
':sid'
=>
$this
->
submission
->
sid
));
if
(
$row
=
$db
->
fetchAssoc
())
{
// First update webform_civicrm_submissions_civirules_trigger so that we do not trigger again on this submission.
$webform_civicrm_submissions_civirules_trigger
=
array
(
'sid'
=>
$this
->
submission
->
sid
,
'trigger_fired'
=>
1
,
);
drupal_write_record
(
'webform_civicrm_submissions_civirules_trigger'
,
$webform_civicrm_submissions_civirules_trigger
);
$data
=
unserialize
(
$row
[
'civicrm_data'
]);
$contacts
=
array
();
if
(
$row
[
'contact_id'
])
{
foreach
(
explode
(
'-'
,
trim
(
$row
[
'contact_id'
],
'-'
))
as
$c
=>
$cid
)
{
$contacts
[
$c
]
=
$cid
;
}
foreach
(
$contacts
as
$c
=>
$cid
)
{
if
(
$cid
)
{
$trigger
=
new
CRM_WebformCivirules_Trigger
();
$trigger
->
triggerTrigger
(
$cid
,
$c
,
$data
,
$contacts
,
$this
->
submission
->
sid
,
$this
->
submission
->
nid
);
}
}
}
}
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a 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