From 7168e390493f766c54c1de7e5d1ad6a2e51c3d13 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Tue, 27 Oct 2009 21:02:42 +0000 Subject: [PATCH] * skeleton/stub code for new revision control stuff --- citadel/modules/wiki/serv_wiki.c | 64 +++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/citadel/modules/wiki/serv_wiki.c b/citadel/modules/wiki/serv_wiki.c index 1a0db4479..cf14f9df9 100644 --- a/citadel/modules/wiki/serv_wiki.c +++ b/citadel/modules/wiki/serv_wiki.c @@ -362,21 +362,83 @@ void wiki_history(char *pagename) { } + +/* + * Fetch a specific revision of a wiki page + */ +void wiki_rev(char *pagename, char *rev) +{ + int r; + char history_page_name[270]; + long msgnum; + struct CtdlMessage *msg; + + r = CtdlDoIHavePermissionToReadMessagesInThisRoom(); + if (r != om_ok) { + if (r == om_not_logged_in) { + cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN); + } + else { + cprintf("%d An unknown error has occurred.\n", ERROR); + } + return; + } + + snprintf(history_page_name, sizeof history_page_name, "%s_HISTORY_", pagename); + msgnum = locate_message_by_euid(history_page_name, &CC->room); + if (msgnum > 0L) { + msg = CtdlFetchMessage(msgnum, 1); + } + else { + msg = NULL; + } + + if ((msg != NULL) && (msg->cm_fields['M'] == NULL)) { + CtdlFreeMessage(msg); + msg = NULL; + } + + if (msg == NULL) { + cprintf("%d Revision history for '%s' was not found.\n", ERROR+MESSAGE_NOT_FOUND, pagename); + return; + } + + +/* + FIXME do something here + mime_parser(msg->cm_fields['M'], NULL, *wiki_history_callback, NULL, NULL, NULL, 0); + */ + + CtdlFreeMessage(msg); + cprintf("%d FIXME not finished yet, check the log to find out wtf\n", ERROR); + return; +} + + + /* * commands related to wiki management */ void cmd_wiki(char *argbuf) { char subcmd[32]; char pagename[256]; + char rev[128]; extract_token(subcmd, argbuf, 0, '|', sizeof subcmd); if (!strcasecmp(subcmd, "history")) { - extract_token(pagename, argbuf, 1, '|', sizeof subcmd); + extract_token(pagename, argbuf, 1, '|', sizeof pagename); wiki_history(pagename); return; } + if (!strcasecmp(subcmd, "rev")) { + extract_token(pagename, argbuf, 1, '|', sizeof pagename); + extract_token(rev, argbuf, 2, '|', sizeof rev); + wiki_rev(pagename, rev); + return; + } + cprintf("%d Invalid subcommand\n", ERROR + CMD_NOT_SUPPORTED); } -- 2.30.2