Beispiel #1
0
int
bbsbkndoc_main()
{
	FILE *fp;
	char board[80], bkn[80], dir[160], *ptr, genbuf[STRLEN];
	struct boardmem *x1;
	struct fileheader x;
	int i, start, total;
	html_header(1);
	printf("<script src=" BBSJS "></script>\n");
	changemode(BACKNUMBER);
	//check_msg();
	getparmboard(board, sizeof(board));
	strsncpy(bkn, getparm("bkn"), 32);
	ptr = bkn;
	while (*ptr) {
		if (*ptr != 'B' && *ptr != '.' && !isdigit(*ptr))
			http_fatal("错误的过刊号");
		ptr++;
	}
	if (strlen(bkn) < 3)
		http_fatal("错误的过刊号");

	x1 = getboard(board);
	if (x1 == 0)
		nosuchboard(board, "bbsbkndoc");
	else {
		updateinboard(x1);
		strcpy(board, x1->header.filename);
		sprintf(dir, "boards/.backnumbers/%s/%s", board, bkn);
		if (!file_exist(dir))
			http_fatal("没有这卷过刊");
		sprintf(dir, "boards/.backnumbers/%s/%s/.DIR", board, bkn);
		fp = fopen(dir, "r");
		total = file_size(dir) / sizeof (struct fileheader);
		start = getdocstart(total, w_info->t_lines);
		printf("<body topmargin=0>");
		printf("<nobr><center>\n");
		sprintf(genbuf, "阅览过刊 文章数[%d]", total);
		printboardtop(x1, 5, genbuf);
		if (total <= 0)
			http_fatal("本卷过刊目前没有文章");
		printf("<table cellSpacing=0 cellPadding=2>\n");
		printf
		    ("<tr class=docbgcolor><td>序号<td>状态<td>作者<td>日期<td>标题<td>星级<td>评价</td>\n");
		if (fp) {
			fseek(fp, (start - 1) * sizeof (struct fileheader),
			      SEEK_SET);
			for (i = 0; i < w_info->t_lines; i++) {
				char filename[255];
				char *ptr;
				if (fread(&x, sizeof (x), 1, fp) <= 0)
					break;
				if (x.accessed & FH_HIDE) {
					printf
					    ("<tr><td>%d<td>&nbsp;<td>不详<td>不详<td>-本文已经被删除-<td>\n",
					     start + i);
					continue;
				}
				ptr = flag_str2(x.accessed, 1);
				sprintf(filename,
					"boards/.backnumbers/%s/%s/%s", board,
					bkn, fh2fname(&x));
				printf("<tr><td>%d<td>%s<td>%s", start + i, ptr,
				       userid_str(x.owner));
				printf("<td>%12.12s", Ctime(x.filetime) + 4);
				x.title[40] = 0;
				printf
				    ("<td><a href=bbsbkncon?B=%d&bkn=%s&file=%s&num=%d>%s%s </a>%s",
				     getbnumx(x1), bkn, fh2fname(&x), start + i - 1,
				     strncmp(x.title, "Re: ", 4) ? "○ " : "",
				     void1(titlestr(x.title)),
				     size_str(eff_size(filename)));
				printf("<td><font color=%s>%d</font>\n",
				       x.staravg50 ? "red" : "black",
				       x.staravg50 / 50);
				printf("<td><font color=%s>%d人</font>\n",
				       x.hasvoted ? "red" : "black",
				       x.hasvoted);
			}
			printf("</table>");
			printhr();
			fclose(fp);
		}
		sprintf(genbuf, "bbsbkndoc?B=%d&bkn=%s", getbnumx(x1), bkn);
		bbsdoc_helper(genbuf, start, total, w_info->t_lines);
		printf("<table><tr><td><form name=form1 action=bbsbkndoc>\n");
		printf("<input type=hidden name=B value=%d>", getbnumx(x1));
		printf("<input type=hidden name=bkn value=%s>", bkn);
		printf
		    ("<input type=submit value=跳转到> 第 <input type=text name=start size=4> 篇");
		printf("</form>\n");
		printf("</td><td><form name=form2 action=bbsdoc>\n");
		printf
		    ("<input type=submit value=跳转到><input type=text name=board size=5> 讨论区");
		printf("</form></td></tr></table>\n");
		showfile(MY_BBS_HOME "/wwwtmp/googleanalytics");
		printf("</body>");
		http_quit();
	}
	return 0;
}
Beispiel #2
0
int bbstopic_act(char * info)
{
    char board[80], topic[256], curr[256];
    int boardmode, start;
    int total, cnt, i, tmp, ismail, slen;
    struct fileheader fh[WMLP_TPOST_PER_PAGE], fhs[WMLP_TPOST_PER_PAGE], fh1[WMLP_TPOST_PER_PAGE];
    struct shortfile * b;
    char buf[256], buf2[256];
    char * ptr;
    FILE * fp;
    if (loginok)
    {
        wmlmode (u_info, READING);
    }
    strncpy (board, getparm("board"), 79);
    strncpy (topic, getparm("topic"), 255);
    strncpy (curr, getparm("curr"), 255);
    boardmode = atoi(getparm ("mode"));
    start = atoi(getparm("start"));
    ismail = !strcmp(board, WML_VB_MAIL);
    boardModeDir(board, boardmode, buf, buf2);
    b = getbcache(board);
    if (!*topic)
    {
        strcpy (info, "缺少主题。");
        return -1;
    }
    if (!loginok || (!ismail && (!has_read_perm(&currentuser, board) )))
    {
        strcpy (info, "权限不够。");
        return -2;
    }
    fp = fopen (buf, "rb");
    if (!fp)
    {
        sprintf (info, "无法打开索引。");
        return -1;
    }
    printf ("<card title=\"主题树 -- %s\">", BBSNAME);
    if (ismail)
    {
        printf ("<p><anchor><go href=\"bbsdoc.wml?board=%s\" />信箱</anchor></p>", WML_VB_MAIL);
    }
    else
    {
        printf ("<p>板面:<anchor><go href=\"bbsdoc.wml?board=%s&amp;mode=%d\" />%s/%s</anchor></p>", b->filename, boardmode, b->title + 11, b->filename);
    }
    w_hsprintf (buf, "%s", topic);
    printf ("<p>主题:%s</p>", buf);
    cnt = 0;
    slen = 0;
    start --;
    memset (fhs, 0, sizeof(fhs));
    while (tmp = fread(fh, sizeof(struct fileheader), WMLP_TPOST_PER_PAGE, fp))
    {
        for (i = 0; i < tmp; i++)
        {
            ptr = (fh + i)->title;
            if (!strncasecmp(ptr, "Re: ", 3))
            {
                ptr += 4;
            }
            if (!strncmp(topic, ptr, 56))
            {
                cnt++;
                if (start < 0 || start / WMLP_TPOST_PER_PAGE <= cnt / WMLP_TPOST_PER_PAGE)
                {
                    *(fhs + slen) = *(fh + i);
                    slen = slen % WMLP_TPOST_PER_PAGE + 1;
                    //循环使用好吧。
                }
                if (curr && !strcmp((fh + i)->filename, curr))
                {
                    start = (cnt - 1) / WMLP_TPOST_PER_PAGE * WMLP_TPOST_PER_PAGE;
                }
                if (cnt == WMLP_TPOST_PER_PAGE)
                {
                    memcpy (fh1, fhs, sizeof(fh1));
                }
            }
        }
    }
    if (start < 0)
    {
        if (cnt > WMLP_TPOST_PER_PAGE)
        {
            memcpy (fhs, fh1, sizeof(fh1));
            slen = WMLP_TPOST_PER_PAGE;
        }
        start = 0;
    }
    printf ("<p>同主题%d篇,以下显示%d至%d。</p>", cnt, start + 1, start + slen);
    for (i = 0; i < slen; i++)
    {
        ptr = ismail ? (((fhs + i)->accessed[0] & FILE_READ) ? "" : "N") : flag_str2 ((fhs + i)->accessed[0], brc_has_read((fhs + i)->filename));
        printf ("<p>%s %s ", strncasecmp((fhs + i)->title, "Re: ", 3) ? "T" : "R", ptr);
        strncpy (buf, (fhs + i)->owner, IDLEN + 1);
        for (ptr = buf; *ptr; ptr++)
        {
            if (!(isalnum(*ptr)))
            {
                *ptr = 0;
                break;
            }
        }
        printf ("<anchor><go href=\"bbsqry.wml?userid=%s\" />%s</anchor> ", buf, buf);
        printf ("<anchor><go href=\"bbscon.wml?board=%s&amp;mode=%d&amp;file=%s\" />", board, boardmode, (fhs + i)->filename);
        datetime (buf, atoi((fhs + i)->filename + 2));
        w_hprintf ("%s", buf);
        printf ("</anchor></p>");
    }
    if (cnt > WMLP_TPOST_PER_PAGE)
    {
        printf ("<p>");
        strcpy (buf, urlencode2(topic));
        for (i = 0; i <= cnt / WMLP_TPOST_PER_PAGE; i++)
        {
            if (i == 0 || i == cnt / WMLP_TPOST_PER_PAGE || abs(i - (start / WMLP_TPOST_PER_PAGE)) < 3)
            {
                if (i == start / WMLP_TPOST_PER_PAGE)
                {
                    printf ("%d ", i + 1);
                }
                else
                {
                    printf ("<anchor><go href=\"bbstopic.wml?board=%s&amp;mode=%d&amp;topic=%s&amp;start=%d\" />%d</anchor> ", board, boardmode, buf, (i * WMLP_TPOST_PER_PAGE) + 1, i + 1);
                }
            }
        }
        printf ("</p>");
    }
    return 0;
}