mirror of
				https://github.com/pierre42100/ComunicWeb
				synced 2025-11-04 04:04:20 +00:00 
			
		
		
		
	Display friends and groups
This commit is contained in:
		
							
								
								
									
										11
									
								
								assets/css/components/sidebar.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								assets/css/components/sidebar.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Sidebar stylesheet
 | 
			
		||||
 *
 | 
			
		||||
 * @author Pierre HUBERT
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
.sidebar-menu.memberships-list img {
 | 
			
		||||
	width: 20px;
 | 
			
		||||
	margin-right: 10px;
 | 
			
		||||
	margin-left: -4px;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										3
									
								
								assets/custom_ts/Utils.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								assets/custom_ts/Utils.d.ts
									
									
									
									
										vendored
									
									
								
							@@ -14,6 +14,7 @@ declare interface CreateElem2Args {
 | 
			
		||||
	title ?: string,
 | 
			
		||||
	src ?: string,
 | 
			
		||||
	href ?: string,
 | 
			
		||||
	internalHref ?: string,
 | 
			
		||||
	name ?: string,
 | 
			
		||||
	elemType ?: string,
 | 
			
		||||
	value ?: string,
 | 
			
		||||
@@ -22,6 +23,8 @@ declare interface CreateElem2Args {
 | 
			
		||||
	innerLang ?: string,
 | 
			
		||||
	innerHTMLprefix ?: string,
 | 
			
		||||
	disabled ?: boolean,
 | 
			
		||||
	children ?: HTMLElement[],
 | 
			
		||||
	onclick ?: Function
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
declare function createElem(nodeType : string, appendTo : string) : HTMLElement;
 | 
			
		||||
 
 | 
			
		||||
@@ -1217,6 +1217,20 @@ var ComunicWeb = {
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		/**
 | 
			
		||||
		 * Web application interface
 | 
			
		||||
		 */
 | 
			
		||||
		webApp: {
 | 
			
		||||
 | 
			
		||||
			/**
 | 
			
		||||
			 * Web app interface
 | 
			
		||||
			 */
 | 
			
		||||
			interface: {
 | 
			
		||||
				//TODO : implement
 | 
			
		||||
			},
 | 
			
		||||
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		/**
 | 
			
		||||
		 * Easter egg : pacman
 | 
			
		||||
		 */
 | 
			
		||||
 
 | 
			
		||||
@@ -236,7 +236,7 @@ ComunicWeb.common.page = {
 | 
			
		||||
                var pageTarget = createElem("div", mainContainerElem);
 | 
			
		||||
                pageTarget.id = "pageTarget";
 | 
			
		||||
            }
 | 
			
		||||
            else{
 | 
			
		||||
            else {
 | 
			
		||||
                //We can empty page target (much faster)
 | 
			
		||||
                pageTarget.innerHTML = "";
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -44,6 +44,7 @@ function createElem(nodeType, appendTo){
 | 
			
		||||
 * @info {String} innerHTMLprefix Specify prefix to add at the begining of the content of the element
 | 
			
		||||
 * @info {boolean} disabled Set whether the field should be disabled or not (input only)
 | 
			
		||||
 * @info {HTMLElement[]} children Children for the new object
 | 
			
		||||
 * @info {Function} onclick
 | 
			
		||||
 * @return {HTMLElement} The newly created element
 | 
			
		||||
 */
 | 
			
		||||
function createElem2(infos){
 | 
			
		||||
@@ -129,6 +130,9 @@ function createElem2(infos){
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(infos.onclick)
 | 
			
		||||
		newElem.addEventListener("click", infos.onclick);
 | 
			
		||||
 | 
			
		||||
	//Return newly created element
 | 
			
		||||
	return newElem;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,8 @@ ComunicWeb.components.sideBar.main = {
 | 
			
		||||
		var sideBar = createElem2({
 | 
			
		||||
			appendTo: byId("wrapper"),
 | 
			
		||||
			type: "aside",
 | 
			
		||||
			class: "main-sidebar"
 | 
			
		||||
			class: "main-sidebar",
 | 
			
		||||
			id: "main-sidebar",
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		var section = createElem2({
 | 
			
		||||
@@ -36,7 +37,7 @@ ComunicWeb.components.sideBar.main = {
 | 
			
		||||
				appendTo: userPanel,
 | 
			
		||||
				type: "div",
 | 
			
		||||
				class: "pull-left image cursor-pointer",
 | 
			
		||||
				internalHref: userIDorPath(info),
 | 
			
		||||
				onclick: () => openUserPage(info),
 | 
			
		||||
				children: [
 | 
			
		||||
					createElem2({
 | 
			
		||||
						type: "img",
 | 
			
		||||
@@ -56,7 +57,7 @@ ComunicWeb.components.sideBar.main = {
 | 
			
		||||
						type: "p",
 | 
			
		||||
						class: "cursor-pointer",
 | 
			
		||||
						innerHTML: userFullName(info),
 | 
			
		||||
						internalHref: userIDorPath(info),
 | 
			
		||||
						onclick: () => userIDorPath(info),
 | 
			
		||||
					}),
 | 
			
		||||
 | 
			
		||||
					createElem2({
 | 
			
		||||
@@ -102,5 +103,126 @@ ComunicWeb.components.sideBar.main = {
 | 
			
		||||
 | 
			
		||||
			openPage("search?q=" + searchForm.getElementsByTagName("input")[0].value);
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		// User memberships
 | 
			
		||||
		let userMemberships = createElem2({
 | 
			
		||||
			appendTo: section,
 | 
			
		||||
			type: "ul",
 | 
			
		||||
			class: "sidebar-menu memberships-list" 
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		this.refreshMemberships(userMemberships);
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Refresh user memberships
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param {HTMLElement} target 
 | 
			
		||||
	 */
 | 
			
		||||
	refreshMemberships: function(target){
 | 
			
		||||
		ComunicWeb.components.webApp.interface.getMemberships(
 | 
			
		||||
			() => notify("Could not refresh your memberships!", "error"), 
 | 
			
		||||
			(m, u, g) => this.applyMemberships(target, m, u, g)
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Apply memberships
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param {HTMLElement} target
 | 
			
		||||
	 * @param {*} memberships 
 | 
			
		||||
	 * @param {*} users 
 | 
			
		||||
	 * @param {*} groups 
 | 
			
		||||
	 */
 | 
			
		||||
	applyMemberships: function(target, memberships, users, groups) {
 | 
			
		||||
 | 
			
		||||
		// Empty liste
 | 
			
		||||
		target.innerHTML = "";
 | 
			
		||||
 | 
			
		||||
		memberships.forEach(e => {
 | 
			
		||||
 | 
			
		||||
			if(e.type == "friend")
 | 
			
		||||
				this.applyFriend(target, e.friend, users["user-"+e.friend.ID_friend]);
 | 
			
		||||
			
 | 
			
		||||
			if(e.type == "group")
 | 
			
		||||
				this.applyGroup(target, groups[e.id], e.last_activity);
 | 
			
		||||
		});
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Apply a friend object
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param {HTMLElement} target 
 | 
			
		||||
	 * @param {*} friend 
 | 
			
		||||
	 * @param {*} user 
 | 
			
		||||
	 */
 | 
			
		||||
	applyFriend: function(target, friend, user) {
 | 
			
		||||
 | 
			
		||||
		let li = createElem2({
 | 
			
		||||
			appendTo: target,
 | 
			
		||||
			type: "li"
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		let a = createElem2({
 | 
			
		||||
			appendTo: li,
 | 
			
		||||
			onclick: () => openUserPage(user),
 | 
			
		||||
			type: "a"
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		// User icon
 | 
			
		||||
		createElem2({
 | 
			
		||||
			appendTo: a,
 | 
			
		||||
			type: "img",
 | 
			
		||||
			class: "img-circle",
 | 
			
		||||
			src: user.accountImage
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		// User name
 | 
			
		||||
		createElem2({
 | 
			
		||||
			appendTo: a,
 | 
			
		||||
			type: "span",
 | 
			
		||||
			innerHTML: userFullName(user)
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Apply group information
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param {HTMLElement} target 
 | 
			
		||||
	 * @param {*} group 
 | 
			
		||||
	 * @param {*} lastactive 
 | 
			
		||||
	 */
 | 
			
		||||
	applyGroup: function(target, group, lastactive) {
 | 
			
		||||
		
 | 
			
		||||
		let li = createElem2({
 | 
			
		||||
			appendTo: target,
 | 
			
		||||
			type: "li"
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		let a = createElem2({
 | 
			
		||||
			appendTo: li,
 | 
			
		||||
			type: "a",
 | 
			
		||||
			onclick: () => openGroupPage(group)
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		// Group icon
 | 
			
		||||
		createElem2({
 | 
			
		||||
			appendTo: a,
 | 
			
		||||
			type: "img",
 | 
			
		||||
			src: group.icon_url
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		// Group name
 | 
			
		||||
		createElem2({
 | 
			
		||||
			appendTo: a,
 | 
			
		||||
			type: "span",
 | 
			
		||||
			innerHTML: group.name
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
	},
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										56
									
								
								assets/js/components/webApp/interface.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								assets/js/components/webApp/interface.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Web application interface
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Pierre HUBERT
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
ComunicWeb.components.webApp.interface = {
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Get all the membership of the user
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param {Function} err Function called in case of errors
 | 
			
		||||
	 * @param {Function(memberships, usersInfo, groupsInfo) : void} success Function called in case of success
 | 
			
		||||
	 */
 | 
			
		||||
	getMemberships: function(err, success) {
 | 
			
		||||
 | 
			
		||||
		// Peform the request on the server
 | 
			
		||||
		ComunicWeb.common.api.makeAPIrequest(
 | 
			
		||||
			"webApp/getMemberships", 
 | 
			
		||||
			{}, 
 | 
			
		||||
			true,
 | 
			
		||||
			memberships => {
 | 
			
		||||
				
 | 
			
		||||
				// Check for error
 | 
			
		||||
				if(memberships.error)
 | 
			
		||||
					return err(memberships.error);
 | 
			
		||||
				
 | 
			
		||||
				// Get users & groups ID in case of success
 | 
			
		||||
				let usersID = [];
 | 
			
		||||
				let groupsID = [];
 | 
			
		||||
 | 
			
		||||
				memberships.forEach(el => {
 | 
			
		||||
					if(el.type == "friend")
 | 
			
		||||
						usersID.push(el.friend.ID_friend);
 | 
			
		||||
					else
 | 
			
		||||
						groupsID.push(el.id);
 | 
			
		||||
				});
 | 
			
		||||
 | 
			
		||||
				getMultipleUsersInfo(usersID, users => {
 | 
			
		||||
					if(users.error)
 | 
			
		||||
						return err(memberships.error);
 | 
			
		||||
					
 | 
			
		||||
					getInfoMultipleGroups(groupsID, groupsInfo => {
 | 
			
		||||
						if(groupsInfo.error)
 | 
			
		||||
							return err(groupsInfo.error);
 | 
			
		||||
						
 | 
			
		||||
						success(memberships, users, groupsInfo);
 | 
			
		||||
					});
 | 
			
		||||
				});
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user