Browse Source

Ticket #989 - Base changes and Persons module.

AntonLV 9 years ago
parent
commit
834a117442

+ 24 - 9
modules/base/general/classes/BxBaseModGeneralTemplate.php

@@ -22,7 +22,7 @@ class BxBaseModGeneralTemplate extends BxDolModuleTemplate
         parent::__construct($oConfig, $oDb);        
         $this->addCss ('main.css');
     }
-    
+
     public function getModule()
     {
         if (!$this->_oModule) {
@@ -50,22 +50,27 @@ class BxBaseModGeneralTemplate extends BxDolModuleTemplate
         return !$bWrap ? $sContent : $this->_wrapInTagJsCode($sContent);
     }
 
-    function getUnitMetaItemLink($sContent, $aAttrs = array())
+    public function getUnitMetaItemLink($sContent, $aAttrs = array())
     {
         return $this->getUnitMetaItem('a', $sContent, $aAttrs);
     }
 
-    function getUnitMetaItemText($sContent, $aAttrs = array())
+    public function getUnitMetaItemText($sContent, $aAttrs = array())
     {
-        if(!is_array($aAttrs))
-            $aAttrs = array();
+        return $this->getUnitMetaItem('span', $sContent, $aAttrs);
+    }
 
-        $aAttrs['class'] = (!empty($aAttrs['class']) ? $aAttrs['class'] . ' ' : '') . 'bx-def-font-grayed';
+    public function getUnitMetaItemButton($sContent, $aAttrs = array())
+    {
+        return $this->getUnitMetaItem('button', $sContent, $aAttrs);
+    }
 
-        return $this->getUnitMetaItem('span', $sContent, $aAttrs);
+    public function getUnitMetaItemButtonSmall($sContent, $aAttrs = array())
+    {
+        return $this->getUnitMetaItem('sbutton', $sContent, $aAttrs);
     }
 
-    function getUnitMetaItemCustom($sContent)
+    public function getUnitMetaItemCustom($sContent)
     {
         return $this->getUnitMetaItem('custom', $sContent);
     }
@@ -173,7 +178,16 @@ class BxBaseModGeneralTemplate extends BxDolModuleTemplate
         if(empty($sContent))
             return '';
 
-        $aTags = array('span', 'a', 'custom');
+        if(!is_array($aAttrs))
+            $aAttrs = array();
+
+        $aTags = array('span', 'a', 'button', 'sbutton', 'custom');
+
+        $sTmplVarsClass = ''; 
+        if(!empty($aAttrs['class'])) {
+            $sTmplVarsClass = $aAttrs['class'];
+            unset($aAttrs['class']);
+        }
 
         $aTmplVarsAttrs = array();
         foreach($aAttrs as $sKey => $sValue)
@@ -185,6 +199,7 @@ class BxBaseModGeneralTemplate extends BxDolModuleTemplate
             $bTmplVarsTag = $sTag == $sName;
             if($bTmplVarsTag)
                 $aTmplVarsTag = array(
+                    'class' => $sTmplVarsClass,
                     'content' => $sContent,
                     'bx_repeat:attrs' => $aTmplVarsAttrs
                 );

+ 187 - 0
modules/base/profile/classes/BxBaseModProfileMenuSnippetMeta.php

@@ -0,0 +1,187 @@
+<?php use Symfony\Component\Finder\Tests\FakeAdapter\DummyAdapter;
+defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    BaseProfile Base classes for profile modules
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxBaseModProfileMenuSnippetMeta extends BxBaseModGeneralMenuSnippetMeta
+{
+    protected $_bContentPublic;
+    protected $_oContentProfile;
+
+    protected $_aConnectionToFunctionCheck;
+    protected $_aConnectionToFunctionTitle;
+
+    public function __construct($aObject, $oTemplate = false)
+    {
+        parent::__construct($aObject, $oTemplate);
+
+        $this->_bContentPublic = false;
+
+        $this->_aConnectionToFunctionCheck = array(
+            'sys_profiles_friends' => array(
+            	'add' => 'checkAllowedFriendAdd', 
+            	'remove' => 'checkAllowedFriendRemove'
+            ),
+            'sys_profiles_subscriptions' => array(
+                'add' => 'checkAllowedSubscribeAdd',
+                'remove' => 'checkAllowedSubscribeRemove'
+            )
+        );
+
+        $this->_aConnectionToFunctionTitle = array(
+        	'sys_profiles_friends' => '_getMenuItemProfilesFriendsTitle',
+            'sys_profiles_subscriptions' => '_getMenuItemProfilesSubscriptionsTitle'
+        );
+    }
+
+    public function setContentId($iContentId)
+    {
+        parent::setContentId($iContentId);
+
+        if(!empty($this->_iContentId))
+            $this->_oContentProfile = BxDolProfile::getInstanceByContentAndType($iContentId, $this->_sModule);
+    }
+
+    public function setContentPublic($bContentPublic)
+    {
+        $this->_bContentPublic = $bContentPublic;
+    }
+
+    protected function _getMenuItemBefriend($aItem)
+    {
+        return $this->_getMenuItemConnection('sys_profiles_friends', 'add', $aItem);
+    }
+
+    protected function _getMenuItemUnfriend($aItem)
+    {
+        return $this->_getMenuItemConnection('sys_profiles_friends', 'remove', $aItem);
+    }
+
+    protected function _getMenuItemSubscribe($aItem)
+    {
+        return $this->_getMenuItemConnection('sys_profiles_subscriptions', 'add', $aItem);
+    }
+
+    protected function _getMenuItemUnsubscribe($aItem)
+    {
+        return $this->_getMenuItemConnection('sys_profiles_subscriptions', 'remove', $aItem);
+    }
+
+    protected function _getMenuItemFriends($aItem)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(!$this->_bContentPublic || !$this->_oContentProfile)
+            return false;
+
+        $oConnection = BxDolConnection::getObjectInstance('sys_profiles_friends');
+        if(!$oConnection)
+            return false;
+
+        $iFriends = $oConnection->getConnectedInitiatorsCount($this->_oContentProfile->id(), true);
+        if(!$iFriends)
+            return false;
+
+        return $this->_oTemplate->getUnitMetaItemText(_t('_sys_menu_item_title_sm_friends', $iFriends));
+    }
+
+    protected function _getMenuItemSubscribers($aItem)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(!$this->_bContentPublic || !$this->_oContentProfile)
+            return false;
+
+        $oConnection = BxDolConnection::getObjectInstance('sys_profiles_subscriptions');
+        if(!$oConnection)
+            return false;
+            
+        $iSubscribers = $oConnection->getConnectedInitiatorsCount($this->_oContentProfile->id());
+        if(!$iSubscribers)
+            return false;
+
+        return $this->_oTemplate->getUnitMetaItemText(_t('_sys_menu_item_title_sm_subscribers', $iSubscribers));
+    }
+
+    protected function _getMenuItemConnection($sConnection, $sAction, &$aItem)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(!isLogged() || $this->_oModule->{$this->_aConnectionToFunctionCheck[$sConnection][$sAction]}($this->_aContentInfo) !== CHECK_ACTION_RESULT_ALLOWED)
+            return false;
+
+        $iProfile = bx_get_logged_profile_id();
+        $iContentProfile = $this->_oContentProfile->id();
+
+        $oConnection = BxDolConnection::getObjectInstance($sConnection);
+        if(!$oConnection)
+            return false;
+
+        $sTitle = $this->{$this->_aConnectionToFunctionTitle[$sConnection]}($sAction, $oConnection);
+        if(empty($sTitle))
+            return false;
+
+        return $this->_oTemplate->getUnitMetaItemButtonSmall($sTitle, array(
+        	'onclick' => "bx_conn_action(this, '" . $sConnection . "', '" . $sAction . "', '" . $iContentProfile . "')"
+        ));
+    }
+
+    protected function _getMenuItemProfilesFriendsTitle($sAction, &$oConnection)
+    {
+        $iProfile = bx_get_logged_profile_id();
+        $iContentProfile = $this->_oContentProfile->id();
+
+        $aResult = array();
+        if($oConnection->isConnectedNotMutual($iProfile, $iContentProfile))
+            $aResult = array(
+                'add' => '',
+                'remove' => _t('_sys_menu_item_title_sm_unfriend_cancel'),
+            );
+        else if($oConnection->isConnectedNotMutual($iContentProfile, $iProfile))
+            $aResult = array(
+                'add' => _t('_sys_menu_item_title_sm_befriend_confirm'),
+                'remove' => _t('_sys_menu_item_title_sm_unfriend_reject'),
+            );
+        else if($oConnection->isConnected($iProfile, $iContentProfile, true))
+            $aResult = array(
+                'add' => '',
+                'remove' => _t('_sys_menu_item_title_sm_unfriend'),
+            );
+        else
+            $aResult = array(
+                'add' => _t('_sys_menu_item_title_sm_befriend'),
+                'remove' => '',
+            );
+
+        return !empty($sAction) && isset($aResult[$sAction]) ? $aResult[$sAction] : $aResult;
+    }
+
+    protected function _getMenuItemProfilesSubscriptionsTitle($sAction, &$oConnection)
+    {
+        $iProfile = bx_get_logged_profile_id();
+        $iContentProfile = $this->_oContentProfile->id();
+
+        $aResult = array();
+        if($oConnection->isConnected($iProfile, $iContentProfile))
+            $aResult = array(
+                'add' => '',
+                'remove' => _t('_sys_menu_item_title_sm_unsubscribe'),
+            );
+        else
+            $aResult = array(
+                'add' => _t('_sys_menu_item_title_sm_subscribe'),
+                'remove' => '',
+            );
+
+        return !empty($sAction) && !empty($aResult[$sAction]) ? $aResult[$sAction] : $aResult;
+    }
+}
+
+/** @} */

