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

Merge branch 'master' of https://github.com/unaio/una

roman.lesnikov@gmail.com 2 лет назад
Родитель
Сommit
ae2d4cf07e

+ 30 - 15
inc/classes/BxDolSearch.php

@@ -691,18 +691,17 @@ class BxDolSearchResult implements iBxDolReplaceable
      */
     function setFieldUnit ($sFieldName, $sTableName, $sOperator = '', $bRenameMode = true)
     {
-        if (!empty($sOperator))
-            $sqlUnit  = "$sOperator(`$sTableName`.`$sFieldName`)";
-        else
-            $sqlUnit  = "`$sTableName`.`$sFieldName`";
+        $bOperator = !empty($sOperator);
 
-        if (isset($this->aPseud) && $bRenameMode !== false) {
-            $sKey = array_search($sFieldName, $this->aPseud);
-            if ($sKey !== false) {
-                $sqlUnit .= " as `$sKey`";
-                unset($this->aPseud[$sKey]);
-            }
+        $sqlUnit  = "`$sTableName`.`$sFieldName`";
+        if($bOperator)
+            $sqlUnit = $sOperator . '(' . $sqlUnit . ')';
+
+        if(!empty($this->aPseud) && $bRenameMode !== false && ($sKey = array_search($sFieldName . ($bOperator ? '_' . strtolower($sOperator) : ''), $this->aPseud)) !== false) {
+            $sqlUnit .= " as `$sKey`";
+            unset($this->aPseud[$sKey]);
         }
+
         return $sqlUnit . ', ';
     }
 
@@ -847,7 +846,7 @@ class BxDolSearchResult implements iBxDolReplaceable
         $aSql = array();
         // joinFields & join
         if (isset($this->aCurrent['join']) && is_array($this->aCurrent['join'])) {
-            $aSql = array('join'=>'', 'ownFields'=>'', 'joinFields'=>'', 'groupBy'=>'');
+            $aSql = array('join' => '', 'ownFields' => '', 'joinFields' => '', 'groupBy' => '', 'groupHaving' => '');
             foreach ($this->aCurrent['join'] as $sKey => $aValue) {
                 $sAlias = isset($aValue['table_alias']) ? $aValue['table_alias'] : $aValue['table'];
                 $sTableAlias = isset($aValue['table_alias']) ? " AS {$aValue['table_alias']} " : '';
@@ -857,15 +856,27 @@ class BxDolSearchResult implements iBxDolReplaceable
                         $aSql['joinFields'] .= $this->setFieldUnit($sValue, $sAlias, isset($aValue['operator']) ? $aValue['operator'] : null, $bRenameMode);
                     }
                 }
+
                 // group by
-                if (isset($aValue['groupTable']))
-                    $aSql['groupBy'] =  "GROUP BY `{$aValue['groupTable']}`.`{$aValue['groupField']}`, ";
+                if(isset($aValue['groupTable']))
+                    $aSql['groupBy'] .= "`{$aValue['groupTable']}`.`{$aValue['groupField']}`, ";
+
+                // having
+                if(isset($aValue['groupHaving']))
+                    $aSql['groupHaving'] .= $aValue['groupHaving'];
+                    
                 $sOn = isset($aValue['mainTable']) ? $aValue['mainTable'] : $this->aCurrent['table'];
                 $aSql['join'] .= " {$aValue['type']} JOIN `{$aValue['table']}` $sTableAlias ON " . (!empty($aValue['on_sql']) ? $aValue['on_sql'] : "`{$sAlias}`.`{$aValue['onField']}`=" . trim($this->setFieldUnit($aValue['mainField'], $sOn, isset($aValue['mainFieldFunc']) ? $aValue['mainFieldFunc'] : '', false), ", "));
                 $aSql['ownFields'] .= $this->setFieldUnit($aValue['mainField'], $sOn, '', $bRenameMode);
             }
+
             $aSql['joinFields'] = trim($aSql['joinFields'], ', ');
-            $aSql['groupBy'] = trim($aSql['groupBy'], ', ');
+
+            if(!empty($aSql['groupBy']))
+                $aSql['groupBy'] = trim('GROUP BY ' . $aSql['groupBy'], ', ');
+
+            if(!empty($aSql['groupHaving']))
+                $aSql['groupHaving'] = 'HAVING ' . $aSql['groupHaving'];
         }
         return $aSql;
     }
@@ -903,6 +914,7 @@ class BxDolSearchResult implements iBxDolReplaceable
 
             $aSql['join'] = $aJoins['join'];
             $aSql['groupBy'] = $aJoins['groupBy'];
+            $aSql['groupHaving'] = $aJoins['groupHaving'];
         } 
 
         $aSql['ownFields'] = trim($aSql['ownFields'], ', ');
@@ -942,6 +954,9 @@ class BxDolSearchResult implements iBxDolReplaceable
         if (isset($aSql['groupBy']))
             $sqlQuery .= ' ' . $aSql['groupBy'];
 
+        if (isset($aSql['groupHaving']))
+            $sqlQuery .= ' ' . $aSql['groupHaving'];
+
         if($bForUnion)
             return [
                 'query' => $sqlQuery, 
@@ -954,7 +969,7 @@ class BxDolSearchResult implements iBxDolReplaceable
         if (isset($aSql['limit']))
             $sqlQuery .= ' ' . $aSql['limit'];
 
-        // echoDbg($sqlQuery);
+        //echoDbg($sqlQuery);
         $aRes = BxDolDb::getInstance()->getAll($sqlQuery);
         return $aRes;
     }

+ 4 - 1
modules/boonex/channels/classes/BxCnlConfig.php

@@ -61,12 +61,15 @@ class BxCnlConfig extends BxBaseModGroupsConfig
             'URL_MANAGE_COMMON' => 'page.php?i=channels-manage',
             'URL_MANAGE_ADMINISTRATION' => 'page.php?i=channels-administration',
 
+            // some params
             'PARAM_DEFAULT_AUTHOR' => 'bx_channels_default_author',
             'PARAM_NUM_RSS' => 'bx_channels_num_rss',
-          
             'PARAM_SEARCHABLE_FIELDS' => 'bx_channels_searchable_fields',
             'PARAM_PER_PAGE_BROWSE_SHOWCASE' => 'bx_channels_per_page_browse_showcase',
             'PARAM_PER_PAGE_BROWSE_RECOMMENDED' => 'bx_channels_per_page_browse_recommended',
+            'PARAM_BROWSE_ACTIVE_N_POSTS' => 'bx_channels_browse_active_n_posts',
+            'PARAM_BROWSE_ACTIVE_X_HOURS' => 'bx_channels_browse_active_x_hours',
+            'PARAM_BROWSE_TRENDING_X_HOURS' => 'bx_channels_browse_trending_x_hours',
 
             // objects
             'OBJECT_STORAGE' => 'bx_channels_pics',

