| 9 |
#include "article_cache.h" |
#include "article_cache.h" |
| 10 |
#include "article_post.h" |
#include "article_post.h" |
| 11 |
#include "bbs.h" |
#include "bbs.h" |
| 12 |
|
#include "bwf.h" |
| 13 |
#include "database.h" |
#include "database.h" |
| 14 |
#include "editor.h" |
#include "editor.h" |
| 15 |
#include "io.h" |
#include "io.h" |
| 22 |
#include <stdlib.h> |
#include <stdlib.h> |
| 23 |
#include <time.h> |
#include <time.h> |
| 24 |
|
|
| 25 |
#define TITLE_INPUT_MAX_LEN 72 |
enum _article_post_constant_t |
| 26 |
#define ARTICLE_CONTENT_MAX_LEN 1024 * 1024 * 4 // 4MB |
{ |
| 27 |
#define ARTICLE_QUOTE_MAX_LINES 20 |
TITLE_INPUT_MAX_LEN = 72, |
| 28 |
|
ARTICLE_QUOTE_MAX_LINES = 20, |
| 29 |
#define MODIFY_DT_MAX_LEN 50 |
MODIFY_DT_MAX_LEN = 50, |
| 30 |
|
}; |
| 31 |
|
|
| 32 |
int article_post(const SECTION_LIST *p_section, ARTICLE *p_article_new) |
int article_post(const SECTION_LIST *p_section, ARTICLE *p_article_new) |
| 33 |
{ |
{ |
| 104 |
ch = 0; |
ch = 0; |
| 105 |
} |
} |
| 106 |
|
|
| 107 |
for (; !SYS_server_exit; ch = igetch_t(MAX_DELAY_TIME)) |
while (!SYS_server_exit) |
| 108 |
{ |
{ |
| 109 |
switch (toupper(ch)) |
switch (toupper(ch)) |
| 110 |
{ |
{ |
| 123 |
len = q - p; |
len = q - p; |
| 124 |
if (*p != '\0') |
if (*p != '\0') |
| 125 |
{ |
{ |
| 126 |
|
if ((ret = check_badwords(p, '*')) < 0) |
| 127 |
|
{ |
| 128 |
|
log_error("check_badwords(title) error\n"); |
| 129 |
|
} |
| 130 |
|
else if (ret > 0) |
| 131 |
|
{ |
| 132 |
|
memcpy(title_input, p, (size_t)len + 1); |
| 133 |
|
continue; |
| 134 |
|
} |
| 135 |
memcpy(p_article_new->title, p, (size_t)len + 1); |
memcpy(p_article_new->title, p, (size_t)len + 1); |
| 136 |
memcpy(title_input, p_article_new->title, (size_t)len + 1); |
memcpy(title_input, p_article_new->title, (size_t)len + 1); |
| 137 |
} |
} |
| 156 |
sign_id = ch - '0'; |
sign_id = ch - '0'; |
| 157 |
break; |
break; |
| 158 |
default: // Invalid selection |
default: // Invalid selection |
| 159 |
|
ch = igetch_t(BBS_max_user_idle_time); |
| 160 |
continue; |
continue; |
| 161 |
} |
} |
| 162 |
|
|
| 177 |
prints("(S)发送, (C)取消, (T)更改标题 or (E)再编辑? [S]: "); |
prints("(S)发送, (C)取消, (T)更改标题 or (E)再编辑? [S]: "); |
| 178 |
iflush(); |
iflush(); |
| 179 |
|
|
| 180 |
for (ch = 0; !SYS_server_exit; ch = igetch_t(MAX_DELAY_TIME)) |
for (ch = 0; !SYS_server_exit; ch = igetch_t(BBS_max_user_idle_time)) |
| 181 |
{ |
{ |
| 182 |
switch (toupper(ch)) |
switch (toupper(ch)) |
| 183 |
{ |
{ |
| 232 |
goto cleanup; |
goto cleanup; |
| 233 |
} |
} |
| 234 |
|
|
| 235 |
|
if (check_badwords(content, '*') < 0) |
| 236 |
|
{ |
| 237 |
|
log_error("check_badwords(content) error\n"); |
| 238 |
|
ret = -1; |
| 239 |
|
goto cleanup; |
| 240 |
|
} |
| 241 |
|
|
| 242 |
db = db_open(); |
db = db_open(); |
| 243 |
if (db == NULL) |
if (db == NULL) |
| 244 |
{ |
{ |
| 535 |
(reply_note ? "关闭" : "开启")); |
(reply_note ? "关闭" : "开启")); |
| 536 |
iflush(); |
iflush(); |
| 537 |
|
|
| 538 |
ch = igetch_t(MAX_DELAY_TIME); |
ch = igetch_t(BBS_max_user_idle_time); |
| 539 |
switch (toupper(ch)) |
switch (toupper(ch)) |
| 540 |
{ |
{ |
| 541 |
case KEY_NULL: |
case KEY_NULL: |
| 585 |
goto cleanup; |
goto cleanup; |
| 586 |
} |
} |
| 587 |
|
|
| 588 |
|
if (check_badwords(content, '*') < 0) |
| 589 |
|
{ |
| 590 |
|
log_error("check_badwords(content) error\n"); |
| 591 |
|
ret = -1; |
| 592 |
|
goto cleanup; |
| 593 |
|
} |
| 594 |
|
|
| 595 |
time(&now); |
time(&now); |
| 596 |
localtime_r(&now, &tm_modify_dt); |
localtime_r(&now, &tm_modify_dt); |
| 597 |
strftime(str_modify_dt, sizeof(str_modify_dt), "%Y-%m-%d %H:%M:%S (UTC %z)", &tm_modify_dt); |
strftime(str_modify_dt, sizeof(str_modify_dt), "%Y-%m-%d %H:%M:%S (UTC %z)", &tm_modify_dt); |
| 940 |
ch = 0; |
ch = 0; |
| 941 |
} |
} |
| 942 |
|
|
| 943 |
for (; !SYS_server_exit; ch = igetch_t(MAX_DELAY_TIME)) |
while (!SYS_server_exit) |
| 944 |
{ |
{ |
| 945 |
switch (toupper(ch)) |
switch (toupper(ch)) |
| 946 |
{ |
{ |
| 959 |
len = q - p; |
len = q - p; |
| 960 |
if (*p != '\0') |
if (*p != '\0') |
| 961 |
{ |
{ |
| 962 |
|
if ((ret = check_badwords(p, '*')) < 0) |
| 963 |
|
{ |
| 964 |
|
log_error("check_badwords(title) error\n"); |
| 965 |
|
} |
| 966 |
|
else if (ret > 0) |
| 967 |
|
{ |
| 968 |
|
memcpy(title_input, p, (size_t)len + 1); |
| 969 |
|
continue; |
| 970 |
|
} |
| 971 |
memcpy(p_article_new->title, p, (size_t)len + 1); |
memcpy(p_article_new->title, p, (size_t)len + 1); |
| 972 |
memcpy(title_input, p_article_new->title, (size_t)len + 1); |
memcpy(title_input, p_article_new->title, (size_t)len + 1); |
| 973 |
} |
} |
| 989 |
sign_id = ch - '0'; |
sign_id = ch - '0'; |
| 990 |
break; |
break; |
| 991 |
default: // Invalid selection |
default: // Invalid selection |
| 992 |
|
ch = igetch_t(BBS_max_user_idle_time); |
| 993 |
continue; |
continue; |
| 994 |
} |
} |
| 995 |
|
|
| 1010 |
prints("(S)发送, (C)取消, (T)更改标题 or (E)再编辑? [S]: "); |
prints("(S)发送, (C)取消, (T)更改标题 or (E)再编辑? [S]: "); |
| 1011 |
iflush(); |
iflush(); |
| 1012 |
|
|
| 1013 |
for (ch = 0; !SYS_server_exit; ch = igetch_t(MAX_DELAY_TIME)) |
for (ch = 0; !SYS_server_exit; ch = igetch_t(BBS_max_user_idle_time)) |
| 1014 |
{ |
{ |
| 1015 |
switch (toupper(ch)) |
switch (toupper(ch)) |
| 1016 |
{ |
{ |
| 1064 |
ret = -1; |
ret = -1; |
| 1065 |
goto cleanup; |
goto cleanup; |
| 1066 |
} |
} |
| 1067 |
|
|
| 1068 |
|
if (check_badwords(content, '*') < 0) |
| 1069 |
|
{ |
| 1070 |
|
log_error("check_badwords(content) error\n"); |
| 1071 |
|
ret = -1; |
| 1072 |
|
goto cleanup; |
| 1073 |
|
} |
| 1074 |
|
|
| 1075 |
db = db_open(); |
db = db_open(); |
| 1076 |
if (db == NULL) |
if (db == NULL) |