X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fgraphics.c;h=f283f34733874a3444e11da418a3f02714c28e5b;hb=95a9d30497849472db7135888eb2df1fc4a721b9;hp=3e8ebc61759aad0858036b71fff771e80cc8d341;hpb=f0bdfb5861cdd973591b47ba7bdc2661d92dcd2e;p=citadel.git diff --git a/webcit/graphics.c b/webcit/graphics.c index 3e8ebc617..f283f3473 100644 --- a/webcit/graphics.c +++ b/webcit/graphics.c @@ -1,97 +1,122 @@ +/* + * $Id$ + * + * Handles HTTP upload of graphics files into the system. + * \ingroup WebcitHttpServer + */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "webcit.h" -void display_graphics_upload(char *description, char *check_cmd, char *uplurl) +void display_graphics_upload(char *description, char *filename, char *uplurl) { - char buf[256]; + WCTemplputParams SubTP; + StrBuf *Buf; + char buf[SIZ]; - serv_puts(check_cmd); - serv_gets(buf); + + snprintf(buf, SIZ, "UIMG 0||%s", filename); + serv_puts(buf); + serv_getln(buf, sizeof buf); if (buf[0] != '2') { - display_error(&buf[4]); + strcpy(WC->ImportantMessage, &buf[4]); + display_main_menu(); return; } - wprintf("HTTP/1.0 200 OK\n"); - output_headers(1); - wprintf("
"); - wprintf("Set/change %s\n", description); - wprintf("
\n"); - - wprintf("
\n"); - - wprintf("
\n", uplurl, bstr("which_room")); - - wprintf("You can upload any image directly from your computer,\n"); - wprintf("as long as it is in GIF format (JPEG, PNG, etc. won't\n"); - wprintf("work).

\n"); - - wprintf("Please select a file to upload:
\n"); - wprintf("\n"); - wprintf("
"); - wprintf("\n"); - wprintf("\n"); - wprintf("
\n"); - wprintf("Cancel\n"); - wprintf("
\n"); + /*output_headers(1, 1, 0, 0, 0, 0); */ + + output_headers(1, 1, 1, 0, 0, 0); + + Buf = NewStrBufPlain(_("Image upload"), -1); + memset(&SubTP, 0, sizeof(WCTemplputParams)); + SubTP.Filter.ContextType = CTX_STRBUF; + SubTP.Context = Buf; + DoTemplate(HKEY("beginbox"), NULL, &SubTP); + + FreeStrBuf(&Buf); + + wprintf("
\n", uplurl); + + wprintf("\n", WC->nonce); + wprintf("\n"); + + wprintf(_("You can upload an image directly from your computer")); + wprintf("

\n"); + + wprintf(_("Please select a file to upload:")); + wprintf("\n"); + + wprintf("
\n", filename); + + wprintf("
"); + wprintf("\n", _("Upload")); + wprintf(" "); + wprintf("\n", _("Reset form")); + wprintf(" "); + wprintf("\n", _("Cancel")); + wprintf("
\n"); + wprintf("
\n"); + + do_template("endbox", NULL); + wDumpContent(1); } -void do_graphics_upload(char *upl_cmd) +void do_graphics_upload(char *filename) { - char buf[256]; + const char *MimeType; + wcsession *WCC = WC; + char buf[SIZ]; int bytes_remaining; int pos = 0; int thisblock; + bytes_remaining = WCC->upload_length; + + if (havebstr("cancel_button")) { + strcpy(WC->ImportantMessage, + _("Graphics upload has been cancelled.")); + display_main_menu(); + return; + } - if (WC->upload_length == 0) { - display_error("You didn't upload a file.\n"); + if (WCC->upload_length == 0) { + strcpy(WC->ImportantMessage, + _("You didn't upload a file.")); + display_main_menu(); return; } - serv_puts(upl_cmd); - serv_gets(buf); + + MimeType = GuessMimeType(ChrPtr(WCC->upload), bytes_remaining); + snprintf(buf, SIZ, "UIMG 1|%s|%s", MimeType, filename); + serv_puts(buf); + + serv_getln(buf, sizeof buf); if (buf[0] != '2') { - display_error(&buf[4]); + strcpy(WCC->ImportantMessage, &buf[4]); + display_main_menu(); return; } - bytes_remaining = WC->upload_length; while (bytes_remaining) { thisblock = ((bytes_remaining > 4096) ? 4096 : bytes_remaining); serv_printf("WRIT %d", thisblock); - serv_gets(buf); + serv_getln(buf, sizeof buf); if (buf[0] != '7') { - display_error(&buf[4]); + strcpy(WCC->ImportantMessage, &buf[4]); serv_puts("UCLS 0"); - serv_gets(buf); + serv_getln(buf, sizeof buf); + display_main_menu(); return; } thisblock = extract_int(&buf[4], 0); - serv_write(&WC->upload[pos], thisblock); + serv_write(&ChrPtr(WCC->upload)[pos], thisblock); pos = pos + thisblock; bytes_remaining = bytes_remaining - thisblock; } serv_puts("UCLS 1"); - serv_gets(buf); + serv_getln(buf, sizeof buf); if (buf[0] != 'x') { display_success(&buf[4]); return; @@ -99,25 +124,64 @@ void do_graphics_upload(char *upl_cmd) } +void edithellopic(void) { do_graphics_upload("hello"); } +void editpic(void) { do_graphics_upload("_userpic_"); } +void editgoodbuyepic(void) { do_graphics_upload("UIMG 1|%s|goodbuye"); } + +/* The users photo display / upload facility */ +void display_editpic(void) { + display_graphics_upload(_("your photo"), + "_userpic_", + "editpic"); +} +/* room picture dispay / upload facility */ +void display_editroompic(void) { + display_graphics_upload(_("the icon for this room"), + "_roompic_", + "editroompic"); +} + +/* the greetingpage hello pic */ +void display_edithello(void) { + display_graphics_upload(_("the Greetingpicture for the login prompt"), + "hello", + "edithellopic"); +} + +/* the logoff banner */ +void display_editgoodbyepic(void) { + display_graphics_upload(_("the Logoff banner picture"), + "UIMG 0|%s|goodbuye", + "editgoodbuyepic"); +} + +void display_editfloorpic(void) { + char buf[SIZ]; + snprintf(buf, SIZ, "UIMG 0|_floorpic_|%s", + bstr("which_floor")); + display_graphics_upload(_("the icon for this floor"), + buf, + "editfloorpic"); +} -void select_floor_to_edit_pic(void) +void editfloorpic(void){ + char buf[SIZ]; + snprintf(buf, SIZ, "UIMG 1|_floorpic_|%s", + bstr("which_floor")); + do_graphics_upload(buf); +} + +void +InitModule_GRAPHICS +(void) { - int a; - - wprintf("HTTP/1.0 200 OK\n"); - output_headers(1); - - wprintf("
"); - wprintf("Select floor to edit label graphic\n"); - wprintf("
\n"); - - load_floorlist(); - for (a = 0; a < 128; ++a) - if (strlen(floorlist[a]) > 0) { - wprintf("", a); - escputs(floorlist[a]); - wprintf("\n"); - } - wDumpContent(1); + WebcitAddUrlHandler(HKEY("display_editpic"), display_editpic, 0); + WebcitAddUrlHandler(HKEY("editpic"), editpic, 0); + WebcitAddUrlHandler(HKEY("display_editroompic"), display_editroompic, 0); + WebcitAddUrlHandler(HKEY("display_edithello"), display_edithello, 0); + WebcitAddUrlHandler(HKEY("edithellopic"), edithellopic, 0); + WebcitAddUrlHandler(HKEY("display_editgoodbyepic"), display_editgoodbyepic, 0); + WebcitAddUrlHandler(HKEY("editgoodbuyepic"), editgoodbuyepic, 0); + WebcitAddUrlHandler(HKEY("display_editfloorpic"), display_editfloorpic, 0); + WebcitAddUrlHandler(HKEY("editfloorpic"), editfloorpic, 0); }