mirror of https://github.com/acanas/swad-core.git
Version 16.155.25
This commit is contained in:
parent
e524c33078
commit
08b4a8e03d
|
@ -1017,7 +1017,7 @@ CREATE TABLE IF NOT EXISTS surveys (
|
|||
UsrCod INT NOT NULL,
|
||||
StartTime DATETIME NOT NULL,
|
||||
EndTime DATETIME NOT NULL,
|
||||
Title VARCHAR(255) NOT NULL,
|
||||
Title VARCHAR(2047) NOT NULL,
|
||||
Txt TEXT NOT NULL,
|
||||
UNIQUE INDEX(SvyCod),
|
||||
INDEX(Scope,Cod));
|
||||
|
|
|
@ -209,13 +209,17 @@
|
|||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Log_PLATFORM_VERSION "SWAD 16.155.24 (2017-03-13)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 16.155.25 (2017-03-13)"
|
||||
#define CSS_FILE "swad16.147.css"
|
||||
#define JS_FILE "swad16.144.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 16.155.25:Mar 13, 2017 Adjusting size of database fields. (216995 lines)
|
||||
1 change necessary in database.
|
||||
ALTER TABLE surveys CHANGE COLUMN Title Title VARCHAR(2047) NOT NULL;
|
||||
|
||||
Version 16.155.24:Mar 13, 2017 Adjusting size of database fields. (216988 lines)
|
||||
2 changes necessary in database:
|
||||
ALTER TABLE social_comments CHANGE COLUMN ImageTitle ImageTitle VARCHAR(2047) NOT NULL;
|
||||
|
|
|
@ -202,7 +202,7 @@ mysql> DESCRIBE agendas;
|
|||
"EndTime DATETIME NOT NULL,"
|
||||
"Event VARCHAR(2047) NOT NULL," // Agd_MAX_BYTES_EVENT
|
||||
"Location VARCHAR(2047) NOT NULL," // Agd_MAX_BYTES_LOCATION
|
||||
"Txt TEXT NOT NULL,"
|
||||
"Txt TEXT NOT NULL," // Cns_MAX_BYTES_TEXT
|
||||
"UNIQUE INDEX(AgdCod),"
|
||||
"INDEX(UsrCod,Public,Hidden))");
|
||||
|
||||
|
@ -2100,13 +2100,13 @@ mysql> DESCRIBE sta_degrees;
|
|||
6 rows in set (0.00 sec)
|
||||
*/
|
||||
DB_CreateTable ("CREATE TABLE IF NOT EXISTS sta_degrees ("
|
||||
"DegCod INT NOT NULL DEFAULT -1,"
|
||||
"Sex ENUM ('unknown','female','male','all') NOT NULL DEFAULT 'all',"
|
||||
"NumStds INT NOT NULL,"
|
||||
"NumStdsWithPhoto INT NOT NULL,"
|
||||
"TimeAvgPhoto DATETIME NOT NULL,"
|
||||
"TimeToComputeAvgPhoto INT NOT NULL DEFAULT -1,"
|
||||
"UNIQUE INDEX(DegCod,Sex))");
|
||||
"DegCod INT NOT NULL DEFAULT -1,"
|
||||
"Sex ENUM ('unknown','female','male','all') NOT NULL DEFAULT 'all',"
|
||||
"NumStds INT NOT NULL,"
|
||||
"NumStdsWithPhoto INT NOT NULL,"
|
||||
"TimeAvgPhoto DATETIME NOT NULL,"
|
||||
"TimeToComputeAvgPhoto INT NOT NULL DEFAULT -1,"
|
||||
"UNIQUE INDEX(DegCod,Sex))");
|
||||
|
||||
/***** Table sta_notif *****/
|
||||
/*
|
||||
|
@ -2123,12 +2123,12 @@ mysql> DESCRIBE sta_notif;
|
|||
5 rows in set (0.00 sec)
|
||||
*/
|
||||
DB_CreateTable ("CREATE TABLE IF NOT EXISTS sta_notif ("
|
||||
"DegCod INT NOT NULL,"
|
||||
"CrsCod INT NOT NULL,"
|
||||
"NotifyEvent TINYINT NOT NULL,"
|
||||
"NumEvents INT NOT NULL,"
|
||||
"NumMails INT NOT NULL,"
|
||||
"UNIQUE INDEX(DegCod,CrsCod,NotifyEvent))");
|
||||
"DegCod INT NOT NULL,"
|
||||
"CrsCod INT NOT NULL,"
|
||||
"NotifyEvent TINYINT NOT NULL,"
|
||||
"NumEvents INT NOT NULL,"
|
||||
"NumMails INT NOT NULL,"
|
||||
"UNIQUE INDEX(DegCod,CrsCod,NotifyEvent))");
|
||||
|
||||
/***** Table surveys *****/
|
||||
/*
|
||||
|
@ -2147,25 +2147,25 @@ mysql> DESCRIBE surveys;
|
|||
| UsrCod | int(11) | NO | | NULL | |
|
||||
| StartTime | datetime | NO | | NULL | |
|
||||
| EndTime | datetime | NO | | NULL | |
|
||||
| Title | varchar(255) | NO | | NULL | |
|
||||
| Title | varchar(2047) | NO | | NULL | |
|
||||
| Txt | text | NO | | NULL | |
|
||||
+-----------+-------------------------------------------+------+-----+---------+----------------+
|
||||
13 rows in set (0,00 sec)
|
||||
*/
|
||||
DB_CreateTable ("CREATE TABLE IF NOT EXISTS surveys ("
|
||||
"SvyCod INT NOT NULL AUTO_INCREMENT,"
|
||||
"Scope ENUM('Sys','Cty','Ins','Ctr','Deg','Crs') NOT NULL DEFAULT 'Sys',"
|
||||
"Cod INT NOT NULL DEFAULT -1,"
|
||||
"Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',"
|
||||
"NumNotif INT NOT NULL DEFAULT 0,"
|
||||
"Roles INT NOT NULL DEFAULT 0,"
|
||||
"UsrCod INT NOT NULL,"
|
||||
"StartTime DATETIME NOT NULL,"
|
||||
"EndTime DATETIME NOT NULL,"
|
||||
"Title VARCHAR(255) NOT NULL,"
|
||||
"Txt TEXT NOT NULL,"
|
||||
"UNIQUE INDEX(SvyCod),"
|
||||
"INDEX(Scope,Cod))");
|
||||
"SvyCod INT NOT NULL AUTO_INCREMENT,"
|
||||
"Scope ENUM('Sys','Cty','Ins','Ctr','Deg','Crs') NOT NULL DEFAULT 'Sys',"
|
||||
"Cod INT NOT NULL DEFAULT -1,"
|
||||
"Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',"
|
||||
"NumNotif INT NOT NULL DEFAULT 0,"
|
||||
"Roles INT NOT NULL DEFAULT 0,"
|
||||
"UsrCod INT NOT NULL,"
|
||||
"StartTime DATETIME NOT NULL,"
|
||||
"EndTime DATETIME NOT NULL,"
|
||||
"Title VARCHAR(2047) NOT NULL," // Svy_MAX_BYTES_SURVEY_TITLE
|
||||
"Txt TEXT NOT NULL," // Cns_MAX_BYTES_TEXT
|
||||
"UNIQUE INDEX(SvyCod),"
|
||||
"INDEX(Scope,Cod))");
|
||||
|
||||
/***** Table svy_answers *****/
|
||||
/*
|
||||
|
|
|
@ -1369,7 +1369,7 @@ void Svy_FreeListSurveys (void)
|
|||
|
||||
static void Svy_GetSurveyTxtFromDB (long SvyCod,char Txt[Cns_MAX_BYTES_TEXT + 1])
|
||||
{
|
||||
char Query[512];
|
||||
char Query[128];
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumRows;
|
||||
|
@ -1405,7 +1405,7 @@ void Svy_GetNotifSurvey (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
|||
char **ContentStr,
|
||||
long SvyCod,bool GetContent)
|
||||
{
|
||||
char Query[512];
|
||||
char Query[128];
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
size_t Length;
|
||||
|
@ -1544,7 +1544,8 @@ void Svy_RemoveSurvey (void)
|
|||
Svy_RemoveAllTheGrpsAssociatedToAndSurvey (Svy.SvyCod);
|
||||
|
||||
/***** Remove survey *****/
|
||||
sprintf (Query,"DELETE FROM surveys WHERE SvyCod='%ld'",Svy.SvyCod);
|
||||
sprintf (Query,"DELETE FROM surveys WHERE SvyCod='%ld'",
|
||||
Svy.SvyCod);
|
||||
DB_QueryDELETE (Query,"can not remove survey");
|
||||
|
||||
/***** Mark possible notifications as removed *****/
|
||||
|
@ -1658,7 +1659,7 @@ void Svy_ResetSurvey (void)
|
|||
void Svy_HideSurvey (void)
|
||||
{
|
||||
extern const char *Txt_Survey_X_is_now_hidden;
|
||||
char Query[512];
|
||||
char Query[128];
|
||||
struct Survey Svy;
|
||||
struct SurveyQuestion SvyQst;
|
||||
|
||||
|
@ -1692,7 +1693,7 @@ void Svy_HideSurvey (void)
|
|||
void Svy_UnhideSurvey (void)
|
||||
{
|
||||
extern const char *Txt_Survey_X_is_now_visible;
|
||||
char Query[512];
|
||||
char Query[128];
|
||||
struct Survey Svy;
|
||||
struct SurveyQuestion SvyQst;
|
||||
|
||||
|
@ -1726,7 +1727,7 @@ void Svy_UnhideSurvey (void)
|
|||
static bool Svy_CheckIfSimilarSurveyExists (struct Survey *Svy)
|
||||
{
|
||||
extern const char *Sco_ScopeDB[Sco_NUM_SCOPES];
|
||||
char Query[512];
|
||||
char Query[512 + Svy_MAX_BYTES_SURVEY_TITLE];
|
||||
|
||||
/***** Get number of surveys with a field value from database *****/
|
||||
sprintf (Query,"SELECT COUNT(*) FROM surveys"
|
||||
|
@ -2197,7 +2198,7 @@ void Svy_RecFormSurvey (void)
|
|||
static void Svy_UpdateNumUsrsNotifiedByEMailAboutSurvey (long SvyCod,
|
||||
unsigned NumUsrsToBeNotifiedByEMail)
|
||||
{
|
||||
char Query[512];
|
||||
char Query[256];
|
||||
|
||||
/***** Update number of users notified *****/
|
||||
sprintf (Query,"UPDATE surveys SET NumNotif=NumNotif+'%u'"
|
||||
|
@ -2214,7 +2215,9 @@ static void Svy_CreateSurvey (struct Survey *Svy,const char *Txt)
|
|||
{
|
||||
extern const char *Sco_ScopeDB[Sco_NUM_SCOPES];
|
||||
extern const char *Txt_Created_new_survey_X;
|
||||
char Query[1024 + Cns_MAX_BYTES_TEXT];
|
||||
char Query[1024 +
|
||||
Svy_MAX_BYTES_SURVEY_TITLE +
|
||||
Cns_MAX_BYTES_TEXT];
|
||||
|
||||
/***** Create a new survey *****/
|
||||
sprintf (Query,"INSERT INTO surveys"
|
||||
|
@ -2250,7 +2253,9 @@ static void Svy_UpdateSurvey (struct Survey *Svy,const char *Txt)
|
|||
{
|
||||
extern const char *Sco_ScopeDB[Sco_NUM_SCOPES];
|
||||
extern const char *Txt_The_survey_has_been_modified;
|
||||
char Query[1024 + Cns_MAX_BYTES_TEXT];
|
||||
char Query[1024 +
|
||||
Svy_MAX_BYTES_SURVEY_TITLE +
|
||||
Cns_MAX_BYTES_TEXT];
|
||||
|
||||
/***** Update the data of the survey *****/
|
||||
sprintf (Query,"UPDATE surveys"
|
||||
|
@ -2286,7 +2291,7 @@ static void Svy_UpdateSurvey (struct Survey *Svy,const char *Txt)
|
|||
|
||||
static bool Svy_CheckIfSvyIsAssociatedToGrps (long SvyCod)
|
||||
{
|
||||
char Query[256];
|
||||
char Query[128];
|
||||
|
||||
/***** Get if a survey is associated to a group from database *****/
|
||||
sprintf (Query,"SELECT COUNT(*) FROM svy_grp WHERE SvyCod='%ld'",
|
||||
|
@ -2300,10 +2305,11 @@ static bool Svy_CheckIfSvyIsAssociatedToGrps (long SvyCod)
|
|||
|
||||
bool Svy_CheckIfSvyIsAssociatedToGrp (long SvyCod,long GrpCod)
|
||||
{
|
||||
char Query[512];
|
||||
char Query[256];
|
||||
|
||||
/***** Get if a survey is associated to a group from database *****/
|
||||
sprintf (Query,"SELECT COUNT(*) FROM svy_grp WHERE SvyCod='%ld' AND GrpCod='%ld'",
|
||||
sprintf (Query,"SELECT COUNT(*) FROM svy_grp"
|
||||
" WHERE SvyCod='%ld' AND GrpCod='%ld'",
|
||||
SvyCod,GrpCod);
|
||||
return (DB_QueryCOUNT (Query,"can not check if a survey is associated to a group") != 0);
|
||||
}
|
||||
|
@ -2314,10 +2320,11 @@ bool Svy_CheckIfSvyIsAssociatedToGrp (long SvyCod,long GrpCod)
|
|||
|
||||
static void Svy_RemoveAllTheGrpsAssociatedToAndSurvey (long SvyCod)
|
||||
{
|
||||
char Query[256];
|
||||
char Query[128];
|
||||
|
||||
/***** Remove groups of the survey *****/
|
||||
sprintf (Query,"DELETE FROM svy_grp WHERE SvyCod='%ld'",SvyCod);
|
||||
sprintf (Query,"DELETE FROM svy_grp WHERE SvyCod='%ld'",
|
||||
SvyCod);
|
||||
DB_QueryDELETE (Query,"can not remove the groups associated to a survey");
|
||||
}
|
||||
|
||||
|
@ -2327,11 +2334,10 @@ static void Svy_RemoveAllTheGrpsAssociatedToAndSurvey (long SvyCod)
|
|||
|
||||
void Svy_RemoveGroup (long GrpCod)
|
||||
{
|
||||
char Query[256];
|
||||
char Query[128];
|
||||
|
||||
/***** Remove group from all the surveys *****/
|
||||
sprintf (Query,"DELETE FROM svy_grp"
|
||||
" WHERE GrpCod='%ld'",
|
||||
sprintf (Query,"DELETE FROM svy_grp WHERE GrpCod='%ld'",
|
||||
GrpCod);
|
||||
DB_QueryDELETE (Query,"can not remove group"
|
||||
" from the associations between surveys and groups");
|
||||
|
@ -2522,7 +2528,7 @@ static bool Svy_CheckIfICanDoThisSurveyBasedOnGrps (long SvyCod)
|
|||
|
||||
static unsigned Svy_GetNumQstsSvy (long SvyCod)
|
||||
{
|
||||
char Query[512];
|
||||
char Query[128];
|
||||
|
||||
/***** Get data of questions from database *****/
|
||||
sprintf (Query,"SELECT COUNT(*) FROM svy_questions WHERE SvyCod='%ld'",
|
||||
|
@ -2579,7 +2585,7 @@ static void Svy_ShowFormEditOneQst (long SvyCod,struct SurveyQuestion *SvyQst,
|
|||
extern const char *Txt_SURVEY_STR_ANSWER_TYPES[Svy_NUM_ANS_TYPES];
|
||||
extern const char *Txt_Save;
|
||||
extern const char *Txt_Create_question;
|
||||
char Query[512];
|
||||
char Query[256];
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumAns;
|
||||
|
@ -2794,10 +2800,11 @@ static long Svy_GetParamQstCod (void)
|
|||
|
||||
static void Svy_RemAnswersOfAQuestion (long QstCod)
|
||||
{
|
||||
char Query[512];
|
||||
char Query[128];
|
||||
|
||||
/***** Remove answers *****/
|
||||
sprintf (Query,"DELETE FROM svy_answers WHERE QstCod='%ld'",QstCod);
|
||||
sprintf (Query,"DELETE FROM svy_answers WHERE QstCod='%ld'",
|
||||
QstCod);
|
||||
DB_QueryDELETE (Query,"can not remove the answers of a question");
|
||||
}
|
||||
|
||||
|
@ -2824,7 +2831,7 @@ static Svy_AnswerType_t Svy_ConvertFromStrAnsTypDBToAnsTyp (const char *StrAnsTy
|
|||
|
||||
static bool Svy_CheckIfAnswerExists (long QstCod,unsigned AnsInd)
|
||||
{
|
||||
char Query[512];
|
||||
char Query[256];
|
||||
|
||||
/***** Get answers of a question from database *****/
|
||||
sprintf (Query,"SELECT COUNT(*) FROM svy_answers"
|
||||
|
@ -2839,7 +2846,7 @@ static bool Svy_CheckIfAnswerExists (long QstCod,unsigned AnsInd)
|
|||
|
||||
static unsigned Svy_GetAnswersQst (long QstCod,MYSQL_RES **mysql_res)
|
||||
{
|
||||
char Query[512];
|
||||
char Query[256];
|
||||
unsigned long NumRows;
|
||||
|
||||
/***** Get answers of a question from database *****/
|
||||
|
@ -2909,7 +2916,7 @@ void Svy_ReceiveQst (void)
|
|||
extern const char *Txt_You_must_type_at_least_the_first_two_answers;
|
||||
extern const char *Txt_The_survey_has_been_modified;
|
||||
char Txt[Cns_MAX_BYTES_TEXT + 1];
|
||||
char Query[512 + Cns_MAX_BYTES_TEXT + 1];
|
||||
char Query[512 + Cns_MAX_BYTES_TEXT];
|
||||
long SvyCod;
|
||||
struct SurveyQuestion SvyQst;
|
||||
unsigned NumAns;
|
||||
|
@ -3012,7 +3019,8 @@ void Svy_ReceiveQst (void)
|
|||
/* Update question */
|
||||
sprintf (Query,"UPDATE svy_questions SET Stem='%s',AnsType='%s'"
|
||||
" WHERE QstCod='%ld' AND SvyCod='%ld'",
|
||||
Txt,Svy_StrAnswerTypesDB[SvyQst.AnswerType],SvyQst.QstCod,SvyCod);
|
||||
Txt,Svy_StrAnswerTypesDB[SvyQst.AnswerType],
|
||||
SvyQst.QstCod,SvyCod);
|
||||
DB_QueryUPDATE (Query,"can not update question");
|
||||
}
|
||||
|
||||
|
@ -3070,15 +3078,14 @@ void Svy_ReceiveQst (void)
|
|||
|
||||
static unsigned Svy_GetQstIndFromQstCod (long QstCod)
|
||||
{
|
||||
char Query[512];
|
||||
char Query[128];
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumRows;
|
||||
unsigned QstInd = 0;
|
||||
|
||||
/***** Get number of surveys with a field value from database *****/
|
||||
sprintf (Query,"SELECT QstInd FROM svy_questions"
|
||||
" WHERE QstCod='%ld'",
|
||||
sprintf (Query,"SELECT QstInd FROM svy_questions WHERE QstCod='%ld'",
|
||||
QstCod);
|
||||
NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get question index");
|
||||
|
||||
|
@ -3110,8 +3117,7 @@ static unsigned Svy_GetNextQuestionIndexInSvy (long SvyCod)
|
|||
unsigned QstInd = 0;
|
||||
|
||||
/***** Get number of surveys with a field value from database *****/
|
||||
sprintf (Query,"SELECT MAX(QstInd) FROM svy_questions"
|
||||
" WHERE SvyCod='%ld'",
|
||||
sprintf (Query,"SELECT MAX(QstInd) FROM svy_questions WHERE SvyCod='%ld'",
|
||||
SvyCod);
|
||||
DB_QuerySELECT (Query,&mysql_res,"can not get last question index");
|
||||
|
||||
|
@ -3145,7 +3151,7 @@ static void Svy_ListSvyQuestions (struct Survey *Svy,struct SurveyQuestion *SvyQ
|
|||
extern const char *Txt_This_survey_has_no_questions;
|
||||
extern const char *Txt_Done;
|
||||
extern const char *Txt_Edit_question;
|
||||
char Query[512];
|
||||
char Query[256];
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumQsts;
|
||||
|
@ -3571,8 +3577,7 @@ void Svy_RemoveQst (void)
|
|||
Svy_RemAnswersOfAQuestion (SvyQst.QstCod);
|
||||
|
||||
/* Remove the question itself */
|
||||
sprintf (Query,"DELETE FROM svy_questions"
|
||||
" WHERE QstCod='%ld'",
|
||||
sprintf (Query,"DELETE FROM svy_questions WHERE QstCod='%ld'",
|
||||
SvyQst.QstCod);
|
||||
DB_QueryDELETE (Query,"can not remove a question");
|
||||
if (!mysql_affected_rows (&Gbl.mysql))
|
||||
|
@ -3630,7 +3635,7 @@ void Svy_ReceiveSurveyAnswers (void)
|
|||
|
||||
static void Svy_ReceiveAndStoreUserAnswersToASurvey (long SvyCod)
|
||||
{
|
||||
char Query[512];
|
||||
char Query[256];
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumQst;
|
||||
|
@ -3693,7 +3698,7 @@ static void Svy_ReceiveAndStoreUserAnswersToASurvey (long SvyCod)
|
|||
|
||||
static void Svy_IncreaseAnswerInDB (long QstCod,unsigned AnsInd)
|
||||
{
|
||||
char Query[512];
|
||||
char Query[256];
|
||||
|
||||
/***** Increase number of users who have selected the answer AnsInd in the question QstCod *****/
|
||||
sprintf (Query,"UPDATE svy_answers SET NumUsrs=NumUsrs+1"
|
||||
|
@ -3708,7 +3713,7 @@ static void Svy_IncreaseAnswerInDB (long QstCod,unsigned AnsInd)
|
|||
|
||||
static void Svy_RegisterIHaveAnsweredSvy (long SvyCod)
|
||||
{
|
||||
char Query[512];
|
||||
char Query[256];
|
||||
|
||||
sprintf (Query,"INSERT INTO svy_users"
|
||||
" (SvyCod,UsrCod)"
|
||||
|
@ -3724,7 +3729,7 @@ static void Svy_RegisterIHaveAnsweredSvy (long SvyCod)
|
|||
|
||||
static bool Svy_CheckIfIHaveAnsweredSvy (long SvyCod)
|
||||
{
|
||||
char Query[512];
|
||||
char Query[256];
|
||||
|
||||
/***** Get number of surveys with a field value from database *****/
|
||||
sprintf (Query,"SELECT COUNT(*) FROM svy_users"
|
||||
|
@ -3739,11 +3744,10 @@ static bool Svy_CheckIfIHaveAnsweredSvy (long SvyCod)
|
|||
|
||||
static unsigned Svy_GetNumUsrsWhoHaveAnsweredSvy (long SvyCod)
|
||||
{
|
||||
char Query[512];
|
||||
char Query[128];
|
||||
|
||||
/***** Get number of surveys with a field value from database *****/
|
||||
sprintf (Query,"SELECT COUNT(*) FROM svy_users"
|
||||
" WHERE SvyCod='%ld'",
|
||||
sprintf (Query,"SELECT COUNT(*) FROM svy_users WHERE SvyCod='%ld'",
|
||||
SvyCod);
|
||||
return (unsigned) DB_QueryCOUNT (Query,"can not get number of users who have answered a survey");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue