#include #include #include #include #include "err.h" #include "db.h" #include "query.h" #include "site.h" /* Print UNIX timestamp as written date. */ void printdate(int timestamp) { char buf[20]; struct tm *t; t = localtime((time_t *)×tamp); strftime(buf, 20, "%Y-%m-%d %H:%M", t); printf(buf); } /* * The `new' functions provide a way to add a new attachment/post/user. * On GET, they show a form. On POST, they insert the posted information * into the database. */ void newatt() {} void newpost() {} void newuser() {} /* * The `show' functions show an existing attachment/post/user * or some other type of page. */ void showatt(id) { struct att *att; if(!(att = getatt(selectbyint("atts", "oid", id)))){ srverr("Could not retrieve attachment"); return; } printf("Content-Type: %s\n\n", att->mime); printf("%.*s", att->bytes, att->data); free(att); } void showfront() { char *title; struct post *post; struct user *user; sqlite3_stmt *pstmt, *ustmt; if(sqlite3_prepare(db, "SELECT oid, * from posts ORDER BY created DESC", -1, &pstmt, 0) != SQLITE_OK){ srverr("Could not retrieve posts"); return; } if(sqlite3_prepare(db, "SELECT oid, * from users ORDER BY created DESC", -1, &ustmt, 0) != SQLITE_OK){ srverr("Could not retrieve users"); return; } title = site.name; printf("Content-Type: text/html\n\n"); #include "t/front.tc" } void showpost(int id) { char *title; struct att *att; struct post *post; struct user *user; sqlite3_stmt *stmt; if(!(post = getpost(selectbyint("posts", "oid", id)))){ srverr("Could not retrieve post"); return; } if(!(user = getuser(selectbyint("users", "oid", post->user)))){ srverr("Could not retrieve post author"); return; } stmt = selectbyint("atts", "post", id); title = post->subject; printf("Content-Type: text/html\n\n"); #include "t/post.tc" free(user); free(post); } void showuser(int id) { char title[120]; sqlite3_stmt *stmt; struct post *post; struct user *user; if(!(user = getuser(selectbyint("users", "oid", id)))){ srverr("Could not retrieve user"); return; } if(sqlite3_prepare(db, "SELECT oid, * from posts WHERE user = ? ORDER BY created DESC", -1, &stmt, 0) != SQLITE_OK) goto err; if(sqlite3_bind_int(stmt, 1, id) != SQLITE_OK) goto err; snprintf(title, 120, "User: %s", user->full? user->full: user->name); printf("Content-Type: text/html\n\n"); #include "t/user.tc" free(user); return; err: srverr("Could not retrieve posts"); return; }