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

Ticket #1907 - changes in Base Profile module.

AntonLV 7 лет назад
Родитель
Сommit
d3a7afe84c

+ 3 - 1
modules/base/profile/classes/BxBaseModProfileConfig.php

@@ -21,12 +21,14 @@ class BxBaseModProfileConfig extends BxBaseModGeneralConfig
         $this->_aMenuItems2MethodsActions = array (
             'profile-friend-add' => 'checkAllowedFriendAdd',
             'profile-friend-remove' => 'checkAllowedFriendRemove',
+            'profile-relation-add' => 'checkAllowedRelationAdd',
+            'profile-relation-remove' => 'checkAllowedRelationRemove',
             'profile-subscribe-add' => 'checkAllowedSubscribeAdd',
             'profile-subscribe-remove' => 'checkAllowedSubscribeRemove',
             'profile-actions-more' => 'checkAllowedViewMoreMenu',
             'profile-set-acl-level' => 'checkAllowedSetMembership',
             'convos-compose' => 'checkAllowedCompose',
-			'messenger' => 'checkAllowedCompose',
+            'messenger' => 'checkAllowedCompose',
         );        
     }
 }

+ 10 - 0
modules/base/profile/classes/BxBaseModProfileMenuViewActionsAll.php

@@ -51,6 +51,16 @@ class BxBaseModProfileMenuViewActionsAll extends BxBaseModGeneralMenuViewActions
         return $this->_getMenuItemByNameActionsMore($aItem);
     }
 
+    protected function _getMenuItemProfileRelationAdd($aItem)
+    {
+        return $this->_getMenuItemByNameActions($aItem);
+    }
+
+    protected function _getMenuItemProfileRelationRemove($aItem)
+    {
+        return $this->_getMenuItemByNameActionsMore($aItem);
+    }
+
     protected function _getMenuItemProfileSubscribeAdd($aItem)
     {
         return $this->_getMenuItemByNameActions($aItem);

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

@@ -234,9 +234,22 @@ class BxBaseModProfileModule extends BxBaseModGeneralModule implements iBxDolCon
         list($iContentId, $aContentInfo) = $mixedContent;
 
         $bCheckPrivateContent = isset($aParams['check_private_content']) ? (bool)$aParams['check_private_content'] : true;
-        $sTemplate = (!empty($aParams['template']) ? $aParams['template'] : 'unit') . '.html';
 
-        return $this->_oTemplate->unit($aContentInfo, $bCheckPrivateContent, $sTemplate);
+        $sTemplate = 'unit.html';
+        $aTemplateVars = array();
+        if(!empty($aParams['template'])) {
+            if(is_string($aParams['template']))
+                $sTemplate = $aParams['template'] . '.html';
+            else if(is_array($aParams['template'])) {
+                if(!empty($aParams['template']['name']))
+                    $sTemplate = $aParams['template']['name'] . '.html';
+
+                if(!empty($aParams['template']['vars']))
+                    $aTemplateVars = $aParams['template']['vars'];
+            }
+        }
+
+        return $this->_oTemplate->unit($aContentInfo, $bCheckPrivateContent, array($sTemplate, $aTemplateVars));
     }
 
     public function serviceHasImage ($iContentId)
@@ -485,6 +498,39 @@ class BxBaseModProfileModule extends BxBaseModGeneralModule implements iBxDolCon
         );
     }
 
