Просмотр исходного кода

Ticket #5135 - Show all invites to contexts in one place.

AntonLV 1 год назад
Родитель
Сommit
b579cdcba4

+ 2 - 1
install/sql/system.sql

@@ -6165,8 +6165,9 @@ INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title_system`, `
 
 ('', 0, 'system', '_sys_page_block_title_sys_recom_friends', '_sys_page_block_title_recom_friends', 11, 1, 0, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:30:"browse_recommendations_friends";s:6:"params";a:0:{}s:5:"class";s:20:"TemplServiceProfiles";}', 0, 1, 1, @iBlockOrder + 6),
 ('', 0, 'system', '_sys_page_block_title_sys_recom_subscriptions', '_sys_page_block_title_recom_subscriptions', 11, 1, 0, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:36:"browse_recommendations_subscriptions";s:6:"params";a:0:{}s:5:"class";s:20:"TemplServiceProfiles";}', 0, 1, 1, @iBlockOrder + 7),
+('', 0, 'system', '_sys_page_block_title_sys_invitations', '_sys_page_block_title_invitations', 11, 1, 0, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:18:"browse_invitations";s:6:"params";a:0:{}s:5:"class";s:20:"TemplServiceProfiles";}', 0, 1, 1, @iBlockOrder + 8),
 
-('', 0, 'system', '_sys_page_block_title_sys_ask_aqssistant', '_sys_page_block_title_ask_aqssistant', 11, 0, 0, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:23:"get_block_ask_assistant";s:6:"params";a:1:{i:0;a:0:{}}s:5:"class";s:13:"TemplServices";}', 0, 1, 1, @iBlockOrder + 8);
+('', 0, 'system', '_sys_page_block_title_sys_ask_aqssistant', '_sys_page_block_title_ask_aqssistant', 11, 0, 0, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:23:"get_block_ask_assistant";s:6:"params";a:1:{i:0;a:0:{}}s:5:"class";s:13:"TemplServices";}', 0, 1, 1, @iBlockOrder + 9);
 
 -- content blocks
 INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `tabs`, `async`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `active_api`, `order`) VALUES

+ 3 - 44
modules/base/general/classes/BxBaseModGeneralModule.php

@@ -3699,50 +3699,9 @@ class BxBaseModGeneralModule extends BxDolModule
     /**
      * Shows a list of profiles.
      */
