diff --git a/assets/css/pages/groups/sections/membershipBlock.css b/assets/css/pages/groups/sections/membershipBlock.css new file mode 100644 index 00000000..02d7c5c9 --- /dev/null +++ b/assets/css/pages/groups/sections/membershipBlock.css @@ -0,0 +1,9 @@ +/** + * Membership block stylesheet + * + * @author Pierre HUBERT + */ + +.reject-group-invitation-link { + color: #f56954; +} \ No newline at end of file diff --git a/assets/js/components/groups/interface.js b/assets/js/components/groups/interface.js index ba50ae7d..64a3db58 100644 --- a/assets/js/components/groups/interface.js +++ b/assets/js/components/groups/interface.js @@ -112,4 +112,22 @@ ComunicWeb.components.groups.interface = { ComunicWeb.common.api.makeAPIrequest(apiURI, params, true, callback); }, + /** + * Respond to a group invitation + * + * @param {Number} id The ID of the target group + * @param {Boolean} accept Specify whether the invitation was + * accepted or not + * @param {Function} callback + */ + respondInvitation: function(id, accept, callback) { + //Perform the request over the API + var apiURI = "groups/respond_invitation"; + var params = { + id: id, + accept: accept + }; + ComunicWeb.common.api.makeAPIrequest(apiURI, params, true, callback); + }, + }; \ No newline at end of file diff --git a/assets/js/pages/groups/pages/forbidden.js b/assets/js/pages/groups/pages/forbidden.js index 72fb7e10..cddd691b 100644 --- a/assets/js/pages/groups/pages/forbidden.js +++ b/assets/js/pages/groups/pages/forbidden.js @@ -96,6 +96,6 @@ ComunicWeb.pages.groups.pages.forbidden = { //Append membership block (if the user is signed in) if(signed_in()) - ComunicWeb.pages.groups.sections.membershipBlock.display(result); + ComunicWeb.pages.groups.sections.membershipBlock.display(result, boxBody); }, } \ No newline at end of file diff --git a/assets/js/pages/groups/sections/membershipBlock.js b/assets/js/pages/groups/sections/membershipBlock.js index 50f47e74..ec9c1ab8 100644 --- a/assets/js/pages/groups/sections/membershipBlock.js +++ b/assets/js/pages/groups/sections/membershipBlock.js @@ -6,42 +6,118 @@ ComunicWeb.pages.groups.sections.membershipBlock = { - /** - * Display membership block - * - * @param {Object} info Information about the membership - * @param {HTMLElement} target The target where the block will be applied - */ - display: function(info, target){ - - //Membership container - var container = createElem2({ - appendTo: target, - type: "div" - }); + /** + * Display membership block + * + * @param {Object} info Information about the membership (= basic info about the group) + * @param {HTMLElement} target The target where the block will be applied + */ + display: function(info, target){ + + //Membership container + var container = createElem2({ + appendTo: target, + type: "div" + }); - //Check if the user is an administrator / moderator / member - if(info.membership == "administrator") - return createElem2({ - appendTo: container, - type: "span", - innerHTML: " Administrator" - }); - - if(info.membership == "moderator") - return createElem2({ - appendTo: container, - type: "span", - innerHTML: " Moderator" - }); - - if(info.membership == "member") - return createElem2({ - appendTo: container, - type: "span", - innerHTML: " Member" - }); + //Check if the user is an administrator / moderator / member + if(info.membership == "administrator") + return createElem2({ + appendTo: container, + type: "span", + innerHTML: " Administrator" + }); + + if(info.membership == "moderator") + return createElem2({ + appendTo: container, + type: "span", + innerHTML: " Moderator" + }); + + if(info.membership == "member") + return createElem2({ + appendTo: container, + type: "span", + innerHTML: " Member" + }); + + //Check if the user has been invited + if(info.membership == "invited"){ + var invitedContainer = createElem2({ + appendTo: container, + type: "span", + innerHTML: " Invited " + }); - } + //Offer the user to accept the invitation + var acceptInvitation = createElem2({ + appendTo: invitedContainer, + type: "span", + class: "a", + innerHTML: "Accept" + }); + + add_space(invitedContainer); + + //Offer the user to reject + var rejectInvitation = createElem2({ + appendTo: invitedContainer, + type: "span", + class: "a reject-group-invitation-link", + innerHTML: "Reject" + }); + + /** + * Respond to a group invitation + * + * @param {Boolean} accept Set whether the invation was accepted or not + */ + var respondInvitation = function(accept){ + + //Perform the request over the server + ComunicWeb.components.groups.interface.respondInvitation(info.id, accept, function(result){ + + //Check for errors + if(result.error) + notify("An error occurred while trying to respond to the invitation!", "danger"); + + //Refresh the component + emptyElem(container); + ComunicWeb.components.groups.interface.getInfo(info.id, function(result){ + + //Check for errors + if(result.error) + return notify("Could not refresh membership information!", "danger"); + + //Display the component again + ComunicWeb.pages.groups.sections.membershipBlock.display(result, container); + + }); + + }); + + } + + //Accept invitation + acceptInvitation.addEventListener("click", function(e){ + //Accept the invitation + respondInvitation(true); + }); + + //Reject invitation + rejectInvitation.addEventListener("click", function(e){ + + ComunicWeb.common.messages.confirm("Do you really want to reject this invitation ?", function(r){ + if(!r) return; + + //Reject the invitation + respondInvitation(false); + }) + + }); + } + + } }; \ No newline at end of file diff --git a/system/config/dev.config.php b/system/config/dev.config.php index 54f97452..28b44c41 100644 --- a/system/config/dev.config.php +++ b/system/config/dev.config.php @@ -226,6 +226,7 @@ class Dev { //Groups sections "css/pages/groups/sections/header.css", + "css/pages/groups/sections/membershipBlock.css", //Settings page