위젯 검출 정규 표현식을 수정

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@2892 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2007-11-01 10:28:42 +00:00
parent f9896fe51a
commit 90aa62a6ac
993 changed files with 9190 additions and 10457 deletions

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<module version="0.1">
<module version="0.1" category="utility">
<title xml:lang="ko">엮인글</title>
<title xml:lang="zh-CN">引用</title>
<title xml:lang="jp">トラックバック</title>

View file

@ -2,9 +2,14 @@
<module>
<grants />
<actions>
<action name="dispTrackbackSend" type="view" standalone="true" />
<action name="dispTrackbackAdminList" type="view" admin_index="true" standalone="true" />
<action name="trackback" type="controller" standalone="true" />
<action name="procTrackbackSend" type="controller" standalone="true" />
<action name="procTrackbackAdminDeleteChecked" type="controller" standalone="true" />
<action name="procTrackbackAdminInsertConfig" type="controller" standalone="true" />
<action name="trackback" type="controller" standalone="true" />
<action name="procTrackbackAdminInsertModuleConfig" type="controller" standalone="true" />
</actions>
</module>

View file

@ -10,6 +10,10 @@
$lang->msg_cart_is_null = '삭제할 글을 선택해주세요';
$lang->msg_checked_trackback_is_deleted = '%d개의 엮인글이 삭제되었습니다';
$lang->send_trackback_url = '발송할 주소';
$lang->msg_trackback_url_is_invalid = '발송할 대상 url이 올바르지 않습니다';
$lang->msg_trackback_send_success = '엮인글 발송을 성공하였습니다';
$lang->search_target_list = array(
'url' => '대상 URL',
'blog_name' => '대상 사이트 이름',

View file

@ -0,0 +1,7 @@
<filter name="insert_trackback_module_config" module="trackback" act="procTrackbackAdminInsertModuleConfig" confirm_msg_code="confirm_submit">
<form />
<response>
<tag name="error" />
<tag name="message" />
</response>
</filter>

View file

@ -0,0 +1,9 @@
<filter name="send_trackback" module="trackback" act="procTrackbackSend">
<form>
<node target="target_srl" required="true" />
<node target="trackback_url" required="true" />
<node target="charset" required="true" />
</form>
<parameter />
<response />
</filter>

View file

@ -0,0 +1,47 @@
<!--%import("filter/send_trackback.xml")-->
<div id="popHeadder">
<h1>{$lang->cmd_send_trackback}</h1>
</div>
<form action="./" method="get" onsubmit="return procFilter(this, send_trackback)">
<input type="hidden" name="target_srl" value="{$oDocument->document_srl}" />
<div id="popBody">
<table cellspacing="0" class="adminTable">
<col width="130" />
<col />
<tr>
<th scope="row"><label>{$lang->title}</label></th>
<td>{$oDocument->getTitleText()}</td>
</tr>
<tr>
<th scope="row"><label>{$lang->content}</label></th>
<td>{$oDocument->getSummary()}</td>
</tr>
<tr>
<th scope="row"><label for="textfield1">{$lang->send_trackback_url}</label></th>
<td>
<input type="text" id="textfield1" name="trackback_url" value="" class="inputTypeText w300" />
<select name="charset">
<option value='UTF-8'>UTF-8</option>
<option value='EUC-KR'>EUC-KR</option>
<option value='EUC-JP'>EUC-JP</option>
<option value='SHIFT_JIS'>SHIFT_JIS</option>
<option value='EUC-CN'>EUC-CN</option>
<option value='HZ'>HZ</option>
<option value='BIG5'>BIG5</option>
</select>
</td>
</tr>
</table>
</div>
<div id="popFooter">
<div class="tCenter gap1">
<a href="#" onclick="window.close(); return false;" class="button"><span>{$lang->cmd_close}</span></a>
<span class="button"><input type="submit" value="{$lang->cmd_send_trackback}" /></span>
</div>
</div>
</form>

View file

@ -4,23 +4,22 @@
<h3>{$lang->trackback} <span class="gray">{$lang->cmd_management}</span></h3>
<div class="gap1"></div>
<form action="./" method="get" onsubmit="return procFilter(this, insert_config)">
<table cellspacing="0" class="tableType2 gap1">
<table cellspacing="0" class="adminTable">
<col width="150" />
<col />
<col width="100" />
<tr>
<th scope="col">{$lang->enable_trackback}</th>
<td>
<input type="checkbox" name="enable_trackback" value="Y" size="3" <!--@if($config->enable_trackback!='N')-->checked="checked"<!--@end-->/> {$lang->cmd_use}
<p>{$lang->about_enable_trackback}</p>
</td>
<th scope="col" class="centerButton"><span class="button"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span></th>
</tr>
</table>
<!-- 버튼 -->
<div class="tRight gap1">
<span class="button"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
</div>
</form>
<!-- 정보 -->
@ -32,19 +31,27 @@
<input type="hidden" name="page" value="{$page}" />
<!-- 목록 -->
<table cellspacing="0" class="tableType4">
<table cellspacing="0" class="adminTable">
<col width="50" />
<col />
<col />
<col />
<col width="80" />
<col width="70" />
<col width="50" />
<thead>
<tr>
<th scope="col">{$lang->no}</th>
<th scope="col">
<div class="nowrap">
<input type="checkbox" onclick="checkboxSelectAll(this.form, 'cart'); return false;" />
<select name="module_srl" class="mid_list" id="module_srl">
<input type="checkbox" onclick="checkboxSelectAll(this.form, 'cart'); return false;" />
<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><a href="#" onclick="location.href=current_url.setQuery('module_srl',xGetElementById('module_srl').options[xGetElementById('module_srl').selectedIndex].value);return false;" class="button"><span>GO</span></a>
</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">{$lang->blog_name}</th>
@ -65,7 +72,7 @@
<td>{htmlspecialchars($val->title)}</td>
<td class="tahoma">{zdate($val->regdate,"Y-m-d")}</td>
<td class="tahoma">{$val->ipaddress}</td>
<td class="blue"><a href="{getUrl('','document_srl',$val->document_srl)}#trackback_{$val->trackback_srl}')" onclick="window.open(this.href);return false;">{$lang->cmd_move}</a></td>
<td class="blue"><a href="{getUrl('','document_srl',$val->document_srl)}#trackback_{$val->trackback_srl}" onclick="window.open(this.href);return false;">{$lang->cmd_move}</a></td>
</tr>
<tr>
<td colspan="6">

View file

@ -0,0 +1,18 @@
<!--%import("filter/insert_trackback_module_config.xml")-->
<form action="./" method="post" onsubmit="return procFilter(this, insert_trackback_module_config)">
<input type="hidden" name="target_module_srl" value="{$trackback_config->module_srl}" />
<table cellspacing="0" class="adminTable">
<col width="150" />
<col />
<col width="100" />
<caption>{$lang->trackback}</caption>
<tr>
<th>{$lang->enable_trackback}</th>
<td><input type="checkbox" name="enable_trackback" value="Y" <!--@if($trackback_config->enable_trackback == "Y")-->checked="checked"<!--@end--> /></td>
<th class="centerButton"><span class="button"><input type="submit" value="{$lang->cmd_save}"/></span></th>
</tr>
</table>
</form>
<div class="gap1"></div>

View file

@ -37,21 +37,14 @@
$this->setMessage( sprintf(Context::getLang('msg_checked_trackback_is_deleted'), $trackback_count) );
}
/**
* @brief 모듈에 속한 모든 트랙백 삭제
**/
function deleteModuleTrackbacks($module_srl) {
// 삭제
$args->module_srl = $module_srl;
$output = executeQuery('trackback.deleteModuleTrackbacks', $args);
return $output;
}
/**
* @brief 설정 저장
**/
function procTrackbackAdminInsertConfig() {
// 기존 설정을 가져옴
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('trackback');
$config->enable_trackback = Context::get('enable_trackback');
if($config->enable_trackback != 'Y') $config->enable_trackback = 'N';
@ -61,5 +54,48 @@
return $output;
}
/**
* @brief Trackback 모듈별 설정
**/
function procTrackbackAdminInsertModuleConfig() {
// 필요한 변수를 받아옴
$module_srl = Context::get('target_module_srl');
$enable_trackback = Context::get('enable_trackback');
if(!in_array($enable_trackback, array('Y','N'))) $enable_trackback = 'N';
if(!$module_srl || !$enable_trackback) return new Object(-1, 'msg_invalid_request');
// 설정 저장
$output = $this->setTrackbackModuleConfig($module_srl, $enable_trackback);
$this->setMessage('success_registed');
}
/**
* @brief Trackback 모듈별 설정 함수
**/
function setTrackbackModuleConfig($module_srl, $enable_trackback) {
$oModuleModel = &getModel('module');
$oModuleController = &getController('module');
$trackback_config = $oModuleModel->getModuleConfig('trackback');
$trackback_config->module_config[$module_srl]->module_srl = $module_srl;
$trackback_config->module_config[$module_srl]->enable_trackback = $enable_trackback;
$oModuleController->insertModuleConfig('trackback', $trackback_config);
return new Object();
}
/**
* @brief 모듈에 속한 모든 트랙백 삭제
**/
function deleteModuleTrackbacks($module_srl) {
// 삭제
$args->module_srl = $module_srl;
$output = executeQuery('trackback.deleteModuleTrackbacks', $args);
return $output;
}
}
?>

