Issue with condition of plugin Email under Scheduled task

fujitsuDev

New Member
Hi,

Condition field from plugin not work. It send always mails for every records or nothing.
I've tried many combinations, I don't know what to do anymore...

Exemple, I've only two records that fulfils the condition in DB:

And my condition works, no doubt about it (ested on 3v4l.org):
PHP:
$status = 1;
$sent = null;
if ($status == '1' && $sent != '1' && strtotime('2019-11-20 00:00:00') < time())
    echo 'true';

In plugin Condition field:
PHP:
return '{fabrik_myform___status}' == '1' && '{fabrik_myform___email_sent}' != '1' && strtotime('{fabrik_myform___expiration_date}') < time();
OR
PHP:
if ('{fabrik_myform___status}' == '1' && '{fabrik_myform___email_sent}' != '1' && strtotime('{fabrik_myform___expiration_date}') < time()) {
  return true;
}

In my DB, I've one record with fields:
  • status == 1
  • email_sent == null
One record with:
  • status == 1
  • email_sent == 0
32 others records:
  • status != 1
  • email_sent == null

I should be have 2 emails on this 34 records, right?

Result...
1: Condition returned false
2: Condition returned false
3: Condition returned false
4: Condition returned false
5: Condition returned false
6: Condition returned false
7: Condition returned false
8: Condition returned false
9: Condition returned false
10: Condition returned false
11: Condition returned false
12: Condition returned false
13: Condition returned false
14: Condition returned false
15: Condition returned false
16: Condition returned false
17: Condition returned false
18: Condition returned false
19: Condition returned false
20: Condition returned false
21: Condition returned false
22: Condition returned false
23: Condition returned false
24: Condition returned false
25: Condition returned false
26: Condition returned false
27: Condition returned false
28: Condition returned false
29: Condition returned false
30: Condition returned false
31: Condition returned false
32: Condition returned false
33: Condition returned false
34: Condition returned false
0 records updated

Thanks for help
 
Wiki: "The row will not be processed if you return false."
Have you tried to formulate your condition to return false if an email shall not be sent?
 
Yes, and I gradually tried to return only 'true' with hopefully it would work, but whether in the most complicated or simplest ways, the condition is never interpreted like PHP would make.

PHP:
if( '{fabrik_myform___status}' != '1' || '{fabrik_myform___email_sent}' == '1' || strtotime('{fabrik_myform___expiration_date}') >= time()) {
  return false;
} else {
  return true;
}

In my DB: it's same thing.

Result:
1: Condition returned false
2: Condition returned false
3: Condition returned false
4: Condition returned false
5: Condition returned false
6: Condition returned false
7: Condition returned false
8: Condition returned false
9: Condition returned false
10: Condition returned false
11: Condition returned false
12: Condition returned false
13: Condition returned false
14: Condition returned false
15: Condition returned false
16: Condition returned false
17: Condition returned false
18: Condition returned false
19: Condition returned false
20: Condition returned false
21: Condition returned false
22: Condition returned false
23: Condition returned false
24: Condition returned false
25: Condition returned false
26: Condition returned false
27: Condition returned false
28: Condition returned false
29: Condition returned false
30: Condition returned false
31: Condition returned false
32: Condition returned false
33: Condition returned false
34: Condition returned false
0 records updated

OR...
PHP:
if( '{fabrik_myform___status}' != '1') {
  return false;
} elseif( '{fabrik_myform___email_sent}' == '2') {
  return false;
} elseif( strtotime('{fabrik_myform___expiration_date}') >= time()) {
  return false;
} else {
  return true;
}


OR...
PHP:
if( '{fabrik_myform___status}' != '1') {
  return false;
}
if( '{fabrik_myform___email_sent}' == '2') {
  return false;
}
if( strtotime('{fabrik_myform___expiration_date}') >= time()) {
  return false;
}
return true;
 
You should debug what you get in your placeholders with e.g. var_dump(...);exit;
I assume you must use {...._raw} to get the values (and not the formatted strings like formatted date, element link to details, dbjoin labels etc).
 
Okay, just always needs to add "_raw" suffix everywhere...

Code:
{fabrik_myform___status_raw}
{fabrik_myform___email_sent_raw}
{fabrik_myform___expiration_date_raw}

Solved.
Thank you. :)
 
We are in need of some funding.
More details.

Thank you.

Members online

Back
Top