X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Flistsub.c;h=fe647cab33e2fa7a339c65904d731b2896b67a09;hb=fb6f6fa4ec4e3277e30d84326d48e6850822d318;hp=60b5a49a6b272252c719565bec0222fc134c6834;hpb=56d69e5d8434e98835a2582c59b771ba69475431;p=citadel.git diff --git a/webcit/listsub.c b/webcit/listsub.c index 60b5a49a6..fe647cab3 100644 --- a/webcit/listsub.c +++ b/webcit/listsub.c @@ -1,5 +1,15 @@ /* * Web forms for handling mailing list subscribe/unsubscribe requests. + * + * Copyright (c) 1996-2012 by the citadel.org team + * + * This program is open source software. You can redistribute it and/or + * modify it under the terms of the GNU General Public License, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. */ #include "webcit.h" @@ -7,6 +17,7 @@ /* * List subscription handling */ +#ifndef EXPERIMENTAL_LISTSUB void do_listsub(void) { char cmd[256]; @@ -46,21 +57,20 @@ void do_listsub(void) wc_printf("
"); wc_printf("
"); - do_template("beginbox_1", NULL); + do_template("box_begin_1"); StrBufAppendBufPlain(WC->WBuf, _("List subscribe/unsubscribe"), -1, 0); - do_template("beginbox_2", NULL); + do_template("box_begin_2"); wc_printf("

"); /* * Subscribe command */ if (!strcasecmp(cmd, "subscribe")) { - serv_printf("SUBS subscribe|%s|%s|%s|%s://%s/listsub", + serv_printf("SUBS subscribe|%s|%s|%s|%s/listsub", room, email, subtype, - (is_https ? "https" : "http"), - ChrPtr(WC->Hdr->HR.http_host) + ChrPtr(site_prefix) ); serv_getln(buf, sizeof buf); if (buf[0] == '2') { @@ -78,16 +88,16 @@ void do_listsub(void) "your subscription. This extra step is for " "your protection, as it prevents others from " "being able to subscribe you to lists " - "without your consent.

" + "without your consent.

" "Please click on the link which is being " "e-mailed to you and your subscription will " - "be confirmed.
\n"), + "be confirmed.
\n"), escaped_email, escaped_room); wc_printf("%s\n", _("Go back...")); } else { wc_printf("ERROR: %s" - "

\n", + "

\n", &buf[4]); goto FORM; } @@ -97,11 +107,10 @@ void do_listsub(void) * Unsubscribe command */ else if (!strcasecmp(cmd, "unsubscribe")) { - serv_printf("SUBS unsubscribe|%s|%s|%s://%s/listsub", - room, - email, - (is_https ? "https" : "http"), - ChrPtr(WC->Hdr->HR.http_host) + serv_printf("SUBS unsubscribe|%s|%s|%s/listsub", + room, + email, + ChrPtr(site_prefix) ); serv_getln(buf, sizeof buf); if (buf[0] == '2') { @@ -116,16 +125,16 @@ void do_listsub(void) "your unsubscription. This extra step is for " "your protection, as it prevents others from " "being able to unsubscribe you from " - "lists without your consent.

" + "lists without your consent.

" "Please click on the link which is being " "e-mailed to you and your unsubscription will " - "be confirmed.
\n" + "be confirmed.
\n" "Back...\n" ); } else { wc_printf("ERROR: %s" - "

\n", + "

