mirror of https://github.com/acanas/swad-core.git
Version 22.43: Oct 11, 2022 Review of projects (not finished).
This commit is contained in:
parent
7202f590ed
commit
6e3cea9ba1
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Pro 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --><path d="M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384v38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zM576 368c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zm-76.7-43.3c-6.2-6.2-16.4-6.2-22.6 0L416 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z"/></svg>
|
After Width: | Height: | Size: 687 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Pro 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --><path d="M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384v38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zm48 384c-79.5 0-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144s-64.5 144-144 144zm0-48c13.3 0 24-10.7 24-24s-10.7-24-24-24s-24 10.7-24 24s10.7 24 24 24zm0-192c-8.8 0-16 7.2-16 16v80c0 8.8 7.2 16 16 16s16-7.2 16-16V288c0-8.8-7.2-16-16-16z"/></svg>
|
After Width: | Height: | Size: 683 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Pro 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --><path d="M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384v38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zm48 384c-79.5 0-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144s-64.5 144-144 144zm0-48c13.3 0 24-10.7 24-24s-10.7-24-24-24s-24 10.7-24 24s10.7 24 24 24zM368 321.6V328c0 8.8 7.2 16 16 16s16-7.2 16-16v-6.4c0-5.3 4.3-9.6 9.6-9.6h40.5c7.7 0 13.9 6.2 13.9 13.9c0 5.2-2.9 9.9-7.4 12.3l-32 16.8c-5.3 2.8-8.6 8.2-8.6 14.2V384c0 8.8 7.2 16 16 16s16-7.2 16-16v-5.1l23.5-12.3c15.1-7.9 24.5-23.6 24.5-40.6c0-25.4-20.6-45.9-45.9-45.9H409.6c-23 0-41.6 18.6-41.6 41.6z"/></svg>
|
After Width: | Height: | Size: 899 B |
|
@ -606,19 +606,23 @@ TODO: Fix bug: error al enviar un mensaje a dos recipientes, error on duplicate
|
||||||
|
|
||||||
TODO: Attach pdf files in multimedia.
|
TODO: Attach pdf files in multimedia.
|
||||||
*/
|
*/
|
||||||
#define Log_PLATFORM_VERSION "SWAD 22.42 (2022-10-11)"
|
#define Log_PLATFORM_VERSION "SWAD 22.43 (2022-10-11)"
|
||||||
#define CSS_FILE "swad22.40.css"
|
#define CSS_FILE "swad22.40.css"
|
||||||
#define JS_FILE "swad21.100.js"
|
#define JS_FILE "swad21.100.js"
|
||||||
/*
|
/*
|
||||||
Version 22.42: Oct 11, 2022 Review of projects (not finished). (? lines)
|
Version 22.43: Oct 11, 2022 Review of projects (not finished). (332930 lines)
|
||||||
|
Version 22.42: Oct 11, 2022 Review of projects (not finished). (332738 lines)
|
||||||
3 changes necessary in database:
|
3 changes necessary in database:
|
||||||
ALTER TABLE prj_projects ADD COLUMN ReviewStatus ENUM('unreviewed','unapproved','approved') NOT NULL DEFAULT 'unreviewed' AFTER URL,ADD INDEX (CrsCod,ReviewStatus);
|
ALTER TABLE prj_projects ADD COLUMN ReviewStatus ENUM('unreviewed','unapproved','approved') NOT NULL DEFAULT 'unreviewed' AFTER URL,ADD INDEX (CrsCod,ReviewStatus);
|
||||||
ALTER TABLE prj_projects ADD COLUMN ReviewTime DATETIME NOT NULL DEFAULT '1970-01-01 01:00:00' AFTER ReviewStatus;
|
ALTER TABLE prj_projects ADD COLUMN ReviewTime DATETIME NOT NULL DEFAULT '1970-01-01 01:00:00' AFTER ReviewStatus;
|
||||||
ALTER TABLE prj_projects ADD COLUMN ReviewTxt TEXT NOT NULL AFTER ReviewTime;
|
ALTER TABLE prj_projects ADD COLUMN ReviewTxt TEXT NOT NULL AFTER ReviewTime;
|
||||||
Copy the following icons to icon public directory:
|
Copy the following icons to icon public directory:
|
||||||
sudo cp icon/comment-slash.svg /var/www/html/swad/icon/
|
// sudo cp icon/comment-slash.svg /var/www/html/swad/icon/
|
||||||
sudo cp icon/thumbs-down.svg /var/www/html/swad/icon/
|
sudo cp icon/file-circle-check.svg /var/www/html/swad/icon/
|
||||||
sudo cp icon/thumbs-up.svg /var/www/html/swad/icon/
|
sudo cp icon/file-circle-exclamation.svg /var/www/html/swad/icon/
|
||||||
|
sudo cp icon/file-circle-question.svg /var/www/html/swad/icon/
|
||||||
|
// sudo cp icon/thumbs-down.svg /var/www/html/swad/icon/
|
||||||
|
// sudo cp icon/thumbs-up.svg /var/www/html/swad/icon/
|
||||||
|
|
||||||
Version 22.41.1: Oct 07, 2022 Fixed issue in main title. (332512 lines)
|
Version 22.41.1: Oct 07, 2022 Fixed issue in main title. (332512 lines)
|
||||||
Version 22.41: Oct 06, 2022 Changes in the behavior of the expansion/contraction of program items. (332511 lines)
|
Version 22.41: Oct 06, 2022 Changes in the behavior of the expansion/contraction of program items. (332511 lines)
|
||||||
|
|
114
swad_project.c
114
swad_project.c
|
@ -91,12 +91,24 @@ static const unsigned Brw_NUM_ROLES_TO_SHOW = sizeof (Prj_RolesToShow) /
|
||||||
sizeof (Prj_RolesToShow[0]);
|
sizeof (Prj_RolesToShow[0]);
|
||||||
|
|
||||||
/***** Assigned/non-assigned project *****/
|
/***** Assigned/non-assigned project *****/
|
||||||
static const char *AssignedNonassigImage[Prj_NUM_ASSIGNED_NONASSIG] =
|
static const char *AssignedNonassigIcon[Prj_NUM_ASSIGNED_NONASSIG] =
|
||||||
{
|
{
|
||||||
[Prj_ASSIGNED] = "user.svg",
|
[Prj_ASSIGNED] = "user.svg",
|
||||||
[Prj_NONASSIG] = "user-slash.svg",
|
[Prj_NONASSIG] = "user-slash.svg",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/***** Review status *****/
|
||||||
|
static struct
|
||||||
|
{
|
||||||
|
const char *Icon;
|
||||||
|
Ico_Color_t Color;
|
||||||
|
} ReviewIcon[Prj_NUM_REVIEW_STATUS] =
|
||||||
|
{
|
||||||
|
[Prj_UNREVIEWED] = {"file-circle-question.svg" ,Ico_BLACK},
|
||||||
|
[Prj_UNAPPROVED] = {"file-circle-exclamation.svg",Ico_RED },
|
||||||
|
[Prj_APPROVED ] = {"file-circle-check.svg" ,Ico_GREEN},
|
||||||
|
};
|
||||||
|
|
||||||
/***** Locked/unlocked project edition *****/
|
/***** Locked/unlocked project edition *****/
|
||||||
static const struct
|
static const struct
|
||||||
{
|
{
|
||||||
|
@ -622,7 +634,7 @@ static void Prj_ShowFormToFilterByAssign (const struct Prj_Projects *Projects)
|
||||||
Projects->SelectedOrder,
|
Projects->SelectedOrder,
|
||||||
Projects->CurrentPage,
|
Projects->CurrentPage,
|
||||||
-1L);
|
-1L);
|
||||||
Ico_PutSettingIconLink (AssignedNonassigImage[Assign],Ico_BLACK,
|
Ico_PutSettingIconLink (AssignedNonassigIcon[Assign],Ico_BLACK,
|
||||||
Txt_PROJECT_ASSIGNED_NONASSIGNED_PLURAL[Assign]);
|
Txt_PROJECT_ASSIGNED_NONASSIGNED_PLURAL[Assign]);
|
||||||
Frm_EndForm ();
|
Frm_EndForm ();
|
||||||
Set_EndPref ();
|
Set_EndPref ();
|
||||||
|
@ -726,19 +738,9 @@ static void Prj_ShowFormToFilterByWarning (const struct Prj_Projects *Projects)
|
||||||
|
|
||||||
static void Prj_ShowFormToFilterByReview (const struct Prj_Projects *Projects)
|
static void Prj_ShowFormToFilterByReview (const struct Prj_Projects *Projects)
|
||||||
{
|
{
|
||||||
extern const char *Txt_PROJECT_REVIEWED_PROJECTS[Prj_NUM_REVIEW_STATUS];
|
extern const char *Txt_PROJECT_REVIEW_PLURAL[Prj_NUM_REVIEW_STATUS];
|
||||||
struct Prj_Filter Filter;
|
struct Prj_Filter Filter;
|
||||||
Prj_ReviewStatus_t ReviewStatus;
|
Prj_ReviewStatus_t ReviewStatus;
|
||||||
struct
|
|
||||||
{
|
|
||||||
const char *Icon;
|
|
||||||
Ico_Color_t Color;
|
|
||||||
} ReviewIcon[Prj_NUM_REVIEW_STATUS] =
|
|
||||||
{
|
|
||||||
[Prj_UNREVIEWED] = {"comment-slash.svg",Ico_BLACK},
|
|
||||||
[Prj_UNAPPROVED] = {"thumbs-down.svg" ,Ico_RED },
|
|
||||||
[Prj_APPROVED ] = {"thumbs-up.svg" ,Ico_GREEN},
|
|
||||||
};
|
|
||||||
|
|
||||||
Set_BeginOneSettingSelector ();
|
Set_BeginOneSettingSelector ();
|
||||||
for (ReviewStatus = (Prj_ReviewStatus_t) 0;
|
for (ReviewStatus = (Prj_ReviewStatus_t) 0;
|
||||||
|
@ -759,7 +761,7 @@ static void Prj_ShowFormToFilterByReview (const struct Prj_Projects *Projects)
|
||||||
-1L);
|
-1L);
|
||||||
Ico_PutSettingIconLink (ReviewIcon[ReviewStatus].Icon,
|
Ico_PutSettingIconLink (ReviewIcon[ReviewStatus].Icon,
|
||||||
ReviewIcon[ReviewStatus].Color,
|
ReviewIcon[ReviewStatus].Color,
|
||||||
Txt_PROJECT_REVIEWED_PROJECTS[ReviewStatus]);
|
Txt_PROJECT_REVIEW_PLURAL[ReviewStatus]);
|
||||||
Frm_EndForm ();
|
Frm_EndForm ();
|
||||||
Set_EndPref ();
|
Set_EndPref ();
|
||||||
}
|
}
|
||||||
|
@ -1352,6 +1354,8 @@ static void Prj_ShowProjectRow (struct Prj_Projects *Projects,
|
||||||
Prj_ProjectView_t ProjectView)
|
Prj_ProjectView_t ProjectView)
|
||||||
{
|
{
|
||||||
extern const char *Txt_Actions[Act_NUM_ACTIONS];
|
extern const char *Txt_Actions[Act_NUM_ACTIONS];
|
||||||
|
extern const char *Txt_Review;
|
||||||
|
extern const char *Txt_PROJECT_REVIEW_SINGUL[Prj_NUM_REVIEW_STATUS];
|
||||||
extern const char *Txt_Assigned_QUESTION;
|
extern const char *Txt_Assigned_QUESTION;
|
||||||
extern const char *Txt_Yes;
|
extern const char *Txt_Yes;
|
||||||
extern const char *Txt_No;
|
extern const char *Txt_No;
|
||||||
|
@ -1395,7 +1399,7 @@ static void Prj_ShowProjectRow (struct Prj_Projects *Projects,
|
||||||
switch (ProjectView)
|
switch (ProjectView)
|
||||||
{
|
{
|
||||||
case Prj_LIST_PROJECTS:
|
case Prj_LIST_PROJECTS:
|
||||||
HTM_TD_Begin ("rowspan=\"3\" class=\"RT BIG_INDEX_%s %s\"",
|
HTM_TD_Begin ("rowspan=\"4\" class=\"RT BIG_INDEX_%s %s\"",
|
||||||
The_GetSuffix (),
|
The_GetSuffix (),
|
||||||
The_GetColorRows ());
|
The_GetColorRows ());
|
||||||
HTM_Unsigned (NumIndex);
|
HTM_Unsigned (NumIndex);
|
||||||
|
@ -1414,7 +1418,7 @@ static void Prj_ShowProjectRow (struct Prj_Projects *Projects,
|
||||||
switch (ProjectView)
|
switch (ProjectView)
|
||||||
{
|
{
|
||||||
case Prj_LIST_PROJECTS:
|
case Prj_LIST_PROJECTS:
|
||||||
HTM_TD_Begin ("rowspan=\"3\" class=\"CONTEXT_COL %s\"",
|
HTM_TD_Begin ("rowspan=\"4\" class=\"CONTEXT_COL %s\"",
|
||||||
The_GetColorRows ());
|
The_GetColorRows ());
|
||||||
Prj_PutIconsToRemEditOnePrj (Projects,Anchor);
|
Prj_PutIconsToRemEditOnePrj (Projects,Anchor);
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
|
@ -1505,8 +1509,51 @@ static void Prj_ShowProjectRow (struct Prj_Projects *Projects,
|
||||||
/* Department */
|
/* Department */
|
||||||
Prj_ShowOneProjectDepartment (&Projects->Prj,ProjectView);
|
Prj_ShowOneProjectDepartment (&Projects->Prj,ProjectView);
|
||||||
|
|
||||||
/***** Assigned? *****/
|
HTM_TR_End ();
|
||||||
HTM_TR_Begin (NULL);
|
|
||||||
|
/***** Review status *****/
|
||||||
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
|
switch (ProjectView)
|
||||||
|
{
|
||||||
|
case Prj_LIST_PROJECTS:
|
||||||
|
HTM_TD_Begin ("colspan=\"2\" class=\"RT %s_%s %s\"",
|
||||||
|
ClassLabel,The_GetSuffix (),The_GetColorRows ());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
HTM_TD_Begin ("colspan=\"2\" class=\"RT %s_%s\"",
|
||||||
|
ClassLabel,The_GetSuffix ());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
HTM_TxtColon (Txt_Review);
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
switch (ProjectView)
|
||||||
|
{
|
||||||
|
case Prj_LIST_PROJECTS:
|
||||||
|
HTM_TD_Begin ("colspan=\"2\" class=\"LT %s_%s %s\"",
|
||||||
|
ClassData,The_GetSuffix (),The_GetColorRows ());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
HTM_TD_Begin ("colspan=\"2\" class=\"LT %s_%s\"",
|
||||||
|
ClassData,The_GetSuffix ());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
HTM_TxtF ("%s ",Txt_PROJECT_REVIEW_SINGUL[Projects->Prj.ReviewStatus]);
|
||||||
|
Ico_PutIconOff (ReviewIcon[Projects->Prj.ReviewStatus].Icon,
|
||||||
|
ReviewIcon[Projects->Prj.ReviewStatus].Color,
|
||||||
|
Txt_PROJECT_REVIEW_SINGUL[Projects->Prj.ReviewStatus]);
|
||||||
|
/*
|
||||||
|
if (Faults.WrongAssigned)
|
||||||
|
Prj_PutWarningIcon ();
|
||||||
|
*/
|
||||||
|
|
||||||
|
HTM_TD_End ();
|
||||||
|
|
||||||
|
HTM_TR_End ();
|
||||||
|
|
||||||
|
/***** Assigned? *****/
|
||||||
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
switch (ProjectView)
|
switch (ProjectView)
|
||||||
{
|
{
|
||||||
|
@ -1535,7 +1582,7 @@ static void Prj_ShowProjectRow (struct Prj_Projects *Projects,
|
||||||
}
|
}
|
||||||
HTM_TxtF ("%s ",Projects->Prj.Assigned == Prj_ASSIGNED ? Txt_Yes :
|
HTM_TxtF ("%s ",Projects->Prj.Assigned == Prj_ASSIGNED ? Txt_Yes :
|
||||||
Txt_No);
|
Txt_No);
|
||||||
Ico_PutIconOff (AssignedNonassigImage[Projects->Prj.Assigned],Ico_BLACK,
|
Ico_PutIconOff (AssignedNonassigIcon[Projects->Prj.Assigned],Ico_BLACK,
|
||||||
Txt_PROJECT_ASSIGNED_NONASSIGNED_SINGUL[Projects->Prj.Assigned]);
|
Txt_PROJECT_ASSIGNED_NONASSIGNED_SINGUL[Projects->Prj.Assigned]);
|
||||||
|
|
||||||
if (Faults.WrongAssigned)
|
if (Faults.WrongAssigned)
|
||||||
|
@ -1924,7 +1971,6 @@ static void Prj_ShowOneProjectDepartment (const struct Prj_Project *Prj,
|
||||||
if (PutLink)
|
if (PutLink)
|
||||||
HTM_A_End ();
|
HTM_A_End ();
|
||||||
HTM_TD_End ();
|
HTM_TD_End ();
|
||||||
HTM_TR_End ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Prj_ShowTableAllProjectsDepartment (const struct Prj_Project *Prj)
|
static void Prj_ShowTableAllProjectsDepartment (const struct Prj_Project *Prj)
|
||||||
|
@ -2999,9 +3045,11 @@ static void Prj_GetListProjects (struct Prj_Projects *Projects)
|
||||||
void Prj_GetDataOfProjectByCod (struct Prj_Project *Prj)
|
void Prj_GetDataOfProjectByCod (struct Prj_Project *Prj)
|
||||||
{
|
{
|
||||||
extern const char *Prj_Proposal_DB[Prj_NUM_PROPOSAL_TYPES];
|
extern const char *Prj_Proposal_DB[Prj_NUM_PROPOSAL_TYPES];
|
||||||
|
extern const char *Prj_ReviewStatus_DB[Prj_NUM_REVIEW_STATUS];
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
Prj_Proposal_t Proposal;
|
Prj_Proposal_t Proposal;
|
||||||
|
Prj_ReviewStatus_t ReviewStatus;
|
||||||
|
|
||||||
if (Prj->PrjCod > 0)
|
if (Prj->PrjCod > 0)
|
||||||
{
|
{
|
||||||
|
@ -3057,6 +3105,20 @@ void Prj_GetDataOfProjectByCod (struct Prj_Project *Prj)
|
||||||
Str_Copy (Prj->Knowledge ,row[12],Cns_MAX_BYTES_TEXT);
|
Str_Copy (Prj->Knowledge ,row[12],Cns_MAX_BYTES_TEXT);
|
||||||
Str_Copy (Prj->Materials ,row[13],Cns_MAX_BYTES_TEXT);
|
Str_Copy (Prj->Materials ,row[13],Cns_MAX_BYTES_TEXT);
|
||||||
Str_Copy (Prj->URL ,row[14],sizeof (Prj->URL ) - 1);
|
Str_Copy (Prj->URL ,row[14],sizeof (Prj->URL ) - 1);
|
||||||
|
|
||||||
|
/* Get review status (row[15]), review time (row[16])
|
||||||
|
and review text (row[17]) */
|
||||||
|
Prj->ReviewStatus = Prj_REVIEW_STATUS_DEFAULT;
|
||||||
|
for (ReviewStatus = (Prj_ReviewStatus_t) 0;
|
||||||
|
ReviewStatus <= (Prj_ReviewStatus_t) (Prj_NUM_REVIEW_STATUS - 1);
|
||||||
|
ReviewStatus++)
|
||||||
|
if (!strcmp (Prj_ReviewStatus_DB[Proposal],row[15]))
|
||||||
|
{
|
||||||
|
Prj->ReviewStatus = ReviewStatus;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Prj->ReviewTime = Dat_GetUNIXTimeFromStr (row[16]);
|
||||||
|
Str_Copy (Prj->ReviewTxt ,row[17],Cns_MAX_BYTES_TEXT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Free structure that stores the query result *****/
|
/***** Free structure that stores the query result *****/
|
||||||
|
@ -3092,6 +3154,10 @@ static void Prj_ResetProject (struct Prj_Project *Prj)
|
||||||
Prj->Knowledge[0] = '\0';
|
Prj->Knowledge[0] = '\0';
|
||||||
Prj->Materials[0] = '\0';
|
Prj->Materials[0] = '\0';
|
||||||
Prj->URL[0] = '\0';
|
Prj->URL[0] = '\0';
|
||||||
|
|
||||||
|
Prj->ReviewStatus = Prj_REVIEW_STATUS_DEFAULT;
|
||||||
|
Prj->ReviewTime = (time_t) 0;
|
||||||
|
Prj->ReviewTxt[0] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -3620,6 +3686,9 @@ void Prj_AllocMemProject (struct Prj_Project *Prj)
|
||||||
|
|
||||||
if ((Prj->Materials = malloc (Cns_MAX_BYTES_TEXT + 1)) == NULL)
|
if ((Prj->Materials = malloc (Cns_MAX_BYTES_TEXT + 1)) == NULL)
|
||||||
Err_NotEnoughMemoryExit ();
|
Err_NotEnoughMemoryExit ();
|
||||||
|
|
||||||
|
if ((Prj->ReviewTxt = malloc (Cns_MAX_BYTES_TEXT + 1)) == NULL)
|
||||||
|
Err_NotEnoughMemoryExit ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -3643,6 +3712,11 @@ void Prj_FreeMemProject (struct Prj_Project *Prj)
|
||||||
free (Prj->Materials);
|
free (Prj->Materials);
|
||||||
Prj->Materials = NULL;
|
Prj->Materials = NULL;
|
||||||
}
|
}
|
||||||
|
if (Prj->ReviewTxt)
|
||||||
|
{
|
||||||
|
free (Prj->ReviewTxt);
|
||||||
|
Prj->ReviewTxt = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -91,6 +91,7 @@ typedef enum
|
||||||
Prj_UNAPPROVED = 1,
|
Prj_UNAPPROVED = 1,
|
||||||
Prj_APPROVED = 2,
|
Prj_APPROVED = 2,
|
||||||
} Prj_ReviewStatus_t;
|
} Prj_ReviewStatus_t;
|
||||||
|
#define Prj_REVIEW_STATUS_DEFAULT Prj_UNREVIEWED
|
||||||
#define Prj_FILTER_UNREVIEWED_DEFAULT (1 << Prj_UNREVIEWED) // on
|
#define Prj_FILTER_UNREVIEWED_DEFAULT (1 << Prj_UNREVIEWED) // on
|
||||||
#define Prj_FILTER_UNAPPROVED_DEFAULT (1 << Prj_UNAPPROVED) // on
|
#define Prj_FILTER_UNAPPROVED_DEFAULT (1 << Prj_UNAPPROVED) // on
|
||||||
#define Prj_FILTER_APPROVED_DEFAULT (1 << Prj_APPROVED) // on
|
#define Prj_FILTER_APPROVED_DEFAULT (1 << Prj_APPROVED) // on
|
||||||
|
@ -163,6 +164,9 @@ struct Prj_Project
|
||||||
char *Knowledge;
|
char *Knowledge;
|
||||||
char *Materials;
|
char *Materials;
|
||||||
char URL[Cns_MAX_BYTES_WWW + 1];
|
char URL[Cns_MAX_BYTES_WWW + 1];
|
||||||
|
Prj_ReviewStatus_t ReviewStatus;
|
||||||
|
time_t ReviewTime;
|
||||||
|
char *ReviewTxt;
|
||||||
};
|
};
|
||||||
|
|
||||||
/***** Struct to store context/status of projects *****/
|
/***** Struct to store context/status of projects *****/
|
||||||
|
|
|
@ -52,6 +52,14 @@ const char *Prj_Proposal_DB[Prj_NUM_PROPOSAL_TYPES] =
|
||||||
[Prj_PROPOSAL_UNMODIFIED] = "unmodified",
|
[Prj_PROPOSAL_UNMODIFIED] = "unmodified",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/***** Enum field in database for review status *****/
|
||||||
|
const char *Prj_ReviewStatus_DB[Prj_NUM_REVIEW_STATUS] =
|
||||||
|
{
|
||||||
|
[Prj_UNREVIEWED] = "unreviewed",
|
||||||
|
[Prj_UNAPPROVED] = "unapproved",
|
||||||
|
[Prj_APPROVED ] = "approved",
|
||||||
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/************ Update configuration of projects for current course ************/
|
/************ Update configuration of projects for current course ************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -109,11 +117,13 @@ long Prj_DB_CreateProject (const struct Prj_Project *Prj)
|
||||||
"INSERT INTO prj_projects"
|
"INSERT INTO prj_projects"
|
||||||
" (CrsCod,DptCod,Hidden,Assigned,NumStds,Proposal,"
|
" (CrsCod,DptCod,Hidden,Assigned,NumStds,Proposal,"
|
||||||
"CreatTime,ModifTime,"
|
"CreatTime,ModifTime,"
|
||||||
"Title,Description,Knowledge,Materials,URL)"
|
"Title,Description,Knowledge,Materials,URL,"
|
||||||
|
"ReviewStatus,ReviewTime,ReviewTxt)"
|
||||||
" VALUES"
|
" VALUES"
|
||||||
" (%ld,%ld,'%c','%c',%u,'%s',"
|
" (%ld,%ld,'%c','%c',%u,'%s',"
|
||||||
"FROM_UNIXTIME(%ld),FROM_UNIXTIME(%ld),"
|
"FROM_UNIXTIME(%ld),FROM_UNIXTIME(%ld),"
|
||||||
"'%s','%s','%s','%s','%s')",
|
"'%s','%s','%s','%s','%s',"
|
||||||
|
"'%s',FROM_UNIXTIME(%ld),'%s')",
|
||||||
Gbl.Hierarchy.Crs.CrsCod,
|
Gbl.Hierarchy.Crs.CrsCod,
|
||||||
Prj->DptCod,
|
Prj->DptCod,
|
||||||
Prj->Hidden == Prj_HIDDEN ? 'Y' :
|
Prj->Hidden == Prj_HIDDEN ? 'Y' :
|
||||||
|
@ -128,7 +138,10 @@ long Prj_DB_CreateProject (const struct Prj_Project *Prj)
|
||||||
Prj->Description,
|
Prj->Description,
|
||||||
Prj->Knowledge,
|
Prj->Knowledge,
|
||||||
Prj->Materials,
|
Prj->Materials,
|
||||||
Prj->URL);
|
Prj->URL,
|
||||||
|
Prj_ReviewStatus_DB[Prj->ReviewStatus],
|
||||||
|
Prj->ReviewTime,
|
||||||
|
Prj->ReviewTxt);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -283,30 +296,42 @@ unsigned Prj_DB_GetListProjects (MYSQL_RES **mysql_res,
|
||||||
switch (Projects->Filter.Review)
|
switch (Projects->Filter.Review)
|
||||||
{
|
{
|
||||||
case (1 << Prj_UNREVIEWED): // Unreviewed projects
|
case (1 << Prj_UNREVIEWED): // Unreviewed projects
|
||||||
if (asprintf (&AssignSubQuery," AND prj_projects.ReviewStatus='unreviewed'") < 0)
|
if (asprintf (&AssignSubQuery," AND prj_projects.ReviewStatus='%s'",
|
||||||
|
Prj_ReviewStatus_DB[Prj_UNREVIEWED]) < 0)
|
||||||
Err_NotEnoughMemoryExit ();
|
Err_NotEnoughMemoryExit ();
|
||||||
break;
|
break;
|
||||||
case (1 << Prj_UNAPPROVED): // Unapproved projects
|
case (1 << Prj_UNAPPROVED): // Unapproved projects
|
||||||
if (asprintf (&AssignSubQuery," AND prj_projects.ReviewStatus='unapproved'") < 0)
|
if (asprintf (&AssignSubQuery," AND prj_projects.ReviewStatus='%s'",
|
||||||
|
Prj_ReviewStatus_DB[Prj_UNAPPROVED]) < 0)
|
||||||
Err_NotEnoughMemoryExit ();
|
Err_NotEnoughMemoryExit ();
|
||||||
break;
|
break;
|
||||||
case (1 << Prj_APPROVED): // Approved projects
|
case (1 << Prj_APPROVED): // Approved projects
|
||||||
if (asprintf (&AssignSubQuery," AND prj_projects.ReviewStatus='approved'") < 0)
|
if (asprintf (&AssignSubQuery," AND prj_projects.ReviewStatus='%s'",
|
||||||
|
Prj_ReviewStatus_DB[Prj_APPROVED ]) < 0)
|
||||||
Err_NotEnoughMemoryExit ();
|
Err_NotEnoughMemoryExit ();
|
||||||
break;
|
break;
|
||||||
case (1 << Prj_UNREVIEWED | 1 << Prj_UNAPPROVED): // Unreviewed and unapproved projects
|
case (1 << Prj_UNREVIEWED |
|
||||||
if (asprintf (&AssignSubQuery," AND prj_projects.ReviewStatus IN ('unreviewed','unapproved')") < 0)
|
1 << Prj_UNAPPROVED): // Unreviewed and unapproved projects
|
||||||
|
if (asprintf (&AssignSubQuery," AND prj_projects.ReviewStatus IN ('%s','%s')",
|
||||||
|
Prj_ReviewStatus_DB[Prj_UNREVIEWED],
|
||||||
|
Prj_ReviewStatus_DB[Prj_UNAPPROVED]) < 0)
|
||||||
Err_NotEnoughMemoryExit ();
|
Err_NotEnoughMemoryExit ();
|
||||||
break;
|
break;
|
||||||
case (1 << Prj_UNREVIEWED | 1 << Prj_APPROVED): // Unreviewed and approved projects
|
case (1 << Prj_UNREVIEWED |
|
||||||
if (asprintf (&AssignSubQuery," AND prj_projects.ReviewStatus IN ('unreviewed','approved')") < 0)
|
1 << Prj_APPROVED): // Unreviewed and approved projects
|
||||||
|
if (asprintf (&AssignSubQuery," AND prj_projects.ReviewStatus IN ('%s','%s')",
|
||||||
|
Prj_ReviewStatus_DB[Prj_UNREVIEWED],
|
||||||
|
Prj_ReviewStatus_DB[Prj_APPROVED ]) < 0)
|
||||||
Err_NotEnoughMemoryExit ();
|
Err_NotEnoughMemoryExit ();
|
||||||
break;
|
break;
|
||||||
case (1 << Prj_UNAPPROVED | 1 << Prj_APPROVED): // Unapproved and approved projects
|
case (1 << Prj_UNAPPROVED |
|
||||||
if (asprintf (&AssignSubQuery," AND prj_projects.ReviewStatus IN ('unapproved','approved')") < 0)
|
1 << Prj_APPROVED): // Unapproved and approved projects
|
||||||
|
if (asprintf (&AssignSubQuery," AND prj_projects.ReviewStatus IN ('%s','%s')",
|
||||||
|
Prj_ReviewStatus_DB[Prj_UNAPPROVED],
|
||||||
|
Prj_ReviewStatus_DB[Prj_APPROVED ]) < 0)
|
||||||
Err_NotEnoughMemoryExit ();
|
Err_NotEnoughMemoryExit ();
|
||||||
break;
|
break;
|
||||||
default: // All projects
|
default: // All projects
|
||||||
if (asprintf (&AssignSubQuery,"%s","") < 0)
|
if (asprintf (&AssignSubQuery,"%s","") < 0)
|
||||||
Err_NotEnoughMemoryExit ();
|
Err_NotEnoughMemoryExit ();
|
||||||
break;
|
break;
|
||||||
|
@ -525,7 +550,10 @@ unsigned Prj_DB_GetDataOfProjectByCod (MYSQL_RES **mysql_res,long PrjCod)
|
||||||
"Description," // row[11]
|
"Description," // row[11]
|
||||||
"Knowledge," // row[12]
|
"Knowledge," // row[12]
|
||||||
"Materials," // row[13]
|
"Materials," // row[13]
|
||||||
"URL" // row[14]
|
"URL," // row[14]
|
||||||
|
"ReviewStatus," // row[15]
|
||||||
|
"UNIX_TIMESTAMP(ReviewTime)," // row[16]
|
||||||
|
"ReviewTxt" // row[17]
|
||||||
" FROM prj_projects"
|
" FROM prj_projects"
|
||||||
" WHERE PrjCod=%ld"
|
" WHERE PrjCod=%ld"
|
||||||
" AND CrsCod=%ld", // Extra check
|
" AND CrsCod=%ld", // Extra check
|
||||||
|
|
99
swad_text.c
99
swad_text.c
|
@ -2469,7 +2469,7 @@ const char *Txt_Assigned_QUESTION =
|
||||||
#elif L==9 // pt
|
#elif L==9 // pt
|
||||||
"Atribuído?";
|
"Atribuído?";
|
||||||
#elif L==10 // tr
|
#elif L==10 // tr
|
||||||
"Assigned?"; // Çeviri lazim!
|
"Atandı mı?";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char *Txt_Assignment =
|
const char *Txt_Assignment =
|
||||||
|
@ -32970,7 +32970,79 @@ const char *Txt_PROJECT_FAULTY_FAULTLESS_PROJECTS[Prj_NUM_FAULTINESS] =
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *Txt_PROJECT_REVIEWED_PROJECTS[Prj_NUM_REVIEW_STATUS] =
|
const char *Txt_PROJECT_REVIEW_PLURAL[Prj_NUM_REVIEW_STATUS] =
|
||||||
|
{
|
||||||
|
[Prj_UNREVIEWED] =
|
||||||
|
#if L==1 // ca
|
||||||
|
"Projectes sense revisar"
|
||||||
|
#elif L==2 // de
|
||||||
|
"Ungeprüfte Projekte"
|
||||||
|
#elif L==3 // en
|
||||||
|
"Unreviewed projects"
|
||||||
|
#elif L==4 // es
|
||||||
|
"Proyectos sin revisar"
|
||||||
|
#elif L==5 // fr
|
||||||
|
"Projets non revus"
|
||||||
|
#elif L==6 // gn
|
||||||
|
"Proyectos sin revisar" // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"Progetti non recensiti"
|
||||||
|
#elif L==8 // pl
|
||||||
|
"Niesprawdzone projekty"
|
||||||
|
#elif L==9 // pt
|
||||||
|
"Projetos não revisados"
|
||||||
|
#elif L==10 // tr
|
||||||
|
"İncelenmemiş projeler"
|
||||||
|
#endif
|
||||||
|
,
|
||||||
|
[Prj_UNAPPROVED] =
|
||||||
|
#if L==1 // ca
|
||||||
|
"Projectes sense aprovar"
|
||||||
|
#elif L==2 // de
|
||||||
|
"Nicht genehmigte Projekte"
|
||||||
|
#elif L==3 // en
|
||||||
|
"Unapproved projects"
|
||||||
|
#elif L==4 // es
|
||||||
|
"Proyectos sin aprobar"
|
||||||
|
#elif L==5 // fr
|
||||||
|
"Projets non approuvés"
|
||||||
|
#elif L==6 // gn
|
||||||
|
"Proyectos sin aprobar" // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"Progetti non approvati"
|
||||||
|
#elif L==8 // pl
|
||||||
|
"Niezatwierdzone projekty"
|
||||||
|
#elif L==9 // pt
|
||||||
|
"Projetos não aprovados"
|
||||||
|
#elif L==10 // tr
|
||||||
|
"Onaylanmamış projeler"
|
||||||
|
#endif
|
||||||
|
,
|
||||||
|
[Prj_APPROVED] =
|
||||||
|
#if L==1 // ca
|
||||||
|
"Projectes aprovats"
|
||||||
|
#elif L==2 // de
|
||||||
|
"Genehmigte Projekte"
|
||||||
|
#elif L==3 // en
|
||||||
|
"Approved projects"
|
||||||
|
#elif L==4 // es
|
||||||
|
"Proyectos aprobados"
|
||||||
|
#elif L==5 // fr
|
||||||
|
"Projets approuvés"
|
||||||
|
#elif L==6 // gn
|
||||||
|
"Proyectos aprobados" // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"Progetti approvati"
|
||||||
|
#elif L==8 // pl
|
||||||
|
"Zatwierdzone projekty"
|
||||||
|
#elif L==9 // pt
|
||||||
|
"Projetos aprovados"
|
||||||
|
#elif L==10 // tr
|
||||||
|
"Onaylanmış projeler"
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *Txt_PROJECT_REVIEW_SINGUL[Prj_NUM_REVIEW_STATUS] =
|
||||||
{
|
{
|
||||||
[Prj_UNREVIEWED] =
|
[Prj_UNREVIEWED] =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
|
@ -36252,6 +36324,29 @@ const char *Txt_Retype_new_password =
|
||||||
"Yeni şifrenizi tekrar yazınız";
|
"Yeni şifrenizi tekrar yazınız";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_Review =
|
||||||
|
#if L==1 // ca
|
||||||
|
"Revisió";
|
||||||
|
#elif L==2 // de
|
||||||
|
"Überprüfungs";
|
||||||
|
#elif L==3 // en
|
||||||
|
"Review";
|
||||||
|
#elif L==4 // es
|
||||||
|
"Revisión";
|
||||||
|
#elif L==5 // fr
|
||||||
|
"Examen";
|
||||||
|
#elif L==6 // gn
|
||||||
|
"Revisión"; // Okoteve traducción
|
||||||
|
#elif L==7 // it
|
||||||
|
"Revisione";
|
||||||
|
#elif L==8 // pl
|
||||||
|
"Recenzja";
|
||||||
|
#elif L==9 // pt
|
||||||
|
"Revisão";
|
||||||
|
#elif L==10 // tr
|
||||||
|
"Gözden geçir";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_Role =
|
const char *Txt_Role =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Rol";
|
"Rol";
|
||||||
|
|
Loading…
Reference in New Issue