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

Ticket #4558 - Build-in API support: Connection actions.

AntonLV 2 лет назад
Родитель
Сommit
a9bc42ddc9

+ 18 - 0
inc/classes/BxDolConnection.php

@@ -183,6 +183,24 @@ class BxDolConnection extends BxDolFactory implements iBxDolFactoryObject
         return $this->_aObject['table'];
     }
 
+    /**
+     * Checks whether connection's Initiator is profile or not.
+     * return boolean.
+     */
+    public function isProfileInitiator()
+    {
+        return (int)$this->_aObject['profile_initiator'] != 0;
+    }
+
+    /**
+     * Checks whether connection's Content is profile or not.
+     * return boolean.
+     */
+    public function isProfileContent()
+    {
+        return (int)$this->_aObject['profile_content'] != 0;
+    }
+
     /**
      * Check whether connection between Initiator and Content can be established.
      */

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

@@ -63,37 +63,6 @@ class BxBaseModGroupsConnectionFans extends BxTemplConnection
 
         return $aResult;
     }
-    
-    public function getActionTitle($sAction, $iInitiatorId, $iContentId, $bFlip = false)
-    {
-        $aResult = [];
-        if($this->isConnectedNotMutual($iInitiatorId, $iContentId))
-            $aResult = [
-                'add' => '',
-                'remove' => _t('_sys_menu_item_title_sm_leave_cancel'),
-            ];
-        else if($this->isConnectedNotMutual($iContentId, $iInitiatorId))
-            $aResult = [
-                'add' => _t('_sys_menu_item_title_sm_join_confirm'),
-                'remove' => _t('_sys_menu_item_title_sm_leave_reject'),
-            ];
-        else if($this->isConnected($iInitiatorId, $iContentId, true))
-            $aResult = [
-                'add' => '',
-                'remove' => _t('_sys_menu_item_title_sm_leave'),
-            ];
-        else
-            $aResult = [
-                'add' => _t('_sys_menu_item_title_sm_join'),
-                'remove' => '',
-            ];
-
-        $aFlip = ['add' => 'remove', 'remove' => 'add'];
-        if($bFlip)
-            $sAction = $aFlip[$sAction];
-
-        return !empty($aResult[$sAction]) ? _t($aResult[$sAction]) : '';
-    }
 
     public function hasQuestionnaire($iContentProfileId)
     {

+ 11 - 23
modules/base/groups/classes/BxBaseModGroupsMenuViewActions.php

@@ -32,34 +32,22 @@ class BxBaseModGroupsMenuViewActions extends BxBaseModProfileMenuViewActions
         if(isset($CNF['OBJECT_CONNECTIONS']) && ($oConn = BxDolConnection::getObjectInstance($CNF['OBJECT_CONNECTIONS'])) !== false) {
             $iProfileId = bx_get_logged_profile_id();
             $iGroupProfileId = $this->_oProfile->id();
-            $sOnclickAddFan = "bx_conn_action(this, 'bx_events_fans', 'add', '" . $iGroupProfileId . "')";
 
-            $aMarkers = [];
-            if($oConn->isConnectedNotMutual($iProfileId, $iGroupProfileId)) {
-                if(isset($CNF['T']['menu_item_title_become_fan_sent'], $CNF['T']['menu_item_title_leave_group_cancel_request']))
-                    $aMarkers = [
-                        'title_add_fan' => _t($CNF['T']['menu_item_title_become_fan_sent']),
-                        'onclick_add_fan' => $sOnclickAddFan,
-                        'title_remove_fan' => _t($CNF['T']['menu_item_title_leave_group_cancel_request']),
-                    ];
-            }
-            else {
-                if($oConn->hasQuestionnaire($iGroupProfileId))
-                    $sOnclickAddFan = $this->_oModule->_oConfig->getJsObject('entry') . ".connAction(this, 'bx_events_fans', 'add', '" . $iGroupProfileId . "')";
-
-                if(isset($CNF['T']['menu_item_title_become_fan'], $CNF['T']['menu_item_title_leave_group']))
-                    $aMarkers = [
-                        'title_add_fan' => _t($CNF['T']['menu_item_title_become_fan']),
-                        'onclick_add_fan' => $sOnclickAddFan,
-                        'title_remove_fan' => _t($CNF['T']['menu_item_title_leave_group']),
-                    ];
-            }
-            $this->addMarkers($aMarkers);
+            $aTitles = $this->_oModule->getMenuItemTitleByConnection($CNF['OBJECT_CONNECTIONS'], '', $iGroupProfileId, $iProfileId);
+            $aMarkers = [
+                'title_add_fan' => $aTitles['add'],
+                'onclick_add_fan' => "bx_conn_action(this, 'bx_events_fans', 'add', '" . $iGroupProfileId . "')",
+                'title_remove_fan' => $aTitles['remove'],
+            ];
+            if(!$oConn->isConnectedNotMutual($iProfileId, $iGroupProfileId) && $oConn->hasQuestionnaire($iGroupProfileId))
+                $aMarkers['onclick_add_fan'] = $this->_oModule->_oConfig->getJsObject('entry') . ".connAction(this, 'bx_events_fans', 'add', '" . $iGroupProfileId . "')";
 
             if ($this->_oModule->isFan($this->_aContentInfo[$CNF['FIELD_ID']])) {
                 $a = $oConn->getConnectedInitiators($iGroupProfileId);
-                $this->addMarkers(array('recipients' => implode(',', $a)));
+                $aMarkers['recipients'] = implode(',', $a);
             }
+
+            $this->addMarkers($aMarkers);
         }
     }
 }

