diff --git a/swad_changelog.h b/swad_changelog.h index b9a053fe6..f7de682e9 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -256,13 +256,14 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 17.20.4 (2017-10-07)" +#define Log_PLATFORM_VERSION "SWAD 17.20.5 (2017-10-07)" #define CSS_FILE "swad17.0.css" #define JS_FILE "swad17.17.1.js" // Number of lines (includes comments but not blank lines) has been got with the following command: // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1 /* + Version 17.20.5: Oct 07, 2017 Title of project is now a link to show the project and its documents. (233024 lines) Version 17.20.4: Oct 07, 2017 Changes in layout of project. (232972 lines) Version 17.20.3: Oct 07, 2017 Changes in layout of project. Fixed bug when hiding/shown a project. (232971 lines) diff --git a/swad_file_browser.c b/swad_file_browser.c index f1546df20..00af45757 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -3368,11 +3368,14 @@ static void Brw_ShowFileBrowserProject (void) /***** Show the project *****/ Prj_ShowOneUniqueProject (&Prj); - /***** Write top before showing file browser *****/ - Brw_WriteTopBeforeShowingFileBrowser (); - - /***** Show the file browser *****/ - Brw_ShowFileBrowser (); + /***** Show project documents *****/ + if (Prj_CheckIfICanAdminDocsProject (Prj.PrjCod)) + { + Brw_WriteTopBeforeShowingFileBrowser (); + Brw_ShowFileBrowser (); + } + else + Ale_ShowAlert (Ale_WARNING,"You have no access to project documents."); /***** End box *****/ Box_EndBox (); diff --git a/swad_icon.c b/swad_icon.c index cfbceacc4..1c1f7a855 100644 --- a/swad_icon.c +++ b/swad_icon.c @@ -204,11 +204,11 @@ void Ico_PutContextualIconToEdit (Act_Action_t NextAction,void (*FuncParams) ()) void Ico_PutContextualIconToViewFiles (Act_Action_t NextAction,void (*FuncParams) ()) { - extern const char *Txt_Files; + extern const char *Txt_Project_documents; Lay_PutContextualLink (NextAction,NULL,FuncParams, "folder64x64.gif", - Txt_Files,NULL, + Txt_Project_documents,NULL, NULL); } diff --git a/swad_project.c b/swad_project.c index 3bfa2d449..a721239a8 100644 --- a/swad_project.c +++ b/swad_project.c @@ -133,9 +133,11 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInProject); static void Prj_GetParamPrjOrder (void); -static void Prj_PutFormsToRemEditOnePrj (long PrjCod,bool Hidden); +static void Prj_PutFormsToRemEditOnePrj (long PrjCod,bool Hidden, + bool ICanAdminDocsProject); static bool Prj_CheckIfICanEditProject (long PrjCod); +static bool Prj_GetIfIAmMemberOfProject (long PrjCod); static bool Prj_GetIfIAmTutorInProject (long PrjCod); static void Prj_PutParams (void); @@ -610,6 +612,7 @@ void Prj_PrintOneProject (void) static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectView) { extern const char *Txt_Today; + extern const char *Txt_Project_documents; extern const char *Txt_Preassigned_QUESTION; extern const char *Txt_Yes; extern const char *Txt_No; @@ -622,6 +625,7 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie extern const char *Txt_Required_knowledge; extern const char *Txt_Required_materials; static unsigned UniqueId = 0; + bool ICanAdminDocsProject = Prj_CheckIfICanAdminDocsProject (Prj->PrjCod); /***** Write first row of data of this project *****/ /* Forms to remove/edit this project */ @@ -634,7 +638,8 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie // no break case Prj_FILE_BROWSER_PROJECT: fprintf (Gbl.F.Out,"\">"); - Prj_PutFormsToRemEditOnePrj (Prj->PrjCod,Prj->Hidden); + Prj_PutFormsToRemEditOnePrj (Prj->PrjCod,Prj->Hidden, + ICanAdminDocsProject); break; default: fprintf (Gbl.F.Out,"\">"); @@ -684,11 +689,23 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie fprintf (Gbl.F.Out,"" - "
%s
", - Prj->Hidden ? "ASG_TITLE_LIGHT" : - "ASG_TITLE", - Prj->Title); + fprintf (Gbl.F.Out,"\">"); + if (ICanAdminDocsProject) + { + Act_FormStart (ActAdmDocPrj); + Prj_PutParams (); + Act_LinkFormSubmit (Txt_Project_documents, + Prj->Hidden ? "ASG_TITLE_LIGHT" : + "ASG_TITLE", + NULL); + fprintf (Gbl.F.Out,"%s",Prj->Title); + Act_FormEnd (); + } + else + fprintf (Gbl.F.Out,"
%s
", + Prj->Hidden ? "ASG_TITLE_LIGHT" : + "ASG_TITLE", + Prj->Title); fprintf (Gbl.F.Out,""); /* Department */ @@ -1717,7 +1734,8 @@ void Prj_PutHiddenParamPrjOrder (void) /****************** Put a link (form) to edit one project ********************/ /*****************************************************************************/ -static void Prj_PutFormsToRemEditOnePrj (long PrjCod,bool Hidden) +static void Prj_PutFormsToRemEditOnePrj (long PrjCod,bool Hidden, + bool ICanAdminDocsProject) { Gbl.Prjs.PrjCodToEdit = PrjCod; // Used as parameter in contextual links @@ -1734,16 +1752,35 @@ static void Prj_PutFormsToRemEditOnePrj (long PrjCod,bool Hidden) /***** Put form to edit project *****/ Ico_PutContextualIconToEdit (ActEdiOnePrj,Prj_PutParams); - - /***** Put form to view project file browser *****/ - if (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM) - Ico_PutContextualIconToViewFiles (ActAdmDocPrj,Prj_PutParams); } + /***** Put form to admin project documents *****/ + if (ICanAdminDocsProject) + Ico_PutContextualIconToViewFiles (ActAdmDocPrj,Prj_PutParams); + /***** Put form to print project *****/ Ico_PutContextualIconToPrint (ActPrnOnePrj,Prj_PutParams); } +/*****************************************************************************/ +/***************** Can I admin documents of a given project? *****************/ +/*****************************************************************************/ + +bool Prj_CheckIfICanAdminDocsProject (long PrjCod) + { + switch (Gbl.Usrs.Me.Role.Logged) + { + case Rol_STD: + case Rol_NET: + case Rol_TCH: + return Prj_GetIfIAmMemberOfProject (PrjCod); + case Rol_SYS_ADM: + return true; + default: + return false; + } + } + /*****************************************************************************/ /************************ Can I edit a given project? ************************/ /*****************************************************************************/ @@ -1762,6 +1799,20 @@ static bool Prj_CheckIfICanEditProject (long PrjCod) } } +/*****************************************************************************/ +/*********************** Am I member of a given project? *********************/ +/*****************************************************************************/ + +static bool Prj_GetIfIAmMemberOfProject (long PrjCod) + { + char Query[256]; + + sprintf (Query,"SELECT COUNT(*) FROM prj_usr" + " WHERE PrjCod=%ld AND UsrCod=%ld", + PrjCod,Gbl.Usrs.Me.UsrDat.UsrCod); + return (bool) (DB_QueryCOUNT (Query,"can not check if I am a member of a project") != 0); + } + /*****************************************************************************/ /*********************** Am I tutor in a given project? **********************/ /*****************************************************************************/ diff --git a/swad_project.h b/swad_project.h index a622c3d74..b74e7d0ee 100644 --- a/swad_project.h +++ b/swad_project.h @@ -133,6 +133,8 @@ void Prj_RemEva (void); void Prj_PutHiddenParamPrjOrder (void); +bool Prj_CheckIfICanAdminDocsProject (long PrjCod); + void Prj_RequestCreatePrj (void); void Prj_RequestEditPrj (void);