// swad_preference.c: user's preferences
/*
SWAD (Shared Workspace At a Distance),
is a web platform developed at the University of Granada (Spain),
and used to support university teaching.
This file is part of SWAD core.
Copyright (C) 1999-2015 Antonio Caņas Vargas
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
/*****************************************************************************/
/********************************** Headers **********************************/
/*****************************************************************************/
#include // For NULL
#include // For fprintf, etc.
#include
#include "swad_bool.h"
#include "swad_config.h"
#include "swad_database.h"
#include "swad_global.h"
#include "swad_layout.h"
#include "swad_notification.h"
#include "swad_menu.h"
#include "swad_parameter.h"
#include "swad_preference.h"
#include "swad_text.h"
/*****************************************************************************/
/*************** External global variables from others modules ***************/
/*****************************************************************************/
extern struct Globals Gbl;
/*****************************************************************************/
/****************************** Private constants ****************************/
/*****************************************************************************/
/*****************************************************************************/
/****************************** Private prototypes ***************************/
/*****************************************************************************/
static void Pre_PutIconsToSelectSideCols (void);
static void Pre_UpdateSideColsOnUsrDataTable (void);
/*****************************************************************************/
/***************************** Edit preferences ******************************/
/*****************************************************************************/
void Pre_EditPrefs (void)
{
extern const char *Txt_Language;
extern const char *Txt_You_can_only_receive_email_notifications_if_;
char MailDomain[Usr_MAX_BYTES_USR_EMAIL+1];
/***** Language *****/
Lay_StartRoundFrame (NULL,Txt_Language);
Pre_PutSelectorToSelectLanguage ();
Lay_EndRoundFrame ();
/***** Layout, side columns, theme, icon set & menu *****/
fprintf (Gbl.F.Out,"
");
Lay_EndRoundFrameTable ();
}
/*****************************************************************************/
/**************** Put left icon to hide/show side columns ********************/
/*****************************************************************************/
void Pre_PutLeftIconToHideShowCols (void)
{
extern const char *Txt_Hide_left_column;
extern const char *Txt_Show_left_column;
if (Gbl.Prefs.SideCols & Lay_SHOW_LEFT_COLUMN)
{
Act_FormStart (ActHidLftCol);
fprintf (Gbl.F.Out,"",
Gbl.Prefs.IconsURL,
Txt_Hide_left_column,
Txt_Hide_left_column);
}
else
{
Act_FormStart (ActShoLftCol);
fprintf (Gbl.F.Out,"",
Gbl.Prefs.IconsURL,
Txt_Show_left_column,
Txt_Show_left_column);
}
Act_FormEnd ();
}
/*****************************************************************************/
/**************** Put right icon to hide/show side columns *******************/
/*****************************************************************************/
void Pre_PutRigthIconToHideShowCols (void)
{
extern const char *Txt_Hide_right_column;
extern const char *Txt_Show_right_column;
if (Gbl.Prefs.SideCols & Lay_SHOW_RIGHT_COLUMN)
{
Act_FormStart (ActHidRgtCol);
fprintf (Gbl.F.Out,"",
Gbl.Prefs.IconsURL,
Txt_Hide_right_column,
Txt_Hide_right_column);
}
else
{
Act_FormStart (ActShoRgtCol);
fprintf (Gbl.F.Out,"",
Gbl.Prefs.IconsURL,
Txt_Show_right_column,
Txt_Show_right_column);
}
Act_FormEnd ();
}
/*****************************************************************************/
/*********************** Change layout of side columns ***********************/
/*****************************************************************************/
void Pre_ChangeSideCols (void)
{
/***** Get param side-columns *****/
Gbl.Prefs.SideCols = Pre_GetParamSideCols ();
/***** Store side colums in database *****/
if (Gbl.Usrs.Me.Logged)
Pre_UpdateSideColsOnUsrDataTable ();
/***** Set preferences from current IP *****/
Pre_SetPrefsFromIP ();
}
/*****************************************************************************/
/*************************** Hide left side column ***************************/
/*****************************************************************************/
void Pre_HideLeftCol (void)
{
Gbl.Prefs.SideCols &= ~Lay_SHOW_LEFT_COLUMN; // And with 1...101 to hide left column
if (Gbl.Usrs.Me.Logged)
Pre_UpdateSideColsOnUsrDataTable ();
/***** Set preferences from current IP *****/
Pre_SetPrefsFromIP ();
}
/*****************************************************************************/
/*************************** Hide right side column **************************/
/*****************************************************************************/
void Pre_HideRightCol (void)
{
Gbl.Prefs.SideCols &= ~Lay_SHOW_RIGHT_COLUMN; // And with 1...110 to hide right column
if (Gbl.Usrs.Me.Logged)
Pre_UpdateSideColsOnUsrDataTable ();
/***** Set preferences from current IP *****/
Pre_SetPrefsFromIP ();
}
/*****************************************************************************/
/**************************** Show left side column **************************/
/*****************************************************************************/
void Pre_ShowLeftCol (void)
{
Gbl.Prefs.SideCols |= Lay_SHOW_LEFT_COLUMN; // Or with 10 to show left column
if (Gbl.Usrs.Me.Logged)
Pre_UpdateSideColsOnUsrDataTable ();
/***** Set preferences from current IP *****/
Pre_SetPrefsFromIP ();
}
/*****************************************************************************/
/**************************** Show right side column *************************/
/*****************************************************************************/
void Pre_ShowRightCol (void)
{
Gbl.Prefs.SideCols |= Lay_SHOW_RIGHT_COLUMN; // Or with 01 to show right column
if (Gbl.Usrs.Me.Logged)
Pre_UpdateSideColsOnUsrDataTable ();
/***** Set preferences from current IP *****/
Pre_SetPrefsFromIP ();
}
/*****************************************************************************/
/************** Update layout of side colums on user data table **************/
/*****************************************************************************/
static void Pre_UpdateSideColsOnUsrDataTable (void)
{
char Query[512];
sprintf (Query,"UPDATE usr_data SET SideCols='%u' WHERE UsrCod='%ld'",
Gbl.Prefs.SideCols,Gbl.Usrs.Me.UsrDat.UsrCod);
DB_QueryUPDATE (Query,"can not update your preference about side columns");
}
/*****************************************************************************/
/************** Get parameter used to show/hide side columns *****************/
/*****************************************************************************/
unsigned Pre_GetParamSideCols (void)
{
char UnsignedStr[10+1];
unsigned UnsignedNum; // 11 ==> by default, show both side columns
Par_GetParToText ("SideCols",UnsignedStr,10);
if (!UnsignedStr[0])
return Cfg_DEFAULT_COLUMNS;
if (sscanf (UnsignedStr,"%u",&UnsignedNum) != 1)
return Cfg_DEFAULT_COLUMNS;
if (UnsignedNum > 3)
return Cfg_DEFAULT_COLUMNS;
return UnsignedNum;
}