diff --git a/modules/module/module.model.php b/modules/module/module.model.php
index b7d2d3009..8a66931e6 100644
--- a/modules/module/module.model.php
+++ b/modules/module/module.model.php
@@ -73,6 +73,7 @@
* @brief 여러개의 module_srl에 해당하는 모듈의 정보를 구함
**/
function getModulesInfo($module_srls) {
+ if(is_array($module_srls)) $module_srls = implode(',',$module_srls);
$args->module_srls = $module_srls;
$output = executeQueryArray('module.getModulesInfo', $args);
if(!$output->toBool()) return;
diff --git a/widgets/forum/conf/info.xml b/widgets/forum/conf/info.xml
new file mode 100644
index 000000000..c15cbf9bd
--- /dev/null
+++ b/widgets/forum/conf/info.xml
@@ -0,0 +1,91 @@
+
+
+ 포럼형 최근 게시물
+ 포럼형 최근 게시물
+ 포럼형 최근 게시물
+ 포럼형 최근 게시물
+ 포럼형 최근 게시물
+ 포럼형 최근 게시물
+
+ 제로
+ zero
+ zero
+ zero
+ zero
+ zero
+
+ 한개 또는 여러개의 게시판을 포럼형식으로 정리하여 노출하는 위젯입니다.
+ 대상 게시판에 설정되어 있는 제목과 설명을 이용하여 설명을 출력합니다.
+
+
+ 한개 또는 여러개의 게시판을 포럼형식으로 정리하여 노출하는 위젯입니다.
+ 대상 게시판에 설정되어 있는 제목과 설명을 이용하여 설명을 출력합니다.
+
+
+ 한개 또는 여러개의 게시판을 포럼형식으로 정리하여 노출하는 위젯입니다.
+ 대상 게시판에 설정되어 있는 제목과 설명을 이용하여 설명을 출력합니다.
+
+
+ 한개 또는 여러개의 게시판을 포럼형식으로 정리하여 노출하는 위젯입니다.
+ 대상 게시판에 설정되어 있는 제목과 설명을 이용하여 설명을 출력합니다.
+
+
+ 한개 또는 여러개의 게시판을 포럼형식으로 정리하여 노출하는 위젯입니다.
+ 대상 게시판에 설정되어 있는 제목과 설명을 이용하여 설명을 출력합니다.
+
+
+
+
+ 제목
+ 栏目名
+ タイトル
+ Title
+ Título
+ Заголовок
+ text
+
+
+ new 표시 시간 (hours)
+ new图标显示时间(hours)
+ Newの表示時間 (Hours)
+ Duration of indication for new item
+ Длительность индикации для новых объектов
+ text
+ 새로 등록된 게시물의 new 표시시간을 정할 수 있습니다. (시간 단위)
+ 可以设置最新更新主题的new图标显示时间。
+ 新しく登録された書き込みに対して「New」の表示時間を指定します(時間単位)。
+ You may set the duration of indication for fresh item. (unit is hour)
+ Вы можете установить длительность индикации для нового объекта. (единица - час)
+
+
+ 제목 글자수
+ タイトルの文字数
+ 标题字数
+ Length of Subject
+ Número de letras del título
+ Длина темы
+ text
+ 제목 글자수를 지정할 수 있습니다. (0또는 비워주시면 자르지 않습니다)
+ タイトルの文字数が指定できます(「0」または空欄の場合は、文字数を制限しません)。
+ 可以设置标题的字数。(0或留空为不限)
+ Length of Subject can be assigned. (0 or blank value will not restrict the length)
+ El largo del título puede ser asignado. (valor 0 o en blanco no restringe el largo)
+ Длина темы может быть присвоена. (0 или пустое значение не будут ограничивать длину)
+
+
+ 대상 모듈
+ 模块对象
+ モジュール
+ Target Module
+ Módulo Objetivo
+ Модуль назначения
+ mid_list
+ 선택하신 모듈에 등록된 글을 대상으로 합니다.
+ 将把被选模块当中的主题作为对象。
+ チェックされたモジュールに登録されたコンテンツ(書き込み)を対象とします。
+ The target articles to be sorted will be the ones submitted in the selected module.
+ El objetivo de los documentos agregados serán los del módulo selccionado.
+ Статьи назначения для сортировки будут теми, что были размещены в выбранном модуле.
+
+
+
diff --git a/widgets/forum/forum.class.php b/widgets/forum/forum.class.php
new file mode 100644
index 000000000..04eb99218
--- /dev/null
+++ b/widgets/forum/forum.class.php
@@ -0,0 +1,95 @@
+title;
+
+ // 최근 글 표시 시간
+ $duration_new = $args->duration_new;
+ if(!$duration_new) $duration_new = 12;
+
+ // 제목 길이 자르기
+ $subject_cut_size = $args->subject_cut_size;
+ if(!$subject_cut_size) $subject_cut_size = 0;
+
+ // 대상 모듈
+ if($args->mid_list) $mid_list = explode(",",$args->mid_list);
+ else return;
+
+ // module_srl 대신 mid가 넘어왔을 경우는 직접 module_srl을 구해줌
+ $oModuleModel = &getModel('module');
+ $module_srls = $oModuleModel->getModuleSrlByMid($mid_list);
+
+ // 대상 모듈의 정보를 구함
+ $module_list = $oModuleModel->getModulesInfo($module_srls);
+
+ // 각 모듈별로 먼저 정리 시작
+ foreach($module_list as $module) {
+ $modules[$module->module_srl]->title = $module->browser_title;
+ $modules[$module->module_srl]->mid = $module->mid;
+ $modules[$module->module_srl]->description = $module->description;
+ $modules[$module->module_srl]->document_count = 0;
+ $modules[$module->module_srl]->comment_count = 0;
+
+ // 최근 수정된 댓글의 정보
+ $last_args = null;
+ $last_args->module_srl = $module->module_srl;
+ $output = executeQuery('widgets.forum.getLatestComments', $last_args);
+
+ if(is_array($output->data)) $modules[$module->module_srl]->last_comment = array_pop($output->data);
+ else $modules[$module->module_srl]->last_comment = null;
+ }
+
+ // 각 모듈별 전체글을 구함
+ $total_documents_args->module_srl = $module->module_srl;
+ $total_documents_args->module_srls = implode(',',$module_srls);
+
+ $total_documents_output = executeQueryArray('widgets.forum.getTotalDocuments',$total_documents_args);
+ foreach($total_documents_output->data as $val) {
+ $modules[$val->module_srl]->document_count = $val->count;
+ }
+
+ // 각 모듈별 댓글 수를 구함
+ $total_comments_args->module_srl = $module->module_srl;
+ $total_comments_args->module_srls = implode(',',$module_srls);
+
+ $total_comments_output = executeQueryArray('widgets.forum.getTotalComments',$total_comments_args);
+ foreach($total_comments_output->data as $val) {
+ $modules[$val->module_srl]->comment_count = $val->count;
+ }
+
+ $widget_info->title = $title;
+ $widget_info->modules = $modules;
+ $widget_info->subject_cut_size = $subject_cut_size;
+ $widget_info->duration_new = $duration_new * 60*60;
+
+ Context::set('widget_info', $widget_info);
+
+ // 템플릿의 스킨 경로를 지정 (skin, colorset에 따른 값을 설정)
+ $tpl_path = sprintf('%sskins/%s', $this->widget_path, $args->skin);
+ Context::set('colorset', $args->colorset);
+
+ // 템플릿 파일을 지정
+ $tpl_file = 'list';
+
+ // 템플릿 컴파일
+ $oTemplate = &TemplateHandler::getInstance();
+ $output = $oTemplate->compile($tpl_path, $tpl_file);
+ return $output;
+ }
+ }
+?>
diff --git a/widgets/forum/queries/getLatestComments.xml b/widgets/forum/queries/getLatestComments.xml
new file mode 100644
index 000000000..d036ad8aa
--- /dev/null
+++ b/widgets/forum/queries/getLatestComments.xml
@@ -0,0 +1,14 @@
+
diff --git a/widgets/forum/queries/getTotalComments.xml b/widgets/forum/queries/getTotalComments.xml
new file mode 100644
index 000000000..76c845ba0
--- /dev/null
+++ b/widgets/forum/queries/getTotalComments.xml
@@ -0,0 +1,15 @@
+
diff --git a/widgets/forum/queries/getTotalDocuments.xml b/widgets/forum/queries/getTotalDocuments.xml
new file mode 100644
index 000000000..2abf501b8
--- /dev/null
+++ b/widgets/forum/queries/getTotalDocuments.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/widgets/forum/skins/default/css/.common.css.swp b/widgets/forum/skins/default/css/.common.css.swp
new file mode 100644
index 000000000..83de11d52
Binary files /dev/null and b/widgets/forum/skins/default/css/.common.css.swp differ
diff --git a/widgets/forum/skins/default/css/common.css b/widgets/forum/skins/default/css/common.css
new file mode 100644
index 000000000..bb3b33802
--- /dev/null
+++ b/widgets/forum/skins/default/css/common.css
@@ -0,0 +1,28 @@
+.xeForum { background:url("../images/back.gif") repeat-x left top; padding:0; }
+
+.xeForum div.forumTable { padding:0 6px 0 6px; }
+.xeForum table { width:100%; border:0; table-layout:fixed; }
+
+.xeForum table tr.top { height:22px; }
+.xeForum table th { vertical-align:bottom; color:#ffffff; font-weight:normal; padding-bottom:5px; }
+.xeForum table th.title { font-weight:normal; text-align:left; padding-left:10px; }
+.xeForum table th.last_post { text-align:left; padding-left:15px; }
+
+.xeForum table tr.content { background:#EFEFEF; height:55px; }
+
+.xeForum table td.topic, .xeForum td.icon, .xeForum td.title, .xeForum td.topic, .xeForum td.replies , .xeForum td.last_post{ padding:5px 0 5px 0; border-top:1px solid #FFFFFF; }
+.xeForum table td.topic, .xeForum td.icon, .xeForum td.title, .xeForum td.topic, .xeForum td.replies , .xeForum td.last_post{ padding:5px 0 5px 0; border-bottom:1px solid #6E6E6E; }
+.xeForum table td.icon { text-align:center; }
+
+.xeForum table td.title a { text-decoration:none; color:#3A3947; font-size:9pt;}
+.xeForum table td.title p { margin-top:5px; font-weight:normal; text-decoration:none; color:#838383; font-size:9pt;}
+.xeForum table td.title p a { font-weight:normal; text-decoration:none; color:#838383; font-size:9pt;}
+
+.xeForum table td.topic, .xeForum td.replies, .xeForum td.last_post { background:#EFEFEF url("../images/div.gif") no-repeat left 3px; }
+
+.xeForum table td.topic, .xeForum td.replies { text-align:center; color:#3A3947; font-family:tahoma; font-size:8pt; }
+
+.xeForum table td.last_post { text-align:left; color:#3A3947; font-family:tahoma; font-size:8pt; padding-left:15px; }
+.xeForum table td.last_post div.author img { vertical-align:middle; }
+.xeForum table td.last_post div.date { margin-top:5px; text-align:left; color:#3A3947; font-family:tahoma; font-size:8pt; }
+
diff --git a/widgets/forum/skins/default/images/back.gif b/widgets/forum/skins/default/images/back.gif
new file mode 100644
index 000000000..8120d20ef
Binary files /dev/null and b/widgets/forum/skins/default/images/back.gif differ
diff --git a/widgets/forum/skins/default/images/div.gif b/widgets/forum/skins/default/images/div.gif
new file mode 100644
index 000000000..22948e423
Binary files /dev/null and b/widgets/forum/skins/default/images/div.gif differ
diff --git a/widgets/forum/skins/default/images/icon.gif b/widgets/forum/skins/default/images/icon.gif
new file mode 100644
index 000000000..f9a69477f
Binary files /dev/null and b/widgets/forum/skins/default/images/icon.gif differ
diff --git a/widgets/forum/skins/default/images/icon_new.gif b/widgets/forum/skins/default/images/icon_new.gif
new file mode 100644
index 000000000..454fad1fe
Binary files /dev/null and b/widgets/forum/skins/default/images/icon_new.gif differ
diff --git a/widgets/forum/skins/default/images/lb.gif b/widgets/forum/skins/default/images/lb.gif
new file mode 100644
index 000000000..993f47c8d
Binary files /dev/null and b/widgets/forum/skins/default/images/lb.gif differ
diff --git a/widgets/forum/skins/default/images/lt.gif b/widgets/forum/skins/default/images/lt.gif
new file mode 100644
index 000000000..02fbc3c4c
Binary files /dev/null and b/widgets/forum/skins/default/images/lt.gif differ
diff --git a/widgets/forum/skins/default/images/rb.gif b/widgets/forum/skins/default/images/rb.gif
new file mode 100644
index 000000000..2e41a85d9
Binary files /dev/null and b/widgets/forum/skins/default/images/rb.gif differ
diff --git a/widgets/forum/skins/default/images/replies.gif b/widgets/forum/skins/default/images/replies.gif
new file mode 100644
index 000000000..78ba5d8d8
Binary files /dev/null and b/widgets/forum/skins/default/images/replies.gif differ
diff --git a/widgets/forum/skins/default/images/rt.gif b/widgets/forum/skins/default/images/rt.gif
new file mode 100644
index 000000000..6c1ad7fa9
Binary files /dev/null and b/widgets/forum/skins/default/images/rt.gif differ
diff --git a/widgets/forum/skins/default/images/top_bg.gif b/widgets/forum/skins/default/images/top_bg.gif
new file mode 100644
index 000000000..65e69d535
Binary files /dev/null and b/widgets/forum/skins/default/images/top_bg.gif differ
diff --git a/widgets/forum/skins/default/list.html b/widgets/forum/skins/default/list.html
new file mode 100644
index 000000000..9d1f8f601
--- /dev/null
+++ b/widgets/forum/skins/default/list.html
@@ -0,0 +1,47 @@
+
+
+
+

+

+
+
+
+
+
+
+
+
+
+ | {$widget_info->title} |
+ {$lang->topic} |
+ {$lang->replies} |
+ {$lang->last_post} |
+
+
+
+  |
+
+ {$val->title}
+ {$val->description}
+ |
+ {number_format($val->document_count)} |
+ {number_format($val->comment_count)} |
+
+
+
+
+ 
+
+ {zdate($val->last_comment->regdate,"Y-m-d H:i")}
+
+
+
+ |
+
+
+
+
+

+

+
+
diff --git a/widgets/forum/skins/default/skin.xml b/widgets/forum/skins/default/skin.xml
new file mode 100644
index 000000000..49b25ddb0
--- /dev/null
+++ b/widgets/forum/skins/default/skin.xml
@@ -0,0 +1,33 @@
+
+
+ 기본 포럼형 위젯 스킨
+ 기본 포럼형 위젯 스킨
+ 기본 포럼형 위젯 스킨
+ 기본 포럼형 위젯 스킨
+
+ 제로
+ zero
+ zero
+ zero
+
+ 포럼형 위젯의 기본 스킨입니다.
+
+
+ 포럼형 위젯의 기본 스킨입니다.
+
+
+ 포럼형 위젯의 기본 스킨입니다.
+
+
+ 포럼형 위젯의 기본 스킨입니다.
+
+
+
+
+ 흰색 바탕용
+ 白い背景用
+ 白色背景
+ White Background
+
+
+