Procházet zdrojové kódy

Ticket #5033 - Connections flow improvements. Fans.

AntonLV před 1 rokem
rodič
revize
ff134111e9

+ 100 - 0
modules/base/groups/classes/BxBaseModGroupsConnectionFans.php

@@ -29,6 +29,12 @@ class BxBaseModGroupsConnectionFans extends BxTemplConnection
 
         $this->_bBan = false;
         $this->_oBanConnection = null;
+
+        $this->_aT = array_merge($this->_aT, [
+            'do_initiator' => $this->_getLKey('menu_item_title_sm_membership'),
+            'do_content' => $this->_getLKey('menu_item_title_sm_membership_respond'),
+            'counter' => $this->_getLKey('menu_item_title_sm_members')
+        ]);
     }
 
     public function init()
@@ -222,6 +228,100 @@ class BxBaseModGroupsConnectionFans extends BxTemplConnection
         return parent::_checkAllowedConnectContent($oContent);
     }
 
+    protected function _getActions($iInitiator, $iContent, $aParams = [])
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+        
+        $sName = $sTitle = '';
+        $aActions = [];
+
+        if($this->isConnectedNotMutual($iInitiator, $iContent)) {
+            $aActions = [[
+                'name' => 'remove',
+                'title' => $this->_getLKey('menu_item_title_sm_leave_cancel')
+            ]];
+        }
+        else if($this->isConnectedNotMutual($iContent, $iInitiator)) {
+            $sName = 'add';
+            $sTitle = $this->_aT['do_content'];
+            $aActions = [[
+                'name' => 'add',
+                'title' => $this->_getLKey('menu_item_title_sm_join_confirm')
+            ], [
+                'name' => 'remove',
+                'title' => $this->_getLKey('menu_item_title_sm_leave_reject')
+            ]];
+        }
+        else if($this->isConnected($iInitiator, $iContent, true)) {
+            $sName = 'default';
+            $sTitle = $this->_aT['do_initiator'];
+            $aActions = [[
+                'name' => 'remove',
+                'title' => $this->_getLKey('menu_item_title_sm_leave')
+            ], [
+                /*
+                 * An empty array item to show all items in popup.
+                 * More actions will be added later.
+                 */
+            ]];
+        }
+        else
+            $aActions = [[
+                'name' => 'add',
+                'title' => $this->_getLKey('menu_item_title_sm_join')
+            ]];
+
+        return [
+            'name' => $sName,
+            'title' => $sTitle,
+            'items' => $aActions
+        ];
+    }
+
+    protected function _getActionIconAsIcon($sAction)
+    {
+        $sDefault = 'users';
+
+        $aA2I = [
+            'add' => 'sign-in-alt',
+            'remove' => 'sign-out-alt'
+        ];
+
+        return isset($aA2I[$sAction]) ? $aA2I[$sAction] : $sDefault;
+    }
+
+    protected function _getActionIconAsEmoji($sAction)
+    {
+        $sDefault = '🔄';
+
+        $aA2I = [
+            'add' => '✅️️',
+            'remove' => '❎'
+        ];
+
+        return isset($aA2I[$sAction]) ? $aA2I[$sAction] : $sDefault;
+    }
+
+    protected function _getActionIconAsImage($sAction)
+    {
+        $sDefault = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-users-round-icon lucide-users-round"><path d="M18 21a8 8 0 0 0-16 0"/><circle cx="10" cy="8" r="5"/><path d="M22 20c0-3.37-2-6.5-4-8a5 5 0 0 0-.45-8.3"/></svg>';
+
+        $aA2I = [
+            'add' => '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-log-in-icon lucide-log-in"><path d="m10 17 5-5-5-5"/><path d="M15 12H3"/><path d="M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4"/></svg>',
+            'remove' => '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-log-out-icon lucide-log-out"><path d="m16 17 5-5-5-5"/><path d="M21 12H9"/><path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"/></svg>'
+        ];
+
+        return isset($aA2I[$sAction]) ? $aA2I[$sAction] : $sDefault;
+    }
+
+    protected function _getLKey($sKey, $bTranslate = false)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        $sLKey = !empty($CNF['T'][$sKey]) ? $CNF['T'][$sKey] : '_sys_' . $sKey;
+        return $bTranslate ? _t($sLKey) : $sLKey;
+    }
+
     protected function _getTriggerObject($sType, $iInitiator, $iContent)
     {
         if(($oInitiator = BxDolProfile::getInstance($iInitiator)) !== false && ($sModule = $oInitiator->getModule()))

+ 13 - 0
modules/base/groups/classes/BxBaseModGroupsMenuViewActionsAll.php

@@ -22,6 +22,7 @@ class BxBaseModGroupsMenuViewActionsAll extends BxBaseModProfileMenuViewActionsA
         
         if(isset($CNF['OBJECT_CONNECTIONS']))
             $this->_aConnectionToFunctionCheck[$CNF['OBJECT_CONNECTIONS']] = [
+                'fans' => 'checkAllowedFans', 
                 'add' => 'checkAllowedFanAdd', 
                 'remove' => 'checkAllowedFanRemove'
             ];
@@ -32,6 +33,18 @@ class BxBaseModGroupsMenuViewActionsAll extends BxBaseModProfileMenuViewActionsA
         return parent::_isContentPublic($iContentId, [BX_DOL_PG_ALL, BX_DOL_PG_MEMBERS, 'c']);
     }
 
