Переглянути джерело

Ticket #438 - Integration with Forum. Integration of Votes engine with Forum.

AntonLV 10 роки тому
батько
коміт
d63dae1c8e

+ 4 - 4
modules/base/general/classes/BxBaseModGeneralModule.php

@@ -215,14 +215,14 @@ class BxBaseModGeneralModule extends BxDolModule
         $CNF = &$this->_oConfig->CNF;
         $CNF = &$this->_oConfig->CNF;
         return $this->_entitySocialSharing ($iContentId, array(
         return $this->_entitySocialSharing ($iContentId, array(
             'id_timeline' => $iContentId,
             'id_timeline' => $iContentId,
-        	'id_thumb' => $aContentInfo[$CNF['FIELD_THUMB']],
-        	'title' => $aContentInfo[$CNF['FIELD_TITLE']],
-        	'object_storage' => $CNF['OBJECT_STORAGE'],
+        	'id_thumb' => !empty($aContentInfo[$CNF['FIELD_THUMB']]) ? $aContentInfo[$CNF['FIELD_THUMB']] : '',
+        	'title' => !empty($aContentInfo[$CNF['FIELD_TITLE']]) ? $aContentInfo[$CNF['FIELD_TITLE']] : '',
+        	'object_storage' => !empty($CNF['OBJECT_STORAGE']) ? $CNF['OBJECT_STORAGE'] : '',
             'object_transcoder' => false,
             'object_transcoder' => false,
         	'object_vote' => !empty($CNF['OBJECT_VOTES']) ? $CNF['OBJECT_VOTES'] : '',
         	'object_vote' => !empty($CNF['OBJECT_VOTES']) ? $CNF['OBJECT_VOTES'] : '',
         	'object_favorite' => !empty($CNF['OBJECT_FAVORITES']) ? $CNF['OBJECT_FAVORITES'] : '',
         	'object_favorite' => !empty($CNF['OBJECT_FAVORITES']) ? $CNF['OBJECT_FAVORITES'] : '',
         	'object_report' => !empty($CNF['OBJECT_REPORTS']) ? $CNF['OBJECT_REPORTS'] : '',
         	'object_report' => !empty($CNF['OBJECT_REPORTS']) ? $CNF['OBJECT_REPORTS'] : '',
-        	'uri_view_entry' => $CNF['URI_VIEW_ENTRY'],
+        	'uri_view_entry' => !empty($CNF['URI_VIEW_ENTRY']) ? $CNF['URI_VIEW_ENTRY'] : '',
         ));
         ));
     }
     }
 
 

+ 1 - 1
modules/base/text/classes/BxBaseModTextSearchResult.php

@@ -102,7 +102,7 @@ class BxBaseModTextSearchResult extends BxBaseModGeneralSearchResult
 
 
         $iProfileAuthor = $oProfileAuthor->id();
         $iProfileAuthor = $oProfileAuthor->id();
         $oFavorite = $this->oModule->getObjectFavorite();
         $oFavorite = $this->oModule->getObjectFavorite();
-        if(!$oFavorite->isPublic() && $iProfileAuthor != bx_get_logged_profile_id()){
+        if(!$oFavorite->isPublic() && $iProfileAuthor != bx_get_logged_profile_id()) {
             $this->isError = true;
             $this->isError = true;
             break;
             break;
         }
         }

+ 4 - 1
modules/boonex/forum/classes/BxForumConfig.php

@@ -79,6 +79,7 @@ class BxForumConfig extends BxBaseModTextConfig
 
 
             // objects
             // objects
             'OBJECT_GRID' => 'bx_forum',
             'OBJECT_GRID' => 'bx_forum',
+        	'OBJECT_GRID_FAVORITE' => 'bx_forum_favorite',
         	'OBJECT_GRID_ADMINISTRATION' => 'bx_forum_administration',
         	'OBJECT_GRID_ADMINISTRATION' => 'bx_forum_administration',
         	'OBJECT_GRID_COMMON' => 'bx_forum_common',
         	'OBJECT_GRID_COMMON' => 'bx_forum_common',
         	'OBJECT_GRID_CATEGORIES' => 'bx_forum_categories',
         	'OBJECT_GRID_CATEGORIES' => 'bx_forum_categories',
@@ -89,7 +90,8 @@ class BxForumConfig extends BxBaseModTextConfig
             'OBJECT_IMAGES_TRANSCODER_GALLERY' => '',
             'OBJECT_IMAGES_TRANSCODER_GALLERY' => '',
             'OBJECT_VIDEOS_TRANSCODERS' => array(),
             'OBJECT_VIDEOS_TRANSCODERS' => array(),
             'OBJECT_VIEWS' => 'bx_forum',
             'OBJECT_VIEWS' => 'bx_forum',
-            'OBJECT_VOTES' => '',
+            'OBJECT_VOTES' => 'bx_forum',
+        	'OBJECT_FAVORITES' => 'bx_forum',
         	'OBJECT_CATEGORY' => 'bx_forum_cats',
         	'OBJECT_CATEGORY' => 'bx_forum_cats',
             'OBJECT_COMMENTS' => 'bx_forum',
             'OBJECT_COMMENTS' => 'bx_forum',
         	'OBJECT_METATAGS' => 'bx_forum',
         	'OBJECT_METATAGS' => 'bx_forum',
