/[LeafOK_CVS]/lbbs/src/article_post.c
ViewVC logotype

Diff of /lbbs/src/article_post.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.41 by sysadm, Fri Nov 7 06:41:43 2025 UTC Revision 1.43 by sysadm, Tue Nov 11 00:28:05 2025 UTC
# Line 6  Line 6 
6   * Copyright (C) 2004-2025  Leaflet <leaflet@leafok.com>   * Copyright (C) 2004-2025  Leaflet <leaflet@leafok.com>
7   */   */
8    
9    #ifdef HAVE_CONFIG_H
10    #include "config.h"
11    #endif
12    
13  #include "article_cache.h"  #include "article_cache.h"
14  #include "article_post.h"  #include "article_post.h"
15  #include "bbs.h"  #include "bbs.h"
# Line 25  Line 29 
29  enum _article_post_constant_t  enum _article_post_constant_t
30  {  {
31          TITLE_INPUT_MAX_LEN = 72,          TITLE_INPUT_MAX_LEN = 72,
32          ARTICLE_QUOTE_MAX_LINES = 20,          ARTICLE_QUOTE_DEFAULT_LINES = 20,
33          MODIFY_DT_MAX_LEN = 50,          MODIFY_DT_MAX_LEN = 50,
34  };  };
35    
# Line 83  int article_post(const SECTION_LIST *p_s Line 87  int article_post(const SECTION_LIST *p_s
87          {          {
88                  clearscr();                  clearscr();
89                  moveto(21, 1);                  moveto(21, 1);
90                  prints("发表文章于 %s[%s] 讨论区,类型: %s,回复通知:%s",                  prints("发表文章于 %s[%s] 讨论区,类型: %s,回复通知: %s",
91                             p_section->stitle, p_section->sname,                             p_section->stitle, p_section->sname,
92                             (p_article_new->transship ? "转载" : "原创"),                             (p_article_new->transship ? "转载" : "原创"),
93                             (reply_note ? "开启" : "关闭"));                             (reply_note ? "开启" : "关闭"));
# Line 736  int article_reply(const SECTION_LIST *p_ Line 740  int article_reply(const SECTION_LIST *p_
740          MYSQL *db = NULL;          MYSQL *db = NULL;
741          MYSQL_RES *rs = NULL;          MYSQL_RES *rs = NULL;
742          MYSQL_ROW row;          MYSQL_ROW row;
743          long line_offsets[ARTICLE_QUOTE_MAX_LINES + 1];          long line_offsets[MAX_EDITOR_DATA_LINES + 1];
744          char sql[SQL_BUFFER_LEN];          char sql[SQL_BUFFER_LEN];
745          char *sql_content = NULL;          char *sql_content = NULL;
746          EDITOR_DATA *p_editor_data = NULL;          EDITOR_DATA *p_editor_data = NULL;
# Line 749  int article_reply(const SECTION_LIST *p_ Line 753  int article_reply(const SECTION_LIST *p_
753          char nickname_f[BBS_nickname_max_len * 2 + 1];          char nickname_f[BBS_nickname_max_len * 2 + 1];
754          int sign_id = 0;          int sign_id = 0;
755          int reply_note = 0;          int reply_note = 0;
756            int full_quote = 0;
757          long len;          long len;
758          int ch;          int ch;
759          char *p, *q;          char *p, *q;
# Line 873  int article_reply(const SECTION_LIST *p_ Line 878  int article_reply(const SECTION_LIST *p_
878    
879                  // Remove control sequence                  // Remove control sequence
880                  len = str_filter(content_f, 0);                  len = str_filter(content_f, 0);
   
                 len = snprintf(content, ARTICLE_CONTENT_MAX_LEN,  
                                            "\n\n【 在 %s (%s) 的大作中提到: 】\n",  
                                            p_article->username, p_article->nickname);  
   
                 quote_content_lines = split_data_lines(content_f, MAX_EDITOR_DATA_LINE_LENGTH - 2, line_offsets, ARTICLE_QUOTE_MAX_LINES + 1, 0, NULL);  
                 for (i = 0; i < quote_content_lines; i++)  
                 {  
                         memcpy(content + len, ": ", 2); // quote line prefix  
                         len += 2;  
                         memcpy(content + len, content_f + line_offsets[i], (size_t)(line_offsets[i + 1] - line_offsets[i]));  
                         len += (line_offsets[i + 1] - line_offsets[i]);  
                         if (content[len - 1] != '\n') // Appennd \n if not exist  
                         {  
                                 content[len] = '\n';  
                                 len++;  
                         }  
                 }  
                 if (content[len - 1] != '\n') // Appennd \n if not exist  
                 {  
                         content[len] = '\n';  
                         len++;  
                 }  
                 content[len] = '\0';  
   
                 free(content_f);  
                 content_f = NULL;  
   
                 p_editor_data = editor_data_load(content);  
                 if (p_editor_data == NULL)  
                 {  
                         log_error("editor_data_load(aid=%d, cid=%d) error\n", p_article->aid, atoi(row[0]));  
                         ret = -1;  
                         goto cleanup;  
                 }  
   
                 free(content);  
                 content = NULL;  
881          }          }
882          mysql_free_result(rs);          mysql_free_result(rs);
883          rs = NULL;          rs = NULL;
# Line 923  int article_reply(const SECTION_LIST *p_ Line 890  int article_reply(const SECTION_LIST *p_
890          {          {
891                  clearscr();                  clearscr();
892                  moveto(21, 1);                  moveto(21, 1);
893                  prints("回复文章于 %s[%s] 讨论区,回复通知:%s", p_section->stitle, p_section->sname, (reply_note ? "开启" : "关闭"));                  prints("回复文章于 %s[%s] 讨论区, 回复通知: %s, 引用模式: %s",
894                               p_section->stitle, p_section->sname,
895                               (reply_note ? "开启" : "关闭"),
896                               (full_quote ? "完整" : "精简"));
897                  moveto(22, 1);                  moveto(22, 1);
898                  prints("标题: %s", (p_article_new->title[0] == '\0' ? "[无]" : p_article_new->title));                  prints("标题: %s", (p_article_new->title[0] == '\0' ? "[无]" : p_article_new->title));
899                  moveto(23, 1);                  moveto(23, 1);
# Line 934  int article_reply(const SECTION_LIST *p_ Line 904  int article_reply(const SECTION_LIST *p_
904                          prints("    按0~3选签名档(0表示不使用)");                          prints("    按0~3选签名档(0表示不使用)");
905    
906                          moveto(24, 1);                          moveto(24, 1);
907                          prints("T改标题, C取消, N%s, Enter继续: ",                          prints("T改标题, C取消, N%s, Q%s, Enter继续: ",
908                                     (reply_note ? "关闭回复通知" : "开启回复通知"));                                     (reply_note ? "关闭回复通知" : "开启回复通知"), (full_quote ? "精简引用" : "完整引用"));
909                          iflush();                          iflush();
910                          ch = 0;                          ch = 0;
911                  }                  }
# Line 982  int article_reply(const SECTION_LIST *p_ Line 952  int article_reply(const SECTION_LIST *p_
952                          case 'N':                          case 'N':
953                                  reply_note = (reply_note ? 0 : 1);                                  reply_note = (reply_note ? 0 : 1);
954                                  break;                                  break;
955                            case 'Q':
956                                    full_quote = (full_quote ? 0 : 1);
957                                    break;
958                          case '0':                          case '0':
959                          case '1':                          case '1':
960                          case '2':                          case '2':
# Line 1001  int article_reply(const SECTION_LIST *p_ Line 974  int article_reply(const SECTION_LIST *p_
974                          continue;                          continue;
975                  }                  }
976    
977                    len = snprintf(content, ARTICLE_CONTENT_MAX_LEN,
978                                               "\n\n【 在 %s (%s) 的大作中提到: 】\n",
979                                               p_article->username, p_article->nickname);
980    
981                    quote_content_lines = split_data_lines(content_f,
982                                                                                               MAX_EDITOR_DATA_LINE_LENGTH - 2, line_offsets,
983                                                                                               (full_quote ? MAX_EDITOR_DATA_LINES : ARTICLE_QUOTE_DEFAULT_LINES) + 1,
984                                                                                               0, NULL);
985                    for (i = 0; i < quote_content_lines; i++)
986                    {
987                            memcpy(content + len, ": ", 2); // quote line prefix
988                            len += 2;
989                            memcpy(content + len, content_f + line_offsets[i], (size_t)(line_offsets[i + 1] - line_offsets[i]));
990                            len += (line_offsets[i + 1] - line_offsets[i]);
991                            if (content[len - 1] != '\n') // Appennd \n if not exist
992                            {
993                                    content[len] = '\n';
994                                    len++;
995                            }
996                    }
997                    if (content[len - 1] != '\n') // Appennd \n if not exist
998                    {
999                            content[len] = '\n';
1000                            len++;
1001                    }
1002                    content[len] = '\0';
1003    
1004                    free(content_f);
1005                    content_f = NULL;
1006    
1007                    p_editor_data = editor_data_load(content);
1008                    if (p_editor_data == NULL)
1009                    {
1010                            log_error("editor_data_load(aid=%d, cid=%d) error\n", p_article->aid, atoi(row[0]));
1011                            ret = -1;
1012                            goto cleanup;
1013                    }
1014    
1015                    free(content);
1016                    content = NULL;
1017    
1018                  for (ch = 'E'; !SYS_server_exit && toupper(ch) == 'E';)                  for (ch = 'E'; !SYS_server_exit && toupper(ch) == 'E';)
1019                  {                  {
1020                          editor_display(p_editor_data);                          editor_display(p_editor_data);


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1