// swad_help.c: contextual help to enhance usability /* 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-2019 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 3 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 exit, system, malloc, free, rand, etc. #include "swad_action.h" #include "swad_box.h" #include "swad_config.h" #include "swad_form.h" #include "swad_global.h" #include "swad_help.h" #include "swad_user.h" /*****************************************************************************/ /****************************** Public constants *****************************/ /*****************************************************************************/ /*****************************************************************************/ /***************************** Private constants *****************************/ /*****************************************************************************/ /*****************************************************************************/ /****************************** Internal types *******************************/ /*****************************************************************************/ /*****************************************************************************/ /************** External global variables from others modules ****************/ /*****************************************************************************/ extern struct Globals Gbl; /*****************************************************************************/ /************************* Internal global variables *************************/ /*****************************************************************************/ /*****************************************************************************/ /***************************** Private prototypes ****************************/ /*****************************************************************************/ static void Hlp_ShowRowHelpWhatWouldYouLikeToDo (const char *Description, Act_Action_t Action, Btn_Button_t Button, const char *TxtButton); /*****************************************************************************/ /*************************** Show contextual help ****************************/ /*****************************************************************************/ void Hlp_ShowHelpWhatWouldYouLikeToDo (void) { extern const char *Txt_You_are_not_enroled_in_any_course[Usr_NUM_SEXS]; extern const char *Txt_You_can_search_for_courses_select_them_and_request_your_enrolment_in_them; extern const char *Txt_If_you_can_not_find_your_institution_your_centre_your_degree_or_your_courses_you_can_create_them; extern const char *Txt_What_would_you_like_to_do; extern const char *Txt_Register_students_in_COURSE_X; extern const char *Txt_Register_students; extern const char *Txt_Go_to_one_of_my_courses; extern const char *Txt_My_courses; extern const char *Txt_Sign_up; extern const char *Txt_Remove_me_from_THE_COURSE_X; extern const char *Txt_Remove_me; extern const char *Txt_Register_me_in_X; extern const char *Txt_Select_create_course_in_X; extern const char *Txt_Select_or_create_one_course_in_X; extern const char *Txt_Courses; extern const char *Txt_Select_or_create_another_degree_in_X; extern const char *Txt_Select_or_create_one_degree_in_X; extern const char *Txt_Degrees; extern const char *Txt_Select_or_create_another_centre_in_X; extern const char *Txt_Select_or_create_one_centre_in_X; extern const char *Txt_Centres; extern const char *Txt_Select_or_create_another_institution_in_X; extern const char *Txt_Select_or_create_one_institution_in_X; extern const char *Txt_Institutions; extern const char *Txt_Select_another_country; extern const char *Txt_Select_one_country; extern const char *Txt_Countries; extern const char *Txt_Upload_my_picture; extern const char *Txt_Upload_photo; extern const char *Txt_Log_in; extern const char *Txt_New_on_PLATFORM_Sign_up; extern const char *Txt_Create_account; static const Act_Action_t ActionsRemoveMe[Rol_NUM_ROLES] = { ActUnk, // Rol_UNK ActUnk, // Rol_GST ActUnk, // Rol_USR ActRemMe_Std, // Rol_STD ActRemMe_NET, // Rol_NET ActRemMe_Tch, // Rol_TCH ActUnk, // Rol_DEG_ADM ActUnk, // Rol_CTR_ADM ActUnk, // Rol_INS_ADM ActUnk, // Rol_SYS_ADM }; /***** Alert message *****/ if (Gbl.Usrs.Me.Logged && !Gbl.Usrs.Me.MyCrss.Num) Ale_ShowAlert (Ale_INFO,"%s
%s
%s", Txt_You_are_not_enroled_in_any_course[Gbl.Usrs.Me.UsrDat.Sex], Txt_You_can_search_for_courses_select_them_and_request_your_enrolment_in_them, Txt_If_you_can_not_find_your_institution_your_centre_your_degree_or_your_courses_you_can_create_them); /***** Start box and table *****/ Box_StartBoxTable (NULL,Txt_What_would_you_like_to_do,NULL, NULL,Box_CLOSABLE,2); if (Gbl.Usrs.Me.Logged) // I am logged { if (Gbl.Hierarchy.Level == Hie_CRS) // Course selected { if (Gbl.Usrs.Me.IBelongToCurrentCrs) // I belong to this course { if (Gbl.Action.Act != ActLogIn && Gbl.Action.Act != ActLogInNew && Gbl.Action.Act != ActLogInLan) // I am not just logged if (ActionsRemoveMe[Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs.Role] != ActUnk) { /* Request my removing from this course */ snprintf (Gbl.Title,sizeof (Gbl.Title), Txt_Remove_me_from_THE_COURSE_X, Gbl.Hierarchy.Crs.ShrtName); Hlp_ShowRowHelpWhatWouldYouLikeToDo (Gbl.Title, ActionsRemoveMe[Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs.Role], Btn_REMOVE_BUTTON,Txt_Remove_me); } } else // I do not belong to this course { /* Request my registration in this course */ snprintf (Gbl.Title,sizeof (Gbl.Title), Txt_Register_me_in_X, Gbl.Hierarchy.Crs.ShrtName); Hlp_ShowRowHelpWhatWouldYouLikeToDo (Gbl.Title, ActReqSignUp, Btn_CREATE_BUTTON,Txt_Sign_up); } } if (Gbl.Usrs.Me.MyCrss.Num) // I am enroled in some courses { if (Gbl.Hierarchy.Level == Hie_CRS && // Course selected !Gbl.Hierarchy.Crs.NumUsrs[Rol_STD] && // Current course has no students Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs.Role == Rol_TCH) // I am a teacher in current course { /* Request students enrolment */ snprintf (Gbl.Title,sizeof (Gbl.Title), Txt_Register_students_in_COURSE_X, Gbl.Hierarchy.Crs.ShrtName); Hlp_ShowRowHelpWhatWouldYouLikeToDo (Gbl.Title, ActReqEnrSevStd, Btn_CREATE_BUTTON,Txt_Register_students); } if (Gbl.Action.Act != ActMyCrs) // I am not seeing the action to list my courses /* Request list my courses */ Hlp_ShowRowHelpWhatWouldYouLikeToDo (Txt_Go_to_one_of_my_courses, ActMyCrs, Btn_CONFIRM_BUTTON,Txt_My_courses); } if (Gbl.Hierarchy.Deg.DegCod > 0) // Degree selected { /* Select a course */ snprintf (Gbl.Title,sizeof (Gbl.Title), Gbl.Hierarchy.Level == Hie_CRS ? Txt_Select_create_course_in_X : Txt_Select_or_create_one_course_in_X, Gbl.Hierarchy.Deg.ShrtName); Hlp_ShowRowHelpWhatWouldYouLikeToDo (Gbl.Title, ActSeeCrs, Btn_CONFIRM_BUTTON,Txt_Courses); } else if (Gbl.Hierarchy.Ctr.CtrCod > 0) // Centre selected { /* Select a degree */ snprintf (Gbl.Title,sizeof (Gbl.Title), Gbl.Hierarchy.Deg.DegCod > 0 ? Txt_Select_or_create_another_degree_in_X : Txt_Select_or_create_one_degree_in_X, Gbl.Hierarchy.Ctr.ShrtName); Hlp_ShowRowHelpWhatWouldYouLikeToDo (Gbl.Title, ActSeeDeg, Btn_CONFIRM_BUTTON,Txt_Degrees); } else if (Gbl.Hierarchy.Ins.InsCod > 0) // Institution selected { /* Select a centre */ snprintf (Gbl.Title,sizeof (Gbl.Title), Gbl.Hierarchy.Ctr.CtrCod > 0 ? Txt_Select_or_create_another_centre_in_X : Txt_Select_or_create_one_centre_in_X, Gbl.Hierarchy.Ins.ShrtName); Hlp_ShowRowHelpWhatWouldYouLikeToDo (Gbl.Title, ActSeeCtr, Btn_CONFIRM_BUTTON,Txt_Centres); } else if (Gbl.Hierarchy.Cty.CtyCod > 0) // Country selected { /* Select an institution */ snprintf (Gbl.Title,sizeof (Gbl.Title), Gbl.Hierarchy.Ins.InsCod > 0 ? Txt_Select_or_create_another_institution_in_X : Txt_Select_or_create_one_institution_in_X, Gbl.Hierarchy.Cty.Name[Gbl.Prefs.Language]); Hlp_ShowRowHelpWhatWouldYouLikeToDo (Gbl.Title, ActSeeIns, Btn_CONFIRM_BUTTON,Txt_Institutions); } else /* Select a country */ Hlp_ShowRowHelpWhatWouldYouLikeToDo (Gbl.Hierarchy.Cty.CtyCod > 0 ? Txt_Select_another_country : Txt_Select_one_country, ActSeeCty, Btn_CONFIRM_BUTTON,Txt_Countries); if (!Gbl.Usrs.Me.MyPhotoExists) // I have no photo Hlp_ShowRowHelpWhatWouldYouLikeToDo (Txt_Upload_my_picture, ActReqMyPho, Btn_CREATE_BUTTON,Txt_Upload_photo); } else // I am not logged { /* Log in */ Hlp_ShowRowHelpWhatWouldYouLikeToDo (Txt_Log_in, ActFrmLogIn, Btn_CONFIRM_BUTTON,Txt_Log_in); /* Sign up */ snprintf (Gbl.Title,sizeof (Gbl.Title), Txt_New_on_PLATFORM_Sign_up, Cfg_PLATFORM_SHORT_NAME); Hlp_ShowRowHelpWhatWouldYouLikeToDo (Gbl.Title, ActFrmMyAcc, Btn_CREATE_BUTTON,Txt_Create_account); } /***** End table and box *****/ Box_EndBoxTable (); } /*****************************************************************************/ /*************************** Show contextual help ****************************/ /*****************************************************************************/ static void Hlp_ShowRowHelpWhatWouldYouLikeToDo (const char *Description, Act_Action_t Action, Btn_Button_t Button, const char *TxtButton) { /***** Description *****/ fprintf (Gbl.F.Out,"" "" "%s:" "", Description); /***** Button *****/ fprintf (Gbl.F.Out,""); Frm_StartForm (Action); Btn_PutButtonInline (Button,TxtButton); Frm_EndForm (); fprintf (Gbl.F.Out,"" ""); }