View file

@ -16,6 +16,18 @@
$oModuleController->insertActionForward('trackback', 'controller', 'trackback');
$oModuleController->insertActionForward('trackback', 'view', 'dispTrackbackAdminList');
// 2007. 10. 17 게시글이 삭제될때 엮인글도 삭제되도록 trigger 등록
$oModuleController->insertTrigger('document.deleteDocument', 'trackback', 'controller', 'triggerDeleteDocumentTrackbacks', 'after');
// 2007. 10. 17 모듈이 삭제될때 등록된 엮인글도 모두 삭제하는 트리거 추가
$oModuleController->insertTrigger('module.deleteModule', 'trackback', 'controller', 'triggerDeleteModuleTrackbacks', 'after');
// 2007. 10. 18 게시글 팝업메뉴에서 엮인글 발송 기능 추가
$oModuleController->insertTrigger('document.getDocumentMenu', 'trackback', 'controller', 'triggerSendTrackback', 'after');
// 2007. 10. 19 모듈별 엮인글 받는 기능 추가
$oModuleController->insertTrigger('module.dispAdditionSetup', 'trackback', 'view', 'triggerDispTrackbackAdditionSetup', 'before');
return new Object();
}
@ -23,6 +35,20 @@
* @brief 설치가 이상이 없는지 체크하는 method
**/
function checkUpdate() {
$oModuleModel = &getModel('module');
// 2007. 10. 17 게시글이 삭제될때 댓글도 삭제되도록 trigger 등록
if(!$oModuleModel->getTrigger('document.deleteDocument', 'trackback', 'controller', 'triggerDeleteDocumentTrackbacks', 'after')) return true;
// 2007. 10. 17 모듈이 삭제될때 등록된 엮인글도 모두 삭제하는 트리거 추가
if(!$oModuleModel->getTrigger('module.deleteModule', 'trackback', 'controller', 'triggerDeleteModuleTrackbacks', 'after')) return true;
// 2007. 10. 18 게시글 팝업메뉴에서 엮인글 발송 기능 추가
if(!$oModuleModel->getTrigger('document.getDocumentMenu', 'trackback', 'controller', 'triggerSendTrackback', 'after')) return true;
// 2007. 10. 19 모듈별 엮인글 받는 기능 추가
if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'trackback', 'view', 'triggerDispTrackbackAdditionSetup', 'before')) return true;
return false;
}
@ -30,7 +56,26 @@
* @brief 업데이트 실행
**/
function moduleUpdate() {
return new Object();
$oModuleModel = &getModel('module');
$oModuleController = &getController('module');
// 2007. 10. 17 게시글이 삭제될때 댓글도 삭제되도록 trigger 등록
if(!$oModuleModel->getTrigger('document.deleteDocument', 'trackback', 'controller', 'triggerDeleteDocumentTrackbacks', 'after'))
$oModuleController->insertTrigger('document.deleteDocument', 'trackback', 'controller', 'triggerDeleteDocumentTrackbacks', 'after');
// 2007. 10. 17 모듈이 삭제될때 등록된 엮인글도 모두 삭제하는 트리거 추가
if(!$oModuleModel->getTrigger('module.deleteModule', 'trackback', 'controller', 'triggerDeleteModuleTrackbacks', 'after'))
$oModuleController->insertTrigger('module.deleteModule', 'trackback', 'controller', 'triggerDeleteModuleTrackbacks', 'after');
// 2007. 10. 18 게시글 팝업메뉴에서 엮인글 발송 기능 추가
if(!$oModuleModel->getTrigger('document.getDocumentMenu', 'trackback', 'controller', 'triggerSendTrackback', 'after'))
$oModuleController->insertTrigger('document.getDocumentMenu', 'trackback', 'controller', 'triggerSendTrackback', 'after');
// 2007. 10. 19 모듈별 엮인글 받는 기능 추가
if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'trackback', 'view', 'triggerDispTrackbackAdditionSetup', 'before'))
$oModuleController->insertTrigger('module.dispAdditionSetup', 'trackback', 'view', 'triggerDispTrackbackAdditionSetup', 'before');
return new Object(0, 'success_updated');
}
/**

View file

@ -13,18 +13,98 @@
function init() {
}
/**
* @brief 트랙백 발송
**/
function procTrackbackSend() {
// 게시물 번호와 발송하려는 엮인글 주소를 구함
$document_srl = Context::get('target_srl');
$trackback_url = Context::get('trackback_url');
$charset = Context::get('charset');
if(!$document_srl || !$trackback_url || !$charset) return new Object(-1, 'msg_invalid_request');
// 로그인 정보 구함
$logged_info = Context::get('logged_info');
if(!$logged_info->member_srl) return new Object(-1, 'msg_not_permitted');
// 게시물의 정보를 구해와서 있는지 여부와 권한을 체크
$oDocumentModel = &getModel('document');
$oDocument = $oDocumentModel->getDocument($document_srl);
if(!$oDocument->isExists()) return new Object(-1, 'msg_invalid_request');
if($oDocument->getMemberSrl() != $logged_info->member_srl) return new Object(-1, 'msg_not_permitted');
// 엮인글 발송
return $this->sendTrackback($oDocument, $trackback_url, $charset);
}
/**
* @brief 문서 팝업메뉴에서 엮인글을 발송하는 메뉴 추가
**/
function triggerSendTrackback(&$menu_list) {
$logged_info = Context::get('logged_info');
if(!$logged_info->member_srl) return new Object();
// 요청된 게시물 번호와 현재 로그인 정보 구함
$document_srl = Context::get('target_srl');
$oDocumentModel = &getModel('document');
$oDocument = $oDocumentModel->getDocument($document_srl);
if(!$oDocument->isExists()) return new Object();
if($oDocument->getMemberSrl() != $logged_info->member_srl) return new Object();
// 엮인글 발송 링크 추가
$menu_str = Context::getLang('cmd_send_trackback');
$menu_link = sprintf("%s?module=trackback&amp;act=dispTrackbackSend&amp;document_srl=%s",Context::getRequestUri(),$document_srl);
$menu_list[] = sprintf("\n%s,%s,popopen('%s','SendTrackback')", '', $menu_str, $menu_link);
return new Object();
}
/**
* @brief document삭제시 해당 document의 엮인글을 삭제하는 trigger
**/
function triggerDeleteDocumentTrackbacks(&$obj) {
$document_srl = $obj->document_srl;
if(!$document_srl) return new Object();
return $this->deleteTrackbacks($document_srl, true);
}
/**
* @brief module 삭제시 해당 엮인글 모두 삭제하는 trigger
**/
function triggerDeleteModuleTrackbacks(&$obj) {
$module_srl = $obj->module_srl;
if(!$module_srl) return new Object();
$oTrackbackController = &getAdminController('trackback');
return $oTrackbackController->deleteModuleTrackbacks($module_srl);
}
/**
* @brief 엮인글 입력
**/
function trackback() {
// 설정 구함
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('trackback');
if($config->enable_trackback == 'N') return $this->stop('fail');
// 출력을 XMLRPC로 설정
Context::setRequestMethod("XMLRPC");
// 엮인글 받을때 필요한 변수를 구함
$obj = Context::gets('document_srl','blog_name','url','title','excerpt');
if(!$obj->document_srl || !$obj->url || !$obj->title || !$obj->excerpt) return $this->stop('fail');
// 엮인글 모듈의 기본 설정을 받음
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('trackback');
// 현재 모듈의 설정을 구함
$module_srl = Context::get('module_srl');
$enable_trackback = $config->module_config[$module_srl]->enable_trackback;
// 설정 구함
if(!$enable_trackback) $enable_trackback = $config->enable_trackback;
// 관리자가 금지하였을 경우에는 엮인글을 받지 않음
if($enable_trackback == 'N') return $this->stop('fail');
return $this->insertTrackback($obj);
}
@ -131,13 +211,13 @@
*
* 발송 결과처리는 하지 않는 구조임
**/
function sendTrackback($document, $trackback_url, $charset) {
function sendTrackback($oDocument, $trackback_url, $charset) {
// 발송할 정보를 정리
$http = parse_url($trackback_url);
$obj->blog_name = Context::getBrowserTitle();
$obj->title = $document->title;
$obj->excerpt = cut_str(strip_tags($document->content), 240);
$obj->url = sprintf("%s?document_srl=%d", Context::getRequestUri(), $document->document_srl);
$obj->title = $oDocument->getTitleText();
$obj->excerpt = $oDocument->getSummary(200);
$obj->url = getUrl('','document_srl',$oDocument->document_srl);
// blog_name, title, excerpt, url의 문자열을 요청된 charset으로 변경
if($charset && function_exists('iconv')) {
@ -178,11 +258,11 @@
$content_length,
$content
);
if(!$http['host']||!$http['port']) return;
if(!$http['host']||!$http['port']) return new Object(-1,'msg_trackback_url_is_invalid');
// 발송하려는 대상 서버의 socket을 연다
$fp = @fsockopen($http['host'], $http['port'], $errno, $errstr, 5);
if(!$fp) return;
if(!$fp) return new Object(-1,'msg_trackback_url_is_invalid');
// 작성한 헤더 정보를 발송
fputs($fp, $header);
@ -195,6 +275,8 @@
// socket 닫음
fclose($fp);
return new Object(0, 'msg_trackback_send_success');
}
}
?>

