AntonLV 5 лет назад
Родитель
Сommit
15ad1a9256

+ 1 - 0
inc/classes/BxDolCmts.php

@@ -33,6 +33,7 @@ define('BX_CMT_FILTER_ALL', 'all');
 define('BX_CMT_FILTER_OTHERS', 'others');
 define('BX_CMT_FILTER_FRIENDS', 'friends');
 define('BX_CMT_FILTER_SUBSCRIPTIONS', 'subscriptions');
+define('BX_CMT_FILTER_PINNED', 'pinned');
 
 define('BX_CMT_ORDER_WAY_ASC', 'asc');
 define('BX_CMT_ORDER_WAY_DESC', 'desc');

+ 17 - 9
inc/classes/BxDolCmtsQuery.php

@@ -253,23 +253,31 @@ class BxDolCmtsQuery extends BxDolDb
     function getComments ($iId, $iCmtVParentId = 0, $iAuthorId = 0, $sFilter = '', $aOrder = array(), $iStart = 0, $iCount = -1)
     {
     	$aBindings = array(
-    		'cmt_object_id' => $iId,
+            'cmt_object_id' => $iId,
             'system_id' => $this->_oMain->getSystemId()
     	);
         $sFields = $sJoin = "";
         
         $sWhereParent = '';
         if((int)$iCmtVParentId >= 0) {
-        	$aBindings['cmt_vparent_id'] = $iCmtVParentId;
+            $aBindings['cmt_vparent_id'] = $iCmtVParentId;
 
             $sWhereParent = " AND `{$this->_sTable}`.`cmt_vparent_id` = :cmt_vparent_id";
         }
 
-        if(in_array($sFilter, array(BX_CMT_FILTER_FRIENDS, BX_CMT_FILTER_SUBSCRIPTIONS))) {
-            $oConnection = BxDolConnection::getObjectInstance($this->_oMain->getConnectionObject($sFilter));
+        $sWhereFilter = '';
+        switch($sFilter) {
+            case BX_CMT_FILTER_PINNED:
+                $sWhereFilter .= " AND `{$this->_sTable}`.`cmt_pinned` <> 0";
+                break;
+
+            case BX_CMT_FILTER_FRIENDS:
+            case BX_CMT_FILTER_SUBSCRIPTIONS:
+                $oConnection = BxDolConnection::getObjectInstance($this->_oMain->getConnectionObject($sFilter));
 
-            $aQueryParts = $oConnection->getConnectedContentAsSQLParts($this->_sTable, 'cmt_author_id', $iAuthorId);
-            $sJoin .= ' ' . $aQueryParts['join'];
+                $aQueryParts = $oConnection->getConnectedContentAsSQLParts($this->_sTable, 'cmt_author_id', $iAuthorId);
+                $sJoin .= ' ' . $aQueryParts['join'];
+                break;
         }
 
         $sOrder = " ORDER BY `{$this->_sTable}`.`cmt_pinned` DESC, `{$this->_sTable}`.`cmt_time` ASC";
@@ -278,7 +286,7 @@ class BxDolCmtsQuery extends BxDolDb
 
             switch($aOrder['by']) {
                 case BX_CMT_ORDER_BY_DATE:
-                    $sOrder = " ORDER BY `{$this->_sTable}`.`cmt_pinned` DESC, `{$this->_sTable}`.`cmt_time` " . $aOrder['way'];
+                    $sOrder = " ORDER BY `{$this->_sTable}`.`cmt_time` " . $aOrder['way'];
                     break;
 
                 case BX_CMT_ORDER_BY_POPULAR:
@@ -292,7 +300,7 @@ class BxDolCmtsQuery extends BxDolDb
                     if(count($aSortFields) == 0)
                         array_push($aSortFields, '`' . $this->_sTable . '`.`id`');
 
-                    $sOrder = " ORDER BY `{$this->_sTable}`.`cmt_pinned` DESC, " . implode($aOrder['way'] . ', ', $aSortFields) . " " . $aOrder['way'];
+                    $sOrder = " ORDER BY " . implode($aOrder['way'] . ', ', $aSortFields) . " " . $aOrder['way'];
                     break;
             }
         }
@@ -306,7 +314,7 @@ class BxDolCmtsQuery extends BxDolDb
             FROM `{$this->_sTable}`
             LEFT JOIN `{$this->_sTableIds}` ON (`{$this->_sTable}`.`cmt_id` = `{$this->_sTableIds}`.`cmt_id` AND `{$this->_sTableIds}`.`system_id` = :system_id)
             $sJoin
-            WHERE `{$this->_sTable}`.`cmt_object_id` = :cmt_object_id" . $sWhereParent . $sOrder . $sLimit;
+            WHERE `{$this->_sTable}`.`cmt_object_id` = :cmt_object_id" . $sWhereParent . $sWhereFilter . $sOrder . $sLimit;
         return $this->getAll($sQuery, $aBindings);
     }
 

+ 1 - 1
inc/js/classes/BxDolCmts.js

@@ -684,7 +684,7 @@ BxDolCmts.prototype._getCmts = function (oElement, oRequestParams, onLoad)
     oData['action'] = 'GetCmts';
     oData = $.extend({}, oData, oRequestParams);
 