+    protected function _getMenuItemProfileFans($aItem, $aParams = [])
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(empty($CNF['OBJECT_CONNECTIONS']))
+            return false;
+
+        return $this->_getMenuItemConnection($aItem, array_merge($aParams, [
+            'object' => $CNF['OBJECT_CONNECTIONS']
+        ]));
+    }
+
     protected function _getMenuItemProfileFanAdd($aItem)
     {
         $CNF = &$this->_oModule->_oConfig->CNF;

+ 8 - 0
modules/base/groups/classes/BxBaseModGroupsModule.php

@@ -1867,6 +1867,14 @@ class BxBaseModGroupsModule extends BxBaseModProfileModule
         return parent::checkAllowedCompose ($aDataEntry, $isPerformAction);
     }
 
+    public function checkAllowedFans(&$aDataEntry, $isPerformAction = false)
+    {
+        if(($sMsg = $this->checkAllowedView($aDataEntry)) !== CHECK_ACTION_RESULT_ALLOWED)
+            return $sMsg;
+
+        return CHECK_ACTION_RESULT_ALLOWED;
+    }
+
     /**
      * @return CHECK_ACTION_RESULT_ALLOWED if access is granted or error message if access is forbidden.
      */

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

@@ -2500,8 +2500,6 @@ If it is not enabled then please consider implement this optimization, since it
     <string name="_sys_conn_relations_do_initiator"><![CDATA[Add Relationship]]></string>
     <string name="_sys_conn_relations_do_initiator_done"><![CDATA[Relations]]></string>
     <string name="_sys_conn_relations_do_initiator_undo"><![CDATA[Remove Relationship]]></string>
