diff --git a/LICENSE b/LICENSE index ce992b2ce..44acadbb8 100644 --- a/LICENSE +++ b/LICENSE @@ -1,281 +1,526 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, 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. - - GNU GENERAL PUBLIC LICENSE - 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 - +이 문서는 자유 소프트웨어 재단(Free Software Foundation)의 GNU General Public License를 +한국어로 번역한 것입니다. 이 문서는 GNU General Public License가 내포하고 있는 호혜적인 +자유와 공유의 정신을 보다 많은 사람들에게 알리기 위한 희망에서 작성되었지만, 자유 소프트 +웨어 재단의 공식 문서로 취급될 수는 없습니다. 이는 원래의 문서가 의도하고 있는 내용이 왜 +곡되지 않고 법률적으로 유효하기 위해서 선행되어야 할 양국의 현행 법률과 언어의 적합성 여 +부에 대한 전문가들의 검토 작업에 많은 비용이 필요하기 때문입니다. 또한 공식 번역문으로 인 +정된 문서라 하더라도 다른 언어로의 번역에 따른 위험 부담은 여전히 남아 있게 됩니다. 따라서 +자유 소프트웨어 재단은 오역이나 해석상의 난점으로 인해서 발생될 지도 모를 혼란과 분쟁의 +가능성을 미연에 방지하고, 문서가 담고 있는 내용과 취지를 보다 많은 사람들에게 알리려는 상 +반된 목적을, 한국어 번역문을 공식적으로 승인하지 않는 방법으로 양립시키고 있습니다. + +자유 소프트웨어 재단은 어떠한 언어에 대한 번역문도 공식적으로 인정하지 않고 있으며, +그러한 계획 또한 갖고 있지 않습니다. 자유 소프트웨어 재단은 GNU General Public License를 +실무에 적용할 경우, 오직 영문판에 의해서만 그 법률적 효력이 올바르게 발생될 수 있음을 권고하고 +있습니다. 이 번역문은 법률적 검토와 문서간의 동일성 여부에 대한 검증을 거치지 않은 것이며, +이로 인해서 야기될 수 있을 지도 모를 법률적인 문제에 대해서 어떠한 형태의 보증도 제공하지 +않습니다. GNU General Public License를 상업적인 목적으로 사용하려고 할 경우에는 변호사나 +변리사에게 직접 자문을 구하기 바랍니다. 그러나 대부분의 일반 사용자들에게는 이 번역문이 전달하려고 +하는 내용과 취지를 이해하는 것만으로도 충분할 것입니다. + +본 문서는 한글 번역된 GPL과 원본 영문 GPL을 전부 포함하고 있습니다. +-------------------------------------------------------------------------------------------------------------------------- + GNU 일반 공중 사용 허가서 + (GNU GENERAL PUBLIC LICENSE) + 제 2판, 1991년 6월 + (Version 2, June 1991) + + + +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자가 프로그램을 +조작함으로써 발생된 손실이나 다른 소프트웨어와 프로그램을 함께 동작시키는 것으로 인해서 발생된 데이 +터의 상실 및 부정확한 산출 결과에만 국한되는 것이 아닙니다. 발생된 손실의 일반성이나 특수성 뿐 아니 +라 원인의 우발성 및 필연성도 전혀 고려되지 않습니다. + +---------------------------------------------------------------------------------------------------------------------------- + + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser 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. + + GNU GENERAL PUBLIC LICENSE + 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. diff --git a/addons/point/point.addon.php b/addons/point/point.addon.php index aca5b5af9..03c877f61 100644 --- a/addons/point/point.addon.php +++ b/addons/point/point.addon.php @@ -50,7 +50,7 @@ // 포인트를 구해옴 $point = $config->module_point[$module_srl]['insert_document']; - if(!$point) $point = $config->insert_document; + if($point == null) $point = $config->insert_document; // 포인트 증감 $cur_point += $point; @@ -67,7 +67,7 @@ // 포인트를 구해옴 $point = $config->module_point[$module_srl]['insert_document']; - if(!$point) $point = $config->insert_document; + if($point == null) $point = $config->insert_document; // 포인트 차감 $cur_point = $oPointModel->getPoint($target_member_srl, true); @@ -90,7 +90,7 @@ // 포인트를 구해옴 $point = $config->module_point[$module_srl]['insert_comment']; - if(!$point) $point = $config->insert_comment; + if($point == null) $point = $config->insert_comment; // 포인트 증감 $cur_point += $point; @@ -109,7 +109,7 @@ // 포인트를 구해옴 $point = $config->module_point[$module_srl]['insert_comment']; - if(!$point) $point = $config->insert_comment; + if($point == null) $point = $config->insert_comment; // 포인트 증감 $cur_point = $oPointModel->getPoint($target_member_srl, true); @@ -130,7 +130,7 @@ // 포인트를 구해옴 $point = $config->module_point[$module_srl]['upload_file']; - if(!$point) $point = $config->upload_file; + if($point == null) $point = $config->upload_file; // 포인트 증감 $cur_point += $point; @@ -152,7 +152,7 @@ // 포인트를 구해옴 $point = $config->module_point[$module_srl]['upload_file']; - if(!$point) $point = $config->upload_file; + if($point == null) $point = $config->upload_file; // 포인트 차감 $cur_point = $oPointModel->getPoint($target_member_srl, true); @@ -178,18 +178,18 @@ // 포인트를 구해옴 $point = $config->module_point[$module_srl]['download_file']; - if(!$point) $point = $config->download_file; + if($point == null) $point = $config->download_file; // 포인트가 0보다 작고 포인트가 없으면 파일 다운로드가 안되도록 했다면 오류 if($cur_point + $point < 0 && $config->disable_download == 'Y') { $this->stop('msg_cannot_download'); + } else { + // 포인트 차감 + $cur_point += $point; + $oPointController = &getController('point'); + $oPointController->setPoint($member_srl,$cur_point); } - // 포인트 차감 - $cur_point += $point; - $oPointController = &getController('point'); - $oPointController->setPoint($member_srl,$cur_point); - // 글 삭제일 경우 대상 글의 사용자 번호 저장 } elseif(strpos($config->delete_document_act,$this->act)!==false) { $document_srl = Context::get('document_srl'); diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 2b2dd594e..06a610b0c 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -121,6 +121,15 @@ // 상대 경로 설정 $this->path = $this->getRequestUri(); + // 기본 JS/CSS 등록 + $this->addJsFile("./common/js/x.js"); + $this->addJsFile("./common/js/common.js"); + $this->addJsFile("./common/js/xml_handler.js"); + $this->addJsFile("./common/js/xml_js_filter.js"); + $this->addCSSFile("./common/css/default.css"); + $this->addCSSFile("./common/css/button.css"); + if(Context::get('module')=='admin' || strpos(Context::get('act'),'Admin')>0) $this->addCssFile("./modules/admin/tpl/css/admin.css"); + // rewrite module때문에 javascript에서 location.href 문제 해결을 위해 직접 실제 경로 설정 if($_SERVER['REQUEST_METHOD'] == 'GET') { if($this->get_vars) { @@ -676,6 +685,8 @@ **/ function _addJsFile($file) { if(in_array($file, $this->js_files)) return; + + if(!eregi("^http:\/\/",$file)) $file = str_replace(realpath("."), ".", realpath($file)); $this->js_files[] = $file; } @@ -691,7 +702,9 @@ * @brief js file 목록을 return **/ function _getJsFile() { - return $this->js_files; + require_once("./classes/optimizer/Optimizer.class.php"); + $oOptimizer = new Optimizer(); + return $oOptimizer->getOptimizedFiles($this->js_files, "js"); } /** @@ -707,6 +720,8 @@ **/ function _addCSSFile($file) { if(in_array($file, $this->css_files)) return; + + if(!eregi("^http:\/\/",$file)) $file = str_replace(realpath("."), ".", realpath($file)); $this->css_files[] = $file; } @@ -722,7 +737,9 @@ * @brief CSS file 목록 return **/ function _getCSSFile() { - return $this->css_files; + require_once("./classes/optimizer/Optimizer.class.php"); + $oOptimizer = new Optimizer(); + return $oOptimizer->getOptimizedFiles($this->css_files, "css"); } /** @@ -923,5 +940,18 @@ return WidgetHandler::execute($widget, $vars); } + /** + * @brief gzip encoding 여부 체크 + **/ + function isGzEnabled() { + if( + (defined('__OB_GZHANDLER_ENABLE__') && __OB_GZHANDLER_ENABLE__ == 1) && + strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')!==false && + function_exists('ob_gzhandler') && + extension_loaded('zlib') + ) return true; + return false; + } + } ?> diff --git a/classes/db/DB.class.php b/classes/db/DB.class.php index 103b16180..15f1449a8 100644 --- a/classes/db/DB.class.php +++ b/classes/db/DB.class.php @@ -289,6 +289,9 @@ case 'number' : if(!eregi('^[0-9]+$', $val)) return new Object(-1, sprintf($lang->filter->invalid_number, $lang->{$key}?$lang->{$key}:$key)); break; + case 'numbers' : + if(!eregi('^[0-9,]+$', $val)) return new Object(-1, sprintf($lang->filter->invalid_number, $lang->{$key}?$lang->{$key}:$key)); + break; case 'alpha' : if(!eregi('^[a-z]+$', $val)) return new Object(-1, sprintf($lang->filter->invalid_alpha, $lang->{$key}?$lang->{$key}:$key)); break; diff --git a/classes/display/DisplayHandler.class.php b/classes/display/DisplayHandler.class.php index c6772d2f7..db6019f28 100644 --- a/classes/display/DisplayHandler.class.php +++ b/classes/display/DisplayHandler.class.php @@ -22,12 +22,7 @@ function printContent(&$oModule) { // gzip encoding 지원 여부 체크 - if( - (defined('__OB_GZHANDLER_ENABLE__') && __OB_GZHANDLER_ENABLE__ == 1) && - strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')!==false && - function_exists('ob_gzhandler') && - extension_loaded('zlib') - ) $this->gz_enabled = true; + $this->gz_enabled = Context::isGzEnabled(); // header 출력 $this->_printHeader(); diff --git a/classes/file/FileHandler.class.php b/classes/file/FileHandler.class.php index fb63f77f7..fd4521d7e 100644 --- a/classes/file/FileHandler.class.php +++ b/classes/file/FileHandler.class.php @@ -40,6 +40,7 @@ if(@!$fp = fopen($file_name,$mode)) return false; fwrite($fp, $buff); fclose($fp); + @chmod($file_name, 0644); } /** @@ -116,6 +117,14 @@ @rmdir($path); } + /** + * @biref 지정된 디렉토리를 제외한 모든 파일을 삭제 + **/ + function removeFilesInDir($path) { + FileHandler::removedir($path); + FileHandler::makeDir($path); + } + /** * @brief byte단위의 파일크기를 적절하게 변환해서 return **/ @@ -150,7 +159,7 @@ $url_info['path'] = $path; } - $header = sprintf("GET %s HTTP/1.0\r\nHost: %s\r\nReferer: %s://%s\r\nRequestUrl: %s\r\nConnection: Close\r\n\r\n", $url_info['path'], $url_info['host'], $url_info['scheme'], $url_info['host'], Context::getRequestUri()); + $header = sprintf("GET %s?%s HTTP/1.0\r\nHost: %s\r\nReferer: %s://%s\r\nRequestUrl: %s\r\nConnection: Close\r\n\r\n", $url_info['path'], $url_info['query'], $url_info['host'], $url_info['scheme'], $url_info['host'], Context::getRequestUri()); @fwrite($fp, $header); @@ -214,6 +223,7 @@ if($resize_height>0 && $height >= $resize_height) $height_per = $resize_height / $height; if($width_per < $height_per) $per = $height_per; else $per = $width_per; + if(!$per) $per = 1; // 원본 이미지의 타입으로 임시 이미지 생성 switch($type) { @@ -246,14 +256,12 @@ $new_width = (int)($width * $per); $new_height = (int)($height * $per); - $x = ($resize_width/2 - $new_width/2); - $y = ($resize_height/2 - $new_height/2); + $x = (int)($resize_width/2 - $new_width/2); + $y = (int)($resize_height/2 - $new_height/2); if($source) { - if($new_width != $width || $new_height != $height) { - if(function_exists('imagecopyresampled')) @imagecopyresampled($thumb, $source, $x, $y, 0, 0, $new_width, $new_height, $width, $height); - else @imagecopyresized($thumb, $source, $x, $y, 0, 0, $new_width, $new_height, $width, $height); - } else $thumb = $source; + if(function_exists('imagecopyresampled')) @imagecopyresampled($thumb, $source, $x, $y, 0, 0, $new_width, $new_height, $width, $height); + else @imagecopyresized($thumb, $source, $x, $y, 0, 0, $new_width, $new_height, $width, $height); } // 파일을 쓰고 끝냄 diff --git a/classes/optimizer/Optimizer.class.php b/classes/optimizer/Optimizer.class.php new file mode 100644 index 000000000..2209eba0a --- /dev/null +++ b/classes/optimizer/Optimizer.class.php @@ -0,0 +1,148 @@ +cache_path)) { + FileHandler::makeDir($this->cache_path); + } + } + + /** + * @brief optimize 대상 파일을 받아서 처리 후 optimize 된 파일이름을 return + **/ + function getOptimizedFiles($source_files, $type = "js") { + if(!is_dir($this->cache_path)) return $source_files; + + $file_count = count($source_files); + for($i=0;$i<$file_count;$i++) { + $file = trim($source_files[$i]); + if(!$file) continue; + $file = str_replace("\\","/",$file); + if(eregi("^http:\/\/",$file) || $file == './common/css/button.css') $files[] = $file; + else $targets[] = $file; + } + + if(!count($targets)) return $files; + + $hashed_filename = $this->getHashFilename($targets); + + $filename = sprintf("%s%s.%s.php", $this->cache_path, $hashed_filename, $type); + + $this->doOptimizedFile($filename, $targets, $type); + + $files[] = $filename; + + return $files; + + } + + /** + * @brief optimize는 대상 파일을 \n로 연결후 md5 hashing하여 파일이름의 중복을 피함 + **/ + function getHashFilename($files) { + $buff = implode("\n", $files); + return md5($buff); + } + + /** + * @brief 이미 저장된 캐시 파일과의 시간등을 검사하여 새로 캐싱해야 할지를 체크 + **/ + function doOptimizedFile($filename, $targets, $type) { + if(!file_exists($filename)) return $this->makeOptimizedFile($filename, $targets, $type); + + $file_count = count($targets); + + $mtime = filemtime($filename); + for($i=0;$i<$file_count;$i++) { + if($mtime < filemtime($targets[$i])) return $this->makeOptimizedFile($filename, $targets, $type); + } + } + + /** + * @brief css나 js파일을 묶어서 하나의 파일로 만들고 gzip 압축이나 헤더등을 통제하기 위해서 php파일을 별도로 만들어서 진행함 + **/ + function makeOptimizedFile($filename, $targets, $type) { + /** + * 실제 css나 js의 내용을 합친 것을 구함 + **/ + // 대상 파일의 내용을 구해오고 css 파일일 경우 url()내의 경로를 변경 + $file_count = count($targets); + for($i=0;$i<$file_count;$i++) { + $file = $targets[$i]; + $str = FileHandler::readFile($file); + + // css 일경우 background:url() 변경 + if($type == "css") $str = $this->replaceCssPath($file, $str); + + $content_buff .= $str."\r\n"; + } + if(Context::isGzEnabled()) $content_buff = ob_gzhandler($content_buff, 5); + + $content_file = eregi_replace("\.php$","",$filename); + $content_filename = str_replace($this->cache_path, '', $content_file); + + FileHandler::writeFile($content_file, $content_buff); + + /** + * 압축을 지원하고 캐시 타임을 제대로 이용하기 위한 헤더 파일 구함 + **/ + // php의 헤더파일 생성 + $modified_time = gmdate("D, d M Y H:i:s"); + + // gzip 압축 체크 + if(Context::isGzEnabled()) $gzip_header = 'header("Content-Encoding: gzip");'; + + // 확장자별 content-type 체크 + if($type == 'css') $content_type = 'text/css'; + elseif($type == 'js') $content_type = 'text/javascript'; + + $header_buff = << +EndOfBuff; + + FileHandler::writeFile($filename, $header_buff); + } + + /** + * @brief css의 경우 import/ background 등의 속성에서 사용되는 url내의 경로를 변경시켜줌 + **/ + function replaceCssPath($file, $str) { + $this->tmp_css_path = Context::getRequestUri().ereg_replace("^\.\/","",dirname($file))."/"; + $str = preg_replace_callback('!url\(("|\'){0,1}([^\)]+)("|\'){0,1}\)!is', array($this, '_replaceCssPath'), $str); + + $str = preg_replace('!\/([^\/]*)\/\.\.\/!is','/', $str); + + return $str; + } + + function _replaceCssPath($matches) { + if(eregi("^http",$matches[2])) return $matches[0]; + if(eregi("^\.\/common\/",$matches[2])) return $matches[0]; + return sprintf('url(%s)', $this->tmp_css_path.$matches[2]); + } + + } +?> diff --git a/common/tpl/common_layout.html b/common/tpl/common_layout.html index 0e8444f01..c1458a9c2 100644 --- a/common/tpl/common_layout.html +++ b/common/tpl/common_layout.html @@ -1,4 +1,4 @@ - +{@ $js_files = Context::getJsFile() }{@ $css_files = Context::getCssFile() } @@ -9,16 +9,9 @@ {Context::getBrowserTitle()} - - - - - + + - - - - - - - - - - - - - -
- -
- -
-
-
- - - - - -
- -
- {$lang->edit->help_bold} - {$lang->edit->help_italic} - {$lang->edit->help_underline} - {$lang->edit->help_fontcolor} - {$lang->edit->help_fontbgcolor} -
-
- -
-
- {$lang->edit->help_align_left} - {$lang->edit->help_align_center} - {$lang->edit->help_align_right} - -
- - -
- - -
- - - -
-
-
- - - {$component->title} - - -
-
-
- -
- - -
- {$lang->about_dblclick_in_editor} - - close -
- - -
-
- -
-
 