-    protected function _serviceBrowseQuick($aProfiles, $iStart = 0, $iLimit = 4, $aAdditionalParams = array())
-    {
-        // get paginate object
-        $oPaginate = new BxTemplPaginate(array(
-            'on_change_page' => "return !loadDynamicBlockAutoPaginate(this, '{start}', '{per_page}', " . bx_js_string(json_encode($aAdditionalParams)) . ");",
-            'num' => count($aProfiles),
-            'per_page' => $iLimit,
-            'start' => $iStart,
-        ));
-
-        // remove last item from connection array, because we've got one more item for pagination calculations only
-        if (count($aProfiles) > $iLimit)
-            array_pop($aProfiles);
-
-        // get profiles HTML
-        $s = '';
-        foreach ($aProfiles as $mixedProfile) {
-            $bProfile = is_array($mixedProfile);
-
-            $oProfile = BxDolProfile::getInstance($bProfile ? (int)$mixedProfile['id'] : (int)$mixedProfile);
-            if(!$oProfile)
-                continue;
-
-            $aUnitParams = array('template' => array('name' => 'unit', 'size' => 'thumb'));
-            if(BxDolModule::getInstance($oProfile->getModule()) instanceof BxBaseModGroupsModule)
-                $aUnitParams['template']['name'] = 'unit_wo_cover';
-
-            if($bProfile && is_array($mixedProfile['info']))
-                $aUnitParams['template']['vars'] = $mixedProfile['info'];
-
-            $s .= $oProfile->getUnit(0, $aUnitParams);
-        }
-
-        $aTmplVarsPaginate = [];
-        if($iStart || $oPaginate->getNum() > $iLimit)
-            $aTmplVarsPaginate = ['paginate' => $oPaginate->getSimplePaginate()];
-
-        return $this->_oTemplate->parseHtmlByName('browse_quick.html', array(
-            'code' => $s,
-            'bx_if:show_paginate' => [
-                'condition' => !empty($aTmplVarsPaginate),
-                'content' => $aTmplVarsPaginate
-            ]
-        ));
+    protected function _serviceBrowseQuick($aProfiles, $iStart = 0, $iLimit = 4, $aAdditionalParams = [])
+    {
+        return bx_srv('system', 'browse_quick', [$aProfiles, $iStart, $iLimit, ['additional_params' => $aAdditionalParams]], 'TemplServiceProfiles');
     }
 
     // ====== COMMON METHODS

+ 2 - 0
modules/boonex/english/data/langs/system/en.xml

@@ -3612,6 +3612,8 @@ If it is not enabled then please consider implement this optimization, since it
     <string name="_sys_page_block_title_recom_friends"><![CDATA[Friend Suggestions]]></string>
     <string name="_sys_page_block_title_sys_recom_subscriptions"><![CDATA[Recommended Subscriptions]]></string>
     <string name="_sys_page_block_title_recom_subscriptions"><![CDATA[Who to follow]]></string>
+    <string name="_sys_page_block_title_sys_invitations"><![CDATA[Invitations]]></string>
+    <string name="_sys_page_block_title_invitations"><![CDATA[Invitations]]></string>
     <string name="_sys_page_block_title_sys_create_post"><![CDATA[Create Post]]></string>
     <string name="_sys_page_block_title_create_post"><![CDATA[Add new...]]></string>
     <string name="_sys_page_block_title_sys_create_post_context"><![CDATA[Create Post (Context)]]></string>

+ 2 - 0
modules/boonex/russian/data/langs/system/ru.xml

@@ -3573,6 +3573,8 @@
         <string name="_sys_page_block_title_recom_friends"><![CDATA[С кем дружить]]></string>
         <string name="_sys_page_block_title_sys_recom_subscriptions"><![CDATA[Рекомендуемые подписки]]></string>
         <string name="_sys_page_block_title_recom_subscriptions"><![CDATA[На кого подписаться]]></string>
+        <string name="_sys_page_block_title_sys_invitations"><![CDATA[Приглашения]]></string>
+        <string name="_sys_page_block_title_invitations"><![CDATA[Приглашения]]></string>
         <string name="_sys_page_block_title_sys_create_post"><![CDATA[Создать публикацию]]></string>
 	<string name="_sys_page_block_title_create_post"><![CDATA[Добавить...]]></string>
 	<string name="_sys_page_block_title_sys_create_post_context"><![CDATA[Создать публикацию (в контекст)]]></string>

+ 0 - 0
modules/base/general/template/browse_quick.html → template/profiles_browse_quick.html


+ 72 - 7
template/scripts/BxBaseProfileSearchResult.php

@@ -91,8 +91,10 @@ class BxBaseProfileSearchResult extends BxTemplSearchResult
                     'profile2' => 0
                 ]);
                 
-                if (!$this->_setConnectionsConditions($aParams)) 
+                if(!$this->_setConnectionsConditions($aParams)) {
+                    $this->isError = true;
                     break;
+                }
 
                 $this->aCurrent = array_merge($this->aCurrent, [
                     'title' => _t('_sys_page_title_browse_connections', BxDolProfile::getInstanceMagic($aParams['profile'])->getDisplayName()),
@@ -108,8 +110,10 @@ class BxBaseProfileSearchResult extends BxTemplSearchResult
                     'profile2' => 0
                 ]);
                 
