Add civicrm_post hook to regenerate member buttons.
[org.fsf.memberdashboard.git] / memberdashboard.php
index f06aabc2d5b32621b02f130aa6ec0d3f088b96e7..f84f76fe5e9682cf29428d0b7c1cc0afa9b93cd6 100644 (file)
@@ -109,3 +109,54 @@ function memberdashboard_civicrm_caseTypes(&$caseTypes) {
 function memberdashboard_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) {
   _memberdashboard_civix_civicrm_alterSettingsFolders($metaDataFolders);
 }
+
+/**
+ * Implementation of hook_civicrm_post
+ *
+ * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_post
+ */
+function memberdashboard_civicrm_post($op, $objectName, $objectId, &$objectRef) {
+  // When a membership is modified, make a RPC to regenerate the
+  // member button for the contact.
+  $triggerOps = array('create', 'edit', 'delete');
+
+  if($objectName == 'Membership' && in_array($op, $triggerOps)) {
+    // TODO: Extract all of this to a class for clarity and
+    // organization's sake.
+
+    // Get the oldest join date for the contact's memberships.
+    $contactId = $objectRef->contact_id;
+    $dao = CRM_Core_DAO::executeQuery(
+      'SELECT join_date FROM civicrm_membership WHERE contact_id=%1 ORDER BY join_date ASC LIMIT 1',
+      array( 1 => array($contactId, 'Integer') )
+    );
+
+    if($dao->fetch()) {
+      // Make the API call.
+      $joinDate = $dao->join_date;
+      $apiUrl = civicrm_api3('setting', 'getvalue', array(
+        'name' => 'memberdashboard_button_api_url',
+        'group' => MEMBERDASHBOARD_SETTINGS_GROUP
+      ));
+      $user = civicrm_api3('setting', 'getvalue', array(
+        'name' => 'memberdashboard_button_api_user',
+        'group' => MEMBERDASHBOARD_SETTINGS_GROUP
+      ));
+      $password = civicrm_api3('setting', 'getvalue', array(
+        'name' => 'memberdashboard_button_api_password',
+        'group' => MEMBERDASHBOARD_SETTINGS_GROUP
+      ));
+      $params = http_build_query(array(
+        'contact_id' => $contactId,
+        'date' => $joinDate
+      ));
+      $curl = curl_init();
+      curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
+      curl_setopt($curl, CURLOPT_USERPWD, "$user:$password");
+      curl_setopt($curl, CURLOPT_URL, "$apiUrl?$params");
+      curl_exec($curl);
+    }
+
+    $dao->free();
+  }
+}