+    public function serviceBrowseRelationsQuick ($iProfileId, $sObjectConnections = 'sys_profiles_friends', $sConnectionsType = 'content', $iMutual = false, $iProfileId2 = 0)
+    {
+        // get connections object
+        $oConnection = BxDolConnection::getObjectInstance($sObjectConnections);
+        if (!$oConnection)
+            return '';       
+
+        // set some vars
+        $iStart = (int)bx_get('start');
+        $iLimit = empty($this->_oConfig->CNF['PARAM_NUM_CONNECTIONS_QUICK']) ? 4 : getParam($this->_oConfig->CNF['PARAM_NUM_CONNECTIONS_QUICK']);
+        if (!$iLimit)
+            $iLimit = 4;
+
+        // get connections array
+        bx_import('BxDolConnection');
+        $aConnections = $oConnection->getConnectionsAsArrayExt($sConnectionsType, $iProfileId, $iProfileId2, $iMutual, $iStart, $iLimit + 1, BX_CONNECTIONS_ORDER_ADDED_DESC);
+        if(empty($aConnections) || !is_array($aConnections))
+            return '';
+
+        $aRelations = BxDolFormQuery::getDataItems('sys_relations');
+
+        $aResult = array();
+        foreach($aConnections as $iProfile => $aConnection)
+            $aResult[] = array(
+                'id' => $iProfile,
+                'info' => array(
+                    'addon' => _t($aRelations[$aConnection['relation']])
+                )
+            );
+
+        return $this->_serviceBrowseQuick($aResult, $iStart, $iLimit);
+    }
+
     public function serviceBrowseConnectionsQuick ($iProfileId, $sObjectConnections = 'sys_profiles_friends', $sConnectionsType = 'content', $iMutual = false, $iProfileId2 = 0)
     {
         // get connections object
@@ -689,7 +735,39 @@ class BxBaseModProfileModule extends BxBaseModGeneralModule implements iBxDolCon
 
         return $s;
     }
-    
+
+    public function serviceProfileRelations ($iContentId = 0, $aParams = array())
+    {
+        $mixedContent = $this->_getContent($iContentId);
+        if($mixedContent === false)
+            return false;
+
+        list($iContentId, $aContentInfo) = $mixedContent;
+
+        bx_import('BxDolConnection');
+        $s = $this->serviceBrowseRelationsQuick ($aContentInfo['profile_id'], 'sys_profiles_relations', BX_CONNECTIONS_CONTENT_TYPE_CONTENT);
+        if (!$s)
+            return MsgBox(_t('_sys_txt_empty'));
+
+        return $s;
+    }
+
+    public function serviceProfileRelatedMe ($iContentId = 0)
+    {
+        $mixedContent = $this->_getContent($iContentId);
+        if($mixedContent === false)
+            return false;
+
+        list($iContentId, $aContentInfo) = $mixedContent;
+
+        bx_import('BxDolConnection');
+        $s = $this->serviceBrowseRelationsQuick ($aContentInfo['profile_id'], 'sys_profiles_relations', BX_CONNECTIONS_CONTENT_TYPE_INITIATORS);
+        if (!$s)
+            return MsgBox(_t('_sys_txt_empty'));
+
+        return $s;
+    }
+
     /**
      * check enabled profile activation letter
      */
@@ -1061,6 +1139,36 @@ class BxBaseModProfileModule extends BxBaseModGeneralModule implements iBxDolCon
         return $this->_checkAllowedConnect ($aDataEntry, $isPerformAction, 'sys_profiles_friends', false, true, false);
     }
 
+    /**
+     * @return CHECK_ACTION_RESULT_ALLOWED if access is granted or error message if access is forbidden.
+     */
+    public function checkAllowedRelationAdd (&$aDataEntry, $isPerformAction = false)
+    {
+        if (CHECK_ACTION_RESULT_ALLOWED !== ($sMsg = $this->checkAllowedView($aDataEntry)))
+            return $sMsg;
+
+        return $this->_checkAllowedConnect ($aDataEntry, $isPerformAction, 'sys_profiles_relations', false, false);
+    }
+
+    /**
+     * @return CHECK_ACTION_RESULT_ALLOWED if access is granted or error message if access is forbidden.
+     */
+    public function checkAllowedRelationRemove (&$aDataEntry, $isPerformAction = false)
+    {
+        return $this->_checkAllowedConnect ($aDataEntry, $isPerformAction, 'sys_profiles_relations', false, true);
+    }
+
+    public function checkAllowedRelationsView (&$aDataEntry, $isPerformAction = false)
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        $sResult = _t('_sys_txt_access_denied');
+        if(empty($aDataEntry) || !is_array($aDataEntry))
+            return $sResult;
+
+        return CHECK_ACTION_RESULT_ALLOWED;
+    }
+
     /**
      * @return CHECK_ACTION_RESULT_ALLOWED if access is granted or error message if access is forbidden.
      */
