Version 16.227

This commit is contained in:
Antonio Cañas Vargas 2017-05-30 02:17:33 +02:00
parent 69843d2b20
commit e5e2225495
4 changed files with 141 additions and 82 deletions

View File

@ -235,13 +235,14 @@
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 16.226.1 (2017-05-29)" #define Log_PLATFORM_VERSION "SWAD 16.227 (2017-05-30)"
#define CSS_FILE "swad16.226.css" #define CSS_FILE "swad16.226.css"
#define JS_FILE "swad16.206.3.js" #define JS_FILE "swad16.206.3.js"
// Number of lines (includes comments but not blank lines) has been got with the following command: // 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 // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1
/* /*
Version 16.227: May 30, 2017 Changes in selector or roles in record cards. (220694 lines)
Version 16.226.1: May 29, 2017 Changes in contextual links related to users enrolment. (220637 lines) Version 16.226.1: May 29, 2017 Changes in contextual links related to users enrolment. (220637 lines)
Version 16.226: May 29, 2017 Code refactoring in buttons. (220607 lines) Version 16.226: May 29, 2017 Code refactoring in buttons. (220607 lines)
Version 16.225.12:May 29, 2017 Button to register students in connected and requests. (220587 lines) Version 16.225.12:May 29, 2017 Button to register students in connected and requests. (220587 lines)

View File

@ -1952,7 +1952,7 @@ void Enr_ReqSignUpInCrs (void)
else if (Gbl.Usrs.Me.LoggedRole == Rol_GST || else if (Gbl.Usrs.Me.LoggedRole == Rol_GST ||
Gbl.Usrs.Me.LoggedRole == Rol_USR) Gbl.Usrs.Me.LoggedRole == Rol_USR)
/***** Show form to modify only the user's role or the user's data *****/ /***** Show form to modify only the user's role or the user's data *****/
Rec_ShowFormSignUpWithMySharedRecord (); Rec_ShowFormSignUpInCrsWithMySharedRecord ();
else else
Lay_ShowErrorAndExit ("You must be logged to sign up in a course."); // This never should happen Lay_ShowErrorAndExit ("You must be logged to sign up in a course."); // This never should happen
} }

View File

