summaryrefslogblamecommitdiffstats
path: root/util/smtest.temp
blob: 7daa12ce4c56465b9232a054afc8bc1d69a94087 (plain) (tree)






































































































































































































































                                                                                                    
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#include "config.h"
#include "pttstruct.h"
#include "util.h"
#include "perm.h"
#include "common.h" 
#include "proto.h"

#define OUTFILE  BBSHOME "/pttbbs/util/smtest.result1"
#define FIREFILE BBSHOME "/pttbbs/util/smtest.result2"

extern boardheader_t *bcache;
extern int numboards;

boardheader_t allbrd[MAX_BOARD];
struct userec_t xuser;

int getuser(char *userid) {
    int uid;
    if((uid = searchuser(userid)))
        passwd_query(uid, &xuser);
    return uid;
}       

int LINK(char* src, char* dst){
    char cmd[200];
    
    if( link(src, dst) == 0){
        return 0;
    }
    
    sprintf(cmd, "/bin/cp -R %s %s", src, dst);
    return system(cmd);
}

int outofdate(char *hdrdate, char latestdate[])
{
  int k,rr;
  char *dd;

  dd = strtok(hdrdate,"/");

  if(dd){
    k = 0;
    do
    {
      if (*dd  == '[' ){dd[strlen(dd)-1]='\0'; dd++;}
        rr = atoi(dd);
        printf("%d/", rr);
      } while((dd = strtok(NULL,"/")) != NULL);
    }

    printf("\n");

  if(1)
    return 1;
  else
    return 0;
}

int main()
{
    int bmid, i, j, k, rd,rr;
    char *p, *bmsname[3], fname[256], *dd;
    fileheader_t hdr;
    FILE *inf;
    
    /* set date */
    char thedate[5];
    time_t t = time(NULL);
    struct tm *tm = localtime(&t);

    sprintf(thedate, "%2d/%02d", tm->tm_mon + 1, tm->tm_mday);

    resolve_boards();
    if(passwd_mmap())
        exit(1);
    memcpy(allbrd,bcache,numboards*sizeof(boardheader_t));
    /* write out the target file */
    inf   = fopen(OUTFILE, "w+");
    if(inf == NULL){
        printf("open file error : %s\n", OUTFILE);
        exit(1);
    }

    /*the ouput table title*/
    fprintf(inf,"英文版名     類別 中文版名               版主名單"
       "            日期  備註  \n");

    j = 0 ;
    for (i = 0; i < 30; i++) {
        rd = 0;
    if(allbrd[i].brdname[0] == '\0') continue;
    if((allbrd[i].brdattr & BRD_NOZAP) == 1) continue;

    sprintf(fname, BBSHOME "/boards/%s/.DIR",allbrd[i].brdname); 

    /* get date to choose junk board  */

    rd = get_num_records(fname, sizeof(fileheader_t));
    get_record(fname, &hdr, sizeof (hdr), rd - 30);


    if(outofdate(hdr.date,thedate)) printf("yest\n");

/*
    dd = strtok(hdr.date,"/");

    if(dd){
        k = 0;
            do
            {
                if (*dd  == '[' ){dd[strlen(dd)-1]='\0'; dd++;}
                rr = atoi(dd);
        printf("%d/", rr);
             
            } while((dd = strtok(NULL,"/")) != NULL);
        }
    printf("\n");
*/
    /* print to file */
        printf("%-*.*s%-*.*s%-*.*s%-*.*s", IDLEN, IDLEN, allbrd[i].brdname, 
    BTLEN-24, BTLEN-26, allbrd[i].title, IDLEN - 5, IDLEN-5,hdr.date, 
    IDLEN * 3, IDLEN * 3, allbrd[i].BM);

    /* post to board */



    /* user extract to mail */

        p=strtok(allbrd[i].BM,"/ ");
    if(p){
        k = 0;
        do
        {
            if (*p  == '[' ){p[strlen(p)-1]='\0'; p++;}
          bmid=getuser(p);
          bmsname[k] = p;
          if(isalpha(allbrd[i].BM[0])&& !(xuser.userlevel &PERM_SYSOP))
          {
          //    printf("%s", bmsname[k]);
          }
            k++;
        } while((p=strtok(NULL,"/ "))!=NULL);
    }

        printf("\n");

}


/*


    
        if(flag == 1){
            bmbuf[0] = '\0';
            for(k = 0 , n = 0; k < index; k++){
                if(!bms[k].flag){
                    if( n++ != 0) strcat(bmbuf, "/");
                    strcat(bmbuf, bms[k].bmname);   
                }   
            }
            strcpy(bcache[i].BM, bmbuf);
        }
        }
    qsort(lostbms, j, sizeof(lostbm), bmlostdays_cmp);
 
    //write to the etc/toplazyBM
    for ( i=0; i<j; i++)
    {
    if( lostbms[i].lostdays > 60){
        fprintf(firef, "%-*.*s%-*.*s%-*.*s%3d天沒上站\n", IDLEN, IDLEN, lostbms[i].title,
        BTLEN-10, BTLEN-10, lostbms[i].ctitle, IDLEN,IDLEN,
        lostbms[i].bmname,lostbms[i].lostdays);
    }else{
        fprintf(inf, "%-*.*s%-*.*s%-*.*s%3d天沒上站\n", IDLEN, IDLEN, lostbms[i].title, 
        BTLEN-10, BTLEN-10, lostbms[i].ctitle, IDLEN,IDLEN,
        lostbms[i].bmname,lostbms[i].lostdays);
    }
    }
    fclose(inf);
    fclose(firef);

    //printf("Total %d boards.\n", count);
    
    //mail to the users
    for( i=0; i<j; i++)
    {
        fileheader_t mymail;
        char    genbuf[200];
        int lostdays;
        
        lostdays = lostbms[i].lostdays;

    if( (lostdays != 30) && (lostdays != 45) && (lostdays <= 60))
        continue;
        
        sprintf(genbuf, BBSHOME "/home/%c/%s", lostbms[i].bmname[0], lostbms[i].bmname);
        stampfile(genbuf, &mymail);
        
        strcpy(mymail.owner, "[PTT警察局]");
        
        if(lostdays <= 60){
            sprintf(mymail.title,
            "\033[32m [版主免職警告通知] \033[m %s BM %s", lostbms[i].title, lostbms[i].bmname);
        }else{
            sprintf(mymail.title,
            "\033[32m [版主免職通知] \033[m %s BM %s", lostbms[i].title, lostbms[i].bmname);
        }
        mymail.savemode = 0 ;
        unlink(genbuf);
        if(lostdays <= 60){
            LINK(OUTFILE, genbuf);
        }else{
            LINK(FIREFILE, genbuf);
        }
        
        sprintf(genbuf, BBSHOME "/home/%c/%s/.DIR", lostbms[i].bmname[0], lostbms[i].bmname);
    append_record(genbuf, &mymail, sizeof(mymail));     
    }
*/  
    return 0;
}