void wiki_show_changes_page(HttpResponse *res) { WikiPageList **pages = NULL; int n_pages, i; wiki_show_header(res, "Changes", FALSE); pages = wiki_get_pages(&n_pages, NULL); for (i=0; i<n_pages; i++) { struct tm *pTm; char datebuf[64]; pTm = localtime(&pages[i]->mtime); strftime(datebuf, sizeof(datebuf), "%Y-%m-%d %H:%M", pTm); http_response_printf(res, "<a href='%s'>%s</a> %s<br />\n", pages[i]->name, pages[i]->name, datebuf); } wiki_show_footer(res); http_response_send(res); exit(0); }
void wiki_show_changes_page_rss(HttpResponse *res) { WikiPageList **pages = NULL; int n_pages, i; /*char *html_clean_wikitext = NULL; char *wikitext; */ pages = wiki_get_pages(&n_pages, NULL); http_response_printf(res, "<?xml version=\"1.0\"encoding=\"ISO-8859-1\"?>\n" "<rss version=\"2.0\">\n" "<channel><title>DidiWiki Changes feed</title>\n"); for (i=0; i<n_pages; i++) { struct tm *pTm; char datebuf[64]; pTm = localtime(&pages[i]->mtime); strftime(datebuf, sizeof(datebuf), "%Y-%m-%d %H:%M", pTm); http_response_printf(res, "<item><title>%s</title>" "<link>%s%s</link><description>" "Modified %s\n", pages[i]->name, getenv("DIDIWIKI_URL_PREFIX") ? getenv("DIDIWIKI_URL_PREFIX") : "", pages[i]->name, datebuf); /* wikitext = file_read(pages[i]->name); http_response_printf_alloc_buffer(res, strlen(wikitext)*2); html_clean_wikitext = util_htmlize(wikitext, strlen(wikitext)); wiki_print_data_as_html(res, html_clean_wikitext); */ http_response_printf(res, "</description></item>\n"); } http_response_printf(res, "</channel>\n</rss>"); http_response_send(res); exit(0); }
void wiki_show_search_results_page(HttpResponse *res, char *expr) { WikiPageList **pages = NULL; int n_pages, i; if (expr == NULL || strlen(expr) == 0) { wiki_show_header(res, "Search", FALSE); http_response_printf(res, "No Search Terms supplied"); wiki_show_footer(res); http_response_send(res); exit(0); } pages = wiki_get_pages(&n_pages, expr); if (pages) { for (i=0; i<n_pages; i++) if (!strcmp(pages[i]->name, expr)) /* redirect on page name match */ wiki_redirect(res, pages[i]->name); wiki_show_header(res, "Search", FALSE); for (i=0; i<n_pages; i++) { http_response_printf(res, "<a href='%s'>%s</a><br />\n", pages[i]->name, pages[i]->name); } } else { wiki_show_header(res, "Search", FALSE); http_response_printf(res, "No matches"); } wiki_show_footer(res); http_response_send(res); exit(0); }
void wiki_show_changes_page_rss(HttpResponse *res) { WikiPageList **pages = NULL; int n_pages, i; pages = wiki_get_pages(&n_pages, NULL); http_response_set_content_type(res, "application/xhtml+xml"); http_response_printf(res, "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" "<rss version=\"2.0\">\n" "<channel><title>DidiWiki Changes feed</title>\n"); for (i = 0; i < n_pages; i++) { struct tm *pTm; char datebuf[64]; pTm = localtime(&pages[i]->mtime); strftime(datebuf, sizeof(datebuf), "%Y-%m-%d %H:%M", pTm); http_response_printf(res, "<item><title>%s</title>" "<link>%s%s</link><description>" "Modified %s\n", pages[i]->name, getenv("PORTABLEWIKI_URL_PREFIX") ? getenv("PORTABLEWIKI_URL_PREFIX") : "", pages[i]->name, datebuf); http_response_printf(res, "</description></item>\n"); } http_response_printf(res, "</channel>\n</rss>"); http_response_send(res); exit(0); }
void wiki_show_changes_page(HttpResponse *res) { WikiPageList **pages = NULL; int n_pages, i, j, m, lg; char spacing[24]; char *difflink; int *table, *done; //alloc mem with n_pages char *str_ptr; // wiki_show_header(res, "Changes", FALSE); pages = wiki_get_pages(&n_pages, NULL); table = malloc((1 + n_pages) * sizeof(int)); done = malloc((1 + n_pages) * sizeof(int)); http_response_set_content_type(res, "text/html"); /* regroup file and previous file */ for (i = 0; i < n_pages + 1; i++) { done[i] = 0; table[i] = 0; } m = 0; for (i = 0; i < n_pages; i++) if (!done[i] && !strstr(pages[i]->name, ".prev.1")) { for (j = 0; j < n_pages; j++) if (!done[j] && (str_ptr = strstr(pages[j]->name, pages[i]->name)) && !strcmp(str_ptr + strlen(pages[i]->name), ".prev.1")) { table[m++] = i; table[m++] = j; done[i] = 1; done[j] = 1; break; } } /* complete with new files */ for (i = 0; i < n_pages; i++) if (!done[i]) table[m++] = i; for (j = 0; j < m; j++) { struct tm *pTm; char datebuf[64]; i = table[j]; if (strstr(pages[i]->name, ".prev.1")) { strcpy(spacing, " "); lg = asprintf(&difflink, "<a href='/#/Diff/%s'>diff</a>\n" "<a href='/#/Comp/%s'>comp</a>\n", pages[i]->name, pages[i]->name); } else { *spacing = '\0'; difflink = strdup("\0"); } pTm = localtime(&pages[i]->mtime); strftime(datebuf, sizeof(datebuf), "%Y-%m-%d %H:%M", pTm); http_response_printf(res, "%s<a href=/#/View/%s>%s</a> %s %s<br />\n", spacing, pages[i]->name, pages[i]->name, datebuf, difflink); } http_response_printf(res, "<p>Wiki changes are also available as a " "<a href='/rss'>RSS</a> feed.\n"); // wiki_show_footer(res); http_response_send(res); free(table); free(done); exit(0); }
void wiki_handle_rest_call(HttpRequest *req, HttpResponse *res, char *func) { if (func != NULL && *func != '\0') { if (!strcmp(func, "page/get")) { char *page = http_request_param_get(req, "page"); if (page == NULL) page = http_request_get_query_string(req); if (page && (access(page, R_OK) == 0)) { http_response_printf(res, "%s", file_read(page)); http_response_send(res); return; } } else if (!strcmp(func, "page/set")) { char *wikitext = NULL, *page = NULL; if( ( (wikitext = http_request_param_get(req, "text")) != NULL) && ( (page = http_request_param_get(req, "page")) != NULL)) { file_write(page, wikitext); http_response_printf(res, "success"); http_response_send(res); return; } } else if (!strcmp(func, "page/delete")) { char *page = http_request_param_get(req, "page"); if (page == NULL) page = http_request_get_query_string(req); if (page && (unlink(page) > 0)) { http_response_printf(res, "success"); http_response_send(res); return; } } else if (!strcmp(func, "page/exists")) { char *page = http_request_param_get(req, "page"); if (page == NULL) page = http_request_get_query_string(req); if (page && (access(page, R_OK) == 0)) { http_response_printf(res, "success"); http_response_send(res); return; } } else if (!strcmp(func, "pages") || !strcmp(func, "search")) { WikiPageList **pages = NULL; int n_pages, i; char *expr = http_request_param_get(req, "expr"); if (expr == NULL) expr = http_request_get_query_string(req); pages = wiki_get_pages(&n_pages, expr); if (pages) { for (i=0; i<n_pages; i++) { struct tm *pTm; char datebuf[64]; pTm = localtime(&pages[i]->mtime); strftime(datebuf, sizeof(datebuf), "%Y-%m-%d %H:%M", pTm); http_response_printf(res, "%s\t%s\n", pages[i]->name, datebuf); } http_response_send(res); return; } } } http_response_set_status(res, 500, "Error"); http_response_printf(res, "<html><body>Failed</body></html>\n"); http_response_send(res); return; }