Skip to content
Snippets Groups Projects
Unverified Commit c1b3f0cc authored by Seamus Lee's avatar Seamus Lee Committed by GitHub
Browse files

Merge pull request #31736 from eileenmcnaughton/repeat

#5580 Fix ActionSchedule save on repeat events
parents 00556d30 4fff214f
Branches
Tags
No related merge requests found
......@@ -15,6 +15,7 @@
* @package CRM
* @copyright CiviCRM LLC https://civicrm.org/licensing
*/
use Civi\Api4\ActionSchedule;
/**
* This class generates form components for processing Entity.
......@@ -126,7 +127,7 @@ class CRM_Core_Form_RecurringEntity {
if (self::$_scheduleReminderID) {
$defaults['repetition_frequency_unit'] = self::$_scheduleReminderDetails->repetition_frequency_unit;
$defaults['repetition_frequency_interval'] = self::$_scheduleReminderDetails->repetition_frequency_interval;
$defaults['start_action_condition'] = array_flip(explode(",", self::$_scheduleReminderDetails->start_action_condition));
$defaults['start_action_condition'] = array_flip(explode(",", (string) self::$_scheduleReminderDetails->start_action_condition));
foreach ($defaults['start_action_condition'] as $key => $val) {
$val = 1;
$defaults['start_action_condition'][$key] = $val;
......@@ -357,11 +358,14 @@ class CRM_Core_Form_RecurringEntity {
unset($params['id']);
}
$dbParams['name'] = 'repeat_' . $params['used_for'] . '_' . $params['entity_id'];
$actionScheduleObj = CRM_Core_BAO_ActionSchedule::writeRecord($dbParams);
$actionSchedule = ActionSchedule::save(FALSE)
->addRecord($dbParams)
->setMatch(['name'])
->execute()->first();
//exclude dates
$excludeDateList = [];
if (!empty($params['exclude_date_list']) && !empty($params['parent_entity_id']) && $actionScheduleObj->entity_value) {
if (!empty($params['exclude_date_list']) && !empty($params['parent_entity_id']) && $actionSchedule['entity_value']) {
//Since we get comma separated values lets get them in array
$excludeDates = explode(",", $params['exclude_date_list']);
......@@ -375,7 +379,7 @@ class CRM_Core_Form_RecurringEntity {
CRM_Core_BAO_OptionGroup::deleteRecord(['id' => $optionGroupIdExists]);
}
$optionGroupParams = [
'name' => $type . '_repeat_exclude_dates_' . $actionScheduleObj->entity_value,
'name' => $type . '_repeat_exclude_dates_' . CRM_Core_DAO::serializeField($actionSchedule['entity_value'], CRM_Core_DAO::SERIALIZE_SEPARATOR_TRIMMED),
'title' => $type . ' recursion',
'is_reserved' => 0,
'is_active' => 1,
......@@ -428,7 +432,7 @@ class CRM_Core_Form_RecurringEntity {
$recursion = new CRM_Core_BAO_RecurringEntity();
$recursion->dateColumns = $params['dateColumns'];
$recursion->scheduleId = $actionScheduleObj->id;
$recursion->scheduleId = $actionSchedule['id'];
if (!empty($excludeDateList)) {
$recursion->excludeDates = $excludeDateList;
......
......@@ -25,13 +25,15 @@ class ActionScheduleSpecProvider extends \Civi\Core\Service\AutoService implemen
*/
public function modifySpec(RequestSpec $spec) {
if ($spec->getAction() === 'create') {
$spec->getFieldByName('title')->setRequired(TRUE);
$spec->getFieldByName('title')->setRequiredIf('empty($values.name)');
$spec->getFieldByName('name')->setRequired(FALSE);
$spec->getFieldByName('mapping_id')->setRequired(TRUE);
// Repeat events do not require mapping_id or start_action_unit (or seemingly start_action_condition)- although
// we don't have that level of nuance available so we make them optional for all events.
$spec->getFieldByName('mapping_id')->setRequiredIf('empty($values.used_for) || $values.used_for !== "civicrm_event"');
$spec->getFieldByName('start_action_unit')->setRequiredIf('empty($values.absolute_date) && (empty($values.used_for) || $values.used_for !== "civicrm_event")');
$spec->getFieldByName('start_action_condition')->setRequiredIf('empty($values.absolute_date) && (empty($values.used_for) || $values.used_for !== "civicrm_event")');
$spec->getFieldByName('entity_value')->setRequired(TRUE);
$spec->getFieldByName('start_action_offset')->setRequiredIf('empty($values.absolute_date)');
$spec->getFieldByName('start_action_unit')->setRequiredIf('empty($values.absolute_date)');
$spec->getFieldByName('start_action_condition')->setRequiredIf('empty($values.absolute_date)');
$spec->getFieldByName('start_action_date')->setRequiredIf('empty($values.absolute_date)');
$spec->getFieldByName('absolute_date')->setRequiredIf('empty($values.start_action_date)');
$spec->getFieldByName('group_id')->setRequiredIf('!empty($values.limit_to) && !empty($values.recipient) && $values.recipient === "group"');
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment