mirror of
				https://github.com/pierre42100/ComunicWeb
				synced 2025-11-04 12:14:12 +00:00 
			
		
		
		
	Create group tabs
This commit is contained in:
		@@ -35,3 +35,21 @@
 | 
				
			|||||||
    display: table;
 | 
					    display: table;
 | 
				
			||||||
    margin: auto;
 | 
					    margin: auto;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.group-header .box-body {
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.group-header .box-body .spacer {
 | 
				
			||||||
 | 
					    flex: 2;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.group-header .box-body .col-metadata {
 | 
				
			||||||
 | 
					    flex: 1;
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    flex-direction: column;
 | 
				
			||||||
 | 
					    align-items: baseline;
 | 
				
			||||||
 | 
					    justify-content: center;
 | 
				
			||||||
 | 
					    min-width: 160px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -11,7 +11,7 @@
 | 
				
			|||||||
 * @param {String} calloutMessage The message of the callout
 | 
					 * @param {String} calloutMessage The message of the callout
 | 
				
			||||||
 * @param {String} calloutType The type of the callout (danger, info, warning, success)
 | 
					 * @param {String} calloutType The type of the callout (danger, info, warning, success)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
ComunicWeb.common.messages.createCalloutElem = function(calloutTitle, calloutMessage, calloutType){
 | 
					function createCallout(calloutTitle, calloutMessage, calloutType){
 | 
				
			||||||
    //Prepare callout message
 | 
					    //Prepare callout message
 | 
				
			||||||
    calloutMessage = "<p>" + calloutMessage + "</p>";
 | 
					    calloutMessage = "<p>" + calloutMessage + "</p>";
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
@@ -39,6 +39,8 @@ ComunicWeb.common.messages.createCalloutElem = function(calloutTitle, calloutMes
 | 
				
			|||||||
    return calloutElem;
 | 
					    return calloutElem;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ComunicWeb.common.messages.createCalloutElem = createCallout;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Create loading callout element
 | 
					 * Create loading callout element
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
 * @author Pierre HUBERT
 | 
					 * @author Pierre HUBERT
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ComunicWeb.pages.groups.main = {
 | 
					const GroupsPage = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Open groups page
 | 
						 * Open groups page
 | 
				
			||||||
@@ -12,10 +12,15 @@ ComunicWeb.pages.groups.main = {
 | 
				
			|||||||
	 * @param {object} args Optionnal arguments
 | 
						 * @param {object} args Optionnal arguments
 | 
				
			||||||
	 * @param {HTMLElement} target The target for the page
 | 
						 * @param {HTMLElement} target The target for the page
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	open: function(args, target){
 | 
						open: async function(args, target){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							try {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			//Determine which page / group should be opened
 | 
								//Determine which page / group should be opened
 | 
				
			||||||
		if(!args.subfolder)
 | 
								if(args.groupID)
 | 
				
			||||||
 | 
									page = args.groupID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								else if(!args.subfolder)
 | 
				
			||||||
				var page = "main";
 | 
									var page = "main";
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			else {
 | 
								else {
 | 
				
			||||||
@@ -43,8 +48,8 @@ ComunicWeb.pages.groups.main = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			//Else determine which group page to open (specified after the ID of the group)
 | 
								//Else determine which group page to open (specified after the ID of the group)
 | 
				
			||||||
			var groupID = page;
 | 
								var groupID = page;
 | 
				
			||||||
		if(args.subfolder.split("/").length < 2){
 | 
								if(!args.subfolder || args.subfolder.split("/").length < 2){
 | 
				
			||||||
			page = "group";
 | 
									page = "posts";
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else {
 | 
								else {
 | 
				
			||||||
				//Extract the page to open from the URL
 | 
									//Extract the page to open from the URL
 | 
				
			||||||
@@ -52,10 +57,50 @@ ComunicWeb.pages.groups.main = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
				//Check if there is nothing after "/"
 | 
									//Check if there is nothing after "/"
 | 
				
			||||||
				if(page.length < 2)
 | 
									if(page.length < 2)
 | 
				
			||||||
				page = "group";
 | 
										page = "posts";
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		//Check which page to open
 | 
								/** @type {AdvancedGroupInfo} Get information about the group*/
 | 
				
			||||||
 | 
								const group = await new Promise((res, rej) => GroupsInterface.getAdvancedInfo(groupID, function(result){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									//Check for errors
 | 
				
			||||||
 | 
									if(result.error){
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
										//Check the code of the error
 | 
				
			||||||
 | 
										if(result.error.code == 401)
 | 
				
			||||||
 | 
											ComunicWeb.pages.groups.pages.forbidden.open(id, target);
 | 
				
			||||||
 | 
										
 | 
				
			||||||
 | 
										//The group does not exists
 | 
				
			||||||
 | 
										else 
 | 
				
			||||||
 | 
											
 | 
				
			||||||
 | 
											ComunicWeb.common.error.pageNotFound({}, target);
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
									res(result);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
								}));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								//Update page title
 | 
				
			||||||
 | 
								ComunicWeb.common.pageTitle.setTitle(group.name);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
								// Display the header for the group
 | 
				
			||||||
 | 
								GroupSectionHeader.display(group, target);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Display the tabs of the group
 | 
				
			||||||
 | 
								await GroupTabs.show(group, target, page);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							} catch(e) {
 | 
				
			||||||
 | 
								console.error(e);
 | 
				
			||||||
 | 
								target.appendChild(createCallout(
 | 
				
			||||||
 | 
									tr("Error"),
 | 
				
			||||||
 | 
									tr("Failed to load group page!"),
 | 
				
			||||||
 | 
									"danger"
 | 
				
			||||||
 | 
								))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							/*//Check which page to open
 | 
				
			||||||
		if(page == "group")
 | 
							if(page == "group")
 | 
				
			||||||
			ComunicWeb.pages.groups.pages.group.open(groupID, target);
 | 
								ComunicWeb.pages.groups.pages.group.open(groupID, target);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@@ -68,7 +113,9 @@ ComunicWeb.pages.groups.main = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		//Unrecognized page
 | 
							//Unrecognized page
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			ComunicWeb.common.error.pageNotFound(args, target);
 | 
								ComunicWeb.common.error.pageNotFound(args, target);*/
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ComunicWeb.pages.groups.main = GroupsPage;
 | 
				
			||||||
@@ -1,110 +0,0 @@
 | 
				
			|||||||
/**
 | 
					 | 
				
			||||||
 * Group page
 | 
					 | 
				
			||||||
 * 
 | 
					 | 
				
			||||||
 * @author Pierre HUBERT
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ComunicWeb.pages.groups.pages.group = {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Open (display) a group page
 | 
					 | 
				
			||||||
     * 
 | 
					 | 
				
			||||||
     * @param {Number} id The ID of the group to display
 | 
					 | 
				
			||||||
     * @param {HTMLElement} target The target for the page
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    open: function(id, target){
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        //Get information about the group
 | 
					 | 
				
			||||||
        ComunicWeb.components.groups.interface.getAdvancedInfo(id, function(result){
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            //Check for errors
 | 
					 | 
				
			||||||
            if(result.error){
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                //Check the code of the error
 | 
					 | 
				
			||||||
                if(result.error.code == 401){
 | 
					 | 
				
			||||||
                    ComunicWeb.pages.groups.pages.forbidden.open(id, target);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                else 
 | 
					 | 
				
			||||||
                    //The group does not exists
 | 
					 | 
				
			||||||
                    ComunicWeb.common.error.pageNotFound({}, target);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            else
 | 
					 | 
				
			||||||
                //Display group page
 | 
					 | 
				
			||||||
                ComunicWeb.pages.groups.pages.group.display(id, result, target);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Display information about a group
 | 
					 | 
				
			||||||
     * 
 | 
					 | 
				
			||||||
     * @param {Number} id The ID of the group to display
 | 
					 | 
				
			||||||
     * @param {Object} info Information about the group to display
 | 
					 | 
				
			||||||
     * @param {HTMLElement} target The target for the page
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    display: function(id, info, target){
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //Update page title
 | 
					 | 
				
			||||||
        ComunicWeb.common.pageTitle.setTitle(info.name);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //Create page row
 | 
					 | 
				
			||||||
        var pageRow = createElem2({
 | 
					 | 
				
			||||||
            appendTo: target,
 | 
					 | 
				
			||||||
            type: "div",
 | 
					 | 
				
			||||||
            class: "row group-page"
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //Create header column
 | 
					 | 
				
			||||||
        var headerColumn = createElem2({
 | 
					 | 
				
			||||||
            appendTo: pageRow,
 | 
					 | 
				
			||||||
            type: "div",
 | 
					 | 
				
			||||||
            class: "col-md-6"
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //Display the header for the group
 | 
					 | 
				
			||||||
        ComunicWeb.pages.groups.sections.header.display(info, headerColumn);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //Check if the user can create posts or not
 | 
					 | 
				
			||||||
        if(ComunicWeb.components.groups.utils.canCreatePosts(info)){
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            //Intialize posts creation form
 | 
					 | 
				
			||||||
            var postFormRow = createElem2({
 | 
					 | 
				
			||||||
                appendTo: target,
 | 
					 | 
				
			||||||
                type: "div",
 | 
					 | 
				
			||||||
                class: "row group-page"
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            //Add column
 | 
					 | 
				
			||||||
            var postFormCol = createElem2({
 | 
					 | 
				
			||||||
                appendTo: postFormRow,
 | 
					 | 
				
			||||||
                type: "div",
 | 
					 | 
				
			||||||
                class: "col-md-6"
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            //Display form
 | 
					 | 
				
			||||||
            ComunicWeb.components.posts.form.display("group", id, postFormCol);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //Display group posts
 | 
					 | 
				
			||||||
        var postsRow = createElem2({
 | 
					 | 
				
			||||||
            appendTo: target,
 | 
					 | 
				
			||||||
            type: "div",
 | 
					 | 
				
			||||||
            class: "row group-page"
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        var postsCol = createElem2({
 | 
					 | 
				
			||||||
            appendTo: postsRow,
 | 
					 | 
				
			||||||
            type: "div",
 | 
					 | 
				
			||||||
            class: "col-md-6"
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        ComunicWeb.pages.groups.sections.posts.display(info, postsCol);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										56
									
								
								assets/js/pages/groups/pages/posts.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								assets/js/pages/groups/pages/posts.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Group page
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @author Pierre HUBERT
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const GroupPostsPage = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Display information about a group
 | 
				
			||||||
 | 
					     * 
 | 
				
			||||||
 | 
					     * @param {Number} id The ID of the group to display
 | 
				
			||||||
 | 
					     * @param {Object} info Information about the group to display
 | 
				
			||||||
 | 
					     * @param {HTMLElement} target The target for the page
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    display: function(id, info, target){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Check if the user can create posts or not
 | 
				
			||||||
 | 
					        if(ComunicWeb.components.groups.utils.canCreatePosts(info)){
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            //Intialize posts creation form
 | 
				
			||||||
 | 
					            var postFormRow = createElem2({
 | 
				
			||||||
 | 
					                appendTo: target,
 | 
				
			||||||
 | 
					                type: "div",
 | 
				
			||||||
 | 
					                class: "row group-page"
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //Add column
 | 
				
			||||||
 | 
					            var postFormCol = createElem2({
 | 
				
			||||||
 | 
					                appendTo: postFormRow,
 | 
				
			||||||
 | 
					                type: "div",
 | 
				
			||||||
 | 
					                class: "col-md-6"
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //Display form
 | 
				
			||||||
 | 
					            ComunicWeb.components.posts.form.display("group", id, postFormCol);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Display group posts
 | 
				
			||||||
 | 
					        var postsRow = createElem2({
 | 
				
			||||||
 | 
					            appendTo: target,
 | 
				
			||||||
 | 
					            type: "div",
 | 
				
			||||||
 | 
					            class: "row group-page"
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        var postsCol = createElem2({
 | 
				
			||||||
 | 
					            appendTo: postsRow,
 | 
				
			||||||
 | 
					            type: "div",
 | 
				
			||||||
 | 
					            class: "col-md-6"
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ComunicWeb.pages.groups.sections.posts.display(info, postsCol);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
 * @author Pierre HUBERT
 | 
					 * @author Pierre HUBERT
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ComunicWeb.pages.groups.sections.header = {
 | 
					const GroupSectionHeader = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Display groups page header
 | 
					     * Display groups page header
 | 
				
			||||||
@@ -14,29 +14,43 @@ ComunicWeb.pages.groups.sections.header = {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    display: function(info, target){
 | 
					    display: function(info, target){
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        //Create header container
 | 
					        //Create page row
 | 
				
			||||||
        var headerContainer = createElem2({
 | 
					        var pageRow = createElem2({
 | 
				
			||||||
            appendTo: target,
 | 
					            appendTo: target,
 | 
				
			||||||
            type: "div",
 | 
					            type: "div",
 | 
				
			||||||
 | 
					            class: "row group-page"
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Create header column
 | 
				
			||||||
 | 
					        var headerColumn = createElem2({
 | 
				
			||||||
 | 
					            appendTo: pageRow,
 | 
				
			||||||
 | 
					            type: "div",
 | 
				
			||||||
 | 
					            class: "col-md-6"
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Create header container
 | 
				
			||||||
 | 
					        const headerContainer = createElem2({
 | 
				
			||||||
 | 
					            appendTo: headerColumn,
 | 
				
			||||||
 | 
					            type: "div",
 | 
				
			||||||
            class: "group-header box box-primary"
 | 
					            class: "group-header box box-primary"
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //Create a row
 | 
					        //Create a row
 | 
				
			||||||
        var row = createElem2({
 | 
					        const row = createElem2({
 | 
				
			||||||
            appendTo: headerContainer,
 | 
					            appendTo: headerContainer,
 | 
				
			||||||
            type: "div",
 | 
					            type: "div",
 | 
				
			||||||
            class: "box-body row"
 | 
					            class: "box-body row"
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //First column
 | 
					        //First column
 | 
				
			||||||
        var firstColumn = createElem2({
 | 
					        const firstColumn = createElem2({
 | 
				
			||||||
            appendTo: row,
 | 
					            appendTo: row,
 | 
				
			||||||
            type: "div",
 | 
					            type: "div",
 | 
				
			||||||
            class: "col-md-4 group-col-icon",
 | 
					            class: "col-md-4 group-col-icon",
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //Group icon
 | 
					        //Group icon
 | 
				
			||||||
        var groupIcon = createElem2({
 | 
					        const groupIcon = createElem2({
 | 
				
			||||||
            appendTo: firstColumn,
 | 
					            appendTo: firstColumn,
 | 
				
			||||||
            type: "img",
 | 
					            type: "img",
 | 
				
			||||||
            src: info.icon_url,
 | 
					            src: info.icon_url,
 | 
				
			||||||
@@ -44,7 +58,7 @@ ComunicWeb.pages.groups.sections.header = {
 | 
				
			|||||||
        });
 | 
					        });
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        //Group name
 | 
					        //Group name
 | 
				
			||||||
        var groupName = createElem2({
 | 
					        const groupName = createElem2({
 | 
				
			||||||
            appendTo: firstColumn,
 | 
					            appendTo: firstColumn,
 | 
				
			||||||
            type: "span",
 | 
					            type: "span",
 | 
				
			||||||
            class: "group-name",
 | 
					            class: "group-name",
 | 
				
			||||||
@@ -62,132 +76,29 @@ ComunicWeb.pages.groups.sections.header = {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //Second column : Information about the company
 | 
					        createElem2({
 | 
				
			||||||
        var secondColumn = createElem2({
 | 
					 | 
				
			||||||
            appendTo: row,
 | 
					            appendTo: row,
 | 
				
			||||||
            type: "div",
 | 
					            type: "div",
 | 
				
			||||||
            class: "col-md-4 col-info"
 | 
					            class: "spacer"
 | 
				
			||||||
        });
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //Group URL (if any)
 | 
					        // Second column : basic information about the group
 | 
				
			||||||
        if(info.url != "null"){
 | 
					 | 
				
			||||||
            var urlElem = createElem2({
 | 
					 | 
				
			||||||
                appendTo: secondColumn,
 | 
					 | 
				
			||||||
                type: "a",
 | 
					 | 
				
			||||||
                class: "a",
 | 
					 | 
				
			||||||
                href: info.url,
 | 
					 | 
				
			||||||
                innerHTML: "<i class='fa fa-link'></i> " + info.url
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
            urlElem.target = "_blank";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //Group description (if any)
 | 
					 | 
				
			||||||
        if(info.description != "null")
 | 
					 | 
				
			||||||
            createElem2({
 | 
					 | 
				
			||||||
                appendTo: secondColumn,
 | 
					 | 
				
			||||||
                type: "div",
 | 
					 | 
				
			||||||
                innerHTML: "<i class='fa fa-file-text-o'></i> " + info.description
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //Add separator
 | 
					 | 
				
			||||||
        add_p(secondColumn, " ");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //Third column : information about the group
 | 
					 | 
				
			||||||
        var thirdColumn = createElem2({
 | 
					        var thirdColumn = createElem2({
 | 
				
			||||||
            appendTo: row,
 | 
					            appendTo: row,
 | 
				
			||||||
            type: "div",
 | 
					            type: "div",
 | 
				
			||||||
            class: "col-md-4 col-metadata"
 | 
					            class: "col-md-7 col-metadata"
 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //Add join date
 | 
					 | 
				
			||||||
        createElem2({
 | 
					 | 
				
			||||||
            appendTo: thirdColumn,
 | 
					 | 
				
			||||||
            type: "div",
 | 
					 | 
				
			||||||
            innerHTML: '<i class="fa fa-clock-o"></i> Created '+ComunicWeb.common.date.timeDiffToStr(info.time_create)+' ago'
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //Add number of members
 | 
					 | 
				
			||||||
        var members = createElem2({
 | 
					 | 
				
			||||||
            appendTo: thirdColumn,
 | 
					 | 
				
			||||||
            type: "div",
 | 
					 | 
				
			||||||
            innerHTML: '<i class="fa fa-group"></i> '+ info.number_members+' members'
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //Check if the user is a moderator or an admin
 | 
					 | 
				
			||||||
        if(info.membership == "administrator" || info.membership == "moderator"){
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            //Turn members information into a link
 | 
					 | 
				
			||||||
            members.className = "a";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            members.addEventListener("click", function(e){
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                openPage("groups/" + info.id + "/members");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //Group visibility
 | 
					 | 
				
			||||||
        var visibility = {
 | 
					 | 
				
			||||||
            open: "Open group",
 | 
					 | 
				
			||||||
            private: "Private group",
 | 
					 | 
				
			||||||
            secrete: "Secrete group"
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
        createElem2({
 | 
					 | 
				
			||||||
            appendTo: thirdColumn,
 | 
					 | 
				
			||||||
            type: "div",
 | 
					 | 
				
			||||||
            innerHTML: "<i class='fa fa-lock'></i> " + visibility[info.visibility]
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //Group registration
 | 
					 | 
				
			||||||
        var levels = {
 | 
					 | 
				
			||||||
            open: "Open registration",
 | 
					 | 
				
			||||||
            moderated: "Moderated registration",
 | 
					 | 
				
			||||||
            closed: "Closed registration"
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        createElem2({
 | 
					 | 
				
			||||||
            appendTo: thirdColumn,
 | 
					 | 
				
			||||||
            type: "div",
 | 
					 | 
				
			||||||
            innerHTML: "<i class='fa fa-pencil'></i> " + levels[info.registration_level]
 | 
					 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //Display membership level
 | 
					        //Display membership level
 | 
				
			||||||
        if(signed_in())
 | 
					 | 
				
			||||||
        ComunicWeb.pages.groups.sections.membershipBlock.display(info, thirdColumn);
 | 
					        ComunicWeb.pages.groups.sections.membershipBlock.display(info, thirdColumn);
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        //Display follow block
 | 
					        //Display follow block
 | 
				
			||||||
        if(signed_in() && ComunicWeb.components.groups.utils.isGroupMember(info))
 | 
					        if(signed_in() && ComunicWeb.components.groups.utils.isGroupMember(info))
 | 
				
			||||||
            ComunicWeb.pages.groups.sections.followBlock.display(info, thirdColumn);
 | 
					            ComunicWeb.pages.groups.sections.followBlock.display(info, thirdColumn);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //If the user is an admin, add a link to configure the page
 | 
					 | 
				
			||||||
        if(signed_in() && info.membership == "administrator"){
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            var settingsLink = createElem2({
 | 
					 | 
				
			||||||
                appendTo: thirdColumn,
 | 
					 | 
				
			||||||
                type: "div",
 | 
					 | 
				
			||||||
                class: "a",
 | 
					 | 
				
			||||||
                innerHTML: " <i class='fa fa-gear'></i>Settings"
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
            settingsLink.addEventListener("click", function(e){
 | 
					 | 
				
			||||||
                openPage("groups/" + info.id + "/settings");
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //Display likes block
 | 
					 | 
				
			||||||
        ComunicWeb.components.like.button.display(
 | 
					 | 
				
			||||||
			"group",
 | 
					 | 
				
			||||||
			info.id,
 | 
					 | 
				
			||||||
			info.number_likes,
 | 
					 | 
				
			||||||
			info.is_liking,
 | 
					 | 
				
			||||||
			createElem2({
 | 
					 | 
				
			||||||
                appendTo: thirdColumn,
 | 
					 | 
				
			||||||
                type: "div"
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
		);
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ComunicWeb.pages.groups.sections.header = GroupSectionHeader;
 | 
				
			||||||
							
								
								
									
										38
									
								
								assets/js/pages/groups/sections/tabs.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								assets/js/pages/groups/sections/tabs.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Group tags
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @author Pierre Hubert
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const GroupTabs = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @param {AdvancedGroupInfo} group Group information
 | 
				
			||||||
 | 
					     * @param {HTMLElement} target Target
 | 
				
			||||||
 | 
					     * @param {String} activePage Current active page
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    show: async function(group, target, activePage) {
 | 
				
			||||||
 | 
					        // Load template
 | 
				
			||||||
 | 
							const tpl = await Page.loadHTMLTemplate("pages/groups/sections/GroupTabs.html");
 | 
				
			||||||
 | 
							const el = document.createElement("div")
 | 
				
			||||||
 | 
							el.innerHTML = tpl;
 | 
				
			||||||
 | 
							target.appendChild(el);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Vue.createApp({
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            data: () => {
 | 
				
			||||||
 | 
					                return {
 | 
				
			||||||
 | 
					                    isAdmin: group.membership == "administrator",
 | 
				
			||||||
 | 
					                    canSeeMembers: group.membership == "administrator" || group.membership == "moderator",
 | 
				
			||||||
 | 
					                    activePage: activePage
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            methods: {
 | 
				
			||||||
 | 
					                openPage: (uri) => openPage("groups/" + group.id + "/" + uri)
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }).mount(el);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -28,7 +28,7 @@ ComunicWeb.pages.virtualDirectory.page = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			//Check if the page is  a group
 | 
								//Check if the page is  a group
 | 
				
			||||||
			if(r.kind == "group"){
 | 
								if(r.kind == "group"){
 | 
				
			||||||
				ComunicWeb.pages.groups.pages.group.open(r.id, target);
 | 
									GroupsPage.open({groupID: r.id}, target);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										26
									
								
								assets/js/typings/Group.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								assets/js/typings/Group.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Group typings
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @author Pierre Hubert
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					declare interface Group {
 | 
				
			||||||
 | 
					    id: Number,
 | 
				
			||||||
 | 
					    name: String,
 | 
				
			||||||
 | 
					    icon_url: String,
 | 
				
			||||||
 | 
					    number_members: Number,
 | 
				
			||||||
 | 
					    visibility: "open"|"private"|"secrete",
 | 
				
			||||||
 | 
					    registration_level: "open"|"moderated"|"closed",
 | 
				
			||||||
 | 
					    posts_level: "moderators"|"members",
 | 
				
			||||||
 | 
					    virtual_directory: String,
 | 
				
			||||||
 | 
					    membership: "administrator"|"moderator"|"member"|"invited"|"pending"|"visitor",
 | 
				
			||||||
 | 
					    following: Boolean,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					declare interface AdvancedGroupInfo extends Group {
 | 
				
			||||||
 | 
					    time_create: Number,
 | 
				
			||||||
 | 
					    description: String,
 | 
				
			||||||
 | 
					    url: String,
 | 
				
			||||||
 | 
					    number_likes: Number,
 | 
				
			||||||
 | 
					    is_liking: Boolean
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										13
									
								
								assets/templates/pages/groups/sections/GroupTabs.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								assets/templates/pages/groups/sections/GroupTabs.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<!-- Group tabs section -->
 | 
				
			||||||
 | 
					<div class="row group-page">
 | 
				
			||||||
 | 
					    <div class="col-md-6">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <div class="nav-tabs-custom">
 | 
				
			||||||
 | 
					            <ul class="nav nav-tabs">
 | 
				
			||||||
 | 
					              <li v-bind:class="activePage == 'posts' ? 'active': ''"><a @click="openPage('posts')">tr("Posts")</a></li>
 | 
				
			||||||
 | 
					              <li v-bind:class="activePage == 'members' ? 'active': ''"><a @click="openPage('members')" v-if="canSeeMembers">tr("Members")</a></li>
 | 
				
			||||||
 | 
					              <li v-bind:class="activePage == 'about' ? 'active': ''"><a @click="openPage('about')">tr("About")</a></li>
 | 
				
			||||||
 | 
					              <li class="pull-right" v-if="isAdmin" v-bind:class="activePage == 'admin' ? 'active': ''"><a  @click="openPage('admin')" class="text-muted"><i class="fa fa-gear"></i></a></li>
 | 
				
			||||||
 | 
					            </ul>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
@@ -529,7 +529,7 @@ class Dev {
 | 
				
			|||||||
				//Groups sub pages
 | 
									//Groups sub pages
 | 
				
			||||||
				"js/pages/groups/pages/main.js",
 | 
									"js/pages/groups/pages/main.js",
 | 
				
			||||||
				"js/pages/groups/pages/create.js",
 | 
									"js/pages/groups/pages/create.js",
 | 
				
			||||||
				"js/pages/groups/pages/group.js",
 | 
									"js/pages/groups/pages/posts.js",
 | 
				
			||||||
				"js/pages/groups/pages/settings.js",
 | 
									"js/pages/groups/pages/settings.js",
 | 
				
			||||||
				"js/pages/groups/pages/members.js",
 | 
									"js/pages/groups/pages/members.js",
 | 
				
			||||||
				"js/pages/groups/pages/forbidden.js",
 | 
									"js/pages/groups/pages/forbidden.js",
 | 
				
			||||||
@@ -539,6 +539,7 @@ class Dev {
 | 
				
			|||||||
				"js/pages/groups/sections/membershipBlock.js",
 | 
									"js/pages/groups/sections/membershipBlock.js",
 | 
				
			||||||
				"js/pages/groups/sections/posts.js",
 | 
									"js/pages/groups/sections/posts.js",
 | 
				
			||||||
				"js/pages/groups/sections/followBlock.js",
 | 
									"js/pages/groups/sections/followBlock.js",
 | 
				
			||||||
 | 
									"js/pages/groups/sections/tabs.js",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			//User settings page
 | 
								//User settings page
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user