@@ -125,6 +127,7 @@ class BxForumConfig extends BxBaseModTextConfig
             	'filter_item_select_one_filter1' => '_bx_forum_grid_filter_item_title_adm_select_one_filter1',
             	'filter_item_select_one_filter1' => '_bx_forum_grid_filter_item_title_adm_select_one_filter1',
             	'menu_item_manage_my' => '_bx_forum_menu_item_title_manage_my',
             	'menu_item_manage_my' => '_bx_forum_menu_item_title_manage_my',
             	'menu_item_manage_all' => '_bx_forum_menu_item_title_manage_all',
             	'menu_item_manage_all' => '_bx_forum_menu_item_title_manage_all',
+            	'txt_all_entries_by_author' => '_bx_forum_page_title_browse_by_author',
             ),
             ),
         );
         );
 
 

+ 48 - 3
modules/boonex/forum/classes/BxForumGrid.php

@@ -43,6 +43,7 @@ class BxForumGrid extends BxTemplGrid
 	    	switch($this->_aParams['type']) {
 	    	switch($this->_aParams['type']) {
 	    		case 'new':
 	    		case 'new':
 	    		case 'author':
 	    		case 'author':
+                case 'favorite':
 	    		case 'category':
 	    		case 'category':
 	                $sField = 'added';
 	                $sField = 'added';
 	                break;
 	                break;
@@ -145,6 +146,12 @@ class BxForumGrid extends BxTemplGrid
 			$sWhereClause .= $aCondition['where'];
 			$sWhereClause .= $aCondition['where'];
 
 
 		//--- Check browse params
 		//--- Check browse params
+        if(!empty($this->_aParams['join']) && is_array($this->_aParams['join'])) {
+			$sJoinClauseBrowse = $this->_getSqlJoinGroup($this->_aParams['join']);
+			if(!empty($sJoinClauseBrowse))
+				$sJoinClause .= " " . $sJoinClauseBrowse;
+		}
+
 		if(!empty($this->_aParams['where']) && is_array($this->_aParams['where'])) {
 		if(!empty($this->_aParams['where']) && is_array($this->_aParams['where'])) {
 			$sWhereClauseBrowse = $this->_getSqlWhereFromGroup($this->_aParams['where']);
 			$sWhereClauseBrowse = $this->_getSqlWhereFromGroup($this->_aParams['where']);
 			if(!empty($sWhereClauseBrowse))
 			if(!empty($sWhereClauseBrowse))
@@ -162,6 +169,40 @@ class BxForumGrid extends BxTemplGrid
     	return " ORDER BY `" . $this->_oModule->_oConfig->CNF['FIELD_STICK'] . "` DESC, " . $sOrder;
     	return " ORDER BY `" . $this->_oModule->_oConfig->CNF['FIELD_STICK'] . "` DESC, " . $sOrder;
     }
     }
 
 
+    protected function _getSqlJoinGroup($aGrp)
+    {
+    	if(!isset($aGrp['grp']) || (bool)$aGrp['grp'] !== true)
+			return $this->_getSqlJoinCondition($aGrp);
+
+		$sResult = "";
+    	if(empty($aGrp['cnds']) || !is_array($aGrp['cnds']))
+    		return $sResult;
+
+		$sOprGrp = " ";
+    	foreach($aGrp['cnds'] as $aCnd) {
+    		$sResultCnd = $this->_getSqlJoinCondition($aCnd);
+    		if(!empty($sResultCnd))
+				$sResult .= $sOprGrp . $sResultCnd;
+    	}
+
+    	return trim($sResult, $sOprGrp);
+    }
+
+    protected function _getSqlJoinCondition($aCnd)
+    {
+    	$sResult = "";
+    	if(!isset($aCnd['tp'], $aCnd['tbl1'], $aCnd['fld1'], $aCnd['fld2']))
+    		return $sResult;
+
+        $sField1 = "`" . $aCnd['tbl1'] . "`.`" . $aCnd['fld1'] . "`";
+
+        $sField2 = "`" . $aCnd['fld2'] . "`";
+        if(!empty($aCnd['tbl2']))
+            $sField2 = "`" . $aCnd['tbl2'] . "`." . $sField2;
+
+		return $aCnd['tp'] . " JOIN `" . $aCnd['tbl1'] . "` ON (" . $sField1 . " = " . $sField2 . ")";
+    }
+
     protected function _getSqlWhereFromGroup($aGrp)
     protected function _getSqlWhereFromGroup($aGrp)
     {
     {
     	if(!isset($aGrp['grp']) || (bool)$aGrp['grp'] !== true)
     	if(!isset($aGrp['grp']) || (bool)$aGrp['grp'] !== true)
@@ -192,20 +233,24 @@ class BxForumGrid extends BxTemplGrid
     	if(!isset($aCnd['fld'], $aCnd['val'], $aCnd['opr']))
     	if(!isset($aCnd['fld'], $aCnd['val'], $aCnd['opr']))
     		return $sResult;
     		return $sResult;
 
 
+        $sField = "`" . $aCnd['fld'] . "`";
+        if(!empty($aCnd['tbl']))
+            $sField = "`" . $aCnd['tbl'] . "`." . $sField;
+
 		switch($aCnd['opr']) {
 		switch($aCnd['opr']) {
 			case '=':
 			case '=':
-				$sResult .= "`" . $aCnd['fld'] . "` = " . $this->_oModule->_oDb->escape($aCnd['val']);
+				$sResult .= $sField . " = " . $this->_oModule->_oDb->escape($aCnd['val']);
 				break;
 				break;
 
 
 			case 'IN':
 			case 'IN':
 				if(empty($aCnd['val']) || !is_array($aCnd['val']))
 				if(empty($aCnd['val']) || !is_array($aCnd['val']))
 					break;
 					break;
 
 
-				$sResult .= "`" . $aCnd['fld'] . "` IN (" . $this->_oModule->_oDb->implode_escape($aCnd['val']) . ")";
+				$sResult .= $sField . " IN (" . $this->_oModule->_oDb->implode_escape($aCnd['val']) . ")";
 				break;
 				break;
 
 
 			case 'LIKE':
 			case 'LIKE':
-				$sResult .= "`" . $aCnd['fld'] . "` LIKE " . $this->_oModule->_oDb->escape('%' . $aCnd['val'] . '%');
+				$sResult .= $sField . " LIKE " . $this->_oModule->_oDb->escape('%' . $aCnd['val'] . '%');
 				break;
 				break;
 		}
 		}
 
 

+ 61 - 9
modules/boonex/forum/classes/BxForumModule.php

@@ -133,6 +133,60 @@ class BxForumModule extends BxBaseModTextModule
         ), false);
         ), false);
     }
     }
 
 
