// 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-2014 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_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 Prf_UpdateSideColsOnUsrDataTable (void);
static void Prf_PutFormPublicPhoto (void);
/*****************************************************************************/
/***************************** Edit preferences ******************************/
/*****************************************************************************/
void Prf_EditPrefs (void)
{
extern const char *Txt_Language;
extern const char *Txt_Layout;
extern const char *Txt_Theme_SKIN;
extern const char *Txt_Columns;
extern const char *Txt_Icons;
extern const char *Txt_You_can_only_receive_email_notifications_if_;
char MailDomain[Cns_MAX_BYTES_STRING+1];
/***** Language selection *****/
Lay_StartRoundFrameTable10 (NULL,0,NULL);
fprintf (Gbl.F.Out,"
");
}
/*****************************************************************************/
/**************** Put left icon to hide/show side columns ********************/
/*****************************************************************************/
void Prf_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);
}
fprintf (Gbl.F.Out,"");
}
/*****************************************************************************/
/**************** Put right icon to hide/show side columns *******************/
/*****************************************************************************/
void Prf_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);
}
fprintf (Gbl.F.Out,"");
}
/*****************************************************************************/
/*********************** Change layout of side columns ***********************/
/*****************************************************************************/
void Prf_ChangeSideCols (void)
{
/***** Get param side-columns *****/
Gbl.Prefs.SideCols = Prf_GetParamSideCols ();
/***** Store side colums in database *****/
if (Gbl.Usrs.Me.Logged)
Prf_UpdateSideColsOnUsrDataTable ();
/***** Set preferences from current IP *****/
Prf_SetPrefsFromIP ();
}
/*****************************************************************************/
/*************************** Hide left side column ***************************/
/*****************************************************************************/
void Prf_HideLeftCol (void)
{
Gbl.Prefs.SideCols &= ~Lay_SHOW_LEFT_COLUMN; // And with 1...101 to hide left column
if (Gbl.Usrs.Me.Logged)
Prf_UpdateSideColsOnUsrDataTable ();
/***** Set preferences from current IP *****/
Prf_SetPrefsFromIP ();
}
/*****************************************************************************/
/*************************** Hide right side column **************************/
/*****************************************************************************/
void Prf_HideRightCol (void)
{
Gbl.Prefs.SideCols &= ~Lay_SHOW_RIGHT_COLUMN; // And with 1...110 to hide right column
if (Gbl.Usrs.Me.Logged)
Prf_UpdateSideColsOnUsrDataTable ();
/***** Set preferences from current IP *****/
Prf_SetPrefsFromIP ();
}
/*****************************************************************************/
/**************************** Show left side column **************************/
/*****************************************************************************/
void Prf_ShowLeftCol (void)
{
Gbl.Prefs.SideCols |= Lay_SHOW_LEFT_COLUMN; // Or with 10 to show left column
if (Gbl.Usrs.Me.Logged)
Prf_UpdateSideColsOnUsrDataTable ();
/***** Set preferences from current IP *****/
Prf_SetPrefsFromIP ();
}
/*****************************************************************************/
/**************************** Show right side column *************************/
/*****************************************************************************/
void Prf_ShowRightCol (void)
{
Gbl.Prefs.SideCols |= Lay_SHOW_RIGHT_COLUMN; // Or with 01 to show right column
if (Gbl.Usrs.Me.Logged)
Prf_UpdateSideColsOnUsrDataTable ();
/***** Set preferences from current IP *****/
Prf_SetPrefsFromIP ();
}
/*****************************************************************************/
/************** Update layout of side colums on user data table **************/
/*****************************************************************************/
static void Prf_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 Prf_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;
}
/*****************************************************************************/
/*********************** Select public / private photo ***********************/
/*****************************************************************************/
static void Prf_PutFormPublicPhoto (void)
{
extern const char *The_ClassFormul[The_NUM_THEMES];
extern const char *Txt_Public_photo;
/***** Start form *****/
Act_FormStart (ActChgPubPho);
fprintf (Gbl.F.Out,"
"
"
");
/***** Checkbox to select between public or private photo *****/
fprintf (Gbl.F.Out,"
"
""
"
",
Gbl.FormId);
fprintf (Gbl.F.Out,"
"
"%s"
"
",
The_ClassFormul[Gbl.Prefs.Theme],Txt_Public_photo);
/***** End form *****/
fprintf (Gbl.F.Out,"
"
"
"
"");
}
/*****************************************************************************/
/********** Get parameter with public / private photo from form **************/
/*****************************************************************************/
bool Prf_GetParamPublicPhoto (void)
{
char YN[1+1];
Par_GetParToText ("PublicPhoto",YN,1);
return (Str_ConvertToUpperLetter (YN[0]) == 'Y');
}
/*****************************************************************************/
/*********************** Change public / private photo ***********************/
/*****************************************************************************/
void Prf_ChangePublicPhoto (void)
{
char Query[512];
/***** Get param with public/private photo *****/
Gbl.Usrs.Me.UsrDat.PublicPhoto = Prf_GetParamPublicPhoto ();
/***** Store public/private photo in database *****/
sprintf (Query,"UPDATE usr_data SET PublicPhoto='%c' WHERE UsrCod='%ld'",
Gbl.Usrs.Me.UsrDat.PublicPhoto ? 'Y' :
'N',
Gbl.Usrs.Me.UsrDat.UsrCod);
DB_QueryUPDATE (Query,"can not update your preference about public photo");
}