Fix accept/deny invitations to social groups - refs #8095

1.10.x
Angel Fernando Quiroz Campos 9 years ago
parent 9c7fc781c9
commit a8c216dfaa
  1. 142
      main/inc/lib/group_portal_manager.lib.php
  2. 77
      main/social/invitations.php

@ -631,20 +631,20 @@ class GroupPortalManager
* */
public static function get_user_group_role($user_id, $group_id)
{
$table_group_rel_user = Database :: get_main_table(TABLE_MAIN_USER_REL_GROUP);
$return_value = 0;
if (!empty($user_id) && !empty($group_id)) {
$sql = "SELECT relation_type FROM $table_group_rel_user
WHERE
group_id = ".intval($group_id)." AND
user_id = ".intval($user_id)." ";
$result = Database::query($sql);
if (Database::num_rows($result) > 0) {
$row = Database::fetch_array($result, 'ASSOC');
$return_value = $row['relation_type'];
}
$em = Database::getManager();
$result = $em
->getRepository('ChamiloCoreBundle:UsergroupRelUser')
->findOneBy([
'usergroup' => intval($group_id),
'user' => intval($user_id)
]);
if (!$result) {
return 0;
}
return $return_value;
return $result->getRelationType();
}
/**
@ -657,35 +657,49 @@ class GroupPortalManager
public static function add_user_to_group($user_id, $group_id, $relation_type = GROUP_USER_PERMISSION_READER)
{
$result = false;
$table_url_rel_group = Database :: get_main_table(TABLE_MAIN_USER_REL_GROUP);
if (!empty($user_id) && !empty($group_id)) {
$role = self::get_user_group_role($user_id, $group_id);
if ($role == 0) {
$sql = "INSERT INTO $table_url_rel_group
SET
user_id = ".intval($user_id).",
group_id = ".intval($group_id).",
relation_type = ".intval($relation_type);
$result = Database::query($sql);
Event::addEvent(
LOG_GROUP_PORTAL_USER_SUBSCRIBED,
LOG_GROUP_PORTAL_REL_USER_ARRAY,
array(
'user_id' => $user_id,
'group_id' => $group_id,
'relation_type' => $relation_type,
)
);
} elseif ($role == GROUP_USER_PERMISSION_PENDING_INVITATION) {
// If somebody already invited me I can be added
self::update_user_role(
$user_id,
$group_id,
GROUP_USER_PERMISSION_READER
);
}
if (empty($user_id) || empty($group_id)) {
return false;
}
$em = Database::getManager();
$user = $em->find('ChamiloCoreBundle:User', $user_id);
$usergroup = $em->find('ChamiloCoreBundle:Usergroup', $group_id);
$role = self::get_user_group_role($user_id, $group_id);
if ($role == 0) {
$usergroupRelUser = new \Chamilo\CoreBundle\Entity\UsergroupRelUser();
$usergroupRelUser
->setUser($user)
->setUsergroup($usergroup)
->setRelationType($relation_type);
$em->persist($usergroupRelUser);
$em->flush();
Event::addEvent(
LOG_GROUP_PORTAL_USER_SUBSCRIBED,
LOG_GROUP_PORTAL_REL_USER_ARRAY,
array(
'user_id' => $user_id,
'group_id' => $group_id,
'relation_type' => $relation_type,
)
);
return true;
} else if ($role == GROUP_USER_PERMISSION_PENDING_INVITATION) {
// If somebody already invited me I can be added
self::update_user_role(
$user_id,
$group_id,
GROUP_USER_PERMISSION_READER
);
return true;
}
return $result;
}
@ -753,10 +767,21 @@ class GroupPortalManager
* */
public static function delete_user_rel_group($user_id, $group_id)
{
$table = Database :: get_main_table(TABLE_MAIN_USER_REL_GROUP);
$sql = "DELETE FROM $table
WHERE user_id = ".intval($user_id)." AND group_id=".intval($group_id);
$result = Database::query($sql);
$em = Database::getManager();
$result = $em
->getRepository('ChamiloCoreBundle:UsergroupRelUser')
->findOneBy([
'usergroup' => intval($group_id),
'user' => intval($user_id)
]);
if (!$result) {
return false;
}
$em->remove($result);
$em->flush();
Event::addEvent(
LOG_GROUP_PORTAL_USER_UNSUBSCRIBED,
@ -764,7 +789,7 @@ class GroupPortalManager
array('user_id' => $user_id, 'group_id' => $group_id)
);
return $result;
return true;
}
/**
@ -778,20 +803,29 @@ class GroupPortalManager
**/
public static function update_user_role($user_id, $group_id, $relation_type = GROUP_USER_PERMISSION_READER)
{
$table_group_rel_user = Database::get_main_table(TABLE_MAIN_USER_REL_GROUP);
if (empty($user_id) || empty($group_id) || empty($relation_type)) {
return false;
}
$em = Database::getManager();
$group_id = intval($group_id);
$user_id = intval($user_id);
$sql = "UPDATE $table_group_rel_user
SET relation_type = ".intval($relation_type)."
WHERE
user_id = $user_id AND
group_id = $group_id
";
Database::query($sql);
$usergroupUser = $em
->getRepository('ChamiloCoreBundle:UsergroupRelUser')
->findOneBy([
'user' => $user_id,
'usergroup' => $group_id
]);
if (!$usergroupUser) {
return false;
}
$usergroupUser->setRelationType($relation_type);
$em->merge($usergroupUser);
$em->flush();
Event::addEvent(
LOG_GROUP_PORTAL_USER_UPDATE_ROLE,

@ -19,9 +19,67 @@ $this_section = SECTION_SOCIAL;
$interbreadcrumb[] = array ('url' =>'profile.php','name' => get_lang('SocialNetwork'));
$interbreadcrumb[] = array ('url' =>'#','name' => get_lang('Invitations'));
if (is_array($_GET) && count($_GET) > 0) {
foreach ($_GET as $key => $value) {
switch ($key) {
case 'accept':
$useRole = GroupPortalManager::get_user_group_role(api_get_user_id(), $value);
if (in_array(
$useRole,
array(
GROUP_USER_PERMISSION_PENDING_INVITATION_SENT_BY_USER,
GROUP_USER_PERMISSION_PENDING_INVITATION
)
)) {
GroupPortalManager::update_user_role(api_get_user_id(), $value, GROUP_USER_PERMISSION_READER);
Display::addFlash(
Display::return_message(get_lang('UserIsSubscribedToThisGroup'), 'success')
);
header('Location: ' . api_get_path(WEB_CODE_PATH) . 'social/invitations.php');
exit;
}
if (in_array(
$useRole,
array(
GROUP_USER_PERMISSION_READER,
GROUP_USER_PERMISSION_ADMIN,
GROUP_USER_PERMISSION_MODERATOR
)
)) {
Display::addFlash(
Display::return_message(get_lang('UserIsAlreadySubscribedToThisGroup'), 'warning')
);
header('Location: ' . api_get_path(WEB_CODE_PATH) . 'social/invitations.php');
exit;
}
Display::addFlash(
Display::return_message(get_lang('UserIsNotSubscribedToThisGroup'), 'warning')
);
header('Location: ' . api_get_path(WEB_CODE_PATH) . 'social/invitations.php');
exit;
break;
case 'deny':
GroupPortalManager::delete_user_rel_group(api_get_user_id(), $value);
Display::addFlash(
Display::return_message(get_lang('GroupInvitationWasDeny'))
);
header('Location: ' . api_get_path(WEB_CODE_PATH) . 'social/invitations.php');
exit;
}
}
}
$userGroup = new UserGroup();
$show_message = null;
$content = null;
// Block Menu Social
@ -148,8 +206,20 @@ if (count($pending_invitations) > 0) {
$waitingInvitation .= '<h4 class="tittle-profile">'.$invitation['name'].'</h4>';
$waitingInvitation .= '<div class="description-group">'.$invitation['description'].'</div>';
$waitingInvitation .= '<div class="btn-group" role="group">';
$waitingInvitation .= '<a class="btn btn-success" href="invitations.php?accept='.$invitation['id'].'"><em class="fa fa-check"></em> '.get_lang('AcceptInvitation').'</a>';
$waitingInvitation .= '<a class="btn btn-danger" href="invitations.php?deny='.$invitation['id'].'"><em class="fa fa-times"></em> '.get_lang('DenyInvitation').'</a>';
$waitingInvitation .= Display::toolbarButton(
get_lang('AcceptInvitation'),
api_get_path(WEB_CODE_PATH) . 'social/invitations.php?' . http_build_query(['accept' => $invitation['id']]),
'check',
'success',
['id' => 'accept-invitation-' . $invitation['id']]
);
$waitingInvitation .= Display::toolbarButton(
get_lang('DenyInvitation'),
api_get_path(WEB_CODE_PATH) . 'social/invitations.php?' . http_build_query(['deny' => $invitation['id']]),
'times',
'danger',
['id' => 'deny-invitation-' . $invitation['id']]
);
$waitingInvitation .='</div>';
$waitingInvitation .= '</div></div>';
}
@ -160,7 +230,6 @@ $tpl = new Template(null);
SocialManager::setSocialUserBlock($tpl, $user_id, 'invitations');
$tpl->assign('social_menu_block', $social_menu_block);
$tpl->assign('social_invitations_block',$socialInvitationsBlock);
$tpl->assign('message', $show_message);
$tpl->assign('content', $content);
$social_layout = $tpl->get_template('social/invitations.tpl');
$tpl->display($social_layout);

Loading…
Cancel
Save