Parcourir la source

#281 Groups module: unit design

Alex Trofimov il y a 10 ans
Parent
commit
cf9237d6ef

+ 22 - 0
inc/classes/BxDolConnection.php

@@ -308,6 +308,28 @@ class BxDolConnection extends BxDol implements iBxDolFactoryObject
         return $this->_oQuery->getCommonContent($iInitiator1, $iInitiator2, $isMutual, $iStart, $iLimit, $iOrder);
         return $this->_oQuery->getCommonContent($iInitiator1, $iInitiator2, $isMutual, $iStart, $iLimit, $iOrder);
     }
     }
 
 
+    /**
+     * Get connected content count
+     * @param $iInitiator initiator of the connection
+     * @param $isMutual get mutual connections only
+     * @return number of connections
+     */
+    public function getConnectedContentCount ($iInitiator, $isMutual = false)
+    {
+        return $this->_oQuery->getConnectedContentCount($iInitiator, $isMutual);
+    }
+
+    /**
+     * Get connected initiators count
+     * @param $iContent content of the connection
+     * @param $isMutual get mutual connections only
+     * @return number of connections
+     */
+    public function getConnectedInitiatorsCount ($iContent, $isMutual = false)
+    {
+        return $this->_oQuery->getConnectedInitiatorsCount($iContent, $isMutual);
+    }
+
     /**
     /**
      * Get connected content IDs
      * Get connected content IDs
      * @param $iInitiator initiator of the connection
      * @param $iInitiator initiator of the connection

+ 20 - 0
inc/classes/BxDolConnectionQuery.php

@@ -105,6 +105,26 @@ class BxDolConnectionQuery extends BxDolDb
         return $this->prepare("SELECT $sFields FROM `" . $this->_sTable . "` AS `c` $sJoin WHERE 1 $sWhere $sOrder LIMIT ?, ?", $iStart, $iLimit);
         return $this->prepare("SELECT $sFields FROM `" . $this->_sTable . "` AS `c` $sJoin WHERE 1 $sWhere $sOrder LIMIT ?, ?", $iStart, $iLimit);
     }
     }
 
 
+    public function getConnectedContentCount ($iInitiator, $isMutual = false)
+    {
+        $sWhere = $this->prepare(" AND `c`.`initiator` = ?", $iInitiator);
+        $sQuery = $this->_getConnectionsQueryCount($sWhere, '', $isMutual);
+        return $this->getOne($sQuery);
+    }
+
+    public function getConnectedInitiatorsCount ($iContent, $isMutual = false)
+    {
+        $sWhere = $this->prepare(" AND `c`.`content` = ?", $iContent);
+        $sQuery = $this->_getConnectionsQueryCount($sWhere, '', $isMutual);
+        return $this->getOne($sQuery);
+    }
+
+    protected function _getConnectionsQueryCount ($sWhere, $sJoin = '', $isMutual = false)
+    {
+        $sWhere .= (false !== $isMutual) ? $this->prepare(" AND `c`.`mutual` = ?", $isMutual) : '';
+        return "SELECT COUNT(`id`) FROM `" . $this->_sTable . "` AS `c` $sJoin WHERE 1 $sWhere";
+    }
+
     protected function _getOrderClause ($iOrder = BX_CONNECTIONS_ORDER_NONE, $sTable = '')
     protected function _getOrderClause ($iOrder = BX_CONNECTIONS_ORDER_NONE, $sTable = '')
     {
     {
         if ($sTable)
         if ($sTable)

+ 4 - 2
inc/js/functions.js

@@ -513,7 +513,7 @@ function bx_time(sLang, isAutoupdate, sRootSel) {
  * @param iContentId - content id, initiator is always current logged in user
  * @param iContentId - content id, initiator is always current logged in user
  * @param bConfirm - show confirmation dialog
  * @param bConfirm - show confirmation dialog
  */
  */