-
- -
- -
- - - - - - - - -
- - diff --git a/modules/editor/tpl/js/editor.js b/modules/editor/tpl/js/editor.js index 5d1e2e4a7..76ecbdf47 100755 --- a/modules/editor/tpl/js/editor.js +++ b/modules/editor/tpl/js/editor.js @@ -7,8 +7,6 @@ /** * 에디터에서 사용하는 iframe, textarea의 prefix **/ -var iframe_id = 'editor_iframe_'; ///< 에디터로 사용하는 iframe의 prefix -var textarea_id = 'editor_textarea_'; ///< 에디터의 html편집 모드에서 사용하는 textarea의 prefix var editor_mode = new Array(); ///<< 에디터의 html편집 모드 flag 세팅 변수 var _editorSyncList = new Array(); ///< 에디터와 form 동기화를 위한 동기화 대상 목록 var _autoSaveObj = {fo_obj:null, editor_sequence:0, title:'', content:'', locked:false} ///< 자동저장을 위한 정보를 가진 object @@ -20,20 +18,19 @@ var editor_rel_keys = new Array(); ///< 에디터와 각 모듈과의 연동을 xAddEventListener(window, 'load', _editorSync); ///< 에디터의 동기화를 하는 함수를 window.load시 실행 - /** * 에디터의 상태나 객체를 구하기 위한 함수 **/ // editor_sequence값에 해당하는 iframe의 object를 return function editorGetIFrame(editor_sequence) { - var obj_id = iframe_id + editor_sequence; + var obj_id = 'editor_iframe_'+ editor_sequence; return xGetElementById(obj_id); } // editor_sequence값에 해당하는 textarea object를 return function editorGetTextArea(editor_sequence) { - var obj_id = textarea_id + editor_sequence; + var obj_id = 'editor_textarea_' + editor_sequence; return xGetElementById(obj_id); } @@ -148,9 +145,15 @@ function editorStart(editor_sequence, primary_key, content_key, resizable, edito // iframe내의 document element를 구함 var contentDocument = iframe_obj.contentWindow.document; - /** - * 에디터를 위지윅 모드로 만들기 위해 내용 작성 후 designMode 활성화 - **/ + // 크기 변경 불가일 경우 드래그바 숨김 + if(resizable == false) xGetElementById("editor_drag_bar_"+editor_sequence).style.display = "none"; + else xGetElementById("editor_drag_bar_"+editor_sequence).style.display = "block"; + + // IE일 경우 ctrl-Enter 안내 문구를 노출 + if(xIE4Up && xGetElementById('for_ie_help_'+editor_sequence)) { + xGetElementById('for_ie_help_'+editor_sequence).style.display = "block"; + } + var contentHtml = ''+ ''+ ''+ @@ -165,15 +168,31 @@ function editorStart(editor_sequence, primary_key, content_key, resizable, edito content+ ''+ ''; + contentDocument.open("text/html","replace"); + contentDocument.write(contentHtml); + contentDocument.close(); + + // editor_mode를 기본으로 설정 + editor_mode[editor_sequence] = null; + + // iframe에 focus가 될때 에디터 모드로 전환하도록 이벤트 지정 + if(xIE4Up) xAddEventListener(iframe_obj, "focus", function() { editorSetDesignMode(iframe_obj, contentDocument, content, fo_obj, editor_sequence, editor_height); } ); + else xAddEventListener(iframe_obj.contentWindow, "focus", function() { editorSetDesignMode(iframe_obj, contentDocument, content, fo_obj, editor_sequence, editor_height); } ); +} + +/** + * 에디터를 위지윅 모드로 만들기 위해 내용 작성 후 designMode 활성화 + **/ +var editor_is_started = new Array(); +function editorSetDesignMode(iframe_obj, contentDocument, content, fo_obj, editor_sequence, editor_height) { + if(editor_is_started[editor_sequence]) return; + contentDocument.designMode = 'on'; try { contentDocument.execCommand("undo", false, null); contentDocument.execCommand("useCSS", false, true); } catch (e) { } - contentDocument.open("text/html","replace"); - contentDocument.write(contentHtml); - contentDocument.close(); /** * 더블클릭이나 키눌림등의 각종 이벤트에 대해 listener 추가 @@ -189,11 +208,6 @@ function editorStart(editor_sequence, primary_key, content_key, resizable, edito xAddEventListener(document,'mouseup',editorEventCheck); xAddEventListener(document,'mousedown',editorHideObject); - // IE일 경우 ctrl-Enter 안내 문구를 노출 - if(xIE4Up && xGetElementById('for_ie_help_'+editor_sequence)) { - xGetElementById('for_ie_help_'+editor_sequence).style.display = "block"; - } - /** * 에디터의 내용을 지속적으로 fo_obj.content의 값과 동기화를 시킴. * 차후 다른 에디터를 사용하더라도 fo_obj.content와 동기화만 된다면 어떤 에디터라도 사용 가능하도록 하기 위해 @@ -204,12 +218,7 @@ function editorStart(editor_sequence, primary_key, content_key, resizable, edito // 자동저장 필드가 있다면 자동 저장 기능 활성화 if(typeof(fo_obj._saved_doc_title)!="undefined" ) editorEnableAutoSave(fo_obj, editor_sequence); - // 크기 변경 불가일 경우 드래그바 숨김 - if(resizable == false) xGetElementById("editor_drag_bar_"+editor_sequence).style.display = "none"; - else xGetElementById("editor_drag_bar_"+editor_sequence).style.display = "block"; - - // editor_mode를 기본으로 설정 - editor_mode[editor_sequence] = null; + editor_is_started[editor_sequence] = true; } @@ -819,4 +828,3 @@ function closeEditorInfo(editor_sequence) { expire.setTime(expire.getTime()+ (7000 * 24 * 3600000)); xSetCookie('EditorInfo', '1', expire); } - diff --git a/modules/file/file.class.php b/modules/file/file.class.php index 135bb4c1a..cb104100b 100644 --- a/modules/file/file.class.php +++ b/modules/file/file.class.php @@ -45,5 +45,11 @@ function moduleUpdate() { return new Object(); } + + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + } } ?> diff --git a/modules/file/queries/getOneFileInDocument.xml b/modules/file/queries/getOneFileInDocument.xml index 9423538d9..ebf90ef56 100644 --- a/modules/file/queries/getOneFileInDocument.xml +++ b/modules/file/queries/getOneFileInDocument.xml @@ -6,7 +6,7 @@ - + diff --git a/modules/guestbook/guestbook.class.php b/modules/guestbook/guestbook.class.php index 2e0f47e7f..211eb5613 100644 --- a/modules/guestbook/guestbook.class.php +++ b/modules/guestbook/guestbook.class.php @@ -55,5 +55,10 @@ return new Object(); } + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + } } ?> diff --git a/modules/importer/importer.class.php b/modules/importer/importer.class.php index 9f3b83dbe..b3bf5e6ec 100644 --- a/modules/importer/importer.class.php +++ b/modules/importer/importer.class.php @@ -32,5 +32,10 @@ return new Object(); } + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + } } ?> diff --git a/modules/install/install.class.php b/modules/install/install.class.php index 8695ccd86..c9fffeb66 100644 --- a/modules/install/install.class.php +++ b/modules/install/install.class.php @@ -28,5 +28,10 @@ return new Object(); } + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + } } ?> diff --git a/modules/integration_search/integration_search.class.php b/modules/integration_search/integration_search.class.php index 8356e4e50..c2834a9d4 100644 --- a/modules/integration_search/integration_search.class.php +++ b/modules/integration_search/integration_search.class.php @@ -43,5 +43,10 @@ return new Object(0, 'success_updated'); } + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + } } ?> diff --git a/modules/krzip/krzip.class.php b/modules/krzip/krzip.class.php index 1a2eb1a23..0fd7360dc 100644 --- a/modules/krzip/krzip.class.php +++ b/modules/krzip/krzip.class.php @@ -36,5 +36,10 @@ return new Object(); } + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + } } ?> diff --git a/modules/layout/layout.class.php b/modules/layout/layout.class.php index 614fbead3..ea84bcf7a 100644 --- a/modules/layout/layout.class.php +++ b/modules/layout/layout.class.php @@ -39,5 +39,11 @@ function moduleUpdate() { return new Object(); } + + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + } } ?> diff --git a/modules/member/lang/en.lang.php b/modules/member/lang/en.lang.php index 23edde262..b9bb655b1 100644 --- a/modules/member/lang/en.lang.php +++ b/modules/member/lang/en.lang.php @@ -60,6 +60,7 @@ 'email_address' => 'Email Address', 'regdate' => 'Join Date', 'last_login' => 'Latest Login Date', + 'extra_vars' => 'Extra Vars', ); $lang->message_box = array( diff --git a/modules/member/lang/es.lang.php b/modules/member/lang/es.lang.php index 697c1983b..74a40dd24 100644 --- a/modules/member/lang/es.lang.php +++ b/modules/member/lang/es.lang.php @@ -60,6 +60,7 @@ 'email_address' => 'Dirección de Email', 'regdate' => 'Fecha del registro', 'last_login' => 'Fecha de su última conección', + 'extra_vars' => 'Variables Extra', ); $lang->message_box = array( diff --git a/modules/member/lang/jp.lang.php b/modules/member/lang/jp.lang.php index e64473dea..92eb3dfec 100644 --- a/modules/member/lang/jp.lang.php +++ b/modules/member/lang/jp.lang.php @@ -60,6 +60,7 @@ 'email_address' => 'メールアドレス', 'regdate' => '加入日', 'last_login' => '最近のログイン', + 'extra_vars' => '拡張変数', ); $lang->message_box = array( diff --git a/modules/member/lang/ko.lang.php b/modules/member/lang/ko.lang.php index 757815769..8dd6744b6 100644 --- a/modules/member/lang/ko.lang.php +++ b/modules/member/lang/ko.lang.php @@ -60,6 +60,8 @@ 'email_address' => '메일주소', 'regdate' => '가입일시', 'last_login' => '최근로그인일시', + 'last_login' => '최근로그인일시', + 'extra_vars' => '확장변수', ); $lang->message_box = array( diff --git a/modules/member/lang/zh-CN.lang.php b/modules/member/lang/zh-CN.lang.php index aa71246f3..9e8303efc 100644 --- a/modules/member/lang/zh-CN.lang.php +++ b/modules/member/lang/zh-CN.lang.php @@ -60,6 +60,7 @@ 'email_address' => '邮箱地址', 'regdate' => '注册日期', 'last_login' => '最近登录', + 'extra_vars' => '扩展变数', ); $lang->message_box = array( @@ -171,4 +172,4 @@ $lang->about_openid_leave = '删除OpenID就等于永久删除站内用户的信息。
被删除后的重新登录就等于新会员注册,因此对以前自己写的主题将失去相应权限。'; $lang->about_member = "可以添加/修改/删除会员及管理用户组或注册表单的会员管理模块。\n此模块不仅可以生成缺省用户组以外的其他用户组来管理会员,并且通过注册表单的管理获得除会员基本信息以外的扩展信息。"; -?> \ No newline at end of file +?> diff --git a/modules/member/member.admin.controller.php b/modules/member/member.admin.controller.php index bbe9bd74a..803332599 100644 --- a/modules/member/member.admin.controller.php +++ b/modules/member/member.admin.controller.php @@ -18,7 +18,7 @@ **/ function procMemberAdminInsert() { // 필수 정보들을 미리 추출 - $args = Context::gets('member_srl','user_id','user_name','nick_name','homepage','blog','birthday','email_address','password','allow_mailing','allow_message','denied','is_admin','description','group_srl_list'); + $args = Context::gets('member_srl','user_id','user_name','nick_name','homepage','blog','birthday','email_address','password','allow_mailing','allow_message','denied','is_admin','description','group_srl_list','limit_date'); // 넘어온 모든 변수중에서 몇가지 불필요한 것들 삭제 $all_args = Context::getRequestVars(); diff --git a/modules/member/member.admin.model.php b/modules/member/member.admin.model.php index dd4548037..a1e9cefce 100644 --- a/modules/member/member.admin.model.php +++ b/modules/member/member.admin.model.php @@ -56,6 +56,9 @@ case 'last_login' : $args->s_last_login = $search_keyword; break; + case 'extra_vars' : + $args->s_extra_vars = $search_keyword; + break; } } diff --git a/modules/member/member.class.php b/modules/member/member.class.php index 2234d92b5..98b2b6a18 100644 --- a/modules/member/member.class.php +++ b/modules/member/member.class.php @@ -154,5 +154,11 @@ return new Object(0, 'success_updated'); } + + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + } } ?> diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index 10677367d..90798f79a 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -16,7 +16,7 @@ /** * @brief user_id, password를 체크하여 로그인 시킴 **/ - function procMemberLogin() { + function procMemberLogin($user_id = null, $password = null, $remember_user_id = null) { // 변수 정리 if(!$user_id) $user_id = Context::get('user_id'); $user_id = trim($user_id); @@ -24,6 +24,9 @@ if(!$password) $password = Context::get('password'); $password = trim($password); + if($remember_user_id) $remember_user_id = Context::get('remember_user_id'); + if($remember_user_id != 'Y') setcookie('user_id',''); + // 아이디나 비밀번호가 없을때 오류 return if(!$user_id) return new Object(-1,'null_user_id'); if(!$password) return new Object(-1,'null_password'); @@ -599,6 +602,9 @@ unset($all_args->is_admin); unset($all_args->description); unset($all_args->group_srl_list); + unset($all_args->body); + unset($all_args->accept_agreement); + unset($all_args->signature); // 모든 request argument에서 필수 정보만 제외 한 후 추가 데이터로 입력 $extra_vars = delObjectVars($all_args, $args); @@ -636,6 +642,9 @@ unset($all_args->is_admin); unset($all_args->description); unset($all_args->group_srl_list); + unset($all_args->body); + unset($all_args->accept_agreement); + unset($all_args->signature); // 모든 request argument에서 필수 정보만 제외 한 후 추가 데이터로 입력 $extra_vars = delObjectVars($all_args, $args); @@ -964,7 +973,7 @@ if($member_info->denied == 'Y') return new Object(-1,'msg_user_denied'); // denied_date가 현 시간보다 적으면 알림 - if($member_info->limit_date && $member_info->limit_date >= date("YmdHis")) return new Object(-1,sprintf(Context::getLang('msg_user_limited'),zdate($member_info->limit_date,"Y-m-d H:i"))); + if($member_info->limit_date && $member_info->limit_date >= date("Ymd")) return new Object(-1,sprintf(Context::getLang('msg_user_limited'),zdate($member_info->limit_date,"Y-m-d"))); // 사용자 정보의 최근 로그인 시간을 기록 $args->member_srl = $member_info->member_srl; diff --git a/modules/member/queries/getMemberList.xml b/modules/member/queries/getMemberList.xml index 5653dd6c0..97bd4c0d1 100644 --- a/modules/member/queries/getMemberList.xml +++ b/modules/member/queries/getMemberList.xml @@ -13,6 +13,7 @@ + diff --git a/modules/member/queries/getMemberListWithinGroup.xml b/modules/member/queries/getMemberListWithinGroup.xml index a2e8ceb5f..3663682ab 100644 --- a/modules/member/queries/getMemberListWithinGroup.xml +++ b/modules/member/queries/getMemberListWithinGroup.xml @@ -16,6 +16,7 @@ + diff --git a/modules/member/queries/updateMember.xml b/modules/member/queries/updateMember.xml index 69aa53458..98e4d26aa 100644 --- a/modules/member/queries/updateMember.xml +++ b/modules/member/queries/updateMember.xml @@ -15,6 +15,7 @@ + diff --git a/modules/member/skins/cozy_simple/css/common.css b/modules/member/skins/cozy_simple/css/common.css index 56eaab45e..2200d2b8f 100644 --- a/modules/member/skins/cozy_simple/css/common.css +++ b/modules/member/skins/cozy_simple/css/common.css @@ -535,3 +535,6 @@ Jeong, Chan Myeong 070601~070630 .memberInfoTable td p { float:left; font-size:.9em; color:#999999; padding-top:.5em; margin-right:.5em;} .memberInfoTable td label { float:left; color:#3f4040; padding-top:.3em; margin-right:.5em;} .memberInfoTable td .checkbox { border:none; } + +.agreementBox { border:1px solid #AAAAAA; margin:.5em 0 0 0; padding:1em; border-bottom:none; height:200px; overflow-y:scroll;} +.agreementButton { background-color:#EEEEEE; padding:1em; border:1px solid #AAAAAA; border-top:none; margin-bottom:1em; } diff --git a/modules/member/skins/cozy_simple/filter/modify_info.xml b/modules/member/skins/cozy_simple/filter/modify_info.xml index d700e2dd1..9c7823ee3 100644 --- a/modules/member/skins/cozy_simple/filter/modify_info.xml +++ b/modules/member/skins/cozy_simple/filter/modify_info.xml @@ -1,6 +1,6 @@
- + diff --git a/modules/member/skins/cozy_simple/filter/signup.xml b/modules/member/skins/cozy_simple/filter/signup.xml index 8765250c6..ae5860675 100644 --- a/modules/member/skins/cozy_simple/filter/signup.xml +++ b/modules/member/skins/cozy_simple/filter/signup.xml @@ -1,6 +1,6 @@
- + diff --git a/modules/member/skins/default/css/common.css b/modules/member/skins/default/css/common.css index a862b2a74..1efec6644 100644 --- a/modules/member/skins/default/css/common.css +++ b/modules/member/skins/default/css/common.css @@ -116,7 +116,7 @@ .krZip .address2 { clear:both; margin-top:10px;} .extendDesc { clear:both; margin-top:0; font-size:.9em; color:#999999; } -.agreementBox { border:1px solid #AAAAAA; margin:.5em 0 0 0; padding:1em; border-bottom:none;} +.agreementBox { border:1px solid #AAAAAA; margin:.5em 0 0 0; padding:1em; border-bottom:none; height:200px; overflow-y:scroll;} .agreementButton { background-color:#EEEEEE; padding:1em; border:1px solid #AAAAAA; border-top:none;} /* popup common */ diff --git a/modules/member/skins/default/filter/modify_info.xml b/modules/member/skins/default/filter/modify_info.xml index d700e2dd1..9c7823ee3 100644 --- a/modules/member/skins/default/filter/modify_info.xml +++ b/modules/member/skins/default/filter/modify_info.xml @@ -1,6 +1,6 @@ - + diff --git a/modules/member/skins/default/filter/signup.xml b/modules/member/skins/default/filter/signup.xml index 8765250c6..ae5860675 100644 --- a/modules/member/skins/default/filter/signup.xml +++ b/modules/member/skins/default/filter/signup.xml @@ -1,6 +1,6 @@
- + diff --git a/modules/member/tpl/filter/insert.xml b/modules/member/tpl/filter/insert.xml index 886a1786a..12c6bed25 100644 --- a/modules/member/tpl/filter/insert.xml +++ b/modules/member/tpl/filter/insert.xml @@ -1,6 +1,6 @@ - + @@ -23,6 +23,7 @@ + diff --git a/modules/menu/menu.class.php b/modules/menu/menu.class.php index d862e8913..50e17715d 100644 --- a/modules/menu/menu.class.php +++ b/modules/menu/menu.class.php @@ -36,5 +36,26 @@ function moduleUpdate() { return new Object(); } + + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + // 메뉴 모듈의 캐시 파일 모두 삭제 + FileHandler::removeFilesInDir("./files/cache/menu"); + + $oMenuAdminController = &getAdminController('menu'); + + // 블로그 모듈 목록을 모두 구함 + $output = executeQueryArray("menu.getMenus"); + $list = $output->data; + if(!count($list)) return; + + // 메뉴 모듈에서 사용되는 모든 메뉴 목록을 재 생성 + foreach($list as $menu_item) { + $menu_srl = $menu_item->menu_srl; + $oMenuAdminController->makeXmlFile($menu_srl); + } + } } ?> diff --git a/modules/message/message.class.php b/modules/message/message.class.php index 07be57488..62e8cadac 100644 --- a/modules/message/message.class.php +++ b/modules/message/message.class.php @@ -33,5 +33,10 @@ return new Object(); } + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + } } ?> diff --git a/modules/module/module.class.php b/modules/module/module.class.php index 3db20dcf5..9132c80c2 100644 --- a/modules/module/module.class.php +++ b/modules/module/module.class.php @@ -38,5 +38,12 @@ return new Object(); } + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + // 모듈 정보 캐시 파일 모두 삭제 + FileHandler::removeFilesInDir("./files/cache/module_info"); + } } ?> diff --git a/modules/opage/opage.admin.controller.php b/modules/opage/opage.admin.controller.php index 533487ca5..1bf5ad0bb 100644 --- a/modules/opage/opage.admin.controller.php +++ b/modules/opage/opage.admin.controller.php @@ -70,7 +70,7 @@ $oModuleController->updateModuleGrant($module_info->module_srl, $grants); // 캐시 파일 삭제 - $cache_file = sprintf("./files/cache/opage/%d.cache", $module_info->module_srl); + $cache_file = sprintf("./files/cache/opage/%d.cache.php", $module_info->module_srl); if(file_exists($cache_file)) @unlink($cache_file); // 등록 성공후 return될 메세지 정리 diff --git a/modules/opage/opage.class.php b/modules/opage/opage.class.php index 2e21703ac..b94d54d8a 100644 --- a/modules/opage/opage.class.php +++ b/modules/opage/opage.class.php @@ -66,5 +66,12 @@ return new Object(0, 'success_updated'); } + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + // 외부 페이지 캐시 파일 삭제 + FileHandler::removeFilesInDir("./files/cache/opage"); + } } ?> diff --git a/modules/opage/opage.view.php b/modules/opage/opage.view.php index 14dd74fa5..a74349507 100644 --- a/modules/opage/opage.view.php +++ b/modules/opage/opage.view.php @@ -91,15 +91,28 @@ * @brief 내부 파일일 경우 include하도록 캐시파일을 만들고 처리 **/ function executeFile($path, $caching_interval, $cache_file) { + // 파일이 없으면 취소 + if(!file_exists($path)) return; + + // 경로와 파일이름을 구함 + $tmp_path = explode('/',$cache_file); + $filename = $tmp_path[count($tmp_path)-1]; + $filepath = ereg_replace($filename."$","",$cache_file); // 캐시 검사 - if($caching_interval <1 || !file_exists($cache_file) || filemtime($cache_file) + $caching_interval*60 <= time()) { + if($caching_interval <1 || !file_exists($cache_file) || filemtime($cache_file) + $caching_interval*60 <= time() || filemtime($cache_file)tpl_path = $filepath; + if($_SESSION['is_logged']) $__Context->logged_info = $_SESSION['logged_info']; + + ob_start(); + @include($cache_file); + $content = ob_get_contents(); + ob_end_clean(); return $content; } diff --git a/modules/page/page.class.php b/modules/page/page.class.php index 9fb9eb081..54e29c90b 100644 --- a/modules/page/page.class.php +++ b/modules/page/page.class.php @@ -40,5 +40,12 @@ return new Object(); } + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + // 페이지 캐시 파일 삭제 + FileHandler::removeFilesInDir("./files/cache/page"); + } } ?> diff --git a/modules/point/point.admin.controller.php b/modules/point/point.admin.controller.php index d396d6270..2c0e0d312 100644 --- a/modules/point/point.admin.controller.php +++ b/modules/point/point.admin.controller.php @@ -61,10 +61,10 @@ // 변수 정리 $args = Context::getRequestVars(); - $config->insert_document = $args->insert_document; - $config->insert_comment = $args->insert_comment; - $config->upload_file = $args->upload_file; - $config->download_file = $args->download_file; + $config->insert_document = (int)$args->insert_document; + $config->insert_comment = (int)$args->insert_comment; + $config->upload_file = (int)$args->upload_file; + $config->download_file = (int)$args->download_file; foreach($args as $key => $val) { preg_match("/^(insert_document|insert_comment|upload_file|download_file)_([0-9]+)$/", $key, $matches); @@ -72,7 +72,7 @@ $name = $matches[1]; $module_srl = $matches[2]; if(strlen($val)==0) unset($config->module_point[$module_srl][$name]); - else $config->module_point[$module_srl][$name] = $val; + else $config->module_point[$module_srl][$name] = (int)$val; } // 저장 @@ -120,7 +120,7 @@ $point = Context::get('point'); $oPointController = &getController('point'); - return $oPointController->setPoint($member_srl, $point); + return $oPointController->setPoint($member_srl, (int)$point); } /** diff --git a/modules/point/point.admin.view.php b/modules/point/point.admin.view.php index d69479a56..29cbb7c80 100644 --- a/modules/point/point.admin.view.php +++ b/modules/point/point.admin.view.php @@ -71,6 +71,13 @@ Context::set('member_list', $output->data); Context::set('page_navigation', $output->page_navigation); + // 멤버모델 객체 생성 + $oMemberModel = &getModel('member'); + + // group 목록 가져오기 + $this->group_list = $oMemberModel->getGroups(); + Context::set('group_list', $this->group_list); + // 템플릿 지정 $this->setTemplateFile('member_list'); } diff --git a/modules/point/point.class.php b/modules/point/point.class.php index 2be4cf040..c0814c786 100644 --- a/modules/point/point.class.php +++ b/modules/point/point.class.php @@ -89,5 +89,14 @@ return new Object(0, 'success_updated'); } + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + // point action 파일 재정의 + $oPointAdminController = &getAdminController('point'); + $oPointAdminController->cacheActList(); + + } } ?> diff --git a/modules/point/point.model.php b/modules/point/point.model.php index 2e93a161f..105c4c5fe 100644 --- a/modules/point/point.model.php +++ b/modules/point/point.model.php @@ -57,21 +57,21 @@ * @brief 포인트 순 회원목록 가져오기 **/ function getMemberList($args = null) { - if(!$args) { - $args->list_count = 20; - $args->page = 1; - } - $output = executeQuery("point.getMemberList", $args); + // member model 객체 생성후 목록을 구해옴 + $oMemberModel = &getAdminModel('member'); + $output = $oMemberModel->getMemberList(); + if($output->total_count) { $oModuleModel = &getModel('module'); $config = $oModuleModel->getModuleConfig('point'); foreach($output->data as $key => $val) { - $point = $val->point; - $level = $this->getLevel($val->point, $config->level_step); - $output->data[$key]->level = $level; + $point = $this->getPoint($val->member_srl); + $output->data[$key]->point = $point; + $output->data[$key]->level = $this->getLevel($point, $config->level_step); } } + return $output; } } diff --git a/modules/point/tpl/member_list.html b/modules/point/tpl/member_list.html index 92e0ff36d..65b44de57 100644 --- a/modules/point/tpl/member_list.html +++ b/modules/point/tpl/member_list.html @@ -46,3 +46,35 @@ {$lang->last_page} + + + + + +
+ + + + + + + + {$lang->cmd_cancel} +
+ \ No newline at end of file diff --git a/modules/poll/poll.class.php b/modules/poll/poll.class.php index a3fa8b801..6b59e7d05 100644 --- a/modules/poll/poll.class.php +++ b/modules/poll/poll.class.php @@ -39,5 +39,10 @@ return new Object(); } + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + } } ?> diff --git a/modules/rss/rss.class.php b/modules/rss/rss.class.php index 165bea8ef..c27491cc7 100644 --- a/modules/rss/rss.class.php +++ b/modules/rss/rss.class.php @@ -32,5 +32,10 @@ return new Object(); } + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + } } ?> diff --git a/modules/spamfilter/queries/deleteDeniedIP.xml b/modules/spamfilter/queries/deleteDeniedIP.xml index 55171ca25..7269df268 100644 --- a/modules/spamfilter/queries/deleteDeniedIP.xml +++ b/modules/spamfilter/queries/deleteDeniedIP.xml @@ -3,6 +3,6 @@ - + diff --git a/modules/spamfilter/queries/deleteDeniedWord.xml b/modules/spamfilter/queries/deleteDeniedWord.xml index b20002cf1..0f5eef8c3 100644 --- a/modules/spamfilter/queries/deleteDeniedWord.xml +++ b/modules/spamfilter/queries/deleteDeniedWord.xml @@ -3,6 +3,6 @@
- + diff --git a/modules/spamfilter/queries/getLogCount.xml b/modules/spamfilter/queries/getLogCount.xml index ec1b4bfad..d9b4aa824 100644 --- a/modules/spamfilter/queries/getLogCount.xml +++ b/modules/spamfilter/queries/getLogCount.xml @@ -6,7 +6,7 @@ - + diff --git a/modules/spamfilter/queries/isDeniedIP.xml b/modules/spamfilter/queries/isDeniedIP.xml index 272537e10..6bfd31adf 100644 --- a/modules/spamfilter/queries/isDeniedIP.xml +++ b/modules/spamfilter/queries/isDeniedIP.xml @@ -6,6 +6,6 @@ - + diff --git a/modules/spamfilter/spamfilter.class.php b/modules/spamfilter/spamfilter.class.php index e3d68f5d0..b1375b138 100644 --- a/modules/spamfilter/spamfilter.class.php +++ b/modules/spamfilter/spamfilter.class.php @@ -34,5 +34,10 @@ return new Object(); } + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + } } ?> diff --git a/modules/tag/tag.class.php b/modules/tag/tag.class.php index b8076b416..9d0797071 100644 --- a/modules/tag/tag.class.php +++ b/modules/tag/tag.class.php @@ -28,5 +28,10 @@ return new Object(); } + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + } } ?> diff --git a/modules/trackback/trackback.class.php b/modules/trackback/trackback.class.php index a7baf71aa..4b0b11469 100644 --- a/modules/trackback/trackback.class.php +++ b/modules/trackback/trackback.class.php @@ -33,5 +33,10 @@ return new Object(); } + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + } } ?> diff --git a/modules/ttimporter/ttimporter.class.php b/modules/ttimporter/ttimporter.class.php index 1d099d7dc..237b83c9a 100644 --- a/modules/ttimporter/ttimporter.class.php +++ b/modules/ttimporter/ttimporter.class.php @@ -32,5 +32,10 @@ return new Object(); } + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + } } ?> diff --git a/modules/widget/widget.class.php b/modules/widget/widget.class.php index fcee1f982..3275a6599 100644 --- a/modules/widget/widget.class.php +++ b/modules/widget/widget.class.php @@ -37,5 +37,16 @@ function moduleUpdate() { return new Object(); } + + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + // widget 정보를 담은 캐시 파일 삭제 + FileHandler::removeFilesInDir("./files/cache/widget"); + + // widget 생성 캐시 파일 삭제 + FileHandler::removeFilesInDir("./files/cache/widget_cache"); + } } ?> diff --git a/widgets/calendar/calendar.class.php b/widgets/calendar/calendar.class.php index a3e5ce25b..56558731e 100644 --- a/widgets/calendar/calendar.class.php +++ b/widgets/calendar/calendar.class.php @@ -26,7 +26,7 @@ $regdate = Context::get('search_keyword'); if($regdate) $obj->regdate = zdate($regdate, 'Ym'); } - if(!$obj->regdate) $obj->regdate = date('Ym'); + if(!$obj->regdate) $obj->regdate = zdate(date('YmdHis'), 'Ym'); // document 모듈의 model 객체를 받아서 getDailyArchivedList() method를 실행 $oDocumentModel = &getModel('document'); diff --git a/widgets/login_info/skins/default/filter/login.xml b/widgets/login_info/skins/default/filter/login.xml index 9d39bc59b..9ac01dbee 100644 --- a/widgets/login_info/skins/default/filter/login.xml +++ b/widgets/login_info/skins/default/filter/login.xml @@ -3,10 +3,7 @@ - - - - + diff --git a/widgets/login_info/skins/xe_official/filter/login.xml b/widgets/login_info/skins/xe_official/filter/login.xml index 9d39bc59b..9ac01dbee 100644 --- a/widgets/login_info/skins/xe_official/filter/login.xml +++ b/widgets/login_info/skins/xe_official/filter/login.xml @@ -3,10 +3,7 @@ - - - - + diff --git a/widgets/newest_document/skins/blog_newest_document/list.html b/widgets/newest_document/skins/blog_newest_document/list.html index be6a08f2c..5910c0c08 100644 --- a/widgets/newest_document/skins/blog_newest_document/list.html +++ b/widgets/newest_document/skins/blog_newest_document/list.html @@ -22,7 +22,7 @@ diff --git a/widgets/newest_document/skins/cozy_simple/list.html b/widgets/newest_document/skins/cozy_simple/list.html index 716118341..0587e7600 100644 --- a/widgets/newest_document/skins/cozy_simple/list.html +++ b/widgets/newest_document/skins/cozy_simple/list.html @@ -23,7 +23,7 @@ diff --git a/widgets/newest_document/skins/default/list.html b/widgets/newest_document/skins/default/list.html index 5b72d6643..257434180 100644 --- a/widgets/newest_document/skins/default/list.html +++ b/widgets/newest_document/skins/default/list.html @@ -27,6 +27,8 @@ - {$oDocument->getNickName()} + + {$oDocument->printExtraImages()}
{$oDocument->getRegdate("Y-m-d")}
diff --git a/widgets/newest_document/skins/xe_official/list.html b/widgets/newest_document/skins/xe_official/list.html index dbf0517ec..b1221e3cd 100644 --- a/widgets/newest_document/skins/xe_official/list.html +++ b/widgets/newest_document/skins/xe_official/list.html @@ -18,6 +18,8 @@ [{$oDocument->getCommentCount()}] + + {$oDocument->printExtraImages()} {$oDocument->getRegdate("Y-m-d")} diff --git a/widgets/newest_images/newest_images.class.php b/widgets/newest_images/newest_images.class.php index e83a9a918..d35cc2be2 100644 --- a/widgets/newest_images/newest_images.class.php +++ b/widgets/newest_images/newest_images.class.php @@ -23,13 +23,13 @@ $widget_info->thumbnail_width = (int)$args->thumbnail_width; if(!$widget_info->thumbnail_width) $widget_info->thumbnail_width = 100; - // 가로 이미지 수 - $widget_info->rows_list_count = (int)$args->rows_list_count; - if(!$widget_info->rows_list_count) $widget_info->rows_list_count = 5; - // 세로 이미지 수 + $widget_info->rows_list_count = (int)$args->rows_list_count; + if(!$widget_info->rows_list_count) $widget_info->rows_list_count = 1; + + // 가로 이미지 수 $widget_info->cols_list_count = (int)$args->cols_list_count; - if(!$widget_info->cols_list_count) $widget_info->cols_list_count = 1; + if(!$widget_info->cols_list_count) $widget_info->cols_list_count = 5; // 노출 여부 체크 if($args->display_author!='Y') $widget_info->display_author = 'N';