From 21c51e1d8055d598b444b134002eacea44664ffc Mon Sep 17 00:00:00 2001
From: Erik Hommel <hommel@ee-atwork.nl>
Date: Wed, 19 Aug 2015 12:55:53 +0200
Subject: [PATCH] locally tested and approved fix #33

---
 .../Contribution/Form/ThankYouDate.php        | 55 +++++++++++++++++++
 .../Contribution/ThankYouDate.php             | 38 ++++++++++---
 .../Contribution/Form/ThankYouDate.tpl        | 38 +------------
 xml/Menu/civirules.xml                        |  2 +-
 4 files changed, 89 insertions(+), 44 deletions(-)
 create mode 100644 CRM/CivirulesActions/Contribution/Form/ThankYouDate.php

diff --git a/CRM/CivirulesActions/Contribution/Form/ThankYouDate.php b/CRM/CivirulesActions/Contribution/Form/ThankYouDate.php
new file mode 100644
index 0000000..1808df3
--- /dev/null
+++ b/CRM/CivirulesActions/Contribution/Form/ThankYouDate.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Class for CiviRules Contribution Thank You Date Form
+ *
+ * @author Erik Hommel (CiviCooP) <erik.hommel@civicoop.org>
+ * @license AGPL-3.0
+ */
+
+class CRM_CivirulesActions_Contribution_Form_ThankYouDate extends CRM_CivirulesActions_Form_Form {
+
+  /**
+   * Overridden parent method to build the form
+   *
+   * @access public
+   */
+  public function buildQuickForm() {
+    $this->add('hidden', 'rule_action_id');
+    $this->addDate('thank_you_date', ts('Thank You Date'), FALSE, array('formatType' => 'custom'));
+    $this->addButtons(array(
+      array('type' => 'next', 'name' => ts('Save'), 'isDefault' => TRUE,),
+      array('type' => 'cancel', 'name' => ts('Cancel'))));
+  }
+
+  /**
+   * Overridden parent method to set default values
+   *
+   * @return array $defaultValues
+   * @access public
+   */
+  public function setDefaultValues() {
+    $defaultValues = parent::setDefaultValues();
+    $defaultValues['rule_action_id'] = $this->ruleActionId;
+    if (!empty($this->ruleAction->action_params)) {
+      $data = unserialize($this->ruleAction->action_params);
+    }
+    if (empty($data['thank_you_date'])) {
+      list($defaultValues['thank_you_date']) = CRM_Utils_Date::setDateDefaults(date('Y-m-d'));
+    } else {
+      list($defaultValues['thank_you_date']) = CRM_Utils_Date::setDateDefaults($data['thank_you_date']);
+    }
+    return $defaultValues;
+  }
+
+  /**
+   * Overridden parent method to process form data after submitting
+   *
+   * @access public
+   */
+  public function postProcess() {
+    $data['thank_you_date'] = $this->_submitValues['thank_you_date'];
+    $this->ruleAction->action_params = serialize($data);
+    $this->ruleAction->save();
+    parent::postProcess();
+  }
+}
\ No newline at end of file
diff --git a/CRM/CivirulesActions/Contribution/ThankYouDate.php b/CRM/CivirulesActions/Contribution/ThankYouDate.php
index b315f24..81ee93b 100644
--- a/CRM/CivirulesActions/Contribution/ThankYouDate.php
+++ b/CRM/CivirulesActions/Contribution/ThankYouDate.php
@@ -14,21 +14,43 @@ class CRM_CivirulesActions_Contribution_ThankYouDate extends CRM_Civirules_Actio
    *
    */
   public function processAction(CRM_Civirules_EventData_EventData $eventData) {
-    CRM_Core_Error::debug('eventData', $eventData);
-    exit();
-    $contactId = $eventData->getContactId();
+    $contribution = $eventData->getEntityData('Contribution');
+    $actionParams = $this->getActionParameters();
+    $params = array(
+      'id' => $contribution['id'],
+      'thankyou_date' => date('Ymd', strtotime($actionParams['thank_you_date']))
+    );
+    try {
+      civicrm_api3('Contribution', 'Create', $params);
+    } catch (CiviCRM_API3_Exception $ex) {}
   }