+    public function serviceBrowseFavorite ($iProfileId = 0, $aParams = array())
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        $oProfile = null;
+        if((int)$iProfileId)
+            $oProfile = BxDolProfile::getInstance($iProfileId);
+        if(!$oProfile && bx_get('profile_id') !== false)
+            $oProfile = BxDolProfile:: getInstance(bx_process_input(bx_get('profile_id'), BX_DATA_INT));
+        if(!$oProfile)
+            $oProfile = BxDolProfile::getInstance();
+        if(!$oProfile)
+            return '';
+
+        $iProfileAuthor = $oProfile->id();
+        $oFavorite = $this->getObjectFavorite();
+        if(!$oFavorite->isPublic() && $iProfileAuthor != bx_get_logged_profile_id())
+            return '';
+
+        $aConditions = $oFavorite->getConditionsTrack($CNF['TABLE_ENTRIES'], 'id', $iProfileAuthor);
+        if(empty($aConditions) || !is_array($aConditions)) 
+            return '';
+
+        $aJoinGroup = array('grp' => true, 'cnds' => array());
+        if(!empty($aConditions['join']))
+            foreach($aConditions['join'] as $aCondition)
+                $aJoinGroup['cnds'][] = array(
+                    'tp' => $aCondition['type'],
+                    'tbl1' => $aCondition['table'],
+                    'fld1' => $aCondition['onField'],
+                    'tbl2' => $aCondition['mainTable'],
+                	'fld2' => $aCondition['mainField']
+                );
+
+        $aWhereGroup = array('grp' => true, 'opr' => 'AND', 'cnds' => array());
+        if(!empty($aConditions['restriction']))
+            foreach($aConditions['restriction'] as $aCondition)
+                $aWhereGroup['cnds'][] = array(
+                	'tbl' => (!empty($aCondition['table']) ? $aCondition['table'] : ''), 
+                	'fld' => $aCondition['field'], 
+                	'val' => $aCondition['value'], 
+                	'opr' => $aCondition['operator']
+                );
+
+        return $this->_serviceBrowseTable(array(
+			'grid' => $CNF['OBJECT_GRID_FAVORITE'],
+        	'type' => 'favorite', 
+        	'author' => $iProfileId, 
+            'join' => $aJoinGroup,
+        	'where' => $aWhereGroup, 
+        	'per_page' => (int)$this->_oDb->getParam('bx_forum_per_page_profile')
+        ), false);
+    }
+
     public function serviceBrowseCategory($sUnitView = false, $bEmptyMessage = true, $bAjaxPaginate = true)
     public function serviceBrowseCategory($sUnitView = false, $bEmptyMessage = true, $bAjaxPaginate = true)
     {
     {
     	$sType = 'category';
     	$sType = 'category';
@@ -251,14 +305,6 @@ class BxForumModule extends BxBaseModTextModule
         return $this->_oTemplate->entryParticipants ($aContentInfo, 5, 'right');
         return $this->_oTemplate->entryParticipants ($aContentInfo, 5, 'right');
     }
     }
 
 
