Пример #1
0
static void
render_error(const char *fmt, ...)
{
	va_list ap;
	char s[8192], e[8192];

	va_start(ap, fmt);
	vsnprintf(s, sizeof(s), fmt, ap);
	va_end(ap);
	printf("%s\r\n\r\n", rssroll->ct_html);
	fflush(stdout);
	d_printf("<html><head><title>Error</title></head><body>\n");
	d_printf("<h2>Error</h2><p><b>%s</b><p>\n", s);
	if (q != NULL) {
		d_printf("Request: <b>%s</b><br>\n",
		    html_esc(q->query_string, e, sizeof(e), 0));
		d_printf("Address: <b>%s</b><br>\n",
		    html_esc(q->remote_addr, e, sizeof(e), 0));
		if (q->user_agent != NULL)
			d_printf("User agent: <b>%s</b><br>\n",
			    html_esc(q->user_agent, e, sizeof(e), 0));
		if (q->referer != NULL)
			d_printf("Referer: <b>%s</b><br>\n",
			    html_esc(q->referer, e, sizeof(e), 0));
	}
	d_printf("Time: <b>%s</b><br>\n", rfc822_time(time(0)));
	d_printf("<p>If you believe this is a bug in <i>this</i> server, "
	    "please send reports with instructions about how to "
	    "reproduce to <a href=\"mailto:%s\"><b>%s</b></a><p>\n",
	    rssroll->owner, rssroll->owner);
	d_printf("</body></html>\n");
}
Пример #2
0
void
render_error(const char *fmt, ...)
{
	va_list ap;
	char s[8192];
	tbstring sa = {0};

	va_start(ap, fmt);
	vsnprintf(s, sizeof(s), fmt, ap);
	va_end(ap);
	printf("%s\n\n", conf.ct_html);
	printf("<html><head><title>Error</title></head><body>\n");
	printf("<h2>Error</h2><p><b>%s</b><p>\n", s);
	if (q != NULL) {
		printf("Request: <b>%s</b><br>\n",
		    html_esc(q->query_string, &sa, 0));
		printf("Address: <b>%s</b><br>\n",
		    html_esc(q->remote_addr, &sa, 0));
		if (q->user_agent != NULL)
			printf("User agent: <b>%s</b><br>\n",
			    html_esc(q->user_agent, &sa, 0));
	}
	printf("<p>Please send reports with instructions about how to "
	    "reproduce to <a href=\"mailto:%s\"><b>%s</b></a><p>\n",
	    conf.mailaddr, conf.mailaddr);
	printf("</body></html>\n");

	tbstrfree(&sa);
}
Пример #3
0
void
render_edit_extra(const char *m, void *arg)
{
	ChopstixItemExtra *extra = (ChopstixItemExtra *)arg;
	ChopstixMenuitem *mi;
	tbstring sa = {0};

	if ((mi = menu_getitem(menucode)) == NULL)
		return;

	if (!strcmp(m, "ITEMCODE"))
		printf("%s", html_esc(mi->code, &sa, 0));
	else if (!strcmp(m, "ITEMGEN"))
		printf("%d", mi->gen);
	else if (!strcmp(m, "ITEMFLAGS"))
		printf("%s", mi->flags.deleted ? "Deleted" : "Active");
	else if (!strcmp(m, "ITEMEXTRAQTY"))
		printf("%d", extra->qty);
	else if (!strcmp(m, "ITEMEXTRACODE"))
		printf("%s", html_esc(extra->code, &sa, 0));
	else if (!strcmp(m, "ITEMEXTRANAME")) {
		if ((mi = menu_getitem(extra->code)))
			printf("%s", html_esc(mi->name, &sa, 0));
	} else
		printf("render_extra: unknown macro '%s'", m);

	tbstrfree(&sa);
}
Пример #4
0
void
render_extra(const char *m, void *arg)
{
	ChopstixItemExtra *extra = (ChopstixItemExtra *)arg;
	ChopstixMenuitem *mi;
	tbstring sa = {0};

	if (!strcmp(m, "ITEMEXTRAQTY"))
		printf("%d", extra->qty);
	else if (!strcmp(m, "ITEMEXTRACODE"))
		printf("%s", html_esc(extra->code, &sa, 0));
	else if (!strcmp(m, "ITEMEXTRANAME")) {
		if ((mi = menu_getitem(extra->code)))
			printf("%s", html_esc(mi->name, &sa, 0));
	} else
		printf("render_extra: unknown macro '%s'", m);

	tbstrfree(&sa);
}
Пример #5
0
void
render_edit(const char *m, void *arg)
{
	ChopstixMenuitem *mi = (ChopstixMenuitem *)arg;
	tbstring sa = {0};
	char fn[MAXPATHLEN];
	unsigned int u;

	if (mi == NULL)
		if ((mi = menu_getitem(menucode)) == NULL)
			return;

	if (!strcmp(m, "ITEMCODE"))
		printf("%s", html_esc(mi->code, &sa, 0));
	else if (!strcmp(m, "ITEMGEN"))
		printf("%d", mi->gen);
	else if (!strcmp(m, "ITEMFLAGS"))
		printf("%s", mi->flags.deleted ? "Deleted" : "Active");
	else if (!strcmp(m, "ITEMNAME"))
		printf("%s", html_esc(mi->name, &sa, 0));
	else if (!strcmp(m, "ITEMPRICE"))
		PRINTF_MONEY(mi->price);
	else if (!strcmp(m, "EDITSTYLES")) {
		snprintf(fn, sizeof(fn), "%s/edit_style.html", conf.htmldir);
		for (u = 0; u < mi->styles.len; u++)
			render_html(fn, render_edit_style, &mi->styles.val[u]);
	} else if (!strcmp(m, "EDITEXTRAS")) {
		snprintf(fn, sizeof(fn), "%s/edit_extra.html", conf.htmldir);
		for (u = 0; u < mi->extras.len; u++)
			render_html(fn, render_edit_extra, &mi->extras.val[u]);
	} else if (!strcmp(m, "EDITSUBITEMS")) {
		snprintf(fn, sizeof(fn), "%s/edit_subitem.html", conf.htmldir);
		if (mi->subitems)
			for (u = 0; u < mi->subitems->len; u++)
				render_html(fn, render_edit_extra, &mi->subitems->val[u]);
	} else
		printf("render_list: unknown macro '%s'", m);

	tbstrfree(&sa);
}
Пример #6
0
void
render_style(const char *m, void *arg)
{
	ChopstixItemStyle *style = (ChopstixItemStyle *)arg;
	tbstring sa = {0};

	if (!strcmp(m, "ITEMSTYLENAME"))
		printf("%s", html_esc(style->name, &sa, 0));
	else
		printf("render_style: unknown macro '%s'", m);

	tbstrfree(&sa);
}
Пример #7
0
void
render_edit_style(const char *m, void *arg)
{
	ChopstixItemStyle *style = (ChopstixItemStyle *)arg;
	ChopstixMenuitem *mi;
	tbstring sa = {0};

	if ((mi = menu_getitem(menucode)) == NULL)
		return;

	if (!strcmp(m, "ITEMCODE"))
		printf("%s", html_esc(mi->code, &sa, 0));
	else if (!strcmp(m, "ITEMGEN"))
		printf("%d", mi->gen);
	else if (!strcmp(m, "ITEMFLAGS"))
		printf("%s", mi->flags.deleted ? "Deleted" : "Active");
	else if (!strcmp(m, "ITEMSTYLENAME"))
		printf("%s", html_esc(style->name, &sa, 0));
	else
		printf("render_style: unknown macro '%s'", m);

	tbstrfree(&sa);
}
Пример #8
0
int
render_html(const char *html_fn, render_cb r, void *arg)
{
	FILE *f;
	char s[8192];
	char fn[MAXPATHLEN];
	tbstring sa = {0};

	if ((f = fopen(html_fn, "r")) == NULL) {
		printf("ERROR: fopen: %s: %s<br>\n", html_fn, strerror(errno));
		return (1);
	}
	while (fgets(s, sizeof(s), f)) {
		char *a, *b;

		for (a = s; (b = strstr(a, "%%")) != NULL;) {
			*b = 0;
			printf("%s", a);
			a = b + 2;
			if ((b = strstr(a, "%%")) != NULL) {
				*b = 0;
				if (!strcmp(a, "ACTION")) {
					if (action == NULL)
						action = "front";
					printf("%s", action);
				} else if (!strcmp(a, "BASEURL"))
					printf("%s", conf.baseurl);
				else if (!strcmp(a, "BASEDIR"))
					printf("%s", conf.htmldir);
				else if (!strcmp(a, "BASECSS")) {
					printf("%s?action=css%s", conf.baseurl,
							display_type == DISPLAY_PRINT ?
							"&amp;display=print" :
							display_type == DISPLAY_CSV ?
							"&amp;display=csv" : "");
				} else if (!strcmp(a, "TITLE"))
					printf("%s", conf.title);
				else if (!strcmp(a, "HEADER")) {
					snprintf(fn, sizeof(fn), "%s/header.html", conf.htmldir);
					render_html(fn, NULL, NULL);
				} else if (!strcmp(a, "FOOTER")) {
					snprintf(fn, sizeof(fn), "%s/footer.html", conf.htmldir);
					render_html(fn, NULL, NULL);
				} else if (!strcmp(a, "ROW")) {
					printf("row%d", rowselect);
					rowselect = !rowselect;
				} else if (!strcmp(a, "ROWRESET"))
					rowselect = 0;
				else if (!strcmp(a, "MENUCODE")) {
					printf("%s", html_esc(menucode, &sa, 0));
				} else if (!strcmp(a, "QUERY"))
					printf("%s", q->query_string);
#if 0
				else if (!strcmp(a, "RCSID"))
					printf("%s", rcsid);
#endif
				else if (r != NULL)
					(*r)(a, arg);
				a = b + 2;
			}
		}
		printf("%s", a);
	}
	fclose(f);
	tbstrfree(&sa);
	return 0;
}
Пример #9
0
void
render_order_list(const char *m, void *arg)
{
	ChopstixOrder *order = (ChopstixOrder *)arg;
	char fn[1024];
	unsigned int u, s;
	tbstring sa = {0};
	tbstring sa2 = {0};

	if (!strcmp(m, "ORDERCODE"))
		printf("%d", order->key);

	else if (!strcmp(m, "ORDERCODEEDIT"))
		printf("<a href=\"%s?action=orderdetail&amp;code=%d\">%d</a>",
				conf.baseurl, order->key, order->key);

	else if (!strcmp(m, "ORDERDATETIME")) {
		char datetime[sizeof("YYYY-MM-DD HH:MM:SS")];
		strftime(datetime, sizeof(datetime), "%F %T",
				localtime(&order->date));
		printf("%s", datetime);

	} else if (!strcmp(m, "ORDERTYPE")) {
		switch (order->type) {
			case ORDER_NONE:
				printf("NONE");
				break;
			case ORDER_PICKUP:
				printf("PICKUP");
				break;
			case ORDER_DELIVERY:
				printf("DELIVERY");
				break;
			case ORDER_WALKIN:
				printf("WALKIN");
				break;
			case ORDER_VOID:
				printf("VOID");
				break;
		}

	} else if (!strcmp(m, "ORDERPAYTYPE")) {
		switch (order->payment.type) {
			case PAYMENT_NONE:
				printf("NONE");
				break;
			case PAYMENT_CASH:
				printf("CASH");
				break;
			case PAYMENT_CREDIT:
				printf("CREDIT");
				break;
			case PAYMENT_VOID:
				printf("VOID");
				break;
			case PAYMENT_DEBIT:
				printf("DEBIT");
				break;
			case PAYMENT_CHEQUE:
				printf("CHEQUE");
				break;
			case PAYMENT_OTHER:
				printf("OTHER");
				break;
		}

	} else if (!strcmp(m, "ORDERPAYDETAIL")) {
		switch (order->payment.type) {
			case PAYMENT_NONE:
				printf("NONE");
				break;
			case PAYMENT_CASH:
				printf("CASH");
				break;
			case PAYMENT_CREDIT:
				if (order->payment.ccinfo)
					printf("CREDIT - CC# %s EXP %s",
							html_esc(order->payment.ccinfo->number, &sa, 0),
							html_esc(order->payment.ccinfo->expiry, &sa2, 0));
				else
					printf("CREDIT - (INFO PURGED)");
				break;
			case PAYMENT_VOID:
				printf("VOID");
				break;
			case PAYMENT_DEBIT:
				printf("DEBIT");
				break;
			case PAYMENT_CHEQUE:
				printf("CHEQUE");
				break;
			case PAYMENT_OTHER:
				printf("OTHER");
				break;
		}

	} else if (!strcmp(m, "ORDERSPECIAL"))
		printf("%s", strlen(order->special)
				? html_esc(order->special, &sa, 0) : "&nbsp;");
	else if (!strcmp(m, "ORDERSUBTOTAL"))
		PRINTF_MONEY(order->total.subtotal);
	else if (!strcmp(m, "ORDERDISCOUNT"))
		PRINTF_MONEY(order->total.discount);
	else if (!strcmp(m, "ORDERDELIVERY"))
		PRINTF_MONEY(order->total.delivery);
	else if (!strcmp(m, "ORDERCREDIT"))
		PRINTF_MONEY(order->total.credit);
	else if (!strcmp(m, "ORDERTAX1"))
		PRINTF_MONEY(order->total.tax1);
	else if (!strcmp(m, "ORDERTAX2"))
		PRINTF_MONEY(order->total.tax2);
	else if (!strcmp(m, "ORDERTOTAL"))
		PRINTF_MONEY(order->total.total);
	else if (!strncmp(m, "CUST", 4))
		render_customer_info(m, &order->customer);
	else if (!strcmp(m, "ORDERITEMS")) {
		snprintf(fn, sizeof(fn), "%s/order_item.html", conf.htmldir);
		for (u = 0; u < order->items.len; u++) {
			render_html(fn, render_order_item, &order->items.val[u]);
			if (order->items.val[u].subitems)
				for (s = 0; s < order->items.val[u].subitems->len; s++)
					render_html(fn, render_order_subitem,
							&order->items.val[u].subitems->val[s]);
		}
	} else if (!strcmp(m, "ORDERRULEITEMS")) {
		snprintf(fn, sizeof(fn), "%s/order_item.html", conf.htmldir);
		for (u = 0; u < order->ruleitems.len; u++)
			render_html(fn, render_order_item, &order->ruleitems.val[u]);
	} else
		printf("render_order_list: unknown macro '%s'<br>\n", m);

	tbstrfree(&sa);
	tbstrfree(&sa2);
}