View file

@ -81,5 +81,21 @@
return $output;
}
/**
* @brief 특정 모듈의 trackback 설정을 return
**/
function getTrackbackModuleConfig($module_srl) {
// trackback 모듈의 config를 가져옴
$oModuleModel = &getModel('module');
$trackback_config = $oModuleModel->getModuleConfig('trackback');
$module_trackback_config = $trackback_config->module_config[$module_srl];
if(!$module_trackback_config->module_srl) {
$module_trackback_config->module_srl = $module_srl;
$module_trackback_config->enable_trackback = $trackback_config->enable_trackback=='Y'?'Y':'N';
}
return $module_trackback_config;
}
}
?>

View file

@ -0,0 +1,70 @@
<?php
/**
* @class trackbackView
* @author zero (zero@nzeo.com)
* @brief trackback모듈의 view class
**/
class trackbackView extends trackback {
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief 목록 출력 (관리자용)
**/
function dispTrackbackSend() {
$document_srl = Context::get('document_srl');
if(!$document_srl) return $this->stop('msg_invalid_request');
$logged_info = Context::get('logged_info');
if(!$logged_info->member_srl) return $this->stop('msg_not_permitted');
// 원본 글의 정보를 구함
$oDocumentModel = &getModel('document');
$oDocument = $oDocumentModel->getDocument($document_srl);
if(!$oDocument->isExists()) return $this->stop('msg_invalid_document');
if($oDocument->isSecret()) return $this->stop('msg_invalid_request');
if($oDocument->getMemberSrl() != $logged_info->member_srl) return $this->stop('msg_not_permitted');
Context::set('oDocument', $oDocument);
// 템플릿 지정
$this->setLayoutFile('popup_layout');
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('send_trackback_form');
}
/**
* @brief 서비스형 모듈의 추가 설정을 위한 부분
* trackback의 사용 형태에 대한 설정만 받음
**/
function triggerDispTrackbackAdditionSetup(&$obj) {
$current_module_srl = Context::get('module_srl');
if(!$current_module_srl) {
// 선택된 모듈의 정보를 가져옴
$current_module_info = Context::get('current_module_info');
$current_module_srl = $current_module_info->module_srl;
}
if(!$current_module_srl) return new Object();
// 선택된 모듈의 trackback설정을 가져옴
$oTrackbackModel = &getModel('trackback');
$trackback_config = $oTrackbackModel->getTrackbackModuleConfig($current_module_srl);
Context::set('trackback_config', $trackback_config);
// 템플릿 파일 지정
$oTemplate = &TemplateHandler::getInstance();
$tpl = $oTemplate->compile($this->module_path.'tpl', 'trackback_module_config');
$obj .= $tpl;
return new Object();
}
}
?>