Browse Source

#72 - relocate to the same page after login

Alex Trofimov 12 years ago
parent
commit
d0c3e78c34
3 changed files with 22 additions and 3 deletions
  1. 1 1
      member.php
  2. 15 1
      template/scripts/BxBaseFormLogin.php
  3. 6 1
      template/scripts/BxBaseServiceLogin.php

+ 1 - 1
member.php

@@ -37,7 +37,7 @@ if (isset($_POST['ID'])) { // login form is submitted
         $aAccount = bx_login($oAccount->id(), ($oForm->getCleanValue('rememberMe') ? true : false));
 
         $sUrlRelocate = $oForm->getCleanValue('relocate');
-        if (!$sUrlRelocate || BX_DOL_URL_ROOT == $sUrlRelocate || basename($sUrlRelocate) == 'join.php' || 0 != strncmp($sUrlRelocate, BX_DOL_URL_ROOT, strlen(BX_DOL_URL_ROOT)))
+        if (!$sUrlRelocate || 0 != strncmp($sUrlRelocate, BX_DOL_URL_ROOT, strlen(BX_DOL_URL_ROOT)))
             $sUrlRelocate = BX_DOL_ROLE_ADMIN == $oForm->getRole() ? BX_DOL_URL_STUDIO . 'launcher.php' : BX_DOL_URL_ROOT . 'member.php';
 
         bx_import('BxDolTemplate');

+ 15 - 1
template/scripts/BxBaseFormLogin.php

@@ -20,8 +20,22 @@ class BxBaseFormLogin extends BxTemplFormView
     {
         parent::__construct($aInfo, $oTemplate);
 
+        $aNoRelocatePages = array('forgot-password', 'login', 'create-account', 'logout');
+
         $sRelocate = bx_process_input(bx_get('relocate'));
-        $this->aInputs['relocate']['value'] = $sRelocate && 0 == strncmp(BX_DOL_URL_ROOT, $sRelocate, strlen(BX_DOL_URL_ROOT)) ? $sRelocate : BX_DOL_URL_ROOT . 'member.php';
+        if (!$sRelocate && isset($_SERVER['HTTP_REFERER']) && 0 === mb_stripos($_SERVER['HTTP_REFERER'], BX_DOL_URL_ROOT)) {
+
+            $sRelocate = $_SERVER['HTTP_REFERER'];
+    
+            foreach ($aNoRelocatePages as $s) {
+                if (false !== mb_stripos($_SERVER['HTTP_REFERER'], $s)) {
+                    $sRelocate = BX_DOL_URL_ROOT . 'member.php';
+                    break;
+                }
+            }   
+        }
+        
+        $this->aInputs['relocate']['value'] = $sRelocate ? $sRelocate : BX_DOL_URL_ROOT . 'member.php';
     }
 
     function isValid ()

+ 6 - 1
template/scripts/BxBaseServiceLogin.php

@@ -22,7 +22,7 @@ class BxBaseServiceLogin extends BxDol
         return $n*2;
     }
 
-    public function serviceLoginForm ($sParams = '')
+    public function serviceLoginForm ($sParams = '', $sForceRelocate = '')
     {
         if (isLogged()) {
             return false;
@@ -61,6 +61,11 @@ class BxBaseServiceLogin extends BxDol
         $sCustomHtmlAfter = '';
         bx_alert('profile', 'show_login_form', 0, 0, array('oForm' => $oForm, 'sParams' => &$sParams, 'sCustomHtmlBefore' => &$sCustomHtmlBefore, 'sCustomHtmlAfter' => &$sCustomHtmlAfter, 'aAuthTypes' => &$aAuthTypes));
 
+        if ($sForceRelocate && 0 === mb_stripos($sForceRelocate, BX_DOL_URL_ROOT))
+            $oForm->aInputs['relocate']['value'] = $sForceRelocate;
+        elseif ('homepage' == $sForceRelocate)
+            $oForm->aInputs['relocate']['value'] = BX_DOL_URL_ROOT;
+
         $sFormCode = $oForm->getCode();
 
         $sJoinText = '';