Przeglądaj źródła

Ticket #4543 - Invitations: Allow to invite on a definite page.

AntonLV 2 lat temu
rodzic
commit
20234e950c

+ 7 - 0
modules/boonex/invites/classes/BxInvConfig.php

@@ -16,6 +16,7 @@ class BxInvConfig extends BxBaseModGeneralConfig
     protected $_iCountPerUser;
     protected $_sKeyCode;
     protected $_iKeyLifetime;
+    protected $_sRedirectCode;
     protected $_bRequestInvite;
     protected $_sRequestsEmail;
     protected $_bRegistrationByInvitation;
@@ -58,6 +59,7 @@ class BxInvConfig extends BxBaseModGeneralConfig
         $this->_iCountPerUser = 0;
         $this->_sKeyCode = 'icode';
         $this->_iKeyLifetime = 86400;
+        $this->_sRedirectCode = 'iredirect';
         $this->_bRequestInvite = true;
         $this->_sRequestsEmail = '';
         $this->_bRegistrationByInvitation = true;
@@ -104,6 +106,11 @@ class BxInvConfig extends BxBaseModGeneralConfig
         return $this->_iKeyLifetime;
     }
 
+    public function getRedirectCode()
+    {
+        return $this->_sRedirectCode;
+    }
+
     public function isRequestInvite()
     {
         return $this->_bRequestInvite;

+ 14 - 11
modules/boonex/invites/classes/BxInvDb.php

@@ -97,6 +97,17 @@ class BxInvDb extends BxDolModuleDb
                 $sWhereClause = "AND `{$this->_sTableInvites}`.`request_id` IN (SELECT `request_id` FROM `{$this->_sTableInvites}` WHERE `key`=:keyvalue ) ";
                 $sLimitClause = "";
                 break;
+
+            case 'by_key':
+                $aMethod['name'] = 'getRow';
+                $aMethod['params'][1] = [
+                    'key' => $aParams['key']
+                ];
+
+                $sWhereClause = "AND `{$this->_sTableInvites}`.`key`=:key ";
+                $sLimitClause = "LIMIT 1";
+                break;
+
             case 'all':
                 $aMethod['name'] = 'getAll';
                 $aMethod['params'][1] = array(
@@ -162,18 +173,10 @@ class BxInvDb extends BxDolModuleDb
         $this->query("UPDATE `{$this->_sTableInvites}` SET `date_seen`=:date_seen WHERE `key`=:keyvalue", $aBindings);
         $this->updateRequestStatusByInviteCode(2, $sKey);
     }
-    
-    public function insertInvite($iAccountId, $iProfileId, $sKey, $sEmail, $iDate)
+
+    public function insertInvite($aInvite)
     {
-        $aBindings = array(
-            'account_id' => $iAccountId,
-            'profile_id' => $iProfileId,
-            'keyvalue' => $sKey,
-            'email' => $sEmail,
-            'date' => $iDate
-        );
-        $this->query("INSERT `{$this->_sTableInvites}` (account_id, profile_id, `key`, email, date) VALUES (:account_id, :profile_id, :keyvalue, :email, :date)", $aBindings);
-        return (int)$this->lastId();
+        return $this->query("INSERT INTO `{$this->_sTableInvites}` SET " . $this->arrayToSQL($aInvite)) !== false ? (int)$this->lastId() : false;
     }
 
     public function getRequests($aParams, $bReturnCount = false)

+ 24 - 6
modules/boonex/invites/classes/BxInvModule.php

@@ -47,13 +47,19 @@ class BxInvModule extends BxDolModule
         if(!$oKeys)
             return  echoJson(array('message' => _t('_bx_invites_err_not_available')));
 
-        $sKey = $oKeys->getNewKey(false, $this->_oConfig->getKeyLifetime());
+        $sKey = $oKeys->getNewKey(false, $this->_oConfig->getKeyLifetime());       
+
+        $sRedirectUrl = '';
+        $sRedirectCode = $this->_oConfig->getRedirectCode();
+        if(($oSession = BxDolSession::getInstance()) && $oSession->isValue($sRedirectCode))
+            $sRedirectUrl = $oSession->getValue($sRedirectCode);
 
         $oForm = $this->getFormObjectInvite();
         $oForm->insert(array(
             'account_id' => $iAccountId,
             'profile_id' => $iProfileId,
             'key' => $sKey,
+            'redirect' => $sRedirectUrl,
             'email' => '',
             'date' => time()
         ));
@@ -123,7 +129,7 @@ class BxInvModule extends BxDolModule
     /** 
      * @ref bx_invites-get_block_invite "get_block_invite"
      */
-    public function serviceGetBlockInvite()
+    public function serviceGetBlockInvite($bRedirect = false)
     {
         $iProfileId = $this->getProfileId();
         $iAccountId = $this->getAccountId($iProfileId);
@@ -135,9 +141,9 @@ class BxInvModule extends BxDolModule
         if(!isAdmin($iAccountId) && $this->_oConfig->getCountPerUser() <= 0)
             return '';
 
-        return array(
-            'content' => $this->_oTemplate->getBlockInvite($iAccountId, $iProfileId)
-        );
+        return [
+            'content' => $this->_oTemplate->getBlockInvite($iAccountId, $iProfileId, (bool)$bRedirect)
+        ];
     }
 
     /**
@@ -379,6 +385,11 @@ class BxInvModule extends BxDolModule
 
         $iKeyLifetime = $this->_oConfig->getKeyLifetime();
 
+        $sRedirectUrl = '';
+        $sRedirectCode = $this->_oConfig->getRedirectCode();
+        if(($oSession = BxDolSession::getInstance()) && $oSession->isValue($sRedirectCode))
+            $sRedirectUrl = $oSession->getValue($sRedirectCode);
+
         $sEmailTemplate = '';
         switch($sType) {
             case BX_INV_TYPE_FROM_MEMBER:
@@ -408,7 +419,14 @@ class BxInvModule extends BxDolModule
 
             $sKey = $oKeys->getNewKey(false, $iKeyLifetime);
             if(sendMail($sEmail, $aMessage['Subject'], $aMessage['Body'], 0, array('join_url' => $this->getJoinLink($sKey), 'seen_image_url' => $this->getSeenImageUrl($sKey)), BX_EMAIL_SYSTEM)) {
-                $iInviteId = (int)$this->_oDb->insertInvite($iAccountId, $iProfileId, $sKey, $sEmail, $iDate);
+                $iInviteId = (int)$this->_oDb->insertInvite([
+                    'account_id' => $iAccountId, 
+                    'profile_id' => $iProfileId, 
+                    'key' => $sKey, 
+                    'redirect' => $sRedirectUrl,
+                    'email' => $sEmail, 
+                    'date' => $iDate
+                ]);
 
                 $this->onInvite($iProfileId);
 

+ 17 - 2
modules/boonex/invites/classes/BxInvResponse.php

@@ -38,8 +38,22 @@ class BxInvResponse extends BxDolAlertsResponse
 
     protected function _processAccountAddForm($oAlert)
     {
-        $sCode = $this->_oModule->serviceAccountAddFormCheck();
-        if($sCode)
+        if(!($sCode = $this->_oModule->serviceAccountAddFormCheck())) {
+            $sKeyCode = $this->_oModule->_oConfig->getKeyCode();
+            $sKeyValue = BxDolSession::getInstance()->getValue($sKeyCode);
+
+            $aInvite = $this->_oModule->_oDb->getInvites(['type' => 'by_key', 'key' => $sKeyValue]);
+            if(!empty($aInvite) && is_array($aInvite) && !empty($aInvite['redirect'])) {
+                $oAlert->aExtras['form_object']->aInputs['relocate'] = [
+                    'name' => 'relocate',
+                    'type' => 'hidden',
+                    'value' => BxDolPermalinks::getInstance()->permalink($aInvite['redirect'])
+                ];
+
+                $oAlert->aExtras['form_code'] = $oAlert->aExtras['form_object']->getCode();
+            }
+        }
+        else
             $oAlert->aExtras['form_code'] = $sCode;
     }
 
@@ -49,6 +63,7 @@ class BxInvResponse extends BxDolAlertsResponse
         $sKey = BxDolSession::getInstance()->getUnsetValue($sKeyCode);
         if($sKey === false)
             return;
+
         $this->_oModule->attachAccountIdToInvite($oAlert->iObject, $sKey);
         
         $sKeysToRemove = $this->_oModule->_oDb->getInvites(array('type' => 'invites_code_by_single', 'value' => $sKey));

+ 18 - 6
modules/boonex/invites/classes/BxInvTemplate.php

@@ -60,22 +60,34 @@ class BxInvTemplate extends BxBaseModGeneralTemplate
         return $this->parseHtmlByName('invite_info.html', $aVars);
     }
     
-    public function getBlockInvite($iAccountId, $iProfileId)
+    public function getBlockInvite($iAccountId, $iProfileId, $bRedirect = false)
     {
         $mInvitesRemain = $this->_oConfig->getCountPerUser();
-		if ($mInvitesRemain === true)
-			$mInvitesRemain = _t('_bx_invites_txt_unlimited');
-           
+        if($mInvitesRemain === true)
+            $mInvitesRemain = _t('_bx_invites_txt_unlimited');
+
         $sUrl = bx_absolute_url(BxDolPermalinks::getInstance()->permalink($this->_oConfig->CNF['URL_INVITE']));
 
+        if($bRedirect) {
+            $sRedirectCode = $this->_oConfig->getRedirectCode();
+
+            list($sPageLink, $aPageParams) = bx_get_base_url_inline();
+            $sRedirectValue = bx_append_url_params($sPageLink, $aPageParams);
+
+            $oSession = BxDolSession::getInstance();
+            if($oSession->isValue($sRedirectCode))
+                $oSession->unsetValue($sRedirectCode);
+            $oSession->setValue($sRedirectCode, $sRedirectValue);
+        }
+
         $this->getCssJs();
-        return $this->parseHtmlByName('block_invite.html', array(
+        return $this->parseHtmlByName('block_invite.html', [
             'style_prefix' => $this->_oConfig->getPrefix('style'),
             'js_object' => $this->_oConfig->getJsObject('main'),
             'text' => _t('_bx_invites_txt_invite_block_text', $mInvitesRemain),
             'url' => $sUrl,
             'js_code' => $this->getJsCode('main')
-        ));
+        ]);
     }
 
     public function getBlockRequest()

+ 1 - 0
modules/boonex/invites/install/sql/install.sql

@@ -7,6 +7,7 @@ CREATE TABLE IF NOT EXISTS `bx_inv_invites` (
   `account_id` int(11) NOT NULL,
   `profile_id` int(11) NOT NULL,
   `key` varchar(128) NOT NULL,
+  `redirect` varchar(255) NOT NULL default '',
   `email` varchar(128) NOT NULL,
   `date` int(11) NOT NULL default '0',
   `date_seen` int(11) DEFAULT NULL,