+ 23 - 28
modules/base/profile/classes/BxBaseModProfileTemplate.php

@@ -42,11 +42,12 @@ class BxBaseModProfileTemplate extends BxBaseModGeneralTemplate
         $CNF = &$this->_oConfig->CNF;
 
         $oModule = $this->getModule();
+        $iContentId = (int)$aData[$CNF['FIELD_ID']];
 
         $bPublic = true;
         if($isCheckPrivateContent && !empty($CNF['OBJECT_PRIVACY_VIEW'])) {
             $oPrivacy = BxDolPrivacy::getObjectInstance($CNF['OBJECT_PRIVACY_VIEW']);
-            if ($oPrivacy && !$oPrivacy->check($aData[$CNF['FIELD_ID']]) && !$oPrivacy->isPartiallyVisible($aData[$CNF['FIELD_ALLOW_VIEW_TO']]))
+            if ($oPrivacy && !$oPrivacy->check($iContentId) && !$oPrivacy->isPartiallyVisible($aData[$CNF['FIELD_ALLOW_VIEW_TO']]))
                 $bPublic = false;
         }
 
@@ -58,21 +59,14 @@ class BxBaseModProfileTemplate extends BxBaseModGeneralTemplate
         if($isCheckPrivateContent && $oModule->checkAllowedViewCoverImage($aData) !== CHECK_ACTION_RESULT_ALLOWED)
             $bPublicCover = false;
 
