diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..ce992b2ce --- /dev/null +++ b/LICENSE @@ -0,0 +1,281 @@ + 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 + diff --git a/addons/blogapi/conf/info.xml b/addons/blogapi/conf/info.xml index fab5123ba..566c7625e 100644 --- a/addons/blogapi/conf/info.xml +++ b/addons/blogapi/conf/info.xml @@ -1,42 +1,42 @@ - - - BlogAPI 애드온 - BlogAPI - BlogAPI - Addon for BlogAPI - Addon para BlogAPI - - 제로 - Zero - zero - zero - zero - - metaWeblog를 지원하는 blogApi애드온입니다. - 사용으로 설정하시면 각 모듈마다 RSD 태그를 노출합니다. - api의 주소는 http://설치주소/모듈명/api 입니다. - 사용으로 하셔야 RSD태그 및 api가 동작을 합니다. - - - MetaWeblogをサポートするBlogAPI アドオンです。「使用する」をクリックして設定すると各モジュールごとRSDのアドレスを表示します。API のアドレスは「http://インストールURL/モジュール名/api」です。 「使用する」に設定しておけば RSDのアドレスが表示され、 API が動作します。 - - - 支持metaWeblog的 blogApi插件。 - 设置为"启用"时,会使每个模块都会显示RSD标签。 - api地址为http://安装地址/模块名/api。 - 把状态设置为"使用"时,才会激活RSD标签及api。 - - - This blogApi addon supports metaWeblog. - Toggling this with use option lets RSD tag be exposed for each module. - URL to the api is http://setup_path/module_name/api. - Only selecting use option enables RSD tag and api to behave. - - - Este blogApi addon soporta el metaWeblog. - Si seleccionas la optión usar, cada módulo entregará la etiqueta RSD. - La dirección de api es http://dirección de la instalación/nombre de módulo/api. - Sólo si seleccionas la opción usar, funcionará la etiqueta RSD y api. - - - + + + BlogAPI 애드온 + BlogAPI + BlogAPI + Addon for BlogAPI + Addon para BlogAPI + + 제로 + Zero + zero + zero + zero + + metaWeblog를 지원하는 blogApi애드온입니다. + 사용으로 설정하시면 각 모듈마다 RSD 태그를 노출합니다. + api의 주소는 http://설치주소/모듈명/api 입니다. + 사용으로 하셔야 RSD태그 및 api가 동작을 합니다. + + + MetaWeblogをサポートするBlogAPI アドオンです。「使用する」をクリックして設定すると各モジュールごとRSDのアドレスを表示します。API のアドレスは「http://インストールURL/モジュール名/api」です。 「使用する」に設定しておけば RSDのアドレスが表示され、 API が動作します。 + + + 支持metaWeblog的 blogApi插件。 + 设置为"启用"时,会使每个模块都会显示RSD标签。 + api地址为http://安装地址/模块名/api。 + 把状态设置为"使用"时,才会激活RSD标签及api。 + + + This blogApi addon supports metaWeblog. + Toggling this with use option lets RSD tag be exposed for each module. + URL to the api is http://setup_path/module_name/api. + Only selecting use option enables RSD tag and api to behave. + + + Este blogApi addon soporta el metaWeblog. + Si seleccionas la optión usar, cada módulo entregará la etiqueta RSD. + La dirección de api es http://dirección de la instalación/nombre de módulo/api. + Sólo si seleccionas la opción usar, funcionará la etiqueta RSD y api. + + + diff --git a/addons/counter/conf/info.xml b/addons/counter/conf/info.xml index af6855c35..1d24de6b9 100644 --- a/addons/counter/conf/info.xml +++ b/addons/counter/conf/info.xml @@ -1,34 +1,34 @@ - - - 기본 카운터 애드온 - 接続カウンター - 网站访问统计 - Addon for basic counter - Addon contador básico - - 제로 - Zero - zero - zero - zero - - 제로보드XE의 기본 카운터 모듈을 이용하여 접속 정보를 기록합니다. - 이 애드온을 켜셔야 접속 정보 수집이 됩니다. - - - セロボードXEの接続カウンターモジュールは、接続情報を記録します。このアドオンを「使用」に設定しておくと接続情報が記録されます。 - - - 利用ZeroboardXE的网站访问统计模块记录网站访问信息。 - 把状态设置为"使用"时,才会记录网站访问信息. - - - This addon logs access information based on the basic counter module within Zeroboard XE. - It is necessary for aggregation of access information to turn on this addon. - - - Este addon contador básico de Zeroboard XE permite llevar la información de acceso a la página web de los visitantes. - Es necesario activar este addon para agregar la información de acceso. - - - + + + 기본 카운터 애드온 + 接続カウンター + 网站访问统计 + Addon for basic counter + Addon contador básico + + 제로 + Zero + zero + zero + zero + + 제로보드XE의 기본 카운터 모듈을 이용하여 접속 정보를 기록합니다. + 이 애드온을 켜셔야 접속 정보 수집이 됩니다. + + + セロボードXEの接続カウンターモジュールは、接続情報を記録します。このアドオンを「使用」に設定しておくと接続情報が記録されます。 + + + 利用ZeroboardXE的网站访问统计模块记录网站访问信息。 + 把状态设置为"使用"时,才会记录网站访问信息. + + + This addon logs access information based on the basic counter module within Zeroboard XE. + It is necessary for aggregation of access information to turn on this addon. + + + Este addon contador básico de Zeroboard XE permite llevar la información de acceso a la página web de los visitantes. + Es necesario activar este addon para agregar la información de acceso. + + + diff --git a/addons/google_analytics/conf/info.xml b/addons/google_analytics/conf/info.xml new file mode 100644 index 000000000..d268b3bc3 --- /dev/null +++ b/addons/google_analytics/conf/info.xml @@ -0,0 +1,16 @@ + + + Google Analytics + + 제로 + + Google Analytics 코드를 사이트에 추가할 수 있습니다. + + + + + uacct + Google Analytics 코드의 _uacct 값을 입력해주세요. + + + diff --git a/addons/google_analytics/google_analytics.addon.php b/addons/google_analytics/google_analytics.addon.php new file mode 100644 index 000000000..387b3891e --- /dev/null +++ b/addons/google_analytics/google_analytics.addon.php @@ -0,0 +1,27 @@ + + + +EndOfCss; + + Context::addHtmlFooter($js_code); +?> diff --git a/addons/member_extra_info/conf/info.xml b/addons/member_extra_info/conf/info.xml index 6e8df932b..dfb1ad8af 100644 --- a/addons/member_extra_info/conf/info.xml +++ b/addons/member_extra_info/conf/info.xml @@ -1,64 +1,64 @@ - - - 사용자 추가 정보 및 커뮤니케이션 기능 활성화 - 会員情報・コミュニティ - 用户扩展信息 - Addon for enabling facilities for providing additional information about users and communicating - Addon para activar la función de la Información addcional del usuario y de la comunicación. - - 제로 - Zero - zero - zero - zero - - 사용자의 정보중 이미지이름, 이미지마크, 서명등을 화면에 출력해주는 애드온입니다. - 이런 정보들을 사용하지 않을 경우를 대비하여 별도의 애드온으로 빼어서 실행시간을 줄여줍니다. - 이미지이름, 이미지마크, 서명등을 노출하고 싶다면 이 애드온을 활성화 시키세요. - 1. 출력되기 직전 &lt;div class="member_회원번호"&gt;....&lt;/div&gt; 로 정의가 된 부분을 찾아 회원번호를 구해서 이미지이름, 이미지마크가 있는지를 확인하여 있으면 내용을 변경해버립니다. - 2. 출력되기 직전 &lt;div class="document_번호"&gt;...&lt;/div&gt;로 정의된 곳을 찾아 글의 내용이라 판단, 하단에 서명을 추가합니다. - 3. 새로운 쪽지가 왔을 경우 팝업으로 띄움 - 4. MemberModel::getMemberMenu 호출시 대상이 회원일 경우 쪽지 보내기 기능 추가합니다. - 5. MemberModel::getMemberMenu 호출시 친구 등록 메뉴를 추가합니다. - - - 会員情報のイメージ名、イメージマーク、署名などを画面に表示するアドオンです。このような情報を使用しない場合、アドオンを「使用」に設定すれば、実行時間を少なくします。イメージ名、イメージマーク、署名などを表示させたい時は、このアドオンを「使用」に設定して下さい。 - - 1. 出力の直前 <div class="member_会員番号">....</div> に定義された部分を探し、会員番号をチェックしてイメージ名、イメージマークがあるかを確認します。あった場合は内容を変更します - 2. 出力の直前 <div class="document_番号">...</div>に定義された部分を探し、書込みの内容だと判断して、下段に署名を追加します - 3. 新しいメッセージが来た場合ポップアップで表示します - 4. MemberModel::getMemberMenu を呼出す時、相手が会員の場合はメッセージ送信の機能を追加します - 5. MemberModel::getMemberMenu を呼出す時、友達登録メニュを追加します - - - 此插件将把用户信息中的昵称图片,用户图标,签名等信息显示到页面当中。 - 因部分用户不使用此项功能或为了考虑页面载入速度,以插件形式提供此项功能。 - 要想使用会员扩展信息请激活此插件。 - 1. 显示之前先查找定义为 &lt;div class="member_会员编号"&gt;....&lt;/div&gt; 的部分获得会员编号后,再以会员编号确认有没有昵称图片/用户图标,有的话即可更新相关内容。 - 2. 显示之前先查找定义为 &lt;div class="document_编号"&gt;...&lt;/div&gt;的部分判断此处为主题内容后,在此处下方添加个人签名。 - 3. 收到新消息时,用弹出窗口显示。 - 4. 呼出MemberModel::getMemberMenu时,如对方是会员,就添加[发送短消息]功能。 - 5. 呼出MemberModel::getMemberMenu时,添加[加为好友]菜单。 - - - Among other information about users, this addon displays image name, image mark, and signature. - In case of you not use this information, this stands apart from basic information so runtime should be reduced. - To expose image name, image mark, and signature, please turn on this addon. - 1. Just before displaying user information, this will figure out unique key of member from the definition of "&lt;div class="member_{unique key of member}"&gt;....&lt;/div&gt;" and replace image name and/or image mark if they exsist. - 2. Just before displaying, this is gonna locate the definition of "&lt;div class="document_{unique key of document}"&gt;...&lt;/div&gt;" and insert the signature below it. - 3. When arrived a new slip, this will popup it. - 4. This makes available to send a slip if the target is a member when MemberModel::getMemberMenu is called. - 5. This adds a menu for registering as a friend when MemberModel::getMemberMenu is called. - - - Addon que permite mostrar en la pantalla las informaciones del usuario, la imagen del nombre, Imagen de marca y la firma . - En caso de no usar estas informaciones, esta forma de usar separadamente en addon permite reducir el tiempo de ejecución. - Deberá activar este addon si desea mostrar informaciones adicionales. - 1. Justo antes de mostrar la información del usuario, este addon buscará la definición "<div class="member_Número del usuario">....</div>", si la encuentra, reemplazará la imagen del nombre y/o la imagen de marca. - 2. Justo antes de mostrar, este addon va a localizar la definición "<div class="document_Número de documento">...</div> e insertará la firma en la parte final del documento. - 3. Si ha llegado un nuevo mensaje, aprarecerá una ventana popup. - 4. Se activa la función "Enviar Mensajes" si la persona que envió la nota es usuario al comprobar en MemberModel::getMemberMenu. - 5. Agrega el menú "Ägregar Amigo" al llamar MemberModel::getMemberMenu. - - - + + + 사용자 추가 정보 및 커뮤니케이션 기능 활성화 + 会員情報・コミュニティ + 用户扩展信息 + Addon for enabling facilities for providing additional information about users and communicating + Addon para activar la función de la Información addcional del usuario y de la comunicación. + + 제로 + Zero + zero + zero + zero + + 사용자의 정보중 이미지이름, 이미지마크, 서명등을 화면에 출력해주는 애드온입니다. + 이런 정보들을 사용하지 않을 경우를 대비하여 별도의 애드온으로 빼어서 실행시간을 줄여줍니다. + 이미지이름, 이미지마크, 서명등을 노출하고 싶다면 이 애드온을 활성화 시키세요. + 1. 출력되기 직전 &lt;div class="member_회원번호"&gt;....&lt;/div&gt; 로 정의가 된 부분을 찾아 회원번호를 구해서 이미지이름, 이미지마크가 있는지를 확인하여 있으면 내용을 변경해버립니다. + 2. 출력되기 직전 &lt;div class="document_번호"&gt;...&lt;/div&gt;로 정의된 곳을 찾아 글의 내용이라 판단, 하단에 서명을 추가합니다. + 3. 새로운 쪽지가 왔을 경우 팝업으로 띄움 + 4. MemberModel::getMemberMenu 호출시 대상이 회원일 경우 쪽지 보내기 기능 추가합니다. + 5. MemberModel::getMemberMenu 호출시 친구 등록 메뉴를 추가합니다. + + + 会員情報のイメージ名、イメージマーク、署名などを画面に表示するアドオンです。このような情報を使用しない場合、アドオンを「使用」に設定すれば、実行時間を少なくします。イメージ名、イメージマーク、署名などを表示させたい時は、このアドオンを「使用」に設定して下さい。 + + 1. 出力の直前 <div class="member_会員番号">....</div> に定義された部分を探し、会員番号をチェックしてイメージ名、イメージマークがあるかを確認します。あった場合は内容を変更します + 2. 出力の直前 <div class="document_番号">...</div>に定義された部分を探し、書込みの内容だと判断して、下段に署名を追加します + 3. 新しいメッセージが来た場合ポップアップで表示します + 4. MemberModel::getMemberMenu を呼出す時、相手が会員の場合はメッセージ送信の機能を追加します + 5. MemberModel::getMemberMenu を呼出す時、友達登録メニュを追加します + + + 此插件将把用户信息中的昵称图片,用户图标,签名等信息显示到页面当中。 + 因部分用户不使用此项功能或为了考虑页面载入速度,以插件形式提供此项功能。 + 要想使用会员扩展信息请激活此插件。 + 1. 显示之前先查找定义为 &lt;div class="member_会员编号"&gt;....&lt;/div&gt; 的部分获得会员编号后,再以会员编号确认有没有昵称图片/用户图标,有的话即可更新相关内容。 + 2. 显示之前先查找定义为 &lt;div class="document_编号"&gt;...&lt;/div&gt;的部分判断此处为主题内容后,在此处下方添加个人签名。 + 3. 收到新消息时,用弹出窗口显示。 + 4. 呼出MemberModel::getMemberMenu时,如对方是会员,就添加[发送短消息]功能。 + 5. 呼出MemberModel::getMemberMenu时,添加[加为好友]菜单。 + + + Among other information about users, this addon displays image name, image mark, and signature. + In case of you not use this information, this stands apart from basic information so runtime should be reduced. + To expose image name, image mark, and signature, please turn on this addon. + 1. Just before displaying user information, this will figure out unique key of member from the definition of "&lt;div class="member_{unique key of member}"&gt;....&lt;/div&gt;" and replace image name and/or image mark if they exsist. + 2. Just before displaying, this is gonna locate the definition of "&lt;div class="document_{unique key of document}"&gt;...&lt;/div&gt;" and insert the signature below it. + 3. When arrived a new slip, this will popup it. + 4. This makes available to send a slip if the target is a member when MemberModel::getMemberMenu is called. + 5. This adds a menu for registering as a friend when MemberModel::getMemberMenu is called. + + + Addon que permite mostrar en la pantalla las informaciones del usuario, la imagen del nombre, Imagen de marca y la firma . + En caso de no usar estas informaciones, esta forma de usar separadamente en addon permite reducir el tiempo de ejecución. + Deberá activar este addon si desea mostrar informaciones adicionales. + 1. Justo antes de mostrar la información del usuario, este addon buscará la definición "<div class="member_Número del usuario">....</div>", si la encuentra, reemplazará la imagen del nombre y/o la imagen de marca. + 2. Justo antes de mostrar, este addon va a localizar la definición "<div class="document_Número de documento">...</div> e insertará la firma en la parte final del documento. + 3. Si ha llegado un nuevo mensaje, aprarecerá una ventana popup. + 4. Se activa la función "Enviar Mensajes" si la persona que envió la nota es usuario al comprobar en MemberModel::getMemberMenu. + 5. Agrega el menú "Ägregar Amigo" al llamar MemberModel::getMemberMenu. + + + diff --git a/addons/openid_delegation_id/conf/info.xml b/addons/openid_delegation_id/conf/info.xml index 076c6f3a2..c004ede38 100644 --- a/addons/openid_delegation_id/conf/info.xml +++ b/addons/openid_delegation_id/conf/info.xml @@ -1,72 +1,72 @@ - - - OpenID delegation ID - OpenID - Addon for delegating domain name to OpenID - Delegación ID para OpenID - OpenID - - 제로 - zero - zero - zero - Zero - - 본인의 도메인을 사용하여 오픈아이디로 활용할 수 있도록 합니다. - 꼭 설정을 통해서 openid provider관련 값을 입력후 사용해주세요. - - - 可以把本人的域名当分散式身份验证系统(OpenID)来使用。 - 必须在设置中输入openid provider相关值后再使用。 - - - This addon enables you to use your own domian name as an OpenID. - Just be sure to set the values related with openid provider before using. - - - Utlizando su propio dominio puede usar como OpenID. - Debe utilizar luego de ingresar los valores relacionado con openid provider a través de la configuracion. - - - 保有するドメインをオープンIDとして活用することができます。必ず設定で、OpenIDのプロバイダー関連の情報を入力してから使用してください。 - - - - - server - server - server - Servidor - server - openid.server 값을 입력해 주세요. - 请输入 openid.server 值。 - Please input your openid.server value. - Ingrese el valor del openid.server. - openid.server の値を入力してください。 - - - delegate - delegate - delegate - delegado - delegate - openid.delegate값을 입력해주세요. - 请输入 openid.delegate 值。 - Please input your openid.delegate value. - Ingresar el valor del openid.delegate - openid.delegate の値を入力してください。 - - - xrds - xrds - xrds - xrds - xrds - X-XRDS-Location값을 입력해주세요. - 请输入 X-XRDS-Location 值。 - Please input your X-XRDS-Location value. - Ingresar el valor de X-XRDS-Location - X-XRDS-Location の値を入力してください。 - - - + + + OpenID delegation ID + OpenID + Addon for delegating domain name to OpenID + Delegación ID para OpenID + OpenID + + 제로 + zero + zero + zero + Zero + + 본인의 도메인을 사용하여 오픈아이디로 활용할 수 있도록 합니다. + 꼭 설정을 통해서 openid provider관련 값을 입력후 사용해주세요. + + + 可以把本人的域名当分散式身份验证系统(OpenID)来使用。 + 必须在设置中输入openid provider相关值后再使用。 + + + This addon enables you to use your own domian name as an OpenID. + Just be sure to set the values related with openid provider before using. + + + Utlizando su propio dominio puede usar como OpenID. + Debe utilizar luego de ingresar los valores relacionado con openid provider a través de la configuracion. + + + 保有するドメインをオープンIDとして活用することができます。必ず設定で、OpenIDのプロバイダー関連の情報を入力してから使用してください。 + + + + + server + server + server + Servidor + server + openid.server 값을 입력해 주세요. + 请输入 openid.server 值。 + Please input your openid.server value. + Ingrese el valor del openid.server. + openid.server の値を入力してください。 + + + delegate + delegate + delegate + delegado + delegate + openid.delegate값을 입력해주세요. + 请输入 openid.delegate 值。 + Please input your openid.delegate value. + Ingresar el valor del openid.delegate + openid.delegate の値を入力してください。 + + + xrds + xrds + xrds + xrds + xrds + X-XRDS-Location값을 입력해주세요. + 请输入 X-XRDS-Location 值。 + Please input your X-XRDS-Location value. + Ingresar el valor de X-XRDS-Location + X-XRDS-Location の値を入力してください。 + + + diff --git a/addons/point/conf/info.xml b/addons/point/conf/info.xml index 7dff8a9ce..7b85fa972 100644 --- a/addons/point/conf/info.xml +++ b/addons/point/conf/info.xml @@ -1,30 +1,30 @@ - - - 포인트 활성화 애드온 - 积分插件 - ポイントシステム - Addon for activating point - Addon para activar los puntos - - 제로 - Zero - Zero - zero - zero - - 포인트시스템 모듈에 설정된 내용을 바탕으로 글작성/삭제/댓글작성/삭제/파일업로드/삭제/다운로드등의 행동에 대해서 포인트를 기록합니다. - - - 以积分系统模块中设置的内容为基础,对发表/删除新帖,发表/删除评论,上传/下载/删除/文件等动作记录为积分。 - - - ポイントシステムモジュールで設定された内容を基に、書き込み作成・削除/コメント作成・削除/ファイルアップロード・削除/ダウンロードなどのユーザの活動に対してポイントを記録します。 - - - This addon records point on writing/deleting/adding comments/deleting comments/uploading/downloading following to point system module. - - - Este addon registra los puntos de acuerdo a la acción de escribir/borrar/agregar comentarios/borrar comentarios/subir_archivo/bajar_archivo,etc., siguiendo el módulo de sistema de puntos. - - - + + + 포인트 활성화 애드온 + 积分插件 + ポイントシステム + Addon for activating point + Addon para activar los puntos + + 제로 + Zero + Zero + zero + zero + + 포인트시스템 모듈에 설정된 내용을 바탕으로 글작성/삭제/댓글작성/삭제/파일업로드/삭제/다운로드등의 행동에 대해서 포인트를 기록합니다. + + + 以积分系统模块中设置的内容为基础,对发表/删除新帖,发表/删除评论,上传/下载/删除/文件等动作记录为积分。 + + + ポイントシステムモジュールで設定された内容を基に、書き込み作成・削除/コメント作成・削除/ファイルアップロード・削除/ダウンロードなどのユーザの活動に対してポイントを記録します。 + + + This addon records point on writing/deleting/adding comments/deleting comments/uploading/downloading following to point system module. + + + Este addon registra los puntos de acuerdo a la acción de escribir/borrar/agregar comentarios/borrar comentarios/subir_archivo/bajar_archivo,etc., siguiendo el módulo de sistema de puntos. + + + diff --git a/addons/point_level_icon/conf/info.xml b/addons/point_level_icon/conf/info.xml index d9216c759..1f8b64a83 100644 --- a/addons/point_level_icon/conf/info.xml +++ b/addons/point_level_icon/conf/info.xml @@ -1,34 +1,34 @@ - - - 포인트 레벨 아이콘 표시 애드온 - 积分级别图标 - ポイントレベルアイコン - Addon for displaying level icon - Addon para mostar el nivel del ícono - - 제로 - Zero - Zero - zero - zero - - 포인트 시스템을 사용중일 경우 사용자 이름 앞에 레벨 아이콘을 표시하도록 합니다. - 레벨 아이콘은 모듈 > 포인트시스템에서 선택 가능합니다. - - - 使用积分系统时,可以在用户名前显示级别图标。 - 级别图标可以在模块 > 积分系统中进行选择。 - - - ポイントシステムを使用している場合、ユーザ名の前にレベルアイコンを表示させます。レベルアイコンは、「モジュール>ポイントシステム」で選択できます。 - - - This addon displays level icon in front of user name when point system is using. - You can choose level icon on Module > Point System. - - - Este addon muestra el nivel del ícono delante del nombre del usuario cuando es usado el sistema de puntos. - Tu puedes elegir los icono de cada nivel en el módulo > Sistema de Puntos. - - - + + + 포인트 레벨 아이콘 표시 애드온 + 积分级别图标 + ポイントレベルアイコン + Addon for displaying level icon + Addon para mostar el nivel del ícono + + 제로 + Zero + Zero + zero + zero + + 포인트 시스템을 사용중일 경우 사용자 이름 앞에 레벨 아이콘을 표시하도록 합니다. + 레벨 아이콘은 모듈 > 포인트시스템에서 선택 가능합니다. + + + 使用积分系统时,可以在用户名前显示级别图标。 + 级别图标可以在模块 > 积分系统中进行选择。 + + + ポイントシステムを使用している場合、ユーザ名の前にレベルアイコンを表示させます。レベルアイコンは、「モジュール>ポイントシステム」で選択できます。 + + + This addon displays level icon in front of user name when point system is using. + You can choose level icon on Module > Point System. + + + Este addon muestra el nivel del ícono delante del nombre del usuario cuando es usado el sistema de puntos. + Tu puedes elegir los icono de cada nivel en el módulo > Sistema de Puntos. + + + diff --git a/addons/spamfilter/conf/info.xml b/addons/spamfilter/conf/info.xml index 7a31d4e79..1295296af 100644 --- a/addons/spamfilter/conf/info.xml +++ b/addons/spamfilter/conf/info.xml @@ -1,34 +1,34 @@ - - - 스팸필터 애드온 - 垃圾过滤 - Addon for filtering spam - Addon para filtrar los Spam - スパムフィルター - - 제로 - zero - zero - zero - Zero - - SpamFilter 모듈을 이용하여 글/코멘트/트랙백 등록 이전에 스팸 필터링 및 도배 방지를 합니다. - 자세한 설정은 " 스팸필터 모듈" 에서 해주세요. - - - 利用垃圾过滤模块在发表主题/评论/引用之前进行垃圾过滤。 - 请在" 垃圾过滤模块"中详细设置。 - - - This addon filters spam and prevents users from cluttering before saving entries, comments, or trackbacks to database by setting SpamFilter module. - You can set up more details on "Spam Filter module". - - - Este addon filtra y previene de los documentos/ commentarios/ trackback no deseado antes de ser agregados. - Para la configuración más detallada, debe hacerse en el " Módulo de Filtro de Spam". - - - SpamFilterモジュールを利用して書き込み・コメント・トラックバックが登録される前にフィルタリングを行います。更に連続書き込みやロボットによる自動書き込みなどを防ぐことができます。詳細な設定は " スパムフィルターモジュール " で行ってください。 - - - + + + 스팸필터 애드온 + 垃圾过滤 + Addon for filtering spam + Addon para filtrar los Spam + スパムフィルター + + 제로 + zero + zero + zero + Zero + + SpamFilter 모듈을 이용하여 글/코멘트/트랙백 등록 이전에 스팸 필터링 및 도배 방지를 합니다. + 자세한 설정은 " 스팸필터 모듈" 에서 해주세요. + + + 利用垃圾过滤模块在发表主题/评论/引用之前进行垃圾过滤。 + 请在" 垃圾过滤模块"中详细设置。 + + + This addon filters spam and prevents users from cluttering before saving entries, comments, or trackbacks to database by setting SpamFilter module. + You can set up more details on "Spam Filter module". + + + Este addon filtra y previene de los documentos/ commentarios/ trackback no deseado antes de ser agregados. + Para la configuración más detallada, debe hacerse en el " Módulo de Filtro de Spam". + + + SpamFilterモジュールを利用して書き込み・コメント・トラックバックが登録される前にフィルタリングを行います。更に連続書き込みやロボットによる自動書き込みなどを防ぐことができます。詳細な設定は " スパムフィルターモジュール " で行ってください。 + + + diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index e5dfcc8bc..2b2dd594e 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -336,13 +336,14 @@ $flag = true; foreach($obj as $key=>$val) { if(!$val) continue; - if($val && !iconv($charset,'UTF-8',$val)) $flag = false; + if($val && iconv($charset,$charset,$val)!=$val) $flag = false; } if($flag == true) { foreach($obj as $key => $val) $obj->{$key} = iconv($charset,'UTF-8',$val); return $obj; } } + return $obj; } /** @@ -868,7 +869,7 @@ function _transEditorComponent($matches) { // IE에서는 태그의 특성중에서 " 를 빼어 버리는 경우가 있기에 정규표현식으로 추가해줌 $buff = $matches[0]; - $buff = preg_replace_callback('/([^=^"^ ]*)=([^ ]*)/i', array($this, _fixQuotation), $buff); + $buff = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', array($this, _fixQuotation), $buff); $buff = str_replace("&","&",$buff); // 위젯에서 생성된 코드 (img, div태그내에 editor_widget코드 존재)의 parameter를 추출 diff --git a/classes/file/FileHandler.class.php b/classes/file/FileHandler.class.php index 794faf53d..fb63f77f7 100644 --- a/classes/file/FileHandler.class.php +++ b/classes/file/FileHandler.class.php @@ -133,6 +133,7 @@ $url_info = parse_url($url); if(!$url_info['port']) $url_info['port'] = 80; + if(!$url_info['path']) $url_info['path'] = '/'; $fp = @fsockopen($url_info['host'], $url_info['port']); if(!$fp) return; @@ -149,7 +150,7 @@ $url_info['path'] = $path; } - $header = sprintf("GET %s HTTP/2.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 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()); @fwrite($fp, $header); @@ -164,6 +165,7 @@ } @fclose($ft); @fclose($fp); + @chmod($target_filename, 0644); return true; } @@ -271,6 +273,7 @@ @imagewbmp($thumb, $target_file, 100); break; } + @chmod($target_file, 0644); } } ?> diff --git a/classes/module/ModuleHandler.class.php b/classes/module/ModuleHandler.class.php index b6e330ea9..34a646126 100644 --- a/classes/module/ModuleHandler.class.php +++ b/classes/module/ModuleHandler.class.php @@ -19,6 +19,7 @@ var $act = NULL; ///< action var $mid = NULL; ///< 모듈의 객체명 var $document_srl = NULL; ///< 문서 번호 + var $module_srl = NULL; ///< 모듈의 번호 var $module_info = NULL; ///< 모듈의 정보 @@ -31,7 +32,7 @@ * 인자를 넘겨주지 않으면 현 페이지 요청받은 Request Arguments를 이용하여 * 변수를 세팅한다. **/ - function ModuleHandler($module = '', $act = '', $mid = '', $document_srl = '') { + function ModuleHandler($module = '', $act = '', $mid = '', $document_srl = '', $module_srl = '') { // 설치가 안되어 있다면 install module을 지정 if(!Context::isInstalled()) { $this->module = 'install'; @@ -52,6 +53,9 @@ if(!$document_srl) $this->document_srl = (int)Context::get('document_srl'); else $this->document_srl = (int)$document_srl; + if(!$module_srl) $this->module_srl = (int)Context::get('module_srl'); + else $this->module_srl = (int)$module_srl; + // 기본 변수들의 검사 (XSS방지를 위한 기초적 검사) if($this->module && !eregi("^([a-z0-9\_\-]+)$",$this->module)) die(Context::getLang("msg_invalid_request")); if($this->mid && !eregi("^([a-z0-9\_\-]+)$",$this->mid)) die(Context::getLang("msg_invalid_request")); @@ -70,12 +74,22 @@ $oModuleModel = &getModel('module'); // document_srl이 있으면 document_srl로 모듈과 모듈 정보를 구함 - if($this->document_srl && !$this->mid) $module_info = $oModuleModel->getModuleInfoByDocumentSrl($this->document_srl); - if($this->module && $module_info->module != $this->module) unset($module_info); + if($this->document_srl && !$this->mid && !$this->module_srl) { + $module_info = $oModuleModel->getModuleInfoByDocumentSrl($this->document_srl); + if($this->module && $module_info->module != $this->module) unset($module_info); + } // 아직 모듈을 못 찾았고 $mid값이 있으면 $mid로 모듈을 구함 - if(!$module_info && $this->mid) $module_info = $oModuleModel->getModuleInfoByMid($this->mid); - if($this->module && $module_info->module != $this->module) unset($module_info); + if(!$module_info && $this->mid) { + $module_info = $oModuleModel->getModuleInfoByMid($this->mid); + if($this->module && $module_info->module != $this->module) unset($module_info); + } + + // 모듈을 여전히(;;) 못 찾고 $module_srl이 있으면 해당 모듈을 구함 + if(!$module_info && $this->module_srl) { + $module_info = $oModuleModel->getModuleInfoByModuleSrl($this->module_srl); + if($this->module && $module_info->module != $this->module) unset($module_info); + } // 역시 모듈을 못 찾았고 $module이 없다면 기본 모듈을 찾아봄 if(!$module_info && !$this->module) $module_info = $oModuleModel->getModuleInfoByMid(); diff --git a/classes/module/ModuleObject.class.php b/classes/module/ModuleObject.class.php index 3255e4b58..420542272 100644 --- a/classes/module/ModuleObject.class.php +++ b/classes/module/ModuleObject.class.php @@ -92,15 +92,7 @@ $grant->is_admin = false; } - // act값에 admin이 들어 있는데 관리자가 아닌 경우 오류 표시 - if(substr_count($this->act, 'Admin')) { - if(!$is_logged) { - $this->setAct("dispMemberLoginForm"); - } elseif(!$grant->is_admin) { - return $this->stop('msg_not_permitted_act'); - } - } - + // module.xml 에 있는 권한 정보를 정리 if($module_info->grants) { foreach($module_info->grants as $key => $val) { if(!$xml_info->grant->{$key}) { @@ -160,6 +152,21 @@ } } + // 현재 action값에 따른 최고 관리 권한 부여 + if($this->act && $xml_info->permission) { + $permission_target = $xml_info->permission->{$this->act}; + if($permission_target && $grant->{$permission_target}) { + foreach($grant as $key => $val) $grant->{$key} = true; + } + } + + // act값에 admin이 들어 있는데 관리자가 아닌 경우 오류 표시 + if(substr_count($this->act, 'Admin')) { + // 로그인 되어 있지 않다면 무조건 금지 + if(!$is_logged) $this->setAct("dispMemberLoginForm"); + elseif(!$grant->is_admin) $this->stop('msg_not_permitted_act'); + } + // 권한변수 설정 $this->grant = $grant; Context::set('grant', $grant); diff --git a/common/js/common.js b/common/js/common.js index 2f28c7f08..346306187 100644 --- a/common/js/common.js +++ b/common/js/common.js @@ -477,7 +477,16 @@ function chkMemberMenu(evt) { if(obj && obj.className && obj.className.search("member_")!=-1) break; obj = obj.parentNode; } - if(!obj || !obj.className || obj.className.search("member_")==-1) return; + if(!obj || !obj.className || obj.className.search("member_")==-1) { + // IE6의 경우 닫았던 select박스를 모두 표시 + if(xIE6) { + var list = xGetElementsByTagName("SELECT"); + for (var i=0; i=0) return; @@ -541,6 +550,16 @@ function displayMemberMenu(ret_obj, response_tags, params) { } if(html) { + // IE6의 경우 select박스를 모두 숨겨버림 + if(xIE6) { + var list = xGetElementsByTagName("SELECT"); + for (var i=0; i"+html+""); xWidth(area, xWidth(area)); xLeft(area, params["page_x"]); diff --git a/common/lang/en.lang.php b/common/lang/en.lang.php index c108d3fc7..2c3955ab6 100644 --- a/common/lang/en.lang.php +++ b/common/lang/en.lang.php @@ -26,6 +26,7 @@ $lang->cmd_cancel = 'Cancel'; $lang->cmd_back = 'Go Back'; $lang->cmd_vote = 'Vote'; + $lang->cmd_copy = 'Copy'; $lang->cmd_move = 'Move'; $lang->cmd_move_up = 'Up'; $lang->cmd_move_down = 'Down'; diff --git a/common/lang/es.lang.php b/common/lang/es.lang.php index ebc6a2928..0d1d5d132 100644 --- a/common/lang/es.lang.php +++ b/common/lang/es.lang.php @@ -26,6 +26,7 @@ $lang->cmd_cancel = 'Cancelar'; $lang->cmd_back = 'Atrás'; $lang->cmd_vote = 'Recomendar'; + $lang->cmd_copy = 'Copia'; $lang->cmd_move = 'Mover'; $lang->cmd_move_up = 'Arriba'; $lang->cmd_move_down = 'Abajo'; diff --git a/common/lang/fr.lang.php b/common/lang/fr.lang.php index 6bbd45d8b..a19486c0d 100644 --- a/common/lang/fr.lang.php +++ b/common/lang/fr.lang.php @@ -26,6 +26,7 @@ $lang->cmd_cancel = 'Decommander'; $lang->cmd_back = 'Retour'; $lang->cmd_vote = 'Voter'; + $lang->cmd_copy = 'Copie'; $lang->cmd_move = 'Deplacer'; $lang->cmd_move_up = 'Relever'; $lang->cmd_move_down = 'Abaisser'; diff --git a/common/lang/jp.lang.php b/common/lang/jp.lang.php index e8259d999..839f363cf 100644 --- a/common/lang/jp.lang.php +++ b/common/lang/jp.lang.php @@ -26,6 +26,7 @@ $lang->cmd_cancel = 'キャンセル'; $lang->cmd_back = '戻る'; $lang->cmd_vote = '推薦'; + $lang->cmd_copy = 'コピー'; $lang->cmd_move = '移動'; $lang->cmd_move_up = '上へ'; $lang->cmd_move_down = '下へ'; diff --git a/common/lang/ko.lang.php b/common/lang/ko.lang.php index 78473b3cf..43d53e49a 100644 --- a/common/lang/ko.lang.php +++ b/common/lang/ko.lang.php @@ -26,6 +26,7 @@ $lang->cmd_cancel = '취소'; $lang->cmd_back = '돌아가기'; $lang->cmd_vote = '추천'; + $lang->cmd_copy = '복사'; $lang->cmd_move = '이동'; $lang->cmd_move_up = '위로'; $lang->cmd_move_down = '아래로'; diff --git a/common/lang/zh-CN.lang.php b/common/lang/zh-CN.lang.php index d0e6edb29..7fbccfb25 100644 --- a/common/lang/zh-CN.lang.php +++ b/common/lang/zh-CN.lang.php @@ -26,6 +26,7 @@ $lang->cmd_cancel = '取消'; $lang->cmd_back = '返回'; $lang->cmd_vote = '推荐'; + $lang->cmd_copy = '副本'; $lang->cmd_move = '查看'; $lang->cmd_move_up = '向上'; $lang->cmd_move_down = '向下'; @@ -120,7 +121,7 @@ $lang->regdate = '登录日期'; $lang->last_update = '最后更新'; $lang->signup_date = '注册日期'; - $lang->last_login = '最近登陆'; + $lang->last_login = '最近登录'; $lang->first_page = '第一页'; $lang->last_page = '最后一页'; $lang->search_target = '搜索目标'; diff --git a/common/tpl/calendar.php b/common/tpl/calendar.php index a50c1fed0..b2bcef5d4 100644 --- a/common/tpl/calendar.php +++ b/common/tpl/calendar.php @@ -1,23 +1,31 @@ $max_year) $year = date("Y"); + if(!(int)$month || $month < 1 || $month > 12) $month = date("n"); switch($method) { case 'prev_year' : - $year = date("Y", mktime(0,0,0,1,1,$year)-60*60*24); + $year --; break; case 'prev_month' : $month --; @@ -34,16 +42,75 @@ } break; case 'next_year' : - $year = date("Y", mktime(0,0,0,12,31,$year)+60*60*24); + $year ++; break; } - $start_week = date("w", mktime(0,0,0,$month,1,$year)); - $month_day = date("t", mktime(0,0,0,$month,1,$year)); - $before_month_month_day = date("t", mktime(0,0,0,$month,1,$year)-60*60*24); +// 긴 이름 +$monthLongName = array(1 => "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); + +// 짧은 이름 +$monthShortName = array(1 => "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); + +// 요일 이름 +$dayName = array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"); + +/* + * @brief 윤년 검사 + */ +function isLeapYear($year) { + if ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0) return true; + else return false; +} + +/* + * @brief 날짜 수 계산 + */ +function convertDatetoDay($year, $month, $day = 0) { + $numOfLeapYear = 0; // 윤년의 수 + + // 전년도까지의 윤년의 수를 구한다. + for($i = 0; $i < $year; $i++) { + if(isLeapYear($i)) $numOfLeapYear++; + } + + // 전년도까지의 일 수를 구한다. + $toLastYearDaySum = ($year-1) * 365 + $numOfLeapYear; + + // 올해의 현재 월까지의 일수 계산 + $thisYearDaySum = 0; + // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 + $endOfMonth = array(1 => 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); + + for($i = 1; $i < $month; $i++) { + $thisYearDaySum += $endOfMonth[$i]; + } + + // 윤년이고, 2월이 포함되어 있으면 1일을 증가시킨다. + if ($month > 2 && isLeapYear($year)) $thisYearDaySum++; + + if(isLeapYear($year)) $endOfMonth[2] = 29; + + if($day) { + $thisYearDaySum += $day; + return $toLastYearDaySum + $thisYearDaySum - 1; + } else { + return $endOfMonth[$month]; + } +} + +/* + * @brief 요일 구하기 + */ +function getDayOfWeek($year, $month, $day) { + // 0~6의 값을 반환한다. 결과가 0이면 일요일이다. + return convertDatetoDay($year, $month, $day) % 7; +} + +$start_week = getDayOfWeek($year, $month, 1); +$month_day = convertDatetoDay($year, $month); +$before_month_month_day = convertDatetoDay( $month == 1 ? $year - 1 : $year, $month == 1 ? 12 : $month - 1); - $next_year = date("m", mktime(0,0,0,12,31, $year)+60*60*24); - $next_month = date("m", mktime(0,0,0,$month,$month_day, $year)+60*60*24); ?> @@ -67,8 +134,8 @@ return; } - var date_obj = opener.xGetElementById("date_"); - var str_obj = opener.xGetElementById("str_"); + var date_obj = opener.xGetElementById("date_"); + var str_obj = opener.xGetElementById("str_"); if(date_obj) date_obj.value = date_val; @@ -82,99 +149,112 @@ -