css 및 js 호출순서 조정기능 추가

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@5785 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ngleader 2009-03-06 05:33:56 +00:00
parent 4f380d9c48
commit 61851f1dfe
2149 changed files with 109090 additions and 18689 deletions

View file

@ -19,48 +19,23 @@
function dispCommentAdminList() {
// 목록을 구하기 위한 옵션
$args->page = Context::get('page'); ///< 페이지
$args->list_count = 50; ///< 한페이지에 보여줄 글 수
$args->list_count = 30; ///< 한페이지에 보여줄 글 수
$args->page_count = 10; ///< 페이지 네비게이션에 나타날 페이지의 수
$args->sort_index = 'list_order'; ///< 소팅 값
$args->module_srl = Context::get('module_srl');
// mid목록을 구함
$oModuleModel = &getModel('module');
$mid_list = $oModuleModel->getMidList();
Context::set('mid_list', $mid_list);
// 목록 구함, comment->getCommentList 에서 걍 알아서 다 해버리는 구조이다... (아.. 이거 나쁜 버릇인데.. ㅡ.ㅜ 어쩔수 없다)
$oCommentModel = &getModel('comment');
$output = $oCommentModel->getTotalCommentList($args);
// 목록의 loop를 돌면서 mid를 구하기 위한 module_srl값을 구함
$comment_count = count($output->data);
if($comment_count) {
$module_srl_list = array();
foreach($output->data as $key => $val) {
$module_srl = $val->module_srl;
if(!in_array($module_srl, $module_srl_list)) $module_srl_list[] = $module_srl;
}
if(count($module_srl_list)) {
$args->module_srls = implode(',',$module_srl_list);
$mid_output = executeQuery('module.getModuleInfoByModuleSrl', $args);
if($mid_output->data && !is_array($mid_output->data)) $mid_output->data = array($mid_output->data);
for($i=0;$i<count($mid_output->data);$i++) {
$mid_info = $mid_output->data[$i];
$module_list[$mid_info->module_srl] = $mid_info;
}
}
}
// 템플릿에 쓰기 위해서 comment_model::getTotalCommentList() 의 return object에 있는 값들을 세팅
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('comment_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
Context::set('module_list', $module_list);
// 템플릿 지정
$this->setTemplatePath($this->module_path.'tpl');
@ -73,7 +48,7 @@
function dispCommentAdminDeclared() {
// 목록을 구하기 위한 옵션
$args->page = Context::get('page'); ///< 페이지
$args->list_count = 50; ///< 한페이지에 보여줄 글 수
$args->list_count = 30; ///< 한페이지에 보여줄 글 수
$args->page_count = 10; ///< 페이지 네비게이션에 나타날 페이지의 수
$args->sort_index = 'comment_declared.declared_count'; ///< 소팅 값

View file

@ -15,8 +15,6 @@
function moduleInstall() {
// action forward에 등록 (관리자 모드에서 사용하기 위함)
$oModuleController = &getController('module');
$oModuleController->insertActionForward('comment', 'view', 'dispCommentAdminList');
$oModuleController->insertActionForward('comment', 'view', 'dispCommentAdminDeclared');
// 2007. 10. 17 게시글이 삭제될때 댓글도 삭제되도록 trigger 등록
$oModuleController->insertTrigger('document.deleteDocument', 'comment', 'controller', 'triggerDeleteDocumentComments', 'after');
@ -47,8 +45,6 @@
if(!$oDB->isColumnExists("comments","voted_count")) return true;
if(!$oDB->isColumnExists("comments","notify_message")) return true;
if(!$oModuleModel->getActionForward('dispCommentAdminDeclared')) return true;
// 2008. 02. 22 모듈의 추가 설정에서 댓글 추가 설정 추가
if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'comment', 'view', 'triggerDispCommentAdditionSetup', 'before')) return true;
@ -85,9 +81,6 @@
$oDB->addColumn("comments","notify_message", "char","1");
}
if(!$oModuleModel->getActionForward('dispCommentAdminDeclared'))
$oModuleController->insertActionForward('comment', 'view', 'dispCommentAdminDeclared');
// 2008. 02. 22 모듈의 추가 설정에서 댓글 추가 설정 추가
if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'comment', 'view', 'triggerDispCommentAdditionSetup', 'before'))
$oModuleController->insertTrigger('module.dispAdditionSetup', 'comment', 'view', 'triggerDispCommentAdditionSetup', 'before');

View file

@ -118,6 +118,9 @@
}
}
// 로그인정보가 없고 사용자 이름이 없으면 오류 표시
if(!$logged_info->member_srl && !$obj->nick_name) return new Object(-1,'msg_invalid_request');
if(!$obj->comment_srl) $obj->comment_srl = getNextSequence();
// 순서를 정함

View file

@ -115,7 +115,7 @@
// 변수 정리
if($type) $title = "[".$type."] ";
$title .= cut_str(strip_tags($content), 10, '...');
$title .= cut_str(strip_tags($content), 30, '...');
$content = sprintf('%s<br /><br />from : <a href="%s#comment_%s" onclick="window.open(this.href);return false;">%s</a>',$content, $oDocument->getPermanentUrl(), $this->get('comment_srl'), $oDocument->getPermanentUrl());
$receiver_srl = $this->get('member_srl');
$sender_member_srl = $logged_info->member_srl;
@ -238,6 +238,11 @@
return zdate($this->get('last_update'), $format);
}
function getPermanentUrl() {
return getUrl('','document_srl',$this->get('document_srl')).'#comment_'.$this->get('comment_srl');
}
function getUpdateTime() {
$year = substr($this->get('last_update'),0,4);
$month = substr($this->get('last_update'),4,2);
@ -310,5 +315,95 @@
return $signature;
}
function thumbnailExists($width = 80, $height = 0, $type = '') {
if(!$this->comment_srl) return false;
if(!$this->getThumbnail($width, $height, $type)) return false;
return true;
}
function getThumbnail($width = 80, $height = 0, $thumbnail_type = '') {
// 존재하지 않는 문서일 경우 return false
if(!$this->comment_srl) return;
// 높이 지정이 별도로 없으면 정사각형으로 생성
if(!$height) $height = $width;
// 첨부파일이 없거나 내용중 이미지가 없으면 return false;
if(!$this->hasUploadedFiles() && !preg_match("!<img!is", $this->get('content'))) return;
// 문서 모듈의 기본 설정에서 Thumbnail의 생성 방법을 구함
if(!in_array($thumbnail_type, array('crop','ratio'))) $thumbnail_type = 'crop';
// 썸네일 정보 정의
$thumbnail_path = sprintf('files/cache/thumbnails/%s',getNumberingPath($this->comment_srl, 3));
$thumbnail_file = sprintf('%s%dx%d.%s.jpg', $thumbnail_path, $width, $height, $thumbnail_type);
$thumbnail_url = Context::getRequestUri().$thumbnail_file;
// 썸네일 파일이 있을 경우 파일의 크기가 0 이면 return false 아니면 경로 return
if(file_exists($thumbnail_file)) {
if(filesize($thumbnail_file)<1) return false;
else return $thumbnail_url;
}
// 대상 파일
$source_file = null;
$is_tmp_file = false;
// 첨부된 파일중 이미지 파일이 있으면 찾음
if($this->hasUploadedFiles()) {
$file_list = $this->getUploadedFiles();
if(count($file_list)) {
foreach($file_list as $file) {
if($file->direct_download!='Y') continue;
if(!preg_match("/\.(jpg|png|jpeg|gif|bmp)$/i",$file->source_filename)) continue;
$source_file = $file->uploaded_filename;
if(!file_exists($source_file)) $source_file = null;
else break;
}
}
}
// 첨부된 파일이 없으면 내용중 이미지 파일을 구함
if(!$source_file) {
$content = $this->get('content');
$target_src = null;
preg_match_all("!src=(\"|')([^\"' ]*?)(\"|')!is", $content, $matches, PREG_SET_ORDER);
$cnt = count($matches);
for($i=0;$i<$cnt;$i++) {
$target_src = $matches[$i][2];
if(preg_match('/\/(common|modules|widgets|addons|layouts)\//i', $target_src)) continue;
else {
if(!preg_match('/^(http|https):\/\//i',$target_src)) $target_src = Context::getRequestUri().$target_src;
$tmp_file = sprintf('./files/cache/tmp/%d', md5(rand(111111,999999).$this->comment_srl));
if(!is_dir('./files/cache/tmp')) FileHandler::makeDir('./files/cache/tmp');
FileHandler::getRemoteFile($target_src, $tmp_file);
if(!file_exists($tmp_file)) continue;
else {
list($_w, $_h, $_t, $_a) = @getimagesize($tmp_file);
if($_w<$width || $_h<$height) continue;
$source_file = $tmp_file;
$is_tmp_file = true;
break;
}
}
}
}
$output = FileHandler::createImageFile($source_file, $thumbnail_file, $width, $height, 'jpg', $thumbnail_type);
if($is_tmp_file) FileHandler::removeFile($source_file);
// 썸네일 생성 성공시 경로 return
if($output) return $thumbnail_url;
// 차후 다시 썸네일 생성을 시도하지 않기 위해 빈 파일을 생성
else FileHandler::writeFile($thumbnail_file, '','w');
return;
}
}
?>