-        //$aVars = parent::unitVars ($aData, $isCheckPrivateContent, $sTemplateName);
-
-        $oProfile = BxDolProfile::getInstanceByContentAndType($aData[$CNF['FIELD_ID']], $this->MODULE);
+        $oProfile = BxDolProfile::getInstanceByContentAndType($iContentId, $this->MODULE);
         $iProfile = $oProfile->id();
 
         // get profile's title
         $sTitle = bx_process_output($aData[$CNF['FIELD_NAME']]);
 
         // get profile's url
-        $sUrl = BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=' . $CNF['URI_VIEW_ENTRY'] . '&id=' . $aData[$CNF['FIELD_ID']]);
-
-        // connections object 
-        $sConnectionsObject = isset($CNF['OBJECT_CONNECTIONS']) ? $CNF['OBJECT_CONNECTIONS'] : 'sys_profiles_friends';
-        $oConn = BxDolConnection::getObjectInstance($sConnectionsObject);
-        $aConnectionTitles = $oModule->serviceGetConnectionButtonsTitles($iProfile, $sConnectionsObject);
+        $sUrl = BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=' . $CNF['URI_VIEW_ENTRY'] . '&id=' . $iContentId);
 
         $sThumbUrl = $bPublicThumb ? $this->thumb($aData, false) : '';
         $bThumbUrl = !empty($sThumbUrl);
