#include <dirent.h>
+
+/*
+ * DownLoad User Image (see their avatar or photo or whatever)
+ * If this command succeeds, it follows the same protocol as the DLAT command.
+ */
+void cmd_dlui(char *cmdbuf)
+{
+ struct ctdluser ruser;
+ char buf[SIZ];
+
+ extract_token(buf, cmdbuf, 0, '|', sizeof buf);
+ if (CtdlGetUser(&ruser, buf) != 0) {
+ cprintf("%d No such user.\n", ERROR + NO_SUCH_USER);
+ return;
+ }
+ if (ruser.msgnum_pic < 1) {
+ cprintf("%d No image found.\n", ERROR + FILE_NOT_FOUND);
+ return;
+ }
+
+ struct CtdlMessage *msg = CtdlFetchMessage(ruser.msgnum_pic, 1, 1);
+ if (msg != NULL) {
+ // 600 402132|-1||image/gif|
+ safestrncpy(CC->download_desired_section, "1", sizeof CC->download_desired_section);
+ CtdlOutputPreLoadedMsg(msg, MT_SPEW_SECTION, HEADERS_NONE, 1, 0, 0);
+ CM_Free(msg);
+ }
+ else {
+ cprintf("%d No image found.\n", ERROR + MESSAGE_NOT_FOUND);
+ return;
+ }
+}
+
+
+
+
/*
* Import function called by import_old_userpic_files() for a single user
*/
if (!threading)
{
import_old_userpic_files();
+ CtdlRegisterProtoHook(cmd_dlui, "DLUI", "DownLoad User Image");
}
/* return our module name for the log */
return "image";
<div id="content" class="service">
<div id="bio_page">
<div id="bio_pic">
- <??("COND:USER:PIC", 1, B"who")><img src="image?name=_userpic_?parm=<?BSTR("who", "U")>" alt=""><??("X", 1)>
+ <img src="userpic?user=<?BSTR("who", "U")>" alt="" border=0>
</div>
<?!("X", 1)>
- <div id="bio_title"><h1><<?BSTR("who", "X")></h1></div>
+ <div id="bio_title"><h1><?BSTR("who", "X")></h1></div>
<div id="bio_text">
<?USER:BIO(B"who", "FJUSTIFY")>
</div>
FreeStrBuf(&Buf);
}
+
int Conditional_USER_HAS_PIC(StrBuf *Target, WCTemplputParams *TP)
{
- StrBuf *Buf;
- const char *who;
- long len;
- int r = 0;
-
- GetTemplateTokenString(Target, TP, 2, &who, &len);
-
- Buf = NewStrBuf();
- serv_printf("OIMG _userpic_|%s", who);
- StrBuf_ServGetln(Buf);
- if (GetServerStatus(Buf, NULL) != 2) {
- r = 1;
- }
- else {
- r = 0;
- }
- serv_puts("CLOS");
- StrBuf_ServGetln(Buf);
- GetServerStatus(Buf, NULL);
- FreeStrBuf(&Buf);
- return(r);
+ // ajc 2016apr10 this needs to be re-evaluated with the new protocol
+ return(0);
}
}
+void display_userpic(void) {
+ off_t bytes;
+ StrBuf *Buf = NewStrBuf();
+ const char *username = bstr("user");
+ serv_printf("DLUI %s", username);
+ StrBuf_ServGetln(Buf);
+ if (GetServerStatus(Buf, NULL) == 6) {
+ StrBufCutLeft(Buf, 4);
+ bytes = StrBufExtract_long(Buf, 0, '|');
+ StrBuf *content_type = NewStrBuf();
+ StrBufExtract_token(content_type, Buf, 3, '|');
+ WC->WBuf = NewStrBuf();
+ StrBuf_ServGetBLOBBuffered(WC->WBuf, bytes);
+ http_transmit_thing(ChrPtr(content_type), 0);
+ FreeStrBuf(&content_type);
+ }
+ else {
+ output_error_pic("", "");
+ }
+ FreeStrBuf(&Buf);
+}
+
+
+
void _select_user_to_edit(void) {
select_user_to_edit(NULL);
}
WebcitAddUrlHandler(HKEY("display_edituser"), "", 0, _display_edituser, 0);
WebcitAddUrlHandler(HKEY("edituser"), "", 0, edituser, 0);
WebcitAddUrlHandler(HKEY("create_user"), "", 0, create_user, 0);
+ WebcitAddUrlHandler(HKEY("userpic"), "", 0, display_userpic, 0);
RegisterNamespace("USERLIST:USERNAME", 0, 1, tmplput_USERLIST_UserName, NULL, CTX_USERLIST);
RegisterNamespace("USERLIST:PASSWD", 0, 1, tmplput_USERLIST_Password, NULL, CTX_USERLIST);