github.com/Ptt-official-app/go-bbs@v0.12.0/pttbbs/usersettings.go (about)

     1  // 實作幾個 method 傳入 userid 回傳該使用者的 BBS 設定
     2  // 目前已經有可以取得使用者userec的method可用了
     3  //
     4  // 請見 userec_t 中的 uflag 和 userlevel
     5  // 每個選項對應的 flag id 請參見 user.c desc1 和 masks1
     6  // user.c - https://github.com/ptt/pttbbs/blob/5715b35f510f48eb5092d32882f1aa09181dc3a1/mbbsd/user.c#L438
     7  // uflags.h - https://github.com/ptt/pttbbs/blob/4d56e77f264960e43e060b77e442e166e5706417/include/uflags.h
     8  
     9  package pttbbs
    10  
    11  import (
    12  	"fmt"
    13  
    14  	"github.com/Ptt-official-app/go-bbs"
    15  )
    16  
    17  var userRecs []bbs.UserRecord
    18  
    19  // (Question) I'm not sure how to access this function from serverlet/route_token.go
    20  func findUserecByID(userid string) (bbs.UserRecord, error) {
    21  	for _, it := range userRecs {
    22  		if userid == it.UserID() {
    23  			return it, nil
    24  		}
    25  	}
    26  	return nil, fmt.Errorf("user record not found")
    27  }
    28  
    29  // get ALL UserFlag at once:
    30  type uFlags struct {
    31  	dbanner        bool
    32  	dbannerUsong   bool
    33  	rejOuttamail   bool
    34  	defBackup      bool
    35  	secureLogin    bool
    36  	favAddnew      bool
    37  	favNohilight   bool
    38  	noModmark      bool
    39  	coloredModmark bool
    40  	dbcsAware      bool
    41  	dbcsDropRepeat bool
    42  	dbcsNointresc  bool
    43  	cursorASCII    bool
    44  	menuLightbar   bool
    45  	newAngelPager  bool
    46  }
    47  
    48  func getUserFlagAllByID(userid string) (*uFlags, error) {
    49  	userrec, err := findUserecByID(userid)
    50  	if err != nil {
    51  		return nil, fmt.Errorf("user record not found")
    52  	}
    53  	dbanner := getAdbannerByUserrec(userrec)
    54  	dbannerUsong := getAdbannerUsongByUserrec(userrec)
    55  	rejOuttamail := getRejOuttamailByUserrec(userrec)
    56  	defBackup := getDefBackupByUserrec(userrec)
    57  	secureLogin := getSecureLoginByUserrec(userrec)
    58  	favAddnew := getFavAddNewByUserrec(userrec)
    59  	favNohilight := getFavNoHilightByUserrec(userrec)
    60  	noModmark := getFavNoModMarkByUserrec(userrec)
    61  	coloredModmark := getColoredModMarkByUserrec(userrec)
    62  	// TO DO...#ifdef DBCSAWARE
    63  	dbcsAware := getDbcsAwareByUserrec(userrec)
    64  	dbcsDropRepeat := getDbcsDropRepeatByUserrec(userrec)
    65  	dbcsNointresc := getDbcsNointrescByUserrec(userrec)
    66  	// #endif
    67  	cursorASCII := getCursorASCIIByUserrec(userrec)
    68  	// TO DO...#ifdef USE_PFTERM
    69  	menuLightbar := getMenuLightBarByUserrec(userrec)
    70  	// #endif
    71  	// TO DO...#ifdef PLAY_ANGEL
    72  	newAngelPager := getNewAngelPagerByUserrec(userrec)
    73  	// #endif
    74  
    75  	return &uFlags{
    76  		dbanner,
    77  		dbannerUsong,
    78  		rejOuttamail,
    79  		defBackup,
    80  		secureLogin,
    81  		favAddnew,
    82  		favNohilight,
    83  		noModmark,
    84  		coloredModmark,
    85  		dbcsAware,
    86  		dbcsDropRepeat,
    87  		dbcsNointresc,
    88  		cursorASCII,
    89  		menuLightbar,
    90  		newAngelPager}, nil
    91  }
    92  
    93  func getAdbannerByUserrec(userrec bbs.UserRecord) bool {
    94  	return userrec.UserFlag()&UfAdbanner != 0
    95  }
    96  
    97  func getAdbannerUsongByUserrec(userrec bbs.UserRecord) bool {
    98  	return userrec.UserFlag()&UfAdbannerUsong != 0
    99  }
   100  
   101  func getRejOuttamailByUserrec(userrec bbs.UserRecord) bool {
   102  	return userrec.UserFlag()&UfRejOuttamail != 0
   103  }
   104  
   105  func getDefBackupByUserrec(userrec bbs.UserRecord) bool {
   106  	return userrec.UserFlag()&UfDefbackup != 0
   107  }
   108  
   109  func getSecureLoginByUserrec(userrec bbs.UserRecord) bool {
   110  	return userrec.UserFlag()&UfSecureLogin != 0
   111  }
   112  
   113  func getFavAddNewByUserrec(userrec bbs.UserRecord) bool {
   114  	return userrec.UserFlag()&UfFavAddnew != 0
   115  }
   116  
   117  func getFavNoHilightByUserrec(userrec bbs.UserRecord) bool {
   118  	return userrec.UserFlag()&UfFavNohilight != 0
   119  }
   120  
   121  func getFavNoModMarkByUserrec(userrec bbs.UserRecord) bool {
   122  	return userrec.UserFlag()&UfNoModmark != 0
   123  }
   124  
   125  func getColoredModMarkByUserrec(userrec bbs.UserRecord) bool {
   126  	return userrec.UserFlag()&UfColoredModmark != 0
   127  }
   128  
   129  // #ifdef DBCSAWARE (Not handling yet...)
   130  func getDbcsAwareByUserrec(userrec bbs.UserRecord) bool {
   131  	return userrec.UserFlag()&UfDbcsAware != 0
   132  }
   133  
   134  // #ifdef DBCSAWARE (Not handling yet...)
   135  func getDbcsDropRepeatByUserrec(userrec bbs.UserRecord) bool {
   136  	return userrec.UserFlag()&UfDbscDropRepeat != 0
   137  }
   138  
   139  // #ifdef DBCSAWARE (Not handling yet...)
   140  func getDbcsNointrescByUserrec(userrec bbs.UserRecord) bool {
   141  	return userrec.UserFlag()&UfDbcsNointresc != 0
   142  }
   143  
   144  func getCursorASCIIByUserrec(userrec bbs.UserRecord) bool {
   145  	return userrec.UserFlag()&UfCursorASCII != 0
   146  }
   147  
   148  // #ifdef USE_PFTERM (Not handling yet...)
   149  func getMenuLightBarByUserrec(userrec bbs.UserRecord) bool {
   150  	return userrec.UserFlag()&UfMenuLightbar != 0
   151  }
   152  
   153  // #ifdef PLAY_ANGEL (Not handling yet...)
   154  func getNewAngelPagerByUserrec(userrec bbs.UserRecord) bool {
   155  	return userrec.UserFlag()&UfNewAngelPager != 0
   156  }