From d6930a14aa534e7b868ea88ac7bad851261e0c8d Mon Sep 17 00:00:00 2001
From: ANDRIANIRINARISOA Paul Antenaina Louis Francki
 <franckiantenaina@gmail.com>
Date: Tue, 25 Feb 2025 16:23:26 +0300
Subject: [PATCH] Up directory Socket

---
 assets/js/directory/directorySocket.js | 98 +++++++++++++++++++++++---
 1 file changed, 87 insertions(+), 11 deletions(-)

diff --git a/assets/js/directory/directorySocket.js b/assets/js/directory/directorySocket.js
index fb9d90c1b..350235a1d 100644
--- a/assets/js/directory/directorySocket.js
+++ b/assets/js/directory/directorySocket.js
@@ -35,6 +35,12 @@ var directorySocket = {
 					filterGroup.results.$grid.masonry('destroy');
 					filterGroup.results.$grid.masonry({itemSelector: '.smartgrid-slide-element', 'columnWidth': '.searchEntityContainer.smartgrid-slide-element'});
 
+					targetDiv = document.querySelector(`.msr-id-${_id}`);
+					let image = targetDiv.querySelectorAll('img.lzy_img');
+					image.forEach((v) => {
+						v.dom = "#content-results-profil";
+						imageObserver.observe(v);
+					});
 					directory.bindEventAdmin();
 					if(filterGroup.results.map.active){
 						filterGroup.mapObj.addElts(datas);
@@ -90,12 +96,41 @@ var directorySocket = {
 					window[`kanbanDom${contextData.id}`].kanban('deleteData', { column: "memberof", id:_id,  index: indexToDelete });
 				}
             }).on("invite_user", function(data){
-				
+				let show = false;
 				if(data.invitedId == userId) {
 					directorySocket.events.invitedMe();
 				}
 
-                if(typeof data.donne != "undefined" && data.donne != null){
+				if(
+					typeof userConnected.roles != "undefined" && typeof userConnected.roles.superAdmin != "undefined" && userConnected.roles.superAdmin
+				){
+					show = true;
+				}else if(contextData.type == "organizations"){
+					if(typeof userConnected.links.memberOf[contextData.id] != "undefined"
+						&& typeof userConnected.links.memberOf[contextData.id].isAdmin != "undefined"
+						&& userConnected.links.memberOf[contextData.id].isAdmin
+						&& (typeof userConnected.links.memberOf[contextData.id].isAdminPending == "undefined" || typeof userConnected.links.memberOf[contextData.id].isInviting == "undefined")
+					){
+						show = true;
+					}
+				}else if(contextData.type == "projects"){
+					if(typeof userConnected.links.projects[contextData.id] != "undefined"
+						&& typeof userConnected.links.projects[contextData.id].isAdmin != "undefined"
+						&& userConnected.links.projects[contextData.id].isAdmin
+						&& (typeof userConnected.links.projects[contextData.id].isAdminPending == "undefined" || typeof userConnected.links.projects[contextData.id].isInviting == "undefined")
+					){
+						show = true;
+					}
+				}else if(contextData.type == "organizations"){
+					if(typeof userConnected.links.memberOf[contextData.id] != "undefined"
+						&& typeof userConnected.links.memberOf[contextData.id].isAdmin != "undefined"
+						&& userConnected.links.memberOf[contextData.id].isAdmin
+						&& (typeof userConnected.links.memberOf[contextData.id].isAdminPending == "undefined" || typeof userConnected.links.memberOf[contextData.id].isInviting == "undefined")
+					){
+						show = true;
+					}
+				}
+                if(typeof data.donne != "undefined" && data.donne != null && show){
 					
 					let donne = data.donne;
 					let datas = {};
@@ -103,14 +138,18 @@ var directorySocket = {
 
 					let community = directorySocket.events.communityVariable(donne, data.invitedId);
 					let str = directory.showResultsDirectoryHtml(datas, "", "", community);
-					directorySocket.events.updateNomberElements(datas, "add");
+					var targetDiv = document.querySelector(`.msr-id-${data.invitedId}`);
+					if (targetDiv) {
+						targetDiv.parentElement.remove();
+					} else {
+						directorySocket.events.updateNomberElements(datas, "add");
+					}
 
 					filterGroup.results.$grid.prepend(str);
 					filterGroup.results.$grid.masonry('destroy');
 					filterGroup.results.$grid.masonry({itemSelector: '.smartgrid-slide-element', 'columnWidth': '.searchEntityContainer.smartgrid-slide-element'});
 
-					var targetDiv = document.querySelector(`.msr-id-${data.invitedId}`);
-
+					targetDiv = document.querySelector(`.msr-id-${data.invitedId}`);
 					var newSpan = document.createElement('span');
 					newSpan.className = 'entityStatusLink italic';
 					newSpan.textContent = 'Invitation envoyée';
@@ -119,6 +158,12 @@ var directorySocket = {
 					var textWrap = slideHover.querySelector('.text-wrap');
 					var adminToolBar = slideHover.querySelector('.adminToolBarDirectory');
 
+					let image = targetDiv.querySelectorAll('img.lzy_img');
+					image.forEach((v) => {
+						v.dom = "#content-results-profil";
+						imageObserver.observe(v);
+					});
+
 					directory.bindEventAdmin();
 					textWrap.insertBefore(newSpan, adminToolBar);
                 }
@@ -484,12 +529,42 @@ var directorySocket = {
 			
 			let community = {
 				connectType : "members",
-				edit : true,
 				links : {
 					"members" : {}
 				}
 			};
 			
+			if(
+				typeof userConnected.roles != "undefined" && typeof userConnected.roles.superAdmin != "undefined" && userConnected.roles.superAdmin
+			){
+				community.edit = true;
+			}else if(contextData.type == "organizations"){
+				if(typeof userConnected.links.memberOf[contextData.id] != "undefined"
+					&& typeof userConnected.links.memberOf[contextData.id].isAdmin != "undefined"
+					&& userConnected.links.memberOf[contextData.id].isAdmin
+					&& (typeof userConnected.links.memberOf[contextData.id].isAdminPending == "undefined" || typeof userConnected.links.memberOf[contextData.id].isInviting == "undefined")
+				){
+					community.edit = true;
+				}
+			}else if(contextData.type == "projects"){
+				if(typeof userConnected.links.projects[contextData.id] != "undefined"
+					&& typeof userConnected.links.projects[contextData.id].isAdmin != "undefined"
+					&& userConnected.links.projects[contextData.id].isAdmin
+					&& (typeof userConnected.links.projects[contextData.id].isAdminPending == "undefined" || typeof userConnected.links.projects[contextData.id].isInviting == "undefined")
+				){
+					community.edit = true;
+				}
+			}else if(contextData.type == "events"){
+				if(typeof userConnected.links.events[contextData.id] != "undefined"
+					&& typeof userConnected.links.events[contextData.id].isAdmin != "undefined"
+					&& userConnected.links.events[contextData.id].isAdmin
+					&& (typeof userConnected.links.events[contextData.id].isAdminPending == "undefined" || typeof userConnected.links.events[contextData.id].isInviting == "undefined")
+				){
+					community.edit = true;
+				}
+			}
+			
+
 			community.links["members"][_id] = {
 				type: data.collection,
 				date : data.modified
@@ -498,11 +573,12 @@ var directorySocket = {
 			return community;
 		},
 		updateNomberElements: function(datas, type) {
-			let aElement = document.querySelector('a[data-type-dir="members"]');
-			let badgeElement = aElement.querySelector('.badge');
-			let newNbbadge = type == "add" ?  Object.keys(datas).length + parseInt(badgeElement.textContent) : parseInt(badgeElement.textContent) - 1;
-			badgeElement.textContent = newNbbadge;
-
+			if(contextData.type == "organizations" || contextData.type == "projects"){
+				let aElement = document.querySelector(`a[data-type-dir="${contextData.type == "organizations" ? "members" : "contributors"}"]`);
+				let badgeElement = aElement.querySelector('.badge');
+				let newNbbadge = type == "add" ?  Object.keys(datas).length + parseInt(badgeElement.textContent) : parseInt(badgeElement.textContent) - 1;
+				badgeElement.textContent = newNbbadge;
+			}
 			let spanElement = document.querySelector('.count-nbr');
 			let nbnewdata =  type == "add" ? Object.keys(datas).length + parseInt(spanElement.textContent) : parseInt(spanElement.textContent) - 1;
 			spanElement.textContent = nbnewdata;
-- 
GitLab