@@ -1158,12 +1266,18 @@ class BxBaseModProfileModule extends BxBaseModGeneralModule implements iBxDolCon
 
         // get profiles HTML
         $s = '';
-        foreach ($aProfiles as $iProfileId) {
-            $oProfile = BxDolProfile::getInstance($iProfileId);
+        foreach ($aProfiles as $mixedProfile) {
+            $bProfile = is_array($mixedProfile);
+
+            $oProfile = BxDolProfile::getInstance($bProfile ? (int)$mixedProfile['id'] : (int)$mixedProfile);
             if(!$oProfile)
                 continue;
 
-            $s .= $oProfile->getUnit();
+            $aUnitParams = array();
+            if($bProfile && is_array($mixedProfile['info']))
+                $aUnitParams = array('template' => array('vars' => $mixedProfile['info']));
+
+            $s .= $oProfile->getUnit(0, $aUnitParams);
         }
 
         // return profiles + paginate

+ 8 - 3
modules/base/profile/classes/BxBaseModProfileTemplate.php

@@ -34,11 +34,15 @@ class BxBaseModProfileTemplate extends BxBaseModGeneralTemplate
     /**
      * Get profile unit
      */
-    function unit ($aData, $isCheckPrivateContent = true, $sTemplateName = 'unit.html')
+    function unit ($aData, $isCheckPrivateContent = true, $mixedTemplate = 'unit.html')
     {
-        $aVars = $this->unitVars ($aData, $isCheckPrivateContent, $sTemplateName);
+        list($sTemplate, $aTemplateVars) = is_array($mixedTemplate) ? $mixedTemplate : array($mixedTemplate, array());
 
-        return $this->parseHtmlByName($sTemplateName, $aVars);
+        $aVars = $this->unitVars($aData, $isCheckPrivateContent, $sTemplate);
+        if(!empty($aTemplateVars) && is_array($aTemplateVars))
+            $aVars = array_merge($aVars, $aTemplateVars);
+
+        return $this->parseHtmlByName($sTemplate, $aVars);
     }
 
     function unitVars ($aData, $isCheckPrivateContent = true, $sTemplateName = 'unit.html')
@@ -118,6 +122,7 @@ class BxBaseModProfileTemplate extends BxBaseModGeneralTemplate
             'content_click' => !$bPublic ? 'javascript:bx_alert(' . bx_js_string('"' . _t('_sys_access_denied_to_private_content') . '"') . ');' : '',
             'title' => $sTitle,
             'title_attr' => bx_html_attribute($sTitle),
+            'addon' => !empty($aData['addon']) ? $aData['addon'] : '',
             'module_name' => _t($CNF['T']['txt_sample_single']),
             'ts' => $aData[$CNF['FIELD_ADDED']],
             'bx_if:meta' => array(

+ 1 - 0
modules/base/profile/template/unit.html

@@ -17,6 +17,7 @@
             <div class="bx-def-unit-line">
                 <a class="bx-def-unit-info-title" href="__content_url__" onclick="__content_click__">__title__</a>
             </div>
+            <div class="bx-def-unit-line bx-def-font-small bx-def-font-grayed">__addon__</div>
         </div>
     </div>
 </div>

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

@@ -1633,6 +1633,7 @@
 	<string name="_sys_acl_expire"><![CDATA[Окончание: ]]></string>
 	<string name="_sys_acl_expire_never"><![CDATA[никогда]]></string>
 	<string name="_sys_add_friend"><![CDATA[Добавить друга]]></string>
+        <string name="_sys_add_relation"><![CDATA[Добавить связь]]></string>
 	<string name="_sys_adm_installed"><![CDATA[Установленные]]></string>
 	<string name="_sys_admin_apply"><![CDATA[Применить]]></string>
 	<string name="_sys_admin_filter"><![CDATA[Фильтр:]]></string>
@@ -1709,6 +1710,8 @@
     <string name="_sys_chart_accounts_growth"><![CDATA[Аккаунты: Развитие]]></string>
     <string name="_sys_chart_accounts_growth_speed"><![CDATA[Аккаунты: Скорость развития]]></string>
 	<string name="_sys_close"><![CDATA[Закрыть]]></string>
+        <string name="_sys_confirm"><![CDATA[Подтвердить]]></string>
+        <string name="_sys_confirmed"><![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>
@@ -1727,6 +1730,7 @@
     <string name="_sys_connect_option_privacy"><![CDATA[Настройки конфиденциальности для созданных профилей]]></string>
 
 	<string name="_sys_currency"><![CDATA[{0}{1}]]></string>
+        <string name="_sys_decline"><![CDATA[Отклонить]]></string>
 	<string name="_sys_designbox_0"><![CDATA[Содержимое]]></string>
 	<string name="_sys_designbox_1"><![CDATA[Содержимое + заголовок + фон]]></string>
 	<string name="_sys_designbox_10"><![CDATA[Содержимое + отступ]]></string>
@@ -2366,7 +2370,8 @@
 	<string name="_sys_menu_title_rss"><![CDATA[RSS]]></string>
 	<string name="_sys_menu_title_set_acl_level"><![CDATA[Уровни доступа]]></string>
 	<string name="_sys_menu_title_social_sharing"><![CDATA[Социальные сети]]></string>
-        <string name="_sys_menu_title_create_post"><![CDATA[Создать Пост - Меню]]></string>
+        <string name="_sys_menu_title_create_post"><![CDATA[Создать пост - Меню]]></string>
+        <string name="_sys_menu_title_add_relation"><![CDATA[Добавить связь - Меню]]></string>
 	<string name="_sys_menu_title_submenu"><![CDATA[Подменю сайта]]></string>
 	<string name="_sys_menu_title_toolbar_member"><![CDATA[Панель инструментов - Пользователь]]></string>
 	<string name="_sys_menu_title_toolbar_site"><![CDATA[Панель инструментов - Сайт]]></string>
@@ -2483,6 +2488,15 @@
 	<string name="_sys_paginate_info"><![CDATA[{0}-{1}]]></string>
 	<string name="_sys_paginate_view_all"><![CDATA[Просмотреть все]]></string>
 	<string name="_sys_please_select"><![CDATA[Пожалуйста, выберите...]]></string>
+        <string name="_sys_pre_lists_relations"><![CDATA[Отношения]]></string>
+        <string name="_sys_pre_lists_relations_husband"><![CDATA[муж]]></string>
+        <string name="_sys_pre_lists_relations_wife"><![CDATA[жена]]></string>
+        <string name="_sys_pre_lists_relations_father"><![CDATA[отец]]></string>
+        <string name="_sys_pre_lists_relations_mother"><![CDATA[мать]]></string>
+        <string name="_sys_pre_lists_relations_son"><![CDATA[сын]]></string>
+        <string name="_sys_pre_lists_relations_daughter"><![CDATA[дочь]]></string>
+        <string name="_sys_pre_lists_relations_brother"><![CDATA[брат]]></string>
+        <string name="_sys_pre_lists_relations_sister"><![CDATA[сестра]]></string>
 	<string name="_sys_pre_lists_report_types"><![CDATA[Типы жалоб]]></string>
 	<string name="_sys_pre_lists_report_types_spam"><![CDATA[спам]]></string>
 	<string name="_sys_pre_lists_report_types_scam"><![CDATA[скам]]></string>
@@ -2517,10 +2531,11 @@
     <string name="_sys_ps_group_title_secret"><![CDATA[Секретная]]></string>
     <string name="_sys_ps_ferr_incorrect_select"><![CDATA[Вам нужно выбрать значение]]></string>
     <string name="_sys_ps_space_title_friend"><![CDATA[друг]]></string>
-	<string name="_sys_push_notification_request"><![CDATA[Хотите получать уведомления с сайта {0}?]]></string>   
+    <string name="_sys_push_notification_request"><![CDATA[Хотите получать уведомления с сайта {0}?]]></string>   
     <string name="_sys_push_notification_request_yes"><![CDATA[Да]]></string>   
     <string name="_sys_push_notification_request_no"><![CDATA[Нет, спасибо]]></string>
     <string name="_sys_read_more"><![CDATA[Продолжить чтение "{0}"]]></string>
+    <string name="_sys_relation"><![CDATA[Связь]]></string>
 	<string name="_sys_request_module_not_found_cpt"><![CDATA[Модуль не найден]]></string>
 	<string name="_sys_request_module_not_found_cnt"><![CDATA[Модуль({0}) не найден]]></string>
 	<string name="_sys_request_page_not_found_cpt"><![CDATA[Страница не найдена]]></string>
@@ -2548,6 +2563,7 @@
 	<string name="_sys_splash_inp_placeholder"><![CDATA[адрес сайта]]></string>
 	<string name="_sys_splash_inp_postfix"><![CDATA[.online.me]]></string>
 	<string name="_sys_splash_slogan"><![CDATA[Самый простой способ создать свой собственный социальный сайт.]]></string>
+        <string name="_sys_status"><![CDATA[Статус]]></string>
 	<string name="_sys_storage_err_db"><![CDATA[ошибка базы данных]]></string>
 	<string name="_sys_storage_err_engine_add"><![CDATA[произошла ошибка]]></string>
 	<string name="_sys_storage_err_engine_get"><![CDATA[произошла ошибка]]></string>
@@ -2691,14 +2707,15 @@
 	<string name="_sys_txt_splash_slide01_desc"><![CDATA[Истории, идеи, фотографии, видео, вопросы, шутки, обсуждения, что угодно.<br />Следите за интересными людьми и будьте интересными для других.]]></string>
 	<string name="_sys_txt_splash_slide02_txt"><![CDATA["Присядь на стул. Попробуй.<br />Зарегистрируйся. Жизнь такая<br />сладкая."]]></string>
 	<string name="_sys_txt_splash_slide03_txt"><![CDATA["Лучший способ завести друзей - быть кому-то другом."]]></string>
-    <string name="_sys_txt_splash_slide04_txt"><![CDATA[Уже один из нас?]]></string>
-    <string name="_sys_txt_switch_profile_context"><![CDATA[Переключиться]]></string>
+        <string name="_sys_txt_splash_slide04_txt"><![CDATA[Уже один из нас?]]></string>
+        <string name="_sys_txt_switch_profile_context"><![CDATA[Переключиться]]></string>
 	<string name="_sys_txt_unsubscribe_email_settings_update_success"><![CDATA[Ваши имейл-установки были удачно обновлены.]]></string>
 	<string name="_sys_txt_unsubscribe_error_occured"><![CDATA[Произошла ошибка, пожалуйста, зайдите в свой аккаунт и обновите имейл-установки или свяжитесь с администратором сайта, чтобы он Вас отписал вручную.]]></string>
 	<string name="_sys_txt_unsubscribe_info"><![CDATA[Обновить имейл-установки для <b>{0}</b>]]></string>
-    <string name="_sys_txt_unsubscribe_wrong_link"><![CDATA[Ссылка отписки неправильная.]]></string>
-    <string name="_sys_txt_user_n"><![CDATA[Пользователь #{0}]]></string>
-  <string name="_sys_txt_reports_title"><![CDATA[Жалобы]]></string>
+        <string name="_sys_txt_unsubscribe_wrong_link"><![CDATA[Ссылка отписки неправильная.]]></string>
+        <string name="_sys_txt_user_n"><![CDATA[Пользователь #{0}]]></string>
+        <string name="_sys_txt_reports_title"><![CDATA[Жалобы]]></string>
+        <string name="_sys_unconfirmed"><![CDATA[Неподтвержденный]]></string>
 	<string name="_sys_upgrade_conclusion"><![CDATA[<h3>Важная информация:</h3><p>{0}</p>]]></string>
 	<string name="_sys_upgrade_db_and_files_versions_different"><![CDATA[База данных и версии файлов отличаются, возможно, предыдущий патч не был правильно применён.]]></string>
 	<string name="_sys_upgrade_files_checksum_failed"><![CDATA[Невозможно применить обновление, так как следующие файлы были изменены: {0}]]></string>