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