mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-31 17:19:59 +09:00
2007. 09. 19. 16:30 sandbox를 beta 0.1.5로 배포하기 위해서 trunk로 copy
git-svn-id: http://xe-core.googlecode.com/svn/trunk@2627 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
commit
507bca7816
147 changed files with 4111 additions and 2075 deletions
281
LICENSE
Normal file
281
LICENSE
Normal file
|
|
@ -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
|
||||||
|
|
||||||
16
addons/google_analytics/conf/info.xml
Normal file
16
addons/google_analytics/conf/info.xml
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<addon version="0.1">
|
||||||
|
<title xml:lang="ko">Google Analytics</title>
|
||||||
|
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 9. 19">
|
||||||
|
<name xml:lang="ko">제로</name>
|
||||||
|
<description xml:lang="ko">
|
||||||
|
Google Analytics 코드를 사이트에 추가할 수 있습니다.
|
||||||
|
</description>
|
||||||
|
</author>
|
||||||
|
<extra_vars>
|
||||||
|
<var name="uacct">
|
||||||
|
<title xml:lang="ko">uacct</title>
|
||||||
|
<description xml:lang="ko">Google Analytics 코드의 _uacct 값을 입력해주세요.</description>
|
||||||
|
</var>
|
||||||
|
</extra_vars>
|
||||||
|
</addon>
|
||||||
27
addons/google_analytics/google_analytics.addon.php
Normal file
27
addons/google_analytics/google_analytics.addon.php
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
<?php
|
||||||
|
if(!defined("__ZBXE__")) exit();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file google_analytics.addon.php
|
||||||
|
* @author zero (zero@nzeo.com)
|
||||||
|
* @brief google analytics 코드를 사이트에 추가함
|
||||||
|
**/
|
||||||
|
|
||||||
|
// 관리자 모듈이면 패스~
|
||||||
|
if(Context::get('module')=='admin') return;
|
||||||
|
|
||||||
|
// 한번만 출력시키기 위해 전역변수에 호출되었음을 체크해 놓음 (called position과 상관없음)
|
||||||
|
if($GLOBALS['_called_ga_']) return;
|
||||||
|
$GLOBALS['_called_ga_'] = true;
|
||||||
|
|
||||||
|
$js_code = <<<EndOfCss
|
||||||
|
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
_uacct = "{$addon_info->uacct}";
|
||||||
|
urchinTracker();
|
||||||
|
</script>
|
||||||
|
EndOfCss;
|
||||||
|
|
||||||
|
Context::addHtmlFooter($js_code);
|
||||||
|
?>
|
||||||
|
|
@ -336,13 +336,14 @@
|
||||||
$flag = true;
|
$flag = true;
|
||||||
foreach($obj as $key=>$val) {
|
foreach($obj as $key=>$val) {
|
||||||
if(!$val) continue;
|
if(!$val) continue;
|
||||||
if($val && !iconv($charset,'UTF-8',$val)) $flag = false;
|
if($val && iconv($charset,$charset,$val)!=$val) $flag = false;
|
||||||
}
|
}
|
||||||
if($flag == true) {
|
if($flag == true) {
|
||||||
foreach($obj as $key => $val) $obj->{$key} = iconv($charset,'UTF-8',$val);
|
foreach($obj as $key => $val) $obj->{$key} = iconv($charset,'UTF-8',$val);
|
||||||
return $obj;
|
return $obj;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return $obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -868,7 +869,7 @@
|
||||||
function _transEditorComponent($matches) {
|
function _transEditorComponent($matches) {
|
||||||
// IE에서는 태그의 특성중에서 " 를 빼어 버리는 경우가 있기에 정규표현식으로 추가해줌
|
// IE에서는 태그의 특성중에서 " 를 빼어 버리는 경우가 있기에 정규표현식으로 추가해줌
|
||||||
$buff = $matches[0];
|
$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);
|
$buff = str_replace("&","&",$buff);
|
||||||
|
|
||||||
// 위젯에서 생성된 코드 (img, div태그내에 editor_widget코드 존재)의 parameter를 추출
|
// 위젯에서 생성된 코드 (img, div태그내에 editor_widget코드 존재)의 parameter를 추출
|
||||||
|
|
|
||||||
|
|
@ -133,6 +133,7 @@
|
||||||
$url_info = parse_url($url);
|
$url_info = parse_url($url);
|
||||||
|
|
||||||
if(!$url_info['port']) $url_info['port'] = 80;
|
if(!$url_info['port']) $url_info['port'] = 80;
|
||||||
|
if(!$url_info['path']) $url_info['path'] = '/';
|
||||||
|
|
||||||
$fp = @fsockopen($url_info['host'], $url_info['port']);
|
$fp = @fsockopen($url_info['host'], $url_info['port']);
|
||||||
if(!$fp) return;
|
if(!$fp) return;
|
||||||
|
|
@ -149,7 +150,7 @@
|
||||||
$url_info['path'] = $path;
|
$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);
|
@fwrite($fp, $header);
|
||||||
|
|
||||||
|
|
@ -164,6 +165,7 @@
|
||||||
}
|
}
|
||||||
@fclose($ft);
|
@fclose($ft);
|
||||||
@fclose($fp);
|
@fclose($fp);
|
||||||
|
@chmod($target_filename, 0644);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -271,6 +273,7 @@
|
||||||
@imagewbmp($thumb, $target_file, 100);
|
@imagewbmp($thumb, $target_file, 100);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@chmod($target_file, 0644);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
var $act = NULL; ///< action
|
var $act = NULL; ///< action
|
||||||
var $mid = NULL; ///< 모듈의 객체명
|
var $mid = NULL; ///< 모듈의 객체명
|
||||||
var $document_srl = NULL; ///< 문서 번호
|
var $document_srl = NULL; ///< 문서 번호
|
||||||
|
var $module_srl = NULL; ///< 모듈의 번호
|
||||||
|
|
||||||
var $module_info = NULL; ///< 모듈의 정보
|
var $module_info = NULL; ///< 모듈의 정보
|
||||||
|
|
||||||
|
|
@ -31,7 +32,7 @@
|
||||||
* 인자를 넘겨주지 않으면 현 페이지 요청받은 Request Arguments를 이용하여
|
* 인자를 넘겨주지 않으면 현 페이지 요청받은 Request Arguments를 이용하여
|
||||||
* 변수를 세팅한다.
|
* 변수를 세팅한다.
|
||||||
**/
|
**/
|
||||||
function ModuleHandler($module = '', $act = '', $mid = '', $document_srl = '') {
|
function ModuleHandler($module = '', $act = '', $mid = '', $document_srl = '', $module_srl = '') {
|
||||||
// 설치가 안되어 있다면 install module을 지정
|
// 설치가 안되어 있다면 install module을 지정
|
||||||
if(!Context::isInstalled()) {
|
if(!Context::isInstalled()) {
|
||||||
$this->module = 'install';
|
$this->module = 'install';
|
||||||
|
|
@ -52,6 +53,9 @@
|
||||||
if(!$document_srl) $this->document_srl = (int)Context::get('document_srl');
|
if(!$document_srl) $this->document_srl = (int)Context::get('document_srl');
|
||||||
else $this->document_srl = (int)$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방지를 위한 기초적 검사)
|
// 기본 변수들의 검사 (XSS방지를 위한 기초적 검사)
|
||||||
if($this->module && !eregi("^([a-z0-9\_\-]+)$",$this->module)) die(Context::getLang("msg_invalid_request"));
|
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"));
|
if($this->mid && !eregi("^([a-z0-9\_\-]+)$",$this->mid)) die(Context::getLang("msg_invalid_request"));
|
||||||
|
|
@ -70,12 +74,22 @@
|
||||||
$oModuleModel = &getModel('module');
|
$oModuleModel = &getModel('module');
|
||||||
|
|
||||||
// document_srl이 있으면 document_srl로 모듈과 모듈 정보를 구함
|
// document_srl이 있으면 document_srl로 모듈과 모듈 정보를 구함
|
||||||
if($this->document_srl && !$this->mid) $module_info = $oModuleModel->getModuleInfoByDocumentSrl($this->document_srl);
|
if($this->document_srl && !$this->mid && !$this->module_srl) {
|
||||||
if($this->module && $module_info->module != $this->module) unset($module_info);
|
$module_info = $oModuleModel->getModuleInfoByDocumentSrl($this->document_srl);
|
||||||
|
if($this->module && $module_info->module != $this->module) unset($module_info);
|
||||||
|
}
|
||||||
|
|
||||||
// 아직 모듈을 못 찾았고 $mid값이 있으면 $mid로 모듈을 구함
|
// 아직 모듈을 못 찾았고 $mid값이 있으면 $mid로 모듈을 구함
|
||||||
if(!$module_info && $this->mid) $module_info = $oModuleModel->getModuleInfoByMid($this->mid);
|
if(!$module_info && $this->mid) {
|
||||||
if($this->module && $module_info->module != $this->module) unset($module_info);
|
$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이 없다면 기본 모듈을 찾아봄
|
// 역시 모듈을 못 찾았고 $module이 없다면 기본 모듈을 찾아봄
|
||||||
if(!$module_info && !$this->module) $module_info = $oModuleModel->getModuleInfoByMid();
|
if(!$module_info && !$this->module) $module_info = $oModuleModel->getModuleInfoByMid();
|
||||||
|
|
|
||||||
|
|
@ -92,15 +92,7 @@
|
||||||
$grant->is_admin = false;
|
$grant->is_admin = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// act값에 admin이 들어 있는데 관리자가 아닌 경우 오류 표시
|
// module.xml 에 있는 권한 정보를 정리
|
||||||
if(substr_count($this->act, 'Admin')) {
|
|
||||||
if(!$is_logged) {
|
|
||||||
$this->setAct("dispMemberLoginForm");
|
|
||||||
} elseif(!$grant->is_admin) {
|
|
||||||
return $this->stop('msg_not_permitted_act');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($module_info->grants) {
|
if($module_info->grants) {
|
||||||
foreach($module_info->grants as $key => $val) {
|
foreach($module_info->grants as $key => $val) {
|
||||||
if(!$xml_info->grant->{$key}) {
|
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;
|
$this->grant = $grant;
|
||||||
Context::set('grant', $grant);
|
Context::set('grant', $grant);
|
||||||
|
|
|
||||||
|
|
@ -477,7 +477,16 @@ function chkMemberMenu(evt) {
|
||||||
if(obj && obj.className && obj.className.search("member_")!=-1) break;
|
if(obj && obj.className && obj.className.search("member_")!=-1) break;
|
||||||
obj = obj.parentNode;
|
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<list.length; i++) {
|
||||||
|
list[i].style.visibility = list[i].getAttribute("old_visibility");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(obj.className.indexOf('member_-1')>=0) return;
|
if(obj.className.indexOf('member_-1')>=0) return;
|
||||||
|
|
||||||
|
|
@ -541,6 +550,16 @@ function displayMemberMenu(ret_obj, response_tags, params) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(html) {
|
if(html) {
|
||||||
|
// IE6의 경우 select박스를 모두 숨겨버림
|
||||||
|
if(xIE6) {
|
||||||
|
var list = xGetElementsByTagName("SELECT");
|
||||||
|
for (var i=0; i<list.length; i++) {
|
||||||
|
list[i].setAttribute("old_visibility", list[i].style.visibility);
|
||||||
|
list[i].style.visibility = 'hidden';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 레이어 출력
|
||||||
xInnerHtml('membermenuarea', "<div class=\"box\">"+html+"</div>");
|
xInnerHtml('membermenuarea', "<div class=\"box\">"+html+"</div>");
|
||||||
xWidth(area, xWidth(area));
|
xWidth(area, xWidth(area));
|
||||||
xLeft(area, params["page_x"]);
|
xLeft(area, params["page_x"]);
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@
|
||||||
$lang->cmd_cancel = 'Cancel';
|
$lang->cmd_cancel = 'Cancel';
|
||||||
$lang->cmd_back = 'Go Back';
|
$lang->cmd_back = 'Go Back';
|
||||||
$lang->cmd_vote = 'Vote';
|
$lang->cmd_vote = 'Vote';
|
||||||
|
$lang->cmd_copy = 'Copy';
|
||||||
$lang->cmd_move = 'Move';
|
$lang->cmd_move = 'Move';
|
||||||
$lang->cmd_move_up = 'Up';
|
$lang->cmd_move_up = 'Up';
|
||||||
$lang->cmd_move_down = 'Down';
|
$lang->cmd_move_down = 'Down';
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@
|
||||||
$lang->cmd_cancel = 'Cancelar';
|
$lang->cmd_cancel = 'Cancelar';
|
||||||
$lang->cmd_back = 'Atrás';
|
$lang->cmd_back = 'Atrás';
|
||||||
$lang->cmd_vote = 'Recomendar';
|
$lang->cmd_vote = 'Recomendar';
|
||||||
|
$lang->cmd_copy = 'Copia';
|
||||||
$lang->cmd_move = 'Mover';
|
$lang->cmd_move = 'Mover';
|
||||||
$lang->cmd_move_up = 'Arriba';
|
$lang->cmd_move_up = 'Arriba';
|
||||||
$lang->cmd_move_down = 'Abajo';
|
$lang->cmd_move_down = 'Abajo';
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@
|
||||||
$lang->cmd_cancel = 'Decommander';
|
$lang->cmd_cancel = 'Decommander';
|
||||||
$lang->cmd_back = 'Retour';
|
$lang->cmd_back = 'Retour';
|
||||||
$lang->cmd_vote = 'Voter';
|
$lang->cmd_vote = 'Voter';
|
||||||
|
$lang->cmd_copy = 'Copie';
|
||||||
$lang->cmd_move = 'Deplacer';
|
$lang->cmd_move = 'Deplacer';
|
||||||
$lang->cmd_move_up = 'Relever';
|
$lang->cmd_move_up = 'Relever';
|
||||||
$lang->cmd_move_down = 'Abaisser';
|
$lang->cmd_move_down = 'Abaisser';
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@
|
||||||
$lang->cmd_cancel = 'キャンセル';
|
$lang->cmd_cancel = 'キャンセル';
|
||||||
$lang->cmd_back = '戻る';
|
$lang->cmd_back = '戻る';
|
||||||
$lang->cmd_vote = '推薦';
|
$lang->cmd_vote = '推薦';
|
||||||
|
$lang->cmd_copy = 'コピー';
|
||||||
$lang->cmd_move = '移動';
|
$lang->cmd_move = '移動';
|
||||||
$lang->cmd_move_up = '上へ';
|
$lang->cmd_move_up = '上へ';
|
||||||
$lang->cmd_move_down = '下へ';
|
$lang->cmd_move_down = '下へ';
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@
|
||||||
$lang->cmd_cancel = '취소';
|
$lang->cmd_cancel = '취소';
|
||||||
$lang->cmd_back = '돌아가기';
|
$lang->cmd_back = '돌아가기';
|
||||||
$lang->cmd_vote = '추천';
|
$lang->cmd_vote = '추천';
|
||||||
|
$lang->cmd_copy = '복사';
|
||||||
$lang->cmd_move = '이동';
|
$lang->cmd_move = '이동';
|
||||||
$lang->cmd_move_up = '위로';
|
$lang->cmd_move_up = '위로';
|
||||||
$lang->cmd_move_down = '아래로';
|
$lang->cmd_move_down = '아래로';
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@
|
||||||
$lang->cmd_cancel = '取消';
|
$lang->cmd_cancel = '取消';
|
||||||
$lang->cmd_back = '返回';
|
$lang->cmd_back = '返回';
|
||||||
$lang->cmd_vote = '推荐';
|
$lang->cmd_vote = '推荐';
|
||||||
|
$lang->cmd_copy = '副本';
|
||||||
$lang->cmd_move = '查看';
|
$lang->cmd_move = '查看';
|
||||||
$lang->cmd_move_up = '向上';
|
$lang->cmd_move_up = '向上';
|
||||||
$lang->cmd_move_down = '向下';
|
$lang->cmd_move_down = '向下';
|
||||||
|
|
@ -120,7 +121,7 @@
|
||||||
$lang->regdate = '登录日期';
|
$lang->regdate = '登录日期';
|
||||||
$lang->last_update = '最后更新';
|
$lang->last_update = '最后更新';
|
||||||
$lang->signup_date = '注册日期';
|
$lang->signup_date = '注册日期';
|
||||||
$lang->last_login = '最近登陆';
|
$lang->last_login = '最近登录';
|
||||||
$lang->first_page = '第一页';
|
$lang->first_page = '第一页';
|
||||||
$lang->last_page = '最后一页';
|
$lang->last_page = '最后一页';
|
||||||
$lang->search_target = '搜索目标';
|
$lang->search_target = '搜索目标';
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,31 @@
|
||||||
<?php
|
<?php
|
||||||
$year = sprintf("%04d",$_REQUEST['year']);
|
####################
|
||||||
$month = sprintf("%02d",$_REQUEST['month']);
|
## 연도 범위 설정 ##
|
||||||
|
// 최대
|
||||||
|
$max_year = 2900;//년 (우주가 사라지는 날 까지)
|
||||||
|
// 최소
|
||||||
|
$min_year = 1900;//년 (0년 부터)
|
||||||
|
####################
|
||||||
|
|
||||||
|
$year = $_REQUEST['year'];
|
||||||
|
$month = $_REQUEST['month'];
|
||||||
|
|
||||||
$method = $_REQUEST['method'];
|
$method = $_REQUEST['method'];
|
||||||
$fo_id = $_REQUEST['fo_id'];
|
$fo_id = $_REQUEST['fo_id'];
|
||||||
$callback_func = $_REQUEST['callback_func'];
|
$callback_func = $_REQUEST['callback_func'];
|
||||||
|
|
||||||
$day_str = $_REQUEST['day_str'];
|
$day_str = $_REQUEST['day_str']; // 날짜 (ex. 20080101)
|
||||||
if($day_str && strlen($day_str)) {
|
if($day_str && strlen($day_str)) {
|
||||||
$year = substr($day_str,0,4);
|
$year = substr($day_str, 0, 4);
|
||||||
$month = substr($day_str,4,2);
|
$month = substr($day_str, 4, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!(int)$year) $year = date("Y");
|
if($year < $min_year || $year > $max_year) $year = date("Y");
|
||||||
if(!(int)$month) $month = date("m");
|
if(!(int)$month || $month < 1 || $month > 12) $month = date("n");
|
||||||
|
|
||||||
switch($method) {
|
switch($method) {
|
||||||
case 'prev_year' :
|
case 'prev_year' :
|
||||||
$year = date("Y", mktime(0,0,0,1,1,$year)-60*60*24);
|
$year --;
|
||||||
break;
|
break;
|
||||||
case 'prev_month' :
|
case 'prev_month' :
|
||||||
$month --;
|
$month --;
|
||||||
|
|
@ -34,16 +42,75 @@
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'next_year' :
|
case 'next_year' :
|
||||||
$year = date("Y", mktime(0,0,0,12,31,$year)+60*60*24);
|
$year ++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$start_week = date("w", mktime(0,0,0,$month,1,$year));
|
// 긴 이름
|
||||||
$month_day = date("t", mktime(0,0,0,$month,1,$year));
|
$monthLongName = array(1 => "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
|
||||||
$before_month_month_day = date("t", mktime(0,0,0,$month,1,$year)-60*60*24);
|
|
||||||
|
// 짧은 이름
|
||||||
|
$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);
|
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
<html lang="ko" xmlns="http://www.w3.org/1999/xhtml">
|
<html lang="ko" xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
|
@ -67,8 +134,8 @@
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var date_obj = opener.xGetElementById("date_<?=$fo_id?>");
|
var date_obj = opener.xGetElementById("date_<?php echo $fo_id?>");
|
||||||
var str_obj = opener.xGetElementById("str_<?=$fo_id?>");
|
var str_obj = opener.xGetElementById("str_<?php echo $fo_id?>");
|
||||||
|
|
||||||
if(date_obj) date_obj.value = date_val;
|
if(date_obj) date_obj.value = date_val;
|
||||||
|
|
||||||
|
|
@ -82,99 +149,112 @@
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<div id="popup_content" >
|
<div id="popup_content" >
|
||||||
<div id="popHeadder">
|
<div id="popHeadder">
|
||||||
<h1>Calendar</h1>
|
<h1>Calendar</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form action="./calendar.php" method="get">
|
<form action="./calendar.php" method="get">
|
||||||
<input type="hidden" name="fo_id" value="<?=$fo_id?>"/>
|
<input type="hidden" name="fo_id" value="<?php echo $fo_id?>"/>
|
||||||
<input type="hidden" name="callback_func" value="<?=$callback_func?>"/>
|
<input type="hidden" name="callback_func" value="<?php echo $callback_func?>"/>
|
||||||
|
|
||||||
<div id="popBody">
|
<div id="popBody">
|
||||||
|
|
||||||
<div class="calendar">
|
<div class="calendar">
|
||||||
<div class="yymm">
|
<div class="yymm">
|
||||||
<div class="yy">
|
<div class="yy">
|
||||||
<a href="./calendar.php?fo_id=<?=$fo_id?>&year=<?=$year?>&month=<?=$month?>&method=prev_year&callback_func=<?=$callback_func?>" class="left"><img src="./images/buttonLeft2.gif" alt="prev" width="11" height="11" /></a><?=$year?><a href="./calendar.php?fo_id=<?=$fo_id?>&year=<?=$year?>&month=<?=$month?>&method=next_year&callback_func=<?=$callback_func?>" class="right"><img src="./images/buttonRight2.gif" alt="next" width="11" height="11" /></a>
|
<a href="./calendar.php?fo_id=<?php echo $fo_id?>&year=<?php echo $year?>&month=<?php echo $month?>&method=prev_year&callback_func=<?php echo $callback_func?>" class="left"><img src="./images/buttonLeft2.gif" alt="<?php echo $year - 1?>" width="11" height="11" /></a><?php echo $year?><a href="./calendar.php?fo_id=<?php echo $fo_id?>&year=<?php echo $year?>&month=<?php echo $month?>&method=next_year&callback_func=<?php echo $callback_func?>" class="right"><img src="./images/buttonRight2.gif" alt="<?php echo $year + 1?>" width="11" height="11" /></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="mm">
|
<div class="mm">
|
||||||
<p><?=date("M", mktime(0,0,0,$month,1,$year))?></p>
|
<p><?php echo $monthLongName[$month]?></p>
|
||||||
<a href="./calendar.php?fo_id=<?=$fo_id?>&year=<?=$year?>&month=<?=$month?>&method=prev_month&callback_func=<?=$callback_func?>" class="left"><img src="./images/buttonLeft2.gif" alt="prev" width="11" height="11" /></a><span><?=$month?></span><a href="./calendar.php?fo_id=<?=$fo_id?>&year=<?=$year?>&month=<?=$month?>&method=next_month&callback_func=<?=$callback_func?>" class="right"><img src="./images/buttonRight2.gif" alt="next" width="11" height="11" /></a>
|
<a href="./calendar.php?fo_id=<?php echo $fo_id?>&year=<?php echo $year?>&month=<?php echo $month?>&method=prev_month&callback_func=<?php echo $callback_func?>" class="left"><img src="./images/buttonLeft2.gif" alt="prev" width="11" height="11" /></a><span><?php echo $month?></span><a href="./calendar.php?fo_id=<?php echo $fo_id?>&year=<?php echo $year?>&month=<?php echo $month?>&method=next_month&callback_func=<?php echo $callback_func?>" class="right"><img src="./images/buttonRight2.gif" alt="next" width="11" height="11" /></a>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="go">
|
<div class="go">
|
||||||
<input type="text" name="year" class="inputTypeY" value="<?=$year?>" />
|
<select name="year" class="selectTypeY" onchange="submit()">
|
||||||
<input type="text" name="month" class="inputTypeM" value="<?=$month?>" />
|
<? for($i = $max_year; $i >= $min_year; $i--):?>
|
||||||
<input type="image" src="./images/buttonGo.gif" alt="Go" />
|
<option value="<?php echo $i?>" <?php echo $year == $i? "selected":""?> class="<?php echo $i%10?($i%2?"select_color1":"select_color2"):"select_color10"?>"><?php echo $i?></option>
|
||||||
|
<?endfor?>
|
||||||
|
</select>
|
||||||
|
<select name="month" class="selectTypeM" onchange="submit()">
|
||||||
|
<? for($i = 1; $i <= 12; $i++):?>
|
||||||
|
<option value="<?php echo $i?>" <?php echo $month == $i? "selected":""?> class="<?php echo $i%2?"select_color1":"select_color2"?>"><?php echo sprintf("%02d",$i)?></option>
|
||||||
|
<?endfor?>
|
||||||
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
<br /><br />
|
||||||
|
<center><a href="./calendar.php" class="button"><span>Go Today</span></a></center>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<table cellspacing="0" class="dd">
|
<table cellspacing="0" class="dd">
|
||||||
|
<tr>
|
||||||
|
<?for($y = 0; $y < 7; $y++) {?>
|
||||||
|
<td class="<?php echo $y==0?"sun":($y==6?"sat":"")?>"><?php echo $dayName[$y]?></td>
|
||||||
|
<?}?>
|
||||||
|
</tr>
|
||||||
<?php
|
<?php
|
||||||
for($i=0;$i<6;$i++) {
|
//1주~6주
|
||||||
|
for($i = 0; $i < 6; $i++) {
|
||||||
?>
|
?>
|
||||||
<tr class="<?if($i==0){?>first<?}elseif($i==5){?>last<?}?>">
|
<tr class="<?if($i == 0){?>first<?}elseif($i == 5){?>last<?}?>">
|
||||||
<?php
|
<?php
|
||||||
for($j=0;$j<7;$j++) {
|
//요일
|
||||||
|
for($j = 0; $j < 7; $j++) {
|
||||||
$m = $month;
|
$m = $month;
|
||||||
$y = $year;
|
$y = $year;
|
||||||
|
|
||||||
$cell_no = $i*7 + $j;
|
$cell_no = $i * 7 + $j;
|
||||||
|
|
||||||
if($cell_no < $start_week) {
|
if($cell_no < $start_week) {
|
||||||
$day = $before_month_month_day + $cell_no - $start_week + 1;
|
$day = $before_month_month_day + $cell_no - $start_week + 1;
|
||||||
$m = $month - 1;
|
$m = $month - 1;
|
||||||
if($m<1) {
|
if($m < 1) {
|
||||||
$m = 12;
|
$m = 12;
|
||||||
$y = $year - 1;
|
$y = $year - 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
$day = $cell_no - $start_week +1;
|
$day = $cell_no - $start_week + 1;
|
||||||
$m = $month;
|
$m = $month;
|
||||||
|
|
||||||
if($day > $month_day) {
|
if($day > $month_day) {
|
||||||
$day = $day - $month_day;
|
$day = $day - $month_day;
|
||||||
$m = $month + 1;
|
$m = $month + 1;
|
||||||
if($m>12) {
|
if($m >12 ) {
|
||||||
$m = 1;
|
$m = 1;
|
||||||
$y = $year-1;
|
$y = $year - 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($j==0) $class_name = "sun";
|
if($j == 0) $class_name = "sun";
|
||||||
|
elseif($j == 6) $class_name = "sat";
|
||||||
else $class_name= "";
|
else $class_name= "";
|
||||||
|
|
||||||
$date = date("Y. m. d", mktime(0,0,0,$m, $day, $y));
|
$date = $y.". ".sprintf("%02d", $m).". ".sprintf("%02d", $day);
|
||||||
$date_str = date("Ymd", mktime(0,0,0,$m, $day, $y));
|
$date_str = $y.sprintf("%02d", $m).sprintf("%02d", $day);
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<td class="<?=$class_name?>">
|
<td class="<?php echo $class_name?>" <?if($day){?> onclick="selectDate('<?php echo $date?>','<?php echo $date_str?>','<?php echo $callback_func?>')"<?}?>>
|
||||||
<?if($m==$month){?>
|
<?if($m == $month){?><?if(date("Ymd")==$date_str){?><strong><?}?>
|
||||||
<?if(date("Ymd")==$date_str){?><strong><?}?>
|
<?if($day){?><?php echo $day?><?}else{?> <?}?>
|
||||||
<?if($day){?><a href="#" onclick="selectDate('<?=$date?>','<?=$date_str?>','<?=$callback_func?>');return false;"><?=$day?></a><?}else{?> <?}?>
|
|
||||||
<?if(date("Ymd")==$date_str){?></strong><?}?>
|
<?if(date("Ymd")==$date_str){?></strong><?}?>
|
||||||
<?}else{?>
|
<?}else{?>
|
||||||
<span class="disable"><?if($day){?><a href="#" onclick="selectDate('<?=$date?>','<?=$date_str?>','<?=$callback_func?>');return false;"><?=$day?></a><?}else{?> <?}?></span>
|
<span class="disable"><?if($day){?><?php echo $day?><?}else{?> <?}?></span>
|
||||||
<?}?>
|
<?}?>
|
||||||
</td>
|
</td>
|
||||||
<?
|
<?php
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</tr>
|
</tr>
|
||||||
<?
|
<?php
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
<div id="popFooter" class="tCenter">
|
<div id="popFooter" class="tCenter">
|
||||||
<a href="#" onclick="window.close();" class="button"><span>close</span></a>
|
<a href="#" onclick="window.close();" class="button"><span>close</span></a>
|
||||||
|
|
|
||||||
|
|
@ -9,16 +9,16 @@
|
||||||
<!--@end--><!--@if($layout->author)--><meta name="layout_maker" content="{$layout_info->author->name} ({$layout_info->author->homepage})" />
|
<!--@end--><!--@if($layout->author)--><meta name="layout_maker" content="{$layout_info->author->name} ({$layout_info->author->homepage})" />
|
||||||
<!--@end--><meta http-equiv="imagetoolbar" content="no" />
|
<!--@end--><meta http-equiv="imagetoolbar" content="no" />
|
||||||
<title>{Context::getBrowserTitle()}</title>
|
<title>{Context::getBrowserTitle()}</title>
|
||||||
<script type="text/javascript" src="./common/js/x.js"></script>
|
<script type="text/javascript" src="./common/js/x.js?rnd={time()}"></script>
|
||||||
<script type="text/javascript" src="./common/js/common.js"></script>
|
<script type="text/javascript" src="./common/js/common.js?rnd={time()}"></script>
|
||||||
<script type="text/javascript" src="./common/js/xml_handler.js"></script>
|
<script type="text/javascript" src="./common/js/xml_handler.js?rnd={time()}"></script>
|
||||||
<script type="text/javascript" src="./common/js/xml_js_filter.js"></script>
|
<script type="text/javascript" src="./common/js/xml_js_filter.js?rnd={time()}"></script>
|
||||||
<!--@foreach(Context::getJsFile() as $key => $js_file)--><script type="text/javascript" src="{$js_file}"></script>
|
<!--@foreach(Context::getJsFile() as $key => $js_file)--><script type="text/javascript" src="{$js_file}?rnd={time()}"></script>
|
||||||
<!--@end--><!--@if($rss_url)--><link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="{$rss_url}" />
|
<!--@end--><!--@if($rss_url)--><link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="{$rss_url}" />
|
||||||
<!--@end--><link rel="stylesheet" href="./common/css/default.css" type="text/css" />
|
<!--@end--><link rel="stylesheet" href="./common/css/default.css?rnd={time()}" type="text/css" />
|
||||||
<link rel="stylesheet" href="./common/css/button.css" type="text/css" />
|
<link rel="stylesheet" href="./common/css/button.css?rnd={time()}" type="text/css" />
|
||||||
<!--@foreach(Context::getCssFile() as $key => $css_file)--><link rel="stylesheet" href="{$css_file}" type="text/css" />
|
<!--@foreach(Context::getCssFile() as $key => $css_file)--><link rel="stylesheet" href="{$css_file}?rnd={time()}" type="text/css" />
|
||||||
<!--@end--><!--@if($module=='admin' || strpos($act,'Admin')>0)--><link rel="stylesheet" href="./modules/admin/tpl/css/admin.css" type="text/css" />
|
<!--@end--><!--@if($module=='admin' || strpos($act,'Admin')>0)--><link rel="stylesheet" href="./modules/admin/tpl/css/admin.css?rnd={time()}" type="text/css" />
|
||||||
<!--@end--><script type="text/javascript">//<![CDATA[
|
<!--@end--><script type="text/javascript">//<![CDATA[
|
||||||
var current_url = "{$current_url}";
|
var current_url = "{$current_url}";
|
||||||
var request_uri = "{$request_uri}";
|
var request_uri = "{$request_uri}";
|
||||||
|
|
|
||||||
|
|
@ -2,32 +2,37 @@
|
||||||
|
|
||||||
body { margin:0; padding:0; }
|
body { margin:0; padding:0; }
|
||||||
|
|
||||||
#popup_content { width:370px; overflow:hidden;}
|
#popup_content { width:500px; overflow:hidden;}
|
||||||
#popHeadder { width:370px; }
|
#popHeadder { width:500px; }
|
||||||
#popBody { width:350px; }
|
#popBody { width:480px; }
|
||||||
#popFooter { width:370px; }
|
#popFooter { width:500px; }
|
||||||
|
|
||||||
#popBody .calendar { width:350px; border:1px solid #c1c0bd; border-left:none; border-right:none; background:#f5f5f5; overflow:hidden; position:relative;}
|
#popBody .calendar { width:480px; border:1px solid #c1c0bd; border-left:none; border-right:none; background:#f5f5f5; overflow:hidden; position:relative;}
|
||||||
#popBody .calendar .yymm { width:143px; float:left;}
|
#popBody .calendar .yymm { width:143px; float:left;}
|
||||||
#popBody .calendar .yymm .yy { padding:9px 0 6px 0; text-align:center; border-bottom:1px solid #ededed; margin:0 15px; font:bold 1.2em Tahoma; color:#444444;}
|
#popBody .calendar .yymm .yy { padding:9px 0 6px 0; text-align:center; border-bottom:1px solid #ededed; margin:0 15px; font:bold 1.5em Tahoma; color:#444444;}
|
||||||
#popBody .calendar .yymm .mm { margin:0 15px; border-top:1px solid #ffffff; border-bottom:1px solid #ededed; padding:10px 0 7px 0; text-align:center;}
|
#popBody .calendar .yymm .mm { margin:0 15px; border-top:1px solid #ffffff; border-bottom:1px solid #ededed; padding:10px 0 7px 0; text-align:center;}
|
||||||
#popBody .calendar .yymm .mm p { color:#969696; font:1.6em "Times New Roman";}
|
#popBody .calendar .yymm .mm p { color:#969696; font:1.6em "Times New Roman";}
|
||||||
#popBody .calendar .yymm .mm span { font:4em "Times New Roman"; color:#158692; vertical-align:middle;}
|
#popBody .calendar .yymm .mm span { font:4em "Times New Roman"; color:#158692; vertical-align:middle;}
|
||||||
#popBody .calendar .yymm .go { padding:7px 0 0 0; margin:0 15px; text-align:center; border-top:1px solid #ffffff;}
|
#popBody .calendar .yymm .go { padding:7px 0 0 0; margin:0px 15px; text-align:center; border-top:1px solid #ffffff; display:inline;}
|
||||||
#popBody .calendar .yymm .go * { vertical-align:middle;}
|
#popBody .calendar .yymm .go * { vertical-align:middle;}
|
||||||
|
#popBody .calendar .yymm .go .selectTypeY { width:60px;}
|
||||||
|
#popBody .calendar .yymm .go .selectTypeM { width:45px;}
|
||||||
#popBody .calendar .yymm .go .inputTypeY { border:1px solid #c9c9c9; text-align:center; font:.9em Tahoma; color:#282828; width:31px; height:16px;}
|
#popBody .calendar .yymm .go .inputTypeY { border:1px solid #c9c9c9; text-align:center; font:.9em Tahoma; color:#282828; width:31px; height:16px;}
|
||||||
#popBody .calendar .yymm .go .inputTypeM { border:1px solid #c9c9c9; text-align:center; font:.9em Tahoma; color:#282828; width:20px; height:16px;}
|
#popBody .calendar .yymm .go .inputTypeM { border:1px solid #c9c9c9; text-align:center; font:.9em Tahoma; color:#282828; width:20px; height:16px;}
|
||||||
#popBody .calendar .yymm .left { vertical-align:middle; margin-right:14px;}
|
#popBody .calendar .yymm .left { vertical-align:middle; margin-right:14px;}
|
||||||
#popBody .calendar .yymm .right { vertical-align:middle; margin-left:14px;}
|
#popBody .calendar .yymm .right { vertical-align:middle; margin-left:14px;}
|
||||||
#popBody .calendar .yymm .left img,
|
#popBody .calendar .yymm .left img,
|
||||||
#popBody .calendar .yymm .right img { vertical-align:middle; position:relative; top:2px;}
|
#popBody .calendar .yymm .right img { vertical-align:middle; position:relative; top:2px;}
|
||||||
#popBody .calendar .dd { float:left; width:207px; background:#ffffff; border-left:10px solid #ffffff;}
|
#popBody .calendar .dd { float:left; width:337px; background:#ffffff; border-left:10px solid #ffffff;}
|
||||||
#popBody .calendar .dd td { border-bottom:1px solid #ededed; height:32px; text-align:center; color:#636363; font:.9em Tahoma;}
|
#popBody .calendar .dd td { border-bottom:1px solid #ededed; height:40px; text-align:center; color:#636363; font:1em Tahoma; cursor:pointer; width:14%;}
|
||||||
#popBody .calendar .dd td a { color:#636363; font:.9em Tahoma;}
|
#popBody .calendar .dd td:hover { background:#eeeeee;}
|
||||||
#popBody .calendar .dd td strong { text-decoration:underline;}
|
#popBody .calendar .dd td strong { text-decoration:underline;}
|
||||||
#popBody .calendar .dd td strong a { text-decoration:underline;}
|
|
||||||
#popBody .calendar .dd td.sun { color:#c95b53;}
|
#popBody .calendar .dd td.sun { color:#c95b53;}
|
||||||
#popBody .calendar .dd td.sun a { color:#c95b53;}
|
#popBody .calendar .dd td.sat { color:#5378C9;}
|
||||||
#popBody .calendar .dd .first { height:35px;}
|
#popBody .calendar .dd .first { height:35px;}
|
||||||
#popBody .calendar .dd .last td { height:35px; border-bottom:none;}
|
#popBody .calendar .dd .last td { height:35px; border-bottom:none;}
|
||||||
#popBody .calendar .dd td .disable a { color:#CCCCCC; }
|
#popBody .calendar .dd td .disable { color:#CCCCCC; }
|
||||||
|
|
||||||
|
#popBody .calendar .select_color1 {background:#ffffff;color:#000000;}
|
||||||
|
#popBody .calendar .select_color2 {background:#eeeeee;color:#000000;}
|
||||||
|
#popBody .calendar .select_color10 {background:#ffff00;color:#000000;}
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
@error_reporting(E_ALL ^ E_NOTICE);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file config/config.inc.php
|
* @file config/config.inc.php
|
||||||
* @author zero (zero@nzeo.com)
|
* @author zero (zero@nzeo.com)
|
||||||
|
|
@ -12,7 +14,7 @@
|
||||||
* 이 내용은 제로보드XE의 버전을 관리자 페이지에 표시하기 위한 용도이며
|
* 이 내용은 제로보드XE의 버전을 관리자 페이지에 표시하기 위한 용도이며
|
||||||
* config.inc.php의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야 함
|
* config.inc.php의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야 함
|
||||||
**/
|
**/
|
||||||
define('__ZBXE_VERSION__', '0.1.4');
|
define('__ZBXE_VERSION__', '0.1.5');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 디버깅 메세지 출력
|
* @brief 디버깅 메세지 출력
|
||||||
|
|
@ -83,8 +85,16 @@
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 세션 설정
|
* @brief 세션 설정
|
||||||
|
* 세션의 파기 시간을 5시간으로 하고 세션 저장 경로를 files/session 으로 변경
|
||||||
**/
|
**/
|
||||||
@session_cache_limiter('no-cache, must-revalidate');
|
if(!ini_get('session.auto_start')) {
|
||||||
@ini_set("session.gc_maxlifetime", "18000");
|
session_cache_limiter('no-cache, must-revalidate');
|
||||||
@session_start();
|
ini_set("session.gc_maxlifetime", "18000");
|
||||||
|
if(!is_dir("./files/sessions")) {
|
||||||
|
FileHandler::makeDir("./files/sessions");
|
||||||
|
@chmod("./files/sessions", 0777);
|
||||||
|
}
|
||||||
|
if(is_dir("./files/sessions")) session_save_path(realpath('.')."/files/sessions/");
|
||||||
|
session_start();
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@
|
||||||
$oAdminController->insertShortCut('blog');
|
$oAdminController->insertShortCut('blog');
|
||||||
$oAdminController->insertShortCut('board');
|
$oAdminController->insertShortCut('board');
|
||||||
$oAdminController->insertShortCut('page');
|
$oAdminController->insertShortCut('page');
|
||||||
|
$oAdminController->insertShortCut('opage');
|
||||||
$oAdminController->insertShortCut('menu');
|
$oAdminController->insertShortCut('menu');
|
||||||
$oAdminController->insertShortCut('layout');
|
$oAdminController->insertShortCut('layout');
|
||||||
$oAdminController->insertShortCut('addon');
|
$oAdminController->insertShortCut('addon');
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,41 @@
|
||||||
<title xml:lang="jp">管理</title>
|
<title xml:lang="jp">管理</title>
|
||||||
</grant>
|
</grant>
|
||||||
</grants>
|
</grants>
|
||||||
|
<permissions>
|
||||||
|
<permission action="dispBlogContent" target="manager" />
|
||||||
|
<permission action="dispBlogWrite" target="manager" />
|
||||||
|
<permission action="dispBlogDelete" target="manager" />
|
||||||
|
<permission action="dispBlogReplyComment" target="manager" />
|
||||||
|
<permission action="dispBlogModifyComment" target="manager" />
|
||||||
|
<permission action="dispBlogDeleteComment" target="manager" />
|
||||||
|
<permission action="dispBlogDeleteTrackback" target="manager" />
|
||||||
|
<permission action="dispBlogMessage" target="manager" />
|
||||||
|
|
||||||
|
<permission action="procBlogInsertDocument" target="manager" />
|
||||||
|
<permission action="procBlogDeleteDocument" target="manager" />
|
||||||
|
<permission action="procBlogInsertComment" target="manager" />
|
||||||
|
<permission action="procBlogDeleteComment" target="manager" />
|
||||||
|
<permission action="procBlogDeleteTrackback" target="manager" />
|
||||||
|
<permission action="procBlogVerificationPassword" target="manager" />
|
||||||
|
<permission action="procBlogDeleteFile" target="manager" />
|
||||||
|
<permission action="procBlogUploadFile" target="manager" />
|
||||||
|
<permission action="procBlogDownloadFile" target="manager" />
|
||||||
|
|
||||||
|
<permission action="getBlogAdminCategoryTplInfo" target="manager" />
|
||||||
|
|
||||||
|
<permission action="dispBlogAdminContent" target="manager" />
|
||||||
|
<permission action="dispBlogAdminBlogInfo" target="manager" />
|
||||||
|
<permission action="dispBlogAdminInsertBlog" target="manager" />
|
||||||
|
<permission action="dispBlogAdminCategoryInfo" target="manager" />
|
||||||
|
<permission action="dispBlogAdminSkinInfo" target="manager" />
|
||||||
|
|
||||||
|
<permission action="procBlogAdminUpdateSkinInfo" target="manager" />
|
||||||
|
<permission action="procBlogAdminInsertBlog" target="manager" />
|
||||||
|
<permission action="procBlogAdminInsertCategory" target="manager" />
|
||||||
|
<permission action="procBlogAdminDeleteCategory" target="manager" />
|
||||||
|
<permission action="procBlogAdminMakeXmlFile" target="manager" />
|
||||||
|
<permission action="procBlogAdminMoveCategory" target="manager" />
|
||||||
|
</permissions>
|
||||||
<actions>
|
<actions>
|
||||||
<action name="dispBlogContent" type="view" index="true" />
|
<action name="dispBlogContent" type="view" index="true" />
|
||||||
<action name="dispBlogWrite" type="view" />
|
<action name="dispBlogWrite" type="view" />
|
||||||
|
|
|
||||||
|
|
@ -236,7 +236,6 @@ Jeong, Chan Myeong 070601~070630
|
||||||
.blogEditor .userNameAndPw .homePage { width:6em;}
|
.blogEditor .userNameAndPw .homePage { width:6em;}
|
||||||
.blogEditor .userNameAndPw .checkSecret { position:absolute; right:2em; top:.7em;}
|
.blogEditor .userNameAndPw .checkSecret { position:absolute; right:2em; top:.7em;}
|
||||||
.blogEditor .commentForm { width:100%; padding-bottom:.5em;}
|
.blogEditor .commentForm { width:100%; padding-bottom:.5em;}
|
||||||
.blogEditor .commentForm textarea { width:632px; margin:.3em; height:100px;}
|
|
||||||
|
|
||||||
/* blogWrite */
|
/* blogWrite */
|
||||||
.blogWrite { width:100%; position:relative;}
|
.blogWrite { width:100%; position:relative;}
|
||||||
|
|
|
||||||
|
|
@ -250,8 +250,6 @@ ul.replyZone .replyIndent { background:url(../images/common/iconReplyArrow.gif)
|
||||||
.blogEditor .userNameAndPw .checkSecret { position:absolute; right:2em; top:.7em;}
|
.blogEditor .userNameAndPw .checkSecret { position:absolute; right:2em; top:.7em;}
|
||||||
.blogEditor .buttonReply { position:relative; float:left; left:50%; margin:.5em 0 0 -2em; _padding-bottom:1em;}
|
.blogEditor .buttonReply { position:relative; float:left; left:50%; margin:.5em 0 0 -2em; _padding-bottom:1em;}
|
||||||
.blogEditor .commentForm { width:100%; padding-bottom:.5em;}
|
.blogEditor .commentForm { width:100%; padding-bottom:.5em;}
|
||||||
.blogEditor .commentForm textarea { width:632px; margin:.3em; height:100px;}
|
|
||||||
|
|
||||||
|
|
||||||
/* blogWrite */
|
/* blogWrite */
|
||||||
.blogWrite { width:100%; position:relative;}
|
.blogWrite { width:100%; position:relative;}
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
<!-- 카테고리의 위/아래, 삭제와 관련된 form -->
|
<!-- 카테고리의 위/아래, 삭제와 관련된 form -->
|
||||||
<form id="fo_move_category" action="./" method="get">
|
<form id="fo_move_category" action="./" method="get">
|
||||||
|
<input type="hidden" name="module_srl" />
|
||||||
<input type="hidden" name="source_category_srl" />
|
<input type="hidden" name="source_category_srl" />
|
||||||
<input type="hidden" name="target_category_srl" />
|
<input type="hidden" name="target_category_srl" />
|
||||||
</form>
|
</form>
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,17 @@
|
||||||
|
|
||||||
<!-- 목록 -->
|
<!-- 목록 -->
|
||||||
<table cellspacing="0" class="tableType1">
|
<table cellspacing="0" class="tableType1">
|
||||||
|
<col width="40" />
|
||||||
|
<col width="130" />
|
||||||
|
<col />
|
||||||
|
<col />
|
||||||
|
<col width="40" />
|
||||||
|
<col width="80" />
|
||||||
|
<col width="100" />
|
||||||
|
<col width="80" />
|
||||||
|
<col width="40" />
|
||||||
|
<col width="40" />
|
||||||
|
<col width="40" />
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col">{$lang->no}</th>
|
<th scope="col">{$lang->no}</th>
|
||||||
|
|
@ -16,7 +27,7 @@
|
||||||
<form action="./" method="get" onsubmit="return doChangeCategory(this);">
|
<form action="./" method="get" onsubmit="return doChangeCategory(this);">
|
||||||
<input type="hidden" name="module" value="{$module}" />
|
<input type="hidden" name="module" value="{$module}" />
|
||||||
<input type="hidden" name="act" value="{$act}" />
|
<input type="hidden" name="act" value="{$act}" />
|
||||||
<select name="module_category_srl">
|
<select name="module_category_srl" class="w80">
|
||||||
<option value="">{$lang->module_category}</option>
|
<option value="">{$lang->module_category}</option>
|
||||||
<!--@foreach($module_category as $key => $val)-->
|
<!--@foreach($module_category as $key => $val)-->
|
||||||
<option value="{$key}" <!--@if($module_category_srl==$key)-->selected="selected"<!--@end-->>{$val->title}</option>
|
<option value="{$key}" <!--@if($module_category_srl==$key)-->selected="selected"<!--@end-->>{$val->title}</option>
|
||||||
|
|
@ -34,6 +45,7 @@
|
||||||
<th scope="col">{$lang->admin_id}</th>
|
<th scope="col">{$lang->admin_id}</th>
|
||||||
<th scope="col">{$lang->regdate}</th>
|
<th scope="col">{$lang->regdate}</th>
|
||||||
<th scope="col">{$lang->cmd_view}</th>
|
<th scope="col">{$lang->cmd_view}</th>
|
||||||
|
<th scope="col">{$lang->cmd_copy}</th>
|
||||||
<th scope="col">{$lang->cmd_delete}</th>
|
<th scope="col">{$lang->cmd_delete}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|
@ -50,14 +62,15 @@
|
||||||
{$module_category[$val->module_category_srl]->title}
|
{$module_category[$val->module_category_srl]->title}
|
||||||
<!--@end-->
|
<!--@end-->
|
||||||
</td>
|
</td>
|
||||||
<td><a href="{getUrl('act','dispBlogAdminBlogInfo','module_srl',$val->module_srl)}" class="blue">{$val->mid}</a></td>
|
<td><div class="tLeft"> <a href="{getUrl('act','dispBlogAdminBlogInfo','module_srl',$val->module_srl)}" class="blue">{$val->mid}</a></div></td>
|
||||||
<td>{htmlspecialchars($val->browser_title)}</td>
|
<td><div class="tLeft nowrap">{htmlspecialchars($val->browser_title)}</div></td>
|
||||||
<td class="tahoma">{$val->is_default}</td>
|
<td class="tahoma">{$val->is_default}</td>
|
||||||
<td class="tahoma">{$val->skin}</td>
|
<td class="tahoma">{$val->skin}</td>
|
||||||
<td class="tahoma">{$val->admin_id}</td>
|
<td class="tahoma">{$val->admin_id} </td>
|
||||||
<td class="tahoma">{zdate($val->regdate,"Y-m-d")}</td>
|
<td class="tahoma">{zdate($val->regdate,"Y-m-d")}</td>
|
||||||
<td class="blue"><a href="./?mid={$val->mid}" target="_blank">{$lang->cmd_view}</a></td>
|
<td class="blue"><a href="{getUrl('','mid',$val->mid)}" onclick="window.open(this.href);return false;">{$lang->cmd_view}</a></td>
|
||||||
<td class="red"><!--@if($val->is_default!='Y')--><a href="{getUrl('act','dispBlogAdminDeleteBlog','module_srl', $val->module_srl)}">{$lang->cmd_delete}</a><!--@end--></td>
|
<td class="blue"><a href="./?module=module&act=dispModuleAdminCopyModule&module_srl={$val->module_srl}" onclick="popopen(this.href);return false;">{$lang->cmd_copy}</a></td>
|
||||||
|
<td class="red"><!--@if($val->is_default!='Y')--><a href="{getUrl('act','dispBlogAdminDeleteBlog','module_srl', $val->module_srl)}">{$lang->cmd_delete}</a><!--@else--> <!--@end--></td>
|
||||||
</tr>
|
</tr>
|
||||||
<!--@end-->
|
<!--@end-->
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,7 @@ function doInsertCategory(parent_srl) {
|
||||||
function doGetCategoryInfo(category_id, obj) {
|
function doGetCategoryInfo(category_id, obj) {
|
||||||
// category, category_id, node_srl을 추출
|
// category, category_id, node_srl을 추출
|
||||||
var fo_obj = xGetElementById("fo_category");
|
var fo_obj = xGetElementById("fo_category");
|
||||||
|
var module_srl = fo_obj.module_srl.value;
|
||||||
var node_srl = 0;
|
var node_srl = 0;
|
||||||
var parent_srl = 0;
|
var parent_srl = 0;
|
||||||
|
|
||||||
|
|
@ -147,6 +148,7 @@ function doGetCategoryInfo(category_id, obj) {
|
||||||
var params = new Array();
|
var params = new Array();
|
||||||
params["category_srl"] = node_srl;
|
params["category_srl"] = node_srl;
|
||||||
params["parent_srl"] = parent_srl;
|
params["parent_srl"] = parent_srl;
|
||||||
|
params["module_srl"] = module_srl;
|
||||||
|
|
||||||
// 서버에 요청하여 해당 노드의 정보를 수정할 수 있도록 한다.
|
// 서버에 요청하여 해당 노드의 정보를 수정할 수 있도록 한다.
|
||||||
var response_tags = new Array('error','message','tpl');
|
var response_tags = new Array('error','message','tpl');
|
||||||
|
|
@ -217,9 +219,12 @@ function completeInsertCategory(ret_obj) {
|
||||||
function doMoveTree(category_id, source_category_srl, target_category_srl) {
|
function doMoveTree(category_id, source_category_srl, target_category_srl) {
|
||||||
source_category_srl = source_category_srl.replace(/menu_category_/,'');
|
source_category_srl = source_category_srl.replace(/menu_category_/,'');
|
||||||
target_category_srl = target_category_srl.replace(/menu_category_/,'');
|
target_category_srl = target_category_srl.replace(/menu_category_/,'');
|
||||||
|
var p_fo_obj = xGetElementById("fo_category");
|
||||||
|
|
||||||
var fo_obj = xGetElementById("fo_move_category");
|
var fo_obj = xGetElementById("fo_move_category");
|
||||||
fo_obj.source_category_srl.value = source_category_srl;
|
fo_obj.source_category_srl.value = source_category_srl;
|
||||||
fo_obj.target_category_srl.value = target_category_srl;
|
fo_obj.target_category_srl.value = target_category_srl;
|
||||||
|
fo_obj.module_srl.value = p_fo_obj.module_srl.value;
|
||||||
|
|
||||||
// 이동 취소를 선택하였을 경우 다시 그림;;
|
// 이동 취소를 선택하였을 경우 다시 그림;;
|
||||||
if(!procFilter(fo_obj, move_category)) {
|
if(!procFilter(fo_obj, move_category)) {
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,7 @@
|
||||||
// board 라는 이름의 모듈이 있는지 확인
|
// board 라는 이름의 모듈이 있는지 확인
|
||||||
$module_info = $oModuleModel->getModuleInfoByMid($args->board_name);
|
$module_info = $oModuleModel->getModuleInfoByMid($args->board_name);
|
||||||
if($module_info->module_srl) $args->module_srl = $module_info->module_srl;
|
if($module_info->module_srl) $args->module_srl = $module_info->module_srl;
|
||||||
|
else $args->module_srl = 0;
|
||||||
|
|
||||||
// 게시판 controller 생성
|
// 게시판 controller 생성
|
||||||
$oBoardController = &getAdminController('board');
|
$oBoardController = &getAdminController('board');
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,37 @@
|
||||||
<title xml:lang="en">manager</title>
|
<title xml:lang="en">manager</title>
|
||||||
</grant>
|
</grant>
|
||||||
</grants>
|
</grants>
|
||||||
|
<permissions>
|
||||||
|
<permission action="dispBoardContent" target="manager" />
|
||||||
|
<permission action="dispBoardWrite" target="manager" />
|
||||||
|
<permission action="dispBoardDelete" target="manager" />
|
||||||
|
<permission action="dispBoardReplyComment" target="manager" />
|
||||||
|
<permission action="dispBoardModifyComment" target="manager" />
|
||||||
|
<permission action="dispBoardDeleteComment" target="manager" />
|
||||||
|
<permission action="dispBoardDeleteTrackback" target="manager" />
|
||||||
|
<permission action="dispBoardMessage" target="manager" />
|
||||||
|
|
||||||
|
<permission action="procBoardInsertDocument" target="manager" />
|
||||||
|
<permission action="procBoardDeleteDocument" target="manager" />
|
||||||
|
<permission action="procBoardInsertComment" target="manager" />
|
||||||
|
<permission action="procBoardDeleteComment" target="manager" />
|
||||||
|
<permission action="procBoardDeleteTrackback" target="manager" />
|
||||||
|
<permission action="procBoardDeleteFile" target="manager" />
|
||||||
|
<permission action="procBoardUploadFile" target="manager" />
|
||||||
|
<permission action="procBoardDownloadFile" target="manager" />
|
||||||
|
|
||||||
|
<permission action="dispBoardAdminInsertBoard" target="manager" />
|
||||||
|
<permission action="dispBoardAdminBoardInfo" target="manager" />
|
||||||
|
<permission action="dispBoardAdminSkinInfo" target="manager" />
|
||||||
|
<permission action="dispBoardAdminCategoryInfo" target="manager" />
|
||||||
|
<permission action="dispBoardAdminManageDocument" target="manager" />
|
||||||
|
|
||||||
|
<permission action="procBoardAdminInsertBoard" target="manager" />
|
||||||
|
<permission action="procBoardAdminUpdateSkinInfo" target="manager" />
|
||||||
|
<permission action="procBoardAdminInsertCategory" target="manager" />
|
||||||
|
<permission action="procBoardAdminUpdateCategory" target="manager" />
|
||||||
|
<permission action="procBoardAdminManageCheckedDocument" target="manager" />
|
||||||
|
</permissions>
|
||||||
<actions>
|
<actions>
|
||||||
<action name="dispBoardContent" type="view" index="true" />
|
<action name="dispBoardContent" type="view" index="true" />
|
||||||
<action name="dispBoardWrite" type="view" />
|
<action name="dispBoardWrite" type="view" />
|
||||||
|
|
|
||||||
|
|
@ -79,9 +79,9 @@ Jeong, Chan Myeong 070601~070630
|
||||||
|
|
||||||
.boardList.thumbnail { margin-top:-1px; border-bottom:none;}
|
.boardList.thumbnail { margin-top:-1px; border-bottom:none;}
|
||||||
.boardList.thumbnail td { border-top:none; border-bottom:1px solid #eff0ed; padding:1.5em 0 0 1.5em; overflow:hidden;}
|
.boardList.thumbnail td { border-top:none; border-bottom:1px solid #eff0ed; padding:1.5em 0 0 1.5em; overflow:hidden;}
|
||||||
.boardList.thumbnail div.cell { float:left; width:167px; overflow:hidden; margin:0 1.5em 0 0; padding-bottom:1.5em;}
|
.boardList.thumbnail div.cell { float:left; width:167px; height:220px; overflow:hidden; margin:0 1.5em 0 0; padding-bottom:1.5em;}
|
||||||
.boardList.thumbnail div.cell img.thumb { padding:2px; border:1px solid #e0e1db; display:block; margin-bottom:1em;}
|
.boardList.thumbnail div.cell img.thumb { padding:2px; border:1px solid #e0e1db; display:block; margin-bottom:1em;}
|
||||||
.boardList.thumbnail div.title { color:#444444; margin-bottom:.2em; padding-left:3px;}
|
.boardList.thumbnail div.title { color:#444444; margin-bottom:.2em; padding-left:3px; overflow:hidden; white-space:nowrap;}
|
||||||
.boardList.thumbnail div.title a { color:#444444; text-decoration:none;}
|
.boardList.thumbnail div.title a { color:#444444; text-decoration:none;}
|
||||||
.boardList.thumbnail div.nameAndDate { font-size:.9em; color:#999999; margin-bottom:.2em; padding-left:3px;}
|
.boardList.thumbnail div.nameAndDate { font-size:.9em; color:#999999; margin-bottom:.2em; padding-left:3px;}
|
||||||
.boardList.thumbnail div.nameAndDate a { color:#999999;}
|
.boardList.thumbnail div.nameAndDate a { color:#999999;}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,17 @@
|
||||||
|
|
||||||
<!-- 목록 -->
|
<!-- 목록 -->
|
||||||
<table cellspacing="0" class="tableType1">
|
<table cellspacing="0" class="tableType1">
|
||||||
|
<col width="40" />
|
||||||
|
<col width="130" />
|
||||||
|
<col />
|
||||||
|
<col />
|
||||||
|
<col width="40" />
|
||||||
|
<col width="80" />
|
||||||
|
<col width="100" />
|
||||||
|
<col width="80" />
|
||||||
|
<col width="40" />
|
||||||
|
<col width="40" />
|
||||||
|
<col width="40" />
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col">{$lang->no}</th>
|
<th scope="col">{$lang->no}</th>
|
||||||
|
|
@ -16,7 +27,7 @@
|
||||||
<form action="./" method="get" onsubmit="return doChangeCategory(this);">
|
<form action="./" method="get" onsubmit="return doChangeCategory(this);">
|
||||||
<input type="hidden" name="module" value="{$module}" />
|
<input type="hidden" name="module" value="{$module}" />
|
||||||
<input type="hidden" name="act" value="{$act}" />
|
<input type="hidden" name="act" value="{$act}" />
|
||||||
<select name="module_category_srl">
|
<select name="module_category_srl" class="w80">
|
||||||
<option value="">{$lang->module_category}</option>
|
<option value="">{$lang->module_category}</option>
|
||||||
<!--@foreach($module_category as $key => $val)-->
|
<!--@foreach($module_category as $key => $val)-->
|
||||||
<option value="{$key}" <!--@if($module_category_srl==$key)-->selected="selected"<!--@end-->>{$val->title}</option>
|
<option value="{$key}" <!--@if($module_category_srl==$key)-->selected="selected"<!--@end-->>{$val->title}</option>
|
||||||
|
|
@ -34,6 +45,7 @@
|
||||||
<th scope="col">{$lang->admin_id}</th>
|
<th scope="col">{$lang->admin_id}</th>
|
||||||
<th scope="col">{$lang->regdate}</th>
|
<th scope="col">{$lang->regdate}</th>
|
||||||
<th scope="col">{$lang->cmd_view}</th>
|
<th scope="col">{$lang->cmd_view}</th>
|
||||||
|
<th scope="col">{$lang->cmd_copy}</th>
|
||||||
<th scope="col">{$lang->cmd_delete}</th>
|
<th scope="col">{$lang->cmd_delete}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|
@ -48,13 +60,14 @@
|
||||||
{$module_category[$val->module_category_srl]->title}
|
{$module_category[$val->module_category_srl]->title}
|
||||||
<!--@end-->
|
<!--@end-->
|
||||||
</td>
|
</td>
|
||||||
<td><div class="tLeft"><a href="{getUrl('act','dispBoardAdminBoardInfo','module_srl',$val->module_srl)}" class="blue">{$val->mid}</a></div></td>
|
<td><div class="tLeft nowrap"> <a href="{getUrl('act','dispBoardAdminBoardInfo','module_srl',$val->module_srl)}" class="blue">{$val->mid}</a></div></td>
|
||||||
<td><div class="tLeft">{htmlspecialchars($val->browser_title)}</div></td>
|
<td><div class="tLeft">{htmlspecialchars($val->browser_title)}</div></td>
|
||||||
<td class="tahoma">{$val->is_default}</td>
|
<td class="tahoma">{$val->is_default}</td>
|
||||||
<td class="tahoma">{$val->skin}</td>
|
<td class="tahoma">{$val->skin}</td>
|
||||||
<td class="tahoma">{$val->admin_id}</td>
|
<td class="tahoma">{$val->admin_id} </td>
|
||||||
<td class="tahoma">{zdate($val->regdate,"Y-m-d")}</td>
|
<td class="tahoma">{zdate($val->regdate,"Y-m-d")}</td>
|
||||||
<td class="blue"><a href="{getUrl('','mid',$val->mid)}" onclick="window.open(this.href); return false;">{$lang->cmd_view}</a></td>
|
<td class="blue"><a href="{getUrl('','mid',$val->mid)}" onclick="window.open(this.href); return false;">{$lang->cmd_view}</a></td>
|
||||||
|
<td class="blue"><a href="./?module=module&act=dispModuleAdminCopyModule&module_srl={$val->module_srl}" onclick="popopen(this.href);return false;">{$lang->cmd_copy}</a></td>
|
||||||
<td class="red"><!--@if($val->is_default!='Y')--><a href="{getUrl('act','dispBoardAdminDeleteBoard','module_srl', $val->module_srl)}">{$lang->cmd_delete}</a><!--@end--></td>
|
<td class="red"><!--@if($val->is_default!='Y')--><a href="{getUrl('act','dispBoardAdminDeleteBoard','module_srl', $val->module_srl)}">{$lang->cmd_delete}</a><!--@end--></td>
|
||||||
</tr>
|
</tr>
|
||||||
<!--@end-->
|
<!--@end-->
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,8 @@
|
||||||
* @brief 특정 게시물들의 소속 모듈 변경 (게시글 이동시에 사용)
|
* @brief 특정 게시물들의 소속 모듈 변경 (게시글 이동시에 사용)
|
||||||
**/
|
**/
|
||||||
function moveDocumentModule($document_srl_list, $module_srl, $source_module_srl) {
|
function moveDocumentModule($document_srl_list, $module_srl, $source_module_srl) {
|
||||||
|
if(!count($document_srl_list)) return;
|
||||||
|
|
||||||
$args->document_srls = implode(',',$document_srl_list);
|
$args->document_srls = implode(',',$document_srl_list);
|
||||||
$args->module_srl = $module_srl;
|
$args->module_srl = $module_srl;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -299,17 +299,18 @@
|
||||||
FileHandler::writeFile($thumbnail_file, '', 'w');
|
FileHandler::writeFile($thumbnail_file, '', 'w');
|
||||||
|
|
||||||
// 첨부파일이 있는지 확인하고 있으면 썸네일 만듬
|
// 첨부파일이 있는지 확인하고 있으면 썸네일 만듬
|
||||||
$file_list = FileHandler::readDir($document_path);
|
$oFile = &getModel('file');
|
||||||
|
$file_list = $oFile->getFiles($this->document_srl);
|
||||||
if(count($file_list)) {
|
if(count($file_list)) {
|
||||||
foreach($file_list as $key => $val) {
|
foreach($file_list as $file) {
|
||||||
if(eregi("^thumbnail_([0-9]+)\.(jpg|gif)$",$val)) continue;
|
if($file->direct_download!='Y') continue;
|
||||||
if(!eregi("\.(jpg|gif|png|jpeg)$", $val)) continue;
|
if(!eregi("(jpg|png|jpeg|gif)$",$file->source_filename)) continue;
|
||||||
|
|
||||||
$filename = sprintf("%s%s",$document_path,$val);
|
$filename = $file->uploaded_filename;
|
||||||
if(file_exists($filename)) {
|
if(!file_exists($filename)) continue;
|
||||||
FileHandler::createImageFile($filename, $thumbnail_file, $width, $width, 'jpg');
|
|
||||||
if(file_exists($thumbnail_file)) return Context::getRequestUri().$thumbnail_file;
|
FileHandler::createImageFile($filename, $thumbnail_file, $width, $width, 'jpg');
|
||||||
}
|
if(file_exists($thumbnail_file)) return Context::getRequestUri().$thumbnail_file;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
* @brief 文章(document)模块语言包
|
* @brief 文章(document)模块语言包
|
||||||
**/
|
**/
|
||||||
|
|
||||||
$lang->cmd_toggle_checked_document = '선택항목 반전';
|
$lang->cmd_toggle_checked_document = '反选';
|
||||||
$lang->cmd_delete_checked_document = '删除所选项目';
|
$lang->cmd_delete_checked_document = '删除所选';
|
||||||
|
|
||||||
$lang->msg_cart_is_null = '请选择要删除的文章。';
|
$lang->msg_cart_is_null = '请选择要删除的文章。';
|
||||||
$lang->msg_category_not_moved = '不能移动!';
|
$lang->msg_category_not_moved = '不能移动!';
|
||||||
|
|
|
||||||
|
|
@ -61,13 +61,10 @@
|
||||||
/**
|
/**
|
||||||
* 자동백업 기능 체크 (글 수정일 경우는 사용하지 않음)
|
* 자동백업 기능 체크 (글 수정일 경우는 사용하지 않음)
|
||||||
**/
|
**/
|
||||||
if(!$upload_target_srl && $enable_autosave) {
|
if($enable_autosave) {
|
||||||
// 자동 저장된 데이터를 추출
|
// 자동 저장된 데이터를 추출
|
||||||
$saved_doc = $this->getSavedDoc();
|
$saved_doc = $this->getSavedDoc();
|
||||||
|
|
||||||
// 자동저장된 데이터에 실제하는 문서 번호가 있다면 해당 문서 번호를 세팅
|
|
||||||
if($saved_doc->document_srl) $upload_target_srl = $saved_doc->upload_target_srl;
|
|
||||||
|
|
||||||
// 자동 저장 데이터를 context setting
|
// 자동 저장 데이터를 context setting
|
||||||
Context::set('saved_doc', $saved_doc);
|
Context::set('saved_doc', $saved_doc);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -135,7 +135,7 @@
|
||||||
|
|
||||||
<!-- 에디터 출력 -->
|
<!-- 에디터 출력 -->
|
||||||
<div class="editor_iframe_box"><iframe id="editor_iframe_{$editor_sequence}" frameborder="0" width="100%" height="{$editor_height}" style="background-color:transparent;"></iframe></div>
|
<div class="editor_iframe_box"><iframe id="editor_iframe_{$editor_sequence}" frameborder="0" width="100%" height="{$editor_height}" style="background-color:transparent;"></iframe></div>
|
||||||
<textarea id="editor_textarea_{$editor_sequence}" class="editor_iframe_textarea" style="display:none; height:{$editor_height}"></textarea>
|
<textarea id="editor_textarea_{$editor_sequence}" class="editor_iframe_textarea" style="display:none; height:{$editor_height}" rows="10" cols="10"></textarea>
|
||||||
|
|
||||||
<!-- 에디터 크기 조절 bar -->
|
<!-- 에디터 크기 조절 bar -->
|
||||||
<div class="textAreaDragIndicator"><div class="textAreaDragIndicatorBar" id="editor_drag_bar_{$editor_sequence}"></div></div>
|
<div class="textAreaDragIndicator"><div class="textAreaDragIndicatorBar" id="editor_drag_bar_{$editor_sequence}"></div></div>
|
||||||
|
|
|
||||||
|
|
@ -572,11 +572,14 @@ function editorEventCheck(evt) {
|
||||||
case 'Outdent' :
|
case 'Outdent' :
|
||||||
case 'InsertOrderedList' :
|
case 'InsertOrderedList' :
|
||||||
case 'InsertUnorderedList' :
|
case 'InsertUnorderedList' :
|
||||||
case 'SaveAs' :
|
case 'SaveAs' :
|
||||||
case 'Copy' :
|
case 'Print' :
|
||||||
case 'Cut' :
|
case 'Copy' :
|
||||||
case 'Paste' :
|
case 'Cut' :
|
||||||
|
case 'Paste' :
|
||||||
case 'RemoveFormat' :
|
case 'RemoveFormat' :
|
||||||
|
case 'Subscript' :
|
||||||
|
case 'Superscript' :
|
||||||
editorDo(component_name, '', editor_sequence);
|
editorDo(component_name, '', editor_sequence);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -240,7 +240,7 @@
|
||||||
if(!$source_comment) return $this->dispGuestbookMessage('msg_invalid_request');
|
if(!$source_comment) return $this->dispGuestbookMessage('msg_invalid_request');
|
||||||
|
|
||||||
// 필요한 정보들 세팅
|
// 필요한 정보들 세팅
|
||||||
Context::set('document_srl',$document_srl);
|
Context::set('document_srl',$source_comment->document_srl);
|
||||||
Context::set('parent_srl',$parent_srl);
|
Context::set('parent_srl',$parent_srl);
|
||||||
Context::set('comment_srl',NULL);
|
Context::set('comment_srl',NULL);
|
||||||
Context::set('source_comment',$source_comment);
|
Context::set('source_comment',$source_comment);
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@
|
||||||
<parameter>
|
<parameter>
|
||||||
<param name="mid" target="mid" />
|
<param name="mid" target="mid" />
|
||||||
<param name="document_srl" target="document_srl" />
|
<param name="document_srl" target="document_srl" />
|
||||||
|
<param name="comment_srl" target="comment_srl" />
|
||||||
<param name="parent_srl" target="parent_srl" />
|
<param name="parent_srl" target="parent_srl" />
|
||||||
<param name="nick_name" target="nick_name" />
|
<param name="nick_name" target="nick_name" />
|
||||||
<param name="password" target="password" />
|
<param name="password" target="password" />
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,10 @@ function completeDocumentInserted(ret_obj) {
|
||||||
var error = ret_obj['error'];
|
var error = ret_obj['error'];
|
||||||
var message = ret_obj['message'];
|
var message = ret_obj['message'];
|
||||||
var mid = ret_obj['mid'];
|
var mid = ret_obj['mid'];
|
||||||
var document_srl = ret_obj['document_srl'];
|
|
||||||
|
|
||||||
alert(message);
|
alert(message);
|
||||||
|
|
||||||
var url = current_url.setQuery('mid',mid).setQuery('document_srl',document_srl).setQuery('act','');
|
var url = current_url.setQuery('mid',mid).setQuery('act','').setQuery('page','').setQuery('comment_srl','');
|
||||||
location.href = url;
|
location.href = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -24,9 +23,7 @@ function completeDeleteDocument(ret_obj) {
|
||||||
var mid = ret_obj['mid'];
|
var mid = ret_obj['mid'];
|
||||||
var page = ret_obj['page'];
|
var page = ret_obj['page'];
|
||||||
|
|
||||||
var url = "./?mid="+mid;
|
var url = current_url.setQuery('mid',mid).setQuery('act','').setQuery('comment_srl','');
|
||||||
if(page) url += "&page="+page;
|
|
||||||
|
|
||||||
alert(message);
|
alert(message);
|
||||||
|
|
||||||
location.href = url;
|
location.href = url;
|
||||||
|
|
@ -48,9 +45,7 @@ function completeInsertComment(ret_obj) {
|
||||||
var document_srl = ret_obj['document_srl'];
|
var document_srl = ret_obj['document_srl'];
|
||||||
var comment_srl = ret_obj['comment_srl'];
|
var comment_srl = ret_obj['comment_srl'];
|
||||||
|
|
||||||
var url = "./?mid="+mid+"&document_srl="+document_srl;
|
var url = current_url.setQuery('mid',mid).setQuery('act','').setQuery('comment_srl','');
|
||||||
//if(comment_srl) url += "#comment_"+comment_srl;
|
|
||||||
|
|
||||||
alert(message);
|
alert(message);
|
||||||
|
|
||||||
location.href = url;
|
location.href = url;
|
||||||
|
|
@ -64,9 +59,7 @@ function completeDeleteComment(ret_obj) {
|
||||||
var document_srl = ret_obj['document_srl'];
|
var document_srl = ret_obj['document_srl'];
|
||||||
var page = ret_obj['page'];
|
var page = ret_obj['page'];
|
||||||
|
|
||||||
var url = "./?mid="+mid+'&document_srl='+document_srl;
|
var url = current_url.setQuery('mid',mid).setQuery('act','').setQuery('comment_srl','');
|
||||||
if(page) url += "&page="+page;
|
|
||||||
|
|
||||||
alert(message);
|
alert(message);
|
||||||
|
|
||||||
location.href = url;
|
location.href = url;
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,8 @@
|
||||||
<action name="dispMemberModifyPassword" type="view" standalone="true" />
|
<action name="dispMemberModifyPassword" type="view" standalone="true" />
|
||||||
<action name="dispMemberLoginForm" type="view" standalone="true" />
|
<action name="dispMemberLoginForm" type="view" standalone="true" />
|
||||||
<action name="dispMemberLogout" type="view" standalone="true" />
|
<action name="dispMemberLogout" type="view" standalone="true" />
|
||||||
|
<action name="dispMemberLeave" type="view" standalone="true" />
|
||||||
|
<action name="dispMemberOpenIDLeave" type="view" standalone="true" />
|
||||||
<action name="dispMemberOwnDocument" type="view" standalone="true" />
|
<action name="dispMemberOwnDocument" type="view" standalone="true" />
|
||||||
<action name="dispMemberScrappedDocument" type="view" standalone="true" />
|
<action name="dispMemberScrappedDocument" type="view" standalone="true" />
|
||||||
|
|
||||||
|
|
@ -40,6 +42,7 @@
|
||||||
<action name="procMemberModifyInfo" type="controller" standalone="true" />
|
<action name="procMemberModifyInfo" type="controller" standalone="true" />
|
||||||
<action name="procMemberModifyPassword" type="controller" standalone="true" />
|
<action name="procMemberModifyPassword" type="controller" standalone="true" />
|
||||||
<action name="procMemberLeave" type="controller" standalone="true" />
|
<action name="procMemberLeave" type="controller" standalone="true" />
|
||||||
|
<action name="procMemberOpenIDLeave" type="controller" standalone="true" />
|
||||||
<action name="procMemberInsertImageName" type="controller" standalone="true" />
|
<action name="procMemberInsertImageName" type="controller" standalone="true" />
|
||||||
<action name="procMemberInsertImageMark" type="controller" standalone="true" />
|
<action name="procMemberInsertImageMark" type="controller" standalone="true" />
|
||||||
<action name="procMemberDeleteImageName" type="controller" standalone="true" />
|
<action name="procMemberDeleteImageName" type="controller" standalone="true" />
|
||||||
|
|
|
||||||
|
|
@ -168,6 +168,7 @@
|
||||||
$lang->about_member_default = 'It will be set as default group on join';
|
$lang->about_member_default = 'It will be set as default group on join';
|
||||||
|
|
||||||
$lang->about_openid = 'When you join as OpenID, basic info like ID or email address will be saved on this site, but password and certification management will be done on current OpenID offering service';
|
$lang->about_openid = 'When you join as OpenID, basic info like ID or email address will be saved on this site, but password and certification management will be done on current OpenID offering service';
|
||||||
|
$lang->about_openid_leave = '오픈아이디의 탈퇴는 현 사이트에서의 회원 정보를 삭제하는 것입니다.<br />탈퇴 후 로그인하시면 새로 가입하시는 것으로 되어 작성한 글에 대한 권한을 가질 수 없게 됩니다';
|
||||||
|
|
||||||
$lang->about_member = "This is a module for creating/modifing/deleting members and managing group or join form.\nYou can manage members by creating new groups, and get additional information by managing join form";
|
$lang->about_member = "This is a module for creating/modifing/deleting members and managing group or join form.\nYou can manage members by creating new groups, and get additional information by managing join form";
|
||||||
?>
|
?>
|
||||||
|
|
|
||||||
|
|
@ -168,6 +168,7 @@
|
||||||
$lang->about_member_default = 'Al registrar se configura como grupo predefinido';
|
$lang->about_member_default = 'Al registrar se configura como grupo predefinido';
|
||||||
|
|
||||||
$lang->about_openid = 'Cuando tu registra como OpenID, la información básica como ID o la dirección del email sera guardado en este sitio, pero la contraseña y la resolución de la certificación se hará en el servicio ofrecido por openID';
|
$lang->about_openid = 'Cuando tu registra como OpenID, la información básica como ID o la dirección del email sera guardado en este sitio, pero la contraseña y la resolución de la certificación se hará en el servicio ofrecido por openID';
|
||||||
|
$lang->about_openid_leave = '오픈아이디의 탈퇴는 현 사이트에서의 회원 정보를 삭제하는 것입니다.<br />탈퇴 후 로그인하시면 새로 가입하시는 것으로 되어 작성한 글에 대한 권한을 가질 수 없게 됩니다';
|
||||||
|
|
||||||
$lang->about_member = "Esto es un módulo para crear/modificar/eliminar usuarios y manejar grupos o el formato del registro.\n Usted puede manejar usuarios creando nuevos grupos, y obtener información adicional manejando el formato del registro";
|
$lang->about_member = "Esto es un módulo para crear/modificar/eliminar usuarios y manejar grupos o el formato del registro.\n Usted puede manejar usuarios creando nuevos grupos, y obtener información adicional manejando el formato del registro";
|
||||||
?>
|
?>
|
||||||
|
|
|
||||||
|
|
@ -168,6 +168,7 @@
|
||||||
$lang->about_member_default = '会員加入時に基本グループとして設定されます。';
|
$lang->about_member_default = '会員加入時に基本グループとして設定されます。';
|
||||||
|
|
||||||
$lang->about_openid = 'OpenIDで加入する際、IDとメールなどの基本情報は、このサイトに保存されますが、パスワードと認証のための処理用の情報は該当するOpenID提供サービス側で行われます。';
|
$lang->about_openid = 'OpenIDで加入する際、IDとメールなどの基本情報は、このサイトに保存されますが、パスワードと認証のための処理用の情報は該当するOpenID提供サービス側で行われます。';
|
||||||
|
$lang->about_openid_leave = '오픈아이디의 탈퇴는 현 사이트에서의 회원 정보를 삭제하는 것입니다.<br />탈퇴 후 로그인하시면 새로 가입하시는 것으로 되어 작성한 글에 대한 권한을 가질 수 없게 됩니다';
|
||||||
|
|
||||||
$lang->about_member = "会員の作成・修正・削除することができ、グループの管理、加入フォームの管理などが行える会員管理モジュールです。デフォルトで作成されたグループにグループを追加作成して会員管理ができるようにし、加入フォーム管理では基本情報の他、フォームの入力情報を追加することができます。";
|
$lang->about_member = "会員の作成・修正・削除することができ、グループの管理、加入フォームの管理などが行える会員管理モジュールです。デフォルトで作成されたグループにグループを追加作成して会員管理ができるようにし、加入フォーム管理では基本情報の他、フォームの入力情報を追加することができます。";
|
||||||
?>
|
?>
|
||||||
|
|
|
||||||
|
|
@ -168,6 +168,7 @@
|
||||||
$lang->about_member_default = '회원가입시 기본 그룹으로 설정됩니다';
|
$lang->about_member_default = '회원가입시 기본 그룹으로 설정됩니다';
|
||||||
|
|
||||||
$lang->about_openid = '오픈아이디로 가입시 아이디와 메일등의 기본 정보는 이 사이트에 저장이 되지만 비밀번호와 인증을 위한 처리는 해당 오픈아이디 제공서비스에서 이루어집니다.';
|
$lang->about_openid = '오픈아이디로 가입시 아이디와 메일등의 기본 정보는 이 사이트에 저장이 되지만 비밀번호와 인증을 위한 처리는 해당 오픈아이디 제공서비스에서 이루어집니다.';
|
||||||
|
$lang->about_openid_leave = '오픈아이디의 탈퇴는 현 사이트에서의 회원 정보를 삭제하는 것입니다.<br />탈퇴 후 로그인하시면 새로 가입하시는 것으로 되어 작성한 글에 대한 권한을 가질 수 없게 됩니다';
|
||||||
|
|
||||||
$lang->about_member = "회원을 생성/수정/삭제 할 수 있고 그룹관리나 가입폼 관리등을 할 수 있는 회원 관리 모듈입니다.\n기본으로 생성된 그룹외의 그룹을 생성하여 회원 관리가 가능하고 가입폼관리를 통한 기본 정보외의 추가 정보를 요구받을 수도 있습니다.";
|
$lang->about_member = "회원을 생성/수정/삭제 할 수 있고 그룹관리나 가입폼 관리등을 할 수 있는 회원 관리 모듈입니다.\n기본으로 생성된 그룹외의 그룹을 생성하여 회원 관리가 가능하고 가입폼관리를 통한 기본 정보외의 추가 정보를 요구받을 수도 있습니다.";
|
||||||
?>
|
?>
|
||||||
|
|
|
||||||
|
|
@ -168,6 +168,7 @@
|
||||||
$lang->about_member_default = '将成为注册会员时的默认用户组。';
|
$lang->about_member_default = '将成为注册会员时的默认用户组。';
|
||||||
|
|
||||||
$lang->about_openid = '用OpenID注册时该网站只保存用户名和 邮件等基本信息,密码和认证处理是在提供OpenID服务的站点中得到解决。';
|
$lang->about_openid = '用OpenID注册时该网站只保存用户名和 邮件等基本信息,密码和认证处理是在提供OpenID服务的站点中得到解决。';
|
||||||
|
$lang->about_openid_leave = '오픈아이디의 탈퇴는 현 사이트에서의 회원 정보를 삭제하는 것입니다.<br />탈퇴 후 로그인하시면 새로 가입하시는 것으로 되어 작성한 글에 대한 권한을 가질 수 없게 됩니다';
|
||||||
|
|
||||||
$lang->about_member = "可以添加/修改/删除会员及管理用户组或注册表单的会员管理模块。\n此模块不仅可以生成缺省用户组以外的其他用户组来管理会员,并且通过注册表单的管理获得除会员基本信息以外的扩展信息。";
|
$lang->about_member = "可以添加/修改/删除会员及管理用户组或注册表单的会员管理模块。\n此模块不仅可以生成缺省用户组以外的其他用户组来管理会员,并且通过注册表单的管理获得除会员基本信息以外的扩展信息。";
|
||||||
?>
|
?>
|
||||||
|
|
@ -18,6 +18,7 @@
|
||||||
$oModuleController->insertActionForward('member', 'view', 'dispMemberModifyInfo');
|
$oModuleController->insertActionForward('member', 'view', 'dispMemberModifyInfo');
|
||||||
$oModuleController->insertActionForward('member', 'view', 'dispMemberModifyPassword');
|
$oModuleController->insertActionForward('member', 'view', 'dispMemberModifyPassword');
|
||||||
$oModuleController->insertActionForward('member', 'view', 'dispMemberLeave');
|
$oModuleController->insertActionForward('member', 'view', 'dispMemberLeave');
|
||||||
|
$oModuleController->insertActionForward('member', 'view', 'dispMemberOpenIDLeave');
|
||||||
$oModuleController->insertActionForward('member', 'view', 'dispMemberLoginForm');
|
$oModuleController->insertActionForward('member', 'view', 'dispMemberLoginForm');
|
||||||
$oModuleController->insertActionForward('member', 'view', 'dispMemberLogout');
|
$oModuleController->insertActionForward('member', 'view', 'dispMemberLogout');
|
||||||
$oModuleController->insertActionForward('member', 'view', 'dispMemberOwnDocument');
|
$oModuleController->insertActionForward('member', 'view', 'dispMemberOwnDocument');
|
||||||
|
|
@ -125,6 +126,10 @@
|
||||||
$act = $oModuleModel->getActionForward('dispMemberScrappedDocument');
|
$act = $oModuleModel->getActionForward('dispMemberScrappedDocument');
|
||||||
if(!$act) return true;
|
if(!$act) return true;
|
||||||
|
|
||||||
|
// dispMemberOpenIDLeave act의 여부 체크 (2007. 9. 19 추가)
|
||||||
|
$act = $oModuleModel->getActionForward('dispMemberOpenIDLeave');
|
||||||
|
if(!$act) return true;
|
||||||
|
|
||||||
// member 디렉토리 체크 (2007. 8. 11 추가)
|
// member 디렉토리 체크 (2007. 8. 11 추가)
|
||||||
if(!is_dir("./files/member_extra_info")) return true;
|
if(!is_dir("./files/member_extra_info")) return true;
|
||||||
|
|
||||||
|
|
@ -139,6 +144,7 @@
|
||||||
$oModuleController = &getController('module');
|
$oModuleController = &getController('module');
|
||||||
$oModuleController->insertActionForward('member', 'view', 'dispMemberOwnDocument');
|
$oModuleController->insertActionForward('member', 'view', 'dispMemberOwnDocument');
|
||||||
$oModuleController->insertActionForward('member', 'view', 'dispMemberScrappedDocument');
|
$oModuleController->insertActionForward('member', 'view', 'dispMemberScrappedDocument');
|
||||||
|
$oModuleController->insertActionForward('member', 'view', 'dispMemberOpenIDLeave');
|
||||||
|
|
||||||
// member 디렉토리 체크
|
// member 디렉토리 체크
|
||||||
FileHandler::makeDir('./files/member_extra_info/image_name');
|
FileHandler::makeDir('./files/member_extra_info/image_name');
|
||||||
|
|
|
||||||
|
|
@ -121,12 +121,7 @@
|
||||||
* @brief 로그아웃
|
* @brief 로그아웃
|
||||||
**/
|
**/
|
||||||
function procMemberLogout() {
|
function procMemberLogout() {
|
||||||
$_SESSION['is_logged'] = false;
|
$this->destroySessionInfo();
|
||||||
$_SESSION['ipaddress'] = $_SERVER['REMOTE_ADDR'];
|
|
||||||
$_SESSION['logged_info'] = NULL;
|
|
||||||
$_SESSION['member_srl'] = NULL;
|
|
||||||
$_SESSION['group_srls'] = array();
|
|
||||||
$_SESSION['is_admin'] = NULL;
|
|
||||||
return new Object();
|
return new Object();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -726,12 +721,38 @@
|
||||||
$output = $this->deleteMember($member_srl);
|
$output = $this->deleteMember($member_srl);
|
||||||
if(!$output->toBool()) return $output;
|
if(!$output->toBool()) return $output;
|
||||||
|
|
||||||
$_SESSION['is_logged'] = false;
|
// 모든 세션 정보 파기
|
||||||
$_SESSION['logged_info'] = null;
|
$this->destroySessionInfo();
|
||||||
|
|
||||||
|
// 성공 메세지 리턴
|
||||||
$this->setMessage('success_leaved');
|
$this->setMessage('success_leaved');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 오픈아이디 탈퇴
|
||||||
|
**/
|
||||||
|
function procMemberOpenIDLeave() {
|
||||||
|
// 비로그인 상태이면 에러
|
||||||
|
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||||
|
|
||||||
|
// 현재 ip와 세션 아이피 비교
|
||||||
|
if($_SESSION['ipaddress']!=$_SERVER['REMOTE_ADDR']) return $this->stop('msg_not_permitted');
|
||||||
|
|
||||||
|
// 로그인한 유저의 정보를 가져옴
|
||||||
|
$logged_info = Context::get('logged_info');
|
||||||
|
$member_srl = $logged_info->member_srl;
|
||||||
|
|
||||||
|
$output = $this->deleteMember($member_srl);
|
||||||
|
if(!$output->toBool()) return $output;
|
||||||
|
|
||||||
|
// 모든 세션 정보 파기
|
||||||
|
$this->destroySessionInfo();
|
||||||
|
|
||||||
|
// 성공 메세지 리턴
|
||||||
|
$this->setMessage('success_leaved');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 이미지 이름을 추가
|
* @brief 이미지 이름을 추가
|
||||||
**/
|
**/
|
||||||
|
|
@ -960,6 +981,10 @@
|
||||||
function setSessionInfo($member_info) {
|
function setSessionInfo($member_info) {
|
||||||
if(!$member_info->member_srl) return;
|
if(!$member_info->member_srl) return;
|
||||||
|
|
||||||
|
// 오픈아이디인지 체크
|
||||||
|
if(eregi("^([0-9a-z]+)$", $member_info->user_id)) $member_info->is_openid = false;
|
||||||
|
else $member_info->is_openid = true;
|
||||||
|
|
||||||
// 로그인 처리
|
// 로그인 처리
|
||||||
$_SESSION['is_logged'] = true;
|
$_SESSION['is_logged'] = true;
|
||||||
$_SESSION['ipaddress'] = $_SERVER['REMOTE_ADDR'];
|
$_SESSION['ipaddress'] = $_SERVER['REMOTE_ADDR'];
|
||||||
|
|
@ -1312,5 +1337,15 @@
|
||||||
|
|
||||||
return sprintf("%08lx%08lx", $nr, $nr2);
|
return sprintf("%08lx%08lx", $nr, $nr2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 모든 세션 정보 파기
|
||||||
|
**/
|
||||||
|
function destroySessionInfo() {
|
||||||
|
if(!$_SESSION || !is_array($_SESSION)) return;
|
||||||
|
foreach($_SESSION as $key => $val) {
|
||||||
|
$_SESSION[$key] = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
|
||||||
|
|
@ -231,6 +231,27 @@
|
||||||
$this->setTemplateFile('leave_form');
|
$this->setTemplateFile('leave_form');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 오픈 아이디 탈퇴 화면
|
||||||
|
**/
|
||||||
|
function dispMemberOpenIDLeave() {
|
||||||
|
$oMemberModel = &getModel('member');
|
||||||
|
|
||||||
|
// 로그인 되어 있지 않을 경우 로그인 되어 있지 않다는 메세지 출력
|
||||||
|
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
|
||||||
|
|
||||||
|
$logged_info = Context::get('logged_info');
|
||||||
|
$member_srl = $logged_info->member_srl;
|
||||||
|
|
||||||
|
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
|
||||||
|
Context::set('member_info',$member_info);
|
||||||
|
|
||||||
|
if($member_info->member_srl == $logged_info->member_srl) Context::set('my_menu', $this->my_menu);
|
||||||
|
|
||||||
|
// 템플릿 파일 지정
|
||||||
|
$this->setTemplateFile('openid_leave_form');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 로그아웃 출력
|
* @brief 로그아웃 출력
|
||||||
**/
|
**/
|
||||||
|
|
|
||||||
|
|
@ -99,8 +99,12 @@
|
||||||
<div class="tCenter">
|
<div class="tCenter">
|
||||||
<!--@if($member_info->member_srl == $logged_info->member_srl)-->
|
<!--@if($member_info->member_srl == $logged_info->member_srl)-->
|
||||||
<a href="{getUrl('act','dispMemberModifyInfo','member_srl','')}" class="button"><span>{$lang->cmd_modify_member_info}</span></a>
|
<a href="{getUrl('act','dispMemberModifyInfo','member_srl','')}" class="button"><span>{$lang->cmd_modify_member_info}</span></a>
|
||||||
<a href="{getUrl('act','dispMemberModifyPassword','member_srl','')}" class="button"><span>{$lang->cmd_modify_member_password}</span></a>
|
<!--@if($logged_info->is_openid)-->
|
||||||
<a href="{getUrl('act','dispMemberLeave','member_srl','')}" class="button"><span>{$lang->cmd_leave}</span></a>
|
<a href="{getUrl('act','dispMemberOpenIDLeave','member_srl','')}" class="button"><span>{$lang->cmd_leave}</span></a>
|
||||||
|
<!--@else-->
|
||||||
|
<a href="{getUrl('act','dispMemberModifyPassword','member_srl','')}" class="button"><span>{$lang->cmd_modify_member_password}</span></a>
|
||||||
|
<a href="{getUrl('act','dispMemberLeave','member_srl','')}" class="button"><span>{$lang->cmd_leave}</span></a>
|
||||||
|
<!--@end-->
|
||||||
<!--@end-->
|
<!--@end-->
|
||||||
<a href="{getUrl('act','','member_srl','')}" class="button"><span>{$lang->cmd_back}</span></a>
|
<a href="{getUrl('act','','member_srl','')}" class="button"><span>{$lang->cmd_back}</span></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
<filter name="openid_leave_member" module="member" act="procMemberOpenIDLeave" confirm_msg_code="confirm_leave">
|
||||||
|
<form />
|
||||||
|
<parameter />
|
||||||
|
<response callback_func="completeLeave">
|
||||||
|
<tag name="error" />
|
||||||
|
<tag name="message" />
|
||||||
|
</response>
|
||||||
|
</filter>
|
||||||
|
|
@ -99,8 +99,12 @@
|
||||||
<div class="tCenter">
|
<div class="tCenter">
|
||||||
<!--@if($member_info->member_srl == $logged_info->member_srl)-->
|
<!--@if($member_info->member_srl == $logged_info->member_srl)-->
|
||||||
<a href="{getUrl('act','dispMemberModifyInfo','member_srl','')}" class="button"><span>{$lang->cmd_modify_member_info}</span></a>
|
<a href="{getUrl('act','dispMemberModifyInfo','member_srl','')}" class="button"><span>{$lang->cmd_modify_member_info}</span></a>
|
||||||
<a href="{getUrl('act','dispMemberModifyPassword','member_srl','')}" class="button"><span>{$lang->cmd_modify_member_password}</span></a>
|
<!--@if($logged_info->is_openid)-->
|
||||||
<a href="{getUrl('act','dispMemberLeave','member_srl','')}" class="button"><span>{$lang->cmd_leave}</span></a>
|
<a href="{getUrl('act','dispMemberOpenIDLeave','member_srl','')}" class="button"><span>{$lang->cmd_leave}</span></a>
|
||||||
|
<!--@else-->
|
||||||
|
<a href="{getUrl('act','dispMemberModifyPassword','member_srl','')}" class="button"><span>{$lang->cmd_modify_member_password}</span></a>
|
||||||
|
<a href="{getUrl('act','dispMemberLeave','member_srl','')}" class="button"><span>{$lang->cmd_leave}</span></a>
|
||||||
|
<!--@end-->
|
||||||
<!--@end-->
|
<!--@end-->
|
||||||
<a href="{getUrl('act','','member_srl','')}" class="button"><span>{$lang->cmd_back}</span></a>
|
<a href="{getUrl('act','','member_srl','')}" class="button"><span>{$lang->cmd_back}</span></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
28
modules/member/skins/default/openid_leave_form.html
Normal file
28
modules/member/skins/default/openid_leave_form.html
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
{@ $member_title = $lang->msg_leave_member}
|
||||||
|
<!--#include("./common_header.html")-->
|
||||||
|
|
||||||
|
<!--%import("filter/openid_leave_member.xml")-->
|
||||||
|
|
||||||
|
<form id="fo_insert_member" action="./" method="get" onsubmit="return procFilter(this, openid_leave_member)">
|
||||||
|
<input type="hidden" name="mid" value="{$mid}" />
|
||||||
|
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||||
|
<input type="hidden" name="page" value="{$page}" />
|
||||||
|
|
||||||
|
<table cellspacing="0" class="memberInfoTable gap1" title="$lang->msg_leave_member}">
|
||||||
|
<col width="140" />
|
||||||
|
<col />
|
||||||
|
<tr class="first-child">
|
||||||
|
<th scope="row">{$lang->user_id}</th>
|
||||||
|
<td>
|
||||||
|
{$member_info->user_id}
|
||||||
|
<p>{$lang->about_openid_leave}</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div class="help tCenter">
|
||||||
|
<span class="button"><input type="submit" value="{$lang->cmd_leave}" accesskey="s" /></span>
|
||||||
|
<a href="{getUrl('act','dispMemberInfo','member_srl','')}" class="button"><span>{$lang->cmd_back}</span></a>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<!--#include("./common_footer.html")-->
|
||||||
|
|
@ -8,7 +8,9 @@
|
||||||
|
|
||||||
<action name="dispModuleSkinInfo" type="view" standalone="true" />
|
<action name="dispModuleSkinInfo" type="view" standalone="true" />
|
||||||
|
|
||||||
|
<action name="dispModuleAdminCopyModule" type="view" standalone="true" />
|
||||||
<action name="procModuleAdminInsertCategory" type="controller" standalone="true" />
|
<action name="procModuleAdminInsertCategory" type="controller" standalone="true" />
|
||||||
<action name="procModuleAdminUpdateCategory" type="controller" standalone="true" />
|
<action name="procModuleAdminUpdateCategory" type="controller" standalone="true" />
|
||||||
|
<action name="procModuleAdminCopyModule" type="controller" standalone="true" />
|
||||||
</actions>
|
</actions>
|
||||||
</module>
|
</module>
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@
|
||||||
'H' => 'Open summary',
|
'H' => 'Open summary',
|
||||||
'N' => 'Not open',
|
'N' => 'Not open',
|
||||||
);
|
);
|
||||||
|
$lang->module_copy = "Copy module";
|
||||||
|
|
||||||
$lang->cmd_add_shortcut = "Add Shortcut";
|
$lang->cmd_add_shortcut = "Add Shortcut";
|
||||||
$lang->cmd_install = "Install";
|
$lang->cmd_install = "Install";
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@
|
||||||
'H' => 'Abrir el sumario',
|
'H' => 'Abrir el sumario',
|
||||||
'N' => 'No abrir',
|
'N' => 'No abrir',
|
||||||
);
|
);
|
||||||
|
$lang->module_copy = "Copy Module";
|
||||||
|
|
||||||
$lang->cmd_add_shortcut = "añadir acceso directo";
|
$lang->cmd_add_shortcut = "añadir acceso directo";
|
||||||
$lang->cmd_install = "Instalar";
|
$lang->cmd_install = "Instalar";
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@
|
||||||
'H' => '要約配信',
|
'H' => '要約配信',
|
||||||
'N' => '配信しない',
|
'N' => '配信しない',
|
||||||
);
|
);
|
||||||
|
$lang->module_copy = "Copy module";
|
||||||
|
|
||||||
$lang->cmd_add_shortcut = "ショットカット追加";
|
$lang->cmd_add_shortcut = "ショットカット追加";
|
||||||
$lang->cmd_install = "インストール";
|
$lang->cmd_install = "インストール";
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@
|
||||||
'H' => '요약 공개',
|
'H' => '요약 공개',
|
||||||
'N' => '공개하지 않음',
|
'N' => '공개하지 않음',
|
||||||
);
|
);
|
||||||
|
$lang->module_copy = "모듈 복사";
|
||||||
|
|
||||||
$lang->cmd_add_shortcut = "바로가기 추가";
|
$lang->cmd_add_shortcut = "바로가기 추가";
|
||||||
$lang->cmd_install = "설치";
|
$lang->cmd_install = "설치";
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@
|
||||||
'H' => '公开摘要',
|
'H' => '公开摘要',
|
||||||
'N' => '不公开',
|
'N' => '不公开',
|
||||||
);
|
);
|
||||||
|
$lang->module_copy = "Copy Module";
|
||||||
|
|
||||||
$lang->cmd_add_shortcut = "添加到快捷菜单";
|
$lang->cmd_add_shortcut = "添加到快捷菜单";
|
||||||
$lang->cmd_install = "安装";
|
$lang->cmd_install = "安装";
|
||||||
|
|
|
||||||
|
|
@ -62,5 +62,50 @@
|
||||||
return executeQuery('module.deleteModuleCategory', $args);
|
return executeQuery('module.deleteModuleCategory', $args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 모듈 복사
|
||||||
|
**/
|
||||||
|
function procModuleAdminCopyModule() {
|
||||||
|
// 복사하려는 대상 모듈의 정보를 구함
|
||||||
|
$module_srl = Context::get('module_srl');
|
||||||
|
if(!$module_srl) return;
|
||||||
|
|
||||||
|
// 새로 생성하려는 모듈들의 이름/브라우저 제목을 구함
|
||||||
|
$clones = array();
|
||||||
|
$args = Context::getAll();
|
||||||
|
for($i=1;$i<=10;$i++) {
|
||||||
|
$mid = $args->{"mid_".$i};
|
||||||
|
$browser_title = $args->{"browser_title_".$i};
|
||||||
|
if(!$mid) continue;
|
||||||
|
if($mid && !$browser_title) $browser_title = $mid;
|
||||||
|
$clones[$mid] = $browser_title;
|
||||||
|
}
|
||||||
|
if(!count($clones)) return;
|
||||||
|
|
||||||
|
// 원 모듈의 정보를 직접 구해옴
|
||||||
|
$obj->module_srl = $module_srl;
|
||||||
|
$output = executeQuery("module.getMidInfo", $obj);
|
||||||
|
$module_info = $output->data;
|
||||||
|
unset($module_info->module_srl);
|
||||||
|
unset($module_info->regdate);
|
||||||
|
|
||||||
|
$oDB = &DB::getInstance();
|
||||||
|
$oDB->begin();
|
||||||
|
|
||||||
|
// 모듈 복사
|
||||||
|
foreach($clones as $mid => $browser_title) {
|
||||||
|
$clone_args = null;
|
||||||
|
$clone_args = clone($module_info);
|
||||||
|
$clone_args->module_srl = getNextSequence();
|
||||||
|
$clone_args->mid = $mid;
|
||||||
|
$clone_args->browser_title = $browser_title;
|
||||||
|
$clone_args->is_default = 'N';
|
||||||
|
$output = executeQuery('module.insertModule', $clone_args);
|
||||||
|
}
|
||||||
|
|
||||||
|
$oDB->commit();
|
||||||
|
$this->setMessage('success_registed');
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
|
||||||
|
|
@ -78,5 +78,24 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 모듈 복사 기능
|
||||||
|
**/
|
||||||
|
function dispModuleAdminCopyModule() {
|
||||||
|
// 복사하려는 대상 모듈을 구함
|
||||||
|
$module_srl = Context::get('module_srl');
|
||||||
|
|
||||||
|
// 해당 모듈의 정보를 구함
|
||||||
|
$oModuleModel = &getModel('module');
|
||||||
|
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
|
||||||
|
Context::set('module_info', $module_info);
|
||||||
|
|
||||||
|
// 레이아웃을 팝업으로 지정
|
||||||
|
$this->setLayoutFile('popup_layout');
|
||||||
|
|
||||||
|
// 템플릿 파일 지정
|
||||||
|
$this->setTemplateFile('copy_module');
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
|
||||||
|
|
@ -37,8 +37,6 @@
|
||||||
* @brief 모듈 입력
|
* @brief 모듈 입력
|
||||||
**/
|
**/
|
||||||
function insertModule($args) {
|
function insertModule($args) {
|
||||||
if(!$args->module_srl) $args->module_srl = 0;
|
|
||||||
|
|
||||||
// begin transaction
|
// begin transaction
|
||||||
$oDB = &DB::getInstance();
|
$oDB = &DB::getInstance();
|
||||||
$oDB->begin();
|
$oDB->begin();
|
||||||
|
|
|
||||||
|
|
@ -301,6 +301,7 @@
|
||||||
if(!count($xml_obj->module)) return; ///< xml 내용중에 module 태그가 없다면 오류;;
|
if(!count($xml_obj->module)) return; ///< xml 내용중에 module 태그가 없다면 오류;;
|
||||||
|
|
||||||
$grants = $xml_obj->module->grants->grant; ///< 권한 정보 (없는 경우도 있음)
|
$grants = $xml_obj->module->grants->grant; ///< 권한 정보 (없는 경우도 있음)
|
||||||
|
$permissions = $xml_obj->module->permissions->permission; ///< 권한 대행 (없는 경우도 있음)
|
||||||
$actions = $xml_obj->module->actions->action; ///< action list (필수)
|
$actions = $xml_obj->module->actions->action; ///< action list (필수)
|
||||||
|
|
||||||
$default_index = $admin_index = '';
|
$default_index = $admin_index = '';
|
||||||
|
|
@ -323,6 +324,21 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 권한 허용 정리
|
||||||
|
if($permissions) {
|
||||||
|
if(is_array($permissions)) $permission_list = $permissions;
|
||||||
|
else $permission_list[] = $permissions;
|
||||||
|
|
||||||
|
foreach($permission_list as $permission) {
|
||||||
|
$action = $permission->attrs->action;
|
||||||
|
$target = $permission->attrs->target;
|
||||||
|
|
||||||
|
$info->permission->{$action} = $target;
|
||||||
|
|
||||||
|
$buff .= sprintf('$info->permission->%s = \'%s\';', $action, $target);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// actions 정리
|
// actions 정리
|
||||||
if($actions) {
|
if($actions) {
|
||||||
if(is_array($actions)) $action_list = $actions;
|
if(is_array($actions)) $action_list = $actions;
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@
|
||||||
<column name="layout_srl" var="layout_srl" />
|
<column name="layout_srl" var="layout_srl" />
|
||||||
<column name="description" var="description" />
|
<column name="description" var="description" />
|
||||||
<column name="content" var="content" />
|
<column name="content" var="content" />
|
||||||
|
<column name="grants" var="grants" />
|
||||||
<column name="module" var="module" notnull="notnull" maxlength="80"/>
|
<column name="module" var="module" notnull="notnull" maxlength="80"/>
|
||||||
<column name="is_default" var="is_default" default="N" notnull="notnull" />
|
<column name="is_default" var="is_default" default="N" notnull="notnull" />
|
||||||
<column name="menu_srl" var="menu_srl" filter="number" />
|
<column name="menu_srl" var="menu_srl" filter="number" />
|
||||||
|
|
|
||||||
87
modules/module/tpl/copy_module.html
Normal file
87
modules/module/tpl/copy_module.html
Normal file
|
|
@ -0,0 +1,87 @@
|
||||||
|
<!--%import("js/module_admin.js")-->
|
||||||
|
<!--%import("filter/copy_module.xml")-->
|
||||||
|
|
||||||
|
<div id="popHeadder">
|
||||||
|
<h1>{$lang->module_copy}</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<form action="./" method="post" onsubmit="return procFilter(this, copy_module)" >
|
||||||
|
<input type="hidden" name="module_srl" value="{$module_info->module_srl}" />
|
||||||
|
|
||||||
|
<div id="popBody">
|
||||||
|
|
||||||
|
<table cellspacing="0" class="tableType5">
|
||||||
|
<col width="140" />
|
||||||
|
<col />
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{$lang->module}</th>
|
||||||
|
<td>{$module_info->module}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{$lang->mid}</th>
|
||||||
|
<td>{$module_info->mid}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{$lang->browser_title}</th>
|
||||||
|
<td>{$module_info->browser_title}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
<table cellspacing="0" class="tableType3 gap1">
|
||||||
|
<col width="50%" />
|
||||||
|
<col width="50%" />
|
||||||
|
<tr>
|
||||||
|
<th scope="col">{$lang->mid}</th>
|
||||||
|
<th scope="col">{$lang->browser_title}</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><input type="text" name="mid_1" class="inputTypeText w200" /></td>
|
||||||
|
<td><input type="text" name="browser_title_1" class="inputTypeText w200" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><input type="text" name="mid_2" class="inputTypeText w200" /></td>
|
||||||
|
<td><input type="text" name="browser_title_2" class="inputTypeText w200" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><input type="text" name="mid_3" class="inputTypeText w200" /></td>
|
||||||
|
<td><input type="text" name="browser_title_3" class="inputTypeText w200" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><input type="text" name="mid_4" class="inputTypeText w200" /></td>
|
||||||
|
<td><input type="text" name="browser_title_4" class="inputTypeText w200" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><input type="text" name="mid_5" class="inputTypeText w200" /></td>
|
||||||
|
<td><input type="text" name="browser_title_5" class="inputTypeText w200" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><input type="text" name="mid_6" class="inputTypeText w200" /></td>
|
||||||
|
<td><input type="text" name="browser_title_6" class="inputTypeText w200" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><input type="text" name="mid_7" class="inputTypeText w200" /></td>
|
||||||
|
<td><input type="text" name="browser_title_7" class="inputTypeText w200" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><input type="text" name="mid_8" class="inputTypeText w200" /></td>
|
||||||
|
<td><input type="text" name="browser_title_8" class="inputTypeText w200" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><input type="text" name="mid_9" class="inputTypeText w200" /></td>
|
||||||
|
<td><input type="text" name="browser_title_9" class="inputTypeText w200" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><input type="text" name="mid_10" class="inputTypeText w200" /></td>
|
||||||
|
<td><input type="text" name="browser_title_10" class="inputTypeText w200" /></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="popFooter" class="tCenter gap1">
|
||||||
|
<span class="button"><input type="submit" value="{$lang->cmd_save}" /></span>
|
||||||
|
<span class="button"><input type="button" value="{$lang->cmd_close}" onclick="window.close(); return false;"/></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</form>
|
||||||
9
modules/module/tpl/filter/copy_module.xml
Normal file
9
modules/module/tpl/filter/copy_module.xml
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
<filter name="copy_module" module="module" act="procModuleAdminCopyModule">
|
||||||
|
<form>
|
||||||
|
<node target="module_srl" required="true" />
|
||||||
|
</form>
|
||||||
|
<response callback_func="completeCopyModule">
|
||||||
|
<tag name="error" />
|
||||||
|
<tag name="message" />
|
||||||
|
</response>
|
||||||
|
</filter>
|
||||||
|
|
@ -50,3 +50,9 @@ function doUpdateModule(module) {
|
||||||
params['module_name'] = module;
|
params['module_name'] = module;
|
||||||
exec_xml('install','procInstallAdminUpdate',params, completeInstallModule);
|
exec_xml('install','procInstallAdminUpdate',params, completeInstallModule);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 모듈 복사후 */
|
||||||
|
function completeCopyModule() {
|
||||||
|
if(typeof(opener)!='undefined') opener.location.href = opener.location.href;
|
||||||
|
window.close();
|
||||||
|
}
|
||||||
|
|
|
||||||
20
modules/opage/conf/info.xml
Normal file
20
modules/opage/conf/info.xml
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<module version="0.1">
|
||||||
|
<title xml:lang="ko">외부 페이지</title>
|
||||||
|
<title xml:lang="zh-CN">外页面</title>
|
||||||
|
<title xml:lang="jp">外でページ</title>
|
||||||
|
<title xml:lang="en">Outside Page</title>
|
||||||
|
<title xml:lang="es">Afuera Página</title>
|
||||||
|
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 9. 17">
|
||||||
|
<name xml:lang="ko">제로</name>
|
||||||
|
<name xml:lang="zh-CN">zero</name>
|
||||||
|
<name xml:lang="jp">Zero</name>
|
||||||
|
<name xml:lang="en">zero</name>
|
||||||
|
<name xml:lang="es">zero</name>
|
||||||
|
<description xml:lang="ko">외부페이지를 제로보드XE내부로 삽입시키는 모듈</description>
|
||||||
|
<description xml:lang="zh-CN">외부페이지를 제로보드XE내부로 삽입시키는 모듈</description>
|
||||||
|
<description xml:lang="jp">외부페이지를 제로보드XE내부로 삽입시키는 모듈</description>
|
||||||
|
<description xml:lang="en">외부페이지를 제로보드XE내부로 삽입시키는 모듈</description>
|
||||||
|
<description xml:lang="es">외부페이지를 제로보드XE내부로 삽입시키는 모듈</description>
|
||||||
|
</author>
|
||||||
|
</module>
|
||||||
25
modules/opage/conf/module.xml
Normal file
25
modules/opage/conf/module.xml
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<module>
|
||||||
|
<grants>
|
||||||
|
<grant name="view" default="guest">
|
||||||
|
<title xml:lang="ko">열람</title>
|
||||||
|
<title xml:lang="zh-CN">浏览</title>
|
||||||
|
<title xml:lang="jp">閲覧</title>
|
||||||
|
<title xml:lang="en">view</title>
|
||||||
|
</grant>
|
||||||
|
</grants>
|
||||||
|
<actions>
|
||||||
|
<action name="dispOpageIndex" type="view" index="true" />
|
||||||
|
<action name="dispOpageAdminContent" type="view" admin_index="true" standalone="true" />
|
||||||
|
<action name="dispOpageAdminModuleConfig" type="view" standalone="true" />
|
||||||
|
<action name="dispOpageAdminInfo" type="view" standalone="true" />
|
||||||
|
<action name="dispOpageAdminInsert" type="view" standalone="true" />
|
||||||
|
<action name="dispOpageAdminDelete" type="view" standalone="true" />
|
||||||
|
<action name="dispOpageAdminContentModify" type="view" standalone="true" />
|
||||||
|
|
||||||
|
<action name="procOpageAdminRemoveWidgetCache" type="controller" standalone="true" />
|
||||||
|
<action name="procOpageAdminInsert" type="controller" standalone="true" />
|
||||||
|
<action name="procOpageAdminDelete" type="controller" standalone="true" />
|
||||||
|
<action name="procOpageAdminInsertConfig" type="controller" standalone="true" />
|
||||||
|
</actions>
|
||||||
|
</module>
|
||||||
15
modules/opage/lang/ko.lang.php
Normal file
15
modules/opage/lang/ko.lang.php
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @file ko.lang.php
|
||||||
|
* @author zero (zero@nzeo.com)
|
||||||
|
* @brief 외부 페이지(opage) 모듈의 기본 언어팩
|
||||||
|
**/
|
||||||
|
|
||||||
|
$lang->opage = "외부 페이지";
|
||||||
|
$lang->opage_path = "외부 문서 위치";
|
||||||
|
$lang->opage_caching_interval = "캐싱 시간 설정";
|
||||||
|
|
||||||
|
$lang->about_opage = "제로보드XE가 아닌 외부 html 또는 php파일을 제로보드XE에서 사용할 수 있도록 하는 모듈입니다.<br />절대경로, 상대경로를 이용할 수 있으며 http:// 로 시작할 경우 서버 외부의 페이지도 표시할 수 있습니다";
|
||||||
|
$lang->about_opage_path= "외부문서의 위치를 입력해주세요.<br />/path1/path2/sample.php 와 같이 절대경로나 ../path2/sample.php와 같은 상대경로 모두 사용가능합니다.<br />http://url/sample.php 와 같이 사용하면 결과를 받아다가 출력을 하게 됩니다.<br />현재 제로보드XE가 설치된 절대경로는 다음과 같습니다.<br />";
|
||||||
|
$lang->about_opage_caching_interval = "단위는 분이며 정해진 시간동안은 임시 저장한 데이터를 출력하도록 합니다.<br />다른 서버의 정보를 출력하거나 데이터 출력시 많은 자원이 필요하면 원하시는 분 단위로 캐싱하시는 것을 추천해드립니다.<br />0 으로 하시면 캐싱을 하지 않습니다";
|
||||||
|
?>
|
||||||
108
modules/opage/opage.admin.controller.php
Normal file
108
modules/opage/opage.admin.controller.php
Normal file
|
|
@ -0,0 +1,108 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @class opageAdminController
|
||||||
|
* @author zero (zero@nzeo.com)
|
||||||
|
* @brief opage 모듈의 admin controller class
|
||||||
|
**/
|
||||||
|
|
||||||
|
class opageAdminController extends opage {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 초기화
|
||||||
|
**/
|
||||||
|
function init() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 외부페이지 추가
|
||||||
|
**/
|
||||||
|
function procOpageAdminInsert() {
|
||||||
|
// module 모듈의 controller 객체 생성
|
||||||
|
$oModuleController = &getController('module');
|
||||||
|
|
||||||
|
// 기본 모듈 정보로 등록된 변수 구함
|
||||||
|
$module_args = Context::gets('module_srl','module_category_srl','browser_title','is_default','layout_srl');
|
||||||
|
$module_args->module = 'opage';
|
||||||
|
$module_args->mid = Context::get('opage_name');
|
||||||
|
if($module_args->is_default!='Y') $module_args->is_default = 'N';
|
||||||
|
|
||||||
|
// 외부 문서 위치, 캐싱 시간은 extra_vars에 저장
|
||||||
|
$config_args = Context::gets('path','caching_interval');
|
||||||
|
$module_args->extra_vars = serialize($config_args);
|
||||||
|
|
||||||
|
// module_srl이 넘어오면 원 모듈이 있는지 확인
|
||||||
|
if($module_args->module_srl) {
|
||||||
|
$oModuleModel = &getModel('module');
|
||||||
|
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_args->module_srl);
|
||||||
|
}
|
||||||
|
|
||||||
|
// is_default=='Y' 이면 기본 모듈을 제거
|
||||||
|
if($module_args->is_default=='Y') $oModuleController->clearDefaultModule();
|
||||||
|
|
||||||
|
// module_srl의 값에 따라 insert/update
|
||||||
|
if($module_info->module_srl != $module_args->module_srl) {
|
||||||
|
$output = $oModuleController->insertModule($module_args);
|
||||||
|
$msg_code = 'success_registed';
|
||||||
|
$module_info->module_srl = $output->get('module_srl');
|
||||||
|
} else {
|
||||||
|
$output = $oModuleController->updateModule($module_args);
|
||||||
|
$msg_code = 'success_updated';
|
||||||
|
}
|
||||||
|
|
||||||
|
// 등록 실패시 에러 반환
|
||||||
|
if(!$output->toBool()) return $output;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 권한 저장
|
||||||
|
**/
|
||||||
|
// 현 모듈의 권한 목록을 가져옴
|
||||||
|
$grant_list = $this->xml_info->grant;
|
||||||
|
|
||||||
|
if(count($grant_list)) {
|
||||||
|
foreach($grant_list as $key => $val) {
|
||||||
|
$group_srls = Context::get($key);
|
||||||
|
if($group_srls) $arr_grant[$key] = explode('|@|',$group_srls);
|
||||||
|
}
|
||||||
|
$grants = serialize($arr_grant);
|
||||||
|
}
|
||||||
|
|
||||||
|
$oModuleController = &getController('module');
|
||||||
|
$oModuleController->updateModuleGrant($module_info->module_srl, $grants);
|
||||||
|
|
||||||
|
// 캐시 파일 삭제
|
||||||
|
$cache_file = sprintf("./files/cache/opage/%d.cache", $module_info->module_srl);
|
||||||
|
if(file_exists($cache_file)) @unlink($cache_file);
|
||||||
|
|
||||||
|
// 등록 성공후 return될 메세지 정리
|
||||||
|
$this->add("module_srl", $module_args->module_srl);
|
||||||
|
$this->add("opage", Context::get('opage'));
|
||||||
|
$this->setMessage($msg_code);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 외부페이지 삭제
|
||||||
|
**/
|
||||||
|
function procOpageAdminDelete() {
|
||||||
|
$module_srl = Context::get('module_srl');
|
||||||
|
|
||||||
|
// 원본을 구해온다
|
||||||
|
$oModuleController = &getController('module');
|
||||||
|
$output = $oModuleController->deleteModule($module_srl);
|
||||||
|
if(!$output->toBool()) return $output;
|
||||||
|
|
||||||
|
$this->add('module','opage');
|
||||||
|
$this->add('opage',Context::get('opage'));
|
||||||
|
$this->setMessage('success_deleted');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 외부페이지 기본 정보의 추가
|
||||||
|
**/
|
||||||
|
function procOpageAdminInsertConfig() {
|
||||||
|
// 기본 정보를 받음
|
||||||
|
$args = Context::gets('test');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
||||||
153
modules/opage/opage.admin.view.php
Normal file
153
modules/opage/opage.admin.view.php
Normal file
|
|
@ -0,0 +1,153 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @class opageAdminView
|
||||||
|
* @author zero (zero@nzeo.com)
|
||||||
|
* @brief opage 모듈의 admin view 클래스
|
||||||
|
**/
|
||||||
|
|
||||||
|
class opageAdminView extends opage {
|
||||||
|
|
||||||
|
var $module_srl = 0;
|
||||||
|
var $list_count = 20;
|
||||||
|
var $page_count = 10;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 초기화
|
||||||
|
**/
|
||||||
|
function init() {
|
||||||
|
// module_srl이 있으면 미리 체크하여 존재하는 모듈이면 module_info 세팅
|
||||||
|
$module_srl = Context::get('module_srl');
|
||||||
|
|
||||||
|
// module model 객체 생성
|
||||||
|
$oModuleModel = &getModel('module');
|
||||||
|
|
||||||
|
// 모듈 카테고리 목록을 구함
|
||||||
|
$module_category = $oModuleModel->getModuleCategories();
|
||||||
|
Context::set('module_category', $module_category);
|
||||||
|
|
||||||
|
// 템플릿 경로 구함 (opage의 경우 tpl에 관리자용 템플릿 모아놓음)
|
||||||
|
$this->setTemplatePath($this->module_path.'tpl');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 외부페이지 관리 목록 보여줌
|
||||||
|
**/
|
||||||
|
function dispOpageAdminContent() {
|
||||||
|
$args->sort_index = "module_srl";
|
||||||
|
$args->page = Context::get('page');
|
||||||
|
$args->list_count = 40;
|
||||||
|
$args->page_count = 10;
|
||||||
|
$args->s_module_category_srl = Context::get('module_category_srl');
|
||||||
|
$output = executeQuery('opage.getOpageList', $args);
|
||||||
|
|
||||||
|
// 템플릿에 쓰기 위해서 context::set
|
||||||
|
Context::set('total_count', $output->total_count);
|
||||||
|
Context::set('total_page', $output->total_page);
|
||||||
|
Context::set('page', $output->page);
|
||||||
|
Context::set('opage_list', $output->data);
|
||||||
|
Context::set('page_navigation', $output->page_navigation);
|
||||||
|
|
||||||
|
// 템플릿 파일 지정
|
||||||
|
$this->setTemplateFile('index');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 선택된 외부페이지의 정보 출력
|
||||||
|
**/
|
||||||
|
function dispOpageAdminInfo() {
|
||||||
|
// GET parameter에서 module_srl을 가져옴
|
||||||
|
$module_srl = Context::get('module_srl');
|
||||||
|
|
||||||
|
// module model 객체 생성
|
||||||
|
if($module_srl) {
|
||||||
|
$oOpageModel = &getModel('opage');
|
||||||
|
$module_info = $oOpageModel->getOpage($module_srl);
|
||||||
|
if(!$module_info) {
|
||||||
|
unset($module_info);
|
||||||
|
unset($module_srl);
|
||||||
|
} else {
|
||||||
|
Context::set('module_info',$module_info);
|
||||||
|
}
|
||||||
|
|
||||||
|
// module_srl 값이 없다면 그냥 index 외부페이지를 보여줌
|
||||||
|
} else {
|
||||||
|
return $this->dispOpageAdminContent();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 레이아웃이 정해져 있다면 레이아웃 정보를 추가해줌(layout_title, layout)
|
||||||
|
if($module_info->layout_srl) {
|
||||||
|
$oLayoutModel = &getModel('layout');
|
||||||
|
$layout_info = $oLayoutModel->getLayout($module_info->layout_srl);
|
||||||
|
$module_info->layout = $layout_info->layout;
|
||||||
|
$module_info->layout_title = $layout_info->layout_title;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 레이아웃 목록을 구해옴
|
||||||
|
$oLayoutMode = &getModel('layout');
|
||||||
|
$layout_list = $oLayoutMode->getLayoutList();
|
||||||
|
Context::set('layout_list', $layout_list);
|
||||||
|
|
||||||
|
|
||||||
|
// 템플릿 파일 지정
|
||||||
|
$this->setTemplateFile('opage_info');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 외부페이지 추가 폼 출력
|
||||||
|
**/
|
||||||
|
function dispOpageAdminInsert() {
|
||||||
|
// 권한 그룹의 목록을 가져온다
|
||||||
|
$oMemberModel = &getModel('member');
|
||||||
|
$group_list = $oMemberModel->getGroups();
|
||||||
|
Context::set('group_list', $group_list);
|
||||||
|
|
||||||
|
// module.xml에서 권한 관련 목록을 구해옴
|
||||||
|
$grant_list = $this->xml_info->grant;
|
||||||
|
Context::set('grant_list', $grant_list);
|
||||||
|
|
||||||
|
// GET parameter에서 module_srl을 가져옴
|
||||||
|
$module_srl = Context::get('module_srl');
|
||||||
|
|
||||||
|
// module_srl이 있으면 해당 모듈의 정보를 구해서 세팅
|
||||||
|
if($module_srl) {
|
||||||
|
$oModuleModel = &getModel('module');
|
||||||
|
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
|
||||||
|
if($module_info->module_srl == $module_srl) Context::set('module_info',$module_info);
|
||||||
|
else {
|
||||||
|
unset($module_info);
|
||||||
|
unset($module_srl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// module_srl이 없으면 sequence값으로 미리 구해 놓음
|
||||||
|
if(!$module_srl) $module_srl = getNextSequence();
|
||||||
|
Context::set('module_srl',$module_srl);
|
||||||
|
|
||||||
|
// 레이아웃 목록을 구해옴
|
||||||
|
$oLayoutMode = &getModel('layout');
|
||||||
|
$layout_list = $oLayoutMode->getLayoutList();
|
||||||
|
Context::set('layout_list', $layout_list);
|
||||||
|
|
||||||
|
|
||||||
|
// 템플릿 파일 지정
|
||||||
|
$this->setTemplateFile('opage_insert');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 외부페이지 삭제 화면 출력
|
||||||
|
**/
|
||||||
|
function dispOpageAdminDelete() {
|
||||||
|
$module_srl = Context::get('module_srl');
|
||||||
|
if(!$module_srl) return $this->dispContent();
|
||||||
|
|
||||||
|
$oModuleModel = &getModel('module');
|
||||||
|
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
|
||||||
|
Context::set('module_info',$module_info);
|
||||||
|
|
||||||
|
// 템플릿 파일 지정
|
||||||
|
$this->setTemplateFile('opage_delete');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
||||||
70
modules/opage/opage.class.php
Normal file
70
modules/opage/opage.class.php
Normal file
|
|
@ -0,0 +1,70 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @class opage
|
||||||
|
* @author zero (zero@nzeo.com)
|
||||||
|
* @brief opage 모듈의 high class
|
||||||
|
**/
|
||||||
|
|
||||||
|
class opage extends ModuleObject {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 설치시 추가 작업이 필요할시 구현
|
||||||
|
**/
|
||||||
|
function moduleInstall() {
|
||||||
|
// action forward에 등록 (관리자 모드에서 사용하기 위함)
|
||||||
|
$oModuleController = &getController('module');
|
||||||
|
$oModuleController->insertActionForward('opage', 'view', 'dispOpageIndex');
|
||||||
|
$oModuleController->insertActionForward('opage', 'view', 'dispOpageAdminContent');
|
||||||
|
$oModuleController->insertActionForward('opage', 'view', 'dispOpageAdminInsert');
|
||||||
|
$oModuleController->insertActionForward('opage', 'view', 'dispOpageAdminDelete');
|
||||||
|
|
||||||
|
// opage 에서 사용할 cache디렉토리 생성
|
||||||
|
FileHandler::makeDir('./files/cache/opage');
|
||||||
|
|
||||||
|
return new Object();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 설치가 이상이 없는지 체크하는 method
|
||||||
|
**/
|
||||||
|
function checkUpdate() {
|
||||||
|
$oModuleModel = &getModel('module');
|
||||||
|
|
||||||
|
// 외부페이지 모듈을 업그레이드로 설치하였을 경우 필요한 action 값의 여부 체크 (2007. 09. 17)
|
||||||
|
if(!$oModuleModel->getActionForward('dispOpageIndex')) return true;
|
||||||
|
if(!$oModuleModel->getActionForward('dispOpageAdminContent')) return true;
|
||||||
|
if(!$oModuleModel->getActionForward('dispOpageAdminInsert')) return true;
|
||||||
|
if(!$oModuleModel->getActionForward('dispOpageAdminDelete')) return true;
|
||||||
|
|
||||||
|
// cache 디렉토리가 없으면 바로 디렉토리 생성
|
||||||
|
if(!is_dir('./files/cache/opage')) FileHandler::makeDir('./files/cache/opage');
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 업데이트 실행
|
||||||
|
**/
|
||||||
|
function moduleUpdate() {
|
||||||
|
$oModuleModel = &getModel('module');
|
||||||
|
$oModuleController = &getController('module');
|
||||||
|
|
||||||
|
// 외부페이지 모듈을 업그레이드로 설치하였을 경우 필요한 action 값 등록
|
||||||
|
if(!$oModuleModel->getActionForward('dispOpageIndex'))
|
||||||
|
$oModuleController->insertActionForward('opage', 'view', 'dispOpageIndex');
|
||||||
|
|
||||||
|
if(!$oModuleModel->getActionForward('dispOpageAdminContent'))
|
||||||
|
$oModuleController->insertActionForward('opage', 'view', 'dispOpageAdminContent');
|
||||||
|
|
||||||
|
if(!$oModuleModel->getActionForward('dispOpageAdminInsert'))
|
||||||
|
$oModuleController->insertActionForward('opage', 'view', 'dispOpageAdminInsert');
|
||||||
|
|
||||||
|
if(!$oModuleModel->getActionForward('dispOpageAdminDelete'))
|
||||||
|
$oModuleController->insertActionForward('opage', 'view', 'dispOpageAdminDelete');
|
||||||
|
|
||||||
|
|
||||||
|
return new Object(0, 'success_updated');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
||||||
119
modules/opage/opage.controller.php
Normal file
119
modules/opage/opage.controller.php
Normal file
|
|
@ -0,0 +1,119 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @class documentController
|
||||||
|
* @author zero (zero@nzeo.com)
|
||||||
|
* @brief document 모듈의 controller 클래스
|
||||||
|
**/
|
||||||
|
|
||||||
|
class opageController extends opage {
|
||||||
|
|
||||||
|
var $target_path = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 초기화
|
||||||
|
**/
|
||||||
|
function init() { }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 타이틀 추출
|
||||||
|
**/
|
||||||
|
function getTitle($content) {
|
||||||
|
preg_match('!<title([^>]*)>(.*?)<\/title>!is', $content, $buff);
|
||||||
|
return trim($buff[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief header script 추출
|
||||||
|
**/
|
||||||
|
function getHeadScript($content) {
|
||||||
|
// title 태그 제거
|
||||||
|
$content = preg_replace('!<title([^>]*)>(.*?)<\/title>!is','', $content);
|
||||||
|
|
||||||
|
// meta 태그 제거
|
||||||
|
$content = preg_replace('!<(\/){0,1}meta([^>]*)>!is','', $content);
|
||||||
|
|
||||||
|
// <link, <style, <script 등의 정보를 추출
|
||||||
|
preg_match_all('!<link([^>]*)>!is', $content, $link_buff);
|
||||||
|
for($i=0;$i<count($link_buff[0]);$i++) {
|
||||||
|
$tmp_str = trim($link_buff[0][$i]);
|
||||||
|
if(!$tmp_str) continue;
|
||||||
|
$header_script .= $tmp_str."\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
preg_match_all('!<(style|script)(.*?)<\/(style|script)>!is', $content, $script_buff);
|
||||||
|
for($i=0;$i<count($script_buff[0]);$i++) {
|
||||||
|
$tmp_str = trim($script_buff[0][$i]);
|
||||||
|
if(!$tmp_str) continue;
|
||||||
|
$header_script .= $tmp_str."\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
return $header_script;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief body의 내용을 추출
|
||||||
|
**/
|
||||||
|
function getBodyScript($content) {
|
||||||
|
// 내용 추출
|
||||||
|
preg_match('!<body([^>]*)>(.*?)<\/body>!is', $content, $body_buff);
|
||||||
|
$body_script = $body_buff[2];
|
||||||
|
|
||||||
|
// link, style, script등 제거
|
||||||
|
$body_script = preg_replace('!<link([^>]*)>!is', '', $body_script);
|
||||||
|
$body_script = preg_replace('!<(style|script)(.*?)<\/(style|script)>!is', '', $body_script);
|
||||||
|
return $body_script;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 내용에 포함된 src, href의 값을 변경
|
||||||
|
**/
|
||||||
|
function replaceSrc($content, $path) {
|
||||||
|
if(substr($path,-1)!='/') $path.='/';
|
||||||
|
$this->target_path = $path;
|
||||||
|
|
||||||
|
// element의 속성중 value에 " 로 안 묶여 있는 것을 검사하여 묶어줌
|
||||||
|
$content = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', array($this, '_fixQuotation'), $content);
|
||||||
|
|
||||||
|
// img, input, a, link등의 href, src값 변경
|
||||||
|
$content = preg_replace_callback('!(script|link|a|img|input)([^>]*)(href|src)=[\'"](.*?)[\'"]!is', array($this, '_replaceSrc'), $content);
|
||||||
|
|
||||||
|
// background:url의 값 변경
|
||||||
|
$content = preg_replace_callback('!url\((.*?)\)!is', array($this, '_replaceBackgroundUrl'), $content);
|
||||||
|
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _replaceSrc($matches) {
|
||||||
|
$href = $matches[4];
|
||||||
|
if(eregi("^http", $href) || $href == '#' || eregi("javascript:",$href)) return $matches[0];
|
||||||
|
|
||||||
|
if(substr($href,0,1)=='/') $href = substr($href,1);
|
||||||
|
$href = $this->target_path.$href;
|
||||||
|
|
||||||
|
$buff = sprintf('%s%s%s="%s"', $matches[1], $matches[2], $matches[3], $href);
|
||||||
|
return $buff;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _replaceBackgroundUrl($matches) {
|
||||||
|
$href = $matches[1];
|
||||||
|
if(eregi("^http",$href) || $href == '#' || eregi("javascript:",$href)) return $matches[0];
|
||||||
|
|
||||||
|
if(substr($href,0,1)=='/') $href = substr($href,1);
|
||||||
|
$href = $this->target_path.$href;
|
||||||
|
|
||||||
|
$buff = sprintf('url(%s)', $href);
|
||||||
|
return $buff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 태그의 속성에 " 를 추가
|
||||||
|
**/
|
||||||
|
function _fixQuotation($matches) {
|
||||||
|
$key = $matches[1];
|
||||||
|
$val = $matches[2];
|
||||||
|
if(substr($val,0,1)!='"') $val = '"'.$val.'"';
|
||||||
|
return sprintf('%s=%s', $key, $val);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
||||||
33
modules/opage/opage.model.php
Normal file
33
modules/opage/opage.model.php
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @class opageModel
|
||||||
|
* @author zero (zero@nzeo.com)
|
||||||
|
* @brief opage 모듈의 model 클래스
|
||||||
|
**/
|
||||||
|
|
||||||
|
class opageModel extends opage {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 초기화
|
||||||
|
**/
|
||||||
|
function init() { }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 특정 외부 페이지의 정보를 return
|
||||||
|
* 외부 페이지의 경우 기본 모듈의 정보와 설정정보를 함께 다루기 때문에 별도의 model method를 이용하게 한다
|
||||||
|
**/
|
||||||
|
function getOpage($module_srl) {
|
||||||
|
$oModuleModel = &getModel('module');
|
||||||
|
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
|
||||||
|
if($module_info->module_srl != $module_srl) return;
|
||||||
|
|
||||||
|
$extra_vars = unserialize($module_info->extra_vars);
|
||||||
|
if($extra_vars) {
|
||||||
|
foreach($extra_vars as $key => $val) $module_info->{$key} = $val;
|
||||||
|
unset($module_info->extra_vars);
|
||||||
|
}
|
||||||
|
return $module_info;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
||||||
92
modules/opage/opage.view.php
Normal file
92
modules/opage/opage.view.php
Normal file
|
|
@ -0,0 +1,92 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @class opageView
|
||||||
|
* @author zero (zero@nzeo.com)
|
||||||
|
* @brief opage 모듈의 view 클래스
|
||||||
|
**/
|
||||||
|
|
||||||
|
class opageView extends opage {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 초기화
|
||||||
|
**/
|
||||||
|
function init() {
|
||||||
|
// 템플릿 경로 구함 (opage의 경우 tpl에 관리자용 템플릿 모아놓음)
|
||||||
|
$this->setTemplatePath($this->module_path.'tpl');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 일반 요청시 출력
|
||||||
|
**/
|
||||||
|
function dispOpageIndex() {
|
||||||
|
// 권한 체크
|
||||||
|
if(!$this->grant->view) return $this->stop('msg_not_permitted');
|
||||||
|
|
||||||
|
// opage controller 생성
|
||||||
|
$oOpageController = &getController('opage');
|
||||||
|
|
||||||
|
// 외부 페이지 모듈의 정보를 구함
|
||||||
|
$oOpageModel = &getModel('opage');
|
||||||
|
$module_info = $oOpageModel->getOpage($this->module_srl);
|
||||||
|
Context::set('module_info', $module_info);
|
||||||
|
|
||||||
|
// 외부 페이지에서 명시된 외부 페이지 경로/ 캐싱 간격을 를 구함
|
||||||
|
$path = $module_info->path;
|
||||||
|
$caching_interval = $module_info->caching_interval;
|
||||||
|
|
||||||
|
// 캐시 파일 지정
|
||||||
|
$cache_file = sprintf("./files/cache/opage/%d.cache", $module_info->module_srl);
|
||||||
|
|
||||||
|
// 캐시 검사
|
||||||
|
if($caching_interval > 0 && file_exists($cache_file) && filemtime($cache_file) + $caching_interval*60 > time()) {
|
||||||
|
|
||||||
|
$content = FileHandler::readFile($cache_file);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// 경로에 http://가 있는 경우와 없는 경우를 비교
|
||||||
|
if(eregi("^http:\/\/",$path)) {
|
||||||
|
FileHandler::getRemoteFile($path, $cache_file);
|
||||||
|
$content = FileHandler::readFile($cache_file);
|
||||||
|
|
||||||
|
// 서버 내부에 있는 경우
|
||||||
|
} elseif(file_exists($path)) {
|
||||||
|
ob_start();
|
||||||
|
@include($path);
|
||||||
|
$content = ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
FileHandler::writeFile($cache_file, $content);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 외부 서버의 페이지 일 경우 이미지, css, javascript등의 url을 변경
|
||||||
|
if(eregi("^http:\/\/",$path)) {
|
||||||
|
$content = $oOpageController->replaceSrc($content, $path);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 해당 문서를 utf-8로 변경
|
||||||
|
$buff->content = $content;
|
||||||
|
$buff = Context::convertEncoding($buff);
|
||||||
|
$content = $buff->content;
|
||||||
|
|
||||||
|
// title 추출
|
||||||
|
$title = $oOpageController->getTitle($content);
|
||||||
|
if($title) Context::setBrowserTitle($title);
|
||||||
|
|
||||||
|
// header script 추출
|
||||||
|
$head_script = $oOpageController->getHeadScript($content);
|
||||||
|
if($head_script) Context::addHtmlHeader($head_script);
|
||||||
|
|
||||||
|
// body 내용 추출
|
||||||
|
$body_script = $oOpageController->getBodyScript($content);
|
||||||
|
if(!$body_script) $body_script = $content;
|
||||||
|
|
||||||
|
Context::set('opage_content', $body_script);
|
||||||
|
|
||||||
|
// 결과 출력 템플릿 지정
|
||||||
|
$this->setTemplateFile('content');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
||||||
24
modules/opage/queries/getOpageList.xml
Normal file
24
modules/opage/queries/getOpageList.xml
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
<query id="getOpageList" action="select">
|
||||||
|
<tables>
|
||||||
|
<table name="modules" />
|
||||||
|
</tables>
|
||||||
|
<columns>
|
||||||
|
<column name="*" />
|
||||||
|
</columns>
|
||||||
|
<conditions>
|
||||||
|
<condition operation="equal" column="module" default="opage" />
|
||||||
|
<group pipe="and">
|
||||||
|
<condition operation="like" column="mid" var="s_mid" pipe="or" />
|
||||||
|
<condition operation="like" column="title" var="s_title" pipe="or" />
|
||||||
|
<condition operation="like" column="comment" var="s_comment" pipe="or" />
|
||||||
|
<condition operation="equal" column="module" var="s_module" pipe="or" />
|
||||||
|
<condition operation="equal" column="module_category_srl" var="s_module_category_srl" pipe="or" />
|
||||||
|
</group>
|
||||||
|
</conditions>
|
||||||
|
<navigation>
|
||||||
|
<index var="sort_index" default="module_srl" order="desc" />
|
||||||
|
<list_count var="list_count" default="20" />
|
||||||
|
<page_count var="page_count" default="10" />
|
||||||
|
<page var="page" default="1" />
|
||||||
|
</navigation>
|
||||||
|
</query>
|
||||||
8
modules/opage/tpl/content.html
Normal file
8
modules/opage/tpl/content.html
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
{$opage_content}
|
||||||
|
|
||||||
|
<!--@if($grant->is_admin)-->
|
||||||
|
<!--%import("./js/opage_admin.js")-->
|
||||||
|
<div class="tRight gap1 clear">
|
||||||
|
<a href="{getUrl('act','dispOpageAdminInsert','module_srl',$module_info->module_srl)}" class="button"><span>{$lang->cmd_setup}</span></a>
|
||||||
|
</div>
|
||||||
|
<!--@end-->
|
||||||
10
modules/opage/tpl/filter/delete_opage.xml
Normal file
10
modules/opage/tpl/filter/delete_opage.xml
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
<filter name="delete_opage" module="opage" act="procOpageAdminDelete">
|
||||||
|
<form>
|
||||||
|
<node target="module_srl" required="true" />
|
||||||
|
</form>
|
||||||
|
<response callback_func="completeDeleteOpage">
|
||||||
|
<tag name="error" />
|
||||||
|
<tag name="message" />
|
||||||
|
<tag name="opage" />
|
||||||
|
</response>
|
||||||
|
</filter>
|
||||||
24
modules/opage/tpl/filter/insert_opage.xml
Normal file
24
modules/opage/tpl/filter/insert_opage.xml
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
<filter name="insert_opage" module="opage" act="procOpageAdminInsert" confirm_msg_code="confirm_submit">
|
||||||
|
<form>
|
||||||
|
<node target="mid" required="true" filter="alpha_number" />
|
||||||
|
<node target="browser_title" required="true" maxlength="250" />
|
||||||
|
<node target="opage_path" required="true" maxlength="250" />
|
||||||
|
</form>
|
||||||
|
<parameter>
|
||||||
|
<param name="opage_name" target="mid" />
|
||||||
|
<param name="module_srl" target="module_srl" />
|
||||||
|
<param name="module_category_srl" target="module_category_srl" />
|
||||||
|
<param name="layout_srl" target="layout_srl" />
|
||||||
|
<param name="browser_title" target="browser_title" />
|
||||||
|
<param name="is_default" target="is_default" />
|
||||||
|
<param name="caching_interval" target="opage_caching_interval" />
|
||||||
|
<param name="path" target="opage_path" />
|
||||||
|
<param name="view" target="view" />
|
||||||
|
</parameter>
|
||||||
|
<response callback_func="completeInsertOpage">
|
||||||
|
<tag name="error" />
|
||||||
|
<tag name="message" />
|
||||||
|
<tag name="module_srl" />
|
||||||
|
<tag name="opage" />
|
||||||
|
</response>
|
||||||
|
</filter>
|
||||||
3
modules/opage/tpl/header.html
Normal file
3
modules/opage/tpl/header.html
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
<!--%import("js/blog_admin.js")-->
|
||||||
|
<!--%import("js/opage_admin.js")-->
|
||||||
|
<h3>{$lang->opage} <span class="gray">{$lang->cmd_management}</span></h3>
|
||||||
90
modules/opage/tpl/index.html
Normal file
90
modules/opage/tpl/index.html
Normal file
|
|
@ -0,0 +1,90 @@
|
||||||
|
<!--%import("js/opage_admin.js")-->
|
||||||
|
<!--#include("header.html")-->
|
||||||
|
|
||||||
|
<div class="infoText">{nl2br($lang->about_opage)}</div>
|
||||||
|
|
||||||
|
<!-- 정보 -->
|
||||||
|
<div class="tableSummaryType1">
|
||||||
|
Total <strong>{number_format($total_count)}</strong>, Opage <strong>{number_format($opage)}</strong>/{number_format($total_opage)}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 목록 -->
|
||||||
|
<table cellspacing="0" class="tableType1">
|
||||||
|
<col width="40" />
|
||||||
|
<col width="140" />
|
||||||
|
<col />
|
||||||
|
<col />
|
||||||
|
<col width="40" />
|
||||||
|
<col width="80" />
|
||||||
|
<col width="40" />
|
||||||
|
<col width="40" />
|
||||||
|
<col width="40" />
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">{$lang->no}</th>
|
||||||
|
<th scope="col">
|
||||||
|
<form action="./" method="get" onsubmit="return doChangeCategory(this);">
|
||||||
|
<input type="hidden" name="module" value="{$module}" />
|
||||||
|
<input type="hidden" name="act" value="{$act}" />
|
||||||
|
<select name="module_category_srl" class="w100">
|
||||||
|
<option value="">{$lang->module_category}</option>
|
||||||
|
<!--@foreach($module_category as $key => $val)-->
|
||||||
|
<option value="{$key}" <!--@if($module_category_srl==$key)-->selected="selected"<!--@end-->>{$val->title}</option>
|
||||||
|
<!--@end-->
|
||||||
|
<option value="">---------</option>
|
||||||
|
<option value="-1">{$lang->cmd_management}</option>
|
||||||
|
</select>
|
||||||
|
<span class="button"><input type="submit" name="go_button" id="go_button" value="GO" /></span>
|
||||||
|
</form>
|
||||||
|
</th>
|
||||||
|
<th scope="col">{$lang->mid}</th>
|
||||||
|
<th scope="col">{$lang->browser_title}</th>
|
||||||
|
<th scope="col">{$lang->is_default}</th>
|
||||||
|
<th scope="col">{$lang->regdate}</th>
|
||||||
|
<th scope="col">{$lang->cmd_view}</th>
|
||||||
|
<th scope="col">{$lang->cmd_copy}</th>
|
||||||
|
<th scope="col">{$lang->cmd_delete}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<!--@foreach($opage_list as $no => $val)-->
|
||||||
|
<tr>
|
||||||
|
<td class="tahoma">{$no}</td>
|
||||||
|
<td>
|
||||||
|
<!--@if(!$val->module_category_srl)-->
|
||||||
|
{$lang->not_exists}
|
||||||
|
<!--@else-->
|
||||||
|
{$module_category[$val->module_category_srl]->title}
|
||||||
|
<!--@end-->
|
||||||
|
</td>
|
||||||
|
<td><a href="{getUrl('act','dispOpageAdminInsert','module_srl',$val->module_srl)}" class="blue">{$val->mid}</a></td>
|
||||||
|
<td>{$val->browser_title}</td>
|
||||||
|
<td class="tahoma">{$val->is_default}</td>
|
||||||
|
<td class="tahoma">{zdate($val->regdate,"Y-m-d")}</td>
|
||||||
|
<td class="blue"><a href="{getUrl('','mid',$val->mid)}" onclick="window.open(this.href); return false;">{$lang->cmd_view}</a></td>
|
||||||
|
<td class="blue"><a href="./?module=module&act=dispModuleAdminCopyModule&module_srl={$val->module_srl}" onclick="popopen(this.href);return false;">{$lang->cmd_copy}</a></td>
|
||||||
|
<td class="red"><!--@if($val->is_default!='Y')--><a href="{getUrl('act','dispOpageAdminDelete','module_srl', $val->module_srl)}">{$lang->cmd_delete}</a><!--@end--></td>
|
||||||
|
</tr>
|
||||||
|
<!--@end-->
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<!-- 버튼 -->
|
||||||
|
<div class="fr gap1">
|
||||||
|
<a href="{getUrl('act','dispOpageAdminInsert','module_srl','')}" class="button"><span>{$lang->cmd_make}</span></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 페이지 네비게이션 -->
|
||||||
|
<div class="pageNavigation">
|
||||||
|
<a href="{getUrl('page','','module_srl','')}" class="goToFirst"><img src="../../admin/tpl/images/bottomGotoFirst.gif" alt="{$lang->first_page}" width="7" height="5" /></a>
|
||||||
|
<!--@while($page_no = $page_navigation->getNextPage())-->
|
||||||
|
<!--@if($page == $page_no)-->
|
||||||
|
<span class="current">{$page_no}</span>
|
||||||
|
<!--@else-->
|
||||||
|
<a href="{getUrl('page',$page_no,'module_srl','')}">{$page_no}</a>
|
||||||
|
<!--@end-->
|
||||||
|
<!--@end-->
|
||||||
|
<a href="{getUrl('page',$page_navigation->last_page,'module_srl','')}" class="goToLast"><img src="../../admin/tpl/images/bottomGotoLast.gif" alt="{$lang->last_page}" width="7" height="5" /></a>
|
||||||
|
</div>
|
||||||
75
modules/opage/tpl/js/opage_admin.js
Normal file
75
modules/opage/tpl/js/opage_admin.js
Normal file
|
|
@ -0,0 +1,75 @@
|
||||||
|
/**
|
||||||
|
* @file modules/opage/js/opage_admin.js
|
||||||
|
* @author zero (zero@nzeo.com)
|
||||||
|
* @brief opage모듈의 관리자용 javascript
|
||||||
|
**/
|
||||||
|
|
||||||
|
/* 모듈 생성 후 */
|
||||||
|
function completeInsertOpage(ret_obj) {
|
||||||
|
var error = ret_obj['error'];
|
||||||
|
var message = ret_obj['message'];
|
||||||
|
|
||||||
|
var opage = ret_obj['opage'];
|
||||||
|
var module_srl = ret_obj['module_srl'];
|
||||||
|
|
||||||
|
alert(message);
|
||||||
|
|
||||||
|
var url = '';
|
||||||
|
if(location.href.getQuery('module')=='admin') {
|
||||||
|
url = current_url.setQuery('module_srl',module_srl).setQuery('act','dispOpageAdminInsert');
|
||||||
|
if(opage) url = url.setQuery('opage',opage);
|
||||||
|
} else {
|
||||||
|
url = current_url.setQuery('act','').setQuery('module_srl','');
|
||||||
|
}
|
||||||
|
|
||||||
|
location.href = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 모듈 삭제 후 */
|
||||||
|
function completeDeleteOpage(ret_obj) {
|
||||||
|
var error = ret_obj['error'];
|
||||||
|
var message = ret_obj['message'];
|
||||||
|
var opage = ret_obj['opage'];
|
||||||
|
alert(message);
|
||||||
|
|
||||||
|
var url = current_url.setQuery('act','dispOpageAdminContent');
|
||||||
|
if(opage) url = url.setQuery('opage',opage);
|
||||||
|
|
||||||
|
location.href = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 카테고리 이동 */
|
||||||
|
function doChangeCategory(fo_obj) {
|
||||||
|
var module_category_srl = fo_obj.module_category_srl.options[fo_obj.module_category_srl.selectedIndex].value;
|
||||||
|
if(module_category_srl==-1) {
|
||||||
|
location.href = current_url.setQuery('act','dispModuleAdminCategory');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 권한 관련 */
|
||||||
|
function doSelectAll(obj, key) {
|
||||||
|
var fo_obj = obj.parentNode;
|
||||||
|
while(fo_obj.nodeName != 'FORM') {
|
||||||
|
fo_obj = fo_obj.parentNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(var i=0;i<fo_obj.length;i++) {
|
||||||
|
var tobj = fo_obj[i];
|
||||||
|
if(tobj.name == key) tobj.checked=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function doUnSelectAll(obj, key) {
|
||||||
|
var fo_obj = obj.parentNode;
|
||||||
|
while(fo_obj.nodeName != 'FORM') {
|
||||||
|
fo_obj = fo_obj.parentNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(var i=0;i<fo_obj.length;i++) {
|
||||||
|
var tobj = fo_obj[i];
|
||||||
|
if(tobj.name == key) tobj.checked = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
31
modules/opage/tpl/opage_delete.html
Normal file
31
modules/opage/tpl/opage_delete.html
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
<!--%import("filter/delete_opage.xml")-->
|
||||||
|
<!--%import("js/opage_admin.js")-->
|
||||||
|
<!--#include("header.html")-->
|
||||||
|
|
||||||
|
<form action="./" method="get" onsubmit="return procFilter(this, delete_opage)">
|
||||||
|
<input type="hidden" name="opage" value="{$opage}" />
|
||||||
|
<input type="hidden" name="module_srl" value="{$module_info->module_srl}" />
|
||||||
|
<table cellspacing="0" class="tableType4">
|
||||||
|
<col width="150" />
|
||||||
|
<col />
|
||||||
|
<tr>
|
||||||
|
<th scope="row" colspan="2">{$lang->confirm_delete}</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{$lang->module_name}</th>
|
||||||
|
<td>{$module_info->mid}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{$lang->module}</th>
|
||||||
|
<td>{$module_info->module}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div class="tRight gap1">
|
||||||
|
<a href="{getUrl('act','dispOpageAdminContent')}" class="button"><span>{$lang->cmd_back}</span></a>
|
||||||
|
<span class="button"><input type="submit" value="{$lang->cmd_delete}" /></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
116
modules/opage/tpl/opage_insert.html
Normal file
116
modules/opage/tpl/opage_insert.html
Normal file
|
|
@ -0,0 +1,116 @@
|
||||||
|
<!--%import("filter/insert_opage.xml")-->
|
||||||
|
<!--#include("header.html")-->
|
||||||
|
|
||||||
|
<form action="./" method="post" onsubmit="return procFilter(this, insert_opage)" enctype="multipart/form-data">
|
||||||
|
<input type="hidden" name="opage" value="{$opage}" />
|
||||||
|
<input type="hidden" name="module_srl" value="{$module_srl}" />
|
||||||
|
<!--@if($module_info->is_default=='Y')-->
|
||||||
|
<input type="hidden" name="is_default" value="Y" />
|
||||||
|
<!--@end-->
|
||||||
|
|
||||||
|
<table cellspacing="0" class="tableType2">
|
||||||
|
<col width="150" />
|
||||||
|
<col />
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{$lang->mid}</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="mid" value="{$module_info->mid}" class="inputTypeText" />
|
||||||
|
<p>{$lang->about_mid}</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!--@if($module_info->is_default!='Y')-->
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{$lang->is_default}</th>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" name="is_default" value="Y" <!--@if($module_info->is_default=='Y')-->checked="checked"<!--@end--> id="fld_for_default" class="checkbox" />
|
||||||
|
<label for="fld_for_default">{$lang->about_default}</label>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!--@end-->
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{$lang->module_category}</th>
|
||||||
|
<td>
|
||||||
|
<select name="module_category_srl">
|
||||||
|
<option value="0">{$lang->notuse}</option>
|
||||||
|
<!--@foreach($module_category as $key => $val)-->
|
||||||
|
<option value="{$key}" <!--@if($module_info->module_category_srl==$key)-->selected="selected"<!--@end-->>{$val->title}</option>
|
||||||
|
<!--@end-->
|
||||||
|
</select>
|
||||||
|
<p>{$lang->about_module_category}</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{$lang->browser_title}</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="browser_title" value="{htmlspecialchars($module_info->browser_title)}" class="inputTypeText" />
|
||||||
|
<p>{$lang->about_browser_title}</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{$lang->layout}</th>
|
||||||
|
<td>
|
||||||
|
<select name="layout_srl">
|
||||||
|
<option value="0">{$lang->notuse}</option>
|
||||||
|
<!--@foreach($layout_list as $key => $val)-->
|
||||||
|
<option value="{$val->layout_srl}" <!--@if($module_info->layout_srl==$val->layout_srl)-->selected="selected"<!--@end-->>{$val->title} ({$val->layout})</option>
|
||||||
|
<!--@end-->
|
||||||
|
</select>
|
||||||
|
<p>{$lang->about_layout}</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{$lang->opage_caching_interval}</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="opage_caching_interval" value="{(int)$module_info->caching_interval}" class="inputTypeText w40" /> {$lang->unit_min}
|
||||||
|
<p>{$lang->about_opage_caching_interval}</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{$lang->opage_path}</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="opage_path" value="{htmlspecialchars($module_info->path)}" class="inputTypeText w400" />
|
||||||
|
<p>{$lang->about_opage_path}<b>{realpath("./")}</b></p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<!-- 권한 출력 -->
|
||||||
|
<table cellspacing="0" class="tableType3 gap1">
|
||||||
|
<col width="130" />
|
||||||
|
<col width="*" />
|
||||||
|
<col width="80" />
|
||||||
|
<col width="80" />
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">{$lang->grant}</th>
|
||||||
|
<th scope="col" colspan="3">{$lang->target}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<!--@foreach($grant_list as $key => $val)-->
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{$val->title}</th>
|
||||||
|
<td class="left">
|
||||||
|
<!--@foreach($group_list as $k => $v)-->
|
||||||
|
<input type="checkbox" class="checkbox" name="{$key}" value="{$v->group_srl}" id="grant_{$key}_{$v->group_srl}" <!--@if(is_array($module_info->grants[$key])&&in_array($v->group_srl,$module_info->grants[$key]))-->checked="checked"<!--@end-->/>
|
||||||
|
<label for="grant_{$key}_{$v->group_srl}">{$v->title}</label>
|
||||||
|
<!--@end-->
|
||||||
|
</td>
|
||||||
|
<td><a href="#" onclick="doSelectAll(this, '{$key}')" class="blue">{$lang->cmd_select_all}</a></td>
|
||||||
|
<td><a href="#" onclick="doUnSelectAll(this, '{$key}')" class="red">{$lang->cmd_unselect_all}</a></td>
|
||||||
|
</tr>
|
||||||
|
<!--@end-->
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div class="tRight gap1">
|
||||||
|
<span class="button"><input type="submit" value="{$lang->cmd_save}" accesskey="s" /></span>
|
||||||
|
<!--@if($module == 'admin')-->
|
||||||
|
<span class="button"><input type="button" value="{$lang->cmd_list}" onclick="location.href='./?module=admin&act=dispOpageAdminContent';return false;" /></span>
|
||||||
|
<!--@else-->
|
||||||
|
<span class="button"><input type="button" value="{$lang->cmd_back}" onclick="location.href=current_url.setQuery('module_srl','').setQuery('act','');return false;" /></span>
|
||||||
|
<!--@end-->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<module version="0.1">
|
<module version="0.1">
|
||||||
<title xml:lang="ko">페이지</title>
|
<title xml:lang="ko">페이지</title>
|
||||||
<title xml:lang="zh-CN">页面</title>>
|
<title xml:lang="zh-CN">页面</title>
|
||||||
<title xml:lang="jp">ページ</title>
|
<title xml:lang="jp">ページ</title>
|
||||||
<title xml:lang="en">Page</title>
|
<title xml:lang="en">Page</title>
|
||||||
<title xml:lang="es">Página</title>
|
<title xml:lang="es">Página</title>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,24 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<module>
|
<module>
|
||||||
<grants />
|
<grants>
|
||||||
|
<grant name="view" default="guest">
|
||||||
|
<title xml:lang="ko">열람</title>
|
||||||
|
<title xml:lang="zh-CN">浏览</title>
|
||||||
|
<title xml:lang="jp">閲覧</title>
|
||||||
|
<title xml:lang="en">view</title>
|
||||||
|
</grant>
|
||||||
|
<grant name="manager" default="root">
|
||||||
|
<title xml:lang="ko">관리</title>
|
||||||
|
<title xml:lang="zh-CN">管理</title>
|
||||||
|
<title xml:lang="jp">管理</title>
|
||||||
|
<title xml:lang="en">manager</title>
|
||||||
|
</grant>
|
||||||
|
</grants>
|
||||||
|
<permissions>
|
||||||
|
<permission action="procPageAdminRemoveWidgetCache" target="manager" />
|
||||||
|
<permission action="dispPageAdminContentModify" target="manager" />
|
||||||
|
<permission action="procPageAdminInsert" target="manager" />
|
||||||
|
</permissions>
|
||||||
<actions>
|
<actions>
|
||||||
<action name="dispPageIndex" type="view" index="true" />
|
<action name="dispPageIndex" type="view" index="true" />
|
||||||
<action name="dispPageAdminContent" type="view" admin_index="true" standalone="true" />
|
<action name="dispPageAdminContent" type="view" admin_index="true" standalone="true" />
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@
|
||||||
if($module_info->module_srl != $args->module_srl) {
|
if($module_info->module_srl != $args->module_srl) {
|
||||||
$output = $oModuleController->insertModule($args);
|
$output = $oModuleController->insertModule($args);
|
||||||
$msg_code = 'success_registed';
|
$msg_code = 'success_registed';
|
||||||
|
$module_info->module_srl = $output->get('module_srl');
|
||||||
} else {
|
} else {
|
||||||
$output = $oModuleController->updateModule($args);
|
$output = $oModuleController->updateModule($args);
|
||||||
$msg_code = 'success_updated';
|
$msg_code = 'success_updated';
|
||||||
|
|
@ -49,6 +50,24 @@
|
||||||
|
|
||||||
if(!$output->toBool()) return $output;
|
if(!$output->toBool()) return $output;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 권한 저장
|
||||||
|
**/
|
||||||
|
// 현 모듈의 권한 목록을 저장
|
||||||
|
$grant_list = $this->xml_info->grant;
|
||||||
|
|
||||||
|
if(count($grant_list)) {
|
||||||
|
foreach($grant_list as $key => $val) {
|
||||||
|
$group_srls = Context::get($key);
|
||||||
|
if($group_srls) $arr_grant[$key] = explode('|@|',$group_srls);
|
||||||
|
}
|
||||||
|
$grants = serialize($arr_grant);
|
||||||
|
}
|
||||||
|
|
||||||
|
$oModuleController = &getController('module');
|
||||||
|
$oModuleController->updateModuleGrant($module_info->module_srl, $grants);
|
||||||
|
|
||||||
|
|
||||||
$this->add("module_srl", $args->module_srl);
|
$this->add("module_srl", $args->module_srl);
|
||||||
$this->add("page", Context::get('page'));
|
$this->add("page", Context::get('page'));
|
||||||
$this->setMessage($msg_code);
|
$this->setMessage($msg_code);
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,15 @@
|
||||||
|
|
||||||
// 템플릿 경로 구함 (page의 경우 tpl에 관리자용 템플릿 모아놓음)
|
// 템플릿 경로 구함 (page의 경우 tpl에 관리자용 템플릿 모아놓음)
|
||||||
$this->setTemplatePath($this->module_path.'tpl');
|
$this->setTemplatePath($this->module_path.'tpl');
|
||||||
|
|
||||||
|
// 권한 그룹의 목록을 가져온다
|
||||||
|
$oMemberModel = &getModel('member');
|
||||||
|
$group_list = $oMemberModel->getGroups();
|
||||||
|
Context::set('group_list', $group_list);
|
||||||
|
|
||||||
|
// module.xml에서 권한 관련 목록을 구해옴
|
||||||
|
$grant_list = $this->xml_info->grant;
|
||||||
|
Context::set('grant_list', $grant_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -182,6 +191,9 @@
|
||||||
$layout_list = $oLayoutMode->getLayoutList();
|
$layout_list = $oLayoutMode->getLayoutList();
|
||||||
Context::set('layout_list', $layout_list);
|
Context::set('layout_list', $layout_list);
|
||||||
|
|
||||||
|
// 내용 수정시에는 레이아웃을 보이지 않도록 세팅
|
||||||
|
Context::set('layout','none');
|
||||||
|
|
||||||
// 템플릿 파일 지정
|
// 템플릿 파일 지정
|
||||||
$this->setTemplateFile('page_content_modify');
|
$this->setTemplateFile('page_content_modify');
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,9 @@
|
||||||
* @brief 일반 요청시 출력
|
* @brief 일반 요청시 출력
|
||||||
**/
|
**/
|
||||||
function dispPageIndex() {
|
function dispPageIndex() {
|
||||||
|
// 권한 체크
|
||||||
|
if(!$this->grant->view) return $this->stop('msg_not_permitted');
|
||||||
|
|
||||||
// 템플릿에서 사용할 변수를 Context::set()
|
// 템플릿에서 사용할 변수를 Context::set()
|
||||||
if($this->module_srl) Context::set('module_srl',$this->module_srl);
|
if($this->module_srl) Context::set('module_srl',$this->module_srl);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,12 @@
|
||||||
{$page_content}
|
{$page_content}
|
||||||
|
|
||||||
<!--@if($grant->is_admin)-->
|
<!--@if($grant->manager)-->
|
||||||
<!--%import("./js/page_admin.js")-->
|
<!--%import("./js/page_admin.js")-->
|
||||||
<div class="tRight gap1 clear">
|
<div class="tRight gap1 clear">
|
||||||
<a href="#" onclick="doRemoveWidgetCache({$module_info->module_srl}); return false;" class="button"><span>{$lang->cmd_remake_cache}</span></a>
|
<a href="#" onclick="doRemoveWidgetCache({$module_info->module_srl}); return false;" class="button"><span>{$lang->cmd_remake_cache}</span></a>
|
||||||
|
<!--@if($grant->is_admin)-->
|
||||||
<a href="{getUrl('act','dispPageAdminInfo','module_srl',$module_info->module_srl)}" class="button"><span>{$lang->cmd_setup}</span></a>
|
<a href="{getUrl('act','dispPageAdminInfo','module_srl',$module_info->module_srl)}" class="button"><span>{$lang->cmd_setup}</span></a>
|
||||||
|
<!--@end-->
|
||||||
<a href="{getUrl('','module','page','act','dispPageAdminContentModify','module_srl',$module_info->module_srl)}" onclick="window.open(this.href,'PageEdit','width=850,height=650,scrollbars=yes,resizable=yes,toolbars=no');return false;" class="button"><span>{$lang->cmd_page_modify}</span></a>
|
<a href="{getUrl('','module','page','act','dispPageAdminContentModify','module_srl',$module_info->module_srl)}" onclick="window.open(this.href,'PageEdit','width=850,height=650,scrollbars=yes,resizable=yes,toolbars=no');return false;" class="button"><span>{$lang->cmd_page_modify}</span></a>
|
||||||
</div>
|
</div>
|
||||||
<!--@end-->
|
<!--@end-->
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,8 @@
|
||||||
<param name="layout_srl" target="layout_srl" />
|
<param name="layout_srl" target="layout_srl" />
|
||||||
<param name="browser_title" target="browser_title" />
|
<param name="browser_title" target="browser_title" />
|
||||||
<param name="is_default" target="is_default" />
|
<param name="is_default" target="is_default" />
|
||||||
|
<param name="view" target="view" />
|
||||||
|
<param name="manager" target="manager" />
|
||||||
</parameter>
|
</parameter>
|
||||||
<response callback_func="completeInsertPage">
|
<response callback_func="completeInsertPage">
|
||||||
<tag name="error" />
|
<tag name="error" />
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,8 @@
|
||||||
<param name="content" target="content" />
|
<param name="content" target="content" />
|
||||||
<param name="browser_title" target="browser_title" />
|
<param name="browser_title" target="browser_title" />
|
||||||
<param name="is_default" target="is_default" />
|
<param name="is_default" target="is_default" />
|
||||||
|
<param name="view" target="view" />
|
||||||
|
<param name="manager" target="manager" />
|
||||||
</parameter>
|
</parameter>
|
||||||
<response callback_func="completeInsertPageContent">
|
<response callback_func="completeInsertPageContent">
|
||||||
<tag name="error" />
|
<tag name="error" />
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,15 @@
|
||||||
|
|
||||||
<!-- 목록 -->
|
<!-- 목록 -->
|
||||||
<table cellspacing="0" class="tableType1">
|
<table cellspacing="0" class="tableType1">
|
||||||
|
<col width="40" />
|
||||||
|
<col width="140" />
|
||||||
|
<col />
|
||||||
|
<col />
|
||||||
|
<col width="40" />
|
||||||
|
<col width="80" />
|
||||||
|
<col width="40" />
|
||||||
|
<col width="40" />
|
||||||
|
<col width="40" />
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col">{$lang->no}</th>
|
<th scope="col">{$lang->no}</th>
|
||||||
|
|
@ -17,7 +26,7 @@
|
||||||
<form action="./" method="get" onsubmit="return doChangeCategory(this);">
|
<form action="./" method="get" onsubmit="return doChangeCategory(this);">
|
||||||
<input type="hidden" name="module" value="{$module}" />
|
<input type="hidden" name="module" value="{$module}" />
|
||||||
<input type="hidden" name="act" value="{$act}" />
|
<input type="hidden" name="act" value="{$act}" />
|
||||||
<select name="module_category_srl">
|
<select name="module_category_srl" class="w100">
|
||||||
<option value="">{$lang->module_category}</option>
|
<option value="">{$lang->module_category}</option>
|
||||||
<!--@foreach($module_category as $key => $val)-->
|
<!--@foreach($module_category as $key => $val)-->
|
||||||
<option value="{$key}" <!--@if($module_category_srl==$key)-->selected="selected"<!--@end-->>{$val->title}</option>
|
<option value="{$key}" <!--@if($module_category_srl==$key)-->selected="selected"<!--@end-->>{$val->title}</option>
|
||||||
|
|
@ -33,6 +42,7 @@
|
||||||
<th scope="col">{$lang->is_default}</th>
|
<th scope="col">{$lang->is_default}</th>
|
||||||
<th scope="col">{$lang->regdate}</th>
|
<th scope="col">{$lang->regdate}</th>
|
||||||
<th scope="col">{$lang->cmd_view}</th>
|
<th scope="col">{$lang->cmd_view}</th>
|
||||||
|
<th scope="col">{$lang->cmd_copy}</th>
|
||||||
<th scope="col">{$lang->cmd_delete}</th>
|
<th scope="col">{$lang->cmd_delete}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|
@ -48,11 +58,12 @@
|
||||||
{$module_category[$val->module_category_srl]->title}
|
{$module_category[$val->module_category_srl]->title}
|
||||||
<!--@end-->
|
<!--@end-->
|
||||||
</td>
|
</td>
|
||||||
<td><a href="{getUrl('act','dispPageAdminInfo','module_srl',$val->module_srl)}" class="blue">{$val->mid}</a></td>
|
<td><div class="tLeft nowrap"> <a href="{getUrl('act','dispPageAdminInfo','module_srl',$val->module_srl)}" class="blue">{$val->mid}</a></div></td>
|
||||||
<td>{$val->browser_title}</td>
|
<td><div class="tLeft">{$val->browser_title}</div></td>
|
||||||
<td class="tahoma">{$val->is_default}</td>
|
<td class="tahoma">{$val->is_default}</td>
|
||||||
<td class="tahoma">{zdate($val->regdate,"Y-m-d")}</td>
|
<td class="tahoma">{zdate($val->regdate,"Y-m-d")}</td>
|
||||||
<td class="blue"><a href="./?mid={$val->mid}" target="_blank">{$lang->cmd_view}</a></td>
|
<td class="blue"><a href="{getUrl('','mid',$val->mid)}" onclick="window.open(this.href); return false;">{$lang->cmd_view}</a></td>
|
||||||
|
<td class="blue"><a href="./?module=module&act=dispModuleAdminCopyModule&module_srl={$val->module_srl}" onclick="popopen(this.href);return false;">{$lang->cmd_copy}</a></td>
|
||||||
<td class="red"><!--@if($val->is_default!='Y')--><a href="{getUrl('act','dispPageAdminDelete','module_srl', $val->module_srl)}">{$lang->cmd_delete}</a><!--@end--></td>
|
<td class="red"><!--@if($val->is_default!='Y')--><a href="{getUrl('act','dispPageAdminDelete','module_srl', $val->module_srl)}">{$lang->cmd_delete}</a><!--@end--></td>
|
||||||
</tr>
|
</tr>
|
||||||
<!--@end-->
|
<!--@end-->
|
||||||
|
|
|
||||||
|
|
@ -83,3 +83,28 @@ function completeRemoveWidgetCache(ret_obj) {
|
||||||
alert(message);
|
alert(message);
|
||||||
location.reload();
|
location.reload();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 권한 관련 */
|
||||||
|
function doSelectAll(obj, key) {
|
||||||
|
var fo_obj = obj.parentNode;
|
||||||
|
while(fo_obj.nodeName != 'FORM') {
|
||||||
|
fo_obj = fo_obj.parentNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(var i=0;i<fo_obj.length;i++) {
|
||||||
|
var tobj = fo_obj[i];
|
||||||
|
if(tobj.name == key) tobj.checked=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function doUnSelectAll(obj, key) {
|
||||||
|
var fo_obj = obj.parentNode;
|
||||||
|
while(fo_obj.nodeName != 'FORM') {
|
||||||
|
fo_obj = fo_obj.parentNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(var i=0;i<fo_obj.length;i++) {
|
||||||
|
var tobj = fo_obj[i];
|
||||||
|
if(tobj.name == key) tobj.checked = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,9 @@
|
||||||
<input type="hidden" name="module_category_srl" value="{$module_info->module_category_srl}" />
|
<input type="hidden" name="module_category_srl" value="{$module_info->module_category_srl}" />
|
||||||
<input type="hidden" name="browser_title" value="{$module_info->browser_title}" />
|
<input type="hidden" name="browser_title" value="{$module_info->browser_title}" />
|
||||||
<input type="hidden" name="layout_srl" value="{$module_info->layout_srl}" />
|
<input type="hidden" name="layout_srl" value="{$module_info->layout_srl}" />
|
||||||
|
<!--@foreach($grant_list as $key => $val)-->
|
||||||
|
<input type="hidden" name="{$key}" value="<!--@if(is_array($module_info->grants[$key]))-->{implode('|@|',$module_info->grants[$key])}<!--@end-->" />
|
||||||
|
<!--@end-->
|
||||||
|
|
||||||
<div class="widget_list">
|
<div class="widget_list">
|
||||||
<!--@foreach($widget_list as $widget)-->
|
<!--@foreach($widget_list as $widget)-->
|
||||||
|
|
|
||||||
|
|
@ -59,17 +59,46 @@
|
||||||
<p>{$lang->about_layout}</p>
|
<p>{$lang->about_layout}</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
|
||||||
<td colspan="2" class="tRight">
|
|
||||||
<span class="button"><input type="submit" value="{$lang->cmd_save}" accesskey="s" /></span>
|
|
||||||
<a href="{getUrl('','module','page','act','dispPageAdminContentModify','module_srl',$module_info->module_srl)}" onclick="window.open(this.href,'PageEdit','width=850,height=650,scrollbars=yes,resizable=yes,toolbars=no');return false;" class="button"><span>{$lang->cmd_page_modify}</span></a>
|
|
||||||
<!--@if($module=="admin")-->
|
|
||||||
<a href="{getUrl('act','dispPageAdminContent','module_srl','')}" class="button"><span>{$lang->cmd_list}</span></a>
|
|
||||||
<!--@else-->
|
|
||||||
<a href="{getUrl('act','')}" class="button"><span>{$lang->cmd_back}</span></a>
|
|
||||||
<!--@end-->
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
<!-- 권한 출력 -->
|
||||||
|
<table cellspacing="0" class="tableType3 gap1">
|
||||||
|
<col width="130" />
|
||||||
|
<col width="*" />
|
||||||
|
<col width="80" />
|
||||||
|
<col width="80" />
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">{$lang->grant}</th>
|
||||||
|
<th scope="col" colspan="3">{$lang->target}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<!--@foreach($grant_list as $key => $val)-->
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{$val->title}</th>
|
||||||
|
<td class="left">
|
||||||
|
<!--@foreach($group_list as $k => $v)-->
|
||||||
|
<input type="checkbox" class="checkbox" name="{$key}" value="{$v->group_srl}" id="grant_{$key}_{$v->group_srl}" <!--@if(is_array($module_info->grants[$key])&&in_array($v->group_srl,$module_info->grants[$key]))-->checked="checked"<!--@end-->/>
|
||||||
|
<label for="grant_{$key}_{$v->group_srl}">{$v->title}</label>
|
||||||
|
<!--@end-->
|
||||||
|
</td>
|
||||||
|
<td><a href="#" onclick="doSelectAll(this, '{$key}')" class="blue">{$lang->cmd_select_all}</a></td>
|
||||||
|
<td><a href="#" onclick="doUnSelectAll(this, '{$key}')" class="red">{$lang->cmd_unselect_all}</a></td>
|
||||||
|
</tr>
|
||||||
|
<!--@end-->
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div class="tRight gap1">
|
||||||
|
<span class="button"><input type="submit" value="{$lang->cmd_save}" accesskey="s" /></span>
|
||||||
|
<a href="{getUrl('','module','page','act','dispPageAdminContentModify','module_srl',$module_info->module_srl)}" onclick="window.open(this.href,'PageEdit','width=850,height=650,scrollbars=yes,resizable=yes,toolbars=no');return false;" class="button"><span>{$lang->cmd_page_modify}</span></a>
|
||||||
|
<!--@if($module=="admin")-->
|
||||||
|
<a href="{getUrl('act','dispPageAdminContent','module_srl','')}" class="button"><span>{$lang->cmd_list}</span></a>
|
||||||
|
<!--@else-->
|
||||||
|
<a href="{getUrl('act','')}" class="button"><span>{$lang->cmd_back}</span></a>
|
||||||
|
<!--@end-->
|
||||||
|
</div>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,36 @@
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
<!-- 권한 출력 -->
|
||||||
|
<table cellspacing="0" class="tableType3 gap1">
|
||||||
|
<col width="130" />
|
||||||
|
<col width="*" />
|
||||||
|
<col width="80" />
|
||||||
|
<col width="80" />
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">{$lang->grant}</th>
|
||||||
|
<th scope="col" colspan="3">{$lang->target}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<!--@foreach($grant_list as $key => $val)-->
|
||||||
|
<tr>
|
||||||
|
<th scope="row">{$val->title}</th>
|
||||||
|
<td class="left">
|
||||||
|
<!--@foreach($group_list as $k => $v)-->
|
||||||
|
<input type="checkbox" class="checkbox" name="{$key}" value="{$v->group_srl}" id="grant_{$key}_{$v->group_srl}" <!--@if(is_array($module_info->grants[$key])&&in_array($v->group_srl,$module_info->grants[$key]))-->checked="checked"<!--@end-->/>
|
||||||
|
<label for="grant_{$key}_{$v->group_srl}">{$v->title}</label>
|
||||||
|
<!--@end-->
|
||||||
|
</td>
|
||||||
|
<td><a href="#" onclick="doSelectAll(this, '{$key}')" class="blue">{$lang->cmd_select_all}</a></td>
|
||||||
|
<td><a href="#" onclick="doUnSelectAll(this, '{$key}')" class="red">{$lang->cmd_unselect_all}</a></td>
|
||||||
|
</tr>
|
||||||
|
<!--@end-->
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
<div class="tRight gap1">
|
<div class="tRight gap1">
|
||||||
<span class="button"><input type="submit" value="{$lang->cmd_save}" accesskey="s" /></span>
|
<span class="button"><input type="submit" value="{$lang->cmd_save}" accesskey="s" /></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,10 @@
|
||||||
$lang->poll_join_count = "投票者";
|
$lang->poll_join_count = "投票者";
|
||||||
$lang->poll_checkcount = "必选项目数";
|
$lang->poll_checkcount = "必选项目数";
|
||||||
|
|
||||||
$lang->cmd_poll_list = '查看投票调查目录';
|
$lang->cmd_poll_list = '查看目录';
|
||||||
$lang->cmd_delete_checked_poll = '删除所选项目';
|
$lang->cmd_delete_checked_poll = '删除所选项目';
|
||||||
$lang->cmd_apply_poll = '参与投票';
|
$lang->cmd_apply_poll = '参与投票';
|
||||||
$lang->cmd_delete_checked_poll = '删除所选问卷';
|
$lang->cmd_delete_checked_poll = '删除所选';
|
||||||
|
|
||||||
$lang->success_poll = '感谢您参与投票。';
|
$lang->success_poll = '感谢您参与投票。';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,12 @@
|
||||||
* @brief 팝업창에서 설문 작성 완료후 저장을 누를때 설문 등록
|
* @brief 팝업창에서 설문 작성 완료후 저장을 누를때 설문 등록
|
||||||
**/
|
**/
|
||||||
function procInsert() {
|
function procInsert() {
|
||||||
$upload_target_srl = Context::get('upload_target_srl');
|
// 기본적으로 필요한 변수 설정
|
||||||
|
$editor_sequence = Context::get('editor_sequence');
|
||||||
|
|
||||||
|
// upload_target_srl 구함
|
||||||
|
$upload_target_srl = $_SESSION['upload_info'][$editor_sequence]->upload_target_srl;
|
||||||
|
if(!$upload_target_srl) $upload_target_srl = getNextSequence();
|
||||||
|
|
||||||
$stop_year = Context::get('stop_year');
|
$stop_year = Context::get('stop_year');
|
||||||
$stop_month = Context::get('stop_month');
|
$stop_month = Context::get('stop_month');
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,11 @@
|
||||||
<title xml:lang="zh-CN">TatterTools 数据导入</title>
|
<title xml:lang="zh-CN">TatterTools 数据导入</title>
|
||||||
<title xml:lang="jp">TTデータ移転</title>
|
<title xml:lang="jp">TTデータ移転</title>
|
||||||
<title xml:lang="en">Transfer data from TatterTools</title>
|
<title xml:lang="en">Transfer data from TatterTools</title>
|
||||||
<title xml:lang="es">Transferir datos desde la Herramienta Tatter</title>
|
|
||||||
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
|
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
|
||||||
<name xml:lang="ko">제로</name>
|
<name xml:lang="ko">제로</name>
|
||||||
<name xml:lang="zh-CN">zero</name>
|
<name xml:lang="zh-CN">zero</name>
|
||||||
<name xml:lang="jp">Zero</name>
|
<name xml:lang="jp">Zero</name>
|
||||||
<name xml:lang="en">Zero</name>
|
<name xml:lang="en">Zero</name>
|
||||||
<name xml:lang="es">Zero</name>
|
|
||||||
<description xml:lang="ko">
|
<description xml:lang="ko">
|
||||||
태터툴즈의 백업파일을 제로보드XE에 입력을 하는 모듈입니다.
|
태터툴즈의 백업파일을 제로보드XE에 입력을 하는 모듈입니다.
|
||||||
첨부파일 포함하지 않은 백업파일이 필요합니다.
|
첨부파일 포함하지 않은 백업파일이 필요합니다.
|
||||||
|
|
@ -28,11 +26,6 @@
|
||||||
Module for inputting TattertTools' backup file to ZeroboardXE.
|
Module for inputting TattertTools' backup file to ZeroboardXE.
|
||||||
Backup file without attachment is required.
|
Backup file without attachment is required.
|
||||||
Attachments will be downloaded from the original address.
|
Attachments will be downloaded from the original address.
|
||||||
</description>
|
|
||||||
<description xml:lang="es">
|
|
||||||
Módulo para ingresar archivos de respaldo de la Herramienta Tatter de ZeroboardXE.
|
|
||||||
Se requiere archivo de respaldo sin archivos adjuntos.
|
|
||||||
Archivos adjuntos serán descargados directamente desde la dirección original.
|
|
||||||
</description>
|
</description>
|
||||||
</author>
|
</author>
|
||||||
</module>
|
</module>
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
크기, 배경색등의 조건을 설정하지 않으시면 기본 설정으로 사용됩니다.
|
크기, 배경색등의 조건을 설정하지 않으시면 기본 설정으로 사용됩니다.
|
||||||
그래프를 그리기 위해서 GD 라이브러리가 설치되어 있어야 합니다.
|
그래프를 그리기 위해서 GD 라이브러리가 설치되어 있어야 합니다.
|
||||||
</description>
|
</description>
|
||||||
<description xml:lang="s">
|
<description xml:lang="es">
|
||||||
Este widget contador de image muestra un pequeño gráfico para ser añadidos en el blog o sitios.
|
Este widget contador de image muestra un pequeño gráfico para ser añadidos en el blog o sitios.
|
||||||
Si no configura el tamaño, color de fondo, etc., se utiliza la configuración predefinida.
|
Si no configura el tamaño, color de fondo, etc., se utiliza la configuración predefinida.
|
||||||
Para dibujar el gráfico debe estar instalada la librería GD.
|
Para dibujar el gráfico debe estar instalada la librería GD.
|
||||||
|
|
@ -70,7 +70,7 @@
|
||||||
</var>
|
</var>
|
||||||
<var id="check_bg_color">
|
<var id="check_bg_color">
|
||||||
<name xml:lang="ko">체크 무늬 배경색</name>
|
<name xml:lang="ko">체크 무늬 배경색</name>
|
||||||
<name xml:lang="ko">Textura escocés de fondo</name>
|
<name xml:lang="es">Textura escocés de fondo</name>
|
||||||
<type>text</type>
|
<type>text</type>
|
||||||
<description xml:lang="ko"><![CDATA[지정하신 색상 코드로 체크 무늬 배경을 그립니다.
|
<description xml:lang="ko"><![CDATA[지정하신 색상 코드로 체크 무늬 배경을 그립니다.
|
||||||
기본 : <span style="color:#F9F9F9">#F9F9F9</span>
|
기본 : <span style="color:#F9F9F9">#F9F9F9</span>
|
||||||
|
|
@ -117,7 +117,7 @@
|
||||||
기본 : <span style="color:#ed3027">#ed3027</span>
|
기본 : <span style="color:#ed3027">#ed3027</span>
|
||||||
#과 6자리의 색상코드 입력해주세요]]></description>
|
#과 6자리의 색상코드 입력해주세요]]></description>
|
||||||
<description xml:lang="es"><![CDATA[Con el código del color asignado mostrará el color del punto en donde la línea del gráfico esté doblado.
|
<description xml:lang="es"><![CDATA[Con el código del color asignado mostrará el color del punto en donde la línea del gráfico esté doblado.
|
||||||
기본 : <span style="color:#ed3027">#ed3027</span>
|
Predefinido : <span style="color:#ed3027">#ed3027</span>
|
||||||
Ingrese # + 6 espacios del código del color]]></description>
|
Ingrese # + 6 espacios del código del color]]></description>
|
||||||
</var>
|
</var>
|
||||||
</extra_vars>
|
</extra_vars>
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue