mirror of
				https://github.com/pierre42100/ComunicWeb
				synced 2025-11-04 12:14:12 +00:00 
			
		
		
		
	Working on implemention of conversation component
This commit is contained in:
		@@ -565,6 +565,13 @@ var ComunicWeb = {
 | 
			
		||||
			 */
 | 
			
		||||
			service:{
 | 
			
		||||
				//TODO : implement
 | 
			
		||||
			},
 | 
			
		||||
 | 
			
		||||
			/**
 | 
			
		||||
			 * Conversations utilities
 | 
			
		||||
			 */
 | 
			
		||||
			utils:{
 | 
			
		||||
				//TODO : implement
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -39,4 +39,28 @@ ComunicWeb.components.conversations.chatWindows = {
 | 
			
		||||
		return infosBox;
 | 
			
		||||
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Change the name of the converation at the top of the windows
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param {String} newName The new name for the conversation window
 | 
			
		||||
	 * @param {Ojbect} infos INformations about the conversation window
 | 
			
		||||
	 * @return {Boolean} True for a success
 | 
			
		||||
	 */
 | 
			
		||||
	changeName: function(newName, infos){
 | 
			
		||||
 | 
			
		||||
		//Empty name field
 | 
			
		||||
		emptyElem(infos.boxTitle);
 | 
			
		||||
		
 | 
			
		||||
		//Create conversation icon 
 | 
			
		||||
		var conversationIcon = createElem("i", infos.boxTitle);
 | 
			
		||||
		conversationIcon.className = "fa fa-comments";
 | 
			
		||||
 | 
			
		||||
		//Add conversation title
 | 
			
		||||
		var conversationTitle = createElem("span", infos.boxTitle);
 | 
			
		||||
		conversationTitle.innerHTML = " " + newName;
 | 
			
		||||
 | 
			
		||||
		//Success
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -9,7 +9,7 @@ ComunicWeb.components.conversations.interface = {
 | 
			
		||||
	/**
 | 
			
		||||
	 * @var {Object} __conversationsList Cached list of conversations
 | 
			
		||||
	 */
 | 
			
		||||
	__conversationsList: false,
 | 
			
		||||
	__conversationsList: {},
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Get and return the list of available conversations
 | 
			
		||||
@@ -98,4 +98,48 @@ ComunicWeb.components.conversations.interface = {
 | 
			
		||||
		//Success
 | 
			
		||||
		return true;
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Get informations about a unique conversation
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param {Integer} conversationID The ID of the conversation
 | 
			
		||||
	 * @param {function} nextStep What to do once the operation is completed
 | 
			
		||||
	 * @param {Boolean} forceRefresh Force informations about the conversation to be fetched (ignore cached informations)
 | 
			
		||||
	 * @return {Boolan} True for a success
 | 
			
		||||
	 */
 | 
			
		||||
	getInfosOne: function(conversationID, nextStep, forceRefresh){
 | 
			
		||||
 | 
			
		||||
		//First, if the conversation is available in the cache
 | 
			
		||||
		if(!forceRefresh && this.__conversationsList['conversation-'+conversationID]){
 | 
			
		||||
 | 
			
		||||
			//Perform next action now without getting fresh informations on the server
 | 
			
		||||
			nextStep(this.__conversationsList['conversation-'+conversationID]);
 | 
			
		||||
 | 
			
		||||
			//Success
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//Else, perform an API request
 | 
			
		||||
		//TODO : implement ON NEXT DEVELOPMENT SESSION
 | 
			
		||||
		console.log("Please implement me !!!!!!");
 | 
			
		||||
 | 
			
		||||
		//Success
 | 
			
		||||
		return true;
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Empty conversations cache
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @return {Boolean} True for a success
 | 
			
		||||
	 */
 | 
			
		||||
	emptyCache: function(){
 | 
			
		||||
		//Empty cache
 | 
			
		||||
		clearObject(this.__conversationsList);
 | 
			
		||||
 | 
			
		||||
		//Success
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//Register conversations cache cleaning function
 | 
			
		||||
ComunicWeb.common.cacheManager.registerCacheCleaner("ComunicWeb.components.conversations.interface.emptyCache");
 | 
			
		||||
@@ -181,8 +181,8 @@ ComunicWeb.components.conversations.list = {
 | 
			
		||||
			//Remove the conversation box
 | 
			
		||||
			infos.listBox.rootElem.remove();
 | 
			
		||||
 | 
			
		||||
			//Open the conversation (under construction)
 | 
			
		||||
			ComunicWeb.components.conversations.manager.openConversation({
 | 
			
		||||
			//Add & open the conversation
 | 
			
		||||
			ComunicWeb.components.conversations.manager.addConversation({
 | 
			
		||||
				conversationID: response.conversationID
 | 
			
		||||
			});
 | 
			
		||||
		})
 | 
			
		||||
@@ -257,8 +257,8 @@ ComunicWeb.components.conversations.list = {
 | 
			
		||||
			//Remove conversations list
 | 
			
		||||
			listBox.rootElem.remove();
 | 
			
		||||
 | 
			
		||||
			//Open conversation
 | 
			
		||||
			ComunicWeb.components.conversations.manager.openConversation({
 | 
			
		||||
			//Add & open conversation
 | 
			
		||||
			ComunicWeb.components.conversations.manager.addConversation({
 | 
			
		||||
				conversationID: conversationInfos.ID
 | 
			
		||||
			});
 | 
			
		||||
		}
 | 
			
		||||
@@ -278,44 +278,14 @@ ComunicWeb.components.conversations.list = {
 | 
			
		||||
		//Create the conversation name element
 | 
			
		||||
		var conversationNameElem = createElem("strong", linkElem);
 | 
			
		||||
		
 | 
			
		||||
		//Check if the conversation has a name or not
 | 
			
		||||
		if(conversationInfos.name)
 | 
			
		||||
			conversationNameElem.innerHTML = conversationInfos.name;
 | 
			
		||||
		else {
 | 
			
		||||
 | 
			
		||||
		//Put conversation name field in a waiting state
 | 
			
		||||
		conversationNameElem.style.fontSize = "90%";
 | 
			
		||||
		conversationNameElem.innerHTML = "Loading...";
 | 
			
		||||
 | 
			
		||||
			//Get informations about the first two members
 | 
			
		||||
			var firstMembers = [];
 | 
			
		||||
 | 
			
		||||
			//Retrieve IDs
 | 
			
		||||
			for(o in conversationInfos.members){
 | 
			
		||||
				//Limit number to 2
 | 
			
		||||
				if(firstMembers.length < 2){ 
 | 
			
		||||
 | 
			
		||||
					//Check this is a valid entry
 | 
			
		||||
					if(conversationInfos.members[o]){
 | 
			
		||||
 | 
			
		||||
						//Exclude current user ID
 | 
			
		||||
						if(conversationInfos.members[o] != userID()) 
 | 
			
		||||
							firstMembers.push(conversationInfos.members[o]);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			//Get users informations
 | 
			
		||||
			ComunicWeb.user.userInfos.getNames(firstMembers, function(usersName){
 | 
			
		||||
 | 
			
		||||
				//For conversations with many members (more than 3 - we musn't forget current user)
 | 
			
		||||
				if(conversationInfos.members.length > 3)
 | 
			
		||||
					usersName += ", ...";
 | 
			
		||||
 | 
			
		||||
				//Apply conversation name
 | 
			
		||||
				conversationNameElem.innerHTML = usersName;
 | 
			
		||||
		//Get conversation name and apply it
 | 
			
		||||
		ComunicWeb.components.conversations.utils.getName(conversationInfos, function(conversationName){
 | 
			
		||||
			conversationNameElem.innerHTML = conversationName;
 | 
			
		||||
		});
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//Add members number
 | 
			
		||||
		//Create paragraph
 | 
			
		||||
 
 | 
			
		||||
@@ -64,6 +64,15 @@ ComunicWeb.components.conversations.manager = {
 | 
			
		||||
		//First, add the "open a conversation" new
 | 
			
		||||
		this.addOpenConversationButton(conversationsContainerElem);
 | 
			
		||||
 | 
			
		||||
		//Then, open any already active conversation
 | 
			
		||||
		var openedConversations = ComunicWeb.components.conversations.cachingOpened.getAll();
 | 
			
		||||
		console.log(openedConversations);
 | 
			
		||||
		//Process opened conversations
 | 
			
		||||
		for(i in openedConversations){
 | 
			
		||||
			if(i < openedConversations.length)
 | 
			
		||||
				this.openConversation(openedConversations[i]);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
@@ -87,14 +96,13 @@ ComunicWeb.components.conversations.manager = {
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Open a conversation accordingly to specified informations
 | 
			
		||||
	 * Add a new conversation to the list of opened conversation accordingly to specified informations
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param {Object} infos Informations about the conversation to open
 | 
			
		||||
	 * @info {Integer} conversationID The ID of the conversation to open
 | 
			
		||||
	 * @return {Boolean} True or false depending of the success of the operation
 | 
			
		||||
	 */
 | 
			
		||||
	openConversation: function(infos){
 | 
			
		||||
		
 | 
			
		||||
	addConversation: function(infos){
 | 
			
		||||
		//We check if a conversation ID was specified or not
 | 
			
		||||
		if(infos.conversationID){
 | 
			
		||||
			ComunicWeb.debug.logMessage("Open a conversation based on its ID");
 | 
			
		||||
@@ -112,18 +120,51 @@ ComunicWeb.components.conversations.manager = {
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//Open the conversation
 | 
			
		||||
		this.openConversation(conversationID);
 | 
			
		||||
 | 
			
		||||
		//Success
 | 
			
		||||
		return true;
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Open a conversation 
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param {Integer} conversationID The ID of the conversation to open
 | 
			
		||||
	 * @return {Boolean} True or false depending of the success of the operation
 | 
			
		||||
	 */
 | 
			
		||||
	openConversation: function(conversationID){
 | 
			
		||||
		
 | 
			
		||||
		//Log action
 | 
			
		||||
		ComunicWeb.debug.logMessage("Opening conversation " + conversationID);
 | 
			
		||||
 | 
			
		||||
		//Save conversation ID in session storage
 | 
			
		||||
		ComunicWeb.components.conversations.cachingOpened.add(conversationID);
 | 
			
		||||
 | 
			
		||||
		//Create a conversation windows
 | 
			
		||||
		ComunicWeb.components.conversations.chatWindows.create({
 | 
			
		||||
		//Create a conversation window
 | 
			
		||||
		var conversationWindow = ComunicWeb.components.conversations.chatWindows.create({
 | 
			
		||||
			target: byId(this.__conversationsContenerID),
 | 
			
		||||
			conversationID: conversationID
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		//Change conversation window name (loading state)
 | 
			
		||||
		ComunicWeb.components.conversations.chatWindows.changeName("Loading", conversationWindow);
 | 
			
		||||
 | 
			
		||||
		//Peform a request to informations about the conversation
 | 
			
		||||
		ComunicWeb.components.conversations.interface.getInfosOne(conversationID, function(informations){
 | 
			
		||||
			//In case of error
 | 
			
		||||
			if(informations.error){
 | 
			
		||||
				//Display error notification
 | 
			
		||||
				ComunicWeb.common.notificationSystem.showNotification("Couldn't get informations about the conversation !", "danger");
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			//Change the name of the conversation
 | 
			
		||||
			ComunicWeb.components.conversations.utils.getName(informations, function(conversationName){
 | 
			
		||||
				ComunicWeb.components.conversations.chatWindows.changeName(conversationName, conversationWindow);
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		//Success
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										58
									
								
								assets/js/components/conversations/utils.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								assets/js/components/conversations/utils.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Conversations utilites
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Pierre HUBERT
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
ComunicWeb.components.conversations.utils = {
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Given conversation informations, returns its name
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param {Object} infos Conversation informations
 | 
			
		||||
	 * @param {Function} afterName What to do once we got conversation name
 | 
			
		||||
	 * @return {Boolean} True for a success
 | 
			
		||||
	 */
 | 
			
		||||
	getName: function(infos, afterName){
 | 
			
		||||
 | 
			
		||||
		//Check if the conversation has a name or not
 | 
			
		||||
		if(infos.name)
 | 
			
		||||
			afterName(infos.name);
 | 
			
		||||
		else {
 | 
			
		||||
 | 
			
		||||
			//Get informations about the first two members
 | 
			
		||||
			var firstMembers = [];
 | 
			
		||||
 | 
			
		||||
			//Retrieve IDs
 | 
			
		||||
			for(o in infos.members){
 | 
			
		||||
				//Limit number to 2
 | 
			
		||||
				if(firstMembers.length < 2){ 
 | 
			
		||||
 | 
			
		||||
					//Check this is a valid entry
 | 
			
		||||
					if(infos.members[o]){
 | 
			
		||||
 | 
			
		||||
						//Exclude current user ID
 | 
			
		||||
						if(infos.members[o] != userID()) 
 | 
			
		||||
							firstMembers.push(infos.members[o]);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			//Get users informations
 | 
			
		||||
			ComunicWeb.user.userInfos.getNames(firstMembers, function(usersName){
 | 
			
		||||
 | 
			
		||||
				//For conversations with many members (more than 3 - we musn't forget current user)
 | 
			
		||||
				if(infos.members.length > 3)
 | 
			
		||||
					usersName += ", ...";
 | 
			
		||||
 | 
			
		||||
				//Peform next action now
 | 
			
		||||
				afterName(usersName);
 | 
			
		||||
			});
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//Success
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -123,6 +123,7 @@ $config['JSfiles'] = array(
 | 
			
		||||
    "%PATH_ASSETS%js/components/conversations/interface.js",
 | 
			
		||||
    "%PATH_ASSETS%js/components/conversations/service.js",
 | 
			
		||||
    "%PATH_ASSETS%js/components/conversations/cachingOpened.js",
 | 
			
		||||
    "%PATH_ASSETS%js/components/conversations/utils.js",
 | 
			
		||||
    
 | 
			
		||||
    //User selector
 | 
			
		||||
    "%PATH_ASSETS%js/components/userSelect/userSelect.js",
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user