+ 6 - 1
modules/base/groups/classes/BxBaseModGroupsModule.php

@@ -2126,6 +2126,11 @@ class BxBaseModGroupsModule extends BxBaseModProfileModule
         return $aResult;
     }
 
+    /*
+     * TODO: Start from here!!!
+     * 
+     * https://neo.so/api.php?r=system/get_page_by_request/TemplServicePages&params[]=view-event-profile/ert&demo=1
+     */
     public function getMenuItemTitleByConnection($sConnection, $sAction, $iContentProfileId, $iInitiatorProfileId = 0)
     {
         $CNF = $this->_oConfig->getCNF();
@@ -2144,7 +2149,7 @@ class BxBaseModGroupsModule extends BxBaseModProfileModule
         $aResult = [];
         if($oConnection->isConnectedNotMutual($iInitiatorProfileId, $iContentProfileId))
             $aResult = [
-                'add' => '',
+                'add' => _t(!empty($CNF['T']['menu_item_title_sm_join_requested']) ? $CNF['T']['menu_item_title_sm_join_requested'] : '_sys_menu_item_title_sm_join_requested'),
                 'remove' => _t(!empty($CNF['T']['menu_item_title_sm_leave_cancel']) ? $CNF['T']['menu_item_title_sm_leave_cancel'] : '_sys_menu_item_title_sm_leave_cancel'),
             ];
         else if($oConnection->isConnectedNotMutual($iContentProfileId, $iInitiatorProfileId))

+ 9 - 8
modules/base/profile/classes/BxBaseModProfileMenuViewActions.php

@@ -42,18 +42,19 @@ class BxBaseModProfileMenuViewActions extends BxBaseModGeneralMenuView
         $this->_aContentInfo = $this->_oModule->_oDb->getContentInfoById($this->_iContentId);
         $this->_aProfileInfo = $this->_oProfile->getInfo();     
 
-        $this->addMarkers($this->_aProfileInfo);
-        $this->addMarkers(array(
+        $aMarkers = [
             'profile_id' => $this->_oProfile->id()
-        ));
+        ];
 
-        $aTitles = $this->_oModule->serviceGetConnectionButtonsTitles($this->_oProfile->id());
-        if($aTitles) {
-            $this->addMarkers(array(
+        $aTitles = $this->_oModule->getMenuItemTitleByConnection('sys_profiles_friends', '', $this->_oProfile->id());
+        if($aTitles) 
+            $aMarkers = array_merge($aMarkers, [
                 'title_add_friend' => $aTitles['add'],
                 'title_remove_friend' => $aTitles['remove'],
-            ));
-        }
+            ]);
+
+        $this->addMarkers($this->_aProfileInfo);
+        $this->addMarkers($aMarkers);
     }
 }
 

+ 6 - 34
modules/base/profile/classes/BxBaseModProfileModule.php

@@ -1408,39 +1408,6 @@ class BxBaseModProfileModule extends BxBaseModGeneralModule implements iBxDolCon
         return $this->_serviceGetTimelineProfileImageAllowedView($aEvent);
     }
 
