Skip to content

Commit

Permalink
Ticket #3922 - Improve Relations.
Browse files Browse the repository at this point in the history
  • Loading branch information
AntonLV committed Jul 11, 2022
1 parent dda355f commit 8f022e9
Show file tree
Hide file tree
Showing 15 changed files with 123 additions and 32 deletions.
26 changes: 26 additions & 0 deletions inc/classes/BxDolGridRelatedMe.php
Expand Up @@ -84,6 +84,32 @@ protected function _getActionAdd($sType, $sKey, $a, $isSmall = false, $isDisable
$a['attr']['onclick'] = "javascript: bx_menu_popup('sys_add_relation', window, {}, {profile_id: " . $aRow['id'] . "});";
return parent::_getActionDefault($sType, $sKey, $a, $isSmall, $isDisabled, $aRow);
}

protected function _getActionDelete ($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = array())
{
if (!isLogged() || !$this->_bOwner)
return '';

return parent::_getActionDefault ($sType, $sKey, $a, $isSmall, $isDisabled, $aRow);
}

protected function _delete ($mixedId)
{
list($iId, $iViewedId) = $this->_prepareIds();

if(!$this->_oConnection->isConnected($iId, $iViewedId))
return true;

return $this->_oConnection->removeConnection($iId, $iViewedId);
}

protected function _getDataSql ($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage)
{
if(!$this->_bOwner)
$this->_aOptions['source'] .= " AND `c`.`mutual`='1'";

return parent::_getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage);
}
}

/** @} */
8 changes: 8 additions & 0 deletions inc/classes/BxDolGridRelations.php
Expand Up @@ -27,6 +27,14 @@ protected function _getCellMutual($mixedValue, $sKey, $aField, $aRow)

return parent::_getCellDefault($mixedValue, $sKey, $aField, $aRow);
}

protected function _getDataSql ($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage)
{
if(!$this->_bOwner)
$this->_aOptions['source'] .= " AND `c`.`mutual`='1'";

return parent::_getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage);
}
}

/** @} */
18 changes: 14 additions & 4 deletions inc/classes/BxDolPrivacy.php
Expand Up @@ -91,25 +91,30 @@ protected function __construct($aObject)