+ 50 - 10
modules/boonex/channels/classes/BxCnlDb.php

@@ -41,14 +41,27 @@ class BxCnlDb extends BxBaseModGroupsDb
     public function addContentToChannel($iContentId, $iCnlId, $sModuleName, $iAuthorId)
     {
         $CNF = &$this->_oConfig->CNF;
-        $aBindings = array(
+
+        $iNow = time();
+        if(!$this->query("INSERT INTO `" . $CNF['TABLE_CONTENT'] . "` (`content_id`, `cnl_id`, `author_id`, `module_name`, `date`) VALUES (:content_id, :cnl_id, :author_id, :module_name, :date)", [
             'content_id' => $iContentId,
             'cnl_id' => $iCnlId,
             'module_name' => $sModuleName,
             'author_id' => $iAuthorId,
-        );
-        $this->query("INSERT INTO `" . $CNF['TABLE_CONTENT'] . "` (`content_id`, `cnl_id`, `module_name`, `author_id`) VALUES (:content_id, :cnl_id, :module_name, :author_id)", $aBindings);
-        return $this->lastId();
+            'date' => $iNow
+        ]))
+            return 0;
+
+        $iCnlContentId = $this->lastId();
+
+        $this->query("UPDATE `" . $CNF['TABLE_ENTRIES'] . "` SET `lc_id`=:lc_id, `lc_date`=:lc_date, `contents`=:contents WHERE `" . $CNF['FIELD_ID'] . "`=:id", [
+            'lc_id' => $iCnlContentId,
+            'lc_date' => $iNow,
+            'contents' => (int)$this->getOne("SELECT COUNT(*) FROM `" . $CNF['TABLE_CONTENT'] . "` WHERE `cnl_id`=:cnl_id LIMIT 1", ['cnl_id' => $iCnlId]),
+            'id' => $iCnlId
+        ]);
+
+        return $iCnlContentId;
     }
     
     public function checkContentInChannel($iContentId, $iCnlId, $sModuleName, $iAuthorId)
@@ -85,20 +98,47 @@ class BxCnlDb extends BxBaseModGroupsDb
     public function removeContentFromChannel($iContentId, $sModuleName)
     {
         $CNF = &$this->_oConfig->CNF;
-        $aBindings = array(
+
+        $aBindings = [
             'content_id' => $iContentId,
             'module_name' => $sModuleName
-        );
+        ];
+
+        $aContents = $this->getAll("SELECT * FROM `" . $CNF['TABLE_CONTENT'] . "` WHERE `content_id` = :content_id AND `module_name` = :module_name", $aBindings);
+        if(empty($aContents) || !is_array($aContents))
+            return;
+
         $this->query("DELETE FROM `" . $CNF['TABLE_CONTENT'] . "` WHERE `content_id` = :content_id AND `module_name` = :module_name", $aBindings);
+
+        foreach($aContents as $aContent) {
+            $iCnlId = (int)$aContent['cnl_id'];
+
+            $aLatest = $this->getRow("SELECT * FROM `" . $CNF['TABLE_CONTENT'] . "` WHERE `cnl_id`=:cnl_id ORDER BY `date` DESC LIMIT 1", [
+                'cnl_id' => $iCnlId
+            ]);
+
+            $iLcId = $iLcDate = 0;
+            if(!empty($aLatest) && is_array($aLatest)) {
+                $iLcId = (int)$aLatest['id'];
+                $iLcDate = (int)$aLatest['date'];
+            }
+
+            $this->query("UPDATE `" . $CNF['TABLE_ENTRIES'] . "` SET `lc_id`=:lc_id, `lc_date`=:lc_date, `contents`=:contents WHERE `" . $CNF['FIELD_ID'] . "`=:id", [
+                'lc_id' => $iLcId,
+                'lc_date' => $iLcDate,
+                'contents' => (int)$this->getOne("SELECT COUNT(*) FROM `" . $CNF['TABLE_CONTENT'] . "` WHERE `cnl_id`=:cnl_id LIMIT 1", ['cnl_id' => $iCnlId]),
+                'id' => $iCnlId
+            ]);
+        }
     }
 	
-	public function removeChannelContent($iChannelId)
+    public function removeChannelContent($iChannelId)
     {
         $CNF = &$this->_oConfig->CNF;
-        $aBindings = array(
+
+        $this->query("DELETE FROM `" . $CNF['TABLE_CONTENT'] . "` WHERE `cnl_id` = :channel_id", [
             'channel_id' => $iChannelId
-        );
-        $this->query("DELETE FROM `" . $CNF['TABLE_CONTENT'] . "` WHERE `cnl_id` = :channel_id", $aBindings);
+        ]);
     }
 }
 

+ 11 - 1
modules/boonex/channels/classes/BxCnlModule.php

@@ -506,7 +506,17 @@ class BxCnlModule extends BxBaseModGroupsModule
 
         return '';
     }