-function bx_conn_action(e, sObj, sAction, iContentId, bConfirm) {
+function bx_conn_action(e, sObj, sAction, iContentId, bConfirm, fOnComplete) {
     if ('undefined' != typeof(bConfirm) && bConfirm && !confirm(_t('_are you sure?')))
     if ('undefined' != typeof(bConfirm) && bConfirm && !confirm(_t('_are you sure?')))
         return;
         return;
                 
                 
@@ -529,7 +529,9 @@ function bx_conn_action(e, sObj, sAction, iContentId, bConfirm) {
         if (data.err) {
         if (data.err) {
             alert(data.msg);
             alert(data.msg);
         } else {
         } else {
-            if (!loadDynamicBlockAuto(e))
+            if ('function' == typeof(fOnComplete))
+                fOnComplete(data, e);
+            else if (!loadDynamicBlockAuto(e))
                 location.reload();
                 location.reload();
             else
             else
                 $('#bx-popup-ajax-wrapper-bx_persons_view_actions_more').remove();
                 $('#bx-popup-ajax-wrapper-bx_persons_view_actions_more').remove();

+ 10 - 5
modules/base/profile/classes/BxBaseModProfileTemplate.php

@@ -24,15 +24,22 @@ class BxBaseModProfileTemplate extends BxBaseModGeneralTemplate
      */
      */
     function unit ($aData, $isCheckPrivateContent = true, $sTemplateName = 'unit.html')
     function unit ($aData, $isCheckPrivateContent = true, $sTemplateName = 'unit.html')
     {
     {
-        $CNF = &$this->_oConfig->CNF;
-
         // TODO: add privacy checking here
         // TODO: add privacy checking here
 
 
+        $aVars = $this->unitVars ($aData, $isCheckPrivateContent, $sTemplateName);
+
+        return $this->parseHtmlByName($sTemplateName, $aVars);
+    }
+
+    function unitVars ($aData, $isCheckPrivateContent = true, $sTemplateName = 'unit.html')
+    {
+        $CNF = &$this->_oConfig->CNF;
+
         // get profile's url
         // get profile's url
         $sUrl = BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=' . $CNF['URI_VIEW_ENTRY'] . '&id=' . $aData[$CNF['FIELD_ID']]);
         $sUrl = BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=' . $CNF['URI_VIEW_ENTRY'] . '&id=' . $aData[$CNF['FIELD_ID']]);
 
 
         // generate html
         // generate html
-        $aVars = array (
+        return array (
             'id' => $aData[$CNF['FIELD_ID']],
             'id' => $aData[$CNF['FIELD_ID']],
             'thumb_url' => $this->thumb ($aData),
             'thumb_url' => $this->thumb ($aData),
             'content_url' => $sUrl,
             'content_url' => $sUrl,
@@ -40,8 +47,6 @@ class BxBaseModProfileTemplate extends BxBaseModGeneralTemplate
             'module_name' => _t($CNF['T']['txt_sample_single']),
             'module_name' => _t($CNF['T']['txt_sample_single']),
             'ts' => $aData[$CNF['FIELD_ADDED']],
             'ts' => $aData[$CNF['FIELD_ADDED']],
         );
         );
-
-        return $this->parseHtmlByName($sTemplateName, $aVars);
     }
     }
 
 
     /**
     /**

+ 3 - 3
modules/boonex/groups/classes/BxGroupsSearchResult.php

@@ -13,7 +13,7 @@ class BxGroupsSearchResult extends BxBaseModProfileSearchResult
 {
 {
     function __construct($sMode = '', $aParams = false)
     function __construct($sMode = '', $aParams = false)
     {
     {
-        parent::__construct($sMode, $aParams);
+        parent::__construct($sMode, $aParams); 
 
 
         $this->aCurrent =  array(
         $this->aCurrent =  array(
             'name' => 'bx_groups',
             'name' => 'bx_groups',
@@ -36,7 +36,7 @@ class BxGroupsSearchResult extends BxBaseModProfileSearchResult
                     'table' => 'bx_groups_data',
                     'table' => 'bx_groups_data',
                     'mainField' => 'content_id',
                     'mainField' => 'content_id',
                     'onField' => 'id',
                     'onField' => 'id',
-                    'joinFields' => array('id', 'group_name', 'picture', 'added'),
+                    'joinFields' => array('id', 'group_name', 'picture', 'cover', 'added'),
                 ),
                 ),
                 'account' => array(
                 'account' => array(
                     'type' => 'INNER',
                     'type' => 'INNER',
@@ -109,7 +109,7 @@ class BxGroupsSearchResult extends BxBaseModProfileSearchResult
                 $this->isError = true;
                 $this->isError = true;
         }
         }
 
 
-        parent::__construct();
+        $this->sCenterContentUnitSelector = false;
     }
     }
 
 
     function getAlterOrder()
     function getAlterOrder()

+ 22 - 0
modules/boonex/groups/classes/BxGroupsTemplate.php

@@ -19,6 +19,28 @@ class BxGroupsTemplate extends BxBaseModProfileTemplate
         $this->MODULE = 'bx_groups';
         $this->MODULE = 'bx_groups';
         parent::__construct($oConfig, $oDb);
         parent::__construct($oConfig, $oDb);
     }
     }
+
+    function unitVars ($aData, $isCheckPrivateContent = true, $sTemplateName = 'unit.html')
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        $aVars = parent::unitVars ($aData, $isCheckPrivateContent, $sTemplateName);
+
+        $oConn = BxDolConnection::getObjectInstance('bx_groups_fans');
+
+        $aVars['cover_url'] = $this->urlCover ($aData, true);
+        $aVars['members'] = _t('_bx_groups_txt_N_fans', $oConn ? $oConn->getConnectedInitiatorsCount($aData[$CNF['FIELD_ID']], true) : 0);
+        $aVars['bx_if:btn'] = array (
+            'condition' => isLogged() && !$oConn->isConnected(bx_get_logged_profile_id(), $aData[$CNF['FIELD_ID']], true),
+            'content' => array (
+                'id' => $aData[$CNF['FIELD_ID']],
+                'title' => $oConn->isConnectedNotMutual(bx_get_logged_profile_id(), $aData[$CNF['FIELD_ID']]) ? _t('_bx_groups_menu_item_title_become_fan_sent') : _t('_bx_groups_menu_item_title_become_fan'),
+                'object' => 'bx_groups_fans'
+            ),
+        );
+
+        return $aVars;
+    }
 }
 }
 
 
 /** @} */
 /** @} */

+ 10 - 10
modules/boonex/groups/install/langs/en.xml

@@ -134,14 +134,14 @@
     <string name="_bx_groups_menu_item_title_unfriend_cancel_request"><![CDATA[Cancel friend request]]></string>
     <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_unfriend_reject_request"><![CDATA[Reject friend request]]></string>
 
 
-    <string name="_bx_groups_menu_item_title_system_become_fan"><![CDATA[Become fan]]></string>
-    <string name="_bx_groups_menu_item_title_become_fan"><![CDATA[Become fan]]></string>
-    <string name="_bx_groups_menu_item_title_become_fan_sent"><![CDATA[Become fan (requested)]]></string>
-    <string name="_bx_groups_menu_item_title_become_fan_confirm"><![CDATA[Accept fan request]]></string>
-    <string name="_bx_groups_menu_item_title_system_leave_group"><![CDATA[Leave]]></string>
-    <string name="_bx_groups_menu_item_title_leave_group"><![CDATA[Leave]]></string>
-    <string name="_bx_groups_menu_item_title_leave_group_cancel_request"><![CDATA[Cancel fan request]]></string>
-    <string name="_bx_groups_menu_item_title_leave_group_reject_request"><![CDATA[Reject fan request]]></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>
+    <string name="_bx_groups_menu_item_title_become_fan_confirm"><![CDATA[Accept Request]]></string>
+    <string name="_bx_groups_menu_item_title_system_leave_group"><![CDATA[Leave Group]]></string>
+    <string name="_bx_groups_menu_item_title_leave_group"><![CDATA[Leave Group]]></string>
+    <string name="_bx_groups_menu_item_title_leave_group_cancel_request"><![CDATA[Cancel Request]]></string>
+    <string name="_bx_groups_menu_item_title_leave_group_reject_request"><![CDATA[Reject Request]]></string>
 
 
     <string name="_bx_groups_menu_item_title_system_subscribe"><![CDATA[Subscribe]]></string>
     <string name="_bx_groups_menu_item_title_system_subscribe"><![CDATA[Subscribe]]></string>
     <string name="_bx_groups_menu_item_title_subscribe"><![CDATA[Subscribe]]></string>
     <string name="_bx_groups_menu_item_title_subscribe"><![CDATA[Subscribe]]></string>
@@ -184,6 +184,8 @@
 
 
     <string name="_bx_groups_txt_account_pending"><![CDATA[This group is pending approval, please wait until it is activated.]]></string>
     <string name="_bx_groups_txt_account_pending"><![CDATA[This group is pending approval, please wait until it is activated.]]></string>
     <string name="_bx_groups_txt_account_suspended"><![CDATA[This group is suspended.]]></string>
     <string name="_bx_groups_txt_account_suspended"><![CDATA[This group is suspended.]]></string>
+    <string name="_bx_groups_txt_N_fans"><![CDATA[{0} fans]]></string>
+    <string name="_bx_groups_txt_sample_single"><![CDATA[group]]></string>
 
 
     <string name="_bx_groups_pre_lists_cats"><![CDATA[Group categories]]></string>
     <string name="_bx_groups_pre_lists_cats"><![CDATA[Group categories]]></string>
     <string name="_bx_groups_cat_General"><![CDATA[General]]></string>
     <string name="_bx_groups_cat_General"><![CDATA[General]]></string>
@@ -192,6 +194,4 @@
     <string name="_bx_groups_cat_Causes"><![CDATA[Causes]]></string>
     <string name="_bx_groups_cat_Causes"><![CDATA[Causes]]></string>
     <string name="_bx_groups_cat_Fun"><![CDATA[Fun]]></string>
     <string name="_bx_groups_cat_Fun"><![CDATA[Fun]]></string>
     <string name="_bx_groups_cat_Uncategorised"><![CDATA[Uncategorised]]></string>
     <string name="_bx_groups_cat_Uncategorised"><![CDATA[Uncategorised]]></string>
-
-    <string name="_bx_groups_txt_sample_single"><![CDATA[group]]></string>
 </resources>
 </resources>

+ 4 - 4
modules/boonex/groups/install/langs/ru.xml

@@ -139,8 +139,8 @@
     <string name="_bx_groups_menu_item_title_become_fan_confirm"><![CDATA[Одобрить присоединение]]></string>
     <string name="_bx_groups_menu_item_title_become_fan_confirm"><![CDATA[Одобрить присоединение]]></string>
     <string name="_bx_groups_menu_item_title_system_leave_group"><![CDATA[Покинуть группу]]></string>
     <string name="_bx_groups_menu_item_title_system_leave_group"><![CDATA[Покинуть группу]]></string>
     <string name="_bx_groups_menu_item_title_leave_group"><![CDATA[Покинуть группу]]></string>
     <string name="_bx_groups_menu_item_title_leave_group"><![CDATA[Покинуть группу]]></string>
-    <string name="_bx_groups_menu_item_title_leave_group_cancel_request"><![CDATA[Отменить присоединение к группе]]></string>
-    <string name="_bx_groups_menu_item_title_leave_group_reject_request"><![CDATA[Отвергнуть присоединение к группе]]></string>
+    <string name="_bx_groups_menu_item_title_leave_group_cancel_request"><![CDATA[Отменить присоединение]]></string>
+    <string name="_bx_groups_menu_item_title_leave_group_reject_request"><![CDATA[Отвергнуть присоединение]]></string>
 
 
     <string name="_bx_groups_menu_item_title_system_subscribe"><![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_subscribe"><![CDATA[Подписаться]]></string>
@@ -183,6 +183,8 @@
 
 
     <string name="_bx_groups_txt_account_pending"><![CDATA[Эта группа ожидает одобрения. Пожалуйста, дождитесь ее активации.]]></string>
     <string name="_bx_groups_txt_account_pending"><![CDATA[Эта группа ожидает одобрения. Пожалуйста, дождитесь ее активации.]]></string>
     <string name="_bx_groups_txt_account_suspended"><![CDATA[Эта группа заблокирована.]]></string>
     <string name="_bx_groups_txt_account_suspended"><![CDATA[Эта группа заблокирована.]]></string>
+    <string name="_bx_groups_txt_N_fans"><![CDATA[{0} участников]]></string>
+    <string name="_bx_groups_txt_sample_single"><![CDATA[Группа]]></string>
 
 
     <string name="_bx_groups_pre_lists_cats"><![CDATA[Категории групп]]></string>
     <string name="_bx_groups_pre_lists_cats"><![CDATA[Категории групп]]></string>
     <string name="_bx_groups_cat_General"><![CDATA[Обобщение]]></string>
     <string name="_bx_groups_cat_General"><![CDATA[Обобщение]]></string>
@@ -191,6 +193,4 @@
     <string name="_bx_groups_cat_Causes"><![CDATA[Движение]]></string>
     <string name="_bx_groups_cat_Causes"><![CDATA[Движение]]></string>
     <string name="_bx_groups_cat_Fun"><![CDATA[Юмор]]></string>
     <string name="_bx_groups_cat_Fun"><![CDATA[Юмор]]></string>
     <string name="_bx_groups_cat_Uncategorised"><![CDATA[Без категории]]></string>
     <string name="_bx_groups_cat_Uncategorised"><![CDATA[Без категории]]></string>
-
-    <string name="_bx_groups_txt_sample_single"><![CDATA[Группа]]></string>
 </resources>
 </resources>

+ 60 - 0
modules/boonex/groups/template/css/main.css

@@ -1 +1,61 @@
 @import url(../../../../base/profile/template/css/main.css);
 @import url(../../../../base/profile/template/css/main.css);
+
+.bx-base-pofile-cover-info .bx-def-ava {
+    border-width:0.0625rem;
+    border-radius:0.1875rem;
+    -moz-border-radius:0.1875rem;
+    -webkit-border-radius:0.1875rem;
+}
+
+.bx-search-result-block {
+    text-align:center;
+}
+
+.bx-groups-unit {
+    display:inline-block;
+}
+
+.bx-groups-cover {
+    display:block;
+
+    height:7.5rem;
+    margin:0.0625rem;
+
+    line-height:7.5rem;
+    text-align:center;
+
+    background-repeat:no-repeat;
+    background-position:center center;
+    -webkit-background-size:cover;
+    -moz-background-size:cover;
+    -o-background-size:cover;
+    background-size:cover;
+}
+
+.bx-groups-cover,
+.bx-groups-unit-info {
+    width:17.5rem;
+}
+
+.bx-groups-cover img {
+    background-color:#fff;
+    vertical-align:middle;
+}
+
+.bx-groups-unit-title {
+    line-height:1.8rem;
+    text-align:center;
+    white-space:nowrap;
+    text-overflow:ellipsis;
+    overflow:hidden;    
+}
+
+.bx-groups-unit-info-members {
+    float:left;
+    line-height:1.5rem;
+    vertical-align:middle;
+}
+
+.bx-groups-unit-info-btn {
+    float:right;
+}

+ 14 - 1
modules/boonex/groups/template/unit.html

@@ -1 +1,14 @@
-<bx_include_base:../modules/base/profile/template/unit.html />
+<div class="bx-groups-unit bx-def-border bx-def-round-corners bx-def-color-bg-sec bx-def-margin-thd">
+    <a class="bx-groups-cover" style="background-image:url(__cover_url__);" href="__content_url__">
+        <img class="bx-def-thumb-size bx-def-border bx-def-round-corners" src="__thumb_url__" />
+    </a>
+    <div class="bx-groups-unit-title"><a href="__content_url__">__title__</a></div>
+    <div class="bx-groups-unit-info bx-def-margin-sec-bottom bx-clearfix">
+        <div class="bx-groups-unit-info-members bx-def-margin-sec-left bx-def-font-grayed bx-def-font-small">__members__</div>
+        <div class="bx-groups-unit-info-btn bx-def-margin-sec-right">
+            <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>
+</div>