first commit

This commit is contained in:
chicpro
2013-03-14 09:21:54 +09:00
commit cc5063d012
1817 changed files with 131384 additions and 0 deletions

0
.gitignore vendored Normal file
View File

3740
HISTORY Normal file

File diff suppressed because it is too large Load Diff

1319
HISTORY_YC4 Normal file

File diff suppressed because it is too large Load Diff

209
LICENSE Normal file
View File

@ -0,0 +1,209 @@
소프트웨어 제품은 저작권법 및 국제저작권 협약을 비롯하여, 기타 지적재산권법 및 협약의 보호를 받습니다.
프로그램 명칭 : 그누보드4 (GNU Board 4)
저작자 : SIR (홍석명) http://sir.co.kr
라이센스 (License)
번역문 아래에 원문이 있습니다.
주의 )
1. 이 라이센스는 그누보드4에만 적용하며 플러그인 프로그램 또는 스킨등에는 개별적인 라이센스를 적용할 수 있습니다.
2. 번역문과 원문의 내용상 차이가 있는 경우 원문의 내용을 따릅니다.
3. 법적인 분쟁이 발생한 경우 저작자의 회사 소재지를 관할하는 관할법원에서 분쟁을 해결합니다.
4. 이 라이센스 파일 및 내용은 저작자를 제외한 어느 누구도 추가, 수정, 삭제할 수 없습니다.
----- GPL 번역문 --------------------------------------------------------
GNU 일반 공중 사용 허가서
2판, 1991년 6월
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
누구든지 본 사용 허가서를 있는 그대로 복제하고 배포할 수
있습니다. 그러나 본문에 대한 수정은 허용되지 않습니다.
전 문
소프트웨어에 적용되는 대부분의 사용 허가서(license)들은 소프트웨어에 대한 수정과 공유의 자유를 제한하려는 것을 그 목적으로 합니다. 그러나 GNU 일반 공중 사용 허가서(이하, ``GPL''이라고 칭합니다.)는 자유 소프트웨어에 대한 수정과 공유의 자유를 모든 사용자들에게 보장하기 위해서 성립된 것입니다. 자유 소프트웨어 재단이 제공하는 대부분의 소프트웨어들은 GPL에 의해서 관리되고 있으며, 몇몇 소프트웨어에는 별도의 사용 허가서인 GNU 라이브러리 일반 공중 사용 허가서(GNU Library General Public License)를 대신 적용하기도 합니다. 자유 소프트웨어란, 이를 사용하려고 하는 모든 사람에 대해서 동일한 자유와 권리가 함께 양도되는 소프트웨어를 말하며 프로그램 저작자의 의지에 따라 어떠한 종류의 프로그램에도 GPL을 적용할 수 있습니다. 따라서 여러분이 만든 프로그램에도 GPL을 적용할 수 있습니다.
자유 소프트웨어를 언급할 때 사용되는 ``자유''라는 단어는 무료(無料)를 의미하는 금전적인 측면의 자유가 아니라 구속되지 않는다는 관점에서의 자유를 의미하며, GPL은 자유 소프트웨어를 이용한 복제와 개작, 배포와 수익 사업 등의 가능한 모든 형태의 자유를 실질적으로 보장하고 있습니다. 여기에는 원시 코드(source code)의 전부 또는 일부를 원용해서 개선된 프로그램을 만들거나 새로운 프로그램을 창작할 수 있는 자유가 포함되며, 자신에게 양도된 이러한 자유와 권리를 보다 명확하게 인식할 수 있도록 하기 위한 규정도 포함되어 있습니다.
GPL은 GPL 안에 소프트웨어를 양도받을 사용자의 권리를 제한하는 조항과 단서를 별항으로 추가시키지 못하게 함으로써 사용자들의 자유와 권리를 실제적으로 보장하고 있습니다. 자유 소프트웨어의 개작과 배포에 관계하고 있는 사람들은 이러한 무조건적인 권리 양도 규정을 준수해야만 합니다.
예를 들어 GPL 프로그램을 배포할 경우에는 프로그램의 유료 판매나 무료 배포에 관계없이 자신이 해당 프로그램에 대해서 가질 수 있었던 모든 권리를, 프로그램을 받게될 사람에게 그대로 양도해 주어야 합니다. 이 경우, 프로그램의 원시 코드를 함께 제공하거나 원시 코드를 구할 수 있는 방법을 확실히 알려주어야 하고 이러한 모든 사항들을 사용자들이 분명히 알 수 있도록 명시해야 합니다.
자유 소프트웨어 재단은 다음과 같은 두 가지 단계를 통해서 사용자들을 권리를 보호합니다. (1) 소프트웨어에 저작권을 설정합니다. (2) 저작권의 양도에 관한 실정법에 의해서 유효한 법률적 효력을 갖는 GPL을 통해 소프트웨어를 복제하거나 개작 및 배포할 수 있는 권리를 사용자들에게 부여합니다.
자유 소프트웨어를 사용하는 사람들은 반복적인 재배포 과정을 통해 소프트웨어 자체에 수정과 변형이 일어날 수도 있으며, 이는 최초의 저작자가 만든 소프트웨어가 갖고 있는 문제가 아닐 수 있다는 개연성을 인식하고 있어야 합니다. 우리는 개작과 재배포 과정에서 다른 사람에 의해 발생된 문제로 인해 프로그램 원저작자들의 신망이 훼손되는 것을 원하지 않습니다. GPL에 자유 소프트웨어에 대한 어떠한 형태의 보증도 규정하지 않는 이유는 이러한 점들이 고려되었기 때문이며, 이는 프로그램 원저작자와 자유 소프트웨어 재단의 자유로운 활동을 보장하는 현실적인 수단이기도 합니다.
특허 제도는 자유 소프트웨어의 발전을 위협하는 요소일 수밖에 없습니다. 자유 프로그램을 재배포하는 사람들이 개별적으로 특허를 취득하게 되면, 결과적으로 그 프로그램이 독점 소프트웨어가 될 가능성이 있습니다. 자유 소프트웨어 재단은 이러한 문제에 대처하기 위해서 어떠한 특허에 대해서도 그 사용 권리를 모든 사람들(이하, ``공중(公衆)''이라고 칭합니다.)에게 자유롭게 허용하는 경우에 한해서만 자유 소프트웨어와 함께 사용할 수 있다는 것을 명확히 밝히고 있습니다.
복제(copying)와 개작(modification) 및 배포(distribution)에 관련된 구체적인 조건과 규정은 다음과 같습니다.
복제와 개작 및 배포에 관한 조건과 규정
제 0 조. 본 허가서는 GNU 일반 공중 사용 허가서의 규정에 따라 배포될 수 있다는 사항이 저작권자에 의해서 명시된 모든 컴퓨터 프로그램 저작물에 대해서 동일하게 적용됩니다. 컴퓨터 프로그램 저작물(이하, ``프로그램''이라고 칭합니다.)이란 특정한 결과를 얻기 위해서 컴퓨터 등의 정보 처리 능력을 가진 장치(이하, ``컴퓨터''라고 칭합니다.) 내에서 직접 또는 간접으로 사용되는 일련의 지시 및 명령으로 표현된 창작물을 의미하고, ``2차적 프로그램''이란 전술한 프로그램 자신 또는 저작권법의 규정에 따라 프로그램의 전부 또는 상당 부분을 원용하거나 다른 언어로의 번역을 포함할 수 있는 개작 과정을 통해서 창작된 새로운 프로그램과 이와 관련된 저작물을 의미합니다. (이후로 다른 언어로의 번역은 별다른 제한없이 개작의 범위에 포함되는 것으로 간주합니다.) ``피양도자''란 GPL의 규정에 따라 프로그램을 양도받은 사람을 의미하고, ``원(原)프로그램''이란 프로그램을 개작하거나 2차적 프로그램을 만들기 위해서 사용된 최초의 프로그램을 의미합니다.
본 허가서는 프로그램에 대한 복제와 개작 그리고 배포 행위에 대해서만 적용됩니다. 따라서 프로그램을 실행시키는 행위에 대한 제한은 없습니다. 프로그램의 결과물(output)에는, 그것이 프로그램을 실행시켜서 생성된 것인지 아닌지의 여부에 상관없이 결과물의 내용이 원프로그램으로부터 파생된 2차적 프로그램을 구성했을 때에 한해서 본 허가서의 규정들이 적용됩니다. 2차적 프로그램의 구성 여부는 2차적 프로그램 안에서의 원프로그램의 역할을 토대로 판단합니다.
제 1 조. 적절한 저작권 표시와 프로그램에 대한 보증이 제공되지 않는다는 사실을 각각의 복제물에 명시하는 한, 피양도자는 프로그램의 원시 코드를 자신이 양도받은 상태 그대로 어떠한 매체를 통해서도 복제하고 배포할 수 있습니다. 복제와 배포가 이루어 질 때는 본 허가서와 프로그램에 대한 보증이 제공되지 않는다는 사실에 대해서 언급되었던 모든 내용을 그대로 유지시켜야 하며, 영문판 GPL을 함께 제공해야 합니다.
배포자는 복제물을 물리적으로 인도하는데 소요된 비용을 청구할 수 있으며, 선택 사항으로 독자적인 유료 보증을 설정할 수 있습니다.
제 2 조. 피양도자는 자신이 양도받은 프로그램의 전부나 일부를 개작할 수 있으며, 이를 통해서 2차적 프로그램을 창작할 수 있습니다. 개작된 프로그램이나 창작된 2차적 프로그램은 다음의 사항들을 모두 만족시키는 조건에 한해서, 제1조의 규정에 따라 또다시 복제되고 배포될 수 있습니다.
제 1 항. 파일을 개작할 때는 파일을 개작한 사실과 그 날짜를 파일 안에 명시해야 합니다.
제 2 항. 배포하거나 공표하려는 저작물의 전부 또는 일부가 양도받은 프로그램으로부터 파생된 것이라면, 저작물 전체에 대한 사용 권리를 본 허가서의 규정에 따라 공중에게 무상으로 허용해야 합니다.
제 3 항. 개작된 프로그램의 일반적인 실행 형태가 대화형 구조로 명령어를 읽어 들이는 방식을 취하고 있을 경우에는, 적절한 저작권 표시와 프로그램에 대한 보증이 제공되지 않는다는 사실, (별도의 보증을 설정한 경우라면 해당 내용) 그리고 양도받은 프로그램을 본 규정에 따라 재배포할 수 있다는 사실과 GPL 사본을 참고할 수 있는 방법이 함께 포함된 문구가 프로그램이 대화형 구조로 평이하게 실행된 직후에 화면 또는 지면으로 출력되도록 작성되어야 합니다. (예외 규정: 양도받은 프로그램이 대화형 구조를 갖추고 있다 하더라도 통상적인 실행 환경에서 전술한 사항들이 출력되지 않는 형태였을 경우에는 이를 개작한 프로그램 또한 관련 사항들을 출력시키지 않아도 무방합니다.)
위의 조항들은 개작된 프로그램 전체에 적용됩니다. 만약, 개작된 프로그램에 포함된 특정 부분이 원프로그램으로부터 파생된 것이 아닌 별도의 독립 저작물로 인정될 만한 상당한 이유가 있을 경우에는 해당 저작물의 개별적인 배포에는 본 허가서의 규정들이 적용되지 않습니다. 그러나 이러한 저작물이 2차적 프로그램의 일부로서 함께 배포된다면 개별적인 저작권과 배포 기준에 상관없이 저작물 모두에 본 허가서가 적용되어야 하며, 전체 저작물에 대한 사용 권리는 공중에게 무상으로 양도됩니다.
이러한 규정은 개별적인 저작물에 대한 저작자의 권리를 침해하거나 인정하지 않으려는 것이 아니라, 원프로그램으로부터 파생된 2차적 프로그램이나 수집 저작물의 배포를 일관적으로 규제할 수 있는 권리를 행사하기 위한 것입니다.
원프로그램이나 원프로그램으로부터 파생된 2차적 프로그램을 이들로부터 파생되지 않은 다른 저작물과 함께 단순히 저장하거나 배포할 목적으로 동일한 매체에 모아 놓은 집합물의 경우에는, 원프로그램으로부터 파생되지 않은 다른 저작물에는 본 허가서의 규정들이 적용되지 않습니다.
제 3 조. 피양도자는 다음 중 하나의 항목을 만족시키는 조건에 한해서 제1조와 제2조의 규정에 따라 프로그램(또는 제2조에서 언급된 2차적 프로그램)을 목적 코드(object code)나 실행물(executable form)의 형태로 복제하고 배포할 수 있습니다.
제 1 항. 목적 코드나 실행물에 상응하는 컴퓨터가 인식할 수 있는 완전한 원시 코드를 함께 제공해야 합니다. 원시 코드는 제1조와 제2조의 규정에 따라 배포될 수 있어야 하며, 소프트웨어의 교환을 위해서 일반적으로 사용되는 매체를 통해 제공되어야 합니다.
제 2 항. 배포에 필요한 최소한의 비용만을 받고 목적 코드나 실행물에 상응하는 완전한 원시 코드를 배포하겠다는, 최소한 3년간 유효한 약정서를 함께 제공해야 합니다. 이 약정서는 약정서를 갖고 있는 어떠한 사람에 대해서도 유효해야 합니다. 원시 코드는 컴퓨터가 인식할 수 있는 형태여야 하고 제1조와 제2조의 규정에 따라 배포될 수 있어야 하며, 소프트웨어의 교환을 위해서 일반적으로 사용되는 매체를 통해 제공되어야 합니다.
제 3 항. 목적 코드나 실행물에 상응하는 원시 코드를 배포하겠다는 약정에 대해서 자신이 양도받은 정보를 함께 제공해야 합니다. (제3항은 위의 제2항에 따라 원시 코드를 배포하겠다는 약정을 프로그램의 목적 코드나 실행물과 함께 제공 받았고, 동시에 비상업적인 배포를 하고자 할 경우에 한해서만 허용됩니다.)
저작물에 대한 원시 코드란 해당 저작물을 개작하기에 적절한 형식을 의미합니다. 실행물에 대한 완전한 원시 코드란 실행물에 포함된 모든 모듈들의 원시 코드와 이와 관련된 인터페이스 정의 파일 모두, 그리고 실행물의 컴파일과 설치를 제어하는데 사용된 스크립트 전부를 의미합니다. 그러나 특별한 예외의 하나로서, 실행물이 실행될 운영체제의 주요 부분(컴파일러나 커널 등)과 함께 (원시 코드나 바이너리의 형태로) 일반적으로 배포되는 구성 요소들은 이러한 구성 요소 자체가 실행물에 수반되지 않는 한 원시 코드의 배포 대상에서 제외되어도 무방합니다.
목적 코드나 실행물을 지정한 장소로부터 복제해 갈 수 있게 하는 방식으로 배포할 경우, 동일한 장소로부터 원시 코드를 복제할 수 있는 동등한 접근 방법을 제공한다면 이는 원시 코드를 목적 코드와 함께 복제되도록 설정하지 않았다고 하더라도 원시 코드를 배포하는 것으로 간주됩니다.
제 4 조. 본 허가서에 의해 명시적으로 이루어 지지 않는 한 프로그램에 대한 복제와 개작 및 하위 허가권 설정과 배포가 성립될 수 없습니다. 이와 관련된 어떠한 행위도 무효이며 본 허가서가 보장한 권리는 자동으로 소멸됩니다. 그러나 본 허가서의 규정에 따라 프로그램의 복제물이나 권리를 양도받았던 제3자는 본 허가서의 규정들을 준수하는 한, 배포자의 권리 소멸에 관계없이 사용상의 권리를 계속해서 유지할 수 있습니다.
제 5 조. 본 허가서는 서명이나 날인이 수반되는 형식을 갖고 있지 않기 때문에 피양도자가 본 허가서의 내용을 반드시 받아들여야 할 필요는 없습니다. 그러나 프로그램이나 프로그램에 기반한 2차적 프로그램에 대한 개작 및 배포를 허용하는 것은 본 허가서에 의해서만 가능합니다. 만약 본 허가서에 동의하지 않을 경우에는 이러한 행위들이 법률적으로 금지됩니다. 따라서 프로그램(또는 프로그램에 기반한 2차적 프로그램)을 개작하거나 배포하는 행위는 이에 따른 본 허가서의 내용에 동의한다는 것을 의미하며, 복제와 개작 및 배포에 관한 본 허가서의 조건과 규정들을 모두 받아들이겠다는 의미로 간주됩니다.
제 6 조. 피양도자에 의해서 프로그램(또는 프로그램에 기반한 2차적 프로그램)이 반복적으로 재배포될 경우, 각 단계에서의 피양도자는 본 허가서의 규정에 따른 프로그램의 복제와 개작 및 배포에 대한 권리를 최초의 양도자로부터 양도받은 것으로 자동적으로 간주됩니다. 프로그램(또는 프로그램에 기반한 2차적 프로그램)을 배포할 때는 피양도자의 권리의 행사를 제한할 수 있는 어떠한 사항도 추가할 수 없습니다. 그러나 피양도자에게, 재배포가 일어날 시점에서의 제3의 피양도자에게 본 허가서를 준수하도록 강제할 책임은 부과되지 않습니다.
제 7 조. 법원의 판결이나 특허권 침해에 대한 주장 또는 특허 문제에 국한되지 않은 그밖의 이유들로 인해서 본 허가서의 규정에 배치되는 사항이 발생한다 하더라도 그러한 사항이 선행하거나 본 허가서의 조건과 규정들이 면제되는 것은 아닙니다. 따라서 법원의 명령이나 합의 등에 의해서 본 허가서에 위배되는 사항들이 발생한 상황이라도 양측 모두를 만족시킬 수 없다면 프로그램은 배포될 수 없습니다. 예를 들면, 특정한 특허 관련 허가가 프로그램의 복제물을 직접 또는 간접적인 방법으로 양도받은 임의의 제3자에게 해당 프로그램을 무상으로 재배포할 수 있게 허용하지 않는다면, 그러한 허가와 본 사용 허가를 동시에 만족시키면서 프로그램을 배포할 수 있는 방법은 없습니다.
본 조항은 특정한 상황에서 본 조항의 일부가 유효하지 않거나 적용될 수 없을 경우에도 본 조항의 나머지 부분들을 적용하기 위한 의도로 만들어 졌습니다. 따라서 그 이외의 상황에서는 본 조항을 전체적으로 적용하면 됩니다.
본 조항의 목적은 특허나 저작권 침해 등의 행위를 조장하거나 해당 권리를 인정하지 않으려는 것이 아니라, GPL을 통해서 구현되어 있는 자유 소프트웨어의 배포 체계를 통합적으로 보호하기 위한 것입니다. 많은 사람들이 배포 체계에 대한 신뢰있는 지원을 계속해 줌으로써 소프트웨어의 다양한 분야에 많은 공헌을 해 주었습니다. 소프트웨어를 어떠한 배포 체계로 배포할 것인가를 결정하는 것은 전적으로 저작자와 기증자들의 의지에 달려있는 것이지, 일반 사용자들이 강요할 수 있는 문제는 아닙니다.
본 조항은 본 허가서의 다른 조항들에서 무엇이 중요하게 고려되어야 하는 지를 명확하게 설명하기 위한 목적으로 만들어진 것입니다.
제 8 조. 특허나 저작권이 설정된 인터페이스로 인해서 특정 국가에서 프로그램의 배포와 사용이 함께 또는 개별적으로 제한되어 있는 경우, 본 사용 허가서를 프로그램에 적용한 최초의 저작권자는 문제가 발생하지 않는 국가에 한해서 프로그램을 배포한다는 배포상의 지역적 제한 조건을 명시적으로 설정할 수 있으며, 이러한 사항은 본 허가서의 일부로 간주됩니다.
제 9 조. 자유 소프트웨어 재단은 때때로 본 사용 허가서의 개정판이나 신판을 공표할 수 있습니다. 새롭게 공표될 판은 당면한 문제나 현안을 처리하기 위해서 세부적인 내용에 차이가 발생할 수 있지만, 그 근본 정신에는 변함이 없을 것입니다.
각각의 판들은 판번호를 사용해서 구별됩니다. 특정한 판번호와 그 이후 판을 따른다는 사항이 명시된 프로그램에는 해당 판이나 그 이후에 발행된 어떠한 판을 선택해서 적용해도 무방하고, 판번호를 명시하고 있지 않은 경우에는 자유 소프트웨어 재단이 공표한 어떠한 판번호의 판을 적용해도 무방합니다.
제 10 조. 프로그램의 일부를 본 허가서와 배포 기준이 다른 자유 프로그램과 함께 결합하고자 할 경우에는 해당 프로그램의 저작자로부터 서면 승인을 받아야 합니다. 자유 소프트웨어 재단이 저작권을 갖고 있는 소프트웨어의 경우에는 자유 소프트웨어 재단의 승인을 얻어야 합니다. 우리는 이러한 요청을 수락하기 위해서 때때로 예외 기준을 만들기도 합니다. 자유 소프트웨어 재단은 일반적으로 자유 소프트웨어의 2차적 저작물들을 모두 자유로운 상태로 유지시키려는 목적과 소프트웨어의 공유와 재활용을 증진시키려는 두가지 목적을 기준으로 승인 여부를 결정할 것입니다.
보증의 결여 (제11조, 제12조)
제 11 조. 본 허가서를 따르는 프로그램은 무상으로 양도되기 때문에 관련 법률이 허용하는 한도 내에서 어떠한 형태의 보증도 제공되지 않습니다. 프로그램의 저작권자와 배포자가 공동 또는 개별적으로 별도의 보증을 서면으로 제공할 때를 제외하면, 특정한 목적에 대한 프로그램의 적합성이나 상업성 여부에 대한 보증을 포함한 어떠한 형태의 보증도 명시적이나 묵시적으로 설정되지 않은 ``있는 그대로의'' 상태로 이 프로그램을 배포합니다. 프로그램과 프로그램의 실행에 따라 발생할 수 있는 모든 위험은 피양도자에게 인수되며 이에 따른 보수 및 복구를 위한 제반 경비 또한 피양도자가 모두 부담해야 합니다.
제 12 조. 저작권자나 배포자가 프로그램의 손상 가능성을 사전에 알고 있었다 하더라도 발생된 손실이 관련 법규에 의해 보호되고 있거나 이에 대한 별도의 서면 보증이 설정된 경우가 아니라면, 저작권자나 프로그램을 원래의 상태 또는 개작한 상태로 제공한 배포자는 프로그램의 사용이나 비작동으로 인해 발생된 손실이나 프로그램 자체의 손실에 대해 책임지지 않습니다. 이러한 면책 조건은 사용자나 제3자가 프로그램을 조작함으로써 발생된 손실이나 다른 소프트웨어와 프로그램을 함께 동작시키는 것으로 인해서 발생된 데이터의 상실 및 부정확한 산출 결과에만 국한되는 것이 아닙니다. 발생된 손실의 일반성이나 특수성 뿐 아니라 원인의 우발성 및 필연성도 전혀 고려되지 않습니다.
복제와 개작 및 배포에 관한 조건과 규정의 끝.
----- GPL 원문 --------------------------------------------------------
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and modification follow.
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
----- 끝 --------------------------------------------------------

84
LICENSE_YC4 Normal file
View File

@ -0,0 +1,84 @@
소프트웨어 제품 사용권
소프트웨어 제품은 저작권법 및 국제 저작권 협약을 비롯하여, 기타 지적 재산권 법 및 협약의 보호를 받습니다. 소프트웨어 제품은 판매되는 것이 아니라 그 사용이 허가되는 것입니다.
가. 사용약관 (License Agreement)
제 1조. 목적
1. SIR(이하 " 회사"라 한다)이 제공하는 솔루션 프로그램(이하 "소프트웨어"라 한다)의 사용권을 구입한 후 설치하여 사용하는 사용자(이하 '사용자'라 한다)의 "소프트웨어" 사용에 관하여 필요로 하는 전반적인 내용에 대하여 규정하는것을 목적으로 합니다.
제 2조. 저작권 및 사용의 범위
1. 본 "소프트웨어"의 소유권 및 저작권은 "회사"에게 있습니다.
2. "소프트웨어"와 부속 이미지 및 소프트웨어에 포함된 모든 권한은 "회사"에 있습니다.
3. "사용자"는 "소프트웨어"와 부속이미지 등을 도용 할 수 없습니다.
4. 본 "소프트웨어"의 저작권은 대한민국 및 국제 저작권에 관한 법률, 국제법, 국제조약, 국제적인 저작권협정에 의해 보호를 받습니다.
5. "소프트웨어"는 사용대금의 입금 완료 후 회사 홈페이지 또는 이메일로 등록번호와 프로그램을 전송받아 설치, 사용할 수 있는 상용 소프트웨어 입니다.
6. "소프트웨어"는 하나의 주도메인에 하나의 "소프트웨어"를 설치, 사용할 수 있습니다.
7. 본 약관에서 정의 하는 사용의 허락은 "소프트웨어"의 소유권 및 저작권을 가지는것은 아닙니다.
제 3조. 소프트웨어에 대한 사용의 허락
1. 소프트웨어를 네트워크나 인터넷에 연결된 컴퓨터(이하 "서버"라 한다)에 설치하여 사용할 수 있습니다.
2. 소프트웨어는 사용상의 편의를 위해 사용자의 컴퓨터에 자료를 복사하여 보관할 수 있습니다.
3. "사용자"는 "회사"가 정한 본 약관에 동의 해야만 "소프트웨어"를 "서버"에 설치할 수 있습니다.
4. 소프트웨어의 소스코드의 일부 또는 전체를 변형하여 사용자의 "서버"에서 운영할 수 있습니다.
제 4조. 소프트웨어의 사용제한
1. "소프트웨어"를 대여하거나 기타 상업적인 목적으로 재배포할 수 없습니다.
2. 소프트웨어의 소스코드의 일부 또는 전체를 변형하여 2차적 저작물을 창작하여서는 안되며, 만약, 2차적 저작물을 창작할 경우 "회사"로 부터 서면에 의해 허락을 받아야 합니다.
3. "소프트웨어"의 소스코드의 일부 또는 전체를 변형하여 인터넷 등 기타의 장소에 재배포 할 수 없습니다.
4. 디젠드(dezend), 디컴파일(decomplie) 또는 다른 방법으로 "소프트웨어"의 소스코드를 추출하고자 시도할 수 없습니다. (또한 어느 누구에게도 이를 하도록 허락할 수 없습니다.) 다만, 법률에 의하여 명시적으로 허용되거나 요구되는 경우 또는 "회사"로 부터 서면에 의하여 특별히 허락받은 때는 예외로 합니다.
제 5조. 보증의 한계
1. "회사"는 "소프트웨어"가 최적이라고 판단되는 상태에서 사용권을 판매하는 것으로 "소프트웨어"의 내용이나 기능의 완벽성에 대해서는 일체의 보증을 하지 않습니다.
단, "회사"는 정당하다고 판단될 경우 신뢰적인 문제해결을 제공합니다.
2. "소프트웨어"는 사용환경, 사용경험 및 사용능력에 따라 그 결과가 달라질 수 있습니다.
3. "소프트웨어" 자체의 결함으로 인해 고객에게 직간접적으로 발생한 손실이 있을 경우, 회사의 금전적인 보상은 "소프트웨어"의 구입비용을 초과하지 않습니다.
단, 저작권과 관련된 문제가 발생한 경우 별도의 협의가 필요합니다.
4. "소프트웨어"에 대한 기본 보증기간은 구입 후 1년 입니다. "소프트웨어"의 다운로드도 기본 보증기간에 한합니다.
단, 개별적인 보증기간이 있는 경우는 그에 따릅니다. 보증기간이 지난 경우 무상지원이 되지 않습니다.
제 6조. 환불
1. "사용자"가 "소프트웨어"를 다운로드 또는 메일로 전송 받은 상태 또는 설치한 상태(설치 대행한 경우도 포함)에서는 환불이 불가합니다.
2. "사용자"가 "소프트웨어"의 구입을 위하여 구입한 후 7일이 지나면 환불이 불가합니다.
3. "사용자"가 환불을 요청하는 경우에는 결제시 지불된 수수료를 "사용자"가 부담하는 조건으로 환불할 수 있습니다.
4. "회사"는 "사용자"가 "소프트웨어"를 정상적으로 사용하기 어렵다는 판단이 들면 환불해 드릴 수 있습니다.
5. "사용자"의 부주의, 실수 등에 의한 경우 환불이 불가합니다. (예: 컴퓨터 오류에 의한 데이터 삭제, 데이터의 분실 등)
제 7조. 면책 조항
1. "회사"는 천재지변, 전쟁 및 기타 이에 준하는 불가항력으로 인하여 서비스를 제공할 수 없는 경우에는 서비스 제공에 대한 책임이 면제됩니다.
2. "회사"는 기간통신 사업자가 전기통신 서비스를 중지하거나 정상적으로 제공하지 아니하여 손해가 발생한 경우 책임이 면제됩니다.
3. "회사"는 설비 보수, 교체, 정기점검, 공사 등 부득이한 사유로 서비스 장애가 발생한 경우 책임이 면제됩니다.
4. "사용자"의 귀책사유로 "사용자"의 아이디(ID)와 비밀번호가 유출되어 발생한 문제에 대한 책임은 "사용자"에게 있으며 "회사"는 아무런 책임이 없습니다.
5. "사용자"가 "사용자"의 전화번호, 이메일 등의 연락처정보를 최신의 상태로 유지하지 않아 발생한 문제에 대한 책임은 "사용자"에게 있으며 "회사"는 아무런 책임이 없습니다. (예: 서비스 내용 변경 고지 등)
6. "사용자"가 서비스 이용과 관련하여 다음과 같은 경우 "회사"는 책임을 지지 않습니다.
① "사용자"는 "사용자"의 저작권 위반, 보관 부실, 불법복제, 소스변형 등과 관련하여 발생하는 모든 종류의 손해에 대해 "회사"는 책임을 지지 않습니다.
② 컴퓨터 오류 등 "사용자"의 귀책사유로 인한 서비스 이용의 장애 또는 손해가 발생한 경우에 대하여 "회사"는 책임을 지지 않습니다.
③ "소프트웨어"의 최적화된 환경 외의 프로그램이나 버전에서 사용하여 발생한 문제에 대하여 "회사"는 책임을 지지 않습니다.
④ "사용자"가 서비스와 관련하여 자체적으로 게재한 정보, 사실, 자료 등의 정확성과 신뢰도에 대하여 "회사"는 책임을 지지 않습니다.
⑤ "사용자" 상호간 및 "사용자"와 제3자간에 서비스를 매개로 발생한 분쟁에 대해 "회사"는 개입할 의무가 없으며 이로 인한 손해를 배상할 책임도 없습니다.
7. "회사"가 무료로 제공하는 서비스의 이용과 관련해서 "회사"는 어떠한 손해에 대해서도 책임이 없습니다.
제 8조. 권리의 양도 금지
"사용자"는 "회사"의 서면동의 없이 본 약관상의 권리와 의무를 제3자에게 양도할 수 없습니다.
제 9조. 효력의 발생
본 약관의 효력은 "소프트웨어"를 다운로드 받거나 또는 서버에 설치함과 동시에 발생합니다.
제 10조. 분쟁 및 관할 법원
1. "회사"는 제 4조에 명시된 사항 및 본 약관의 전반적인 사항에 위배된 "사용자"에 대하여 민, 형사상의 책임을 물을 수 있습니다.
2. 제 9조 1항에 의거 "회사"와 "사용자"간에 법적인 분쟁이 발생한 경우 "회사"의 소재지를 관할하는 관할법원으로 합니다.
「부칙」 (시행일)
1. (시행일) 이 약관은 2004년 2 월 1 일부터 시행합니다.
2. (개정일) 이 약관은 2008년 10 월 1 일에 1차 개정되었으며 종전의 약관은 이 약관으로 대체합니다.
주의: 이 문서는 판매 계약서가 아닌 라이센스 계약서입니다. 이 제품은 보증 및 배상절차에 대한 제한 사항이 언급되어 있는 상기 계약 조건에 따라 제공됩니다.

0
README.md Normal file
View File

4
_common.php Normal file
View File

@ -0,0 +1,4 @@
<?
$g4_path = "."; // common.php 의 상대 경로
include_once("$g4_path/common.php");
?>

4
_head.php Normal file
View File

@ -0,0 +1,4 @@
<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
include_once("$g4[path]/head.php");
?>

4
_tail.php Normal file
View File

@ -0,0 +1,4 @@
<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
include_once("$g4[path]/tail.php");
?>

5
adm/_common.php Normal file
View File

@ -0,0 +1,5 @@
<?
$g4_path = ".."; // common.php 의 상대 경로
include_once ("$g4_path/common.php");
include_once("$g4[admin_path]/admin.lib.php");
?>

237
adm/admin.head.php Normal file
View File