@ -2105,15 +2105,10 @@ static bool Rec_CheckIfICanEditField (Rec_VisibilityRecordFields_t Visibility)
/*********** Show form to sign up and edit my shared record card *************/ /*********** Show form to sign up and edit my shared record card *************/
/*****************************************************************************/ /*****************************************************************************/
void Rec_ShowFormSignUpWithMySharedRecord (void) void Rec_ShowFormSignUpInCrsWithMySharedRecord (void)
{ {
extern const char *Txt_Sign_up;
/***** Show the form *****/ /***** Show the form *****/
Act_FormStart (ActSignUp); Rec_ShowSharedUsrRecord (Rec_SHA_SIGN_UP_IN_CRS_FORM,&Gbl.Usrs.Me.UsrDat,NULL);
Rec_ShowSharedUsrRecord (Rec_SHA_SIGN_UP_FORM,&Gbl.Usrs.Me.UsrDat,NULL);
Lay_PutConfirmButton (Txt_Sign_up);
Act_FormEnd ();
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2212,12 +2207,13 @@ void Rec_ShowSharedUsrRecord (Rec_SharedRecordViewType_t TypeOfView,
extern const char *Hlp_USERS_Students_shared_record_card; extern const char *Hlp_USERS_Students_shared_record_card;
extern const char *Hlp_USERS_Teachers_shared_record_card; extern const char *Hlp_USERS_Teachers_shared_record_card;
extern const char *The_ClassForm[The_NUM_THEMES]; extern const char *The_ClassForm[The_NUM_THEMES];
extern const char *Txt_Sign_up;
extern const char *Txt_Save_changes; extern const char *Txt_Save_changes;
extern const char *Txt_Register; extern const char *Txt_Register;
extern const char *Txt_Confirm; extern const char *Txt_Confirm;
const char *Rec_RecordHelp[Rec_SHARED_NUM_VIEW_TYPES] = const char *Rec_RecordHelp[Rec_SHARED_NUM_VIEW_TYPES] =
{ {
Hlp_USERS_SignUp, // Rec_SHA_SIGN_UP_FORM Hlp_USERS_SignUp, // Rec_SHA_SIGN_UP_IN_CRS_FORM
Hlp_PROFILE_Record, // Rec_SHA_MY_RECORD_FORM Hlp_PROFILE_Record, // Rec_SHA_MY_RECORD_FORM
Hlp_PROFILE_Record, // Rec_SHA_MY_RECORD_CHECK Hlp_PROFILE_Record, // Rec_SHA_MY_RECORD_CHECK
@ -2301,7 +2297,7 @@ void Rec_ShowSharedUsrRecord (Rec_SharedRecordViewType_t TypeOfView,
case Rec_SHA_OTHER_EXISTING_USR_FORM: case Rec_SHA_OTHER_EXISTING_USR_FORM:
ICanEdit = Usr_ICanChangeOtherUsrData (UsrDat); ICanEdit = Usr_ICanChangeOtherUsrData (UsrDat);
break; break;
default: // In other options, I can not edit another user's data default: // In other options, I can not edit user's data
ICanEdit = false; ICanEdit = false;
break; break;
} }
@ -2309,7 +2305,7 @@ void Rec_ShowSharedUsrRecord (Rec_SharedRecordViewType_t TypeOfView,
/* Class for labels */ /* Class for labels */
switch (TypeOfView) switch (TypeOfView)
{ {
case Rec_SHA_SIGN_UP_FORM: case Rec_SHA_SIGN_UP_IN_CRS_FORM:
case Rec_SHA_MY_RECORD_FORM: case Rec_SHA_MY_RECORD_FORM:
case Rec_SHA_OTHER_NEW_USR_FORM: case Rec_SHA_OTHER_NEW_USR_FORM:
case Rec_SHA_OTHER_EXISTING_USR_FORM: case Rec_SHA_OTHER_EXISTING_USR_FORM:
@ -2389,9 +2385,31 @@ void Rec_ShowSharedUsrRecord (Rec_SharedRecordViewType_t TypeOfView,
/***** Start form *****/ /***** Start form *****/
switch (TypeOfView) switch (TypeOfView)
{ {
case Rec_SHA_SIGN_UP_IN_CRS_FORM:
Act_FormStart (ActSignUp);
break;
case Rec_SHA_MY_RECORD_FORM: case Rec_SHA_MY_RECORD_FORM:
Act_FormStart (ActChgMyData); Act_FormStart (ActChgMyData);
break; break;
case Rec_SHA_OTHER_EXISTING_USR_FORM:
switch (Gbl.Action.Act)
{
case ActReqMdfStd:
NextAction = ActUpdStd;
break;
case ActReqMdfNET:
NextAction = ActUpdNET;
break;
case ActReqMdfTch:
NextAction = ActUpdTch;
break;
default:
NextAction = ActUpdOth;
break;
}
Act_FormStart (NextAction);
Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); // Existing user
break;
case Rec_SHA_OTHER_NEW_USR_FORM: case Rec_SHA_OTHER_NEW_USR_FORM:
switch (Gbl.Action.Act) switch (Gbl.Action.Act)
{ {
@ -2411,25 +2429,6 @@ void Rec_ShowSharedUsrRecord (Rec_SharedRecordViewType_t TypeOfView,
Act_FormStart (NextAction); Act_FormStart (NextAction);
ID_PutParamOtherUsrIDPlain (); // New user ID_PutParamOtherUsrIDPlain (); // New user
break; break;
case Rec_SHA_OTHER_EXISTING_USR_FORM:
switch (UsrDat->RoleInCurrentCrsDB)
{
case Rol_STD:
NextAction = ActUpdStd;
break;
case Rol_NET:
NextAction = ActUpdNET;
break;
case Rol_TCH:
NextAction = ActUpdTch;
break;
default: // Guest, user or admin
NextAction = ActUpdOth;
break;
}
Act_FormStart (NextAction);
Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); // Existing user
break;
default: default:
break; break;
} }
@ -2498,6 +2497,10 @@ void Rec_ShowSharedUsrRecord (Rec_SharedRecordViewType_t TypeOfView,
/***** Button and end form *****/ /***** Button and end form *****/
switch (TypeOfView) switch (TypeOfView)
{ {
case Rec_SHA_SIGN_UP_IN_CRS_FORM:
Lay_PutConfirmButton (Txt_Sign_up);
Act_FormEnd ();
break;
case Rec_SHA_MY_RECORD_FORM: case Rec_SHA_MY_RECORD_FORM:
Lay_PutConfirmButton (Txt_Save_changes); Lay_PutConfirmButton (Txt_Save_changes);
Act_FormEnd (); Act_FormEnd ();
@ -2970,16 +2973,17 @@ static void Rec_ShowRole (struct UsrData *UsrDat,
extern const char *Txt_Sex; extern const char *Txt_Sex;
extern const char *Txt_SEX_SINGULAR_Abc[Usr_NUM_SEXS]; extern const char *Txt_SEX_SINGULAR_Abc[Usr_NUM_SEXS];
extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
bool RoleForm = (TypeOfView == Rec_SHA_SIGN_UP_FORM || bool RoleForm = (TypeOfView == Rec_SHA_SIGN_UP_IN_CRS_FORM ||
TypeOfView == Rec_SHA_OTHER_NEW_USR_FORM || TypeOfView == Rec_SHA_OTHER_EXISTING_USR_FORM ||
TypeOfView == Rec_SHA_OTHER_EXISTING_USR_FORM); TypeOfView == Rec_SHA_OTHER_NEW_USR_FORM);
bool SexForm = (TypeOfView == Rec_SHA_MY_RECORD_FORM); bool SexForm = (TypeOfView == Rec_SHA_MY_RECORD_FORM);
Rol_Role_t DefaultRoleInCurrentCrs; Rol_Role_t DefaultRoleInForm;
Rol_Role_t Role; Rol_Role_t Role;
Usr_Sex_t Sex; Usr_Sex_t Sex;
if (RoleForm) if (RoleForm)
{ {
/***** Form to select a role *****/
/* Get user's roles if not got */ /* Get user's roles if not got */
Rol_GetRolesInAllCrssIfNotYetGot (UsrDat); Rol_GetRolesInAllCrssIfNotYetGot (UsrDat);
@ -2991,21 +2995,24 @@ static void Rec_ShowRole (struct UsrData *UsrDat,
ClassForm,Txt_Role); ClassForm,Txt_Role);
switch (TypeOfView) switch (TypeOfView)
{ {
case Rec_SHA_SIGN_UP_FORM: // I want to apply for enrolment case Rec_SHA_SIGN_UP_IN_CRS_FORM: // I want to apply for enrolment
/***** Set default role *****/
if (UsrDat->UsrCod == Gbl.CurrentCrs.Crs.RequesterUsrCod || // Creator of the course if (UsrDat->UsrCod == Gbl.CurrentCrs.Crs.RequesterUsrCod || // Creator of the course
(UsrDat->Roles & (1 << Rol_TCH))) // Teacher in other courses (UsrDat->Roles & (1 << Rol_TCH))) // Teacher in other courses
DefaultRoleInCurrentCrs = Rol_TCH; DefaultRoleInForm = Rol_TCH; // Request sign up as a teacher
else if ((UsrDat->Roles & (1 << Rol_NET))) // Non-editing teacher in other courses else if ((UsrDat->Roles & (1 << Rol_NET))) // Non-editing teacher in other courses
DefaultRoleInCurrentCrs = Rol_NET; DefaultRoleInForm = Rol_NET; // Request sign up as a non-editing teacher
else else
DefaultRoleInCurrentCrs = Rol_STD; DefaultRoleInForm = Rol_STD; // Request sign up as a student
/***** Selector of role *****/
fprintf (Gbl.F.Out,"<select id=\"Role\" name=\"Role\">"); fprintf (Gbl.F.Out,"<select id=\"Role\" name=\"Role\">");
for (Role = Rol_STD; for (Role = Rol_STD;
Role <= Rol_TCH; Role <= Rol_TCH;
Role++) Role++)
{ {
fprintf (Gbl.F.Out,"<option value=\"%u\"",(unsigned) Role); fprintf (Gbl.F.Out,"<option value=\"%u\"",(unsigned) Role);
if (Role == DefaultRoleInCurrentCrs) if (Role == DefaultRoleInForm)
fprintf (Gbl.F.Out," selected=\"selected\""); fprintf (Gbl.F.Out," selected=\"selected\"");
fprintf (Gbl.F.Out,">%s</option>", fprintf (Gbl.F.Out,">%s</option>",
Txt_ROLES_SINGUL_Abc[Role][UsrDat->Sex]); Txt_ROLES_SINGUL_Abc[Role][UsrDat->Sex]);
@ -3013,25 +3020,53 @@ static void Rec_ShowRole (struct UsrData *UsrDat,
fprintf (Gbl.F.Out,"</select>"); fprintf (Gbl.F.Out,"</select>");
break; break;
case Rec_SHA_OTHER_EXISTING_USR_FORM: // The other user already exists in the platform case Rec_SHA_OTHER_EXISTING_USR_FORM: // The other user already exists in the platform
fprintf (Gbl.F.Out,"<select id=\"Role\" name=\"Role\">"); if (Gbl.CurrentCrs.Crs.CrsCod > 0) // Course selected
if (Gbl.CurrentCrs.Crs.CrsCod > 0) // Course selected
{ {
if (UsrDat->RoleInCurrentCrsDB < Rol_STD) // The other user does not belong to current course /***** Set default role *****/
switch (UsrDat->RoleInCurrentCrsDB)
{ {
/* If there is a request of this user, default role is the requested role */ case Rol_STD: // Student in current course
if ((DefaultRoleInCurrentCrs = Rol_GetRequestedRole (UsrDat->UsrCod)) == Rol_UNK) case Rol_NET: // Non-editing teacher in current course
{ case Rol_TCH: // Teacher in current course
if ((UsrDat->Roles & (1 << Rol_TCH))) // Teacher in other courses DefaultRoleInForm = UsrDat->RoleInCurrentCrsDB;
DefaultRoleInCurrentCrs = Rol_TCH; default: // User does not belong to current course
else if ((UsrDat->Roles & (1 << Rol_NET))) // Non-editing teacher in other courses /* If there is a request of this user, default role is the requested role */
DefaultRoleInCurrentCrs = Rol_NET; DefaultRoleInForm = Rol_GetRequestedRole (UsrDat->UsrCod);
else
DefaultRoleInCurrentCrs = Rol_STD;
}
}
else
DefaultRoleInCurrentCrs = UsrDat->RoleInCurrentCrsDB;
switch (DefaultRoleInForm)
{
case Rol_STD: // Role requested: student
case Rol_NET: // Role requested: non-editing teacher
case Rol_TCH: // Role requested: teacher
break;
default: // No role requested
switch (Gbl.Action.Act)
{
case ActReqMdfStd:
DefaultRoleInForm = Rol_STD;
break;
case ActReqMdfNET:
DefaultRoleInForm = Rol_NET;
break;
case ActReqMdfTch:
DefaultRoleInForm = Rol_TCH;
break;
default:
if ((UsrDat->Roles & (1 << Rol_TCH))) // Teacher in other courses
DefaultRoleInForm = Rol_TCH;
else if ((UsrDat->Roles & (1 << Rol_NET))) // Non-editing teacher in other courses
DefaultRoleInForm = Rol_NET;
else
DefaultRoleInForm = Rol_STD;
break;
}
break;
}
break;
}
/***** Selector of role *****/
fprintf (Gbl.F.Out,"<select id=\"Role\" name=\"Role\">");
switch (Gbl.Usrs.Me.LoggedRole) switch (Gbl.Usrs.Me.LoggedRole)
{ {
case Rol_GST: case Rol_GST:
@ -3055,7 +3090,7 @@ static void Rec_ShowRole (struct UsrData *UsrDat,
Role++) Role++)
{ {
fprintf (Gbl.F.Out,"<option value=\"%u\"",(unsigned) Role); fprintf (Gbl.F.Out,"<option value=\"%u\"",(unsigned) Role);
if (Role == DefaultRoleInCurrentCrs) if (Role == DefaultRoleInForm)
fprintf (Gbl.F.Out," selected=\"selected\""); fprintf (Gbl.F.Out," selected=\"selected\"");
fprintf (Gbl.F.Out,">%s</option>", fprintf (Gbl.F.Out,">%s</option>",
Txt_ROLES_SINGUL_Abc[Role][UsrDat->Sex]); Txt_ROLES_SINGUL_Abc[Role][UsrDat->Sex]);
@ -3064,23 +3099,26 @@ static void Rec_ShowRole (struct UsrData *UsrDat,
default: // The rest of users can not register other users default: // The rest of users can not register other users
break; break;
} }
fprintf (Gbl.F.Out,"</select>");
} }
else // No course selected else // No course selected
{ {
DefaultRoleInCurrentCrs = (UsrDat->Roles & ((1 << Rol_STD) | /***** Set default role *****/
(1 << Rol_NET) | DefaultRoleInForm = (UsrDat->Roles & ((1 << Rol_STD) |
(1 << Rol_TCH))) ? Rol_USR : // If user belongs to any course (1 << Rol_NET) |
Rol_GST; // If user don't belong to any course (1 << Rol_TCH))) ? Rol_USR : // If user belongs to any course
fprintf (Gbl.F.Out,"<option value=\"%u\" selected=\"selected\"" Rol_GST; // If user don't belong to any course
" disabled=\"disabled\">%s</option>",
(unsigned) DefaultRoleInCurrentCrs, /***** Selector of role *****/
Txt_ROLES_SINGUL_Abc[DefaultRoleInCurrentCrs][UsrDat->Sex]); fprintf (Gbl.F.Out,"<select id=\"Role\" name=\"Role\">"
"<option value=\"%u\" selected=\"selected\""
" disabled=\"disabled\">%s</option>"
"</select>",
(unsigned) DefaultRoleInForm,
Txt_ROLES_SINGUL_Abc[DefaultRoleInForm][UsrDat->Sex]);
} }
fprintf (Gbl.F.Out,"</select>");
break; break;
case Rec_SHA_OTHER_NEW_USR_FORM: // The other user does not exist in platform case Rec_SHA_OTHER_NEW_USR_FORM: // The user does not exist in platform
fprintf (Gbl.F.Out,"<select id=\"Role\" name=\"Role\">");
if (Gbl.CurrentCrs.Crs.CrsCod > 0) // Course selected if (Gbl.CurrentCrs.Crs.CrsCod > 0) // Course selected
switch (Gbl.Usrs.Me.LoggedRole) switch (Gbl.Usrs.Me.LoggedRole)
{ {
@ -3089,36 +3127,54 @@ static void Rec_ShowRole (struct UsrData *UsrDat,
case Rol_CTR_ADM: case Rol_CTR_ADM:
case Rol_INS_ADM: case Rol_INS_ADM:
case Rol_SYS_ADM: case Rol_SYS_ADM:
/* In this case UsrDat->RoleInCurrentCrsDB /***** Set default role *****/
is not the current role in current course. switch (Gbl.Action.Act)
Instead it is initialized with the preferred role. */ {
DefaultRoleInCurrentCrs = UsrDat->RoleInCurrentCrsDB; case ActReqMdfStd:
DefaultRoleInForm = Rol_STD;
break;
case ActReqMdfNET:
DefaultRoleInForm = Rol_NET;
break;
case ActReqMdfTch:
DefaultRoleInForm = Rol_TCH;
break;
default:
DefaultRoleInForm = Rol_STD;
break;
}
/***** Selector of role *****/
fprintf (Gbl.F.Out,"<select id=\"Role\" name=\"Role\">");
for (Role = Rol_STD; for (Role = Rol_STD;
Role <= Rol_TCH; Role <= Rol_TCH;
Role++) Role++)
{ {
fprintf (Gbl.F.Out,"<option value=\"%u\"",(unsigned) Role); fprintf (Gbl.F.Out,"<option value=\"%u\"",(unsigned) Role);
if (Role == DefaultRoleInCurrentCrs) if (Role == DefaultRoleInForm)
fprintf (Gbl.F.Out," selected=\"selected\""); fprintf (Gbl.F.Out," selected=\"selected\"");
fprintf (Gbl.F.Out,">%s</option>", fprintf (Gbl.F.Out,">%s</option>",
Txt_ROLES_SINGUL_Abc[Role][Usr_SEX_UNKNOWN]); Txt_ROLES_SINGUL_Abc[Role][Usr_SEX_UNKNOWN]);
} }
fprintf (Gbl.F.Out,"</select>");
break; break;
default: // The rest of users can not register other users default: // The rest of users can not register other users
break; break;
} }
else // No course selected else // No course selected
switch (Gbl.Usrs.Me.LoggedRole) switch (Gbl.Usrs.Me.LoggedRole)
{ {
case Rol_SYS_ADM: case Rol_SYS_ADM:
fprintf (Gbl.F.Out,"<option value=\"%u\"" /***** Selector of role *****/
" selected=\"selected\">%s</option>", fprintf (Gbl.F.Out,"<select id=\"Role\" name=\"Role\">"
"<option value=\"%u\""
" selected=\"selected\">%s</option>"
"</select>",
(unsigned) Rol_GST,Txt_ROLES_SINGUL_Abc[Rol_GST][Usr_SEX_UNKNOWN]); (unsigned) Rol_GST,Txt_ROLES_SINGUL_Abc[Rol_GST][Usr_SEX_UNKNOWN]);
break; break;
default: // The rest of users can not register other users default: // The rest of users can not register other users
break; break;
} }
fprintf (Gbl.F.Out,"</select>");
break; break;
default: default:
break; break;
@ -3128,6 +3184,7 @@ static void Rec_ShowRole (struct UsrData *UsrDat,
} }
else if (SexForm) else if (SexForm)
{ {
/***** Form to select a sex *****/
fprintf (Gbl.F.Out,"<tr>" fprintf (Gbl.F.Out,"<tr>"
"<td class=\"REC_C1_BOT RIGHT_MIDDLE %s\">" "<td class=\"REC_C1_BOT RIGHT_MIDDLE %s\">"
"%s*:</td>" "%s*:</td>"
@ -3156,6 +3213,7 @@ static void Rec_ShowRole (struct UsrData *UsrDat,
"</tr>"); "</tr>");
} }
else // RoleForm == false, SexForm == false else // RoleForm == false, SexForm == false
/***** No form, only text *****/
fprintf (Gbl.F.Out,"<tr>" fprintf (Gbl.F.Out,"<tr>"
"<td class=\"REC_C1_BOT RIGHT_MIDDLE %s\">" "<td class=\"REC_C1_BOT RIGHT_MIDDLE %s\">"
"%s:" "%s:"

View File

@ -55,7 +55,7 @@
#define Rec_SHARED_NUM_VIEW_TYPES 9 #define Rec_SHARED_NUM_VIEW_TYPES 9
typedef enum typedef enum
{ {
Rec_SHA_SIGN_UP_FORM, Rec_SHA_SIGN_UP_IN_CRS_FORM,
Rec_SHA_MY_RECORD_FORM, Rec_SHA_MY_RECORD_FORM,
Rec_SHA_MY_RECORD_CHECK, Rec_SHA_MY_RECORD_CHECK,
@ -160,7 +160,7 @@ void Rec_RemoveFieldsCrsRecordAll (long UsrCod,Cns_QuietOrVerbose_t QuietOrVerbo
void Rec_AllocMemFieldsRecordsCrs (void); void Rec_AllocMemFieldsRecordsCrs (void);
void Rec_FreeMemFieldsRecordsCrs (void); void Rec_FreeMemFieldsRecordsCrs (void);
void Rec_ShowFormSignUpWithMySharedRecord (void); void Rec_ShowFormSignUpInCrsWithMySharedRecord (void);
void Rec_ShowFormMySharedRecord (void); void Rec_ShowFormMySharedRecord (void);
void Rec_ShowFormOtherNewSharedRecord (struct UsrData *UsrDat,Rol_Role_t DefaultRole); void Rec_ShowFormOtherNewSharedRecord (struct UsrData *UsrDat,Rol_Role_t DefaultRole);
void Rec_ShowMySharedRecordUpd (void); void Rec_ShowMySharedRecordUpd (void);