/*
* Free a session's march list
*/
-void free_march_list(struct wcsession *wcf)
+void free_march_list(wcsession *wcf)
{
struct march *mptr;
*/
void zapped_list(void)
{
+ StrBuf *Buf;
output_headers(1, 1, 1, 0, 0, 0);
- svput("BOXTITLE", WCS_STRING, _("Zapped (forgotten) rooms"));
- do_template("beginbox");
+ Buf = NewStrBufPlain(_("Zapped (forgotten) rooms"), -1);
+ DoTemplate(HKEY("beginbox"), NULL, Buf, CTX_STRBUF);
+
+ FreeStrBuf(&Buf);
listrms("LZRM -1");
wprintf("<br /><br />\n");
wprintf(_("Click on any room to un-zap it and goto that room.\n"));
- do_template("endbox");
+ do_template("endbox", NULL);
wDumpContent(1);
}
/**
* \brief read this room's info file (set v to 1 for verbose mode)
*/
-void readinfo(void)
+void readinfo(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
{
char buf[256];
char briefinfo[128];
* keep the browser from using a cached icon from
* another room.
*/
-void embed_room_graphic(void) {
+void embed_room_graphic(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType) {
char buf[SIZ];
serv_puts("OIMG _roompic_");
/**
* \brief Display the current view and offer an option to change it
*/
-void embed_view_o_matic(void) {
+void embed_view_o_matic(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType) {
int i;
wprintf("<form name=\"viewomatic\" action=\"changeview\">\n");
/**
* \brief Display a search box
*/
-void embed_search_o_matic(void) {
+void embed_search_o_matic(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType) {
wprintf("<form name=\"searchomatic\" action=\"do_search\">\n");
wprintf("<div style=\"display: inline;\"><input type=\"hidden\" name=\"nonce\" value=\"%d\">\n", WC->nonce);
wprintf("<label for=\"search_name\">");
void embed_room_banner(char *got, int navbar_style) {
char buf[256];
char buf2[1024];
- char sanitized_roomname[256];
char with_files[256];
int file_count=0;
* If it isn't supplied, we fake it by issuing our own GOTO.
*/
if (got == NULL) {
+ memset(buf, 20, '0');
+ buf[20] = '\0';
serv_printf("GOTO %s", WC->wc_roomname);
serv_getln(buf, sizeof buf);
got = buf;
if (buf2[0] == '1') while (serv_getln(buf2, sizeof buf2), strcmp(buf2, "000"))
file_count++;
snprintf (with_files, sizeof with_files,
- "; <a href=\"display_room_directory\"> %d %s </a>",
+ "; <a href=\"do_template?template=files\"> %d %s </a>",
file_count,
((file_count>1) || (file_count == 0) ? _("files") : _("file")));
}
else
strcpy (with_files, "");
-
- stresc(sanitized_roomname, 256, WC->wc_roomname, 1, 1);
- svprintf(HKEY("ROOMNAME"), WCS_STRING, "%s", sanitized_roomname);
+
svprintf(HKEY("NUMMSGS"), WCS_STRING,
_("%d new of %d messages%s"),
extract_int(&got[4], 1),
);
svcallback("ROOMPIC", embed_room_graphic);
svcallback("ROOMINFO", readinfo);
- svcallback("VIEWOMATIC", embed_view_o_matic);
+ svcallback("VIEWOMATIC", embed_view_o_matic);
svcallback("SEARCHOMATIC", embed_search_o_matic);
- svcallback("START", offer_start_page);
-
- do_template("roombanner");
- if (navbar_style != navbar_none) {
+ svcallback("START", offer_start_page);
+
+ do_template("roombanner", NULL);
+ /* roombanner contains this for mobile */
+ if (navbar_style != navbar_none && !WC->is_mobile) {
wprintf("<div id=\"navbar\"><ul>");
*/
void smart_goto(char *next_room) {
gotoroom(next_room);
- readloop("readnew");
+ readloop(readnew);
}
char node[256];
char remote_room[128];
char recp[1024];
- char er_name[128];
+ char er_name[128] = "";
char er_password[10];
char er_dirname[15];
char er_roomaide[26];
wprintf("<td>%s</td>", extract_int(buf, 4) ? _("Yes") : _("No"));
- wprintf("<td>%ld</td>", extract_long(buf, 5)); // Fetching interval
+ wprintf("<td>%ld</td>", extract_long(buf, 5)); /* Fetching interval */
wprintf("<td class=\"button_link\">");
wprintf(" <a href=\"netedit&cmd=remove&tab=feeds&line=pop3client|");
output_headers(1, 1, 1, 0, 0, 0);
svprintf(HKEY("BOXTITLE"), WCS_STRING, _("Create a new room"));
- do_template("beginbox");
+ do_template("beginbox", NULL);
wprintf("<form name=\"create_room_form\" method=\"POST\" action=\"entroom\">\n");
wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%d\">\n", WC->nonce);
fmout("LEFT");
}
- do_template("endbox");
+ do_template("endbox", NULL);
wDumpContent(1);
}
*/
void display_private(char *rname, int req_pass)
{
+ StrBuf *Buf;
output_headers(1, 1, 1, 0, 0, 0);
- svprintf(HKEY("BOXTITLE"), WCS_STRING, _("Go to a hidden room"));
- do_template("beginbox");
+ Buf = NewStrBufPlain(_("Go to a hidden room"), -1);
+ DoTemplate(HKEY("beginbox"), NULL, Buf, CTX_STRBUF);
+
+ FreeStrBuf(&Buf);
wprintf("<p>");
wprintf(_("If you know the name of a hidden (guess-name) or "
);
wprintf("</div></form>\n");
- do_template("endbox");
+ do_template("endbox", NULL);
wDumpContent(1);
}
char cmpb0[SIZ];
char cmpb1[SIZ];
int i, num_addrs;
- // TODO: do line dynamic!
+ /*/ TODO: do line dynamic! */
if (havebstr("line_pop3host")) {
strcpy(line, bstr("prefix"));
strcat(line, bstr("line_pop3host"));
char buf[256];
char floor_name[256];
char old_floor_name[256];
- char boxtitle[256];
int levels, oldlevels;
int i, t;
int num_boxes = 0;
if ( (strcasecmp(floor_name, old_floor_name))
&& (!IsEmptyStr(old_floor_name)) ) {
/* End inner box */
- do_template("endbox");
+ do_template("endbox", NULL);
wprintf("<br>");
++num_boxes;
strcpy(old_floor_name, floor_name);
if (levels == 1) {
- /** Begin inner box */
- stresc(boxtitle, 256, floor_name, 1, 0);
- svprintf(HKEY("BOXTITLE"), WCS_STRING, boxtitle);
- do_template("beginbox");
+ StrBuf *Buf;
+
+ Buf = NewStrBufPlain(floor_name, -1);
+ DoTemplate(HKEY("beginbox"), NULL, Buf, CTX_STRBUF);
+
+ FreeStrBuf(&Buf);
}
oldlevels = levels;
}
}
/** End the final inner box */
- do_template("endbox");
+ do_template("endbox", NULL);
wprintf("</td></tr></table>\n");
}
* \param which_floordiv name of the floordiv???
*/
void set_floordiv_expanded(void) {
- struct wcsession *WCC = WC;
+ wcsession *WCC = WC;
+ StrBuf *FloorDiv;
- if (WCC->floordiv_expanded == NULL)
- WCC->floordiv_expanded = NewStrBuf();
- else
- FlushStrBuf(WC->floordiv_expanded);
- StrBufAppendBuf(WC->floordiv_expanded, WC->UrlFragment1, 0);
+ FloorDiv = NewStrBuf();
+ StrBufAppendBuf(FloorDiv, WCC->UrlFragment2, 0);
+ set_preference("floordiv_expanded", FloorDiv, 1);
+ WCC->floordiv_expanded = FloorDiv;
}
/**
floor_mapping[fold[i].floor]=i;
/** refresh the messages index for this room */
-// serv_puts("GOTO ");
-// while (serv_getln(buf, sizeof buf), strcmp(buf, "000"));
+/* TODO serv_puts("GOTO ");
+ while (serv_getln(buf, sizeof buf), strcmp(buf, "000")); */
/** Now add rooms */
serv_puts("LKRA");
serv_getln(buf, sizeof buf);
/** offer the ability to switch views */
wprintf("<ul class=\"room_actions\">\n");
wprintf("<li class=\"start_page\">");
- offer_start_page();
+ offer_start_page(NULL, 0, NULL, NULL, CTX_NONE);
wprintf("</li>");
wprintf("<li><form name=\"roomlistomatic\">\n"
"<select name=\"newview\" size=\"1\" "
}
+void tmplput_RoomName(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ StrBuf *tmp;
+ tmp = NewStrBufPlain(WC->wc_roomname, -1);;
+ StrBufAppendTemplate(Target, nArgs, Tokens, Context, ContextType, tmp, 0);
+ FreeStrBuf(&tmp);
+}
+
void _gotonext(void) { slrp_highest(); gotonext(); }
void dotskip(void) {smart_goto(bstr("room"));}
void _display_private(void) { display_private("", 0); }
smart_goto(bstr("room"));
}
+void tmplput_roombanner(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wprintf("<div id=\"banner\">\n");
+ embed_room_banner(NULL, navbar_default);
+ wprintf("</div>\n");
+}
+
+
+void tmplput_ungoto(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ if ((WCC!=NULL) &&
+ (!IsEmptyStr(WCC->ugname)))
+ StrBufAppendBufPlain(Target, WCC->ugname, -1, 0);
+}
+
+
+int ConditionalHaveUngoto(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ (!IsEmptyStr(WCC->ugname)) &&
+ (strcasecmp(WCC->ugname, WCC->wc_roomname) == 0));
+}
+
+
+
+
+int ConditionalRoomHas_QR_PERMANENT(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_PERMANENT) != 0));
+}
+
+int ConditionalRoomHas_QR_INUSE(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_INUSE) != 0));
+}
+
+int ConditionalRoomHas_QR_PRIVATE(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_PRIVATE) != 0));
+}
+
+int ConditionalRoomHas_QR_PASSWORDED(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_PASSWORDED) != 0));
+}
+
+int ConditionalRoomHas_QR_GUESSNAME(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_GUESSNAME) != 0));
+}
+
+int ConditionalRoomHas_QR_DIRECTORY(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_DIRECTORY) != 0));
+}
+
+int ConditionalRoomHas_QR_UPLOAD(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_UPLOAD) != 0));
+}
+
+int ConditionalRoomHas_QR_DOWNLOAD(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_DOWNLOAD) != 0));
+}
+
+int ConditionalRoomHas_QR_VISDIR(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_VISDIR) != 0));
+}
+
+int ConditionalRoomHas_QR_ANONONLY(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_ANONONLY) != 0));
+}
+
+int ConditionalRoomHas_QR_ANONOPT(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_ANONOPT) != 0));
+}
+
+int ConditionalRoomHas_QR_NETWORK(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_NETWORK) != 0));
+}
+
+int ConditionalRoomHas_QR_PREFONLY(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_PREFONLY) != 0));
+}
+
+int ConditionalRoomHas_QR_READONLY(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_READONLY) != 0));
+}
+
+int ConditionalRoomHas_QR_MAILBOX(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ((WCC!=NULL) &&
+ ((WCC->room_flags & QR_MAILBOX) != 0));
+}
+
+
+
+
+
+
+int ConditionalHaveRoomeditRights(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ wcsession *WCC = WC;
+
+ return ( (WCC!= NULL) &&
+ ((WCC->axlevel >= 6) ||
+ (WCC->is_room_aide) ||
+ (WCC->is_mailbox) ));
+}
void
InitModule_ROOMOPS
(void)
{
+ RegisterNamespace("ROOMNAME", 0, 1, tmplput_RoomName, 0);
+
WebcitAddUrlHandler(HKEY("knrooms"), knrooms, 0);
- WebcitAddUrlHandler(HKEY("gotonext"), _gotonext, 0);
- WebcitAddUrlHandler(HKEY("skip"), gotonext, 0);
- WebcitAddUrlHandler(HKEY("ungoto"), ungoto, 0);
- WebcitAddUrlHandler(HKEY("dotgoto"), dotgoto, 0);
- WebcitAddUrlHandler(HKEY("dotskip"), dotskip, 0);
+ WebcitAddUrlHandler(HKEY("gotonext"), _gotonext, NEED_URL);
+ WebcitAddUrlHandler(HKEY("skip"), gotonext, NEED_URL);
+ WebcitAddUrlHandler(HKEY("ungoto"), ungoto, NEED_URL);
+ WebcitAddUrlHandler(HKEY("dotgoto"), dotgoto, NEED_URL);
+ WebcitAddUrlHandler(HKEY("dotskip"), dotskip, NEED_URL);
WebcitAddUrlHandler(HKEY("display_private"), _display_private, 0);
- WebcitAddUrlHandler(HKEY("goto_private"), goto_private, 0);
+ WebcitAddUrlHandler(HKEY("goto_private"), goto_private, NEED_URL);
WebcitAddUrlHandler(HKEY("zapped_list"), zapped_list, 0);
WebcitAddUrlHandler(HKEY("display_zap"), display_zap, 0);
WebcitAddUrlHandler(HKEY("zap"), zap, 0);
WebcitAddUrlHandler(HKEY("set_room_policy"), set_room_policy, 0);
WebcitAddUrlHandler(HKEY("set_floordiv_expanded"), set_floordiv_expanded, NEED_URL|AJAX);
WebcitAddUrlHandler(HKEY("changeview"), change_view, 0);
+ WebcitAddUrlHandler(HKEY("toggle_self_service"), toggle_self_service, 0);
+ RegisterNamespace("ROOMBANNER", 0, 1, tmplput_roombanner, 0);
+
+ RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_PERMANENT"), 0, ConditionalRoomHas_QR_PERMANENT, CTX_NONE);
+ RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_INUSE"), 0, ConditionalRoomHas_QR_INUSE, CTX_NONE);
+ RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_PRIVATE"), 0, ConditionalRoomHas_QR_PRIVATE, CTX_NONE);
+ RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_PASSWORDED"), 0, ConditionalRoomHas_QR_PASSWORDED, CTX_NONE);
+ RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_GUESSNAME"), 0, ConditionalRoomHas_QR_GUESSNAME, CTX_NONE);
+ RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_DIRECTORY"), 0, ConditionalRoomHas_QR_DIRECTORY, CTX_NONE);
+ RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_UPLOAD"), 0, ConditionalRoomHas_QR_UPLOAD, CTX_NONE);
+ RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_DOWNLOAD"), 0, ConditionalRoomHas_QR_DOWNLOAD, CTX_NONE);
+ RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_VISIDIR"), 0, ConditionalRoomHas_QR_VISDIR, CTX_NONE);
+ RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_ANONONLY"), 0, ConditionalRoomHas_QR_ANONONLY, CTX_NONE);
+ RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_ANONOPT"), 0, ConditionalRoomHas_QR_ANONOPT, CTX_NONE);
+ RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_NETWORK"), 0, ConditionalRoomHas_QR_NETWORK, CTX_NONE);
+ RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_PREFONLY"), 0, ConditionalRoomHas_QR_PREFONLY, CTX_NONE);
+ RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_READONLY"), 0, ConditionalRoomHas_QR_READONLY, CTX_NONE);
+ RegisterConditional(HKEY("COND:ROOM:FLAGS:QR_MAILBOX"), 0, ConditionalRoomHas_QR_MAILBOX, CTX_NONE);
+
+ RegisterConditional(HKEY("COND:UNGOTO"), 0, ConditionalHaveUngoto, CTX_NONE);
+ RegisterConditional(HKEY("COND:ROOM:EDITACCESS"), 0, ConditionalHaveRoomeditRights, CTX_NONE);
+
+ RegisterNamespace("ROOM:UNGOTO", 0, 0, tmplput_ungoto, 0);
}
/*@}*/