@@ -83,10 +77,23 @@ class BxBaseModProfileTemplate extends BxBaseModGeneralTemplate
         if(empty($sCoverUrl))
             $sCoverUrl = $this->getImageUrl('cover.jpg');
 
+        $aTmplVarsMeta = array();
+        if(!empty($CNF['OBJECT_MENU_SNIPPET_META'])) {
+            $oMenuMeta = BxDolMenu::getObjectInstance($CNF['OBJECT_MENU_SNIPPET_META'], $this);
+            if($oMenuMeta) {
+                $oMenuMeta->setContentId($iContentId);
+                $oMenuMeta->setContentPublic($bPublic);
+                $aTmplVarsMeta = array(
+                    'meta' => $oMenuMeta->getCode()
+                );
+            }
+        }
+
         // generate html
-        $aVars = array (
+        return array (
         	'class' => $this->_getUnitClass($aData, $sTemplateName),
-            'id' => $aData[$CNF['FIELD_ID']],
+            'id' => $iContentId,
+        	'public' => $bPublic,
             'bx_if:show_thumb_image' => array(
                 'condition' => $bThumbUrl,
                 'content' => array(
@@ -107,23 +114,11 @@ class BxBaseModProfileTemplate extends BxBaseModGeneralTemplate
             'title' => $sTitle,
             'module_name' => _t($CNF['T']['txt_sample_single']),
             'ts' => $aData[$CNF['FIELD_ADDED']],
-            'bx_if:info' => array(
-                'condition' => true,
-                'content' => array (
-                    'members' => $bPublic ? _t($CNF['T']['txt_N_fans'], $oConn ? $oConn->getConnectedInitiatorsCount($iProfile, true) : 0) : '&nbsp;',
-                    'bx_if:btn' => array (
-                        'condition' => isLogged() && !empty($aConnectionTitles['add']) && CHECK_ACTION_RESULT_ALLOWED === $this->getModule()->checkAllowedFriendAdd($aData),
-                        'content' => array (
-                            'id' => $iProfile,
-                            'title' => isset($aConnectionTitles['add']) ? $aConnectionTitles['add'] : '',
-                            'object' => $sConnectionsObject,
-                        ),
-                    ),
-                ),
-            ),
+            'bx_if:meta' => array(
+                'condition' => !empty($aTmplVarsMeta),
+                'content' => $aTmplVarsMeta
+            )
         );
-
-        return $aVars;
     }
 
     /**

+ 12 - 0
modules/base/profile/template/css/main.css

@@ -18,6 +18,18 @@
     text-align:center;
 }
 
+/* unit meta */
+.bx-base-general-unit-meta ul.bx-menu-custom li .bx-base-profile-unit-meta-item {
+	height: 1.625rem;
+	padding-left: 0.5rem;
+
+	line-height: 1.625rem;	
+}
+
+.bx-base-general-unit-meta ul.bx-menu-custom li:first-child .bx-base-profile-unit-meta-item {
+    padding-left: 0px;
+}
+
 /* browse unit with cover */
 
 .bx-base-pofile-unit-cover {

+ 5 - 0
modules/base/profile/template/unit_meta_item.html

@@ -0,0 +1,5 @@
+<bx_if:span><span class="bx-base-profile-unit-meta-item"><span class="bx-def-font-grayed __class__" <bx_repeat:attrs>__key__="__value__"</bx_repeat:attrs>>__content__</span></span></bx_if:span>
+<bx_if:a><span class="bx-base-profile-unit-meta-item"><a class="__class__" <bx_repeat:attrs>__key__="__value__"</bx_repeat:attrs>>__content__</a></span></bx_if:a>
+<bx_if:button><span class="bx-base-profile-unit-meta-item"><a class="bx-btn __class__" <bx_repeat:attrs>__key__="__value__"</bx_repeat:attrs>>__content__</a></span></bx_if:button>
+<bx_if:sbutton><span class="bx-base-profile-unit-meta-item"><a class="bx-btn bx-btn-small __class__" <bx_repeat:attrs>__key__="__value__"</bx_repeat:attrs>>__content__</a></span></bx_if:sbutton>
+<bx_if:custom><span class="bx-base-profile-unit-meta-item">__content__</span></bx_if:custom>

+ 3 - 10
modules/base/profile/template/unit_with_cover.html

@@ -9,15 +9,8 @@
             </bx_if:show_thumb_letter>
 	    </a>
 	    <div class="bx-base-pofile-unit-title bx-def-box-sizing bx-def-padding-sec"><a href="__content_url__" onclick="__content_click__">__title__</a></div>
-	    <bx_if:info>
-		    <div class="bx-base-pofile-unit-info bx-def-box-sizing bx-def-padding-sec-rightbottomleft bx-clearfix">
-		        <div class="bx-base-pofile-unit-info-members bx-def-font-grayed bx-def-font-small">__members__</div>
-		        <div class="bx-base-pofile-unit-info-btn">
-		            <bx_if:btn>
-		                <button class="bx-btn bx-btn-small" onclick="bx_conn_action(this, '__object__', 'add', '__id__')">__title__</button>
-		            </bx_if:btn>
-		        </div>
-		    </div>
-	    </bx_if:info>
+	    <div class="bx-base-pofile-unit-info">
+            <bx_if:meta><div class="bx-base-general-unit-meta bx-def-box-sizing bx-def-padding-sec-rightbottomleft">__meta__</div></bx_if:meta>
+	    </div>
     </div>
 </div>

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

@@ -2100,6 +2100,21 @@ If it is not enabled then please consider implement this optimization, since it
     <string name="_sys_menu_item_title_sm_rating"><![CDATA[Rating]]></string>
     <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_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>
+    <string name="_sys_menu_item_title_sm_join"><![CDATA[Join]]></string>
+    <string name="_sys_menu_item_title_sm_join_confirm"><![CDATA[Accept join request]]></string>
+    <string name="_sys_menu_item_title_sm_leave"><![CDATA[Leave]]></string>
+    <string name="_sys_menu_item_title_sm_leave_cancel"><![CDATA[Cancel join request]]></string>
+    <string name="_sys_menu_item_title_sm_leave_reject"><![CDATA[Reject join request]]></string>
+    <string name="_sys_menu_item_title_sm_subscribe"><![CDATA[Follow]]></string>
+    <string name="_sys_menu_item_title_sm_unsubscribe"><![CDATA[Unfollow]]></string>
+    <string name="_sys_menu_item_title_sm_friends"><![CDATA[{0} friends]]></string>
+    <string name="_sys_menu_item_title_sm_members"><![CDATA[{0} members]]></string>
+    <string name="_sys_menu_item_title_sm_subscribers"><![CDATA[{0} followers]]></string>
 	<string name="_sys_menu_item_title_system_about"><![CDATA[About]]></string>
 	<string name="_sys_menu_item_title_system_privacy"><![CDATA[Privacy]]></string>
 	<string name="_sys_menu_item_title_system_switch_language"><![CDATA[Language]]></string>
@@ -2144,7 +2159,16 @@ If it is not enabled then please consider implement this optimization, since it
     <string name="_sys_menu_item_title_system_sm_views"><![CDATA[Views]]></string>
     <string name="_sys_menu_item_title_system_sm_rating"><![CDATA[Rating]]></string>
     <string name="_sys_menu_item_title_system_sm_comments"><![CDATA[Comments]]></string>
-    <string name="_sys_menu_item_title_system_sm_actions"><![CDATA[Actions]]></string>    
+    <string name="_sys_menu_item_title_system_sm_actions"><![CDATA[Actions]]></string>
+    <string name="_sys_menu_item_title_system_sm_befriend"><![CDATA[Add Friend]]></string>
+    <string name="_sys_menu_item_title_system_sm_unfriend"><![CDATA[Remove Friend]]></string>
+    <string name="_sys_menu_item_title_system_sm_join"><![CDATA[Join]]></string>
+    <string name="_sys_menu_item_title_system_sm_leave"><![CDATA[Leave]]></string>
+    <string name="_sys_menu_item_title_system_sm_subscribe"><![CDATA[Follow]]></string>
+    <string name="_sys_menu_item_title_system_sm_friends"><![CDATA[Friends]]></string>
+    <string name="_sys_menu_item_title_system_sm_members"><![CDATA[Members]]></string>
+    <string name="_sys_menu_item_title_system_sm_subscribers"><![CDATA[Followers]]></string>
+    <string name="_sys_menu_item_title_system_sm_unsubscribe"><![CDATA[Unfollow]]></string>
 	<string name="_sys_menu_set_title_account_dashboard"><![CDATA[Account Dashboard]]></string>
 	<string name="_sys_menu_set_title_account_dashboard_manage_tools"><![CDATA[Account Dashboard Manage Tools]]></string>
 	<string name="_sys_menu_set_title_account_settings"><![CDATA[Account Settings]]></string>

+ 3 - 0
modules/boonex/persons/classes/BxPersonsConfig.php

@@ -53,6 +53,8 @@ class BxPersonsConfig extends BxBaseModProfileConfig
             'FIELD_PICTURE' => 'picture',
             'FIELD_COVER' => 'cover',
             'FIELD_ALLOW_VIEW_TO' => 'allow_view_to',
+        	'FIELD_VIEWS' => 'views',
+            'FIELD_COMMENTS' => 'comments',
             'FIELDS_QUICK_SEARCH' => array('fullname'),
         	'FIELD_LOCATION_PREFIX' => 'location',
             'FIELDS_WITH_KEYWORDS' => 'auto', // can be 'auto', array of fields or comma separated string of field names, works only when OBJECT_METATAGS is specified
@@ -111,6 +113,7 @@ class BxPersonsConfig extends BxBaseModProfileConfig
             'OBJECT_MENU_SUBMENU_VIEW_ENTRY' => 'bx_persons_view_submenu',  // view entry submenu
             'OBJECT_MENU_SUBMENU_VIEW_ENTRY_COVER' => 'bx_persons_view_submenu_cover',  // view entry submenu displayed in cover
             'OBJECT_MENU_SUBMENU_VIEW_ENTRY_MAIN_SELECTION' => 'persons-home', // first item in view entry submenu from main module submenu
+            'OBJECT_MENU_SNIPPET_META' => 'bx_persons_snippet_meta', // menu for snippet meta info
             'OBJECT_MENU_MANAGE_TOOLS' => 'bx_persons_menu_manage_tools', //manage menu in content administration tools
             'OBJECT_PAGE_VIEW_ENTRY' => 'bx_persons_view_profile',
             'OBJECT_PAGE_VIEW_ENTRY_CLOSED' => 'bx_persons_view_profile_closed',

+ 22 - 0
modules/boonex/persons/classes/BxPersonsMenuSnippetMeta.php

@@ -0,0 +1,22 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Persons Persons
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxPersonsMenuSnippetMeta extends BxBaseModProfileMenuSnippetMeta
+{
+    public function __construct($aObject, $oTemplate = false)
+    {
+        $this->_sModule = 'bx_persons';
+
+        parent::__construct($aObject, $oTemplate);
+    }
+}
+
+/** @} */

+ 1 - 1
modules/boonex/persons/install/sql/disable.sql

@@ -16,7 +16,7 @@ DELETE FROM `sys_pages_blocks` WHERE `module` = 'bx_persons' OR `object` IN('bx_
 
 DELETE FROM `sys_objects_menu` WHERE `module` = 'bx_persons';
 DELETE FROM `sys_menu_sets` WHERE `module` = 'bx_persons';
-DELETE FROM `sys_menu_items` WHERE `module` = 'bx_persons' OR `set_name` IN('bx_persons_view_submenu', 'bx_persons_submenu', 'bx_persons_view_actions', 'bx_persons_view_actions_more');
+DELETE FROM `sys_menu_items` WHERE `module` = 'bx_persons' OR `set_name` IN('bx_persons_view_submenu', 'bx_persons_submenu', 'bx_persons_view_actions', 'bx_persons_view_actions_more', 'bx_persons_snippet_meta');
 
 -- ACL
 DELETE `sys_acl_actions`, `sys_acl_matrix` FROM `sys_acl_actions`, `sys_acl_matrix` WHERE `sys_acl_matrix`.`IDAction` = `sys_acl_actions`.`ID` AND `sys_acl_actions`.`Module` = 'bx_persons';

+ 19 - 0
modules/boonex/persons/install/sql/enable.sql

@@ -259,6 +259,25 @@ INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `titl
 ('bx_persons_view_submenu', 'bx_persons', 'persons-profile-subscriptions', '_bx_persons_menu_item_title_system_view_profile_subscriptions', '_bx_persons_menu_item_title_view_profile_subscriptions', 'page.php?i=persons-profile-subscriptions&profile_id={profile_id}', '', '', 'check col-blue3', '', 2147483647, 1, 0, 4),
 ('bx_persons_view_submenu', 'bx_persons', 'persons-profile-comments', '_bx_persons_menu_item_title_system_view_profile_comments', '_bx_persons_menu_item_title_view_profile_comments', 'page.php?i=persons-profile-comments&id={content_id}', '', '', '', '', 2147483647, 0, 0, 5);
 
+-- MENU: custom menu for snippet meta info
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_persons_snippet_meta', '_sys_menu_title_snippet_meta', 'bx_persons_snippet_meta', 'bx_persons', 15, 0, 1, 'BxPersonsMenuSnippetMeta', 'modules/boonex/persons/classes/BxPersonsMenuSnippetMeta.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_persons_snippet_meta', 'bx_persons', '_sys_menu_set_title_snippet_meta', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `editable`, `order`) VALUES
+('bx_persons_snippet_meta', 'bx_persons', 'befriend', '_sys_menu_item_title_system_sm_befriend', '_sys_menu_item_title_sm_befriend', '', '', '', '', '', 2147483647, 1, 0, 1, 1),
+('bx_persons_snippet_meta', 'bx_persons', 'unfriend', '_sys_menu_item_title_system_sm_unfriend', '_sys_menu_item_title_sm_unfriend', '', '', '', '', '', 2147483647, 0, 0, 1, 2),
+('bx_persons_snippet_meta', 'bx_persons', 'subscribe', '_sys_menu_item_title_system_sm_subscribe', '_sys_menu_item_title_sm_subscribe', '', '', '', '', '', 2147483647, 0, 0, 1, 3),
+('bx_persons_snippet_meta', 'bx_persons', 'unsubscribe', '_sys_menu_item_title_system_sm_unsubscribe', '_sys_menu_item_title_sm_unsubscribe', '', '', '', '', '', 2147483647, 0, 0, 1, 4),
+('bx_persons_snippet_meta', 'bx_persons', 'date', '_sys_menu_item_title_system_sm_date', '_sys_menu_item_title_sm_date', '', '', '', '', '', 2147483647, 0, 0, 1, 5),
+('bx_persons_snippet_meta', 'bx_persons', 'tags', '_sys_menu_item_title_system_sm_tags', '_sys_menu_item_title_sm_tags', '', '', '', '', '', 2147483647, 0, 0, 1, 6),
+('bx_persons_snippet_meta', 'bx_persons', 'views', '_sys_menu_item_title_system_sm_views', '_sys_menu_item_title_sm_views', '', '', '', '', '', 2147483647, 0, 0, 1, 7),
+('bx_persons_snippet_meta', 'bx_persons', 'comments', '_sys_menu_item_title_system_sm_comments', '_sys_menu_item_title_sm_comments', '', '', '', '', '', 2147483647, 0, 0, 1, 8),
+('bx_persons_snippet_meta', 'bx_persons', 'friends', '_sys_menu_item_title_system_sm_friends', '_sys_menu_item_title_sm_friends', '', '', '', '', '', 2147483647, 1, 0, 1, 9),
+('bx_persons_snippet_meta', 'bx_persons', 'subscribers', '_sys_menu_item_title_system_sm_subscribers', '_sys_menu_item_title_sm_subscribers', '', '', '', '', '', 2147483647, 0, 0, 1, 10);
+
 -- MENU: notifications menu in account popup
 SET @iNotifMenuOrder = (SELECT `order` FROM `sys_menu_items` WHERE `set_name` = 'sys_account_notifications' AND `active` = 1 AND `order` < 9999 ORDER BY `order` DESC LIMIT 1);
 INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES

+ 1 - 0
modules/boonex/persons/template/unit_meta_item.html

@@ -0,0 +1 @@
+<bx_include_base:../modules/base/profile/template/unit_meta_item.html />

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

@@ -2099,6 +2099,21 @@
     <string name="_sys_menu_item_title_sm_rating"><![CDATA[Рейтинг]]></string>
     <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_unfriend"><![CDATA[Перестать дружить]]></string>
+    <string name="_sys_menu_item_title_sm_unfriend_cancel"><![CDATA[Отменить запрос о дружбе]]></string>
+    <string name="_sys_menu_item_title_sm_unfriend_reject"><![CDATA[Отвергнуть запрос о дружбе]]></string>
+    <string name="_sys_menu_item_title_sm_join"><![CDATA[Присоединиться]]></string>
+    <string name="_sys_menu_item_title_sm_join_confirm"><![CDATA[Одобрить присоединение]]></string>
+    <string name="_sys_menu_item_title_sm_leave"><![CDATA[Покинуть]]></string>
+    <string name="_sys_menu_item_title_sm_leave_cancel"><![CDATA[Отменить присоединение]]></string>
+    <string name="_sys_menu_item_title_sm_leave_reject"><![CDATA[Отвергнуть присоединение]]></string>
+    <string name="_sys_menu_item_title_sm_subscribe"><![CDATA[Получать уведомления]]></string>
+    <string name="_sys_menu_item_title_sm_unsubscribe"><![CDATA[Отключить уведомления]]></string>
+    <string name="_sys_menu_item_title_sm_friends"><![CDATA[Друзья: {0}]]></string>
+    <string name="_sys_menu_item_title_sm_members"><![CDATA[Участники: {0}]]></string>
+    <string name="_sys_menu_item_title_sm_subscribers"><![CDATA[Подписчики: {0}]]></string>
 	<string name="_sys_menu_item_title_system_about"><![CDATA[Об...]]></string>
 	<string name="_sys_menu_item_title_system_privacy"><![CDATA[Конфиденциальность]]></string>
 	<string name="_sys_menu_item_title_system_switch_language"><![CDATA[Язык]]></string>
@@ -2144,6 +2159,15 @@
     <string name="_sys_menu_item_title_system_sm_rating"><![CDATA[Рейтинг]]></string>
     <string name="_sys_menu_item_title_system_sm_comments"><![CDATA[Комментарии]]></string>
     <string name="_sys_menu_item_title_system_sm_actions"><![CDATA[Действия]]></string>
+    <string name="_sys_menu_item_title_system_sm_befriend"><![CDATA[Добавить друга]]></string>
+    <string name="_sys_menu_item_title_system_sm_unfriend"><![CDATA[Перестать дружить]]></string>
+    <string name="_sys_menu_item_title_system_sm_join"><![CDATA[Присоединиться]]></string>
+    <string name="_sys_menu_item_title_system_sm_leave"><![CDATA[Покинуть]]></string>
+    <string name="_sys_menu_item_title_system_sm_subscribe"><![CDATA[Получать уведомления]]></string>
+    <string name="_sys_menu_item_title_system_sm_unsubscribe"><![CDATA[Отключить уведомления]]></string>
+    <string name="_sys_menu_item_title_system_sm_friends"><![CDATA[Друзья]]></string>
+    <string name="_sys_menu_item_title_system_sm_members"><![CDATA[Участники]]></string>
+    <string name="_sys_menu_item_title_system_sm_subscribers"><![CDATA[Подписки]]></string>
 	<string name="_sys_menu_set_title_account_dashboard"><![CDATA[Панель аккаунта]]></string>
 	<string name="_sys_menu_set_title_account_dashboard_manage_tools"><![CDATA[Панель аккаунта - Инструменты управления]]></string>
 	<string name="_sys_menu_set_title_account_settings"><![CDATA[Аккаунт - Настройки]]></string>