\n", &buf[4]); goto FORM; } @@ -156,7 +165,7 @@ void do_listsub(void) "The error returned by the server was: " ); } - wc_printf("%s
\n", &buf[4]); + wc_printf("%s
\n", &buf[4]); } /* @@ -210,26 +219,151 @@ FORM: wc_printf("
\n"); " one additional web link to click on for final " "confirmation. This extra step is for your " "protection, as it prevents others from being able to " - "subscribe or unsubscribe you to lists.
\n" + "subscribe or unsubscribe you to lists.
\n" ); } wc_printf("
"); - do_template("endbox", NULL); + do_template("box_end"); wc_printf("
"); wc_printf("\n"); wDumpContent(0); end_webcit_session(); } +#endif + +int Conditional_LISTSUB_EXECUTE_SUBSCRIBE(StrBuf *Target, WCTemplputParams *TP) +{ + int rc; + StrBuf *Line; + const char *ImpMsg; + const StrBuf *Room, *Email, *SubType; + + Room = sbstr("room"); + if (Room == NULL) + { + ImpMsg = _("You need to specify the mailinglist to subscribe to."); + AppendImportantMessage(ImpMsg, -1); + return 0; + } + Email = sbstr("email"); + if (Email == NULL) + { + ImpMsg = _("You need to specify the email address you'd like to subscribe with."); + AppendImportantMessage(ImpMsg, -1); + return 0; + } + SubType = sbstr("subtype"); + + Line = NewStrBuf(); + serv_printf("SUBS subscribe|%s|%s|%s|%s/listsub", + ChrPtr(Room), + ChrPtr(Email), + ChrPtr(SubType), + ChrPtr(site_prefix) + ); + StrBuf_ServGetln(Line); + rc = GetServerStatusMsg(Line, NULL, 1, 2); + FreeStrBuf(&Line); + if (rc == 2) + putbstr("__FAIL", NewStrBufPlain(HKEY("1"))); + return rc == 2; +} +int Conditional_LISTSUB_EXECUTE_UNSUBSCRIBE(StrBuf *Target, WCTemplputParams *TP) +{ + int rc; + StrBuf *Line; + const char *ImpMsg; + const StrBuf *Room, *Email; + + Room = sbstr("room"); + if (Room == NULL) + { + ImpMsg = _("You need to specify the mailinglist to subscribe to."); + AppendImportantMessage(ImpMsg, -1); + return 0; + } + Email = sbstr("email"); + if (Email == NULL) + { + ImpMsg = _("You need to specify the email address you'd like to subscribe with."); + AppendImportantMessage(ImpMsg, -1); + return 0; + } + serv_printf("SUBS unsubscribe|%s|%s|%s/listsub", + ChrPtr(Room), + ChrPtr(Email), + ChrPtr(site_prefix) + ); + Line = NewStrBuf(); + StrBuf_ServGetln(Line); + rc = GetServerStatusMsg(Line, NULL, 1, 2); + FreeStrBuf(&Line); + if (rc == 2) + putbstr("__FAIL", NewStrBufPlain(HKEY("1"))); + return rc == 2; +} + +int Conditional_LISTSUB_EXECUTE_CONFIRM_SUBSCRIBE(StrBuf *Target, WCTemplputParams *TP) +{ + int rc; + StrBuf *Line; + const char *ImpMsg; + const StrBuf *Room, *Token; + + Room = sbstr("room"); + if (Room == NULL) + { + ImpMsg = _("You need to specify the mailinglist to subscribe to."); + AppendImportantMessage(ImpMsg, -1); + return 0; + } + Token = sbstr("token"); + if (Room == NULL) + { + ImpMsg = _("You need to specify the mailinglist to subscribe to."); + AppendImportantMessage(ImpMsg, -1); + return 0; + } + + Line = NewStrBuf(); + serv_printf("SUBS confirm|%s|%s", + ChrPtr(Room), + ChrPtr(Token) + ); + StrBuf_ServGetln(Line); + rc = GetServerStatusMsg(Line, NULL, 1, 2); + FreeStrBuf(&Line); + if (rc == 2) + putbstr("__FAIL", NewStrBufPlain(HKEY("1"))); + return rc == 2; +} + +#ifdef EXPERIMENTAL_LISTSUB +void do_listsub(void) +{ + if (!havebstr("cmd")) + { + putbstr("cmd", NewStrBufPlain(HKEY(""))); + } + output_headers(1, 0, 0, 0, 1, 0); + do_template("listsub_display"); + end_burst(); +} +#endif void InitModule_LISTSUB (void) { + RegisterConditional(HKEY("COND:LISTSUB:EXECUTE:SUBSCRIBE"), 0, Conditional_LISTSUB_EXECUTE_SUBSCRIBE, CTX_NONE); + RegisterConditional(HKEY("COND:LISTSUB:EXECUTE:UNSUBSCRIBE"), 0, Conditional_LISTSUB_EXECUTE_UNSUBSCRIBE, CTX_NONE); + RegisterConditional(HKEY("COND:LISTSUB:EXECUTE:CONFIRM:SUBSCRIBE"), 0, Conditional_LISTSUB_EXECUTE_CONFIRM_SUBSCRIBE, CTX_NONE); + WebcitAddUrlHandler(HKEY("listsub"), "", 0, do_listsub, ANONYMOUS|COOKIEUNNEEDED|FORCE_SESSIONCLOSE);