diff --git a/src/elogd.c b/src/elogd.c index 2909c3ad..3308d4c2 100755 --- a/src/elogd.c +++ b/src/elogd.c @@ -6,6 +6,9 @@ Contents: Web server program for Electronic Logbook ELOG $Log$ + Revision 1.362 2004/06/29 18:57:23 midas + Made rename/create logbook work with groups + Revision 1.361 2004/06/28 20:29:49 midas Rename logbook in groups on logbook rename @@ -1740,10 +1743,18 @@ time_t cfgfile_mtime = 0; /*-------------------------------------------------------------------*/ -void check_config_file() +void check_config_file(BOOL force) { struct stat cfg_stat; + if (force) { + if (cfgbuffer) { + free(cfgbuffer); + cfgbuffer = NULL; + } + return; + } + /* force re-read configuration file if changed */ if (stat(config_file, &cfg_stat) == 0) { if (cfgfile_mtime < cfg_stat.st_mtime) { @@ -2420,7 +2431,7 @@ time_t date_to_ltime(char *date) void check_config() { - check_config_file(); + check_config_file(FALSE); check_language(); } @@ -5385,11 +5396,45 @@ void change_logbook_in_group(LOGBOOK *lbs, char *new_name) n = strbreak(grpmembers, grplist, MAX_N_LIST, ","); for (j = 0; j < n; j++) { if (strieq(lbs->name, grplist[j])) { - if (new_name[0]) { - /* rename logbook */ - change_config_line(lbs, grpname, lbs->name, new_name); - break; - } + /* rename or remove logbook */ + change_config_line(lbs, grpname, lbs->name, new_name); + break; + } + } + } + } +} + +/*------------------------------------------------------------------*/ + +void add_logbook_to_group(LOGBOOK *lbs, char *new_name) +{ + int i, j, n, flag; + char str[1000], grpname[256], grpmembers[1000]; + char grplist[MAX_N_LIST][NAME_LENGTH]; + + /* enumerate groups */ + for (i = 0;; i++) { + if (!enumcfg("global", grpname, grpmembers, i)) + break; + + flag = 0; + strlcpy(str, grpname, sizeof(str)); + str[9] = 0; + if (strieq(str, "top group")) + flag = 2; + str[5] = 0; + if (strieq(str, "group")) + flag = 1; + + if (flag) { + + n = strbreak(grpmembers, grplist, MAX_N_LIST, ","); + for (j = 0; j < n; j++) { + if (strieq(lbs->name, grplist[j])) { + /* rename or remove logbook */ + change_config_line(lbs, grpname, "", new_name); + break; } } } @@ -8003,7 +8048,7 @@ int save_admin_config(char *section, char *buffer, char *error) free(buf); /* force re-read of config file */ - check_config(); + check_config_file(TRUE); return 1; } @@ -8128,14 +8173,14 @@ int change_config_line(LOGBOOK * lbs, char *option, char *old_value, char *new_v free(buf); /* force re-read of config file */ - check_config(); + check_config_file(TRUE); return 1; } /*------------------------------------------------------------------*/ -int delete_logbook(char *logbook, char *error) +int delete_logbook(LOGBOOK *lbs, char *error) { int fh, i, length; char *buf, *p1, *p2; @@ -8150,6 +8195,9 @@ int delete_logbook(char *logbook, char *error) return 0; } + /* remove logbook name in groups */ + change_logbook_in_group(lbs, ""); + /* read previous contents */ length = lseek(fh, 0, SEEK_END); lseek(fh, 0, SEEK_SET); @@ -8159,7 +8207,7 @@ int delete_logbook(char *logbook, char *error) buf[length] = 0; /* find logbook config */ - p1 = (char *) find_section(buf, logbook); + p1 = (char *) find_section(buf, lbs->name); p2 = (char *) find_next_section(p1 + 1); if (p2) @@ -8188,7 +8236,7 @@ int delete_logbook(char *logbook, char *error) free(buf); /* force re-read of config file */ - check_config(); + check_config_file(TRUE); el_index_logbooks(TRUE); return 1; @@ -8196,19 +8244,18 @@ int delete_logbook(char *logbook, char *error) /*------------------------------------------------------------------*/ -int rename_logbook(LOGBOOK *lbs, char *new_name, char *error) +int rename_logbook(LOGBOOK *lbs, char *new_name) { int fh, i, length; char *buf, *buf2, *p1, *p2; char str[256], lb_dir[256], old_dir[256], new_dir[256]; - error[0] = 0; - fh = open(config_file, O_RDWR | O_BINARY, 644); if (fh < 0) { - sprintf(error, loc("Cannot open file %s"), config_file); - strcat(error, ": "); - strcat(error, strerror(errno)); + sprintf(str, loc("Cannot open file %s"), config_file); + strcat(str, ": "); + strcat(str, strerror(errno)); + show_error(str); return 0; } @@ -8240,7 +8287,7 @@ int rename_logbook(LOGBOOK *lbs, char *new_name, char *error) if (p2 == NULL) { close(fh); free(buf); - strcpy(error, loc("Syntax error in config file")); + show_error(loc("Syntax error in config file")); return 0; } p2 ++; @@ -8266,9 +8313,10 @@ int rename_logbook(LOGBOOK *lbs, char *new_name, char *error) lseek(fh, 0, SEEK_SET); i = write(fh, buf, strlen(buf)); if (i < (int) strlen(buf)) { - sprintf(error, loc("Cannot write to %s"), config_file); - strcat(error, ": "); - strcat(error, strerror(errno)); + sprintf(str, loc("Cannot write to %s"), config_file); + strcat(str, ": "); + strcat(str, strerror(errno)); + show_error(str); close(fh); free(buf); return 0; @@ -8282,9 +8330,8 @@ int rename_logbook(LOGBOOK *lbs, char *new_name, char *error) close(fh); free(buf); - /* force re-read of config file */ - check_config(); + check_config_file(TRUE); el_index_logbooks(TRUE); return 1; @@ -8292,21 +8339,23 @@ int rename_logbook(LOGBOOK *lbs, char *new_name, char *error) /*------------------------------------------------------------------*/ -int create_logbook(char *logbook, char *templ, char *error) +int create_logbook(LOGBOOK *oldlbs, char *logbook, char *templ) { int fh, i, length, templ_length; - char *buf, *p1, *p2; - - error[0] = 0; + char *buf, *p1, *p2, str[256]; fh = open(config_file, O_RDWR | O_BINARY, 644); if (fh < 0) { - sprintf(error, loc("Cannot open file %s"), config_file); - strcat(error, ": "); - strcat(error, strerror(errno)); + sprintf(str, loc("Cannot open file %s"), config_file); + strcat(str, ": "); + strcat(str, strerror(errno)); + show_error(str); return 0; } + /* add logbook to current group */ + add_logbook_to_group(oldlbs, logbook); + /* read previous contents */ length = lseek(fh, 0, SEEK_END); lseek(fh, 0, SEEK_SET); @@ -8363,9 +8412,10 @@ int create_logbook(char *logbook, char *templ, char *error) lseek(fh, 0, SEEK_SET); i = write(fh, buf, strlen(buf)); if (i < (int) strlen(buf)) { - sprintf(error, loc("Cannot write to %s"), config_file); - strcat(error, ": "); - strcat(error, strerror(errno)); + sprintf(str, loc("Cannot write to %s"), config_file); + strcat(str, ": "); + strcat(str, strerror(errno)); + show_error(str); close(fh); free(buf); return 0; @@ -8381,7 +8431,7 @@ int create_logbook(char *logbook, char *templ, char *error) free(buf); /* force re-read of config file */ - check_config(); + check_config_file(TRUE); el_index_logbooks(TRUE); return 1; @@ -8428,7 +8478,7 @@ int save_config(char *buffer, char *error) close(fh); /* force re-read of config file */ - check_config(); + check_config_file(TRUE); return 1; } @@ -9324,7 +9374,7 @@ void show_logbook_delete(LOGBOOK * lbs) /* delete logbook */ str[0] = 0; - delete_logbook(lbs->name, str); + delete_logbook(lbs, str); if (str[0]) show_error(str); else @@ -9362,18 +9412,25 @@ void show_logbook_delete(LOGBOOK * lbs) void show_logbook_rename(LOGBOOK * lbs) { - char str[256]; + int i; + char str[256], lbn[256]; - /* redirect if confirm = NO */ if (getparam("lbname") && *getparam("lbname")) { - rename_logbook(lbs, getparam("lbname"), str); - if (str[0]) - show_error(str); - else { - sprintf(str, "../%s/?cmd=Config", getparam("lbname")); - redirect(NULL, str); + /* check if logbook name exists already */ + strcpy(lbn, getparam("lbname")); + for (i = 0; lb_list[i].name[0]; i++) + if (strieq(lbn, lb_list[i].name)) { + sprintf(str, loc("Logbook \"%s\" exists already, please choose different name"), lbn); + show_error(str); + return; } + + if (!rename_logbook(lbs, getparam("lbname"))) + return; + + sprintf(str, "../%s/?cmd=Config", getparam("lbname")); + redirect(NULL, str); return; } else { @@ -9411,6 +9468,7 @@ void show_logbook_new(LOGBOOK * lbs) if (getparam("lbname") && *getparam("lbname")) { + /* check if logbook name exists already */ strcpy(lbn, getparam("lbname")); for (i = 0; lb_list[i].name[0]; i++) if (strieq(lbn, lb_list[i].name)) { @@ -9420,15 +9478,13 @@ void show_logbook_new(LOGBOOK * lbs) } /* create new logbook */ - create_logbook(getparam("lbname"), getparam("template"), str); - if (str[0]) - show_error(str); - else { - strcpy(lbn, getparam("lbname")); - url_encode(lbn, sizeof(lbn)); - sprintf(str, "../%s/?cmd=Config", lbn); - redirect(NULL, str); - } + if (!create_logbook(lbs, getparam("lbname"), getparam("template"))) + return; + + strcpy(lbn, getparam("lbname")); + url_encode(lbn, sizeof(lbn)); + sprintf(str, "../%s/?cmd=Config", lbn); + redirect(NULL, str); return; } @@ -14431,7 +14487,7 @@ int add_attribute_option(LOGBOOK * lbs, char *attrname, char *attrvalue) free(buf); /* force re-read of config file */ - check_config(); + check_config_file(TRUE); return 1; } @@ -14525,7 +14581,7 @@ int set_attributes(LOGBOOK * lbs, char attributes[][NAME_LENGTH], int n) free(buf); /* force re-read of config file */ - check_config(); + check_config_file(TRUE); return 1; }