-    var sListId =  this._sRootId + ' #cmt' + oData['CmtParent'] + ' > ul:first';
+    var sListId =  this._sRootId + ' #cmt' + oData['CmtParent'] + ' > ul.cmts-all:first';
 
     if(oElement)
         this._loadingInBlock(oElement, true);

+ 3 - 0
template/comment_divider.html

@@ -0,0 +1,3 @@
+<li class="__style_prefix__-divider bx-def-padding-top bx-def-margin-bottom">
+    <div class="bx-def-hr"></div>
+</li>

+ 2 - 1
template/comments_block.html

@@ -3,7 +3,8 @@
     <div id="cmt0" class="cmts">
         __content_before__
         <a id="__list_anchor__" class="bx-anchor-invisible"></a>
-        <ul class="cmts">__comments__</ul>
+        <ul class="cmts cmts-pinned">__comments_pinned__</ul>
+        <ul class="cmts cmts-all">__comments__</ul>
         __content_after__
     </div>
     __post_form_bottom__

+ 34 - 3
template/scripts/BxBaseCmts.php

@@ -141,6 +141,7 @@ class BxBaseCmts extends BxDolCmts
         //add live update
 
         $sComments = $this->getComments($aBp, $aDp);
+        $sCommentsPinned = $this->getCommentsPinned($aBp, $aDp);
         $sContentBefore = $this->_getContentBefore($aBp, $aDp);
         $sContentAfter = $this->_getContentAfter($aBp, $aDp);
         $sPostFormTop = $this->getFormBoxPost($aBp, array_merge($aDp, array('type' => $this->_sDisplayType, 'position' => BX_CMT_PFP_TOP)));
@@ -159,6 +160,7 @@ class BxBaseCmts extends BxDolCmts
             'post_form_top' => &$sPostFormTop,
             'content_before' => &$sContentBefore,
             'comments' => &$sComments,
+            'comments_pinned' => &$sCommentsPinned,
             'content_after' => &$sContentAfter,
             'post_form_bottom'  => &$sPostFormBottom,
             'js_content' => &$sJsContent,
@@ -172,6 +174,7 @@ class BxBaseCmts extends BxDolCmts
             'id' => $this->getId(),
             'content_before' => $sContentBefore,
             'comments' => $sComments,
+            'comments_pinned' => $sCommentsPinned,
             'content_after' => $sContentAfter,
             'post_form_top' => $sPostFormTop,
             'post_form_bottom'  => $sPostFormBottom,
@@ -210,11 +213,28 @@ class BxBaseCmts extends BxDolCmts
         $sCmts = '';
         foreach($aCmts as $k => $aCmt)
             $sCmts .= $this->getComment($aCmt, $aBp, $aDp);
+        $sCmts = $this->_getMoreLink($sCmts, $aBp, $aDp);       
 
-        $sCmts = $this->_getMoreLink($sCmts, $aBp, $aDp);
         return $sCmts;
     }
 
+    function getCommentsPinned($aBp = array(), $aDp = array())
+    {
+        $this->_prepareParams($aBp, $aDp);
+
+        $aCmts = $this->getCommentsArray($aBp['vparent_id'], BX_CMT_FILTER_PINNED, $aBp['order'], 0, -1);
+        if(empty($aCmts) || !is_array($aCmts))
+            return '';
+
+        $aDp['read_only'] = true;
+
+        $sCmts = '';
+        foreach($aCmts as $k => $aCmt)
+            $sCmts .= $this->getComment($aCmt, $aBp, $aDp);
+
+        return $sCmts . $this->_getDivider();
+    }
+
     public function getCommentsByStructure($aBp = array(), $aDp = array())
     {
         if(empty($aDp['structure']))
@@ -311,7 +331,9 @@ class BxBaseCmts extends BxDolCmts
         if(!empty($aDp['class_comment_content']))
             $sClassCnt .= ' ' . $aDp['class_comment_content'];
 
-        $sActions = $this->_getActionsBox($aCmt, $aDp);
+        $sActions = '';
+        if(!isset($aDp['read_only']) || $aDp['read_only'] === false)
+            $sActions = $this->_getActionsBox($aCmt, $aDp);
 
         $aTmplReplyTo = array();
         if((int)$aCmt['cmt_parent_id'] != 0) {
@@ -922,7 +944,9 @@ class BxBaseCmts extends BxDolCmts
                 'caption' => '',
                 'attrs' => array(
                     'onclick' => 'javascript:' . $this->_sJsObjName . '.cmtShowForm(this)',
-                    'placeholder' => _t($this->_aT['txt_min_form_placeholder'], $sAuthorName)
+                    'placeholder' => _t($this->_aT['txt_min_form_placeholder'], $sAuthorName),
+                    'autocomplete' => 'off',
+                    'readonly' => 'readonly'
                 ),
                 'value' => '',
             );
@@ -1294,6 +1318,13 @@ class BxBaseCmts extends BxDolCmts
         ));
     }
 
+    protected function _getDivider()
+    {
+        return $this->_oTemplate->parseHtmlByName('comment_divider.html', array(
+            'style_prefix' => $this->_sStylePrefix
+        ));
+    }
+
     protected function _getViewImagePopup()
     {
     	$sViewImagePopupId = 'cmts-box-' . $this->_sSystem . '-' . $this->getId() . '-view-image-popup' ;