File name: welboard2/install/board.def (11,580 bytes) Text file viewer v1.2
    1 : /* file: board.inc
    2 : 
    3 :    게시판 공통 부 프로그램 (author: 서광현)
    4 : 
    5 :    Copyright (c) 2001/03/25 by Wesoft
    6 :    All Rights Reserved.
    7 : */
    8 : 
    9 : // your system configuration
   10 : 
   11 :  myhost= "localhost"; // MySQL host
   12 :  mydb= "{$mydb}"; // MySQL database name
   13 :  myuser= "{$myuser}"; // MySQL user id
   14 :  enpass= "{$enpass}"; // MySQL password
   15 :  COOKIE_EXPIRE= {$cookie_expire}; // 쿠키만기 시간 {$cookie_expire}분
   16 :  decode_variable= "{$decoder}"; // password decoding variable
   17 :  cookie_garbage= {$cookie_garbage}; // 쿠키의 쓰레기값 위치
   18 : 
   19 : // end system configuration
   20 : 
   21 : PROGRAM_NAME= "WelBoard";
   22 : PROGRAM_VERSION= "V2.0.4";
   23 : fch= "\\|'"; // DB용 찾을 문자
   24 : rch= "\\\\|\\'"; // DB용 바꿀 문자
   25 : html_fch= "<|\"|&#|&"; // HTML용 찾을 문자
   26 : html_rch= "&lt;|&quot;|&#|&amp;"; // HTML용 바꿀 문자
   27 : OK= 1;
   28 : FAIL= 0;
   29 : mytable= db;
   30 : mypass= decode(enpass, "", decode_variable);
   31 : if(prg_title=="") prg_title= "게시판";
   32 : message_form= "form/message.fom";
   33 : message_title= db ~ " " ~ prg_title ~ " 오류 메시지";
   34 : MSG0= "<b>ERROR: </b>";
   35 : cpright= "<font color=#5c5c5c face=Verdana size=1>"
   36 :        ~ "<b>Wesoft Corp.</b> ⓒ 2001 All rights reserved.</font>";
   37 : 
   38 : week_str= array("일","월","화","수","목","금","토");
   39 : 
   40 : function string insert_week(string dtime)
   41 :  {
   42 :     int pos, yy, mm, dd;
   43 :     string date, time;
   44 : 
   45 :     pos= strfind(dtime, " ");
   46 :     if(pos>1)
   47 :      {
   48 :         date= left(dtime, pos-1);
   49 :         time= mid(dtime, pos+1);
   50 :         yy= val(left(date, 4));
   51 :         mm= val(mid(date, 6, 2));
   52 :         dd= val(mid(date, 9, 2));
   53 :         dtime= date ~ "(" ~ week_str[iweek(yy,mm,dd)] ~ ") " ~ time;
   54 :      }
   55 :     return(dtime);
   56 :  }
   57 : 
   58 : string bt_comment;
   59 : 
   60 : DEFINE_BUTTON=
   61 : {[  <input type="button" value="{$btname}" id=ib onClick="{$action}"{$style}{$comment}]}
   62 : 
   63 : DEFINE_BUTTON2=
   64 : {[
   65 :          onmouseover="this.style.color='#f00000'"
   66 :          onmouseout= "this.style.color='#000000'">]}
   67 : /*
   68 :    mode==0 : 출력없이 문자열을 리턴함
   69 :    mode==1 : 버튼을 출력함
   70 :    mode>1  : 버튼을 출력한 후 개행을 함
   71 :    style의 첫글자가 "!" : off된 모양
   72 : */
   73 : 
   74 : function free button(int mode, string action, string btname, string style)
   75 :  {
   76 :     string bt, bt_str, comment;
   77 : 
   78 :     bt= DEFINE_BUTTON;
   79 :     if(left(style,1)!="!") bt~= DEFINE_BUTTON2;
   80 :      else style= mid(style,2), bt~= ">";
   81 :     if(style!="") style= " style=\"" ~ style ~ "\"";
   82 :     if(bt_comment!="")
   83 :      {
   84 :         comment= " title=\"" ~ bt_comment ~ "\"";
   85 :         bt_comment= "";
   86 :      }
   87 :     bt_str= strform(bt);
   88 :     if(mode==0) return(bt_str);
   89 :     print(bt_str);
   90 :     if(mode>1) print();
   91 :     return;
   92 :  }
   93 : 
   94 : BACK_BUTTON= "<br><br>" ~ button(0, "history.back()", "뒤로가기","width:60");
   95 : 
   96 : free mysql; // mysql pointer
   97 : int mysql_connected= 0; // mysql 연결 flag
   98 : vlock mysql_connected; // 읽기 전용 설정
   99 : 
  100 : free getrecord_result= MYSQL_ERR, getrecord_recnt= 0, getrecord_prefix;
  101 : vlock getrecord_result, getrecord_recnt;
  102 : 
  103 : function mysql_free_getrecord()
  104 :  {
  105 :     if(getrecord_result!=MYSQL_ERR)
  106 :      {
  107 :         mysql_free_result(getrecord_result);
  108 :         vunlock getrecord_result;
  109 :         getrecord_result= MYSQL_ERR;
  110 :         vlock getrecord_result;
  111 :      }
  112 :  }
  113 : 
  114 : int no_disconnect= 0;
  115 : 
  116 : function disconnect()
  117 :  {
  118 :     if(no_disconnect==1) return;
  119 :     if(getrecord_result!=MYSQL_ERR) mysql_free_getrecord();
  120 :     if(mysql_connected==1)
  121 :      {
  122 :         mysql_close(mysql);
  123 :         vunlock mysql_connected;
  124 :         mysql_connected= 0;
  125 :         vlock mysql_connected;
  126 :      }
  127 :     return;
  128 :  }
  129 : 
  130 : function int mysql_dbselect(string dbname)
  131 :  {
  132 :     if(dbname=="") dbname= mydb;
  133 :     if(mysql_select_db(mysql, dbname)==MYSQL_ERR)
  134 :      {
  135 :         MSG1= "MySQL 데이터베이스 선택 오류";
  136 :         MSG2= dbname ~ " 데이터베이스가 없거나 내부 오류입니다." ~ BACK_BUTTON;
  137 :         formdump(message_form);
  138 :         return(MYSQL_ERR);
  139 :      }
  140 :     return(OK);
  141 :  }
  142 : 
  143 : function int mysql_connection(string dbname)
  144 :  {
  145 :     if(mysql_connected==1) disconnect();
  146 :     mysql= mysql_connect(myhost, myuser, mypass); // MySQL 서버 연결
  147 :     if(mysql==MYSQL_ERR)
  148 :      {
  149 :         MSG1= "MySQL 서버 연결 오류";
  150 :         MSG2= "MySQL 서버가 작동하지 않거나 MySQL 사용자 ID 또는"
  151 :             ~ " 암호가 잘못되었습니다." ~ BACK_BUTTON;
  152 :         formdump(message_form);
  153 :         return(MYSQL_ERR);
  154 :      }
  155 :     if(mysql_dbselect(dbname)==MYSQL_ERR)
  156 :      {
  157 :         mysql_close(mysql);
  158 :         return(MYSQL_ERR);
  159 :      }
  160 :     vunlock mysql_connected;
  161 :     mysql_connected= 1;
  162 :     vlock mysql_connected;
  163 :     return(OK);
  164 :  }
  165 : 
  166 : // rtvalue=mysql_getrecord(qstr, prefix) 함수는 처음 한 개의 레코드를 얻어옴
  167 : // qstr= query string
  168 : // prefix= db 필드변수의 접두사
  169 : // rtvalue<0 ---> MYSQL_ERR=fetch_row 에러, -2=query 에러, -3=store result 에러
  170 : // rtvalue>=0 --> 레코드 갯수
  171 : 
  172 : function long mysql_getrecord(string qstr, string prefix)
  173 :  {
  174 :     int rt;
  175 : 
  176 :     if(mysql_query(mysql, qstr)==MYSQL_ERR) { err_query(); return(-2); }
  177 :     if(getrecord_result!=MYSQL_ERR) mysql_free_getrecord();
  178 :     vunlock getrecord_result;
  179 :     getrecord_result= mysql_store_result(mysql);
  180 :     vlock getrecord_result;
  181 :     if(getrecord_result==MYSQL_ERR) { err_store_result(); return(-3); }
  182 :     vunlock getrecord_recnt;
  183 :     getrecord_recnt= mysql_num_rows(getrecord_result);
  184 :     if(getrecord_recnt>0)
  185 :      {
  186 :         getrecord_prefix= prefix;
  187 :         rt= mysql_fetch_global(getrecord_result, getrecord_prefix);
  188 :         if(rt==MYSQL_ERR) { err_fetch_row(); getrecord_recnt= MYSQL_ERR; }
  189 :      }
  190 :     vlock getrecord_recnt;
  191 :     return(getrecord_recnt);
  192 :  }
  193 : 
  194 : // mysql_nextrecord() 함수는 mysql_getrecord()후의 레코드를 하나씩 얻어옴
  195 : // rtvalue<0 ---> MYSQL_ERR=fetch_row 에러
  196 : // rtvalue>=0 --> 레코드 갯수
  197 : 
  198 : function int mysql_nextrecord()
  199 :  {
  200 :     int rt;
  201 : 
  202 :     if(getrecord_recnt>0)
  203 :      {
  204 :         vunlock getrecord_recnt;
  205 :         --getrecord_recnt;
  206 :         vlock getrecord_recnt;
  207 :      }
  208 :     if(getrecord_recnt<=0) return(0);
  209 :     rt= mysql_fetch_global(getrecord_result, getrecord_prefix);
  210 :     if(rt==MYSQL_ERR) { err_fetch_row(); return(MYSQL_ERR); }
  211 :     return(getrecord_recnt);
  212 :  }
  213 : 
  214 : function err_form(string formname)
  215 :  {
  216 :     MSG1= formname ~ " 폼 개방 오류";
  217 :     MSG2= formname ~ " 파일을 개방할 수 없습니다." ~ BACK_BUTTON;
  218 :     formdump(message_form);
  219 :     return disconnect();
  220 :  }
  221 : 
  222 : function err_query()
  223 :  {
  224 :     MSG1= "MySQL query 오류";
  225 :     MSG2= "MySQL query error!<br><font color=#f00000>QUERY:</font> "
  226 :         ~ qstr ~ "<br>" ~ BACK_BUTTON;
  227 :     formdump(message_form);
  228 :     return disconnect();
  229 :  }
  230 : 
  231 : function err_store_result()
  232 :  {
  233 :     MSG1= "MySQL store result 오류";
  234 :     MSG2= "메모리가 부족하거나 MySQL에 문제가 발생했습니다." ~ BACK_BUTTON;
  235 :     formdump(message_form);
  236 :     return disconnect();
  237 :  }
  238 : 
  239 : function err_fetch_row()
  240 :  {
  241 :     MSG1= "MySQL fetch row 오류";
  242 :     MSG2= "메모리가 부족하거나 MySQL에 문제가 발생했습니다." ~ BACK_BUTTON;
  243 :     formdump(message_form);
  244 :     return disconnect();
  245 :  }
  246 : 
  247 : function long get_recount(string table, string cond)
  248 :  {
  249 :     string qstr;
  250 :     free r, myresult;
  251 : 
  252 :     qstr= "select count(*) from " ~ table;
  253 :     if(cond!="") qstr~= " where " ~ cond;
  254 :     if(mysql_query(mysql, qstr)==MYSQL_ERR) return(-1);
  255 :     myresult= mysql_store_result(mysql);
  256 :     if(myresult==MYSQL_ERR) return(-2);
  257 :     r= mysql_fetch_row(myresult);
  258 :     mysql_free_result(myresult);
  259 :     return(r[0]);
  260 :  }
  261 : 
  262 : function long get_maximum(string table, string field, string cond)
  263 :  {
  264 :     string qstr;
  265 :     free r, myresult;
  266 : 
  267 :     qstr= "select max(" ~ field ~ ") from " ~ table;
  268 :     if(cond!="") qstr~= " where " ~ cond;
  269 :     if(mysql_query(mysql, qstr)==MYSQL_ERR) return(-1);
  270 :     myresult= mysql_store_result(mysql);
  271 :     if(myresult==MYSQL_ERR) return(-2);
  272 :     r= mysql_fetch_row(myresult);
  273 :     mysql_free_result(myresult);
  274 :     return(r[0]);
  275 :  }
  276 : 
  277 : function send_cookie(string id, string pass, string email, string name)
  278 :  {
  279 :     int r;
  280 : 
  281 :     if(ckid=="" && id=="" && ckemail==email && ckname==name) return;
  282 :     usinfo= "ckid="~id~"&ckpass="~pass~"&ckemail="~email~"&ckname="~name
  283 :           ~ "&ckdate="~date(0)~"&cktime="~time(0);
  284 :     usinfo= encode(usinfo, encodekey(), "", decode_variable);
  285 :     if(usinfo!="")
  286 :      {
  287 :         randomize();
  288 :         r= rand(3);
  289 :         if(r==0) r= rand(10) + '0';
  290 :           else if(r==1) r= rand(26) + 'A';
  291 :           else r= rand(26) + 'a';
  292 :         ch= chr(r);
  293 :         usinfo= left(usinfo, cookie_garbage)~ch~mid(usinfo, cookie_garbage+1);
  294 :      }
  295 :     setcookie("usinfo", usinfo);
  296 :     return;
  297 :  }
  298 : 
  299 : function replace_location(string url)
  300 :  {
  301 :     print("<html><head><meta http-equiv='refresh' content=\"0; url='",
  302 :           url, "'\"></head></html>");
  303 :     return;
  304 :  }
  305 : 
  306 : function string bytes_str(double size, int lowpoint)
  307 :  {
  308 :     string str_num, unit;
  309 : 
  310 :     unit= " bytes";
  311 :     if(size>=1024) size= size / 1024.0, unit= " Kbytes";
  312 :     if(size>=1024) size= size / 1024.0, unit= " Mbytes";
  313 :     if(size>=1024) size= size / 1024.0, unit= " Gbytes";
  314 :     strnum= size;
  315 :     pos= strfind(strnum, ".");
  316 :     if(pos>0)
  317 :      {
  318 :         if(lowpoint<1) strnum= left(strnum, pos-1);
  319 :          else
  320 :           {
  321 :              strnum= left(strnum, pos+lowpoint);
  322 :              while(right(strnum,1)=="0") strnum= left(strnum, len(strnum)-1);
  323 :           }
  324 :      }
  325 :     return(strnum ~ unit);
  326 :  }
  327 : 
  328 : max_skin_cnt= 30;
  329 : skin_base_dir= "skin/";
  330 : string skin_dir[max_skin_cnt], skin_desc[max_skin_cnt];
  331 : skin_cnt= 0;
  332 : fp= fopen(skin_base_dir~"skin.dat", "r");
  333 : if(fp==FILE_OPEN_ERR)
  334 :  {
  335 :     MSG1= "스킨 정보 파일 오류";
  336 :     MSG2= "스킨 정보 파일(skin/skin.dat)을 읽을 수 없습니다." ~ BACK_BUTTON;
  337 :     formdump(message_form);
  338 :     return(FAIL);
  339 :  }
  340 : while(skin_cnt<max_skin_cnt)
  341 :  {
  342 :     line= finput(fp);
  343 :     if(flastch()==EOF) break;
  344 :     pos= strfind(line, ",");
  345 :     if(pos==0) continue;
  346 :     dir= lrtrim(left(line, pos-1));
  347 :     desc= lrtrim(mid(line, pos+1));
  348 :     if(fexist(skin_base_dir~dir) && desc!="")
  349 :      {
  350 :         skin_dir[skin_cnt]= dir;
  351 :         skin_desc[skin_cnt]= desc;
  352 :         skin_cnt++;
  353 :      }
  354 :  }
  355 : if(skin_cnt==0)
  356 :  {
  357 :     MSG1= "스킨 정보 파일 오류";
  358 :     MSG2= "스킨 정보가 없습니다." ~ BACK_BUTTON;
  359 :     formdump(message_form);
  360 :     return(FAIL);
  361 :  }
  362 : 
  363 : if(break_on==-1) return(OK); // board 설정이 필요없는 경우
  364 : 
  365 : if(db=="") not_exist= 1;
  366 :  else
  367 :   {
  368 :      conf_file= "conf/" ~ db ~ ".conf";
  369 :      if(!fexist(conf_file)) not_exist= 2;
  370 :       else
  371 :        {
  372 :           not_exist= 0;
  373 :           include(conf_file, -1); // 환경파일 손상시 에러 처리 하지 않음
  374 :        }
  375 :   }
  376 : if(not_exist!=0)
  377 :  {
  378 :      MSG1= prg_title ~ " 명칭 오류";
  379 :      if(not_exist==1) MSG2= prg_title ~ " 이름이 없습니다!";
  380 :        else MSG2= "<font color=#0000c0>" ~ db ~ "</font> " ~ prg_title
  381 :                 ~ "이 만들어지지 않았거나 환경파일이 없습니다!";
  382 :      MSG2~= BACK_BUTTON;
  383 :      formdump(message_form);
  384 :      return disconnect();
  385 :  }
  386 : if(break_on!=-2)
  387 :  {  // 로그인이 아닐때 아래 블럭을 수행
  388 :     if(include("include/chkuser.sub")!=OK) return(FAIL);
  389 :     if(mysql_connection("")==MYSQL_ERR) return(FAIL);
  390 :  }
  391 : if(sk=="") sk= skin_code;
  392 : if(sk<0) sk= 0; else if(sk>=skin_cnt) sk= skin_cnt - 1;
  393 : skin= skin_base_dir ~ skin_dir[sk] ~ "/";
  394 : if(ignore_center==1) scenter= ecenter= "";
  395 :  else scenter= "<center>", ecenter= "</center>";
  396 : if(board_background=="") background= "bgcolor='" ~ board_bgcolor ~ "'";
  397 :  else background= "background='" ~ board_background ~ "'";
  398 : if(write_only_admin!=0 && us_class!="A") read_only= 1; else read_only= 0;
  399 : if(view_board==0) viewboard_flag= ""; else viewboard_flag= "1";
  400 : file_upload_flag= "";
  401 : if(file_upload>0)
  402 :  {
  403 :     if(file_upload==1 || us_class=="A") file_upload_flag= "1";
  404 :  }
  405 : max_upload_bytes= max_upload_ksize * 1024;
  406 : pagerec= list_rec;
  407 : if(pagerec<5) pagerec= 5;
  408 :  else if(pagerec>30) pagerec= 30;
  409 : if(board_htflag==1) system_htskip="1"; else system_htskip= "";
  410 : if(max_upload_bytes<1) upload_limit= "";
  411 :  else upload_limit= "※ 파일 전송 최대 용량이 <font color=#f00000>"
  412 :                   ~ bytes_str(max_upload_bytes,2)
  413 :                   ~ "</font>로 제한되어 있습니다!<br>";
  414 : return(OK);
  415 :  
File name: welboard2/install/board.def (11,580 bytes) Wesoft Corp. ⓒ 2001 All rights reserved.