/* create table `toplog` ( `id` int unsigned NOT NULL auto_increment, `userid` char(15) NOT NULL default '', `bname` char(31) NOT NULL default '', `title` char(81) NOT NULL default '', `time` timestamp NOT NULL, `date` date NOT NULL, `topth` int NOT NULL default '1', `count` int NOT NULL default '0', `threadid` int unsigned NOT NULL default '0', PRIMARY KEY (`id`), KEY userid (`userid`), KEY bname(`bname`, `threadid`), KEY date(`date`), UNIQUE top (`date`,`topth`) ) TYPE=MyISAM COMMENT='toplog'; */ int log_top() { MYSQL s; char sqlbuf[500]; char newtitle[161]; int i; char newts[20]; mysql_init (&s); if (! my_connect_mysql(&s) ){ return 0;; } for(i=0;i<topnum;i++){ mysql_escape_string(newtitle, top[i].title, strlen(top[i].title)); sprintf(sqlbuf,"UPDATE toplog SET userid='%s',bname='%s',title='%s',count='%d',time='%s',threadid='%d' WHERE date=CURDATE() AND topth='%d';", top[i].userid, top[i].board, newtitle, top[i].number, tt2timestamp(top[i].date,newts), top[i].groupid, i+1); if( mysql_real_query( &s, sqlbuf, strlen(sqlbuf) )){ printf("%s\n", mysql_error(&s)); continue; } if( (int)mysql_affected_rows(&s) <= 0 ){ sprintf(sqlbuf, "INSERT INTO toplog VALUES (NULL,'%s','%s','%s','%s',CURDATE(),'%d','%d','%d');",top[i].userid, top[i].board, newtitle, tt2timestamp(top[i].date,newts), i+1, top[i].number, top[i].groupid); if( mysql_real_query( &s, sqlbuf, strlen(sqlbuf) )){ printf("%s\n", mysql_error(&s)); continue; } } } mysql_close(&s); return 1; }
static void writelog(struct bbs_msgbuf *msg) { char header[256]; struct tm *n; struct taglogconfig *pconf; char ch; #if defined(NEWPOSTLOG) || defined(NEWBMLOG) if(!postlog_start && mysqlclosetime && time(0)-mysqlclosetime>600) opennewpostlog(); #endif #ifdef NEWBMLOG if (msg->mtype == BBSLOG_BM){ char sqlbuf[512]; struct _new_bmlog * ppl = (struct _new_bmlog *)( &msg->mtext[1]) ; int affect; if(!postlog_start) return; if(ppl->value == 0) return; msg->mtext[0]=0; sprintf(sqlbuf, "UPDATE bmlog SET `log%d`=`log%d`+%d WHERE userid='%s' AND bname='%s' AND month=MONTH(CURDATE()) AND year=YEAR(CURDATE()) ;", ppl->type, ppl->type, ppl->value, msg->userid, ppl->boardname ); if( mysql_real_query(&s,sqlbuf,strlen(sqlbuf)) || (affect=(int)mysql_affected_rows(&s))<0 ){ mysql_fail ++; bbslog("3system","mysql bmlog error:%s",mysql_error(&s)); if(mysql_fail > 10) closenewpostlog(); return; } if(affect <= 0){ sprintf(sqlbuf, "INSERT INTO bmlog (`id`, `userid`, `bname`, `month`, `year`, `log%d` ) VALUES (NULL, '%s', '%s', MONTH(CURDATE()), YEAR(CURDATE()), '%d' );", ppl->type, msg->userid, ppl->boardname, ppl->value); if( mysql_real_query( &s, sqlbuf, strlen(sqlbuf) )){ mysql_fail ++; bbslog("3system","mysql bmlog error:%s",mysql_error(&s)); if(mysql_fail > 10) closenewpostlog(); }else mysql_fail = 0; }else{ mysql_fail = 0; } return; } #endif #ifdef NEWPOSTLOG if (msg->mtype == BBSLOG_POST && postlog_start){ char newtitle[161]; char sqlbuf[512]; struct _new_postlog * ppl = (struct _new_postlog *) ( &msg->mtext[1]) ; char newts[20]; msg->mtext[0]=0; mysql_escape_string(newtitle, ppl->title, strlen(ppl->title)); #ifdef NEWSMTH sprintf(sqlbuf, "INSERT INTO postlog (`id`, `userid`, `bname`, `title`, `time`, `threadid`, `articleid`, `ip`) VALUES (NULL, '%s', '%s', '%s', '%s', '%d', '%d', '%s');", msg->userid, ppl->boardname, newtitle, tt2timestamp(msg->msgtime, newts), ppl->threadid, ppl->articleid, ppl->ip ); #else sprintf(sqlbuf, "INSERT INTO postlog (`id`, `userid`, `bname`, `title`, `time`, `threadid`, `articleid`) VALUES (NULL, '%s', '%s', '%s', '%s', '%d', '%d');", msg->userid, ppl->boardname, newtitle, tt2timestamp(msg->msgtime, newts), ppl->threadid, ppl->articleid ); #endif if( mysql_real_query( &s, sqlbuf, strlen(sqlbuf) )){ mysql_fail ++; bbslog("3system","mysql postlog error:%s",mysql_error(&s)); if(mysql_fail > 10) closenewpostlog(); }else{ mysql_fail = 0; return; } } if (msg->mtype == BBSLOG_POST){ struct _new_postlog * ppl = (struct _new_postlog *) ( &msg->mtext[1]) ; msg->mtype = BBSLOG_USER; if ((msg->mtype < 0) || (msg->mtype > sizeof(logconfig) / sizeof(struct taglogconfig))) return; pconf = &logconfig[msg->mtype-1]; if (pconf->fd<0) return; n = localtime(&msg->msgtime); snprintf(header, 256, "[%02u/%02u %02u:%02u:%02u %5lu %lu] %s post '%s' on '%s'\n", n->tm_mon + 1, n->tm_mday, n->tm_hour, n->tm_min, n->tm_sec, (long int) msg->pid, msg->mtype, msg->userid, ppl->title, ppl->boardname); if (pconf->buf) { if ((int) (pconf->bufptr + strlen(header)) <= pconf->bufsize) { strcpy(&pconf->buf[pconf->bufptr], header); pconf->bufptr += strlen(header); return; } } /*目前log还是分散的,就先lock,seek吧*/ writew_lock(pconf->fd, 0, SEEK_SET, 0); lseek(pconf->fd, 0, SEEK_END); if (pconf->buf && pconf->bufptr) { write(pconf->fd, pconf->buf, pconf->bufptr); pconf->bufptr = 0; } un_lock(pconf->fd, 0, SEEK_SET, 0); return; } #endif if ((msg->mtype < 0) || (msg->mtype > sizeof(logconfig) / sizeof(struct taglogconfig))) return; pconf = &logconfig[msg->mtype-1]; if (pconf->fd<0) return; n = localtime(&msg->msgtime); ch=msg->mtext[0]; msg->mtext[0]=0; snprintf(header, 256, "[%d-%02u-%02u %02u:%02u:%02u %5lu %lu] %s %c%s", n->tm_year + 1900, n->tm_mon + 1, n->tm_mday, n->tm_hour, n->tm_min, n->tm_sec, (long int) msg->pid, msg->mtype, msg->userid,ch,&msg->mtext[1]); if (pconf->buf) { if ((int) (pconf->bufptr + strlen(header)) <= pconf->bufsize) { strcpy(&pconf->buf[pconf->bufptr], header); pconf->bufptr += strlen(header); return; } } /*目前log还是分散的,就先lock,seek吧*/ writew_lock(pconf->fd, 0, SEEK_SET, 0); lseek(pconf->fd, 0, SEEK_END); if (pconf->buf && pconf->bufptr) { write(pconf->fd, pconf->buf, pconf->bufptr); pconf->bufptr = 0; } un_lock(pconf->fd, 0, SEEK_SET, 0); }
int add_pc_comments(struct pc_comments *pn) { MYSQL s; char *sql; char *newbody; char newhostname[41]; char newsubject[401]; char newts[20]; char newts1[20]; newhostname[0]=0; newsubject[0]=0; newts[0]=0; newts1[0]=0; if (pn->body) { newbody = (char *)malloc(strlen(pn->body)*2 + 1); if (! newbody) return 0; } else newbody = NULL; sql = (char *)malloc((pn->body ? (strlen(pn->body) * 2) : 0) + 800); if (! sql) { if (pn->body) free(newbody); return 0; } mysql_init(&s); if (! my_connect_mysql_blog(&s)) { mysql_report_error(&s); if (pn->body) free(newbody); free(sql); return 0; } mysql_escape_string(newhostname, pn->hostname, strlen(pn->hostname)); mysql_escape_string(newsubject, pn->subject, strlen(pn->subject)); if (pn->body) mysql_escape_string(newbody, pn->body, strlen(pn->body)); if (pn->cid <= 0) sprintf(sql,"INSERT INTO comments VALUES (NULL, %lu, %d, '%s', '%s', '%s', '%s', '%s', '%s', 0 , 0 );",pn->nid, pn->uid, newhostname, pn->username, newsubject, tt2timestamp(pn->created,newts), tt2timestamp(pn->changed, newts1), pn->body?newbody:""); else sprintf(sql,"UPDATE comments SET nid=%lu, uid=%d, hostname='%s', username='******', subject='%s', created='%s', changed='%s', body='%s' WHERE cid=%lu ;",pn->nid, pn->uid, newhostname, pn->username, newsubject, tt2timestamp(pn->created,newts), tt2timestamp(pn->changed, newts1), pn->body?newbody:"", pn->cid); if (mysql_real_query(&s, sql, strlen(sql))) { mysql_report_error(&s); mysql_close(&s); if (pn->body) free(newbody); free(sql); return 0; } if (pn->cid <= 0) { sprintf(sql,"UPDATE nodes SET changed=changed,commentcount=commentcount+1 WHERE nid=%lu",pn->nid); mysql_real_query(&s, sql, strlen(sql)); } mysql_close(&s); if (pn->body) free(newbody); free(sql); return 1; }
int add_pc_nodes(struct pc_nodes *pn) { MYSQL s; char *ql; char *newbody=NULL; char newsource[21]; char newhostname[41]; char newsubject[401]; char newts[20]; char newts1[20]; newsource[0]=0; newhostname[0]=0; newsubject[0]=0; newts[0]=0; newts1[0]=0; if (pn->body) { newbody = (char *)malloc(strlen(pn->body) * 2 + 1); if (! newbody) return 0; } ql = (char *)malloc((pn->body?(strlen(pn->body) * 2):0) + 800); if (! ql) { if (pn->body) free(newbody); return 0; } bzero(ql, pn->body?(strlen(pn->body)*2):0 + 800); mysql_init(&s); if (! my_connect_mysql_blog(&s)) { mysql_report_error(&s); if (pn->body) free(newbody); free(ql); return 0; } mysql_escape_string(newsource, pn->source, strlen(pn->source)); mysql_escape_string(newhostname, pn->hostname, strlen(pn->hostname)); mysql_escape_string(newsubject, pn->subject, strlen(pn->subject)); if (pn->body) mysql_escape_string(newbody, pn->body, strlen(pn->body)); if (pn->nid <= 0) { if (pn->access == 0) { sprintf(ql,"UPDATE users SET `createtime` = `createtime` , modifytime = '%s' , nodescount = nodescount + 1 WHERE uid=%d ;",tt2timestamp(pn->changed,newts),pn->uid); mysql_real_query(&s, ql, strlen(ql)); } sprintf(ql,"INSERT INTO `nodes` ( `pid` , `tid` , `type` , `recuser` , `emote` , `hostname` , `changed` , `created` , `uid` , `comment` , `commentcount` , `subject` , `body` , `access` , `visitcount` , `htmltag`,`trackback` ,`trackbackcount`,`nodetype`) VALUES ( %lu , 0 , %d , '%s', 0 , '%s', '%s' , '%s' , %d , %d , %lu , '%s', '%s', %d , %d , 0 , 1 , 0 , 0 );",pn->pid, pn->type, newsource, newhostname, tt2timestamp(pn->changed,newts), tt2timestamp(pn->created, newts1), pn->uid, pn->comment, pn->commentcount, newsubject, pn->body?newbody:"", pn->access, pn->visitcount); } else { sprintf(ql,"UPDATE nodes SET pid=%lu, type=%d, source='%s', hostname='%s', uid=%d, comment=%d, commentcount=%ld, subject='%s', body='%s', access=%d, visitcount=%d WHERE nodetype = 0 AND nid=%lu ;",pn->pid, pn->type, newsource, newhostname, pn->uid, pn->comment, pn->commentcount, newsubject, pn->body?newbody:"", pn->access, pn->visitcount, pn->nid); } if (mysql_real_query(&s, ql, strlen(ql))) { mysql_report_error(&s); mysql_close(&s); if (pn->body) free(newbody); free(ql); return 0; } mysql_close(&s); if (pn->body) free(newbody); free(ql); return 1; }
int add_pc_users(struct pc_users *pn) { MYSQL s; char sql[600]; char newtheme[21]; char newdesc[401]; char newts[20]; char newcorp[81]; newtheme[0]=0; newdesc[0]=0; newts[0]=0; newcorp[0]=0; mysql_init(&s); if (! my_connect_mysql_blog(&s)) { mysql_report_error(&s); return 0; } mysql_escape_string(newtheme, pn->theme, strlen(pn->theme)); mysql_escape_string(newcorp, pn->corpusname, strlen(pn->corpusname)); mysql_escape_string(newdesc, pn->description, strlen(pn->description)); if (pn->uid <= 0) sprintf(sql,"INSERT INTO `users` ( `uid` , `username` , `corpusname` , `description` , `theme` , `nodelimit` , `dirlimit` , `createtime` , `style` , `backimage` , `visitcount` , `nodescount` , `logoimage` , `modifytime` , `links` , `htmleditor` , `indexnodechars` , `indexnodes` , `useremail` , `favmode` , `updatetime` , `userinfor` , `pctype` ,`defaulttopic`) VALUES ('', '%s', '%s', '%s' , 'others', %d, %d, NOW( ) , '0', '' , '0', '0', '' , NOW( ) , '', '1', '600', '5', '', '0', NOW( ) , '' , '0' , '其他类别');",pn->username, newcorp, newdesc, pn->nodelimit, pn->dirlimit); else sprintf(sql,"UPDATE users SET description='%s', corpusname='%s', theme='%s', nodelimit=%d, dirlimit=%d, createtime='%s' WHERE uid=%u AND username='******' ;",newdesc, newcorp, newtheme, pn->nodelimit, pn->dirlimit, tt2timestamp(pn->createtime,newts), pn->uid, pn->username); if (mysql_real_query(&s, sql, strlen(sql))) { mysql_report_error(&s); mysql_close(&s); return 0; } sprintf(sql,"UPDATE newapply SET `apptime` = `apptime` , manager = '%s' , management = 0 WHERE username = '******' ;", getCurrentUser()->userid , pn->username); if (mysql_real_query(&s, sql, strlen(sql))) { mysql_report_error(&s); mysql_close(&s); return 0; } mysql_close(&s); return 1; }
int pc_logs(struct pc_logs *pn) { MYSQL s; char sql[600]; char newhostname[21]; char newaction[101]; char newcomment[201]; char newts[20]; newhostname[0]=0; newaction[0]=0; newcomment[0]=0; newts[0] = 0; mysql_init(&s); if (! my_connect_mysql_blog(&s)) { mysql_report_error(&s); return 0; } mysql_escape_string(newhostname, pn->hostname, strlen(pn->hostname)); mysql_escape_string(newaction, pn->action, strlen(pn->action)); mysql_escape_string(newcomment, pn->comment, strlen(pn->comment)); sprintf(sql,"INSERT INTO logs VALUES (NULL, '%s', '%s', '%s', '%s' , '%s' , '%s', '%s' );",pn->username, newhostname,newaction, pn->pri_id, pn->sec_id, newcomment, tt2timestamp(pn->logtime,newts)); if (mysql_real_query(&s, sql, strlen(sql))) { mysql_report_error(&s); mysql_close(&s); return 0; } mysql_close(&s); return 1; }
/* create table `toplog` ( `id` int unsigned NOT NULL auto_increment, `userid` char(15) NOT NULL default '', `bname` char(31) NOT NULL default '', `title` char(81) NOT NULL default '', `time` timestamp NOT NULL, `date` date NOT NULL, `topth` int NOT NULL default '1', `count` int NOT NULL default '0', `threadid` int unsigned NOT NULL default '0', PRIMARY KEY (`id`), KEY userid (`userid`), KEY bname(`bname`, `threadid`), KEY date(`date`), UNIQUE top (`date`,`topth`) ) TYPE=MyISAM COMMENT='toplog'; create table `toplog_all` ( `id` int unsigned NOT NULL auto_increment, `userid` char(15) NOT NULL default '', `bname` char(31) NOT NULL default '', `title` char(81) NOT NULL default '', `time` timestamp NOT NULL, `date` date NOT NULL, `topth` int NOT NULL default '1', `count` int NOT NULL default '0', `threadid` int unsigned NOT NULL default '0', PRIMARY KEY (`id`), KEY userid (`userid`), KEY bname(`bname`, `threadid`), KEY date(`date`), ) TYPE=MyISAM COMMENT='toplog_all'; */ int log_top() { MYSQL s; char sqlbuf[500]; char newtitle[161]; int i; char newts[20]; time_t now; struct tm ptime; mysql_init(&s); if (! my_connect_mysql(&s)) { return 0;; } for (i=0;i<topnum;i++) { mysql_escape_string(newtitle, top[i].title, strlen(top[i].title)); #ifdef NEWSMTH MYSQL_RES *res; MYSQL_ROW row; sprintf(sqlbuf, "SELECT id FROM toplog_all WHERE date=CURDATE() AND bname='%s' AND threadid=%d; ", top[i].board, top[i].groupid); if (mysql_real_query(&s, sqlbuf, strlen(sqlbuf))) { printf("%s\n", mysql_error(&s)); } else { res = mysql_store_result(&s); row = mysql_fetch_row(res); if (row==NULL) { char title[STRLEN],file[STRLEN]; // auto post top10 to ShiDa sprintf(title, "[%s] %s", top[i].board,top[i].title); sprintf(file, "boards/%s/%s", top[i].board,top[i].filename); post_file(NULL, "", file , "ShiDa", title, 0, 1, getSession()); // insert into toplog_all sprintf(sqlbuf, "INSERT INTO toplog_all VALUES (NULL,'%s','%s','%s','%s',CURDATE(),'%d','%d','%d');",top[i].userid, top[i].board, newtitle, tt2timestamp(top[i].date,newts), i+1, top[i].number, top[i].groupid); if (mysql_real_query(&s, sqlbuf, strlen(sqlbuf))) { printf("%s\n", mysql_error(&s)); } } else { // update toplog_all sprintf(sqlbuf,"UPDATE toplog_all SET userid='%s',bname='%s',title='%s',count='%d',time='%s',threadid='%d' WHERE date=CURDATE() AND bname='%s' AND threadid=%d;;", top[i].userid, top[i].board, newtitle, top[i].number, tt2timestamp(top[i].date,newts), top[i].groupid, top[i].board, top[i].groupid); if (mysql_real_query(&s, sqlbuf, strlen(sqlbuf))) { printf("%s\n", mysql_error(&s)); } } } time(&now); ptime = *localtime(&now); if (ptime.tm_hour == 23) { total_post_top10(top[i].groupid,top[i].board,top[i].title); } #endif sprintf(sqlbuf,"UPDATE toplog SET userid='%s',bname='%s',title='%s',count='%d',time='%s',threadid='%d' WHERE date=CURDATE() AND topth='%d';", top[i].userid, top[i].board, newtitle, top[i].number, tt2timestamp(top[i].date,newts), top[i].groupid, i+1); if (mysql_real_query(&s, sqlbuf, strlen(sqlbuf))) { printf("%s\n", mysql_error(&s)); continue; } if ((int)mysql_affected_rows(&s) <= 0) { sprintf(sqlbuf, "INSERT INTO toplog VALUES (NULL,'%s','%s','%s','%s',CURDATE(),'%d','%d','%d');",top[i].userid, top[i].board, newtitle, tt2timestamp(top[i].date,newts), i+1, top[i].number, top[i].groupid); if (mysql_real_query(&s, sqlbuf, strlen(sqlbuf))) { printf("%s\n", mysql_error(&s)); continue; } } } mysql_close(&s); return 1; }