diff --git a/assets/css/components/friends/friendsBar.css b/assets/css/components/friends/friendsBar.css
index b3ed09b4..1732075d 100644
--- a/assets/css/components/friends/friendsBar.css
+++ b/assets/css/components/friends/friendsBar.css
@@ -98,6 +98,6 @@
}
#friendsList .statusRow {
- width: 48px;
+ width: 58px;
text-align: center;
}
\ No newline at end of file
diff --git a/assets/js/common/api.js b/assets/js/common/api.js
index 3b70c838..413029c4 100644
--- a/assets/js/common/api.js
+++ b/assets/js/common/api.js
@@ -61,7 +61,8 @@ ComunicWeb.common.api.makeAPIrequest = function(apiURI, params, requireLoginToke
}
//We can do the next step
- nextAction(result);
+ if(nextAction)
+ nextAction(result);
}
}
diff --git a/assets/js/components/friends/friendsBar.js b/assets/js/components/friends/friendsBar.js
index ff265df4..c949fa43 100644
--- a/assets/js/components/friends/friendsBar.js
+++ b/assets/js/components/friends/friendsBar.js
@@ -110,42 +110,8 @@ ComunicWeb.components.friends.bar = {
//Show each friend
for(i in friendsList){
-
- //Extract friend ID
- var friendID = friendsList[i].ID_friend;
-
- //Create a row
- var friendRow = createElem("tr", listFriendsElem);
-
- //Add user avatar
- var imageRow = createElem("td", friendRow);
- var imageElem = createElem("img", imageRow);
- imageElem.src = usersInfos["user-"+friendID].accountImage;
- imageElem.className = "account-image";
-
- //Add user name
- var nameRow = createElem("td", friendRow);
- nameRow.innerHTML = usersInfos["user-"+friendID].firstName + " " + usersInfos["user-"+friendID].lastName;
-
- //Add user login status
- var statusRow = createElem("td", friendRow);
- statusRow.className = "statusRow";
-
- //Check if user is online or not
- var currentTime = ComunicWeb.common.date.time();
- var timeDifference = currentTime - friendsList[i].time_last_activity;
-
- if(timeDifference < 30){
- //User is logged in
- var iconsStats = createElem("i", statusRow);
- iconsStats.className = "fa fa-fw fa-circle";
- iconsStats.style.color = "green";
- }
- else {
- //User isn't logged in
- var logoutTime = createElem("small", statusRow);
- logoutTime.innerHTML = ComunicWeb.common.date.diffToStr(timeDifference);
- }
+ //Show informations about the friend
+ ComunicWeb.components.friends.bar.showFriendInfos(usersInfos["user-"+friendsList[i].ID_friend], friendsList[i], listFriendsElem);
}
//Enable slimscroll
@@ -157,6 +123,80 @@ ComunicWeb.components.friends.bar = {
});
},
+ /**
+ * Show a friend informations
+ *
+ * @param {Object} userInfos Informations about the user
+ * @param {Object} friendshipInfos Informations about the friendship
+ * @param {HTMLElement} listFriendsElem The target for the friends list
+ * @return {Boolean} True for a success
+ */
+ showFriendInfos: function(userInfos, friendshipInfos, listFriendsElem){
+ //Extract friend ID
+ var friendID = friendshipInfos.ID_friend;
+
+ //Create a row
+ var friendRow = createElem("tr", listFriendsElem);
+
+ //Add user avatar
+ var imageRow = createElem("td", friendRow);
+ var imageElem = createElem("img", imageRow);
+ imageElem.src = userInfos.accountImage;
+ imageElem.className = "account-image";
+
+ //Add user name
+ var nameRow = createElem("td", friendRow);
+ nameRow.innerHTML = userInfos.firstName + " " + userInfos.lastName;
+
+ //Add user login status
+ var statusRow = createElem("td", friendRow);
+ statusRow.className = "statusRow";
+
+ //Check if the user was accepted or not
+ if(friendshipInfos.accepted == "1"){
+
+ //Check if user is online or not
+ var currentTime = ComunicWeb.common.date.time();
+ var timeDifference = currentTime - friendshipInfos.time_last_activity;
+
+ if(timeDifference < 30){
+ //User is logged in
+ var iconsStats = createElem("i", statusRow);
+ iconsStats.className = "fa fa-fw fa-circle";
+ iconsStats.style.color = "green";
+ }
+ else {
+ //User isn't logged in
+ var logoutTime = createElem("small", statusRow);
+ logoutTime.innerHTML = ComunicWeb.common.date.diffToStr(timeDifference);
+ }
+ }
+ else {
+ //We offer user to accept invitation
+ var acceptButton = createElem("button", statusRow);
+ acceptButton.className = "btn btn-xs btn-success";
+ acceptButton.innerHTML = "";
+ acceptButton.onclick = function(){
+ ComunicWeb.components.friends.bar.processFriendShipRequest(friendID, true, statusRow)
+ };
+
+ //Insert space
+ var space = createElem("span", statusRow);
+ space.innerHTML = " ";
+
+ //But he can also refuse it
+ var refuseButton = createElem("button", statusRow);
+ refuseButton.className = "btn btn-xs btn-danger";
+ refuseButton.innerHTML = "";
+ refuseButton.onclick = function(){
+ ComunicWeb.components.friends.bar.processFriendShipRequest(friendID, false, statusRow)
+ };
+ }
+
+ //Sucess
+ return true;
+ },
+
/**
* Toogle show / hide friends bar
*
@@ -180,6 +220,31 @@ ComunicWeb.components.friends.bar = {
//Success
return true;
- }
+ },
+
+ /**
+ * Accept / Deny a friendship request
+ *
+ * @param {Integer} friendID The ID of the friend to accept / rejet
+ * @param {Boolean} accepted True if friendship is accepted, false else
+ * @param {HTMLElement} statusRow The parent node of friendship area
+ * @return {Boolean} True for a success
+ */
+ processFriendShipRequest: function(friendID, accepted, statusRow){
+
+ //Log action
+ ComunicWeb.debug.logMessage("Process friendship request "+friendID);
+
+ //Change statusRow style
+ if(accepted)
+ statusRow.innerHTML = "Accepted";
+ else
+ statusRow.innerHTML = "Refused";
+
+ //Perform an API request
+ ComunicWeb.components.friends.list.respondRequest(friendID, accepted);
+
+ },
+
}
\ No newline at end of file
diff --git a/assets/js/components/friends/friendsList.js b/assets/js/components/friends/friendsList.js
index b16e901d..fc6b02e6 100644
--- a/assets/js/components/friends/friendsList.js
+++ b/assets/js/components/friends/friendsList.js
@@ -61,5 +61,32 @@ ComunicWeb.components.friends.list = {
get: function(){
//Return the list
return this.__list;
- }
+ },
+
+ /**
+ * Respond a friendship request
+ *
+ * @param {Integer} friendID The friend ID to respond
+ * @param {Boolean} accept Specify if the request was accepted or not
+ * @param {Function} afterResponse Specify an action to do next
+ * @return {Boolean} True for a success
+ */
+ respondRequest: function(friendID, accept, afterResponse){
+ //Prepare the API request
+ var apiURI = "friends/respondRequest"
+ var params = {
+ "friendID": friendID,
+ };
+
+ if(accept)
+ params.accept = "true";
+ else
+ params.accept = "false";
+
+ //Process request
+ ComunicWeb.common.api.makeAPIrequest(apiURI, params, true, afterResponse);
+
+ //Success
+ return true;
+ },
};
\ No newline at end of file