+
   /**
-   * Method to return the url for additional form processing for action
-   * and return false if none is needed
+   * Returns a redirect url to extra data input from the user after adding a action
+   *
+   * Return false if you do not need extra data input
    *
    * @param int $ruleActionId
-   * @return bool
+   * @return bool|string
    * @access public
    */
   public function getExtraDataInputUrl($ruleActionId) {
-    return FALSE;
+    return CRM_Utils_System::url('civicrm/civirule/form/action/contribution/thankyoudate', 'rule_action_id='.$ruleActionId);
   }
 
-
+  /**
+   * Returns a user friendly text explaining the condition params
+   * e.g. 'Older than 65'
+   *
+   * @return string
+   * @access public
+   */
+  public function userFriendlyConditionParams() {
+    $return = '';
+    $params = $this->getActionParameters();
+    if (!empty($params['thank_you_date'])) {
+      $return = 'Thank You Date for Contribution will be set to : '.date('d M Y', strtotime($params['thank_you_date']));
+    }
+    return $return;
+  }
 }
\ No newline at end of file
diff --git a/templates/CRM/CivirulesActions/Contribution/Form/ThankYouDate.tpl b/templates/CRM/CivirulesActions/Contribution/Form/ThankYouDate.tpl
index b4e20f6..f57f8ff 100644
--- a/templates/CRM/CivirulesActions/Contribution/Form/ThankYouDate.tpl
+++ b/templates/CRM/CivirulesActions/Contribution/Form/ThankYouDate.tpl
@@ -1,43 +1,11 @@
 <h3>{$ruleActionHeader}</h3>
-<div class="crm-block crm-form-block crm-civirule-rule_action-block-contact_subtype">
+<div class="crm-block crm-form-block crm-civirule-rule_action-block-contribution-thank-you-date">
     <div class="crm-section">
-        <div class="label">{$form.type.label}</div>
-        <div class="content">{$form.type.html}</div>
-        <div class="clear"></div>
-    </div>
-    <div class="crm-section sub_type-single">
-        <div class="label">{$form.subtype.label}</div>
-        <div class="content">{$form.subtype.html}</div>
-        <div class="clear"></div>
-    </div>
-    <div class="crm-section sub_type-multiple" style="display: none;">
-        <div class="label">{$form.subtypes.label}</div>
-        <div class="content">{$form.subtypes.html}</div>
+        <div class="label">{$form.thank_you_date.label}</div>
+        <div class="content">{include file="CRM/common/jcalendar.tpl" elementName=thank_you_date}</div>
         <div class="clear"></div>
     </div>
 </div>
 <div class="crm-submit-buttons">
     {include file="CRM/common/formButtons.tpl" location="bottom"}
 </div>
-
-{literal}
-    <script type="text/javascript">
-        cj(function() {
-            cj('select#type').change(triggerTypeChange);
-
-            triggerTypeChange();
-        });
-
-        function triggerTypeChange() {
-            cj('.sub_type-multiple').css('display', 'none');
-            cj('.sub_type-single').css('display', 'none');
-            var val = cj('#type').val();
-            if (val == 0 ) {
-                cj('.sub_type-single').css('display', 'block');
-            } else {
-                cj('.sub_type-multiple').css('display', 'block');
-            }
-        }
-    </script>
-
-{/literal}
\ No newline at end of file
diff --git a/xml/Menu/civirules.xml b/xml/Menu/civirules.xml
index af0fbe8..0dd0bd1 100755
--- a/xml/Menu/civirules.xml
+++ b/xml/Menu/civirules.xml
@@ -134,7 +134,7 @@
     <access_arguments>administer CiviCRM</access_arguments>
   </item>
   <item>
-    <path>civicrm/civirule/form/action/thankyoudate</path>
+    <path>civicrm/civirule/form/action/contribution/thankyoudate</path>
     <page_callback>CRM_CivirulesActions_Contribution_Form_ThankYouDate</page_callback>
     <title>Contribution Thank You Date</title>
     <access_arguments>access CiviCRM</access_arguments>
-- 
GitLab