-    /**
-     * No social sharing for private discussions
-     */
-    public function serviceEntitySocialSharing($iContentId = 0)
-    {
-        return '';
-    }
-
 	public function serviceSearch()
 	public function serviceSearch()
     {
     {
     	$CNF = $this->_oConfig->CNF;
     	$CNF = $this->_oConfig->CNF;
@@ -353,7 +399,13 @@ class BxForumModule extends BxBaseModTextModule
 
 
 	protected function _serviceBrowseTable($aParams, $isDisplayHeader = true)
 	protected function _serviceBrowseTable($aParams, $isDisplayHeader = true)
     {
     {
-        $oGrid = BxDolGrid::getObjectInstance($this->_oConfig->CNF['OBJECT_GRID']);
+        $sGrid = $this->_oConfig->CNF['OBJECT_GRID'];
+        if(!empty($aParams['grid'])) {
+            $sGrid = $aParams['grid'];
+            unset($aParams['grid']);
+        }
+
+        $oGrid = BxDolGrid::getObjectInstance($sGrid);
         if(!$oGrid)
         if(!$oGrid)
 			return false;
 			return false;
 
 

+ 4 - 0
modules/boonex/forum/classes/BxForumSearchResult.php

@@ -68,6 +68,10 @@ class BxForumSearchResult extends BxBaseModTextSearchResult
                 $this->sBrowseUrl = 'page.php?i=' . $CNF['URI_AUTHOR_ENTRIES'] . '&profile_id={profile_id}';
                 $this->sBrowseUrl = 'page.php?i=' . $CNF['URI_AUTHOR_ENTRIES'] . '&profile_id={profile_id}';
                 $this->aCurrent['title'] = _t('_bx_forum_page_title_browse_by_author');
                 $this->aCurrent['title'] = _t('_bx_forum_page_title_browse_by_author');
                 $this->aCurrent['rss']['link'] = 'modules/?r=forum/rss/' . $sMode . '/' . $oProfileAuthor->id();
                 $this->aCurrent['rss']['link'] = 'modules/?r=forum/rss/' . $sMode . '/' . $oProfileAuthor->id();
+                break;
+
+            case 'favorite':
+                $this->_updateCurrentForFavorite($sMode, $aParams, $oProfileAuthor);
                 break;
                 break;
 
 
 			case 'category':
 			case 'category':

+ 3 - 0
modules/boonex/forum/install/langs/en.xml

@@ -68,6 +68,7 @@
     <string name="_bx_forum_page_block_title_delete_entry"><![CDATA[Delete]]></string>
     <string name="_bx_forum_page_block_title_delete_entry"><![CDATA[Delete]]></string>
 	<string name="_bx_forum_page_title_sys_view_entry"><![CDATA[View discussion]]></string>
 	<string name="_bx_forum_page_title_sys_view_entry"><![CDATA[View discussion]]></string>
 	<string name="_bx_forum_page_title_view_entry"><![CDATA[{title}]]></string>
 	<string name="_bx_forum_page_title_view_entry"><![CDATA[{title}]]></string>
+	<string name="_bx_forum_page_block_title_entry_all_actions"><![CDATA[All Actions]]></string>
 	<string name="_bx_forum_page_block_title_entry_attachments"><![CDATA[Attachments]]></string>
 	<string name="_bx_forum_page_block_title_entry_attachments"><![CDATA[Attachments]]></string>
 	<string name="_bx_forum_page_block_title_entry_text"><![CDATA[Text]]></string>
 	<string name="_bx_forum_page_block_title_entry_text"><![CDATA[Text]]></string>
     <string name="_bx_forum_page_block_title_entry_author"><![CDATA[Author]]></string>
     <string name="_bx_forum_page_block_title_entry_author"><![CDATA[Author]]></string>
@@ -120,6 +121,8 @@
     <string name="_bx_forum_page_block_title_entries_by_keyword"><![CDATA[Discussions by {keyword_name}]]></string>
     <string name="_bx_forum_page_block_title_entries_by_keyword"><![CDATA[Discussions by {keyword_name}]]></string>
     <string name="_bx_forum_page_title_sys_entries_of_author"><![CDATA[Discussions of author]]></string>
     <string name="_bx_forum_page_title_sys_entries_of_author"><![CDATA[Discussions of author]]></string>
     <string name="_bx_forum_page_title_entries_of_author"><![CDATA[Discussions by {display_name}]]></string>
     <string name="_bx_forum_page_title_entries_of_author"><![CDATA[Discussions by {display_name}]]></string>
+    <string name="_bx_forum_page_block_title_favorites_of_author"><![CDATA[Favorites by <a href="{profile_link}">{display_name}</a>]]></string>
+    <string name="_bx_forum_page_block_title_sys_favorites_of_author"><![CDATA[Favorites of author]]></string>
     <string name="_bx_forum_page_block_title_entries_of_author"><![CDATA[Discussions by <a href="{profile_link}">{display_name}</a>]]></string>
     <string name="_bx_forum_page_block_title_entries_of_author"><![CDATA[Discussions by <a href="{profile_link}">{display_name}</a>]]></string>
     <string name="_bx_forum_page_block_title_sys_entries_of_author"><![CDATA[Discussions of author]]></string>
     <string name="_bx_forum_page_block_title_sys_entries_of_author"><![CDATA[Discussions of author]]></string>
     <string name="_bx_forum_page_block_title_entries_actions"><![CDATA[Discussions actions]]></string>
     <string name="_bx_forum_page_block_title_entries_actions"><![CDATA[Discussions actions]]></string>

+ 11 - 3
modules/boonex/forum/install/sql/disable.sql

@@ -21,9 +21,9 @@ DELETE FROM `sys_menu_items` WHERE `module` = @sName OR `set_name` IN('bx_forum_
 
 
 
 
 -- GRID
 -- GRID
-DELETE FROM `sys_objects_grid` WHERE `object` IN ('bx_forum', 'bx_forum_administration', 'bx_forum_common', 'bx_forum_categories');
-DELETE FROM `sys_grid_fields` WHERE `object` IN ('bx_forum', 'bx_forum_administration', 'bx_forum_common', 'bx_forum_categories');
-DELETE FROM `sys_grid_actions` WHERE `object` IN ('bx_forum', 'bx_forum_administration', 'bx_forum_common', 'bx_forum_categories');
+DELETE FROM `sys_objects_grid` WHERE `object` IN (@sName, 'bx_forum_favorite', 'bx_forum_administration', 'bx_forum_common', 'bx_forum_categories');
+DELETE FROM `sys_grid_fields` WHERE `object` IN (@sName, 'bx_forum_favorite', 'bx_forum_administration', 'bx_forum_common', 'bx_forum_categories');
+DELETE FROM `sys_grid_actions` WHERE `object` IN (@sName, 'bx_forum_favorite', 'bx_forum_administration', 'bx_forum_common', 'bx_forum_categories');
 
 
 
 
 -- ACL
 -- ACL
@@ -55,6 +55,14 @@ DELETE FROM `sys_objects_cmts` WHERE `Name` = @sName;
 DELETE FROM `sys_objects_view` WHERE `Name` = @sName;
 DELETE FROM `sys_objects_view` WHERE `Name` = @sName;
 
 
 
 
+-- VOTES
+DELETE FROM `sys_objects_vote` WHERE `Name` = @sName;
+
+
+-- FAFORITES
+DELETE FROM `sys_objects_favorite` WHERE `Name` = @sName;
+
+
 -- ALERTS
 -- ALERTS
 SET @iHandler := (SELECT `id` FROM `sys_alerts_handlers` WHERE `name` = @sName LIMIT 1);
 SET @iHandler := (SELECT `id` FROM `sys_alerts_handlers` WHERE `name` = @sName LIMIT 1);
 DELETE FROM `sys_alerts` WHERE `handler_id` = @iHandler;
 DELETE FROM `sys_alerts` WHERE `handler_id` = @iHandler;

+ 25 - 6
modules/boonex/forum/install/sql/enable.sql

@@ -51,8 +51,9 @@ INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbo
 ('bx_forum_view_entry', 2, @sName, '_bx_forum_page_block_title_entry_author', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:13:"entity_author";}', 0, 0, 1, 0),
 ('bx_forum_view_entry', 2, @sName, '_bx_forum_page_block_title_entry_author', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:13:"entity_author";}', 0, 0, 1, 0),
 ('bx_forum_view_entry', 3, @sName, '_bx_forum_page_block_title_entry_participants', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:19:"entity_participants";}', 0, 0, 1, 0),
 ('bx_forum_view_entry', 3, @sName, '_bx_forum_page_block_title_entry_participants', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:19:"entity_participants";}', 0, 0, 1, 0),
 ('bx_forum_view_entry', 4, @sName, '_bx_forum_page_block_title_entry_text', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:17:"entity_text_block";}', 0, 0, 1, 0),
 ('bx_forum_view_entry', 4, @sName, '_bx_forum_page_block_title_entry_text', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:17:"entity_text_block";}', 0, 0, 1, 0),
-('bx_forum_view_entry', 4, @sName, '_bx_forum_page_block_title_entry_attachments', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:18:"entity_attachments";}', 0, 0, 1, 1),
-('bx_forum_view_entry', 4, @sName, '_bx_forum_page_block_title_entry_comments', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:15:"entity_comments";}', 0, 0, 1, 2);
+('bx_forum_view_entry', 4, @sName, '_bx_forum_page_block_title_entry_all_actions', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:18:"entity_all_actions";}', 0, 0, 1, 1),
+('bx_forum_view_entry', 4, @sName, '_bx_forum_page_block_title_entry_attachments', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:18:"entity_attachments";}', 0, 0, 1, 2),
+('bx_forum_view_entry', 4, @sName, '_bx_forum_page_block_title_entry_comments', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:15:"entity_comments";}', 0, 0, 1, 3);
 
 
 -- PAGE: new entries
 -- PAGE: new entries
 INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
 INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
@@ -108,8 +109,9 @@ INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module
 ('bx_forum_author', 'discussions-author', '_bx_forum_page_title_sys_entries_of_author', '_bx_forum_page_title_entries_of_author', @sName, 5, 2147483647, 1, 'page.php?i=discussions-author', '', '', '', 0, 1, 0, 'BxForumPageAuthor', 'modules/boonex/forum/classes/BxForumPageAuthor.php');
 ('bx_forum_author', 'discussions-author', '_bx_forum_page_title_sys_entries_of_author', '_bx_forum_page_title_entries_of_author', @sName, 5, 2147483647, 1, 'page.php?i=discussions-author', '', '', '', 0, 1, 0, 'BxForumPageAuthor', 'modules/boonex/forum/classes/BxForumPageAuthor.php');
 
 
 INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
 INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES 
-('bx_forum_author', 1, @sName, '', '_bx_forum_page_block_title_entries_actions', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:18:"my_entries_actions";}', 0, 0, 1, 0),
-('bx_forum_author', 1, @sName, '_bx_forum_page_block_title_sys_entries_of_author', '_bx_forum_page_block_title_entries_of_author', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:13:"browse_author";}', 0, 0, 1, 1);
+('bx_forum_author', 1, @sName, '', '_bx_forum_page_block_title_entries_actions', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:18:"my_entries_actions";}', 0, 0, 1, 1),
+('bx_forum_author', 1, @sName, '_bx_forum_page_block_title_sys_favorites_of_author', '_bx_forum_page_block_title_favorites_of_author', 11, 2147483647, 'service', 'a:3:{s:6:"module";s:8:"bx_forum";s:6:"method";s:15:"browse_favorite";s:6:"params";a:1:{i:0;s:12:"{profile_id}";}}', 0, 1, 1, 2),
+('bx_forum_author', 1, @sName, '_bx_forum_page_block_title_sys_entries_of_author', '_bx_forum_page_block_title_entries_of_author', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_forum";s:6:"method";s:13:"browse_author";}', 0, 0, 1, 3);
 
 
 -- PAGE: module home
 -- PAGE: module home
 INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
 INSERT INTO `sys_objects_page`(`object`, `uri`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
@@ -253,12 +255,17 @@ INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `titl
 
 
 -- GRIDS: main
 -- GRIDS: main
 INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_mode`, `sorting_fields`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES
 INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_mode`, `sorting_fields`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES
-(@sName, 'Sql', 'SELECT `bx_forum_discussions`.*, `bx_forum_cmts`.`cmt_text` AS `cmt_text` FROM `bx_forum_discussions` LEFT JOIN `bx_forum_cmts` ON (`bx_forum_cmts`.`cmt_id` = `bx_forum_discussions`.`lr_comment_id`) %s WHERE 1 %s', 'bx_forum_discussions', 'id', 'lr_timestamp', '', 10, NULL, 'start', '', 'title,text,cmt_text', 'auto', '', 2147483647, 'BxForumGrid', 'modules/boonex/forum/classes/BxForumGrid.php');
+(@sName, 'Sql', 'SELECT `bx_forum_discussions`.*, `bx_forum_cmts`.`cmt_text` AS `cmt_text` FROM `bx_forum_discussions` LEFT JOIN `bx_forum_cmts` ON (`bx_forum_cmts`.`cmt_id` = `bx_forum_discussions`.`lr_comment_id`) %s WHERE 1 %s', 'bx_forum_discussions', 'id', 'lr_timestamp', '', 10, NULL, 'start', '', 'title,text,cmt_text', 'auto', '', 2147483647, 'BxForumGrid', 'modules/boonex/forum/classes/BxForumGrid.php'),
+('bx_forum_favorite', 'Sql', 'SELECT `bx_forum_discussions`.*, `bx_forum_cmts`.`cmt_text` AS `cmt_text` FROM `bx_forum_discussions` LEFT JOIN `bx_forum_cmts` ON (`bx_forum_cmts`.`cmt_id` = `bx_forum_discussions`.`lr_comment_id`) %s WHERE 1 %s', 'bx_forum_discussions', 'id', 'lr_timestamp', '', 10, NULL, 'start', '', 'title,text,cmt_text', 'auto', '', 2147483647, 'BxForumGrid', 'modules/boonex/forum/classes/BxForumGrid.php');
 
 
 INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `params`, `order`) VALUES
 INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `params`, `order`) VALUES
 (@sName, 'author', '', '10%', '', 1),
 (@sName, 'author', '', '10%', '', 1),
 (@sName, 'lr_timestamp', '', '85%', '', 2),
 (@sName, 'lr_timestamp', '', '85%', '', 2),
-(@sName, 'comments', '', '5%', '', 3);
+(@sName, 'comments', '', '5%', '', 3),
+
+('bx_forum_favorite', 'author', '', '10%', '', 1),
+('bx_forum_favorite', 'lr_timestamp', '', '85%', '', 2),
+('bx_forum_favorite', 'comments', '', '5%', '', 3);
 
 
 INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `confirm`, `order`) VALUES
 INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `confirm`, `order`) VALUES
 (@sName, 'independent', 'add', '_bx_forum_grid_action_title_add', '', 0, 1);
 (@sName, 'independent', 'add', '_bx_forum_grid_action_title_add', '', 0, 1);
@@ -275,6 +282,7 @@ INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable
 ('bx_forum_administration', 'added', '_bx_forum_grid_column_title_adm_added', '20%', 1, '25', '', 4),
 ('bx_forum_administration', 'added', '_bx_forum_grid_column_title_adm_added', '20%', 1, '25', '', 4),
 ('bx_forum_administration', 'author', '_bx_forum_grid_column_title_adm_author', '25%', 0, '25', '', 5),
 ('bx_forum_administration', 'author', '_bx_forum_grid_column_title_adm_author', '25%', 0, '25', '', 5),
 ('bx_forum_administration', 'actions', '', '20%', 0, '', '', 6),
 ('bx_forum_administration', 'actions', '', '20%', 0, '', '', 6),
+
 ('bx_forum_common', 'checkbox', '_sys_select', '2%', 0, '', '', 1),
 ('bx_forum_common', 'checkbox', '_sys_select', '2%', 0, '', '', 1),
 ('bx_forum_common', 'switcher', '_bx_forum_grid_column_title_adm_active', '8%', 0, '', '', 2),
 ('bx_forum_common', 'switcher', '_bx_forum_grid_column_title_adm_active', '8%', 0, '', '', 2),
 ('bx_forum_common', 'title', '_bx_forum_grid_column_title_adm_title', '40%', 0, '', '', 3),
 ('bx_forum_common', 'title', '_bx_forum_grid_column_title_adm_title', '40%', 0, '', '', 3),
@@ -286,6 +294,7 @@ INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon
 ('bx_forum_administration', 'single', 'edit', '_bx_forum_grid_action_title_adm_edit', 'pencil', 1, 0, 1),
 ('bx_forum_administration', 'single', 'edit', '_bx_forum_grid_action_title_adm_edit', 'pencil', 1, 0, 1),
 ('bx_forum_administration', 'single', 'delete', '_bx_forum_grid_action_title_adm_delete', 'remove', 1, 1, 2),
 ('bx_forum_administration', 'single', 'delete', '_bx_forum_grid_action_title_adm_delete', 'remove', 1, 1, 2),
 ('bx_forum_administration', 'single', 'settings', '_bx_forum_grid_action_title_adm_more_actions', 'cog', 1, 0, 3),
 ('bx_forum_administration', 'single', 'settings', '_bx_forum_grid_action_title_adm_more_actions', 'cog', 1, 0, 3),
+
 ('bx_forum_common', 'bulk', 'delete', '_bx_forum_grid_action_title_adm_delete', '', 0, 1, 1),
 ('bx_forum_common', 'bulk', 'delete', '_bx_forum_grid_action_title_adm_delete', '', 0, 1, 1),
 ('bx_forum_common', 'single', 'edit', '_bx_forum_grid_action_title_adm_edit', 'pencil', 1, 0, 1),
 ('bx_forum_common', 'single', 'edit', '_bx_forum_grid_action_title_adm_edit', 'pencil', 1, 0, 1),
 ('bx_forum_common', 'single', 'delete', '_bx_forum_grid_action_title_adm_delete', 'remove', 1, 1, 2),
 ('bx_forum_common', 'single', 'delete', '_bx_forum_grid_action_title_adm_delete', 'remove', 1, 1, 2),
@@ -415,6 +424,16 @@ INSERT INTO `sys_objects_view` (`name`, `table_track`, `period`, `is_on`, `trigg
 (@sName, 'bx_forum_views_track', '86400', '1', 'bx_forum_discussions', 'id', 'views', '', '');
 (@sName, 'bx_forum_views_track', '86400', '1', 'bx_forum_discussions', 'id', 'views', '', '');
 
 
 
 
+-- VOTES
+INSERT INTO `sys_objects_vote` (`Name`, `TableMain`, `TableTrack`, `PostTimeout`, `MinValue`, `MaxValue`, `IsUndo`, `IsOn`, `TriggerTable`, `TriggerFieldId`, `TriggerFieldAuthor`, `TriggerFieldRate`, `TriggerFieldRateCount`, `ClassName`, `ClassFile`) VALUES 
+(@sName, 'bx_forum_votes', 'bx_forum_votes_track', '604800', '1', '1', '0', '1', 'bx_forum_discussions', 'id', 'author', 'rate', 'votes', '', '');
+
+
+-- FAFORITES
+INSERT INTO `sys_objects_favorite` (`name`, `table_track`, `is_on`, `is_undo`, `is_public`, `base_url`, `trigger_table`, `trigger_field_id`, `trigger_field_author`, `trigger_field_count`, `class_name`, `class_file`) VALUES 
+(@sName, 'bx_forum_favorites_track', '1', '1', '1', 'page.php?i=view-discussion&id={object_id}', 'bx_forum_discussions', 'id', 'author', 'favorites', '', '');
+
+
 -- ALERTS
 -- ALERTS
 INSERT INTO `sys_alerts_handlers` (`name`, `class`, `file`, `service_call`) VALUES 
 INSERT INTO `sys_alerts_handlers` (`name`, `class`, `file`, `service_call`) VALUES 
 (@sName, 'BxForumAlertsResponse', 'modules/boonex/forum/classes/BxForumAlertsResponse.php', '');
 (@sName, 'BxForumAlertsResponse', 'modules/boonex/forum/classes/BxForumAlertsResponse.php', '');

+ 30 - 0
modules/boonex/forum/install/sql/install.sql

@@ -14,6 +14,9 @@ CREATE TABLE IF NOT EXISTS `bx_forum_discussions` (
   `lr_profile_id` int(10) unsigned NOT NULL,
   `lr_profile_id` int(10) unsigned NOT NULL,
   `lr_comment_id` int(11) NOT NULL,
   `lr_comment_id` int(11) NOT NULL,
   `views` 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',
+  `favorites` int(11) NOT NULL default '0',
   `comments` int(11) NOT NULL default '0',
   `comments` int(11) NOT NULL default '0',
   `reports` int(11) NOT NULL default '0',
   `reports` int(11) NOT NULL default '0',
   `stick` tinyint(4) NOT NULL DEFAULT '0',
   `stick` tinyint(4) NOT NULL DEFAULT '0',
@@ -92,6 +95,25 @@ CREATE TABLE `bx_forum_views_track` (
   KEY `id` (`object_id`,`viewer_id`,`viewer_nip`)
   KEY `id` (`object_id`,`viewer_id`,`viewer_nip`)
 );
 );
 
 
+-- TABLE: votes
+CREATE TABLE IF NOT EXISTS `bx_forum_votes` (
+  `object_id` int(11) NOT NULL default '0',
+  `count` int(11) NOT NULL default '0',
+  `sum` int(11) NOT NULL default '0',
+  UNIQUE KEY `object_id` (`object_id`)
+) ENGINE=MYISAM DEFAULT CHARSET=utf8;
+
+CREATE TABLE IF NOT EXISTS `bx_forum_votes_track` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `object_id` int(11) NOT NULL default '0',
+  `author_id` int(11) NOT NULL default '0',
+  `author_nip` int(11) unsigned NOT NULL default '0',
+  `value` tinyint(4) NOT NULL default '0',
+  `date` int(11) NOT NULL default '0',
+  PRIMARY KEY (`id`),
+  KEY `vote` (`object_id`, `author_nip`)
+) ENGINE=MYISAM DEFAULT CHARSET=utf8;
+
 -- TABLE: metas
 -- TABLE: metas
 CREATE TABLE `bx_forum_meta_keywords` (
 CREATE TABLE `bx_forum_meta_keywords` (
   `object_id` int(10) unsigned NOT NULL,
   `object_id` int(10) unsigned NOT NULL,
@@ -119,6 +141,14 @@ CREATE TABLE IF NOT EXISTS `bx_forum_reports_track` (
   KEY `report` (`object_id`, `author_nip`)
   KEY `report` (`object_id`, `author_nip`)
 ) ENGINE=MYISAM DEFAULT CHARSET=utf8;
 ) ENGINE=MYISAM DEFAULT CHARSET=utf8;
 
 
+-- TABLE: favorites
+CREATE TABLE `bx_forum_favorites_track` (
+  `object_id` int(11) NOT NULL default '0',
+  `author_id` int(11) NOT NULL default '0',
+  `date` int(11) NOT NULL default '0',
+  KEY `id` (`object_id`,`author_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
 
 
 -- STORAGES & TRANSCODERS
 -- STORAGES & TRANSCODERS
 INSERT INTO `sys_objects_storage` (`object`, `engine`, `params`, `token_life`, `cache_control`, `levels`, `table_files`, `ext_mode`, `ext_allow`, `ext_deny`, `quota_size`, `current_size`, `quota_number`, `current_number`, `max_file_size`, `ts`) VALUES
 INSERT INTO `sys_objects_storage` (`object`, `engine`, `params`, `token_life`, `cache_control`, `levels`, `table_files`, `ext_mode`, `ext_allow`, `ext_deny`, `quota_size`, `current_size`, `quota_number`, `current_number`, `max_file_size`, `ts`) VALUES

+ 1 - 1
modules/boonex/forum/install/sql/uninstall.sql

@@ -2,7 +2,7 @@ SET @sName = 'bx_forum';
 
 
 
 
 -- TABLES: entries
 -- TABLES: entries
-DROP TABLE IF EXISTS `bx_forum_discussions`, `bx_forum_categories`, `bx_forum_files`, `bx_forum_photos_resized`, `bx_forum_cmts`, `bx_forum_views_track`, `bx_forum_meta_keywords`, `bx_forum_reports`, `bx_forum_reports_track`;
+DROP TABLE IF EXISTS `bx_forum_discussions`, `bx_forum_categories`, `bx_forum_files`, `bx_forum_photos_resized`, `bx_forum_cmts`, `bx_forum_views_track`, `bx_forum_votes`, `bx_forum_votes_track`, `bx_forum_meta_keywords`, `bx_forum_reports`, `bx_forum_reports_track`, `bx_forum_favorites_track`;
 
 
 
 
 -- STORAGES & TRANSCODERS
 -- STORAGES & TRANSCODERS

+ 1 - 0
modules/boonex/forum/template/entry-share.html

@@ -0,0 +1 @@
+<bx_include_base:../modules/base/text/template/entry-share.html />

+ 3 - 0
modules/boonex/russian/data/langs/bx_forum/ru.xml

@@ -68,6 +68,7 @@
     <string name="_bx_forum_page_block_title_delete_entry"><![CDATA[Удалить обсуждение]]></string>
     <string name="_bx_forum_page_block_title_delete_entry"><![CDATA[Удалить обсуждение]]></string>
 	<string name="_bx_forum_page_title_sys_view_entry"><![CDATA[Просмотреть обсуждение]]></string>
 	<string name="_bx_forum_page_title_sys_view_entry"><![CDATA[Просмотреть обсуждение]]></string>
 	<string name="_bx_forum_page_title_view_entry"><![CDATA[{title}]]></string>
 	<string name="_bx_forum_page_title_view_entry"><![CDATA[{title}]]></string>
+	<string name="_bx_forum_page_block_title_entry_all_actions"><![CDATA[Все Действия]]></string>
 	<string name="_bx_forum_page_block_title_entry_attachments"><![CDATA[Прикрепления]]></string>
 	<string name="_bx_forum_page_block_title_entry_attachments"><![CDATA[Прикрепления]]></string>
 	<string name="_bx_forum_page_block_title_entry_text"><![CDATA[Текст]]></string>
 	<string name="_bx_forum_page_block_title_entry_text"><![CDATA[Текст]]></string>
     <string name="_bx_forum_page_block_title_entry_author"><![CDATA[Автор]]></string>
     <string name="_bx_forum_page_block_title_entry_author"><![CDATA[Автор]]></string>
@@ -120,6 +121,8 @@
     <string name="_bx_forum_page_block_title_entries_by_keyword"><![CDATA[Обсуждения по хэштегу: {keyword_name}]]></string>
     <string name="_bx_forum_page_block_title_entries_by_keyword"><![CDATA[Обсуждения по хэштегу: {keyword_name}]]></string>
     <string name="_bx_forum_page_title_sys_entries_of_author"><![CDATA[Обсуждения автора]]></string>
     <string name="_bx_forum_page_title_sys_entries_of_author"><![CDATA[Обсуждения автора]]></string>
     <string name="_bx_forum_page_title_entries_of_author"><![CDATA[{display_name} - Обсуждения]]></string>
     <string name="_bx_forum_page_title_entries_of_author"><![CDATA[{display_name} - Обсуждения]]></string>
+    <string name="_bx_forum_page_block_title_favorites_of_author"><![CDATA[<a href="{profile_link}">{display_name}</a> - Избранное]]></string>   
+    <string name="_bx_forum_page_block_title_sys_favorites_of_author"><![CDATA[Избранное автора]]></string>
     <string name="_bx_forum_page_block_title_entries_of_author"><![CDATA[<a href="{profile_link}">{display_name}</a> - Обсуждения]]></string>   
     <string name="_bx_forum_page_block_title_entries_of_author"><![CDATA[<a href="{profile_link}">{display_name}</a> - Обсуждения]]></string>   
     <string name="_bx_forum_page_block_title_sys_entries_of_author"><![CDATA[Обсуждения автора]]></string>
     <string name="_bx_forum_page_block_title_sys_entries_of_author"><![CDATA[Обсуждения автора]]></string>
     <string name="_bx_forum_page_block_title_entries_actions"><![CDATA[Обсуждения - Действия]]></string>
     <string name="_bx_forum_page_block_title_entries_actions"><![CDATA[Обсуждения - Действия]]></string>