dev/core#2436 On WordPress, redirect back to the event registration or contribution
authorAidan Saunders <aidan.saunders@squiffle.uk>
Wed, 3 Mar 2021 16:32:03 +0000 (16:32 +0000)
committerAidan Saunders <aidan.saunders@squiffle.uk>
Fri, 5 Mar 2021 10:59:41 +0000 (10:59 +0000)
page that prompted the user to login.

Mostly copied from CRM_Utils_System_DrupalBase.php

CRM/Utils/System/Base.php
CRM/Utils/System/WordPress.php

index e126a6d5f329d84041f9ba70f62d5118721b031f..9d30fbf647feb92258e01cb10125717f965f2522 100644 (file)
@@ -436,7 +436,7 @@ abstract class CRM_Utils_System_Base {
    * Get user login URL for hosting CMS (method declared in each CMS system class)
    *
    * @param string $destination
-   *   If present, add destination to querystring (works for Drupal only).
+   *   If present, add destination to querystring (works for Drupal and WordPress only).
    *
    * @return string
    *   loginURL for the current CMS
index fa8518bc21e4ec81ef67f0521339f5a549614cea..04185ec78080397b131da4a4c3048f5558bf83c8 100644 (file)
@@ -926,20 +926,42 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base {
    * @inheritDoc
    */
   public function getLoginURL($destination = '') {
-    $config = CRM_Core_Config::singleton();
-    $loginURL = wp_login_url();
-    return $loginURL;
+    return wp_login_url($destination);
   }
 
   /**
-   * FIXME: Do something.
-   *
    * @param \CRM_Core_Form $form
    *
    * @return NULL|string
    */
   public function getLoginDestination(&$form) {
-    return NULL;
+    $args = NULL;
+
+    $id = $form->get('id');
+    if ($id) {
+      $args .= "&id=$id";
+    }
+    else {
+      $gid = $form->get('gid');
+      if ($gid) {
+        $args .= "&gid=$gid";
+      }
+      else {
+        // Setup Personal Campaign Page link uses pageId
+        $pageId = $form->get('pageId');
+        if ($pageId) {
+          $component = $form->get('component');
+          $args .= "&pageId=$pageId&component=$component&action=add";
+        }
+      }
+    }
+
+    $destination = NULL;
+    if ($args) {
+      // append destination so user is returned to form they came from after login
+      $destination = CRM_Utils_System::url(CRM_Utils_System::currentPath(), 'reset=1' . $args);
+    }
+    return $destination;
   }
 
   /**