-    <string name=""><![CDATA[]]></string>
-    <string name=""><![CDATA[]]></string>
     <string name="_sys_conn_err_connection_already_exists"><![CDATA[Connection already exists]]></string>
     <string name="_sys_conn_err_connection_does_not_exists"><![CDATA[Connection doesn't exist]]></string>
     <string name="_sys_conn_err_connection_is_awaiting_confirmation"><![CDATA[Connection request is awaiting confirmation]]></string>
@@ -3277,6 +3275,7 @@ If it is not enabled then please consider implement this optimization, since it
     <string name="_sys_menu_item_title_sm_friends_mutual"><![CDATA[{0} mutual friends]]></string>
     <string name="_sys_menu_item_title_sm_members"><![CDATA[{0} members]]></string>
     <string name="_sys_menu_item_title_sm_membership"><![CDATA[Membership]]></string>
+    <string name="_sys_menu_item_title_sm_membership_respond"><![CDATA[Respond a fan]]></string>
     <string name="_sys_menu_item_title_sm_subscribers"><![CDATA[{0} followers]]></string>
     <string name="_sys_menu_item_title_sm_relations"><![CDATA[{0} relations]]></string>
     <string name="_sys_menu_item_title_sm_country"><![CDATA[Country]]></string>

+ 2 - 0
modules/boonex/groups/install/langs/en.xml

@@ -282,6 +282,7 @@
     <string name="_bx_groups_menu_item_title_unfriend_cancel_request"><![CDATA[Cancel friend request]]></string>
     <string name="_bx_groups_menu_item_title_unfriend_reject_request"><![CDATA[Reject friend request]]></string>
 
+    <string name="_bx_groups_menu_item_title_system_fans"><![CDATA[Fans]]></string>
     <string name="_bx_groups_menu_item_title_system_become_fan"><![CDATA[Join Group]]></string>
     <string name="_bx_groups_menu_item_title_become_fan"><![CDATA[Join Group]]></string>
     <string name="_bx_groups_menu_item_title_become_fan_sent"><![CDATA[Join Group (requested)]]></string>
@@ -294,6 +295,7 @@
     <string name="_bx_groups_menu_item_title_system_pay_and_join"><![CDATA[Pay & Join]]></string>
     <string name="_bx_groups_menu_item_title_pay_and_join"><![CDATA[Pay & Join]]></string>
 
+    <string name="_bx_groups_menu_item_title_system_subscriptions"><![CDATA[Following]]></string>
     <string name="_bx_groups_menu_item_title_system_subscribe"><![CDATA[Follow]]></string>
     <string name="_bx_groups_menu_item_title_subscribe"><![CDATA[Follow]]></string>
     <string name="_bx_groups_menu_item_title_system_unsubscribe"><![CDATA[Unfollow]]></string>

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

@@ -278,6 +278,7 @@
     <string name="_bx_groups_menu_item_title_unfriend_cancel_request"><![CDATA[Отменить запрос о дружбе]]></string>
     <string name="_bx_groups_menu_item_title_unfriend_reject_request"><![CDATA[Отвергнуть запрос о дружбе]]></string>
 
+    <string name="_bx_groups_menu_item_title_system_fans"><![CDATA[Участники]]></string>
     <string name="_bx_groups_menu_item_title_system_become_fan"><![CDATA[Присоединиться]]></string>
     <string name="_bx_groups_menu_item_title_become_fan"><![CDATA[Присоединиться]]></string>
     <string name="_bx_groups_menu_item_title_become_fan_sent"><![CDATA[Присоединение запрошено]]></string>
@@ -290,6 +291,7 @@
     <string name="_bx_groups_menu_item_title_system_pay_and_join"><![CDATA[Оплатить и присоединиться]]></string>
     <string name="_bx_groups_menu_item_title_pay_and_join"><![CDATA[Оплатить и присоединиться]]></string>
 
+    <string name="_bx_groups_menu_item_title_system_subscriptions"><![CDATA[Подписки]]></string>
     <string name="_bx_groups_menu_item_title_system_subscribe"><![CDATA[Получать уведомления]]></string>
     <string name="_bx_groups_menu_item_title_subscribe"><![CDATA[Получать уведомления]]></string>
     <string name="_bx_groups_menu_item_title_system_unsubscribe"><![CDATA[Отключить уведомления]]></string>

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

@@ -2475,8 +2475,6 @@
     <string name="_sys_conn_relations_do_initiator"><![CDATA[Добавить связь]]></string>
     <string name="_sys_conn_relations_do_initiator_done"><![CDATA[Отношения]]></string>
     <string name="_sys_conn_relations_do_initiator_undo"><![CDATA[Удалить связь]]></string>
-    <string name=""><![CDATA[]]></string>
-    <string name=""><![CDATA[]]></string>
     <string name="_sys_conn_err_connection_already_exists"><![CDATA[Связь уже существует]]></string>
     <string name="_sys_conn_err_connection_does_not_exists"><![CDATA[Связь не существует]]></string>
     <string name="_sys_conn_err_connection_is_awaiting_confirmation"><![CDATA[Запрос на связь ожидает подтверждения]]></string>
@@ -3246,6 +3244,7 @@
     <string name="_sys_menu_item_title_sm_friends"><![CDATA[Друзья: {0}]]></string>
     <string name="_sys_menu_item_title_sm_friends_mutual"><![CDATA[Общие друзья: {0}]]></string>
     <string name="_sys_menu_item_title_sm_members"><![CDATA[Участники: {0}]]></string>
+    <string name="_sys_menu_item_title_sm_membership_respond"><![CDATA[Ответить фанату]]></string>
     <string name="_sys_menu_item_title_sm_subscribers"><![CDATA[Подписчики: {0}]]></string>
     <string name="_sys_menu_item_title_sm_relations"><![CDATA[Связи: {0}]]></string>
     <string name="_sys_menu_item_title_sm_country"><![CDATA[Страна]]></string>

+ 1 - 1
template/scripts/BxBaseConnection.php

@@ -468,7 +468,7 @@ class BxBaseConnection extends BxDolConnection
         if(!empty($aParams['use_icon_as']) && in_array($aParams['use_icon_as'], ['icon', 'emoji', 'image']))
             return $aParams['use_icon_as'];
 
-        return 'icon';
+        return 'image';
     }
 
     protected function _getTmplContentElement()

+ 1 - 1
template/scripts/BxBaseConnectionFriend.php

@@ -97,7 +97,7 @@ class BxBaseConnectionFriend extends BxDolConnectionFriend
 
     protected function _getActionIconAsImage($sAction)
     {
-        $sDefault = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-user-icon lucide-user"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>';
+        $sDefault = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-user-round-icon lucide-user-round"><circle cx="12" cy="8" r="5"/><path d="M20 21a8 8 0 0 0-16 0"/></svg>';
 
         $aA2I = [
             'add' => '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-user-round-plus-icon lucide-user-round-plus"><path d="M2 21a8 8 0 0 1 13.292-6"/><circle cx="10" cy="8" r="5"/><path d="M19 16v6"/><path d="M22 19h-6"/></svg>',