$this->_aGroupsSettings = [
BX_DOL_PG_FRIENDS_SELECTED => [
'name' => 'friends',
'name' => 'friends_selected',
'is_allowed' => '',
'connection' => 'sys_profiles_friends',
'js_method_create_group' => 'selectMembers',
'db_table_items' => 'sys_privacy_groups_custom_members',
'db_field_item' => 'member_id',
'uri_get_items' => 'users_list',
],
BX_DOL_PG_RELATIONS_SELECTED => [
BX_DOL_PG_RELATIONS => [
'name' => 'relations',
'is_allowed' => '',
'is_allowed' => 'isAllowedRelations',
'connection' => 'sys_profiles_relations',
],
BX_DOL_PG_RELATIONS_SELECTED => [
'name' => 'relations_selected',
'is_allowed' => 'isAllowedRelations',
'connection' => 'sys_profiles_relations',
'js_method_create_group' => 'selectMembers',
'db_table_items' => 'sys_privacy_groups_custom_members',
'db_field_item' => 'member_id',
'uri_get_items' => 'users_list',
],
BX_DOL_PG_MEMBERSHIPS_SELECTED => [
'name' => 'memberships',
'name' => 'memberships_selected',
'is_allowed' => 'isAllowedMemberships',
'connection' => '',
'js_method_create_group' => 'selectMemberships',
Expand Down Expand Up @@ -780,6 +785,11 @@ protected function isSelectGroupCustomMemberships($aParams)
return true;
}

public function isAllowedRelations($iUserId)
{
return BxDolRelation::isEnabled();
}

public function isAllowedMemberships($iUserId)
{
$aCheck = checkActionModule($iUserId, 'show membership levels in privacy groups', 'system', false);
Expand Down
17 changes: 13 additions & 4 deletions inc/classes/BxDolRelation.php
Expand Up @@ -9,9 +9,10 @@

class BxDolRelation extends BxDolConnection
{
protected $_sParamDivider;
protected $_sParamEnabled;
protected static $_sParamEnabled = 'sys_relations_enable';
protected static $_sParamTypes = 'sys_relations';

protected $_sParamDivider;
protected $_sPreList;

protected function __construct($aObject)
Expand All @@ -21,10 +22,18 @@ protected function __construct($aObject)
$this->_oQuery = new BxDolRelationQuery($aObject);

$this->_sParamDivider = '_';
$this->_sParamEnabled = 'sys_relations';
$this->_sPreList = 'sys_relations';
}

/**
* Whether the Relations feature is enabled globaly or not.
* @return boolean
*/
public static function isEnabled()
{
return getParam(self::$_sParamEnabled) == 'on';
}

/**
* Add new relation.
* @param $mixedContent content to make relation with or an array with content and relation type
Expand Down Expand Up @@ -268,7 +277,7 @@ public function getRelationTranslation($iValue, $sUseValues = BX_DATA_VALUES_DEF

public function getRelationTypes()
{
$sParam = getParam($this->_sParamEnabled);
$sParam = getParam(self::$_sParamTypes);
if(empty($sParam))
return array();

Expand Down
2 changes: 1 addition & 1 deletion inc/js/classes/BxDolPrivacy.js
Expand Up @@ -81,7 +81,7 @@ BxDolPrivacy.prototype.selectGroup = function(oElement)
$('#' + this._aHtmlIds['group_custom_element']).remove();

var iGroupId = parseInt($(oElement).val());
if(!this._aGroupSettings[iGroupId])
if(!this._aGroupSettings[iGroupId] || !this._aGroupSettings[iGroupId]['js_method_create_group'])
return;

var sMethodCreateGroup = 'selectMembers';
Expand Down
6 changes: 4 additions & 2 deletions install/sql/system.sql
Expand Up @@ -334,7 +334,8 @@ INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `ex

(@iCategoryId, 'sys_search_keyword_min_len', '_adm_stg_cpt_option_sys_search_keyword_min_len', '1', 'digit', '', '', '', '', 80),

(@iCategoryId, 'sys_relations', '_adm_stg_cpt_option_sys_relations', '', 'list', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:21:"get_options_relations";s:6:"params";a:0:{}s:5:"class";s:13:"TemplServices";}', '', '', '', 90),
(@iCategoryId, 'sys_relations_enable', '_adm_stg_cpt_option_sys_relations_enable', 'on', 'checkbox', '', '', '', '', 90),
(@iCategoryId, 'sys_relations', '_adm_stg_cpt_option_sys_relations', '', 'list', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:21:"get_options_relations";s:6:"params";a:0:{}s:5:"class";s:13:"TemplServices";}', '', '', '', 91),

(@iCategoryId, 'enable_gd', '_adm_stg_cpt_option_enable_gd', 'on', 'checkbox', '', '', '', '', 100),
(@iCategoryId, 'sys_transcoder_queue_storage', '_adm_stg_cpt_option_sys_transcoder_queue_storage', '', 'checkbox', '', '', '', '', 105),
Expand Down Expand Up @@ -5079,7 +5080,8 @@ INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon

('sys_grid_related_me', 'single', 'confirm', '_sys_confirm', 'check-circle', 1, 0, 1),
('sys_grid_related_me', 'single', 'decline', '_sys_decline', 'times-circle', 1, 1, 2),
('sys_grid_related_me', 'single', 'add', '_sys_add_relation', 'plus-circle', 1, 0, 3);
('sys_grid_related_me', 'single', 'add', '_sys_add_relation', 'plus-circle', 1, 0, 3),
('sys_grid_related_me', 'single', 'delete', '_Delete', 'remove', 1, 1, 4);

-- GRID: queues
INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `order_get_field`, `order_get_dir`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `filter_get`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `responsive`, `show_total_count`, `override_class_name`, `override_class_file`) VALUES
Expand Down
21 changes: 20 additions & 1 deletion modules/base/profile/classes/BxBaseModProfileModule.php
Expand Up @@ -1085,6 +1085,9 @@ public function serviceProfileSubscribedMe ($iContentId = 0)

public function serviceProfileRelations ($iContentId = 0, $aParams = array())
{
if(!BxDolRelation::isEnabled())
return false;

$mixedContent = $this->_getContent($iContentId);
if($mixedContent === false)
return false;
Expand All @@ -1101,6 +1104,9 @@ public function serviceProfileRelations ($iContentId = 0, $aParams = array())

public function serviceProfileRelatedMe ($iContentId = 0)
{
if(!BxDolRelation::isEnabled())
return false;

$mixedContent = $this->_getContent($iContentId);
if($mixedContent === false)
return false;
Expand All @@ -1126,6 +1132,9 @@ public function serviceIsEnableProfileActivationLetter()

public function serviceIsEnableRelations()
{
if(!BxDolRelation::isEnabled())
return false;

$sModule = $this->_oConfig->getName();
$oRelations = BxDolConnection::getObjectInstance('sys_profiles_relations');
return $oRelations->isRelationAvailableWithProfile($sModule) || $oRelations->isRelationAvailableFromProfile($sModule);
Expand Down Expand Up @@ -1696,7 +1705,11 @@ public function checkAllowedFriendRemove (&$aDataEntry, $isPerformAction = false
*/
public function checkAllowedRelationAdd (&$aDataEntry, $isPerformAction = false)
{
if (CHECK_ACTION_RESULT_ALLOWED !== ($sMsg = $this->checkAllowedView($aDataEntry)))
$sResult = _t('_sys_txt_access_denied');
if(!BxDolRelation::isEnabled())
return $sResult;

if(($sMsg = $this->checkAllowedView($aDataEntry)) !== CHECK_ACTION_RESULT_ALLOWED)
return $sMsg;

return $this->_checkAllowedConnect ($aDataEntry, $isPerformAction, 'sys_profiles_relations', false, false);
Expand All @@ -1707,12 +1720,18 @@ public function checkAllowedRelationAdd (&$aDataEntry, $isPerformAction = false)
*/
public function checkAllowedRelationRemove (&$aDataEntry, $isPerformAction = false)
{
$sResult = _t('_sys_txt_access_denied');
if(!BxDolRelation::isEnabled())
return $sResult;

return $this->_checkAllowedConnect ($aDataEntry, $isPerformAction, 'sys_profiles_relations', false, true);
}

public function checkAllowedRelationsView (&$aDataEntry, $isPerformAction = false)
{
$sResult = _t('_sys_txt_access_denied');
if(!BxDolRelation::isEnabled())
return $sResult;

$sModule = $this->_oConfig->getName();
$oRelations = BxDolConnection::getObjectInstance('sys_profiles_relations');
Expand Down
3 changes: 2 additions & 1 deletion modules/boonex/english/data/langs/system/en.xml
Expand Up @@ -1623,7 +1623,8 @@
<string name="_adm_stg_cpt_option_sys_recaptcha_key_public"><![CDATA[reCAPTCHA/hCaptcha public key]]></string>
<string name="_adm_stg_cpt_option_sys_redirect_after_account_added"><![CDATA[Redirect after account creation to]]></string>
<string name="_adm_stg_cpt_option_sys_redirect_after_email_confirmation"><![CDATA[Redirect after email confirmation to]]></string>
<string name="_adm_stg_cpt_option_sys_relations"><![CDATA[Enable relationships between]]></string>
<string name="_adm_stg_cpt_option_sys_relations_enable"><![CDATA[Enable relationships]]></string>
<string name="_adm_stg_cpt_option_sys_relations"><![CDATA[Allow relationships between]]></string>
<string name="_adm_stg_cpt_option_sys_revision"><![CDATA[Revision number]]></string>
<string name="_adm_stg_cpt_option_sys_security_form_token_enable"><![CDATA[Enable CSRF token in forms]]></string>
<string name="_adm_stg_cpt_option_sys_security_form_token_lifetime"><![CDATA[CSRF token lifetime in seconds(0 - do not track time)]]></string>
Expand Down
16 changes: 8 additions & 8 deletions modules/boonex/organizations/install/sql/enable.sql
Expand Up @@ -452,14 +452,14 @@ INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `tit

-- MENU: profile stats
SET @iNotifMenuOrder = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_menu_items` WHERE `set_name` = 'sys_profile_stats' AND `active` = 1 LIMIT 1);
INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES
('sys_profile_stats', 'bx_organizations', 'profile-stats-friend-requests', '_bx_orgs_menu_item_title_system_friend_requests', '_bx_orgs_menu_item_title_friend_requests', 'page.php?i=organization-profile-friends&profile_id={member_id}', '', '', 'briefcase col-red2', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:31:"get_unconfirmed_connections_num";s:6:"params";a:1:{i:0;s:20:"sys_profiles_friends";}s:5:"class";s:23:"TemplServiceConnections";}', '', 2147483646, 1, 0, @iNotifMenuOrder + 1),
('sys_profile_stats', 'bx_organizations', 'profile-stats-manage-organizations', '_bx_orgs_menu_item_title_system_manage_my_organizations', '_bx_orgs_menu_item_title_manage_my_organizations', 'page.php?i=organizations-manage', '', '_self', 'briefcase col-red2', 'a:2:{s:6:"module";s:16:"bx_organizations";s:6:"method";s:41:"get_menu_addon_manage_tools_profile_stats";}', '', 2147483646, 1, 0, @iNotifMenuOrder + 2),
('sys_profile_stats', 'bx_organizations', 'profile-stats-favorite-organizations', '_bx_orgs_menu_item_title_system_favorites', '_bx_orgs_menu_item_title_favorites', 'page.php?i=organization-profile-favorites&profile_id={member_id}', '', '', 'star col-red2', 'a:2:{s:6:"module";s:16:"bx_organizations";s:6:"method";s:38:"get_menu_addon_favorites_profile_stats";}', '', 2147483646, 1, 0, @iNotifMenuOrder + 3),
('sys_profile_stats', 'bx_organizations', 'profile-stats-subscriptions', '_bx_orgs_menu_item_title_system_subscriptions', '_bx_orgs_menu_item_title_subscriptions', 'page.php?i=organization-profile-subscriptions&profile_id={member_id}#subscriptions', '', '_self', 'rss col-red2', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:25:"get_connected_content_num";s:6:"params";a:1:{i:0;s:26:"sys_profiles_subscriptions";}s:5:"class";s:23:"TemplServiceConnections";}', '', 2147483646, 1, 0, @iNotifMenuOrder + 4),
('sys_profile_stats', 'bx_organizations', 'profile-stats-subscribed-me', '_bx_orgs_menu_item_title_system_subscribed_me', '_bx_orgs_menu_item_title_subscribed_me', 'page.php?i=organization-profile-subscriptions&profile_id={member_id}#subscribers', '', '_self', 'rss col-red2', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:28:"get_connected_initiators_num";s:6:"params";a:1:{i:0;s:26:"sys_profiles_subscriptions";}s:5:"class";s:23:"TemplServiceConnections";}', '', 2147483646, 1, 0, @iNotifMenuOrder + 5),
('sys_profile_stats', 'bx_organizations', 'profile-stats-relations', '_bx_orgs_menu_item_title_system_relations', '_bx_orgs_menu_item_title_relations', 'page.php?i=organization-profile-relations&profile_id={member_id}#relations', '', '_self', 'sync col-blue3', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:25:"get_connected_content_num";s:6:"params";a:3:{i:0;s:22:"sys_profiles_relations";i:1;i:0;i:2;i:1;}s:5:"class";s:23:"TemplServiceConnections";}', '', 2147483646, 1, 0, @iNotifMenuOrder + 6),
('sys_profile_stats', 'bx_organizations', 'profile-stats-related-me', '_bx_orgs_menu_item_title_system_related_me', '_bx_orgs_menu_item_title_related_me', 'page.php?i=organization-profile-relations&profile_id={member_id}#related-me', '', '_self', 'sync col-blue3', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:28:"get_connected_initiators_num";s:6:"params";a:3:{i:0;s:22:"sys_profiles_relations";i:1;i:0;i:2;i:1;}s:5:"class";s:23:"TemplServiceConnections";}', '', 2147483646, 1, 0, @iNotifMenuOrder + 7);
INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `visibility_custom`, `active`, `copyable`, `order`) VALUES
('sys_profile_stats', 'bx_organizations', 'profile-stats-friend-requests', '_bx_orgs_menu_item_title_system_friend_requests', '_bx_orgs_menu_item_title_friend_requests', 'page.php?i=organization-profile-friends&profile_id={member_id}', '', '', 'briefcase col-red2', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:31:"get_unconfirmed_connections_num";s:6:"params";a:1:{i:0;s:20:"sys_profiles_friends";}s:5:"class";s:23:"TemplServiceConnections";}', '', 2147483646, '', 1, 0, @iNotifMenuOrder + 1),
('sys_profile_stats', 'bx_organizations', 'profile-stats-manage-organizations', '_bx_orgs_menu_item_title_system_manage_my_organizations', '_bx_orgs_menu_item_title_manage_my_organizations', 'page.php?i=organizations-manage', '', '_self', 'briefcase col-red2', 'a:2:{s:6:"module";s:16:"bx_organizations";s:6:"method";s:41:"get_menu_addon_manage_tools_profile_stats";}', '', 2147483646, '', 1, 0, @iNotifMenuOrder + 2),
('sys_profile_stats', 'bx_organizations', 'profile-stats-favorite-organizations', '_bx_orgs_menu_item_title_system_favorites', '_bx_orgs_menu_item_title_favorites', 'page.php?i=organization-profile-favorites&profile_id={member_id}', '', '', 'star col-red2', 'a:2:{s:6:"module";s:16:"bx_organizations";s:6:"method";s:38:"get_menu_addon_favorites_profile_stats";}', '', 2147483646, '', 1, 0, @iNotifMenuOrder + 3),
('sys_profile_stats', 'bx_organizations', 'profile-stats-subscriptions', '_bx_orgs_menu_item_title_system_subscriptions', '_bx_orgs_menu_item_title_subscriptions', 'page.php?i=organization-profile-subscriptions&profile_id={member_id}#subscriptions', '', '_self', 'rss col-red2', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:25:"get_connected_content_num";s:6:"params";a:1:{i:0;s:26:"sys_profiles_subscriptions";}s:5:"class";s:23:"TemplServiceConnections";}', '', 2147483646, '', 1, 0, @iNotifMenuOrder + 4),
('sys_profile_stats', 'bx_organizations', 'profile-stats-subscribed-me', '_bx_orgs_menu_item_title_system_subscribed_me', '_bx_orgs_menu_item_title_subscribed_me', 'page.php?i=organization-profile-subscriptions&profile_id={member_id}#subscribers', '', '_self', 'rss col-red2', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:28:"get_connected_initiators_num";s:6:"params";a:1:{i:0;s:26:"sys_profiles_subscriptions";}s:5:"class";s:23:"TemplServiceConnections";}', '', 2147483646, '', 1, 0, @iNotifMenuOrder + 5),
('sys_profile_stats', 'bx_organizations', 'profile-stats-relations', '_bx_orgs_menu_item_title_system_relations', '_bx_orgs_menu_item_title_relations', 'page.php?i=organization-profile-relations&profile_id={member_id}#relations', '', '_self', 'sync col-blue3', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:25:"get_connected_content_num";s:6:"params";a:3:{i:0;s:22:"sys_profiles_relations";i:1;i:0;i:2;i:1;}s:5:"class";s:23:"TemplServiceConnections";}', '', 2147483646, 'a:2:{s:6:"module";s:16:"bx_organizations";s:6:"method";s:19:"is_enable_relations";}', 1, 0, @iNotifMenuOrder + 6),
('sys_profile_stats', 'bx_organizations', 'profile-stats-related-me', '_bx_orgs_menu_item_title_system_related_me', '_bx_orgs_menu_item_title_related_me', 'page.php?i=organization-profile-relations&profile_id={member_id}#related-me', '', '_self', 'sync col-blue3', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:28:"get_connected_initiators_num";s:6:"params";a:3:{i:0;s:22:"sys_profiles_relations";i:1;i:0;i:2;i:1;}s:5:"class";s:23:"TemplServiceConnections";}', '', 2147483646, 'a:2:{s:6:"module";s:16:"bx_organizations";s:6:"method";s:19:"is_enable_relations";}', 1, 0, @iNotifMenuOrder + 7);

-- MENU: profile followings
SET @iFollowingsMenuOrder = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_menu_items` WHERE `set_name`='sys_profile_followings' LIMIT 1);
Expand Down

0 comments on commit 8f022e9

Please sign in to comment.