@ -0,0 +1,237 @@
<?
if (!defined("_GNUBOARD_")) exit;
$begin_time = get_microtime();
include_once("$g4[path]/head.sub.php");
function print_menu1($key, $no)
{
global $menu;
$str = "<table width=130 cellpadding=1 cellspacing=0 id='menu_{$key}' style='position:absolute; display:none; z-index:1;' onpropertychange=\"selectBoxHidden('menu_{$key}')\"><colgroup><colgroup><colgroup width=10><tr><td rowspan=2 colspan=2 bgcolor=#EFCA95><table width=127 cellpadding=0 cellspacing=0 bgcolor=#FEF8F0><colgroup style='padding-left:10px'>";
$str .= print_menu2($key, $no);
$str .= "</table></td><td></td></tr><tr><td bgcolor=#DDDAD5 height=40></td></tr><tr><td width=4></td><td height=3 width=127 bgcolor=#DDDAD5></td><td bgcolor=#DDDAD5></td></tr></table>\n";
return $str;
}
function print_menu2($key, $no)
{
global $menu, $auth_menu, $is_admin, $auth, $g4;
$str = "";
for($i=1; $i<count($menu[$key]); $i++)
{
if ($is_admin != "super" && (!array_key_exists($menu[$key][$i][0],$auth) || !strstr($auth[$menu[$key][$i][0]], "r")))
continue;
if ($menu[$key][$i][0] == "-")
$str .= "<tr><td class=bg_line{$no}></td></tr>";
else
{
$span1 = $span2 = "";
if (isset($menu[$key][$i][3]))
{
$span1 = "<span style='{$menu[$key][$i][3]}'>";
$span2 = "</span>";
}
$str .= "<tr><td class=bg_menu{$no}>";
if ($no == 2)
$str .= "&nbsp;&nbsp;<img src='{$g4[admin_path]}/img/icon.gif' align=absmiddle> ";
$str .= "<a href='{$menu[$key][$i][2]}' style='color:#555500;'>{$span1}{$menu[$key][$i][1]}{$span2}</a></td></tr>";
$auth_menu[$menu[$key][$i][0]] = $menu[$key][$i][1];
}
}
return $str;
}
?>
<script type="text/javascript">
if (!g4_is_ie) document.captureEvents(Event.MOUSEMOVE)
document.onmousemove = getMouseXY;
var tempX = 0;
var tempY = 0;
var prevdiv = null;
var timerID = null;
function getMouseXY(e)
{
if (g4_is_ie) { // grab the x-y pos.s if browser is IE
tempX = event.clientX + document.body.scrollLeft;
tempY = event.clientY + document.body.scrollTop;
} else { // grab the x-y pos.s if browser is NS
tempX = e.pageX;
tempY = e.pageY;
}
if (tempX < 0) {tempX = 0;}
if (tempY < 0) {tempY = 0;}
return true;
}
function imageview(id, w, h)
{
menu(id);
var el_id = document.getElementById(id);
//submenu = eval(name+".style");
submenu = el_id.style;
submenu.left = tempX - ( w + 11 );
submenu.top = tempY - ( h / 2 );
selectBoxVisible();
if (el_id.style.display != 'none')
selectBoxHidden(id);
}
function help(id, left, top)
{
menu(id);
var el_id = document.getElementById(id);
//submenu = eval(name+".style");
submenu = el_id.style;
submenu.left = tempX - 50 + left;
submenu.top = tempY + 15 + top;
selectBoxVisible();
if (el_id.style.display != 'none')
selectBoxHidden(id);
}
// TEXTAREA 사이즈 변경
function textarea_size(fld, size)
{
var rows = parseInt(fld.rows);
rows += parseInt(size);
if (rows > 0) {
fld.rows = rows;
}
}
</script>
<script type="text/javascript" src="<?=$g4['path']?>/js/common.js"></script>
<script type="text/javascript" src="<?=$g4['path']?>/js/sideview.js"></script>
<script type="text/javascript">
var save_layer = null;
function layer_view(link_id, menu_id, opt, x, y)
{
var link = document.getElementById(link_id);
var menu = document.getElementById(menu_id);
//for (i in link) { document.write(i + '<br/>'); } return;
if (save_layer != null)
{
save_layer.style.display = "none";
selectBoxVisible();
}
if (link_id == '')
return;
if (opt == 'hide')
{
menu.style.display = 'none';
selectBoxVisible();
}
else
{
x = parseInt(x);
y = parseInt(y);
menu.style.left = get_left_pos(link) + x;
menu.style.top = get_top_pos(link) + link.offsetHeight + y;
menu.style.display = 'block';
}
save_layer = menu;
}
</script>
<link rel="stylesheet" href="<?=$g4['admin_path']?>/admin.style.css" type="text/css">
<style>
.bg_menu1 { height:22px;
padding-left:15px;
padding-right:15px; }
.bg_line1 { height:1px; background-color:#EFCA95; }
.bg_menu2 { height:22px;
padding-left:25px; }
.bg_line2 { background-image:url('<?=$g4['admin_path']?>/img/dot.gif'); height:3px; }
.dot {color:#D6D0C8;border-style:dotted;}
#csshelp1 { border:0px; background:#FFFFFF; padding:6px; }
#csshelp2 { border:2px solid #BDBEC6; padding:0px; }
#csshelp3 { background:#F9F9F9; padding:6px; width:200px; color:#222222; line-height:120%; text-align:left; }
</style>
<body leftmargin=0 topmargin=0>
<a name='gnuboard4_admin_head'></a>
<table width=1004 cellpadding=0 cellspacing=0 border=0>
<colgroup width=180>
<colgroup>
<tr bgcolor=#E3DCD2 height=70>
<td colspan=2 onmouseover="layer_view('','','','','')"><a href='<?=$g4['admin_path']?>/'><img src='<?=$g4['admin_path']?>/img/logo.gif' border=0></a></td>
<td>
<?
foreach($amenu as $key=>$value)
{
$href1 = $href2 = "";
if ($menu["menu{$key}"][0][2])
{
$href1 = "<a href='".$menu["menu{$key}"][0][2]."'>";
$href2 = "</a>";
}
echo "{$href1}<img src='$g4[admin_path]/img/menu{$key}.gif' border=0 id='id_menu{$key}' onmouseover=\"layer_view('id_menu{$key}', 'menu_menu{$key}', 'view', -2, 5);\">{$href2}&nbsp; ";
echo print_menu1("menu{$key}", 1);
}
?>
</td>
</tr>
<tr><td colspan=3 bgcolor=#C3BBB1 height=1></td></tr>
<tr><td colspan=3 bgcolor=#E5E5E5 height=2></td></tr>
<tr onmouseover="layer_view('','','','','')">
<td><a href='<?=$g4['path']?>/'><img src='<?=$g4['admin_path']?>/img/home.gif' border=0></a><a href='<?=$g4['bbs_path']?>/logout.php'><img src='<?=$g4['admin_path']?>/img/logout.gif' border=0></a></td>
<td rowspan=2 width=1 bgcolor=#DBDBDB></td>
<td bgcolor=#F8F8F8 align=right>
<img src='<?=$g4['admin_path']?>/img/navi_icon.gif' align=absmiddle>
&nbsp;<a href='<?=$g4['admin_path']?>/'>Admin</a> >
<?
$tmp_menu = "";
if (isset($sub_menu))
$tmp_menu = substr($sub_menu, 0, 3);
if (isset($menu["menu{$tmp_menu}"][0][1]))
{
if ($menu["menu{$tmp_menu}"][0][2])
{
echo "<a href='".$menu["menu{$tmp_menu}"][0][2]."'>";
echo $menu["menu{$tmp_menu}"][0][1];
echo "</a> > ";
}
else
echo $menu["menu{$tmp_menu}"][0][1]." > ";
}
?>
<?=$g4['title']?> <span class=small>: <?=$member['mb_id']?>님</span>&nbsp;&nbsp;</td>
</tr>
<tr onmouseover="layer_view('','','','','')">
<td valign=top>
<table width=180 cellpadding=0 cellspacing=0>
<?
echo "<tr><td><img src='$g4[admin_path]/img/title_menu{$tmp_menu}.gif'></td></tr>";
echo print_menu2("menu{$tmp_menu}", 2);
?>
</table><br>
</td>
<td valign=top style='padding:10px;'>

46
adm/admin.js Normal file
View File

@ -0,0 +1,46 @@
function check_all(f)
{
var chk = document.getElementsByName("chk[]");
for (i=0; i<chk.length; i++)
chk[i].checked = f.chkall.checked;
}
function btn_check(f, act)
{
if (act == "update") // 선택수정
{
f.action = list_update_php;
str = "수정";
}
else if (act == "delete") // 선택삭제
{
f.action = list_delete_php;
str = "삭제";
}
else
return;
var chk = document.getElementsByName("chk[]");
var bchk = false;
for (i=0; i<chk.length; i++)
{
if (chk[i].checked)
bchk = true;
}
if (!bchk)
{
alert(str + "할 자료를 하나 이상 선택하세요.");
return;
}
if (act == "delete")
{
if (!confirm("선택한 자료를 정말 삭제 하시겠습니까?"))
return;
}
f.submit();
}

334
adm/admin.lib.php Normal file
View File

@ -0,0 +1,334 @@
<?
if (!defined("_GNUBOARD_")) exit;
/*
// 081022 : CSRF 방지를 위해 코드를 작성했으나 효과가 없어 주석처리 함
if (!get_session("ss_admin")) {
set_session("ss_admin", true);
goto_url(".");
}
*/
// 스킨경로를 얻는다
function get_skin_dir($skin, $len='')
{
global $g4;
$result_array = array();
$dirname = "$g4[path]/skin/$skin/";
$handle = opendir($dirname);
while ($file = readdir($handle))
{
if($file == "."||$file == "..") continue;
if (is_dir($dirname.$file)) $result_array[] = $file;
}
closedir($handle);
sort($result_array);
return $result_array;
}
// 회원 삭제
function member_delete($mb_id)
{
global $config;
global $g4;
$sql = " select mb_name, mb_nick, mb_ip, mb_recommend, mb_memo, mb_level from $g4[member_table] where mb_id= '$mb_id' ";
$mb = sql_fetch($sql);
if ($mb[mb_recommend]) {
$row = sql_fetch(" select count(*) as cnt from $g4[member_table] where mb_id = '".addslashes($mb[mb_recommend])."' ");
if ($row[cnt])
insert_point($mb[mb_recommend], $config[cf_recommend_point] * (-1), "{$mb_id}님의 회원자료 삭제로 인한 추천인 포인트 반환", '@member', $mb[mb_recommend], "{$mb_id} 추천인 삭제");
}
// 회원자료는 정보만 없앤 후 아이디는 보관하여 다른 사람이 사용하지 못하도록 함 : 061025
if ($mb[mb_level] > 1) {
$sql = " update $g4[member_table]
set mb_jumin = '',
mb_password = '',
mb_level = '1',
mb_email = '',
mb_homepage = '',
mb_password_q = '',
mb_password_a = '',
mb_tel = '',
mb_hp = '',
mb_zip1 = '',
mb_zip2 = '',
mb_addr1 = '',
mb_addr2 = '',
mb_birth = '',
mb_sex = '',
mb_signature = '',
mb_memo = '".date("Ymd",$g4['server_time'])." 삭제함\n\n$mb[mb_memo]',
mb_leave_date = '".date("Ymd",$g4['server_time'])."'
where mb_id = '$mb_id' ";
//echo $sql; exit;
sql_query($sql);
}
/*
// 회원 자료 삭제
sql_query(" delete from $g4[member_table] where mb_id = '$mb_id' ");
// 삭제된 자료를 또 삭제하면 완전 삭제함
if ($mb[mb_nick] != '[삭제됨]')
{
// 다른 사람이 이 회원아이디를 사용하지 못하도록 아이디만 생성해 놓습니다.
// 게시판에서 회원아이디는 삭제하지 않기 때문입니다.
sql_query(" insert into $g4[member_table] set mb_id = '$mb_id', mb_name='$mb[mb_name]', mb_nick='[삭제됨]', mb_ip='$mb[mb_ip]', mb_datetime = '$g4[time_ymdhis]' ");
}
// 포인트 테이블에서 삭제
sql_query(" delete from $g4[point_table] where mb_id = '$mb_id' ");
// 그룹접근가능 삭제
sql_query(" delete from $g4[group_member_table] where mb_id = '$mb_id' ");
// 쪽지 삭제
sql_query(" delete from $g4[memo_table] where me_recv_mb_id = '$mb_id' or me_send_mb_id = '$mb_id' ");
// 스크랩 삭제
sql_query(" delete from $g4[scrap_table] where mb_id = '$mb_id' ");
// 관리권한 삭제
sql_query(" delete from $g4[auth_table] where mb_id = '$mb_id' ");
// 그룹관리자인 경우 그룹관리자를 공백으로
sql_query(" update $g4[group_table] set gr_admin = '' where gr_admin = '$mb_id' ");
// 게시판관리자인 경우 게시판관리자를 공백으로
sql_query(" update $g4[board_table] set bo_admin = '' where bo_admin = '$mb_id' ");
// 아이콘 삭제
@unlink("$g4[path]/data/member/".substr($mb_id,0,2)."/$mb_id.gif");
*/
}
// 회원권한을 SELECT 형식으로 얻음
function get_member_level_select($name, $start_id=0, $end_id=10, $selected='', $event='')
{
global $g4;
$str = "<select name='$name' $event>";
for ($i=$start_id; $i<=$end_id; $i++)
{
$str .= "<option value='$i'";
if ($i == $selected)
$str .= " selected";
$str .= ">$i</option>";
}
$str .= "</select>";
return $str;
}
// 회원아이디을 SELECT 형식으로 얻음
function get_member_id_select($name, $level, $selected='', $event='')
{
global $g4;
$sql = " select mb_id from $g4[member_table] where mb_level >= '$level' ";
$result = sql_query($sql);
$str = "<select name='$name' $event><option value=''>선택안함";
for ($i=0; $row=sql_fetch_array($result); $i++)
{
$str .= "<option value='$row[mb_id]'";
if ($row[mb_id] == $selected) $str .= " selected";
$str .= ">$row[mb_id]</option>";
}
$str .= "</select>";
return $str;
}
// 권한 검사
function auth_check($auth, $attr)
{
global $is_admin;
if ($is_admin == "super") return;
if (!trim($auth))
alert("이 메뉴에는 접근 권한이 없습니다.\\n\\n접근 권한은 최고관리자만 부여할 수 있습니다.");
$attr = strtolower($attr);
if (!strstr($auth, $attr)) {
if ($attr == "r")
alert("읽을 권한이 없습니다.");
else if ($attr == "w")
alert("입력, 추가, 생성, 수정 권한이 없습니다.");
else if ($attr == "d")
alert("삭제 권한이 없습니다.");
else
alert("속성이 잘못 되었습니다.");
}
}
// 텍스트에리어 늘리기, 줄이기
function textarea_size($fld)
{
global $g4;
$size = 10;
$s = "<table cellpadding=2 cellspacing=0 border=0 width=100%><tr><td align=right>";
$s .= "<span onclick=\"javascript:textarea_size(document.getElementById('$fld'), {$size})\"><img src='$g4[admin_path]/img/btn_up.gif' border=0 align=absmiddle></span> ";
$s .= "<span onclick=\"javascript:textarea_size(document.getElementById('$fld'), ".$size*(-1).")\"><img src='$g4[admin_path]/img/btn_down.gif' border=0 align=absmiddle></span>";
$s .= "&nbsp;&nbsp;</td></tr></table>";
return $s;
}
// 작업아이콘 출력
function icon($act, $link="", $target="_parent")
{
global $g4;
$img = array("입력"=>"insert", "추가"=>"insert", "생성"=>"insert", "수정"=>"modify", "삭제"=>"delete", "이동"=>"move", "그룹"=>"move", "보기"=>"view", "미리보기"=>"view", "복사"=>"copy");
$icon = "<img src='{$g4[admin_path]}/img/icon_{$img[$act]}.gif' border=0 align=absmiddle title='$act' width=22 height=21>";
if ($link)
//$s = "<a href=\"$link\" target=\"$target\">$icon</a>";
$s = "<a href=\"$link\">$icon</a>";
else
$s = $icon;
return $s;
}
// rm -rf 옵션 : exec(), system() 함수를 사용할 수 없는 서버 또는 win32용 대체
// www.php.net 참고 : pal at degerstrom dot com
function rm_rf($file)
{
if (file_exists($file)) {
@chmod($file,0777);
if (is_dir($file)) {
$handle = opendir($file);
while($filename = readdir($handle)) {
if ($filename != "." && $filename != "..")
rm_rf("$file/$filename");
}
closedir($handle);
rmdir($file);
} else
unlink($file);
}
}
function help($help="", $left=0, $top=0)
{
global $g4;
static $idx = 0;
$idx++;
$help = preg_replace("/\n/", "<br>", $help);
$str = "<img src='$g4[admin_path]/img/icon_help.gif' border=0 width=15 height=15 align=absmiddle onclick=\"help('help$idx', $left, $top);\" style='cursor:hand;'>";
$str .= "<div id='help$idx' style='position:absolute; display:none; z-index:9999;'>";
$str .= "<div id='csshelp1'><div id='csshelp2'><div id='csshelp3'>$help</div></div></div>";
$str .= "</div>";
return $str;
}
function subtitle($title, $more="")
{
global $g4;
$s = "<table width=100% cellpadding=0 cellspacing=0><tr><td width=80% align=left><table border='0' cellpadding='0' cellspacing='1'><tr><td height='24'><img src='$g4[admin_path]/img/icon_title.gif' width=20 height=9> <font color='#525252'><b>$title</b></font> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td></tr></table><table width=100% cellpadding=0 cellspacing=0><tr><td height=1></td></tr></table></td><td width=20% align=right>";
if ($more)
$s .= "<a href='$more'><img src='$g4[admin_path]/img/icon_more.gif' width='43' height='11' border=0 align=absmiddle></a>";
$s .= "</td></tr></table>\n";
return $s;
}
// 출력순서
function order_select($fld, $sel="")
{
$s = "<select name='$fld'>";
for ($i=1; $i<=100; $i++) {
$s .= "<option value='$i' ";
if ($sel) {
if ($i == $sel) {
$s .= "selected";
}
} else {
if ($i == 50) {
$s .= "selected";
}
}
$s .= ">$i</option>";
}
$s .= "</select>\n";
return $s;
}
// 접근 권한 검사
if (!$member['mb_id'])
{
//alert("로그인 하십시오.", "$g4[bbs_path]/login.php?url=" . urlencode("$_SERVER[PHP_SELF]?w=$w&mb_id=$mb_id"));
alert("로그인 하십시오.", "$g4[bbs_path]/login.php?url=" . urlencode("$_SERVER[PHP_SELF]?$_SERVER[QUERY_STRING]"));
}
else if ($is_admin != "super")
{
$auth = array();
$sql = " select au_menu, au_auth from $g4[auth_table] where mb_id = '$member[mb_id]' ";
$result = sql_query($sql);
for($i=0; $row=sql_fetch_array($result); $i++)
{
$auth[$row[au_menu]] = $row[au_auth];
}
if (!$i)
{
alert("최고관리자 또는 관리권한이 있는 회원만 접근 가능합니다.", $g4[path]);
}
}
// 관리자의 아이피, 브라우저와 다르다면 세션을 끊고 관리자에게 메일을 보낸다.
$admin_key = md5($member[mb_datetime] . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']);
if (get_session("ss_mb_key") !== $admin_key) {
session_destroy();
include_once("$g4[path]/lib/mailer.lib.php");
// 메일 알림
mailer($member['mb_nick'], $member['mb_email'], $member['mb_email'], "XSS 공격 알림", "{$_SERVER['REMOTE_ADDR']} 아이피로 XSS 공격이 있었습니다.\n\n관리자 권한을 탈취하려는 접근이므로 주의하시기 바랍니다.\n\n해당 아이피는 차단하시고 의심되는 게시물이 있는지 확인하시기 바랍니다.\n\n$g4[url]", 0);
alert_close("정상적으로 로그인하여 접근하시기 바랍니다.");
}
@ksort($auth);
// 가변 메뉴
unset($auth_menu);
unset($menu);
unset($amenu);
$tmp = dir($g4['admin_path']);
while ($entry = $tmp->read())
{
//if (!preg_match("/^admin.menu([0-9]{3}).php/", $entry, $m))
//if (!preg_match("/^admin.menu([0-9]{3}).*\.php/", $entry, $m))
if (!preg_match("/^admin.menu([0-9]{3}).*\.php$/", $entry, $m))
continue; // 파일명이 menu 으로 시작하지 않으면 무시한다.
$amenu[$m[1]] = $entry;
include_once($g4['admin_path']."/".$entry);
}
@ksort($amenu);
$qstr = "";
if (isset($sst)) $qstr .= "&sst=$sst";
if (isset($sod)) $qstr .= "&sod=$sod";
if (isset($sfl)) $qstr .= "&sfl=$sfl";
if (isset($stx)) $qstr .= "&stx=$stx";
if (isset($page)) $qstr .= "&page=$page";
//$qstr = "sst=$sst&sod=$sod&sfl=$sfl&stx=$stx&page=$page";
?>

17
adm/admin.menu100.php Normal file
View File

@ -0,0 +1,17 @@
<?
$menu["menu100"] = array (
array("100000", "환경설정", ""),
array("", "기본환경설정", "$g4[admin_path]/config_form.php"),
array("", "관리권한설정", "$g4[admin_path]/auth_list.php"),
array("100300", "메일 테스트", "$g4[admin_path]/sendmail_test.php"),
array("-"),
array("100400", "버전정보", "$g4[admin_path]/version.php"),
array("100500", "phpinfo()", "$g4[admin_path]/phpinfo.php"),
array("-"),
array("100600", "업그레이드", "$g4[admin_path]/upgrade.php"),
array("100700", "복구/최적화", "$g4[admin_path]/repair.php"),
array("100800", "세션 삭제", "$g4[admin_path]/session_delete.php"),
array("-"),
array("", "phpMyAdmin", "$g4[path]/$g4[phpmyadmin_dir]")
);
?>

12
adm/admin.menu200.php Normal file
View File

@ -0,0 +1,12 @@
<?
$menu["menu200"] = array (
array("200000", "회원관리", ""),
array("200100", "회원관리", "$g4[admin_path]/member_list.php"),
array("200200", "포인트관리", "$g4[admin_path]/point_list.php"),
array("200300", "회원메일발송", "$g4[admin_path]/mail_list.php"),
array("-"),
array("200800", "접속자현황", "$g4[admin_path]/visit_list.php"),
array("-"),
array("200900", "투표관리", "$g4[admin_path]/poll_list.php")
);
?>

10
adm/admin.menu300.php Normal file
View File

@ -0,0 +1,10 @@
<?
$menu["menu300"] = array (
array("300000", "게시판관리", ""),
array("300100", "게시판관리", "$g4[admin_path]/board_list.php"),
array("300200", "게시판그룹관리", "$g4[admin_path]/boardgroup_list.php"),
array("-"),
array("300300", "인기검색어관리", "$g4[admin_path]/popular_list.php"),
array("300400", "인기검색어순위", "$g4[admin_path]/popular_rank.php"),
);
?>

View File

@ -0,0 +1,26 @@
<?
$menu["menu400"] = array (
array("", "쇼핑몰관리", "$g4[shop_admin_path]/"),
array("400100", "쇼핑몰설정", "$g4[shop_admin_path]/configform.php"),
array("-"),
array("400200", "분류관리", "$g4[shop_admin_path]/categorylist.php"),
array("400300", "상품관리", "$g4[shop_admin_path]/itemlist.php"),
array("400400", "주문관리", "$g4[shop_admin_path]/orderlist.php"),
array("400410", "주문개별관리", "$g4[shop_admin_path]/orderstatuslist.php"),
array("400420", "주문통합관리", "$g4[shop_admin_path]/orderlist2.php"),
array("400500", "배송일괄처리", "$g4[shop_admin_path]/deliverylist.php"),
array("-"),
array("400610", "상품유형관리", "$g4[shop_admin_path]/itemtypelist.php"),
array("400620", "상품재고관리", "$g4[shop_admin_path]/itemstocklist.php"),
array("400630", "이벤트관리", "$g4[shop_admin_path]/itemevent.php"),
array("400640", "이벤트일괄처리", "$g4[shop_admin_path]/itemeventlist.php"),
array("400650", "사용후기", "$g4[shop_admin_path]/itempslist.php"),
array("400660", "상품문의", "$g4[shop_admin_path]/itemqalist.php"),
array("-"),
array("400700", "내용관리", "$g4[shop_admin_path]/contentlist.php"),
array("400710", "FAQ 관리", "$g4[shop_admin_path]/faqmasterlist.php"),
array("400720", "새창관리", "$g4[shop_admin_path]/newwinlist.php"),
array("400730", "배너관리", "$g4[shop_admin_path]/bannerlist.php"),
array("400740", "배송회사관리", "$g4[shop_admin_path]/deliverycodelist.php")
);
?>

View File

@ -0,0 +1,13 @@
<?
$menu["menu500"] = array (
array("", "쇼핑몰현황/기타", ""),
array("500100", "상품판매순위", "$g4[shop_admin_path]/itemsellrank.php"),
array("500110", "매출현황", "$g4[shop_admin_path]/sale1.php"),
array("500120", "주문내역출력", "$g4[shop_admin_path]/orderprint.php"),
array("500130", "전자결제내역", "$g4[shop_admin_path]/ordercardhistory.php"),
array("500140", "보관함현황", "$g4[shop_admin_path]/wishlist.php"),
array("-"),
array("500200", "SMS 문자전송", "$g4[shop_admin_path]/smssend.php"),
array("500210", "가격비교사이트", "$g4[shop_admin_path]/price.php")
);
?>

28
adm/admin.style.css Normal file
View File

@ -0,0 +1,28 @@
a:link, a:visited, a:active { text-decoration:none; color:#CD7444; }
a:hover { text-decoration:underline; color:#C15B27; }
.title { font-size:9pt; font-family:; font-weight:bold; color:#616161; }
.btn1 { background-color:#FBF8EE; }
.col1 { color:#616161; }
.col2 { color:#868686; }
.pad1 { padding:5px 10px 5px 10px; }
.pad2 { padding:5px 0px 5px 0px; }
.bgcol1 { background-color:#FBF8EE; padding:5px; }
.bgcol2 { background-color:#F5F5F5; padding:5px; }
.line1 { background-color:#CCCCCC; height:2px; }
.line2 { background-color:#CCCCCC; height:1px; }
.list0 { background-color:#FFFFFF; }
.list1 { background-color:#F8F8F8; }
.bold { font-weight:bold; }
.center { text-align:center; }
.right { text-align:right; }
.w99 { width:99%; }
.ht { height:30px; }

15
adm/admin.tail.php Normal file
View File

@ -0,0 +1,15 @@
<?
if (!defined("_GNUBOARD_")) exit;
?>
</td>
</tr>
<tr><td colspan=3 height=22 bgcolor=#F2F2F2 align=right><a href='#gnuboard4_admin_head'><img src='<?=$g4['admin_path']?>/img/top.gif' border=0></a>&nbsp;</td></tr>
</table><br><br>
<!-- <p>실행시간 : <?=get_microtime() - $begin_time;?> -->
<script type='text/javascript' src='<?=$g4['admin_path']?>/admin.js'></script>
<?
include_once("$g4[path]/tail.sub.php");
?>

222
adm/auth_list.php Normal file
View File

@ -0,0 +1,222 @@
<?
$sub_menu = "100200";
include_once("./_common.php");
if ($is_admin != "super")
alert("최고관리자만 접근 가능합니다.");
$token = get_token();
$sql_common = " from $g4[auth_table] a left join $g4[member_table] b on (a.mb_id=b.mb_id) ";
$sql_search = " where (1) ";
if ($stx) {
$sql_search .= " and ( ";
switch ($sfl) {
default :
$sql_search .= " ($sfl like '%$stx%') ";
break;
}
$sql_search .= " ) ";
}
if (!$sst) {
$sst = "a.mb_id, au_menu";
$sod = "";
}
$sql_order = " order by $sst $sod ";
$sql = " select count(*) as cnt
$sql_common
$sql_search
$sql_order ";
$row = sql_fetch($sql);
$total_count = $row[cnt];
$rows = $config[cf_page_rows];
$total_page = ceil($total_count / $rows); // 전체 페이지 계산
if ($page == "") $page = 1; // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $rows; // 시작 열을 구함
$sql = " select *
$sql_common
$sql_search
$sql_order
limit $from_record, $rows ";
$result = sql_query($sql);
$listall = "<a href='$_SERVER[PHP_SELF]' class=tt>처음</a>";
$g4[title] = "관리권한설정";
include_once("./admin.head.php");
$colspan = 5;
?>
<script type="text/javascript" src="<?=$g4[path]?>/js/sideview.js"></script>
<script type="text/javascript">
var list_update_php = "";
var list_delete_php = "auth_list_delete.php";
</script>
<table width=100%>
<form name=fsearch method=get>
<tr>
<td width=50% align=left>
<?=$listall?> (건수 : <?=number_format($total_count)?>)
</td>
<td width=50% align=right>
<select name=sfl class=cssfl>
<option value='a.mb_id'>회원아이디</option>
</select>
<input type=text name=stx class=ed required itemname='검색어' value='<?=$stx?>'>
<input type=image src='<?=$g4[admin_path]?>/img/btn_search.gif' align=absmiddle></td>
</tr>
</form>
</table>
<form name=fauthlist method=post>
<input type=hidden name=sst value='<?=$sst?>'>
<input type=hidden name=sod value='<?=$sod?>'>
<input type=hidden name=sfl value='<?=$sfl?>'>
<input type=hidden name=stx value='<?=$stx?>'>
<input type=hidden name=page value='<?=$page?>'>
<input type=hidden name=token value='<?=$token?>'>
<table width=100% cellpadding=0 cellspacing=0>
<colgroup width=30>
<colgroup width=120>
<colgroup width=150>
<colgroup width=''>
<colgroup width=100>
<tr><td colspan='<?=$colspan?>' class='line1'></td></tr>
<tr class='bgcol1 bold col1 ht center'>
<td><input type=checkbox name=chkall value='1' onclick='check_all(this.form)'></td>
<td><?=subject_sort_link('a.mb_id')?>회원아이디</a></td>
<td><?=subject_sort_link('mb_nick')?>별명</a></td>
<td>메뉴</td>
<td>권한</td>
</tr>
<tr><td colspan='<?=$colspan?>' class='line2'></td></tr>
<?
for ($i=0; $row=sql_fetch_array($result); $i++)
{
$mb_nick = get_sideview($row[mb_id], $row[mb_nick], $row[mb_email], $row[mb_homepage]);
// 메뉴번호가 바뀌는 경우에 현재 없는 저장된 메뉴는 삭제함
if (!isset($auth_menu[$row[au_menu]]))
{
sql_query(" delete from $g4[auth_table] where au_menu = '$row[au_menu]' ");
continue;
}
$list = $i%2;
echo "
<input type=hidden name=mb_id[$i] value='$row[mb_id]'>
<input type=hidden name=au_menu[$i] value='$row[au_menu]'>
<tr class='list$list col1 ht center'>
<td><input type=checkbox name=chk[] value='$i'></td>
<td><a href='?sfl=a.mb_id&stx=$row[mb_id]'>$row[mb_id]</a></td>
<td>$mb_nick</td>
<td align=left>&nbsp; [$row[au_menu]] {$auth_menu[$row[au_menu]]}</td>
<td>$row[au_auth]</td>
</tr>";
}
if ($i==0)
echo "<tr><td colspan='$colspan' height=100 align=center bgcolor='#FFFFFF'>자료가 없습니다.</td></tr>";
echo "<tr><td colspan='$colspan' class='line2'></td></tr>";
echo "</table>";
$pagelist = get_paging($config[cf_write_pages], $page, $total_page, "$_SERVER[PHP_SELF]?$qstr&page=");
echo "<table width=100% cellpadding=3 cellspacing=1>";
echo "<tr><td width=50%>";
echo "<input type=button class='btn1' value='선택삭제' onclick=\"btn_check(this.form, 'delete')\">";
echo "</td>";
echo "<td width=50% align=right>$pagelist</td></tr></table>\n";
if ($stx)
echo "<script type='text/javascript'>document.fsearch.sfl.value = '$sfl';</script>\n";
if (strstr($sfl, "mb_id"))
$mb_id = $stx;
else
$mb_id = "";
?>
</form>
<script type='text/javascript'> document.fsearch.stx.focus(); </script>
<?$colspan=5?>
<p>
<form name=fauthlist2 method=post onsubmit="return fauthlist2_submit(this);" autocomplete="off">
<input type=hidden name=sfl value='<?=$sfl?>'>
<input type=hidden name=stx value='<?=$stx?>'>
<input type=hidden name=sst value='<?=$sst?>'>
<input type=hidden name=sod value='<?=$sod?>'>
<input type=hidden name=page value='<?=$page?>'>
<input type=hidden name=token value='<?=$token?>'>
<table width='100%' cellpadding=0 cellspacing=0>
<colgroup width=150>
<colgroup width=''>
<colgroup width=150>
<colgroup width=120>
<colgroup width=100>
<tr><td colspan='<?=$colspan?>' class='line1'></td></tr>
<tr class='bgcol1 bold col1 ht center'>
<td>회원아이디</td>
<td>접근가능메뉴</td>
<td>권한</td>
<td>관리자패스워드</td>
<td>입력</td>
</tr>
<tr><td colspan='<?=$colspan?>' class='line2'></td></tr>
<tr class='ht center'>
<td><input type=text class=ed name=mb_id required itemname='회원아이디' value='<?=$mb_id?>'></td>
<td>
<select name=au_menu required itemname='접근가능메뉴'>
<option value=''>-- 선택하세요
<?
foreach($auth_menu as $key=>$value)
{
if (!(substr($key, -3) == "000" || $key == "-" || !$key))
echo "<option value='$key'>[$key] $value";
}
?>
</select>
</td>
<td>
<table width=210 align=center>
<tr align=center>
<td width=33%><input type=checkbox name='r' value='r' checked></td>
<td width=33%><input type=checkbox name='w' value='w'></td>
<td width=33%><input type=checkbox name='d' value='d'></td>
</tr>
<tr align=center>
<td>r<br>(읽기)</td>
<td>w<br>(입력,수정)</td>
<td>d<br>(삭제)</td>
</tr>
</table></td>
<td><input type=password class=ed name=admin_password required itemname='관리자 패스워드'></td>
<td><input type=submit class=btn1 value=' 확 인 '></td>
</tr>
<tr><td colspan='<?=$colspan?>' class='line2'></td></tr>
</table>
</form>
<script type="text/javascript">
function fauthlist2_submit(f)
{
f.action = "./auth_update.php";
return true;
}
</script>
<?
include_once ("./admin.tail.php");
?>

22
adm/auth_list_delete.php Normal file
View File

@ -0,0 +1,22 @@
<?
$sub_menu = "100200";
include_once("./_common.php");
check_demo();
if ($is_admin != "super")
alert("최고관리자만 접근 가능합니다.");
check_token();
for ($i=0; $i<count($chk); $i++)
{
// 실제 번호를 넘김
$k = $chk[$i];
$sql = " delete from $g4[auth_table] where mb_id = '{$_POST['mb_id'][$k]}' and au_menu = '{$_POST['au_menu'][$k]}' ";
sql_query($sql);
}
goto_url("./auth_list.php?$qstr");
?>

34
adm/auth_update.php Normal file
View File

@ -0,0 +1,34 @@
<?
$sub_menu = "100200";
include_once("./_common.php");
if ($is_admin != "super")
alert("최고관리자만 접근 가능합니다.");
$mb = get_member($mb_id);
if (!$mb[mb_id])
alert("존재하는 회원아이디가 아닙니다.");
check_token();
if ($member[mb_password] != sql_password($_POST['admin_password'])) {
alert("패스워드가 다릅니다.");
}
$sql = " insert into $g4[auth_table]
set mb_id = '$_POST[mb_id]',
au_menu = '$_POST[au_menu]',
au_auth = '$_POST[r],$_POST[$w],$_POST[$d]' ";
$result = sql_query($sql, FALSE);
if (!$result) {
$sql = " update $g4[auth_table]
set au_auth = '$_POST[r],$_POST[$w],_POST[$d]'
where mb_id = '$_POST[mb_id]'
and au_menu = '$_POST[au_menu]' ";
sql_query($sql);
}
//sql_query(" OPTIMIZE TABLE `$g4[auth_table]` ");
goto_url("./auth_list.php?$qstr");
?>

66
adm/board_copy.php Normal file
View File

@ -0,0 +1,66 @@
<?
$sub_menu = "300100";
include_once("./_common.php");
auth_check($auth[$sub_menu], "w");
$token = get_token();
$g4[title] = "게시판 복사";
include_once("$g4[path]/head.sub.php");
?>
<link rel="stylesheet" href="./admin.style.css" type="text/css">
<form name="fboardcopy" method='post' onsubmit="return fboardcopy_check(this);" autocomplete="off">
<input type="hidden" name="bo_table" value="<?=$bo_table?>">
<input type="hidden" name="token" value="<?=$token?>">
<table width=100% cellpadding=0 cellspacing=0>
<colgroup width=30% class='col1 pad1 bold right'>
<colgroup width=70% class='col2 pad2'>
<tr><td colspan=2 height=5></td></tr>
<tr>
<td colspan=2 class=title align=left><img src='<?=$g4[admin_path]?>/img/icon_title.gif'> <?=$g4[title]?></td>
</tr>
<tr><td colspan=2 class='line1'></td></tr>
<tr class='ht'>
<td>원본 테이블</td>
<td><?=$bo_table?></td>
</tr>
<tr class='ht'>
<td>복사할 TABLE</td>
<td><input type=text class=ed name="target_table" size="20" maxlength="20" required alphanumericunderline itemname="TABLE"> 영문자, 숫자, _ 만 가능 (공백없이)</td>
</tr>
<tr class='ht'>
<td>게시판 제목</td>
<td><input type=text class=ed name='target_subject' size=60 maxlength=120 required itemname='게시판 제목' value='[복사본] <?=$board[bo_subject]?>'></td>
</tr>
<tr class='ht'>
<td>복사 유형</td>
<td>
<input type="radio" name="copy_case" value="schema_only" checked>구조만
<input type="radio" name="copy_case" value="schema_data_both">구조와 데이터
</td>
</tr>
<tr height=40>
<td></td>
<td>
<input type="submit" value=" 복 사 " class=btn1>&nbsp;
<input type="button" value="창닫기" onclick="window.close();" class=btn1>
</td>
</tr>
</table>
</form>
<script type='text/javascript'>
function fboardcopy_check(f)
{
f.action = "./board_copy_update.php";
return true;
}
</script>
<?
include_once("$g4[path]/tail.sub.php");
?>

209
adm/board_copy_update.php Normal file
View File

@ -0,0 +1,209 @@
<?
$sub_menu = "300100";
include_once("./_common.php");
auth_check($auth[$sub_menu], "w");
$target_table = mysql_real_escape_string(trim($_POST['target_table']));
$target_subject = mysql_real_escape_string(trim($_POST['target_subject']));
if (!preg_match("/[A-Za-z0-9_]{1,20}/", $target_table))
{
alert("게시판 TABLE명은 공백없이 영문자, 숫자, _ 만 사용 가능합니다. (20자 이내)");
}
$row = sql_fetch(" select count(*) as cnt from $g4[board_table] where bo_table = '$target_table' ");
if ($row[cnt])
alert("{$target_table}은(는) 이미 존재하는 게시판 TABLE 입니다.\\n\\n복사할 TABLE로 사용할 수 없습니다.");
check_token();
// 게시판 테이블 생성
$sql = get_table_define($g4[write_prefix] . $bo_table);
$sql = str_replace($g4[write_prefix] . $bo_table, $g4[write_prefix] . $target_table, $sql);
sql_query($sql);
$file_copy = array();
// 게시판 정보
$sql = " insert into $g4[board_table]
set bo_table = '$target_table',
bo_subject = '$target_subject',
gr_id = '$board[gr_id]',
bo_admin = '$board[bo_admin]',
bo_list_level = '$board[bo_list_level]',
bo_read_level = '$board[bo_read_level]',
bo_write_level = '$board[bo_write_level]',
bo_reply_level = '$board[bo_reply_level]',
bo_comment_level = '$board[bo_comment_level]',
bo_upload_level = '$board[bo_upload_level]',
bo_download_level = '$board[bo_download_level]',
bo_html_level = '$board[bo_html_level]',
bo_link_level = '$board[bo_link_level]',
bo_trackback_level = '$board[bo_trackback_level]',
bo_count_modify = '$board[bo_count_modify]',
bo_count_delete = '$board[bo_count_delete]',
bo_read_point = '$board[bo_read_point]',
bo_write_point = '$board[bo_write_point]',
bo_comment_point = '$board[bo_comment_point]',
bo_download_point = '$board[bo_download_point]',
bo_use_category = '$board[bo_use_category]',
bo_category_list = '$board[bo_category_list]',
bo_disable_tags = '$board[bo_disable_tags]',
bo_use_secret = '$board[bo_use_secret]',
bo_use_dhtml_editor = '$board[bo_use_dhtml_editor]',
bo_use_sideview = '$board[bo_use_sideview]',
bo_use_comment = '$board[bo_use_comment]',
bo_use_good = '$board[bo_use_good]',
bo_use_nogood = '$board[bo_use_nogood]',
bo_use_signature = '$board[bo_use_signature]',
bo_use_ip_view = '$board[bo_use_ip_view]',
bo_use_trackback = '$board[bo_use_trackback]',
bo_use_list_view = '$board[bo_use_list_view]',
bo_use_list_content = '$board[bo_use_list_content]',
bo_table_width = '$board[bo_table_width]',
bo_subject_len = '$board[bo_subject_len]',
bo_page_rows = '$board[bo_page_rows]',
bo_new = '$board[bo_new]',
bo_hot = '$board[bo_hot]',
bo_image_width = '$board[bo_image_width]',
bo_skin = '$board[bo_skin]',
bo_include_head = '$board[bo_include_head]',
bo_include_tail = '$board[bo_include_tail]',
bo_content_head = '".addslashes($board['bo_content_head'])."',
bo_content_tail = '".addslashes($board['bo_content_tail'])."',
bo_insert_content = '".addslashes($board['bo_insert_content'])."',
bo_gallery_cols = '$board[bo_gallery_cols]',
bo_upload_size = '$board[bo_upload_size]',
bo_reply_order = '$board[bo_reply_order]',
bo_use_search = '$board[bo_use_search]',
bo_order_search = '$board[bo_order_search]',
bo_notice = '$board[bo_notice]',
bo_upload_count = '$board[bo_upload_count]',
bo_use_email = '$board[bo_use_email]',
bo_sort_field = '$board[bo_sort_field]',
bo_1_subj = '$board[bo_1_subj]',
bo_2_subj = '$board[bo_2_subj]',
bo_3_subj = '$board[bo_3_subj]',
bo_4_subj = '$board[bo_4_subj]',
bo_5_subj = '$board[bo_5_subj]',
bo_6_subj = '$board[bo_6_subj]',
bo_7_subj = '$board[bo_7_subj]',
bo_8_subj = '$board[bo_8_subj]',
bo_9_subj = '$board[bo_9_subj]',
bo_10_subj = '$board[bo_10_subj]',
bo_1 = '$board[bo_1]',
bo_2 = '$board[bo_2]',
bo_3 = '$board[bo_3]',
bo_4 = '$board[bo_4]',
bo_5 = '$board[bo_5]',
bo_6 = '$board[bo_6]',
bo_7 = '$board[bo_7]',
bo_8 = '$board[bo_8]',
bo_9 = '$board[bo_9]',
bo_10 = '$board[bo_10]' ";
sql_query($sql);
// 게시판 폴더 생성
@mkdir("$g4[path]/data/file/$target_table", 0707);
@chmod("$g4[path]/data/file/$target_table", 0707);
// 디렉토리에 있는 파일의 목록을 보이지 않게 한다.
$board_path = "$g4[path]/data/file/$target_table";
$file = $board_path . "/index.php";
$f = @fopen($file, "w");
@fwrite($f, "");
@fclose($f);
@chmod($file, 0606);
$copy_file = 0;
if ($copy_case == "schema_data_both")
{
$d = dir("$g4[path]/data/file/$bo_table");
while ($entry = $d->read())
{
if ($entry == "." || $entry == "..") continue;
/*
@copy("$g4[path]/data/file/$bo_table/$entry", "$g4[path]/data/file/$target_table/$entry");
@chmod("$g4[path]/data/file/$target_table/$entry", 0707);
$copy_file++;
*/
// 김선용 201007 :
if(is_dir("$g4[path]/data/file/$bo_table/$entry")){
$dd = dir("$g4[path]/data/file/$bo_table/$entry");
@mkdir("$g4[path]/data/file/$target_table/$entry", 0707);
@chmod("$g4[path]/data/file/$target_table/$entry", 0707);
while ($entry2 = $dd->read()) {
if ($entry2 == "." || $entry2 == "..") continue;
@copy("$g4[path]/data/file/$bo_table/$entry/$entry2", "$g4[path]/data/file/$target_table/$entry/$entry2");
@chmod("$g4[path]/data/file/$target_table/$entry/$entry2", 0707);
$copy_file++;
}
$dd->close();
}
else {
@copy("$g4[path]/data/file/$bo_table/$entry", "$g4[path]/data/file/$target_table/$entry");
@chmod("$g4[path]/data/file/$target_table/$entry", 0707);
$copy_file++;
}
}
$d->close();
// 글복사
$sql = " insert into $g4[write_prefix]$target_table select * from $g4[write_prefix]$bo_table ";
sql_query($sql);
// 게시글수 저장
$sql = " select bo_count_write, bo_count_comment from $g4[board_table] where bo_table = '$bo_table' ";
$row = sql_fetch($sql);
$sql = " update $g4[board_table] set bo_count_write = '$row[bo_count_write]', bo_count_comment = '$row[bo_count_comment]' where bo_table = '$target_table' ";
sql_query($sql);
// 05.05.24
// 파일테이블 복사
//$sql = " insert into $g4[board_file_table] select '$target_table', wr_id, bf_no, bf_source, bf_file, bf_download, bf_content from $g4[board_file_table] where bo_table = '$bo_table' ";
//sql_query($sql);
// 4.00.01
// 위의 코드는 같은 테이블명을 사용하였다는 오류가 발생함. (희한하네 ㅡㅡ;)
$sql = " select * from $g4[board_file_table] where bo_table = '$bo_table' ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++)
$file_copy[$i] = $row;
}
if (count($file_copy))
{
for ($i=0; $i<count($file_copy); $i++)
{
$sql = " insert into $g4[board_file_table]
set bo_table = '$target_table',
wr_id = '{$file_copy[$i][wr_id]}',
bf_no = '{$file_copy[$i][bf_no]}',
bf_source = '{$file_copy[$i][bf_source]}',
bf_file = '{$file_copy[$i][bf_file]}',
bf_download = '{$file_copy[$i][bf_download]}',
bf_content = '{$file_copy[$i][bf_content]}',
bf_filesize = '{$file_copy[$i][bf_filesize]}',
bf_width = '{$file_copy[$i][bf_width]}',
bf_height = '{$file_copy[$i][bf_height]}',
bf_type = '{$file_copy[$i][bf_type]}',
bf_datetime = '{$file_copy[$i][bf_datetime]}' ";
sql_query($sql, FALSE);
}
}
echo "<meta http-equiv='content-type' content='text/html; charset={$g4['charset']}'>";
echo "<script type='text/javascript'>";
echo "alert(\"게시판 복사 : {$bo_table} -> {$target_table}";
if ($copy_file)
echo "\\n\\n복사한 파일 : 총 {$copy_file}";
echo "\");";
echo "opener.document.location.reload();";
echo "</script>";
goto_url("./board_copy.php?bo_table=$bo_table&$qstr");
?>

31
adm/board_delete.inc.php Normal file
View File

@ -0,0 +1,31 @@
<?
// board_delete.php , boardgroup_delete.php 에서 include 하는 파일
if (!defined("_GNUBOARD_")) exit;
if (!defined("_BOARD_DELETE_")) exit; // 개별 페이지 접근 불가
// $tmp_bo_table 에는 $bo_table 값을 넘겨주어야 함
if (!$tmp_bo_table) { return; }
// 게시판 1개는 삭제 불가 (게시판 복사를 위해서)
//$row = sql_fetch(" select count(*) as cnt from $g4[board_table] ");
//if ($row[cnt] <= 1) { return; }
// 게시판 설정 삭제
sql_query(" delete from $g4[board_table] where bo_table = '$tmp_bo_table' ");
// 최신글 삭제
sql_query(" delete from $g4[board_new_table] where bo_table = '$tmp_bo_table' ");
// 스크랩 삭제
sql_query(" delete from $g4[scrap_table] where bo_table = '$tmp_bo_table' ");
// 파일 삭제
sql_query(" delete from $g4[board_file_table] where bo_table = '$tmp_bo_table' ");
// 게시판 테이블 DROP
sql_query(" drop table $g4[write_prefix]$tmp_bo_table ", FALSE);
// 게시판 폴더 전체 삭제
rm_rf("$g4[path]/data/file/$tmp_bo_table");
?>

28
adm/board_delete.php Normal file
View File

@ -0,0 +1,28 @@
<?
$sub_menu = "300100";
include_once("./_common.php");
check_demo();
if ($is_admin != "super")
alert("게시판 삭제는 최고관리자만 가능합니다.");
auth_check($auth[$sub_menu], "d");
check_token();
// _BOARD_DELETE_ 상수를 선언해야 board_delete.inc.php 가 정상 작동함
define("_BOARD_DELETE_", TRUE);
// include 전에 $bo_table 값을 반드시 넘겨야 함
$tmp_bo_table = mysql_real_escape_string(trim($_POST['bo_table']));
$sql = " select * from $g4[board_table] where bo_table = '$tmp_bo_table' ";
$row = sql_fetch($sql);
if (!$row) {
alert("게시판을 삭제할 수 없습니다.");
}
include_once ("./board_delete.inc.php");
goto_url("./board_list.php?$qstr&page=$page");
?>

645
adm/board_form.php Normal file
View File

@ -0,0 +1,645 @@
<?
$sub_menu = "300100";
include_once("./_common.php");
include_once ("$g4[path]/lib/cheditor4.lib.php");
auth_check($auth[$sub_menu], "w");
$token = get_token();
function b_draw($pos, $color='red') {
return "border-{$pos}-width:1px; border-{$pos}-color:{$color}; border-{$pos}-style:solid; ";
}
$sql = " select count(*) as cnt from $g4[group_table] ";
$row = sql_fetch($sql);
if (!$row[cnt])
alert("게시판그룹이 한개 이상 생성되어야 합니다.", "./boardgroup_form.php");
$html_title = "게시판";
if ($w == "") {
$html_title .= " 생성";
$bo_table_attr = "required alphanumericunderline";
$board[bo_count_delete] = '1';
$board[bo_count_modify] = '1';
$board[bo_read_point] = $config[cf_read_point];
$board[bo_write_point] = $config[cf_write_point];
$board[bo_comment_point] = $config[cf_comment_point];
$board[bo_download_point] = $config[cf_download_point];
$board[bo_gallery_cols] = '4';
$board[bo_table_width] = '97';
$board[bo_page_rows] = $config[cf_page_rows];
$board[bo_subject_len] = '60';
$board[bo_new] = '24';
$board[bo_hot] = '100';
$board[bo_image_width] = '600';
$board[bo_upload_count] = '2';
$board[bo_upload_size] = '1048576';
$board[bo_reply_order] = '1';
$board[bo_use_search] = '1';
$board[bo_skin] = 'basic';
$board[gr_id] = $gr_id;
$board[bo_disable_tags] = "script|iframe";
$board[bo_use_secret] = 0;
} else if ($w == "u") {
$html_title .= " 수정";
if (!$board[bo_table])
alert("존재하지 않은 게시판 입니다.");
if ($is_admin == "group") {
if ($member[mb_id] != $group[gr_admin])
alert("그룹이 틀립니다.");
}
$bo_table_attr = "readonly style='background-color:#dddddd'";
}
if ($is_admin != "super") {
$group = get_group($board[gr_id]);
$is_admin = is_admin($member[mb_id]);
}
$g4[title] = $html_title;
include_once ("./admin.head.php");
?>
<script src="<?=$g4[cheditor4_path]?>/cheditor.js"></script>
<?=cheditor1('bo_content_head', '100%', '200');?>
<?=cheditor1('bo_content_tail', '100%', '200');?>
<form name=fboardform method=post onsubmit="return fboardform_submit(this)" enctype="multipart/form-data">
<input type=hidden name="w" value="<?=$w?>">
<input type=hidden name="sfl" value="<?=$sfl?>">
<input type=hidden name="stx" value="<?=$stx?>">
<input type=hidden name="sst" value="<?=$sst?>">
<input type=hidden name="sod" value="<?=$sod?>">
<input type=hidden name="page" value="<?=$page?>">
<input type=hidden name="token" value="<?=$token?>">
<table width=100% cellpadding=0 cellspacing=0 border=0>
<colgroup width=5% class='left'>
<colgroup width=20% class='col1 pad1 bold right'>
<colgroup width=75% class='col2 pad2'>
<tr>
<td colspan=3 class=title align=left><img src='<?=$g4[admin_path]?>/img/icon_title.gif'> <?=$html_title?></td>
</tr>
<tr><td colspan=3 class='line1'></td></tr>
<tr class='ht'>
<td></td>
<td>TABLE</td>
<td><input type=text class=ed name=bo_table size=30 maxlength=20 <?=$bo_table_attr?> itemname='TABLE' value='<?=$board[bo_table] ?>'>
<?
if ($w == "")
echo "영문자, 숫자, _ 만 가능 (공백없이 20자 이내)";
else
echo "<a href='$g4[bbs_path]/board.php?bo_table=$board[bo_table]'><img src='$g4[admin_path]/img/icon_view.gif' border=0 align=absmiddle></a>";
?>
</td>
</tr>
<tr class='ht'>
<td></td>
<td>그룹</td>
<td>
<?=get_group_select('gr_id', $board[gr_id], "required itemname='그룹'");?>
<? if ($w=='u') { ?><a href="javascript:location.href='./board_list.php?sfl=a.gr_id&stx='+document.fboardform.gr_id.value;">동일그룹게시판목록</a><?}?></td>
</tr>
<tr class='ht'>
<td></td>
<td>게시판 제목</td>
<td>
<input type=text class=ed name=bo_subject size=60 maxlength=120 required itemname='게시판 제목' value='<?=get_text($board[bo_subject])?>'>
</td>
</tr>
<tr class='ht'>
<td></td>
<td>상단 이미지</td>
<td>
<input type=file name=bo_image_head class=ed size=60>
<?
if ($board[bo_image_head])
echo "<br><a href='$g4[path]/data/file/{$board['bo_table']}/$board[bo_image_head]' target='_blank'>$board[bo_image_head]</a> <input type=checkbox name='bo_image_head_del' value='$board[bo_image_head]'> 삭제";
?>
</td>
</tr>
<tr class='ht'>
<td></td>
<td>하단 이미지</td>
<td>
<input type=file name=bo_image_tail class=ed size=60>
<?
if ($board[bo_image_tail])
echo "<br><a href='$g4[path]/data/file/{$board['bo_table']}/$board[bo_image_tail]' target='_blank'>$board[bo_image_tail]</a> <input type=checkbox name='bo_image_tail_del' value='$board[bo_image_tail]'> 삭제";
?>
</td>
</tr>
<? if ($w == "u") { ?>
<tr class='ht'>
<td></td>
<td>카운트 조정</td>
<td>
<input type=checkbox name=proc_count value=1> 카운트를 조정합니다.
(현재 원글수 : <?=number_format($board[bo_count_write])?> , 현재 코멘트수 : <?=number_format($board[bo_count_comment])?>)
<?=help("게시판 목록에서 글의 번호가 맞지 않을 경우에 체크하십시오.")?>
</td>
</tr>
<? } ?>
<tr><td colspan=3 class='line2'></td></tr>
<tr class='ht'>
<td>
<input type=checkbox name=chk_admin value=1>
<?=help("같은 그룹에 속한 게시판의 설정을 동일하게 변경할 경우에 체크합니다.");?>
</td>
<td>게시판 관리자</td>
<td><input type=text class=ed name=bo_admin maxlength=20 value='<?=$board[bo_admin]?>'></td>
</tr>
<tr><td colspan=3 class='line2'></td></tr>
<tr class='ht'>
<td><input type=checkbox name=chk_list_level value=1></td>
<td>목록보기 권한</td>
<td>
<?=get_member_level_select('bo_list_level', 1, 10, $board[bo_list_level]) ?>
<?=help("권한 1은 비회원, 2 이상 회원입니다.\n권한은 10 이 가장 높습니다.", 50)?>
</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_read_level value=1></td>
<td>글읽기 권한</td>
<td><?=get_member_level_select('bo_read_level', 1, 10, $board[bo_read_level]) ?></td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_write_level value=1></td>
<td>글쓰기 권한</td>
<td><?=get_member_level_select('bo_write_level', 1, 10, $board[bo_write_level]) ?></td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_reply_level value=1></td>
<td>글답변 권한</td>
<td><?=get_member_level_select('bo_reply_level', 1, 10, $board[bo_reply_level]) ?></td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_comment_level value=1></td>
<td>코멘트쓰기 권한</td>
<td><?=get_member_level_select('bo_comment_level', 1, 10, $board[bo_comment_level]) ?></td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_link_level value=1></td>
<td>링크 권한</td>
<td><?=get_member_level_select('bo_link_level', 1, 10, $board[bo_link_level]) ?></td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_upload_level value=1></td>
<td>업로드 권한</td>
<td><?=get_member_level_select('bo_upload_level', 1, 10, $board[bo_upload_level]) ?></td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_download_level value=1></td>
<td>다운로드 권한</td>
<td><?=get_member_level_select('bo_download_level', 1, 10, $board[bo_download_level]) ?></td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_html_level value=1></td>
<td>HTML 쓰기 권한</td>
<td><?=get_member_level_select('bo_html_level', 1, 10, $board[bo_html_level]) ?></td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_trackback_level value=1></td>
<td>트랙백쓰기 권한</td>
<td>
<?=get_member_level_select('bo_trackback_level', 1, 10, $board[bo_trackback_level]) ?>
<?=help("트랙백이란? 쉽게 설명하여 '내가 작성하는 글을 다른사람에게 알리는 기능' 입니다.\n\n자세한 내용은 검색엔진에서 '트랙백'으로 검색을 해보시기 바랍니다.", 50, -70)?>
</td>
</tr>
<tr><td colspan=3 class='line2'></td></tr>
<tr class='ht'>
<td><input type=checkbox name=chk_count_modify value=1></td>
<td>원글 수정 불가</td>
<td>코멘트 <input type=text class=ed name=bo_count_modify size=3 required numeric itemname='원글 수정 불가 코멘트수' value='<?=$board[bo_count_modify]?>'>개 이상 달리면 수정불가</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_count_delete value=1></td>
<td>원글 삭제 불가</td>
<td>코멘트 <input type=text class=ed name=bo_count_delete size=3 required numeric itemname='원글 삭제 불가 코멘트수' value='<?=$board[bo_count_delete]?>'>개 이상 달리면 삭제불가</td>
</tr>
<tr><td colspan=3 class='line2'></td></tr>
<tr class='ht'>
<td></td>
<td>포인트 설정</td>
<td><input type=checkbox name="chk_point" onclick="set_point(this.form)"> 환경설정에 입력된 포인트로 설정</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_read_point value=1></td>
<td>글읽기 포인트</td>
<td><input type=text class=ed name=bo_read_point size=10 required itemname='글읽기 포인트' value='<?=$board[bo_read_point]?>'></td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_write_point value=1></td>
<td>글쓰기 포인트</td>
<td><input type=text class=ed name=bo_write_point size=10 required itemname='글쓰기 포인트' value='<?=$board[bo_write_point]?>'></td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_comment_point value=1></td>
<td>코멘트쓰기 포인트</td>
<td><input type=text class=ed name=bo_comment_point size=10 required itemname='답변, 코멘트쓰기 포인트' value='<?=$board[bo_comment_point]?>'></td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_download_point value=1></td>
<td>다운로드 포인트</td>
<td><input type=text class=ed name=bo_download_point size=10 required itemname='다운로드 포인트' value='<?=$board[bo_download_point]?>'></td>
</tr>
<tr><td colspan=3 class='line2'></td></tr>
<tr class='ht'>
<td><input type=checkbox name=chk_category_list value=1></td>
<td>분류 </td>
<td><input type=text class=ed name=bo_category_list style='width:80%;' value='<?=get_text($board[bo_category_list])?>'>
<input type=checkbox name=bo_use_category value='1' <?=$board[bo_use_category]?'checked':'';?>><b>사용</b>
<?=help("분류와 분류 사이는 | 로 구분하세요. (예: 질문|답변) 첫자로 #은 입력하지 마세요. (예: #질문|#답변 [X])", -120)?>
</td>
</tr>
<tr><td colspan=3 class='line2'></td></tr>
<tr class='ht'>
<td><input type=checkbox name=chk_use_sideview value=1></td>
<td>글쓴이 사이드뷰</td>
<td><input type=checkbox name=bo_use_sideview value='1' <?=$board[bo_use_sideview]?'checked':'';?>>사용 (글쓴이 클릭시 나오는 레이어 메뉴)</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_use_file_content value=1></td>
<td>파일 설명 사용</td>
<td><input type=checkbox name=bo_use_file_content value='1' <?=$board[bo_use_file_content]?'checked':'';?>>사용</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_use_comment value=1></td>
<td>코멘트 새창 사용</td>
<td><input type=checkbox name=bo_use_comment value='1' <?=$board[bo_use_comment]?'checked':'';?>>사용 (코멘트수 클릭시 새창으로 보임)</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_use_secret value=1></td>
<td>비밀글 사용</td>
<td>
<select name=bo_use_secret id='bo_use_secret'>
<option value='0'>사용하지 않음
<option value='1'>체크박스
<option value='2'>무조건
</select>
&nbsp;<?=help("'체크박스'는 글작성시 비밀글 체크가 가능합니다.\n\n'무조건'은 작성되는 모든글을 비밀글로 작성합니다. (관리자는 체크박스로 출력합니다.)\n\n스킨에 따라 적용되지 않을 수 있습니다.")?>
<script type='text/javascript'>document.getElementById('bo_use_secret').value='<?=$board[bo_use_secret]?>';</script>
</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_use_dhtml_editor value=1></td>
<td>DHTML 에디터 사용</td>
<td>
<input type=checkbox name=bo_use_dhtml_editor value='1' <?=$board[bo_use_dhtml_editor]?'checked':'';?>>사용
&nbsp;<?=help("글작성시 내용을 DHTML 에디터 기능으로 사용할 것인지 설정합니다.\n\n스킨에 따라 적용되지 않을 수 있습니다.")?>
</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_use_rss_view value=1></td>
<td>RSS 보이기 사용</td>
<td>
<input type=checkbox name=bo_use_rss_view value='1' <?=$board[bo_use_rss_view]?'checked':'';?>>사용
&nbsp;<?=help("비회원 글읽기가 가능하고 RSS 보이기 사용에 체크가 되어야만 RSS 지원을 합니다.")?>
</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_use_good value=1></td>
<td>추천 사용</td>
<td><input type=checkbox name=bo_use_good value='1' <?=$board[bo_use_good]?'checked':'';?>>사용</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_use_nogood value=1></td>
<td>비추천 사용</td>
<td><input type=checkbox name=bo_use_nogood value='1' <?=$board[bo_use_nogood]?'checked':'';?>>사용</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_use_name value=1></td>
<td>이름(실명) 사용</td>
<td><input type=checkbox name=bo_use_name value='1' <?=$board[bo_use_name]?'checked':'';?>>사용</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_use_signature value=1></td>
<td>서명보이기 사용</td>
<td><input type=checkbox name=bo_use_signature value='1' <?=$board[bo_use_signature]?'checked':'';?>>사용</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_use_ip_view value=1></td>
<td>IP 보이기 사용</td>
<td><input type=checkbox name=bo_use_ip_view value='1' <?=$board[bo_use_ip_view]?'checked':'';?>>사용</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_use_trackback value=1></td>
<td>트랙백 사용</td>
<td><input type=checkbox name=bo_use_trackback value='1' <?=$board[bo_use_trackback]?'checked':'';?>>사용 (트랙백쓰기 권한 보다 우선함)</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_use_list_content value=1></td>
<td>목록에서 내용 사용</td>
<td><input type=checkbox name=bo_use_list_content value='1' <?=$board[bo_use_list_content]?'checked':'';?>>사용 (사용시 속도 느려짐)</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_use_list_view value=1></td>
<td>전체목록보이기 사용</td>
<td><input type=checkbox name=bo_use_list_view value='1' <?=$board[bo_use_list_view]?'checked':'';?>>사용</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_use_email value=1></td>
<td>메일발송 사용</td>
<td><input type=checkbox name=bo_use_email value='1' <?=$board[bo_use_email]?'checked':'';?>>사용</td>
</tr>
<tr><td colspan=3 class='line2'></td></tr>
<tr class='ht'>
<td><input type=checkbox name=chk_skin value=1></td>
<td>스킨 디렉토리</td>
<td><select name=bo_skin required itemname="스킨 디렉토리">
<?
$arr = get_skin_dir("board");
for ($i=0; $i<count($arr); $i++) {
echo "<option value='$arr[$i]'>$arr[$i]</option>\n";
}
?></select>
<script type="text/javascript">document.fboardform.bo_skin.value="<?=$board[bo_skin]?>";</script>
</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_gallery_cols value=1></td>
<td>가로 이미지수</td>
<td><input type=text class=ed name=bo_gallery_cols size=10 required itemname='가로 이미지수' value='<?=$board[bo_gallery_cols]?>'>
<?=help("갤러리 형식의 게시판 목록에서 이미지를 한줄에 몇장씩 보여줄것인지를 설정하는 값")?></td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_table_width value=1></td>
<td>게시판 테이블 폭</td>
<td><input type=text class=ed name=bo_table_width size=10 required itemname='게시판 테이블 폭' value='<?=$board[bo_table_width]?>'> 100 이하는 %</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_page_rows value=1></td>
<td>페이지당 목록 수</td>
<td><input type=text class=ed name=bo_page_rows size=10 required itemname='페이지당 목록 수' value='<?=$board[bo_page_rows]?>'></td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_subject_len value=1></td>
<td>제목 길이</td>
<td><input type=text class=ed name=bo_subject_len size=10 required itemname='제목 길이' value='<?=$board[bo_subject_len]?>'> 목록에서의 제목 글자수. 잘리는 글은 … 로 표시</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_new value=1></td>
<td>new 이미지</td>
<td><input type=text class=ed name=bo_new size=10 required itemname='new 이미지' value='<?=$board[bo_new]?>'> 글 입력후 new 이미지를 출력하는 시간</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_hot value=1></td>
<td>hot 이미지</td>
<td><input type=text class=ed name=bo_hot size=10 required itemname='hot 이미지' value='<?=$board[bo_hot]?>'> 조회수가 설정값 이상이면 hot 이미지 출력</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_image_width value=1></td>
<td>이미지 폭 크기</td>
<td><input type=text class=ed name=bo_image_width size=10 required itemname='이미지 폭 크기' value='<?=$board[bo_image_width]?>'> 픽셀 (게시판에서 출력되는 이미지의 폭 크기)</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_reply_order value=1></td>
<td>답변 달기</td>
<td>
<select name=bo_reply_order>
<option value='1'>나중에 쓴 답변 아래로 달기 (기본)
<option value='0'>나중에 쓴 답변 위로 달기
</select>
<script type='text/javascript'> document.fboardform.bo_reply_order.value = '<?=$board[bo_reply_order]?>'; </script>
</td>
</tr>
<?/*?>
<tr class='ht'>
<td><input type=checkbox name=chk_disable_tags value=1></td>
<td>사용금지 태그</td>
<td><input type=text class=ed name=bo_disable_tags style='width:80%;' value='<?=get_text($board[bo_disable_tags])?>'>
<?=help("태그와 태그 사이는 | 로 구분하세요. (예: <b>script</b>|<b>iframe</b>)\n\nHTML 사용시 금지할 태그를 입력하는곳 입니다.", -50)?></td>
</tr>
<?*/?>
<tr class='ht'>
<td><input type=checkbox name=chk_sort_field value=1></td>
<td>리스트 정렬 필드</td>
<td>
<select name=bo_sort_field>
<option value=''>wr_num, wr_reply : 기본
<option value='wr_datetime asc'>wr_datetime asc : 날짜 이전것 부터
<option value='wr_datetime desc'>wr_datetime desc : 날짜 최근것 부터
<option value='wr_hit asc, wr_num, wr_reply'>wr_hit asc : 조회수 낮은것 부터
<option value='wr_hit desc, wr_num, wr_reply'>wr_hit desc : 조회수 높은것 부터
<option value='wr_last asc'>wr_last asc : 최근글 이전것 부터
<option value='wr_last desc'>wr_last desc : 최근글 최근것 부터
<option value='wr_comment asc, wr_num, wr_reply'>wr_comment asc : 코멘트수 낮은것 부터
<option value='wr_comment desc, wr_num, wr_reply'>wr_comment desc : 코멘트수 높은것 부터
<option value='wr_good asc, wr_num, wr_reply'>wr_good asc : 추천수 낮은것 부터
<option value='wr_good desc, wr_num, wr_reply'>wr_good desc : 추천수 높은것 부터
<option value='wr_nogood asc, wr_num, wr_reply'>wr_nogood asc : 비추천수 낮은것 부터
<option value='wr_nogood desc, wr_num, wr_reply'>wr_nogood desc : 비추천수 높은것 부터
<option value='wr_subject asc, wr_num, wr_reply'>wr_subject asc : 제목 내림차순
<option value='wr_subject desc, wr_num, wr_reply'>wr_subject desc : 제목 오름차순
<option value='wr_name asc, wr_num, wr_reply'>wr_name asc : 글쓴이 내림차순
<option value='wr_name desc, wr_num, wr_reply'>wr_name desc : 글쓴이 오름차순
<option value='ca_name asc, wr_num, wr_reply'>ca_name asc : 분류명 내림차순
<option value='ca_name desc, wr_num, wr_reply'>ca_name desc : 분류명 오름차순
</select>
<script type='text/javascript'> document.fboardform.bo_sort_field.value = '<?=$board[bo_sort_field]?>'; </script>
<?=help("리스트에서 기본으로 정렬에 사용할 필드를 선택합니다.\n\n'기본'으로 사용하지 않으시는 경우 속도가 느려질 수 있습니다.", -50)?>
</td>
</tr>
<tr><td colspan=3 class='line2'></td></tr>
<tr class='ht'>
<td><input type=checkbox name=chk_write_min value=1></td>
<td>최소 글수 제한</td>
<td><input type=text class=ed name=bo_write_min size=5 numeric value='<?=$board[bo_write_min]?>'>
(글 입력시 최소 글자수를 설정. 0을 입력하면 검사하지 않음)</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_write_max value=1></td>
<td>최대 글수 제한</td>
<td><input type=text class=ed name=bo_write_max size=5 numeric value='<?=$board[bo_write_max]?>'>
(글 입력시 최대 글자수를 설정. 0을 입력하면 검사하지 않음)</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_comment_min value=1></td>
<td>최소 코멘트수 제한</td>
<td><input type=text class=ed name=bo_comment_min size=5 numeric value='<?=$board[bo_comment_min]?>'>
(코멘트 입력시 최소 글자수, 최대 글자수를 설정. 0을 입력하면 검사하지 않음)</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_comment_max value=1></td>
<td>최대 코멘트수 제한</td>
<td><input type=text class=ed name=bo_comment_max size=5 numeric value='<?=$board[bo_comment_max]?>'>
(코멘트 입력시 최소 글자수, 최대 글자수를 설정. 0을 입력하면 검사하지 않음)</td>
</tr>
<tr><td colspan=3 class='line2'></td></tr>
<tr class='ht'>
<td><input type=checkbox name=chk_upload_count value=1></td>
<td>파일 업로드 갯수</td>
<td><input type=text class=ed name=bo_upload_count size=10 required itemname='파일 업로드 갯수' value='<?=$board[bo_upload_count]?>'> 게시물 한건당 업로드 할 수 있는 파일의 최대 개수 (0 이면 제한 없음)</td>
</tr>
<?
$upload_max_filesize = ini_get("upload_max_filesize");
if (!preg_match("/([m|M])$/", $upload_max_filesize)) {
$upload_max_filesize = (int)($upload_max_filesize / 1048576);
}
?>
<tr class='ht'>
<td><input type=checkbox name=chk_upload_size value=1></td>
<td>파일 업로드 용량</td>
<td>업로드 파일 한개당 <input type=text class=ed name=bo_upload_size size=10 required itemname='파일 업로드 용량' value='<?=$board[bo_upload_size]?>'> bytes 이하 (최대 <?=ini_get("upload_max_filesize")?> 이하) <?=help("1 MB = 1,024,768 bytes")?></td>
</tr>
<tr><td colspan=3 class='line2'></td></tr>
<tr class='ht'>
<td><input type=checkbox name=chk_include_head value=1></td>
<td>상단 파일 경로</td>
<td><input type=text class=ed name=bo_include_head style='width:80%;' value='<?=$board[bo_include_head]?>'></td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_include_tail value=1></td>
<td>하단 파일 경로</td>
<td><input type=text class=ed name=bo_include_tail style='width:80%;' value='<?=$board[bo_include_tail]?>'></td>
</tr>
<tr><td colspan=3 class='line2'></td></tr>
<tr class='ht'>
<td><input type=checkbox name=chk_content_head value=1></td>
<td>상단 내용</td>
<!-- <td><textarea class=ed name=bo_content_head rows=5 style='width:80%;'><?=$board[bo_content_head] ?></textarea></td> -->
<td style='padding-top:7px; padding-bottom:7px;'><?=cheditor2('bo_content_head', $board[bo_content_head]);?></td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_content_tail value=1></td>
<td>하단 내용</td>
<!-- <td><textarea class=ed name=bo_content_tail rows=5 style='width:80%;'><?=$board[bo_content_tail] ?></textarea></td> -->
<td style='padding-top:7px; padding-bottom:7px;'><?=cheditor2('bo_content_tail', $board[bo_content_tail]);?></td>
</tr>
<tr><td colspan=3 class='line2'></td></tr>
<tr class='ht'>
<td><input type=checkbox name=chk_insert_content value=1></td>
<td>글쓰기 기본 내용</td>
<td><textarea class=ed name=bo_insert_content rows=5 style='width:80%;'><?=$board[bo_insert_content] ?></textarea></td>
</tr>
<tr><td colspan=3 class='line2'></td></tr>
<tr class='ht'>
<td><input type=checkbox name=chk_use_search value=1></td>
<td>전체 검색 사용</td>
<td><input type=checkbox name=bo_use_search value='1' <?=$board[bo_use_search]?'checked':'';?>>사용</td>
</tr>
<tr class='ht'>
<td><input type=checkbox name=chk_order_search value=1></td>
<td>전체 검색 순서</td>
<td><input type=text class=ed name=bo_order_search size=5 value='<?=$board[bo_order_search]?>'> 숫자가 낮은 게시판 부터 검색</td>
</tr>
<tr><td colspan=3 class='line2'></td></tr>
<? for ($i=1; $i<=10; $i++) { ?>
<tr class='ht'>
<td><input type=checkbox name=chk_<?=$i?> value=1></td>
<td><input type=text class=ed name='bo_<?=$i?>_subj' value='<?=get_text($board["bo_{$i}_subj"])?>' title='여분필드 <?=$i?> 제목' style='text-align:right;font-weight:bold;'></td>
<td><input type=text class=ed style='width:80%;' name='bo_<?=$i?>' value='<?=get_text($board["bo_$i"])?>' title='여분필드 <?=$i?> 설정값'></td>
</tr>
<? } ?>
<tr><td colspan=3 class='line2'></td></tr>
<tr class='ht'>
<td colspan=3 align=left>
<?=subtitle("XSS / CSRF 방지")?>
</td>
</tr>
<tr><td colspan=3 class='line1'></td></tr>
<tr class='ht'>
<td colspan='2'>
관리자 패스워드
</td>
<td>
<input class='ed' type='password' name='admin_password' itemname="관리자 패스워드" required>
<?=help("관리자 권한을 빼앗길 것에 대비하여 로그인한 관리자의 패스워드를 한번 더 묻는것 입니다.");?>
</td>
</tr>
<tr><td colspan=3 class='line1'></td></tr>
</table>
<p align=center>
<input type=submit class=btn1 accesskey='s' value=' 확 인 '>&nbsp;
<input type=button class=btn1 value=' 목 록 ' onclick="document.location.href='./board_list.php?<?=$qstr?>';">&nbsp;
<? if ($w == 'u') { ?><input type=button class=btn1 value=' 복 사 ' onclick="board_copy('<?=$bo_table?>');"><?}?>
</form>
<script type="text/javascript">
function board_copy(bo_table) {
window.open("./board_copy.php?bo_table="+bo_table, "BoardCopy", "left=10,top=10,width=500,height=200");
}
function set_point(f) {
if (f.chk_point.checked) {
f.bo_read_point.value = "<?=$config[cf_read_point]?>";
f.bo_write_point.value = "<?=$config[cf_write_point]?>";
f.bo_comment_point.value = "<?=$config[cf_comment_point]?>";
f.bo_download_point.value = "<?=$config[cf_download_point]?>";
} else {
f.bo_read_point.value = f.bo_read_point.defaultValue;
f.bo_write_point.value = f.bo_write_point.defaultValue;
f.bo_comment_point.value = f.bo_comment_point.defaultValue;
f.bo_download_point.value = f.bo_download_point.defaultValue;
}
}
function fboardform_submit(f) {
var tmp_title;
var tmp_image;
tmp_title = "상단";
tmp_image = f.bo_image_head;
if (tmp_image.value) {
if (!tmp_image.value.toLowerCase().match(/.(gif|jpg|png)$/i)) {
alert(tmp_title + "이미지가 gif, jpg, png 파일이 아닙니다.");
return false;
}
}
tmp_title = "하단";
tmp_image = f.bo_image_tail;
if (tmp_image.value) {
if (!tmp_image.value.toLowerCase().match(/.(gif|jpg|png)$/i)) {
alert(tmp_title + "이미지가 gif, jpg, png 파일이 아닙니다.");
return false;
}
}
if (parseInt(f.bo_count_modify.value) < 1) {
alert("원글 수정 불가 코멘트수는 1 이상 입력하셔야 합니다.");
f.bo_count_modify.focus();
return false;
}
if (parseInt(f.bo_count_delete.value) < 1) {
alert("원글 삭제 불가 코멘트수는 1 이상 입력하셔야 합니다.");
f.bo_count_delete.focus();
return false;
}
<?=cheditor3('bo_content_head')."\n";?>
<?=cheditor3('bo_content_tail')."\n";?>
f.action = "./board_form_update.php";
return true;
}
</script>
<?
include_once ("./admin.tail.php");
?>

331
adm/board_form_update.php Normal file
View File

@ -0,0 +1,331 @@
<?
$sub_menu = "300100";
include_once("./_common.php");
if ($w == 'u')
check_demo();
auth_check($auth[$sub_menu], "w");
if ($member[mb_password] != sql_password($_POST['admin_password'])) {
alert("패스워드가 다릅니다.");
}
if (!$_POST[gr_id]) { alert("그룹 ID는 반드시 선택하세요."); }
if (!$bo_table) { alert("게시판 TABLE명은 반드시 입력하세요."); }
if (!preg_match("/^([A-Za-z0-9_]{1,20})$/", $bo_table)) { alert("게시판 TABLE명은 공백없이 영문자, 숫자, _ 만 사용 가능합니다. (20자 이내)"); }
if (!$_POST[bo_subject]) { alert("게시판 제목을 입력하세요."); }
if ($img = $_FILES[bo_image_head][name]) {
if (!preg_match("/\.(gif|jpg|png)$/i", $img)) {
alert("상단 이미지가 gif, jpg, png 파일이 아닙니다.");
}
}
if ($img = $_FILES[bo_image_tail][name]) {
if (!preg_match("/\.(gif|jpg|png)$/i", $img)) {
alert("하단 이미지가 gif, jpg, png 파일이 아닙니다.");
}
}
if ($file = $_POST[bo_include_head]) {
if (!preg_match("/\.(php|htm[l]?)$/i", $file)) {
alert("상단 파일 경로가 php, html 파일이 아닙니다.");
}
}
if ($file = $_POST[bo_include_tail]) {
if (!preg_match("/\.(php|htm[l]?)$/i", $file)) {
alert("하단 파일 경로가 php, html 파일이 아닙니다.");
}
}
check_token();
$board_path = "$g4[path]/data/file/$bo_table";
// 게시판 디렉토리 생성
@mkdir($board_path, 0707);
@chmod($board_path, 0707);
// 디렉토리에 있는 파일의 목록을 보이지 않게 한다.
$file = $board_path . "/index.php";
$f = @fopen($file, "w");
@fwrite($f, "");
@fclose($f);
@chmod($file, 0606);
// 분류에 & 나 = 는 사용이 불가하므로 2바이트로 바꾼다.
$src_char = array('&', '=');
$dst_char = array('', '〓');
$bo_category_list = str_replace($src_char, $dst_char, $bo_category_list);
$sql_common = " gr_id = '$_POST[gr_id]',
bo_subject = '$_POST[bo_subject]',
bo_admin = '$_POST[bo_admin]',
bo_list_level = '$_POST[bo_list_level]',
bo_read_level = '$_POST[bo_read_level]',
bo_write_level = '$_POST[bo_write_level]',
bo_reply_level = '$_POST[bo_reply_level]',
bo_comment_level = '$_POST[bo_comment_level]',
bo_html_level = '$_POST[bo_html_level]',
bo_link_level = '$_POST[bo_link_level]',
bo_trackback_level = '$_POST[bo_trackback_level]',
bo_count_modify = '$_POST[bo_count_modify]',
bo_count_delete = '$_POST[bo_count_delete]',
bo_upload_level = '$_POST[bo_upload_level]',
bo_download_level = '$_POST[bo_download_level]',
bo_read_point = '$_POST[bo_read_point]',
bo_write_point = '$_POST[bo_write_point]',
bo_comment_point = '$_POST[bo_comment_point]',
bo_download_point = '$_POST[bo_download_point]',
bo_use_category = '$_POST[bo_use_category]',
bo_category_list = '$_POST[bo_category_list]',
bo_disable_tags = '$_POST[bo_disable_tags]',
bo_use_sideview = '$_POST[bo_use_sideview]',
bo_use_file_content = '$_POST[bo_use_file_content]',
bo_use_secret = '$_POST[bo_use_secret]',
bo_use_dhtml_editor = '$_POST[bo_use_dhtml_editor]',
bo_use_rss_view = '$_POST[bo_use_rss_view]',
bo_use_comment = '$_POST[bo_use_comment]',
bo_use_good = '$_POST[bo_use_good]',
bo_use_nogood = '$_POST[bo_use_nogood]',
bo_use_name = '$_POST[bo_use_name]',
bo_use_signature = '$_POST[bo_use_signature]',
bo_use_ip_view = '$_POST[bo_use_ip_view]',
bo_use_trackback = '$_POST[bo_use_trackback]',
bo_use_list_view = '$_POST[bo_use_list_view]',
bo_use_list_content = '$_POST[bo_use_list_content]',
bo_use_email = '$_POST[bo_use_email]',
bo_table_width = '$_POST[bo_table_width]',
bo_subject_len = '$_POST[bo_subject_len]',
bo_page_rows = '$_POST[bo_page_rows]',
bo_new = '$_POST[bo_new]',
bo_hot = '$_POST[bo_hot]',
bo_image_width = '$_POST[bo_image_width]',
bo_skin = '$_POST[bo_skin]',
bo_include_head = '$_POST[bo_include_head]',
bo_include_tail = '$_POST[bo_include_tail]',
bo_content_head = '$_POST[bo_content_head]',
bo_content_tail = '$_POST[bo_content_tail]',
bo_insert_content = '$_POST[bo_insert_content]',
bo_gallery_cols = '$_POST[bo_gallery_cols]',
bo_upload_count = '$_POST[bo_upload_count]',
bo_upload_size = '$_POST[bo_upload_size]',
bo_reply_order = '$_POST[bo_reply_order]',
bo_use_search = '$_POST[bo_use_search]',
bo_order_search = '$_POST[bo_order_search]',
bo_write_min = '$_POST[bo_write_min]',
bo_write_max = '$_POST[bo_write_max]',
bo_comment_min = '$_POST[bo_comment_min]',
bo_comment_max = '$_POST[bo_comment_max]',
bo_sort_field = '$_POST[bo_sort_field]',
bo_1_subj = '$_POST[bo_1_subj]',
bo_2_subj = '$_POST[bo_2_subj]',
bo_3_subj = '$_POST[bo_3_subj]',
bo_4_subj = '$_POST[bo_4_subj]',
bo_5_subj = '$_POST[bo_5_subj]',
bo_6_subj = '$_POST[bo_6_subj]',
bo_7_subj = '$_POST[bo_7_subj]',
bo_8_subj = '$_POST[bo_8_subj]',
bo_9_subj = '$_POST[bo_9_subj]',
bo_10_subj = '$_POST[bo_10_subj]',
bo_1 = '$_POST[bo_1]',
bo_2 = '$_POST[bo_2]',
bo_3 = '$_POST[bo_3]',
bo_4 = '$_POST[bo_4]',
bo_5 = '$_POST[bo_5]',
bo_6 = '$_POST[bo_6]',
bo_7 = '$_POST[bo_7]',
bo_8 = '$_POST[bo_8]',
bo_9 = '$_POST[bo_9]',
bo_10 = '$_POST[bo_10]' ";
if ($bo_image_head_del) {
@unlink("$board_path/$bo_image_head_del");
$sql_common .= " , bo_image_head = '' ";
}
if ($bo_image_tail_del) {
@unlink("$board_path/$bo_image_tail_del");
$sql_common .= " , bo_image_tail = '' ";
}
if ($_FILES[bo_image_head][name]) {
//$bo_image_head_urlencode = urlencode($_FILES[bo_image_head][name]);
$bo_image_head_urlencode = $bo_table."_head_".time();
$sql_common .= " , bo_image_head = '$bo_image_head_urlencode' ";
}
if ($_FILES[bo_image_tail][name]) {
//$bo_image_tail_urlencode = urlencode($_FILES[bo_image_tail][name]);
$bo_image_tail_urlencode = $bo_table."_tail_".time();
$sql_common .= " , bo_image_tail = '$bo_image_tail_urlencode' ";
}
if ($w == "") {
$row = sql_fetch(" select count(*) as cnt from $g4[board_table] where bo_table = '$bo_table' ");
if ($row[cnt])
alert("{$bo_table} 은(는) 이미 존재하는 TABLE 입니다.");
$sql = " insert into $g4[board_table]
set bo_table = '$bo_table',
bo_count_write = '0',
bo_count_comment = '0',
$sql_common ";
sql_query($sql);
// 게시판 테이블 생성
$file = file("./sql_write.sql");
$sql = implode($file, "\n");
$create_table = $g4[write_prefix] . $bo_table;
// sql_board.sql 파일의 테이블명을 변환
$source = array("/__TABLE_NAME__/", "/;/");
$target = array($create_table, "");
$sql = preg_replace($source, $target, $sql);
sql_query($sql, FALSE);
} else if ($w == "u") {
// 게시판의 글 수
$sql = " select count(*) as cnt from $g4[write_prefix]$bo_table where wr_is_comment = 0 ";
$row = sql_fetch($sql);
$bo_count_write = $row[cnt];
// 게시판의 코멘트 수
$sql = " select count(*) as cnt from $g4[write_prefix]$bo_table where wr_is_comment = 1 ";
$row = sql_fetch($sql);
$bo_count_comment = $row[cnt];
// 글수 조정
if ($proc_count) {
// 원글을 얻습니다.
$sql = " select wr_id from $g4[write_prefix]$bo_table where wr_is_comment = 0 ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++) {
// 코멘트수를 얻습니다.
$sql2 = " select count(*) as cnt from $g4[write_prefix]$bo_table where wr_parent = '$row[wr_id]' and wr_is_comment = 1 ";
$row2 = sql_fetch($sql2);
sql_query(" update $g4[write_prefix]$bo_table set wr_comment = '$row2[cnt]' where wr_id = '$row[wr_id]' ");
}
}
// 공지사항에는 등록되어 있지만 실제 존재하지 않는 글 아이디는 삭제합니다.
$bo_notice = "";
$lf = "";
if ($board[bo_notice]) {
$tmp_array = explode("\n", $board[bo_notice]);
for ($i=0; $i<count($tmp_array); $i++) {
$tmp_wr_id = trim($tmp_array[$i]);
$row = sql_fetch(" select count(*) as cnt from $g4[write_prefix]$bo_table where wr_id = '$tmp_wr_id' ");
if ($row[cnt])
{
$bo_notice .= $lf . $tmp_wr_id;
$lf = "\n";
}
}
}
$sql = " update $g4[board_table]
set bo_notice = '$bo_notice',
bo_count_write = '$bo_count_write',
bo_count_comment = '$bo_count_comment',
$sql_common
where bo_table = '$bo_table' ";
sql_query($sql);
}
// 같은 그룹내 게시판 동일 옵션 적용
$s = "";
if ($chk_admin) $s .= " , bo_admin = '$bo_admin' ";
if ($chk_list_level) $s .= " , bo_list_level = '$bo_list_level' ";
if ($chk_read_level) $s .= " , bo_read_level = '$bo_read_level' ";
if ($chk_write_level) $s .= " , bo_write_level = '$bo_write_level' ";
if ($chk_reply_level) $s .= " , bo_reply_level = '$bo_reply_level' ";
if ($chk_comment_level) $s .= " , bo_comment_level = '$bo_comment_level' ";
if ($chk_link_level) $s .= " , bo_link_level = '$bo_link_level' ";
if ($chk_upload_level) $s .= " , bo_upload_level = '$bo_upload_level' ";
if ($chk_download_level) $s .= " , bo_download_level = '$bo_download_level' ";
if ($chk_html_level) $s .= " , bo_html_level = '$bo_html_level' ";
if ($chk_trackback_level) $s .= " , bo_trackback_level = '$bo_trackback_level' ";
if ($chk_count_modify) $s .= " , bo_count_modify = '$bo_count_modify' ";
if ($chk_count_delete) $s .= " , bo_count_delete = '$bo_count_delete' ";
if ($chk_read_point) $s .= " , bo_read_point = '$bo_read_point' ";
if ($chk_write_point) $s .= " , bo_write_point = '$bo_write_point' ";
if ($chk_comment_point) $s .= " , bo_comment_point = '$bo_comment_point' ";
if ($chk_download_point) $s .= " , bo_download_point = '$bo_download_point' ";
if ($chk_category_list) {
$s .= " , bo_category_list = '$bo_category_list' ";
$s .= " , bo_use_category = '$bo_use_category' ";
}
if ($chk_use_sideview) $s .= " , bo_use_sideview = '$bo_use_sideview' ";
if ($chk_use_file_content) $s .= " , bo_use_file_content = '$bo_use_file_content' ";
if ($chk_use_comment) $s .= " , bo_use_comment = '$bo_use_comment' ";
if ($chk_use_secret) $s .= " , bo_use_secret = '$bo_use_secret' ";
if ($chk_use_dhtml_editor) $s .= " , bo_use_dhtml_editor = '$bo_use_dhtml_editor' ";
if ($chk_use_rss_view) $s .= " , bo_use_rss_view = '$bo_use_rss_view' ";
if ($chk_use_good) $s .= " , bo_use_good = '$bo_use_good' ";
if ($chk_use_nogood) $s .= " , bo_use_nogood = '$bo_use_nogood' ";
if ($chk_use_name) $s .= " , bo_use_name = '$bo_use_name' ";
if ($chk_use_signature) $s .= " , bo_use_signature = '$bo_use_signature' ";
if ($chk_use_ip_view) $s .= " , bo_use_ip_view = '$bo_use_ip_view' ";
if ($chk_use_trackback) $s .= " , bo_use_trackback = '$bo_use_trackback' ";
if ($chk_use_list_view) $s .= " , bo_use_list_view = '$bo_use_list_view' ";
if ($chk_use_list_content) $s .= " , bo_use_list_content = '$bo_use_list_content' ";
if ($chk_use_email) $s .= " , bo_use_email = '$bo_use_email' ";
if ($chk_skin) $s .= " , bo_skin = '$bo_skin' ";
if ($chk_gallery_cols) $s .= " , bo_gallery_cols = '$bo_gallery_cols' ";
if ($chk_table_width) $s .= " , bo_table_width = '$bo_table_width' ";
if ($chk_page_rows) $s .= " , bo_page_rows = '$bo_page_rows' ";
if ($chk_subject_len) $s .= " , bo_subject_len = '$bo_subject_len' ";
if ($chk_new) $s .= " , bo_new = '$bo_new' ";
if ($chk_hot) $s .= " , bo_hot = '$bo_hot' ";
if ($chk_image_width) $s .= " , bo_image_width = '$bo_image_width' ";
if ($chk_reply_order) $s .= " , bo_reply_order = '$bo_reply_order' ";
if ($chk_disable_tags) $s .= " , bo_disable_tags = '$bo_disable_tags' ";
if ($chk_sort_field) $s .= " , bo_sort_field = '$bo_sort_field' ";
if ($chk_write_min) $s .= " , bo_write_min = '$bo_write_min' ";
if ($chk_write_max) $s .= " , bo_write_max = '$bo_write_max' ";
if ($chk_comment_min) $s .= " , bo_comment_min = '$bo_comment_min' ";
if ($chk_comment_max) $s .= " , bo_comment_max = '$bo_comment_max' ";
if ($chk_upload_count) $s .= " , bo_upload_count = '$bo_upload_count' ";
if ($chk_upload_size) $s .= " , bo_upload_size = '$bo_upload_size' ";
if ($chk_include_head) $s .= " , bo_include_head = '$bo_include_head' ";
if ($chk_include_tail) $s .= " , bo_include_tail = '$bo_include_tail' ";
if ($chk_content_head) $s .= " , bo_content_head = '$bo_content_head' ";
if ($chk_content_tail) $s .= " , bo_content_tail = '$bo_content_tail' ";
if ($chk_insert_content) $s .= " , bo_insert_content = '$bo_insert_content' ";
if ($chk_use_search) $s .= " , bo_use_search = '$bo_use_search' ";
if ($chk_order_search) $s .= " , bo_order_search = '$bo_order_search' ";
for ($i=1; $i<=10; $i++) {
if ($_POST["chk_{$i}"]) {
$s .= " , bo_{$i}_subj = '".$_POST["bo_{$i}_subj"]."' ";
$s .= " , bo_{$i} = '".$_POST["bo_{$i}"]."' ";
}
}
if ($s) {
$sql = " update $g4[board_table]
set bo_table = bo_table
{$s}
where gr_id = '$gr_id' ";
sql_query($sql);
}
if ($_FILES[bo_image_head][name]) {
$bo_image_head_path = "$board_path/$bo_image_head_urlencode";
move_uploaded_file($_FILES[bo_image_head][tmp_name], $bo_image_head_path);
chmod($bo_image_head_path, 0606);
}
if ($_FILES[bo_image_tail][name]) {
$bo_image_tail_path = "$board_path/$bo_image_tail_urlencode";
move_uploaded_file($_FILES[bo_image_tail][tmp_name], $bo_image_tail_path);
chmod($bo_image_tail_path, 0606);
}
goto_url("./board_form.php?w=u&bo_table=$bo_table&$qstr");
?>

248
adm/board_list.php Normal file
View File

@ -0,0 +1,248 @@
<?
$sub_menu = "300100";
include_once("./_common.php");
auth_check($auth[$sub_menu], "r");
$token = get_token();
// DHTML 에디터 사용 필드 추가 : 061021
sql_query(" ALTER TABLE `$g4[board_table]` ADD `bo_use_dhtml_editor` TINYINT NOT NULL AFTER `bo_use_secret` ", false);
// RSS 보이기 사용 필드 추가 : 061106
sql_query(" ALTER TABLE `$g4[board_table]` ADD `bo_use_rss_view` TINYINT NOT NULL AFTER `bo_use_dhtml_editor` ", false);
$sql_common = " from $g4[board_table] a ";
$sql_search = " where (1) ";
if ($is_admin != "super") {
$sql_common .= " , $g4[group_table] b ";
$sql_search .= " and (a.gr_id = b.gr_id and b.gr_admin = '$member[mb_id]') ";
}
if ($stx) {
$sql_search .= " and ( ";
switch ($sfl) {
case "bo_table" :
$sql_search .= " ($sfl like '$stx%') ";
break;
case "a.gr_id" :
$sql_search .= " ($sfl = '$stx') ";
break;
default :
$sql_search .= " ($sfl like '%$stx%') ";
break;
}
$sql_search .= " ) ";
}
if (!$sst) {
$sst = "a.gr_id, a.bo_table";
$sod = "asc";
}
$sql_order = " order by $sst $sod ";
$sql = " select count(*) as cnt
$sql_common
$sql_search
$sql_order ";
$row = sql_fetch($sql);
$total_count = $row[cnt];
$rows = $config[cf_page_rows];
$total_page = ceil($total_count / $rows); // 전체 페이지 계산
if ($page == "") { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $rows; // 시작 열을 구함
$sql = " select *
$sql_common
$sql_search
$sql_order
limit $from_record, $rows ";
$result = sql_query($sql);
$listall = "<a href='$_SERVER[PHP_SELF]'>처음</a>";
$g4[title] = "게시판관리";
include_once("./admin.head.php");
$colspan = 13;
?>
<script type="text/javascript">
var list_update_php = 'board_list_update.php';
var list_delete_php = 'board_list_delete.php';
</script>
<table width=100% cellpadding=3 cellspacing=1>
<form name=fsearch method=get>
<tr>
<td width=50% align=left><?=$listall?> (게시판수 : <?=number_format($total_count)?>개)</td>
<td width=50% align=right>
<select name=sfl>
<option value='bo_table'>TABLE</option>
<option value='bo_subject'>제목</option>
<option value='a.gr_id'>그룹ID</option>
</select>
<input type=text name=stx class=ed required itemname='검색어' value='<?=$stx?>'>
<input type=image src='<?=$g4[admin_path]?>/img/btn_search.gif' align=absmiddle></td>
</tr>
</form>
</table>
<form name=fboardlist method=post>
<input type=hidden name=sst value="<?=$sst?>">
<input type=hidden name=sod value="<?=$sod?>">
<input type=hidden name=sfl value="<?=$sfl?>">
<input type=hidden name=stx value="<?=$stx?>">
<input type=hidden name=page value="<?=$page?>">
<input type=hidden name=token value="<?=$token?>">
<table width=100% cellpadding=0 cellspacing=1>
<colgroup width=30>
<colgroup width=>
<colgroup width=100>
<colgroup width=100>
<colgroup width=55>
<colgroup width=55>
<colgroup width=55>
<colgroup width=55>
<colgroup width=35>
<colgroup width=35>
<colgroup width=80>
<tr><td colspan='<?=$colspan?>' class='line1'></td></tr>
<tr class='bgcol1 bold col1 ht center'>
<td rowspan=2><input type=checkbox name=chkall value="1" onclick="check_all(this.form)"></td>
<td rowspan=2><?=subject_sort_link("bo_table")?>TABLE</a></td>
<td colspan=2><?=subject_sort_link("bo_subject")?>제목</a></td>
<td rowspan=2 title="글읽기 포인트"><?=subject_sort_link("bo_read_point")?>읽기<br>포인트</a></td>
<td rowspan=2 title="글쓰기 포인트"><?=subject_sort_link("bo_write_point")?>쓰기<br>포인트</a></td>
<td rowspan=2 title="코멘트쓰기 포인트"><?=subject_sort_link("bo_comment_point")?>코멘트<br>포인트</a></td>
<td rowspan=2 title="다운로드 포인트"><?=subject_sort_link("bo_download_point")?>다운<br>포인트</a></td>
<td rowspan=2 title="검색사용"><?=subject_sort_link("bo_use_search")?>검색<br>사용</a></td>
<td rowspan=2 title="검색순서"><?=subject_sort_link("bo_order_search")?>검색<br>순서</a></td>
<td rowspan=2><a href="./board_form.php"><img src='<?=$g4[admin_path]?>/img/icon_insert.gif' border=0 title='생성'></a></td>
</tr>
<tr class='bgcol1 bold col1 ht center'>
<td><?=subject_sort_link("a.gr_id")?>그룹</a></td>
<td><?=subject_sort_link("bo_skin", "", "desc")?>스킨</a></td>
</tr>
<tr><td colspan='<?=$colspan?>' class='line2'></td></tr>
<?
// 스킨디렉토리
$skin_options = "";
$arr = get_skin_dir("board");
for ($k=0; $k<count($arr); $k++)
{
$option = $arr[$k];
if (strlen($option) > 10)
$option = substr($arr[$k], 0, 18) . "…";
$skin_options .= "<option value='$arr[$k]'>$option</option>";
}
for ($i=0; $row=sql_fetch_array($result); $i++) {
$s_upd = "<a href='./board_form.php?w=u&bo_table=$row[bo_table]&$qstr'><img src='img/icon_modify.gif' border=0 title='수정'></a>";
$s_del = "";
if ($is_admin == "super") {
//$s_del = "<a href=\"javascript:del('./board_delete.php?bo_table=$row[bo_table]&$qstr');\"><img src='img/icon_delete.gif' border=0 title='삭제'></a>";
$s_del = "<a href=\"javascript:post_delete('board_delete.php', '$row[bo_table]');\"><img src='img/icon_delete.gif' border=0 title='삭제'></a>";
}
$s_copy = "<a href=\"javascript:board_copy('$row[bo_table]');\"><img src='img/icon_copy.gif' border=0 title='복사'></a>";
/*
// 스킨디렉토리
$skin_options = "";
$arr = get_skin_dir("board");
for ($k=0; $k<count($arr); $k++)
{
$option = $arr[$k];
if (strlen($option) > 10)
$option = substr($arr[$k], 0, 18) . "…";
$skin_options .= "<option value='$arr[$k]'";
if ($arr[$k] == $row[bo_skin])
$skin_options .= " selected";
$skin_options .= ">$option</option>";
}
*/
$list = $i % 2;
echo "<input type=hidden name=board_table[$i] value='$row[bo_table]'>";
echo "<tr class='list$list col1 ht center'>";
echo "<td rowspan=2 height=25><input type=checkbox name=chk[] value='$i'></td>";
echo "<td rowspan=2><a href='$g4[bbs_path]/board.php?bo_table=$row[bo_table]'><b>$row[bo_table]</b></a></td>";
echo "<td colspan=2 align=left height=25><input type=text class=ed name=bo_subject[$i] value='".get_text($row[bo_subject])."' style='width:99%'></td>";
echo "<td rowspan=2 title='읽기 포인트'><input type=text class=ed name=bo_read_point[$i] value='$row[bo_read_point]' style='width:33px;'></td>";
echo "<td rowspan=2 title='쓰기 포인트'><input type=text class=ed name=bo_write_point[$i] value='$row[bo_write_point]' style='width:33px;'></td>";
echo "<td rowspan=2 title='속글쓰기 포인트'><input type=text class=ed name=bo_comment_point[$i] value='$row[bo_comment_point]' style='width:33px;'></td>";
echo "<td rowspan=2 title='다운로드 포인트'><input type=text class=ed name=bo_download_point[$i] value='$row[bo_download_point]' style='width:33px;'></td>";
echo "<td rowspan=2 title='검색사용'><input type=checkbox name=bo_use_search[$i] ".($row[bo_use_search]?'checked':'')." value='1'></td>";
echo "<td rowspan=2 title='검색순서'><input type=text class=ed name=bo_order_search[$i] value='$row[bo_order_search]' size=2></td>";
echo "<td rowspan=2>$s_upd $s_del $s_copy</td>";
echo "</tr>";
echo "<tr class='list$list col1 ht center'>";
if ($is_admin == "super")
echo "<td align=left>".get_group_select("gr_id[$i]", $row[gr_id])."</td>";
else
echo "<td align=center><input type=hidden name='gr_id[$i]' value='$row[gr_id]'>$row[gr_subject]</td>";
echo "<td align=left><select id=bo_skin_$i name=bo_skin[$i]>$skin_options</select></td>";
echo "</tr>\n";
echo "<script type='text/javascript'>document.getElementById('bo_skin_$i').value='$row[bo_skin]';</script>";
}
if ($i == 0)
echo "<tr><td colspan='$colspan' align=center height=100 bgcolor=#ffffff>자료가 없습니다.</td></tr>";
echo "<tr><td colspan='$colspan' class='line2'></td></tr>";
echo "</table>";
$pagelist = get_paging($config[cf_write_pages], $page, $total_page, "$_SERVER[PHP_SELF]?$qstr&page=");
echo "<table width=100% cellpadding=3 cellspacing=1>";
echo "<tr><td width=70%>";
echo "<input type=button class='btn1' value='선택수정' onclick=\"btn_check(this.form, 'update')\"> ";
if ($is_admin == "super")
echo "<input type=button class='btn1' value='선택삭제' onclick=\"btn_check(this.form, 'delete')\">";
echo "</td>";
echo "<td width=30% align=right>$pagelist</td></tr></table>\n";
if ($stx)
echo "<script>document.fsearch.sfl.value = '$sfl';</script>";
?>
</form>
<script type="text/javascript">
function board_copy(bo_table) {
window.open("./board_copy.php?bo_table="+bo_table, "BoardCopy", "left=10,top=10,width=500,height=200");
}
</script>
<script>
// POST 방식으로 삭제
function post_delete(action_url, val)
{
var f = document.fpost;
if(confirm("한번 삭제한 자료는 복구할 방법이 없습니다.\n\n정말 삭제하시겠습니까?")) {
f.bo_table.value = val;
f.action = action_url;
f.submit();
}
}
</script>
<form name='fpost' method='post'>
<input type='hidden' name='sst' value='<?=$sst?>'>
<input type='hidden' name='sod' value='<?=$sod?>'>
<input type='hidden' name='sfl' value='<?=$sfl?>'>
<input type='hidden' name='stx' value='<?=$stx?>'>
<input type='hidden' name='page' value='<?=$page?>'>
<input type='hidden' name='token' value='<?=$token?>'>
<input type='hidden' name='bo_table'>
</form>
<?
include_once("./admin.tail.php");
?>

28
adm/board_list_delete.php Normal file
View File

@ -0,0 +1,28 @@
<?
$sub_menu = "300100";
include_once("./_common.php");
check_demo();
if ($is_admin != "super")
alert("게시판 삭제는 최고관리자만 가능합니다.");
auth_check($auth[$sub_menu], "d");
check_token();
// _BOARD_DELETE_ 상수를 선언해야 board_delete.inc.php 가 정상 작동함
define("_BOARD_DELETE_", TRUE);
for ($i=0; $i<count($chk); $i++)
{
// 실제 번호를 넘김
$k = $chk[$i];
// include 전에 $bo_table 값을 반드시 넘겨야 함
$tmp_bo_table = mysql_real_escape_string(trim($_POST['board_table'][$k]));
include ("./board_delete.inc.php");
}
goto_url("./board_list.php?$qstr");
?>

42
adm/board_list_update.php Normal file
View File

@ -0,0 +1,42 @@
<?
$sub_menu = "300100";
include_once("./_common.php");
check_demo();
auth_check($auth[$sub_menu], "w");
check_token();
for ($i=0; $i<count($chk); $i++)
{
// 실제 번호를 넘김
$k = $chk[$i];
if ($is_admin != "super")
{
$sql = " select count(*) as cnt from $g4[board_table] a, $g4[group_table] b
where a.gr_id = '{$_POST['gr_id'][$k]}'
and a.gr_id = b.gr_id
and b.gr_admin = '$member[mb_id]' ";
$row = sql_fetch($sql);
if (!$row[cnt])
alert("최고관리자가 아닌 경우 다른 관리자의 게시판($board_table[$k])은 수정이 불가합니다.");
}
$sql = " update $g4[board_table]
set gr_id = '{$_POST['gr_id'][$k]}',
bo_subject = '{$_POST['bo_subject'][$k]}',
bo_skin = '{$_POST['bo_skin'][$k]}',
bo_read_point = '{$_POST['bo_read_point'][$k]}',
bo_write_point = '{$_POST['bo_write_point'][$k]}',
bo_comment_point = '{$_POST['bo_comment_point'][$k]}',
bo_download_point = '{$_POST['bo_download_point'][$k]}',
bo_use_search = '{$_POST['bo_use_search'][$k]}',
bo_order_search = '{$_POST['bo_order_search'][$k]}'
where bo_table = '{$_POST['board_table'][$k]}' ";
sql_query($sql);
}
goto_url("./board_list.php?$qstr");
?>

35
adm/boardgroup_delete.php Normal file
View File

@ -0,0 +1,35 @@
<?
$sub_menu = "300200";
include_once("./_common.php");
check_demo();
auth_check($auth[$sub_menu], "d");
$gr_id = mysql_real_escape_string(trim($_POST['gr_id']));
$row = sql_fetch(" select count(*) as cnt from $g4[board_table] where gr_id = '$gr_id' ");
if ($row[cnt])
alert("이 그룹에 속한 게시판이 존재하여 게시판 그룹을 삭제할 수 없습니다.\\n\\n이 그룹에 속한 게시판을 먼저 삭제하여 주십시오.", "./board_list.php?sfl=gr_id&stx=$gr_id");
/*
// _BOARD_DELETE_ 상수를 선언해야 board_delete.inc.php 가 정상 작동함
define("_BOARD_DELETE_", TRUE);
$sql = " select * from $g4[board_table] where gr_id = '$gr_id' ";
$result = sql_query($sql);
while ($row = sql_fetch_array($result)) {
$tmp_bo_table = $row[bo_table];
include ('./board_delete.inc.php');
}
*/
// 그룹 삭제
sql_query(" delete from $g4[group_table] where gr_id = '$gr_id' ");
// 그룹접근 회원 삭제
sql_query(" delete from $g4[group_member_table] where gr_id = '$gr_id' ");
goto_url("boardgroup_list.php?$qstr");
?>

124
adm/boardgroup_form.php Normal file
View File

@ -0,0 +1,124 @@
<?
$sub_menu = "300200";
include_once("./_common.php");
auth_check($auth[$sub_menu], "w");
$token = get_token();
if ($is_admin != "super" && $w == "") alert("최고관리자만 접근 가능합니다.");
$html_title = "게시판그룹";
if ($w == "")
{
$gr_id_attr = "required";
$gr[gr_use_access] = 0;
$html_title .= " 생성";
}
else if ($w == "u")
{
$gr_id_attr = "readonly style='background-color:#dddddd'";
$gr = sql_fetch(" select * from $g4[group_table] where gr_id = '$gr_id' ");
$html_title .= " 수정";
}
else
alert("제대로 된 값이 넘어오지 않았습니다.");
$g4[title] = $html_title;
include_once("./admin.head.php");
?>
<form name=fboardgroup method=post onsubmit="return fboardgroup_check(this);" autocomplete="off">
<input type=hidden name=w value='<?=$w?>'>
<input type=hidden name=sfl value='<?=$sfl?>'>
<input type=hidden name=stx value='<?=$stx?>'>
<input type=hidden name=sst value='<?=$sst?>'>
<input type=hidden name=sod value='<?=$sod?>'>
<input type=hidden name=page value='<?=$page?>'>
<input type=hidden name=token value='<?=$token?>'>
<table width=100% cellpadding=0 cellspacing=0>
<colgroup width=20% class='col1 pad1 bold right'>
<colgroup width=30% class='col2 pad2'>
<colgroup width=20% class='col1 pad1 bold right'>
<colgroup width=30% class='col2 pad2'>
<tr class='ht'>
<td colspan=4 class=title align=left><img src='<?=$g4[admin_path]?>/img/icon_title.gif'> <?=$html_title?></td>
</tr>
<tr><td colspan=4 class='line1'></td></tr>
<tr class='ht'>
<td>그룹 ID</td>
<td colspan=3><input type='text' class=ed name=gr_id size=11 maxlength=10 <?=$gr_id_attr?> alphanumericunderline itemname='그룹 아이디' value='<?=$group[gr_id]?>'> 영문자, 숫자, _ 만 가능 (공백없이)</td>
</tr>
<tr class='ht'>
<td>그룹 제목</td>
<td colspan=3>
<input type='text' class=ed name=gr_subject size=40 required itemname='그룹 제목' value='<?=get_text($group[gr_subject])?>'>
<?
if ($w == 'u')
echo "<input type=button class='btn1' value='게시판생성' onclick=\"location.href='./board_form.php?gr_id=$gr_id';\">";
?>
</td>
</tr>
<tr class='ht'>
<td>그룹 관리자</td>
<td colspan=3>
<?
if ($is_admin == "super")
//echo get_member_id_select("gr_admin", 9, $row[gr_admin]);
echo "<input type='text' class=ed name='gr_admin' value='$gr[gr_admin]' maxlength=20>";
else
echo "<input type=hidden name='gr_admin' value='$gr[gr_admin]' size=40>$gr[gr_admin]";
?></td>
</tr>
<tr class='ht'>
<td>접근회원사용</td>
<td colspan=3>
<input type=checkbox name=gr_use_access value='1' <?=$gr[gr_use_access]?'checked':'';?>>사용
<?=help("사용에 체크하시면 이 그룹에 속한 게시판은 접근가능한 회원만 접근이 가능합니다.")?>
</td>
</tr>
<tr class='ht'>
<td>접근회원수</td>
<td colspan=3>
<?
// 접근회원수
$sql1 = " select count(*) as cnt from $g4[group_member_table] where gr_id = '$gr_id' ";
$row1 = sql_fetch($sql1);
echo "<a href='./boardgroupmember_list.php?gr_id=$gr_id'>$row1[cnt]</a>";
?>
</td>
</tr>
<? for ($i=1; $i<=10; $i=$i+2) { $k=$i+1; ?>
<tr class='ht'>
<td><input type=text class=ed name='gr_<?=$i?>_subj' value='<?=get_text($group["gr_{$i}_subj"])?>' title='여분필드 <?=$i?> 제목' style='text-align:right;font-weight:bold;' size=15></td>
<td><input type='text' class=ed style='width:99%;' name=gr_<?=$i?> value='<?=$gr["gr_$i"]?>' title='여분필드 <?=$i?> 설정값'></td>
<td><input type=text class=ed name='gr_<?=$k?>_subj' value='<?=get_text($group["gr_{$k}_subj"])?>' title='여분필드 <?=$k?> 제목' style='text-align:right;font-weight:bold;' size=15></td>
<td><input type='text' class=ed style='width:99%;' name=gr_<?=$k?> value='<?=$gr["gr_$k"]?>' title='여분필드 <?=$k?> 설정값'></td>
</tr>
<? } ?>
<tr><td colspan=4 class='line2'></td></tr>
</table>
<p align=center>
<input type=submit class=btn1 accesskey='s' value=' 확 인 '>&nbsp;
<input type=button class=btn1 value=' 목 록 ' onclick="document.location.href='./boardgroup_list.php?<?=$qstr?>';">
</form>
<script type='text/javascript'>
if (document.fboardgroup.w.value == '')
document.fboardgroup.gr_id.focus();
else
document.fboardgroup.gr_subject.focus();
function fboardgroup_check(f)
{
f.action = "./boardgroup_form_update.php";
return true;
}
</script>
<?
include_once ("./admin.tail.php");
?>

View File

@ -0,0 +1,66 @@
<?
$sub_menu = "300200";
include_once("./_common.php");
if ($w == 'u')
check_demo();
auth_check($auth[$sub_menu], "w");
if ($is_admin != "super" && $w == "") alert("최고관리자만 접근 가능합니다.");
if (!preg_match("/^([A-Za-z0-9_]{1,10})$/", $gr_id))
alert("그룹 ID는 공백없이 영문자, 숫자, _ 만 사용 가능합니다. (10자 이내)");
if (!$gr_subject) alert("그룹 제목을 입력하세요.");
check_token();
$sql_common = " gr_subject = '$_POST[gr_subject]',
gr_admin = '$_POST[gr_admin]',
gr_use_access = '$_POST[gr_use_access]',
gr_1_subj = '$_POST[gr_1_subj]',
gr_2_subj = '$_POST[gr_2_subj]',
gr_3_subj = '$_POST[gr_3_subj]',
gr_4_subj = '$_POST[gr_4_subj]',
gr_5_subj = '$_POST[gr_5_subj]',
gr_6_subj = '$_POST[gr_6_subj]',
gr_7_subj = '$_POST[gr_7_subj]',
gr_8_subj = '$_POST[gr_8_subj]',
gr_9_subj = '$_POST[gr_9_subj]',
gr_10_subj = '$_POST[gr_10_subj]',
gr_1 = '$_POST[gr_1]',
gr_2 = '$_POST[gr_2]',
gr_3 = '$_POST[gr_3]',
gr_4 = '$_POST[gr_4]',
gr_5 = '$_POST[gr_5]',
gr_6 = '$_POST[gr_6]',
gr_7 = '$_POST[gr_7]',
gr_8 = '$_POST[gr_8]',
gr_9 = '$_POST[gr_9]',
gr_10 = '$_POST[gr_10]' ";
if ($w == "")
{
$sql = " select count(*) as cnt from $g4[group_table] where gr_id = '$_POST[gr_id]' ";
$row = sql_fetch($sql);
if ($row[cnt])
alert("이미 존재하는 그룹 ID 입니다.");
$sql = " insert into $g4[group_table]
set gr_id = '$_POST[gr_id]',
$sql_common ";
sql_query($sql);
}
else if ($w == "u")
{
$sql = " update $g4[group_table]
set $sql_common
where gr_id = '$_POST[gr_id]' ";
sql_query($sql);
}
else
alert("제대로 된 값이 넘어오지 않았습니다.");
goto_url("./boardgroup_form.php?w=u&gr_id=$gr_id&$qstr");
?>

192
adm/boardgroup_list.php Normal file
View File

@ -0,0 +1,192 @@
<?
$sub_menu = "300200";
include_once("./_common.php");
auth_check($auth[$sub_menu], "r");
$token = get_token();
$sql_common = " from $g4[group_table] ";
$sql_search = " where (1) ";
if ($is_admin != "super")
$sql_search .= " and (gr_admin = '$member[mb_id]') ";
if ($stx) {
$sql_search .= " and ( ";
switch ($sfl) {
case "gr_id" :
case "gr_admin" :
$sql_search .= " ($sfl = '$stx') ";
break;
default :
$sql_search .= " ($sfl like '%$stx%') ";
break;
}
$sql_search .= " ) ";
}
if ($sst)
$sql_order = " order by $sst $sod ";
else
$sql_order = " order by gr_id asc ";
$sql = " select count(*) as cnt
$sql_common
$sql_search
$sql_order ";
$row = sql_fetch($sql);
$total_count = $row[cnt];
$rows = $config[cf_page_rows];
$total_page = ceil($total_count / $rows); // 전체 페이지 계산
if (!$page) $page = 1; // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $rows; // 시작 열을 구함
$sql = " select *
$sql_common
$sql_search
$sql_order
limit $from_record, $rows ";
$result = sql_query($sql);
$listall = "<a href='$_SERVER[PHP_SELF]'>처음</a>";
$g4[title] = "게시판그룹설정";
include_once("./admin.head.php");
$colspan = 8;
?>
<script type="text/javascript">
var list_update_php = "./boardgroup_list_update.php";
</script>
<table width=100% cellpadding=3 cellspacing=1>
<form name=fsearch method=get>
<tr>
<td width=50% align=left><?=$listall?> (그룹수 : <?=number_format($total_count)?>개)</td>
<td width=50% align=right>
<select name=sfl>
<option value="gr_subject">제목</option>
<option value="gr_id">ID</option>
<option value="gr_admin">그룹관리자</option>
</select>
<input type=text name=stx class=ed required itemname='검색어' value='<?=$stx?>'>
<input type=image src='<?=$g4[admin_path]?>/img/btn_search.gif' align=absmiddle></td>
</tr>
</form>
</table>
<form name=fboardgrouplist method=post>
<input type=hidden name=sst value='<?=$sst?>'>
<input type=hidden name=sod value='<?=$sod?>'>
<input type=hidden name=sfl value='<?=$sfl?>'>
<input type=hidden name=stx value='<?=$stx?>'>
<input type=hidden name=page value='<?=$page?>'>
<input type=hidden name=token value='<?=$token?>'>
<table width=100% cellpadding=0 cellspacing=1 border=0>
<colgroup width=30>
<colgroup width=120>
<colgroup width=180>
<colgroup width=''>
<colgroup width=80>
<colgroup width=80>
<colgroup width=80>
<colgroup width=60>
<tr><td colspan='<?=$colspan?>' class='line1'></td></tr>
<tr class='bgcol1 bold col1 ht center'>
<td><input type=checkbox name=chkall value="1" onclick="check_all(this.form)"></td>
<td><?=subject_sort_link("gr_id")?>그룹아이디</a></td>
<td><?=subject_sort_link("gr_subject")?>제목</a></td>
<td><?=subject_sort_link("gr_admin")?>그룹관리자</a></td>
<td>게시판</td>
<td>접근사용</td>
<td>접근회원수</td>
<td><? if ($is_admin == "super") { echo "<a href='./boardgroup_form.php'><img src='$g4[admin_path]/img/icon_insert.gif' border=0 title='생성'></a>"; } ?></td>
</tr>
<tr><td colspan='<?=$colspan?>' class='line2'></td></tr>
<?
for ($i=0; $row=sql_fetch_array($result); $i++)
{
// 접근회원수
$sql1 = " select count(*) as cnt from $g4[group_member_table] where gr_id = '$row[gr_id]' ";
$row1 = sql_fetch($sql1);
// 게시판수
$sql2 = " select count(*) as cnt from $g4[board_table] where gr_id = '$row[gr_id]' ";
$row2 = sql_fetch($sql2);
$s_upd = "<a href='./boardgroup_form.php?$qstr&w=u&gr_id=$row[gr_id]'><img src='img/icon_modify.gif' border=0 title='수정'></a>";
$s_del = "";
if ($is_admin == "super") {
//$s_del = "<a href=\"javascript:del('./boardgroup_delete.php?$qstr&gr_id=$row[gr_id]');\"><img src='img/icon_delete.gif' border=0 title='삭제'></a>";
$s_del = "<a href=\"javascript:post_delete('boardgroup_delete.php', '$row[gr_id]');\"><img src='img/icon_delete.gif' border=0 title='삭제'></a>";
}
$list = $i%2;
echo "<input type=hidden name=gr_id[$i] value='$row[gr_id]'>";
echo "<tr class='list$list' onmouseover=\"this.className='mouseover';\" onmouseout=\"this.className='list$list';\" height=27 align=center>";
echo "<td><input type=checkbox name=chk[] value='$i'></td>";
echo "<td><a href='$g4[bbs_path]/group.php?gr_id=$row[gr_id]'><b>$row[gr_id]</b></a></td>";
echo "<td><input type=text class=ed name=gr_subject[$i] value='".get_text($row[gr_subject])."' size=30></td>";
if ($is_admin == "super")
//echo "<td>".get_member_id_select("gr_admin[$i]", 9, $row[gr_admin])."</td>";
echo "<td><input type=text class=ed name=gr_admin[$i] value='$row[gr_admin]' maxlength=20></td>";
else
echo "<input type=hidden name='gr_admin[$i]' value='$row[gr_admin]'><td>$row[gr_admin]</td>";
echo "<td><a href='./board_list.php?sfl=a.gr_id&stx=$row[gr_id]'>$row2[cnt]</a></td>";
echo "<td><input type=checkbox name=gr_use_access[$i] ".($row[gr_use_access]?'checked':'')." value='1'></td>";
echo "<td><a href='./boardgroupmember_list.php?gr_id=$row[gr_id]'>$row1[cnt]</a></td>";
echo "<td>$s_upd $s_del</td>";
echo "</tr>\n";
}
if ($i == 0)
echo "<tr><td colspan='$colspan' align=center height=100 bgcolor=#ffffff>자료가 없습니다.</td></tr>";
echo "<tr><td colspan='$colspan' class='line2'></td></tr>";
echo "</table>";
$pagelist = get_paging($config[cf_write_pages], $page, $total_page, "$_SERVER[PHP_SELF]?$qstr&page=");
echo "<table width=100% cellpadding=3 cellspacing=1>";
echo "<tr><td width=70%>";
echo "<input type=button class='btn1' value='선택수정' onclick=\"btn_check(this.form, 'update')\">";
//echo " <input type=button value='선택삭제' onclick=\"btn_check(this.form, 'delete')\">";
echo "</td>";
echo "<td width=30% align=right>$pagelist</td></tr></table>\n";
if ($stx)
echo "<script>document.fsearch.sfl.value = '$sfl';</script>";
?>
</form>
<script>
// POST 방식으로 삭제
function post_delete(action_url, val)
{
var f = document.fpost;
if(confirm("한번 삭제한 자료는 복구할 방법이 없습니다.\n\n정말 삭제하시겠습니까?")) {
f.gr_id.value = val;
f.action = action_url;
f.submit();
}
}
</script>
<form name='fpost' method='post'>
<input type='hidden' name='sst' value='<?=$sst?>'>
<input type='hidden' name='sod' value='<?=$sod?>'>
<input type='hidden' name='sfl' value='<?=$sfl?>'>
<input type='hidden' name='stx' value='<?=$stx?>'>
<input type='hidden' name='page' value='<?=$page?>'>
<input type='hidden' name='token' value='<?=$token?>'>
<input type='hidden' name='gr_id'>
</form>
<?
include_once("./admin.tail.php");
?>

View File

@ -0,0 +1,27 @@
<?
$sub_menu = "300200";
include_once("./_common.php");
check_demo();
auth_check($auth[$sub_menu], "w");
check_token();
for ($i=0; $i<count($chk); $i++)
{
// 실제 번호를 넘김
$k = $chk[$i];
$sql = " update $g4[group_table]
set gr_subject = '{$_POST[gr_subject][$k]}',
gr_admin = '{$_POST[gr_admin][$k]}',
gr_use_access = '{$_POST[gr_use_access][$k]}'
where gr_id = '{$_POST[gr_id][$k]}' ";
if ($is_admin != "super")
$sql .= " and gr_admin = '{$_POST[gr_admin][$k]}' ";
sql_query($sql);
}
goto_url("./boardgroup_list.php?$qstr");
?>

View File

@ -0,0 +1,142 @@
<?
$sub_menu = "300200";
include_once("./_common.php");
auth_check($auth[$sub_menu], "w");
$token = get_token();
$mb = get_member($mb_id);
if (!$mb[mb_id])
alert("존재하지 않는 회원입니다.");
$g4[title] = "접근가능그룹선택";
include_once("./admin.head.php");
$colspan = 4;
?>
<table width=100% cellpadding=3 cellspacing=1>
<tr>
<td>* <? echo "<a href='./member_form.php?w=u&mb_id=$mb[mb_id]'><b>$mb[mb_id]</b> ($mb[mb_name] / $mb[mb_nick])</a> 님이 접근가능한 그룹 목록"; ?></td>
</tr>
</table>
<table width=100% cellpadding=0 cellspacing=0>
<colgroup width=120>
<colgroup width=''>
<colgroup width=200>
<colgroup width=100>
<tr><td colspan='<?=$colspan?>' class='line1'></td></tr>
<tr class='bgcol1 bold col1 ht center'>
<td>그룹아이디</td>
<td>그룹</td>
<td>처리일시</td>
<td>삭제</td>
</tr>
<tr><td colspan='<?=$colspan?>' class='line2'></td></tr>
<?
$sql = " select *
from $g4[group_member_table] a,
$g4[group_table] b
where a.mb_id = '$mb[mb_id]'
and a.gr_id = b.gr_id ";
if ($is_admin != 'super')
$sql .= " and b.gr_admin = '$member[mb_id]' ";
$sql .= " order by a.gr_id desc ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++) {
//$s_del = "<a href=\"javascript:del('./boardgroupmember_update.php?w=d&gm_id=$row[gm_id]')\"><img src='img/icon_delete.gif' border=0></a>";
$s_del = "<a href=\"javascript:post_delete('boardgroupmember_update.php', '$row[gm_id]');\"><img src='img/icon_delete.gif' border=0 title='삭제'></a>";
$list = $i%2;
echo "
<tr class='list$list col1 ht center'>
<td><a href='$g4[bbs_path]/group.php?gr_id=$row[gr_id]'><b>$row[gr_id]</b></a></td>
<td><b>$row[gr_subject]</b></td>
<td>$row[gm_datetime]</td>
<td>$s_del</td>
</tr>";
}
if ($i == 0) {
echo "<tr><td colspan='$colspan' align=center height=100>접근가능한 그룹이 없습니다.</td></tr>";
}
?>
<tr><td colspan='<?=$colspan?>' class='line2'></td></tr>
</table>
<p>
<form name=fboardgroupmember_form method=post action='./boardgroupmember_update.php' onsubmit="return boardgroupmember_form_check(this)">
<input type=hidden name=mb_id value='<?=$mb[mb_id]?>'>
<input type=hidden name=token value='<?=$token?>'>
<table width=100% align=center cellpadding=3 cellspacing=1 class=tablebg>
<colgroup width=20% class='col1 pad1 bold right'>
<colgroup width=80% class='col2 pad2'>
<tr>
<td>그룹</td>
<td>
<select name=gr_id>
<option value=''>접근가능 그룹을 선택하세요.
<option value=''>--------------------------
<?
$sql = " select *
from $g4[group_table]
where gr_use_access = 1 ";
//if ($is_admin == 'group') {
if ($is_admin != 'super')
$sql .= " and gr_admin = '$member[mb_id]' ";
$sql .= " order by gr_id ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++) {
echo "<option value='$row[gr_id]'>$row[gr_subject]";
}
?>
</select>
&nbsp;
<input type=submit class=btn1 value=' 확 인 ' accesskey='s'>
</td>
</tr>
</table>
</form>
<script type="text/javascript">
function boardgroupmember_form_check(f)
{
if (f.gr_id.value == '') {
alert('접근가능 그룹을 선택하세요.');
return false;
}
return true;
}
</script>
<script>
// POST 방식으로 삭제
function post_delete(action_url, val)
{
var f = document.fpost;
if(confirm("한번 삭제한 자료는 복구할 방법이 없습니다.\n\n정말 삭제하시겠습니까?")) {
f.gm_id.value = val;
f.action = action_url;
f.submit();
}
}
</script>
<form name='fpost' method='post'>
<input type='hidden' name='sst' value='<?=$sst?>'>
<input type='hidden' name='sod' value='<?=$sod?>'>
<input type='hidden' name='sfl' value='<?=$sfl?>'>
<input type='hidden' name='stx' value='<?=$stx?>'>
<input type='hidden' name='page' value='<?=$page?>'>
<input type='hidden' name='token' value='<?=$token?>'>
<input type='hidden' name='w' value='d'>
<input type='hidden' name='gm_id'>
</form>
<?
include_once("./admin.tail.php");
?>

View File

@ -0,0 +1,166 @@
<?
$sub_menu = "300200";
include_once("./_common.php");
auth_check($auth[$sub_menu], "r");
$gr = get_group($gr_id);
if (!$gr[gr_id]) {
alert("존재하지 않는 그룹입니다.");
}
$sql_common = " from $g4[group_member_table] a
left outer join $g4[member_table] b on (a.mb_id = b.mb_id) ";
$sql_search = " where gr_id = '$gr_id' ";
// 회원아이디로 검색되지 않던 오류를 수정
if ($stx) {
$sql_search .= " and ( ";
switch ($sfl) {
default :
$sql_search .= " ($sfl like '%$stx%') ";
break;
}
$sql_search .= " ) ";
}
if (!$sst) {
$sst = "gm_datetime";
$sod = "desc";
}
$sql_order = " order by $sst $sod ";
$sql = " select count(*) as cnt
$sql_common
$sql_search
$sql_order ";
$row = sql_fetch($sql);
$total_count = $row[cnt];
$rows = $config[cf_page_rows];
$total_page = ceil($total_count / $rows); // 전체 페이지 계산
if ($page == "") $page = 1; // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $rows; // 시작 열을 구함
$sql = " select *
$sql_common
$sql_search
$sql_order
limit $from_record, $rows ";
$result = sql_query($sql);
$g4[title] = "접근가능회원";
include_once("./admin.head.php");
$colspan = 7;
?>
<script type="text/javascript" src="<?=$g4[path]?>/js/sideview.js"></script>
<table width=100% cellpadding=3 cellspacing=1>
<form name=fsearch method=get>
<input type=hidden name=gr_id value='<?=$gr_id?>'>
<tr>
<td width=50% align=left>* <? echo "'<b>[$gr[gr_id]] $gr[gr_subject]</b>' 그룹의 접근가능한 회원 목록"; ?></td>
<td width=50% align=right>
<select name=sfl class=cssfl>
<option value='a.mb_id'>회원아이디</option>
</select>
<input type=text name=stx required itemname='검색어' value='<? echo $stx ?>'>
<input type=image src='<?=$g4[admin_path]?>/img/btn_search.gif' align=absmiddle></td>
</tr>
</form>
</table>
<table width=100% cellpadding=0 cellspacing=0>
<colgroup width=120>
<colgroup width=120>
<colgroup width=120>
<colgroup width=120>
<colgroup width=''>
<colgroup width=100>
<colgroup width=40>
<tr><td colspan='<?=$colspan?>' class='line1'></td></tr>
<tr class='bgcol1 bold col1 ht center'>
<td><?=subject_sort_link('b.mb_id', "gr_id=$gr_id")?>회원아이디</a></td>
<td><?=subject_sort_link('b.mb_name', "gr_id=$gr_id")?>이름</a></td>
<td><?=subject_sort_link('b.mb_nick', "gr_id=$gr_id")?>별명</a></td>
<td><?=subject_sort_link('b.mb_today_login', "gr_id=$gr_id")?>최종접속</a></td>
<td><?=subject_sort_link('a.gm_datetime', "gr_id=$gr_id")?>처리일시</a></td>
<td title='접근가능한 그룹수'>그룹</td>
<td>삭제</td>
</tr>
<tr><td colspan='<?=$colspan?>' class='line2'></td></tr>
<?
for ($i=0; $row=sql_fetch_array($result); $i++)
{
// 접근가능한 그룹수
$sql2 = " select count(*) as cnt from $g4[group_member_table] where mb_id = '$row[mb_id]' ";
$row2 = sql_fetch($sql2);
$group = "";
if ($row2[cnt])
$group = "<a href='./boardgroupmember_form.php?mb_id=$row[mb_id]'>$row2[cnt]</a>";
//$s_del = "<a href=\"javascript:del('./boardgroupmember_update.php?w=listdelete&gm_id=$row[gm_id]');\"><img src='img/icon_delete.gif' border=0 title='삭제'></a>";
$s_del = "<a href=\"javascript:post_delete('boardgroupmember_update.php', '$row[gm_id]');\"><img src='img/icon_delete.gif' border=0 title='삭제'></a>";
$mb_nick = get_sideview($row[mb_id], $row[mb_nick], $row[mb_email], $row[mb_homepage]);
$list = $i%2;
echo "
<tr class='list$list col1 ht center'>
<td>$row[mb_id]</td>
<td>$row[mb_name]</td>
<td>$mb_nick</td>
<td>".substr($row[mb_today_login],2,8)."</td>
<td>$row[gm_datetime]</td>
<td>$group</td>
<td>$s_del</td>
</tr> ";
}
if ($i == 0)
{
echo "<tr><td colspan='$colspan' align=center height=100 class='content contentbg'>자료가 없습니다.</td></tr>";
}
echo "<tr><td colspan='$colspan' class='line2'></td></tr>";
echo "</table>";
$pagelist = get_paging($config[cf_write_pages], $page, $total_page, "$_SERVER[PHP_SELF]?$qstr&gr_id=$gr_id&page=");
if ($pagelist)
echo "<table width=100% cellpadding=3 cellspacing=1><tr><td align=right>$pagelist</td></tr></table>\n";
if ($stx)
echo "<script type='text/javascript'>document.fsearch.sfl.value = '$sfl';</script>\n";
?>
<script>
// POST 방식으로 삭제
function post_delete(action_url, val)
{
var f = document.fpost;
if(confirm("한번 삭제한 자료는 복구할 방법이 없습니다.\n\n정말 삭제하시겠습니까?")) {
f.gm_id.value = val;
f.action = action_url;
f.submit();
}
}
</script>
<form name='fpost' method='post'>
<input type='hidden' name='sst' value='<?=$sst?>'>
<input type='hidden' name='sod' value='<?=$sod?>'>
<input type='hidden' name='sfl' value='<?=$sfl?>'>
<input type='hidden' name='stx' value='<?=$stx?>'>
<input type='hidden' name='page' value='<?=$page?>'>
<input type='hidden' name='token' value='<?=$token?>'>
<input type='hidden' name='w' value='listdelete'>
<input type='hidden' name='gm_id'>
</form>
<?
include_once("./admin.tail.php");
?>

View File

@ -0,0 +1,62 @@
<?
$sub_menu = "300200";
include_once("./_common.php");
sql_query(" ALTER TABLE $g4[group_member_table] CHANGE `gm_id` `gm_id` INT( 11 ) DEFAULT '0' NOT NULL AUTO_INCREMENT ", false);
if ($w == "")
{
auth_check($auth[$sub_menu], "w");
$mb = get_member($mb_id);
if (!$mb[mb_id]) {
alert("존재하지 않는 회원입니다.");
}
$gr = get_group($gr_id);
if (!$gr[gr_id]) {
alert("존재하지 않는 그룹입니다.");
}
$sql = " select count(*) as cnt
from $g4[group_member_table]
where gr_id = '$gr_id'
and mb_id = '$mb_id' ";
$row = sql_fetch($sql);
if ($row[cnt]) {
alert("이미 등록되어 있는 자료입니다.");
}
else
{
check_token();
$sql = " insert into $g4[group_member_table]
set gr_id = '$_POST[gr_id]',
mb_id = '$_POST[mb_id]',
gm_datetime = '$g4[time_ymdhis]' ";
sql_query($sql);
}
}
else if ($w == 'd' || $w == 'listdelete')
{
auth_check($auth[$sub_menu], "d");
$sql = " select * from $g4[group_member_table] where gm_id = '$_POST[gm_id]' ";
$gm = sql_fetch($sql);
if (!$gm[gm_id]) {
alert("존재하지 않는 자료입니다.");
}
check_token();
$gr_id = $gm[gr_id];
$mb_id = $gm[mb_id];
$sql = " delete from $g4[group_member_table] where gm_id = '$_POST[gm_id]' ";
sql_query($sql);
}
if ($w == 'listdelete')
goto_url("./boardgroupmember_list.php?gr_id=$gr_id");
else
goto_url("./boardgroupmember_form.php?mb_id=$mb_id");
?>

432
adm/config_form.php Normal file
View File

@ -0,0 +1,432 @@
<?
$sub_menu = "100100";
include_once("./_common.php");
auth_check($auth[$sub_menu], "r");
$token = get_token();
if ($is_admin != "super")
alert("최고관리자만 접근 가능합니다.");
// 쪽지보낼시 차감 포인트 필드 추가 : 061218
sql_query(" ALTER TABLE `$g4[config_table]` ADD `cf_memo_send_point` INT NOT NULL AFTER `cf_login_point` ", FALSE);
// 개인정보보호정책 필드 추가 : 061121
$sql = " ALTER TABLE `$g4[config_table]` ADD `cf_privacy` TEXT NOT NULL AFTER `cf_stipulation` ";
sql_query($sql, FALSE);
if (!trim($config[cf_privacy])) {
$config[cf_privacy] = "해당 홈페이지에 맞는 개인정보취급방침을 입력합니다.";
}
$g4['title'] = "기본환경설정";
include_once ("./admin.head.php");
?>
<form name='fconfigform' method='post' onsubmit="return fconfigform_submit(this);">
<input type=hidden name=token value='<?=$token?>'>
<table width=100% cellpadding=0 cellspacing=0 border=0>
<colgroup width=20% class='col1 pad1 bold right'>
<colgroup width=30% class='col2 pad2'>
<colgroup width=20% class='col1 pad1 bold right'>
<colgroup width=30% class='col2 pad2'>
<tr class='ht'>
<td colspan=4 align=left><?=subtitle("기본 설정")?></td>
</tr>
<tr><td colspan=4 class=line1></td></tr>
<tr class='ht'>
<td>홈페이지 제목</td>
<td>
<input type=text class=ed name='cf_title' size='30' required itemname='홈페이지 제목' value='<?=$config[cf_title]?>'>
</td>
<td>최고관리자</td>
<td><?=get_member_id_select("cf_admin", 10, $config[cf_admin], "required itemname='최고 관리자'")?></td>
</tr>
<tr class='ht'>
<td>포인트 사용</td>
<td colspan=3><input type='checkbox' name='cf_use_point' value='1' <?=$config[cf_use_point]?'checked':'';?>> 사용</td>
</tr>
<tr class='ht'>
<td>로그인시 포인트</td>
<td><input type=text class=ed name='cf_login_point' size='5' required itemname='로그인시 포인트' value='<?=$config[cf_login_point]?>'> 점
<?=help("회원에게 하루에 한번만 부여")?></td>
<td>쪽지보낼시 차감 포인트</td>
<td><input type=text class=ed name='cf_memo_send_point' size='5' required itemname='쪽지전송시 차감 포인트' value='<?=$config[cf_memo_send_point]?>'> 점
<?=help("양수로 입력하십시오.<br>0으로 입력하시면 쪽지보낼시 포인트를 차감하지 않습니다.")?></td>
</tr>
<tr class='ht'>
<td>이름(별명) 표시</td>
<td colspan=3><input type=text class=ed name='cf_cut_name' value='<?=$config[cf_cut_name]?>' size=2> 자리만 표시
<?=help("영숫자 2글자 = 한글 1글자")?></td>
</tr>
<tr class='ht'>
<td>별명 수정</td>
<td>수정한 후 <input type=text class=ed name='cf_nick_modify' value='<?=$config[cf_nick_modify]?>' size=2> 일 동안 바꿀 수 없음</td>
<td>정보공개 수정</td>
<td>수정한 후 <input type=text class=ed name='cf_open_modify' value='<?=$config[cf_open_modify]?>' size=2> 일 동안 바꿀 수 없음</td>
</tr>
<tr class='ht'>
<td>최근게시물 삭제</td>
<td><input type=text class=ed name='cf_new_del' value='<?=$config[cf_new_del]?>' size=5> 일
<?=help("설정일이 지난 최근게시물 자동 삭제")?></td>
<td>쪽지 삭제</td>
<td><input type=text class=ed name='cf_memo_del' value='<?=$config[cf_memo_del]?>' size=5> 일
<?=help("설정일이 지난 쪽지 자동 삭제")?></td>
</tr>
<tr class='ht'>
<td>접속자로그 삭제</td>
<td><input type=text class=ed name='cf_visit_del' value='<?=$config[cf_visit_del]?>' size=5> 일
<?=help("설정일이 지난 접속자 로그 자동 삭제")?></td>
<td>인기검색어 삭제</td>
<td><input type=text class=ed name='cf_popular_del' value='<?=$config[cf_popular_del]?>' size=5> 일
<?=help("설정일이 지난 인기검색어 자동 삭제")?></td>
</tr>
<tr class='ht'>
<td>현재 접속자</td>
<td><input type=text class=ed name='cf_login_minutes' value='<?=$config[cf_login_minutes]?>' size=5> 분
<?=help("설정값 이내의 접속자를 현재 접속자로 인정")?></td>
<td>한페이지당 라인수</td>
<td><input type=text class=ed name='cf_page_rows' value='<?=$config[cf_page_rows]?>' size=5> 라인
<?=help("목록(리스트) 한페이지당 라인수")?></td>
</tr>
<tr class='ht'>
<td>최근게시물 스킨</td>
<td><select id=cf_new_skin name=cf_new_skin required itemname="최근게시물 스킨">
<?
$arr = get_skin_dir("new");
for ($i=0; $i<count($arr); $i++) {
echo "<option value='$arr[$i]'>$arr[$i]</option>\n";
}
?></select>
<script type="text/javascript"> document.getElementById('cf_new_skin').value="<?=$config[cf_new_skin]?>";</script>
</td>
<td>최근게시물 라인수</td>
<td><input type=text class=ed name='cf_new_rows' value='<?=$config[cf_new_rows]?>' size=5> 라인
<?=help("목록 한페이지당 라인수")?></td>
</tr>
<tr class='ht'>
<td>검색 스킨</td>
<td colspan=3><select id=cf_search_skin name=cf_search_skin required itemname="검색 스킨">
<?
$arr = get_skin_dir("search");
for ($i=0; $i<count($arr); $i++) {
echo "<option value='$arr[$i]'>$arr[$i]</option>\n";
}
?></select>
<script type="text/javascript"> document.getElementById('cf_search_skin').value="<?=$config[cf_search_skin]?>";</script>
</td>
</tr>
<tr class='ht'>
<td>접속자 스킨</td>
<td colspan=3><select id=cf_connect_skin name=cf_connect_skin required itemname="접속자 스킨">
<?
$arr = get_skin_dir("connect");
for ($i=0; $i<count($arr); $i++) {
echo "<option value='$arr[$i]'>$arr[$i]</option>\n";
}
?></select>
<script type="text/javascript"> document.getElementById('cf_connect_skin').value="<?=$config[cf_connect_skin]?>";</script>
</td>
</tr>
<tr class='ht'>
<td>복사, 이동시 로그</td>
<td colspan=3><input type='checkbox' name='cf_use_copy_log' value='1' <?=$config[cf_use_copy_log]?'checked':'';?>> 남김
<?=help("게시물 아래에 누구로 부터 복사, 이동됨 표시")?></td>
<!-- <td>자동등록방지 사용</td>
<td><input type='checkbox' name='cf_use_norobot' value='1' <?=$config[cf_use_norobot]?'checked':'';?>> 사용
<?=help("자동 회원가입과 글쓰기를 방지")?></td> -->
</tr>
<tr class='ht'>
<td>접근가능 IP</td>
<td valign=top><textarea class=ed name='cf_possible_ip' rows='5' style='width:99%;'><?=$config[cf_possible_ip]?> </textarea><br>입력된 IP의 컴퓨터만 접근할 수 있음.<br>123.123.+ 도 입력 가능. (엔터로 구분)</td>
<td>접근차단 IP</td>
<td valign=top><textarea class=ed name='cf_intercept_ip' rows='5' style='width:99%;'><?=$config[cf_intercept_ip]?> </textarea><br>입력된 IP의 컴퓨터는 접근할 수 없음.<br>123.123.+ 도 입력 가능. (엔터로 구분)</td>
</tr>
<tr><td colspan=4 class=line2></td></tr>
<tr><td colspan=4 class=ht></td></tr>
<tr>
<td colspan=4 align=left><?=subtitle("게시판 설정")?></td>
</tr>
<tr><td colspan=4 class=line1></td></tr>
<tr class='ht'>
<td>글읽기 포인트</td>
<td><input type=text class=ed name='cf_read_point' size='10' required itemname='글읽기 포인트' value='<?=$config[cf_read_point]?>'> 점</td>
<td>글쓰기 포인트</td>
<td><input type=text class=ed name='cf_write_point' size='10' required itemname='글쓰기 포인트' value='<?=$config[cf_write_point]?>'> 점</td>
</tr>
<tr class='ht'>
<td>코멘트쓰기 포인트</td>
<td><input type=text class=ed name='cf_comment_point' size='10' required itemname='답변, 코멘트쓰기 포인트' value='<?=$config[cf_comment_point]?>'> 점</td>
<td>다운로드 포인트</td>
<td><input type=text class=ed name='cf_download_point' size='10' required itemname='다운로드받기 포인트' value='<?=$config[cf_download_point]?>'> 점</td>
</tr>
<tr class='ht'>
<td>LINK TARGET</td>
<td><input type=text class=ed name='cf_link_target' size='10' value='<?=$config[cf_link_target]?>'>
<?=help("게시판 내용중 자동으로 링크되는 창의 타켓을 지정합니다.\n\n_self, _top, _blank, _new 를 주로 지정합니다.")?></td>
<td>검색 단위</td>
<td><input type=text class=ed name='cf_search_part' size='10' itemname='검색 단위' value='<?=$config[cf_search_part]?>'> 건 단위로 검색</td>
</tr>
<tr class='ht'>
<td>검색 배경 색상</td>
<td><input type=text class=ed name='cf_search_bgcolor' size='10' required itemname='검색 배경 색상' value='<?=$config[cf_search_bgcolor]?>'></td>
<td>검색 글자 색상</td>
<td><input type=text class=ed name='cf_search_color' size='10' required itemname='검색 글자 색상' value='<?=$config[cf_search_color]?>'></td>
</tr>
<tr class='ht'>
<td>새로운 글쓰기</td>
<td><input type=text class=ed name='cf_delay_sec' size='10' required itemname='새로운 글쓰기' value='<?=$config[cf_delay_sec]?>'> 초 지난후 가능</td>
<td>페이지 표시 수</td>
<td><input type=text class=ed name='cf_write_pages' size='10' required itemname='페이지 표시 수' value='<?=$config[cf_write_pages]?>'> 페이지씩 표시</td>
</tr>
<tr class='ht'>
<td>이미지 업로드 확장자</td>
<td colspan=3><input type=text class=ed name='cf_image_extension' size='80' itemname='이미지 업로드 확장자' value='<?=$config[cf_image_extension]?>'>
<?=help("게시판 글작성시 이미지 파일 업로드 가능 확장자. | 로 구분")?></td>
</tr>
<tr class='ht'>
<td>플래쉬 업로드 확장자</td>
<td colspan=3><input type=text class=ed name='cf_flash_extension' size='80' itemname='플래쉬 업로드 확장자' value='<?=$config[cf_flash_extension]?>'>
<?=help("게시판 글작성시 플래쉬 파일 업로드 가능 확장자. | 로 구분")?></td>
</tr>
<tr class='ht'>
<td>동영상 업로드 확장자</td>
<td colspan=3><input type=text class=ed name='cf_movie_extension' size='80' itemname='동영상 업로드 확장자' value='<?=$config[cf_movie_extension]?>'>
<?=help("게시판 글작성시 동영상 파일 업로드 가능 확장자. | 로 구분")?></td>
</tr>
<tr class='ht'>
<td>단어 필터링
<?=help("입력된 단어가 포함된 내용은 게시할 수 없습니다.\n\n단어와 단어 사이는 ,로 구분합니다.")?></td>
<td colspan=3><textarea class=ed name='cf_filter' rows='7' style='width:99%;'><?=$config[cf_filter]?> </textarea></td>
</tr>
<tr><td colspan=4 class=line2></td></tr>
<tr><td colspan=4 class=ht></td></tr>
<tr class='ht'>
<td colspan=4 align=left><?=subtitle("회원가입 설정")?></td>
</tr>
<tr><td colspan=4 class=line1></td></tr>
<tr class='ht'>
<td>회원 스킨</td>
<td colspan=3><select id=cf_member_skin name=cf_member_skin required itemname="회원가입 스킨">
<?
$arr = get_skin_dir("member");
for ($i=0; $i<count($arr); $i++) {
echo "<option value='$arr[$i]'>$arr[$i]</option>\n";
}
?></select>
<script type="text/javascript"> document.getElementById('cf_member_skin').value="<?=$config[cf_member_skin]?>";</script>
</td>
</tr>
<tr class='ht'>
<td>홈페이지 입력</td>
<td>
<input type='checkbox' name='cf_use_homepage' value='1' <?=$config[cf_use_homepage]?'checked':'';?>> 보이기
<input type='checkbox' name='cf_req_homepage' value='1' <?=$config[cf_req_homepage]?'checked':'';?>> 필수입력
</td>
<td>주소 입력</td>
<td>
<input type='checkbox' name='cf_use_addr' value='1' <?=$config[cf_use_addr]?'checked':'';?>> 보이기
<input type='checkbox' name='cf_req_addr' value='1' <?=$config[cf_req_addr]?'checked':'';?>> 필수입력
</td>
</tr>
<tr class='ht'>
<td>전화번호 입력</td>
<td>
<input type='checkbox' name='cf_use_tel' value='1' <?=$config[cf_use_tel]?'checked':'';?>> 보이기
<input type='checkbox' name='cf_req_tel' value='1' <?=$config[cf_req_tel]?'checked':'';?>> 필수입력
</td>
<td>핸드폰 입력</td>
<td>
<input type='checkbox' name='cf_use_hp' value='1' <?=$config[cf_use_hp]?'checked':'';?>> 보이기
<input type='checkbox' name='cf_req_hp' value='1' <?=$config[cf_req_hp]?'checked':'';?>> 필수입력
</td>
</tr>
<tr class='ht'>
<td>서명 입력</td>
<td>
<input type='checkbox' name='cf_use_signature' value='1' <?=$config[cf_use_signature]?'checked':'';?>> 보이기
<input type='checkbox' name='cf_req_signature' value='1' <?=$config[cf_req_signature]?'checked':'';?>> 필수입력
</td>
<td>자기소개 입력</td>
<td>
<input type='checkbox' name='cf_use_profile' value='1' <?=$config[cf_use_profile]?'checked':'';?>> 보이기
<input type='checkbox' name='cf_req_profile' value='1' <?=$config[cf_req_profile]?'checked':'';?>> 필수입력
</td>
</tr>
<tr class='ht'>
<td>회원가입시 권한</td>
<td><? echo get_member_level_select('cf_register_level', 1, 9, $config[cf_register_level]) ?></td>
<td>회원가입시 포인트</td>
<td><input type=text class=ed name='cf_register_point' size='5' value='<?=$config[cf_register_point]?>'> 점</td>
</tr>
<tr class='ht'>
<!-- <td>주민등록번호</td>
<td><input type='checkbox' name='cf_use_jumin' value='1' <?=$config[cf_use_jumin]?'checked':'';?>> 사용
<?=help("주민등록번호는 암호화하여 저장하므로 회원정보 DB가 유출되어도 알 수 없습니다.")?></td> -->
<td>회원탈퇴후 삭제일</td>
<td colspan="3"><input type=text class=ed name='cf_leave_day' size='5' value='<?=$config[cf_leave_day]?>'> 일 후 자동 삭제</td>
</tr>
<tr class='ht'>
<td>회원아이콘 사용</td>
<td>
<select name='cf_use_member_icon'>
<option value='0'>미사용
<option value='1'>아이콘만 표시
<option value='2'>아이콘+이름 표시
</select>
<?=help("게시물에 게시자 별명 대신 아이콘 사용")?>
</td>
<script type='text/javascript'> document.fconfigform.cf_use_member_icon.value = '<?=$config[cf_use_member_icon]?>'; </script>
<td>아이콘 업로드 권한</td>
<td colspan=3><? echo get_member_level_select('cf_icon_level', 1, 9, $config[cf_icon_level]) ?> 이상</td>
</tr>
<tr class='ht'>
<td>회원아이콘 용량</td>
<td><input type=text class=ed name='cf_member_icon_size' size='5' value='<?=$config[cf_member_icon_size]?>'> 바이트 이하</td>
<td>회원아이콘 사이즈</td>
<td>폭 <input type=text class=ed name='cf_member_icon_width' size='5' value='<?=$config[cf_member_icon_width]?>'> 픽셀 , 높이 <input type=text class=ed name='cf_member_icon_height' size='5' value='<?=$config[cf_member_icon_height]?>'> 픽셀 이하</td>
</tr>
<tr class='ht'>
<td>추천인제도 사용</td>
<td><input type='checkbox' name='cf_use_recommend' value='1' <?=$config[cf_use_recommend]?'checked':'';?>> 사용</td>
<td>추천인 포인트</td>
<td><input type=text class=ed name='cf_recommend_point' size='5' value='<?=$config[cf_recommend_point]?>'> 점</td>
</tr>
<tr class='ht'>
<td>아이디,별명 금지단어
<?=help("입력된 단어가 포함된 내용은 회원아이디, 별명으로 사용할 수 없습니다.\n\n단어와 단어 사이는 , 로 구분합니다.")?></td>
<td valign=top><textarea class=ed name='cf_prohibit_id' rows='5' style='width:99%;'><?=$config[cf_prohibit_id]?> </textarea></td>
<td>입력 금지 메일
<?=help("hanmail.net과 같은 메일 주소는 입력을 못합니다.\n\n엔터로 구분합니다.")?></td>
<td valign=top><textarea class=ed name='cf_prohibit_email' rows='5' style='width:99%;'><?=$config[cf_prohibit_email]?> </textarea><br></td>
</tr>
<tr class='ht'>
<td>회원가입약관</td>
<td valign=top colspan=3><textarea class=ed name='cf_stipulation' rows='10' style='width:99%;'><?=$config[cf_stipulation]?> </textarea></td>
</tr>
<tr class='ht'>
<td>개인정보취급방침</td>
<td valign=top colspan=3><textarea class=ed name='cf_privacy' rows='10' style='width:99%;'><?=$config[cf_privacy]?> </textarea></td>
</tr>
<tr><td colspan=4 class=line2></td></tr>
<tr><td colspan=4 class=ht></td></tr>
<tr class='ht'>
<td colspan=4 align=left><?=subtitle("메일 설정")?></td>
</tr>
<tr><td colspan=4 class=line1></td></tr>
<tr class='ht'>
<td>메일발송 사용</td>
<td colspan=3><input type=checkbox name=cf_email_use value='1' <?=$config[cf_email_use]?'checked':'';?>> 사용 (체크하지 않으면 메일발송을 아예 사용하지 않습니다. 메일 테스트도 불가합니다.)</td>
</tr>
<tr class='ht'>
<td>메일인증 사용</td>
<td><input type='checkbox' name='cf_use_email_certify' value='1' <?=$config[cf_use_email_certify]?'checked':'';?>> 사용
<?=help("메일에 배달된 인증 주소를 클릭하여야 회원으로 인정합니다.");?></td>
</tr>
<tr class='ht'>
<td>폼메일 사용 여부</td>
<td><input type='checkbox' name='cf_formmail_is_member' value='1' <?=$config[cf_formmail_is_member]?'checked':'';?>> 회원만 사용
<?=help("체크하지 않으면 비회원도 사용 할 수 있습니다.")?></td>
</tr>
<tr class='ht'>
<td><span class=title>게시판 글 작성시</span></td>
</tr>
<tr class='ht'>
<td>최고관리자 메일발송</td>
<td colspan=3><input type=checkbox name=cf_email_wr_super_admin value='1' <?=$config[cf_email_wr_super_admin]?'checked':'';?>> 사용 (최고관리자에게 메일을 발송합니다.)</td>
</tr>
<tr class='ht'>
<td>그룹관리자 메일발송</td>
<td colspan=3><input type=checkbox name=cf_email_wr_group_admin value='1' <?=$config[cf_email_wr_group_admin]?'checked':'';?>> 사용 (그룹관리자에게 메일을 발송합니다.)</td>
</tr>
<tr class='ht'>
<td>게시판관리자 메일발송</td>
<td colspan=3><input type=checkbox name=cf_email_wr_board_admin value='1' <?=$config[cf_email_wr_board_admin]?'checked':'';?>> 사용 (게시판관리자에게 메일을 발송합니다.)</td>
</tr>
<tr class='ht'>
<td>원글 메일발송</td>
<td colspan=3><input type=checkbox name=cf_email_wr_write value='1' <?=$config[cf_email_wr_write]?'checked':'';?>> 사용 (게시자님께 메일을 발송합니다.)</td>
</tr>
<tr class='ht'>
<td>코멘트 메일발송</td>
<td colspan=3><input type=checkbox name=cf_email_wr_comment_all value='1' <?=$config[cf_email_wr_comment_all]?'checked':'';?>> 사용 (원글에 코멘트가 올라오는 경우 코멘트 쓴 모든 분들께 메일을 발송합니다.)</td>
</tr>
<tr class='ht'>
<td><span class=title>회원 가입시</span></td>
</tr>
<tr class='ht'>
<td>최고관리자 메일발송</td>
<td colspan=3><input type=checkbox name=cf_email_mb_super_admin value='1' <?=$config[cf_email_mb_super_admin]?'checked':'';?>> 사용 (최고관리자에게 메일을 발송합니다.)</td>
</tr>
<tr class='ht'>
<td>회원님께 메일발송</td>
<td colspan=3><input type=checkbox name=cf_email_mb_member value='1' <?=$config[cf_email_mb_member]?'checked':'';?>> 사용 (회원가입한 회원님께 메일을 발송합니다.)</td>
</tr>
<tr class='ht'>
<td><span class=title>투표 기타의견 작성시</span></td>
</tr>
<tr class='ht'>
<td>최고관리자 메일발송</td>
<td colspan=3><input type=checkbox name=cf_email_po_super_admin value='1' <?=$config[cf_email_po_super_admin]?'checked':'';?>> 사용 (최고관리자에게 메일을 발송합니다.)</td>
</tr>
<tr><td colspan=4 class=line2></td></tr>
<tr><td colspan=4 class=ht></td></tr>
<tr class='ht'>
<td colspan=4 align=left><?=subtitle("여분 필드")?></td>
</tr>
<tr><td colspan=4 class=line1></td></tr>
<? for ($i=1; $i<=10; $i=$i+2) { $k=$i+1; ?>
<tr class='ht'>
<td><input type=text class=ed name='cf_<?=$i?>_subj' value='<?=get_text($config["cf_{$i}_subj"])?>' title='여분필드 <?=$i?> 제목' style='text-align:right;font-weight:bold;' size=15></td>
<td><input type='text' class=ed style='width:99%;' name=cf_<?=$i?> value='<?=$config["cf_$i"]?>' title='여분필드 <?=$i?> 설정값'></td>
<td><input type=text class=ed name='cf_<?=$k?>_subj' value='<?=get_text($config["cf_{$k}_subj"])?>' title='여분필드 <?=$k?> 제목' style='text-align:right;font-weight:bold;' size=15></td>
<td><input type='text' class=ed style='width:99%;' name=cf_<?=$k?> value='<?=$config["cf_$k"]?>' title='여분필드 <?=$k?> 설정값'></td>
</tr>
<? } ?>
<tr><td colspan=4 class=line2></td></tr>
<tr><td colspan=4 class=ht></td></tr>
<tr class='ht'>
<td colspan=4 align=left>
<?=subtitle("XSS / CSRF 방지")?>
</td>
</tr>
<tr><td colspan=4 class=line1></td></tr>
<tr class='ht'>
<td>
관리자 패스워드
</td>
<td colspan=3>
<input class='ed' type='password' name='admin_password' itemname="관리자 패스워드" required>
<?=help("관리자 권한을 빼앗길 것에 대비하여 로그인한 관리자의 패스워드를 한번 더 묻는것 입니다.");?>
</td>
</tr>
<tr><td colspan=4 class=line2></td></tr>
<tr><td colspan=4 class=ht></td></tr>
</table>
<p align=center>
<input type=submit class=btn1 accesskey='s' value=' 확 인 '>
</form>
<script type="text/javascript">
function fconfigform_submit(f)
{
f.action = "./config_form_update.php";
return true;
}
</script>
<?
include_once ("./admin.tail.php");
?>

123
adm/config_form_update.php Normal file
View File

@ -0,0 +1,123 @@
<?
$sub_menu = "100100";
include_once("./_common.php");
check_demo();
auth_check($auth[$sub_menu], "w");
if ($is_admin != "super")
alert("최고관리자만 접근 가능합니다.");
if ($member[mb_password] != sql_password($_POST['admin_password'])) {
alert("패스워드가 다릅니다.");
}
$mb = get_member($cf_admin);
if (!$mb[mb_id])
alert("최고관리자 회원아이디가 존재하지 않습니다.");
check_token();
$sql = " update $g4[config_table]
set cf_title = '$_POST[cf_title]',
cf_admin = '$_POST[cf_admin]',
cf_use_point = '$_POST[cf_use_point]',
cf_use_norobot = '$_POST[cf_use_norobot]',
cf_use_copy_log = '$_POST[cf_use_copy_log]',
cf_use_email_certify = '$_POST[cf_use_email_certify]',
cf_login_point = '$_POST[cf_login_point]',
cf_cut_name = '$_POST[cf_cut_name]',
cf_nick_modify = '$_POST[cf_nick_modify]',
cf_new_skin = '$_POST[cf_new_skin]',
cf_new_rows = '$_POST[cf_new_rows]',
cf_search_skin = '$_POST[cf_search_skin]',
cf_connect_skin = '$_POST[cf_connect_skin]',
cf_read_point = '$_POST[cf_read_point]',
cf_write_point = '$_POST[cf_write_point]',
cf_comment_point = '$_POST[cf_comment_point]',
cf_download_point = '$_POST[cf_download_point]',
cf_search_bgcolor = '$_POST[cf_search_bgcolor]',
cf_search_color = '$_POST[cf_search_color]',
cf_write_pages = '$_POST[cf_write_pages]',
cf_link_target = '$_POST[cf_link_target]',
cf_delay_sec = '$_POST[cf_delay_sec]',
cf_filter = '$_POST[cf_filter]',
cf_possible_ip = '".trim($_POST['cf_possible_ip'])."',
cf_intercept_ip = '".trim($_POST['cf_intercept_ip'])."',
cf_member_skin = '$_POST[cf_member_skin]',
cf_use_homepage = '$_POST[cf_use_homepage]',
cf_req_homepage = '$_POST[cf_req_homepage]',
cf_use_tel = '$_POST[cf_use_tel]',
cf_req_tel = '$_POST[cf_req_tel]',
cf_use_hp = '$_POST[cf_use_hp]',
cf_req_hp = '$_POST[cf_req_hp]',
cf_use_addr = '$_POST[cf_use_addr]',
cf_req_addr = '$_POST[cf_req_addr]',
cf_use_signature = '$_POST[cf_use_signature]',
cf_req_signature = '$_POST[cf_req_signature]',
cf_use_profile = '$_POST[cf_use_profile]',
cf_req_profile = '$_POST[cf_req_profile]',
cf_register_level = '$_POST[cf_register_level]',
cf_register_point = '$_POST[cf_register_point]',
cf_icon_level = '$_POST[cf_icon_level]',
cf_use_recommend = '$_POST[cf_use_recommend]',
cf_recommend_point = '$_POST[cf_recommend_point]',
cf_leave_day = '$_POST[cf_leave_day]',
cf_search_part = '$_POST[cf_search_part]',
cf_email_use = '$_POST[cf_email_use]',
cf_email_wr_super_admin = '$_POST[cf_email_wr_super_admin]',
cf_email_wr_group_admin = '$_POST[cf_email_wr_group_admin]',
cf_email_wr_board_admin = '$_POST[cf_email_wr_board_admin]',
cf_email_wr_write = '$_POST[cf_email_wr_write]',
cf_email_wr_comment_all = '$_POST[cf_email_wr_comment_all]',
cf_email_mb_super_admin = '$_POST[cf_email_mb_super_admin]',
cf_email_mb_member = '$_POST[cf_email_mb_member]',
cf_email_po_super_admin = '$_POST[cf_email_po_super_admin]',
cf_prohibit_id = '$_POST[cf_prohibit_id]',
cf_prohibit_email = '$_POST[cf_prohibit_email]',
cf_new_del = '$_POST[cf_new_del]',
cf_memo_del = '$_POST[cf_memo_del]',
cf_visit_del = '$_POST[cf_visit_del]',
cf_popular_del = '$_POST[cf_popular_del]',
cf_use_jumin = '$_POST[cf_use_jumin]',
cf_use_member_icon = '$_POST[cf_use_member_icon]',
cf_member_icon_size = '$_POST[cf_member_icon_size]',
cf_member_icon_width = '$_POST[cf_member_icon_width]',
cf_member_icon_height = '$_POST[cf_member_icon_height]',
cf_login_minutes = '$_POST[cf_login_minutes]',
cf_image_extension = '$_POST[cf_image_extension]',
cf_flash_extension = '$_POST[cf_flash_extension]',
cf_movie_extension = '$_POST[cf_movie_extension]',
cf_formmail_is_member = '$_POST[cf_formmail_is_member]',
cf_page_rows = '$_POST[cf_page_rows]',
cf_stipulation = '$_POST[cf_stipulation]',
cf_privacy = '$_POST[cf_privacy]',
cf_open_modify = '$_POST[cf_open_modify]',
cf_memo_send_point = '$_POST[cf_memo_send_point]',
cf_1_subj = '$_POST[cf_1_subj]',
cf_2_subj = '$_POST[cf_2_subj]',
cf_3_subj = '$_POST[cf_3_subj]',
cf_4_subj = '$_POST[cf_4_subj]',
cf_5_subj = '$_POST[cf_5_subj]',
cf_6_subj = '$_POST[cf_6_subj]',
cf_7_subj = '$_POST[cf_7_subj]',
cf_8_subj = '$_POST[cf_8_subj]',
cf_9_subj = '$_POST[cf_9_subj]',
cf_10_subj = '$_POST[cf_10_subj]',
cf_1 = '$_POST[cf_1]',
cf_2 = '$_POST[cf_2]',
cf_3 = '$_POST[cf_3]',
cf_4 = '$_POST[cf_4]',
cf_5 = '$_POST[cf_5]',
cf_6 = '$_POST[cf_6]',
cf_7 = '$_POST[cf_7]',
cf_8 = '$_POST[cf_8]',
cf_9 = '$_POST[cf_9]',
cf_10 = '$_POST[cf_10]' ";
sql_query($sql);
//sql_query(" OPTIMIZE TABLE `$g4[config_table]` ");
goto_url("./config_form.php", false);
?>

243
adm/dialog_form.php Normal file
View File

@ -0,0 +1,243 @@
<?
$sub_menu = "300300";
include_once("./_common.php");
include_once ("$g4[path]/lib/cheditor4.lib.php");
auth_check($auth[$sub_menu], "w");
$html_title = "다이얼로그";
if ($w == "u")
{
$html_title .= " 수정";
$sql = " select * from $g4[dialog_table] where di_id = '$di_id' ";
$di = sql_fetch($sql);
if (!$di[di_id]) alert("등록된 자료가 없습니다.");
}
else
{
$html_title .= " 입력";
$di[di_disable_hours] = 24;
$di[di_speeds] = 0;
$di[di_width] = 0;
$di[di_height] = 0;
$di[di_draggable] = true;
$di[di_escape] = true;
}
$g4[title] = $html_title;
include_once ("$g4[admin_path]/admin.head.php");
?>
<?=subtitle($html_title)?>
<script src="<?=$g4[cheditor4_path]?>/cheditor.js"></script>
<?=cheditor1('di_content', '100%', '350');?>
<form name=fdialog method=post action="#" onsubmit="return fdialog_check(this);" style="margin:0px;">
<input type=hidden name=w value='<? echo $w ?>'>
<input type=hidden name=di_id value='<? echo $di_id ?>'>
<table cellpadding=0 cellspacing=0 width=100%>
<colgroup width=15%>
<colgroup width=35% bgcolor=#ffffff>
<colgroup width=15%>
<colgroup width=35% bgcolor=#ffffff>
<tr><td colspan=4 height=2 bgcolor=#0E87F9></td></tr>
<tr class=ht>
<td>테마</td>
<td colspan=3>
<select name=di_ui_theme>
<option value='base'>기본</option>
<option value='black-tie'>black-tie</option>
<option value='blitzer'>blitzer</option>
<option value='cupertino'>cupertino</option>
<option value='dark-hive'>dark-hive</option>
<option value='dot-luv'>dot-luv</option>
<option value='eggplant'>eggplant</option>
<option value='excite-bike'>excite-bike</option>
<option value='flick'>flick</option>
<option value='hot-sneaks'>hot-sneaks</option>
<option value='humanity'>humanity</option>
<option value='le-frog'>le-frog</option>
<option value='mint-choc'>mint-choc</option>
<option value='overcast'>overcast</option>
<option value='pepper-grinder'>pepper-grinder</option>
<option value='redmond'>redmond</option>
<option value='smoothness'>smoothness</option>
<option value='south-street'>south-street</option>
<option value='start'>start</option>
<option value='sunny'>sunny</option>
<option value='swanky-purse'>swanky-purse</option>
<option value='trontastic'>trontastic</option>
<option value='ui-darkness'>ui-darkness</option>
<option value='ui-lightness'>ui-lightness</option>
<option value='vader'>vader</option>
</select>
<script> document.fdialog.di_ui_theme.value = "<?=$di[di_ui_theme]?>"; </script>
<a href="http://jqueryui.com/themeroller/" target="_blank">http://jqueryui.com/themeroller/</a> 의 Gallery 참고
</td>
</tr>
<tr class=ht>
<td>시간</td>
<td colspan=3>
<input type=text name=di_disable_hours class=ed value="<?=$di[di_disable_hours]?>" size=5> 동안 창을 다시 띄우지 않음
</td>
</tr>
<tr class=ht>
<td>시작일시</td>
<td>
<input type=text class=ed name=di_begin_time size=21 maxlength=19 value='<? echo $di[di_begin_time] ?>' required itemname="시작일시">
<input type=checkbox name=di_begin_chk value="<? echo date("Y-m-d 00:00:00", $g4[server_time]); ?>" onclick="if (this.checked == true) this.form.di_begin_time.value=this.form.di_begin_chk.value; else this.form.di_begin_time.value = this.form.di_begin_time.defaultValue;">오늘
<td>종료일시</td>
<td>
<input type=text class=ed name=di_end_time size=21 maxlength=19 value='<? echo $di[di_end_time] ?>' required itemname="종료일시">
<input type=checkbox name=di_end_chk value="<? echo date("Y-m-d 23:59:59", $g4[server_time]+(60*60*24*7)); ?>" onclick="if (this.checked == true) this.form.di_end_time.value=this.form.di_end_chk.value; else this.form.di_end_time.value = this.form.di_end_time.defaultValue;">오늘+7일
</tr>
<tr class=ht>
<td>출력 스피드</td>
<td colspan=3>
<input type=text class=ed name=di_speeds size=5 value='<?=$di[di_speeds]?>'>
<?=help("0 이 가장 빠르고 숫자가 높으면 창의 출력 및 닫기 속도가 느려짐");?>
예) 1000
</td>
</tr>
<tr class=ht>
<td>창위치</td>
<td>
<select name=di_position_sel>
<option value="">직접입력</option>
<option value="['top']">top</option>
<option value="['left']">left</option>
<option value="['center']">center</option>
<option value="['right']">right</option>
<option value="['bottom']">bottom</option>
</select>
<input type=text name=di_position class=ed value="<?=$di[di_position]?>">
<?=help("입력이 없으면 중앙에 출력합니다.<br><br>왼쪽, 상단을 [100,50] 과 같이 입력하거나, ['right','top'] 과 같이 입력할 수 있습니다.");?>
</td>
<td>창 드래그</td>
<td>
<input type=checkbox name=di_draggable value='1' <?=($di[di_draggable]?"checked":"");?>> 가능
<?=help("창을 드래그 할 수 있음");?>
</td>
</tr>
<tr class=ht>
<td>창크기 폭</td>
<td>
<input type=text class=ed name=di_width size=5 value='<? echo $di[di_width] ?>' required itemname="창크기폭"> px
<?=help("0 으로 설정하면 폭을 자동으로 맞춥니다.");?>
</td>
<td>창크기 높이</td>
<td>
<input type=text class=ed name=di_height size=5 value='<? echo $di[di_height] ?>' required itemname="창크기높이"> px
<?=help("0 으로 설정하면 높이를 자동으로 맞춥니다.");?>
</td>
</tr>
<tr class=ht>
<td>modal</td>
<td>
<input type=checkbox name=di_modal value='1' <?=($di[di_modal]?"checked":"");?>> 사용
<?=help("창을 닫기전에는 부모창을 선택할 수 없음");?>
</td>
<td>사이즈 조절 가능</td>
<td>
<input type=checkbox name=di_resizable value='1' <?=($di[di_resizable]?"checked":"");?>> 사용
<?=help("창의 리사이즈가 가능하게 할때 사용합니다.");?>
</td>
</tr>
<tr class=ht>
<td>show</td>
<td>
<!-- http://docs.jquery.com/UI/Effects/ -->
<select name=di_show>
<option value=''>기본</option>
<option value='blind'>blind</option>
<option value='clip'>clip</option>
<option value='drop'>drop</option>
<option value='explode'>explode</option>
<option value='fade'>fade</option>
<option value='fold'>fold</option>
<option value='puff'>puff</option>
<option value='slide'>slide</option>
<option value='scale'>scale</option>
<option value='bounce'>bounce</option>
<option value='highlight'>highlight</option>
<option value='pulsate'>pulsate</option>
<option value='shake'>shake</option>
<option value='size'>size</option>
<option value='transfer'>transfer</option>
</select>
<script> document.fdialog.di_show.value = "<?=$di[di_show]?>"; </script>
<?=help("창이 보여지는 효과");?>
</td>
<td>hide</td>
<td>
<select name=di_hide>
<option value=''>기본</option>
<option value='blind'>blind</option>
<option value='clip'>clip</option>
<option value='drop'>drop</option>
<option value='explode'>explode</option>
<option value='fade'>fade</option>
<option value='fold'>fold</option>
<option value='puff'>puff</option>
<option value='slide'>slide</option>
<option value='scale'>scale</option>
<option value='bounce'>bounce</option>
<option value='highlight'>highlight</option>
<option value='pulsate'>pulsate</option>
</select>
<script> document.fdialog.di_hide.value = "<?=$di[di_hide]?>"; </script>
<?=help("창이 가려지는 효과");?>
</td>
</tr>
<tr class=ht>
<td>ESC</td>
<td>
<input type=checkbox name=di_escape value='1' <?=($di[di_escape]?"checked":"");?>> 사용
<?=help("ESC 키를 누르면 창이 닫힙니다.");?>
</td>
<td>zIndex</td>
<td>
<input type=text name=di_zindex class=ed value="<?=$di[di_zindex]?>" size=10>
<?=help("창이 출력되는 순서. 숫자가 높을수록 우선 출력됨.");?>
</td>
</tr>
<tr class=ht>
<td>창제목</td>
<td colspan=3><input type=text class=ed name=di_subject style="width:99%;" value='<? echo stripslashes($di[di_subject]) ?>' required itemname="제목"></td>
</tr>
<tr>
<td>내용</td>
<td colspan=3 style='padding-top:5px; padding-bottom:5px;'><?=cheditor2('di_content', $di[di_content]);?></td>
</tr>
<tr><td colspan=4 height=1 bgcolor=CCCCCC></td></tr>
</table>
<p align=center>
<input type=submit class=btn1 accesskey='s' value=' 확 인 '>&nbsp;
<input type=button class=btn1 accesskey='l' value=' 목 록 ' onclick="document.location.href='./dialog_list.php';">
</form>
<script type="text/javascript">
function fdialog_check(f)
{
<?=cheditor3('di_content');?>
f.action = "./dialog_form_update.php";
return true;
}
document.fdialog.di_subject.focus();
$(function() {
$("[name=di_position_sel]").bind("change", function() {
if ($(this).val()) {
$("[name='di_position']").val( $(this).val() );
}
});
});
</script>
<?
include_once ("$g4[admin_path]/admin.tail.php");
?>

View File

@ -0,0 +1,61 @@
<?
$sub_menu = "300300";
include_once("./_common.php");
if ($w == "u" || $w == "d")
check_demo();
if ($W == 'd')
auth_check($auth[$sub_menu], "d");
else
auth_check($auth[$sub_menu], "w");
$sql_common = " di_ui_theme = '$di_ui_theme',
di_begin_time = '$di_begin_time',
di_end_time = '$di_end_time',
di_subject = '".addslashes($di_subject)."',
di_content = '".addslashes($di_content)."',
di_speeds = '$di_speeds',
di_disable_hours = '$di_disable_hours',
di_position = '$di_position',
di_draggable = '$di_draggable',
di_height = '$di_height',
di_width = '$di_width',
di_modal = '$di_modal',
di_resizable = '$di_resizable',
di_show = '$di_show',
di_hide = '$di_hide',
di_escape = '$di_escape',
di_zindex = '$di_zindex'
";
if($w == "")
{
$sql = " alter table $g4[dialog_table] auto_increment=1 ";
sql_query($sql);
$sql = " insert $g4[dialog_table] set $sql_common ";
sql_query($sql);
$di_id = mysql_insert_id();
}
else if ($w == "u")
{
$sql = " update $g4[dialog_table] set $sql_common where di_id = '$di_id' ";
sql_query($sql);
}
else if ($w == "d")
{
$sql = " delete from $g4[dialog_table] where di_id = '$di_id' ";
sql_query($sql);
}
if ($w == "d")
{
goto_url("./dialog_list.php");
}
else
{
goto_url("./dialog_form.php?w=u&di_id=$di_id");
}
?>

114
adm/dialog_list.php Normal file
View File

@ -0,0 +1,114 @@
<?
$sub_menu = "300300";
include_once("./_common.php");
auth_check($auth[$sub_menu], "r");
$g4[title] = "다이얼로그관리";
include_once ("$g4[admin_path]/admin.head.php");
$sql_common = " from $g4[dialog_table] ";
// 테이블의 전체 레코드수만 얻음
$sql = " select count(*) as cnt " . $sql_common;
$row = sql_fetch($sql, false);
if (!$row) {
sql_query("
CREATE TABLE IF NOT EXISTS `$g4[dialog_table]` (
`di_id` int(11) NOT NULL auto_increment,
`di_ui_theme` varchar(255) NOT NULL,
`di_begin_time` datetime NOT NULL,
`di_end_time` datetime NOT NULL,
`di_subject` varchar(255) NOT NULL,
`di_content` text NOT NULL,
`di_speeds` int(11) NOT NULL,
`di_position` varchar(255) NOT NULL,
`di_draggable` tinyint(4) NOT NULL,
`di_width` smallint(6) NOT NULL,
`di_height` smallint(6) NOT NULL,
`di_modal` tinyint(4) NOT NULL,
`di_resizable` tinyint(4) NOT NULL,
`di_disable_hours` tinyint(4) NOT NULL,
`di_show` varchar(255) NOT NULL,
`di_hide` varchar(255) NOT NULL,
`di_escape` tinyint(4) NOT NULL,
`di_zindex` int(11) NOT NULL,
PRIMARY KEY (`di_id`)
)");
}
$total_count = $row[cnt];
$sql = "select * $sql_common order by di_id desc ";
$result = sql_query($sql);
?>
<table width=100%>
<tr>
<td width=20%>&nbsp;</td>
<td width=60% align=center>&nbsp;</td>
<td width=20% align=right>건수 : <? echo $total_count ?>&nbsp;</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 width=100% border=0>
<colgroup width=40>
<colgroup width=100>
<colgroup width=100>
<colgroup width=40>
<colgroup width=50>
<colgroup width=50>
<colgroup width=50>
<colgroup width=50>
<colgroup width=''>
<colgroup width=100>
<tr><td colspan=10 height=2 bgcolor=#0E87F9></td></tr>
<tr align=center class=ht>
<td>번호</td>
<td>시작일시</td>
<td>종료일시</td>
<td>modal</td>
<td>ESC</td>
<td>위치</td>
<td>Height</td>
<td>Width</td>
<td>제목</td>
<td><a href='./dialog_form.php'><img src='<?=$g4[admin_path]?>/img/icon_insert.gif' border=0></a></td>
</tr>
<tr><td colspan=10 height=1 bgcolor=#CCCCCC></td></tr>
<?
for ($i=0; $row=mysql_fetch_array($result); $i++)
{
$s_mod = icon("수정", "./dialog_form.php?w=u&di_id=$row[di_id]");
$s_del = icon("삭제", "javascript:del('./dialog_form_update.php?w=d&di_id=$row[di_id]');");
$s_vie = icon("보기", "./dialog_view.php?di_id=$row[di_id]");
$list = $i%2;
echo "
<tr class='list$list center ht'>
<td>$row[di_id]</td>
<td>".substr($row['di_begin_time'],2,14)."</td>
<td>".substr($row['di_end_time'],2,14)."</td>
<td>$row[di_modal]</td>
<td>$row[di_escape]</td>
<td align=left>$row[di_position]</td>
<td>$row[di_height]</td>
<td>$row[di_width]</td>
<td align=left>$row[di_subject]</td>
<td>$s_mod $s_del $s_vie</td>
</tr>";
}
if ($i == 0) {
echo "<tr><td colspan=10 align=center height=100 bgcolor=#ffffff><span class=point>자료가 한건도 없습니다.</span></td></tr>\n";
}
?>
<tr><td colspan=10 height=1 bgcolor=CCCCCC></td></tr>
</table>
<p>* 같은 페이지에 다이얼로그 창이 2개 이상 뜨는 경우 나중에 설정한 테마가 적용됩니다.</p>
<?
include_once ("$g4[admin_path]/admin.tail.php");
?>

16
adm/dialog_view.php Normal file
View File

@ -0,0 +1,16 @@
<?
$sub_menu = "300300";
include_once("./_common.php");
auth_check($auth[$sub_menu], "r");
$g4[title] = "다이얼로그관리";
include_once ("$g4[admin_path]/admin.head.php");
$dialog_id = "dialog_".$di_id;
$_COOKIE[$dialog_id] = "";
echo g4_dialog((int)$_GET[di_id]);
include_once ("$g4[admin_path]/admin.tail.php");
?>

BIN
adm/img/btn_down.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

BIN
adm/img/btn_search.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 B

BIN
adm/img/btn_up.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 B

BIN
adm/img/dot.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 B

BIN
adm/img/graph.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 826 B

BIN
adm/img/home.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 B

BIN
adm/img/icon.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 B

BIN
adm/img/icon_copy.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 726 B

BIN
adm/img/icon_delete.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 B

BIN
adm/img/icon_group.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 710 B

BIN
adm/img/icon_help.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 B

BIN
adm/img/icon_insert.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
adm/img/icon_modify.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 754 B

BIN
adm/img/icon_more.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 982 B

BIN
adm/img/icon_move.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 735 B

BIN
adm/img/icon_title.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 311 B

BIN
adm/img/icon_view.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 726 B

BIN
adm/img/icon_viewer.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 B

BIN
adm/img/logo.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
adm/img/logout.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 B

BIN
adm/img/menu100.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
adm/img/menu200.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
adm/img/menu300.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
adm/img/menu400.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
adm/img/menu500.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
adm/img/navi_icon.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 B

BIN
adm/img/title_menu.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 B

BIN
adm/img/title_menu100.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 619 B

BIN
adm/img/title_menu200.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 557 B

BIN
adm/img/title_menu300.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 598 B

BIN
adm/img/title_menu400.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 677 B

BIN
adm/img/title_menu500.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 681 B

BIN
adm/img/top.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 B

377
adm/index.php Normal file
View File

@ -0,0 +1,377 @@
<?
include_once("./_common.php");
$g4['title'] = "관리자메인";
include_once ("./admin.head.php");
$new_member_rows = 5;
$new_point_rows = 5;
$new_write_rows = 5;
$sql_common = " from $g4[member_table] ";
$sql_search = " where (1) ";
//if ($is_admin == 'group') $sql_search .= " and mb_level = '$member[mb_level]' ";
if ($is_admin != 'super')
$sql_search .= " and mb_level <= '$member[mb_level]' ";
if (!isset($sst)) {
$sst = "mb_datetime";
$sod = "desc";
}
$sql_order = " order by $sst $sod ";
$sql = " select count(*) as cnt
$sql_common
$sql_search
$sql_order ";
$row = sql_fetch($sql);
$total_count = $row['cnt'];
// 탈퇴회원수
$sql = " select count(*) as cnt
$sql_common
$sql_search
and mb_leave_date <> ''
$sql_order ";
$row = sql_fetch($sql);
$leave_count = $row['cnt'];
// 차단회원수
$sql = " select count(*) as cnt
$sql_common
$sql_search
and mb_intercept_date <> ''
$sql_order ";
$row = sql_fetch($sql);
$intercept_count = $row['cnt'];
$sql = " select *
$sql_common
$sql_search
$sql_order
limit $new_member_rows ";
$result = sql_query($sql);
$colspan = 12;
?>
<?=subtitle("신규가입회원 {$new_member_rows}건", "./member_list.php");?>
<table width=100%>
<tr>
<td width=50% align=left><?//=$listall?> (총회원수 : <?=number_format($total_count)?>, <font color=orange>차단 : <?=number_format($intercept_count)?></font>, <font color=crimson>탈퇴 : <?=number_format($leave_count)?></font>)</td>
<td width=50% align=right></td>
</tr>
</table>
<table width=100% cellpadding=0 cellspacing=0>
<input type=hidden name=sst value='<?=$sst?>'>
<input type=hidden name=sod value='<?=$sod?>'>
<input type=hidden name=sfl value='<?=$sfl?>'>
<input type=hidden name=stx value='<?=$stx?>'>
<input type=hidden name=page value='<?=$page?>'>
<colgroup width=80>
<colgroup width=80>
<colgroup width=>
<colgroup width=40>
<colgroup width=50>
<colgroup width=80>
<colgroup width=40>
<colgroup width=40>
<colgroup width=40>
<colgroup width=40>
<colgroup width=40>
<tr><td colspan='<?=$colspan?>' class='line1'></td></tr>
<tr class='bgcol1 bold col1 ht center'>
<td>회원아이디</td>
<td>이름</td>
<td>별명</td>
<td>권한</td>
<td>포인트</td>
<td>최종접속</td>
<td title='메일수신허용여부'>수신</td>
<td title='정보공개여부'>공개</td>
<td title='이메일인증'>인증</td>
<td>차단</td>
<td title='접근가능한 그룹수'>그룹</td>
</tr>
<tr><td colspan='<?=$colspan?>' class='line2'></td></tr>
<?
for ($i=0; $row=sql_fetch_array($result); $i++)
{
// 접근가능한 그룹수
$sql2 = " select count(*) as cnt from $g4[group_member_table] where mb_id = '$row[mb_id]' ";
$row2 = sql_fetch($sql2);
$group = "";
if ($row2['cnt'])
$group = "<a href='./boardgroupmember_form.php?mb_id=$row[mb_id]'>$row2[cnt]</a>";
if ($is_admin == 'group')
{
$s_mod = "";
$s_del = "";
}
else
{
$s_mod = "<a href=\"./member_form.php?$qstr&w=u&mb_id=$row[mb_id]\"><img src='img/icon_modify.gif' border=0 title='수정'></a>";
$s_del = "<a href=\"javascript:del('./member_delete.php?$qstr&w=d&mb_id=$row[mb_id]&url=$_SERVER[PHP_SELF]');\"><img src='img/icon_delete.gif' border=0 title='삭제'></a>";
}
$s_grp = "<a href='./boardgroupmember_form.php?mb_id=$row[mb_id]'><img src='img/icon_group.gif' border=0 title='그룹'></a>";
$leave_date = $row['mb_leave_date'] ? $row['mb_leave_date'] : date("Ymd", $g4['server_time']);
$intercept_date = $row['mb_intercept_date'] ? $row['mb_intercept_date'] : date("Ymd", $g4['server_time']);
$mb_nick = get_sideview($row['mb_id'], $row['mb_nick'], $row['mb_email'], $row['mb_homepage']);
$mb_id = $row['mb_id'];
if ($row['mb_leave_date'])
$mb_id = "<font color=crimson>$mb_id</font>";
else if ($row['mb_intercept_date'])
$mb_id = "<font color=orange>$mb_id</font>";
$list = $i%2;
echo "
<input type=hidden name=mb_id[$i] value='$row[mb_id]'>
<tr class='list$list col1 ht center'>
<td title='$row[mb_id]'><nobr style='display:block; overflow:hidden; width:100px;'>&nbsp;$mb_id</nobr></td>
<td>$row[mb_name]</td>
<td>$mb_nick</td>
<td>$row[mb_level]</td>
<td align=right><a href='./point_list.php?sfl=mb_id&stx=$row[mb_id]' class=tt>".number_format($row['mb_point'])."</a>&nbsp;</td>
<td>".substr($row['mb_today_login'],2,8)."</td>
<td>".($row['mb_mailling']?'&radic;':'&nbsp;')."</td>
<td>".($row['mb_open']?'&radic;':'&nbsp;')."</td>
<td title='$row[mb_email_certify]'>".(preg_match('/[1-9]/', $row['mb_email_certify'])?'&radic;':'&nbsp;')."</td>
<td title='$row[mb_intercept_date]'>".($row['mb_intercept_date']?'&radic;':'&nbsp;')."</td>
<td>$group</td>
</tr>";
}
if ($i == 0)
echo "<tr><td colspan='$colspan' align=center height=100 class=contentbg>자료가 없습니다.</td></tr>";
echo "<tr><td colspan='$colspan' class='line2'></td></tr>";
echo "</table>";
?>
<?
//$sql_common = " from $g4[board_new_table] a, $g4[board_table] b, $g4[group_table] c where a.bo_table = b.bo_table and b.gr_id = c.gr_id and b.bo_use_search = '1' ";
$sql_common = " from $g4[board_new_table] a, $g4[board_table] b, $g4[group_table] c where a.bo_table = b.bo_table and b.gr_id = c.gr_id ";
if (isset($gr_id))
$sql_common .= " and b.gr_id = '$gr_id' ";
if (isset($view)) {
if ($view == "w")
$sql_common .= " and a.wr_id = a.wr_parent ";
else if ($view == "c")
$sql_common .= " and a.wr_id <> a.wr_parent ";
}
$sql_order = " order by a.bn_id desc ";
$sql = " select count(*) as cnt $sql_common ";
$row = sql_fetch($sql);
$total_count = $row['cnt'];
$colspan = 5;
?>
<br><br>
<?=subtitle("최근게시물 {$new_write_rows}건", "$g4[bbs_path]/new.php");?>
<table width=100% cellpadding=0 cellspacing=1>
<input type=hidden name=sst value='<?=$sst?>'>
<input type=hidden name=sod value='<?=$sod?>'>
<input type=hidden name=sfl value='<?=$sfl?>'>
<input type=hidden name=stx value='<?=$stx?>'>
<input type=hidden name=page value='<?=$page?>'>
<colgroup width=100>
<colgroup width=100>
<colgroup width=''>
<colgroup width=80>
<colgroup width=80>
<tr><td colspan='<?=$colspan?>' class='line1'></td></tr>
<tr class='bgcol1 bold col1 ht center'>
<td>그룹</td>
<td>게시판</td>
<td>제목</td>
<td>이름</td>
<td>일시</td>
</tr>
<tr><td colspan='<?=$colspan?>' class='line2'></td></tr>
<?
$sql = " select a.*, b.bo_subject, c.gr_subject, c.gr_id
$sql_common
$sql_order
limit $new_write_rows ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++)
{
$tmp_write_table = $g4['write_prefix'] . $row['bo_table'];
if ($row['wr_id'] == $row['wr_parent']) // 원글
{
$comment = "";
$comment_link = "";
$row2 = sql_fetch(" select * from $tmp_write_table where wr_id = '$row[wr_id]' ");
$name = get_sideview($row2['mb_id'], cut_str($row2['wr_name'], $config['cf_cut_name']), $row2['wr_email'], $row2['wr_homepage']);
// 당일인 경우 시간으로 표시함
$datetime = substr($row2['wr_datetime'],0,10);
$datetime2 = $row2['wr_datetime'];
if ($datetime == $g4['time_ymd'])
$datetime2 = substr($datetime2,11,5);
else
$datetime2 = substr($datetime2,5,5);
}
else // 코멘트
{
$comment = "[코] ";
$comment_link = "#c_{$row[wr_id]}";
$row2 = sql_fetch(" select * from $tmp_write_table where wr_id = '$row[wr_parent]' ");
$row3 = sql_fetch(" select mb_id, wr_name, wr_email, wr_homepage, wr_datetime from $tmp_write_table where wr_id = '$row[wr_id]' ");
$name = get_sideview($row3['mb_id'], cut_str($row3['wr_name'], $config['cf_cut_name']), $row3['wr_email'], $row3['wr_homepage']);
// 당일인 경우 시간으로 표시함
$datetime = substr($row3['wr_datetime'],0,10);
$datetime2 = $row3['wr_datetime'];
if ($datetime == $g4['time_ymd'])
$datetime2 = substr($datetime2,11,5);
else
$datetime2 = substr($datetime2,5,5);
}
$list = $i%2;
echo "
<tr class='list$list col1 ht center'>
<td class=small><a href='$g4[bbs_path]/new.php?gr_id=$row[gr_id]'>".cut_str($row['gr_subject'],10)."</a></td>
<td class=small><a href='$g4[bbs_path]/board.php?bo_table=$row[bo_table]'>".cut_str($row['bo_subject'],20)."</a></td>
<td align=left style='word-break:break-all;'>&nbsp;<a href='$g4[bbs_path]/board.php?bo_table=$row[bo_table]&wr_id=$row2[wr_id]{$comment_link}'>{$comment}".conv_subject($row2['wr_subject'], 100)."</a></td>
<td>$name</td>
<td>$datetime</td>
</tr> ";
}
if ($i == 0)
echo "<tr><td colspan='$colspan' align=center height=100 bgcolor=#ffffff>자료가 없습니다.</td></tr>";
echo "<tr><td colspan='$colspan' class='line2'></td></tr>";
echo "</table>";
?>
<?
$sql_common = " from $g4[point_table] ";
$sql_search = " where (1) ";
$sql_order = " order by po_id desc ";
$sql = " select count(*) as cnt
$sql_common
$sql_search
$sql_order ";
$row = sql_fetch($sql);
$total_count = $row['cnt'];
$sql = " select *
$sql_common
$sql_search
$sql_order
limit $new_point_rows ";
$result = sql_query($sql);
$colspan = 7;
?>
<br><br>
<?=subtitle("최근포인트 {$new_point_rows}건", "./point_list.php");?>
<table width=100%>
<tr>
<td width=50% align=left>
<?//=$listall?> (건수 : <?=number_format($total_count)?>)
<?
//$row2 = sql_fetch(" select sum(po_point) as sum_point from $g4[point_table] ");
//echo "&nbsp;(전체 포인트 합계 : " . number_format($row2[sum_point]) . "점)";
?>
</td>
<td width=50% align=right></td>
</tr>
</table>
<table width=100% cellpadding=0 cellspacing=1>
<input type=hidden name=sst value='<?=$sst?>'>
<input type=hidden name=sod value='<?=$sod?>'>
<input type=hidden name=sfl value='<?=$sfl?>'>
<input type=hidden name=stx value='<?=$stx?>'>
<input type=hidden name=page value='<?=$page?>'>
<colgroup width=100>
<colgroup width=80>
<colgroup width=80>
<colgroup width=140>
<colgroup width=''>
<colgroup width=50>
<colgroup width=80>
<tr><td colspan='<?=$colspan?>' class='line1'></td></tr>
<tr class='bgcol1 bold col1 ht center'>
<td>회원아이디</td>
<td>이름</td>
<td>별명</td>
<td>일시</td>
<td>포인트 내용</td>
<td>포인트</td>
<td>포인트합</td>
</tr>
<tr><td colspan='<?=$colspan?>' class='line2'></td></tr>
<?
$row2['mb_id'] = '';
for ($i=0; $row=sql_fetch_array($result); $i++)
{
if ($row2['mb_id'] != $row['mb_id'])
{
$sql2 = " select mb_id, mb_name, mb_nick, mb_email, mb_homepage, mb_point from $g4[member_table] where mb_id = '$row[mb_id]' ";
$row2 = sql_fetch($sql2);
}
$mb_nick = get_sideview($row['mb_id'], $row2['mb_nick'], $row2['mb_email'], $row2['mb_homepage']);
$link1 = $link2 = "";
if (!preg_match("/^\@/", $row['po_rel_table']) && $row['po_rel_table'])
{
$link1 = "<a href='$g4[bbs_path]/board.php?bo_table=$row[po_rel_table]&wr_id=$row[po_rel_id]' target=_blank>";
$link2 = "</a>";
}
$list = $i%2;
echo "
<input type=hidden name=po_id[$i] value='$row[po_id]'>
<input type=hidden name=mb_id[$i] value='$row[mb_id]'>
<tr class='list$list col1 ht center'>
<td><a href='./point_list.php?sfl=mb_id&stx=$row[mb_id]'>$row[mb_id]</a></td>
<td>$row2[mb_name]</td>
<td>$mb_nick</td>
<td>$row[po_datetime]</td>
<td align=left>&nbsp;{$link1}$row[po_content]{$link2}</td>
<td align=right>".number_format($row['po_point'])."&nbsp;</td>
<td align=right>".number_format($row2['mb_point'])."&nbsp;</td>
</tr> ";
}
if ($i == 0)
echo "<tr><td colspan='$colspan' align=center height=100 bgcolor=#ffffff>자료가 없습니다.</td></tr>";
echo "<tr><td colspan='$colspan' class='line2'></td></tr>";
echo "</table>";
?>
<?
include_once ("./admin.tail.php");
?>

82
adm/mail_form.php Normal file
View File

@ -0,0 +1,82 @@
<?
$sub_menu = "200300";
include_once("./_common.php");
auth_check($auth[$sub_menu], "r");
$token = get_token();
$html_title = "회원메일";
if ($w == "u") {
$html_title .= "수정";
$readonly = " readonly";
$sql = " select * from $g4[mail_table] where ma_id = '$ma_id' ";
$ma = sql_fetch($sql);
if (!$ma[ma_id])
alert("등록된 자료가 없습니다.");
} else {
$html_title .= "입력";
}
$g4[title] = $html_title;
include_once("./admin.head.php");
?>
<form name=fmailform method=post action="./mail_update.php" onsubmit="return fmailform_check(this);">
<input type=hidden name=w value='<?=$w?>'>
<input type=hidden name=ma_id value='<?=$ma[ma_id]?>'>
<input type=hidden name=token value='<?=$token?>'>
<table cellpadding=0 cellspacing=0 width=100%>
<colgroup width=20% class='col1 pad1 bold right'>
<colgroup width=80% class='col2 pad2'>
<tr>
<td colspan=2 class=title align=left><img src='<?=$g4[admin_path]?>/img/icon_title.gif'> <?=$html_title?></td>
</tr>
<tr><td colspan=2 class='line1'></td></tr>
<tr class='ht'>
<td>메일 제목</td>
<td><input type=text class='ed w99' name=ma_subject value='<?=$ma[ma_subject]?>' required itemname='메일 제목'></td>
</tr>
<tr>
<td>메일 내용</td>
<td class=lh>
<?=textarea_size("ma_content")?>
<textarea id=ma_content name=ma_content rows=20 class='ed w99' required itemname='메일 내용'><?=$ma[ma_content]?></textarea>
<br>{이름} , {별명} , {회원아이디} , {이메일} , {생일}
<br>위와 같이 HTML 코드에 삽입하면 해당 내용에 맞게 변환하여 메일 발송합니다.
</td>
</tr>
<tr><td colspan=2 class='line1'></td></tr>
</table>
<p align=center>
<input type=submit class=btn1 accesskey='s' value=' 확 인 '>
</form>
<script type="text/javascript">
function fmailform_check(f)
{
errmsg = "";
errfld = "";
check_field(f.ma_subject, "제목을 입력하세요.");
check_field(f.ma_content, "내용을 입력하세요.");
if (errmsg != "") {
alert(errmsg);
errfld.focus();
return false;
}
return true;
}
document.fmailform.ma_subject.focus();
</script>
<?
include_once("./admin.tail.php");
?>

99
adm/mail_list.php Normal file
View File

@ -0,0 +1,99 @@
<?
$sub_menu = "200300";
include_once("./_common.php");
auth_check($auth[$sub_menu], "r");
$sql_common = " from $g4[mail_table] ";
// 테이블의 전체 레코드수만 얻음
$sql = " select COUNT(*) as cnt " . $sql_common;
$row = sql_fetch($sql);
$total_count = $row[cnt];
$page = 1;
$sql = "select * $sql_common order by ma_id desc ";
$result = sql_query($sql);
$g4[title] = "회원메일발송";
include_once("./admin.head.php");
$colspan = 6;
?>
<table width=100%>
<tr>
<td width=20%>&nbsp;</td>
<td width=60% align=center>&nbsp;</td>
<td width=20% align=right>건수 : <? echo $total_count ?>&nbsp;</td>
</tr>
</table>
<table cellpadding=0 cellspacing=0 width=100%>
<tr><td colspan='<?=$colspan?>' class='line1'></td></tr>
<tr class='bgcol1 bold col1 ht center'>
<td width=40>ID</td>
<td width=''>제목</td>
<td width=120>작성일시</td>
<td width=50>테스트</td>
<td width=50>보내기</td>
<td width=80><a href='./mail_form.php'><img src='<?=$g4[admin_path]?>/img/icon_insert.gif' border=0></a></td>
</tr>
<tr><td colspan='<?=$colspan?>' class='line2'></td></tr>
<?
for ($i=0; $row=mysql_fetch_array($result); $i++) {
$s_mod = icon("수정", "./mail_form.php?w=u&ma_id=$row[ma_id]");
//$s_del = icon("삭제", "javascript:del('./mail_update.php?w=d&ma_id=$row[ma_id]');");
$s_del = "<a href=\"javascript:post_delete('mail_update.php', '$row[ma_id]');\"><img src='img/icon_delete.gif' border=0 title='삭제' align='absmiddle'></a>";
$s_vie = icon("보기", "./mail_preview.php?ma_id=$row[ma_id]", "_blank");
$num = number_format($total_count - ($page - 1) * $config[cf_page_rows] - $i);
$list = $i%2;
echo "
<tr class='list$list col1 ht center'>
<td>$num</td>
<td align=left>$row[ma_subject]</td>
<td>$row[ma_time]</td>
<td><a href='./mail_test.php?ma_id=$row[ma_id]'>테스트</a></td>
<td><a href='./mail_select_form.php?ma_id=$row[ma_id]'>보내기</a></td>
<td>$s_mod $s_del $s_vie</td>
</tr>";
}
if (!$i)
echo "<tr><td colspan='$colspan' height=100 align=center bgcolor='#FFFFFF'>자료가 없습니다.</td></tr>";
?>
<tr><td colspan='<?=$colspan?>' class='line2'></td></tr>
</table>
<script>
// POST 방식으로 삭제
function post_delete(action_url, val)
{
var f = document.fpost;
if(confirm("한번 삭제한 자료는 복구할 방법이 없습니다.\n\n정말 삭제하시겠습니까?")) {
f.ma_id.value = val;
f.action = action_url;
f.submit();
}
}
</script>
<form name='fpost' method='post'>
<input type='hidden' name='sst' value='<?=$sst?>'>
<input type='hidden' name='sod' value='<?=$sod?>'>
<input type='hidden' name='sfl' value='<?=$sfl?>'>
<input type='hidden' name='stx' value='<?=$stx?>'>
<input type='hidden' name='page' value='<?=$page?>'>
<input type='hidden' name='w' value='d'>
<input type='hidden' name='ma_id'>
</form>
<?
include_once ("./admin.tail.php");
?>

16
adm/mail_preview.php Normal file
View File

@ -0,0 +1,16 @@
<?
$sub_menu = "200300";
include_once("./_common.php");
include_once("$g4[path]/lib/mailer.lib.php");
auth_check($auth[$sub_menu], "r");
$se = sql_fetch("select ma_subject, ma_content from $g4[mail_table] where ma_id = '$ma_id' ");
$subject = $se[ma_subject];
$content = $se[ma_content] . "<hr size=0><p><span style='font-size:9pt; font-family:굴림'>▶ 더 이상 정보 수신을 원치 않으시면 [<a href='$g4[url]/$g4[bbs]/email_stop.php?mb_id=***&mb_md5=***' target='_blank'>수신거부</a>] 해 주십시오.</span></p>";
echo "<span style='font-size:9pt;'>$subject</span>";
echo "<hr size=0>";
echo $content;
?>

192
adm/mail_select_form.php Normal file
View File

@ -0,0 +1,192 @@
<?
$sub_menu = "200300";
include_once("./_common.php");
if (!$config[cf_email_use])
alert("환경설정에서 \'메일발송 사용\'에 체크하셔야 메일을 발송할 수 있습니다.");
auth_check($auth[$sub_menu], "r");
$sql = "select * from $g4[mail_table] where ma_id = '$ma_id' ";
$ma = sql_fetch($sql);
if (!$ma[ma_id])
alert("보내실 내용을 선택하여 주십시오.");
// 전체회원수
$sql = "select COUNT(*) as cnt from $g4[member_table] ";
$row = sql_fetch($sql);
$tot_cnt = $row[cnt];
// 탈퇴대기회원수
$sql = "select COUNT(*) as cnt from $g4[member_table] where mb_leave_date <> '' ";
$row = sql_fetch($sql);
$finish_cnt = $row[cnt];
$last_option = explode("||", $ma[ma_last_option]);
for ($i=0; $i<count($last_option); $i++) {
$option = explode("=", $last_option[$i]);
// 동적변수
$var = $option[0];
$$var = $option[1];
}
if (!isset($mb_id1)) $mb_id1 = 1;
if (!isset($mb_level_from)) $mb_level_from = 1;
if (!isset($mb_level_to)) $mb_level_to = 10;
if (!isset($mb_mailling)) $mb_mailling = 1;
if (!isset($mb_sex)) $mb_sex = 1;
if (!isset($mb_area)) $mb_area = 1;
$g4[title] = "회원메일발송";
include_once("./admin.head.php");
?>
<table width=700 align=center>
<tr>
<td class='right'>전체회원수 : <?=number_format($tot_cnt)?> 명 , 탈퇴대기회원수 : <?=number_format($finish_cnt)?> 명 , <b>정상회원수 : <?=number_format($tot_cnt - $finish_cnt)?> 명</b></td>
</tr>
<tr>
<td>
<table cellpadding=0 cellspacing=0 width=100%>
<form name=frmsendmailselectform method=post action="./mail_select_list.php" autocomplete="off">
<input type=hidden name=ma_id value='<? echo $ma_id ?>'>
<colgroup width=20% class='col1 pad1 bold right'>
<colgroup width=80% class='col2 pad2'>
<tr>
<td></td>
</tr>
<tr><td colspan='2' class='line1'></td></tr>
<tr class='ht'>
<td>회원 ID</td>
<td>
<input type=radio name='mb_id1' value='1' onclick="mb_id1_click(1);" <?=$mb_id1?"checked":"";?>> 전체
<input type=radio name='mb_id1' value='0' onclick="mb_id1_click(0);" <?=!$mb_id1?"checked":"";?>> 구간
<br>
<input type=text class=ed id=mb_id1_from name=mb_id1_from value="<?=$mb_id1_from?>"> 에서
<input type=text class=ed id=mb_id1_to name=mb_id1_to value="<?=$mb_id1_to?>"> 까지
<script type="text/javascript">
function mb_id1_click(num)
{
if (num == 1) {
document.getElementById('mb_id1_from').disabled = true;
document.getElementById('mb_id1_from').style.backgroundColor = '#EEEEEE';
document.getElementById('mb_id1_to').disabled = true;
document.getElementById('mb_id1_to').style.backgroundColor = '#EEEEEE';
} else {
document.getElementById('mb_id1_from').disabled = false;
document.getElementById('mb_id1_from').style.backgroundColor = '#FFFFFF';
document.getElementById('mb_id1_to').disabled = false;
document.getElementById('mb_id1_to').style.backgroundColor = '#FFFFFF';
}
}
document.onLoad=mb_id1_click(<?=(int)$mb_id1?>);
</script>
</td>
</tr>
<tr class='ht'>
<td>생일</td>
<td>
<input type=text name='mb_birth_from' size=4 maxlength=4 class=ed value="<?=$mb_birth_from?>"> 부터
<input type=text name='mb_birth_to' size=4 maxlength=4 class=ed value="<?=$mb_birth_to?>"> 까지 (예 : 5월5일 인 경우, 0505 와 같이 입력 , 둘다 입력해야함)</td>
</tr>
<tr class='ht'>
<td>E-mail에</td>
<td><input type=text name='mb_email' class=ed value="<?=$mb_email?>"> 단어 포함 (예 : @sir.co.kr)</td>
</tr>
<tr class='ht'>
<td>성별</td>
<td>
<select id=mb_sex name=mb_sex>
<option value=''>전체
<option value='F'>여자
<option value='M'>남자
</select>
<script type="text/javascript"> document.getElementById('mb_sex').value = "<?=$mb_sex?>"; </script>
</td>
</tr>
<tr class='ht'>
<td>지역</td>
<td>
<select id=mb_area name=mb_area>
<option value=''>전체
<option value='서울'>서울
<option value='부산'>부산
<option value='대구'>대구
<option value='인천'>인천
<option value='광주'>광주
<option value='대전'>대전
<option value='울산'>울산
<option value='강원'>강원
<option value='경기'>경기
<option value='경남'>경남
<option value='경북'>경북
<option value='전남'>전남
<option value='전북'>전북
<option value='제주'>제주
<option value='충남'>충남
<option value='충북'>충북
</select>
<script type="text/javascript"> document.getElementById('mb_area').value = "<?=$mb_area?>"; </script>
</td>
</tr>
<tr class='ht'>
<td>메일링</td>
<td>
<select id=mb_mailling name=mb_mailling>
<option value='1'>수신동의한 회원만
<option value=''>전체
</select>
<script type="text/javascript"> document.getElementById('mb_mailling').value = "<?=$mb_mailling?>"; </script>
</td>
</tr>
<tr class='ht'>
<td>권한</td>
<td>
<select id=mb_level_from name=mb_level_from>
<? for ($i=1; $i<=10; $i++) { ?>
<option value='<? echo $i ?>'><? echo $i ?>
<? } ?>
</select> 에서
<select id=mb_level_to name=mb_level_to>
<? for ($i=1; $i<=10; $i++) { ?>
<option value='<? echo $i ?>'><? echo $i ?>
<? } ?>
</select> 까지
<script type="text/javascript"> document.getElementById('mb_level_from').value = "<?=$mb_level_from?>"; </script>
<script type="text/javascript"> document.getElementById('mb_level_to').value = "<?=$mb_level_to?>"; </script>
</td>
</tr>
<tr class='ht'>
<td>게시판그룹회원</td>
<td>
<select id=gr_id name=gr_id>
<option value=''>전체
<?
$sql = " select gr_id, gr_subject from $g4[group_table] order by gr_subject ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++)
{
echo "<option value='$row[gr_id]'>$row[gr_subject]";
}
?>
</select>
<script type="text/javascript"> document.getElementById('gr_id').value = "<?=$gr_id?>"; </script>
</td>
</tr>
<tr><td colspan='2' class='line2'></td></tr>
</table>
<p align=center>
<input type=submit class=btn1 value=' 확 인 '>&nbsp;
<input type=button class=btn1 value=' 목 록 ' onclick="document.location.href='./mail_list.php';">
</form>
</td>
</tr></table>
<?
include_once("./admin.tail.php");
?>

141
adm/mail_select_list.php Normal file
View File

@ -0,0 +1,141 @@
<?
$sub_menu = "200300";
include_once("./_common.php");
auth_check($auth[$sub_menu], "r");
$token = get_token();
$html_title = "선택된 회원메일리스트";
$ma_last_option = "";
$sql_common = " from $g4[member_table] ";
$sql_where = " where (1) ";
// 회원ID ..에서 ..까지
if ($mb_id1 != 1)
$sql_where .= " and mb_id between '$mb_id1_from' and '$mb_id1_to' ";
// E-mail에 특정 단어 포함
if ($mb_email != "")
$sql_where .= " and mb_email like '%$mb_email%' ";
// 성별
if ($mb_sex != "")
$sql_where .= " and mb_sex = '$mb_sex' ";
// 생일
if ($mb_birth_from && $mb_birth_to)
$sql_where .= " and substring(mb_birth,5,4) between '$mb_birth_from' and '$mb_birth_to' ";
// 지역
if ($mb_area != "")
$sql_where .= " and mb_addr1 like '$mb_area%' ";
// 메일링
if ($mb_mailling != "")
$sql_where .= " and mb_mailling = '$mb_mailling' ";
// 권한
$sql_where .= " and mb_level between '$mb_level_from' and '$mb_level_to' ";
// 게시판그룹회원
if ($gr_id)
{
$group_member = "";
$comma = "";
$sql2 = " select mb_id from $g4[group_member_table] where gr_id = '$gr_id' order by mb_id ";
$result2 = sql_query($sql2);
for ($k=0; $row2=sql_fetch_array($result2); $k++)
{
$group_member .= "{$comma}'$row2[mb_id]'";
$comma = ",";
}
if (!$group_member)
alert("선택하신 게시판 그룹회원이 한명도 없습니다.");
$sql_where .= " and mb_id in ($group_member) ";
}
// 탈퇴, 차단된 회원은 제외
$sql_where .= " and mb_leave_date = '' and mb_intercept_date = '' ";
$sql = " select COUNT(*) as cnt $sql_common $sql_where ";
$row = sql_fetch($sql);
$cnt = $row[cnt];
if ($cnt == 0)
alert("선택하신 내용으로는 해당되는 회원자료가 없습니다.");
// 마지막 옵션을 저장합니다.
$ma_last_option .= "mb_id1=$mb_id1";
$ma_last_option .= "||mb_id1_from=$mb_id1_from";
$ma_last_option .= "||mb_id1_to=$mb_id1_to";
$ma_last_option .= "||mb_email=$mb_email";
$ma_last_option .= "||mb_sex=$mb_sex";
$ma_last_option .= "||mb_birth_from=$mb_birth_from";
$ma_last_option .= "||mb_birth_to=$mb_birth_to";
$ma_last_option .= "||mb_area=$mb_area";
$ma_last_option .= "||mb_mailling=$mb_mailling";
$ma_last_option .= "||mb_level_from=$mb_level_from";
$ma_last_option .= "||mb_level_to=$mb_level_to";
$ma_last_option .= "||gr_id=$gr_id";
sql_query(" update $g4[mail_table] set ma_last_option = '$ma_last_option' where ma_id = '$ma_id' ");
include_once("./admin.head.php");
?>
<table width=500 align=center><tr><td>
<?//=subtitle_bar($html_title)?><p>
<div align=right>선택된 회원수 : <?=number_format($cnt)?> 명</div>
<form name=fmailselectlist method=post onsubmit="return fmailselectlist_submit(this);">
<input type=hidden name=token value='<?=$token?>'>
<table cellpadding=4 cellspacing=1 width=100% class=tablebg>
<input type="hidden" name="ma_id" value="<? echo $ma_id ?>">
<tr>
<td align=center>
<select size=25 name='list' style='width:500px;'>
<option>번호 . 회원아이디 / 이름 / 별명 / 생일 / E-mail
<?
$sql = " select mb_id, mb_name, mb_nick, mb_email, mb_birth, mb_datetime $sql_common $sql_where order by mb_id ";
$result = sql_query($sql);
$i=0;
$ma_list = "";
$cr = "";
while ($row=sql_fetch_array($result))
{
$i++;
echo "<option>$i . $row[mb_id] / $row[mb_name] / $row[mb_nick] / $row[mb_birth] / $row[mb_email]";
$ma_list .= $cr . $row[mb_email] . "||" . $row[mb_id] . "||" . $row[mb_name] . "||" . $row[mb_nick] . "||" . $row[mb_birth] . "||" . $row[mb_datetime];
$cr = "\n";
}
?>
</select>
<textarea name="ma_list" style="display:none"><?=$ma_list?></textarea>
</td>
</tr>
</table>
<p align=center>
<input type=submit class=btn1 value=' 메일 보내기 '>&nbsp;
<input type=button class=btn1 value=' 뒤 로 ' onclick="history.go(-1);">
</form>
</td></tr></table>
<script type='text/javascript'>
function fmailselectlist_submit(f)
{
f.action = "./mail_select_update.php";
return true;
}
</script>
<?
include_once("./admin.tail.php");
?>

View File

@ -0,0 +1,96 @@
<?
$sub_menu = "200300";
include_once("./_common.php");
auth_check($auth[$sub_menu], "w");
$html_title = "회원메일 발송";
check_demo();
check_token();
include_once("./admin.head.php");
include_once("$g4[path]/lib/mailer.lib.php");
$countgap = 10; // 몇건씩 보낼지 설정
$maxscreen = 500; // 몇건씩 화면에 보여줄건지?
$sleepsec = 200; // 천분의 몇초간 쉴지 설정
echo "<span style='font-size:9pt;'>";
echo "<p>메일 발송중 ...<p><font color=crimson><b>[끝]</b></font> 이라는 단어가 나오기 전에는 중간에 중지하지 마세요.<p>";
echo "</span>";
?>
<span id="cont"></span>
<?
include_once("./admin.tail.php");
?>
<?
flush();
ob_flush();
$ma_id = trim($_POST[ma_id]);
$select_member_list = addslashes(trim($_POST[ma_list]));
//print_r2($_POST); EXIT;
$member_list = explode("\n", $select_member_list);
// 메일내용 가져오기
$sql = "select ma_subject, ma_content from $g4[mail_table] where ma_id = '$ma_id' ";
$ma = sql_fetch($sql);
$subject = $ma[ma_subject];
$cnt = 0;
for ($i=0; $i<count($member_list); $i++)
{
list($email, $mb_id, $name, $nick, $birth, $datetime) = explode("||", trim($member_list[$i]));
$sw = preg_match("/[0-9a-zA-Z_]+(\.[0-9a-zA-Z_]+)*@[0-9a-zA-Z_]+(\.[0-9a-zA-Z_]+)*/", $email);
// 올바른 메일 주소만
if ($sw == true)
{
$cnt++;
$mb_md5 = md5($mb_id.$email.$datetime);
$content = $ma[ma_content];
$content = preg_replace("/{이름}/", $name, $content);
$content = preg_replace("/{별명}/", $nick, $content);
$content = preg_replace("/{회원아이디}/", $mb_id, $content);
$content = preg_replace("/{이메일}/", $email, $content);
$content = preg_replace("/{생일}/", (int)substr($birth,4,2).'월 '.(int)substr($birth,6,2).'일', $content);
$content = $content . "<hr size=0><p><span style='font-size:9pt; font-familye:굴림'>▶ 더 이상 정보 수신을 원치 않으시면 [<a href='$g4[url]/$g4[bbs]/email_stop.php?mb_id=$mb_id&mb_md5=$mb_md5' target='_blank'>수신거부</a>] 해 주십시오.</span></p>";
/*
ob_start();
include "$mail_skin/mail.skin.php";
$content = ob_get_contents();
ob_end_clean();
*/
//mailer($default[de_subject], $default[de_admin_email], $email, $subject, $content, 1);
mailer($config[cf_title], $member[mb_email], $email, $subject, $content, 1);
echo "<script> document.all.cont.innerHTML += '$cnt. $email ($mb_id : $name)<br>'; </script>\n";
//echo "+";
flush();
ob_flush();
ob_end_flush();
usleep($sleepsec);
if ($cnt % $countgap == 0)
{
echo "<script> document.all.cont.innerHTML += '<br>'; document.body.scrollTop += 1000; </script>\n";
}
// 화면을 지운다... 부하를 줄임
if ($cnt % $maxscreen == 0)
echo "<script> document.all.cont.innerHTML = ''; document.body.scrollTop += 1000; </script>\n";
}
}
?>
<script> document.all.cont.innerHTML += "<br><br>총 <?=number_format($cnt)?>건 발송<br><br><font color=crimson><b>[끝]</b></font>"; document.body.scrollTop += 1000; </script>

41
adm/mail_test.php Normal file
View File

@ -0,0 +1,41 @@
<?
$sub_menu = "200300";
include_once("./_common.php");
if (!$config[cf_email_use])
alert("환경설정에서 \'메일발송 사용\'에 체크하셔야 메일을 발송할 수 있습니다.");
include_once("$g4[path]/lib/mailer.lib.php");
auth_check($auth[$sub_menu], "w");
check_demo();
$g4[title] = "회원메일 테스트";
$name = $member[mb_name];
$nick = $member[mb_nick];
$mb_id = $member[mb_id];
$email = $member[mb_email];
$birth = $member[mb_birth];
$sql = "select ma_subject, ma_content from $g4[mail_table] where ma_id = '$ma_id' ";
$ma = sql_fetch($sql);
$subject = $ma[ma_subject];
$content = $ma[ma_content];
$content = preg_replace("/{이름}/", $name, $content);
$content = preg_replace("/{별명}/", $nick, $content);
$content = preg_replace("/{회원아이디}/", $mb_id, $content);
$content = preg_replace("/{이메일}/", $email, $content);
$content = preg_replace("/{생일}/", (int)substr($birth,4,2).'월 '.(int)substr($birth,6,2).'일', $content);
$mb_md5 = md5($member[mb_id].$member[mb_email].$member[mb_datetime]);
$content = $content . "<hr size=0><p><span style='font-size:9pt; font-familye:굴림'>▶ 더 이상 정보 수신을 원치 않으시면 [<a href='$g4[url]/$g4[bbs]/email_stop.php?mb_id=$mb_id&mb_md5=$mb_md5' target='_blank'>수신거부</a>] 해 주십시오.</span></p>";
mailer($config[cf_title], $member[mb_email], $member[mb_email], $subject, $content, 1);
alert("$member[mb_nick]($member[mb_email])님께 테스트 메일을 발송하였습니다.\\n\\n확인하여 주십시오.");
?>

39
adm/mail_update.php Normal file
View File

@ -0,0 +1,39 @@
<?
$sub_menu = "200300";
include_once("./_common.php");
if ($w == 'u' || $w == 'd')
check_demo();
auth_check($auth[$sub_menu], "w");
check_token();
if ($w == "")
{
$sql = " insert $g4[mail_table]
set ma_id = '$_POST[ma_id]',
ma_subject = '$_POST[ma_subject]',
ma_content = '$_POST[ma_content]',
ma_time = '$g4[time_ymdhis]',
ma_ip = '$_SERVER[REMOTE_ADDR]' ";
sql_query($sql);
}
else if ($w == "u")
{
$sql = " update $g4[mail_table]
set ma_subject = '$_POST[ma_subject]',
ma_content = '$_POST[ma_content]',
ma_time = '$g4[time_ymdhis]',
ma_ip = '$_SERVER[REMOTE_ADDR]'
where ma_id = '$_POST[ma_id]' ";
sql_query($sql);
}
else if ($w == "d")
{
$sql = " delete from $g4[mail_table] where ma_id = '$_POST[ma_id]' ";
sql_query($sql);
}
goto_url("./mail_list.php");
?>

29
adm/member_delete.php Normal file
View File

@ -0,0 +1,29 @@
<?
$sub_menu = "200100";
include_once("./_common.php");
check_demo();
auth_check($auth[$sub_menu], "d");
$mb = get_member($_POST['mb_id']);
if (!$mb[mb_id])
alert("회원자료가 존재하지 않습니다.");
else if ($member[mb_id] == $mb[mb_id])
alert("로그인 중인 관리자는 삭제 할 수 없습니다.");
else if (is_admin($mb[mb_id]) == "super")
alert("최고 관리자는 삭제할 수 없습니다.");
else if ($mb[mb_level] >= $member[mb_level])
alert("자신보다 권한이 높거나 같은 회원은 삭제할 수 없습니다.");
check_token();
// 회원자료 삭제
member_delete($mb[mb_id]);
if ($url)
goto_url("{$url}?$qstr&w=u&mb_id=$mb_id");
else
goto_url("./member_list.php?$qstr");
?>

262
adm/member_form.php Normal file
View File

@ -0,0 +1,262 @@
<?
$sub_menu = "200100";
include_once("./_common.php");
auth_check($auth[$sub_menu], "w");
$token = get_token();
if ($w == "")
{
$required_mb_id = "required minlength=3 alphanumericunderline itemname='회원아이디'";
$required_mb_password = "required itemname='패스워드'";
$mb[mb_mailling] = 1;
$mb[mb_open] = 1;
$mb[mb_level] = $config[cf_register_level];
$html_title = "등록";
}
else if ($w == "u")
{
$mb = get_member($mb_id);
if (!$mb[mb_id])
alert("존재하지 않는 회원자료입니다.");
if ($is_admin != 'super' && $mb[mb_level] >= $member[mb_level])
alert("자신보다 권한이 높거나 같은 회원은 수정할 수 없습니다.");
$required_mb_id = "readonly style='background-color:#dddddd;'";
$required_mb_password = "";
$html_title = "수정";
$mb[mb_email] = get_text($mb[mb_email]);
$mb[mb_homepage] = get_text($mb[mb_homepage]);
$mb[mb_password_q] = get_text($mb[mb_password_q]);
$mb[mb_password_a] = get_text($mb[mb_password_a]);
$mb[mb_birth] = get_text($mb[mb_birth]);
$mb[mb_tel] = get_text($mb[mb_tel]);
$mb[mb_hp] = get_text($mb[mb_hp]);
$mb[mb_addr1] = get_text($mb[mb_addr1]);
$mb[mb_addr2] = get_text($mb[mb_addr2]);
$mb[mb_signature] = get_text($mb[mb_signature]);
$mb[mb_recommend] = get_text($mb[mb_recommend]);
$mb[mb_profile] = get_text($mb[mb_profile]);
$mb[mb_1] = get_text($mb[mb_1]);
$mb[mb_2] = get_text($mb[mb_2]);
$mb[mb_3] = get_text($mb[mb_3]);
$mb[mb_4] = get_text($mb[mb_4]);
$mb[mb_5] = get_text($mb[mb_5]);
$mb[mb_6] = get_text($mb[mb_6]);
$mb[mb_7] = get_text($mb[mb_7]);
$mb[mb_8] = get_text($mb[mb_8]);
$mb[mb_9] = get_text($mb[mb_9]);
$mb[mb_10] = get_text($mb[mb_10]);
}
else
alert("제대로 된 값이 넘어오지 않았습니다.");
if ($mb[mb_mailling]) $mailling_checked = "checked"; // 메일 수신
if ($mb[mb_sms]) $sms_checked = "checked"; // SMS 수신
if ($mb[mb_open]) $open_checked = "checked"; // 정보 공개
$g4[title] = "회원정보 " . $html_title;
include_once("./admin.head.php");
?>
<table width=100% align=center cellpadding=0 cellspacing=0>
<form name=fmember method=post onsubmit="return fmember_submit(this);" enctype="multipart/form-data" autocomplete="off">
<input type=hidden name=w value='<?=$w?>'>
<input type=hidden name=sfl value='<?=$sfl?>'>
<input type=hidden name=stx value='<?=$stx?>'>
<input type=hidden name=sst value='<?=$sst?>'>
<input type=hidden name=sod value='<?=$sod?>'>
<input type=hidden name=page value='<?=$page?>'>
<input type=hidden name=token value='<?=$token?>'>
<colgroup width=20% class='col1 pad1 bold right'>
<colgroup width=30% class='col2 pad2'>
<colgroup width=20% class='col1 pad1 bold right'>
<colgroup width=30% class='col2 pad2'>
<tr>
<td colspan=4 class=title align=left><img src='<?=$g4[admin_path]?>/img/icon_title.gif'> <?=$g4[title]?></td>
</tr>
<tr><td colspan=4 class=line1></td></tr>
<tr class='ht'>
<td>아이디</td>
<td>
<input type=text class=ed name='mb_id' size=20 maxlength=20 minlength=2 <?=$required_mb_id?> itemname='아이디' value='<? echo $mb[mb_id] ?>'>
<?if ($w=="u"){?><a href='./boardgroupmember_form.php?mb_id=<?=$mb[mb_id]?>'>접근가능그룹보기</a><?}?>
</td>
<td>패스워드</td>
<td><input type=password class=ed name='mb_password' size=20 maxlength=20 <?=$required_mb_password?> itemname='암호'></td>
</tr>
<tr class='ht'>
<td>이름(실명)</td>
<td><input type=text class=ed name='mb_name' maxlength=20 minlength=2 required itemname='이름(실명)' value='<? echo $mb[mb_name] ?>'></td>
<td>별명</td>
<td><input type=text class=ed name='mb_nick' maxlength=20 minlength=2 required itemname='별명' value='<? echo $mb[mb_nick] ?>'></td>
</tr>
<tr class='ht'>
<td>회원 권한</td>
<td><?=get_member_level_select("mb_level", 1, $member[mb_level], $mb[mb_level])?></td>
<td>포인트</td>
<td><a href='./point_list.php?sfl=mb_id&stx=<?=$mb[mb_id]?>' class='bold'><?=number_format($mb[mb_point])?></a> 점</td>
</tr>
<tr class='ht'>
<td>E-mail</td>
<td><input type=text class=ed name='mb_email' size=40 maxlength=100 required email itemname='e-mail' value='<? echo $mb[mb_email] ?>'></td>
<td>홈페이지</td>
<td><input type=text class=ed name='mb_homepage' size=40 maxlength=255 itemname='홈페이지' value='<? echo $mb[mb_homepage] ?>'></td>
</tr>
<tr class='ht'>
<td>전화번호</td>
<td><input type=text class=ed name='mb_tel' maxlength=20 itemname='전화번호' value='<? echo $mb[mb_tel] ?>'></td>
<td>핸드폰번호</td>
<td><input type=text class=ed name='mb_hp' maxlength=20 itemname='핸드폰번호' value='<? echo $mb[mb_hp] ?>'></td>
</tr>
<tr class='ht'>
<td>주소</td>
<td>
<input type=text class=ed name='mb_zip1' size=4 maxlength=3 readonly itemname='우편번호 앞자리' value='<? echo $mb[mb_zip1] ?>'> -
<input type=text class=ed name='mb_zip2' size=4 maxlength=3 readonly itemname='우편번호 뒷자리' value='<? echo $mb[mb_zip2] ?>'>
<a href="javascript:;" onclick="win_zip('fmember', 'mb_zip1', 'mb_zip2', 'mb_addr1', 'mb_addr2');"><img src='<?=$g4[bbs_img_path]?>/btn_zip.gif' align=absmiddle border=0></a>
<br><input type=text class=ed name='mb_addr1' size=40 readonly value='<? echo $mb[mb_addr1] ?>'>
<br><input type=text class=ed name='mb_addr2' size=25 itemname='상세주소' value='<? echo $mb[mb_addr2] ?>'> 상세주소 입력</td>
<td>회원아이콘</td>
<td colspan=3>
<input type=file name='mb_icon' class=ed><br>이미지 크기는 <?=$config[cf_member_icon_width]?>x<?=$config[cf_member_icon_height]?>으로 해주세요.
<?
$mb_dir = substr($mb[mb_id],0,2);
$icon_file = "$g4[path]/data/member/$mb_dir/$mb[mb_id].gif";
if (file_exists($icon_file)) {
echo "<br><img src='$icon_file' align=absmiddle>";
echo " <input type=checkbox name='del_mb_icon' value='1' class='csscheck'>삭제";
}
?>
</td>
</tr>
<tr class='ht'>
<td>생년월일</td>
<td><input type=text class=ed name=mb_birth size=9 maxlength=8 value='<? echo $mb[mb_birth] ?>'></td>
<td>남녀</td>
<td>
<select name=mb_sex><option value=''>----<option value='F'>여자<option value='M'>남자</select>
<script type="text/javascript"> document.fmember.mb_sex.value = "<?=$mb[mb_sex]?>"; </script></td>
</tr>
<tr class='ht'>
<td>메일 수신</td>
<td><input type=checkbox name=mb_mailling value='1' <?=$mailling_checked?>> 정보 메일을 받음</td>
<td>SMS 수신</td>
<td><input type=checkbox name=mb_sms value='1' <?=$sms_checked?>> 문자메세지를 받음</td>
</tr>
<tr class='ht'>
<td>정보 공개</td>
<td colspan=3><input type=checkbox name=mb_open value='1' <?=$open_checked?>> 타인에게 자신의 정보를 공개</td>
</tr>
<tr class='ht'>
<td>서명</td>
<td><textarea class=ed name=mb_signature rows=5 style='width:99%; word-break:break-all;'><? echo $mb[mb_signature] ?></textarea></td>
<td>자기 소개</td>
<td><textarea class=ed name=mb_profile rows=5 style='width:99%; word-break:break-all;'><? echo $mb[mb_profile] ?></textarea></td>
</tr>
<tr class='ht'>
<td>메모</td>
<td colspan=3><textarea class=ed name=mb_memo rows=5 style='width:99%; word-break:break-all;'><? echo $mb[mb_memo] ?></textarea></td>
</tr>
<? if ($w == "u") { ?>
<tr class='ht'>
<td>회원가입일</td>
<td><?=$mb[mb_datetime]?></td>
<td>최근접속일</td>
<td><?=$mb[mb_today_login]?></td>
</tr>
<tr class='ht'>
<td>IP</td>
<td><?=$mb[mb_ip]?></td>
<? if ($config[cf_use_email_certify]) { ?>
<td>인증일시</td>
<td><?=$mb[mb_email_certify]?>
<? if ($mb[mb_email_certify] == "0000-00-00 00:00:00") { echo "<input type=checkbox name=passive_certify>수동인증"; } ?></td>
<? } else { ?>
<td></td>
<td></td>
<? } ?>
</tr>
<? } ?>
<? if ($config[cf_use_recommend]) { // 추천인 사용 ?>
<tr class='ht'>
<td>추천인</td>
<td colspan=3><?=($mb[mb_recommend] ? get_text($mb[mb_recommend]) : "없음"); // 081022 : CSRF 보안 결함으로 인한 코드 수정 ?></td>
</tr>
<? } ?>
<tr class='ht'>
<td>탈퇴일자</td>
<td><input type=text class=ed name=mb_leave_date size=9 maxlength=8 value='<? echo $mb[mb_leave_date] ?>'></td>
<td>접근차단일자</td>
<td><input type=text class=ed name=mb_intercept_date size=9 maxlength=8 value='<? echo $mb[mb_intercept_date] ?>'> <input type=checkbox value='<? echo date("Ymd"); ?>' onclick='if (this.form.mb_intercept_date.value==this.form.mb_intercept_date.defaultValue) { this.form.mb_intercept_date.value=this.value; } else { this.form.mb_intercept_date.value=this.form.mb_intercept_date.defaultValue; } '>오늘</td>
</tr>
<? for ($i=1; $i<=10; $i=$i+2) { $k=$i+1; ?>
<tr class='ht'>
<td>여분 필드 <?=$i?></td>
<td><input type=text class=ed style='width:99%;' name='mb_<?=$i?>' maxlength=255 value='<?=$mb["mb_$i"]?>'></td>
<td>여분 필드 <?=$k?></td>
<td><input type=text class=ed style='width:99%;' name='mb_<?=$k?>' maxlength=255 value='<?=$mb["mb_$k"]?>'></td>
</tr>
<? } ?>
<tr class='ht'>
<td colspan=4 align=left>
<?=subtitle("XSS / CSRF 방지")?>
</td>
</tr>
<tr><td colspan=4 class=line1></td></tr>
<tr class='ht'>
<td>
관리자 패스워드
</td>
<td colspan=3>
<input class='ed' type='password' name='admin_password' itemname="관리자 패스워드" required>
<?=help("관리자 권한을 빼앗길 것에 대비하여 로그인한 관리자의 패스워드를 한번 더 묻는것 입니다.");?>
</td>
</tr>
<tr><td colspan=4 class=line2></td></tr>
</table>
<p align=center>
<input type=submit class=btn1 accesskey='s' value=' 확 인 '>&nbsp;
<input type=button class=btn1 value=' 목 록 ' onclick="document.location.href='./member_list.php?<?=$qstr?>';">&nbsp;
<? if ($w != '') { ?>
<input type=button class=btn1 value=' 삭 제 ' onclick="del('./member_delete.php?<?=$qstr?>&w=d&mb_id=<?=$mb[mb_id]?>&url=<?=$_SERVER[PHP_SELF]?>');">&nbsp;
<? } ?>
</form>
<script type='text/javascript'>
if (document.fmember.w.value == "")
document.fmember.mb_id.focus();
else if (document.fmember.w.value == "u")
document.fmember.mb_password.focus();
if (typeof(document.fmember.mb_level) != "undefined")
document.fmember.mb_level.value = "<?=$mb[mb_level]?>";
function fmember_submit(f)
{
if (!f.mb_icon.value.match(/\.(gif|jp[e]g|png)$/i) && f.mb_icon.value) {
alert('아이콘이 이미지 파일이 아닙니다. (bmp 제외)');
return false;
}
f.action = './member_form_update.php';
return true;
}
</script>
<?
include_once("./admin.tail.php");
?>

128
adm/member_form_update.php Normal file
View File

@ -0,0 +1,128 @@
<?
$sub_menu = "200100";
include_once("./_common.php");
if ($w == 'u')
check_demo();
auth_check($auth[$sub_menu], "w");
check_token();
if ($member[mb_password] != sql_password($_POST['admin_password'])) {
alert("패스워드가 다릅니다.");
}
$mb_id = mysql_real_escape_string(trim($_POST['mb_id']));
$sql_common = " mb_name = '$_POST[mb_name]',
mb_nick = '$_POST[mb_nick]',
mb_email = '$_POST[mb_email]',
mb_homepage = '$_POST[mb_homepage]',
mb_tel = '$_POST[mb_tel]',
mb_hp = '$_POST[mb_hp]',
mb_zip1 = '$_POST[mb_zip1]',
mb_zip2 = '$_POST[mb_zip2]',
mb_addr1 = '$_POST[mb_addr1]',
mb_addr2 = '$_POST[mb_addr2]',
mb_birth = '$_POST[mb_birth]',
mb_sex = '$_POST[mb_sex]',
mb_signature = '$_POST[mb_signature]',
mb_leave_date = '$_POST[mb_leave_date]',
mb_intercept_date='$_POST[mb_intercept_date]',
mb_memo = '$_POST[mb_memo]',
mb_mailling = '$_POST[mb_mailling]',
mb_sms = '$_POST[mb_sms]',
mb_open = '$_POST[mb_open]',
mb_profile = '$_POST[mb_profile]',
mb_level = '$_POST[mb_level]',
mb_1 = '$_POST[mb_1]',
mb_2 = '$_POST[mb_2]',
mb_3 = '$_POST[mb_3]',
mb_4 = '$_POST[mb_4]',
mb_5 = '$_POST[mb_5]',
mb_6 = '$_POST[mb_6]',
mb_7 = '$_POST[mb_7]',
mb_8 = '$_POST[mb_8]',
mb_9 = '$_POST[mb_9]',
mb_10 = '$_POST[mb_10]' ";
if ($w == "")
{
$mb = get_member($mb_id);
if ($mb[mb_id])
alert("이미 존재하는 회원입니다.\\n\\n : $mb[mb_id]\\n\\n이름 : $mb[mb_name]\\n\\n별명 : $mb[mb_nick]\\n\\n메일 : $mb[mb_email]");
if ($mb[mb_nick] == $mb_nick)
alert("이미 존재하는 별명입니다.\\n\\n : $mb[mb_id]\\n\\n이름 : $mb[mb_name]\\n\\n별명 : $mb[mb_nick]\\n\\n메일 : $mb[mb_email]");
if ($mb[mb_email] == $mb_email)
alert("이미 존재하는 E-mail 입니다.\\n\\n : $mb[mb_id]\\n\\n이름 : $mb[mb_name]\\n\\n별명 : $mb[mb_nick]\\n\\n메일 : $mb[mb_email]");
sql_query(" insert into $g4[member_table] set mb_id = '$mb_id', mb_password = '".sql_password($mb_password)."', mb_datetime = '$g4[time_ymdhis]', mb_ip = '$_SERVER[REMOTE_ADDR]', mb_email_certify = '$g4[time_ymdhis]', $sql_common ");
}
else if ($w == "u")
{
$mb = get_member($mb_id);
if (!$mb[mb_id])
alert("존재하지 않는 회원자료입니다.");
if ($is_admin != "super" && $mb[mb_level] >= $member[mb_level])
alert("자신보다 권한이 높거나 같은 회원은 수정할 수 없습니다.");
if ($_POST[mb_id] == $member[mb_id] && $_POST[mb_level] != $mb[mb_level])
alert("$mb[mb_id] : 로그인 중인 관리자 레벨은 수정 할 수 없습니다.");
$mb_dir = substr($mb_id,0,2);
// 회원 아이콘 삭제
if ($del_mb_icon)
@unlink("$g4[path]/data/member/$mb_dir/$mb_id.gif");
// 아이콘 업로드
if (is_uploaded_file($_FILES[mb_icon][tmp_name])) {
if (!preg_match("/(\.gif)$/i", $_FILES[mb_icon][name])) {
alert($_FILES[mb_icon][name] . '은(는) gif 파일이 아닙니다.');
}
if (preg_match("/(\.gif)$/i", $_FILES[mb_icon][name])) {
@mkdir("$g4[path]/data/member/$mb_dir", 0707);
@chmod("$g4[path]/data/member/$mb_dir", 0707);
$dest_path = "$g4[path]/data/member/$mb_dir/$mb_id.gif";
move_uploaded_file($_FILES[mb_icon][tmp_name], $dest_path);
chmod($dest_path, 0606);
if (file_exists($dest_path)) {
$size = getimagesize($dest_path);
// 아이콘의 폭 또는 높이가 설정값 보다 크다면 이미 업로드 된 아이콘 삭제
if ($size[0] > $config[cf_member_icon_width] || $size[1] > $config[cf_member_icon_height]) {
@unlink($dest_path);
}
}
}
}
if ($mb_password)
$sql_password = " , mb_password = '".sql_password($mb_password)."' ";
else
$sql_password = "";
if ($passive_certify)
$sql_certify = " , mb_email_certify = '$g4[time_ymdhis]' ";
else
$sql_certify = "";
$sql = " update $g4[member_table]
set $sql_common
$sql_password
$sql_certify
where mb_id = '$mb_id' ";
sql_query($sql);
}
else
alert("제대로 된 값이 넘어오지 않았습니다.");
goto_url("./member_form.php?$qstr&w=u&mb_id=$mb_id", false);
?>

263
adm/member_list.php Normal file
View File

@ -0,0 +1,263 @@
<?
$sub_menu = "200100";
include_once("./_common.php");
auth_check($auth[$sub_menu], "r");
$token = get_token();
$sql_common = " from $g4[member_table] ";
$sql_search = " where (1) ";
if ($stx) {
$sql_search .= " and ( ";
switch ($sfl) {
case "mb_point" :
$sql_search .= " ($sfl >= '$stx') ";
break;
case "mb_level" :
$sql_search .= " ($sfl = '$stx') ";
break;
case "mb_tel" :
case "mb_hp" :
$sql_search .= " ($sfl like '%$stx') ";
break;
default :
$sql_search .= " ($sfl like '$stx%') ";
break;
}
$sql_search .= " ) ";
}
//if ($is_admin == 'group') $sql_search .= " and mb_level = '$member[mb_level]' ";
if ($is_admin != 'super')
$sql_search .= " and mb_level <= '$member[mb_level]' ";
if (!$sst) {
$sst = "mb_datetime";
$sod = "desc";
}
$sql_order = " order by $sst $sod ";
$sql = " select count(*) as cnt
$sql_common
$sql_search
$sql_order ";
$row = sql_fetch($sql);
$total_count = $row[cnt];
$rows = $config[cf_page_rows];
$total_page = ceil($total_count / $rows); // 전체 페이지 계산
if (!$page) $page = 1; // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $rows; // 시작 열을 구함
// 탈퇴회원수
$sql = " select count(*) as cnt
$sql_common
$sql_search
and mb_leave_date <> ''
$sql_order ";
$row = sql_fetch($sql);
$leave_count = $row[cnt];
// 차단회원수
$sql = " select count(*) as cnt
$sql_common
$sql_search
and mb_intercept_date <> ''
$sql_order ";
$row = sql_fetch($sql);
$intercept_count = $row[cnt];
$listall = "<a href='$_SERVER[PHP_SELF]' class=tt>처음</a>";
$g4[title] = "회원관리";
include_once("./admin.head.php");
$sql = " select *
$sql_common
$sql_search
$sql_order
limit $from_record, $rows ";
$result = sql_query($sql);
$colspan = 15;
?>
<script type="text/javascript" src="<?=$g4[path]?>/js/sideview.js"></script>
<script type="text/javascript">
var list_update_php = "member_list_update.php";
var list_delete_php = "member_list_delete.php";
</script>
<table width=100%>
<form name=fsearch method=get>
<tr>
<td width=50% align=left><?=$listall?>
(총회원수 : <?=number_format($total_count)?>,
<a href='?sst=mb_intercept_date&sod=desc&sfl=<?=$sfl?>&stx=<?=$stx?>' title='차단된 회원부터 출력'><font color=orange>차단 : <?=number_format($intercept_count)?></font></a>,
<a href='?sst=mb_leave_date&sod=desc&sfl=<?=$sfl?>&stx=<?=$stx?>' title='탈퇴한 회원부터 출력'><font color=crimson>탈퇴 : <?=number_format($leave_count)?></font></a>)
</td>
<td width=50% align=right>
<select name=sfl class=cssfl>
<option value='mb_id'>회원아이디</option>
<option value='mb_name'>이름</option>
<option value='mb_nick'>별명</option>
<option value='mb_level'>권한</option>
<option value='mb_email'>E-MAIL</option>
<option value='mb_tel'>전화번호</option>
<option value='mb_hp'>핸드폰번호</option>
<option value='mb_point'>포인트</option>
<option value='mb_datetime'>가입일시</option>
<option value='mb_ip'>IP</option>
<option value='mb_recommend'>추천인</option>
</select>
<input type=text name=stx class=ed required itemname='검색어' value='<? echo $stx ?>'>
<input type=image src='<?=$g4[admin_path]?>/img/btn_search.gif' align=absmiddle></td>
</tr>
</form>
</table>
<form name=fmemberlist method=post>
<input type=hidden name=sst value='<?=$sst?>'>
<input type=hidden name=sod value='<?=$sod?>'>
<input type=hidden name=sfl value='<?=$sfl?>'>
<input type=hidden name=stx value='<?=$stx?>'>
<input type=hidden name=page value='<?=$page?>'>
<input type=hidden name=token value='<?=$token?>'>
<table width=100% cellpadding=0 cellspacing=0>
<colgroup width=30>
<colgroup width=90>
<colgroup width=90>
<colgroup width=90>
<colgroup width=''>
<colgroup width=70>
<colgroup width=80>
<colgroup width=40>
<colgroup width=40>
<colgroup width=40>
<colgroup width=40>
<colgroup width=40>
<colgroup width=80>
<tr><td colspan='<?=$colspan?>' class='line1'></td></tr>
<tr class='bgcol1 bold col1 ht center'>
<td><input type=checkbox name=chkall value='1' onclick='check_all(this.form)'></td>
<td><?=subject_sort_link('mb_id')?>회원아이디</a></td>
<td><?=subject_sort_link('mb_name')?>이름</a></td>
<td><?=subject_sort_link('mb_nick')?>별명</a></td>
<td><?=subject_sort_link('mb_level', '', 'desc')?>권한</a></td>
<td><?=subject_sort_link('mb_point', '', 'desc')?>포인트</a></td>
<td><?=subject_sort_link('mb_today_login', '', 'desc')?>최종접속</a></td>
<td title='메일수신허용여부'><?=subject_sort_link('mb_mailling', '', 'desc')?>수신</a></td>
<td title='정보공개여부'><?=subject_sort_link('mb_open', '', 'desc')?>공개</a></td>
<!-- <td><?=subject_sort_link('mb_leave_date', '', 'desc')?>탈퇴</a></td> -->
<td><?=subject_sort_link('mb_email_certify', '', 'desc')?>인증</a></td>
<td><?=subject_sort_link('mb_intercept_date', '', 'desc')?>차단</a></td>
<td title='접근가능한 그룹수'>그룹</td>
<td><a href="./member_form.php"><img src='<?=$g4[admin_path]?>/img/icon_insert.gif' border=0 title='추가'></a></td>
</tr>
<tr><td colspan='<?=$colspan?>' class='line2'></td></tr>
<?
for ($i=0; $row=sql_fetch_array($result); $i++) {
// 접근가능한 그룹수
$sql2 = " select count(*) as cnt from $g4[group_member_table] where mb_id = '$row[mb_id]' ";
$row2 = sql_fetch($sql2);
$group = "";
if ($row2[cnt])
$group = "<a href='./boardgroupmember_form.php?mb_id=$row[mb_id]'>$row2[cnt]</a>";
if ($is_admin == 'group')
{
$s_mod = "";
$s_del = "";
}
else
{
$s_mod = "<a href=\"./member_form.php?$qstr&w=u&mb_id=$row[mb_id]\"><img src='img/icon_modify.gif' border=0 title='수정'></a>";
//$s_del = "<a href=\"javascript:del('./member_delete.php?$qstr&w=d&mb_id=$row[mb_id]');\"><img src='img/icon_delete.gif' border=0 title='삭제'></a>";
$s_del = "<a href=\"javascript:post_delete('member_delete.php', '$row[mb_id]');\"><img src='img/icon_delete.gif' border=0 title='삭제'></a>";
}
$s_grp = "<a href='./boardgroupmember_form.php?mb_id=$row[mb_id]'><img src='img/icon_group.gif' border=0 title='그룹'></a>";
$leave_date = $row[mb_leave_date] ? $row[mb_leave_date] : date("Ymd", $g4[server_time]);
$intercept_date = $row[mb_intercept_date] ? $row[mb_intercept_date] : date("Ymd", $g4[server_time]);
$mb_nick = get_sideview($row[mb_id], $row[mb_nick], $row[mb_email], $row[mb_homepage]);
$mb_id = $row[mb_id];
if ($row[mb_leave_date])
$mb_id = "<font color=crimson>$mb_id</font>";
else if ($row[mb_intercept_date])
$mb_id = "<font color=orange>$mb_id</font>";
$list = $i%2;
echo "
<input type=hidden name=mb_id[$i] value='$row[mb_id]'>
<tr class='list$list col1 ht center'>
<td><input type=checkbox name=chk[] value='$i'></td>
<td title='$row[mb_id]'><nobr style='display:block; overflow:hidden; width:90;'>&nbsp;$mb_id</nobr></td>
<td><nobr style='display:block; overflow:hidden; width:90px;'>$row[mb_name]</nobr></td>
<td><nobr style='display:block; overflow:hidden; width:90px;'><u>$mb_nick</u></nobr></td>
<td>".get_member_level_select("mb_level[$i]", 1, $member[mb_level], $row[mb_level])."</td>
<td align=right><a href='point_list.php?sfl=mb_id&stx=$row[mb_id]' class=tt>".number_format($row[mb_point])."</a>&nbsp;</td>
<td>".substr($row[mb_today_login],2,8)."</td>
<td>".($row[mb_mailling]?'&radic;':'&nbsp;')."</td>
<td>".($row[mb_open]?'&radic;':'&nbsp;')."</td>
<!-- <td title='$row[mb_leave_date]'>".($row[mb_leave_date]?'&radic;':'&nbsp;')."</td> -->
<td title='$row[mb_email_certify]'>".(preg_match('/[1-9]/', $row[mb_email_certify])?'&radic;':'&nbsp;')."</td>
<td title='$row[mb_intercept_date]'><input type=checkbox name=mb_intercept_date[$i] ".($row[mb_intercept_date]?'checked':'')." value='$intercept_date'></td>
<td>$group</td>
<td>$s_mod $s_del $s_grp</td>
</tr>";
}
if ($i == 0)
echo "<tr><td colspan='$colspan' align=center height=100 class=contentbg>자료가 없습니다.</td></tr>";
echo "<tr><td colspan='$colspan' class='line2'></td></tr>";
echo "</table>";
$pagelist = get_paging($config[cf_write_pages], $page, $total_page, "?$qstr&page=");
echo "<table width=100% cellpadding=3 cellspacing=1>";
echo "<tr><td width=50%>";
echo "<input type=button class='btn1' value='선택수정' onclick=\"btn_check(this.form, 'update')\">&nbsp;";
echo "<input type=button class='btn1' value='선택삭제' onclick=\"btn_check(this.form, 'delete')\">";
echo "</td>";
echo "<td width=50% align=right>$pagelist</td></tr></table>\n";
if ($stx)
echo "<script type='text/javascript'>document.fsearch.sfl.value = '$sfl';</script>\n";
?>
</form>
* 회원자료 삭제시 다른 회원이 기존 회원아이디를 사용하지 못하도록 회원아이디, 이름, 별명은 삭제하지 않고 영구 보관합니다.
<script>
// POST 방식으로 삭제
function post_delete(action_url, val)
{
var f = document.fpost;
if(confirm("한번 삭제한 자료는 복구할 방법이 없습니다.\n\n정말 삭제하시겠습니까?")) {
f.mb_id.value = val;
f.action = action_url;
f.submit();
}
}
</script>
<form name='fpost' method='post'>
<input type='hidden' name='sst' value='<?=$sst?>'>
<input type='hidden' name='sod' value='<?=$sod?>'>
<input type='hidden' name='sfl' value='<?=$sfl?>'>
<input type='hidden' name='stx' value='<?=$stx?>'>
<input type='hidden' name='page' value='<?=$page?>'>
<input type='hidden' name='token' value='<?=$token?>'>
<input type='hidden' name='mb_id'>
</form>
<?
include_once ("./admin.tail.php");
?>

View File

@ -0,0 +1,37 @@
<?
$sub_menu = "200100";
include_once("./_common.php");
check_demo();
auth_check($auth[$sub_menu], "d");
check_token();
$msg = "";
for ($i=0; $i<count($chk); $i++)
{
// 실제 번호를 넘김
$k = $_POST['chk'][$i];
$mb = get_member($_POST['mb_id'][$k]);
if (!$mb[mb_id]) {
$msg .= "$mb[mb_id] : 회원자료가 존재하지 않습니다.\\n";
} else if ($member[mb_id] == $mb[mb_id]) {
$msg .= "$mb[mb_id] : 로그인 중인 관리자는 삭제 할 수 없습니다.\\n";
} else if (is_admin($mb[mb_id]) == "super") {
$msg .= "$mb[mb_id] : 최고 관리자는 삭제할 수 없습니다.\\n";
} else if ($is_admin != "super" && $mb[mb_level] >= $member[mb_level]) {
$msg .= "$mb[mb_id] : 자신보다 권한이 높거나 같은 회원은 삭제할 수 없습니다.\\n";
} else {
// 회원자료 삭제
member_delete($mb[mb_id]);
}
}
if ($msg)
echo "<script type='text/javascript'> alert('$msg'); </script>";
goto_url("./member_list.php?$qstr");
?>

View File

@ -0,0 +1,37 @@
<?
$sub_menu = "200100";
include_once("./_common.php");
check_demo();
auth_check($auth[$sub_menu], "w");
check_token();
for ($i=0; $i<count($chk); $i++)
{
// 실제 번호를 넘김
$k = $_POST['chk'][$i];
$mb = get_member($_POST['mb_id'][$k]);
if (!$mb[mb_id]) {
$msg .= "$mb[mb_id] : 회원자료가 존재하지 않습니다.\\n";
} else if ($is_admin != "super" && $mb[mb_level] >= $member[mb_level]) {
$msg .= "$mb[mb_id] : 자신보다 권한이 높거나 같은 회원은 수정할 수 없습니다.\\n";
} else if ($member[mb_id] == $mb[mb_id]) {
$msg .= "$mb[mb_id] : 로그인 중인 관리자는 수정 할 수 없습니다.\\n";
} else {
$sql = " update $g4[member_table]
set mb_level = '{$_POST['mb_level'][$k]}',
mb_intercept_date = '{$_POST['mb_intercept_date'][$k]}'
where mb_id = '{$_POST['mb_id'][$k]}' ";
sql_query($sql);
}
}
if ($msg)
echo "<script type='text/javascript'> alert('$msg'); </script>";
goto_url("./member_list.php?$qstr");
?>

10
adm/phpinfo.php Normal file
View File

@ -0,0 +1,10 @@
<?
$sub_menu = "100500";
include_once("./_common.php");
check_demo();
auth_check($auth[$sub_menu], "r");
phpinfo();
?>

64
adm/point_clear.php Normal file
View File

@ -0,0 +1,64 @@
<?
$sub_menu = "200200";
include_once("./_common.php");
check_demo();
if (!$ok)
alert();
if ($is_admin != "super")
alert("포인트 정리는 최고관리자만 가능합니다.");
$g4[title] = "포인트 정리";
include_once("./admin.head.php");
echo "<span id='ct'></span>";
include_once("./admin.tail.php");
flush();
echo "<script>document.getElementById('ct').innerHTML += '<p>포인트 정리중...';</script>\n";
flush();
$max_count = 50;
// 테이블 락을 걸고
$sql = " LOCK TABLES $g4[member_table] WRITE, $g4[point_table] WRITE ";
sql_query($sql);
$sql = " select mb_id, count(po_point) as cnt
from $g4[point_table]
group by mb_id
having cnt > {$max_count}+1
order by cnt ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++)
{
$count = 0;
$total = 0;
$sql2 = " select po_id, po_point
from $g4[point_table]
where mb_id = '$row[mb_id]'
order by po_id desc
limit $max_count, $row[cnt] ";
$result2 = sql_query($sql2);
for ($k=0; $row2=sql_fetch_array($result2); $k++)
{
$count++;
$total += $row2[po_point];
sql_query(" delete from $g4[point_table] where po_id = '$row2[po_id]' ");
}
insert_point($row[mb_id], $total, "포인트 {$count}건 정리", "@clear", $row[mb_id], $g4[time_ymd]."-".uniqid(""));
$str = $row[mb_id]."님 포인트 내역 ".number_format($count)."".number_format($total)."점 정리<br>";
echo "<script>document.getElementById('ct').innerHTML += '$str';</script>\n";
flush();
}
// 테이블 락을 풀고
$sql = " UNLOCK TABLES ";
sql_query($sql);
echo "<script>document.getElementById('ct').innerHTML += '<p>총 ".$i."건의 회원포인트 내역이 정리 되었습니다.';</script>\n";
?>

236
adm/point_list.php Normal file
View File

@ -0,0 +1,236 @@
<?
$sub_menu = "200200";
include_once("./_common.php");
auth_check($auth[$sub_menu], "r");
$token = get_token();
$sql_common = " from $g4[point_table] ";
$sql_search = " where (1) ";
if ($stx) {
$sql_search .= " and ( ";
switch ($sfl) {
case "mb_id" :
$sql_search .= " ($sfl = '$stx') ";
break;
default :
$sql_search .= " ($sfl like '%$stx%') ";
break;
}
$sql_search .= " ) ";
}
if (!$sst) {
$sst = "po_id";
$sod = "desc";
}
$sql_order = " order by $sst $sod ";
$sql = " select count(*) as cnt
$sql_common
$sql_search
$sql_order ";
$row = sql_fetch($sql);
$total_count = $row[cnt];
$rows = $config[cf_page_rows];
$total_page = ceil($total_count / $rows); // 전체 페이지 계산
if ($page == "") $page = 1; // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $rows; // 시작 열을 구함
$sql = " select *
$sql_common
$sql_search
$sql_order
limit $from_record, $rows ";
$result = sql_query($sql);
$listall = "<a href='$_SERVER[PHP_SELF]'>처음</a>";
if ($sfl == "mb_id" && $stx)
$mb = get_member($stx);
$g4[title] = "포인트관리";
include_once ("./admin.head.php");
$colspan = 8;
?>
<script type="text/javascript" src="<?=$g4[path]?>/js/sideview.js"></script>
<script type="text/javascript">
var list_update_php = "";
var list_delete_php = "point_list_delete.php";
</script>
<script type="text/javascript">
function point_clear()
{
if (confirm("포인트 정리를 하시면 최근 50건 이전의 포인트 부여 내역을 삭제하므로\n\n포인트 부여 내역을 필요로 할때 찾지 못할 수도 있습니다.\n\n\n그래도 진행하시겠습니까?"))
{
document.location.href = "./point_clear.php?ok=1";
}
}
</script>
<table width=100%>
<form name=fsearch method=get>
<tr>
<td width=50% align=left>
<?=$listall?> (건수 : <?=number_format($total_count)?>)
<?
if ($mb[mb_id])
echo "&nbsp;(" . $mb[mb_id] ." 님 포인트 합계 : " . number_format($mb[mb_point]) . "점)";
else {
$row2 = sql_fetch(" select sum(po_point) as sum_point from $g4[point_table] ");
echo "&nbsp;(전체 포인트 합계 : " . number_format($row2[sum_point]) . "점)";
}
?>
<? if ($is_admin == "super") { ?><!-- <a href="javascript:point_clear();">포인트정리</a> --><? } ?>
</td>
<td width=50% align=right>
<select name=sfl class=cssfl>
<option value='mb_id'>회원아이디</option>
<option value='po_content'>내용</option>
</select>
<input type=text name=stx class=ed required itemname='검색어' value='<?=$stx?>'>
<input type=image src='<?=$g4[admin_path]?>/img/btn_search.gif' align=absmiddle></td>
</tr>
</form>
</table>
<form name=fpointlist method=post>
<input type=hidden name=sst value='<?=$sst?>'>
<input type=hidden name=sod value='<?=$sod?>'>
<input type=hidden name=sfl value='<?=$sfl?>'>
<input type=hidden name=stx value='<?=$stx?>'>
<input type=hidden name=page value='<?=$page?>'>
<input type=hidden name=token value='<?=$token?>'>
<table width=100% cellpadding=0 cellspacing=1>
<colgroup width=30>
<colgroup width=100>
<colgroup width=80>
<colgroup width=80>
<colgroup width=140>
<colgroup width=''>
<colgroup width=50>
<colgroup width=80>
<tr><td colspan='<?=$colspan?>' class='line1'></td></tr>
<tr class='bgcol1 bold col1 ht center'>
<td><input type=checkbox name=chkall value='1' onclick='check_all(this.form)'></td>
<td><?=subject_sort_link('mb_id')?>회원아이디</a></td>
<td>이름</td>
<td>별명</td>
<td><?=subject_sort_link('po_datetime')?>일시</a></td>
<td><?=subject_sort_link('po_content')?>포인트 내용</a></td>
<td><?=subject_sort_link('po_point')?>포인트</a></td>
<td>포인트합</td>
</tr>
<tr><td colspan='<?=$colspan?>' class='line2'></td></tr>
<?
for ($i=0; $row=sql_fetch_array($result); $i++)
{
if ($row2[mb_id] != $row[mb_id])
{
$sql2 = " select mb_id, mb_name, mb_nick, mb_email, mb_homepage, mb_point from $g4[member_table] where mb_id = '$row[mb_id]' ";
$row2 = sql_fetch($sql2);
}
$mb_nick = get_sideview($row[mb_id], $row2[mb_nick], $row2[mb_email], $row2[mb_homepage]);
$link1 = $link2 = "";
if (!preg_match("/^\@/", $row[po_rel_table]) && $row[po_rel_table])
{
$link1 = "<a href='$g4[bbs_path]/board.php?bo_table={$row[po_rel_table]}&wr_id={$row[po_rel_id]}' target=_blank>";
$link2 = "</a>";
}
$list = $i%2;
echo "
<input type=hidden name=po_id[$i] value='$row[po_id]'>
<input type=hidden name=mb_id[$i] value='$row[mb_id]'>
<tr class='list$list col1 ht center'>
<td><input type=checkbox name=chk[] value='$i'></td>
<td><a href='?sfl=mb_id&stx=$row[mb_id]'>$row[mb_id]</a></td>
<td>$row2[mb_name]</td>
<td>$mb_nick</td>
<td>$row[po_datetime]</td>
<td align=left>&nbsp;{$link1}$row[po_content]{$link2}</td>
<td align=right>".number_format($row[po_point])."&nbsp;</td>
<td align=right>".number_format($row2[mb_point])."&nbsp;</td>
</tr> ";
}
if ($i == 0)
echo "<tr><td colspan='$colspan' align=center height=100 bgcolor=#ffffff>자료가 없습니다.</td></tr>";
echo "<tr><td colspan='$colspan' class='line2'></td></tr>";
echo "</table>";
$pagelist = get_paging($config[cf_write_pages], $page, $total_page, "$_SERVER[PHP_SELF]?$qstr&page=");
echo "<table width=100% cellpadding=3 cellspacing=1>";
echo "<tr><td width=50%>";
echo "<input type=button class='btn1' value='선택삭제' onclick=\"btn_check(this.form, 'delete')\">";
echo "</td>";
echo "<td width=50% align=right>$pagelist</td></tr></table>\n";
if ($stx)
echo "<script type='text/javascript'>document.fsearch.sfl.value = '$sfl';</script>\n";
if (strstr($sfl, "mb_id"))
$mb_id = $stx;
else
$mb_id = "";
?>
</form>
<script type='text/javascript'> document.fsearch.stx.focus(); </script>
<?$colspan=5?>
<p>
<form name=fpointlist2 method=post onsubmit="return fpointlist2_submit(this);" autocomplete="off">
<input type=hidden name=sfl value='<?=$sfl?>'>
<input type=hidden name=stx value='<?=$stx?>'>
<input type=hidden name=sst value='<?=$sst?>'>
<input type=hidden name=sod value='<?=$sod?>'>
<input type=hidden name=page value='<?=$page?>'>
<input type=hidden name=token value='<?=$token?>'>
<table width=100% cellpadding=0 cellspacing=1 class=tablebg>
<colgroup width=150>
<colgroup width=''>
<colgroup width=100>
<colgroup width=120>
<colgroup width=100>
<tr><td colspan='<?=$colspan?>' class='line1'></td></tr>
<tr class='bgcol1 bold col1 ht center'>
<td>회원아이디</td>
<td>포인트 내용</td>
<td>포인트</td>
<td>관리자패스워드</td>
<td>입력</td>
</tr>
<tr><td colspan='<?=$colspan?>' class='line2'></td></tr>
<tr class='ht center'>
<td><input type=text class=ed name=mb_id required itemname='회원아이디' value='<?=$mb_id?>'></td>
<td><input type=text class=ed name=po_content required itemname='내용' style='width:99%;'></td>
<td><input type=text class=ed name=po_point required itemname='포인트' size=10></td>
<td><input type=password class=ed name=admin_password required itemname='관리자 패스워드'></td>
<td><input type=submit class=btn1 value=' 확 인 '></td>
</tr>
<tr><td colspan='<?=$colspan?>' class='line2'></td></tr>
</form>
</table>
<script type="text/javascript">
function fpointlist2_submit(f)
{
f.action = "./point_update.php";
return true;
}
</script>
<?
include_once ("./admin.tail.php");
?>

28
adm/point_list_delete.php Normal file
View File

@ -0,0 +1,28 @@
<?
$sub_menu = "200200";
include_once("./_common.php");
check_demo();
auth_check($auth[$sub_menu], "d");
check_token();
for ($i=0; $i<count($chk); $i++)
{
// 실제 번호를 넘김
$k = $_POST['chk'][$i];
$sql = " delete from $g4[point_table] where po_id = '{$_POST['po_id'][$k]}' ";
sql_query($sql);
$sql = " select sum(po_point) as sum_po_point from $g4[point_table] where mb_id = '{$_POST['mb_id'][$k]}' ";
$row = sql_fetch($sql);
$sum_point = $row[sum_po_point];
$sql= " update $g4[member_table] set mb_point = '$sum_point' where mb_id = '{$_POST['mb_id'][$k]}' ";
sql_query($sql);
}
goto_url("./point_list.php?$qstr");
?>

28
adm/point_update.php Normal file
View File

@ -0,0 +1,28 @@
<?
$sub_menu = "200200";
include_once("./_common.php");
auth_check($auth[$sub_menu], "w");
check_token();
if ($member[mb_password] != sql_password($_POST['admin_password'])) {
alert("패스워드가 다릅니다.");
}
$mb_id = $_POST['mb_id'];
$po_point = $_POST['po_point'];
$po_content = $_POST['po_content'];
$mb = get_member($mb_id);
if (!$mb[mb_id])
alert("존재하는 회원아이디가 아닙니다.", "./point_list.php?$qstr");
if (($po_point < 0) && ($po_point * (-1) > $mb[mb_point]))
alert("포인트를 깎는 경우 현재 포인트보다 작으면 안됩니다.", "./point_list.php?$qstr");
insert_point($mb_id, $po_point, $po_content, '@passive', $mb_id, $member[mb_id]."-".uniqid(""));
goto_url("./point_list.php?$qstr");
?>

121
adm/poll_form.php Normal file
View File

@ -0,0 +1,121 @@
<?
$sub_menu = "200900";
include_once("./_common.php");
auth_check($auth[$sub_menu], "w");
$token = get_token();
$html_title = "투표";
if ($w == "")
$html_title .= " 생성";
else if ($w == "u") {
$html_title .= " 수정";
$sql = " select * from $g4[poll_table] where po_id = '$po_id' ";
$po = sql_fetch($sql);
} else
alert("w 값이 제대로 넘어오지 않았습니다.");
$g4[title] = $html_title;
include_once("./admin.head.php");
?>
<form name=fpoll method=post onsubmit="return fpoll_check(this);" enctype="multipart/form-data">
<input type=hidden name=po_id value='<?=$po_id?>'>
<input type=hidden name=w value='<?=$w?>'>
<input type=hidden name=sfl value='<?=$sfl?>'>
<input type=hidden name=stx value='<?=$stx?>'>
<input type=hidden name=sst value='<?=$sst?>'>
<input type=hidden name=sod value='<?=$sod?>'>
<input type=hidden name=page value='<?=$page?>'>
<input type=hidden name=token value='<?=$token?>'>
<table width=100% cellpadding=0 cellspacing=0>
<colgroup width=20% class='col1 pad1 bold right'>
<colgroup width=30% class='col2 pad2'>
<colgroup width=20% class='col1 pad1 bold right'>
<colgroup width=30% class='col2 pad2'>
<tr>
<td colspan=4 class=title align=left><img src='<?=$g4[admin_path]?>/img/icon_title.gif'> <?=$html_title?></td>
</tr>
<tr><td colspan=4 class='line1'></td></tr>
<tr class='ht'>
<td>투표 제목</td>
<td colspan=3><input type='text' class=ed name='po_subject' style='width:99%;' required itemname='투표 제목' value='<?=$po[po_subject]?>' maxlength="125"></td>
</tr>
<?
for ($i=1; $i<=9; $i++) {
$required = "";
$itemname = "";
if ($i==1 || $i==2) {
$required = "required";
$itemname = "itemname='항목$i'";
}
$po_poll = get_text($po["po_poll".$i]);
echo <<<HEREDOC
<tr class='ht'>
<td>항목{$i}</td>
<td><input type="text" class=ed name="po_poll{$i}" {$required} {$itemname} value="{$po_poll}" style="width:99%;" maxlength="125"></td>
<td>투표수</td>
<td><input type="text" class=ed name="po_cnt{$i}" size=5 value="{$po["po_cnt".$i]}"></td>
</tr>
HEREDOC;
}
?>
<tr class='ht'>
<td>기타의견</td>
<td colspan=3><input type='text' class=ed name='po_etc' style='width:99%;' value='<?=get_text($po[po_etc])?>' maxlength="125"></td>
</tr>
<tr class='ht'>
<td>투표권한</td>
<td colspan=3><?=get_member_level_select("po_level", 1, 10, $po[po_level])?>이상 투표할 수 있음</td>
</tr>
<tr class='ht'>
<td>포인트</td>
<td colspan=3><input type='text' class=ed name='po_point' size='10' value='<?=$po[po_point]?>'> 점 (투표한 회원에게 부여함)</td>
</tr>
<? if ($w == "u") { ?>
<tr class='ht'>
<td>투표시작일</td>
<td colspan=3><input type="text" class=ed name="po_date" size=10 maxlength=10 value="<?=$po[po_date]?>"></td>
</tr>
<tr class='ht'>
<td>투표참가 IP</td>
<td colspan=3><textarea class=ed name="po_ips" rows=10 style='width:99%;' readonly><?=preg_replace("/\n/", " / ", $po[po_ips])?></textarea></td>
</tr>
<tr class='ht'>
<td>투표참가 회원</td>
<td colspan=3><textarea class=ed name="mb_ids" rows=10 style='width:99%;' readonly><?=preg_replace("/\n/", " / ", $po[mb_ids])?></textarea></td>
</tr>
<? } ?>
<tr><td colspan=4 class='line2'></td></tr>
</table>
<p align=center>
<input type=submit class=btn1 accesskey='s' value=' 확 인 '>&nbsp;
<input type=button class=btn1 value=' 목 록 ' onclick="document.location.href='./poll_list.php?<?=$qstr?>';">
</form>
<script type='text/javascript'>
function fpoll_check(f)
{
f.action = './poll_form_update.php';
return true;
}
</script>
<?
include_once("./admin.tail.php");
?>

Some files were not shown because too many files have changed in this diff Show More