-    public function serviceGetConnectionButtonsTitles($iProfileId, $sConnectionsObject = 'sys_profiles_friends')
-    {
-        if (!isLogged())
-            return array();
-
-        if (!($oConn = BxDolConnection::getObjectInstance($sConnectionsObject)))
-            return array();
-
-        $CNF = $this->_oConfig->CNF;
-
-        if ($oConn->isConnectedNotMutual(bx_get_logged_profile_id(), $iProfileId)) {
-            return array(
-                'add' => _t($CNF['T']['menu_item_title_befriend_sent']),
-                'remove' => _t($CNF['T']['menu_item_title_unfriend_cancel_request']),
-            );
-        } elseif ($oConn->isConnectedNotMutual($iProfileId, bx_get_logged_profile_id())) {
-            return array(
-                'add' => _t($CNF['T']['menu_item_title_befriend_confirm']),
-                'remove' => _t($CNF['T']['menu_item_title_unfriend_reject_request']),
-            );
-        } elseif ($oConn->isConnected($iProfileId, bx_get_logged_profile_id(), true)) {
-            return array(
-                'add' => '',
-                'remove' => _t($CNF['T']['menu_item_title_unfriend']),
-            );
-        } else {
-            return array(
-                'add' => _t($CNF['T']['menu_item_title_befriend']),
-                'remove' => '',
-            );
-        }
-    }
-
 
     // ====== PERMISSION METHODS
     /**
@@ -1625,6 +1592,11 @@ class BxBaseModProfileModule extends BxBaseModGeneralModule implements iBxDolCon
         return $o -> getSearchData();
     }
 
+    public function serviceGetMenuItemTitleByConnection($sConnection, $sAction, $iContentProfileId, $iInitiatorProfileId = 0)
+    {
+        return $this->getMenuItemTitleByConnection($sConnection, $sAction, $iContentProfileId, $iInitiatorProfileId);
+    }
+
     /**
      * @return CHECK_ACTION_RESULT_ALLOWED if access is granted or error message if access is forbidden. So make sure to make strict(===) checking.
      */
@@ -2071,7 +2043,7 @@ class BxBaseModProfileModule extends BxBaseModGeneralModule implements iBxDolCon
         $aResult = [];
         if($oConnection->isConnectedNotMutual($iInitiatorProfileId, $iContentProfileId))
             $aResult = [
-                'add' => '',
+                'add' => _t(!empty($CNF['T']['menu_item_title_befriend_sent']) ? $CNF['T']['menu_item_title_befriend_sent'] : '_sys_menu_item_title_sm_befriend_sent'),
                 'remove' => _t(!empty($CNF['T']['menu_item_title_unfriend_cancel']) ? $CNF['T']['menu_item_title_unfriend_cancel'] : '_sys_menu_item_title_sm_unfriend_cancel'),
             ];
         else if($oConnection->isConnectedNotMutual($iContentProfileId, $iInitiatorProfileId))

+ 1 - 4
modules/boonex/courses/classes/BxCoursesConfig.php

@@ -228,12 +228,9 @@ class BxCoursesConfig extends BxBaseModGroupsConfig
                 'filter_item_select_one_filter2' => '_bx_courses_grid_filter_item_title_adm_select_one_filter2',
                 'menu_item_manage_my' => '_bx_courses_menu_item_title_manage_my',
                 'menu_item_manage_all' => '_bx_courses_menu_item_title_manage_all',
-                'menu_item_title_become_fan_sent' => '_bx_courses_menu_item_title_become_fan_sent',
-                'menu_item_title_leave_group_cancel_request' => '_bx_courses_menu_item_title_leave_entry_cancel_request',
-                'menu_item_title_become_fan' => '_bx_courses_menu_item_title_become_fan',
-                'menu_item_title_leave_group' => '_bx_courses_menu_item_title_leave_entry',
                 'menu_item_title_sm_join' => '_bx_courses_menu_item_title_sm_join',
                 'menu_item_title_sm_join_paid' => '_bx_courses_menu_item_title_sm_join_paid',
+                'menu_item_title_sm_join_requested' => '_bx_courses_menu_item_title_become_fan_sent',
                 'menu_item_title_sm_join_confirm' => '_bx_courses_menu_item_title_sm_join_confirm',
                 'menu_item_title_sm_leave' => '_bx_courses_menu_item_title_sm_leave',
                 'menu_item_title_sm_leave_cancel' => '_bx_courses_menu_item_title_sm_leave_cancel',