-    
+
+    public function serviceBrowseActive ($bDisplayEmptyMsg = false, $bAjaxPaginate = false)
+    {
+        return $this->_serviceBrowse ('active', false, BX_DB_PADDING_DEF, $bDisplayEmptyMsg, $bAjaxPaginate);
+    }
+
+    public function serviceBrowseTrending ($bDisplayEmptyMsg = false, $bAjaxPaginate = false)
+    {
+        return $this->_serviceBrowse ('trending', false, BX_DB_PADDING_DEF, $bDisplayEmptyMsg, $bAjaxPaginate);
+    }
+
     public function serviceBrowseByLevel ($iLevelId = 0, $bDisplayEmptyMsg = false)
     {
         return $this->_serviceBrowse ('level', array('level' => $iLevelId), BX_DB_PADDING_DEF, $bDisplayEmptyMsg);

+ 93 - 16
modules/boonex/channels/classes/BxCnlSearchResult.php

@@ -158,7 +158,61 @@ class BxCnlSearchResult extends BxBaseModGroupsSearchResult
                 $this->aCurrent['sorting'] = 'top';
                 $this->sBrowseUrl = 'page.php?i=channels-top';
                 break;
-           
+            
+            case 'active':
+                $this->aCurrent['join']['contents'] = [
+                    'type' => 'INNER',
+                    'table' => $CNF['TABLE_CONTENT'],
+                    'mainTable' => 'bx_cnl_data',
+                    'mainField' => 'id',
+                    'onField' => 'cnl_id',
+                    'joinFields' => [],
+                    'groupTable' => 'bx_cnl_data',
+                    'groupField' => 'id',
+                    'groupHaving' => 'COUNT(`' . $CNF['TABLE_CONTENT'] . '`.`cnl_id`) >= ' . (int)getParam($CNF['PARAM_BROWSE_ACTIVE_N_POSTS'])
+                ];
+                $this->aCurrent['restriction'] = array_merge($this->aCurrent['restriction'], [
+                    'contents_period' => [
+                        'value' => time() - 3600 * (int)getParam($CNF['PARAM_BROWSE_ACTIVE_X_HOURS']), 
+                        'field' => 'date', 
+                        'operator' => '>=',
+                        'table' => $CNF['TABLE_CONTENT']
+                    ]
+                ]);
+
+                $this->aCurrent['rss']['link'] = 'modules/?r=channels/rss/' . $sMode;
+                $this->aCurrent['title'] = _t('_bx_channels_page_title_browse_active');
+                $this->aCurrent['sorting'] = 'active';
+                $this->sBrowseUrl = BxDolPermalinks::getInstance()->permalink($CNF['URL_HOME']);
+                break;
+
+            case 'trending':
+                $this->aCurrent['join']['contents'] = [
+                    'type' => 'INNER',
+                    'table' => $CNF['TABLE_CONTENT'],
+                    'mainTable' => 'bx_cnl_data',
+                    'mainField' => 'id',
+                    'onField' => 'cnl_id',
+                    'joinFields' => ['cnl_id'],
+                    'operator' => 'COUNT', 
+                    'groupTable' => 'bx_cnl_data',
+                    'groupField' => 'id',
+                    'groupHaving' => 'COUNT(`' . $CNF['TABLE_CONTENT'] . '`.`cnl_id`) > 0'
+                ];
+                $this->aCurrent['restriction'] = array_merge($this->aCurrent['restriction'], [
+                    'contents_period' => [
+                        'value' => time() - 3600 * (int)getParam($CNF['PARAM_BROWSE_TRENDING_X_HOURS']), 
+                        'field' => 'date', 
+                        'operator' => '>=',
+                        'table' => $CNF['TABLE_CONTENT']
+                    ]
+                ]);
+                $this->aCurrent['rss']['link'] = 'modules/?r=channels/rss/' . $sMode;
+                $this->aCurrent['title'] = _t('_bx_channels_page_title_browse_trending');
+                $this->aCurrent['sorting'] = 'trending';
+                $this->sBrowseUrl = BxDolPermalinks::getInstance()->permalink($CNF['URL_HOME']);
+                break;
+
             case 'level':
                 $this->aCurrent['join']['level'] = array(
                     'type' => 'INNER',
@@ -194,32 +248,55 @@ class BxCnlSearchResult extends BxBaseModGroupsSearchResult
 
     function getAlterOrder()
     {
+        $aResult = [];
+
         switch ($this->aCurrent['sorting']) {
-        case 'featured':
-            return array('order' => ' ORDER BY `bx_cnl_data`.`featured` DESC ');
-        case 'recommended':
-            return array('order' => ' ORDER BY RAND() ');
-        case 'none':
-            return array();
-        case 'top':
-            return array('order' => ' ORDER BY `bx_cnl_data`.`views` DESC ');
-        case 'level':
-            return array('order' => ' ORDER BY `bx_cnl_data`.`channel_name` DESC ');
-        case 'last':
-        default:
-            return array('order' => ' ORDER BY `bx_cnl_data`.`added` DESC ');
+            case 'none':
+                break;
+
+            case 'featured':
+                $aResult = ['order' => ' ORDER BY `bx_cnl_data`.`featured` DESC'];
+                break;
+
+            case 'recommended':
+                $aResult = ['order' => ' ORDER BY RAND()'];
+                break;
+
+            case 'top':
+                $aResult = ['order' => ' ORDER BY `bx_cnl_data`.`views` DESC'];
+                break;
+
+            case 'active':
+                $aResult = ['order' => ' ORDER BY `bx_cnl_data`.`lc_date` DESC'];
+                break;
+
+            case 'trending':
+                $aResult = ['order' => ' ORDER BY `contents_new` DESC'];
+                break;
+
+            case 'level':
+                $aResult = ['order' => ' ORDER BY `bx_cnl_data`.`channel_name` DESC'];
+                break;
+
+            case 'last':
+            default:
+                $aResult = ['order' => ' ORDER BY `bx_cnl_data`.`added` DESC'];
         }
+
+        return $aResult;
     }
 
     function _getPseud ()
     {
-        return array(
+        return [
             'id' => 'id',
             'channel_name' => 'channel_name',
             'added' => 'added',
             'author' => 'author',
             'picture' => 'picture',
-        );
+
+            'contents_new' => 'cnl_id_count'
+        ];
     }
 }
 

+ 56 - 47
modules/boonex/channels/install/langs/en.xml

@@ -9,6 +9,9 @@
     <string name="_bx_channels_option_num_rss"><![CDATA[Number of items in RSS feed]]></string>
     <string name="_bx_channels_option_searchable_fields"><![CDATA[Searchable fields]]></string>
     <string name="_bx_channels_option_labels_autofollow"><![CDATA[Auto-follow channels when used as labels in profiles]]></string>
+    <string name="_sys_option_browse_active_n_posts"><![CDATA[Browse Active: Min number of new posts in channel during the period of time]]></string>
+    <string name="_sys_option_browse_active_x_hours"><![CDATA[Browse Active: The period of time to count new posts in channel]]></string>
+    <string name="_sys_option_browse_trending_x_hours"><![CDATA[Browse Trending: The period of time to count new posts in channel]]></string>
 
 	<string name="_bx_channels_form_profile"><![CDATA[Channels]]></string>
 	<string name="_bx_channels_form_profile_display_add"><![CDATA[Add Channel]]></string>
@@ -58,6 +61,8 @@
 	<string name="_bx_channels_page_title_browse_by_author"><![CDATA[Channels of {display_name}]]></string>
 	<string name="_bx_channels_page_title_browse_featured"><![CDATA[Featured Channels]]></string>
 	<string name="_bx_channels_page_title_browse_top"><![CDATA[Top Channels]]></string>
+        <string name="_bx_channels_page_title_browse_active"><![CDATA[Active Channels]]></string>
+        <string name="_bx_channels_page_title_browse_trending"><![CDATA[Trending Channels]]></string>
 	<string name="_bx_channels_page_title_browse_recent"><![CDATA[New Channels]]></string>
 	<string name="_bx_channels_page_title_browse_connections"><![CDATA[{0} connections]]></string>
 	<string name="_bx_channels_page_title_browse_connections_mutual"><![CDATA[{0} and {1} mutual connections]]></string>
@@ -82,53 +87,57 @@
   <string name="_bx_channels_page_title_sys_entries_of_author"><![CDATA[Сhannels of author]]></string>
   <string name="_bx_channels_page_title_entries_of_author"><![CDATA[Сhannels by {display_name}]]></string>
 
-  <string name="_bx_channels_page_block_title_system_profile_subscribed_me"><![CDATA[Followers]]></string>
-  <string name="_bx_channels_page_block_title_profile_subscribed_me"><![CDATA[Followers]]></string>
-  <string name="_bx_channels_page_block_title_sys_entries_actions"><![CDATA[Channels actions]]></string>
-	<string name="_bx_channels_page_block_title_entries_actions"><![CDATA[Channels actions]]></string>
-	<string name="_bx_channels_page_block_title_sys_entries_of_author"><![CDATA[Followed Сhannels]]></string>
-	<string name="_bx_channels_page_block_title_entries_of_author"><![CDATA[Followed Сhannels]]></string>
-	<string name="_bx_channels_page_block_title_favorites_of_author"><![CDATA[Favorite Channels]]></string>
-	<string name="_bx_channels_page_block_title_sys_favorites_of_author"><![CDATA[Favorite Channels]]></string>
-	<string name="_bx_channels_page_block_title_edit_profile"><![CDATA[Edit Channel]]></string>
-	<string name="_bx_channels_page_block_title_edit_profile_cover"><![CDATA[Edit Cover]]></string>
-	<string name="_bx_channels_page_block_title_delete_profile"><![CDATA[Delete Channel]]></string>
-	<string name="_bx_channels_page_block_title_profile_info_link"><![CDATA[About <a href="{profile_link}">{display_name}</a>]]></string>
-	<string name="_bx_channels_page_block_title_profile_info"><![CDATA[Info]]></string>
-	<string name="_bx_channels_page_block_title_system_profile_info"><![CDATA[Info]]></string>
-	<string name="_bx_channels_page_block_title_profile_description"><![CDATA[Description]]></string>
-	<string name="_bx_channels_page_block_title_profile_friends_link"><![CDATA[Friends of <a href="{profile_link}">{display_name}</a>]]></string>
-	<string name="_bx_channels_page_block_title_profile_friends"><![CDATA[Friends]]></string>
-	<string name="_bx_channels_page_block_title_system_profile_friends"><![CDATA[Friends]]></string>
-	<string name="_bx_channels_page_block_title_admins"><![CDATA[Administrators]]></string>
-	<string name="_bx_channels_page_block_title_profile_comments"><![CDATA[Comments]]></string>
-	<string name="_bx_channels_page_block_title_profile_comments_link"><![CDATA[Comments to <a href="{entry_link}">{title}</a>]]></string>
-	<string name="_bx_channels_page_block_title_profile_actions"><![CDATA[Actions]]></string>
-	<string name="_bx_channels_page_block_title_featured_profiles"><![CDATA[Featured Channels]]></string>
-	<string name="_bx_channels_page_block_title_latest_profiles"><![CDATA[New Channels]]></string>
-	<string name="_bx_channels_page_block_title_system_manage"><![CDATA[Manage Own Channels]]></string>
-	<string name="_bx_channels_page_block_title_system_manage_administration"><![CDATA[Manage All Channels]]></string>
-	<string name="_bx_channels_page_block_title_manage"><![CDATA[Manage Channels]]></string>
-	<string name="_bx_channels_page_block_title_top_profiles"><![CDATA[Top Channels]]></string>
-        <string name="_bx_channels_page_block_title_entry_all_actions"><![CDATA[All Actions]]></string>
-	<string name="_bx_channels_page_block_title_entry_social_sharing"><![CDATA[Share]]></string>
-        <string name="_bx_channels_page_block_title_entry_breadcrumb"><![CDATA[Breadcrumb]]></string>
-        <string name="_bx_channels_page_block_title_entry_parent"><![CDATA[Parent Channel]]></string>
-        <string name="_bx_channels_page_block_title_entry_childs"><![CDATA[Child Channels]]></string>
-	<string name="_bx_channels_page_block_title_search_form"><![CDATA[Search Form]]></string>
-  <string name="_bx_channels_page_block_title_toplevel"><![CDATA[Top level]]></string>
-        <string name="_bx_channels_page_block_title_entries_my"><![CDATA[My Followed Channels]]></string>
-        <string name="_bx_channels_page_trigger_block_title_entries_my"><![CDATA[My Followed Channels]]></string>
-        <string name="_bx_channels_page_block_title_search_results"><![CDATA[Search Results]]></string>
-        <string name="_bx_channels_page_block_title_search_results_by_hashtag"><![CDATA[Search Results By Hashtag]]></string>
-	<string name="_bx_channels_page_block_title_search_form_cmts"><![CDATA[Comments Search Form]]></string>
-	<string name="_bx_channels_page_block_title_search_results_cmts"><![CDATA[Comments Search Results]]></string>
-	<string name="_bx_channels_page_block_title_sys_featured_entries_view_showcase"><![CDATA[Featured Channels (Showcase View)]]></string>
-	<string name="_bx_channels_page_block_title_featured_entries_view_showcase"><![CDATA[Featured Channels]]></string>
-	<string name="_bx_channels_page_block_title_sys_recommended_entries_view_showcase"><![CDATA[Recommended Channels (Showcase View)]]></string>
-	<string name="_bx_channels_page_block_title_recommended_entries_view_showcase"><![CDATA[Recommended Channels]]></string>
-  <string name="_bx_channels_page_block_title_sys_cover_block"><![CDATA[Cover]]></string>
-  <string name="_bx_channels_page_block_title_cover_block"><![CDATA[Cover]]></string>
+    <string name="_bx_channels_page_block_title_system_profile_subscribed_me"><![CDATA[Followers]]></string>
+    <string name="_bx_channels_page_block_title_profile_subscribed_me"><![CDATA[Followers]]></string>
+    <string name="_bx_channels_page_block_title_sys_entries_actions"><![CDATA[Channels actions]]></string>
+    <string name="_bx_channels_page_block_title_entries_actions"><![CDATA[Channels actions]]></string>
+    <string name="_bx_channels_page_block_title_sys_entries_of_author"><![CDATA[Followed Сhannels]]></string>
+    <string name="_bx_channels_page_block_title_entries_of_author"><![CDATA[Followed Сhannels]]></string>
+    <string name="_bx_channels_page_block_title_favorites_of_author"><![CDATA[Favorite Channels]]></string>
+    <string name="_bx_channels_page_block_title_sys_favorites_of_author"><![CDATA[Favorite Channels]]></string>
+    <string name="_bx_channels_page_block_title_edit_profile"><![CDATA[Edit Channel]]></string>
+    <string name="_bx_channels_page_block_title_edit_profile_cover"><![CDATA[Edit Cover]]></string>
+    <string name="_bx_channels_page_block_title_delete_profile"><![CDATA[Delete Channel]]></string>
+    <string name="_bx_channels_page_block_title_profile_info_link"><![CDATA[About <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_channels_page_block_title_profile_info"><![CDATA[Info]]></string>
+    <string name="_bx_channels_page_block_title_system_profile_info"><![CDATA[Info]]></string>
+    <string name="_bx_channels_page_block_title_profile_description"><![CDATA[Description]]></string>
+    <string name="_bx_channels_page_block_title_profile_friends_link"><![CDATA[Friends of <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_channels_page_block_title_profile_friends"><![CDATA[Friends]]></string>
+    <string name="_bx_channels_page_block_title_system_profile_friends"><![CDATA[Friends]]></string>
+    <string name="_bx_channels_page_block_title_admins"><![CDATA[Administrators]]></string>
+    <string name="_bx_channels_page_block_title_profile_comments"><![CDATA[Comments]]></string>
+    <string name="_bx_channels_page_block_title_profile_comments_link"><![CDATA[Comments to <a href="{entry_link}">{title}</a>]]></string>
+    <string name="_bx_channels_page_block_title_profile_actions"><![CDATA[Actions]]></string>
+    <string name="_bx_channels_page_block_title_featured_profiles"><![CDATA[Featured Channels]]></string>
+    <string name="_bx_channels_page_block_title_latest_profiles"><![CDATA[New Channels]]></string>
+    <string name="_bx_channels_page_block_title_system_manage"><![CDATA[Manage Own Channels]]></string>
+    <string name="_bx_channels_page_block_title_system_manage_administration"><![CDATA[Manage All Channels]]></string>
+    <string name="_bx_channels_page_block_title_manage"><![CDATA[Manage Channels]]></string>
+    <string name="_bx_channels_page_block_title_top_profiles"><![CDATA[Top Channels]]></string>
+    <string name="_bx_channels_page_block_title_entry_all_actions"><![CDATA[All Actions]]></string>
+    <string name="_bx_channels_page_block_title_entry_social_sharing"><![CDATA[Share]]></string>
+    <string name="_bx_channels_page_block_title_entry_breadcrumb"><![CDATA[Breadcrumb]]></string>
+    <string name="_bx_channels_page_block_title_entry_parent"><![CDATA[Parent Channel]]></string>
+    <string name="_bx_channels_page_block_title_entry_childs"><![CDATA[Child Channels]]></string>
+    <string name="_bx_channels_page_block_title_search_form"><![CDATA[Search Form]]></string>
+    <string name="_bx_channels_page_block_title_toplevel"><![CDATA[Top level]]></string>
+    <string name="_bx_channels_page_block_title_entries_my"><![CDATA[My Followed Channels]]></string>
+    <string name="_bx_channels_page_trigger_block_title_entries_my"><![CDATA[My Followed Channels]]></string>
+    <string name="_bx_channels_page_block_title_search_results"><![CDATA[Search Results]]></string>
+    <string name="_bx_channels_page_block_title_search_results_by_hashtag"><![CDATA[Search Results By Hashtag]]></string>
+    <string name="_bx_channels_page_block_title_search_form_cmts"><![CDATA[Comments Search Form]]></string>
+    <string name="_bx_channels_page_block_title_search_results_cmts"><![CDATA[Comments Search Results]]></string>
+    <string name="_bx_channels_page_block_title_sys_featured_entries_view_showcase"><![CDATA[Featured Channels (Showcase View)]]></string>
+    <string name="_bx_channels_page_block_title_featured_entries_view_showcase"><![CDATA[Featured Channels]]></string>
+    <string name="_bx_channels_page_block_title_sys_recommended_entries_view_showcase"><![CDATA[Recommended Channels (Showcase View)]]></string>
+    <string name="_bx_channels_page_block_title_recommended_entries_view_showcase"><![CDATA[Recommended Channels]]></string>
+    <string name="_bx_channels_page_block_title_sys_active_entries"><![CDATA[Active Channels]]></string>
+    <string name="_bx_channels_page_block_title_active_entries"><![CDATA[Active Channels]]></string>
+    <string name="_bx_channels_page_block_title_sys_trending_entries"><![CDATA[Trending Channels]]></string>
+    <string name="_bx_channels_page_block_title_trending_entries"><![CDATA[Trending Channels]]></string>
+    <string name="_bx_channels_page_block_title_sys_cover_block"><![CDATA[Cover]]></string>
+    <string name="_bx_channels_page_block_title_cover_block"><![CDATA[Cover]]></string>
 
 	<string name="_bx_channels_menu_title_submenu"><![CDATA[Channels Submenu]]></string>
 	<string name="_bx_channels_menu_set_title_submenu"><![CDATA[Channels Submenu]]></string>

+ 6 - 1
modules/boonex/channels/install/sql/enable.sql

@@ -17,6 +17,9 @@ INSERT INTO `sys_options` (`name`, `value`, `category_id`, `caption`, `type`, `e
 ('bx_channels_num_rss', '10', @iCategId, '_bx_channels_option_num_rss', 'digit', '', '', '', '', 12),
 ('bx_channels_per_page_browse_showcase', '32', @iCategId, '_sys_option_per_page_browse_showcase', 'digit', '', '', '', '', 15),
 ('bx_channels_per_page_browse_recommended', '10', @iCategId, '_sys_option_per_page_browse_recommended', 'digit', '', '', '', '', 16),
+('bx_channels_browse_active_n_posts', '1', @iCategId, '_sys_option_browse_active_n_posts', 'digit', '', '', '', '', 20),
+('bx_channels_browse_active_x_hours', '24', @iCategId, '_sys_option_browse_active_x_hours', 'digit', '', '', '', '', 21),
+('bx_channels_browse_trending_x_hours', '24', @iCategId, '_sys_option_browse_trending_x_hours', 'digit', '', '', '', '', 23),
 ('bx_channels_searchable_fields', 'channel_name', @iCategId, '_bx_channels_option_searchable_fields', 'list', 'a:2:{s:6:"module";s:11:"bx_channels";s:6:"method";s:21:"get_searchable_fields";}', '', '', '', 30),
 ('bx_channels_labels_autofollow', 'on', @iCategId, '_bx_channels_option_labels_autofollow', 'checkbox', '', '', '', '', 40);
 
@@ -133,7 +136,9 @@ SET @iBlockOrder = (SELECT `order` FROM `sys_pages_blocks` WHERE `object` = '' A
 INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES
 ('', 0, 'bx_channels', '_bx_channels_page_block_title_sys_featured_entries_view_showcase', '_bx_channels_page_block_title_featured_entries_view_showcase', 11, 2147483647, 'service', 'a:3:{s:6:\"module\";s:11:\"bx_channels\";s:6:\"method\";s:15:\"browse_featured\";s:6:\"params\";a:3:{s:9:\"unit_view\";s:8:\"showcase\";s:13:\"empty_message\";b:0;s:13:\"ajax_paginate\";b:0;}}', 0, 1, 1, IFNULL(@iBlockOrder, 0) + 1),
 ('', 0, 'bx_channels', '_bx_channels_page_block_title_sys_recommended_entries_view_showcase', '_bx_channels_page_block_title_recommended_entries_view_showcase', 11, 2147483647, 'service', 'a:3:{s:6:\"module\";s:11:\"bx_channels\";s:6:\"method\";s:18:\"browse_recommended\";s:6:\"params\";a:3:{s:9:\"unit_view\";s:8:\"showcase\";s:13:\"empty_message\";b:0;s:13:\"ajax_paginate\";b:0;}}', 0, 1, 1, IFNULL(@iBlockOrder, 0) + 2),
-('', 0, 'bx_channels', '_bx_channels_page_block_title_sys_cover_block', '_bx_channels_page_block_title_cover_block', 3, 2147483647, 'service', 'a:2:{s:6:\"module\";s:11:\"bx_channels\";s:6:\"method\";s:12:\"entity_cover\";}', 0, 1, 1, IFNULL(@iBlockOrder, 0) + 3);
+('', 0, 'bx_channels', '_bx_channels_page_block_title_sys_active_entries', '_bx_channels_page_block_title_active_entries', 11, 2147483647, 'service', 'a:2:{s:6:\"module\";s:11:\"bx_channels\";s:6:\"method\";s:13:\"browse_active\";}', 0, 1, 1, IFNULL(@iBlockOrder, 0) + 3),
+('', 0, 'bx_channels', '_bx_channels_page_block_title_sys_trending_entries', '_bx_channels_page_block_title_trending_entries', 11, 2147483647, 'service', 'a:2:{s:6:\"module\";s:11:\"bx_channels\";s:6:\"method\";s:15:\"browse_trending\";}', 0, 1, 1, IFNULL(@iBlockOrder, 0) + 4),
+('', 0, 'bx_channels', '_bx_channels_page_block_title_sys_cover_block', '_bx_channels_page_block_title_cover_block', 3, 2147483647, 'service', 'a:2:{s:6:\"module\";s:11:\"bx_channels\";s:6:\"method\";s:12:\"entity_cover\";}', 0, 1, 1, IFNULL(@iBlockOrder, 0) + 5);
 
 -- PAGES: add page block to profiles modules (trigger* page objects are processed separately upon modules enable/disable)
 SET @iPBCellProfile = 3;

+ 4 - 0
modules/boonex/channels/install/sql/install.sql

@@ -10,6 +10,9 @@ CREATE TABLE IF NOT EXISTS `bx_cnl_data` (
   `cover` int(11) NOT NULL,
   `cover_data` varchar(50) NOT NULL,
   `channel_name` varchar(191) NOT NULL,
+  `lc_id` int(11) NOT NULL default '0',
+  `lc_date` int(11) NOT NULL default '0',
+  `contents` int(11) NOT NULL default '0',
   `views` int(11) NOT NULL default '0',
   `rate` float NOT NULL default '0',
   `votes` int(11) NOT NULL default '0',
@@ -36,6 +39,7 @@ CREATE TABLE IF NOT EXISTS `bx_cnl_content` (
   `cnl_id` int(11) NOT NULL,
   `author_id` int(11) NOT NULL,
   `module_name` varchar(19) NOT NULL,
+  `date` int(11) NOT NULL default '0',
   PRIMARY KEY (`id`)
 );
 

+ 61 - 52
modules/boonex/russian/data/langs/bx_channels/ru.xml

@@ -9,70 +9,75 @@
     <string name="_bx_channels_option_num_rss"><![CDATA[Количество элементов в ленте RSS]]></string>
     <string name="_bx_channels_option_searchable_fields"><![CDATA[Поля для поиска]]></string>
     <string name="_bx_channels_option_labels_autofollow"><![CDATA[Автоматически подписывать на каналы указанные в метках профайла]]></string>
+    <string name="_sys_option_browse_active_n_posts"><![CDATA[Просмотр "Активные": Минимальное количество новых сообщений на канале за период времени.]]></string>
+    <string name="_sys_option_browse_active_x_hours"><![CDATA[Просмотр "Активные": Период времени для подсчета новых сообщений на канале.]]></string>
+    <string name="_sys_option_browse_trending_x_hours"><![CDATA[Просмотр "Тенденции": Период времени для подсчета новых сообщений на канале.]]></string>
 
-	<string name="_bx_channels_form_profile"><![CDATA[Каналы]]></string>
-	<string name="_bx_channels_form_profile_display_add"><![CDATA[Добавление канала]]></string>
-	<string name="_bx_channels_form_profile_display_edit"><![CDATA[Редактирование канала]]></string>
-	<string name="_bx_channels_form_profile_display_edit_cover"><![CDATA[Редактирование обложки]]></string>
-	<string name="_bx_channels_form_profile_display_delete"><![CDATA[Удаление канала]]></string>
-	<string name="_bx_channels_form_profile_display_view"><![CDATA[Просмотр канала]]></string>
+    <string name="_bx_channels_form_profile"><![CDATA[Каналы]]></string>
+    <string name="_bx_channels_form_profile_display_add"><![CDATA[Добавление канала]]></string>
+    <string name="_bx_channels_form_profile_display_edit"><![CDATA[Редактирование канала]]></string>
+    <string name="_bx_channels_form_profile_display_edit_cover"><![CDATA[Редактирование обложки]]></string>
+    <string name="_bx_channels_form_profile_display_delete"><![CDATA[Удаление канала]]></string>
+    <string name="_bx_channels_form_profile_display_view"><![CDATA[Просмотр канала]]></string>
     <string name="_bx_channels_form_profile_display_view_full"><![CDATA[Полный просмотр канала]]></string>
     <string name="_bx_channels_form_profile_display_invite"><![CDATA[Приглашение в канал]]></string>
     <string name="_bx_channels_form_entry_input_author"><![CDATA[Автор]]></string>
-	<string name="_bx_channels_form_profile_input_sys_do_submit"><![CDATA[Выполнить]]></string>
+    <string name="_bx_channels_form_profile_input_sys_do_submit"><![CDATA[Выполнить]]></string>
     <string name="_bx_channels_form_profile_input_sys_allow_view_to"><![CDATA[Конфиденциальность]]></string>
     <string name="_bx_channels_form_profile_input_allow_view_to"><![CDATA[Конфиденциальность]]></string>
     <string name="_bx_channels_form_profile_input_allow_view_to_desc"><![CDATA[Закрытый - все могут найти канал и видеть кто в ней состоит, только участники могут видеть сообщения. Секретный - только участники могут найти канал и видеть сообщения.]]></string>
     <string name="_bx_channels_form_profile_input_sys_initial_members"><![CDATA[Пригласить участников]]></string>
-	<string name="_bx_channels_form_profile_input_initial_members"><![CDATA[Пригласить участников]]></string>
-	<string name="_bx_channels_form_profile_input_sys_channel_name"><![CDATA[Название канала]]></string>
-	<string name="_bx_channels_form_profile_input_channel_name"><![CDATA[Название канала]]></string>
-	<string name="_bx_channels_form_profile_input_channel_name_err"><![CDATA[Пожалуйста, заполните это поле. Имя канала должно быть уникальным.]]></string>
+    <string name="_bx_channels_form_profile_input_initial_members"><![CDATA[Пригласить участников]]></string>
+    <string name="_bx_channels_form_profile_input_sys_channel_name"><![CDATA[Название канала]]></string>
+    <string name="_bx_channels_form_profile_input_channel_name"><![CDATA[Название канала]]></string>
+    <string name="_bx_channels_form_profile_input_channel_name_err"><![CDATA[Пожалуйста, заполните это поле. Имя канала должно быть уникальным.]]></string>
     <string name="_bx_channels_form_profile_input_sys_picture"><![CDATA[Картинка канала]]></string>
-	<string name="_bx_channels_form_profile_input_picture"><![CDATA[Загрузить новую картинку канала]]></string>
-	<string name="_bx_channels_form_profile_input_picture_err"><![CDATA[Необходима картинка канала.]]></string>
-	<string name="_bx_channels_form_profile_input_sys_cover"><![CDATA[Картинка обложки]]></string>
-	<string name="_bx_channels_form_profile_input_cover"><![CDATA[Загрузить новую картинку обложки]]></string>
-	<string name="_bx_channels_form_profile_input_sys_delete_confirm"><![CDATA[Подтверждение на удаление]]></string>
-	<string name="_bx_channels_form_profile_input_delete_confirm"><![CDATA[Я уверен, что хочу удалить эту канал]]></string>
-	<string name="_bx_channels_form_profile_input_delete_confirm_info"><![CDATA[Это действие не может быть отменено.]]></string>
-	<string name="_bx_channels_form_profile_input_delete_confirm_error"><![CDATA[Пожалуйста, отметьте этот флажок, если действительно хотите удалить канал.]]></string>
+    <string name="_bx_channels_form_profile_input_picture"><![CDATA[Загрузить новую картинку канала]]></string>
+    <string name="_bx_channels_form_profile_input_picture_err"><![CDATA[Необходима картинка канала.]]></string>
+    <string name="_bx_channels_form_profile_input_sys_cover"><![CDATA[Картинка обложки]]></string>
+    <string name="_bx_channels_form_profile_input_cover"><![CDATA[Загрузить новую картинку обложки]]></string>
+    <string name="_bx_channels_form_profile_input_sys_delete_confirm"><![CDATA[Подтверждение на удаление]]></string>
+    <string name="_bx_channels_form_profile_input_delete_confirm"><![CDATA[Я уверен, что хочу удалить эту канал]]></string>
+    <string name="_bx_channels_form_profile_input_delete_confirm_info"><![CDATA[Это действие не может быть отменено.]]></string>
+    <string name="_bx_channels_form_profile_input_delete_confirm_error"><![CDATA[Пожалуйста, отметьте этот флажок, если действительно хотите удалить канал.]]></string>
 
-	<string name="_bx_channels_acl_action_delete_profile"><![CDATA[Удалить канал]]></string>
-	<string name="_bx_channels_acl_action_view_profile"><![CDATA[Просмотреть канал]]></string>
-	<string name="_bx_channels_acl_action_edit_any_profile"><![CDATA[Редактировать любой канал]]></string>
-	<string name="_bx_channels_acl_action_delete_any_profile"><![CDATA[Удалять любой канал]]></string>
-	<string name="_bx_channels_acl_action_create_channel_auto"><![CDATA[Создавать канал автоматически]]></string>
-  <string name="_bx_channels_acl_action_create_channel_auto_info"><![CDATA[Автоматически создавать новый канал, когда новый хэштег упоминается кем-либо с этим уровнем]]></string>
+    <string name="_bx_channels_acl_action_delete_profile"><![CDATA[Удалить канал]]></string>
+    <string name="_bx_channels_acl_action_view_profile"><![CDATA[Просмотреть канал]]></string>
+    <string name="_bx_channels_acl_action_edit_any_profile"><![CDATA[Редактировать любой канал]]></string>
+    <string name="_bx_channels_acl_action_delete_any_profile"><![CDATA[Удалять любой канал]]></string>
+    <string name="_bx_channels_acl_action_create_channel_auto"><![CDATA[Создавать канал автоматически]]></string>
+    <string name="_bx_channels_acl_action_create_channel_auto_info"><![CDATA[Автоматически создавать новый канал, когда новый хэштег упоминается кем-либо с этим уровнем]]></string>
 
-	<string name="_bx_channels_page_title_sys_edit_profile"><![CDATA[Редактировать канал]]></string>
-	<string name="_bx_channels_page_title_edit_profile"><![CDATA[Редактировать канал]]></string>
-	<string name="_bx_channels_page_title_sys_edit_profile_cover"><![CDATA[Редактировать обложку канала]]></string>
-	<string name="_bx_channels_page_title_edit_profile_cover"><![CDATA[Редактировать обложку]]></string>
-	<string name="_bx_channels_page_title_sys_delete_profile"><![CDATA[Удалить канал]]></string>
-	<string name="_bx_channels_page_title_delete_profile"><![CDATA[Удалить канал]]></string>
-	<string name="_bx_channels_page_title_sys_view_profile_closed"><![CDATA[Просмотр закрытого канала]]></string>
-	<string name="_bx_channels_page_title_sys_view_profile"><![CDATA[Просмотр канала]]></string>
-	<string name="_bx_channels_page_title_view_profile"><![CDATA[{display_name}]]></string>
-	<string name="_bx_channels_page_title_browse"><![CDATA[Каналы]]></string>
-	<string name="_bx_channels_page_title_browse_by_author"><![CDATA[Каналы {display_name}]]></string>
-	<string name="_bx_channels_page_title_browse_featured"><![CDATA[Продвинутые каналы]]></string>
+    <string name="_bx_channels_page_title_sys_edit_profile"><![CDATA[Редактировать канал]]></string>
+    <string name="_bx_channels_page_title_edit_profile"><![CDATA[Редактировать канал]]></string>
+    <string name="_bx_channels_page_title_sys_edit_profile_cover"><![CDATA[Редактировать обложку канала]]></string>
+    <string name="_bx_channels_page_title_edit_profile_cover"><![CDATA[Редактировать обложку]]></string>
+    <string name="_bx_channels_page_title_sys_delete_profile"><![CDATA[Удалить канал]]></string>
+    <string name="_bx_channels_page_title_delete_profile"><![CDATA[Удалить канал]]></string>
+    <string name="_bx_channels_page_title_sys_view_profile_closed"><![CDATA[Просмотр закрытого канала]]></string>
+    <string name="_bx_channels_page_title_sys_view_profile"><![CDATA[Просмотр канала]]></string>
+    <string name="_bx_channels_page_title_view_profile"><![CDATA[{display_name}]]></string>
+    <string name="_bx_channels_page_title_browse"><![CDATA[Каналы]]></string>
+    <string name="_bx_channels_page_title_browse_by_author"><![CDATA[Каналы {display_name}]]></string>
+    <string name="_bx_channels_page_title_browse_featured"><![CDATA[Продвинутые каналы]]></string>
     <string name="_bx_channels_page_title_browse_top"><![CDATA[Популярные каналы]]></string>
-	<string name="_bx_channels_page_title_browse_recent"><![CDATA[Новые каналы]]></string>
-	<string name="_bx_channels_page_title_browse_connections"><![CDATA[{0} связей]]></string>
-	<string name="_bx_channels_page_title_browse_connections_mutual"><![CDATA[{0} и {1} обоюдных связей]]></string>
-	<string name="_bx_channels_page_title_sys_profile_friends"><![CDATA[Друзья]]></string>
-	<string name="_bx_channels_page_title_profile_friends"><![CDATA[Друзья]]></string>
-	<string name="_bx_channels_page_title_sys_profile_comments"><![CDATA[Комментарии]]></string>
+    <string name="_bx_channels_page_title_browse_active"><![CDATA[Активные каналы]]></string>
+    <string name="_bx_channels_page_title_browse_trending"><![CDATA[Трендовые каналы]]></string>
+    <string name="_bx_channels_page_title_browse_recent"><![CDATA[Новые каналы]]></string>
+    <string name="_bx_channels_page_title_browse_connections"><![CDATA[{0} связей]]></string>
+    <string name="_bx_channels_page_title_browse_connections_mutual"><![CDATA[{0} и {1} обоюдных связей]]></string>
+    <string name="_bx_channels_page_title_sys_profile_friends"><![CDATA[Друзья]]></string>
+    <string name="_bx_channels_page_title_profile_friends"><![CDATA[Друзья]]></string>
+    <string name="_bx_channels_page_title_sys_profile_comments"><![CDATA[Комментарии]]></string>
     <string name="_bx_channels_page_title_profile_comments"><![CDATA[Комментарии]]></string>
-	<string name="_bx_channels_page_title_sys_profile_info"><![CDATA[Инфо каналы]]></string>
-	<string name="_bx_channels_page_title_profile_info"><![CDATA[Инфо о {display_name}]]></string>
-	<string name="_bx_channels_page_title_sys_recent"><![CDATA[Новые каналы]]></string>
-	<string name="_bx_channels_page_title_recent"><![CDATA[Новые каналы]]></string>
-	<string name="_bx_channels_page_title_sys_manage"><![CDATA[Управление собственными каналами]]></string>
-	<string name="_bx_channels_page_title_sys_manage_administration"><![CDATA[Управление всеми каналами]]></string>
-	<string name="_bx_channels_page_title_manage"><![CDATA[Управление]]></string>
-	<string name="_bx_channels_page_title_sys_top"><![CDATA[Популярные каналы]]></string>
+    <string name="_bx_channels_page_title_sys_profile_info"><![CDATA[Инфо каналы]]></string>
+    <string name="_bx_channels_page_title_profile_info"><![CDATA[Инфо о {display_name}]]></string>
+    <string name="_bx_channels_page_title_sys_recent"><![CDATA[Новые каналы]]></string>
+    <string name="_bx_channels_page_title_recent"><![CDATA[Новые каналы]]></string>
+    <string name="_bx_channels_page_title_sys_manage"><![CDATA[Управление собственными каналами]]></string>
+    <string name="_bx_channels_page_title_sys_manage_administration"><![CDATA[Управление всеми каналами]]></string>
+    <string name="_bx_channels_page_title_manage"><![CDATA[Управление]]></string>
+    <string name="_bx_channels_page_title_sys_top"><![CDATA[Популярные каналы]]></string>
     <string name="_bx_channels_page_title_top"><![CDATA[Популярные каналы]]></string>
     <string name="_bx_channels_page_title_sys_entries_search"><![CDATA[Поиск]]></string>
     <string name="_bx_channels_page_title_entries_search"><![CDATA[Поиск]]></string>
@@ -126,9 +131,13 @@
     <string name="_bx_channels_page_block_title_featured_entries_view_showcase"><![CDATA[Продвинутые каналы (Витринный просмотр)]]></string>
     <string name="_bx_channels_page_block_title_sys_recommended_entries_view_showcase"><![CDATA[Рекомендованные каналы (Витринный просмотр)]]></string>
     <string name="_bx_channels_page_block_title_recommended_entries_view_showcase"><![CDATA[Рекомендованные каналы]]></string>
+    <string name="_bx_channels_page_block_title_sys_active_entries"><![CDATA[Активные каналы]]></string>
+    <string name="_bx_channels_page_block_title_active_entries"><![CDATA[Активные каналы]]></string>
+    <string name="_bx_channels_page_block_title_sys_trending_entries"><![CDATA[Трендовые каналы]]></string>
+    <string name="_bx_channels_page_block_title_trending_entries"><![CDATA[Трендовые каналы]]></string>
     <string name="_bx_channels_page_block_title_sys_cover_block"><![CDATA[Обложка]]></string>
     <string name="_bx_channels_page_block_title_cover_block"><![CDATA[Обложка]]></string>
-    
+
     <string name="_bx_channels_menu_title_submenu"><![CDATA[Каналы - Подменю]]></string>
     <string name="_bx_channels_menu_set_title_submenu"><![CDATA[Каналы - Подменю]]></string>
     <string name="_bx_channels_menu_set_title_view_profile_actions"><![CDATA[Канал - Действия]]></string>