Untitled diff

Created Diff never expires
40 removals
Lines
Total
Removed
Words
Total
Removed
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
109 lines
38 additions
Lines
Total
Added
Words
Total
Added
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
108 lines
<?php
<?php


class NixFifty_Discord_Helper
class NixFifty_Discord_Helper
{
{
public static function getCRC32($input)
public static function getCRC32($input)
{
{
return hash('crc32', $input);
return hash('crc32', $input);
}
}


public function setUserServerGroupsById(XenForo_Model_UserExternal $model = null, $userId)
public function setUserServerGroupsById(XenForo_Model_UserExternal $model = null, $userId)
{
{
if (is_null($model))
if (is_null($model))
{
{
$model = XenForo_Model::create('XenForo_Model_UserExternal');
$model = XenForo_Model::create('XenForo_Model_UserExternal');
}
}


$xenOptions = XenForo_Application::getOptions();
$xenOptions = XenForo_Application::getOptions();


if ($xenOptions->nfDiscordEnableSync)
if ($xenOptions->nfDiscordEnableSync)
{
{
$api = new NixFifty_Discord_Api_Guild();
$api = new NixFifty_Discord_Api_Guild();
$externalUser = $model->getExternalAuthAssociationForUser('discord', $userId);
$externalUser = $model->getExternalAuthAssociationForUser('discord', $userId);
if(!$externalUser)
if(!$externalUser)
{
{
return false;
return false;
}
}
/* @var XenForo_Model_User $userModel */
/* @var XenForo_Model_User $userModel */
$userModel = XenForo_Model::create('XenForo_Model_User');
$userModel = XenForo_Model::create('XenForo_Model_User');
$user = $userModel->getUserById($userId);
$user = $userModel->getUserById($userId);


$userGroups = explode(',', $user['secondary_group_ids']);
$userGroups = explode(',', $user['secondary_group_ids']);
$userGroups[] = $user['user_group_id'];
$userGroups[] = $user['user_group_id'];


/** @var XenForo_Model_UserGroup $userGroupModel */
/** @var XenForo_Model_UserGroup $userGroupModel */
$userGroupModel = XenForo_Model::create('XenForo_Model_UserGroup');
$userGroupModel = XenForo_Model::create('XenForo_Model_UserGroup');


$roleIds = array();
$discordRoles = array();


foreach($userGroups as $userGroup)
foreach($userGroups as $userGroup)
{
{
$group = $userGroupModel->getUserGroupById($userGroup);
$group = $userGroupModel->getUserGroupById($userGroup);
if ($group)
if ($group)
{
{
if (array_key_exists('nfd_server_group_ids', $group) && strlen($group['nfd_server_group_ids']) > 0)
if (array_key_exists('nfd_server_group_ids', $group) && array_key_exists('display_style_priority', $group))
{
{
if (strpos($group['nfd_server_group_ids'], ',') !== false)
$groupRoles = $group['nfd_server_group_ids'];
{
$groupStyle = $group['display_style_priority'];
$ids = explode(',', $group['nfd_server_group_ids']);
$roleIds = array_merge($roleIds, $ids);
if (strlen($groupRoles) > 0)
}
{
}
if ($groupStyle > 0)
else
{
{
if (!isset($highestStyle) || $groupStyle > $highestStyle)
continue;
{
}
$highestRoles = $groupRoles;
}
$highestStyle = $groupStyle;
else
}
{
}
continue;
else
}
{
}
$discordRoles = array_merge($discordRoles, explode(',', $groupRoles));
$roleIds = array_unique($roleIds, SORT_NUMERIC);
}
}
}
}
}
if (isset($highestRoles))
{
$discordRoles = array_merge($discordRoles, explode(',', $highestRoles));
}

$discordId = $externalUser['provider_key'];
$discordId = $externalUser['provider_key'];


$discordUser = $api->getGuildMember($discordId);
// compare the new list of groups to the existing list and only add client to groups they're not already in
$api->wipeUserRoles($discordId);
return $api->patchGuildMemberRoles($discordId, $discordRoles);
if (array_key_exists('roles', $discordUser))
{
if (sizeof($roleIds) > 0 )
{
foreach($roleIds as $roleId)
{
$api->addGuildMemberRole($discordId, $roleId);
}
}
}
return true;
}
}


return false;
return false;
}
}


public function setUsersServerGroupsByIds(array $ids = array())
public function setUsersServerGroupsByIds(array $ids = array())
{
{
if (count($ids) > 0)
if (count($ids) > 0)
{
{
/** @var XenForo_Model_UserExternal $model */
/** @var XenForo_Model_UserExternal $model */
$model = XenForo_Model::create('XenForo_Model_UserExternal');
$model = XenForo_Model::create('XenForo_Model_UserExternal');


foreach($ids as $id)
foreach($ids as $id)
{
{
$this->setUserServerGroupsById($model, $id);
$this->setUserServerGroupsById($model, $id);
}
}
}
}
}
}


public static function _assertDiscordConfigured()
public static function _assertDiscordConfigured()
{
{
$options = XenForo_Application::getOptions();
$options = XenForo_Application::getOptions();


if (empty($options->nfDiscordGuildId) ||
if (empty($options->nfDiscordGuildId) ||
empty($options->nfDiscordToken) ||
empty($options->nfDiscordToken) ||
empty($options->nfDiscordAppKey) ||
empty($options->nfDiscordAppKey) ||
empty($options->nfDiscordAppSecret))
empty($options->nfDiscordAppSecret))
{
{
throw new XenForo_Exception(new XenForo_Phrase('nf_discord_discord_not_configured'), true);
throw new XenForo_Exception(new XenForo_Phrase('nf_discord_discord_not_configured'), true);
}
}
}
}
}
}