+ 1 - 1
modules/boonex/courses/install/config.php

@@ -19,7 +19,7 @@ $aConfig = array(
     'title' => 'Courses',
     'note' => 'Basic course profiles functionality.',
     'version' => '13.0.7.DEV',
-    'vendor' => 'BoonEx',
+    'vendor' => 'UNA INC',
     'help_url' => 'http://feed.una.io/?section={module_name}',
 
     'compatible_with' => array(

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

@@ -2958,7 +2958,8 @@ If it is not enabled then please consider implement this optimization, since it
     <string name="_sys_menu_item_title_sm_comments"><![CDATA[Comments]]></string>
     <string name="_sys_menu_item_title_sm_actions"><![CDATA[Actions]]></string>
     <string name="_sys_menu_item_title_sm_befriend"><![CDATA[Add friend]]></string>
-    <string name="_sys_menu_item_title_sm_befriend_confirm"><![CDATA[Accept friend request]]></string>
+    <string name="_sys_menu_item_title_sm_befriend_sent"><![CDATA[Add friend]]></string>
+    <string name="_sys_menu_item_title_sm_befriend_confirm"><![CDATA[Add friend (requested)]]></string>
     <string name="_sys_menu_item_title_sm_unfriend"><![CDATA[Remove friend]]></string>
     <string name="_sys_menu_item_title_sm_unfriend_cancel"><![CDATA[Cancel friend request]]></string>
     <string name="_sys_menu_item_title_sm_unfriend_reject"><![CDATA[Reject friend request]]></string>

+ 6 - 6
modules/boonex/events/classes/BxEventsConfig.php

@@ -18,6 +18,8 @@ class BxEventsConfig extends BxBaseModGroupsConfig
         $this->_aMenuItems2MethodsActions = array_merge($this->_aMenuItems2MethodsActions, array(
             'view-event-profile' => 'checkAllowedView',
             'edit-event-profile' => 'checkAllowedEdit',
+            'edit-event-questionnaire' => 'checkAllowedEdit',
+            'edit-event-sessions' => 'checkAllowedEdit',
             'edit-event-cover' => 'checkAllowedChangeCover',
             'invite-to-event' => 'checkAllowedInvite',
             'delete-event-profile' => 'checkAllowedDelete',
@@ -264,12 +266,10 @@ class BxEventsConfig extends BxBaseModGroupsConfig
                 'filter_item_select_one_filter2' => '_bx_events_grid_filter_item_title_adm_select_one_filter2',
             	'menu_item_manage_my' => '_bx_events_menu_item_title_manage_my',
                 'menu_item_manage_all' => '_bx_events_menu_item_title_manage_all',
-                'menu_item_title_become_fan_sent' => '_bx_events_menu_item_title_become_fan_sent',
-                'menu_item_title_leave_group_cancel_request' => '_bx_events_menu_item_title_leave_group_cancel_request',
-                'menu_item_title_become_fan' => '_bx_events_menu_item_title_become_fan',
-                'menu_item_title_leave_group' => '_bx_events_menu_item_title_leave_group',
-                'menu_item_title_become_fan_sent' => '_bx_events_menu_item_title_become_fan_sent',
-                'menu_item_title_become_fan' => '_bx_events_menu_item_title_become_fan',
+                'menu_item_title_sm_join' => '_bx_events_menu_item_title_become_fan',
+                'menu_item_title_sm_join_requested' => '_bx_events_menu_item_title_become_fan_sent',
+                'menu_item_title_sm_leave' => '_bx_events_menu_item_title_leave_group',
+                'menu_item_title_sm_leave_cancel' => '_bx_events_menu_item_title_leave_group_cancel_request',
             	'txt_all_entries_by_author' => '_bx_events_page_title_browse_by_author',
                 'txt_all_entries_by_context' => '_bx_events_page_title_browse_by_context',
                 'txt_invitation_popup_title' => '_bx_events_txt_invite_popup_title',

+ 4 - 4
modules/boonex/groups/classes/BxGroupsConfig.php

@@ -233,10 +233,10 @@ class BxGroupsConfig extends BxBaseModGroupsConfig
                 'filter_item_select_one_filter2' => '_bx_groups_grid_filter_item_title_adm_select_one_filter2',
                 'menu_item_manage_my' => '_bx_groups_menu_item_title_manage_my',
                 'menu_item_manage_all' => '_bx_groups_menu_item_title_manage_all',
-                'menu_item_title_become_fan_sent' => '_bx_groups_menu_item_title_become_fan_sent',
-                'menu_item_title_leave_group_cancel_request' => '_bx_groups_menu_item_title_leave_group_cancel_request',
-                'menu_item_title_become_fan' => '_bx_groups_menu_item_title_become_fan',
-                'menu_item_title_leave_group' => '_bx_groups_menu_item_title_leave_group',
+                'menu_item_title_sm_join' => '_bx_groups_menu_item_title_become_fan',
+                'menu_item_title_sm_join_requested' => '_bx_groups_menu_item_title_become_fan_sent',
+                'menu_item_title_sm_leave' => '_bx_groups_menu_item_title_leave_group',
+                'menu_item_title_sm_leave_cancel' => '_bx_groups_menu_item_title_leave_group_cancel_request',
                 'txt_all_entries_in' => '_bx_groups_txt_all_entries_in',
                 'txt_all_entries_by_author' => '_bx_groups_page_title_browse_by_author',
                 'txt_all_entries_by_context' => '_bx_groups_page_title_browse_by_context',

+ 4 - 4
modules/boonex/organizations/classes/BxOrgsConfig.php

@@ -257,10 +257,10 @@ class BxOrgsConfig extends BxBaseModGroupsConfig
                 'menu_item_title_unfriend_reject_request' => '_bx_orgs_menu_item_title_unfriend_reject_request',
                 'menu_item_title_befriend' => '_bx_orgs_menu_item_title_befriend',
                 'menu_item_title_unfriend' => '_bx_orgs_menu_item_title_unfriend',
-            	'menu_item_title_become_fan_sent' => '_bx_orgs_menu_item_title_become_fan_sent',
-                'menu_item_title_leave_group_cancel_request' => '_bx_orgs_menu_item_title_leave_organization_cancel_request',
-                'menu_item_title_become_fan' => '_bx_orgs_menu_item_title_become_fan',
-                'menu_item_title_leave_group' => '_bx_orgs_menu_item_title_leave_organization',
+                'menu_item_title_sm_join' => '_bx_orgs_menu_item_title_become_fan',
+                'menu_item_title_sm_join_requested' => '_bx_orgs_menu_item_title_become_fan_sent',
+                'menu_item_title_sm_leave' => '_bx_orgs_menu_item_title_leave_organization',
+                'menu_item_title_sm_leave_cancel' => '_bx_orgs_menu_item_title_leave_organization_cancel_request',
             	'menu_item_manage_my' => '_bx_orgs_menu_item_title_manage_my',
             	'menu_item_manage_all' => '_bx_orgs_menu_item_title_manage_all',
             	'grid_action_err_delete' => '_bx_orgs_grid_action_err_delete',

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

@@ -2923,6 +2923,7 @@
     <string name="_sys_menu_item_title_sm_comments"><![CDATA[Комментарии]]></string>
     <string name="_sys_menu_item_title_sm_actions"><![CDATA[Действия]]></string>
     <string name="_sys_menu_item_title_sm_befriend"><![CDATA[Добавить в друзья]]></string>
+    <string name="_sys_menu_item_title_sm_befriend_confirm"><![CDATA[Добавить в друзья (запрошено)]]></string>
     <string name="_sys_menu_item_title_sm_befriend_confirm"><![CDATA[Принять запрос о дружбе]]></string>
     <string name="_sys_menu_item_title_sm_unfriend"><![CDATA[Удалить из друзей]]></string>
     <string name="_sys_menu_item_title_sm_unfriend_cancel"><![CDATA[Отменить запрос о дружбе]]></string>

+ 4 - 4
modules/boonex/spaces/classes/BxSpacesConfig.php

@@ -228,10 +228,10 @@ class BxSpacesConfig extends BxBaseModGroupsConfig
                 'filter_item_select_one_filter2' => '_bx_spaces_grid_filter_item_title_adm_select_one_filter2',
                 'menu_item_manage_my' => '_bx_spaces_menu_item_title_manage_my',
                 'menu_item_manage_all' => '_bx_spaces_menu_item_title_manage_all',
-                'menu_item_title_become_fan_sent' => '_bx_spaces_menu_item_title_become_fan_sent',
-                'menu_item_title_leave_group_cancel_request' => '_bx_spaces_menu_item_title_leave_group_cancel_request',
-                'menu_item_title_become_fan' => '_bx_spaces_menu_item_title_become_fan',
-                'menu_item_title_leave_group' => '_bx_spaces_menu_item_title_leave_group',
+                'menu_item_title_sm_join' => '_bx_spaces_menu_item_title_become_fan',
+                'menu_item_title_sm_join_requested' => '_bx_spaces_menu_item_title_become_fan_sent',
+                'menu_item_title_sm_leave' => '_bx_spaces_menu_item_title_leave_group',
+                'menu_item_title_sm_leave_cancel' => '_bx_spaces_menu_item_title_leave_group_cancel_request',
                 'txt_all_entries_by_author' => '_bx_spaces_page_title_browse_by_author',
                 'txt_invitation_popup_title' => '_bx_spaces_txt_invite_popup_title',
                 'txt_invitation_popup_text' => '_bx_spaces_txt_invite_popup_text',

+ 1 - 1
modules/boonex/spaces/install/config.php

@@ -19,7 +19,7 @@ $aConfig = array(
     'title' => 'Spaces',
     'note' => 'Spaces functionality.',
     'version' => '13.0.9.DEV',
-    'vendor' => 'BoonEx',
+    'vendor' => 'UNA INC',
     'help_url' => 'http://feed.una.io/?section={module_name}',
 
     'compatible_with' => array(

+ 10 - 47
template/scripts/BxBaseServiceConnections.php

@@ -85,60 +85,23 @@ class BxBaseServiceConnections extends BxDol
             return '';
 
         $oConnection = BxDolConnection::getObjectInstance($sObject);
-        if(!$oConnection)
+        if(!$oConnection || !$oConnection->isProfileContent())
             return '';
 
-        $sMethod = 'getActionTitle';
-        if(method_exists($oConnection, $sMethod))
-            return $oConnection->$sMethod($sAction, $iInitiatorId, $iContentId, $bFlip);
-
-        $aResult = [];
-        switch($sObject) {
-            case 'sys_profiles_friends':
-                if($oConnection->isConnectedNotMutual($iInitiatorId, $iContentId))
-                    $aResult = [
-                        'add' => '',
-                        'remove' => '_sys_menu_item_title_sm_unfriend_cancel',
-                    ];
-                else if($oConnection->isConnectedNotMutual($iContentId, $iInitiatorId))
-                    $aResult = [
-                        'add' => '_sys_menu_item_title_sm_befriend_confirm',
-                        'remove' => '_sys_menu_item_title_sm_unfriend_reject',
-                    ];
-                else if($oConnection->isConnected($iInitiatorId, $iContentId, true))
-                    $aResult = [
-                        'add' => '',
-                        'remove' => '_sys_menu_item_title_sm_unfriend',
-                    ];
-                else
-                    $aResult = [
-                        'add' => '_sys_menu_item_title_sm_befriend',
-                        'remove' => '',
-                    ];
-                break;
-
-            case 'sys_profiles_subscriptions':
-                if($oConnection->isConnected($iInitiatorId, $iContentId))
-                    $aResult = [
-                        'add' => '',
-                        'remove' => '_sys_menu_item_title_sm_unsubscribe',
-                    ];
-                else
-                    $aResult = [
-                        'add' => '_sys_menu_item_title_sm_subscribe',
-                        'remove' => '',
-                    ];
-                break;
-
-            default:
-                $aResult = $oConnection->getActionTitle($sAction, $iInitiatorId, $iContentId);
-        }
+        $sMethod = 'get_menu_item_title_by_connection';
+        $aContentProfileInfo = BxDolProfileQuery::getInstance()->getInfoById($iContentId);
+        if(empty($aContentProfileInfo) || !is_array($aContentProfileInfo) || !BxDolRequest::serviceExists($aContentProfileInfo['type'], $sMethod))
+            return '';
+
+        $aTitles = bx_srv($aContentProfileInfo['type'], $sMethod, [$sObject, '', $iContentId, $iInitiatorId]);
+        if(empty($aTitles) || !is_array($aTitles))
+            return '';
 
         $aFlip = ['add' => 'remove', 'remove' => 'add'];
         if($bFlip)
             $sAction = $aFlip[$sAction];
 
-        return !empty($aResult[$sAction]) ? _t($aResult[$sAction]) : '';
+        return !empty($aTitles[$sAction]) ? _t($aTitles[$sAction]) : '';
     }       
 
     /**