#include #include #include #include "global.h" #include "survey.h" #include "manhat-lib/shared_survey_util.h" #include "manhat-lib/shared_survey_modify.h" #include "manhat-lib/shared_survey_read_param.h" #include "manhat-lib/shared_survey_path_util.h" #include "manhat-lib/shared_cs_util.h" void write_xml(SURVEY_DATA *data, const char *xml_file) { FILE *fp; fp = fopen(xml_file, "r+"); if(!fp) cs_critical_error(ERR_FOPEN_WRITE_FAILED, ""); if(fseek(fp, -strlen(SURVEY_END_TAG), SEEK_END)) cs_critical_error(ERR_FSEEK_FAILED, ""); write_choice(fp, data); xml_close(fp); fclose(fp); } void do_action( SESSION *user, SURVEY_DATA *data, const char *count, int pre_id) { char survey_path[MAX_PATH +1]; char survey_file_path[MAX_PATH +1]; get_survey_path(user, survey_path, count); snprintf(survey_file_path, MAX_PATH +1, "%s/%s", survey_path, SURVEY_XML_FNAME); data->id = get_valid_tag_id(survey_file_path); if(pre_id == 0) { snprintf(survey_file_path, MAX_PATH +1, "%s/%s", survey_path, SURVEY_XML_FNAME); write_xml(data, survey_file_path); } else insert_action( user,count, data, pre_id); } SURVEY_DATA * read_parameters(int *is_admin, char *key, char *count, int *pre_id) { int id = 0; /* dummy id */ read_com_parameters(is_admin, key, count, pre_id); /* shared_survey_read_param.c */ return read_choice_parameters(id); /* shared_survey_read_param.c */ } void set_choices(SURVEY_DATA *data) { #define MAX_TMP_NAME 40 int i =0; char name[MAX_TMP_NAME +1]; ELE_CHOICE *ptr; for(ptr = data->head; ptr; ptr = ptr->next) { snprintf(name, MAX_TMP_NAME +1, "data.choice.%d", i); cs_set_value(name, ptr->choice); i++; } cs_set_int_value("number_choices", i); #undef MAX_TMP_NAME } void set_data_value(SURVEY_DATA *data) { cs_set_int_value("data.id", data->id); cs_set_value("data.caption", data->caption); cs_set_value("data.multi", data->steps_bgcolor); set_choices(data); } int main() { int is_admin; char key[MAX_KEY +1]; char count[MAX_PATH +1]; SURVEY_DATA *data; SESSION user; int pre_id, number_choice; char *str =0; cs_cgi_init(); data = read_parameters(&is_admin, key, count, &pre_id); verify_key_path( &user, key, is_admin); str = hdf_get_value(global_cgi->hdf, "Query.more", 0); if(str) { number_choice = hdf_get_int_value(global_cgi->hdf, "Query.number_choices", 0); set_data_value(data); cs_set_int_value("number_choices", number_choice + 4); cs_load_lang("shared_survey_form"); cs_cgi_display("survey_choice_form", 1); } else { do_action( &user, data, count, pre_id); printf("Location: %s?admin=%d&id=%s&count=%s&target=%d#%d\n\n", "survey_new", is_admin, key, count, data->id, data->id); } free_survey_data(data); cs_cgi_destroy(); /* shared_cs_util.c */ return 0; }