View file

@ -333,8 +333,8 @@
$args->s_module_srl = $obj->module_srl;
// 검색 옵션 정리
$search_target = trim(Context::get('search_target'));
$search_keyword = trim(Context::get('search_keyword'));
$search_target = $obj->search_target?$obj->search_target:trim(Context::get('search_target'));
$search_keyword = $obj->search_keyword?$obj->search_keyword:trim(Context::get('search_keyword'));
if($search_target && $search_keyword) {
switch($search_target) {
case 'content' :
@ -393,7 +393,7 @@
function getCommentConfig($module_srl) {
$oModuleModel = &getModel('module');
$comment_config = $oModuleModel->getModulePartConfig('comment', $module_srl);
if(!isset($comment_config->comment_count)) $comment_count->comment_count = 50;
if(!isset($comment_config->comment_count)) $comment_config->comment_count = 50;
return $comment_config;
}

View file

@ -2,7 +2,7 @@
<module version="0.2">
<title xml:lang="ko">댓글</title>
<title xml:lang="jp">コメント</title>
<title xml:lang="zh-CN">评论</title>
<title xml:lang="zh-CN">评论管理</title>
<title xml:lang="en">Comment</title>
<title xml:lang="es">Commentarios</title>
<title xml:lang="ru">Комментарии</title>
@ -16,7 +16,7 @@
<description xml:lang="zh-TW">管理討論板或部落格評論的模組。</description>
<version>0.1</version>
<date>2007-02-28</date>
<category>utility</category>
<category>content</category>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>

View file

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<module>
<grants />
<permissions />
<actions>
<action name="getCommentMenu" type="model" standalone="true"/>
<action name="dispCommentAdminList" type="view" admin_index="true" standalone="true" />

View file

@ -27,6 +27,6 @@
'homepage' => '主頁',
'regdate' => '日期',
'last_update' => '最後更新',
'ipaddress' => 'IP 位址',
'ipaddress' => 'IP位址',
);
?>

View file

@ -6,7 +6,7 @@
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="module_srl" var="s_module_srl" />
<condition operation="in" column="module_srl" var="s_module_srl" />
<group pipe="and">
<condition operation="like" column="content" var="s_content" pipe="or" />
<condition operation="like" column="user_name" var="s_user_name" pipe="or" />

View file

@ -1,63 +1,59 @@
<!--%import("filter/delete_checked.xml")-->
<!--#include("./header.html")-->
<!-- 정보 -->
<div class="summary">
<strong>Total</strong> <em>{number_format($total_count)}</em>, Page <strong>{number_format($page)}</strong>/{number_format($total_page)}
<!-- 검색 -->
<div class="fl">
<form action="./" method="get" class="adminSearch">
<input type="hidden" name="module" value="{$module}" />
<input type="hidden" name="act" value="{$act}" />
<input type="hidden" name="module_srl" value="{$module_srl}" />
<fieldset>
<select name="search_target">
<option value="">{$lang->search_target}</option>
<!--@foreach($lang->search_target_list as $key => $val)-->
<option value="{$key}" <!--@if($search_target==$key)-->selected="selected"<!--@end-->>{$val}</option>
<!--@end-->
</select>
<input type="text" name="search_keyword" value="{htmlspecialchars($search_keyword)}" class="inputTypeText" />
<span class="button blue"><input type="submit" value="{$lang->cmd_search}" /></span>
<a href="{getUrl('','module',$module,'act',$act)}" class="button black"><span>{$lang->cmd_cancel}</span></a>
</fieldset>
</form>
</div>
<form id="fo_list" action="./" method="get" onsubmit="return procFilter(this, delete_checked)">
<input type="hidden" name="page" value="{$page}" />
<!-- 모듈 선택 -->
<div class="fr">
<a href="{getUrl('','module','module','act','dispModuleSelectList','id','target_module','type','single')}" onclick="popopen(this.href,'ModuleSelect');return false;" class="button green"><span>{$lang->cmd_find_module}</span></a>
<span class="button red"><input type="submit" value="{$lang->cmd_delete_checked_comment}" /></span>
</div>
<!-- 목록 -->
<table cellspacing="0" class="adminTable">
<table cellspacing="0" class="crossTable clear">
<caption>Total {number_format($total_count)}, Page {number_format($page)}/{number_format($total_page)}</caption>
<thead>
<tr>
<th scope="col"><div>{$lang->no}</div></th>
<th scope="col"><div><input type="checkbox" onclick="XE.checkboxToggleAll(); return false;" /></div></th>
<th scope="col" class="wide">
<div>
<select name="module_srl" id="module_srl">
<option value="">{$lang->module}</option>
<!--@foreach($mid_list as $key => $val)-->
<option value="{$val->module_srl}" <!--@if($module_srl == $val->module_srl)-->selected="selected"<!--@end-->>{$val->browser_title}</option>
<!--@end-->
</select>
<input type="button" name="go_button" id="go_button" value="GO" class="buttonTypeGo" onclick="location.href=current_url.setQuery('module_srl',xGetElementById('module_srl').options[xGetElementById('module_srl').selectedIndex].value);return false;"/>
</div>
</th>
<th scope="col" class="wide"><div>{$lang->comment}</div></th>
<th scope="col"><div>{$lang->nick_name}</div></th>
<th scope="col"><div>{$lang->date}</div></th>
<th scope="col"><div>{$lang->last_update}</div></th>
<th scope="col"><div>{$lang->ipaddress}</div></th>
<th scope="col"><div>{$lang->cmd_move}</div></th>
</tr>
</thead>
<tbody>
<!--@foreach($comment_list as $no => $val)-->
<tr>
<td rowspan="2" class="number center">{$no}</td>
<td colspan="2"><a href="./?mid={$module_list[$val->module_srl]->mid}" onclick="window.open(this.href);return false">{htmlspecialchars($module_list[$val->module_srl]->browser_title)}</a>&nbsp;</td>
<td class="number center">{$no}</td>
<td class="center"><input type="checkbox" name="cart" value="{$val->comment_srl}" /></td>
<td class="left"><a href="{getUrl('','document_srl',$val->document_srl)}#comment_{$val->comment_srl}" onclick="window.open(this.href);return false;">{cut_str(htmlspecialchars(strip_tags($val->content)),200,'...')}</a></td>
<td class="nowrap"><span class="member_{$val->member_srl}">{htmlspecialchars($val->nick_name)}</span></td>
<td class="date center nowrap">{(zdate($val->regdate,"Y-m-d\nH:i:s"))}</td>
<td class="date center nowrap"><!--@if($val->last_update)-->{(zdate($val->last_update, "Y-m-d\nH:i:s"))}<!--@else-->&nbsp;<!--@end--></td>
<td class="number center nowrap">{$val->ipaddress}</td>
<td class="view center"><a href="{getUrl('','document_srl',$val->document_srl)}#comment_{$val->comment_srl}" onclick="window.open(this.href);return false;">{$lang->cmd_move}</a></td>
</tr>
<tr>
<td class="center"><input type="checkbox" name="cart" value="{$val->comment_srl}" /></td>
<td colspan="6" class="left">
{cut_str(htmlspecialchars(strip_tags($val->content)),100,'...')}
</td>
<td class="number left nowrap"><a href="{getUrl('search_target','ipaddress','search_keyword',$val->ipaddress)}">{$val->ipaddress}</a></td>
</tr>
<!--@end-->
<tr>
<td colspan="8">
<a href="javascript:XE.checkboxToggleAll({ checked:false })" class="button"><span>{$lang->cmd_unselect_all}</span></a>
<a href="javascript:XE.checkboxToggleAll()" class="button"><span>{$lang->cmd_reverse_all}</span></a>
<span class="button"><input type="submit" value="{$lang->cmd_delete_checked_comment}" /></span>
</td>
</tr>
</tbody>
</table>
@ -76,21 +72,3 @@
<a href="{getUrl('page',$page_navigation->last_page,'module_srl',$module_srl)}" class="nextEnd">{$lang->last_page}</a>
</div>
<!-- 검색 -->
<form action="./" method="get" class="adminSearch">
<input type="hidden" name="module" value="{$module}" />
<input type="hidden" name="act" value="{$act}" />
<input type="hidden" name="module_srl" value="{$module_srl}" />
<fieldset>
<select name="search_target">
<option value="">{$lang->search_target}</option>
<!--@foreach($lang->search_target_list as $key => $val)-->
<option value="{$key}" <!--@if($search_target==$key)-->selected="selected"<!--@end-->>{$val}</option>
<!--@end-->
</select>
<input type="text" name="search_keyword" value="{htmlspecialchars($search_keyword)}" class="inputTypeText" />
<span class="button"><input type="submit" value="{$lang->cmd_search}" /></span>
<a href="{getUrl('','module',$module,'act',$act)}" class="button"><span>{$lang->cmd_cancel}</span></a>
</fieldset>
</form>

View file

@ -3,19 +3,19 @@
<form action="./" method="post" onsubmit="return procFilter(this, insert_comment_module_config)">
<input type="hidden" name="target_module_srl" value="{$module_info->module_srl?$module_info->module_srl:$module_srls}" />
<table cellspacing="0" class="adminTable">
<caption>{$lang->comment}</caption>
<h4 class="xeAdmin">{$lang->comment}</h4>
<p class="summary">{$lang->about_comment_count}</p>
<table cellspacing="0" class="rowTable">
<tr>
<th><div>{$lang->comment_count}</div></th>
<td class="wide">
<input type="text" name="comment_count" value="{$comment_config->comment_count}" class="inputTypeText w80" />
<p>{$lang->about_comment_count}</p>
</td>
</tr>
<tr>
<td class="right" colspan="2">
<span class="button"><input type="submit" value="{$lang->cmd_save}"/></span>
</td>
<th colspan="2" class="button">
<span class="button strong black"><input type="submit" value="{$lang->cmd_save}"/></span>
</th>
</tr>
</table>

View file

@ -1,16 +1,12 @@
<!--%import("filter/delete_checked.xml")-->
<!--#include("header.html")-->
<!-- 정보 -->
<div class="summary">
<strong>Total</strong> <em>{number_format($total_count)}</em>, Page <strong>{number_format($page)}</strong>/{number_format($total_page)}
</div>
<form id="fo_list" action="./" method="get" onsubmit="return procFilter(this, delete_checked)">
<input type="hidden" name="page" value="{$page}" />
<!-- 목록 -->
<table cellspacing="0" class="adminTable">
<table cellspacing="0" class="crossTable">
<caption>Total {number_format($total_count)}, Page {number_format($page)}/{number_format($total_page)}</caption>
<thead>
<tr>
<th scope="col"><div><input type="checkbox" onclick="XE.checkboxToggleAll(); return false;" /></div></th>
@ -19,28 +15,26 @@
<th scope="col"><div>{$lang->date}</div></th>
<th scope="col"><div>{$lang->cmd_declare}</div></th>
<th scope="col"><div>{$lang->ipaddress}</div></th>
<th scope="col"><div>{$lang->cmd_move}</div></th>
</tr>
</thead>
<tbody>
<!--@foreach($comment_list as $no => $oComment)-->
<tr>
<td class="number center">{$no}</td>
<td><input type="checkbox" name="cart" value="{$oComment->get('comment_srl')}" /> {$oComment->getSummary(100)}</td>
<td>{$no}</td>
<td><input type="checkbox" name="cart" value="{$oComment->get('comment_srl')}" /> <a href="{getUrl('','document_srl',$oComment->get('document_srl'))}#comment_{$oComment->get('comment_srl')}" onclick="window.open(this.href);return false;">{$oComment->getSummary(100)}</a></td>
<td><span class="member_{$oComment->getMemberSrl()}">{$oComment->getNickName()}</span></td>
<td class="date nowrap center">{$oComment->getRegdate("Y-m-d")}</td>
<td class="alert center number"><strong>{$oComment->get('declared_count')}</strong></td>
<td class="number center">{$oComment->get('ipaddress')}</td>
<td class="view center"><a href="{getUrl('','document_srl',$oComment->get('document_srl'))}#comment_{$oComment->get('comment_srl')}" onclick="window.open(this.href);return false;">{$lang->cmd_move}</a></td>
<td>{$oComment->getRegdate("Y-m-d")}</td>
<td><strong>{$oComment->get('declared_count')}</strong></td>
<td>{$oComment->get('ipaddress')}</td>
</tr>
<!--@end-->
<tr>
<td colspan="7" class="right">
<a href="#" onclick="doCancelDeclare();return false;" class="button"><span>{$lang->cmd_cancel_declare}</span></a>
<th colspan="6" class="button">
<a href="#" onclick="doCancelDeclare();return false;" class="button strong black"><span>{$lang->cmd_cancel_declare}</span></a>
<a href="javascript:XE.checkboxToggleAll({ checked:true })" class="button"><span>{$lang->cmd_select_all}</span></a>
<a href="javascript:XE.checkboxToggleAll()" class="button"><span>{$lang->cmd_reverse_all}</span></a>
<span class="button"><input type="submit" value="{$lang->cmd_delete_checked_comment}" /></span>
</td>
</th>
</tr>
</tbody>
</table>

View file

@ -1,6 +1,6 @@
<!--%import("js/comment_admin.js")-->
<h3>{$lang->comment} <span class="gray">{$lang->cmd_management}</span></h3>
<h3 class="xeAdmin">{$lang->comment} <span class="gray">{$lang->cmd_management}</span></h3>
<div class="header4 gap1">
<ul class="localNavigation">

View file

@ -12,3 +12,7 @@ function doCancelDeclare() {
exec_xml('comment','procCommentAdminCancelDeclare', params, function() { location.reload(); });
}
function insertSelectedModule(id, module_srl, mid, browser_title) {
location.href = current_url.setQuery('module_srl',module_srl);
}