/**
* Settings general section
*
* @author Pierre HUBERT
*/
ComunicWeb.pages.settings.sections.general = {
/**
* Open settings section
*
* @param {object} args Additionnal arguments
* @param {HTMLElement} target The target for the page
*/
open: function(args, target){
//Create a box
var box = createElem2({
appendTo: target,
type: "div",
class: "box box-primary box-general-settings"
});
//Add box header
var boxHead = createElem2({
appendTo: box,
type: "div",
class: "box-header",
});
var boxTitle = createElem2({
appendTo: boxHead,
type: "h3",
class: "box-title",
innerHTML: "General settings"
});
//Create box body
var boxBody = createElem2({
appendTo: box,
type: "div",
class: "box-body"
});
//Display loading message
var loadingMsg = ComunicWeb.common.messages.createLoadingCallout();
boxBody.appendChild(loadingMsg);
//Load general settings information
ComunicWeb.components.settings.interface.getGeneral(function(infos){
//Remove loading message
loadingMsg.remove();
//Check for errors
if(infos.error){
var errMsg = ComunicWeb.common.messages.createCalloutElem("Error", "An error occured while retrieving account settings...", "danger");
boxBody.appendChild(errMsg);
return;
}
//Display the settings form
ComunicWeb.pages.settings.sections.general._show_form(infos, boxBody);
});
},
/**
* Show the settings form
*
* @param {object} infos Informations about the user (General settings)
* @param {HTMLElement} target The target for the page
*/
_show_form: function(infos, target){
//Main account information
createElem2({
appendTo: target,
type: "h4",
innerHTML: "Main account information"
});
//Display user ID
var userIDInput = createFormGroup({
target: target,
label: "User ID",
type: "text",
value: infos.id,
disabled: true,
additionalGroupClasses: "input-user-id"
});
//Easter egg : open pacman when clicking 10 times on user ID input label
var clicks = 0;
userIDInput.parentNode.parentNode.addEventListener("click", function(){
clicks++;
if(clicks >= 10) {
ComunicWeb.components.pacman.open();
clicks = 0;
}
});
//Display user email
createFormGroup({
target: target,
label: "Email address",
type: "email",
value: infos.email,
disabled: true,
additionalGroupClasses: "input-user-email"
});
// Display user first name
var firstName = createFormGroup({
target: target,
label: tr("First name"),
placeholder: tr("Your first name"),
type: "text",
value: infos.firstName,
maxLength: ServerConfig.conf.account_info_policy.max_first_name_length
});
// Last name
var lastName = createFormGroup({
target: target,
label: tr("Last name"),
placeholder: tr("Your last name"),
type: "text",
value: infos.lastName,
maxLength: ServerConfig.conf.account_info_policy.max_last_name_length
});
//Allow mails from Comunic
var allowEmails = createFormGroup({
target: target,
type: "checkbox",
label: tr("Allow Comunic to send you emails"),
checked: infos.allow_comunic_mails
});
//Page settings
add_space(target);
createElem2({
appendTo: target,
type: "h4",
innerHTML: "Page settings"
});
//Public page
var publicPage = createFormGroup({
target: target,
type: "checkbox",
label: tr("Make your page public (available to every Comunic users)"),
checked: infos.is_public
});
//Open page
var openPage = createFormGroup({
target: target,
type: "checkbox",
label: "Make your page open (available for the entire world)",
checked: infos.is_open
});
//Make the public and open button begin synchronized
$(publicPage).on("ifChanged", function(){
if(!publicPage.checked){
$(openPage).iCheck("uncheck");
}
});
$(openPage).on("ifChanged", function(){
if(openPage.checked){
$(publicPage).iCheck("check");
}
});
//Allow comments creation
var allowComments = createFormGroup({
target: target,
type: "checkbox",
label: tr("Allow comments on your page"),
checked: infos.allow_comments
});
//Allow posts from friends
var allowPostsFromFriends = createFormGroup({
target: target,
type: "checkbox",
label: tr("Allow the creation of posts from your friends on your page"),
checked: infos.allow_posts_from_friends
});
//Public friends list
var publicFriendsList = createFormGroup({
target: target,
type: "checkbox",
label: tr("Make your friend list public"),
checked: infos.public_friends_list
});
//Personnal website
var personnalWebsite = createFormGroup({
target: target,
label: tr("Personnal website (optionnal)"),
type: "text",
placeholder: "https://...",
value: infos.personnal_website != "null" ? infos.personnal_website : ""
});
//Public notes
var publicNotes = createFormGroup({
target: target,
label: "Public notes for your account 255 characters max (optionnal)",
type: "textarea",
placeholder: "Notes about your account...",
value: infos.publicNote != "null" ? infos.publicNote : ""
});
//Virtual directory
var virtualDirectory = createFormGroup({
target: target,
label: "Virtual directory for your user page (" + ComunicWeb.__config.siteURL + "user/{virtual_directory})
Account tag (in the form @{virtual_directory})",
type: "text",
placeholder: "Eg. john.way",
value: infos.virtual_directory != "null" ? infos.virtual_directory : ""
});
//Auto-check the virtual directory when it is updated
var checkTarget = createElem2({
appendTo: target,
type: "small"
});
virtualDirectory.onkeyup = function(){
checkTarget.innerHTML = "Checking availability...";
//Get the directory to check
var directory = virtualDirectory.value;
//Check if the directory is empty
if(directory == ""){
checkTarget.innerHTML = "";
return;
}
//Perform a request on the API
ComunicWeb.components.settings.interface.checkUserDirectoryAvailability(directory, function(callback){
//Check if the directory is available or not
checkTarget.innerHTML = callback.error ? "This directory is not available!" : "This directory seems to be available!";
})
}
//Submit button
var sendButton = createElem2({
appendTo: target,
type: "div",
class: "btn btn-primary submit-form",
innerHTML: "Update"
});
//Make the submit button lives
sendButton.onclick = function(){
//Check the given values
if(!ComunicWeb.common.formChecker.checkInput(firstName, true, ServerConfig.conf.account_info_policy.min_first_name_length))
return notify(tr("Please check your first name!"), "danger");
if(!ComunicWeb.common.formChecker.checkInput(lastName, true, ServerConfig.conf.account_info_policy.min_last_name_length))
return notify(tr("Please check your last name!"), "danger");
if(personnalWebsite.value != ""){
if(!check_url(personnalWebsite.value))
return notify(tr("Please check the given URL !"), "danger");
}
//Pack all the values in an object
var settings = {
firstName: firstName.value,
lastName: lastName.value,
allow_comunic_mails: allowEmails.checked,
isPublic: publicPage.checked,
isOpen: openPage.checked,
allowComments: allowComments.checked,
allowPostsFromFriends: allowPostsFromFriends.checked,
publicFriendsList: publicFriendsList.checked,
personnalWebsite: personnalWebsite.value,
virtualDirectory: virtualDirectory.value,
publicNote: publicNotes.value,
};
//Lock send button
sendButton.style.visibility = "hidden";
//Perform the request over the API
ComunicWeb.components.settings.interface.setGeneral(settings, function(result){
//Unlock send button
sendButton.style.visibility = "visible";
//Check for errors
if(result.error){
notify("An error occured while updating user settings!", "danger");
return;
}
//Success
notify("Your settings have been successfully saved !", "success");
//Reset the system
ComunicWeb.common.system.reset();
});
};
},
};