-                if (!$this->_setConnectionsConditions($aParams)) 
+                if(!$this->_setConnectionsConditions($aParams)) {
+                    $this->isError = true;
                     break;
+                }
 
                 $this->aCurrent = array_merge($this->aCurrent, [
                     'title' => _t('_sys_page_title_browse_connections', BxDolProfile::getInstanceMagic($aParams['profile'])->getDisplayName()),
@@ -125,8 +129,10 @@ class BxBaseProfileSearchResult extends BxTemplSearchResult
                     'profile2' => 0
                 ]);
                 
-                if (!$this->_setConnectionsConditions($aParams)) 
+                if(!$this->_setConnectionsConditions($aParams)) {
+                    $this->isError = true;
                     break;
+                }
 
                 $this->aCurrent = array_merge($this->aCurrent, [
                     'title' => _t('_sys_page_title_browse_connections', BxDolProfile::getInstanceMagic($aParams['profile'])->getDisplayName()),
@@ -142,8 +148,10 @@ class BxBaseProfileSearchResult extends BxTemplSearchResult
                     'profile2' => 0
                 ]);
 
-                if (!$this->_setConnectionsConditions($aParams)) 
+                if(!$this->_setConnectionsConditions($aParams)) {
+                    $this->isError = true;
                     break;
+                }
 
                 $this->aCurrent = array_merge($this->aCurrent, [
                     'title' => _t('_sys_page_title_browse_connections', BxDolProfile::getInstanceMagic($aParams['profile'])->getDisplayName()),
@@ -159,8 +167,10 @@ class BxBaseProfileSearchResult extends BxTemplSearchResult
                     'profile2' => 0
                 ]);
 
-                if (!$this->_setConnectionsConditions($aParams)) 
+                if(!$this->_setConnectionsConditions($aParams)) {
+                    $this->isError = true;
                     break;
+                }
 
                 $this->aCurrent = array_merge($this->aCurrent, [
                     'title' => _t('_sys_page_title_browse_connections', BxDolProfile::getInstanceMagic($aParams['profile'])->getDisplayName()),
@@ -175,8 +185,10 @@ class BxBaseProfileSearchResult extends BxTemplSearchResult
                     'profile2' => 0
                 ]);
 
-                if (!$this->_setConnectionsConditions($aParams)) 
+                if(!$this->_setConnectionsConditions($aParams)) {
+                    $this->isError = true;
                     break;
+                }
 
                 $this->aCurrent = array_merge($this->aCurrent, [
                     'title' => _t('_sys_page_title_browse_connections', BxDolProfile::getInstanceMagic($aParams['profile'])->getDisplayName()),
@@ -185,8 +197,10 @@ class BxBaseProfileSearchResult extends BxTemplSearchResult
                 break;
 
             case 'connections':
-                if (!$this->_setConnectionsConditions($aParams)) 
+                if(!$this->_setConnectionsConditions($aParams)) {
+                    $this->isError = true;
                     break;
+                }
 
                 $oProfile = BxDolProfile::getInstance($aParams['profile']);
                 $oProfile2 = isset($aParams['profile2']) ? BxDolProfile::getInstance($aParams['profile2']) : null;
@@ -199,6 +213,18 @@ class BxBaseProfileSearchResult extends BxTemplSearchResult
 
                 $this->aCurrent['api_request_url'] = '/api.php?r=system/browse_connections/TemplServiceProfiles&params[]=' . $aParams['profile'] . '&params[]=';
                 break;
+
+            case 'invitations':
+                if(!$this->_setInvitationsConditions($aParams)) {
+                    $this->isError = true;
+                    break;
+                }
+
+                if(($oProfile = BxDolProfile::getInstance($aParams['profile'])) !== false)
+                    $this->aCurrent['title'] = _t('_sys_page_title_browse_invitations', $oProfile->getDisplayName());
+
+                $this->aCurrent['api_request_url'] = '/api.php?r=system/browse_invitations/TemplServiceProfiles&params[]=' . $aParams['profile'] . '&params[]=';
+                break;
         }
     }
 
@@ -229,6 +255,7 @@ class BxBaseProfileSearchResult extends BxTemplSearchResult
                 return ['order' => ' ORDER BY `sys_accounts`.`logged` DESC '];
 
             case 'last_connected':
+            case 'last_invited':
                 return ['order' => ' ORDER BY `' . $this->aCurrent['sorting']['table'] . '`.`added` DESC '];
 
             case 'last':
@@ -275,6 +302,44 @@ class BxBaseProfileSearchResult extends BxTemplSearchResult
 
         return true;
     }
+
+    protected function _setInvitationsConditions ($aParams)
+    {
+        if(empty($aParams['profile']) || empty($aParams['module']))
+            return false;
+
+        $oModule = BxDolModule::getInstance($aParams['module']);
+        if(!$oModule || empty($oModule->_oConfig->CNF['TABLE_INVITES']))
+            return false;
+
+        $sKey = 'invitations_' . $aParams['module'];
+        $sTable = $oModule->_oConfig->CNF['TABLE_INVITES'];
+
+        $this->aCurrent['tableSearch'] = $sTable;
+        $this->aCurrent['ident'] = 'group_profile_id';
+
+        $this->aCurrent['restriction']['perofileType']['value'] = '';
+        $this->aCurrent['restriction'][$sKey] = [
+            'value' => (int)$aParams['profile'],
+            'table' => $sTable,
+            'field' => 'invited_profile_id',
+            'operator' => '='
+        ];
+        $this->aCurrent['join'][$sKey] = [
+            'type' => 'INNER',
+            'table' => $oModule->_oConfig->CNF['TABLE_INVITES'],
+            'mainField' => 'id',
+            'onField' => 'group_profile_id',
+            'joinFields' => []
+        ];
+
+        $this->aCurrent['sorting'] = [
+            'type' => 'last_invited',
+            'table' => $sTable
+        ];
+
+        return true;
+    }
 }
 
 /** @} */

+ 135 - 0
template/scripts/BxBaseServiceProfiles.php

@@ -878,6 +878,141 @@ class BxBaseServiceProfiles extends BxDol
         return $this->_serviceBrowseConnections('connections', $aParamsBrowse, $aParams['design_box'], $aParams['empty_message'], $aParams['ajax_paginate']);
     }
 
+    public function serviceBrowseInvitations ($iProfileId = 0, $aParams = [])
+    {
+        $sMode = 'invitations';
+
+        if($this->_bIsApi)
+            $aParams = bx_api_get_browse_params($aParams);
+
+        if(!$iProfileId)
+            $iProfileId = bx_get_logged_profile_id();
+        if(!$iProfileId)
+            return '';
+        
+        $aParams = array_merge([
+            'params' => false,
+            'design_box' => BX_DB_PADDING_DEF,
+            'empty_message' => false,
+            'ajax_paginate' => true,
+        ], $aParams);
+
+        $aParamsBrowse = [
+            'profile' => $iProfileId, 
+        ];
+        if(!empty($aParams['params']) && is_array($aParams['params']))
+            $aParamsBrowse = array_merge($aParamsBrowse, $aParams['params']);
+
+        $aModules = [];
+        if(empty($aParamsBrowse['modules']) || !is_array($aParamsBrowse['modules'])) {
+            $aModules = bx_srv('system', 'get_modules_by_type', ['context', ['name_as_key' => true]]);
+            if(!empty($aModules) && is_array($aModules))
+                $aModules = array_keys($aModules);
+        }
+        else
+            $aModules = $aParamsBrowse['modules'];
+
+        $aData = $this->_bIsApi ? ['queries' => [], 'limit' => ''] : [];
+        foreach($aModules as $sModule) {
+            $o = new BxTemplProfileSearchResult($sMode, array_merge($aParamsBrowse, ['module' => $sModule]));
+            $o->setDesignBoxTemplateId($aParams['design_box']);
+            $o->setDisplayEmptyMsg($aParams['empty_message']);
+            $o->setAjaxPaginate($aParams['ajax_paginate']);
+            $o->setUnitParams(['context' => $sMode]);
+
+            if($o->isError)
+                continue;
+
+            if($this->_bIsApi) {
+                $aQuery = $o->getSearchQuery($sModule);
+
+                if(!empty($aQuery['query']))
+                    $aData['queries'][] = $aQuery['query'];
+                if(!empty($aQuery['limit']) && empty($aData['limit']))
+                    $aData['limit'] = $aQuery['limit'];
+            }
+            else
+                $aData = array_merge($aData, $o->getSearchData());
+        }
+ 
+        if($this->_bIsApi) {
+            $aItems = BxDolDb::getInstance()->getAll('(' . implode(') UNION (', $aData['queries']) . ') ORDER BY `added` DESC ' . $aData['limit']);
+
+            $aDataApi = [];
+            foreach($aItems as $aItem)
+                $aDataApi[] = BxDolProfile::getData($aItem['id']);
+
+            return [bx_api_get_block('browse', [
+                'module' => 'system',
+                'unit' => 'mixed',
+                'request_url' => '/api.php?r=system/browse_invitations/TemplServiceProfiles&params[]=' . $iProfileId . '&params[]=',
+                'data' =>  $aDataApi,
+                'params' => $aParamsBrowse
+            ])];
+        }
+        else
+            return $this->serviceBrowseQuick($aData, 0, 0, [
+                'unit_params' => isset($aParams['unit_params']) ? $aParams['unit_params'] : false
+            ]);
+    }
+
+    public function serviceBrowseQuick($aProfiles, $iStart = 0, $iLimit = 0, $aParams = [])
+    {
+        $sCode = $sPaginate = '';
+
+        if($iLimit) {
+            $aAdditionalParams = isset($aParams['additional_params']) ? $aParams['additional_params'] : [];
+
+            $oPaginate = new BxTemplPaginate([
+                'on_change_page' => "return !loadDynamicBlockAutoPaginate(this, '{start}', '{per_page}', " . bx_js_string(json_encode($aAdditionalParams)) . ");",
+                'num' => count($aProfiles),
+                'per_page' => $iLimit,
+                'start' => $iStart,
+            ]);
+
+            /* 
+             * Remove last item from connection array, because we've got one more item for pagination calculations only
+             */
+            if(count($aProfiles) > $iLimit)
+                array_pop($aProfiles);
+
+            if($iStart || $oPaginate->getNum() > $iLimit)
+                $sPaginate = $oPaginate->getSimplePaginate();
+        }
+
+        $bUnitParams = !empty($aParams['unit_params']) && is_array($aParams['unit_params']);
+
+        foreach ($aProfiles as $mixedProfile) {
+            $bProfile = is_array($mixedProfile);
+
+            $oProfile = BxDolProfile::getInstance($bProfile ? (int)$mixedProfile['id'] : (int)$mixedProfile);
+            if(!$oProfile)
+                continue;
+
+            $aUnitParams = ['template' => ['name' => 'unit', 'size' => 'thumb']];
+            if(BxDolModule::getInstance($oProfile->getModule()) instanceof BxBaseModGroupsModule)
+                $aUnitParams['template']['name'] = 'unit_wo_cover';
+
+            if($bProfile && !empty($mixedProfile['info']) && is_array($mixedProfile['info']))
+                $aUnitParams['template']['vars'] = $mixedProfile['info'];
+
+            if($bUnitParams)
+                $aUnitParams = array_merge($aUnitParams, $aParams['unit_params']);
+
+            $sCode .= $oProfile->getUnit(0, $aUnitParams);
+        }
+
+        return BxDolTemplate::getInstance()->parseHtmlByName('profiles_browse_quick.html', [
+            'code' => $sCode,
+            'bx_if:show_paginate' => [
+                'condition' => !empty($sPaginate),
+                'content' => [
+                    'paginate' => $sPaginate
+                ]
+            ]
+        ]);
+    }
+
     public function serviceBrowseRecommendationsFriends ($iProfileId = 0, $aParams = [])
     {
         if($this->_bIsApi)