mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-05-22 05:15:29 +09:00
Author name update.
NHN developers@xpressengine.com http://xpressengine.com/ git-svn-id: http://xe-core.googlecode.com/svn/sandbox@7676 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
parent
7d1fa86e5c
commit
8f385a592b
603 changed files with 67379 additions and 67522 deletions
|
|
@ -1,102 +1,102 @@
|
|||
<?php
|
||||
/**
|
||||
* @class addonAdminController
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief addon 모듈의 admin controller class
|
||||
**/
|
||||
include_once('addon.controller.php');
|
||||
|
||||
class addonAdminController extends addonController {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 애드온의 활성/비활성 체인지
|
||||
**/
|
||||
function procAddonAdminToggleActivate() {
|
||||
$oAddonModel = &getAdminModel('addon');
|
||||
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
|
||||
// addon값을 받아옴
|
||||
$addon = Context::get('addon');
|
||||
$type = Context::get('type');
|
||||
if(!$type) $type = "pc";
|
||||
if($addon) {
|
||||
// 활성화 되어 있으면 비활성화 시킴
|
||||
if($oAddonModel->isActivatedAddon($addon, $site_module_info->site_srl, $type)) $this->doDeactivate($addon, $site_module_info->site_srl, $type);
|
||||
|
||||
// 비활성화 되어 있으면 활성화 시킴
|
||||
else $this->doActivate($addon, $site_module_info->site_srl, $type);
|
||||
}
|
||||
|
||||
$this->makeCacheFile($site_module_info->site_srl, $type);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 애드온 설정 정보 입력
|
||||
**/
|
||||
function procAddonAdminSetupAddon() {
|
||||
$args = Context::getRequestVars();
|
||||
$addon_name = $args->addon_name;
|
||||
unset($args->module);
|
||||
unset($args->act);
|
||||
unset($args->addon_name);
|
||||
unset($args->body);
|
||||
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
|
||||
$this->doSetup($addon_name, $args, $site_module_info->site_srl);
|
||||
|
||||
$this->makeCacheFile($site_module_info->site_srl, "pc");
|
||||
$this->makeCacheFile($site_module_info->site_srl, "mobile");
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief 애드온 추가
|
||||
* DB에 애드온을 추가함
|
||||
**/
|
||||
function doInsert($addon, $site_srl = 0) {
|
||||
$args->addon = $addon;
|
||||
$args->is_used = 'N';
|
||||
if(!$site_srl) return executeQuery('addon.insertAddon', $args);
|
||||
$args->site_srl = $site_srl;
|
||||
return executeQuery('addon.insertSiteAddon', $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 애드온 활성화
|
||||
* addons라는 테이블에 애드온의 활성화 상태를 on 시켜줌
|
||||
**/
|
||||
function doActivate($addon, $site_srl = 0, $type = "pc") {
|
||||
$args->addon = $addon;
|
||||
if($type == "pc") $args->is_used = 'Y';
|
||||
else $args->is_used_m = "Y";
|
||||
if(!$site_srl) return executeQuery('addon.updateAddon', $args);
|
||||
$args->site_srl = $site_srl;
|
||||
return executeQuery('addon.updateSiteAddon', $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 애드온 비활성화
|
||||
*
|
||||
* addons라는 테이블에 애드온의 이름을 제거하는 것으로 비활성화를 시키게 된다
|
||||
**/
|
||||
function doDeactivate($addon, $site_srl = 0, $type = "pc") {
|
||||
$args->addon = $addon;
|
||||
if($type == "pc") $args->is_used = 'N';
|
||||
else $args->is_used_m = 'N';
|
||||
if(!$site_srl) return executeQuery('addon.updateAddon', $args);
|
||||
$args->site_srl = $site_srl;
|
||||
return executeQuery('addon.updateSiteAddon', $args);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class addonAdminController
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief addon 모듈의 admin controller class
|
||||
**/
|
||||
include_once('addon.controller.php');
|
||||
|
||||
class addonAdminController extends addonController {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 애드온의 활성/비활성 체인지
|
||||
**/
|
||||
function procAddonAdminToggleActivate() {
|
||||
$oAddonModel = &getAdminModel('addon');
|
||||
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
|
||||
// addon값을 받아옴
|
||||
$addon = Context::get('addon');
|
||||
$type = Context::get('type');
|
||||
if(!$type) $type = "pc";
|
||||
if($addon) {
|
||||
// 활성화 되어 있으면 비활성화 시킴
|
||||
if($oAddonModel->isActivatedAddon($addon, $site_module_info->site_srl, $type)) $this->doDeactivate($addon, $site_module_info->site_srl, $type);
|
||||
|
||||
// 비활성화 되어 있으면 활성화 시킴
|
||||
else $this->doActivate($addon, $site_module_info->site_srl, $type);
|
||||
}
|
||||
|
||||
$this->makeCacheFile($site_module_info->site_srl, $type);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 애드온 설정 정보 입력
|
||||
**/
|
||||
function procAddonAdminSetupAddon() {
|
||||
$args = Context::getRequestVars();
|
||||
$addon_name = $args->addon_name;
|
||||
unset($args->module);
|
||||
unset($args->act);
|
||||
unset($args->addon_name);
|
||||
unset($args->body);
|
||||
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
|
||||
$this->doSetup($addon_name, $args, $site_module_info->site_srl);
|
||||
|
||||
$this->makeCacheFile($site_module_info->site_srl, "pc");
|
||||
$this->makeCacheFile($site_module_info->site_srl, "mobile");
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief 애드온 추가
|
||||
* DB에 애드온을 추가함
|
||||
**/
|
||||
function doInsert($addon, $site_srl = 0) {
|
||||
$args->addon = $addon;
|
||||
$args->is_used = 'N';
|
||||
if(!$site_srl) return executeQuery('addon.insertAddon', $args);
|
||||
$args->site_srl = $site_srl;
|
||||
return executeQuery('addon.insertSiteAddon', $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 애드온 활성화
|
||||
* addons라는 테이블에 애드온의 활성화 상태를 on 시켜줌
|
||||
**/
|
||||
function doActivate($addon, $site_srl = 0, $type = "pc") {
|
||||
$args->addon = $addon;
|
||||
if($type == "pc") $args->is_used = 'Y';
|
||||
else $args->is_used_m = "Y";
|
||||
if(!$site_srl) return executeQuery('addon.updateAddon', $args);
|
||||
$args->site_srl = $site_srl;
|
||||
return executeQuery('addon.updateSiteAddon', $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 애드온 비활성화
|
||||
*
|
||||
* addons라는 테이블에 애드온의 이름을 제거하는 것으로 비활성화를 시키게 된다
|
||||
**/
|
||||
function doDeactivate($addon, $site_srl = 0, $type = "pc") {
|
||||
$args->addon = $addon;
|
||||
if($type == "pc") $args->is_used = 'N';
|
||||
else $args->is_used_m = 'N';
|
||||
if(!$site_srl) return executeQuery('addon.updateAddon', $args);
|
||||
$args->site_srl = $site_srl;
|
||||
return executeQuery('addon.updateSiteAddon', $args);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,313 +1,313 @@
|
|||
<?php
|
||||
/**
|
||||
* @class addonAdminModel
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief addon 모듈의 admin model class
|
||||
**/
|
||||
|
||||
class addonAdminModel extends addon {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 애드온의 경로를 구함
|
||||
**/
|
||||
function getAddonPath($addon_name) {
|
||||
$class_path = sprintf('./addons/%s/', $addon_name);
|
||||
if(is_dir($class_path)) return $class_path;
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 애드온의 종류와 정보를 구함
|
||||
**/
|
||||
function getAddonList($site_srl = 0) {
|
||||
// activated된 애드온 목록을 구함
|
||||
$inserted_addons = $this->getInsertedAddons($site_srl);
|
||||
|
||||
// 다운받은 애드온과 설치된 애드온의 목록을 구함
|
||||
$searched_list = FileHandler::readDir('./addons');
|
||||
$searched_count = count($searched_list);
|
||||
if(!$searched_count) return;
|
||||
sort($searched_list);
|
||||
|
||||
for($i=0;$i<$searched_count;$i++) {
|
||||
// 애드온의 이름
|
||||
$addon_name = $searched_list[$i];
|
||||
if($addon_name == "smartphone") continue;
|
||||
|
||||
// 애드온의 경로 (files/addons가 우선)
|
||||
$path = $this->getAddonPath($addon_name);
|
||||
|
||||
// 해당 애드온의 정보를 구함
|
||||
unset($info);
|
||||
$info = $this->getAddonInfoXml($addon_name, $site_srl);
|
||||
|
||||
$info->addon = $addon_name;
|
||||
$info->path = $path;
|
||||
$info->activated = false;
|
||||
$info->mactivated = false;
|
||||
|
||||
// DB에 입력되어 있는지 확인
|
||||
if(!in_array($addon_name, array_keys($inserted_addons))) {
|
||||
// DB에 입력되어 있지 않으면 입력 (model에서 이런짓 하는거 싫지만 귀찮아서.. ㅡ.ㅜ)
|
||||
$oAddonAdminController = &getAdminController('addon');
|
||||
$oAddonAdminController->doInsert($addon_name, $site_srl);
|
||||
|
||||
// 활성화 되어 있는지 확인
|
||||
} else {
|
||||
if($inserted_addons[$addon_name]->is_used=='Y') $info->activated = true;
|
||||
if($inserted_addons[$addon_name]->is_used_m=='Y') $info->mactivated = true;
|
||||
}
|
||||
|
||||
$list[] = $info;
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 모듈의 conf/info.xml 을 읽어서 정보를 구함
|
||||
**/
|
||||
function getAddonInfoXml($addon, $site_srl = 0) {
|
||||
// 요청된 모듈의 경로를 구한다. 없으면 return
|
||||
$addon_path = $this->getAddonPath($addon);
|
||||
if(!$addon_path) return;
|
||||
|
||||
// 현재 선택된 모듈의 스킨의 정보 xml 파일을 읽음
|
||||
$xml_file = sprintf("%sconf/info.xml", $addon_path);
|
||||
if(!file_exists($xml_file)) return;
|
||||
|
||||
$oXmlParser = new XmlParser();
|
||||
$tmp_xml_obj = $oXmlParser->loadXmlFile($xml_file);
|
||||
$xml_obj = $tmp_xml_obj->addon;
|
||||
|
||||
if(!$xml_obj) return;
|
||||
|
||||
|
||||
// DB에 설정된 내역을 가져온다
|
||||
$db_args->addon = $addon;
|
||||
if(!$site_srl) $output = executeQuery('addon.getAddonInfo',$db_args);
|
||||
else {
|
||||
$db_args->site_srl = $site_srl;
|
||||
$output = executeQuery('addon.getSiteAddonInfo',$db_args);
|
||||
}
|
||||
$extra_vals = unserialize($output->data->extra_vars);
|
||||
|
||||
if($extra_vals->mid_list) {
|
||||
$addon_info->mid_list = $extra_vals->mid_list;
|
||||
} else {
|
||||
$addon_info->mid_list = array();
|
||||
}
|
||||
|
||||
|
||||
// 애드온 정보
|
||||
if($xml_obj->version && $xml_obj->attrs->version == '0.2') {
|
||||
// addon format v0.2
|
||||
sscanf($xml_obj->date->body, '%d-%d-%d', $date_obj->y, $date_obj->m, $date_obj->d);
|
||||
$addon_info->date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d);
|
||||
|
||||
$addon_info->addon_name = $addon;
|
||||
$addon_info->title = $xml_obj->title->body;
|
||||
$addon_info->description = trim($xml_obj->description->body);
|
||||
$addon_info->version = $xml_obj->version->body;
|
||||
$addon_info->homepage = $xml_obj->link->body;
|
||||
$addon_info->license = $xml_obj->license->body;
|
||||
$addon_info->license_link = $xml_obj->license->attrs->link;
|
||||
|
||||
if(!is_array($xml_obj->author)) $author_list[] = $xml_obj->author;
|
||||
else $author_list = $xml_obj->author;
|
||||
|
||||
foreach($author_list as $author) {
|
||||
unset($author_obj);
|
||||
$author_obj->name = $author->name->body;
|
||||
$author_obj->email_address = $author->attrs->email_address;
|
||||
$author_obj->homepage = $author->attrs->link;
|
||||
$addon_info->author[] = $author_obj;
|
||||
}
|
||||
|
||||
// 확장변수를 정리
|
||||
if($xml_obj->extra_vars) {
|
||||
$extra_var_groups = $xml_obj->extra_vars->group;
|
||||
if(!$extra_var_groups) $extra_var_groups = $xml_obj->extra_vars;
|
||||
if(!is_array($extra_var_groups)) $extra_var_groups = array($extra_var_groups);
|
||||
|
||||
foreach($extra_var_groups as $group) {
|
||||
$extra_vars = $group->var;
|
||||
if(!is_array($group->var)) $extra_vars = array($group->var);
|
||||
|
||||
foreach($extra_vars as $key => $val) {
|
||||
unset($obj);
|
||||
if(!$val->attrs->type) { $val->attrs->type = 'text'; }
|
||||
|
||||
$obj->group = $group->title->body;
|
||||
$obj->name = $val->attrs->name;
|
||||
$obj->title = $val->title->body;
|
||||
$obj->type = $val->attrs->type;
|
||||
$obj->description = $val->description->body;
|
||||
$obj->value = $extra_vals->{$obj->name};
|
||||
if(strpos($obj->value, '|@|') != false) { $obj->value = explode('|@|', $obj->value); }
|
||||
if($obj->type == 'mid_list' && !is_array($obj->value)) { $obj->value = array($obj->value); }
|
||||
|
||||
// 'select'type에서 option목록을 구한다.
|
||||
if(is_array($val->options)) {
|
||||
$option_count = count($val->options);
|
||||
|
||||
for($i = 0; $i < $option_count; $i++) {
|
||||
$obj->options[$i]->title = $val->options[$i]->title->body;
|
||||
$obj->options[$i]->value = $val->options[$i]->attrs->value;
|
||||
}
|
||||
} else {
|
||||
$obj->options[0]->title = $val->options[0]->title->body;
|
||||
$obj->options[0]->value = $val->options[0]->attrs->value;
|
||||
}
|
||||
|
||||
$addon_info->extra_vars[] = $obj;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// history
|
||||
if($xml_obj->history) {
|
||||
if(!is_array($xml_obj->history)) $history[] = $xml_obj->history;
|
||||
else $history = $xml_obj->history;
|
||||
|
||||
foreach($history as $item) {
|
||||
unset($obj);
|
||||
|
||||
if($item->author) {
|
||||
(!is_array($item->author)) ? $obj->author_list[] = $item->author : $obj->author_list = $item->author;
|
||||
|
||||
foreach($obj->author_list as $author) {
|
||||
unset($author_obj);
|
||||
$author_obj->name = $author->name->body;
|
||||
$author_obj->email_address = $author->attrs->email_address;
|
||||
$author_obj->homepage = $author->attrs->link;
|
||||
$obj->author[] = $author_obj;
|
||||
}
|
||||
}
|
||||
|
||||
$obj->name = $item->name->body;
|
||||
$obj->email_address = $item->attrs->email_address;
|
||||
$obj->homepage = $item->attrs->link;
|
||||
$obj->version = $item->attrs->version;
|
||||
$obj->date = $item->attrs->date;
|
||||
$obj->description = $item->description->body;
|
||||
|
||||
if($item->log) {
|
||||
(!is_array($item->log)) ? $obj->log[] = $item->log : $obj->log = $item->log;
|
||||
|
||||
foreach($obj->log as $log) {
|
||||
unset($log_obj);
|
||||
$log_obj->text = $log->body;
|
||||
$log_obj->link = $log->attrs->link;
|
||||
$obj->logs[] = $log_obj;
|
||||
}
|
||||
}
|
||||
|
||||
$addon_info->history[] = $obj;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
// addon format 0.1
|
||||
$addon_info->addon_name = $addon;
|
||||
$addon_info->title = $xml_obj->title->body;
|
||||
$addon_info->description = trim($xml_obj->author->description->body);
|
||||
$addon_info->version = $xml_obj->attrs->version;
|
||||
sscanf($xml_obj->author->attrs->date, '%d. %d. %d', $date_obj->y, $date_obj->m, $date_obj->d);
|
||||
$addon_info->date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d);
|
||||
$author_obj->name = $xml_obj->author->name->body;
|
||||
$author_obj->email_address = $xml_obj->author->attrs->email_address;
|
||||
$author_obj->homepage = $xml_obj->author->attrs->link;
|
||||
$addon_info->author[] = $author_obj;
|
||||
|
||||
if($xml_obj->extra_vars) {
|
||||
// 확장변수를 정리
|
||||
$extra_var_groups = $xml_obj->extra_vars->group;
|
||||
if(!$extra_var_groups) $extra_var_groups = $xml_obj->extra_vars;
|
||||
if(!is_array($extra_var_groups)) $extra_var_groups = array($extra_var_groups);
|
||||
foreach($extra_var_groups as $group) {
|
||||
$extra_vars = $group->var;
|
||||
if(!is_array($group->var)) $extra_vars = array($group->var);
|
||||
|
||||
foreach($extra_vars as $key => $val) {
|
||||
unset($obj);
|
||||
if(!$val->type->body) { $val->type->body = 'text'; }
|
||||
|
||||
$obj->group = $group->title->body;
|
||||
$obj->name = $val->attrs->name;
|
||||
$obj->title = $val->title->body;
|
||||
$obj->type = $val->type->body;
|
||||
$obj->description = $val->description->body;
|
||||
$obj->value = $extra_vals->{$obj->name};
|
||||
if(strpos($obj->value, '|@|') != false) { $obj->value = explode('|@|', $obj->value); }
|
||||
if($obj->type == 'mid_list' && !is_array($obj->value)) { $obj->value = array($obj->value); }
|
||||
|
||||
// 'select'type에서 option목록을 구한다.
|
||||
if(is_array($val->options)) {
|
||||
$option_count = count($val->options);
|
||||
|
||||
for($i = 0; $i < $option_count; $i++) {
|
||||
$obj->options[$i]->title = $val->options[$i]->title->body;
|
||||
$obj->options[$i]->value = $val->options[$i]->value->body;
|
||||
}
|
||||
}
|
||||
|
||||
$addon_info->extra_vars[] = $obj;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
return $addon_info;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 활성화된 애드온 목록을 구해옴
|
||||
**/
|
||||
function getInsertedAddons($site_srl = 0) {
|
||||
$args->list_order = 'addon';
|
||||
if(!$site_srl) $output = executeQuery('addon.getAddons', $args);
|
||||
else {
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('addon.getSiteAddons', $args);
|
||||
}
|
||||
if(!$output->data) return array();
|
||||
if(!is_array($output->data)) $output->data = array($output->data);
|
||||
|
||||
$activated_count = count($output->data);
|
||||
for($i=0;$i<$activated_count;$i++) {
|
||||
$addon = $output->data[$i];
|
||||
$addon_list[$addon->addon] = $addon;
|
||||
}
|
||||
return $addon_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 애드온이 활성화 되어 있는지 체크
|
||||
**/
|
||||
function isActivatedAddon($addon, $site_srl = 0, $type = "pc") {
|
||||
$args->addon = $addon;
|
||||
if(!$site_srl) {
|
||||
if($type == "pc") $output = executeQuery('addon.getAddonIsActivated', $args);
|
||||
else $output = executeQuery('addon.getMAddonIsActivated', $args);
|
||||
}
|
||||
else {
|
||||
$args->site_srl = $site_srl;
|
||||
if($type == "pc") $output = executeQuery('addon.getSiteAddonIsActivated', $args);
|
||||
else $output = executeQuery('addon.getSiteMAddonIsActivated', $args);
|
||||
}
|
||||
if($output->data->count>0) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class addonAdminModel
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief addon 모듈의 admin model class
|
||||
**/
|
||||
|
||||
class addonAdminModel extends addon {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 애드온의 경로를 구함
|
||||
**/
|
||||
function getAddonPath($addon_name) {
|
||||
$class_path = sprintf('./addons/%s/', $addon_name);
|
||||
if(is_dir($class_path)) return $class_path;
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 애드온의 종류와 정보를 구함
|
||||
**/
|
||||
function getAddonList($site_srl = 0) {
|
||||
// activated된 애드온 목록을 구함
|
||||
$inserted_addons = $this->getInsertedAddons($site_srl);
|
||||
|
||||
// 다운받은 애드온과 설치된 애드온의 목록을 구함
|
||||
$searched_list = FileHandler::readDir('./addons');
|
||||
$searched_count = count($searched_list);
|
||||
if(!$searched_count) return;
|
||||
sort($searched_list);
|
||||
|
||||
for($i=0;$i<$searched_count;$i++) {
|
||||
// 애드온의 이름
|
||||
$addon_name = $searched_list[$i];
|
||||
if($addon_name == "smartphone") continue;
|
||||
|
||||
// 애드온의 경로 (files/addons가 우선)
|
||||
$path = $this->getAddonPath($addon_name);
|
||||
|
||||
// 해당 애드온의 정보를 구함
|
||||
unset($info);
|
||||
$info = $this->getAddonInfoXml($addon_name, $site_srl);
|
||||
|
||||
$info->addon = $addon_name;
|
||||
$info->path = $path;
|
||||
$info->activated = false;
|
||||
$info->mactivated = false;
|
||||
|
||||
// DB에 입력되어 있는지 확인
|
||||
if(!in_array($addon_name, array_keys($inserted_addons))) {
|
||||
// DB에 입력되어 있지 않으면 입력 (model에서 이런짓 하는거 싫지만 귀찮아서.. ㅡ.ㅜ)
|
||||
$oAddonAdminController = &getAdminController('addon');
|
||||
$oAddonAdminController->doInsert($addon_name, $site_srl);
|
||||
|
||||
// 활성화 되어 있는지 확인
|
||||
} else {
|
||||
if($inserted_addons[$addon_name]->is_used=='Y') $info->activated = true;
|
||||
if($inserted_addons[$addon_name]->is_used_m=='Y') $info->mactivated = true;
|
||||
}
|
||||
|
||||
$list[] = $info;
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 모듈의 conf/info.xml 을 읽어서 정보를 구함
|
||||
**/
|
||||
function getAddonInfoXml($addon, $site_srl = 0) {
|
||||
// 요청된 모듈의 경로를 구한다. 없으면 return
|
||||
$addon_path = $this->getAddonPath($addon);
|
||||
if(!$addon_path) return;
|
||||
|
||||
// 현재 선택된 모듈의 스킨의 정보 xml 파일을 읽음
|
||||
$xml_file = sprintf("%sconf/info.xml", $addon_path);
|
||||
if(!file_exists($xml_file)) return;
|
||||
|
||||
$oXmlParser = new XmlParser();
|
||||
$tmp_xml_obj = $oXmlParser->loadXmlFile($xml_file);
|
||||
$xml_obj = $tmp_xml_obj->addon;
|
||||
|
||||
if(!$xml_obj) return;
|
||||
|
||||
|
||||
// DB에 설정된 내역을 가져온다
|
||||
$db_args->addon = $addon;
|
||||
if(!$site_srl) $output = executeQuery('addon.getAddonInfo',$db_args);
|
||||
else {
|
||||
$db_args->site_srl = $site_srl;
|
||||
$output = executeQuery('addon.getSiteAddonInfo',$db_args);
|
||||
}
|
||||
$extra_vals = unserialize($output->data->extra_vars);
|
||||
|
||||
if($extra_vals->mid_list) {
|
||||
$addon_info->mid_list = $extra_vals->mid_list;
|
||||
} else {
|
||||
$addon_info->mid_list = array();
|
||||
}
|
||||
|
||||
|
||||
// 애드온 정보
|
||||
if($xml_obj->version && $xml_obj->attrs->version == '0.2') {
|
||||
// addon format v0.2
|
||||
sscanf($xml_obj->date->body, '%d-%d-%d', $date_obj->y, $date_obj->m, $date_obj->d);
|
||||
$addon_info->date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d);
|
||||
|
||||
$addon_info->addon_name = $addon;
|
||||
$addon_info->title = $xml_obj->title->body;
|
||||
$addon_info->description = trim($xml_obj->description->body);
|
||||
$addon_info->version = $xml_obj->version->body;
|
||||
$addon_info->homepage = $xml_obj->link->body;
|
||||
$addon_info->license = $xml_obj->license->body;
|
||||
$addon_info->license_link = $xml_obj->license->attrs->link;
|
||||
|
||||
if(!is_array($xml_obj->author)) $author_list[] = $xml_obj->author;
|
||||
else $author_list = $xml_obj->author;
|
||||
|
||||
foreach($author_list as $author) {
|
||||
unset($author_obj);
|
||||
$author_obj->name = $author->name->body;
|
||||
$author_obj->email_address = $author->attrs->email_address;
|
||||
$author_obj->homepage = $author->attrs->link;
|
||||
$addon_info->author[] = $author_obj;
|
||||
}
|
||||
|
||||
// 확장변수를 정리
|
||||
if($xml_obj->extra_vars) {
|
||||
$extra_var_groups = $xml_obj->extra_vars->group;
|
||||
if(!$extra_var_groups) $extra_var_groups = $xml_obj->extra_vars;
|
||||
if(!is_array($extra_var_groups)) $extra_var_groups = array($extra_var_groups);
|
||||
|
||||
foreach($extra_var_groups as $group) {
|
||||
$extra_vars = $group->var;
|
||||
if(!is_array($group->var)) $extra_vars = array($group->var);
|
||||
|
||||
foreach($extra_vars as $key => $val) {
|
||||
unset($obj);
|
||||
if(!$val->attrs->type) { $val->attrs->type = 'text'; }
|
||||
|
||||
$obj->group = $group->title->body;
|
||||
$obj->name = $val->attrs->name;
|
||||
$obj->title = $val->title->body;
|
||||
$obj->type = $val->attrs->type;
|
||||
$obj->description = $val->description->body;
|
||||
$obj->value = $extra_vals->{$obj->name};
|
||||
if(strpos($obj->value, '|@|') != false) { $obj->value = explode('|@|', $obj->value); }
|
||||
if($obj->type == 'mid_list' && !is_array($obj->value)) { $obj->value = array($obj->value); }
|
||||
|
||||
// 'select'type에서 option목록을 구한다.
|
||||
if(is_array($val->options)) {
|
||||
$option_count = count($val->options);
|
||||
|
||||
for($i = 0; $i < $option_count; $i++) {
|
||||
$obj->options[$i]->title = $val->options[$i]->title->body;
|
||||
$obj->options[$i]->value = $val->options[$i]->attrs->value;
|
||||
}
|
||||
} else {
|
||||
$obj->options[0]->title = $val->options[0]->title->body;
|
||||
$obj->options[0]->value = $val->options[0]->attrs->value;
|
||||
}
|
||||
|
||||
$addon_info->extra_vars[] = $obj;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// history
|
||||
if($xml_obj->history) {
|
||||
if(!is_array($xml_obj->history)) $history[] = $xml_obj->history;
|
||||
else $history = $xml_obj->history;
|
||||
|
||||
foreach($history as $item) {
|
||||
unset($obj);
|
||||
|
||||
if($item->author) {
|
||||
(!is_array($item->author)) ? $obj->author_list[] = $item->author : $obj->author_list = $item->author;
|
||||
|
||||
foreach($obj->author_list as $author) {
|
||||
unset($author_obj);
|
||||
$author_obj->name = $author->name->body;
|
||||
$author_obj->email_address = $author->attrs->email_address;
|
||||
$author_obj->homepage = $author->attrs->link;
|
||||
$obj->author[] = $author_obj;
|
||||
}
|
||||
}
|
||||
|
||||
$obj->name = $item->name->body;
|
||||
$obj->email_address = $item->attrs->email_address;
|
||||
$obj->homepage = $item->attrs->link;
|
||||
$obj->version = $item->attrs->version;
|
||||
$obj->date = $item->attrs->date;
|
||||
$obj->description = $item->description->body;
|
||||
|
||||
if($item->log) {
|
||||
(!is_array($item->log)) ? $obj->log[] = $item->log : $obj->log = $item->log;
|
||||
|
||||
foreach($obj->log as $log) {
|
||||
unset($log_obj);
|
||||
$log_obj->text = $log->body;
|
||||
$log_obj->link = $log->attrs->link;
|
||||
$obj->logs[] = $log_obj;
|
||||
}
|
||||
}
|
||||
|
||||
$addon_info->history[] = $obj;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
// addon format 0.1
|
||||
$addon_info->addon_name = $addon;
|
||||
$addon_info->title = $xml_obj->title->body;
|
||||
$addon_info->description = trim($xml_obj->author->description->body);
|
||||
$addon_info->version = $xml_obj->attrs->version;
|
||||
sscanf($xml_obj->author->attrs->date, '%d. %d. %d', $date_obj->y, $date_obj->m, $date_obj->d);
|
||||
$addon_info->date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d);
|
||||
$author_obj->name = $xml_obj->author->name->body;
|
||||
$author_obj->email_address = $xml_obj->author->attrs->email_address;
|
||||
$author_obj->homepage = $xml_obj->author->attrs->link;
|
||||
$addon_info->author[] = $author_obj;
|
||||
|
||||
if($xml_obj->extra_vars) {
|
||||
// 확장변수를 정리
|
||||
$extra_var_groups = $xml_obj->extra_vars->group;
|
||||
if(!$extra_var_groups) $extra_var_groups = $xml_obj->extra_vars;
|
||||
if(!is_array($extra_var_groups)) $extra_var_groups = array($extra_var_groups);
|
||||
foreach($extra_var_groups as $group) {
|
||||
$extra_vars = $group->var;
|
||||
if(!is_array($group->var)) $extra_vars = array($group->var);
|
||||
|
||||
foreach($extra_vars as $key => $val) {
|
||||
unset($obj);
|
||||
if(!$val->type->body) { $val->type->body = 'text'; }
|
||||
|
||||
$obj->group = $group->title->body;
|
||||
$obj->name = $val->attrs->name;
|
||||
$obj->title = $val->title->body;
|
||||
$obj->type = $val->type->body;
|
||||
$obj->description = $val->description->body;
|
||||
$obj->value = $extra_vals->{$obj->name};
|
||||
if(strpos($obj->value, '|@|') != false) { $obj->value = explode('|@|', $obj->value); }
|
||||
if($obj->type == 'mid_list' && !is_array($obj->value)) { $obj->value = array($obj->value); }
|
||||
|
||||
// 'select'type에서 option목록을 구한다.
|
||||
if(is_array($val->options)) {
|
||||
$option_count = count($val->options);
|
||||
|
||||
for($i = 0; $i < $option_count; $i++) {
|
||||
$obj->options[$i]->title = $val->options[$i]->title->body;
|
||||
$obj->options[$i]->value = $val->options[$i]->value->body;
|
||||
}
|
||||
}
|
||||
|
||||
$addon_info->extra_vars[] = $obj;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
return $addon_info;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 활성화된 애드온 목록을 구해옴
|
||||
**/
|
||||
function getInsertedAddons($site_srl = 0) {
|
||||
$args->list_order = 'addon';
|
||||
if(!$site_srl) $output = executeQuery('addon.getAddons', $args);
|
||||
else {
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('addon.getSiteAddons', $args);
|
||||
}
|
||||
if(!$output->data) return array();
|
||||
if(!is_array($output->data)) $output->data = array($output->data);
|
||||
|
||||
$activated_count = count($output->data);
|
||||
for($i=0;$i<$activated_count;$i++) {
|
||||
$addon = $output->data[$i];
|
||||
$addon_list[$addon->addon] = $addon;
|
||||
}
|
||||
return $addon_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 애드온이 활성화 되어 있는지 체크
|
||||
**/
|
||||
function isActivatedAddon($addon, $site_srl = 0, $type = "pc") {
|
||||
$args->addon = $addon;
|
||||
if(!$site_srl) {
|
||||
if($type == "pc") $output = executeQuery('addon.getAddonIsActivated', $args);
|
||||
else $output = executeQuery('addon.getMAddonIsActivated', $args);
|
||||
}
|
||||
else {
|
||||
$args->site_srl = $site_srl;
|
||||
if($type == "pc") $output = executeQuery('addon.getSiteAddonIsActivated', $args);
|
||||
else $output = executeQuery('addon.getSiteMAddonIsActivated', $args);
|
||||
}
|
||||
if($output->data->count>0) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,98 +1,98 @@
|
|||
<?php
|
||||
/**
|
||||
* @class addonAdminView
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief addon 모듈의 admin view class
|
||||
**/
|
||||
|
||||
class addonAdminView extends addon {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 애드온 관리 메인 페이지 (목록 보여줌)
|
||||
**/
|
||||
function dispAddonAdminIndex() {
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
|
||||
// 애드온 목록을 세팅
|
||||
$oAddonModel = &getAdminModel('addon');
|
||||
$addon_list = $oAddonModel->getAddonList($site_module_info->site_srl);
|
||||
Context::set('addon_list', $addon_list);
|
||||
|
||||
// 템플릿 패스 및 파일을 지정
|
||||
$this->setTemplateFile('addon_list');
|
||||
}
|
||||
|
||||
/**
|
||||
* @biref 애드온 세부 설정 팝업 출력
|
||||
**/
|
||||
function dispAddonAdminSetup() {
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
|
||||
// 요청된 애드온을 구함
|
||||
$selected_addon = Context::get('selected_addon');
|
||||
|
||||
// 요청된 애드온의 정보를 구함
|
||||
$oAddonModel = &getAdminModel('addon');
|
||||
$addon_info = $oAddonModel->getAddonInfoXml($selected_addon, $site_module_info->site_srl);
|
||||
Context::set('addon_info', $addon_info);
|
||||
|
||||
// mid 목록을 가져옴
|
||||
$oModuleModel = &getModel('module');
|
||||
$oModuleAdminModel = &getAdminModel('module');
|
||||
|
||||
if($site_module_info->site_srl) $args->site_srl = $site_module_info->site_srl;
|
||||
$mid_list = $oModuleModel->getMidList($args);
|
||||
|
||||
// module_category와 module의 조합
|
||||
if(!$site_module_info->site_srl) {
|
||||
// 모듈 카테고리 목록을 구함
|
||||
$module_categories = $oModuleModel->getModuleCategories();
|
||||
|
||||
if($mid_list) {
|
||||
foreach($mid_list as $module_srl => $module) {
|
||||
$module_categories[$module->module_category_srl]->list[$module_srl] = $module;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$module_categories[0]->list = $mid_list;
|
||||
}
|
||||
|
||||
Context::set('mid_list',$module_categories);
|
||||
|
||||
// 레이아웃을 팝업으로 지정
|
||||
$this->setLayoutFile('popup_layout');
|
||||
|
||||
// 템플릿 패스 및 파일을 지정
|
||||
$this->setTemplateFile('setup_addon');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 애드온의 상세 정보(conf/info.xml)를 팝업 출력
|
||||
**/
|
||||
function dispAddonAdminInfo() {
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
|
||||
// 요청된 애드온을 구함
|
||||
$selected_addon = Context::get('selected_addon');
|
||||
|
||||
// 요청된 애드온의 정보를 구함
|
||||
$oAddonModel = &getAdminModel('addon');
|
||||
$addon_info = $oAddonModel->getAddonInfoXml($selected_addon, $site_module_info->site_srl);
|
||||
Context::set('addon_info', $addon_info);
|
||||
|
||||
// 레이아웃을 팝업으로 지정
|
||||
$this->setLayoutFile('popup_layout');
|
||||
|
||||
// 템플릿 패스 및 파일을 지정
|
||||
$this->setTemplateFile('addon_info');
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class addonAdminView
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief addon 모듈의 admin view class
|
||||
**/
|
||||
|
||||
class addonAdminView extends addon {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 애드온 관리 메인 페이지 (목록 보여줌)
|
||||
**/
|
||||
function dispAddonAdminIndex() {
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
|
||||
// 애드온 목록을 세팅
|
||||
$oAddonModel = &getAdminModel('addon');
|
||||
$addon_list = $oAddonModel->getAddonList($site_module_info->site_srl);
|
||||
Context::set('addon_list', $addon_list);
|
||||
|
||||
// 템플릿 패스 및 파일을 지정
|
||||
$this->setTemplateFile('addon_list');
|
||||
}
|
||||
|
||||
/**
|
||||
* @biref 애드온 세부 설정 팝업 출력
|
||||
**/
|
||||
function dispAddonAdminSetup() {
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
|
||||
// 요청된 애드온을 구함
|
||||
$selected_addon = Context::get('selected_addon');
|
||||
|
||||
// 요청된 애드온의 정보를 구함
|
||||
$oAddonModel = &getAdminModel('addon');
|
||||
$addon_info = $oAddonModel->getAddonInfoXml($selected_addon, $site_module_info->site_srl);
|
||||
Context::set('addon_info', $addon_info);
|
||||
|
||||
// mid 목록을 가져옴
|
||||
$oModuleModel = &getModel('module');
|
||||
$oModuleAdminModel = &getAdminModel('module');
|
||||
|
||||
if($site_module_info->site_srl) $args->site_srl = $site_module_info->site_srl;
|
||||
$mid_list = $oModuleModel->getMidList($args);
|
||||
|
||||
// module_category와 module의 조합
|
||||
if(!$site_module_info->site_srl) {
|
||||
// 모듈 카테고리 목록을 구함
|
||||
$module_categories = $oModuleModel->getModuleCategories();
|
||||
|
||||
if($mid_list) {
|
||||
foreach($mid_list as $module_srl => $module) {
|
||||
$module_categories[$module->module_category_srl]->list[$module_srl] = $module;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$module_categories[0]->list = $mid_list;
|
||||
}
|
||||
|
||||
Context::set('mid_list',$module_categories);
|
||||
|
||||
// 레이아웃을 팝업으로 지정
|
||||
$this->setLayoutFile('popup_layout');
|
||||
|
||||
// 템플릿 패스 및 파일을 지정
|
||||
$this->setTemplateFile('setup_addon');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 애드온의 상세 정보(conf/info.xml)를 팝업 출력
|
||||
**/
|
||||
function dispAddonAdminInfo() {
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
|
||||
// 요청된 애드온을 구함
|
||||
$selected_addon = Context::get('selected_addon');
|
||||
|
||||
// 요청된 애드온의 정보를 구함
|
||||
$oAddonModel = &getAdminModel('addon');
|
||||
$addon_info = $oAddonModel->getAddonInfoXml($selected_addon, $site_module_info->site_srl);
|
||||
Context::set('addon_info', $addon_info);
|
||||
|
||||
// 레이아웃을 팝업으로 지정
|
||||
$this->setLayoutFile('popup_layout');
|
||||
|
||||
// 템플릿 패스 및 파일을 지정
|
||||
$this->setTemplateFile('addon_info');
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,71 +1,71 @@
|
|||
<?php
|
||||
/**
|
||||
* @class addon
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief addon 모듈의 high class
|
||||
**/
|
||||
|
||||
class addon extends ModuleObject {
|
||||
|
||||
/**
|
||||
* @brief 설치시 추가 작업이 필요할시 구현
|
||||
**/
|
||||
function moduleInstall() {
|
||||
// 몇가지 애드온을 등록
|
||||
$oAddonController = &getAdminController('addon');
|
||||
$oAddonController->doInsert('autolink');
|
||||
$oAddonController->doInsert('blogapi');
|
||||
$oAddonController->doInsert('counter');
|
||||
$oAddonController->doInsert('member_communication');
|
||||
$oAddonController->doInsert('member_extra_info');
|
||||
$oAddonController->doInsert('mobile');
|
||||
$oAddonController->doInsert('referer');
|
||||
$oAddonController->doInsert('resize_image');
|
||||
$oAddonController->doInsert('openid_delegation_id');
|
||||
$oAddonController->doInsert('point_level_icon');
|
||||
|
||||
// 몇가지 애드온을 기본 활성화 상태로 변경
|
||||
$oAddonController->doActivate('autolink');
|
||||
$oAddonController->doActivate('counter');
|
||||
$oAddonController->doActivate('member_communication');
|
||||
$oAddonController->doActivate('member_extra_info');
|
||||
$oAddonController->doActivate('mobile');
|
||||
$oAddonController->doActivate('referer');
|
||||
$oAddonController->doActivate('resize_image');
|
||||
$oAddonController->makeCacheFile(0);
|
||||
return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 설치가 이상이 없는지 체크하는 method
|
||||
**/
|
||||
function checkUpdate() {
|
||||
$oDB = &DB::getInstance();
|
||||
if(!$oDB->isColumnExists("addons", "is_used_m")) return true;
|
||||
if(!$oDB->isColumnExists("addons_site", "is_used_m")) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 업데이트 실행
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
$oDB = &DB::getInstance();
|
||||
if(!$oDB->isColumnExists("addons", "is_used_m")) {
|
||||
$oDB->addColumn("addons", "is_used_m", "char", 1, "N", true);
|
||||
}
|
||||
if(!$oDB->isColumnExists("addons_site", "is_used_m")) {
|
||||
$oDB->addColumn("addons_site", "is_used_m", "char", 1, "N", true);
|
||||
}
|
||||
return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 캐시 파일 재생성
|
||||
**/
|
||||
function recompileCache() {
|
||||
FileHandler::removeFilesInDir('./files/cache/addons');
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class addon
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief addon 모듈의 high class
|
||||
**/
|
||||
|
||||
class addon extends ModuleObject {
|
||||
|
||||
/**
|
||||
* @brief 설치시 추가 작업이 필요할시 구현
|
||||
**/
|
||||
function moduleInstall() {
|
||||
// 몇가지 애드온을 등록
|
||||
$oAddonController = &getAdminController('addon');
|
||||
$oAddonController->doInsert('autolink');
|
||||
$oAddonController->doInsert('blogapi');
|
||||
$oAddonController->doInsert('counter');
|
||||
$oAddonController->doInsert('member_communication');
|
||||
$oAddonController->doInsert('member_extra_info');
|
||||
$oAddonController->doInsert('mobile');
|
||||
$oAddonController->doInsert('referer');
|
||||
$oAddonController->doInsert('resize_image');
|
||||
$oAddonController->doInsert('openid_delegation_id');
|
||||
$oAddonController->doInsert('point_level_icon');
|
||||
|
||||
// 몇가지 애드온을 기본 활성화 상태로 변경
|
||||
$oAddonController->doActivate('autolink');
|
||||
$oAddonController->doActivate('counter');
|
||||
$oAddonController->doActivate('member_communication');
|
||||
$oAddonController->doActivate('member_extra_info');
|
||||
$oAddonController->doActivate('mobile');
|
||||
$oAddonController->doActivate('referer');
|
||||
$oAddonController->doActivate('resize_image');
|
||||
$oAddonController->makeCacheFile(0);
|
||||
return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 설치가 이상이 없는지 체크하는 method
|
||||
**/
|
||||
function checkUpdate() {
|
||||
$oDB = &DB::getInstance();
|
||||
if(!$oDB->isColumnExists("addons", "is_used_m")) return true;
|
||||
if(!$oDB->isColumnExists("addons_site", "is_used_m")) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 업데이트 실행
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
$oDB = &DB::getInstance();
|
||||
if(!$oDB->isColumnExists("addons", "is_used_m")) {
|
||||
$oDB->addColumn("addons", "is_used_m", "char", 1, "N", true);
|
||||
}
|
||||
if(!$oDB->isColumnExists("addons_site", "is_used_m")) {
|
||||
$oDB->addColumn("addons_site", "is_used_m", "char", 1, "N", true);
|
||||
}
|
||||
return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 캐시 파일 재생성
|
||||
**/
|
||||
function recompileCache() {
|
||||
FileHandler::removeFilesInDir('./files/cache/addons');
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @class addonController
|
||||
* @author sol ngleader.com
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief addon 모듈의 controller class
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,36 +1,36 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="0.2">
|
||||
<title xml:lang="ko">애드온</title>
|
||||
<title xml:lang="en">Addon</title>
|
||||
<title xml:lang="vi">Addon</title>
|
||||
<title xml:lang="es">Addon</title>
|
||||
<title xml:lang="zh-CN">插件管理</title>
|
||||
<title xml:lang="jp">アドオン</title>
|
||||
<title xml:lang="fr">Additions</title>
|
||||
<title xml:lang="ru">Аддон</title>
|
||||
<title xml:lang="zh-TW">附加元件</title>
|
||||
<description xml:lang="ko">애드온을 등록하거나 사용/미사용을 설정하는 애드온 관리 모듈입니다.</description>
|
||||
<description xml:lang="en">This module is for maintaining addons which can toggle use and disuse states.</description>
|
||||
<description xml:lang="vi">Module này dành cho việc bảo trì những Addon đang sử dụng và không sử dụng.</description>
|
||||
<description xml:lang="es">Este Módulo es para agregar Addons, como también el manejo de ellos.</description>
|
||||
<description xml:lang="zh-CN">登录插件或设置启用/禁用插件的管理模块。</description>
|
||||
<description xml:lang="jp">アドオンの「登録、使用・未使用」などを設定する管理モジュールです。</description>
|
||||
<description xml:lang="fr">Ce module est pour les Additions de maintien qui peuvent basculer des états d'utilisation et de désuétude. </description>
|
||||
<description xml:lang="ru">Этот модуль служит для управления аддонами, использование которых Вы можете включать и выключать.</description>
|
||||
<description xml:lang="zh-TW">設定附加元件「登錄、啟用、禁用」的管理模組。</description>
|
||||
<version>0.1</version>
|
||||
<date>2007-02-28</date>
|
||||
<category>utility</category>
|
||||
|
||||
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
|
||||
<name xml:lang="ko">zero</name>
|
||||
<name xml:lang="en">zero</name>
|
||||
<name xml:lang="vi">zero</name>
|
||||
<name xml:lang="es">zero</name>
|
||||
<name xml:lang="zh-CN">zero</name>
|
||||
<name xml:lang="jp">zero</name>
|
||||
<name xml:lang="fr">zero</name>
|
||||
<name xml:lang="ru">zero</name>
|
||||
<name xml:lang="zh-TW">zero</name>
|
||||
</author>
|
||||
</module>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="0.2">
|
||||
<title xml:lang="ko">애드온</title>
|
||||
<title xml:lang="en">Addon</title>
|
||||
<title xml:lang="vi">Addon</title>
|
||||
<title xml:lang="es">Addon</title>
|
||||
<title xml:lang="zh-CN">插件管理</title>
|
||||
<title xml:lang="jp">アドオン</title>
|
||||
<title xml:lang="fr">Additions</title>
|
||||
<title xml:lang="ru">Аддон</title>
|
||||
<title xml:lang="zh-TW">附加元件</title>
|
||||
<description xml:lang="ko">애드온을 등록하거나 사용/미사용을 설정하는 애드온 관리 모듈입니다.</description>
|
||||
<description xml:lang="en">This module is for maintaining addons which can toggle use and disuse states.</description>
|
||||
<description xml:lang="vi">Module này dành cho việc bảo trì những Addon đang sử dụng và không sử dụng.</description>
|
||||
<description xml:lang="es">Este Módulo es para agregar Addons, como también el manejo de ellos.</description>
|
||||
<description xml:lang="zh-CN">登录插件或设置启用/禁用插件的管理模块。</description>
|
||||
<description xml:lang="jp">アドオンの「登録、使用・未使用」などを設定する管理モジュールです。</description>
|
||||
<description xml:lang="fr">Ce module est pour les Additions de maintien qui peuvent basculer des états d'utilisation et de désuétude. </description>
|
||||
<description xml:lang="ru">Этот модуль служит для управления аддонами, использование которых Вы можете включать и выключать.</description>
|
||||
<description xml:lang="zh-TW">設定附加元件「登錄、啟用、禁用」的管理模組。</description>
|
||||
<version>0.1</version>
|
||||
<date>2007-02-28</date>
|
||||
<category>utility</category>
|
||||
|
||||
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
|
||||
<name xml:lang="ko">NHN</name>
|
||||
<name xml:lang="en">NHN</name>
|
||||
<name xml:lang="vi">NHN</name>
|
||||
<name xml:lang="es">NHN</name>
|
||||
<name xml:lang="zh-CN">NHN</name>
|
||||
<name xml:lang="jp">NHN</name>
|
||||
<name xml:lang="fr">NHN</name>
|
||||
<name xml:lang="ru">NHN</name>
|
||||
<name xml:lang="zh-TW">NHN</name>
|
||||
</author>
|
||||
</module>
|
||||
|
|
|
|||
|
|
@ -1,17 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
* @file en.lang.php
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief English Language Pack
|
||||
**/
|
||||
|
||||
$lang->addon = "Addon";
|
||||
|
||||
$lang->addon_info = 'Summary of this Addon';
|
||||
$lang->addon_maker = 'Author of this Addon';
|
||||
$lang->addon_license = 'License';
|
||||
$lang->addon_history = 'Addon History';
|
||||
|
||||
$lang->about_addon_mid = "Addons can select targets.<br />(All targets will be selected when nothing is selected)";
|
||||
$lang->about_addon = 'Addon is for controlling actions rather than displaying the HTML results.<br />Simply by toggling any addons you want on or off, you can use very useful functions to administer your website';
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file en.lang.php
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief English Language Pack
|
||||
**/
|
||||
|
||||
$lang->addon = "Addon";
|
||||
|
||||
$lang->addon_info = 'Summary of this Addon';
|
||||
$lang->addon_maker = 'Author of this Addon';
|
||||
$lang->addon_license = 'License';
|
||||
$lang->addon_history = 'Addon History';
|
||||
|
||||
$lang->about_addon_mid = "Addons can select targets.<br />(All targets will be selected when nothing is selected)";
|
||||
$lang->about_addon = 'Addon is for controlling actions rather than displaying the HTML results.<br />Simply by toggling any addons you want on or off, you can use very useful functions to administer your website';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @archivo es.lang.php
|
||||
* @autor zero (zero@nzeo.com)
|
||||
* @autor NHN (developers@xpressengine.com)
|
||||
* @sumario Paquete del idioma español
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/addon/lang/fr.lang.php
|
||||
* @author zero (zero@nzeo.com) Traduit par Pierre Duvent(PierreDuvent@gamil.com)
|
||||
* @author NHN (developers@xpressengine.com) Traduit par Pierre Duvent(PierreDuvent@gamil.com)
|
||||
* @brief Paquet du langage en français pour le module de Compagnon
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,17 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/addon/lang/jp.lang.php
|
||||
* @author zero (zero@nzeo.com) 翻訳:RisaPapa、ミニミ
|
||||
* @brief 日本語言語パッケージ
|
||||
**/
|
||||
|
||||
$lang->addon = 'アドオン';
|
||||
|
||||
$lang->addon_info = 'アドオン情報';
|
||||
$lang->addon_maker = 'アドオン制作者';
|
||||
$lang->addon_license = 'ライセンス';
|
||||
$lang->addon_history = '変更履歴';
|
||||
|
||||
$lang->about_addon_mid = 'アドオンが使われる対象を指定します。<br />(選択なしの場合、全てのモジュールが利用可能対象)';
|
||||
$lang->about_addon = 'アドオンは、HTMLの出力をコントロールすると言うより、動作を制御する役割をします。お好みのアドオンを「使用/未使用」に設定するだけで、サイトの運営に有用な機能が利用出来ます。';
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file modules/addon/lang/jp.lang.php
|
||||
* @author NHN (developers@xpressengine.com) 翻訳:RisaPapa、ミニミ
|
||||
* @brief 日本語言語パッケージ
|
||||
**/
|
||||
|
||||
$lang->addon = 'アドオン';
|
||||
|
||||
$lang->addon_info = 'アドオン情報';
|
||||
$lang->addon_maker = 'アドオン制作者';
|
||||
$lang->addon_license = 'ライセンス';
|
||||
$lang->addon_history = '変更履歴';
|
||||
|
||||
$lang->about_addon_mid = 'アドオンが使われる対象を指定します。<br />(選択なしの場合、全てのモジュールが利用可能対象)';
|
||||
$lang->about_addon = 'アドオンは、HTMLの出力をコントロールすると言うより、動作を制御する役割をします。お好みのアドオンを「使用/未使用」に設定するだけで、サイトの運営に有用な機能が利用出来ます。';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,17 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
* @file ko.lang.php
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief 한국어 언어팩
|
||||
**/
|
||||
|
||||
$lang->addon = '애드온';
|
||||
|
||||
$lang->addon_info = '애드온 정보';
|
||||
$lang->addon_maker = '애드온 제작자';
|
||||
$lang->addon_license = '라이선스';
|
||||
$lang->addon_history = '변경 이력';
|
||||
|
||||
$lang->about_addon_mid = '애드온이 사용될 대상을 지정할 수 있습니다.<br />(모두 해제 시 모든 대상에서 사용 가능합니다.)';
|
||||
$lang->about_addon = '애드온은 HTML결과물을 출력하기보다는 동작을 제어하는 역할을 합니다.<br />원하시는 애드온을 ON/OFF 하시는 것만으로도 사이트 운영에 유용한 기능을 연동할 수 있습니다.';
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file ko.lang.php
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief 한국어 언어팩
|
||||
**/
|
||||
|
||||
$lang->addon = '애드온';
|
||||
|
||||
$lang->addon_info = '애드온 정보';
|
||||
$lang->addon_maker = '애드온 제작자';
|
||||
$lang->addon_license = '라이선스';
|
||||
$lang->addon_history = '변경 이력';
|
||||
|
||||
$lang->about_addon_mid = '애드온이 사용될 대상을 지정할 수 있습니다.<br />(모두 해제 시 모든 대상에서 사용 가능합니다.)';
|
||||
$lang->about_addon = '애드온은 HTML결과물을 출력하기보다는 동작을 제어하는 역할을 합니다.<br />원하시는 애드온을 ON/OFF 하시는 것만으로도 사이트 운영에 유용한 기능을 연동할 수 있습니다.';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,17 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
* @file ru.lang.php
|
||||
* @author zero <zero@nzeo.com> | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
|
||||
* @brief Russian basic language pack
|
||||
**/
|
||||
|
||||
$lang->addon = "Аддон";
|
||||
|
||||
$lang->addon_info = 'Информация об аддоне';
|
||||
$lang->addon_maker = 'Автор аддона';
|
||||
$lang->addon_license = 'License';
|
||||
$lang->addon_history = 'История аддона';
|
||||
|
||||
$lang->about_addon_mid = "애드온이 사용될 대상을 지정할 수 있습니다.<br />(모두 해제시 모든 대상에서 사용 가능합니다)";
|
||||
$lang->about_addon = 'Аддон служит больше для контролирования действий, чем для отображения HTML-результатов.<br />Простым включением/выключением любых аддонов, Вы можете использовать очень полезные функции для администрирования Вашего веб-сайта';
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file ru.lang.php
|
||||
* @author NHN (developers@xpressengine.com) | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
|
||||
* @brief Russian basic language pack
|
||||
**/
|
||||
|
||||
$lang->addon = "Аддон";
|
||||
|
||||
$lang->addon_info = 'Информация об аддоне';
|
||||
$lang->addon_maker = 'Автор аддона';
|
||||
$lang->addon_license = 'License';
|
||||
$lang->addon_history = 'История аддона';
|
||||
|
||||
$lang->about_addon_mid = "애드온이 사용될 대상을 지정할 수 있습니다.<br />(모두 해제시 모든 대상에서 사용 가능합니다)";
|
||||
$lang->about_addon = 'Аддон служит больше для контролирования действий, чем для отображения HTML-результатов.<br />Простым включением/выключением любых аддонов, Вы можете использовать очень полезные функции для администрирования Вашего веб-сайта';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,19 +1,19 @@
|
|||
<?php
|
||||
/* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
||||
░░ * @File : common/lang/vi.lang.php ░░
|
||||
░░ * @Author : zero (zero@nzeo.com) ░░
|
||||
░░ * @Trans : Đào Đức Duy (ducduy.dao.vn@vietxe.net) ░░
|
||||
░░ * @Website: http://vietxe.net ░░
|
||||
░░ * @Brief : Vietnamese Language Pack (Only basic words are included here) ░░
|
||||
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ */
|
||||
|
||||
$lang->addon = "Addon";
|
||||
|
||||
$lang->addon_info = 'Thông tin về Addon';
|
||||
$lang->addon_maker = 'Tác giả của Addon';
|
||||
$lang->addon_license = 'Giấy phép';
|
||||
$lang->addon_history = 'Lịch sử';
|
||||
|
||||
$lang->about_addon_mid = "Addon có thể chọn những vị trí.<br />(Tất cả những vị trí mà chưa Addon nào sử dụng.)";
|
||||
$lang->about_addon = 'Addon có nhiệm vụ hiển thị và kiểm soát kết quả HTML.<br />Bạn có thể mở hoặc tắt bất cứ Addon nào bạn muốn.';
|
||||
?>
|
||||
<?php
|
||||
/* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
||||
░░ * @File : common/lang/vi.lang.php ░░
|
||||
░░ * @Author : NHN (developers@xpressengine.com) ░░
|
||||
░░ * @Trans : Đào Đức Duy (ducduy.dao.vn@vietxe.net) ░░
|
||||
░░ * @Website: http://vietxe.net ░░
|
||||
░░ * @Brief : Vietnamese Language Pack (Only basic words are included here) ░░
|
||||
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ */
|
||||
|
||||
$lang->addon = "Addon";
|
||||
|
||||
$lang->addon_info = 'Thông tin về Addon';
|
||||
$lang->addon_maker = 'Tác giả của Addon';
|
||||
$lang->addon_license = 'Giấy phép';
|
||||
$lang->addon_history = 'Lịch sử';
|
||||
|
||||
$lang->about_addon_mid = "Addon có thể chọn những vị trí.<br />(Tất cả những vị trí mà chưa Addon nào sử dụng.)";
|
||||
$lang->about_addon = 'Addon có nhiệm vụ hiển thị và kiểm soát kết quả HTML.<br />Bạn có thể mở hoặc tắt bất cứ Addon nào bạn muốn.';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file zh-CN.lang.php
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief 简体中文语言包
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/addon/lang/zh-TW.lang.php
|
||||
* @author zero (zero@nzeo.com) 翻譯:royallin
|
||||
* @author NHN (developers@xpressengine.com) 翻譯:royallin
|
||||
* @brief 附加元件(addon)模組正體中文語言
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @archivo es.lang.php
|
||||
* @autor zero (developers@xpressengine.com)
|
||||
* @autor NHN (developers@xpressengine.com)
|
||||
* @sumario Paquete del idioma español (sólo los básicos)
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
||||
░░ * @File : common/lang/vi.lang.php ░░
|
||||
░░ * @Author : zero (developers@xpressengine.com) ░░
|
||||
░░ * @Author : NHN (developers@xpressengine.com) ░░
|
||||
░░ * @Trans : DucDuy Dao (webmaster@xpressengine.vn) ░░
|
||||
░░ * @Website: http://xpressengine.vn ░░
|
||||
░░ * @Brief : Vietnamese Language Pack (Only basic words are included here) ░░
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
@charset "utf-8";
|
||||
/* NHN > UIT Center > Open UI Technology Team > Jeong Chan Myeong(dece24@nhncorp.com) */
|
||||
/* NHN (developers@xpressengine.com) */
|
||||
|
||||
#xeAdmin {/* background-color:#fff; */}
|
||||
#xeAdmin .open{ display:block !important;}
|
||||
#xeAdmin h1.xeAdmin { float:left; white-space:nowrap; margin:0;padding:0;}
|
||||
#xeAdmin caption{ text-align:left;}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
@charset "utf-8";
|
||||
/* NHN > UIT Center > Open UI Technology Team > Jeong Chan Myeong(dece24@nhncorp.com) */
|
||||
/* NHN (developers@xpressengine.com) */
|
||||
|
||||
#xeAdmin{ font-family:Sans-serif;}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
@charset "utf-8";
|
||||
|
||||
/* NHN > UIT Center > Open UI Technology Team > Jeong Chan Myeong(dece24@nhncorp.com) */
|
||||
/* NHN (developers@xpressengine.com) */
|
||||
|
||||
#xeAdmin .header{ position:relative; height:62px; padding:10px 15px 10px 30px; background:url(../img/bgHeader.gif) repeat-x; z-index:10;}
|
||||
#xeAdmin .footer{ height:26px; padding-top:10px; background:url(../img/bgFooter.gif) repeat-x; text-align:center;}
|
||||
#xeAdmin .gnb{ position:relative; float:right; white-space:nowrap; clear:right; margin:0; padding:0;}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
@charset "utf-8";
|
||||
/* NHN > UIT Center > Open UI Platform Team > Jeong Chan Myeong(dece24@nhncorp.com) */
|
||||
/* NHN (developers@xpressengine.com) */
|
||||
|
||||
/* Pagination Reset */
|
||||
#xeAdmin .pagination{ padding:15px 0; margin:0; text-align:center; clear:both; }
|
||||
|
|
|
|||
|
|
@ -1,243 +1,243 @@
|
|||
<?php
|
||||
/**
|
||||
* @class autoinstallAdminController
|
||||
* @author sol (sol@ngleader.com)
|
||||
* @brief autoinstall 모듈의 admin controller class
|
||||
**/
|
||||
|
||||
require_once(_XE_PATH_.'modules/autoinstall/autoinstall.lib.php');
|
||||
|
||||
class autoinstallAdminController extends autoinstall {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
function checkFileCheckSum($file, $checksum){
|
||||
$local_checksum = md5_file(FileHandler::getRealPath($file));
|
||||
return ($local_checksum === $checksum);
|
||||
}
|
||||
|
||||
function _cleanDownloaded($obj){
|
||||
FileHandler::removeDir($obj->download_path);
|
||||
}
|
||||
|
||||
function procAutoinstallAdminUpdateinfo()
|
||||
{
|
||||
$oModel = &getModel('autoinstall');
|
||||
$item = $oModel->getLatestPackage();
|
||||
if($item)
|
||||
{
|
||||
$params["updatedate"] = $item->updatedate;
|
||||
}
|
||||
|
||||
$params["act"] = "getResourceapiUpdate";
|
||||
$body = XmlGenerater::generate($params);
|
||||
$buff = FileHandler::getRemoteResource($this->uri, $body, 3, "POST", "application/xml");
|
||||
$xml = new XmlParser();
|
||||
$xmlDoc = $xml->parse($buff);
|
||||
$this->updateCategory($xmlDoc);
|
||||
$this->updatePackages($xmlDoc);
|
||||
$this->checkInstalled();
|
||||
|
||||
$this->setMessage("success_updated");
|
||||
}
|
||||
|
||||
function checkInstalled()
|
||||
{
|
||||
executeQuery("autoinstall.deleteInstalledPackage");
|
||||
$oModel =& getModel('autoinstall');
|
||||
$packages = $oModel->getPackages();
|
||||
foreach($packages as $package)
|
||||
{
|
||||
$real_path = FileHandler::getRealPath($package->path);
|
||||
if(!file_exists($real_path)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$type = $oModel->getTypeFromPath($package->path);
|
||||
if($type == "core")
|
||||
{
|
||||
$version = __ZBXE_VERSION__;
|
||||
}
|
||||
else
|
||||
{
|
||||
$config_file = null;
|
||||
switch($type)
|
||||
{
|
||||
case "m.layout":
|
||||
$type = "layout";
|
||||
case "module":
|
||||
case "addon":
|
||||
case "layout":
|
||||
case "widget":
|
||||
$config_file = "/conf/info.xml";
|
||||
break;
|
||||
case "component":
|
||||
$config_file = "/info.xml";
|
||||
break;
|
||||
case "style":
|
||||
case "m.skin":
|
||||
$type = "skin";
|
||||
case "skin":
|
||||
case "widgetstyle":
|
||||
$config_file = "/skin.xml";
|
||||
break;
|
||||
case "drcomponent":
|
||||
$config_file = "/info.xml";
|
||||
$type = "component";
|
||||
break;
|
||||
}
|
||||
if(!$config_file) continue;
|
||||
$xml = new XmlParser();
|
||||
$xmlDoc = $xml->loadXmlFile($real_path.$config_file);
|
||||
if(!$xmlDoc) continue;
|
||||
$version = $xmlDoc->{$type}->version->body;
|
||||
}
|
||||
|
||||
$args = null;
|
||||
$args->package_srl = $package->package_srl;
|
||||
$args->version = $package->version;
|
||||
$args->current_version = $version;
|
||||
if(version_compare($args->version, $args->current_version, ">"))
|
||||
{
|
||||
$args->need_update="Y";
|
||||
}
|
||||
else
|
||||
{
|
||||
$args->need_update="N";
|
||||
}
|
||||
|
||||
$output = executeQuery("autoinstall.insertInstalledPackage", $args);
|
||||
}
|
||||
}
|
||||
|
||||
function procAutoinstallAdminPackageinstall()
|
||||
{
|
||||
set_time_limit(0);
|
||||
$package_srls = Context::get('package_srl');
|
||||
$oModel =& getModel('autoinstall');
|
||||
$packages = explode(',', $package_srls);
|
||||
$ftp_info = Context::getFTPInfo();
|
||||
if(!$_SESSION['ftp_password'])
|
||||
{
|
||||
$ftp_password = Context::get('ftp_password');
|
||||
}
|
||||
else
|
||||
{
|
||||
$ftp_password = $_SESSION['ftp_password'];
|
||||
}
|
||||
|
||||
foreach($packages as $package_srl)
|
||||
{
|
||||
$package = $oModel->getPackage($package_srl);
|
||||
if($ftp_info->sftp && $ftp_info->sftp == 'Y')
|
||||
{
|
||||
$oModuleInstaller = new SFTPModuleInstaller($package);
|
||||
}
|
||||
else if(function_exists(ftp_connect))
|
||||
{
|
||||
$oModuleInstaller = new PHPFTPModuleInstaller($package);
|
||||
}
|
||||
else
|
||||
{
|
||||
$oModuleInstaller = new FTPModuleInstaller($package);
|
||||
}
|
||||
|
||||
$oModuleInstaller->setPassword($ftp_password);
|
||||
$output = $oModuleInstaller->install();
|
||||
if(!$output->toBool()) return $output;
|
||||
}
|
||||
$this->setMessage('success_installed');
|
||||
}
|
||||
|
||||
function updatePackages(&$xmlDoc)
|
||||
{
|
||||
$oModel =& getModel('autoinstall');
|
||||
if(!$xmlDoc->response->packages->item) return;
|
||||
if(!is_array($xmlDoc->response->packages->item))
|
||||
{
|
||||
$xmlDoc->response->packages->item = array($xmlDoc->response->packages->item);
|
||||
}
|
||||
$targets = array('package_srl', 'updatedate', 'latest_item_srl', 'path', 'version', 'category_srl');
|
||||
foreach($xmlDoc->response->packages->item as $item)
|
||||
{
|
||||
$args = null;
|
||||
foreach($targets as $target)
|
||||
{
|
||||
$args->{$target} = $item->{$target}->body;
|
||||
}
|
||||
if($oModel->getPackage($args->package_srl))
|
||||
{
|
||||
$output = executeQuery("autoinstall.updatePackage", $args);
|
||||
}
|
||||
else
|
||||
{
|
||||
$output = executeQuery("autoinstall.insertPackage", $args);
|
||||
if(!$output->toBool())
|
||||
{
|
||||
$output = executeQuery("autoinstall.deletePackage", $args);
|
||||
$output = executeQuery("autoinstall.insertPackage", $args);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function updateCategory(&$xmlDoc)
|
||||
{
|
||||
executeQuery("autoinstall.deleteCategory", $args);
|
||||
$oModel =& getModel('autoinstall');
|
||||
if(!is_array($xmlDoc->response->categorylist->item))
|
||||
{
|
||||
$xmlDoc->response->categorylist->item = array($xmlDoc->response->categorylist->item);
|
||||
}
|
||||
foreach($xmlDoc->response->categorylist->item as $item)
|
||||
{
|
||||
$args = null;
|
||||
$args->category_srl = $item->category_srl->body;
|
||||
$args->parent_srl = $item->parent_srl->body;
|
||||
$args->title = $item->title->body;
|
||||
executeQuery("autoinstall.insertCategory", $args);
|
||||
}
|
||||
}
|
||||
|
||||
function procAutoinstallAdminUninstallPackage()
|
||||
{
|
||||
$package_srl = Context::get('package_srl');
|
||||
$oModel =& getModel('autoinstall');
|
||||
$package = $oModel->getPackage($package_srl);
|
||||
$path = $package->path;
|
||||
|
||||
if(!$_SESSION['ftp_password'])
|
||||
{
|
||||
$ftp_password = Context::get('ftp_password');
|
||||
}
|
||||
else
|
||||
{
|
||||
$ftp_password = $_SESSION['ftp_password'];
|
||||
}
|
||||
$ftp_info = Context::getFTPInfo();
|
||||
|
||||
if($ftp_info->sftp && $ftp_info->sftp == 'Y')
|
||||
{
|
||||
$oModuleInstaller = new SFTPModuleInstaller($package);
|
||||
}
|
||||
else if(function_exists(ftp_connect))
|
||||
{
|
||||
$oModuleInstaller = new PHPFTPModuleInstaller($package);
|
||||
}
|
||||
else
|
||||
{
|
||||
$oModuleInstaller = new FTPModuleInstaller($package);
|
||||
}
|
||||
|
||||
$oModuleInstaller->setPassword($ftp_password);
|
||||
$output = $oModuleInstaller->uninstall();
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class autoinstallAdminController
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief autoinstall 모듈의 admin controller class
|
||||
**/
|
||||
|
||||
require_once(_XE_PATH_.'modules/autoinstall/autoinstall.lib.php');
|
||||
|
||||
class autoinstallAdminController extends autoinstall {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
function checkFileCheckSum($file, $checksum){
|
||||
$local_checksum = md5_file(FileHandler::getRealPath($file));
|
||||
return ($local_checksum === $checksum);
|
||||
}
|
||||
|
||||
function _cleanDownloaded($obj){
|
||||
FileHandler::removeDir($obj->download_path);
|
||||
}
|
||||
|
||||
function procAutoinstallAdminUpdateinfo()
|
||||
{
|
||||
$oModel = &getModel('autoinstall');
|
||||
$item = $oModel->getLatestPackage();
|
||||
if($item)
|
||||
{
|
||||
$params["updatedate"] = $item->updatedate;
|
||||
}
|
||||
|
||||
$params["act"] = "getResourceapiUpdate";
|
||||
$body = XmlGenerater::generate($params);
|
||||
$buff = FileHandler::getRemoteResource($this->uri, $body, 3, "POST", "application/xml");
|
||||
$xml = new XmlParser();
|
||||
$xmlDoc = $xml->parse($buff);
|
||||
$this->updateCategory($xmlDoc);
|
||||
$this->updatePackages($xmlDoc);
|
||||
$this->checkInstalled();
|
||||
|
||||
$this->setMessage("success_updated");
|
||||
}
|
||||
|
||||
function checkInstalled()
|
||||
{
|
||||
executeQuery("autoinstall.deleteInstalledPackage");
|
||||
$oModel =& getModel('autoinstall');
|
||||
$packages = $oModel->getPackages();
|
||||
foreach($packages as $package)
|
||||
{
|
||||
$real_path = FileHandler::getRealPath($package->path);
|
||||
if(!file_exists($real_path)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$type = $oModel->getTypeFromPath($package->path);
|
||||
if($type == "core")
|
||||
{
|
||||
$version = __ZBXE_VERSION__;
|
||||
}
|
||||
else
|
||||
{
|
||||
$config_file = null;
|
||||
switch($type)
|
||||
{
|
||||
case "m.layout":
|
||||
$type = "layout";
|
||||
case "module":
|
||||
case "addon":
|
||||
case "layout":
|
||||
case "widget":
|
||||
$config_file = "/conf/info.xml";
|
||||
break;
|
||||
case "component":
|
||||
$config_file = "/info.xml";
|
||||
break;
|
||||
case "style":
|
||||
case "m.skin":
|
||||
$type = "skin";
|
||||
case "skin":
|
||||
case "widgetstyle":
|
||||
$config_file = "/skin.xml";
|
||||
break;
|
||||
case "drcomponent":
|
||||
$config_file = "/info.xml";
|
||||
$type = "component";
|
||||
break;
|
||||
}
|
||||
if(!$config_file) continue;
|
||||
$xml = new XmlParser();
|
||||
$xmlDoc = $xml->loadXmlFile($real_path.$config_file);
|
||||
if(!$xmlDoc) continue;
|
||||
$version = $xmlDoc->{$type}->version->body;
|
||||
}
|
||||
|
||||
$args = null;
|
||||
$args->package_srl = $package->package_srl;
|
||||
$args->version = $package->version;
|
||||
$args->current_version = $version;
|
||||
if(version_compare($args->version, $args->current_version, ">"))
|
||||
{
|
||||
$args->need_update="Y";
|
||||
}
|
||||
else
|
||||
{
|
||||
$args->need_update="N";
|
||||
}
|
||||
|
||||
$output = executeQuery("autoinstall.insertInstalledPackage", $args);
|
||||
}
|
||||
}
|
||||
|
||||
function procAutoinstallAdminPackageinstall()
|
||||
{
|
||||
set_time_limit(0);
|
||||
$package_srls = Context::get('package_srl');
|
||||
$oModel =& getModel('autoinstall');
|
||||
$packages = explode(',', $package_srls);
|
||||
$ftp_info = Context::getFTPInfo();
|
||||
if(!$_SESSION['ftp_password'])
|
||||
{
|
||||
$ftp_password = Context::get('ftp_password');
|
||||
}
|
||||
else
|
||||
{
|
||||
$ftp_password = $_SESSION['ftp_password'];
|
||||
}
|
||||
|
||||
foreach($packages as $package_srl)
|
||||
{
|
||||
$package = $oModel->getPackage($package_srl);
|
||||
if($ftp_info->sftp && $ftp_info->sftp == 'Y')
|
||||
{
|
||||
$oModuleInstaller = new SFTPModuleInstaller($package);
|
||||
}
|
||||
else if(function_exists(ftp_connect))
|
||||
{
|
||||
$oModuleInstaller = new PHPFTPModuleInstaller($package);
|
||||
}
|
||||
else
|
||||
{
|
||||
$oModuleInstaller = new FTPModuleInstaller($package);
|
||||
}
|
||||
|
||||
$oModuleInstaller->setPassword($ftp_password);
|
||||
$output = $oModuleInstaller->install();
|
||||
if(!$output->toBool()) return $output;
|
||||
}
|
||||
$this->setMessage('success_installed');
|
||||
}
|
||||
|
||||
function updatePackages(&$xmlDoc)
|
||||
{
|
||||
$oModel =& getModel('autoinstall');
|
||||
if(!$xmlDoc->response->packages->item) return;
|
||||
if(!is_array($xmlDoc->response->packages->item))
|
||||
{
|
||||
$xmlDoc->response->packages->item = array($xmlDoc->response->packages->item);
|
||||
}
|
||||
$targets = array('package_srl', 'updatedate', 'latest_item_srl', 'path', 'version', 'category_srl');
|
||||
foreach($xmlDoc->response->packages->item as $item)
|
||||
{
|
||||
$args = null;
|
||||
foreach($targets as $target)
|
||||
{
|
||||
$args->{$target} = $item->{$target}->body;
|
||||
}
|
||||
if($oModel->getPackage($args->package_srl))
|
||||
{
|
||||
$output = executeQuery("autoinstall.updatePackage", $args);
|
||||
}
|
||||
else
|
||||
{
|
||||
$output = executeQuery("autoinstall.insertPackage", $args);
|
||||
if(!$output->toBool())
|
||||
{
|
||||
$output = executeQuery("autoinstall.deletePackage", $args);
|
||||
$output = executeQuery("autoinstall.insertPackage", $args);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function updateCategory(&$xmlDoc)
|
||||
{
|
||||
executeQuery("autoinstall.deleteCategory", $args);
|
||||
$oModel =& getModel('autoinstall');
|
||||
if(!is_array($xmlDoc->response->categorylist->item))
|
||||
{
|
||||
$xmlDoc->response->categorylist->item = array($xmlDoc->response->categorylist->item);
|
||||
}
|
||||
foreach($xmlDoc->response->categorylist->item as $item)
|
||||
{
|
||||
$args = null;
|
||||
$args->category_srl = $item->category_srl->body;
|
||||
$args->parent_srl = $item->parent_srl->body;
|
||||
$args->title = $item->title->body;
|
||||
executeQuery("autoinstall.insertCategory", $args);
|
||||
}
|
||||
}
|
||||
|
||||
function procAutoinstallAdminUninstallPackage()
|
||||
{
|
||||
$package_srl = Context::get('package_srl');
|
||||
$oModel =& getModel('autoinstall');
|
||||
$package = $oModel->getPackage($package_srl);
|
||||
$path = $package->path;
|
||||
|
||||
if(!$_SESSION['ftp_password'])
|
||||
{
|
||||
$ftp_password = Context::get('ftp_password');
|
||||
}
|
||||
else
|
||||
{
|
||||
$ftp_password = $_SESSION['ftp_password'];
|
||||
}
|
||||
$ftp_info = Context::getFTPInfo();
|
||||
|
||||
if($ftp_info->sftp && $ftp_info->sftp == 'Y')
|
||||
{
|
||||
$oModuleInstaller = new SFTPModuleInstaller($package);
|
||||
}
|
||||
else if(function_exists(ftp_connect))
|
||||
{
|
||||
$oModuleInstaller = new PHPFTPModuleInstaller($package);
|
||||
}
|
||||
else
|
||||
{
|
||||
$oModuleInstaller = new FTPModuleInstaller($package);
|
||||
}
|
||||
|
||||
$oModuleInstaller->setPassword($ftp_password);
|
||||
$output = $oModuleInstaller->uninstall();
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,319 +1,319 @@
|
|||
<?php
|
||||
/**
|
||||
* @class autoinstallAdminView
|
||||
* @author sol (sol@ngleader.com)
|
||||
* @brief autoinstall 모듈의 admin view class
|
||||
**/
|
||||
|
||||
|
||||
class autoinstallAdminView extends autoinstall {
|
||||
|
||||
var $categories;
|
||||
var $ftp_set = false;
|
||||
|
||||
function init() {
|
||||
$template_path = sprintf("%stpl/",$this->module_path);
|
||||
Context::set('original_site', $this->original_site);
|
||||
Context::set('uri', $this->uri);
|
||||
$this->setTemplatePath($template_path);
|
||||
|
||||
$ftp_info = Context::getFTPInfo();
|
||||
if(!$ftp_info->ftp_root_path) Context::set('show_ftp_note', true);
|
||||
else $this->ftp_set = true;
|
||||
|
||||
|
||||
$this->dispCategory();
|
||||
$oModel = &getModel('autoinstall');
|
||||
Context::set('tCount', $oModel->getPackageCount(null));
|
||||
Context::set('iCount', $oModel->getInstalledPackageCount());
|
||||
}
|
||||
|
||||
function rearrange(&$item, &$targets)
|
||||
{
|
||||
$ret = null;
|
||||
foreach($targets as $target)
|
||||
{
|
||||
$ret->{$target} = $item->{$target}->body;
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
function rearranges($items, $packages = null)
|
||||
{
|
||||
if(!is_array($items)) $items = array($items);
|
||||
$item_list = array();
|
||||
$targets = array('category_srl', 'package_srl', 'item_screenshot_url', 'package_voted', 'package_voter', 'package_description', 'package_downloaded', 'item_regdate', 'title', 'item_version', 'package_star', 'depfrom');
|
||||
$targetpackages = array();
|
||||
foreach($items as $item)
|
||||
{
|
||||
$targetpackages[$item->package_srl->body] = 0;
|
||||
}
|
||||
$oModel = &getModel('autoinstall');
|
||||
if($package == null)
|
||||
$packages = $oModel->getInstalledPackages(array_keys($targetpackages));
|
||||
$depto = array();
|
||||
foreach($items as $item)
|
||||
{
|
||||
$v = $this->rearrange($item, $targets);
|
||||
if($packages[$v->package_srl])
|
||||
{
|
||||
$v->current_version = $packages[$v->package_srl]->current_version;
|
||||
$v->need_update = $packages[$v->package_srl]->need_update;
|
||||
$v->type = $oModel->getTypeFromPath($packages[$v->package_srl]->path);
|
||||
if($this->ftp_set && $v->depfrom) {
|
||||
$depfrom = explode("," , $v->depfrom);
|
||||
foreach($depfrom as $package_srl)
|
||||
{
|
||||
$depto[$package_srl][] = $v->package_srl;
|
||||
}
|
||||
}
|
||||
if($v->type == "core") $v->avail_remove = false;
|
||||
else if($v->type == "module") {
|
||||
$v->avail_remove = $oModel->checkRemovable($packages[$v->package_srl]->path);
|
||||
}
|
||||
else $v->avail_remove = true;
|
||||
}
|
||||
$item_list[$v->package_srl] = $v;
|
||||
}
|
||||
|
||||
if(count($depto) > 0)
|
||||
{
|
||||
$installed = $oModel->getInstalledPackages(implode(",", array_keys($depto)));
|
||||
foreach($installed as $key=>$val)
|
||||
{
|
||||
$path = $val->path;
|
||||
$type = $oModel->getTypeFromPath($path);
|
||||
if(!$type || $type == "core") continue;
|
||||
$config_file = $oModel->getConfigFilePath($type);
|
||||
if(!$config_file) continue;
|
||||
|
||||
$xml = new XmlParser();
|
||||
$xmlDoc = $xml->loadXmlFile(FileHandler::getRealPath($path).$config_file);
|
||||
if(!$xmlDoc) continue;
|
||||
if($type == "drcomponent") $type = "component";
|
||||
if($type == "style" || $type == "m.skin") $type = "skin";
|
||||
if($type == "m.layout") $type = "layout";
|
||||
$title = $xmlDoc->{$type}->title->body;
|
||||
$installed[$key]->title = $title;
|
||||
}
|
||||
Context::set('installed', $installed);
|
||||
foreach($installed as $key=>$val)
|
||||
{
|
||||
foreach($depto[$key] as $package_srl)
|
||||
{
|
||||
$item_list[$package_srl]->avail_remove = false;
|
||||
$item_list[$package_srl]->deps[] = $key;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $item_list;
|
||||
}
|
||||
|
||||
function dispAutoinstallAdminInstalledPackages()
|
||||
{
|
||||
$page = Context::get('page');
|
||||
if(!$page) $page = 1;
|
||||
Context::set('page', $page);
|
||||
$oModel = &getModel('autoinstall');
|
||||
$output = $oModel->getInstalledPackageList($page);
|
||||
$package_list = $output->data;
|
||||
|
||||
$params["act"] = "getResourceapiPackages";
|
||||
$params["package_srls"] = implode(",", array_keys($package_list));
|
||||
$body = XmlGenerater::generate($params);
|
||||
$buff = FileHandler::getRemoteResource($this->uri, $body, 3, "POST", "application/xml");
|
||||
$xml_lUpdate = new XmlParser();
|
||||
$xmlDoc = $xml_lUpdate->parse($buff);
|
||||
if($xmlDoc && $xmlDoc->response->packagelist->item)
|
||||
{
|
||||
$item_list = $this->rearranges($xmlDoc->response->packagelist->item, $package_list);
|
||||
$res = array();
|
||||
foreach($package_list as $package_srl => $package)
|
||||
{
|
||||
$res[] = $item_list[$package_srl];
|
||||
}
|
||||
Context::set('item_list', $res);
|
||||
}
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
|
||||
$this->setTemplateFile('index');
|
||||
}
|
||||
|
||||
function dispAutoinstallAdminInstall() {
|
||||
$package_srl = Context::get('package_srl');
|
||||
if(!$package_srl) return $this->dispAutoinstallAdminIndex();
|
||||
|
||||
$params["act"] = "getResourceapiInstallInfo";
|
||||
$params["package_srl"] = $package_srl;
|
||||
$xmlDoc = XmlGenerater::getXmlDoc($params);
|
||||
$oModel = &getModel('autoinstall');
|
||||
|
||||
$targetpackages = array();
|
||||
if($xmlDoc)
|
||||
{
|
||||
$xmlPackage =& $xmlDoc->response->package;
|
||||
$package->package_srl = $xmlPackage->package_srl->body;
|
||||
$package->title = $xmlPackage->title->body;
|
||||
$package->package_description = $xmlPackage->package_description->body;
|
||||
$package->version = $xmlPackage->version->body;
|
||||
$package->path = $xmlPackage->path->body;
|
||||
if($xmlPackage->depends)
|
||||
{
|
||||
if(!is_array($xmlPackage->depends->item)) $xmlPackage->depends->item = array($xmlPackage->depends->item);
|
||||
$package->depends = array();
|
||||
foreach($xmlPackage->depends->item as $item)
|
||||
{
|
||||
$dep_item = null;
|
||||
$dep_item->package_srl = $item->package_srl->body;
|
||||
$dep_item->title = $item->title->body;
|
||||
$dep_item->version = $item->version->body;
|
||||
$dep_item->path = $item->path->body;
|
||||
$package->depends[] = $dep_item;
|
||||
$targetpackages[$dep_item->package_srl] = 1;
|
||||
}
|
||||
$packages = $oModel->getInstalledPackages(array_keys($targetpackages));
|
||||
$package->deplist = "";
|
||||
foreach($package->depends as $key => $dep)
|
||||
{
|
||||
if(!$packages[$dep->package_srl]) {
|
||||
$package->depends[$key]->installed = false;
|
||||
$package->package_srl .= ",". $dep->package_srl;
|
||||
}
|
||||
else {
|
||||
$package->depends[$key]->installed = true;
|
||||
$package->depends[$key]->cur_version = $packages[$dep->package_srl]->current_version;
|
||||
if(version_compare($dep->version, $packages[$dep->package_srl]->current_version, ">"))
|
||||
{
|
||||
$package->depends[$key]->need_update = true;
|
||||
$package->package_srl .= ",". $dep->package_srl;
|
||||
}
|
||||
else
|
||||
{
|
||||
$package->need_update = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$installedPackage = $oModel->getInstalledPackage($package_srl);
|
||||
if($installedPackage) {
|
||||
$package->installed = true;
|
||||
$package->cur_version = $installedPackage->current_version;
|
||||
$package->need_update = version_compare($package->version, $installedPackage->current_version, ">");
|
||||
}
|
||||
|
||||
Context::set("package", $package);
|
||||
}
|
||||
if(!$_SESSION['ftp_password'])
|
||||
{
|
||||
Context::set('need_password', true);
|
||||
}
|
||||
$this->setTemplateFile('install');
|
||||
}
|
||||
|
||||
function dispAutoinstallAdminIndex() {
|
||||
$oModuleModel = &getModel('module');
|
||||
$config = $oModuleModel->getModuleConfig('autoinstall');
|
||||
$ftp_info = Context::getFTPInfo();
|
||||
if(!$ftp_info->ftp_root_path) Context::set('show_ftp_note', true);
|
||||
|
||||
$this->setTemplateFile('index');
|
||||
|
||||
$params = array();
|
||||
$params["act"] = "getResourceapiLastupdate";
|
||||
$body = XmlGenerater::generate($params);
|
||||
$buff = FileHandler::getRemoteResource($this->uri, $body, 3, "POST", "application/xml");
|
||||
$xml_lUpdate = new XmlParser();
|
||||
$lUpdateDoc = $xml_lUpdate->parse($buff);
|
||||
$updateDate = $lUpdateDoc->response->updatedate->body;
|
||||
|
||||
$oModel = &getModel('autoinstall');
|
||||
$item = $oModel->getLatestPackage();
|
||||
if(!$item || $item->updatedate < $updateDate || count($this->categories) < 1)
|
||||
{
|
||||
Context::set('need_update', true);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
$page = Context::get('page');
|
||||
if(!$page) $page = 1;
|
||||
Context::set('page', $page);
|
||||
|
||||
$order_type = Context::get('order_type');
|
||||
if(!in_array($order_type, array('asc', 'desc'))) $order_type = 'desc';
|
||||
Context::set('order_type', $order_type);
|
||||
|
||||
$order_target = Context::get('order_target');
|
||||
if(!in_array($order_target, array('newest', 'download', 'popular'))) $order_target = 'newest';
|
||||
Context::set('order_target', $order_target);
|
||||
|
||||
$search_keyword = Context::get('search_keyword');
|
||||
|
||||
$childrenList = Context::get('childrenList');
|
||||
$category_srl = Context::get('category_srl');
|
||||
if($childrenList) $params["category_srl"] = $childrenList;
|
||||
else if($category_srl) $params["category_srl"] = $category_srl;
|
||||
|
||||
$params["act"] = "getResourceapiPackagelist";
|
||||
$params["order_target"] = $order_target;
|
||||
$params["order_type"] = $order_type;
|
||||
$params["page"] = $page;
|
||||
if($search_keyword)
|
||||
{
|
||||
$params["search_keyword"] = $search_keyword;
|
||||
}
|
||||
$xmlDoc = XmlGenerater::getXmlDoc($params);
|
||||
if($xmlDoc && $xmlDoc->response->packagelist->item)
|
||||
{
|
||||
$item_list = $this->rearranges($xmlDoc->response->packagelist->item);
|
||||
Context::set('item_list', $item_list);
|
||||
$array = array('total_count', 'total_page', 'cur_page', 'page_count', 'first_page', 'last_page');
|
||||
$page_nav = $this->rearrange($xmlDoc->response->page_navigation, $array);
|
||||
$page_navigation = new PageHandler($page_nav->total_count, $page_nav->total_page, $page_nav->cur_page, $page_nav->page_count);
|
||||
Context::set('page_navigation', $page_navigation);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function dispCategory()
|
||||
{
|
||||
$oModel = &getModel('autoinstall');
|
||||
$this->categories = &$oModel->getCategoryList();
|
||||
Context::set('categories', $this->categories);
|
||||
}
|
||||
|
||||
function dispAutoinstallAdminUninstall()
|
||||
{
|
||||
$package_srl = Context::get('package_srl');
|
||||
if(!$package_srl) return $this->dispAutoinstallAdminIndex();
|
||||
$oModel =& getModel('autoinstall');
|
||||
$installedPackage = $oModel->getInstalledPackage($package_srl);
|
||||
if(!$installedPackage) return $this->dispAutoinstallAdminInstalledPackages();
|
||||
|
||||
if(!$_SESSION['ftp_password'])
|
||||
{
|
||||
Context::set('need_password', true);
|
||||
}
|
||||
$installedPackage = $oModel->getPackage($package_srl);
|
||||
$path = $installedPackage->path;
|
||||
$type = $oModel->getTypeFromPath($path);
|
||||
if(!$type || $type == "core") $this->stop("msg_invalid_request");
|
||||
$config_file = $oModel->getConfigFilePath($type);
|
||||
if(!$config_file) $this->stop("msg_invalid_request");
|
||||
|
||||
$xml = new XmlParser();
|
||||
$xmlDoc = $xml->loadXmlFile(FileHandler::getRealPath($path).$config_file);
|
||||
if(!$xmlDoc) $this->stop("msg_invalid_request");
|
||||
if($type == "drcomponent") $type = "component";
|
||||
if($type == "style") $type = "skin";
|
||||
$title = $xmlDoc->{$type}->title->body;
|
||||
$installedPackage->title = $title;
|
||||
$installedPackage->type = $type;
|
||||
Context::set('package', $installedPackage);
|
||||
|
||||
$this->setTemplateFile('uninstall');
|
||||
Context::addJsFilter($this->module_path.'tpl/filter', 'uninstall_package.xml');
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class autoinstallAdminView
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief autoinstall 모듈의 admin view class
|
||||
**/
|
||||
|
||||
|
||||
class autoinstallAdminView extends autoinstall {
|
||||
|
||||
var $categories;
|
||||
var $ftp_set = false;
|
||||
|
||||
function init() {
|
||||
$template_path = sprintf("%stpl/",$this->module_path);
|
||||
Context::set('original_site', $this->original_site);
|
||||
Context::set('uri', $this->uri);
|
||||
$this->setTemplatePath($template_path);
|
||||
|
||||
$ftp_info = Context::getFTPInfo();
|
||||
if(!$ftp_info->ftp_root_path) Context::set('show_ftp_note', true);
|
||||
else $this->ftp_set = true;
|
||||
|
||||
|
||||
$this->dispCategory();
|
||||
$oModel = &getModel('autoinstall');
|
||||
Context::set('tCount', $oModel->getPackageCount(null));
|
||||
Context::set('iCount', $oModel->getInstalledPackageCount());
|
||||
}
|
||||
|
||||
function rearrange(&$item, &$targets)
|
||||
{
|
||||
$ret = null;
|
||||
foreach($targets as $target)
|
||||
{
|
||||
$ret->{$target} = $item->{$target}->body;
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
function rearranges($items, $packages = null)
|
||||
{
|
||||
if(!is_array($items)) $items = array($items);
|
||||
$item_list = array();
|
||||
$targets = array('category_srl', 'package_srl', 'item_screenshot_url', 'package_voted', 'package_voter', 'package_description', 'package_downloaded', 'item_regdate', 'title', 'item_version', 'package_star', 'depfrom');
|
||||
$targetpackages = array();
|
||||
foreach($items as $item)
|
||||
{
|
||||
$targetpackages[$item->package_srl->body] = 0;
|
||||
}
|
||||
$oModel = &getModel('autoinstall');
|
||||
if($package == null)
|
||||
$packages = $oModel->getInstalledPackages(array_keys($targetpackages));
|
||||
$depto = array();
|
||||
foreach($items as $item)
|
||||
{
|
||||
$v = $this->rearrange($item, $targets);
|
||||
if($packages[$v->package_srl])
|
||||
{
|
||||
$v->current_version = $packages[$v->package_srl]->current_version;
|
||||
$v->need_update = $packages[$v->package_srl]->need_update;
|
||||
$v->type = $oModel->getTypeFromPath($packages[$v->package_srl]->path);
|
||||
if($this->ftp_set && $v->depfrom) {
|
||||
$depfrom = explode("," , $v->depfrom);
|
||||
foreach($depfrom as $package_srl)
|
||||
{
|
||||
$depto[$package_srl][] = $v->package_srl;
|
||||
}
|
||||
}
|
||||
if($v->type == "core") $v->avail_remove = false;
|
||||
else if($v->type == "module") {
|
||||
$v->avail_remove = $oModel->checkRemovable($packages[$v->package_srl]->path);
|
||||
}
|
||||
else $v->avail_remove = true;
|
||||
}
|
||||
$item_list[$v->package_srl] = $v;
|
||||
}
|
||||
|
||||
if(count($depto) > 0)
|
||||
{
|
||||
$installed = $oModel->getInstalledPackages(implode(",", array_keys($depto)));
|
||||
foreach($installed as $key=>$val)
|
||||
{
|
||||
$path = $val->path;
|
||||
$type = $oModel->getTypeFromPath($path);
|
||||
if(!$type || $type == "core") continue;
|
||||
$config_file = $oModel->getConfigFilePath($type);
|
||||
if(!$config_file) continue;
|
||||
|
||||
$xml = new XmlParser();
|
||||
$xmlDoc = $xml->loadXmlFile(FileHandler::getRealPath($path).$config_file);
|
||||
if(!$xmlDoc) continue;
|
||||
if($type == "drcomponent") $type = "component";
|
||||
if($type == "style" || $type == "m.skin") $type = "skin";
|
||||
if($type == "m.layout") $type = "layout";
|
||||
$title = $xmlDoc->{$type}->title->body;
|
||||
$installed[$key]->title = $title;
|
||||
}
|
||||
Context::set('installed', $installed);
|
||||
foreach($installed as $key=>$val)
|
||||
{
|
||||
foreach($depto[$key] as $package_srl)
|
||||
{
|
||||
$item_list[$package_srl]->avail_remove = false;
|
||||
$item_list[$package_srl]->deps[] = $key;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $item_list;
|
||||
}
|
||||
|
||||
function dispAutoinstallAdminInstalledPackages()
|
||||
{
|
||||
$page = Context::get('page');
|
||||
if(!$page) $page = 1;
|
||||
Context::set('page', $page);
|
||||
$oModel = &getModel('autoinstall');
|
||||
$output = $oModel->getInstalledPackageList($page);
|
||||
$package_list = $output->data;
|
||||
|
||||
$params["act"] = "getResourceapiPackages";
|
||||
$params["package_srls"] = implode(",", array_keys($package_list));
|
||||
$body = XmlGenerater::generate($params);
|
||||
$buff = FileHandler::getRemoteResource($this->uri, $body, 3, "POST", "application/xml");
|
||||
$xml_lUpdate = new XmlParser();
|
||||
$xmlDoc = $xml_lUpdate->parse($buff);
|
||||
if($xmlDoc && $xmlDoc->response->packagelist->item)
|
||||
{
|
||||
$item_list = $this->rearranges($xmlDoc->response->packagelist->item, $package_list);
|
||||
$res = array();
|
||||
foreach($package_list as $package_srl => $package)
|
||||
{
|
||||
$res[] = $item_list[$package_srl];
|
||||
}
|
||||
Context::set('item_list', $res);
|
||||
}
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
|
||||
$this->setTemplateFile('index');
|
||||
}
|
||||
|
||||
function dispAutoinstallAdminInstall() {
|
||||
$package_srl = Context::get('package_srl');
|
||||
if(!$package_srl) return $this->dispAutoinstallAdminIndex();
|
||||
|
||||
$params["act"] = "getResourceapiInstallInfo";
|
||||
$params["package_srl"] = $package_srl;
|
||||
$xmlDoc = XmlGenerater::getXmlDoc($params);
|
||||
$oModel = &getModel('autoinstall');
|
||||
|
||||
$targetpackages = array();
|
||||
if($xmlDoc)
|
||||
{
|
||||
$xmlPackage =& $xmlDoc->response->package;
|
||||
$package->package_srl = $xmlPackage->package_srl->body;
|
||||
$package->title = $xmlPackage->title->body;
|
||||
$package->package_description = $xmlPackage->package_description->body;
|
||||
$package->version = $xmlPackage->version->body;
|
||||
$package->path = $xmlPackage->path->body;
|
||||
if($xmlPackage->depends)
|
||||
{
|
||||
if(!is_array($xmlPackage->depends->item)) $xmlPackage->depends->item = array($xmlPackage->depends->item);
|
||||
$package->depends = array();
|
||||
foreach($xmlPackage->depends->item as $item)
|
||||
{
|
||||
$dep_item = null;
|
||||
$dep_item->package_srl = $item->package_srl->body;
|
||||
$dep_item->title = $item->title->body;
|
||||
$dep_item->version = $item->version->body;
|
||||
$dep_item->path = $item->path->body;
|
||||
$package->depends[] = $dep_item;
|
||||
$targetpackages[$dep_item->package_srl] = 1;
|
||||
}
|
||||
$packages = $oModel->getInstalledPackages(array_keys($targetpackages));
|
||||
$package->deplist = "";
|
||||
foreach($package->depends as $key => $dep)
|
||||
{
|
||||
if(!$packages[$dep->package_srl]) {
|
||||
$package->depends[$key]->installed = false;
|
||||
$package->package_srl .= ",". $dep->package_srl;
|
||||
}
|
||||
else {
|
||||
$package->depends[$key]->installed = true;
|
||||
$package->depends[$key]->cur_version = $packages[$dep->package_srl]->current_version;
|
||||
if(version_compare($dep->version, $packages[$dep->package_srl]->current_version, ">"))
|
||||
{
|
||||
$package->depends[$key]->need_update = true;
|
||||
$package->package_srl .= ",". $dep->package_srl;
|
||||
}
|
||||
else
|
||||
{
|
||||
$package->need_update = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$installedPackage = $oModel->getInstalledPackage($package_srl);
|
||||
if($installedPackage) {
|
||||
$package->installed = true;
|
||||
$package->cur_version = $installedPackage->current_version;
|
||||
$package->need_update = version_compare($package->version, $installedPackage->current_version, ">");
|
||||
}
|
||||
|
||||
Context::set("package", $package);
|
||||
}
|
||||
if(!$_SESSION['ftp_password'])
|
||||
{
|
||||
Context::set('need_password', true);
|
||||
}
|
||||
$this->setTemplateFile('install');
|
||||
}
|
||||
|
||||
function dispAutoinstallAdminIndex() {
|
||||
$oModuleModel = &getModel('module');
|
||||
$config = $oModuleModel->getModuleConfig('autoinstall');
|
||||
$ftp_info = Context::getFTPInfo();
|
||||
if(!$ftp_info->ftp_root_path) Context::set('show_ftp_note', true);
|
||||
|
||||
$this->setTemplateFile('index');
|
||||
|
||||
$params = array();
|
||||
$params["act"] = "getResourceapiLastupdate";
|
||||
$body = XmlGenerater::generate($params);
|
||||
$buff = FileHandler::getRemoteResource($this->uri, $body, 3, "POST", "application/xml");
|
||||
$xml_lUpdate = new XmlParser();
|
||||
$lUpdateDoc = $xml_lUpdate->parse($buff);
|
||||
$updateDate = $lUpdateDoc->response->updatedate->body;
|
||||
|
||||
$oModel = &getModel('autoinstall');
|
||||
$item = $oModel->getLatestPackage();
|
||||
if(!$item || $item->updatedate < $updateDate || count($this->categories) < 1)
|
||||
{
|
||||
Context::set('need_update', true);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
$page = Context::get('page');
|
||||
if(!$page) $page = 1;
|
||||
Context::set('page', $page);
|
||||
|
||||
$order_type = Context::get('order_type');
|
||||
if(!in_array($order_type, array('asc', 'desc'))) $order_type = 'desc';
|
||||
Context::set('order_type', $order_type);
|
||||
|
||||
$order_target = Context::get('order_target');
|
||||
if(!in_array($order_target, array('newest', 'download', 'popular'))) $order_target = 'newest';
|
||||
Context::set('order_target', $order_target);
|
||||
|
||||
$search_keyword = Context::get('search_keyword');
|
||||
|
||||
$childrenList = Context::get('childrenList');
|
||||
$category_srl = Context::get('category_srl');
|
||||
if($childrenList) $params["category_srl"] = $childrenList;
|
||||
else if($category_srl) $params["category_srl"] = $category_srl;
|
||||
|
||||
$params["act"] = "getResourceapiPackagelist";
|
||||
$params["order_target"] = $order_target;
|
||||
$params["order_type"] = $order_type;
|
||||
$params["page"] = $page;
|
||||
if($search_keyword)
|
||||
{
|
||||
$params["search_keyword"] = $search_keyword;
|
||||
}
|
||||
$xmlDoc = XmlGenerater::getXmlDoc($params);
|
||||
if($xmlDoc && $xmlDoc->response->packagelist->item)
|
||||
{
|
||||
$item_list = $this->rearranges($xmlDoc->response->packagelist->item);
|
||||
Context::set('item_list', $item_list);
|
||||
$array = array('total_count', 'total_page', 'cur_page', 'page_count', 'first_page', 'last_page');
|
||||
$page_nav = $this->rearrange($xmlDoc->response->page_navigation, $array);
|
||||
$page_navigation = new PageHandler($page_nav->total_count, $page_nav->total_page, $page_nav->cur_page, $page_nav->page_count);
|
||||
Context::set('page_navigation', $page_navigation);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function dispCategory()
|
||||
{
|
||||
$oModel = &getModel('autoinstall');
|
||||
$this->categories = &$oModel->getCategoryList();
|
||||
Context::set('categories', $this->categories);
|
||||
}
|
||||
|
||||
function dispAutoinstallAdminUninstall()
|
||||
{
|
||||
$package_srl = Context::get('package_srl');
|
||||
if(!$package_srl) return $this->dispAutoinstallAdminIndex();
|
||||
$oModel =& getModel('autoinstall');
|
||||
$installedPackage = $oModel->getInstalledPackage($package_srl);
|
||||
if(!$installedPackage) return $this->dispAutoinstallAdminInstalledPackages();
|
||||
|
||||
if(!$_SESSION['ftp_password'])
|
||||
{
|
||||
Context::set('need_password', true);
|
||||
}
|
||||
$installedPackage = $oModel->getPackage($package_srl);
|
||||
$path = $installedPackage->path;
|
||||
$type = $oModel->getTypeFromPath($path);
|
||||
if(!$type || $type == "core") $this->stop("msg_invalid_request");
|
||||
$config_file = $oModel->getConfigFilePath($type);
|
||||
if(!$config_file) $this->stop("msg_invalid_request");
|
||||
|
||||
$xml = new XmlParser();
|
||||
$xmlDoc = $xml->loadXmlFile(FileHandler::getRealPath($path).$config_file);
|
||||
if(!$xmlDoc) $this->stop("msg_invalid_request");
|
||||
if($type == "drcomponent") $type = "component";
|
||||
if($type == "style") $type = "skin";
|
||||
$title = $xmlDoc->{$type}->title->body;
|
||||
$installedPackage->title = $title;
|
||||
$installedPackage->type = $type;
|
||||
Context::set('package', $installedPackage);
|
||||
|
||||
$this->setTemplateFile('uninstall');
|
||||
Context::addJsFilter($this->module_path.'tpl/filter', 'uninstall_package.xml');
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,87 +1,87 @@
|
|||
<?php
|
||||
/**
|
||||
* @class autoinstall
|
||||
* @author sol (sol@ngleader.com)
|
||||
* @brief autoinstall 모듈의 high class
|
||||
**/
|
||||
|
||||
class XmlGenerater {
|
||||
function generate(&$params)
|
||||
{
|
||||
$xmlDoc = '<?xml version="1.0" encoding="utf-8" ?><methodCall><params>';
|
||||
if(!is_array($params)) return null;
|
||||
$params["module"] = "resourceapi";
|
||||
foreach($params as $key => $val)
|
||||
{
|
||||
$xmlDoc .= sprintf("<%s><![CDATA[%s]]></%s>", $key, $val, $key);
|
||||
}
|
||||
$xmlDoc .= "</params></methodCall>";
|
||||
return $xmlDoc;
|
||||
}
|
||||
|
||||
function getXmlDoc(&$params)
|
||||
{
|
||||
$body = XmlGenerater::generate($params);
|
||||
$buff = FileHandler::getRemoteResource($this->uri, $body, 3, "POST", "application/xml");
|
||||
if(!$buff) return;
|
||||
$xml = new XmlParser();
|
||||
$xmlDoc = $xml->parse($buff);
|
||||
return $xmlDoc;
|
||||
}
|
||||
}
|
||||
|
||||
class autoinstall extends ModuleObject {
|
||||
var $uri = "http://download.xpressengine.com/";
|
||||
var $original_site = "http://www.xpressengine.com/";
|
||||
var $tmp_dir = './files/cache/autoinstall/';
|
||||
|
||||
/**
|
||||
* @brief 설치시 추가 작업이 필요할시 구현
|
||||
**/
|
||||
function moduleInstall() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 설치가 이상이 없는지 체크하는 method
|
||||
**/
|
||||
function checkUpdate() {
|
||||
$oDB =& DB::getInstance();
|
||||
if(!file_exists(FileHandler::getRealPath("./modules/autoinstall/schemas/autoinstall_installed_packages.xml"))
|
||||
&& $oDB->isTableExists("autoinstall_installed_packages"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if(!file_exists(FileHandler::getRealPath("./modules/autoinstall/schemas/autoinstall_remote_categories.xml"))
|
||||
&& $oDB->isTableExists("autoinstall_remote_categories"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 업데이트 실행
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
$oDB =& DB::getInstance();
|
||||
if(!file_exists(FileHandler::getRealPath("./modules/autoinstall/schemas/autoinstall_installed_packages.xml"))
|
||||
&& $oDB->isTableExists("autoinstall_installed_packages"))
|
||||
{
|
||||
$oDB->dropTable("autoinstall_installed_packages");
|
||||
}
|
||||
if(!file_exists(FileHandler::getRealPath("./modules/autoinstall/schemas/autoinstall_remote_categories.xml"))
|
||||
&& $oDB->isTableExists("autoinstall_remote_categories"))
|
||||
{
|
||||
$oDB->dropTable("autoinstall_remote_categories");
|
||||
}
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 캐시 파일 재생성
|
||||
**/
|
||||
function recompileCache() {
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class autoinstall
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief autoinstall 모듈의 high class
|
||||
**/
|
||||
|
||||
class XmlGenerater {
|
||||
function generate(&$params)
|
||||
{
|
||||
$xmlDoc = '<?xml version="1.0" encoding="utf-8" ?><methodCall><params>';
|
||||
if(!is_array($params)) return null;
|
||||
$params["module"] = "resourceapi";
|
||||
foreach($params as $key => $val)
|
||||
{
|
||||
$xmlDoc .= sprintf("<%s><![CDATA[%s]]></%s>", $key, $val, $key);
|
||||
}
|
||||
$xmlDoc .= "</params></methodCall>";
|
||||
return $xmlDoc;
|
||||
}
|
||||
|
||||
function getXmlDoc(&$params)
|
||||
{
|
||||
$body = XmlGenerater::generate($params);
|
||||
$buff = FileHandler::getRemoteResource($this->uri, $body, 3, "POST", "application/xml");
|
||||
if(!$buff) return;
|
||||
$xml = new XmlParser();
|
||||
$xmlDoc = $xml->parse($buff);
|
||||
return $xmlDoc;
|
||||
}
|
||||
}
|
||||
|
||||
class autoinstall extends ModuleObject {
|
||||
var $uri = "http://download.xpressengine.com/";
|
||||
var $original_site = "http://www.xpressengine.com/";
|
||||
var $tmp_dir = './files/cache/autoinstall/';
|
||||
|
||||
/**
|
||||
* @brief 설치시 추가 작업이 필요할시 구현
|
||||
**/
|
||||
function moduleInstall() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 설치가 이상이 없는지 체크하는 method
|
||||
**/
|
||||
function checkUpdate() {
|
||||
$oDB =& DB::getInstance();
|
||||
if(!file_exists(FileHandler::getRealPath("./modules/autoinstall/schemas/autoinstall_installed_packages.xml"))
|
||||
&& $oDB->isTableExists("autoinstall_installed_packages"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if(!file_exists(FileHandler::getRealPath("./modules/autoinstall/schemas/autoinstall_remote_categories.xml"))
|
||||
&& $oDB->isTableExists("autoinstall_remote_categories"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 업데이트 실행
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
$oDB =& DB::getInstance();
|
||||
if(!file_exists(FileHandler::getRealPath("./modules/autoinstall/schemas/autoinstall_installed_packages.xml"))
|
||||
&& $oDB->isTableExists("autoinstall_installed_packages"))
|
||||
{
|
||||
$oDB->dropTable("autoinstall_installed_packages");
|
||||
}
|
||||
if(!file_exists(FileHandler::getRealPath("./modules/autoinstall/schemas/autoinstall_remote_categories.xml"))
|
||||
&& $oDB->isTableExists("autoinstall_remote_categories"))
|
||||
{
|
||||
$oDB->dropTable("autoinstall_remote_categories");
|
||||
}
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 캐시 파일 재생성
|
||||
**/
|
||||
function recompileCache() {
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,185 +1,185 @@
|
|||
<?php
|
||||
/**
|
||||
* @class autoinstallModel
|
||||
* @author sol (sol@ngleader.com)
|
||||
* @brief autoinstall 모듈의 Model class
|
||||
**/
|
||||
|
||||
class autoinstallModel extends autoinstall {
|
||||
|
||||
function getCategory($category_srl)
|
||||
{
|
||||
$args->category_srl = $category_srl;
|
||||
$output = executeQueryArray("autoinstall.getCategory", $args);
|
||||
if(!$output->data) return null;
|
||||
return array_shift($output->data);
|
||||
}
|
||||
|
||||
function getPackages()
|
||||
{
|
||||
$output = executeQueryArray("autoinstall.getPackages");
|
||||
if(!$output->data) return array();
|
||||
return $output->data;
|
||||
}
|
||||
|
||||
function getInstalledPackage($package_srl)
|
||||
{
|
||||
$args->package_srl = $package_srl;
|
||||
$output = executeQueryArray("autoinstall.getInstalledPackage", $args);
|
||||
if(!$output->data) return null;
|
||||
return array_shift($output->data);
|
||||
}
|
||||
|
||||
function getPackage($package_srl)
|
||||
{
|
||||
$args->package_srl = $package_srl;
|
||||
$output = executeQueryArray("autoinstall.getPackage", $args);
|
||||
if(!$output->data) return null;
|
||||
return array_shift($output->data);
|
||||
}
|
||||
|
||||
function getCategoryList()
|
||||
{
|
||||
$output = executeQueryArray("autoinstall.getCategories");
|
||||
if(!$output->toBool() || !$output->data) return array();
|
||||
|
||||
$categoryList = array();
|
||||
foreach($output->data as $category)
|
||||
{
|
||||
$category->children = array();
|
||||
$categoryList[$category->category_srl] = $category;
|
||||
}
|
||||
|
||||
$depth0 = array();
|
||||
foreach($categoryList as $key => $category)
|
||||
{
|
||||
if($category->parent_srl)
|
||||
{
|
||||
$categoryList[$category->parent_srl]->children[] =& $categoryList[$key];
|
||||
}
|
||||
else
|
||||
{
|
||||
$depth0[] = $key;
|
||||
}
|
||||
}
|
||||
$resultList = array();
|
||||
foreach($depth0 as $category_srl)
|
||||
{
|
||||
$this->setDepth($categoryList[$category_srl], 0, $categoryList, $resultList);
|
||||
}
|
||||
return $resultList;
|
||||
}
|
||||
|
||||
function getPackageCount($category_srl)
|
||||
{
|
||||
$args->category_srl = $category_srl;
|
||||
$output = executeQuery("autoinstall.getPackageCount", $args);
|
||||
if(!$output->data) return 0;
|
||||
return $output->data->count;
|
||||
}
|
||||
|
||||
function getInstalledPackageCount()
|
||||
{
|
||||
$output = executeQuery("autoinstall.getInstalledPackageCount", $args);
|
||||
if(!$output->data) return 0;
|
||||
return $output->data->count;
|
||||
}
|
||||
|
||||
function setDepth(&$item, $depth, &$list, &$resultList)
|
||||
{
|
||||
$resultList[$item->category_srl] =& $item;
|
||||
$item->depth = $depth;
|
||||
$siblingList = $item->category_srl;
|
||||
foreach($item->children as $child)
|
||||
{
|
||||
$siblingList .= ",".$this->setDepth($list[$child->category_srl], $depth+1, $list, $resultList);
|
||||
}
|
||||
if(count($item->children) < 1)
|
||||
{
|
||||
$item->nPackages = $this->getPackageCount($item->category_srl);
|
||||
}
|
||||
$item->childrenList = $siblingList;
|
||||
return $siblingList;
|
||||
}
|
||||
|
||||
function getLatestPackage() {
|
||||
$output = executeQueryArray("autoinstall.getLatestPackage");
|
||||
if(!$output->data) return null;
|
||||
return array_shift($output->data);
|
||||
}
|
||||
|
||||
function getInstalledPackages($package_list) {
|
||||
$args->package_list = $package_list;
|
||||
$output = executeQueryArray("autoinstall.getInstalledPackages", $args);
|
||||
$result = array();
|
||||
if(!$output->data) return $result;
|
||||
foreach($output->data as $value)
|
||||
{
|
||||
$result[$value->package_srl] = $value;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
function getInstalledPackageList($page)
|
||||
{
|
||||
$args->page = $page;
|
||||
$output = executeQueryArray("autoinstall.getInstalledPackageList", $args);
|
||||
$res = array();
|
||||
foreach($output->data as $val)
|
||||
{
|
||||
$res[$val->package_srl] = $val;
|
||||
}
|
||||
$output->data = $res;
|
||||
return $output;
|
||||
}
|
||||
|
||||
function getTypeFromPath($path)
|
||||
{
|
||||
if(!$path) return null;
|
||||
if($path == ".") return "core";
|
||||
$path_array = explode("/", $path);
|
||||
$target_name = array_pop($path_array);
|
||||
$type = substr(array_pop($path_array), 0, -1);
|
||||
return $type;
|
||||
}
|
||||
|
||||
function getConfigFilePath($type)
|
||||
{
|
||||
$config_file = null;
|
||||
switch($type)
|
||||
{
|
||||
case "m.layout":
|
||||
case "module":
|
||||
case "addon":
|
||||
case "layout":
|
||||
case "widget":
|
||||
$config_file = "/conf/info.xml";
|
||||
break;
|
||||
case "component":
|
||||
$config_file = "/info.xml";
|
||||
break;
|
||||
case "m.skin":
|
||||
case "skin":
|
||||
case "widgetstyle":
|
||||
case "style":
|
||||
$config_file = "/skin.xml";
|
||||
break;
|
||||
case "drcomponent":
|
||||
$config_file = "/info.xml";
|
||||
break;
|
||||
}
|
||||
return $config_file;
|
||||
}
|
||||
|
||||
function checkRemovable($path)
|
||||
{
|
||||
$path_array = explode("/", $path);
|
||||
$target_name = array_pop($path_array);
|
||||
$oModule =& getModule($target_name, "class");
|
||||
if(!$oModule) return false;
|
||||
if(method_exists($oModule, "moduleUninstall")) return true;
|
||||
else return false;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class autoinstallModel
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief autoinstall 모듈의 Model class
|
||||
**/
|
||||
|
||||
class autoinstallModel extends autoinstall {
|
||||
|
||||
function getCategory($category_srl)
|
||||
{
|
||||
$args->category_srl = $category_srl;
|
||||
$output = executeQueryArray("autoinstall.getCategory", $args);
|
||||
if(!$output->data) return null;
|
||||
return array_shift($output->data);
|
||||
}
|
||||
|
||||
function getPackages()
|
||||
{
|
||||
$output = executeQueryArray("autoinstall.getPackages");
|
||||
if(!$output->data) return array();
|
||||
return $output->data;
|
||||
}
|
||||
|
||||
function getInstalledPackage($package_srl)
|
||||
{
|
||||
$args->package_srl = $package_srl;
|
||||
$output = executeQueryArray("autoinstall.getInstalledPackage", $args);
|
||||
if(!$output->data) return null;
|
||||
return array_shift($output->data);
|
||||
}
|
||||
|
||||
function getPackage($package_srl)
|
||||
{
|
||||
$args->package_srl = $package_srl;
|
||||
$output = executeQueryArray("autoinstall.getPackage", $args);
|
||||
if(!$output->data) return null;
|
||||
return array_shift($output->data);
|
||||
}
|
||||
|
||||
function getCategoryList()
|
||||
{
|
||||
$output = executeQueryArray("autoinstall.getCategories");
|
||||
if(!$output->toBool() || !$output->data) return array();
|
||||
|
||||
$categoryList = array();
|
||||
foreach($output->data as $category)
|
||||
{
|
||||
$category->children = array();
|
||||
$categoryList[$category->category_srl] = $category;
|
||||
}
|
||||
|
||||
$depth0 = array();
|
||||
foreach($categoryList as $key => $category)
|
||||
{
|
||||
if($category->parent_srl)
|
||||
{
|
||||
$categoryList[$category->parent_srl]->children[] =& $categoryList[$key];
|
||||
}
|
||||
else
|
||||
{
|
||||
$depth0[] = $key;
|
||||
}
|
||||
}
|
||||
$resultList = array();
|
||||
foreach($depth0 as $category_srl)
|
||||
{
|
||||
$this->setDepth($categoryList[$category_srl], 0, $categoryList, $resultList);
|
||||
}
|
||||
return $resultList;
|
||||
}
|
||||
|
||||
function getPackageCount($category_srl)
|
||||
{
|
||||
$args->category_srl = $category_srl;
|
||||
$output = executeQuery("autoinstall.getPackageCount", $args);
|
||||
if(!$output->data) return 0;
|
||||
return $output->data->count;
|
||||
}
|
||||
|
||||
function getInstalledPackageCount()
|
||||
{
|
||||
$output = executeQuery("autoinstall.getInstalledPackageCount", $args);
|
||||
if(!$output->data) return 0;
|
||||
return $output->data->count;
|
||||
}
|
||||
|
||||
function setDepth(&$item, $depth, &$list, &$resultList)
|
||||
{
|
||||
$resultList[$item->category_srl] =& $item;
|
||||
$item->depth = $depth;
|
||||
$siblingList = $item->category_srl;
|
||||
foreach($item->children as $child)
|
||||
{
|
||||
$siblingList .= ",".$this->setDepth($list[$child->category_srl], $depth+1, $list, $resultList);
|
||||
}
|
||||
if(count($item->children) < 1)
|
||||
{
|
||||
$item->nPackages = $this->getPackageCount($item->category_srl);
|
||||
}
|
||||
$item->childrenList = $siblingList;
|
||||
return $siblingList;
|
||||
}
|
||||
|
||||
function getLatestPackage() {
|
||||
$output = executeQueryArray("autoinstall.getLatestPackage");
|
||||
if(!$output->data) return null;
|
||||
return array_shift($output->data);
|
||||
}
|
||||
|
||||
function getInstalledPackages($package_list) {
|
||||
$args->package_list = $package_list;
|
||||
$output = executeQueryArray("autoinstall.getInstalledPackages", $args);
|
||||
$result = array();
|
||||
if(!$output->data) return $result;
|
||||
foreach($output->data as $value)
|
||||
{
|
||||
$result[$value->package_srl] = $value;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
function getInstalledPackageList($page)
|
||||
{
|
||||
$args->page = $page;
|
||||
$output = executeQueryArray("autoinstall.getInstalledPackageList", $args);
|
||||
$res = array();
|
||||
foreach($output->data as $val)
|
||||
{
|
||||
$res[$val->package_srl] = $val;
|
||||
}
|
||||
$output->data = $res;
|
||||
return $output;
|
||||
}
|
||||
|
||||
function getTypeFromPath($path)
|
||||
{
|
||||
if(!$path) return null;
|
||||
if($path == ".") return "core";
|
||||
$path_array = explode("/", $path);
|
||||
$target_name = array_pop($path_array);
|
||||
$type = substr(array_pop($path_array), 0, -1);
|
||||
return $type;
|
||||
}
|
||||
|
||||
function getConfigFilePath($type)
|
||||
{
|
||||
$config_file = null;
|
||||
switch($type)
|
||||
{
|
||||
case "m.layout":
|
||||
case "module":
|
||||
case "addon":
|
||||
case "layout":
|
||||
case "widget":
|
||||
$config_file = "/conf/info.xml";
|
||||
break;
|
||||
case "component":
|
||||
$config_file = "/info.xml";
|
||||
break;
|
||||
case "m.skin":
|
||||
case "skin":
|
||||
case "widgetstyle":
|
||||
case "style":
|
||||
$config_file = "/skin.xml";
|
||||
break;
|
||||
case "drcomponent":
|
||||
$config_file = "/info.xml";
|
||||
break;
|
||||
}
|
||||
return $config_file;
|
||||
}
|
||||
|
||||
function checkRemovable($path)
|
||||
{
|
||||
$path_array = explode("/", $path);
|
||||
$target_name = array_pop($path_array);
|
||||
$oModule =& getModule($target_name, "class");
|
||||
if(!$oModule) return false;
|
||||
if(method_exists($oModule, "moduleUninstall")) return true;
|
||||
else return false;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,26 +1,26 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @class autoinstallView
|
||||
* @author sol (sol@ngleader.com)
|
||||
* @brief autoinstall 모듈의 View class
|
||||
**/
|
||||
|
||||
class autoinstallView extends autoinstall {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
function dispAutoinstallTest(){
|
||||
$file = "modules.test.tar";
|
||||
$checksum = '549989037bd8401d39b83ca2393d8131';
|
||||
$file = "modules.test.skins.test.tar";
|
||||
$oAutoinstallAdminController = &getAdminController('autoinstall');
|
||||
$output = $oAutoinstallAdminController->install($file, $checksum);
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @class autoinstallView
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief autoinstall 모듈의 View class
|
||||
**/
|
||||
|
||||
class autoinstallView extends autoinstall {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
function dispAutoinstallTest(){
|
||||
$file = "modules.test.tar";
|
||||
$checksum = '549989037bd8401d39b83ca2393d8131';
|
||||
$file = "modules.test.skins.test.tar";
|
||||
$oAutoinstallAdminController = &getAdminController('autoinstall');
|
||||
$output = $oAutoinstallAdminController->install($file, $checksum);
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,34 +1,26 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="0.2">
|
||||
<title xml:lang="ko">쉬운 설치</title>
|
||||
<title xml:lang="en">EasyInstaller</title>
|
||||
<title xml:lang="vi">Cài đặt tự động</title>
|
||||
<title xml:lang="zh-TW">自動安裝</title>
|
||||
<title xml:lang="zh-CN">安装·更新</title>
|
||||
<title xml:lang="jp">イージーインストール</title>
|
||||
<description xml:lang="ko">관리자 모드에서 클릭으로 모듈/스킨/레이아웃/위젯/위젯스타일 등을 설치하는 모듈입니다.</description>
|
||||
<description xml:lang="en">With this module, you can install and upgrade your programs including modules, skins, layouts, etc., from www.xpressengine.com by one-click.</description>
|
||||
<description xml:lang="vi">Với Module này, bạn có thể cập nhật và cài đặt các phiên bản một cách tự động. Bao gồm Module, Layout, Widget, Addon, ... từ trang chủ XE bằng một bấm chuột.</description>
|
||||
<description xml:lang="zh-TW">可以藉由此模組安裝、更新程式包括模組、面板、版面等。</description>
|
||||
<description xml:lang="zh-CN">很方便的在线安装/更新XE相关模块(模块/皮肤/布局/控件/控件样式等)。</description>
|
||||
<description xml:lang="jp">管理者モードにてクリックだけで、モジュール/スキン/レイアウト/ウィジェット/ウィジェットスタイルのインストールを可能にするモジュールです。</description>
|
||||
<version>0.3</version>
|
||||
<date>2009-11-11</date>
|
||||
<category>system</category>
|
||||
<author email_address="haneul0318@gmail.com" link="http://www.seungyeop.kr">
|
||||
<name xml:lang="ko">haneul</name>
|
||||
<name xml:lang="en">haneul</name>
|
||||
<name xml:lang="vi">haneul</name>
|
||||
<name xml:lang="zh-TW">haneul</name>
|
||||
<name xml:lang="zh-CN">haneul</name>
|
||||
<name xml:lang="jp">haneul</name>
|
||||
</author>
|
||||
<author email_address="sol@ngleader.com" link="http://ngleader.com">
|
||||
<name xml:lang="ko">sol</name>
|
||||
<name xml:lang="en">sol</name>
|
||||
<name xml:lang="vi">sol</name>
|
||||
<name xml:lang="zh-TW">sol</name>
|
||||
<name xml:lang="zh-CN">sol</name>
|
||||
<name xml:lang="jp">sol</name>
|
||||
</author>
|
||||
</module>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="0.2">
|
||||
<title xml:lang="ko">쉬운 설치</title>
|
||||
<title xml:lang="en">EasyInstaller</title>
|
||||
<title xml:lang="vi">Cài đặt tự động</title>
|
||||
<title xml:lang="zh-TW">自動安裝</title>
|
||||
<title xml:lang="zh-CN">安装·更新</title>
|
||||
<title xml:lang="jp">イージーインストール</title>
|
||||
<description xml:lang="ko">관리자 모드에서 클릭으로 모듈/스킨/레이아웃/위젯/위젯스타일 등을 설치하는 모듈입니다.</description>
|
||||
<description xml:lang="en">With this module, you can install and upgrade your programs including modules, skins, layouts, etc., from www.xpressengine.com by one-click.</description>
|
||||
<description xml:lang="vi">Với Module này, bạn có thể cập nhật và cài đặt các phiên bản một cách tự động. Bao gồm Module, Layout, Widget, Addon, ... từ trang chủ XE bằng một bấm chuột.</description>
|
||||
<description xml:lang="zh-TW">可以藉由此模組安裝、更新程式包括模組、面板、版面等。</description>
|
||||
<description xml:lang="zh-CN">很方便的在线安装/更新XE相关模块(模块/皮肤/布局/控件/控件样式等)。</description>
|
||||
<description xml:lang="jp">管理者モードにてクリックだけで、モジュール/スキン/レイアウト/ウィジェット/ウィジェットスタイルのインストールを可能にするモジュールです。</description>
|
||||
<version>0.3</version>
|
||||
<date>2009-11-11</date>
|
||||
<category>system</category>
|
||||
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
|
||||
<name xml:lang="ko">NHN</name>
|
||||
<name xml:lang="en">NHN</name>
|
||||
<name xml:lang="vi">NHN</name>
|
||||
<name xml:lang="zh-TW">NHN</name>
|
||||
<name xml:lang="zh-CN">NHN</name>
|
||||
<name xml:lang="jp">NHN</name>
|
||||
</author>
|
||||
</module>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file en.lang.php
|
||||
* @author haneul (haneul0318@gmail.com)
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief Autoinstall(autoinstall) language pack (English)
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/autoinstall/lang/jp.lang.php
|
||||
* @author sol (sol@ngleader.com) 翻訳:ミニミ
|
||||
* @author NHN (developers@xpressengine.com) 翻訳:ミニミ
|
||||
* @brief Autoinstall(autoinstall) 日本語基本言語パッケージ
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file ko.lang.php
|
||||
* @author sol (sol@ngleader.com)
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief Autoinstall(autoinstall) 모듈의 기본 언어팩
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file en.lang.php
|
||||
* @author haneul (haneul0318@gmail.com)
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief Autoinstall(autoinstall) language pack (English)
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file ko.lang.php
|
||||
* @author sol (sol@ngleader.com)
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief Autoinstall(autoinstall) 모듈의 기본 언어팩
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file zh-CN.lang.php
|
||||
* @author sol (sol@ngleader.com) 翻译:guny(space.china@gmail.com)
|
||||
* @author NHN (developers@xpressengine.com) 翻译:guny(space.china@gmail.com)
|
||||
* @brief 在线安装/更新(autoinstall)模块语言包
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file zh-TW.lang.php
|
||||
* @author sol (sol@ngleader.com) 翻譯:royallin
|
||||
* @author NHN (developers@xpressengine.com) 翻譯:royallin
|
||||
* @brief 自動安裝(autoinstall)模組正體中文語言
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
@charset "utf-8";
|
||||
/* NHN > UIT Center > Open UI Tech Team > Jeong Chan Myeong(dece24@nhncorp.com) */
|
||||
/* NHN (developers@xpressengine.com) */
|
||||
.install{ border-top:1px solid #ddd; *zoom:1;}
|
||||
.install:after{ content:""; display:block; clear:both;}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,72 +1,72 @@
|
|||
<?php
|
||||
/**
|
||||
* @class commentAdminController
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief comment 모듈의 admin controller class
|
||||
**/
|
||||
|
||||
class commentAdminController extends comment {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 관리자 페이지에서 선택된 댓글들을 삭제
|
||||
**/
|
||||
function procCommentAdminDeleteChecked() {
|
||||
|
||||
// 선택된 글이 없으면 오류 표시
|
||||
$cart = Context::get('cart');
|
||||
if(!$cart) return $this->stop('msg_cart_is_null');
|
||||
$comment_srl_list= explode('|@|', $cart);
|
||||
$comment_count = count($comment_srl_list);
|
||||
if(!$comment_count) return $this->stop('msg_cart_is_null');
|
||||
|
||||
$oCommentController = &getController('comment');
|
||||
|
||||
$deleted_count = 0;
|
||||
|
||||
// 글삭제
|
||||
for($i=0;$i<$comment_count;$i++) {
|
||||
$comment_srl = trim($comment_srl_list[$i]);
|
||||
if(!$comment_srl) continue;
|
||||
|
||||
$output = $oCommentController->deleteComment($comment_srl, true);
|
||||
if(!$output->toBool()) continue;
|
||||
|
||||
$deleted_count ++;
|
||||
}
|
||||
|
||||
$this->setMessage( sprintf(Context::getLang('msg_checked_comment_is_deleted'), $deleted_count) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 신고대상을 취소 시킴
|
||||
**/
|
||||
function procCommentAdminCancelDeclare() {
|
||||
$comment_srl = trim(Context::get('comment_srl'));
|
||||
|
||||
if($comment_srl) {
|
||||
$args->comment_srl = $comment_srl;
|
||||
$output = executeQuery('comment.deleteDeclaredComments', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 특정 모듈의 모든 댓글 삭제
|
||||
**/
|
||||
function deleteModuleComments($module_srl) {
|
||||
$args->module_srl = $module_srl;
|
||||
$output = executeQuery('comment.deleteModuleComments', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$output = executeQuery('comment.deleteModuleCommentsList', $args);
|
||||
return $output;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class commentAdminController
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief comment 모듈의 admin controller class
|
||||
**/
|
||||
|
||||
class commentAdminController extends comment {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 관리자 페이지에서 선택된 댓글들을 삭제
|
||||
**/
|
||||
function procCommentAdminDeleteChecked() {
|
||||
|
||||
// 선택된 글이 없으면 오류 표시
|
||||
$cart = Context::get('cart');
|
||||
if(!$cart) return $this->stop('msg_cart_is_null');
|
||||
$comment_srl_list= explode('|@|', $cart);
|
||||
$comment_count = count($comment_srl_list);
|
||||
if(!$comment_count) return $this->stop('msg_cart_is_null');
|
||||
|
||||
$oCommentController = &getController('comment');
|
||||
|
||||
$deleted_count = 0;
|
||||
|
||||
// 글삭제
|
||||
for($i=0;$i<$comment_count;$i++) {
|
||||
$comment_srl = trim($comment_srl_list[$i]);
|
||||
if(!$comment_srl) continue;
|
||||
|
||||
$output = $oCommentController->deleteComment($comment_srl, true);
|
||||
if(!$output->toBool()) continue;
|
||||
|
||||
$deleted_count ++;
|
||||
}
|
||||
|
||||
$this->setMessage( sprintf(Context::getLang('msg_checked_comment_is_deleted'), $deleted_count) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 신고대상을 취소 시킴
|
||||
**/
|
||||
function procCommentAdminCancelDeclare() {
|
||||
$comment_srl = trim(Context::get('comment_srl'));
|
||||
|
||||
if($comment_srl) {
|
||||
$args->comment_srl = $comment_srl;
|
||||
$output = executeQuery('comment.deleteDeclaredComments', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 특정 모듈의 모든 댓글 삭제
|
||||
**/
|
||||
function deleteModuleComments($module_srl) {
|
||||
$args->module_srl = $module_srl;
|
||||
$output = executeQuery('comment.deleteModuleComments', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$output = executeQuery('comment.deleteModuleCommentsList', $args);
|
||||
return $output;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,83 +1,83 @@
|
|||
<?php
|
||||
/**
|
||||
* @class commentAdminView
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief comment 모듈의 admin view 클래스
|
||||
**/
|
||||
|
||||
class commentAdminView extends comment {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 목록 출력 (관리자용)
|
||||
**/
|
||||
function dispCommentAdminList() {
|
||||
// 목록을 구하기 위한 옵션
|
||||
$args->page = Context::get('page'); ///< 페이지
|
||||
$args->list_count = 30; ///< 한페이지에 보여줄 글 수
|
||||
$args->page_count = 10; ///< 페이지 네비게이션에 나타날 페이지의 수
|
||||
|
||||
$args->sort_index = 'list_order'; ///< 소팅 값
|
||||
|
||||
$args->module_srl = Context::get('module_srl');
|
||||
|
||||
// 목록 구함, comment->getCommentList 에서 걍 알아서 다 해버리는 구조이다... (아.. 이거 나쁜 버릇인데.. ㅡ.ㅜ 어쩔수 없다)
|
||||
$oCommentModel = &getModel('comment');
|
||||
$output = $oCommentModel->getTotalCommentList($args);
|
||||
|
||||
// 템플릿에 쓰기 위해서 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);
|
||||
|
||||
// 템플릿 지정
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('comment_list');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 관리자 페이지의 신고 목록 보기
|
||||
**/
|
||||
function dispCommentAdminDeclared() {
|
||||
// 목록을 구하기 위한 옵션
|
||||
$args->page = Context::get('page'); ///< 페이지
|
||||
$args->list_count = 30; ///< 한페이지에 보여줄 글 수
|
||||
$args->page_count = 10; ///< 페이지 네비게이션에 나타날 페이지의 수
|
||||
|
||||
$args->sort_index = 'comment_declared.declared_count'; ///< 소팅 값
|
||||
$args->order_type = 'desc'; ///< 소팅 정렬 값
|
||||
|
||||
// 목록을 구함
|
||||
$declared_output = executeQuery('comment.getDeclaredList', $args);
|
||||
|
||||
if($declared_output->data && count($declared_output->data)) {
|
||||
$comment_list = array();
|
||||
|
||||
$oCommentModel = &getModel('comment');
|
||||
foreach($declared_output->data as $key => $comment) {
|
||||
$comment_list[$key] = new commentItem();
|
||||
$comment_list[$key]->setAttribute($comment);
|
||||
}
|
||||
$declared_output->data = $comment_list;
|
||||
}
|
||||
|
||||
// 템플릿에 쓰기 위해서 comment_model::getCommentList() 의 return object에 있는 값들을 세팅
|
||||
Context::set('total_count', $declared_output->total_count);
|
||||
Context::set('total_page', $declared_output->total_page);
|
||||
Context::set('page', $declared_output->page);
|
||||
Context::set('comment_list', $declared_output->data);
|
||||
Context::set('page_navigation', $declared_output->page_navigation);
|
||||
|
||||
// 템플릿 지정
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('declared_list');
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class commentAdminView
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief comment 모듈의 admin view 클래스
|
||||
**/
|
||||
|
||||
class commentAdminView extends comment {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 목록 출력 (관리자용)
|
||||
**/
|
||||
function dispCommentAdminList() {
|
||||
// 목록을 구하기 위한 옵션
|
||||
$args->page = Context::get('page'); ///< 페이지
|
||||
$args->list_count = 30; ///< 한페이지에 보여줄 글 수
|
||||
$args->page_count = 10; ///< 페이지 네비게이션에 나타날 페이지의 수
|
||||
|
||||
$args->sort_index = 'list_order'; ///< 소팅 값
|
||||
|
||||
$args->module_srl = Context::get('module_srl');
|
||||
|
||||
// 목록 구함, comment->getCommentList 에서 걍 알아서 다 해버리는 구조이다... (아.. 이거 나쁜 버릇인데.. ㅡ.ㅜ 어쩔수 없다)
|
||||
$oCommentModel = &getModel('comment');
|
||||
$output = $oCommentModel->getTotalCommentList($args);
|
||||
|
||||
// 템플릿에 쓰기 위해서 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);
|
||||
|
||||
// 템플릿 지정
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('comment_list');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 관리자 페이지의 신고 목록 보기
|
||||
**/
|
||||
function dispCommentAdminDeclared() {
|
||||
// 목록을 구하기 위한 옵션
|
||||
$args->page = Context::get('page'); ///< 페이지
|
||||
$args->list_count = 30; ///< 한페이지에 보여줄 글 수
|
||||
$args->page_count = 10; ///< 페이지 네비게이션에 나타날 페이지의 수
|
||||
|
||||
$args->sort_index = 'comment_declared.declared_count'; ///< 소팅 값
|
||||
$args->order_type = 'desc'; ///< 소팅 정렬 값
|
||||
|
||||
// 목록을 구함
|
||||
$declared_output = executeQuery('comment.getDeclaredList', $args);
|
||||
|
||||
if($declared_output->data && count($declared_output->data)) {
|
||||
$comment_list = array();
|
||||
|
||||
$oCommentModel = &getModel('comment');
|
||||
foreach($declared_output->data as $key => $comment) {
|
||||
$comment_list[$key] = new commentItem();
|
||||
$comment_list[$key]->setAttribute($comment);
|
||||
}
|
||||
$declared_output->data = $comment_list;
|
||||
}
|
||||
|
||||
// 템플릿에 쓰기 위해서 comment_model::getCommentList() 의 return object에 있는 값들을 세팅
|
||||
Context::set('total_count', $declared_output->total_count);
|
||||
Context::set('total_page', $declared_output->total_page);
|
||||
Context::set('page', $declared_output->page);
|
||||
Context::set('comment_list', $declared_output->data);
|
||||
Context::set('page_navigation', $declared_output->page_navigation);
|
||||
|
||||
// 템플릿 지정
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('declared_list');
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,105 +1,105 @@
|
|||
<?php
|
||||
/**
|
||||
* @class comment
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief comment 모듈의 high class
|
||||
**/
|
||||
|
||||
require_once(_XE_PATH_.'modules/comment/comment.item.php');
|
||||
|
||||
class comment extends ModuleObject {
|
||||
|
||||
/**
|
||||
* @brief 설치시 추가 작업이 필요할시 구현
|
||||
**/
|
||||
function moduleInstall() {
|
||||
// action forward에 등록 (관리자 모드에서 사용하기 위함)
|
||||
$oModuleController = &getController('module');
|
||||
|
||||
// 2007. 10. 17 게시글이 삭제될때 댓글도 삭제되도록 trigger 등록
|
||||
$oModuleController->insertTrigger('document.deleteDocument', 'comment', 'controller', 'triggerDeleteDocumentComments', 'after');
|
||||
|
||||
// 2007. 10. 17 모듈이 삭제될때 등록된 댓글도 모두 삭제하는 트리거 추가
|
||||
$oModuleController->insertTrigger('module.deleteModule', 'comment', 'controller', 'triggerDeleteModuleComments', 'after');
|
||||
|
||||
// 2008. 02. 22 모듈의 추가 설정에서 댓글 추가 설정 추가
|
||||
$oModuleController->insertTrigger('module.dispAdditionSetup', 'comment', 'view', 'triggerDispCommentAdditionSetup', 'before');
|
||||
|
||||
return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 설치가 이상이 없는지 체크하는 method
|
||||
**/
|
||||
function checkUpdate() {
|
||||
$oDB = &DB::getInstance();
|
||||
$oModuleModel = &getModel('module');
|
||||
|
||||
// 2007. 10. 17 게시글이 삭제될때 댓글도 삭제되도록 trigger 등록
|
||||
if(!$oModuleModel->getTrigger('document.deleteDocument', 'comment', 'controller', 'triggerDeleteDocumentComments', 'after')) return true;
|
||||
|
||||
// 2007. 10. 17 모듈이 삭제될때 등록된 댓글도 모두 삭제하는 트리거 추가
|
||||
if(!$oModuleModel->getTrigger('module.deleteModule', 'comment', 'controller', 'triggerDeleteModuleComments', 'after')) return true;
|
||||
|
||||
// 2007. 10. 23 댓글에도 추천/ 알림 기능을 위한 컬럼 추가
|
||||
if(!$oDB->isColumnExists("comments","voted_count")) return true;
|
||||
if(!$oDB->isColumnExists("comments","notify_message")) return true;
|
||||
|
||||
// 2008. 02. 22 모듈의 추가 설정에서 댓글 추가 설정 추가
|
||||
if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'comment', 'view', 'triggerDispCommentAdditionSetup', 'before')) return true;
|
||||
|
||||
// 2008. 05. 14 blamed count 컬럼 추가
|
||||
if(!$oDB->isColumnExists("comments", "blamed_count")) return true;
|
||||
if(!$oDB->isColumnExists("comment_voted_log", "point")) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 업데이트 실행
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
$oDB = &DB::getInstance();
|
||||
$oModuleModel = &getModel('module');
|
||||
$oModuleController = &getController('module');
|
||||
|
||||
// 2007. 10. 17 게시글이 삭제될때 댓글도 삭제되도록 trigger 등록
|
||||
if(!$oModuleModel->getTrigger('document.deleteDocument', 'comment', 'controller', 'triggerDeleteDocumentComments', 'after'))
|
||||
$oModuleController->insertTrigger('document.deleteDocument', 'comment', 'controller', 'triggerDeleteDocumentComments', 'after');
|
||||
|
||||
// 2007. 10. 17 모듈이 삭제될때 등록된 댓글도 모두 삭제하는 트리거 추가
|
||||
if(!$oModuleModel->getTrigger('module.deleteModule', 'comment', 'controller', 'triggerDeleteModuleComments', 'after'))
|
||||
$oModuleController->insertTrigger('module.deleteModule', 'comment', 'controller', 'triggerDeleteModuleComments', 'after');
|
||||
|
||||
// 2007. 10. 23 댓글에도 추천/ 알림 기능을 위한 컬럼 추가
|
||||
if(!$oDB->isColumnExists("comments","voted_count")) {
|
||||
$oDB->addColumn("comments","voted_count", "number","11");
|
||||
$oDB->addIndex("comments","idx_voted_count", array("voted_count"));
|
||||
}
|
||||
|
||||
if(!$oDB->isColumnExists("comments","notify_message")) {
|
||||
$oDB->addColumn("comments","notify_message", "char","1");
|
||||
}
|
||||
|
||||
// 2008. 02. 22 모듈의 추가 설정에서 댓글 추가 설정 추가
|
||||
if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'comment', 'view', 'triggerDispCommentAdditionSetup', 'before'))
|
||||
$oModuleController->insertTrigger('module.dispAdditionSetup', 'comment', 'view', 'triggerDispCommentAdditionSetup', 'before');
|
||||
|
||||
// 2008. 05. 14 blamed count 컬럼 추가
|
||||
if(!$oDB->isColumnExists("comments", "blamed_count")) {
|
||||
$oDB->addColumn('comments', 'blamed_count', 'number', 11, 0, true);
|
||||
$oDB->addIndex('comments', 'idx_blamed_count', array('blamed_count'));
|
||||
}
|
||||
if(!$oDB->isColumnExists("comment_voted_log", "point"))
|
||||
$oDB->addColumn('comment_voted_log', 'point', 'number', 11, 0, true);
|
||||
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 캐시 파일 재생성
|
||||
**/
|
||||
function recompileCache() {
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class comment
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief comment 모듈의 high class
|
||||
**/
|
||||
|
||||
require_once(_XE_PATH_.'modules/comment/comment.item.php');
|
||||
|
||||
class comment extends ModuleObject {
|
||||
|
||||
/**
|
||||
* @brief 설치시 추가 작업이 필요할시 구현
|
||||
**/
|
||||
function moduleInstall() {
|
||||
// action forward에 등록 (관리자 모드에서 사용하기 위함)
|
||||
$oModuleController = &getController('module');
|
||||
|
||||
// 2007. 10. 17 게시글이 삭제될때 댓글도 삭제되도록 trigger 등록
|
||||
$oModuleController->insertTrigger('document.deleteDocument', 'comment', 'controller', 'triggerDeleteDocumentComments', 'after');
|
||||
|
||||
// 2007. 10. 17 모듈이 삭제될때 등록된 댓글도 모두 삭제하는 트리거 추가
|
||||
$oModuleController->insertTrigger('module.deleteModule', 'comment', 'controller', 'triggerDeleteModuleComments', 'after');
|
||||
|
||||
// 2008. 02. 22 모듈의 추가 설정에서 댓글 추가 설정 추가
|
||||
$oModuleController->insertTrigger('module.dispAdditionSetup', 'comment', 'view', 'triggerDispCommentAdditionSetup', 'before');
|
||||
|
||||
return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 설치가 이상이 없는지 체크하는 method
|
||||
**/
|
||||
function checkUpdate() {
|
||||
$oDB = &DB::getInstance();
|
||||
$oModuleModel = &getModel('module');
|
||||
|
||||
// 2007. 10. 17 게시글이 삭제될때 댓글도 삭제되도록 trigger 등록
|
||||
if(!$oModuleModel->getTrigger('document.deleteDocument', 'comment', 'controller', 'triggerDeleteDocumentComments', 'after')) return true;
|
||||
|
||||
// 2007. 10. 17 모듈이 삭제될때 등록된 댓글도 모두 삭제하는 트리거 추가
|
||||
if(!$oModuleModel->getTrigger('module.deleteModule', 'comment', 'controller', 'triggerDeleteModuleComments', 'after')) return true;
|
||||
|
||||
// 2007. 10. 23 댓글에도 추천/ 알림 기능을 위한 컬럼 추가
|
||||
if(!$oDB->isColumnExists("comments","voted_count")) return true;
|
||||
if(!$oDB->isColumnExists("comments","notify_message")) return true;
|
||||
|
||||
// 2008. 02. 22 모듈의 추가 설정에서 댓글 추가 설정 추가
|
||||
if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'comment', 'view', 'triggerDispCommentAdditionSetup', 'before')) return true;
|
||||
|
||||
// 2008. 05. 14 blamed count 컬럼 추가
|
||||
if(!$oDB->isColumnExists("comments", "blamed_count")) return true;
|
||||
if(!$oDB->isColumnExists("comment_voted_log", "point")) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 업데이트 실행
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
$oDB = &DB::getInstance();
|
||||
$oModuleModel = &getModel('module');
|
||||
$oModuleController = &getController('module');
|
||||
|
||||
// 2007. 10. 17 게시글이 삭제될때 댓글도 삭제되도록 trigger 등록
|
||||
if(!$oModuleModel->getTrigger('document.deleteDocument', 'comment', 'controller', 'triggerDeleteDocumentComments', 'after'))
|
||||
$oModuleController->insertTrigger('document.deleteDocument', 'comment', 'controller', 'triggerDeleteDocumentComments', 'after');
|
||||
|
||||
// 2007. 10. 17 모듈이 삭제될때 등록된 댓글도 모두 삭제하는 트리거 추가
|
||||
if(!$oModuleModel->getTrigger('module.deleteModule', 'comment', 'controller', 'triggerDeleteModuleComments', 'after'))
|
||||
$oModuleController->insertTrigger('module.deleteModule', 'comment', 'controller', 'triggerDeleteModuleComments', 'after');
|
||||
|
||||
// 2007. 10. 23 댓글에도 추천/ 알림 기능을 위한 컬럼 추가
|
||||
if(!$oDB->isColumnExists("comments","voted_count")) {
|
||||
$oDB->addColumn("comments","voted_count", "number","11");
|
||||
$oDB->addIndex("comments","idx_voted_count", array("voted_count"));
|
||||
}
|
||||
|
||||
if(!$oDB->isColumnExists("comments","notify_message")) {
|
||||
$oDB->addColumn("comments","notify_message", "char","1");
|
||||
}
|
||||
|
||||
// 2008. 02. 22 모듈의 추가 설정에서 댓글 추가 설정 추가
|
||||
if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'comment', 'view', 'triggerDispCommentAdditionSetup', 'before'))
|
||||
$oModuleController->insertTrigger('module.dispAdditionSetup', 'comment', 'view', 'triggerDispCommentAdditionSetup', 'before');
|
||||
|
||||
// 2008. 05. 14 blamed count 컬럼 추가
|
||||
if(!$oDB->isColumnExists("comments", "blamed_count")) {
|
||||
$oDB->addColumn('comments', 'blamed_count', 'number', 11, 0, true);
|
||||
$oDB->addIndex('comments', 'idx_blamed_count', array('blamed_count'));
|
||||
}
|
||||
if(!$oDB->isColumnExists("comment_voted_log", "point"))
|
||||
$oDB->addColumn('comment_voted_log', 'point', 'number', 11, 0, true);
|
||||
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 캐시 파일 재생성
|
||||
**/
|
||||
function recompileCache() {
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @class commentItem
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief comment 객체
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,421 +1,421 @@
|
|||
<?php
|
||||
/**
|
||||
* @class commentModel
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief comment 모듈의 model class
|
||||
**/
|
||||
|
||||
class commentModel extends comment {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 선택된 게시물의 팝업메뉴 표시
|
||||
*
|
||||
* 인쇄, 스크랩, 추천, 비추천, 신고 기능 추가
|
||||
**/
|
||||
function getCommentMenu() {
|
||||
|
||||
// 요청된 게시물 번호와 현재 로그인 정보 구함
|
||||
$comment_srl = Context::get('target_srl');
|
||||
$mid = Context::get('cur_mid');
|
||||
$logged_info = Context::get('logged_info');
|
||||
$act = Context::get('cur_act');
|
||||
|
||||
// menu_list 에 "표시할글,target,url" 을 배열로 넣는다
|
||||
$menu_list = array();
|
||||
|
||||
// trigger 호출
|
||||
ModuleHandler::triggerCall('comment.getCommentMenu', 'before', $menu_list);
|
||||
|
||||
$oCommentController = &getController('comment');
|
||||
|
||||
// 회원이어야만 가능한 기능
|
||||
if($logged_info->member_srl) {
|
||||
|
||||
// 추천 버튼 추가
|
||||
$url = sprintf("doCallModuleAction('comment','procCommentVoteUp','%s')", $comment_srl);
|
||||
$oCommentController->addCommentPopupMenu($url,'cmd_vote','./modules/document/tpl/icons/vote_up.gif','javascript');
|
||||
|
||||
// 비추천 버튼 추가
|
||||
$url = sprintf("doCallModuleAction('comment','procCommentVoteDown','%s')", $comment_srl);
|
||||
$oCommentController->addCommentPopupMenu($url,'cmd_vote_down','./modules/document/tpl/icons/vote_down.gif','javascript');
|
||||
|
||||
// 신고 기능 추가
|
||||
$url = sprintf("doCallModuleAction('comment','procCommentDeclare','%s')", $comment_srl);
|
||||
$oCommentController->addCommentPopupMenu($url,'cmd_declare','./modules/document/tpl/icons/declare.gif','javascript');
|
||||
}
|
||||
|
||||
// trigger 호출 (after)
|
||||
ModuleHandler::triggerCall('comment.getCommentMenu', 'after', $menu_list);
|
||||
|
||||
// 관리자일 경우 ip로 글 찾기
|
||||
if($logged_info->is_admin == 'Y') {
|
||||
$oCommentModel = &getModel('comment');
|
||||
$oComment = $oCommentModel->getComment($comment_srl);
|
||||
|
||||
if($oComment->isExists()) {
|
||||
// ip주소에 해당하는 글 찾기
|
||||
$url = getUrl('','module','admin','act','dispCommentAdminList','search_target','ipaddress','search_keyword',$oComment->get('ipaddress'));
|
||||
$icon_path = './modules/member/tpl/images/icon_management.gif';
|
||||
$oCommentController->addCommentPopupMenu($url,'cmd_search_by_ipaddress',$icon_path,'TraceByIpaddress');
|
||||
|
||||
$url = sprintf("var params = new Array(); params['ipaddress']='%s'; exec_xml('spamfilter', 'procSpamfilterAdminInsertDeniedIP', params, completeCallModuleAction)", $oComment-> getIpAddress());
|
||||
$oCommentController->addCommentPopupMenu($url,'cmd_add_ip_to_spamfilter','./modules/document/tpl/icons/declare.gif','javascript');
|
||||
}
|
||||
}
|
||||
|
||||
// 팝업메뉴의 언어 변경
|
||||
$menus = Context::get('comment_popup_menu_list');
|
||||
$menus_count = count($menus);
|
||||
for($i=0;$i<$menus_count;$i++) {
|
||||
$menus[$i]->str = Context::getLang($menus[$i]->str);
|
||||
}
|
||||
|
||||
// 최종적으로 정리된 팝업메뉴 목록을 구함
|
||||
$this->add('menus', $menus);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief comment_srl에 권한이 있는지 체크
|
||||
*
|
||||
* 세션 정보만 이용
|
||||
**/
|
||||
function isGranted($comment_srl) {
|
||||
return $_SESSION['own_comment'][$comment_srl];
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 자식 답글의 갯수 리턴
|
||||
**/
|
||||
function getChildCommentCount($comment_srl) {
|
||||
$args->comment_srl = $comment_srl;
|
||||
$output = executeQuery('comment.getChildCommentCount', $args);
|
||||
return (int)$output->data->count;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 댓글 가져오기
|
||||
**/
|
||||
function getComment($comment_srl=0, $is_admin = false) {
|
||||
$oComment = new commentItem($comment_srl);
|
||||
if($is_admin) $oComment->setGrant();
|
||||
|
||||
return $oComment;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 여러개의 댓글들을 가져옴 (페이징 아님)
|
||||
**/
|
||||
function getComments($comment_srl_list) {
|
||||
if(is_array($comment_srl_list)) $comment_srls = implode(',',$comment_srl_list);
|
||||
|
||||
// DB에서 가져옴
|
||||
$args->comment_srls = $comment_srls;
|
||||
$output = executeQuery('comment.getComments', $args);
|
||||
if(!$output->toBool()) return;
|
||||
$comment_list = $output->data;
|
||||
if(!$comment_list) return;
|
||||
if(!is_array($comment_list)) $comment_list = array($comment_list);
|
||||
|
||||
$comment_count = count($comment_list);
|
||||
foreach($comment_list as $key => $attribute) {
|
||||
if(!$attribute->comment_srl) continue;
|
||||
$oComment = null;
|
||||
$oComment = new commentItem();
|
||||
$oComment->setAttribute($attribute);
|
||||
if($is_admin) $oComment->setGrant();
|
||||
|
||||
$result[$attribute->comment_srl] = $oComment;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief document_srl 에 해당하는 댓글의 전체 갯수를 가져옴
|
||||
**/
|
||||
function getCommentCount($document_srl) {
|
||||
$args->document_srl = $document_srl;
|
||||
$output = executeQuery('comment.getCommentCount', $args);
|
||||
$total_count = $output->data->count;
|
||||
return (int)$total_count;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief module_srl 에 해당하는 댓글의 전체 갯수를 가져옴
|
||||
**/
|
||||
function getCommentAllCount($module_srl) {
|
||||
$args->module_srl = $module_srl;
|
||||
$output = executeQuery('comment.getCommentCount', $args);
|
||||
$total_count = $output->data->count;
|
||||
|
||||
return (int)$total_count;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief mid 에 해당하는 댓글을 가져옴
|
||||
**/
|
||||
function getNewestCommentList($obj) {
|
||||
if($obj->mid) {
|
||||
$oModuleModel = &getModel('module');
|
||||
$obj->module_srl = $oModuleModel->getModuleSrlByMid($obj->mid);
|
||||
unset($obj->mid);
|
||||
}
|
||||
|
||||
// 넘어온 module_srl은 array일 수도 있기에 array인지를 체크
|
||||
if(is_array($obj->module_srl)) $args->module_srl = implode(',', $obj->module_srl);
|
||||
else $args->module_srl = $obj->module_srl;
|
||||
$args->list_count = $obj->list_count;
|
||||
|
||||
$output = executeQuery('comment.getNewestCommentList', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$comment_list = $output->data;
|
||||
if($comment_list) {
|
||||
if(!is_array($comment_list)) $comment_list = array($comment_list);
|
||||
$comment_count = count($comment_list);
|
||||
foreach($comment_list as $key => $attribute) {
|
||||
if(!$attribute->comment_srl) continue;
|
||||
$oComment = null;
|
||||
$oComment = new commentItem();
|
||||
$oComment->setAttribute($attribute);
|
||||
|
||||
$result[$key] = $oComment;
|
||||
}
|
||||
$output->data = $result;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief document_srl에 해당하는 문서의 댓글 목록을 가져옴
|
||||
**/
|
||||
function getCommentList($document_srl, $page = 0, $is_admin = false, $count = 0) {
|
||||
// 해당 문서의 모듈에 해당하는 댓글 수를 구함
|
||||
$oDocumentModel = &getModel('document');
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||
|
||||
// 문서가 존재하지 않으면 return~
|
||||
if(!$oDocument->isExists()) return;
|
||||
|
||||
// 댓글수가 없으면 return~
|
||||
if($oDocument->getCommentCount()<1) return;
|
||||
|
||||
// 정해진 댓글수에 따른 댓글 목록 구함
|
||||
$module_srl = $oDocument->get('module_srl');
|
||||
|
||||
if(!$count) {
|
||||
$comment_config = $this->getCommentConfig($module_srl);
|
||||
$comment_count = $comment_config->comment_count;
|
||||
if(!$comment_count) $comment_count = 50;
|
||||
} else {
|
||||
$comment_count = $count;
|
||||
}
|
||||
|
||||
// 페이지가 없으면 제일 뒤 페이지를 구함
|
||||
if(!$page) $page = (int)( ($oDocument->getCommentCount()-1) / $comment_count) + 1;
|
||||
|
||||
// 정해진 수에 따라 목록을 구해옴
|
||||
$args->document_srl = $document_srl;
|
||||
$args->list_count = $comment_count;
|
||||
$args->page = $page;
|
||||
$args->page_count = 10;
|
||||
$output = executeQueryArray('comment.getCommentPageList', $args);
|
||||
|
||||
// 쿼리 결과에서 오류가 생기면 그냥 return
|
||||
if(!$output->toBool()) return;
|
||||
|
||||
// 만약 구해온 결과값이 저장된 댓글수와 다르다면 기존의 데이터로 판단하고 댓글 목록 테이블에 데이터 입력
|
||||
if(!$output->data) {
|
||||
$this->fixCommentList($oDocument->get('module_srl'), $document_srl);
|
||||
$output = executeQueryArray('comment.getCommentPageList', $args);
|
||||
if(!$output->toBool()) return;
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief document_srl에 해당하는 댓글 목록을 갱신
|
||||
* 정식버전 이전에 사용되던 데이터를 위한 처리
|
||||
**/
|
||||
function fixCommentList($module_srl, $document_srl) {
|
||||
// 일괄 작업이라서 lock 파일을 생성하여 중복 작업이 되지 않도록 한다
|
||||
$lock_file = "./files/cache/tmp/lock.".$document_srl;
|
||||
if(file_exists($lock_file) && filemtime($lock_file)+60*60*10<time()) return;
|
||||
FileHandler::writeFile($lock_file, '');
|
||||
|
||||
// 목록을 구함
|
||||
$args->document_srl = $document_srl;
|
||||
$args->list_order = 'list_order';
|
||||
$output = executeQuery('comment.getCommentList', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$source_list = $output->data;
|
||||
if(!is_array($source_list)) $source_list = array($source_list);
|
||||
|
||||
// 댓글를 계층형 구조로 정렬
|
||||
$comment_count = count($source_list);
|
||||
|
||||
$root = NULL;
|
||||
$list = NULL;
|
||||
$comment_list = array();
|
||||
|
||||
// 로그인 사용자의 경우 로그인 정보를 일단 구해 놓음
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
|
||||
// loop를 돌면서 코멘트의 계층 구조 만듬
|
||||
for($i=$comment_count-1;$i>=0;$i--) {
|
||||
$comment_srl = $source_list[$i]->comment_srl;
|
||||
$parent_srl = $source_list[$i]->parent_srl;
|
||||
if(!$comment_srl) continue;
|
||||
|
||||
// 목록을 만듬
|
||||
$list[$comment_srl] = $source_list[$i];
|
||||
|
||||
if($parent_srl) {
|
||||
$list[$parent_srl]->child[] = &$list[$comment_srl];
|
||||
} else {
|
||||
$root->child[] = &$list[$comment_srl];
|
||||
}
|
||||
}
|
||||
$this->_arrangeComment($comment_list, $root->child, 0, null);
|
||||
|
||||
// 구해진 값을 db에 입력함
|
||||
if(count($comment_list)) {
|
||||
foreach($comment_list as $comment_srl => $item) {
|
||||
$comment_args = null;
|
||||
$comment_args->comment_srl = $comment_srl;
|
||||
$comment_args->document_srl = $document_srl;
|
||||
$comment_args->head = $item->head;
|
||||
$comment_args->arrange = $item->arrange;
|
||||
$comment_args->module_srl = $module_srl;
|
||||
$comment_args->regdate = $item->regdate;
|
||||
$comment_args->depth = $item->depth;
|
||||
|
||||
executeQuery('comment.insertCommentList', $comment_args);
|
||||
}
|
||||
}
|
||||
|
||||
// 성공시 lock파일 제거
|
||||
FileHandler::removeFile($lock_file);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 댓글을 계층형으로 재배치
|
||||
**/
|
||||
function _arrangeComment(&$comment_list, $list, $depth, $parent = null) {
|
||||
if(!count($list)) return;
|
||||
foreach($list as $key => $val) {
|
||||
|
||||
if($parent) $val->head = $parent->head;
|
||||
else $val->head = $val->comment_srl;
|
||||
$val->arrange = count($comment_list)+1;
|
||||
|
||||
if($val->child) {
|
||||
$val->depth = $depth;
|
||||
$comment_list[$val->comment_srl] = $val;
|
||||
$this->_arrangeComment($comment_list,$val->child,$depth+1, $val);
|
||||
unset($val->child);
|
||||
} else {
|
||||
$val->depth = $depth;
|
||||
$comment_list[$val->comment_srl] = $val;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 모든 댓글를 시간 역순으로 가져옴 (관리자용)
|
||||
**/
|
||||
function getTotalCommentList($obj) {
|
||||
$query_id = 'comment.getTotalCommentList';
|
||||
|
||||
// 변수 설정
|
||||
$args->sort_index = 'list_order';
|
||||
$args->page = $obj->page?$obj->page:1;
|
||||
$args->list_count = $obj->list_count?$obj->list_count:20;
|
||||
$args->page_count = $obj->page_count?$obj->page_count:10;
|
||||
$args->s_module_srl = $obj->module_srl;
|
||||
$args->exclude_module_srl = $obj->exclude_module_srl;
|
||||
|
||||
// 검색 옵션 정리
|
||||
$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' :
|
||||
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
|
||||
$args->s_content = $search_keyword;
|
||||
break;
|
||||
case 'user_id' :
|
||||
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
|
||||
$args->s_user_id = $search_keyword;
|
||||
$query_id = 'comment.getTotalCommentListWithinMember';
|
||||
$args->sort_index = 'comments.list_order';
|
||||
break;
|
||||
case 'user_name' :
|
||||
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
|
||||
$args->s_user_name = $search_keyword;
|
||||
break;
|
||||
case 'nick_name' :
|
||||
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
|
||||
$args->s_nick_name = $search_keyword;
|
||||
break;
|
||||
case 'email_address' :
|
||||
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
|
||||
$args->s_email_address = $search_keyword;
|
||||
break;
|
||||
case 'homepage' :
|
||||
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
|
||||
$args->s_homepage = $search_keyword;
|
||||
break;
|
||||
case 'regdate' :
|
||||
$args->s_regdate = $search_keyword;
|
||||
break;
|
||||
case 'last_update' :
|
||||
$args->s_last_upate = $search_keyword;
|
||||
break;
|
||||
case 'ipaddress' :
|
||||
$args->s_ipaddress= $search_keyword;
|
||||
break;
|
||||
case 'member_srl' :
|
||||
$args->{"s_".$search_target} = (int)$search_keyword;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// comment.getTotalCommentList 쿼리 실행
|
||||
$output = executeQueryArray($query_id, $args);
|
||||
|
||||
// 결과가 없거나 오류 발생시 그냥 return
|
||||
if(!$output->toBool()||!count($output->data)) return $output;
|
||||
foreach($output->data as $key => $val) {
|
||||
unset($_oComment);
|
||||
$_oComment = new CommentItem(0);
|
||||
$_oComment->setAttribute($val);
|
||||
$output->data[$key] = $_oComment;
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 모듈별 댓글 설정을 return
|
||||
**/
|
||||
function getCommentConfig($module_srl) {
|
||||
$oModuleModel = &getModel('module');
|
||||
$comment_config = $oModuleModel->getModulePartConfig('comment', $module_srl);
|
||||
if(!isset($comment_config->comment_count)) $comment_config->comment_count = 50;
|
||||
return $comment_config;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class commentModel
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief comment 모듈의 model class
|
||||
**/
|
||||
|
||||
class commentModel extends comment {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 선택된 게시물의 팝업메뉴 표시
|
||||
*
|
||||
* 인쇄, 스크랩, 추천, 비추천, 신고 기능 추가
|
||||
**/
|
||||
function getCommentMenu() {
|
||||
|
||||
// 요청된 게시물 번호와 현재 로그인 정보 구함
|
||||
$comment_srl = Context::get('target_srl');
|
||||
$mid = Context::get('cur_mid');
|
||||
$logged_info = Context::get('logged_info');
|
||||
$act = Context::get('cur_act');
|
||||
|
||||
// menu_list 에 "표시할글,target,url" 을 배열로 넣는다
|
||||
$menu_list = array();
|
||||
|
||||
// trigger 호출
|
||||
ModuleHandler::triggerCall('comment.getCommentMenu', 'before', $menu_list);
|
||||
|
||||
$oCommentController = &getController('comment');
|
||||
|
||||
// 회원이어야만 가능한 기능
|
||||
if($logged_info->member_srl) {
|
||||
|
||||
// 추천 버튼 추가
|
||||
$url = sprintf("doCallModuleAction('comment','procCommentVoteUp','%s')", $comment_srl);
|
||||
$oCommentController->addCommentPopupMenu($url,'cmd_vote','./modules/document/tpl/icons/vote_up.gif','javascript');
|
||||
|
||||
// 비추천 버튼 추가
|
||||
$url = sprintf("doCallModuleAction('comment','procCommentVoteDown','%s')", $comment_srl);
|
||||
$oCommentController->addCommentPopupMenu($url,'cmd_vote_down','./modules/document/tpl/icons/vote_down.gif','javascript');
|
||||
|
||||
// 신고 기능 추가
|
||||
$url = sprintf("doCallModuleAction('comment','procCommentDeclare','%s')", $comment_srl);
|
||||
$oCommentController->addCommentPopupMenu($url,'cmd_declare','./modules/document/tpl/icons/declare.gif','javascript');
|
||||
}
|
||||
|
||||
// trigger 호출 (after)
|
||||
ModuleHandler::triggerCall('comment.getCommentMenu', 'after', $menu_list);
|
||||
|
||||
// 관리자일 경우 ip로 글 찾기
|
||||
if($logged_info->is_admin == 'Y') {
|
||||
$oCommentModel = &getModel('comment');
|
||||
$oComment = $oCommentModel->getComment($comment_srl);
|
||||
|
||||
if($oComment->isExists()) {
|
||||
// ip주소에 해당하는 글 찾기
|
||||
$url = getUrl('','module','admin','act','dispCommentAdminList','search_target','ipaddress','search_keyword',$oComment->get('ipaddress'));
|
||||
$icon_path = './modules/member/tpl/images/icon_management.gif';
|
||||
$oCommentController->addCommentPopupMenu($url,'cmd_search_by_ipaddress',$icon_path,'TraceByIpaddress');
|
||||
|
||||
$url = sprintf("var params = new Array(); params['ipaddress']='%s'; exec_xml('spamfilter', 'procSpamfilterAdminInsertDeniedIP', params, completeCallModuleAction)", $oComment-> getIpAddress());
|
||||
$oCommentController->addCommentPopupMenu($url,'cmd_add_ip_to_spamfilter','./modules/document/tpl/icons/declare.gif','javascript');
|
||||
}
|
||||
}
|
||||
|
||||
// 팝업메뉴의 언어 변경
|
||||
$menus = Context::get('comment_popup_menu_list');
|
||||
$menus_count = count($menus);
|
||||
for($i=0;$i<$menus_count;$i++) {
|
||||
$menus[$i]->str = Context::getLang($menus[$i]->str);
|
||||
}
|
||||
|
||||
// 최종적으로 정리된 팝업메뉴 목록을 구함
|
||||
$this->add('menus', $menus);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief comment_srl에 권한이 있는지 체크
|
||||
*
|
||||
* 세션 정보만 이용
|
||||
**/
|
||||
function isGranted($comment_srl) {
|
||||
return $_SESSION['own_comment'][$comment_srl];
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 자식 답글의 갯수 리턴
|
||||
**/
|
||||
function getChildCommentCount($comment_srl) {
|
||||
$args->comment_srl = $comment_srl;
|
||||
$output = executeQuery('comment.getChildCommentCount', $args);
|
||||
return (int)$output->data->count;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 댓글 가져오기
|
||||
**/
|
||||
function getComment($comment_srl=0, $is_admin = false) {
|
||||
$oComment = new commentItem($comment_srl);
|
||||
if($is_admin) $oComment->setGrant();
|
||||
|
||||
return $oComment;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 여러개의 댓글들을 가져옴 (페이징 아님)
|
||||
**/
|
||||
function getComments($comment_srl_list) {
|
||||
if(is_array($comment_srl_list)) $comment_srls = implode(',',$comment_srl_list);
|
||||
|
||||
// DB에서 가져옴
|
||||
$args->comment_srls = $comment_srls;
|
||||
$output = executeQuery('comment.getComments', $args);
|
||||
if(!$output->toBool()) return;
|
||||
$comment_list = $output->data;
|
||||
if(!$comment_list) return;
|
||||
if(!is_array($comment_list)) $comment_list = array($comment_list);
|
||||
|
||||
$comment_count = count($comment_list);
|
||||
foreach($comment_list as $key => $attribute) {
|
||||
if(!$attribute->comment_srl) continue;
|
||||
$oComment = null;
|
||||
$oComment = new commentItem();
|
||||
$oComment->setAttribute($attribute);
|
||||
if($is_admin) $oComment->setGrant();
|
||||
|
||||
$result[$attribute->comment_srl] = $oComment;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief document_srl 에 해당하는 댓글의 전체 갯수를 가져옴
|
||||
**/
|
||||
function getCommentCount($document_srl) {
|
||||
$args->document_srl = $document_srl;
|
||||
$output = executeQuery('comment.getCommentCount', $args);
|
||||
$total_count = $output->data->count;
|
||||
return (int)$total_count;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief module_srl 에 해당하는 댓글의 전체 갯수를 가져옴
|
||||
**/
|
||||
function getCommentAllCount($module_srl) {
|
||||
$args->module_srl = $module_srl;
|
||||
$output = executeQuery('comment.getCommentCount', $args);
|
||||
$total_count = $output->data->count;
|
||||
|
||||
return (int)$total_count;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief mid 에 해당하는 댓글을 가져옴
|
||||
**/
|
||||
function getNewestCommentList($obj) {
|
||||
if($obj->mid) {
|
||||
$oModuleModel = &getModel('module');
|
||||
$obj->module_srl = $oModuleModel->getModuleSrlByMid($obj->mid);
|
||||
unset($obj->mid);
|
||||
}
|
||||
|
||||
// 넘어온 module_srl은 array일 수도 있기에 array인지를 체크
|
||||
if(is_array($obj->module_srl)) $args->module_srl = implode(',', $obj->module_srl);
|
||||
else $args->module_srl = $obj->module_srl;
|
||||
$args->list_count = $obj->list_count;
|
||||
|
||||
$output = executeQuery('comment.getNewestCommentList', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$comment_list = $output->data;
|
||||
if($comment_list) {
|
||||
if(!is_array($comment_list)) $comment_list = array($comment_list);
|
||||
$comment_count = count($comment_list);
|
||||
foreach($comment_list as $key => $attribute) {
|
||||
if(!$attribute->comment_srl) continue;
|
||||
$oComment = null;
|
||||
$oComment = new commentItem();
|
||||
$oComment->setAttribute($attribute);
|
||||
|
||||
$result[$key] = $oComment;
|
||||
}
|
||||
$output->data = $result;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief document_srl에 해당하는 문서의 댓글 목록을 가져옴
|
||||
**/
|
||||
function getCommentList($document_srl, $page = 0, $is_admin = false, $count = 0) {
|
||||
// 해당 문서의 모듈에 해당하는 댓글 수를 구함
|
||||
$oDocumentModel = &getModel('document');
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||
|
||||
// 문서가 존재하지 않으면 return~
|
||||
if(!$oDocument->isExists()) return;
|
||||
|
||||
// 댓글수가 없으면 return~
|
||||
if($oDocument->getCommentCount()<1) return;
|
||||
|
||||
// 정해진 댓글수에 따른 댓글 목록 구함
|
||||
$module_srl = $oDocument->get('module_srl');
|
||||
|
||||
if(!$count) {
|
||||
$comment_config = $this->getCommentConfig($module_srl);
|
||||
$comment_count = $comment_config->comment_count;
|
||||
if(!$comment_count) $comment_count = 50;
|
||||
} else {
|
||||
$comment_count = $count;
|
||||
}
|
||||
|
||||
// 페이지가 없으면 제일 뒤 페이지를 구함
|
||||
if(!$page) $page = (int)( ($oDocument->getCommentCount()-1) / $comment_count) + 1;
|
||||
|
||||
// 정해진 수에 따라 목록을 구해옴
|
||||
$args->document_srl = $document_srl;
|
||||
$args->list_count = $comment_count;
|
||||
$args->page = $page;
|
||||
$args->page_count = 10;
|
||||
$output = executeQueryArray('comment.getCommentPageList', $args);
|
||||
|
||||
// 쿼리 결과에서 오류가 생기면 그냥 return
|
||||
if(!$output->toBool()) return;
|
||||
|
||||
// 만약 구해온 결과값이 저장된 댓글수와 다르다면 기존의 데이터로 판단하고 댓글 목록 테이블에 데이터 입력
|
||||
if(!$output->data) {
|
||||
$this->fixCommentList($oDocument->get('module_srl'), $document_srl);
|
||||
$output = executeQueryArray('comment.getCommentPageList', $args);
|
||||
if(!$output->toBool()) return;
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief document_srl에 해당하는 댓글 목록을 갱신
|
||||
* 정식버전 이전에 사용되던 데이터를 위한 처리
|
||||
**/
|
||||
function fixCommentList($module_srl, $document_srl) {
|
||||
// 일괄 작업이라서 lock 파일을 생성하여 중복 작업이 되지 않도록 한다
|
||||
$lock_file = "./files/cache/tmp/lock.".$document_srl;
|
||||
if(file_exists($lock_file) && filemtime($lock_file)+60*60*10<time()) return;
|
||||
FileHandler::writeFile($lock_file, '');
|
||||
|
||||
// 목록을 구함
|
||||
$args->document_srl = $document_srl;
|
||||
$args->list_order = 'list_order';
|
||||
$output = executeQuery('comment.getCommentList', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$source_list = $output->data;
|
||||
if(!is_array($source_list)) $source_list = array($source_list);
|
||||
|
||||
// 댓글를 계층형 구조로 정렬
|
||||
$comment_count = count($source_list);
|
||||
|
||||
$root = NULL;
|
||||
$list = NULL;
|
||||
$comment_list = array();
|
||||
|
||||
// 로그인 사용자의 경우 로그인 정보를 일단 구해 놓음
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
|
||||
// loop를 돌면서 코멘트의 계층 구조 만듬
|
||||
for($i=$comment_count-1;$i>=0;$i--) {
|
||||
$comment_srl = $source_list[$i]->comment_srl;
|
||||
$parent_srl = $source_list[$i]->parent_srl;
|
||||
if(!$comment_srl) continue;
|
||||
|
||||
// 목록을 만듬
|
||||
$list[$comment_srl] = $source_list[$i];
|
||||
|
||||
if($parent_srl) {
|
||||
$list[$parent_srl]->child[] = &$list[$comment_srl];
|
||||
} else {
|
||||
$root->child[] = &$list[$comment_srl];
|
||||
}
|
||||
}
|
||||
$this->_arrangeComment($comment_list, $root->child, 0, null);
|
||||
|
||||
// 구해진 값을 db에 입력함
|
||||
if(count($comment_list)) {
|
||||
foreach($comment_list as $comment_srl => $item) {
|
||||
$comment_args = null;
|
||||
$comment_args->comment_srl = $comment_srl;
|
||||
$comment_args->document_srl = $document_srl;
|
||||
$comment_args->head = $item->head;
|
||||
$comment_args->arrange = $item->arrange;
|
||||
$comment_args->module_srl = $module_srl;
|
||||
$comment_args->regdate = $item->regdate;
|
||||
$comment_args->depth = $item->depth;
|
||||
|
||||
executeQuery('comment.insertCommentList', $comment_args);
|
||||
}
|
||||
}
|
||||
|
||||
// 성공시 lock파일 제거
|
||||
FileHandler::removeFile($lock_file);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 댓글을 계층형으로 재배치
|
||||
**/
|
||||
function _arrangeComment(&$comment_list, $list, $depth, $parent = null) {
|
||||
if(!count($list)) return;
|
||||
foreach($list as $key => $val) {
|
||||
|
||||
if($parent) $val->head = $parent->head;
|
||||
else $val->head = $val->comment_srl;
|
||||
$val->arrange = count($comment_list)+1;
|
||||
|
||||
if($val->child) {
|
||||
$val->depth = $depth;
|
||||
$comment_list[$val->comment_srl] = $val;
|
||||
$this->_arrangeComment($comment_list,$val->child,$depth+1, $val);
|
||||
unset($val->child);
|
||||
} else {
|
||||
$val->depth = $depth;
|
||||
$comment_list[$val->comment_srl] = $val;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 모든 댓글를 시간 역순으로 가져옴 (관리자용)
|
||||
**/
|
||||
function getTotalCommentList($obj) {
|
||||
$query_id = 'comment.getTotalCommentList';
|
||||
|
||||
// 변수 설정
|
||||
$args->sort_index = 'list_order';
|
||||
$args->page = $obj->page?$obj->page:1;
|
||||
$args->list_count = $obj->list_count?$obj->list_count:20;
|
||||
$args->page_count = $obj->page_count?$obj->page_count:10;
|
||||
$args->s_module_srl = $obj->module_srl;
|
||||
$args->exclude_module_srl = $obj->exclude_module_srl;
|
||||
|
||||
// 검색 옵션 정리
|
||||
$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' :
|
||||
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
|
||||
$args->s_content = $search_keyword;
|
||||
break;
|
||||
case 'user_id' :
|
||||
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
|
||||
$args->s_user_id = $search_keyword;
|
||||
$query_id = 'comment.getTotalCommentListWithinMember';
|
||||
$args->sort_index = 'comments.list_order';
|
||||
break;
|
||||
case 'user_name' :
|
||||
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
|
||||
$args->s_user_name = $search_keyword;
|
||||
break;
|
||||
case 'nick_name' :
|
||||
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
|
||||
$args->s_nick_name = $search_keyword;
|
||||
break;
|
||||
case 'email_address' :
|
||||
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
|
||||
$args->s_email_address = $search_keyword;
|
||||
break;
|
||||
case 'homepage' :
|
||||
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
|
||||
$args->s_homepage = $search_keyword;
|
||||
break;
|
||||
case 'regdate' :
|
||||
$args->s_regdate = $search_keyword;
|
||||
break;
|
||||
case 'last_update' :
|
||||
$args->s_last_upate = $search_keyword;
|
||||
break;
|
||||
case 'ipaddress' :
|
||||
$args->s_ipaddress= $search_keyword;
|
||||
break;
|
||||
case 'member_srl' :
|
||||
$args->{"s_".$search_target} = (int)$search_keyword;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// comment.getTotalCommentList 쿼리 실행
|
||||
$output = executeQueryArray($query_id, $args);
|
||||
|
||||
// 결과가 없거나 오류 발생시 그냥 return
|
||||
if(!$output->toBool()||!count($output->data)) return $output;
|
||||
foreach($output->data as $key => $val) {
|
||||
unset($_oComment);
|
||||
$_oComment = new CommentItem(0);
|
||||
$_oComment->setAttribute($val);
|
||||
$output->data[$key] = $_oComment;
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 모듈별 댓글 설정을 return
|
||||
**/
|
||||
function getCommentConfig($module_srl) {
|
||||
$oModuleModel = &getModel('module');
|
||||
$comment_config = $oModuleModel->getModulePartConfig('comment', $module_srl);
|
||||
if(!isset($comment_config->comment_count)) $comment_config->comment_count = 50;
|
||||
return $comment_config;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,48 +1,48 @@
|
|||
<?php
|
||||
/**
|
||||
* @class commentView
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief comment 모듈의 view 클래스
|
||||
**/
|
||||
|
||||
class commentView extends comment {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 모듈의 추가 설정에서 댓글 설정을 하는 form 추가
|
||||
**/
|
||||
function triggerDispCommentAdditionSetup(&$obj) {
|
||||
$current_module_srl = Context::get('module_srl');
|
||||
$current_module_srls = Context::get('module_srls');
|
||||
|
||||
if(!$current_module_srl && !$current_module_srls) {
|
||||
// 선택된 모듈의 정보를 가져옴
|
||||
$current_module_info = Context::get('current_module_info');
|
||||
$current_module_srl = $current_module_info->module_srl;
|
||||
if(!$current_module_srl) return new Object();
|
||||
}
|
||||
|
||||
// 댓글 설정을 구함
|
||||
$oCommentModel = &getModel('comment');
|
||||
$comment_config = $oCommentModel->getCommentConfig($current_module_srl);
|
||||
Context::set('comment_config', $comment_config);
|
||||
|
||||
// 그룹 목록을 구함
|
||||
$oMemberModel = &getModel('member');
|
||||
$group_list = $oMemberModel->getGroups();
|
||||
Context::set('group_list', $group_list);
|
||||
|
||||
// 템플릿 파일 지정
|
||||
$oTemplate = &TemplateHandler::getInstance();
|
||||
$tpl = $oTemplate->compile($this->module_path.'tpl', 'comment_module_config');
|
||||
$obj .= $tpl;
|
||||
|
||||
return new Object();
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class commentView
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief comment 모듈의 view 클래스
|
||||
**/
|
||||
|
||||
class commentView extends comment {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 모듈의 추가 설정에서 댓글 설정을 하는 form 추가
|
||||
**/
|
||||
function triggerDispCommentAdditionSetup(&$obj) {
|
||||
$current_module_srl = Context::get('module_srl');
|
||||
$current_module_srls = Context::get('module_srls');
|
||||
|
||||
if(!$current_module_srl && !$current_module_srls) {
|
||||
// 선택된 모듈의 정보를 가져옴
|
||||
$current_module_info = Context::get('current_module_info');
|
||||
$current_module_srl = $current_module_info->module_srl;
|
||||
if(!$current_module_srl) return new Object();
|
||||
}
|
||||
|
||||
// 댓글 설정을 구함
|
||||
$oCommentModel = &getModel('comment');
|
||||
$comment_config = $oCommentModel->getCommentConfig($current_module_srl);
|
||||
Context::set('comment_config', $comment_config);
|
||||
|
||||
// 그룹 목록을 구함
|
||||
$oMemberModel = &getModel('member');
|
||||
$group_list = $oMemberModel->getGroups();
|
||||
Context::set('group_list', $group_list);
|
||||
|
||||
// 템플릿 파일 지정
|
||||
$oTemplate = &TemplateHandler::getInstance();
|
||||
$tpl = $oTemplate->compile($this->module_path.'tpl', 'comment_module_config');
|
||||
$obj .= $tpl;
|
||||
|
||||
return new Object();
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,33 +1,33 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="0.2">
|
||||
<title xml:lang="ko">댓글</title>
|
||||
<title xml:lang="jp">コメント</title>
|
||||
<title xml:lang="zh-CN">评论管理</title>
|
||||
<title xml:lang="en">Comment</title>
|
||||
<title xml:lang="vi">Bình luận</title>
|
||||
<title xml:lang="es">Commentarios</title>
|
||||
<title xml:lang="ru">Комментарии</title>
|
||||
<title xml:lang="zh-TW">評論</title>
|
||||
<description xml:lang="ko">게시판이나 블로그등의 댓글을 관리하는 모듈입니다.</description>
|
||||
<description xml:lang="jp">掲示板やブログなどのコメントを管理するモジュールです。</description>
|
||||
<description xml:lang="zh-CN">管理版面或博客评论的模块。</description>
|
||||
<description xml:lang="en">Module for managing board/blog's comments</description>
|
||||
<description xml:lang="vi">Module quản lý bình luận của bài viết và sổ lưu niệm</description>
|
||||
<description xml:lang="es">Es el módulo para manejar commentarios en blog o boletínes.</description>
|
||||
<description xml:lang="ru">Модуль для управления комментариями форума/блога.</description>
|
||||
<description xml:lang="zh-TW">管理討論板或部落格評論的模組。</description>
|
||||
<version>0.1</version>
|
||||
<date>2007-02-28</date>
|
||||
<category>content</category>
|
||||
|
||||
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
|
||||
<name xml:lang="ko">zero</name>
|
||||
<name xml:lang="jp">zero</name>
|
||||
<name xml:lang="vi">zero</name>
|
||||
<name xml:lang="zh-CN">zero</name>
|
||||
<name xml:lang="en">zero</name>
|
||||
<name xml:lang="es">zero</name>
|
||||
<name xml:lang="ru">zero</name>
|
||||
<name xml:lang="zh-TW">zero</name>
|
||||
</author>
|
||||
</module>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="0.2">
|
||||
<title xml:lang="ko">댓글</title>
|
||||
<title xml:lang="jp">コメント</title>
|
||||
<title xml:lang="zh-CN">评论管理</title>
|
||||
<title xml:lang="en">Comment</title>
|
||||
<title xml:lang="vi">Bình luận</title>
|
||||
<title xml:lang="es">Commentarios</title>
|
||||
<title xml:lang="ru">Комментарии</title>
|
||||
<title xml:lang="zh-TW">評論</title>
|
||||
<description xml:lang="ko">게시판이나 블로그등의 댓글을 관리하는 모듈입니다.</description>
|
||||
<description xml:lang="jp">掲示板やブログなどのコメントを管理するモジュールです。</description>
|
||||
<description xml:lang="zh-CN">管理版面或博客评论的模块。</description>
|
||||
<description xml:lang="en">Module for managing board/blog's comments</description>
|
||||
<description xml:lang="vi">Module quản lý bình luận của bài viết và sổ lưu niệm</description>
|
||||
<description xml:lang="es">Es el módulo para manejar commentarios en blog o boletínes.</description>
|
||||
<description xml:lang="ru">Модуль для управления комментариями форума/блога.</description>
|
||||
<description xml:lang="zh-TW">管理討論板或部落格評論的模組。</description>
|
||||
<version>0.1</version>
|
||||
<date>2007-02-28</date>
|
||||
<category>content</category>
|
||||
|
||||
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
|
||||
<name xml:lang="ko">NHN</name>
|
||||
<name xml:lang="jp">NHN</name>
|
||||
<name xml:lang="vi">NHN</name>
|
||||
<name xml:lang="zh-CN">NHN</name>
|
||||
<name xml:lang="en">NHN</name>
|
||||
<name xml:lang="es">NHN</name>
|
||||
<name xml:lang="ru">NHN</name>
|
||||
<name xml:lang="zh-TW">NHN</name>
|
||||
</author>
|
||||
</module>
|
||||
|
|
|
|||
|
|
@ -1,31 +1,31 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/comment/lang/en.lang.php
|
||||
* @author zero <zero@nzeo.com>
|
||||
* @brief comment module's basic language pack
|
||||
**/
|
||||
|
||||
$lang->cmd_comment_do = 'I want to';
|
||||
|
||||
$lang->comment_list = 'Comments List';
|
||||
$lang->cmd_delete_checked_comment = 'Delete selected item';
|
||||
|
||||
$lang->comment_count = 'Number of Comments';
|
||||
$lang->about_comment_count = 'Display the comments as much as user inputs the number and it will be moved to the List if the comments are over its number.';
|
||||
|
||||
$lang->msg_cart_is_null = 'Please select an article to delete';
|
||||
$lang->msg_checked_comment_is_deleted = '%d comment(s) is(are) successfully deleted.';
|
||||
|
||||
$lang->search_target_list = array(
|
||||
'content' => 'Content',
|
||||
'user_id' => 'ID',
|
||||
'user_name' => 'Name',
|
||||
'nick_name' => 'Nickname',
|
||||
'member_srl' => 'Member Serial',
|
||||
'email_address' => 'Email',
|
||||
'homepage' => 'Homepage',
|
||||
'regdate' => 'Date',
|
||||
'last_update' => 'Last update',
|
||||
'ipaddress' => 'IP Address',
|
||||
);
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file modules/comment/lang/en.lang.php
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief comment module's basic language pack
|
||||
**/
|
||||
|
||||
$lang->cmd_comment_do = 'I want to';
|
||||
|
||||
$lang->comment_list = 'Comments List';
|
||||
$lang->cmd_delete_checked_comment = 'Delete selected item';
|
||||
|
||||
$lang->comment_count = 'Number of Comments';
|
||||
$lang->about_comment_count = 'Display the comments as much as user inputs the number and it will be moved to the List if the comments are over its number.';
|
||||
|
||||
$lang->msg_cart_is_null = 'Please select an article to delete';
|
||||
$lang->msg_checked_comment_is_deleted = '%d comment(s) is(are) successfully deleted.';
|
||||
|
||||
$lang->search_target_list = array(
|
||||
'content' => 'Content',
|
||||
'user_id' => 'ID',
|
||||
'user_name' => 'Name',
|
||||
'nick_name' => 'Nickname',
|
||||
'member_srl' => 'Member Serial',
|
||||
'email_address' => 'Email',
|
||||
'homepage' => 'Homepage',
|
||||
'regdate' => 'Date',
|
||||
'last_update' => 'Last update',
|
||||
'ipaddress' => 'IP Address',
|
||||
);
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @archivo modules/comment/lang/ko.lang.php
|
||||
* @auhor zero <zero@nzeo.com>
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @sumario Paquete del idioma español para el módulo de comentarios.
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,32 +1,32 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/comment/lang/fr.lang.php
|
||||
* @author zero <zero@nzeo.com> Traduit par Pierre Duvent <PierreDuvent@gmail.com>
|
||||
* @brief Paquet du langage en français pour le module de Commentaire
|
||||
**/
|
||||
|
||||
$lang->cmd_comment_do = 'Vous voudriez...';
|
||||
|
||||
$lang->comment_list = 'Liste des Commentaires';
|
||||
$lang->cmd_toggle_checked_comment = 'Renverser les choisis';
|
||||
$lang->cmd_delete_checked_comment = 'Supprimer les choisis';
|
||||
|
||||
$lang->comment_count = 'Limite de Commentaires';
|
||||
$lang->about_comment_count = 'Quand il y a plus de commentaires, ils seront bougés sur le liste.';
|
||||
|
||||
$lang->msg_cart_is_null = 'Choisissez un article à supprimer, S.V.P.';
|
||||
$lang->msg_checked_comment_is_deleted = '%d commentaire(s) est(sont) supprimé(s) avec succés.';
|
||||
|
||||
$lang->search_target_list = array(
|
||||
'content' => 'Contenu',
|
||||
'user_id' => 'Compte',
|
||||
'user_name' => 'Nom',
|
||||
'nick_name' => 'Surnom',
|
||||
'member_srl' => 'Numéro de Série du Membre',
|
||||
'email_address' => 'Mél',
|
||||
'homepage' => 'Page d\'Accueil',
|
||||
'regdate' => 'Jour',
|
||||
'last_update' => 'Mise à Jour',
|
||||
'ipaddress' => 'Adresse IP',
|
||||
);
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file modules/comment/lang/fr.lang.php
|
||||
* @author NHN (developers@xpressengine.com) Traduit par Pierre Duvent <PierreDuvent@gmail.com>
|
||||
* @brief Paquet du langage en français pour le module de Commentaire
|
||||
**/
|
||||
|
||||
$lang->cmd_comment_do = 'Vous voudriez...';
|
||||
|
||||
$lang->comment_list = 'Liste des Commentaires';
|
||||
$lang->cmd_toggle_checked_comment = 'Renverser les choisis';
|
||||
$lang->cmd_delete_checked_comment = 'Supprimer les choisis';
|
||||
|
||||
$lang->comment_count = 'Limite de Commentaires';
|
||||
$lang->about_comment_count = 'Quand il y a plus de commentaires, ils seront bougés sur le liste.';
|
||||
|
||||
$lang->msg_cart_is_null = 'Choisissez un article à supprimer, S.V.P.';
|
||||
$lang->msg_checked_comment_is_deleted = '%d commentaire(s) est(sont) supprimé(s) avec succés.';
|
||||
|
||||
$lang->search_target_list = array(
|
||||
'content' => 'Contenu',
|
||||
'user_id' => 'Compte',
|
||||
'user_name' => 'Nom',
|
||||
'nick_name' => 'Surnom',
|
||||
'member_srl' => 'Numéro de Série du Membre',
|
||||
'email_address' => 'Mél',
|
||||
'homepage' => 'Page d\'Accueil',
|
||||
'regdate' => 'Jour',
|
||||
'last_update' => 'Mise à Jour',
|
||||
'ipaddress' => 'Adresse IP',
|
||||
);
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,32 +1,32 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/comment/lang/jp.lang.php
|
||||
* @author zero <zero@nzeo.com> 翻訳:RisaPapa、ミニミ、liahona
|
||||
* @brief コメント(comment) モジュールの基本言語パッケージ
|
||||
**/
|
||||
|
||||
$lang->cmd_comment_do = 'このコメントを…';
|
||||
|
||||
$lang->comment_list = 'コメントリスト';
|
||||
$lang->cmd_toggle_checked_comment = '選択項目の反転';
|
||||
$lang->cmd_delete_checked_comment = '選択項目削除';
|
||||
|
||||
$lang->comment_count = 'コメント数';
|
||||
$lang->about_comment_count = 'コメントを指定した数だけ表示し、それ以上はリスト化します。';
|
||||
|
||||
$lang->msg_cart_is_null = '削除するコメントを選択して下さい。';
|
||||
$lang->msg_checked_comment_is_deleted = '%d個のコメントを削除しました。';
|
||||
|
||||
$lang->search_target_list = array(
|
||||
'content' => '内容',
|
||||
'user_id' => 'ユーザID',
|
||||
'user_name' => '名前',
|
||||
'nick_name' => 'ニックネーム',
|
||||
'member_srl' => '会員番号',
|
||||
'email_address' => 'メールアドレス',
|
||||
'homepage' => 'ホームページURL',
|
||||
'regdate' => '登録日',
|
||||
'last_update' => '最終更新日 ',
|
||||
'ipaddress' => 'IPアドレス',
|
||||
);
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file modules/comment/lang/jp.lang.php
|
||||
* @author NHN (developers@xpressengine.com) 翻訳:RisaPapa、ミニミ、liahona
|
||||
* @brief コメント(comment) モジュールの基本言語パッケージ
|
||||
**/
|
||||
|
||||
$lang->cmd_comment_do = 'このコメントを…';
|
||||
|
||||
$lang->comment_list = 'コメントリスト';
|
||||
$lang->cmd_toggle_checked_comment = '選択項目の反転';
|
||||
$lang->cmd_delete_checked_comment = '選択項目削除';
|
||||
|
||||
$lang->comment_count = 'コメント数';
|
||||
$lang->about_comment_count = 'コメントを指定した数だけ表示し、それ以上はリスト化します。';
|
||||
|
||||
$lang->msg_cart_is_null = '削除するコメントを選択して下さい。';
|
||||
$lang->msg_checked_comment_is_deleted = '%d個のコメントを削除しました。';
|
||||
|
||||
$lang->search_target_list = array(
|
||||
'content' => '内容',
|
||||
'user_id' => 'ユーザID',
|
||||
'user_name' => '名前',
|
||||
'nick_name' => 'ニックネーム',
|
||||
'member_srl' => '会員番号',
|
||||
'email_address' => 'メールアドレス',
|
||||
'homepage' => 'ホームページURL',
|
||||
'regdate' => '登録日',
|
||||
'last_update' => '最終更新日 ',
|
||||
'ipaddress' => 'IPアドレス',
|
||||
);
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,32 +1,32 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/comment/lang/ko.lang.php
|
||||
* @author zero <zero@nzeo.com>
|
||||
* @brief 댓글(comment) 모듈의 기본 언어팩
|
||||
**/
|
||||
|
||||
$lang->cmd_comment_do = '이 댓글을...';
|
||||
|
||||
$lang->comment_list = '댓글 목록';
|
||||
$lang->cmd_toggle_checked_comment = '선택항목 반전';
|
||||
$lang->cmd_delete_checked_comment = '선택항목 삭제';
|
||||
|
||||
$lang->comment_count = '댓글 수';
|
||||
$lang->about_comment_count = '댓글을 정해진 수 만큼만 표시하고 그 이상일 경우 목록으로 이동할 수 있게 합니다.';
|
||||
|
||||
$lang->msg_cart_is_null = '삭제할 글을 선택해주세요.';
|
||||
$lang->msg_checked_comment_is_deleted = '%d개의 댓글이 삭제되었습니다.';
|
||||
|
||||
$lang->search_target_list = array(
|
||||
'content' => '내용',
|
||||
'user_id' => '아이디',
|
||||
'user_name' => '이름',
|
||||
'nick_name' => '닉네임',
|
||||
'member_srl' => '회원 번호',
|
||||
'email_address' => '이메일 주소',
|
||||
'homepage' => '홈페이지',
|
||||
'regdate' => '등록일',
|
||||
'last_update' => '최근수정일 ',
|
||||
'ipaddress' => 'IP 주소',
|
||||
);
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file modules/comment/lang/ko.lang.php
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief 댓글(comment) 모듈의 기본 언어팩
|
||||
**/
|
||||
|
||||
$lang->cmd_comment_do = '이 댓글을...';
|
||||
|
||||
$lang->comment_list = '댓글 목록';
|
||||
$lang->cmd_toggle_checked_comment = '선택항목 반전';
|
||||
$lang->cmd_delete_checked_comment = '선택항목 삭제';
|
||||
|
||||
$lang->comment_count = '댓글 수';
|
||||
$lang->about_comment_count = '댓글을 정해진 수 만큼만 표시하고 그 이상일 경우 목록으로 이동할 수 있게 합니다.';
|
||||
|
||||
$lang->msg_cart_is_null = '삭제할 글을 선택해주세요.';
|
||||
$lang->msg_checked_comment_is_deleted = '%d개의 댓글이 삭제되었습니다.';
|
||||
|
||||
$lang->search_target_list = array(
|
||||
'content' => '내용',
|
||||
'user_id' => '아이디',
|
||||
'user_name' => '이름',
|
||||
'nick_name' => '닉네임',
|
||||
'member_srl' => '회원 번호',
|
||||
'email_address' => '이메일 주소',
|
||||
'homepage' => '홈페이지',
|
||||
'regdate' => '등록일',
|
||||
'last_update' => '최근수정일 ',
|
||||
'ipaddress' => 'IP 주소',
|
||||
);
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,32 +1,32 @@
|
|||
<?php
|
||||
/**
|
||||
* @file ru.lang.php
|
||||
* @author zero <zero@nzeo.com> | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
|
||||
* @brief Russian basic language pack
|
||||
**/
|
||||
|
||||
$lang->cmd_comment_do = 'Эту запись...';
|
||||
|
||||
$lang->comment_list = 'Список записей';
|
||||
$lang->cmd_toggle_checked_comment = 'Изменить выбранное';
|
||||
$lang->cmd_delete_checked_comment = 'Удалить выбранное';
|
||||
|
||||
$lang->comment_count = 'Количество ответов';
|
||||
$lang->about_comment_count = 'Отображается указанное количество ответов, после превышения этого количества производится переход к списку.';
|
||||
|
||||
$lang->msg_cart_is_null = 'Пожалуйста, выберите записи для удаления.';
|
||||
$lang->msg_checked_comment_is_deleted = '%d записьуспешно удалена';
|
||||
|
||||
$lang->search_target_list = array(
|
||||
'content' => 'Содержание',
|
||||
'user_id' => 'ID',
|
||||
'user_name' => 'Имя',
|
||||
'nick_name' => 'Ник',
|
||||
'member_srl' => 'Номер пользователя',
|
||||
'email_address' => 'Email адрес',
|
||||
'homepage' => 'Домашняя страница',
|
||||
'regdate' => 'Дата регистрации',
|
||||
'last_update' => 'Дата последнего обновления',
|
||||
'ipaddress' => 'IP-адрес',
|
||||
);
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file ru.lang.php
|
||||
* @author NHN (developers@xpressengine.com) | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
|
||||
* @brief Russian basic language pack
|
||||
**/
|
||||
|
||||
$lang->cmd_comment_do = 'Эту запись...';
|
||||
|
||||
$lang->comment_list = 'Список записей';
|
||||
$lang->cmd_toggle_checked_comment = 'Изменить выбранное';
|
||||
$lang->cmd_delete_checked_comment = 'Удалить выбранное';
|
||||
|
||||
$lang->comment_count = 'Количество ответов';
|
||||
$lang->about_comment_count = 'Отображается указанное количество ответов, после превышения этого количества производится переход к списку.';
|
||||
|
||||
$lang->msg_cart_is_null = 'Пожалуйста, выберите записи для удаления.';
|
||||
$lang->msg_checked_comment_is_deleted = '%d записьуспешно удалена';
|
||||
|
||||
$lang->search_target_list = array(
|
||||
'content' => 'Содержание',
|
||||
'user_id' => 'ID',
|
||||
'user_name' => 'Имя',
|
||||
'nick_name' => 'Ник',
|
||||
'member_srl' => 'Номер пользователя',
|
||||
'email_address' => 'Email адрес',
|
||||
'homepage' => 'Домашняя страница',
|
||||
'regdate' => 'Дата регистрации',
|
||||
'last_update' => 'Дата последнего обновления',
|
||||
'ipaddress' => 'IP-адрес',
|
||||
);
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,33 +1,33 @@
|
|||
<?php
|
||||
/* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
||||
░░ * @File : common/lang/vi.lang.php ░░
|
||||
░░ * @Author : zero (zero@nzeo.com) ░░
|
||||
░░ * @Trans : Đào Đức Duy (ducduy.dao.vn@vietxe.net) ░░
|
||||
░░ * @Website: http://vietxe.net ░░
|
||||
░░ * @Brief : Vietnamese Language Pack (Only basic words are included here) ░░
|
||||
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ */
|
||||
|
||||
$lang->cmd_comment_do = 'Bình chọn / Phê bình';
|
||||
|
||||
$lang->comment_list = 'Danh sách bình luận';
|
||||
$lang->cmd_delete_checked_comment = 'Xóa những bình luận đã chọn';
|
||||
|
||||
$lang->comment_count = 'Số bình luận';
|
||||
$lang->about_comment_count = 'Hiển thị số bình luận được gửi, và nó sẽ tạo một danh sách nếu có nhiều bình luận.';
|
||||
|
||||
$lang->msg_cart_is_null = 'Xin hãy chọn một bài viết để xóa.';
|
||||
$lang->msg_checked_comment_is_deleted = '%d bình luận đã được xóa.';
|
||||
|
||||
$lang->search_target_list = array(
|
||||
'content' => 'Nội dung',
|
||||
'user_id' => 'ID người gửi',
|
||||
'user_name' => 'Tên',
|
||||
'nick_name' => 'Nickname',
|
||||
'member_srl' => 'Mã số người gửi',
|
||||
'email_address' => 'Email',
|
||||
'homepage' => 'Trang chủ',
|
||||
'regdate' => 'Ngày',
|
||||
'last_update' => 'Cập nhật lần cuối',
|
||||
'ipaddress' => 'IP',
|
||||
);
|
||||
?>
|
||||
<?php
|
||||
/* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
||||
░░ * @File : common/lang/vi.lang.php ░░
|
||||
░░ * @Author : NHN (developers@xpressengine.com) ░░
|
||||
░░ * @Trans : Đào Đức Duy (ducduy.dao.vn@vietxe.net) ░░
|
||||
░░ * @Website: http://vietxe.net ░░
|
||||
░░ * @Brief : Vietnamese Language Pack (Only basic words are included here) ░░
|
||||
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ */
|
||||
|
||||
$lang->cmd_comment_do = 'Bình chọn / Phê bình';
|
||||
|
||||
$lang->comment_list = 'Danh sách bình luận';
|
||||
$lang->cmd_delete_checked_comment = 'Xóa những bình luận đã chọn';
|
||||
|
||||
$lang->comment_count = 'Số bình luận';
|
||||
$lang->about_comment_count = 'Hiển thị số bình luận được gửi, và nó sẽ tạo một danh sách nếu có nhiều bình luận.';
|
||||
|
||||
$lang->msg_cart_is_null = 'Xin hãy chọn một bài viết để xóa.';
|
||||
$lang->msg_checked_comment_is_deleted = '%d bình luận đã được xóa.';
|
||||
|
||||
$lang->search_target_list = array(
|
||||
'content' => 'Nội dung',
|
||||
'user_id' => 'ID người gửi',
|
||||
'user_name' => 'Tên',
|
||||
'nick_name' => 'Nickname',
|
||||
'member_srl' => 'Mã số người gửi',
|
||||
'email_address' => 'Email',
|
||||
'homepage' => 'Trang chủ',
|
||||
'regdate' => 'Ngày',
|
||||
'last_update' => 'Cập nhật lần cuối',
|
||||
'ipaddress' => 'IP',
|
||||
);
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/comment/lang/zh-CN.lang.php
|
||||
* @author zero <zero@nzeo.com>
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief 评论(comment)模块语言包
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/comment/lang/zh-TW.lang.php
|
||||
* @author zero <zero@nzeo.com> 翻譯:royallin
|
||||
* @author NHN (developers@xpressengine.com) 翻譯:royallin
|
||||
* @brief 評論(comment)模組正體中文語言
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @class communicationAdminController
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief communication module의 admin controller class
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,40 +1,40 @@
|
|||
<?php
|
||||
/**
|
||||
* @class communicationAdminModel
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief communication module의 admin model class
|
||||
**/
|
||||
|
||||
class communicationAdminModel extends communication {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 지정된 스킨의 컬러셋 선택을 위한 html을 return
|
||||
**/
|
||||
function getCommunicationAdminColorset() {
|
||||
$skin = Context::get('skin');
|
||||
if(!$skin) $tpl = "";
|
||||
else {
|
||||
$oModuleModel = &getModel('module');
|
||||
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $skin);
|
||||
Context::set('skin_info', $skin_info);
|
||||
|
||||
$oModuleModel = &getModel('module');
|
||||
$communication_config = $oModuleModel->getModuleConfig('communication');
|
||||
if(!$communication_config->colorset) $communication_config->colorset = "white";
|
||||
Context::set('communication_config', $communication_config);
|
||||
|
||||
$oTemplate = &TemplateHandler::getInstance();
|
||||
$tpl = $oTemplate->compile($this->module_path.'tpl', 'colorset_list');
|
||||
}
|
||||
|
||||
$this->add('tpl', $tpl);
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class communicationAdminModel
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief communication module의 admin model class
|
||||
**/
|
||||
|
||||
class communicationAdminModel extends communication {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 지정된 스킨의 컬러셋 선택을 위한 html을 return
|
||||
**/
|
||||
function getCommunicationAdminColorset() {
|
||||
$skin = Context::get('skin');
|
||||
if(!$skin) $tpl = "";
|
||||
else {
|
||||
$oModuleModel = &getModel('module');
|
||||
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $skin);
|
||||
Context::set('skin_info', $skin_info);
|
||||
|
||||
$oModuleModel = &getModel('module');
|
||||
$communication_config = $oModuleModel->getModuleConfig('communication');
|
||||
if(!$communication_config->colorset) $communication_config->colorset = "white";
|
||||
Context::set('communication_config', $communication_config);
|
||||
|
||||
$oTemplate = &TemplateHandler::getInstance();
|
||||
$tpl = $oTemplate->compile($this->module_path.'tpl', 'colorset_list');
|
||||
}
|
||||
|
||||
$this->add('tpl', $tpl);
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,40 +1,40 @@
|
|||
<?php
|
||||
/**
|
||||
* @class communicationAdminView
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief communication module의 admin view class
|
||||
**/
|
||||
|
||||
class communicationAdminView extends communication {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 쪽지 및 친구등의 관리를 위한 설정
|
||||
**/
|
||||
function dispCommunicationAdminConfig() {
|
||||
// 객체 생성
|
||||
$oEditorModel = &getModel('editor');
|
||||
$oModuleModel = &getModel('module');
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
|
||||
// communication 모듈의 모듈설정 읽음
|
||||
Context::set('communication_config', $oCommunicationModel->getConfig() );
|
||||
|
||||
// 에디터 스킨 목록을 구함
|
||||
Context::set('editor_skin_list', $oEditorModel->getEditorSkinList() );
|
||||
|
||||
// 커뮤니케이션 스킨 목록을 구함
|
||||
Context::set('communication_skin_list', $oModuleModel->getSkins($this->module_path) );
|
||||
|
||||
// template 지정
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('index');
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class communicationAdminView
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief communication module의 admin view class
|
||||
**/
|
||||
|
||||
class communicationAdminView extends communication {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 쪽지 및 친구등의 관리를 위한 설정
|
||||
**/
|
||||
function dispCommunicationAdminConfig() {
|
||||
// 객체 생성
|
||||
$oEditorModel = &getModel('editor');
|
||||
$oModuleModel = &getModel('module');
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
|
||||
// communication 모듈의 모듈설정 읽음
|
||||
Context::set('communication_config', $oCommunicationModel->getConfig() );
|
||||
|
||||
// 에디터 스킨 목록을 구함
|
||||
Context::set('editor_skin_list', $oEditorModel->getEditorSkinList() );
|
||||
|
||||
// 커뮤니케이션 스킨 목록을 구함
|
||||
Context::set('communication_skin_list', $oModuleModel->getSkins($this->module_path) );
|
||||
|
||||
// template 지정
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('index');
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,42 +1,42 @@
|
|||
<?php
|
||||
/**
|
||||
* @class communication
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief communication module의 high class
|
||||
**/
|
||||
|
||||
class communication extends ModuleObject {
|
||||
|
||||
/**
|
||||
* @brief 설치시 추가 작업이 필요할시 구현
|
||||
**/
|
||||
function moduleInstall() {
|
||||
// 새쪽지 알림을 위한 임시 파일 저장소 생성
|
||||
FileHandler::makeDir('./files/member_extra_info/new_message_flags');
|
||||
return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 설치가 이상이 없는지 체크하는 method
|
||||
**/
|
||||
function checkUpdate() {
|
||||
if(!is_dir("./files/member_extra_info/new_message_flags")) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 업데이트 실행
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
if(!is_dir("./files/member_extra_info/new_message_flags"))
|
||||
FileHandler::makeDir('./files/member_extra_info/new_message_flags');
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 캐시 파일 재생성
|
||||
**/
|
||||
function recompileCache() {
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class communication
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief communication module의 high class
|
||||
**/
|
||||
|
||||
class communication extends ModuleObject {
|
||||
|
||||
/**
|
||||
* @brief 설치시 추가 작업이 필요할시 구현
|
||||
**/
|
||||
function moduleInstall() {
|
||||
// 새쪽지 알림을 위한 임시 파일 저장소 생성
|
||||
FileHandler::makeDir('./files/member_extra_info/new_message_flags');
|
||||
return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 설치가 이상이 없는지 체크하는 method
|
||||
**/
|
||||
function checkUpdate() {
|
||||
if(!is_dir("./files/member_extra_info/new_message_flags")) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 업데이트 실행
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
if(!is_dir("./files/member_extra_info/new_message_flags"))
|
||||
FileHandler::makeDir('./files/member_extra_info/new_message_flags');
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 캐시 파일 재생성
|
||||
**/
|
||||
function recompileCache() {
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,418 +1,418 @@
|
|||
<?php
|
||||
/**
|
||||
* @class communicationController
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief communication module의 Controller class
|
||||
**/
|
||||
|
||||
class communicationController extends communication {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 쪽지함 설정 변경
|
||||
**/
|
||||
function procCommunicationUpdateAllowMessage() {
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
|
||||
$args->allow_message = Context::get('allow_message');
|
||||
if(!in_array($args->allow_message, array('Y','N','F'))) $args->allow_message = 'Y';
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
|
||||
$output = executeQuery('communication.updateAllowMessage', $args);
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 쪽지 발송
|
||||
**/
|
||||
function procCommunicationSendMessage() {
|
||||
// 로그인 정보 체크
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// 변수 검사
|
||||
$receiver_srl = Context::get('receiver_srl');
|
||||
if(!$receiver_srl) return new Object(-1, 'msg_not_exists_member');
|
||||
|
||||
$title = trim(Context::get('title'));
|
||||
if(!$title) return new Object(-1, 'msg_title_is_null');
|
||||
|
||||
$content = trim(Context::get('content'));
|
||||
if(!$content) return new Object(-1, 'msg_content_is_null');
|
||||
|
||||
$send_mail = Context::get('send_mail');
|
||||
if($send_mail != 'Y') $send_mail = 'N';
|
||||
|
||||
// 받을 회원이 있는지에 대한 검사
|
||||
$oMemberModel = &getModel('member');
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
$receiver_member_info = $oMemberModel->getMemberInfoByMemberSrl($receiver_srl);
|
||||
if($receiver_member_info->member_srl != $receiver_srl) return new Object(-1, 'msg_not_exists_member');
|
||||
|
||||
// 받을 회원의 쪽지 수신여부 검사 (최고관리자이면 패스)
|
||||
if($logged_info->is_admin != 'Y') {
|
||||
if($receiver_member_info->allow_message == 'F') {
|
||||
if(!$oCommunicationModel->isFriend($receiver_member_info->member_srl)) return new object(-1, 'msg_allow_message_to_friend');
|
||||
} elseif($receiver_member_info->allow_messge == 'N') {
|
||||
return new object(-1, 'msg_disallow_message');
|
||||
}
|
||||
}
|
||||
|
||||
// 쪽지 발송
|
||||
$output = $this->sendMessage($logged_info->member_srl, $receiver_srl, $title, $content);
|
||||
|
||||
// 메일로도 발송
|
||||
if($output->toBool() && $send_mail == 'Y') {
|
||||
$view_url = Context::getRequestUri();
|
||||
$content = sprintf("%s<br /><br />From : <a href=\"%s\" target=\"_blank\">%s</a>",$content, $view_url, $view_url);
|
||||
$oMail = new Mail();
|
||||
$oMail->setTitle($title);
|
||||
$oMail->setContent($content);
|
||||
$oMail->setSender($logged_info->user_name, $logged_info->email_address);
|
||||
$oMail->setReceiptor($receiver_member_info->user_name, $receiver_member_info->email_address);
|
||||
$oMail->send();
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
function sendMessage($sender_srl, $receiver_srl, $title, $content, $sender_log = true) {
|
||||
$content = removeHackTag($content);
|
||||
$title = htmlspecialchars($title);
|
||||
|
||||
// 보내는 사용자의 쪽지함에 넣을 쪽지
|
||||
$sender_args->sender_srl = $sender_srl;
|
||||
$sender_args->receiver_srl = $receiver_srl;
|
||||
$sender_args->message_type = 'S';
|
||||
$sender_args->title = $title;
|
||||
$sender_args->content = $content;
|
||||
$sender_args->readed = 'N';
|
||||
$sender_args->regdate = date("YmdHis");
|
||||
$sender_args->related_srl = getNextSequence();
|
||||
$sender_args->message_srl = getNextSequence();
|
||||
$sender_args->list_order = getNextSequence()*-1;
|
||||
|
||||
// 받는 회원의 쪽지함에 넣을 쪽지
|
||||
$receiver_args->message_srl = $sender_args->related_srl;
|
||||
$receiver_args->related_srl = 0;
|
||||
$receiver_args->list_order = $sender_args->related_srl*-1;
|
||||
$receiver_args->sender_srl = $sender_srl;
|
||||
if(!$receiver_args->sender_srl) $receiver_args->sender_srl = $receiver_srl;
|
||||
$receiver_args->receiver_srl = $receiver_srl;
|
||||
$receiver_args->message_type = 'R';
|
||||
$receiver_args->title = $title;
|
||||
$receiver_args->content = $content;
|
||||
$receiver_args->readed = 'N';
|
||||
$receiver_args->regdate = date("YmdHis");
|
||||
|
||||
$oDB = &DB::getInstance();
|
||||
$oDB->begin();
|
||||
|
||||
// 발송하는 회원의 쪽지함에 넣을 쪽지
|
||||
if($sender_srl && $sender_log) {
|
||||
$output = executeQuery('communication.sendMessage', $sender_args);
|
||||
if(!$output->toBool()) {
|
||||
$oDB->rollback();
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
|
||||
// 받을 회원의 쪽지함에 넣을 쪽지
|
||||
$output = executeQuery('communication.sendMessage', $receiver_args);
|
||||
if(!$output->toBool()) {
|
||||
$oDB->rollback();
|
||||
return $output;
|
||||
}
|
||||
|
||||
// 받는 회원의 쪽지 발송 플래그 생성 (파일로 생성)
|
||||
$flag_path = './files/member_extra_info/new_message_flags/'.getNumberingPath($receiver_srl);
|
||||
FileHandler::makeDir($flag_path);
|
||||
$flag_file = sprintf('%s%s', $flag_path, $receiver_srl);
|
||||
$flag_count = FileHandler::readFile($flag_file);
|
||||
FileHandler::writeFile($flag_file, ++$flag_count);
|
||||
|
||||
$oDB->commit();
|
||||
|
||||
return new Object(0,'success_sended');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 특정 쪽지를 보관함으로 보냄
|
||||
**/
|
||||
function procCommunicationStoreMessage() {
|
||||
// 로그인 정보 체크
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// 변수 체크
|
||||
$message_srl = Context::get('message_srl');
|
||||
if(!$message_srl) return new Object(-1,'msg_invalid_request');
|
||||
|
||||
// 쪽지를 가져옴
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
$message = $oCommunicationModel->getSelectedMessage($message_srl);
|
||||
if(!$message || $message->message_type != 'R') return new Object(-1,'msg_invalid_request');
|
||||
|
||||
$args->message_srl = $message_srl;
|
||||
$args->receiver_srl = $logged_info->member_srl;
|
||||
$output = executeQuery('communication.setMessageStored', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage('success_registed');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 쪽지 삭제
|
||||
**/
|
||||
function procCommunicationDeleteMessage() {
|
||||
// 로그인 정보 체크
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
$member_srl = $logged_info->member_srl;
|
||||
|
||||
// 변수 체크
|
||||
$message_srl = Context::get('message_srl');
|
||||
if(!$message_srl) return new Object(-1,'msg_invalid_request');
|
||||
|
||||
// 쪽지를 가져옴
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
$message = $oCommunicationModel->getSelectedMessage($message_srl);
|
||||
if(!$message) return new Object(-1,'msg_invalid_request');
|
||||
|
||||
// 발송인+type=S or 수신인+type=R 검사
|
||||
if($message->sender_srl == $member_srl && $message->message_type == 'S') {
|
||||
if(!$message_srl) return new Object(-1, 'msg_invalid_request');
|
||||
} elseif($message->receiver_srl == $member_srl && $message->message_type == 'R') {
|
||||
if(!$message_srl) return new Object(-1, 'msg_invalid_request');
|
||||
}
|
||||
|
||||
// 삭제
|
||||
$args->message_srl = $message_srl;
|
||||
$output = executeQuery('communication.deleteMessage', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 선택된 다수의 쪽지 삭제
|
||||
**/
|
||||
function procCommunicationDeleteMessages() {
|
||||
// 로그인 정보 체크
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
$member_srl = $logged_info->member_srl;
|
||||
|
||||
// 변수 체크
|
||||
$message_srl_list = trim(Context::get('message_srl_list'));
|
||||
if(!$message_srl_list) return new Object(-1, 'msg_cart_is_null');
|
||||
|
||||
$message_srl_list = explode('|@|', $message_srl_list);
|
||||
if(!count($message_srl_list)) return new Object(-1, 'msg_cart_is_null');
|
||||
|
||||
$message_type = Context::get('message_type');
|
||||
if(!$message_type || !in_array($message_type, array('R','S','T'))) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
$message_count = count($message_srl_list);
|
||||
$target = array();
|
||||
for($i=0;$i<$message_count;$i++) {
|
||||
$message_srl = (int)trim($message_srl_list[$i]);
|
||||
if(!$message_srl) continue;
|
||||
$target[] = $message_srl;
|
||||
}
|
||||
if(!count($target)) return new Object(-1,'msg_cart_is_null');
|
||||
|
||||
// 삭제
|
||||
$args->message_srls = implode(',',$target);
|
||||
$args->message_type = $message_type;
|
||||
|
||||
if($message_type == 'S') $args->sender_srl = $member_srl;
|
||||
else $args->receiver_srl = $member_srl;
|
||||
|
||||
$output = executeQuery('communication.deleteMessages', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 친구 추가
|
||||
**/
|
||||
function procCommunicationAddFriend() {
|
||||
// 로그인 정보 체크
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$target_srl = (int)trim(Context::get('target_srl'));
|
||||
if(!$target_srl) return new Object(-1,'msg_invalid_request');
|
||||
|
||||
// 변수 정리
|
||||
$args->friend_srl = getNextSequence();
|
||||
$args->list_order = $args->friend_srl * -1;
|
||||
$args->friend_group_srl = Context::get('friend_group_srl');
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->target_srl = $target_srl;
|
||||
$output = executeQuery('communication.addFriend', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->add('member_srl', $target_srl);
|
||||
$this->setMessage('success_registed');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 등록된 친구의 그룹 이동
|
||||
**/
|
||||
function procCommunicationMoveFriend() {
|
||||
// 로그인 정보 체크
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// 변수 체크
|
||||
$friend_srl_list = trim(Context::get('friend_srl_list'));
|
||||
if(!$friend_srl_list) return new Object(-1, 'msg_cart_is_null');
|
||||
|
||||
$friend_srl_list = explode('|@|', $friend_srl_list);
|
||||
if(!count($friend_srl_list)) return new Object(-1, 'msg_cart_is_null');
|
||||
|
||||
$friend_count = count($friend_srl_list);
|
||||
$target = array();
|
||||
for($i=0;$i<$friend_count;$i++) {
|
||||
$friend_srl = (int)trim($friend_srl_list[$i]);
|
||||
if(!$friend_srl) continue;
|
||||
$target[] = $friend_srl;
|
||||
}
|
||||
if(!count($target)) return new Object(-1,'msg_cart_is_null');
|
||||
|
||||
// 변수 정리
|
||||
$args->friend_srls = implode(',',$target);
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->friend_group_srl = Context::get('target_friend_group_srl');
|
||||
|
||||
$output = executeQuery('communication.moveFriend', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage('success_moved');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 친구 삭제
|
||||
**/
|
||||
function procCommunicationDeleteFriend() {
|
||||
// 로그인 정보 체크
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
$member_srl = $logged_info->member_srl;
|
||||
|
||||
// 변수 체크
|
||||
$friend_srl_list = trim(Context::get('friend_srl_list'));
|
||||
if(!$friend_srl_list) return new Object(-1, 'msg_cart_is_null');
|
||||
|
||||
$friend_srl_list = explode('|@|', $friend_srl_list);
|
||||
if(!count($friend_srl_list)) return new Object(-1, 'msg_cart_is_null');
|
||||
|
||||
$friend_count = count($friend_srl_list);
|
||||
$target = array();
|
||||
for($i=0;$i<$friend_count;$i++) {
|
||||
$friend_srl = (int)trim($friend_srl_list[$i]);
|
||||
if(!$friend_srl) continue;
|
||||
$target[] = $friend_srl;
|
||||
}
|
||||
if(!count($target)) return new Object(-1,'msg_cart_is_null');
|
||||
|
||||
// 삭제
|
||||
$args->friend_srls = implode(',',$target);
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$output = executeQuery('communication.deleteFriend', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 친구 그룹 추가
|
||||
**/
|
||||
function procCommunicationAddFriendGroup() {
|
||||
// 로그인 정보 체크
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// 변수 정리
|
||||
$args->friend_group_srl = trim(Context::get('friend_group_srl'));
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->title = Context::get('title');
|
||||
$args->title = htmlspecialchars($args->title);
|
||||
if(!$args->title) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
// friend_group_srl이 있으면 수정
|
||||
if($args->friend_group_srl) {
|
||||
$output = executeQuery('communication.renameFriendGroup', $args);
|
||||
$msg_code = 'success_updated';
|
||||
|
||||
// 아니면 입력
|
||||
} else {
|
||||
$output = executeQuery('communication.addFriendGroup', $args);
|
||||
$msg_code = 'success_registed';
|
||||
}
|
||||
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage($msg_code);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 친구 그룹 이름 변경
|
||||
**/
|
||||
function procCommunicationRenameFriendGroup() {
|
||||
// 로그인 정보 체크
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// 변수 정리
|
||||
$args->friend_group_srl= Context::get('friend_group_srl');
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->title = Context::get('title');
|
||||
$args->title = htmlspecialchars($args->title);
|
||||
if(!$args->title) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
$output = executeQuery('communication.renameFriendGroup', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage('success_updated');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 친구 그룹 삭제
|
||||
**/
|
||||
function procCommunicationDeleteFriendGroup() {
|
||||
// 로그인 정보 체크
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// 변수 정리
|
||||
$args->friend_group_srl = Context::get('friend_group_srl');
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$output = executeQuery('communication.deleteFriendGroup', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 특정 쪽지의 상태를 읽은 상태로 변경
|
||||
**/
|
||||
function setMessageReaded($message_srl) {
|
||||
$args->message_srl = $message_srl;
|
||||
$args->related_srl = $message_srl;
|
||||
return executeQuery('communication.setMessageReaded', $args);
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class communicationController
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief communication module의 Controller class
|
||||
**/
|
||||
|
||||
class communicationController extends communication {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 쪽지함 설정 변경
|
||||
**/
|
||||
function procCommunicationUpdateAllowMessage() {
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
|
||||
$args->allow_message = Context::get('allow_message');
|
||||
if(!in_array($args->allow_message, array('Y','N','F'))) $args->allow_message = 'Y';
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
|
||||
$output = executeQuery('communication.updateAllowMessage', $args);
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 쪽지 발송
|
||||
**/
|
||||
function procCommunicationSendMessage() {
|
||||
// 로그인 정보 체크
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// 변수 검사
|
||||
$receiver_srl = Context::get('receiver_srl');
|
||||
if(!$receiver_srl) return new Object(-1, 'msg_not_exists_member');
|
||||
|
||||
$title = trim(Context::get('title'));
|
||||
if(!$title) return new Object(-1, 'msg_title_is_null');
|
||||
|
||||
$content = trim(Context::get('content'));
|
||||
if(!$content) return new Object(-1, 'msg_content_is_null');
|
||||
|
||||
$send_mail = Context::get('send_mail');
|
||||
if($send_mail != 'Y') $send_mail = 'N';
|
||||
|
||||
// 받을 회원이 있는지에 대한 검사
|
||||
$oMemberModel = &getModel('member');
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
$receiver_member_info = $oMemberModel->getMemberInfoByMemberSrl($receiver_srl);
|
||||
if($receiver_member_info->member_srl != $receiver_srl) return new Object(-1, 'msg_not_exists_member');
|
||||
|
||||
// 받을 회원의 쪽지 수신여부 검사 (최고관리자이면 패스)
|
||||
if($logged_info->is_admin != 'Y') {
|
||||
if($receiver_member_info->allow_message == 'F') {
|
||||
if(!$oCommunicationModel->isFriend($receiver_member_info->member_srl)) return new object(-1, 'msg_allow_message_to_friend');
|
||||
} elseif($receiver_member_info->allow_messge == 'N') {
|
||||
return new object(-1, 'msg_disallow_message');
|
||||
}
|
||||
}
|
||||
|
||||
// 쪽지 발송
|
||||
$output = $this->sendMessage($logged_info->member_srl, $receiver_srl, $title, $content);
|
||||
|
||||
// 메일로도 발송
|
||||
if($output->toBool() && $send_mail == 'Y') {
|
||||
$view_url = Context::getRequestUri();
|
||||
$content = sprintf("%s<br /><br />From : <a href=\"%s\" target=\"_blank\">%s</a>",$content, $view_url, $view_url);
|
||||
$oMail = new Mail();
|
||||
$oMail->setTitle($title);
|
||||
$oMail->setContent($content);
|
||||
$oMail->setSender($logged_info->user_name, $logged_info->email_address);
|
||||
$oMail->setReceiptor($receiver_member_info->user_name, $receiver_member_info->email_address);
|
||||
$oMail->send();
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
function sendMessage($sender_srl, $receiver_srl, $title, $content, $sender_log = true) {
|
||||
$content = removeHackTag($content);
|
||||
$title = htmlspecialchars($title);
|
||||
|
||||
// 보내는 사용자의 쪽지함에 넣을 쪽지
|
||||
$sender_args->sender_srl = $sender_srl;
|
||||
$sender_args->receiver_srl = $receiver_srl;
|
||||
$sender_args->message_type = 'S';
|
||||
$sender_args->title = $title;
|
||||
$sender_args->content = $content;
|
||||
$sender_args->readed = 'N';
|
||||
$sender_args->regdate = date("YmdHis");
|
||||
$sender_args->related_srl = getNextSequence();
|
||||
$sender_args->message_srl = getNextSequence();
|
||||
$sender_args->list_order = getNextSequence()*-1;
|
||||
|
||||
// 받는 회원의 쪽지함에 넣을 쪽지
|
||||
$receiver_args->message_srl = $sender_args->related_srl;
|
||||
$receiver_args->related_srl = 0;
|
||||
$receiver_args->list_order = $sender_args->related_srl*-1;
|
||||
$receiver_args->sender_srl = $sender_srl;
|
||||
if(!$receiver_args->sender_srl) $receiver_args->sender_srl = $receiver_srl;
|
||||
$receiver_args->receiver_srl = $receiver_srl;
|
||||
$receiver_args->message_type = 'R';
|
||||
$receiver_args->title = $title;
|
||||
$receiver_args->content = $content;
|
||||
$receiver_args->readed = 'N';
|
||||
$receiver_args->regdate = date("YmdHis");
|
||||
|
||||
$oDB = &DB::getInstance();
|
||||
$oDB->begin();
|
||||
|
||||
// 발송하는 회원의 쪽지함에 넣을 쪽지
|
||||
if($sender_srl && $sender_log) {
|
||||
$output = executeQuery('communication.sendMessage', $sender_args);
|
||||
if(!$output->toBool()) {
|
||||
$oDB->rollback();
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
|
||||
// 받을 회원의 쪽지함에 넣을 쪽지
|
||||
$output = executeQuery('communication.sendMessage', $receiver_args);
|
||||
if(!$output->toBool()) {
|
||||
$oDB->rollback();
|
||||
return $output;
|
||||
}
|
||||
|
||||
// 받는 회원의 쪽지 발송 플래그 생성 (파일로 생성)
|
||||
$flag_path = './files/member_extra_info/new_message_flags/'.getNumberingPath($receiver_srl);
|
||||
FileHandler::makeDir($flag_path);
|
||||
$flag_file = sprintf('%s%s', $flag_path, $receiver_srl);
|
||||
$flag_count = FileHandler::readFile($flag_file);
|
||||
FileHandler::writeFile($flag_file, ++$flag_count);
|
||||
|
||||
$oDB->commit();
|
||||
|
||||
return new Object(0,'success_sended');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 특정 쪽지를 보관함으로 보냄
|
||||
**/
|
||||
function procCommunicationStoreMessage() {
|
||||
// 로그인 정보 체크
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// 변수 체크
|
||||
$message_srl = Context::get('message_srl');
|
||||
if(!$message_srl) return new Object(-1,'msg_invalid_request');
|
||||
|
||||
// 쪽지를 가져옴
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
$message = $oCommunicationModel->getSelectedMessage($message_srl);
|
||||
if(!$message || $message->message_type != 'R') return new Object(-1,'msg_invalid_request');
|
||||
|
||||
$args->message_srl = $message_srl;
|
||||
$args->receiver_srl = $logged_info->member_srl;
|
||||
$output = executeQuery('communication.setMessageStored', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage('success_registed');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 쪽지 삭제
|
||||
**/
|
||||
function procCommunicationDeleteMessage() {
|
||||
// 로그인 정보 체크
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
$member_srl = $logged_info->member_srl;
|
||||
|
||||
// 변수 체크
|
||||
$message_srl = Context::get('message_srl');
|
||||
if(!$message_srl) return new Object(-1,'msg_invalid_request');
|
||||
|
||||
// 쪽지를 가져옴
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
$message = $oCommunicationModel->getSelectedMessage($message_srl);
|
||||
if(!$message) return new Object(-1,'msg_invalid_request');
|
||||
|
||||
// 발송인+type=S or 수신인+type=R 검사
|
||||
if($message->sender_srl == $member_srl && $message->message_type == 'S') {
|
||||
if(!$message_srl) return new Object(-1, 'msg_invalid_request');
|
||||
} elseif($message->receiver_srl == $member_srl && $message->message_type == 'R') {
|
||||
if(!$message_srl) return new Object(-1, 'msg_invalid_request');
|
||||
}
|
||||
|
||||
// 삭제
|
||||
$args->message_srl = $message_srl;
|
||||
$output = executeQuery('communication.deleteMessage', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 선택된 다수의 쪽지 삭제
|
||||
**/
|
||||
function procCommunicationDeleteMessages() {
|
||||
// 로그인 정보 체크
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
$member_srl = $logged_info->member_srl;
|
||||
|
||||
// 변수 체크
|
||||
$message_srl_list = trim(Context::get('message_srl_list'));
|
||||
if(!$message_srl_list) return new Object(-1, 'msg_cart_is_null');
|
||||
|
||||
$message_srl_list = explode('|@|', $message_srl_list);
|
||||
if(!count($message_srl_list)) return new Object(-1, 'msg_cart_is_null');
|
||||
|
||||
$message_type = Context::get('message_type');
|
||||
if(!$message_type || !in_array($message_type, array('R','S','T'))) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
$message_count = count($message_srl_list);
|
||||
$target = array();
|
||||
for($i=0;$i<$message_count;$i++) {
|
||||
$message_srl = (int)trim($message_srl_list[$i]);
|
||||
if(!$message_srl) continue;
|
||||
$target[] = $message_srl;
|
||||
}
|
||||
if(!count($target)) return new Object(-1,'msg_cart_is_null');
|
||||
|
||||
// 삭제
|
||||
$args->message_srls = implode(',',$target);
|
||||
$args->message_type = $message_type;
|
||||
|
||||
if($message_type == 'S') $args->sender_srl = $member_srl;
|
||||
else $args->receiver_srl = $member_srl;
|
||||
|
||||
$output = executeQuery('communication.deleteMessages', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 친구 추가
|
||||
**/
|
||||
function procCommunicationAddFriend() {
|
||||
// 로그인 정보 체크
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$target_srl = (int)trim(Context::get('target_srl'));
|
||||
if(!$target_srl) return new Object(-1,'msg_invalid_request');
|
||||
|
||||
// 변수 정리
|
||||
$args->friend_srl = getNextSequence();
|
||||
$args->list_order = $args->friend_srl * -1;
|
||||
$args->friend_group_srl = Context::get('friend_group_srl');
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->target_srl = $target_srl;
|
||||
$output = executeQuery('communication.addFriend', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->add('member_srl', $target_srl);
|
||||
$this->setMessage('success_registed');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 등록된 친구의 그룹 이동
|
||||
**/
|
||||
function procCommunicationMoveFriend() {
|
||||
// 로그인 정보 체크
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// 변수 체크
|
||||
$friend_srl_list = trim(Context::get('friend_srl_list'));
|
||||
if(!$friend_srl_list) return new Object(-1, 'msg_cart_is_null');
|
||||
|
||||
$friend_srl_list = explode('|@|', $friend_srl_list);
|
||||
if(!count($friend_srl_list)) return new Object(-1, 'msg_cart_is_null');
|
||||
|
||||
$friend_count = count($friend_srl_list);
|
||||
$target = array();
|
||||
for($i=0;$i<$friend_count;$i++) {
|
||||
$friend_srl = (int)trim($friend_srl_list[$i]);
|
||||
if(!$friend_srl) continue;
|
||||
$target[] = $friend_srl;
|
||||
}
|
||||
if(!count($target)) return new Object(-1,'msg_cart_is_null');
|
||||
|
||||
// 변수 정리
|
||||
$args->friend_srls = implode(',',$target);
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->friend_group_srl = Context::get('target_friend_group_srl');
|
||||
|
||||
$output = executeQuery('communication.moveFriend', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage('success_moved');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 친구 삭제
|
||||
**/
|
||||
function procCommunicationDeleteFriend() {
|
||||
// 로그인 정보 체크
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
$member_srl = $logged_info->member_srl;
|
||||
|
||||
// 변수 체크
|
||||
$friend_srl_list = trim(Context::get('friend_srl_list'));
|
||||
if(!$friend_srl_list) return new Object(-1, 'msg_cart_is_null');
|
||||
|
||||
$friend_srl_list = explode('|@|', $friend_srl_list);
|
||||
if(!count($friend_srl_list)) return new Object(-1, 'msg_cart_is_null');
|
||||
|
||||
$friend_count = count($friend_srl_list);
|
||||
$target = array();
|
||||
for($i=0;$i<$friend_count;$i++) {
|
||||
$friend_srl = (int)trim($friend_srl_list[$i]);
|
||||
if(!$friend_srl) continue;
|
||||
$target[] = $friend_srl;
|
||||
}
|
||||
if(!count($target)) return new Object(-1,'msg_cart_is_null');
|
||||
|
||||
// 삭제
|
||||
$args->friend_srls = implode(',',$target);
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$output = executeQuery('communication.deleteFriend', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 친구 그룹 추가
|
||||
**/
|
||||
function procCommunicationAddFriendGroup() {
|
||||
// 로그인 정보 체크
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// 변수 정리
|
||||
$args->friend_group_srl = trim(Context::get('friend_group_srl'));
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->title = Context::get('title');
|
||||
$args->title = htmlspecialchars($args->title);
|
||||
if(!$args->title) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
// friend_group_srl이 있으면 수정
|
||||
if($args->friend_group_srl) {
|
||||
$output = executeQuery('communication.renameFriendGroup', $args);
|
||||
$msg_code = 'success_updated';
|
||||
|
||||
// 아니면 입력
|
||||
} else {
|
||||
$output = executeQuery('communication.addFriendGroup', $args);
|
||||
$msg_code = 'success_registed';
|
||||
}
|
||||
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage($msg_code);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 친구 그룹 이름 변경
|
||||
**/
|
||||
function procCommunicationRenameFriendGroup() {
|
||||
// 로그인 정보 체크
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// 변수 정리
|
||||
$args->friend_group_srl= Context::get('friend_group_srl');
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->title = Context::get('title');
|
||||
$args->title = htmlspecialchars($args->title);
|
||||
if(!$args->title) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
$output = executeQuery('communication.renameFriendGroup', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage('success_updated');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 친구 그룹 삭제
|
||||
**/
|
||||
function procCommunicationDeleteFriendGroup() {
|
||||
// 로그인 정보 체크
|
||||
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// 변수 정리
|
||||
$args->friend_group_srl = Context::get('friend_group_srl');
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$output = executeQuery('communication.deleteFriendGroup', $args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 특정 쪽지의 상태를 읽은 상태로 변경
|
||||
**/
|
||||
function setMessageReaded($message_srl) {
|
||||
$args->message_srl = $message_srl;
|
||||
$args->related_srl = $message_srl;
|
||||
return executeQuery('communication.setMessageReaded', $args);
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,189 +1,189 @@
|
|||
<?php
|
||||
/**
|
||||
* @class communicationModel
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief communication module의 Model class
|
||||
**/
|
||||
|
||||
class communicationModel extends communication {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 설정된 내용을 구함
|
||||
**/
|
||||
function getConfig() {
|
||||
$oModuleModel = &getModel('module');
|
||||
$communication_config = $oModuleModel->getModuleConfig('communication');
|
||||
|
||||
if(!$communication_config->skin) $communication_config->skin = 'default';
|
||||
if(!$communication_config->colorset) $communication_config->colorset = 'white';
|
||||
if(!$communication_config->editor_skin) $communication_config->editor_skin = 'default';
|
||||
|
||||
return $communication_config;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 쪽지 내용을 가져옴
|
||||
**/
|
||||
function getSelectedMessage($message_srl) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$args->message_srl = $message_srl;
|
||||
$output = executeQuery('communication.getMessage',$args);
|
||||
$message = $output->data;
|
||||
if(!$message) return ;
|
||||
|
||||
// 보낸 쪽지일 경우 받는 사람 정보를 구함
|
||||
$oMemberModel = &getModel('member');
|
||||
if($message->sender_srl == $logged_info->member_srl && $message->message_type == 'S') $member_info = $oMemberModel->getMemberInfoByMemberSrl($message->receiver_srl);
|
||||
|
||||
// 보관/받은 쪽지일 경우 보낸 사람 정보를 구함
|
||||
else $member_info = $oMemberModel->getMemberInfoByMemberSrl($message->sender_srl);
|
||||
|
||||
if($member_info) {
|
||||
foreach($member_info as $key => $val) {
|
||||
if($key != 'regdate') $message->{$key} = $val;
|
||||
}
|
||||
}
|
||||
|
||||
// 받은 쪽지이고 아직 읽지 않았을 경우 읽은 상태로 변경
|
||||
if($message->message_type == 'R' && $message->readed != 'Y') {
|
||||
$oCommunicationController = &getController('communication');
|
||||
$oCommunicationController->setMessageReaded($message_srl);
|
||||
}
|
||||
|
||||
|
||||
return $message;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 새 쪽지를 가져옴
|
||||
**/
|
||||
function getNewMessage() {
|
||||
$logged_info = Context::get('logged_info');
|
||||
$args->receiver_srl = $logged_info->member_srl;
|
||||
$args->readed = 'N';
|
||||
|
||||
$output = executeQuery('communication.getNewMessage', $args);
|
||||
if(!count($output->data)) return;
|
||||
$message = array_pop($output->data);
|
||||
|
||||
$oCommunicationController = &getController('communication');
|
||||
$oCommunicationController->setMessageReaded($message->message_srl);
|
||||
|
||||
return $message;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 쪽지 목록 가져오기
|
||||
* type = R : 받은 쪽지
|
||||
* type = S : 보낸 쪽지
|
||||
* type = T : 보관함
|
||||
**/
|
||||
function getMessages($message_type = "R") {
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
switch($message_type) {
|
||||
case 'R' :
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->message_type = 'R';
|
||||
$query_id = 'communication.getReceivedMessages';
|
||||
break;
|
||||
case 'T' :
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->message_type = 'T';
|
||||
$query_id = 'communication.getStoredMessages';
|
||||
break;
|
||||
default :
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->message_type = 'S';
|
||||
$query_id = 'communication.getSendedMessages';
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
// 기타 변수들 정리
|
||||
$args->sort_index = 'message.list_order';
|
||||
$args->page = Context::get('page');
|
||||
$args->list_count = 20;
|
||||
$args->page_count = 10;
|
||||
return executeQuery($query_id, $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 친구 목록 가져오기
|
||||
**/
|
||||
function getFriends($friend_group_srl = 0) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$args->friend_group_srl = $friend_group_srl;
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
|
||||
// 기타 변수들 정리
|
||||
$args->page = Context::get('page');
|
||||
$args->sort_index = 'friend.list_order';
|
||||
$args->list_count = 10;
|
||||
$args->page_count = 10;
|
||||
$output = executeQuery('communication.getFriends', $args);
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 이미 친구로 등록되었는지 검사
|
||||
**/
|
||||
function isAddedFriend($member_srl) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->target_srl = $member_srl;
|
||||
$output = executeQuery('communication.isAddedFriend', $args);
|
||||
return $output->data->count;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 특정 친구 그룹 가져오기
|
||||
**/
|
||||
function getFriendGroupInfo($friend_group_srl) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->friend_group_srl = $friend_group_srl;
|
||||
|
||||
$output = executeQuery('communication.getFriendGroup', $args);
|
||||
return $output->data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 그룹 목록 가져오기
|
||||
**/
|
||||
function getFriendGroups() {
|
||||
$logged_info = Context::get('logged_info');
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
|
||||
$output = executeQuery('communication.getFriendGroups', $args);
|
||||
$group_list = $output->data;
|
||||
if(!$group_list) return;
|
||||
|
||||
if(!is_array($group_list)) $group_list = array($group_list);
|
||||
return $group_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 특정 회원의 친구 목록에 포함되어 있는지를 확인
|
||||
**/
|
||||
function isFriend($target_srl) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$args->member_srl = $target_srl;
|
||||
$args->target_srl = $logged_info->member_srl;
|
||||
$output = executeQuery('communication.isAddedFriend', $args);
|
||||
if($output->data->count) return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class communicationModel
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief communication module의 Model class
|
||||
**/
|
||||
|
||||
class communicationModel extends communication {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 설정된 내용을 구함
|
||||
**/
|
||||
function getConfig() {
|
||||
$oModuleModel = &getModel('module');
|
||||
$communication_config = $oModuleModel->getModuleConfig('communication');
|
||||
|
||||
if(!$communication_config->skin) $communication_config->skin = 'default';
|
||||
if(!$communication_config->colorset) $communication_config->colorset = 'white';
|
||||
if(!$communication_config->editor_skin) $communication_config->editor_skin = 'default';
|
||||
|
||||
return $communication_config;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 쪽지 내용을 가져옴
|
||||
**/
|
||||
function getSelectedMessage($message_srl) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$args->message_srl = $message_srl;
|
||||
$output = executeQuery('communication.getMessage',$args);
|
||||
$message = $output->data;
|
||||
if(!$message) return ;
|
||||
|
||||
// 보낸 쪽지일 경우 받는 사람 정보를 구함
|
||||
$oMemberModel = &getModel('member');
|
||||
if($message->sender_srl == $logged_info->member_srl && $message->message_type == 'S') $member_info = $oMemberModel->getMemberInfoByMemberSrl($message->receiver_srl);
|
||||
|
||||
// 보관/받은 쪽지일 경우 보낸 사람 정보를 구함
|
||||
else $member_info = $oMemberModel->getMemberInfoByMemberSrl($message->sender_srl);
|
||||
|
||||
if($member_info) {
|
||||
foreach($member_info as $key => $val) {
|
||||
if($key != 'regdate') $message->{$key} = $val;
|
||||
}
|
||||
}
|
||||
|
||||
// 받은 쪽지이고 아직 읽지 않았을 경우 읽은 상태로 변경
|
||||
if($message->message_type == 'R' && $message->readed != 'Y') {
|
||||
$oCommunicationController = &getController('communication');
|
||||
$oCommunicationController->setMessageReaded($message_srl);
|
||||
}
|
||||
|
||||
|
||||
return $message;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 새 쪽지를 가져옴
|
||||
**/
|
||||
function getNewMessage() {
|
||||
$logged_info = Context::get('logged_info');
|
||||
$args->receiver_srl = $logged_info->member_srl;
|
||||
$args->readed = 'N';
|
||||
|
||||
$output = executeQuery('communication.getNewMessage', $args);
|
||||
if(!count($output->data)) return;
|
||||
$message = array_pop($output->data);
|
||||
|
||||
$oCommunicationController = &getController('communication');
|
||||
$oCommunicationController->setMessageReaded($message->message_srl);
|
||||
|
||||
return $message;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 쪽지 목록 가져오기
|
||||
* type = R : 받은 쪽지
|
||||
* type = S : 보낸 쪽지
|
||||
* type = T : 보관함
|
||||
**/
|
||||
function getMessages($message_type = "R") {
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
switch($message_type) {
|
||||
case 'R' :
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->message_type = 'R';
|
||||
$query_id = 'communication.getReceivedMessages';
|
||||
break;
|
||||
case 'T' :
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->message_type = 'T';
|
||||
$query_id = 'communication.getStoredMessages';
|
||||
break;
|
||||
default :
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->message_type = 'S';
|
||||
$query_id = 'communication.getSendedMessages';
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
// 기타 변수들 정리
|
||||
$args->sort_index = 'message.list_order';
|
||||
$args->page = Context::get('page');
|
||||
$args->list_count = 20;
|
||||
$args->page_count = 10;
|
||||
return executeQuery($query_id, $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 친구 목록 가져오기
|
||||
**/
|
||||
function getFriends($friend_group_srl = 0) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$args->friend_group_srl = $friend_group_srl;
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
|
||||
// 기타 변수들 정리
|
||||
$args->page = Context::get('page');
|
||||
$args->sort_index = 'friend.list_order';
|
||||
$args->list_count = 10;
|
||||
$args->page_count = 10;
|
||||
$output = executeQuery('communication.getFriends', $args);
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 이미 친구로 등록되었는지 검사
|
||||
**/
|
||||
function isAddedFriend($member_srl) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->target_srl = $member_srl;
|
||||
$output = executeQuery('communication.isAddedFriend', $args);
|
||||
return $output->data->count;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 특정 친구 그룹 가져오기
|
||||
**/
|
||||
function getFriendGroupInfo($friend_group_srl) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->friend_group_srl = $friend_group_srl;
|
||||
|
||||
$output = executeQuery('communication.getFriendGroup', $args);
|
||||
return $output->data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 그룹 목록 가져오기
|
||||
**/
|
||||
function getFriendGroups() {
|
||||
$logged_info = Context::get('logged_info');
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
|
||||
$output = executeQuery('communication.getFriendGroups', $args);
|
||||
$group_list = $output->data;
|
||||
if(!$group_list) return;
|
||||
|
||||
if(!is_array($group_list)) $group_list = array($group_list);
|
||||
return $group_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 특정 회원의 친구 목록에 포함되어 있는지를 확인
|
||||
**/
|
||||
function isFriend($target_srl) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$args->member_srl = $target_srl;
|
||||
$args->target_srl = $logged_info->member_srl;
|
||||
$output = executeQuery('communication.isAddedFriend', $args);
|
||||
if($output->data->count) return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,228 +1,228 @@
|
|||
<?php
|
||||
/**
|
||||
* @class communicationView
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief communication module의 View class
|
||||
**/
|
||||
|
||||
class communicationView extends communication {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
|
||||
$this->communication_config = $oCommunicationModel->getConfig();
|
||||
$skin = $this->communication_config->skin;
|
||||
|
||||
Context::set('communication_config', $this->communication_config);
|
||||
|
||||
$tpl_path = sprintf('%sskins/%s', $this->module_path, $skin);
|
||||
$this->setTemplatePath($tpl_path);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 쪽지함 출력
|
||||
**/
|
||||
function dispCommunicationMessages() {
|
||||
// 로그인이 되어 있지 않으면 오류 표시
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// 변수 설정
|
||||
$message_srl = Context::get('message_srl');
|
||||
$message_type = Context::get('message_type');
|
||||
if(!in_array($message_type, array('R','S','T'))) {
|
||||
$message_type = 'R';
|
||||
Context::set('message_type', $message_type);
|
||||
}
|
||||
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
|
||||
// message_srl이 있으면 내용 추출
|
||||
if($message_srl) {
|
||||
$message = $oCommunicationModel->getSelectedMessage($message_srl);
|
||||
if($message->message_srl == $message_srl && ($message->receiver_srl == $logged_info->member_srl || $message->sender_srl == $logged_info->member_srl) ) {
|
||||
stripEmbedTagForAdmin($message->content, $message->sender_srl);
|
||||
Context::set('message', $message);
|
||||
}
|
||||
}
|
||||
|
||||
// 목록 추출
|
||||
$output = $oCommunicationModel->getMessages($message_type);
|
||||
|
||||
// 템플릿에 쓰기 위해서 context::set
|
||||
Context::set('total_count', $output->total_count);
|
||||
Context::set('total_page', $output->total_page);
|
||||
Context::set('page', $output->page);
|
||||
Context::set('message_list', $output->data);
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
|
||||
$this->setTemplateFile('messages');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 새 쪽지 보여줌
|
||||
**/
|
||||
function dispCommunicationNewMessage() {
|
||||
$this->setLayoutFile('popup_layout');
|
||||
|
||||
// 로그인이 되어 있지 않으면 오류 표시
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
|
||||
// 새 쪽지를 가져옴
|
||||
$message = $oCommunicationModel->getNewMessage();
|
||||
if($message) {
|
||||
stripEmbedTagForAdmin($message->content, $message->sender_srl);
|
||||
Context::set('message', $message);
|
||||
}
|
||||
|
||||
// 플래그 삭제
|
||||
$flag_path = './files/communication_extra_info/new_message_flags/'.getNumberingPath($logged_info->member_srl);
|
||||
$flag_file = sprintf('%s%s', $flag_path, $logged_info->member_srl);
|
||||
FileHandler::removeFile($flag_file);
|
||||
|
||||
$this->setTemplateFile('new_message');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 쪽지 발송 출력
|
||||
**/
|
||||
function dispCommunicationSendMessage() {
|
||||
$this->setLayoutFile("popup_layout");
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
$oMemberModel = &getModel('member');
|
||||
|
||||
// 로그인이 되어 있지 않으면 오류 표시
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// 쪽지 받을 사용자 정보 구함
|
||||
$receiver_srl = Context::get('receiver_srl');
|
||||
if(!$receiver_srl || $logged_info->member_srl == $receiver_srl) return $this->stop('msg_not_logged');
|
||||
|
||||
// 답글 쪽지일 경우 원본 메세지의 글번호를 구함
|
||||
$message_srl = Context::get('message_srl');
|
||||
if($message_srl) {
|
||||
$source_message = $oCommunicationModel->getSelectedMessage($message_srl);
|
||||
if($source_message->message_srl == $message_srl && $source_message->sender_srl == $receiver_srl) {
|
||||
$source_message->title = "[re] ".$source_message->title;
|
||||
$source_message->content = "\r\n<br />\r\n<br /><div style=\"padding-left:5px; border-left:5px solid #DDDDDD;\">".trim($source_message->content)."</div>";
|
||||
Context::set('source_message', $source_message);
|
||||
}
|
||||
}
|
||||
|
||||
$receiver_info = $oMemberModel->getMemberInfoByMemberSrl($receiver_srl);
|
||||
Context::set('receiver_info', $receiver_info);
|
||||
|
||||
// 에디터 모듈의 getEditor를 호출하여 서명용으로 세팅
|
||||
$oEditorModel = &getModel('editor');
|
||||
$option->primary_key_name = 'receiver_srl';
|
||||
$option->content_key_name = 'content';
|
||||
$option->allow_fileupload = false;
|
||||
$option->enable_autosave = false;
|
||||
$option->enable_default_component = true;// false;
|
||||
$option->enable_component = false;
|
||||
$option->resizable = false;
|
||||
$option->disable_html = true;
|
||||
$option->height = 300;
|
||||
$option->skin = $this->communication_config->editor_skin;
|
||||
$option->colorset = $this->communication_config->editor_colorset;
|
||||
$editor = $oEditorModel->getEditor($logged_info->member_srl, $option);
|
||||
Context::set('editor', $editor);
|
||||
|
||||
$this->setTemplateFile('send_message');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 친구 목록 보기
|
||||
**/
|
||||
function dispCommunicationFriend() {
|
||||
// 로그인이 되어 있지 않으면 오류 표시
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
|
||||
// 그룹 목록을 가져옴
|
||||
$tmp_group_list = $oCommunicationModel->getFriendGroups();
|
||||
$group_count = count($tmp_group_list);
|
||||
for($i=0;$i<$group_count;$i++) $friend_group_list[$tmp_group_list[$i]->friend_group_srl] = $tmp_group_list[$i];
|
||||
Context::set('friend_group_list', $friend_group_list);
|
||||
|
||||
// 친구 목록을 가져옴
|
||||
$friend_group_srl = Context::get('friend_group_srl');
|
||||
$output = $oCommunicationModel->getFriends($friend_group_srl);
|
||||
$friend_count = count($output->data);
|
||||
if($friend_count) {
|
||||
foreach($output->data as $key => $val) {
|
||||
$group_srl = $val->friend_group_srl;
|
||||
$group_title = $friend_group_list[$group_srl]->title;
|
||||
if(!$group_title) $group_title = Context::get('default_friend_group');
|
||||
$output->data[$key]->group_title = $group_title;
|
||||
}
|
||||
}
|
||||
|
||||
// 템플릿에 쓰기 위해서 context::set
|
||||
Context::set('total_count', $output->total_count);
|
||||
Context::set('total_page', $output->total_page);
|
||||
Context::set('page', $output->page);
|
||||
Context::set('friend_list', $output->data);
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
|
||||
$this->setTemplateFile('friends');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 친구 추가
|
||||
**/
|
||||
function dispCommunicationAddFriend() {
|
||||
$this->setLayoutFile("popup_layout");
|
||||
|
||||
// 로그인이 되어 있지 않으면 오류 표시
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$target_srl = Context::get('target_srl');
|
||||
if(!$target_srl) return $this->stop('msg_invalid_request');
|
||||
|
||||
// 대상 회원의 정보를 구함
|
||||
$oMemberModel = &getModel('member');
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
$communication_info = $oMemberModel->getMemberInfoByMemberSrl($target_srl);
|
||||
if($communication_info->member_srl != $target_srl) return $this->stop('msg_invalid_request');
|
||||
Context::set('target_info', $communication_info);
|
||||
|
||||
// 그룹의 목록을 구함
|
||||
$friend_group_list = $oCommunicationModel->getFriendGroups();
|
||||
Context::set('friend_group_list', $friend_group_list);
|
||||
|
||||
$this->setTemplateFile('add_friend');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 친구 그룹 추가
|
||||
**/
|
||||
function dispCommunicationAddFriendGroup() {
|
||||
$this->setLayoutFile("popup_layout");
|
||||
|
||||
// 로그인이 되어 있지 않으면 오류 표시
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// 그룹 번호가 넘어오면 수정모드로..
|
||||
$friend_group_srl = Context::get('friend_group_srl');
|
||||
if($friend_group_srl) {
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
$friend_group = $oCommunicationModel->getFriendGroupInfo($friend_group_srl);
|
||||
if($friend_group->friend_group_srl == $friend_group_srl) Context::set('friend_group', $friend_group);
|
||||
}
|
||||
|
||||
$this->setTemplateFile('add_friend_group');
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class communicationView
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief communication module의 View class
|
||||
**/
|
||||
|
||||
class communicationView extends communication {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
|
||||
$this->communication_config = $oCommunicationModel->getConfig();
|
||||
$skin = $this->communication_config->skin;
|
||||
|
||||
Context::set('communication_config', $this->communication_config);
|
||||
|
||||
$tpl_path = sprintf('%sskins/%s', $this->module_path, $skin);
|
||||
$this->setTemplatePath($tpl_path);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 쪽지함 출력
|
||||
**/
|
||||
function dispCommunicationMessages() {
|
||||
// 로그인이 되어 있지 않으면 오류 표시
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// 변수 설정
|
||||
$message_srl = Context::get('message_srl');
|
||||
$message_type = Context::get('message_type');
|
||||
if(!in_array($message_type, array('R','S','T'))) {
|
||||
$message_type = 'R';
|
||||
Context::set('message_type', $message_type);
|
||||
}
|
||||
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
|
||||
// message_srl이 있으면 내용 추출
|
||||
if($message_srl) {
|
||||
$message = $oCommunicationModel->getSelectedMessage($message_srl);
|
||||
if($message->message_srl == $message_srl && ($message->receiver_srl == $logged_info->member_srl || $message->sender_srl == $logged_info->member_srl) ) {
|
||||
stripEmbedTagForAdmin($message->content, $message->sender_srl);
|
||||
Context::set('message', $message);
|
||||
}
|
||||
}
|
||||
|
||||
// 목록 추출
|
||||
$output = $oCommunicationModel->getMessages($message_type);
|
||||
|
||||
// 템플릿에 쓰기 위해서 context::set
|
||||
Context::set('total_count', $output->total_count);
|
||||
Context::set('total_page', $output->total_page);
|
||||
Context::set('page', $output->page);
|
||||
Context::set('message_list', $output->data);
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
|
||||
$this->setTemplateFile('messages');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 새 쪽지 보여줌
|
||||
**/
|
||||
function dispCommunicationNewMessage() {
|
||||
$this->setLayoutFile('popup_layout');
|
||||
|
||||
// 로그인이 되어 있지 않으면 오류 표시
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
|
||||
// 새 쪽지를 가져옴
|
||||
$message = $oCommunicationModel->getNewMessage();
|
||||
if($message) {
|
||||
stripEmbedTagForAdmin($message->content, $message->sender_srl);
|
||||
Context::set('message', $message);
|
||||
}
|
||||
|
||||
// 플래그 삭제
|
||||
$flag_path = './files/communication_extra_info/new_message_flags/'.getNumberingPath($logged_info->member_srl);
|
||||
$flag_file = sprintf('%s%s', $flag_path, $logged_info->member_srl);
|
||||
FileHandler::removeFile($flag_file);
|
||||
|
||||
$this->setTemplateFile('new_message');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 쪽지 발송 출력
|
||||
**/
|
||||
function dispCommunicationSendMessage() {
|
||||
$this->setLayoutFile("popup_layout");
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
$oMemberModel = &getModel('member');
|
||||
|
||||
// 로그인이 되어 있지 않으면 오류 표시
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// 쪽지 받을 사용자 정보 구함
|
||||
$receiver_srl = Context::get('receiver_srl');
|
||||
if(!$receiver_srl || $logged_info->member_srl == $receiver_srl) return $this->stop('msg_not_logged');
|
||||
|
||||
// 답글 쪽지일 경우 원본 메세지의 글번호를 구함
|
||||
$message_srl = Context::get('message_srl');
|
||||
if($message_srl) {
|
||||
$source_message = $oCommunicationModel->getSelectedMessage($message_srl);
|
||||
if($source_message->message_srl == $message_srl && $source_message->sender_srl == $receiver_srl) {
|
||||
$source_message->title = "[re] ".$source_message->title;
|
||||
$source_message->content = "\r\n<br />\r\n<br /><div style=\"padding-left:5px; border-left:5px solid #DDDDDD;\">".trim($source_message->content)."</div>";
|
||||
Context::set('source_message', $source_message);
|
||||
}
|
||||
}
|
||||
|
||||
$receiver_info = $oMemberModel->getMemberInfoByMemberSrl($receiver_srl);
|
||||
Context::set('receiver_info', $receiver_info);
|
||||
|
||||
// 에디터 모듈의 getEditor를 호출하여 서명용으로 세팅
|
||||
$oEditorModel = &getModel('editor');
|
||||
$option->primary_key_name = 'receiver_srl';
|
||||
$option->content_key_name = 'content';
|
||||
$option->allow_fileupload = false;
|
||||
$option->enable_autosave = false;
|
||||
$option->enable_default_component = true;// false;
|
||||
$option->enable_component = false;
|
||||
$option->resizable = false;
|
||||
$option->disable_html = true;
|
||||
$option->height = 300;
|
||||
$option->skin = $this->communication_config->editor_skin;
|
||||
$option->colorset = $this->communication_config->editor_colorset;
|
||||
$editor = $oEditorModel->getEditor($logged_info->member_srl, $option);
|
||||
Context::set('editor', $editor);
|
||||
|
||||
$this->setTemplateFile('send_message');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 친구 목록 보기
|
||||
**/
|
||||
function dispCommunicationFriend() {
|
||||
// 로그인이 되어 있지 않으면 오류 표시
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
|
||||
// 그룹 목록을 가져옴
|
||||
$tmp_group_list = $oCommunicationModel->getFriendGroups();
|
||||
$group_count = count($tmp_group_list);
|
||||
for($i=0;$i<$group_count;$i++) $friend_group_list[$tmp_group_list[$i]->friend_group_srl] = $tmp_group_list[$i];
|
||||
Context::set('friend_group_list', $friend_group_list);
|
||||
|
||||
// 친구 목록을 가져옴
|
||||
$friend_group_srl = Context::get('friend_group_srl');
|
||||
$output = $oCommunicationModel->getFriends($friend_group_srl);
|
||||
$friend_count = count($output->data);
|
||||
if($friend_count) {
|
||||
foreach($output->data as $key => $val) {
|
||||
$group_srl = $val->friend_group_srl;
|
||||
$group_title = $friend_group_list[$group_srl]->title;
|
||||
if(!$group_title) $group_title = Context::get('default_friend_group');
|
||||
$output->data[$key]->group_title = $group_title;
|
||||
}
|
||||
}
|
||||
|
||||
// 템플릿에 쓰기 위해서 context::set
|
||||
Context::set('total_count', $output->total_count);
|
||||
Context::set('total_page', $output->total_page);
|
||||
Context::set('page', $output->page);
|
||||
Context::set('friend_list', $output->data);
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
|
||||
$this->setTemplateFile('friends');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 친구 추가
|
||||
**/
|
||||
function dispCommunicationAddFriend() {
|
||||
$this->setLayoutFile("popup_layout");
|
||||
|
||||
// 로그인이 되어 있지 않으면 오류 표시
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$target_srl = Context::get('target_srl');
|
||||
if(!$target_srl) return $this->stop('msg_invalid_request');
|
||||
|
||||
// 대상 회원의 정보를 구함
|
||||
$oMemberModel = &getModel('member');
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
$communication_info = $oMemberModel->getMemberInfoByMemberSrl($target_srl);
|
||||
if($communication_info->member_srl != $target_srl) return $this->stop('msg_invalid_request');
|
||||
Context::set('target_info', $communication_info);
|
||||
|
||||
// 그룹의 목록을 구함
|
||||
$friend_group_list = $oCommunicationModel->getFriendGroups();
|
||||
Context::set('friend_group_list', $friend_group_list);
|
||||
|
||||
$this->setTemplateFile('add_friend');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 친구 그룹 추가
|
||||
**/
|
||||
function dispCommunicationAddFriendGroup() {
|
||||
$this->setLayoutFile("popup_layout");
|
||||
|
||||
// 로그인이 되어 있지 않으면 오류 표시
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// 그룹 번호가 넘어오면 수정모드로..
|
||||
$friend_group_srl = Context::get('friend_group_srl');
|
||||
if($friend_group_srl) {
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
$friend_group = $oCommunicationModel->getFriendGroupInfo($friend_group_srl);
|
||||
if($friend_group->friend_group_srl == $friend_group_srl) Context::set('friend_group', $friend_group);
|
||||
}
|
||||
|
||||
$this->setTemplateFile('add_friend_group');
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,30 +1,30 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="0.2">
|
||||
<title xml:lang="ko">커뮤니케이션</title>
|
||||
<title xml:lang="jp">コミュニケーション</title>
|
||||
<title xml:lang="zh-CN">会员交流</title>
|
||||
<title xml:lang="en">Communication</title>
|
||||
<title xml:lang="ru">Communication</title>
|
||||
<title xml:lang="vi">Liên lạc</title>
|
||||
<title xml:lang="zh-TW">交流</title>
|
||||
<description xml:lang="ko">회원들간의 쪽지, 친구기능을 담당하는 모듈입니다.</description>
|
||||
<description xml:lang="jp">会員間にメッセージや友達管理などコミュニティ機能を提供します。</description>
|
||||
<description xml:lang="zh-CN">管理在线会员间短信息及好友功能的模块。</description>
|
||||
<description xml:lang="en">This module is for managing message, friend functions.</description>
|
||||
<description xml:lang="vi">Module quản lý tin nhắn và bạn bè.</description>
|
||||
<description xml:lang="ru">This module is for managing message, friend functions.</description>
|
||||
<description xml:lang="zh-TW">管理線上會員間短訊及好友功能的模組。</description>
|
||||
<version>0.1</version>
|
||||
<date>2008-05-30</date>
|
||||
<category>member</category>
|
||||
|
||||
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
|
||||
<name xml:lang="ko">zero</name>
|
||||
<name xml:lang="vi">zero</name>
|
||||
<name xml:lang="jp">zero</name>
|
||||
<name xml:lang="zh-CN">zero</name>
|
||||
<name xml:lang="en">zero</name>
|
||||
<name xml:lang="zh-TW">zero</name>
|
||||
<name xml:lang="ru">zero</name>
|
||||
</author>
|
||||
</module>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="0.2">
|
||||
<title xml:lang="ko">커뮤니케이션</title>
|
||||
<title xml:lang="jp">コミュニケーション</title>
|
||||
<title xml:lang="zh-CN">会员交流</title>
|
||||
<title xml:lang="en">Communication</title>
|
||||
<title xml:lang="ru">Communication</title>
|
||||
<title xml:lang="vi">Liên lạc</title>
|
||||
<title xml:lang="zh-TW">交流</title>
|
||||
<description xml:lang="ko">회원들간의 쪽지, 친구기능을 담당하는 모듈입니다.</description>
|
||||
<description xml:lang="jp">会員間にメッセージや友達管理などコミュニティ機能を提供します。</description>
|
||||
<description xml:lang="zh-CN">管理在线会员间短信息及好友功能的模块。</description>
|
||||
<description xml:lang="en">This module is for managing message, friend functions.</description>
|
||||
<description xml:lang="vi">Module quản lý tin nhắn và bạn bè.</description>
|
||||
<description xml:lang="ru">This module is for managing message, friend functions.</description>
|
||||
<description xml:lang="zh-TW">管理線上會員間短訊及好友功能的模組。</description>
|
||||
<version>0.1</version>
|
||||
<date>2008-05-30</date>
|
||||
<category>member</category>
|
||||
|
||||
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
|
||||
<name xml:lang="ko">NHN</name>
|
||||
<name xml:lang="vi">NHN</name>
|
||||
<name xml:lang="jp">NHN</name>
|
||||
<name xml:lang="zh-CN">NHN</name>
|
||||
<name xml:lang="en">NHN</name>
|
||||
<name xml:lang="zh-TW">NHN</name>
|
||||
<name xml:lang="ru">NHN</name>
|
||||
</author>
|
||||
</module>
|
||||
|
|
|
|||
|
|
@ -1,48 +1,48 @@
|
|||
<?php
|
||||
/**
|
||||
* @file en.lang.php
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief English Language Pack (Only Basic Things)
|
||||
**/
|
||||
|
||||
$lang->communication = 'Communication';
|
||||
$lang->about_communication = 'Communication module is for communications between members with messages or friends.';
|
||||
|
||||
$lang->allow_message = 'Receive Messages';
|
||||
$lang->allow_message_type = array(
|
||||
'Y' => 'Receive All',
|
||||
'N' => 'Reject All',
|
||||
'F' => 'Only Friends',
|
||||
);
|
||||
|
||||
$lang->message_box = array(
|
||||
'R' => 'Received',
|
||||
'S' => 'Sent',
|
||||
'T' => 'Mailbox',
|
||||
);
|
||||
$lang->readed_date = "Read Date";
|
||||
|
||||
$lang->sender = 'Sender';
|
||||
$lang->receiver = 'Receiver';
|
||||
$lang->friend_group = 'Friend Group';
|
||||
$lang->default_friend_group = 'Unassigned Group';
|
||||
|
||||
$lang->cmd_send_message = 'Send Message';
|
||||
$lang->cmd_reply_message = 'Reply Message';
|
||||
$lang->cmd_view_friend = 'Friends';
|
||||
$lang->cmd_add_friend = 'Add Friend';
|
||||
$lang->cmd_view_message_box = 'Message Box';
|
||||
$lang->cmd_store = "Save";
|
||||
$lang->cmd_add_friend_group = 'Add Friend Group';
|
||||
$lang->cmd_rename_friend_group = 'Modify Friend Group Name';
|
||||
|
||||
$lang->msg_no_message = 'There is no message';
|
||||
$lang->message_received = 'You have a new message';
|
||||
|
||||
$lang->msg_title_is_null = 'Please input the title of message';
|
||||
$lang->msg_content_is_null = 'Please input the content';
|
||||
$lang->msg_allow_message_to_friend = "Failed to send because receiver only allows friends' messages";
|
||||
$lang->msg_disallow_message = 'Failed to send because receiver rejects message reception';
|
||||
|
||||
$lang->about_allow_message = 'You can decide message reception';
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file en.lang.php
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief English Language Pack (Only Basic Things)
|
||||
**/
|
||||
|
||||
$lang->communication = 'Communication';
|
||||
$lang->about_communication = 'Communication module is for communications between members with messages or friends.';
|
||||
|
||||
$lang->allow_message = 'Receive Messages';
|
||||
$lang->allow_message_type = array(
|
||||
'Y' => 'Receive All',
|
||||
'N' => 'Reject All',
|
||||
'F' => 'Only Friends',
|
||||
);
|
||||
|
||||
$lang->message_box = array(
|
||||
'R' => 'Received',
|
||||
'S' => 'Sent',
|
||||
'T' => 'Mailbox',
|
||||
);
|
||||
$lang->readed_date = "Read Date";
|
||||
|
||||
$lang->sender = 'Sender';
|
||||
$lang->receiver = 'Receiver';
|
||||
$lang->friend_group = 'Friend Group';
|
||||
$lang->default_friend_group = 'Unassigned Group';
|
||||
|
||||
$lang->cmd_send_message = 'Send Message';
|
||||
$lang->cmd_reply_message = 'Reply Message';
|
||||
$lang->cmd_view_friend = 'Friends';
|
||||
$lang->cmd_add_friend = 'Add Friend';
|
||||
$lang->cmd_view_message_box = 'Message Box';
|
||||
$lang->cmd_store = "Save";
|
||||
$lang->cmd_add_friend_group = 'Add Friend Group';
|
||||
$lang->cmd_rename_friend_group = 'Modify Friend Group Name';
|
||||
|
||||
$lang->msg_no_message = 'There is no message';
|
||||
$lang->message_received = 'You have a new message';
|
||||
|
||||
$lang->msg_title_is_null = 'Please input the title of message';
|
||||
$lang->msg_content_is_null = 'Please input the content';
|
||||
$lang->msg_allow_message_to_friend = "Failed to send because receiver only allows friends' messages";
|
||||
$lang->msg_disallow_message = 'Failed to send because receiver rejects message reception';
|
||||
|
||||
$lang->about_allow_message = 'You can decide message reception';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,49 +1,49 @@
|
|||
<?php
|
||||
/**
|
||||
* @file es.lang.php
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief Spanish Language Pack (Only Basic Things)
|
||||
**/
|
||||
|
||||
$lang->communication = 'Communication';
|
||||
$lang->about_communication = '회원간의 쪽지나 친구 관리등 커뮤니케이션 기능을 수행하는 모듈입니다';
|
||||
|
||||
$lang->allow_message = 'Permitir la recepción del mensaje';
|
||||
$lang->allow_message_type = array(
|
||||
'Y' => 'Recibir todo',
|
||||
'N' => 'Rechazar',
|
||||
'F' => 'Sólo amigos',
|
||||
);
|
||||
|
||||
$lang->message_box = array(
|
||||
'R' => 'Recibido',
|
||||
'S' => 'Enviado',
|
||||
'T' => 'Buzon de Email',
|
||||
);
|
||||
|
||||
$lang->readed_date = "Fecha Leído";
|
||||
|
||||
$lang->sender = 'Remitente';
|
||||
$lang->receiver = 'Receptor';
|
||||
$lang->friend_group = 'Grupo de amigos';
|
||||
$lang->default_friend_group = 'Grupo desasignado';
|
||||
|
||||
$lang->cmd_send_message = 'Enviar Mensaje';
|
||||
$lang->cmd_reply_message = 'Responder el mensaje';
|
||||
$lang->cmd_view_friend = 'Amigos';
|
||||
$lang->cmd_add_friend = 'Registrar como Amigo';
|
||||
$lang->cmd_view_message_box = 'Buzón de mensajes';
|
||||
$lang->cmd_store = "Guardar";
|
||||
$lang->cmd_add_friend_group = 'agregar grupo de amigos';
|
||||
$lang->cmd_rename_friend_group = 'Cambiar el nombre del grupo de amigos';
|
||||
|
||||
$lang->msg_no_message = 'No hay mensajes';
|
||||
$lang->message_received = 'Usted ha recibido un mensaje';
|
||||
|
||||
$lang->msg_title_is_null = 'Por favor ingresar el título de la nota';
|
||||
$lang->msg_content_is_null = 'Por favor ingresar el contenido';
|
||||
$lang->msg_allow_message_to_friend = "Falló el envío por permitir sólo mensajes de sus amigos";
|
||||
$lang->msg_disallow_message = 'Falló el envío por ser usuario rechazado para recibir mensajes';
|
||||
|
||||
$lang->about_allow_message = 'Usted puede decidir la recepción del mensaje';
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file es.lang.php
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief Spanish Language Pack (Only Basic Things)
|
||||
**/
|
||||
|
||||
$lang->communication = 'Communication';
|
||||
$lang->about_communication = '회원간의 쪽지나 친구 관리등 커뮤니케이션 기능을 수행하는 모듈입니다';
|
||||
|
||||
$lang->allow_message = 'Permitir la recepción del mensaje';
|
||||
$lang->allow_message_type = array(
|
||||
'Y' => 'Recibir todo',
|
||||
'N' => 'Rechazar',
|
||||
'F' => 'Sólo amigos',
|
||||
);
|
||||
|
||||
$lang->message_box = array(
|
||||
'R' => 'Recibido',
|
||||
'S' => 'Enviado',
|
||||
'T' => 'Buzon de Email',
|
||||
);
|
||||
|
||||
$lang->readed_date = "Fecha Leído";
|
||||
|
||||
$lang->sender = 'Remitente';
|
||||
$lang->receiver = 'Receptor';
|
||||
$lang->friend_group = 'Grupo de amigos';
|
||||
$lang->default_friend_group = 'Grupo desasignado';
|
||||
|
||||
$lang->cmd_send_message = 'Enviar Mensaje';
|
||||
$lang->cmd_reply_message = 'Responder el mensaje';
|
||||
$lang->cmd_view_friend = 'Amigos';
|
||||
$lang->cmd_add_friend = 'Registrar como Amigo';
|
||||
$lang->cmd_view_message_box = 'Buzón de mensajes';
|
||||
$lang->cmd_store = "Guardar";
|
||||
$lang->cmd_add_friend_group = 'agregar grupo de amigos';
|
||||
$lang->cmd_rename_friend_group = 'Cambiar el nombre del grupo de amigos';
|
||||
|
||||
$lang->msg_no_message = 'No hay mensajes';
|
||||
$lang->message_received = 'Usted ha recibido un mensaje';
|
||||
|
||||
$lang->msg_title_is_null = 'Por favor ingresar el título de la nota';
|
||||
$lang->msg_content_is_null = 'Por favor ingresar el contenido';
|
||||
$lang->msg_allow_message_to_friend = "Falló el envío por permitir sólo mensajes de sus amigos";
|
||||
$lang->msg_disallow_message = 'Falló el envío por ser usuario rechazado para recibir mensajes';
|
||||
|
||||
$lang->about_allow_message = 'Usted puede decidir la recepción del mensaje';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,48 +1,48 @@
|
|||
<?php
|
||||
/**
|
||||
* @file fr.lang.php
|
||||
* @author zero (zero@nzeo.com) Traduit par Pierre Duvent(PierreDuvent@gamil.com)
|
||||
* @brief Paquet du langage en français pour le module de Communication
|
||||
**/
|
||||
|
||||
$lang->communication = 'Communication';
|
||||
$lang->about_communication = 'Ce module exécute des fonctions communicatives comme Messages ou Amis';
|
||||
|
||||
$lang->allow_message = 'Recevoir les Messages';
|
||||
$lang->allow_message_type = array(
|
||||
'Y' => 'Recevoir tout',
|
||||
'N' => 'Refuser tout',
|
||||
'F' => 'Amis seulement',
|
||||
);
|
||||
|
||||
$lang->message_box = array(
|
||||
'R' => 'Reçu',
|
||||
'S' => 'Envoyé',
|
||||
'T' => 'Boîte aux Lettres',
|
||||
);
|
||||
$lang->readed_date = "Jour lu";
|
||||
|
||||
$lang->sender = 'Envoyeur';
|
||||
$lang->receiver = 'Receveur';
|
||||
$lang->friend_group = 'Groupe des Amis';
|
||||
$lang->default_friend_group = 'Groupe pas assigné ';
|
||||
|
||||
$lang->cmd_send_message = 'Envoyer un Message';
|
||||
$lang->cmd_reply_message = 'Répondre à un Message';
|
||||
$lang->cmd_view_friend = 'Amis';
|
||||
$lang->cmd_add_friend = 'Inscrire des Amis';
|
||||
$lang->cmd_view_message_box = 'Lire des Messages';
|
||||
$lang->cmd_store = "Conserver";
|
||||
$lang->cmd_add_friend_group = 'Ajouter un Groupe des Amis';
|
||||
$lang->cmd_rename_friend_group = 'Modifier le Nom du Groupe des Amis';
|
||||
|
||||
$lang->msg_no_message = 'Nul Message';
|
||||
$lang->message_received = 'Nouveau message';
|
||||
|
||||
$lang->msg_title_is_null = 'Entrez le titre du message, S.V.P.';
|
||||
$lang->msg_content_is_null = 'Entrez le contenu, S.V.P.';
|
||||
$lang->msg_allow_message_to_friend = "Echoué à envoyer parce que le receveur permet seulement les messages des Amis.";
|
||||
$lang->msg_disallow_message = 'Echoué à envoyer parce que le receveur refuse la réception des messages';
|
||||
|
||||
$lang->about_allow_message = 'Vous pouvez refuser la réception des messages';
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file fr.lang.php
|
||||
* @author NHN (developers@xpressengine.com) Traduit par Pierre Duvent(PierreDuvent@gamil.com)
|
||||
* @brief Paquet du langage en français pour le module de Communication
|
||||
**/
|
||||
|
||||
$lang->communication = 'Communication';
|
||||
$lang->about_communication = 'Ce module exécute des fonctions communicatives comme Messages ou Amis';
|
||||
|
||||
$lang->allow_message = 'Recevoir les Messages';
|
||||
$lang->allow_message_type = array(
|
||||
'Y' => 'Recevoir tout',
|
||||
'N' => 'Refuser tout',
|
||||
'F' => 'Amis seulement',
|
||||
);
|
||||
|
||||
$lang->message_box = array(
|
||||
'R' => 'Reçu',
|
||||
'S' => 'Envoyé',
|
||||
'T' => 'Boîte aux Lettres',
|
||||
);
|
||||
$lang->readed_date = "Jour lu";
|
||||
|
||||
$lang->sender = 'Envoyeur';
|
||||
$lang->receiver = 'Receveur';
|
||||
$lang->friend_group = 'Groupe des Amis';
|
||||
$lang->default_friend_group = 'Groupe pas assigné ';
|
||||
|
||||
$lang->cmd_send_message = 'Envoyer un Message';
|
||||
$lang->cmd_reply_message = 'Répondre à un Message';
|
||||
$lang->cmd_view_friend = 'Amis';
|
||||
$lang->cmd_add_friend = 'Inscrire des Amis';
|
||||
$lang->cmd_view_message_box = 'Lire des Messages';
|
||||
$lang->cmd_store = "Conserver";
|
||||
$lang->cmd_add_friend_group = 'Ajouter un Groupe des Amis';
|
||||
$lang->cmd_rename_friend_group = 'Modifier le Nom du Groupe des Amis';
|
||||
|
||||
$lang->msg_no_message = 'Nul Message';
|
||||
$lang->message_received = 'Nouveau message';
|
||||
|
||||
$lang->msg_title_is_null = 'Entrez le titre du message, S.V.P.';
|
||||
$lang->msg_content_is_null = 'Entrez le contenu, S.V.P.';
|
||||
$lang->msg_allow_message_to_friend = "Echoué à envoyer parce que le receveur permet seulement les messages des Amis.";
|
||||
$lang->msg_disallow_message = 'Echoué à envoyer parce que le receveur refuse la réception des messages';
|
||||
|
||||
$lang->about_allow_message = 'Vous pouvez refuser la réception des messages';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,48 +1,48 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/member/jp.lang.php
|
||||
* @author zero (zero@nzeo.com) 翻訳:RisaPapa、ミニミ、liahona
|
||||
* @brief 日本語言語パッケージ(基本的な内容のみ)
|
||||
**/
|
||||
|
||||
$lang->communication = 'コミュニケーション';
|
||||
$lang->about_communication = '会員間にメッセージや友達管理などコミュニティ機能を提供するモジュールです。';
|
||||
|
||||
$lang->allow_message = 'メッセージの受信';
|
||||
$lang->allow_message_type = array(
|
||||
'Y' => '全て受信',
|
||||
'N' => '全て受信しない',
|
||||
'F' => '友達からのみ受信する',
|
||||
);
|
||||
|
||||
$lang->message_box = array(
|
||||
'R' => 'メッセージ受信箱',
|
||||
'S' => 'メッセージ送信箱',
|
||||
'T' => '保存箱',
|
||||
);
|
||||
|
||||
$lang->readed_date = '開封時間';
|
||||
|
||||
$lang->sender = '送信者';
|
||||
$lang->receiver = '受信者';
|
||||
$lang->friend_group = '友達グループ';
|
||||
$lang->default_friend_group = 'グループ未指定';
|
||||
|
||||
$lang->cmd_send_message = 'メッセージ送信';
|
||||
$lang->cmd_reply_message = 'メッセージ返信';
|
||||
$lang->cmd_view_friend = '友達リスト';
|
||||
$lang->cmd_add_friend = '友達登録';
|
||||
$lang->cmd_view_message_box = 'メッセージ';
|
||||
$lang->cmd_store = '保存';
|
||||
$lang->cmd_add_friend_group = '友達グループ追加';
|
||||
$lang->cmd_rename_friend_group = '友達グループ名変更';
|
||||
|
||||
$lang->msg_no_message = 'メッセージがありません。';
|
||||
$lang->message_received = 'メッセージが届きました。';
|
||||
|
||||
$lang->msg_title_is_null = 'メッセージのタイトルを入力して下さい。';
|
||||
$lang->msg_content_is_null = '内容を入力して下さい。';
|
||||
$lang->msg_allow_message_to_friend = '友達からのみメッセージを受信出来るように設定したユーザであるため、送信出来ませんでした。';
|
||||
$lang->msg_disallow_message = 'メッセージの受信を拒否している受信者であるため、送信出来ませんでした。';
|
||||
$lang->about_allow_message = 'メッセージを受信するかを設定します。';
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file modules/member/jp.lang.php
|
||||
* @author NHN (developers@xpressengine.com) 翻訳:RisaPapa、ミニミ、liahona
|
||||
* @brief 日本語言語パッケージ(基本的な内容のみ)
|
||||
**/
|
||||
|
||||
$lang->communication = 'コミュニケーション';
|
||||
$lang->about_communication = '会員間にメッセージや友達管理などコミュニティ機能を提供するモジュールです。';
|
||||
|
||||
$lang->allow_message = 'メッセージの受信';
|
||||
$lang->allow_message_type = array(
|
||||
'Y' => '全て受信',
|
||||
'N' => '全て受信しない',
|
||||
'F' => '友達からのみ受信する',
|
||||
);
|
||||
|
||||
$lang->message_box = array(
|
||||
'R' => 'メッセージ受信箱',
|
||||
'S' => 'メッセージ送信箱',
|
||||
'T' => '保存箱',
|
||||
);
|
||||
|
||||
$lang->readed_date = '開封時間';
|
||||
|
||||
$lang->sender = '送信者';
|
||||
$lang->receiver = '受信者';
|
||||
$lang->friend_group = '友達グループ';
|
||||
$lang->default_friend_group = 'グループ未指定';
|
||||
|
||||
$lang->cmd_send_message = 'メッセージ送信';
|
||||
$lang->cmd_reply_message = 'メッセージ返信';
|
||||
$lang->cmd_view_friend = '友達リスト';
|
||||
$lang->cmd_add_friend = '友達登録';
|
||||
$lang->cmd_view_message_box = 'メッセージ';
|
||||
$lang->cmd_store = '保存';
|
||||
$lang->cmd_add_friend_group = '友達グループ追加';
|
||||
$lang->cmd_rename_friend_group = '友達グループ名変更';
|
||||
|
||||
$lang->msg_no_message = 'メッセージがありません。';
|
||||
$lang->message_received = 'メッセージが届きました。';
|
||||
|
||||
$lang->msg_title_is_null = 'メッセージのタイトルを入力して下さい。';
|
||||
$lang->msg_content_is_null = '内容を入力して下さい。';
|
||||
$lang->msg_allow_message_to_friend = '友達からのみメッセージを受信出来るように設定したユーザであるため、送信出来ませんでした。';
|
||||
$lang->msg_disallow_message = 'メッセージの受信を拒否している受信者であるため、送信出来ませんでした。';
|
||||
$lang->about_allow_message = 'メッセージを受信するかを設定します。';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,48 +1,48 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/communication/lang/ko.lang.php
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief 한국어 언어팩 (기본적인 내용만 수록)
|
||||
**/
|
||||
|
||||
$lang->communication = '커뮤니케이션';
|
||||
$lang->about_communication = '회원 간의 쪽지나 친구 관리 등 커뮤니케이션 기능을 수행하는 모듈입니다.';
|
||||
|
||||
$lang->allow_message = '쪽지 수신 허용';
|
||||
$lang->allow_message_type = array(
|
||||
'Y' => '전체 수신',
|
||||
'N' => '거부',
|
||||
'F' => '친구만 허용',
|
||||
);
|
||||
|
||||
$lang->message_box = array(
|
||||
'R' => '받은 쪽지함',
|
||||
'S' => '보낸 쪽지함',
|
||||
'T' => '보관함',
|
||||
);
|
||||
|
||||
$lang->readed_date = '읽은 시간';
|
||||
|
||||
$lang->sender = '보낸이';
|
||||
$lang->receiver = '받는이';
|
||||
$lang->friend_group = '친구 그룹';
|
||||
$lang->default_friend_group = '그룹 미지정';
|
||||
|
||||
$lang->cmd_send_message = '쪽지 보내기';
|
||||
$lang->cmd_reply_message = '쪽지 답장';
|
||||
$lang->cmd_view_friend = '친구 보기';
|
||||
$lang->cmd_add_friend = '친구 등록';
|
||||
$lang->cmd_view_message_box = '쪽지함 보기';
|
||||
$lang->cmd_store = '보관';
|
||||
$lang->cmd_add_friend_group = '친구 그룹 추가';
|
||||
$lang->cmd_rename_friend_group = '친구 그룹 이름 변경';
|
||||
|
||||
$lang->msg_no_message = '쪽지가 없습니다.';
|
||||
$lang->message_received = '쪽지가 왔습니다.';
|
||||
|
||||
$lang->msg_title_is_null = '쪽지 제목을 입력해주세요.';
|
||||
$lang->msg_content_is_null = '내용을 입력해주세요.';
|
||||
$lang->msg_allow_message_to_friend = '친구에게만 쪽지 발송을 허용한 사용자라서 쪽지 발송을 하지 못했습니다.';
|
||||
$lang->msg_disallow_message = '쪽지 수신을 거부한 사용자라서 쪽지 발송을 하지 못했습니다.';
|
||||
$lang->about_allow_message = '쪽지 수신 여부를 결정할 수 있습니다.';
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file modules/communication/lang/ko.lang.php
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief 한국어 언어팩 (기본적인 내용만 수록)
|
||||
**/
|
||||
|
||||
$lang->communication = '커뮤니케이션';
|
||||
$lang->about_communication = '회원 간의 쪽지나 친구 관리 등 커뮤니케이션 기능을 수행하는 모듈입니다.';
|
||||
|
||||
$lang->allow_message = '쪽지 수신 허용';
|
||||
$lang->allow_message_type = array(
|
||||
'Y' => '전체 수신',
|
||||
'N' => '거부',
|
||||
'F' => '친구만 허용',
|
||||
);
|
||||
|
||||
$lang->message_box = array(
|
||||
'R' => '받은 쪽지함',
|
||||
'S' => '보낸 쪽지함',
|
||||
'T' => '보관함',
|
||||
);
|
||||
|
||||
$lang->readed_date = '읽은 시간';
|
||||
|
||||
$lang->sender = '보낸이';
|
||||
$lang->receiver = '받는이';
|
||||
$lang->friend_group = '친구 그룹';
|
||||
$lang->default_friend_group = '그룹 미지정';
|
||||
|
||||
$lang->cmd_send_message = '쪽지 보내기';
|
||||
$lang->cmd_reply_message = '쪽지 답장';
|
||||
$lang->cmd_view_friend = '친구 보기';
|
||||
$lang->cmd_add_friend = '친구 등록';
|
||||
$lang->cmd_view_message_box = '쪽지함 보기';
|
||||
$lang->cmd_store = '보관';
|
||||
$lang->cmd_add_friend_group = '친구 그룹 추가';
|
||||
$lang->cmd_rename_friend_group = '친구 그룹 이름 변경';
|
||||
|
||||
$lang->msg_no_message = '쪽지가 없습니다.';
|
||||
$lang->message_received = '쪽지가 왔습니다.';
|
||||
|
||||
$lang->msg_title_is_null = '쪽지 제목을 입력해주세요.';
|
||||
$lang->msg_content_is_null = '내용을 입력해주세요.';
|
||||
$lang->msg_allow_message_to_friend = '친구에게만 쪽지 발송을 허용한 사용자라서 쪽지 발송을 하지 못했습니다.';
|
||||
$lang->msg_disallow_message = '쪽지 수신을 거부한 사용자라서 쪽지 발송을 하지 못했습니다.';
|
||||
$lang->about_allow_message = '쪽지 수신 여부를 결정할 수 있습니다.';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,49 +1,49 @@
|
|||
<?php
|
||||
/**
|
||||
* @file ru.lang.php
|
||||
* @author zero <zero@nzeo.com> | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
|
||||
* @brief Russian basic language pack
|
||||
**/
|
||||
|
||||
$lang->communication = 'Общение';
|
||||
$lang->about_communication = 'Модуль для общения между пользователями';
|
||||
|
||||
$lang->allow_message = 'Получать сообщения';
|
||||
$lang->allow_message_type = array(
|
||||
'Y' => 'Принимать все',
|
||||
'N' => 'Отклонять все',
|
||||
'F' => 'Принимать только от друзей',
|
||||
);
|
||||
|
||||
|
||||
$lang->message_box = array(
|
||||
'R' => 'Полученные',
|
||||
'S' => 'Отправленные',
|
||||
'T' => 'Почтовый ящик',
|
||||
);
|
||||
|
||||
$lang->readed_date = "Дата прочтения сообщения";
|
||||
|
||||
$lang->sender = 'Отправитель';
|
||||
$lang->receiver = 'Получатель';
|
||||
$lang->friend_group = 'Группа Друзья';
|
||||
$lang->default_friend_group = 'Незарегистрированная группа';
|
||||
|
||||
$lang->cmd_send_message = 'Отправить сообщение';
|
||||
$lang->cmd_reply_message = 'Ответить';
|
||||
$lang->cmd_view_friend = 'Друзья';
|
||||
$lang->cmd_add_friend = 'Добавить в друзья';
|
||||
$lang->cmd_view_message_box = 'Личные сообщений';
|
||||
$lang->cmd_store = "Сохранить";
|
||||
$lang->cmd_add_friend_group = 'Добавить в группу друзей';
|
||||
$lang->cmd_rename_friend_group = 'Изменить имя группы друзей';
|
||||
|
||||
$lang->msg_no_message = 'Сообщений нет';
|
||||
$lang->message_received = 'У Вас новое сообщение';
|
||||
|
||||
$lang->msg_title_is_null = 'Пожалуйста, введите тему сообщения';
|
||||
$lang->msg_content_is_null = 'Пожалуйста, введите содержание';
|
||||
$lang->msg_allow_message_to_friend = "Сообщение не отправлено, поскольку являетесь пользователем, имеющим право посылать сообщения только друзьям";
|
||||
$lang->msg_disallow_message = 'Сообщение не отправлено, поскольку получатель запретил прием сообщений';
|
||||
$lang->about_allow_message = 'Вы можете установить режим принятия сообщений';
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file ru.lang.php
|
||||
* @author NHN (developers@xpressengine.com) | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
|
||||
* @brief Russian basic language pack
|
||||
**/
|
||||
|
||||
$lang->communication = 'Общение';
|
||||
$lang->about_communication = 'Модуль для общения между пользователями';
|
||||
|
||||
$lang->allow_message = 'Получать сообщения';
|
||||
$lang->allow_message_type = array(
|
||||
'Y' => 'Принимать все',
|
||||
'N' => 'Отклонять все',
|
||||
'F' => 'Принимать только от друзей',
|
||||
);
|
||||
|
||||
|
||||
$lang->message_box = array(
|
||||
'R' => 'Полученные',
|
||||
'S' => 'Отправленные',
|
||||
'T' => 'Почтовый ящик',
|
||||
);
|
||||
|
||||
$lang->readed_date = "Дата прочтения сообщения";
|
||||
|
||||
$lang->sender = 'Отправитель';
|
||||
$lang->receiver = 'Получатель';
|
||||
$lang->friend_group = 'Группа Друзья';
|
||||
$lang->default_friend_group = 'Незарегистрированная группа';
|
||||
|
||||
$lang->cmd_send_message = 'Отправить сообщение';
|
||||
$lang->cmd_reply_message = 'Ответить';
|
||||
$lang->cmd_view_friend = 'Друзья';
|
||||
$lang->cmd_add_friend = 'Добавить в друзья';
|
||||
$lang->cmd_view_message_box = 'Личные сообщений';
|
||||
$lang->cmd_store = "Сохранить";
|
||||
$lang->cmd_add_friend_group = 'Добавить в группу друзей';
|
||||
$lang->cmd_rename_friend_group = 'Изменить имя группы друзей';
|
||||
|
||||
$lang->msg_no_message = 'Сообщений нет';
|
||||
$lang->message_received = 'У Вас новое сообщение';
|
||||
|
||||
$lang->msg_title_is_null = 'Пожалуйста, введите тему сообщения';
|
||||
$lang->msg_content_is_null = 'Пожалуйста, введите содержание';
|
||||
$lang->msg_allow_message_to_friend = "Сообщение не отправлено, поскольку являетесь пользователем, имеющим право посылать сообщения только друзьям";
|
||||
$lang->msg_disallow_message = 'Сообщение не отправлено, поскольку получатель запретил прием сообщений';
|
||||
$lang->about_allow_message = 'Вы можете установить режим принятия сообщений';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,50 +1,50 @@
|
|||
<?php
|
||||
/* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
||||
░░ * @File : common/lang/vi.lang.php ░░
|
||||
░░ * @Author : zero (zero@nzeo.com) ░░
|
||||
░░ * @Trans : Đào Đức Duy (ducduy.dao.vn@vietxe.net) ░░
|
||||
░░ * @Website: http://vietxe.net ░░
|
||||
░░ * @Brief : Vietnamese Language Pack (Only basic words are included here) ░░
|
||||
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ */
|
||||
|
||||
$lang->communication = 'Thông báo';
|
||||
$lang->about_communication = 'Module này thực hiện chức năng giao tiếp, tin nhắn hay bạn bè.';
|
||||
|
||||
$lang->allow_message = 'Nhận tin nhắn';
|
||||
$lang->allow_message_type = array(
|
||||
'Y' => 'Nhận tất cả',
|
||||
'N' => 'Từ chối tất cả',
|
||||
'F' => 'Chỉ bạn bè',
|
||||
);
|
||||
|
||||
$lang->message_box = array(
|
||||
'R' => 'Đã nhận',
|
||||
'S' => 'Gửi',
|
||||
'T' => 'Hòm thư',
|
||||
);
|
||||
$lang->readed_date = "Ngày đọc";
|
||||
|
||||
$lang->sender = 'Người gửi';
|
||||
$lang->receiver = 'Người nhận';
|
||||
$lang->friend_group = 'Nhóm bạn';
|
||||
$lang->default_friend_group = 'Nhóm mặc định';
|
||||
|
||||
$lang->cmd_send_message = 'Gửi tin nhắn';
|
||||
$lang->cmd_reply_message = 'Trả lời tin nhắn';
|
||||
$lang->cmd_view_friend = 'Bạn bè';
|
||||
$lang->cmd_add_friend = 'Thêm bạn';
|
||||
$lang->cmd_view_message_box = 'Hộp tin nhắn';
|
||||
$lang->cmd_store = "Lưu";
|
||||
$lang->cmd_add_friend_group = 'Thêm nhóm bạn';
|
||||
$lang->cmd_rename_friend_group = 'Sử tên nhóm';
|
||||
|
||||
$lang->msg_no_message = 'Không có tin nhắn nào.';
|
||||
$lang->message_received = 'Bạn có tin nhắn mới.';
|
||||
|
||||
$lang->msg_title_is_null = 'Xin vui lòng nhập tiêu đề của tin nhắn.';
|
||||
$lang->msg_content_is_null = 'Xin vui lòng nhập nội dung.';
|
||||
$lang->msg_allow_message_to_friend = "Không thể gửi vì người nhận chỉ chấp nhận những tin nhắn từ bạn bè của họ.";
|
||||
$lang->msg_disallow_message = 'Không thể gửi vì người nhận đã từ chối nhận tin nhắn.';
|
||||
|
||||
$lang->about_allow_message = 'Bạn có thể đồng ý nhận tin nhắn.';
|
||||
?>
|
||||
<?php
|
||||
/* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
||||
░░ * @File : common/lang/vi.lang.php ░░
|
||||
░░ * @Author : NHN (developers@xpressengine.com) ░░
|
||||
░░ * @Trans : Đào Đức Duy (ducduy.dao.vn@vietxe.net) ░░
|
||||
░░ * @Website: http://vietxe.net ░░
|
||||
░░ * @Brief : Vietnamese Language Pack (Only basic words are included here) ░░
|
||||
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ */
|
||||
|
||||
$lang->communication = 'Thông báo';
|
||||
$lang->about_communication = 'Module này thực hiện chức năng giao tiếp, tin nhắn hay bạn bè.';
|
||||
|
||||
$lang->allow_message = 'Nhận tin nhắn';
|
||||
$lang->allow_message_type = array(
|
||||
'Y' => 'Nhận tất cả',
|
||||
'N' => 'Từ chối tất cả',
|
||||
'F' => 'Chỉ bạn bè',
|
||||
);
|
||||
|
||||
$lang->message_box = array(
|
||||
'R' => 'Đã nhận',
|
||||
'S' => 'Gửi',
|
||||
'T' => 'Hòm thư',
|
||||
);
|
||||
$lang->readed_date = "Ngày đọc";
|
||||
|
||||
$lang->sender = 'Người gửi';
|
||||
$lang->receiver = 'Người nhận';
|
||||
$lang->friend_group = 'Nhóm bạn';
|
||||
$lang->default_friend_group = 'Nhóm mặc định';
|
||||
|
||||
$lang->cmd_send_message = 'Gửi tin nhắn';
|
||||
$lang->cmd_reply_message = 'Trả lời tin nhắn';
|
||||
$lang->cmd_view_friend = 'Bạn bè';
|
||||
$lang->cmd_add_friend = 'Thêm bạn';
|
||||
$lang->cmd_view_message_box = 'Hộp tin nhắn';
|
||||
$lang->cmd_store = "Lưu";
|
||||
$lang->cmd_add_friend_group = 'Thêm nhóm bạn';
|
||||
$lang->cmd_rename_friend_group = 'Sử tên nhóm';
|
||||
|
||||
$lang->msg_no_message = 'Không có tin nhắn nào.';
|
||||
$lang->message_received = 'Bạn có tin nhắn mới.';
|
||||
|
||||
$lang->msg_title_is_null = 'Xin vui lòng nhập tiêu đề của tin nhắn.';
|
||||
$lang->msg_content_is_null = 'Xin vui lòng nhập nội dung.';
|
||||
$lang->msg_allow_message_to_friend = "Không thể gửi vì người nhận chỉ chấp nhận những tin nhắn từ bạn bè của họ.";
|
||||
$lang->msg_disallow_message = 'Không thể gửi vì người nhận đã từ chối nhận tin nhắn.';
|
||||
|
||||
$lang->about_allow_message = 'Bạn có thể đồng ý nhận tin nhắn.';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,49 +1,49 @@
|
|||
<?php
|
||||
/**
|
||||
* @file zh-CN.lang.php
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief 简体中文语言包 (只收录基本内容)
|
||||
**/
|
||||
|
||||
$lang->communication = '会员交流';
|
||||
$lang->about_communication = '管理在线会员间短信息及好友功能的模块。';
|
||||
|
||||
$lang->allow_message = '接收短消息';
|
||||
$lang->allow_message_type = array(
|
||||
'Y' => '全部接收',
|
||||
'N' => '拒收',
|
||||
'F' => '只允许好友',
|
||||
);
|
||||
|
||||
$lang->message_box = array(
|
||||
'R' => '收件箱',
|
||||
'S' => '发件箱',
|
||||
'T' => '保管箱',
|
||||
);
|
||||
|
||||
$lang->readed_date = "阅读日期";
|
||||
|
||||
$lang->sender = '寄件人';
|
||||
$lang->receiver = '收件人';
|
||||
$lang->friend_group = '好友组';
|
||||
$lang->default_friend_group = '组未指定';
|
||||
|
||||
$lang->cmd_send_message = '发送短消息';
|
||||
$lang->cmd_reply_message = '回复短消息';
|
||||
$lang->cmd_view_friend = '我的好友';
|
||||
$lang->cmd_add_friend = '加为好友';
|
||||
$lang->cmd_view_message_box = '短信箱';
|
||||
$lang->cmd_store = "保管";
|
||||
$lang->cmd_add_friend_group = '添加好友组';
|
||||
$lang->cmd_rename_friend_group = '修改好友组名称';
|
||||
|
||||
$lang->msg_no_message = '没有短消息。';
|
||||
$lang->message_received = '您有新消息。';
|
||||
|
||||
$lang->msg_title_is_null = '请输入短消息标题。';
|
||||
$lang->msg_content_is_null = '请输入内容。';
|
||||
$lang->msg_allow_message_to_friend = '因其为只允许接收好友短消息的用户,所以不能发送短消息。';
|
||||
$lang->msg_disallow_message = '因其为拒绝接收短消息的用户,所以不能发送短消息。';
|
||||
|
||||
$lang->about_allow_message = '可以选择短消息接收与否。';
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file zh-CN.lang.php
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief 简体中文语言包 (只收录基本内容)
|
||||
**/
|
||||
|
||||
$lang->communication = '会员交流';
|
||||
$lang->about_communication = '管理在线会员间短信息及好友功能的模块。';
|
||||
|
||||
$lang->allow_message = '接收短消息';
|
||||
$lang->allow_message_type = array(
|
||||
'Y' => '全部接收',
|
||||
'N' => '拒收',
|
||||
'F' => '只允许好友',
|
||||
);
|
||||
|
||||
$lang->message_box = array(
|
||||
'R' => '收件箱',
|
||||
'S' => '发件箱',
|
||||
'T' => '保管箱',
|
||||
);
|
||||
|
||||
$lang->readed_date = "阅读日期";
|
||||
|
||||
$lang->sender = '寄件人';
|
||||
$lang->receiver = '收件人';
|
||||
$lang->friend_group = '好友组';
|
||||
$lang->default_friend_group = '组未指定';
|
||||
|
||||
$lang->cmd_send_message = '发送短消息';
|
||||
$lang->cmd_reply_message = '回复短消息';
|
||||
$lang->cmd_view_friend = '我的好友';
|
||||
$lang->cmd_add_friend = '加为好友';
|
||||
$lang->cmd_view_message_box = '短信箱';
|
||||
$lang->cmd_store = "保管";
|
||||
$lang->cmd_add_friend_group = '添加好友组';
|
||||
$lang->cmd_rename_friend_group = '修改好友组名称';
|
||||
|
||||
$lang->msg_no_message = '没有短消息。';
|
||||
$lang->message_received = '您有新消息。';
|
||||
|
||||
$lang->msg_title_is_null = '请输入短消息标题。';
|
||||
$lang->msg_content_is_null = '请输入内容。';
|
||||
$lang->msg_allow_message_to_friend = '因其为只允许接收好友短消息的用户,所以不能发送短消息。';
|
||||
$lang->msg_disallow_message = '因其为拒绝接收短消息的用户,所以不能发送短消息。';
|
||||
|
||||
$lang->about_allow_message = '可以选择短消息接收与否。';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/communication/lang/zh-TW.lang.php
|
||||
* @author zero (zero@nzeo.com) 翻譯:royallin
|
||||
* @author NHN (developers@xpressengine.com) 翻譯:royallin
|
||||
* @brief 交流(communication)模組正體中文語言
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,119 +1,111 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<skin version="0.2">
|
||||
<title xml:lang="ko">기본 스킨</title>
|
||||
<title xml:lang="zh-CN">默认皮肤</title>
|
||||
<title xml:lang="jp">基本スキン</title>
|
||||
<title xml:lang="en">Default Skin</title>
|
||||
<title xml:lang="vi">Skin Mặc định</title>
|
||||
<title xml:lang="es">Por defecto piel</title>
|
||||
<title xml:lang="ru">기본 스킨</title>
|
||||
<title xml:lang="zh-TW">預設面板</title>
|
||||
<description xml:lang="ko">
|
||||
디자인 : 서기정 (http://blog.naver.com/addcozy)
|
||||
HTML/CSS : 정찬명 (http://naradesign.net)
|
||||
</description>
|
||||
<description xml:lang="zh-CN">
|
||||
设计 : Ki-Jeong Seo (http://blog.naver.com/addcozy)
|
||||
HTML/CSS : Chan-Myung Jeong (http://naradesign.net)
|
||||
</description>
|
||||
<description xml:lang="jp">
|
||||
デザイン:Ki-Jeong Seo (http://blog.naver.com/addcozy)
|
||||
HTML/CSS:Chan-Myung Jeong (http://naradesign.net)
|
||||
</description>
|
||||
<description xml:lang="en">
|
||||
Design : Ki-Jeong Seo (http://blog.naver.com/addcozy)
|
||||
HTML/CSS : Chan-Myung Jeong (http://naradesign.net)
|
||||
</description>
|
||||
<description xml:lang="vi">
|
||||
Thiết kế: Ki-Jeong Seo (http://blog.naver.com/addcozy)
|
||||
HTML/CSS : Chan-Myung Jeong (http://naradesign.net)
|
||||
</description>
|
||||
<description xml:lang="es">
|
||||
Diseño: Ki-Jeong Seo (http://blog.naver.com/addcozy)
|
||||
HTML / CSS: Jeong Chan-Myung (http://naradesign.net)
|
||||
</description>
|
||||
<description xml:lang="ru">
|
||||
Дизайн: Ги Чен Се (http://blog.naver.com/addcozy)
|
||||
HTML / CSS: Чен-Чен Мен (http://naradesign.net)
|
||||
</description>
|
||||
<description xml:lang="zh-TW">
|
||||
設計 : Ki-Jeong Seo (http://blog.naver.com/addcozy)
|
||||
HTML/CSS : Chan-Myung Jeong (http://naradesign.net)
|
||||
</description>
|
||||
<version>0.1</version>
|
||||
<date>2008-05-28</date>
|
||||
|
||||
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
|
||||
<name xml:lang="ko">(주)NHN</name>
|
||||
<name xml:lang="jp">(株)NHN</name>
|
||||
<name xml:lang="zh-CN">(株)NHN</name>
|
||||
<name xml:lang="en">NHN Corp</name>
|
||||
<name xml:lang="vi">NHN Corp</name>
|
||||
<name xml:lang="es">NHN Corp</name>
|
||||
<name xml:lang="ru">NHN Корп</name>
|
||||
<name xml:lang="zh-TW">NHN Corp</name>
|
||||
</author>
|
||||
|
||||
<colorset>
|
||||
<color name="white" src="screenshot/white.gif">
|
||||
<title xml:lang="ko">기본</title>
|
||||
<title xml:lang="zh-CN">默认</title>
|
||||
<title xml:lang="jp">デフォルト</title>
|
||||
<title xml:lang="en">default</title>
|
||||
<title xml:lang="vi">Mặc định</title>
|
||||
<title xml:lang="es">Por defecto</title>
|
||||
<title xml:lang="ru">умолчанию</title>
|
||||
<title xml:lang="zh-TW">預設</title>
|
||||
</color>
|
||||
<color name="cyan" src="screenshot/cyan.gif">
|
||||
<title xml:lang="ko">청록색</title>
|
||||
<title xml:lang="jp">青緑</title>
|
||||
<title xml:lang="zh-CN">青绿色</title>
|
||||
<title xml:lang="en">cyan</title>
|
||||
<title xml:lang="vi">Cyan</title>
|
||||
<title xml:lang="es">Cian</title>
|
||||
<title xml:lang="ru">бирюзовый</title>
|
||||
<title xml:lang="zh-TW">青綠色</title>
|
||||
</color>
|
||||
<color name="green" src="screenshot/green.gif">
|
||||
<title xml:lang="ko">초록색</title>
|
||||
<title xml:lang="jp">緑</title>
|
||||
<title xml:lang="zh-CN">绿色</title>
|
||||
<title xml:lang="en">green</title>
|
||||
<title xml:lang="vi">Green</title>
|
||||
<title xml:lang="es">Verde</title>
|
||||
<title xml:lang="ru">зеленый</title>
|
||||
<title xml:lang="zh-TW">綠色</title>
|
||||
</color>
|
||||
<color name="red" src="screenshot/red.gif">
|
||||
<title xml:lang="ko">빨간색</title>
|
||||
<title xml:lang="jp">赤</title>
|
||||
<title xml:lang="zh-CN">红色</title>
|
||||
<title xml:lang="en">red</title>
|
||||
<title xml:lang="vi">Red</title>
|
||||
<title xml:lang="es">Roja</title>
|
||||
<title xml:lang="ru">красный</title>
|
||||
<title xml:lang="zh-TW">紅色</title>
|
||||
</color>
|
||||
<color name="purple" src="screenshot/purple.gif">
|
||||
<title xml:lang="ko">보라색</title>
|
||||
<title xml:lang="jp">紫</title>
|
||||
<title xml:lang="zh-CN">紫色</title>
|
||||
<title xml:lang="en">purple</title>
|
||||
<title xml:lang="vi">Purple</title>
|
||||
<title xml:lang="es">Púrpura</title>
|
||||
<title xml:lang="ru">Лиловый</title>
|
||||
<title xml:lang="zh-TW">紫色</title>
|
||||
</color>
|
||||
<color name="black" src="screenshot/black.gif">
|
||||
<title xml:lang="ko">검은색</title>
|
||||
<title xml:lang="jp">黒</title>
|
||||
<title xml:lang="en">Black</title>
|
||||
<title xml:lang="vi">Black</title>
|
||||
<title xml:lang="ru">Черного</title>
|
||||
<title xml:lang="es">Negro</title>
|
||||
<title xml:lang="zh-CN">黑色</title>
|
||||
<title xml:lang="zh-TW">黑色</title>
|
||||
</color>
|
||||
</colorset>
|
||||
</skin>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<skin version="0.2">
|
||||
<title xml:lang="ko">기본 스킨</title>
|
||||
<title xml:lang="zh-CN">默认皮肤</title>
|
||||
<title xml:lang="jp">基本スキン</title>
|
||||
<title xml:lang="en">Default Skin</title>
|
||||
<title xml:lang="vi">Skin Mặc định</title>
|
||||
<title xml:lang="es">Por defecto piel</title>
|
||||
<title xml:lang="ru">기본 스킨</title>
|
||||
<title xml:lang="zh-TW">預設面板</title>
|
||||
<description xml:lang="ko">
|
||||
NHN (developers@xpressengine.com)
|
||||
</description>
|
||||
<description xml:lang="zh-CN">
|
||||
NHN (developers@xpressengine.com)
|
||||
</description>
|
||||
<description xml:lang="jp">
|
||||
NHN (developers@xpressengine.com)
|
||||
</description>
|
||||
<description xml:lang="en">
|
||||
NHN (developers@xpressengine.com)
|
||||
</description>
|
||||
<description xml:lang="vi">
|
||||
NHN (developers@xpressengine.com)
|
||||
</description>
|
||||
<description xml:lang="es">
|
||||
NHN (developers@xpressengine.com)
|
||||
</description>
|
||||
<description xml:lang="ru">
|
||||
NHN (developers@xpressengine.com)
|
||||
</description>
|
||||
<description xml:lang="zh-TW">
|
||||
NHN (developers@xpressengine.com)
|
||||
</description>
|
||||
<version>0.1</version>
|
||||
<date>2008-05-28</date>
|
||||
|
||||
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
|
||||
<name xml:lang="ko">NHN</name>
|
||||
<name xml:lang="jp">NHN</name>
|
||||
<name xml:lang="zh-CN">NHN</name>
|
||||
<name xml:lang="en">NHN</name>
|
||||
<name xml:lang="vi">NHN</name>
|
||||
<name xml:lang="es">NHN</name>
|
||||
<name xml:lang="ru">NHN</name>
|
||||
<name xml:lang="zh-TW">NHN</name>
|
||||
</author>
|
||||
|
||||
<colorset>
|
||||
<color name="white" src="screenshot/white.gif">
|
||||
<title xml:lang="ko">기본</title>
|
||||
<title xml:lang="zh-CN">默认</title>
|
||||
<title xml:lang="jp">デフォルト</title>
|
||||
<title xml:lang="en">default</title>
|
||||
<title xml:lang="vi">Mặc định</title>
|
||||
<title xml:lang="es">Por defecto</title>
|
||||
<title xml:lang="ru">умолчанию</title>
|
||||
<title xml:lang="zh-TW">預設</title>
|
||||
</color>
|
||||
<color name="cyan" src="screenshot/cyan.gif">
|
||||
<title xml:lang="ko">청록색</title>
|
||||
<title xml:lang="jp">青緑</title>
|
||||
<title xml:lang="zh-CN">青绿色</title>
|
||||
<title xml:lang="en">cyan</title>
|
||||
<title xml:lang="vi">Cyan</title>
|
||||
<title xml:lang="es">Cian</title>
|
||||
<title xml:lang="ru">бирюзовый</title>
|
||||
<title xml:lang="zh-TW">青綠色</title>
|
||||
</color>
|
||||
<color name="green" src="screenshot/green.gif">
|
||||
<title xml:lang="ko">초록색</title>
|
||||
<title xml:lang="jp">緑</title>
|
||||
<title xml:lang="zh-CN">绿色</title>
|
||||
<title xml:lang="en">green</title>
|
||||
<title xml:lang="vi">Green</title>
|
||||
<title xml:lang="es">Verde</title>
|
||||
<title xml:lang="ru">зеленый</title>
|
||||
<title xml:lang="zh-TW">綠色</title>
|
||||
</color>
|
||||
<color name="red" src="screenshot/red.gif">
|
||||
<title xml:lang="ko">빨간색</title>
|
||||
<title xml:lang="jp">赤</title>
|
||||
<title xml:lang="zh-CN">红色</title>
|
||||
<title xml:lang="en">red</title>
|
||||
<title xml:lang="vi">Red</title>
|
||||
<title xml:lang="es">Roja</title>
|
||||
<title xml:lang="ru">красный</title>
|
||||
<title xml:lang="zh-TW">紅色</title>
|
||||
</color>
|
||||
<color name="purple" src="screenshot/purple.gif">
|
||||
<title xml:lang="ko">보라색</title>
|
||||
<title xml:lang="jp">紫</title>
|
||||
<title xml:lang="zh-CN">紫色</title>
|
||||
<title xml:lang="en">purple</title>
|
||||
<title xml:lang="vi">Purple</title>
|
||||
<title xml:lang="es">Púrpura</title>
|
||||
<title xml:lang="ru">Лиловый</title>
|
||||
<title xml:lang="zh-TW">紫色</title>
|
||||
</color>
|
||||
<color name="black" src="screenshot/black.gif">
|
||||
<title xml:lang="ko">검은색</title>
|
||||
<title xml:lang="jp">黒</title>
|
||||
<title xml:lang="en">Black</title>
|
||||
<title xml:lang="vi">Black</title>
|
||||
<title xml:lang="ru">Черного</title>
|
||||
<title xml:lang="es">Negro</title>
|
||||
<title xml:lang="zh-CN">黑色</title>
|
||||
<title xml:lang="zh-TW">黑色</title>
|
||||
</color>
|
||||
</colorset>
|
||||
</skin>
|
||||
|
|
|
|||
|
|
@ -1,33 +1,33 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="0.2">
|
||||
<title xml:lang="ko">접속통계</title>
|
||||
<title xml:lang="zh-CN">访问统计</title>
|
||||
<title xml:lang="en">Counter</title>
|
||||
<title xml:lang="vi">Counter</title>
|
||||
<title xml:lang="es">Contador</title>
|
||||
<title xml:lang="jp">アクセスカウンター</title>
|
||||
<title xml:lang="ru">Базовый счетчик</title>
|
||||
<title xml:lang="zh-TW">基本統計</title>
|
||||
<description xml:lang="ko">기본 접속 통계 프로그램입니다.</description>
|
||||
<description xml:lang="zh-CN">默认访问统计程序。</description>
|
||||
<description xml:lang="en">Basic connection statistics program.</description>
|
||||
<description xml:lang="vi">Chương trình thống kê kết nối cơ bản.</description>
|
||||
<description xml:lang="es">Programa básico para la estadística de la conección.</description>
|
||||
<description xml:lang="jp">デフォルトアクセス統計のプログラムです。</description>
|
||||
<description xml:lang="ru">Базовая программа статистики подключений.</description>
|
||||
<description xml:lang="zh-TW">預設的統計程式。</description>
|
||||
<version>0.1</version>
|
||||
<date>2007-02-28</date>
|
||||
<category>statistics</category>
|
||||
|
||||
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
|
||||
<name xml:lang="ko">zero</name>
|
||||
<name xml:lang="zh-CN">zero</name>
|
||||
<name xml:lang="en">zero</name>
|
||||
<name xml:lang="es">zero</name>
|
||||
<name xml:lang="vi">zero</name>
|
||||
<name xml:lang="jp">zero</name>
|
||||
<name xml:lang="ru">zero</name>
|
||||
<name xml:lang="zh-TW">zero</name>
|
||||
</author>
|
||||
</module>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="0.2">
|
||||
<title xml:lang="ko">접속통계</title>
|
||||
<title xml:lang="zh-CN">访问统计</title>
|
||||
<title xml:lang="en">Counter</title>
|
||||
<title xml:lang="vi">Counter</title>
|
||||
<title xml:lang="es">Contador</title>
|
||||
<title xml:lang="jp">アクセスカウンター</title>
|
||||
<title xml:lang="ru">Базовый счетчик</title>
|
||||
<title xml:lang="zh-TW">基本統計</title>
|
||||
<description xml:lang="ko">기본 접속 통계 프로그램입니다.</description>
|
||||
<description xml:lang="zh-CN">默认访问统计程序。</description>
|
||||
<description xml:lang="en">Basic connection statistics program.</description>
|
||||
<description xml:lang="vi">Chương trình thống kê kết nối cơ bản.</description>
|
||||
<description xml:lang="es">Programa básico para la estadística de la conección.</description>
|
||||
<description xml:lang="jp">デフォルトアクセス統計のプログラムです。</description>
|
||||
<description xml:lang="ru">Базовая программа статистики подключений.</description>
|
||||
<description xml:lang="zh-TW">預設的統計程式。</description>
|
||||
<version>0.1</version>
|
||||
<date>2007-02-28</date>
|
||||
<category>statistics</category>
|
||||
|
||||
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
|
||||
<name xml:lang="ko">NHN</name>
|
||||
<name xml:lang="zh-CN">NHN</name>
|
||||
<name xml:lang="en">NHN</name>
|
||||
<name xml:lang="es">NHN</name>
|
||||
<name xml:lang="vi">NHN</name>
|
||||
<name xml:lang="jp">NHN</name>
|
||||
<name xml:lang="ru">NHN</name>
|
||||
<name xml:lang="zh-TW">NHN</name>
|
||||
</author>
|
||||
</module>
|
||||
|
|
|
|||
|
|
@ -1,50 +1,50 @@
|
|||
<?php
|
||||
/**
|
||||
* @class counterAdminView
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief counter 모듈의 Admin view class
|
||||
**/
|
||||
|
||||
class counterAdminView extends counter {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
// 템플릿 경로 지정
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 관리자 페이지 초기화면
|
||||
**/
|
||||
function dispCounterAdminIndex() {
|
||||
// 정해진 일자가 없으면 오늘자로 설정
|
||||
$selected_date = Context::get('selected_date');
|
||||
if(!$selected_date) $selected_date = date("Ymd");
|
||||
Context::set('selected_date', $selected_date);
|
||||
|
||||
// counter model 객체 생성
|
||||
$oCounterModel = &getModel('counter');
|
||||
|
||||
// 전체 카운터 및 지정된 일자의 현황 가져오기
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
$status = $oCounterModel->getStatus(array(0,$selected_date),$site_module_info->site_srl);
|
||||
Context::set('total_counter', $status[0]);
|
||||
Context::set('selected_day_counter', $status[$selected_date]);
|
||||
|
||||
// 시간, 일, 월, 년도별로 데이터 가져오기
|
||||
$type = Context::get('type');
|
||||
if(!$type) {
|
||||
$type = 'day';
|
||||
Context::set('type',$type);
|
||||
}
|
||||
$detail_status = $oCounterModel->getHourlyStatus($type, $selected_date, $site_module_info->site_srl);
|
||||
Context::set('detail_status', $detail_status);
|
||||
|
||||
// 표시
|
||||
$this->setTemplateFile('index');
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class counterAdminView
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief counter 모듈의 Admin view class
|
||||
**/
|
||||
|
||||
class counterAdminView extends counter {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
// 템플릿 경로 지정
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 관리자 페이지 초기화면
|
||||
**/
|
||||
function dispCounterAdminIndex() {
|
||||
// 정해진 일자가 없으면 오늘자로 설정
|
||||
$selected_date = Context::get('selected_date');
|
||||
if(!$selected_date) $selected_date = date("Ymd");
|
||||
Context::set('selected_date', $selected_date);
|
||||
|
||||
// counter model 객체 생성
|
||||
$oCounterModel = &getModel('counter');
|
||||
|
||||
// 전체 카운터 및 지정된 일자의 현황 가져오기
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
$status = $oCounterModel->getStatus(array(0,$selected_date),$site_module_info->site_srl);
|
||||
Context::set('total_counter', $status[0]);
|
||||
Context::set('selected_day_counter', $status[$selected_date]);
|
||||
|
||||
// 시간, 일, 월, 년도별로 데이터 가져오기
|
||||
$type = Context::get('type');
|
||||
if(!$type) {
|
||||
$type = 'day';
|
||||
Context::set('type',$type);
|
||||
}
|
||||
$detail_status = $oCounterModel->getHourlyStatus($type, $selected_date, $site_module_info->site_srl);
|
||||
Context::set('detail_status', $detail_status);
|
||||
|
||||
// 표시
|
||||
$this->setTemplateFile('index');
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,69 +1,69 @@
|
|||
<?php
|
||||
/**
|
||||
* @class counter
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief counter 모듈의 high class
|
||||
**/
|
||||
|
||||
class counter extends ModuleObject {
|
||||
|
||||
/**
|
||||
* @brief 설치시 추가 작업이 필요할시 구현
|
||||
**/
|
||||
function moduleInstall() {
|
||||
$oCounterController = &getController('counter');
|
||||
|
||||
// 0 일자로 기록될 전체 방문 기록 row 추가
|
||||
//$oCounterController->insertTotalStatus();
|
||||
|
||||
// 오늘자 row입력
|
||||
//$oCounterController->insertTodayStatus();
|
||||
|
||||
return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 설치가 이상이 없는지 체크하는 method
|
||||
**/
|
||||
function checkUpdate() {
|
||||
$db_info = Context::getDbInfo ();
|
||||
// 카운터에 site_srl추가
|
||||
$oDB = &DB::getInstance();
|
||||
if(!$oDB->isColumnExists('counter_log', 'site_srl')) return true;
|
||||
if ($db_info->db_type == 'cubrid') {
|
||||
if(!$oDB->isIndexExists('counter_log', $oDB->prefix.'counter_log_idx_site_counter_log')) return true;
|
||||
}
|
||||
else {
|
||||
if(!$oDB->isIndexExists('counter_log','idx_site_counter_log')) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 업데이트 실행
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
$db_info = Context::getDBInfo ();
|
||||
// 카운터에 site_srl추가
|
||||
$oDB = &DB::getInstance();
|
||||
if(!$oDB->isColumnExists('counter_log', 'site_srl'))
|
||||
$oDB->addColumn('counter_log','site_srl','number',11,0,true);
|
||||
if ($db_info->db_type == 'cubrid') {
|
||||
if(!$oDB->isIndexExists('counter_log',$oDB->prefix.'counter_log_idx_site_counter_log'))
|
||||
$oDB->addIndex('counter_log',$oDB->prefix.'counter_log_idx_site_counter_log',array('site_srl','ipaddress'),false);
|
||||
}
|
||||
else {
|
||||
if(!$oDB->isIndexExists('counter_log','idx_site_counter_log'))
|
||||
$oDB->addIndex('counter_log','idx_site_counter_log',array('site_srl','ipaddress'),false);
|
||||
}
|
||||
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 캐시 파일 재생성
|
||||
**/
|
||||
function recompileCache() {
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class counter
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief counter 모듈의 high class
|
||||
**/
|
||||
|
||||
class counter extends ModuleObject {
|
||||
|
||||
/**
|
||||
* @brief 설치시 추가 작업이 필요할시 구현
|
||||
**/
|
||||
function moduleInstall() {
|
||||
$oCounterController = &getController('counter');
|
||||
|
||||
// 0 일자로 기록될 전체 방문 기록 row 추가
|
||||
//$oCounterController->insertTotalStatus();
|
||||
|
||||
// 오늘자 row입력
|
||||
//$oCounterController->insertTodayStatus();
|
||||
|
||||
return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 설치가 이상이 없는지 체크하는 method
|
||||
**/
|
||||
function checkUpdate() {
|
||||
$db_info = Context::getDbInfo ();
|
||||
// 카운터에 site_srl추가
|
||||
$oDB = &DB::getInstance();
|
||||
if(!$oDB->isColumnExists('counter_log', 'site_srl')) return true;
|
||||
if ($db_info->db_type == 'cubrid') {
|
||||
if(!$oDB->isIndexExists('counter_log', $oDB->prefix.'counter_log_idx_site_counter_log')) return true;
|
||||
}
|
||||
else {
|
||||
if(!$oDB->isIndexExists('counter_log','idx_site_counter_log')) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 업데이트 실행
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
$db_info = Context::getDBInfo ();
|
||||
// 카운터에 site_srl추가
|
||||
$oDB = &DB::getInstance();
|
||||
if(!$oDB->isColumnExists('counter_log', 'site_srl'))
|
||||
$oDB->addColumn('counter_log','site_srl','number',11,0,true);
|
||||
if ($db_info->db_type == 'cubrid') {
|
||||
if(!$oDB->isIndexExists('counter_log',$oDB->prefix.'counter_log_idx_site_counter_log'))
|
||||
$oDB->addIndex('counter_log',$oDB->prefix.'counter_log_idx_site_counter_log',array('site_srl','ipaddress'),false);
|
||||
}
|
||||
else {
|
||||
if(!$oDB->isIndexExists('counter_log','idx_site_counter_log'))
|
||||
$oDB->addIndex('counter_log','idx_site_counter_log',array('site_srl','ipaddress'),false);
|
||||
}
|
||||
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 캐시 파일 재생성
|
||||
**/
|
||||
function recompileCache() {
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,145 +1,145 @@
|
|||
<?php
|
||||
/**
|
||||
* @class counterController
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief counter 모듈의 controller class
|
||||
**/
|
||||
|
||||
class counterController extends counter {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 카운터 기록
|
||||
**/
|
||||
function procCounterExecute() {
|
||||
$oDB = &DB::getInstance();
|
||||
$oDB->begin();
|
||||
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
$site_srl = (int)$site_module_info->site_srl;
|
||||
|
||||
// 로그를 검사
|
||||
$oCounterModel = &getModel('counter');
|
||||
|
||||
// 오늘자 row가 있는지 체크하여 없으면 등록
|
||||
if(!$oCounterModel->isInsertedTodayStatus($site_srl)) {
|
||||
$this->insertTodayStatus(0,$site_srl);
|
||||
|
||||
// 기존 row가 있으면 사용자 체크
|
||||
} else {
|
||||
|
||||
// 등록되어 있지 않은 아이피일 경우
|
||||
if(!$oCounterModel->isLogged($site_srl)) {
|
||||
// 로그 등록
|
||||
$this->insertLog($site_srl);
|
||||
|
||||
// unique 및 pageview 등록
|
||||
$this->insertUniqueVisitor($site_srl);
|
||||
} else {
|
||||
// pageview 등록
|
||||
$this->insertPageView($site_srl);
|
||||
}
|
||||
}
|
||||
|
||||
$oDB->commit();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 로그 등록
|
||||
**/
|
||||
function insertLog($site_srl=0) {
|
||||
$args->regdate = date("YmdHis");
|
||||
$args->user_agent = substr ($_SERVER['HTTP_USER_AGENT'], 0, 250);
|
||||
$args->site_srl = $site_srl;
|
||||
return executeQuery('counter.insertCounterLog', $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief unique visitor 등록
|
||||
**/
|
||||
function insertUniqueVisitor($site_srl=0) {
|
||||
if($site_srl) {
|
||||
$args->regdate = '0';
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('counter.updateSiteCounterUnique', $args);
|
||||
$args->regdate = date('Ymd');
|
||||
$output = executeQuery('counter.updateSiteCounterUnique', $args);
|
||||
} else {
|
||||
$args->regdate = '0';
|
||||
$output = executeQuery('counter.updateCounterUnique', $args);
|
||||
$args->regdate = date('Ymd');
|
||||
$output = executeQuery('counter.updateCounterUnique', $args);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief pageview 등록
|
||||
**/
|
||||
function insertPageView($site_srl=0) {
|
||||
if($site_srl) {
|
||||
$args->regdate = '0';
|
||||
$args->site_srl = $site_srl;
|
||||
executeQuery('counter.updateSiteCounterPageview', $args);
|
||||
$args->regdate = date('Ymd');
|
||||
executeQuery('counter.updateSiteCounterPageview', $args);
|
||||
} else {
|
||||
$args->regdate = '0';
|
||||
executeQuery('counter.updateCounterPageview', $args);
|
||||
$args->regdate = date('Ymd');
|
||||
executeQuery('counter.updateCounterPageview', $args);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 전체 카운터 status 추가
|
||||
**/
|
||||
function insertTotalStatus($site_srl=0) {
|
||||
$args->regdate = 0;
|
||||
if($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
executeQuery('counter.insertSiteTodayStatus', $args);
|
||||
} else {
|
||||
executeQuery('counter.insertTodayStatus', $args);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 오늘자 카운터 status 추가
|
||||
**/
|
||||
function insertTodayStatus($regdate = 0, $site_srl=0) {
|
||||
if($regdate) $args->regdate = $regdate;
|
||||
else $args->regdate = date("Ymd");
|
||||
if($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
$query_id = 'counter.insertSiteTodayStatus';
|
||||
|
||||
$u_args->site_srl = $site_srl; ///< 일별 row입력시 전체 row (regdate=0)도 같이 입력 시도
|
||||
executeQuery($query_id, $u_args);
|
||||
} else {
|
||||
$query_id = 'counter.insertTodayStatus';
|
||||
executeQuery($query_id); ///< 일별 row입력시 전체 row (regdate=0)도 같이 입력 시도
|
||||
}
|
||||
$output = executeQuery($query_id, $args);
|
||||
|
||||
// 로그 등록
|
||||
$this->insertLog($site_srl);
|
||||
|
||||
// unique 및 pageview 등록
|
||||
$this->insertUniqueVisitor($site_srl);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 특정 가상 사이트의 카운터 로그 삭제
|
||||
**/
|
||||
function deleteSiteCounterLogs($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
executeQuery('counter.deleteSiteCounter',$args);
|
||||
executeQuery('counter.deleteSiteCounterLog',$args);
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class counterController
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief counter 모듈의 controller class
|
||||
**/
|
||||
|
||||
class counterController extends counter {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 카운터 기록
|
||||
**/
|
||||
function procCounterExecute() {
|
||||
$oDB = &DB::getInstance();
|
||||
$oDB->begin();
|
||||
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
$site_srl = (int)$site_module_info->site_srl;
|
||||
|
||||
// 로그를 검사
|
||||
$oCounterModel = &getModel('counter');
|
||||
|
||||
// 오늘자 row가 있는지 체크하여 없으면 등록
|
||||
if(!$oCounterModel->isInsertedTodayStatus($site_srl)) {
|
||||
$this->insertTodayStatus(0,$site_srl);
|
||||
|
||||
// 기존 row가 있으면 사용자 체크
|
||||
} else {
|
||||
|
||||
// 등록되어 있지 않은 아이피일 경우
|
||||
if(!$oCounterModel->isLogged($site_srl)) {
|
||||
// 로그 등록
|
||||
$this->insertLog($site_srl);
|
||||
|
||||
// unique 및 pageview 등록
|
||||
$this->insertUniqueVisitor($site_srl);
|
||||
} else {
|
||||
// pageview 등록
|
||||
$this->insertPageView($site_srl);
|
||||
}
|
||||
}
|
||||
|
||||
$oDB->commit();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 로그 등록
|
||||
**/
|
||||
function insertLog($site_srl=0) {
|
||||
$args->regdate = date("YmdHis");
|
||||
$args->user_agent = substr ($_SERVER['HTTP_USER_AGENT'], 0, 250);
|
||||
$args->site_srl = $site_srl;
|
||||
return executeQuery('counter.insertCounterLog', $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief unique visitor 등록
|
||||
**/
|
||||
function insertUniqueVisitor($site_srl=0) {
|
||||
if($site_srl) {
|
||||
$args->regdate = '0';
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('counter.updateSiteCounterUnique', $args);
|
||||
$args->regdate = date('Ymd');
|
||||
$output = executeQuery('counter.updateSiteCounterUnique', $args);
|
||||
} else {
|
||||
$args->regdate = '0';
|
||||
$output = executeQuery('counter.updateCounterUnique', $args);
|
||||
$args->regdate = date('Ymd');
|
||||
$output = executeQuery('counter.updateCounterUnique', $args);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief pageview 등록
|
||||
**/
|
||||
function insertPageView($site_srl=0) {
|
||||
if($site_srl) {
|
||||
$args->regdate = '0';
|
||||
$args->site_srl = $site_srl;
|
||||
executeQuery('counter.updateSiteCounterPageview', $args);
|
||||
$args->regdate = date('Ymd');
|
||||
executeQuery('counter.updateSiteCounterPageview', $args);
|
||||
} else {
|
||||
$args->regdate = '0';
|
||||
executeQuery('counter.updateCounterPageview', $args);
|
||||
$args->regdate = date('Ymd');
|
||||
executeQuery('counter.updateCounterPageview', $args);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 전체 카운터 status 추가
|
||||
**/
|
||||
function insertTotalStatus($site_srl=0) {
|
||||
$args->regdate = 0;
|
||||
if($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
executeQuery('counter.insertSiteTodayStatus', $args);
|
||||
} else {
|
||||
executeQuery('counter.insertTodayStatus', $args);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 오늘자 카운터 status 추가
|
||||
**/
|
||||
function insertTodayStatus($regdate = 0, $site_srl=0) {
|
||||
if($regdate) $args->regdate = $regdate;
|
||||
else $args->regdate = date("Ymd");
|
||||
if($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
$query_id = 'counter.insertSiteTodayStatus';
|
||||
|
||||
$u_args->site_srl = $site_srl; ///< 일별 row입력시 전체 row (regdate=0)도 같이 입력 시도
|
||||
executeQuery($query_id, $u_args);
|
||||
} else {
|
||||
$query_id = 'counter.insertTodayStatus';
|
||||
executeQuery($query_id); ///< 일별 row입력시 전체 row (regdate=0)도 같이 입력 시도
|
||||
}
|
||||
$output = executeQuery($query_id, $args);
|
||||
|
||||
// 로그 등록
|
||||
$this->insertLog($site_srl);
|
||||
|
||||
// unique 및 pageview 등록
|
||||
$this->insertUniqueVisitor($site_srl);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 특정 가상 사이트의 카운터 로그 삭제
|
||||
**/
|
||||
function deleteSiteCounterLogs($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
executeQuery('counter.deleteSiteCounter',$args);
|
||||
executeQuery('counter.deleteSiteCounterLog',$args);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,201 +1,201 @@
|
|||
<?php
|
||||
/**
|
||||
* @class counterModel
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief counter 모듈의 Model class
|
||||
**/
|
||||
|
||||
class counterModel extends counter {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 로그 검사
|
||||
**/
|
||||
function isLogged($site_srl=0) {
|
||||
$args->regdate = date("Ymd");
|
||||
$args->ipaddress = $_SERVER['REMOTE_ADDR'];
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('counter.getCounterLog', $args);
|
||||
return $output->data->count?true:false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 오늘자 카운터 현황 row 있는지 체크
|
||||
**/
|
||||
function isInsertedTodayStatus($site_srl=0) {
|
||||
$args->regdate = date("Ymd");
|
||||
if($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('counter.getSiteTodayStatus', $args);
|
||||
} else {
|
||||
$output = executeQuery('counter.getTodayStatus', $args);
|
||||
}
|
||||
return $output->data->count?true:false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 특정 일의 접속 통계를 가져옴
|
||||
**/
|
||||
function getStatus($selected_date, $site_srl=0) {
|
||||
// 여러개의 날짜 로그를 가져올 경우
|
||||
if(is_array($selected_date)) {
|
||||
$date_count = count($selected_date);
|
||||
$args->regdate = implode(',',$selected_date);
|
||||
|
||||
// 단일 날짜의 로그를 가져올 경우
|
||||
} else {
|
||||
if(strlen($selected_date)==8) $selected_date = $selected_date;
|
||||
$args->regdate = $selected_date;
|
||||
}
|
||||
|
||||
if($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('counter.getSiteCounterStatusDays', $args);
|
||||
} else {
|
||||
$output = executeQuery('counter.getCounterStatusDays', $args);
|
||||
}
|
||||
$status = $output->data;
|
||||
|
||||
if(!is_array($selected_date)) return $status;
|
||||
|
||||
if(!is_array($status)) $status = array($status);
|
||||
unset($output);
|
||||
|
||||
foreach($status as $key => $val) {
|
||||
$output[substr($val->regdate,0,8)] = $val;
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 지정된 일자의 시간대별 로그 가져오기
|
||||
**/
|
||||
function getHourlyStatus($type='hour', $selected_date, $site_srl=0) {
|
||||
$max = 0;
|
||||
$sum = 0;
|
||||
switch($type) {
|
||||
case 'year' :
|
||||
// 카운터 시작일 구함
|
||||
if($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('counter.getSiteStartLogDate', $args);
|
||||
} else {
|
||||
$output = executeQuery('counter.getStartLogDate');
|
||||
}
|
||||
$start_year = substr($output->data->regdate,0,4);
|
||||
if(!$start_year) $start_year = date("Y");
|
||||
for($i=$start_year;$i<=date("Y");$i++) {
|
||||
unset($args);
|
||||
$args->start_date = sprintf('%04d0000', $i);
|
||||
$args->end_date = sprintf('%04d1231', $i);
|
||||
if($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('counter.getSiteCounterStatus', $args);
|
||||
} else {
|
||||
$output = executeQuery('counter.getCounterStatus', $args);
|
||||
}
|
||||
$count = (int)$output->data->unique_visitor;
|
||||
$status->list[$i] = $count;
|
||||
if($count>$max) $max = $count;
|
||||
$sum += $count;
|
||||
}
|
||||
break;
|
||||
case 'week' :
|
||||
$time = strtotime($selected_date);
|
||||
$w = date("D");
|
||||
while(date("D",$time) != "Sun") {
|
||||
$time += 60*60*24;
|
||||
}
|
||||
$time -= 60*60*24;
|
||||
while(date("D",$time)!="Sun") {
|
||||
$thisWeek[] = date("Ymd",$time);
|
||||
$time -= 60*60*24;
|
||||
}
|
||||
$thisWeek[] = date("Ymd",$time);
|
||||
asort($thisWeek);
|
||||
foreach($thisWeek as $day) {
|
||||
unset($args);
|
||||
$args->start_date = $day;
|
||||
$args->end_date = $day;
|
||||
if($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('counter.getSiteCounterStatus', $args);
|
||||
} else {
|
||||
$output = executeQuery('counter.getCounterStatus', $args);
|
||||
}
|
||||
$count = (int)$output->data->unique_visitor;
|
||||
$status->list[$day] = (int)$count;
|
||||
if($count>$max) $max = $count;
|
||||
$sum += $count;
|
||||
}
|
||||
break;
|
||||
case 'month' :
|
||||
$year = substr($selected_date, 0, 4);
|
||||
for($i=1;$i<=12;$i++) {
|
||||
unset($args);
|
||||
$args->start_date = sprintf('%04d%02d00', $year, $i);
|
||||
$args->end_date = sprintf('%04d%02d31', $year, $i);
|
||||
if($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('counter.getSiteCounterStatus', $args);
|
||||
} else {
|
||||
$output = executeQuery('counter.getCounterStatus', $args);
|
||||
}
|
||||
$count = (int)$output->data->unique_visitor;
|
||||
$status->list[$i] = (int)$count;
|
||||
if($count>$max) $max = $count;
|
||||
$sum += $count;
|
||||
}
|
||||
break;
|
||||
case 'hour' :
|
||||
for($i=0;$i<24;$i++) {
|
||||
unset($args);
|
||||
$args->start_date = sprintf('%08d%02d0000', $selected_date, $i);
|
||||
$args->end_date = sprintf('%08d%02d5959', $selected_date, $i);
|
||||
if($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('counter.getSiteCounterLogStatus', $args);
|
||||
} else {
|
||||
$args->site_srl = 0;
|
||||
$output = executeQuery('counter.getCounterLogStatus', $args);
|
||||
}
|
||||
$count = (int)$output->data->count;
|
||||
$status->list[$i] = $count;
|
||||
if($count>$max) $max = $count;
|
||||
$sum += $count;
|
||||
}
|
||||
break;
|
||||
default :
|
||||
$year = substr($selected_date, 0, 4);
|
||||
$month = substr($selected_date, 4, 2);
|
||||
$end_day = date('t', mktime(0,0,0,$month,1,$year));
|
||||
for($i=1;$i<=$end_day;$i++) {
|
||||
unset($args);
|
||||
$args->start_date = sprintf('%04d%02d%02d', $year, $month, $i);
|
||||
$args->end_date = sprintf('%04d%02d%02d', $year, $month, $i);
|
||||
if($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('counter.getSiteCounterStatus', $args);
|
||||
} else {
|
||||
$output = executeQuery('counter.getCounterStatus', $args);
|
||||
}
|
||||
$count = (int)$output->data->unique_visitor;
|
||||
$status->list[$i] = $count;
|
||||
if($count>$max) $max = $count;
|
||||
$sum += $count;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
$status->max = $max;
|
||||
$status->sum = $sum;
|
||||
return $status;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class counterModel
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief counter 모듈의 Model class
|
||||
**/
|
||||
|
||||
class counterModel extends counter {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 로그 검사
|
||||
**/
|
||||
function isLogged($site_srl=0) {
|
||||
$args->regdate = date("Ymd");
|
||||
$args->ipaddress = $_SERVER['REMOTE_ADDR'];
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('counter.getCounterLog', $args);
|
||||
return $output->data->count?true:false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 오늘자 카운터 현황 row 있는지 체크
|
||||
**/
|
||||
function isInsertedTodayStatus($site_srl=0) {
|
||||
$args->regdate = date("Ymd");
|
||||
if($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('counter.getSiteTodayStatus', $args);
|
||||
} else {
|
||||
$output = executeQuery('counter.getTodayStatus', $args);
|
||||
}
|
||||
return $output->data->count?true:false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 특정 일의 접속 통계를 가져옴
|
||||
**/
|
||||
function getStatus($selected_date, $site_srl=0) {
|
||||
// 여러개의 날짜 로그를 가져올 경우
|
||||
if(is_array($selected_date)) {
|
||||
$date_count = count($selected_date);
|
||||
$args->regdate = implode(',',$selected_date);
|
||||
|
||||
// 단일 날짜의 로그를 가져올 경우
|
||||
} else {
|
||||
if(strlen($selected_date)==8) $selected_date = $selected_date;
|
||||
$args->regdate = $selected_date;
|
||||
}
|
||||
|
||||
if($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('counter.getSiteCounterStatusDays', $args);
|
||||
} else {
|
||||
$output = executeQuery('counter.getCounterStatusDays', $args);
|
||||
}
|
||||
$status = $output->data;
|
||||
|
||||
if(!is_array($selected_date)) return $status;
|
||||
|
||||
if(!is_array($status)) $status = array($status);
|
||||
unset($output);
|
||||
|
||||
foreach($status as $key => $val) {
|
||||
$output[substr($val->regdate,0,8)] = $val;
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 지정된 일자의 시간대별 로그 가져오기
|
||||
**/
|
||||
function getHourlyStatus($type='hour', $selected_date, $site_srl=0) {
|
||||
$max = 0;
|
||||
$sum = 0;
|
||||
switch($type) {
|
||||
case 'year' :
|
||||
// 카운터 시작일 구함
|
||||
if($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('counter.getSiteStartLogDate', $args);
|
||||
} else {
|
||||
$output = executeQuery('counter.getStartLogDate');
|
||||
}
|
||||
$start_year = substr($output->data->regdate,0,4);
|
||||
if(!$start_year) $start_year = date("Y");
|
||||
for($i=$start_year;$i<=date("Y");$i++) {
|
||||
unset($args);
|
||||
$args->start_date = sprintf('%04d0000', $i);
|
||||
$args->end_date = sprintf('%04d1231', $i);
|
||||
if($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('counter.getSiteCounterStatus', $args);
|
||||
} else {
|
||||
$output = executeQuery('counter.getCounterStatus', $args);
|
||||
}
|
||||
$count = (int)$output->data->unique_visitor;
|
||||
$status->list[$i] = $count;
|
||||
if($count>$max) $max = $count;
|
||||
$sum += $count;
|
||||
}
|
||||
break;
|
||||
case 'week' :
|
||||
$time = strtotime($selected_date);
|
||||
$w = date("D");
|
||||
while(date("D",$time) != "Sun") {
|
||||
$time += 60*60*24;
|
||||
}
|
||||
$time -= 60*60*24;
|
||||
while(date("D",$time)!="Sun") {
|
||||
$thisWeek[] = date("Ymd",$time);
|
||||
$time -= 60*60*24;
|
||||
}
|
||||
$thisWeek[] = date("Ymd",$time);
|
||||
asort($thisWeek);
|
||||
foreach($thisWeek as $day) {
|
||||
unset($args);
|
||||
$args->start_date = $day;
|
||||
$args->end_date = $day;
|
||||
if($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('counter.getSiteCounterStatus', $args);
|
||||
} else {
|
||||
$output = executeQuery('counter.getCounterStatus', $args);
|
||||
}
|
||||
$count = (int)$output->data->unique_visitor;
|
||||
$status->list[$day] = (int)$count;
|
||||
if($count>$max) $max = $count;
|
||||
$sum += $count;
|
||||
}
|
||||
break;
|
||||
case 'month' :
|
||||
$year = substr($selected_date, 0, 4);
|
||||
for($i=1;$i<=12;$i++) {
|
||||
unset($args);
|
||||
$args->start_date = sprintf('%04d%02d00', $year, $i);
|
||||
$args->end_date = sprintf('%04d%02d31', $year, $i);
|
||||
if($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('counter.getSiteCounterStatus', $args);
|
||||
} else {
|
||||
$output = executeQuery('counter.getCounterStatus', $args);
|
||||
}
|
||||
$count = (int)$output->data->unique_visitor;
|
||||
$status->list[$i] = (int)$count;
|
||||
if($count>$max) $max = $count;
|
||||
$sum += $count;
|
||||
}
|
||||
break;
|
||||
case 'hour' :
|
||||
for($i=0;$i<24;$i++) {
|
||||
unset($args);
|
||||
$args->start_date = sprintf('%08d%02d0000', $selected_date, $i);
|
||||
$args->end_date = sprintf('%08d%02d5959', $selected_date, $i);
|
||||
if($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('counter.getSiteCounterLogStatus', $args);
|
||||
} else {
|
||||
$args->site_srl = 0;
|
||||
$output = executeQuery('counter.getCounterLogStatus', $args);
|
||||
}
|
||||
$count = (int)$output->data->count;
|
||||
$status->list[$i] = $count;
|
||||
if($count>$max) $max = $count;
|
||||
$sum += $count;
|
||||
}
|
||||
break;
|
||||
default :
|
||||
$year = substr($selected_date, 0, 4);
|
||||
$month = substr($selected_date, 4, 2);
|
||||
$end_day = date('t', mktime(0,0,0,$month,1,$year));
|
||||
for($i=1;$i<=$end_day;$i++) {
|
||||
unset($args);
|
||||
$args->start_date = sprintf('%04d%02d%02d', $year, $month, $i);
|
||||
$args->end_date = sprintf('%04d%02d%02d', $year, $month, $i);
|
||||
if($site_srl) {
|
||||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('counter.getSiteCounterStatus', $args);
|
||||
} else {
|
||||
$output = executeQuery('counter.getCounterStatus', $args);
|
||||
}
|
||||
$count = (int)$output->data->unique_visitor;
|
||||
$status->list[$i] = $count;
|
||||
if($count>$max) $max = $count;
|
||||
$sum += $count;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
$status->max = $max;
|
||||
$status->sum = $sum;
|
||||
return $status;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,25 +1,25 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/counter/lang/en.lang.php
|
||||
* @author zero <zero@nzeo.com>
|
||||
* @brief English Language Pack (Only basic contents are listed)
|
||||
**/
|
||||
|
||||
$lang->counter = "Counter";
|
||||
$lang->cmd_select_date = 'Select Date';
|
||||
$lang->cmd_select_counter_type = array(
|
||||
'hour' => 'By Hour',
|
||||
'day' => 'By Day',
|
||||
'month' => 'By Month',
|
||||
'year' => 'By Year',
|
||||
);
|
||||
|
||||
$lang->total_counter = 'Total Status';
|
||||
$lang->selected_day_counter = 'Status of Selected Day';
|
||||
|
||||
$lang->unique_visitor = 'Visitors';
|
||||
$lang->pageview = 'Pageview';
|
||||
|
||||
$lang->today = 'today';
|
||||
$lang->yesterday = 'yesterday';
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file modules/counter/lang/en.lang.php
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief English Language Pack (Only basic contents are listed)
|
||||
**/
|
||||
|
||||
$lang->counter = "Counter";
|
||||
$lang->cmd_select_date = 'Select Date';
|
||||
$lang->cmd_select_counter_type = array(
|
||||
'hour' => 'By Hour',
|
||||
'day' => 'By Day',
|
||||
'month' => 'By Month',
|
||||
'year' => 'By Year',
|
||||
);
|
||||
|
||||
$lang->total_counter = 'Total Status';
|
||||
$lang->selected_day_counter = 'Status of Selected Day';
|
||||
|
||||
$lang->unique_visitor = 'Visitors';
|
||||
$lang->pageview = 'Pageview';
|
||||
|
||||
$lang->today = 'today';
|
||||
$lang->yesterday = 'yesterday';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @archivo modules/counter/lang/es.lang.php
|
||||
* @autor zero <zero@nzeo.com>
|
||||
* @autor NHN (developers@xpressengine.com)
|
||||
* @sumario Paquete del idioma español para el contador.
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,25 +1,25 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/counter/lang/fr.lang.php
|
||||
* @author zero <zero@nzeo.com> Traduit par Pierre Duvent <PierreDuvent@gmail.com>
|
||||
* @brief Paquet du langage en français pour le module de Comppteur
|
||||
**/
|
||||
|
||||
$lang->counter = "Coumpteur";
|
||||
$lang->cmd_select_date = 'Choisir un Jour';
|
||||
$lang->cmd_select_counter_type = array(
|
||||
'hour' => 'Par Heure',
|
||||
'day' => 'Par Jour',
|
||||
'month' => 'Par Mois',
|
||||
'year' => 'Par Année',
|
||||
);
|
||||
|
||||
$lang->total_counter = 'Statut Total';
|
||||
$lang->selected_day_counter = 'Statut Journal';
|
||||
|
||||
$lang->unique_visitor = 'Visiteurs';
|
||||
$lang->pageview = 'Vues';
|
||||
|
||||
$lang->today = 'today';
|
||||
$lang->yesterday = 'yesterday';
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file modules/counter/lang/fr.lang.php
|
||||
* @author NHN (developers@xpressengine.com) Traduit par Pierre Duvent <PierreDuvent@gmail.com>
|
||||
* @brief Paquet du langage en français pour le module de Comppteur
|
||||
**/
|
||||
|
||||
$lang->counter = "Coumpteur";
|
||||
$lang->cmd_select_date = 'Choisir un Jour';
|
||||
$lang->cmd_select_counter_type = array(
|
||||
'hour' => 'Par Heure',
|
||||
'day' => 'Par Jour',
|
||||
'month' => 'Par Mois',
|
||||
'year' => 'Par Année',
|
||||
);
|
||||
|
||||
$lang->total_counter = 'Statut Total';
|
||||
$lang->selected_day_counter = 'Statut Journal';
|
||||
|
||||
$lang->unique_visitor = 'Visiteurs';
|
||||
$lang->pageview = 'Vues';
|
||||
|
||||
$lang->today = 'today';
|
||||
$lang->yesterday = 'yesterday';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,25 +1,25 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/counter/lang/jp.lang.php
|
||||
* @author zero <zero@nzeo.com> 翻訳:RisaPapa、ミニミ
|
||||
* @brief 日本語言語パッケージ(基本的な内容のみ)
|
||||
**/
|
||||
|
||||
$lang->counter = 'カウンター';
|
||||
$lang->cmd_select_date = '日付選択';
|
||||
$lang->cmd_select_counter_type = array(
|
||||
'hour' => '時間帯別',
|
||||
'day' => '日別',
|
||||
'month' => '月別',
|
||||
'year' => '年度別',
|
||||
);
|
||||
|
||||
$lang->total_counter = 'トータル';
|
||||
$lang->selected_day_counter = '選択日の情報';
|
||||
|
||||
$lang->unique_visitor = '訪問者';
|
||||
$lang->pageview = 'ページビュー';
|
||||
|
||||
$lang->today = '今日';
|
||||
$lang->yesterday = '昨日';
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file modules/counter/lang/jp.lang.php
|
||||
* @author NHN (developers@xpressengine.com) 翻訳:RisaPapa、ミニミ
|
||||
* @brief 日本語言語パッケージ(基本的な内容のみ)
|
||||
**/
|
||||
|
||||
$lang->counter = 'カウンター';
|
||||
$lang->cmd_select_date = '日付選択';
|
||||
$lang->cmd_select_counter_type = array(
|
||||
'hour' => '時間帯別',
|
||||
'day' => '日別',
|
||||
'month' => '月別',
|
||||
'year' => '年度別',
|
||||
);
|
||||
|
||||
$lang->total_counter = 'トータル';
|
||||
$lang->selected_day_counter = '選択日の情報';
|
||||
|
||||
$lang->unique_visitor = '訪問者';
|
||||
$lang->pageview = 'ページビュー';
|
||||
|
||||
$lang->today = '今日';
|
||||
$lang->yesterday = '昨日';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,25 +1,25 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/counter/lang/ko.lang.php
|
||||
* @author zero <zero@nzeo.com>
|
||||
* @brief 한국어 언어팩 (기본적인 내용만 수록)
|
||||
**/
|
||||
|
||||
$lang->counter = '접속 통계';
|
||||
$lang->cmd_select_date = '날짜 선택';
|
||||
$lang->cmd_select_counter_type = array(
|
||||
'hour' => '시간대별',
|
||||
'day' => '일별',
|
||||
'month' => '월별',
|
||||
'year' => '연도별',
|
||||
);
|
||||
|
||||
$lang->total_counter = '전체현황';
|
||||
$lang->selected_day_counter = '선택일 현황';
|
||||
|
||||
$lang->unique_visitor = '방문자';
|
||||
$lang->pageview = '페이지뷰';
|
||||
|
||||
$lang->today = '오늘';
|
||||
$lang->yesterday = '어제';
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file modules/counter/lang/ko.lang.php
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief 한국어 언어팩 (기본적인 내용만 수록)
|
||||
**/
|
||||
|
||||
$lang->counter = '접속 통계';
|
||||
$lang->cmd_select_date = '날짜 선택';
|
||||
$lang->cmd_select_counter_type = array(
|
||||
'hour' => '시간대별',
|
||||
'day' => '일별',
|
||||
'month' => '월별',
|
||||
'year' => '연도별',
|
||||
);
|
||||
|
||||
$lang->total_counter = '전체현황';
|
||||
$lang->selected_day_counter = '선택일 현황';
|
||||
|
||||
$lang->unique_visitor = '방문자';
|
||||
$lang->pageview = '페이지뷰';
|
||||
|
||||
$lang->today = '오늘';
|
||||
$lang->yesterday = '어제';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,25 +1,25 @@
|
|||
<?php
|
||||
/**
|
||||
* @file ru.lang.php
|
||||
* @author zero <zero@nzeo.com> | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
|
||||
* @brief Russian basic language pack
|
||||
**/
|
||||
|
||||
$lang->counter = "Счетчик посетителей";
|
||||
$lang->cmd_select_date = 'Выберите дату';
|
||||
$lang->cmd_select_counter_type = array(
|
||||
'hour' => 'По часам',
|
||||
'day' => 'По дням',
|
||||
'month' => 'По месяцам',
|
||||
'year' => 'По годам',
|
||||
);
|
||||
|
||||
$lang->total_counter = 'Общее состояние';
|
||||
$lang->selected_day_counter = 'Состояние на выбранный день';
|
||||
|
||||
$lang->unique_visitor = 'Посетителей';
|
||||
$lang->pageview = 'Просмотров страниц';
|
||||
|
||||
$lang->today = 'Сегодня';
|
||||
$lang->yesterday = 'Вчера';
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file ru.lang.php
|
||||
* @author NHN (developers@xpressengine.com) | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
|
||||
* @brief Russian basic language pack
|
||||
**/
|
||||
|
||||
$lang->counter = "Счетчик посетителей";
|
||||
$lang->cmd_select_date = 'Выберите дату';
|
||||
$lang->cmd_select_counter_type = array(
|
||||
'hour' => 'По часам',
|
||||
'day' => 'По дням',
|
||||
'month' => 'По месяцам',
|
||||
'year' => 'По годам',
|
||||
);
|
||||
|
||||
$lang->total_counter = 'Общее состояние';
|
||||
$lang->selected_day_counter = 'Состояние на выбранный день';
|
||||
|
||||
$lang->unique_visitor = 'Посетителей';
|
||||
$lang->pageview = 'Просмотров страниц';
|
||||
|
||||
$lang->today = 'Сегодня';
|
||||
$lang->yesterday = 'Вчера';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,27 +1,27 @@
|
|||
<?php
|
||||
/* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
||||
░░ * @File : common/lang/vi.lang.php ░░
|
||||
░░ * @Author : zero (zero@nzeo.com) ░░
|
||||
░░ * @Trans : Đào Đức Duy (ducduy.dao.vn@vietxe.net) ░░
|
||||
░░ * @Website: http://vietxe.net ░░
|
||||
░░ * @Brief : Vietnamese Language Pack (Only basic words are included here) ░░
|
||||
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ */
|
||||
|
||||
$lang->counter = "Lượt truy cập";
|
||||
$lang->cmd_select_date = 'Chọn ngày';
|
||||
$lang->cmd_select_counter_type = array(
|
||||
'hour' => 'Theo giờ',
|
||||
'day' => 'Theo ngày',
|
||||
'month' => 'Theo tháng',
|
||||
'year' => 'Theo năm',
|
||||
);
|
||||
|
||||
$lang->total_counter = 'Tổng số lượt truy cập';
|
||||
$lang->selected_day_counter = 'Số truy cập trong ngày';
|
||||
|
||||
$lang->unique_visitor = 'Số lượt xem';
|
||||
$lang->pageview = 'Số trang';
|
||||
|
||||
$lang->today = 'Hôm nay';
|
||||
$lang->yesterday = 'Hôm qua';
|
||||
?>
|
||||
<?php
|
||||
/* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
||||
░░ * @File : common/lang/vi.lang.php ░░
|
||||
░░ * @Author : NHN (developers@xpressengine.com) ░░
|
||||
░░ * @Trans : Đào Đức Duy (ducduy.dao.vn@vietxe.net) ░░
|
||||
░░ * @Website: http://vietxe.net ░░
|
||||
░░ * @Brief : Vietnamese Language Pack (Only basic words are included here) ░░
|
||||
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ */
|
||||
|
||||
$lang->counter = "Lượt truy cập";
|
||||
$lang->cmd_select_date = 'Chọn ngày';
|
||||
$lang->cmd_select_counter_type = array(
|
||||
'hour' => 'Theo giờ',
|
||||
'day' => 'Theo ngày',
|
||||
'month' => 'Theo tháng',
|
||||
'year' => 'Theo năm',
|
||||
);
|
||||
|
||||
$lang->total_counter = 'Tổng số lượt truy cập';
|
||||
$lang->selected_day_counter = 'Số truy cập trong ngày';
|
||||
|
||||
$lang->unique_visitor = 'Số lượt xem';
|
||||
$lang->pageview = 'Số trang';
|
||||
|
||||
$lang->today = 'Hôm nay';
|
||||
$lang->yesterday = 'Hôm qua';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/counter/lang/zh-CN.lang.php
|
||||
* @author zero <zero@nzeo.com>
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief 简体中文语言包
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/counter/lang/zh-TW.lang.php
|
||||
* @author zero <zero@nzeo.com> 翻譯:royallin
|
||||
* @author NHN (developers@xpressengine.com) 翻譯:royallin
|
||||
* @brief 訪問統計(counter)模組正體中文語言
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,33 +1,33 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="0.2">
|
||||
<title xml:lang="ko">문서</title>
|
||||
<title xml:lang="en">Document</title>
|
||||
<title xml:lang="vi">Bài viết</title>
|
||||
<title xml:lang="es">Documento</title>
|
||||
<title xml:lang="zh-CN">主题管理</title>
|
||||
<title xml:lang="jp">ドキュメント</title>
|
||||
<title xml:lang="ru">Документы</title>
|
||||
<title xml:lang="zh-TW">主題</title>
|
||||
<description xml:lang="ko">게시판, 블로그등의 모듈에서 사용되는 문서를 관리하는 모듈입니다. </description>
|
||||
<description xml:lang="en">Module for managing documents used in board, blog, etc.</description>
|
||||
<description xml:lang="vi">Module quản lý bài viết trên Board, Sổ lưu niệm và những mục khác.</description>
|
||||
<description xml:lang="es">Módulo para manejar los documentos en blog y en los tableros.</description>
|
||||
<description xml:lang="zh-CN">管理版面,博客等处主题的模块。 </description>
|
||||
<description xml:lang="jp">掲示板、ブログなどのモジュールで使用されるドキュメント(書き込み)を管理します。</description>
|
||||
<description xml:lang="ru">Модуль для управления документами в форуме, блоге и прочее.</description>
|
||||
<description xml:lang="zh-TW">管理討論板,部落格等主題的模組。 </description>
|
||||
<version>0.1</version>
|
||||
<date>2007-02-28</date>
|
||||
<category>content</category>
|
||||
|
||||
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
|
||||
<name xml:lang="ko">zero</name>
|
||||
<name xml:lang="en">zero</name>
|
||||
<name xml:lang="vi">zero</name>
|
||||
<name xml:lang="es">zero</name>
|
||||
<name xml:lang="zh-CN">zero</name>
|
||||
<name xml:lang="jp">zero</name>
|
||||
<name xml:lang="ru">zero</name>
|
||||
<name xml:lang="zh-TW">zero</name>
|
||||
</author>
|
||||
</module>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="0.2">
|
||||
<title xml:lang="ko">문서</title>
|
||||
<title xml:lang="en">Document</title>
|
||||
<title xml:lang="vi">Bài viết</title>
|
||||
<title xml:lang="es">Documento</title>
|
||||
<title xml:lang="zh-CN">主题管理</title>
|
||||
<title xml:lang="jp">ドキュメント</title>
|
||||
<title xml:lang="ru">Документы</title>
|
||||
<title xml:lang="zh-TW">主題</title>
|
||||
<description xml:lang="ko">게시판, 블로그등의 모듈에서 사용되는 문서를 관리하는 모듈입니다. </description>
|
||||
<description xml:lang="en">Module for managing documents used in board, blog, etc.</description>
|
||||
<description xml:lang="vi">Module quản lý bài viết trên Board, Sổ lưu niệm và những mục khác.</description>
|
||||
<description xml:lang="es">Módulo para manejar los documentos en blog y en los tableros.</description>
|
||||
<description xml:lang="zh-CN">管理版面,博客等处主题的模块。 </description>
|
||||
<description xml:lang="jp">掲示板、ブログなどのモジュールで使用されるドキュメント(書き込み)を管理します。</description>
|
||||
<description xml:lang="ru">Модуль для управления документами в форуме, блоге и прочее.</description>
|
||||
<description xml:lang="zh-TW">管理討論板,部落格等主題的模組。 </description>
|
||||
<version>0.1</version>
|
||||
<date>2007-02-28</date>
|
||||
<category>content</category>
|
||||
|
||||
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
|
||||
<name xml:lang="ko">NHN</name>
|
||||
<name xml:lang="en">NHN</name>
|
||||
<name xml:lang="vi">NHN</name>
|
||||
<name xml:lang="es">NHN</name>
|
||||
<name xml:lang="zh-CN">NHN</name>
|
||||
<name xml:lang="jp">NHN</name>
|
||||
<name xml:lang="ru">NHN</name>
|
||||
<name xml:lang="zh-TW">NHN</name>
|
||||
</author>
|
||||
</module>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,87 +1,87 @@
|
|||
<?php
|
||||
/**
|
||||
* @class documentAdminModel
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @version 0.1
|
||||
* @brief document 모듈의 admin model class
|
||||
**/
|
||||
|
||||
class documentAdminModel extends document {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 휴지통에 존재하는 문서 목록을 가져옴
|
||||
**/
|
||||
function getDocumentTrashList($obj) {
|
||||
// 정렬 대상과 순서 체크
|
||||
if (!in_array($obj->sort_index, array('list_order','delete_date','title'))) $obj->sort_index = 'list_order';
|
||||
if (!in_array($obj->order_type, array('desc','asc'))) $obj->order_type = 'asc';
|
||||
|
||||
// module_srl 대신 mid가 넘어왔을 경우는 직접 module_srl을 구해줌
|
||||
if ($obj->mid) {
|
||||
$oModuleModel = &getModel('module');
|
||||
$obj->module_srl = $oModuleModel->getModuleSrlByMid($obj->mid);
|
||||
unset($obj->mid);
|
||||
}
|
||||
|
||||
// 넘어온 module_srl은 array일 수도 있기에 array인지를 체크
|
||||
if (is_array($obj->module_srl)) $args->module_srl = implode(',', $obj->module_srl);
|
||||
else $args->module_srl = $obj->module_srl;
|
||||
|
||||
// 변수 체크
|
||||
$args->sort_index = $obj->sort_index;
|
||||
$args->order_type = $obj->order_type;
|
||||
$args->page = $obj->page?$obj->page:1;
|
||||
$args->list_count = $obj->list_count?$obj->list_count:20;
|
||||
$args->page_count = $obj->page_count?$obj->page_count:10;
|
||||
$args->member_srl = $obj->member_srl;
|
||||
|
||||
// query_id 지정
|
||||
$query_id = 'document.getTrashList';
|
||||
|
||||
// query 실행
|
||||
$output = executeQueryArray($query_id, $args);
|
||||
|
||||
// 결과가 없거나 오류 발생시 그냥 return
|
||||
if (!$output->toBool() || !count($output->data)) return $output;
|
||||
|
||||
$idx = 0;
|
||||
$data = $output->data;
|
||||
unset($output->data);
|
||||
|
||||
$keys = array_keys($data);
|
||||
$virtual_number = $keys[0];
|
||||
|
||||
foreach($data as $key => $attribute) {
|
||||
$oDocument = null;
|
||||
$oDocument = new documentItem();
|
||||
$oDocument->setAttribute($attribute, false);
|
||||
if ($is_admin) $oDocument->setGrant();
|
||||
|
||||
$output->data[$virtual_number] = $oDocument;
|
||||
$virtual_number--;
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief trash_srl값을 가지는 휴지통 문서를 가져옴
|
||||
**/
|
||||
function getDocumentTrash($trash_srl) {
|
||||
$args->trash_srl = $trash_srl;
|
||||
$output = executeQuery('document.getTrash', $args);
|
||||
|
||||
$node = $output->data;
|
||||
if (!$node) return;
|
||||
|
||||
return $node;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class documentAdminModel
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @version 0.1
|
||||
* @brief document 모듈의 admin model class
|
||||
**/
|
||||
|
||||
class documentAdminModel extends document {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 휴지통에 존재하는 문서 목록을 가져옴
|
||||
**/
|
||||
function getDocumentTrashList($obj) {
|
||||
// 정렬 대상과 순서 체크
|
||||
if (!in_array($obj->sort_index, array('list_order','delete_date','title'))) $obj->sort_index = 'list_order';
|
||||
if (!in_array($obj->order_type, array('desc','asc'))) $obj->order_type = 'asc';
|
||||
|
||||
// module_srl 대신 mid가 넘어왔을 경우는 직접 module_srl을 구해줌
|
||||
if ($obj->mid) {
|
||||
$oModuleModel = &getModel('module');
|
||||
$obj->module_srl = $oModuleModel->getModuleSrlByMid($obj->mid);
|
||||
unset($obj->mid);
|
||||
}
|
||||
|
||||
// 넘어온 module_srl은 array일 수도 있기에 array인지를 체크
|
||||
if (is_array($obj->module_srl)) $args->module_srl = implode(',', $obj->module_srl);
|
||||
else $args->module_srl = $obj->module_srl;
|
||||
|
||||
// 변수 체크
|
||||
$args->sort_index = $obj->sort_index;
|
||||
$args->order_type = $obj->order_type;
|
||||
$args->page = $obj->page?$obj->page:1;
|
||||
$args->list_count = $obj->list_count?$obj->list_count:20;
|
||||
$args->page_count = $obj->page_count?$obj->page_count:10;
|
||||
$args->member_srl = $obj->member_srl;
|
||||
|
||||
// query_id 지정
|
||||
$query_id = 'document.getTrashList';
|
||||
|
||||
// query 실행
|
||||
$output = executeQueryArray($query_id, $args);
|
||||
|
||||
// 결과가 없거나 오류 발생시 그냥 return
|
||||
if (!$output->toBool() || !count($output->data)) return $output;
|
||||
|
||||
$idx = 0;
|
||||
$data = $output->data;
|
||||
unset($output->data);
|
||||
|
||||
$keys = array_keys($data);
|
||||
$virtual_number = $keys[0];
|
||||
|
||||
foreach($data as $key => $attribute) {
|
||||
$oDocument = null;
|
||||
$oDocument = new documentItem();
|
||||
$oDocument->setAttribute($attribute, false);
|
||||
if ($is_admin) $oDocument->setGrant();
|
||||
|
||||
$output->data[$virtual_number] = $oDocument;
|
||||
$virtual_number--;
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief trash_srl값을 가지는 휴지통 문서를 가져옴
|
||||
**/
|
||||
function getDocumentTrash($trash_srl) {
|
||||
$args->trash_srl = $trash_srl;
|
||||
$output = executeQuery('document.getTrash', $args);
|
||||
|
||||
$node = $output->data;
|
||||
if (!$node) return;
|
||||
|
||||
return $node;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,159 +1,159 @@
|
|||
<?php
|
||||
/**
|
||||
* @class documentAdminView
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief document 모듈의 admin view 클래스
|
||||
**/
|
||||
|
||||
class documentAdminView extends document {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 목록 출력 (관리자용)
|
||||
**/
|
||||
function dispDocumentAdminList() {
|
||||
// 목록을 구하기 위한 옵션
|
||||
$args->page = Context::get('page'); ///< 페이지
|
||||
$args->list_count = 30; ///< 한페이지에 보여줄 글 수
|
||||
$args->page_count = 10; ///< 페이지 네비게이션에 나타날 페이지의 수
|
||||
|
||||
$args->search_target = Context::get('search_target'); ///< 검색 대상 (title, contents...)
|
||||
$args->search_keyword = Context::get('search_keyword'); ///< 검색어
|
||||
|
||||
$args->sort_index = 'list_order'; ///< 소팅 값
|
||||
|
||||
$args->module_srl = Context::get('module_srl');
|
||||
|
||||
// 목록 구함, document->getDocumentList 에서 걍 알아서 다 해버리는 구조이다... (아.. 이거 나쁜 버릇인데.. ㅡ.ㅜ 어쩔수 없다)
|
||||
$oDocumentModel = &getModel('document');
|
||||
$output = $oDocumentModel->getDocumentList($args);
|
||||
|
||||
// 템플릿에 쓰기 위해서 document_model::getDocumentList() 의 return object에 있는 값들을 세팅
|
||||
Context::set('total_count', $output->total_count);
|
||||
Context::set('total_page', $output->total_page);
|
||||
Context::set('page', $output->page);
|
||||
Context::set('document_list', $output->data);
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
|
||||
// 템플릿에서 사용할 검색옵션 세팅
|
||||
$count_search_option = count($this->search_option);
|
||||
for($i=0;$i<$count_search_option;$i++) {
|
||||
$search_option[$this->search_option[$i]] = Context::getLang($this->search_option[$i]);
|
||||
}
|
||||
Context::set('search_option', $search_option);
|
||||
|
||||
// 템플릿 지정
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('document_list');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 문서 모듈 설정
|
||||
**/
|
||||
function dispDocumentAdminConfig() {
|
||||
$oDocumentModel = &getModel('document');
|
||||
$config = $oDocumentModel->getDocumentConfig();
|
||||
Context::set('config',$config);
|
||||
|
||||
// 템플릿 파일 지정
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('document_config');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 관리자 페이지의 신고 목록 보기
|
||||
**/
|
||||
function dispDocumentAdminDeclared() {
|
||||
// 목록을 구하기 위한 옵션
|
||||
$args->page = Context::get('page'); ///< 페이지
|
||||
$args->list_count = 30; ///< 한페이지에 보여줄 글 수
|
||||
$args->page_count = 10; ///< 페이지 네비게이션에 나타날 페이지의 수
|
||||
|
||||
$args->sort_index = 'document_declared.declared_count'; ///< 소팅 값
|
||||
$args->order_type = 'desc'; ///< 소팅 정렬 값
|
||||
|
||||
// 목록을 구함
|
||||
$declared_output = executeQuery('document.getDeclaredList', $args);
|
||||
|
||||
if($declared_output->data && count($declared_output->data)) {
|
||||
$document_list = array();
|
||||
|
||||
$oDocumentModel = &getModel('document');
|
||||
foreach($declared_output->data as $key => $document) {
|
||||
$document_list[$key] = new documentItem();
|
||||
$document_list[$key]->setAttribute($document);
|
||||
}
|
||||
$declared_output->data = $document_list;
|
||||
}
|
||||
|
||||
// 템플릿에 쓰기 위해서 document_model::getDocumentList() 의 return object에 있는 값들을 세팅
|
||||
Context::set('total_count', $declared_output->total_count);
|
||||
Context::set('total_page', $declared_output->total_page);
|
||||
Context::set('page', $declared_output->page);
|
||||
Context::set('document_list', $declared_output->data);
|
||||
Context::set('page_navigation', $declared_output->page_navigation);
|
||||
|
||||
// 템플릿 지정
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('declared_list');
|
||||
}
|
||||
|
||||
function dispDocumentAdminAlias() {
|
||||
$args->document_srl = Context::get('document_srl');
|
||||
if(!$args->document_srl) return $this->dispDocumentAdminList();
|
||||
|
||||
$oModel = &getModel('document');
|
||||
$oDocument = $oModel->getDocument($args->document_srl);
|
||||
if(!$oDocument->isExists()) return $this->dispDocumentAdminList();
|
||||
Context::set('oDocument', $oDocument);
|
||||
|
||||
$output = executeQueryArray('document.getAliases', $args);
|
||||
if(!$output->data)
|
||||
{
|
||||
$aliases = array();
|
||||
}
|
||||
else
|
||||
{
|
||||
$aliases = $output->data;
|
||||
}
|
||||
|
||||
|
||||
Context::set('aliases', $aliases);
|
||||
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('document_alias');
|
||||
}
|
||||
|
||||
function dispDocumentAdminTrashList() {
|
||||
// 목록을 구하기 위한 옵션
|
||||
$args->page = Context::get('page'); ///< 페이지
|
||||
$args->list_count = 30; ///< 한페이지에 보여줄 글 수
|
||||
$args->page_count = 10; ///< 페이지 네비게이션에 나타날 페이지의 수
|
||||
|
||||
$args->sort_index = 'list_order'; ///< 소팅 값
|
||||
$args->order_type = 'desc'; ///< 소팅 정렬 값
|
||||
|
||||
$args->module_srl = Context::get('module_srl');
|
||||
|
||||
// 목록을 구함
|
||||
$oDocumentAdminModel = &getAdminModel('document');
|
||||
$output = $oDocumentAdminModel->getDocumentTrashList($args);
|
||||
|
||||
// 템플릿에 쓰기 위해서 document_admin_model::getDocumentTrashList() 의 return object에 있는 값들을 세팅
|
||||
Context::set('total_count', $output->total_count);
|
||||
Context::set('total_page', $output->total_page);
|
||||
Context::set('page', $output->page);
|
||||
Context::set('document_list', $output->data);
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
|
||||
// 템플릿 지정
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('document_trash_list');
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class documentAdminView
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief document 모듈의 admin view 클래스
|
||||
**/
|
||||
|
||||
class documentAdminView extends document {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 목록 출력 (관리자용)
|
||||
**/
|
||||
function dispDocumentAdminList() {
|
||||
// 목록을 구하기 위한 옵션
|
||||
$args->page = Context::get('page'); ///< 페이지
|
||||
$args->list_count = 30; ///< 한페이지에 보여줄 글 수
|
||||
$args->page_count = 10; ///< 페이지 네비게이션에 나타날 페이지의 수
|
||||
|
||||
$args->search_target = Context::get('search_target'); ///< 검색 대상 (title, contents...)
|
||||
$args->search_keyword = Context::get('search_keyword'); ///< 검색어
|
||||
|
||||
$args->sort_index = 'list_order'; ///< 소팅 값
|
||||
|
||||
$args->module_srl = Context::get('module_srl');
|
||||
|
||||
// 목록 구함, document->getDocumentList 에서 걍 알아서 다 해버리는 구조이다... (아.. 이거 나쁜 버릇인데.. ㅡ.ㅜ 어쩔수 없다)
|
||||
$oDocumentModel = &getModel('document');
|
||||
$output = $oDocumentModel->getDocumentList($args);
|
||||
|
||||
// 템플릿에 쓰기 위해서 document_model::getDocumentList() 의 return object에 있는 값들을 세팅
|
||||
Context::set('total_count', $output->total_count);
|
||||
Context::set('total_page', $output->total_page);
|
||||
Context::set('page', $output->page);
|
||||
Context::set('document_list', $output->data);
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
|
||||
// 템플릿에서 사용할 검색옵션 세팅
|
||||
$count_search_option = count($this->search_option);
|
||||
for($i=0;$i<$count_search_option;$i++) {
|
||||
$search_option[$this->search_option[$i]] = Context::getLang($this->search_option[$i]);
|
||||
}
|
||||
Context::set('search_option', $search_option);
|
||||
|
||||
// 템플릿 지정
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('document_list');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 문서 모듈 설정
|
||||
**/
|
||||
function dispDocumentAdminConfig() {
|
||||
$oDocumentModel = &getModel('document');
|
||||
$config = $oDocumentModel->getDocumentConfig();
|
||||
Context::set('config',$config);
|
||||
|
||||
// 템플릿 파일 지정
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('document_config');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 관리자 페이지의 신고 목록 보기
|
||||
**/
|
||||
function dispDocumentAdminDeclared() {
|
||||
// 목록을 구하기 위한 옵션
|
||||
$args->page = Context::get('page'); ///< 페이지
|
||||
$args->list_count = 30; ///< 한페이지에 보여줄 글 수
|
||||
$args->page_count = 10; ///< 페이지 네비게이션에 나타날 페이지의 수
|
||||
|
||||
$args->sort_index = 'document_declared.declared_count'; ///< 소팅 값
|
||||
$args->order_type = 'desc'; ///< 소팅 정렬 값
|
||||
|
||||
// 목록을 구함
|
||||
$declared_output = executeQuery('document.getDeclaredList', $args);
|
||||
|
||||
if($declared_output->data && count($declared_output->data)) {
|
||||
$document_list = array();
|
||||
|
||||
$oDocumentModel = &getModel('document');
|
||||
foreach($declared_output->data as $key => $document) {
|
||||
$document_list[$key] = new documentItem();
|
||||
$document_list[$key]->setAttribute($document);
|
||||
}
|
||||
$declared_output->data = $document_list;
|
||||
}
|
||||
|
||||
// 템플릿에 쓰기 위해서 document_model::getDocumentList() 의 return object에 있는 값들을 세팅
|
||||
Context::set('total_count', $declared_output->total_count);
|
||||
Context::set('total_page', $declared_output->total_page);
|
||||
Context::set('page', $declared_output->page);
|
||||
Context::set('document_list', $declared_output->data);
|
||||
Context::set('page_navigation', $declared_output->page_navigation);
|
||||
|
||||
// 템플릿 지정
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('declared_list');
|
||||
}
|
||||
|
||||
function dispDocumentAdminAlias() {
|
||||
$args->document_srl = Context::get('document_srl');
|
||||
if(!$args->document_srl) return $this->dispDocumentAdminList();
|
||||
|
||||
$oModel = &getModel('document');
|
||||
$oDocument = $oModel->getDocument($args->document_srl);
|
||||
if(!$oDocument->isExists()) return $this->dispDocumentAdminList();
|
||||
Context::set('oDocument', $oDocument);
|
||||
|
||||
$output = executeQueryArray('document.getAliases', $args);
|
||||
if(!$output->data)
|
||||
{
|
||||
$aliases = array();
|
||||
}
|
||||
else
|
||||
{
|
||||
$aliases = $output->data;
|
||||
}
|
||||
|
||||
|
||||
Context::set('aliases', $aliases);
|
||||
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('document_alias');
|
||||
}
|
||||
|
||||
function dispDocumentAdminTrashList() {
|
||||
// 목록을 구하기 위한 옵션
|
||||
$args->page = Context::get('page'); ///< 페이지
|
||||
$args->list_count = 30; ///< 한페이지에 보여줄 글 수
|
||||
$args->page_count = 10; ///< 페이지 네비게이션에 나타날 페이지의 수
|
||||
|
||||
$args->sort_index = 'list_order'; ///< 소팅 값
|
||||
$args->order_type = 'desc'; ///< 소팅 정렬 값
|
||||
|
||||
$args->module_srl = Context::get('module_srl');
|
||||
|
||||
// 목록을 구함
|
||||
$oDocumentAdminModel = &getAdminModel('document');
|
||||
$output = $oDocumentAdminModel->getDocumentTrashList($args);
|
||||
|
||||
// 템플릿에 쓰기 위해서 document_admin_model::getDocumentTrashList() 의 return object에 있는 값들을 세팅
|
||||
Context::set('total_count', $output->total_count);
|
||||
Context::set('total_page', $output->total_page);
|
||||
Context::set('page', $output->page);
|
||||
Context::set('document_list', $output->data);
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
|
||||
// 템플릿 지정
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('document_trash_list');
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,254 +1,254 @@
|
|||
<?php
|
||||
/**
|
||||
* @class document
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief document 모듈의 high 클래스
|
||||
**/
|
||||
|
||||
require_once(_XE_PATH_.'modules/document/document.item.php');
|
||||
|
||||
class document extends ModuleObject {
|
||||
|
||||
// 관리자페이지에서 사용할 검색 옵션
|
||||
var $search_option = array('title','content','title_content','user_name',); ///< 검색 옵션
|
||||
|
||||
/**
|
||||
* @brief 설치시 추가 작업이 필요할시 구현
|
||||
**/
|
||||
function moduleInstall() {
|
||||
// action forward에 등록 (관리자 모드에서 사용하기 위함)
|
||||
$oModuleController = &getController('module');
|
||||
|
||||
$oDB = &DB::getInstance();
|
||||
$oDB->addIndex("documents","idx_module_list_order", array("module_srl","list_order"));
|
||||
$oDB->addIndex("documents","idx_module_update_order", array("module_srl","update_order"));
|
||||
$oDB->addIndex("documents","idx_module_readed_count", array("module_srl","readed_count"));
|
||||
$oDB->addIndex("documents","idx_module_voted_count", array("module_srl","voted_count"));
|
||||
$oDB->addIndex("documents","idx_module_notice", array("module_srl","is_notice"));
|
||||
$oDB->addIndex("documents","idx_module_document_srl", array("module_srl","document_srl"));
|
||||
$oDB->addIndex("documents","idx_module_blamed_count", array("module_srl","blamed_count"));
|
||||
$oDB->addIndex("document_aliases", "idx_module_title", array("module_srl","alias_title"), true);
|
||||
$oDB->addIndex("document_extra_vars", "unique_extra_vars", array("module_srl","document_srl","var_idx","lang_code"), true);
|
||||
|
||||
// 2007. 10. 17 모듈이 삭제될때 등록된 글도 모두 삭제하는 트리거 추가
|
||||
$oModuleController->insertTrigger('module.deleteModule', 'document', 'controller', 'triggerDeleteModuleDocuments', 'after');
|
||||
|
||||
// 2009. 01. 29 Added a trigger for additional setup
|
||||
$oModuleController->insertTrigger('module.dispAdditionSetup', 'document', 'view', 'triggerDispDocumentAdditionSetup', 'before');
|
||||
|
||||
return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 설치가 이상이 없는지 체크하는 method
|
||||
**/
|
||||
function checkUpdate() {
|
||||
$oDB = &DB::getInstance();
|
||||
$oModuleModel = &getModel('module');
|
||||
|
||||
/**
|
||||
* 2007. 7. 25 : 알림 필드(notify_message) 추가
|
||||
**/
|
||||
if(!$oDB->isColumnExists("documents","notify_message")) return true;
|
||||
|
||||
/**
|
||||
* 2007. 8. 23 : document테이블에 결합 인덱스 적용
|
||||
**/
|
||||
if(!$oDB->isIndexExists("documents","idx_module_list_order")) return true;
|
||||
if(!$oDB->isIndexExists("documents","idx_module_update_order")) return true;
|
||||
if(!$oDB->isIndexExists("documents","idx_module_readed_count")) return true;
|
||||
if(!$oDB->isIndexExists("documents","idx_module_voted_count")) return true;
|
||||
|
||||
// 2007. 10. 17 모듈이 삭제될때 등록된 글도 모두 삭제하는 트리거 추가
|
||||
if(!$oModuleModel->getTrigger('module.deleteModule', 'document', 'controller', 'triggerDeleteModuleDocuments', 'after')) return true;
|
||||
|
||||
// 2007. 10. 25 문서 분류에 parent_srl, expand를 추가
|
||||
if(!$oDB->isColumnExists("document_categories","parent_srl")) return true;
|
||||
if(!$oDB->isColumnExists("document_categories","expand")) return true;
|
||||
if(!$oDB->isColumnExists("document_categories","group_srls")) return true;
|
||||
|
||||
// 2007. 11. 20 게시글에 module_srl + is_notice 복합인덱스 만들기
|
||||
if(!$oDB->isIndexExists("documents","idx_module_notice")) return true;
|
||||
|
||||
// 2008. 02. 18 게시글에 module_srl + document_srl 복합인덱스 만들기 (manian님 확인)
|
||||
if(!$oDB->isIndexExists("documents","idx_module_document_srl")) return true;
|
||||
|
||||
/**
|
||||
* 2007. 12. 03 : 확장변수(extra_vars) 컬럼이 없을 경우 추가
|
||||
**/
|
||||
if(!$oDB->isColumnExists("documents","extra_vars")) return true;
|
||||
|
||||
// 2008. 04. 23 blamed count 컬럼 추가
|
||||
if(!$oDB->isColumnExists("documents", "blamed_count")) return true;
|
||||
if(!$oDB->isIndexExists("documents","idx_module_blamed_count")) return true;
|
||||
if(!$oDB->isColumnExists("document_voted_log", "point")) return true;
|
||||
|
||||
// 2008-12-15 문서 분류에 color를 추가
|
||||
if(!$oDB->isColumnExists("document_categories", "color")) return true;
|
||||
|
||||
/**
|
||||
* 2009. 01. 29 : 확장변수 값 테이블에 lang_code가 없을 경우 추가
|
||||
**/
|
||||
if(!$oDB->isColumnExists("document_extra_vars","lang_code")) return true;
|
||||
|
||||
if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'document', 'view', 'triggerDispDocumentAdditionSetup', 'before')) return true;
|
||||
|
||||
// 2009. 03. 09 documents에 lang_code 컬럼 추가
|
||||
if(!$oDB->isColumnExists("documents","lang_code")) return true;
|
||||
|
||||
// 2009. 03. 11 확장변수 값 테이블의 인덱스 점검
|
||||
if(!$oDB->isIndexExists("document_extra_vars", "unique_extra_vars")) return true;
|
||||
|
||||
/**
|
||||
* 2009. 03. 19 : 확장변수 값 테이블에 eid가 없을 경우 추가
|
||||
**/
|
||||
if(!$oDB->isColumnExists("document_extra_keys","eid")) return true;
|
||||
if(!$oDB->isColumnExists("document_extra_vars","eid")) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 업데이트 실행
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
$oDB = &DB::getInstance();
|
||||
$oModuleModel = &getModel('module');
|
||||
$oModuleController = &getController('module');
|
||||
|
||||
/**
|
||||
* 2007. 7. 25 : 알림 필드(notify_message) 추가
|
||||
**/
|
||||
if(!$oDB->isColumnExists("documents","notify_message")) {
|
||||
$oDB->addColumn('documents',"notify_message","char",1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 2007. 8. 23 : document테이블에 결합 인덱스 적용
|
||||
**/
|
||||
if(!$oDB->isIndexExists("documents","idx_module_list_order")) {
|
||||
$oDB->addIndex("documents","idx_module_list_order", array("module_srl","list_order"));
|
||||
}
|
||||
|
||||
if(!$oDB->isIndexExists("documents","idx_module_update_order")) {
|
||||
$oDB->addIndex("documents","idx_module_update_order", array("module_srl","update_order"));
|
||||
}
|
||||
|
||||
if(!$oDB->isIndexExists("documents","idx_module_readed_count")) {
|
||||
$oDB->addIndex("documents","idx_module_readed_count", array("module_srl","readed_count"));
|
||||
}
|
||||
|
||||
if(!$oDB->isIndexExists("documents","idx_module_voted_count")) {
|
||||
$oDB->addIndex("documents","idx_module_voted_count", array("module_srl","voted_count"));
|
||||
}
|
||||
|
||||
// 2007. 10. 17 모듈이 삭제될때 등록된 글도 모두 삭제하는 트리거 추가
|
||||
if(!$oModuleModel->getTrigger('module.deleteModule', 'document', 'controller', 'triggerDeleteModuleDocuments', 'after'))
|
||||
$oModuleController->insertTrigger('module.deleteModule', 'document', 'controller', 'triggerDeleteModuleDocuments', 'after');
|
||||
|
||||
// 2007. 10. 25 문서 분류에 parent_srl, expand를 추가
|
||||
if(!$oDB->isColumnExists("document_categories","parent_srl")) $oDB->addColumn('document_categories',"parent_srl","number",12,0);
|
||||
if(!$oDB->isColumnExists("document_categories","expand")) $oDB->addColumn('document_categories',"expand","char",1,"N");
|
||||
if(!$oDB->isColumnExists("document_categories","group_srls")) $oDB->addColumn('document_categories',"group_srls","text");
|
||||
|
||||
// 2007. 11. 20 게시글에 module_srl + is_notice 복합인덱스 만들기
|
||||
if(!$oDB->isIndexExists("documents","idx_module_notice")) $oDB->addIndex("documents","idx_module_notice", array("module_srl","is_notice"));
|
||||
|
||||
/**
|
||||
* 2007. 12. 03 : 확장변수(extra_vars) 컬럼이 없을 경우 추가
|
||||
**/
|
||||
if(!$oDB->isColumnExists("documents","extra_vars")) $oDB->addColumn('documents','extra_vars','text');
|
||||
|
||||
/**
|
||||
* 2008. 02. 18 게시글에 module_srl + document_srl 복합인덱스 만들기 (manian님 확인)
|
||||
**/
|
||||
if(!$oDB->isIndexExists("documents","idx_module_document_srl")) $oDB->addIndex("documents","idx_module_document_srl", array("module_srl","document_srl"));
|
||||
|
||||
// 2008. 04. 23 blamed count 컬럼 추가
|
||||
if(!$oDB->isColumnExists("documents", "blamed_count")) {
|
||||
$oDB->addColumn('documents', 'blamed_count', 'number', 11, 0, true);
|
||||
$oDB->addIndex('documents', 'idx_blamed_count', array('blamed_count'));
|
||||
}
|
||||
|
||||
if(!$oDB->isIndexExists("documents","idx_module_blamed_count")) {
|
||||
$oDB->addIndex('documents', 'idx_module_blamed_count', array('module_srl', 'blamed_count'));
|
||||
}
|
||||
|
||||
if(!$oDB->isColumnExists("document_voted_log", "point"))
|
||||
$oDB->addColumn('document_voted_log', 'point', 'number', 11, 0, true);
|
||||
|
||||
|
||||
if(!$oDB->isColumnExists("document_categories","color")) $oDB->addColumn('document_categories',"color","char",7);
|
||||
|
||||
/**
|
||||
* 2009. 01. 29 : 확장변수 값 테이블에 lang_code가 없을 경우 추가
|
||||
**/
|
||||
if(!$oDB->isColumnExists("document_extra_vars","lang_code")) $oDB->addColumn('document_extra_vars',"lang_code","varchar",10);
|
||||
|
||||
// 2009. 01. 29 Added a trigger for additional setup
|
||||
if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'document', 'view', 'triggerDispDocumentAdditionSetup', 'before'))
|
||||
$oModuleController->insertTrigger('module.dispAdditionSetup', 'document', 'view', 'triggerDispDocumentAdditionSetup', 'before');
|
||||
|
||||
// 2009. 03. 09 documents에 lang_code 컬럼 추가
|
||||
if(!$oDB->isColumnExists("documents","lang_code")) {
|
||||
$db_info = Context::getDBInfo();
|
||||
$oDB->addColumn('documents',"lang_code","varchar",10, $db_info->lang_code);
|
||||
$obj->lang_code = $db_info->lang_type;
|
||||
executeQuery('document.updateDocumentsLangCode', $obj);
|
||||
}
|
||||
|
||||
// 2009. 03. 11 확장변수 값 테이블의 인덱스 점검
|
||||
if(!$oDB->isIndexExists("document_extra_vars", "unique_extra_vars")) {
|
||||
$oDB->addIndex("document_extra_vars", "unique_extra_vars", array("module_srl","document_srl","var_idx","lang_code"), true);
|
||||
}
|
||||
|
||||
if($oDB->isIndexExists("document_extra_vars", "unique_module_vars")) {
|
||||
$oDB->dropIndex("document_extra_vars", "unique_module_vars", true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 2009. 03. 19 : 확장변수 값 테이블에 eid 없을 경우 추가
|
||||
* 2009. 04. 12 : eid를 등록할 때 다른 필드 값이 변경되는 문제 수정 #17922959
|
||||
**/
|
||||
if(!$oDB->isColumnExists("document_extra_keys","eid")) {
|
||||
$oDB->addColumn("document_extra_keys","eid","varchar",40);
|
||||
|
||||
$output = executeQuery('document.getGroupsExtraKeys', $obj);
|
||||
if($output->toBool() && $output->data && count($output->data)) {
|
||||
foreach($output->data as $extra_keys) {
|
||||
$args->module_srl = $extra_keys->module_srl;
|
||||
$args->var_idx = $extra_keys->idx;
|
||||
$args->new_eid = "extra_vars".$extra_keys->idx;
|
||||
$output = executeQuery('document.updateDocumentExtraKeyEid', $args);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!$oDB->isColumnExists("document_extra_vars","eid")) {
|
||||
$oDB->addColumn("document_extra_vars","eid","varchar",40);
|
||||
$obj->var_idx = '-1,-2';
|
||||
$output = executeQuery('document.getGroupsExtraVars', $obj);
|
||||
if($output->toBool() && $output->data && count($output->data)) {
|
||||
foreach($output->data as $extra_vars) {
|
||||
$args->module_srl = $extra_vars->module_srl;
|
||||
$args->var_idx = $extra_vars->idx;
|
||||
$args->new_eid = "extra_vars".$extra_vars->idx;
|
||||
$output = executeQuery('document.updateDocumentExtraVarEid', $args);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return new Object(0,'success_updated');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 캐시 파일 재생성
|
||||
**/
|
||||
function recompileCache() {
|
||||
// 게시글 분류 캐시 파일 삭제
|
||||
FileHandler::removeFilesInDir(_XE_PATH_."files/cache/document_category");
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class document
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief document 모듈의 high 클래스
|
||||
**/
|
||||
|
||||
require_once(_XE_PATH_.'modules/document/document.item.php');
|
||||
|
||||
class document extends ModuleObject {
|
||||
|
||||
// 관리자페이지에서 사용할 검색 옵션
|
||||
var $search_option = array('title','content','title_content','user_name',); ///< 검색 옵션
|
||||
|
||||
/**
|
||||
* @brief 설치시 추가 작업이 필요할시 구현
|
||||
**/
|
||||
function moduleInstall() {
|
||||
// action forward에 등록 (관리자 모드에서 사용하기 위함)
|
||||
$oModuleController = &getController('module');
|
||||
|
||||
$oDB = &DB::getInstance();
|
||||
$oDB->addIndex("documents","idx_module_list_order", array("module_srl","list_order"));
|
||||
$oDB->addIndex("documents","idx_module_update_order", array("module_srl","update_order"));
|
||||
$oDB->addIndex("documents","idx_module_readed_count", array("module_srl","readed_count"));
|
||||
$oDB->addIndex("documents","idx_module_voted_count", array("module_srl","voted_count"));
|
||||
$oDB->addIndex("documents","idx_module_notice", array("module_srl","is_notice"));
|
||||
$oDB->addIndex("documents","idx_module_document_srl", array("module_srl","document_srl"));
|
||||
$oDB->addIndex("documents","idx_module_blamed_count", array("module_srl","blamed_count"));
|
||||
$oDB->addIndex("document_aliases", "idx_module_title", array("module_srl","alias_title"), true);
|
||||
$oDB->addIndex("document_extra_vars", "unique_extra_vars", array("module_srl","document_srl","var_idx","lang_code"), true);
|
||||
|
||||
// 2007. 10. 17 모듈이 삭제될때 등록된 글도 모두 삭제하는 트리거 추가
|
||||
$oModuleController->insertTrigger('module.deleteModule', 'document', 'controller', 'triggerDeleteModuleDocuments', 'after');
|
||||
|
||||
// 2009. 01. 29 Added a trigger for additional setup
|
||||
$oModuleController->insertTrigger('module.dispAdditionSetup', 'document', 'view', 'triggerDispDocumentAdditionSetup', 'before');
|
||||
|
||||
return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 설치가 이상이 없는지 체크하는 method
|
||||
**/
|
||||
function checkUpdate() {
|
||||
$oDB = &DB::getInstance();
|
||||
$oModuleModel = &getModel('module');
|
||||
|
||||
/**
|
||||
* 2007. 7. 25 : 알림 필드(notify_message) 추가
|
||||
**/
|
||||
if(!$oDB->isColumnExists("documents","notify_message")) return true;
|
||||
|
||||
/**
|
||||
* 2007. 8. 23 : document테이블에 결합 인덱스 적용
|
||||
**/
|
||||
if(!$oDB->isIndexExists("documents","idx_module_list_order")) return true;
|
||||
if(!$oDB->isIndexExists("documents","idx_module_update_order")) return true;
|
||||
if(!$oDB->isIndexExists("documents","idx_module_readed_count")) return true;
|
||||
if(!$oDB->isIndexExists("documents","idx_module_voted_count")) return true;
|
||||
|
||||
// 2007. 10. 17 모듈이 삭제될때 등록된 글도 모두 삭제하는 트리거 추가
|
||||
if(!$oModuleModel->getTrigger('module.deleteModule', 'document', 'controller', 'triggerDeleteModuleDocuments', 'after')) return true;
|
||||
|
||||
// 2007. 10. 25 문서 분류에 parent_srl, expand를 추가
|
||||
if(!$oDB->isColumnExists("document_categories","parent_srl")) return true;
|
||||
if(!$oDB->isColumnExists("document_categories","expand")) return true;
|
||||
if(!$oDB->isColumnExists("document_categories","group_srls")) return true;
|
||||
|
||||
// 2007. 11. 20 게시글에 module_srl + is_notice 복합인덱스 만들기
|
||||
if(!$oDB->isIndexExists("documents","idx_module_notice")) return true;
|
||||
|
||||
// 2008. 02. 18 게시글에 module_srl + document_srl 복합인덱스 만들기 (manian님 확인)
|
||||
if(!$oDB->isIndexExists("documents","idx_module_document_srl")) return true;
|
||||
|
||||
/**
|
||||
* 2007. 12. 03 : 확장변수(extra_vars) 컬럼이 없을 경우 추가
|
||||
**/
|
||||
if(!$oDB->isColumnExists("documents","extra_vars")) return true;
|
||||
|
||||
// 2008. 04. 23 blamed count 컬럼 추가
|
||||
if(!$oDB->isColumnExists("documents", "blamed_count")) return true;
|
||||
if(!$oDB->isIndexExists("documents","idx_module_blamed_count")) return true;
|
||||
if(!$oDB->isColumnExists("document_voted_log", "point")) return true;
|
||||
|
||||
// 2008-12-15 문서 분류에 color를 추가
|
||||
if(!$oDB->isColumnExists("document_categories", "color")) return true;
|
||||
|
||||
/**
|
||||
* 2009. 01. 29 : 확장변수 값 테이블에 lang_code가 없을 경우 추가
|
||||
**/
|
||||
if(!$oDB->isColumnExists("document_extra_vars","lang_code")) return true;
|
||||
|
||||
if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'document', 'view', 'triggerDispDocumentAdditionSetup', 'before')) return true;
|
||||
|
||||
// 2009. 03. 09 documents에 lang_code 컬럼 추가
|
||||
if(!$oDB->isColumnExists("documents","lang_code")) return true;
|
||||
|
||||
// 2009. 03. 11 확장변수 값 테이블의 인덱스 점검
|
||||
if(!$oDB->isIndexExists("document_extra_vars", "unique_extra_vars")) return true;
|
||||
|
||||
/**
|
||||
* 2009. 03. 19 : 확장변수 값 테이블에 eid가 없을 경우 추가
|
||||
**/
|
||||
if(!$oDB->isColumnExists("document_extra_keys","eid")) return true;
|
||||
if(!$oDB->isColumnExists("document_extra_vars","eid")) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 업데이트 실행
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
$oDB = &DB::getInstance();
|
||||
$oModuleModel = &getModel('module');
|
||||
$oModuleController = &getController('module');
|
||||
|
||||
/**
|
||||
* 2007. 7. 25 : 알림 필드(notify_message) 추가
|
||||
**/
|
||||
if(!$oDB->isColumnExists("documents","notify_message")) {
|
||||
$oDB->addColumn('documents',"notify_message","char",1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 2007. 8. 23 : document테이블에 결합 인덱스 적용
|
||||
**/
|
||||
if(!$oDB->isIndexExists("documents","idx_module_list_order")) {
|
||||
$oDB->addIndex("documents","idx_module_list_order", array("module_srl","list_order"));
|
||||
}
|
||||
|
||||
if(!$oDB->isIndexExists("documents","idx_module_update_order")) {
|
||||
$oDB->addIndex("documents","idx_module_update_order", array("module_srl","update_order"));
|
||||
}
|
||||
|
||||
if(!$oDB->isIndexExists("documents","idx_module_readed_count")) {
|
||||
$oDB->addIndex("documents","idx_module_readed_count", array("module_srl","readed_count"));
|
||||
}
|
||||
|
||||
if(!$oDB->isIndexExists("documents","idx_module_voted_count")) {
|
||||
$oDB->addIndex("documents","idx_module_voted_count", array("module_srl","voted_count"));
|
||||
}
|
||||
|
||||
// 2007. 10. 17 모듈이 삭제될때 등록된 글도 모두 삭제하는 트리거 추가
|
||||
if(!$oModuleModel->getTrigger('module.deleteModule', 'document', 'controller', 'triggerDeleteModuleDocuments', 'after'))
|
||||
$oModuleController->insertTrigger('module.deleteModule', 'document', 'controller', 'triggerDeleteModuleDocuments', 'after');
|
||||
|
||||
// 2007. 10. 25 문서 분류에 parent_srl, expand를 추가
|
||||
if(!$oDB->isColumnExists("document_categories","parent_srl")) $oDB->addColumn('document_categories',"parent_srl","number",12,0);
|
||||
if(!$oDB->isColumnExists("document_categories","expand")) $oDB->addColumn('document_categories',"expand","char",1,"N");
|
||||
if(!$oDB->isColumnExists("document_categories","group_srls")) $oDB->addColumn('document_categories',"group_srls","text");
|
||||
|
||||
// 2007. 11. 20 게시글에 module_srl + is_notice 복합인덱스 만들기
|
||||
if(!$oDB->isIndexExists("documents","idx_module_notice")) $oDB->addIndex("documents","idx_module_notice", array("module_srl","is_notice"));
|
||||
|
||||
/**
|
||||
* 2007. 12. 03 : 확장변수(extra_vars) 컬럼이 없을 경우 추가
|
||||
**/
|
||||
if(!$oDB->isColumnExists("documents","extra_vars")) $oDB->addColumn('documents','extra_vars','text');
|
||||
|
||||
/**
|
||||
* 2008. 02. 18 게시글에 module_srl + document_srl 복합인덱스 만들기 (manian님 확인)
|
||||
**/
|
||||
if(!$oDB->isIndexExists("documents","idx_module_document_srl")) $oDB->addIndex("documents","idx_module_document_srl", array("module_srl","document_srl"));
|
||||
|
||||
// 2008. 04. 23 blamed count 컬럼 추가
|
||||
if(!$oDB->isColumnExists("documents", "blamed_count")) {
|
||||
$oDB->addColumn('documents', 'blamed_count', 'number', 11, 0, true);
|
||||
$oDB->addIndex('documents', 'idx_blamed_count', array('blamed_count'));
|
||||
}
|
||||
|
||||
if(!$oDB->isIndexExists("documents","idx_module_blamed_count")) {
|
||||
$oDB->addIndex('documents', 'idx_module_blamed_count', array('module_srl', 'blamed_count'));
|
||||
}
|
||||
|
||||
if(!$oDB->isColumnExists("document_voted_log", "point"))
|
||||
$oDB->addColumn('document_voted_log', 'point', 'number', 11, 0, true);
|
||||
|
||||
|
||||
if(!$oDB->isColumnExists("document_categories","color")) $oDB->addColumn('document_categories',"color","char",7);
|
||||
|
||||
/**
|
||||
* 2009. 01. 29 : 확장변수 값 테이블에 lang_code가 없을 경우 추가
|
||||
**/
|
||||
if(!$oDB->isColumnExists("document_extra_vars","lang_code")) $oDB->addColumn('document_extra_vars',"lang_code","varchar",10);
|
||||
|
||||
// 2009. 01. 29 Added a trigger for additional setup
|
||||
if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'document', 'view', 'triggerDispDocumentAdditionSetup', 'before'))
|
||||
$oModuleController->insertTrigger('module.dispAdditionSetup', 'document', 'view', 'triggerDispDocumentAdditionSetup', 'before');
|
||||
|
||||
// 2009. 03. 09 documents에 lang_code 컬럼 추가
|
||||
if(!$oDB->isColumnExists("documents","lang_code")) {
|
||||
$db_info = Context::getDBInfo();
|
||||
$oDB->addColumn('documents',"lang_code","varchar",10, $db_info->lang_code);
|
||||
$obj->lang_code = $db_info->lang_type;
|
||||
executeQuery('document.updateDocumentsLangCode', $obj);
|
||||
}
|
||||
|
||||
// 2009. 03. 11 확장변수 값 테이블의 인덱스 점검
|
||||
if(!$oDB->isIndexExists("document_extra_vars", "unique_extra_vars")) {
|
||||
$oDB->addIndex("document_extra_vars", "unique_extra_vars", array("module_srl","document_srl","var_idx","lang_code"), true);
|
||||
}
|
||||
|
||||
if($oDB->isIndexExists("document_extra_vars", "unique_module_vars")) {
|
||||
$oDB->dropIndex("document_extra_vars", "unique_module_vars", true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 2009. 03. 19 : 확장변수 값 테이블에 eid 없을 경우 추가
|
||||
* 2009. 04. 12 : eid를 등록할 때 다른 필드 값이 변경되는 문제 수정 #17922959
|
||||
**/
|
||||
if(!$oDB->isColumnExists("document_extra_keys","eid")) {
|
||||
$oDB->addColumn("document_extra_keys","eid","varchar",40);
|
||||
|
||||
$output = executeQuery('document.getGroupsExtraKeys', $obj);
|
||||
if($output->toBool() && $output->data && count($output->data)) {
|
||||
foreach($output->data as $extra_keys) {
|
||||
$args->module_srl = $extra_keys->module_srl;
|
||||
$args->var_idx = $extra_keys->idx;
|
||||
$args->new_eid = "extra_vars".$extra_keys->idx;
|
||||
$output = executeQuery('document.updateDocumentExtraKeyEid', $args);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!$oDB->isColumnExists("document_extra_vars","eid")) {
|
||||
$oDB->addColumn("document_extra_vars","eid","varchar",40);
|
||||
$obj->var_idx = '-1,-2';
|
||||
$output = executeQuery('document.getGroupsExtraVars', $obj);
|
||||
if($output->toBool() && $output->data && count($output->data)) {
|
||||
foreach($output->data as $extra_vars) {
|
||||
$args->module_srl = $extra_vars->module_srl;
|
||||
$args->var_idx = $extra_vars->idx;
|
||||
$args->new_eid = "extra_vars".$extra_vars->idx;
|
||||
$output = executeQuery('document.updateDocumentExtraVarEid', $args);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return new Object(0,'success_updated');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 캐시 파일 재생성
|
||||
**/
|
||||
function recompileCache() {
|
||||
// 게시글 분류 캐시 파일 삭제
|
||||
FileHandler::removeFilesInDir(_XE_PATH_."files/cache/document_category");
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @class documentItem
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief document 객체
|
||||
**/
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,121 +1,121 @@
|
|||
<?php
|
||||
/**
|
||||
* @class documentView
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief document 모듈의 View class
|
||||
**/
|
||||
|
||||
class documentView extends document {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 문서 인쇄 기능
|
||||
* 해당 글만 찾아서 그냥 출력해버린다;;
|
||||
**/
|
||||
function dispDocumentPrint() {
|
||||
// 목록 구현에 필요한 변수들을 가져온다
|
||||
$document_srl = Context::get('document_srl');
|
||||
|
||||
$oModuleModel = &getModel('module');
|
||||
$module_info = $oModuleModel->getModuleInfoByDocumentSrl($document_srl);
|
||||
|
||||
// document 객체를 생성. 기본 데이터 구조의 경우 document모듈만 쓰면 만사 해결.. -_-;
|
||||
$oDocumentModel = &getModel('document');
|
||||
|
||||
// 선택된 문서 표시를 위한 객체 생성
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl, $this->grant->manager);
|
||||
if(!$oDocument->isExists()) return new Object(-1,'msg_invalid_request');
|
||||
|
||||
// 권한 체크
|
||||
if(!$oDocument->isAccessible()) return new Object(-1,'msg_not_permitted');
|
||||
|
||||
// 모듈 정보 세팅
|
||||
Context::set('module_info', $module_info);
|
||||
|
||||
// 브라우저 타이틀 설정
|
||||
Context::setBrowserTitle($oDocument->getTitleText());
|
||||
Context::set('oDocument', $oDocument);
|
||||
|
||||
Context::set('layout','none');
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('print_page');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 미리 보기
|
||||
**/
|
||||
function dispDocumentPreview() {
|
||||
Context::set('layout','none');
|
||||
|
||||
$content = Context::get('content');
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('preview_page');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 관리자가 선택한 문서에 대한 관리
|
||||
**/
|
||||
function dispDocumentManageDocument() {
|
||||
if(!Context::get('is_logged')) return new Object(-1,'msg_not_permitted');
|
||||
|
||||
// 선택한 목록을 세션에서 가져옴
|
||||
$flag_list = $_SESSION['document_management'];
|
||||
if(count($flag_list)) {
|
||||
foreach($flag_list as $key => $val) {
|
||||
if(!is_bool($val)) continue;
|
||||
$document_srl_list[] = $key;
|
||||
}
|
||||
}
|
||||
|
||||
if(count($document_srl_list)) {
|
||||
$oDocumentModel = &getModel('document');
|
||||
$document_list = $oDocumentModel->getDocuments($document_srl_list, $this->grant->is_admin);
|
||||
Context::set('document_list', $document_list);
|
||||
}
|
||||
|
||||
$oModuleModel = &getModel('module');
|
||||
|
||||
// 모듈 카테고리 목록과 모듈 목록의 조합
|
||||
if(count($module_list)>1) Context::set('module_list', $module_categories);
|
||||
|
||||
// 팝업 레이아웃 선택
|
||||
$this->setLayoutPath('./common/tpl');
|
||||
$this->setLayoutFile('popup_layout');
|
||||
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('checked_list');
|
||||
}
|
||||
|
||||
function triggerDispDocumentAdditionSetup(&$obj) {
|
||||
$current_module_srl = Context::get('module_srl');
|
||||
$current_module_srls = Context::get('module_srls');
|
||||
|
||||
if(!$current_module_srl && !$current_module_srls) {
|
||||
// 선택된 모듈의 정보를 가져옴
|
||||
$current_module_info = Context::get('current_module_info');
|
||||
$current_module_srl = $current_module_info->module_srl;
|
||||
if(!$current_module_srl) return new Object();
|
||||
}
|
||||
|
||||
$oModuleModel = &getModel('module');
|
||||
if($current_module_srl)
|
||||
{
|
||||
$document_config = $oModuleModel->getModulePartConfig('document', $current_module_srl);
|
||||
}
|
||||
if(!isset($document_config->use_history)) $document_config->use_history = 'N';
|
||||
Context::set('document_config', $document_config);
|
||||
|
||||
$oTemplate = &TemplateHandler::getInstance();
|
||||
$tpl = $oTemplate->compile($this->module_path.'tpl', 'document_module_config');
|
||||
$obj .= $tpl;
|
||||
|
||||
return new Object();
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class documentView
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief document 모듈의 View class
|
||||
**/
|
||||
|
||||
class documentView extends document {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 문서 인쇄 기능
|
||||
* 해당 글만 찾아서 그냥 출력해버린다;;
|
||||
**/
|
||||
function dispDocumentPrint() {
|
||||
// 목록 구현에 필요한 변수들을 가져온다
|
||||
$document_srl = Context::get('document_srl');
|
||||
|
||||
$oModuleModel = &getModel('module');
|
||||
$module_info = $oModuleModel->getModuleInfoByDocumentSrl($document_srl);
|
||||
|
||||
// document 객체를 생성. 기본 데이터 구조의 경우 document모듈만 쓰면 만사 해결.. -_-;
|
||||
$oDocumentModel = &getModel('document');
|
||||
|
||||
// 선택된 문서 표시를 위한 객체 생성
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl, $this->grant->manager);
|
||||
if(!$oDocument->isExists()) return new Object(-1,'msg_invalid_request');
|
||||
|
||||
// 권한 체크
|
||||
if(!$oDocument->isAccessible()) return new Object(-1,'msg_not_permitted');
|
||||
|
||||
// 모듈 정보 세팅
|
||||
Context::set('module_info', $module_info);
|
||||
|
||||
// 브라우저 타이틀 설정
|
||||
Context::setBrowserTitle($oDocument->getTitleText());
|
||||
Context::set('oDocument', $oDocument);
|
||||
|
||||
Context::set('layout','none');
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('print_page');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 미리 보기
|
||||
**/
|
||||
function dispDocumentPreview() {
|
||||
Context::set('layout','none');
|
||||
|
||||
$content = Context::get('content');
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('preview_page');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 관리자가 선택한 문서에 대한 관리
|
||||
**/
|
||||
function dispDocumentManageDocument() {
|
||||
if(!Context::get('is_logged')) return new Object(-1,'msg_not_permitted');
|
||||
|
||||
// 선택한 목록을 세션에서 가져옴
|
||||
$flag_list = $_SESSION['document_management'];
|
||||
if(count($flag_list)) {
|
||||
foreach($flag_list as $key => $val) {
|
||||
if(!is_bool($val)) continue;
|
||||
$document_srl_list[] = $key;
|
||||
}
|
||||
}
|
||||
|
||||
if(count($document_srl_list)) {
|
||||
$oDocumentModel = &getModel('document');
|
||||
$document_list = $oDocumentModel->getDocuments($document_srl_list, $this->grant->is_admin);
|
||||
Context::set('document_list', $document_list);
|
||||
}
|
||||
|
||||
$oModuleModel = &getModel('module');
|
||||
|
||||
// 모듈 카테고리 목록과 모듈 목록의 조합
|
||||
if(count($module_list)>1) Context::set('module_list', $module_categories);
|
||||
|
||||
// 팝업 레이아웃 선택
|
||||
$this->setLayoutPath('./common/tpl');
|
||||
$this->setLayoutFile('popup_layout');
|
||||
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('checked_list');
|
||||
}
|
||||
|
||||
function triggerDispDocumentAdditionSetup(&$obj) {
|
||||
$current_module_srl = Context::get('module_srl');
|
||||
$current_module_srls = Context::get('module_srls');
|
||||
|
||||
if(!$current_module_srl && !$current_module_srls) {
|
||||
// 선택된 모듈의 정보를 가져옴
|
||||
$current_module_info = Context::get('current_module_info');
|
||||
$current_module_srl = $current_module_info->module_srl;
|
||||
if(!$current_module_srl) return new Object();
|
||||
}
|
||||
|
||||
$oModuleModel = &getModel('module');
|
||||
if($current_module_srl)
|
||||
{
|
||||
$document_config = $oModuleModel->getModulePartConfig('document', $current_module_srl);
|
||||
}
|
||||
if(!isset($document_config->use_history)) $document_config->use_history = 'N';
|
||||
Context::set('document_config', $document_config);
|
||||
|
||||
$oTemplate = &TemplateHandler::getInstance();
|
||||
$tpl = $oTemplate->compile($this->module_path.'tpl', 'document_module_config');
|
||||
$obj .= $tpl;
|
||||
|
||||
return new Object();
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,97 +1,97 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/document/lang/en.lang.php
|
||||
* @author zero <zero@nzeo.com>
|
||||
* @brief Document module's basic language pack
|
||||
**/
|
||||
|
||||
$lang->document_list = 'Documents List';
|
||||
$lang->thumbnail_type = 'Thumbnail Type';
|
||||
$lang->thumbnail_crop = 'Crop';
|
||||
$lang->thumbnail_ratio = 'Ratio';
|
||||
$lang->cmd_delete_all_thumbnail = 'Delete all thumbnails';
|
||||
$lang->move_target_module = "Target module ";
|
||||
$lang->title_bold = 'Bold';
|
||||
$lang->title_color = 'Color';
|
||||
$lang->new_document_count = 'New documents';
|
||||
|
||||
$lang->parent_category_title = 'Parent Category';
|
||||
$lang->category_title = 'Category';
|
||||
$lang->category_color = 'Category Font Color';
|
||||
$lang->expand = 'Expand';
|
||||
$lang->category_group_srls = 'Accessable Group';
|
||||
|
||||
$lang->cmd_make_child = 'Add Child Category';
|
||||
$lang->cmd_enable_move_category = "Change Category Position (Drag the top menu after selection)";
|
||||
|
||||
$lang->about_category_title = 'Please input category name';
|
||||
$lang->about_expand = 'By selecting this option, it will be always expanded';
|
||||
$lang->about_category_group_srls = 'Only selected group will be able to use current category';
|
||||
$lang->about_category_color = 'You can set font color of category.';
|
||||
|
||||
$lang->cmd_search_next = 'Search Next';
|
||||
|
||||
$lang->cmd_temp_save = 'Temporary Save';
|
||||
|
||||
$lang->cmd_toggle_checked_document = 'Reverse selected items';
|
||||
$lang->cmd_delete_checked_document = 'Delete selected';
|
||||
$lang->cmd_document_do = 'I want to';
|
||||
|
||||
$lang->msg_cart_is_null = 'Please select the articles to delete';
|
||||
$lang->msg_category_not_moved = 'Could not be moved';
|
||||
$lang->msg_is_secret = 'This is a secret article';
|
||||
$lang->msg_checked_document_is_deleted = '%d article(s) was(were) deleted';
|
||||
|
||||
// Search targets in admin page
|
||||
$lang->search_target_list = array(
|
||||
'title' => 'Subject',
|
||||
'content' => 'Content',
|
||||
'user_id' => 'User ID',
|
||||
'member_srl' => 'Member Serial Number',
|
||||
'user_name' => 'User Name',
|
||||
'nick_name' => 'Nickname',
|
||||
'email_address' => 'Email',
|
||||
'homepage' => 'Homepage',
|
||||
'is_notice' => 'Notice',
|
||||
'is_secret' => 'Secret',
|
||||
'tags' => 'Tag',
|
||||
'readed_count' => 'Number of Views (over)',
|
||||
'voted_count' => 'Number of Votes (over)',
|
||||
'comment_count ' => 'Number of Comments (over)',
|
||||
'trackback_count ' => 'Number of Trackbacks (over)',
|
||||
'uploaded_count ' => 'Number of Attachments (over)',
|
||||
'regdate' => 'Date',
|
||||
'last_update' => 'Last Modified Date',
|
||||
'ipaddress' => 'IP Address',
|
||||
);
|
||||
|
||||
$lang->alias = "Alias";
|
||||
$lang->history = "History";
|
||||
$lang->about_use_history = "History can restore documents to previous revisions";
|
||||
$lang->trace_only = "Trace only";
|
||||
|
||||
$lang->cmd_trash = 'Trashcan';
|
||||
$lang->cmd_restore = 'Restore';
|
||||
$lang->cmd_restore_all = 'Restore All';
|
||||
|
||||
$lang->in_trash = 'Trashcan';
|
||||
$lang->trash_nick_name = 'Deleter';
|
||||
$lang->trash_date = 'Deleted date';
|
||||
$lang->trash_description = 'Description';
|
||||
|
||||
$lang->search_target_trash_list = array(
|
||||
'title' => 'Title',
|
||||
'content' => 'Content',
|
||||
'user_id' => 'User ID',
|
||||
'member_srl' => 'Member srl',
|
||||
'user_name' => 'User name',
|
||||
'nick_name' => 'Nickname',
|
||||
'trash_member_srl' => 'Deleter srl',
|
||||
'trash_user_name' => 'Deleter name',
|
||||
'trash_nick_name' => 'Deleter nickname',
|
||||
'trash_date' => 'Deleted date',
|
||||
'trash_ipaddress' => 'Deleter IP address',
|
||||
);
|
||||
|
||||
$lang->success_trashed = "Successfully moved to trashcan";
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file modules/document/lang/en.lang.php
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief Document module's basic language pack
|
||||
**/
|
||||
|
||||
$lang->document_list = 'Documents List';
|
||||
$lang->thumbnail_type = 'Thumbnail Type';
|
||||
$lang->thumbnail_crop = 'Crop';
|
||||
$lang->thumbnail_ratio = 'Ratio';
|
||||
$lang->cmd_delete_all_thumbnail = 'Delete all thumbnails';
|
||||
$lang->move_target_module = "Target module ";
|
||||
$lang->title_bold = 'Bold';
|
||||
$lang->title_color = 'Color';
|
||||
$lang->new_document_count = 'New documents';
|
||||
|
||||
$lang->parent_category_title = 'Parent Category';
|
||||
$lang->category_title = 'Category';
|
||||
$lang->category_color = 'Category Font Color';
|
||||
$lang->expand = 'Expand';
|
||||
$lang->category_group_srls = 'Accessable Group';
|
||||
|
||||
$lang->cmd_make_child = 'Add Child Category';
|
||||
$lang->cmd_enable_move_category = "Change Category Position (Drag the top menu after selection)";
|
||||
|
||||
$lang->about_category_title = 'Please input category name';
|
||||
$lang->about_expand = 'By selecting this option, it will be always expanded';
|
||||
$lang->about_category_group_srls = 'Only selected group will be able to use current category';
|
||||
$lang->about_category_color = 'You can set font color of category.';
|
||||
|
||||
$lang->cmd_search_next = 'Search Next';
|
||||
|
||||
$lang->cmd_temp_save = 'Temporary Save';
|
||||
|
||||
$lang->cmd_toggle_checked_document = 'Reverse selected items';
|
||||
$lang->cmd_delete_checked_document = 'Delete selected';
|
||||
$lang->cmd_document_do = 'I want to';
|
||||
|
||||
$lang->msg_cart_is_null = 'Please select the articles to delete';
|
||||
$lang->msg_category_not_moved = 'Could not be moved';
|
||||
$lang->msg_is_secret = 'This is a secret article';
|
||||
$lang->msg_checked_document_is_deleted = '%d article(s) was(were) deleted';
|
||||
|
||||
// Search targets in admin page
|
||||
$lang->search_target_list = array(
|
||||
'title' => 'Subject',
|
||||
'content' => 'Content',
|
||||
'user_id' => 'User ID',
|
||||
'member_srl' => 'Member Serial Number',
|
||||
'user_name' => 'User Name',
|
||||
'nick_name' => 'Nickname',
|
||||
'email_address' => 'Email',
|
||||
'homepage' => 'Homepage',
|
||||
'is_notice' => 'Notice',
|
||||
'is_secret' => 'Secret',
|
||||
'tags' => 'Tag',
|
||||
'readed_count' => 'Number of Views (over)',
|
||||
'voted_count' => 'Number of Votes (over)',
|
||||
'comment_count ' => 'Number of Comments (over)',
|
||||
'trackback_count ' => 'Number of Trackbacks (over)',
|
||||
'uploaded_count ' => 'Number of Attachments (over)',
|
||||
'regdate' => 'Date',
|
||||
'last_update' => 'Last Modified Date',
|
||||
'ipaddress' => 'IP Address',
|
||||
);
|
||||
|
||||
$lang->alias = "Alias";
|
||||
$lang->history = "History";
|
||||
$lang->about_use_history = "History can restore documents to previous revisions";
|
||||
$lang->trace_only = "Trace only";
|
||||
|
||||
$lang->cmd_trash = 'Trashcan';
|
||||
$lang->cmd_restore = 'Restore';
|
||||
$lang->cmd_restore_all = 'Restore All';
|
||||
|
||||
$lang->in_trash = 'Trashcan';
|
||||
$lang->trash_nick_name = 'Deleter';
|
||||
$lang->trash_date = 'Deleted date';
|
||||
$lang->trash_description = 'Description';
|
||||
|
||||
$lang->search_target_trash_list = array(
|
||||
'title' => 'Title',
|
||||
'content' => 'Content',
|
||||
'user_id' => 'User ID',
|
||||
'member_srl' => 'Member srl',
|
||||
'user_name' => 'User name',
|
||||
'nick_name' => 'Nickname',
|
||||
'trash_member_srl' => 'Deleter srl',
|
||||
'trash_user_name' => 'Deleter name',
|
||||
'trash_nick_name' => 'Deleter nickname',
|
||||
'trash_date' => 'Deleted date',
|
||||
'trash_ipaddress' => 'Deleter IP address',
|
||||
);
|
||||
|
||||
$lang->success_trashed = "Successfully moved to trashcan";
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @archivo modules/document/lang/es.lang.php
|
||||
* @autor zero <zero@nzeo.com>
|
||||
* @autor NHN (developers@xpressengine.com)
|
||||
* @sumario Paquete del idioma español para el módulo de documentos.
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,81 +1,81 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/document/lang/fr.lang.php
|
||||
* @author zero <zero@nzeo.com> Traduit par Pierre Duvent <Pierreduvent@gmail.com>
|
||||
* @brief Paquet du langage en français pour le module de Document
|
||||
**/
|
||||
|
||||
$lang->document_list = 'Liste des Documents';
|
||||
$lang->thumbnail_type = 'Type de la Vignette';
|
||||
$lang->thumbnail_crop = 'Rogner';
|
||||
$lang->thumbnail_ratio = 'Proportion';
|
||||
$lang->cmd_delete_all_thumbnail = 'Supprimer toutes les vignettes';
|
||||
$lang->title_bold = 'Gras';
|
||||
$lang->title_color = 'Couleur';
|
||||
$lang->new_document_count = '새글';
|
||||
|
||||
$lang->parent_category_title = 'catégorie supérieure';
|
||||
$lang->category_title = 'Catégorie';
|
||||
$lang->category_color = '분류 폰트색깔';
|
||||
$lang->expand = 'Etendre';
|
||||
$lang->category_group_srls = 'Groupe Accessible';
|
||||
$lang->cmd_make_child = 'Ajouter une catégorie inférieure';
|
||||
$lang->cmd_enable_move_category = "Bouger la position de la catégorie (Cochez la case et puis glisser la catégorie que vous voulez déplacer)";
|
||||
$lang->about_category_title = 'Entrez le nom de la catégorie, S.V.P.';
|
||||
$lang->about_expand = 'Si vous cochez la case à cocher, ce sera toujours tendu';
|
||||
$lang->about_category_group_srls = 'Le groupe choisi seulement pourra utiliser la catégorie courante';
|
||||
$lang->about_category_color = 'You can set font color of category.';
|
||||
|
||||
$lang->cmd_search_next = 'Recherche Suivante';
|
||||
|
||||
$lang->cmd_temp_save = 'Conserver temporairement';
|
||||
|
||||
$lang->cmd_toggle_checked_document = 'Renverser les choisis';
|
||||
$lang->cmd_delete_checked_document = 'Supprimer les choisis';
|
||||
$lang->cmd_document_do = 'Vous voudriez..';
|
||||
|
||||
$lang->msg_cart_is_null = 'Choisissez les articles à supprimer, S.V.P.';
|
||||
$lang->msg_category_not_moved = 'Ne peut(peuvent) pas être bougé(s)';
|
||||
$lang->msg_is_secret = 'Cet article est secret';
|
||||
$lang->msg_checked_document_is_deleted = '%d article(s) est(sont) supprimé(s)';
|
||||
|
||||
$lang->move_target_module = "Module à déménager";
|
||||
|
||||
// Search targets in admin page
|
||||
$lang->search_target_list = array(
|
||||
'title' => 'Titre',
|
||||
'content' => 'Contenu',
|
||||
'user_id' => 'Compte',
|
||||
'member_srl' => 'Numéro de Série du Membre',
|
||||
'user_name' => 'Nom',
|
||||
'nick_name' => 'Surnom',
|
||||
'email_address' => 'Mél',
|
||||
'homepage' => 'Page d\'accueil',
|
||||
'is_notice' => 'Notice',
|
||||
'is_secret' => 'Secret',
|
||||
'tags' => 'Balises',
|
||||
'readed_count' => 'Vues (surplus)',
|
||||
'voted_count' => 'Recommandés (surplus)',
|
||||
'comment_count ' => 'Commentaires (surplus)',
|
||||
'trackback_count ' => 'Rétroliens (surplus)',
|
||||
'uploaded_count ' => 'Fichiers Attachés (surplus)',
|
||||
'regdate' => 'Enrégistré',
|
||||
'last_update' => 'La Dernière Mise à Jour',
|
||||
'ipaddress' => 'Adresse IP',
|
||||
);
|
||||
$lang->alias = "Alias";
|
||||
$lang->history = "히스토리";
|
||||
$lang->about_use_history = "히스토리 기능의 사용여부를 지정합니다. 히스토리 기능을 사용할 경우 문서 수정시 이전 리비전을 기록하고 복원할 수 있습니다.";
|
||||
$lang->trace_only = "흔적만 남김";
|
||||
|
||||
$lang->cmd_trash = 'Trashcan';
|
||||
$lang->cmd_restore = 'Restore';
|
||||
$lang->cmd_restore_all = 'Restore All';
|
||||
|
||||
$lang->in_trash = 'Trashcan';
|
||||
$lang->trash_nick_name = 'Person who deleted';
|
||||
$lang->trash_date = 'Deleted date';
|
||||
$lang->trash_description = 'Description';
|
||||
|
||||
$lang->success_trashed = "Successfully moved to trashcan";
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file modules/document/lang/fr.lang.php
|
||||
* @author NHN (developers@xpressengine.com) Traduit par Pierre Duvent <Pierreduvent@gmail.com>
|
||||
* @brief Paquet du langage en français pour le module de Document
|
||||
**/
|
||||
|
||||
$lang->document_list = 'Liste des Documents';
|
||||
$lang->thumbnail_type = 'Type de la Vignette';
|
||||
$lang->thumbnail_crop = 'Rogner';
|
||||
$lang->thumbnail_ratio = 'Proportion';
|
||||
$lang->cmd_delete_all_thumbnail = 'Supprimer toutes les vignettes';
|
||||
$lang->title_bold = 'Gras';
|
||||
$lang->title_color = 'Couleur';
|
||||
$lang->new_document_count = '새글';
|
||||
|
||||
$lang->parent_category_title = 'catégorie supérieure';
|
||||
$lang->category_title = 'Catégorie';
|
||||
$lang->category_color = '분류 폰트색깔';
|
||||
$lang->expand = 'Etendre';
|
||||
$lang->category_group_srls = 'Groupe Accessible';
|
||||
$lang->cmd_make_child = 'Ajouter une catégorie inférieure';
|
||||
$lang->cmd_enable_move_category = "Bouger la position de la catégorie (Cochez la case et puis glisser la catégorie que vous voulez déplacer)";
|
||||
$lang->about_category_title = 'Entrez le nom de la catégorie, S.V.P.';
|
||||
$lang->about_expand = 'Si vous cochez la case à cocher, ce sera toujours tendu';
|
||||
$lang->about_category_group_srls = 'Le groupe choisi seulement pourra utiliser la catégorie courante';
|
||||
$lang->about_category_color = 'You can set font color of category.';
|
||||
|
||||
$lang->cmd_search_next = 'Recherche Suivante';
|
||||
|
||||
$lang->cmd_temp_save = 'Conserver temporairement';
|
||||
|
||||
$lang->cmd_toggle_checked_document = 'Renverser les choisis';
|
||||
$lang->cmd_delete_checked_document = 'Supprimer les choisis';
|
||||
$lang->cmd_document_do = 'Vous voudriez..';
|
||||
|
||||
$lang->msg_cart_is_null = 'Choisissez les articles à supprimer, S.V.P.';
|
||||
$lang->msg_category_not_moved = 'Ne peut(peuvent) pas être bougé(s)';
|
||||
$lang->msg_is_secret = 'Cet article est secret';
|
||||
$lang->msg_checked_document_is_deleted = '%d article(s) est(sont) supprimé(s)';
|
||||
|
||||
$lang->move_target_module = "Module à déménager";
|
||||
|
||||
// Search targets in admin page
|
||||
$lang->search_target_list = array(
|
||||
'title' => 'Titre',
|
||||
'content' => 'Contenu',
|
||||
'user_id' => 'Compte',
|
||||
'member_srl' => 'Numéro de Série du Membre',
|
||||
'user_name' => 'Nom',
|
||||
'nick_name' => 'Surnom',
|
||||
'email_address' => 'Mél',
|
||||
'homepage' => 'Page d\'accueil',
|
||||
'is_notice' => 'Notice',
|
||||
'is_secret' => 'Secret',
|
||||
'tags' => 'Balises',
|
||||
'readed_count' => 'Vues (surplus)',
|
||||
'voted_count' => 'Recommandés (surplus)',
|
||||
'comment_count ' => 'Commentaires (surplus)',
|
||||
'trackback_count ' => 'Rétroliens (surplus)',
|
||||
'uploaded_count ' => 'Fichiers Attachés (surplus)',
|
||||
'regdate' => 'Enrégistré',
|
||||
'last_update' => 'La Dernière Mise à Jour',
|
||||
'ipaddress' => 'Adresse IP',
|
||||
);
|
||||
$lang->alias = "Alias";
|
||||
$lang->history = "히스토리";
|
||||
$lang->about_use_history = "히스토리 기능의 사용여부를 지정합니다. 히스토리 기능을 사용할 경우 문서 수정시 이전 리비전을 기록하고 복원할 수 있습니다.";
|
||||
$lang->trace_only = "흔적만 남김";
|
||||
|
||||
$lang->cmd_trash = 'Trashcan';
|
||||
$lang->cmd_restore = 'Restore';
|
||||
$lang->cmd_restore_all = 'Restore All';
|
||||
|
||||
$lang->in_trash = 'Trashcan';
|
||||
$lang->trash_nick_name = 'Person who deleted';
|
||||
$lang->trash_date = 'Deleted date';
|
||||
$lang->trash_description = 'Description';
|
||||
|
||||
$lang->success_trashed = "Successfully moved to trashcan";
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,99 +1,99 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/document/lang/jp.lang.php
|
||||
* @author zero <zero@nzeo.com> 翻訳:RisaPapa、ミニミ
|
||||
* @brief ドキュメント(document)モジュールの基本言語パッケージ
|
||||
**/
|
||||
|
||||
$lang->document_list = 'ドキュメントリスト';
|
||||
$lang->thumbnail_type = 'サムネールタイプ';
|
||||
$lang->thumbnail_crop = 'トリミングする';
|
||||
$lang->thumbnail_ratio = '比率に合わせる';
|
||||
$lang->cmd_delete_all_thumbnail = 'すべてのサムネール削除';
|
||||
$lang->title_bold = 'タイトル太字';
|
||||
$lang->title_color = 'タイトルの色';
|
||||
$lang->new_document_count = '新規';
|
||||
|
||||
$lang->parent_category_title = '上位カテゴリ名';
|
||||
$lang->category_title = 'カテゴリ名';
|
||||
$lang->category_color = 'カテゴリフォント色';
|
||||
$lang->expand = '拡張表示';
|
||||
$lang->category_group_srls = 'グループ制限';
|
||||
|
||||
$lang->cmd_make_child = '下位カテゴリ追加';
|
||||
$lang->cmd_enable_move_category = 'カテゴリ位置変更(選択後上のメニューをドラッグして下さい)';
|
||||
|
||||
$lang->about_category_title = 'カテゴリ名を入力して下さい。';
|
||||
$lang->about_expand = 'チェックすると常に展開された状態になります。';
|
||||
$lang->about_category_group_srls = '選択したグループのみ、現在のカテゴリの指定が出来ます。';
|
||||
$lang->about_category_color = 'カテゴリのフォント色を設定します。';
|
||||
|
||||
$lang->cmd_search_next = '継続検索';
|
||||
|
||||
$lang->cmd_temp_save = '一時保存';
|
||||
|
||||
$lang->cmd_toggle_checked_document = '選択項目反転';
|
||||
$lang->cmd_delete_checked_document = '選択項目削除';
|
||||
$lang->cmd_document_do = 'この書き込みを..';
|
||||
|
||||
$lang->msg_cart_is_null = '削除する書き込みを選択して下さい。';
|
||||
$lang->msg_category_not_moved = '移動出来ません。';
|
||||
$lang->msg_is_secret = '非公開設定の書き込みです。';
|
||||
$lang->msg_checked_document_is_deleted = '%d個の書き込みが削除されました。';
|
||||
|
||||
$lang->move_target_module = '移動対象モジュール';
|
||||
|
||||
// 管理者ページで検索する内容
|
||||
$lang->search_target_list = array(
|
||||
'title' => 'タイトル',
|
||||
'content' => '内容',
|
||||
'user_id' => 'ユーザーID',
|
||||
'member_srl' => '会員番号',
|
||||
'user_name' => 'ユーザ名',
|
||||
'nick_name' => 'ニックネーム',
|
||||
'email_address' => 'メールアドレス',
|
||||
'homepage' => 'ホームページURL',
|
||||
'is_notice' => 'お知らせ',
|
||||
'is_secret' => '非公開書き込み',
|
||||
'tags' => 'タグ',
|
||||
'readed_count' => '閲覧数(以上)',
|
||||
'voted_count' => '推薦数(以上)',
|
||||
'comment_count ' => 'コメント数(以上)',
|
||||
'trackback_count ' => 'トラックバック数(以上)',
|
||||
'uploaded_count ' => '添付ファイル数(以上)',
|
||||
'regdate' => '登録日',
|
||||
'last_update' => '最近修正日',
|
||||
'ipaddress' => 'IPアドレス',
|
||||
);
|
||||
|
||||
$lang->alias = 'アリアス(Alias)';
|
||||
$lang->history = '履歴';
|
||||
$lang->about_use_history = '履歴機能を使用するかを設定します。履歴機能を使用すると文書修正のバージョンを管理し、過去のバージョンから復元することも可能です。';
|
||||
$lang->trace_only = '記録だけ残す';
|
||||
|
||||
$lang->cmd_trash = "ごみ箱";
|
||||
$lang->cmd_restore = "差し戻し";
|
||||
$lang->cmd_restore_all = "すべて差し戻し";
|
||||
|
||||
$lang->in_trash = "ごみ箱";
|
||||
$lang->trash_nick_name = "削除者のニックネーム";
|
||||
$lang->trash_date = "削除日";
|
||||
$lang->trash_description = "理由";
|
||||
|
||||
// 管理者ページでのごみ箱の検索対象
|
||||
$lang->search_target_trash_list = array(
|
||||
'title' => 'タイトル',
|
||||
'content' => '内容',
|
||||
'user_id' => 'ユーザーID',
|
||||
'member_srl' => '会員番号',
|
||||
'user_name' => 'ユーザー名',
|
||||
'nick_name' => 'ニックネーム',
|
||||
'trash_member_srl' => '削除者会員番号',
|
||||
'trash_user_name' => '削除者ユーザー名',
|
||||
'trash_nick_name' => '削除者ニックネーム',
|
||||
'trash_date' => '削除日',
|
||||
'trash_ipaddress' => '削除者のIPアドレス',
|
||||
);
|
||||
|
||||
$lang->success_trashed = "Successfully moved to trashcan";
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file modules/document/lang/jp.lang.php
|
||||
* @author NHN (developers@xpressengine.com) 翻訳:RisaPapa、ミニミ
|
||||
* @brief ドキュメント(document)モジュールの基本言語パッケージ
|
||||
**/
|
||||
|
||||
$lang->document_list = 'ドキュメントリスト';
|
||||
$lang->thumbnail_type = 'サムネールタイプ';
|
||||
$lang->thumbnail_crop = 'トリミングする';
|
||||
$lang->thumbnail_ratio = '比率に合わせる';
|
||||
$lang->cmd_delete_all_thumbnail = 'すべてのサムネール削除';
|
||||
$lang->title_bold = 'タイトル太字';
|
||||
$lang->title_color = 'タイトルの色';
|
||||
$lang->new_document_count = '新規';
|
||||
|
||||
$lang->parent_category_title = '上位カテゴリ名';
|
||||
$lang->category_title = 'カテゴリ名';
|
||||
$lang->category_color = 'カテゴリフォント色';
|
||||
$lang->expand = '拡張表示';
|
||||
$lang->category_group_srls = 'グループ制限';
|
||||
|
||||
$lang->cmd_make_child = '下位カテゴリ追加';
|
||||
$lang->cmd_enable_move_category = 'カテゴリ位置変更(選択後上のメニューをドラッグして下さい)';
|
||||
|
||||
$lang->about_category_title = 'カテゴリ名を入力して下さい。';
|
||||
$lang->about_expand = 'チェックすると常に展開された状態になります。';
|
||||
$lang->about_category_group_srls = '選択したグループのみ、現在のカテゴリの指定が出来ます。';
|
||||
$lang->about_category_color = 'カテゴリのフォント色を設定します。';
|
||||
|
||||
$lang->cmd_search_next = '継続検索';
|
||||
|
||||
$lang->cmd_temp_save = '一時保存';
|
||||
|
||||
$lang->cmd_toggle_checked_document = '選択項目反転';
|
||||
$lang->cmd_delete_checked_document = '選択項目削除';
|
||||
$lang->cmd_document_do = 'この書き込みを..';
|
||||
|
||||
$lang->msg_cart_is_null = '削除する書き込みを選択して下さい。';
|
||||
$lang->msg_category_not_moved = '移動出来ません。';
|
||||
$lang->msg_is_secret = '非公開設定の書き込みです。';
|
||||
$lang->msg_checked_document_is_deleted = '%d個の書き込みが削除されました。';
|
||||
|
||||
$lang->move_target_module = '移動対象モジュール';
|
||||
|
||||
// 管理者ページで検索する内容
|
||||
$lang->search_target_list = array(
|
||||
'title' => 'タイトル',
|
||||
'content' => '内容',
|
||||
'user_id' => 'ユーザーID',
|
||||
'member_srl' => '会員番号',
|
||||
'user_name' => 'ユーザ名',
|
||||
'nick_name' => 'ニックネーム',
|
||||
'email_address' => 'メールアドレス',
|
||||
'homepage' => 'ホームページURL',
|
||||
'is_notice' => 'お知らせ',
|
||||
'is_secret' => '非公開書き込み',
|
||||
'tags' => 'タグ',
|
||||
'readed_count' => '閲覧数(以上)',
|
||||
'voted_count' => '推薦数(以上)',
|
||||
'comment_count ' => 'コメント数(以上)',
|
||||
'trackback_count ' => 'トラックバック数(以上)',
|
||||
'uploaded_count ' => '添付ファイル数(以上)',
|
||||
'regdate' => '登録日',
|
||||
'last_update' => '最近修正日',
|
||||
'ipaddress' => 'IPアドレス',
|
||||
);
|
||||
|
||||
$lang->alias = 'アリアス(Alias)';
|
||||
$lang->history = '履歴';
|
||||
$lang->about_use_history = '履歴機能を使用するかを設定します。履歴機能を使用すると文書修正のバージョンを管理し、過去のバージョンから復元することも可能です。';
|
||||
$lang->trace_only = '記録だけ残す';
|
||||
|
||||
$lang->cmd_trash = "ごみ箱";
|
||||
$lang->cmd_restore = "差し戻し";
|
||||
$lang->cmd_restore_all = "すべて差し戻し";
|
||||
|
||||
$lang->in_trash = "ごみ箱";
|
||||
$lang->trash_nick_name = "削除者のニックネーム";
|
||||
$lang->trash_date = "削除日";
|
||||
$lang->trash_description = "理由";
|
||||
|
||||
// 管理者ページでのごみ箱の検索対象
|
||||
$lang->search_target_trash_list = array(
|
||||
'title' => 'タイトル',
|
||||
'content' => '内容',
|
||||
'user_id' => 'ユーザーID',
|
||||
'member_srl' => '会員番号',
|
||||
'user_name' => 'ユーザー名',
|
||||
'nick_name' => 'ニックネーム',
|
||||
'trash_member_srl' => '削除者会員番号',
|
||||
'trash_user_name' => '削除者ユーザー名',
|
||||
'trash_nick_name' => '削除者ニックネーム',
|
||||
'trash_date' => '削除日',
|
||||
'trash_ipaddress' => '削除者のIPアドレス',
|
||||
);
|
||||
|
||||
$lang->success_trashed = "Successfully moved to trashcan";
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,100 +1,100 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/document/lang/ko.lang.php
|
||||
* @author zero <zero@nzeo.com>
|
||||
* @brief 문서(document) 모듈의 기본 언어팩
|
||||
**/
|
||||
|
||||
$lang->document_list = '문서 목록';
|
||||
$lang->thumbnail_type = '썸네일 생성 방법';
|
||||
$lang->thumbnail_crop = '잘라내기 (정해진 크기에 꽉 찬 모습의 썸네일을 만듭니다.)';
|
||||
$lang->thumbnail_ratio = '비율 맞추기 (원본 이미지의 비율에 맞춥니다. 다만 정해진 크기에 여백이 생깁니다.)';
|
||||
$lang->cmd_delete_all_thumbnail = '썸네일 모두 삭제';
|
||||
$lang->title_bold = '제목 굵게';
|
||||
$lang->title_color = '제목 색깔';
|
||||
$lang->new_document_count = '새 글';
|
||||
|
||||
$lang->parent_category_title = '상위 카테고리 명';
|
||||
$lang->category_title = '분류 명';
|
||||
$lang->category_color = '분류 폰트색깔';
|
||||
$lang->expand = '펼침';
|
||||
$lang->category_group_srls = '그룹 제한';
|
||||
|
||||
$lang->cmd_make_child = '하위 카테고리 추가';
|
||||
$lang->cmd_enable_move_category = '카테고리 위치 변경 (선택 후 위 메뉴를 드래그하세요.)';
|
||||
|
||||
$lang->about_category_title = '카테고리 이름을 입력해주세요.';
|
||||
$lang->about_expand = '선택하시면 늘 펼쳐진 상태로 있게 합니다.';
|
||||
$lang->about_category_group_srls = '선택하신 그룹만 현재 카테고리를 지정할 수 있도록 합니다.';
|
||||
$lang->about_category_color = '분류 폰트색깔을 지정합니다. 예) red 또는 #ff0000';
|
||||
|
||||
$lang->cmd_search_next = '계속 검색';
|
||||
|
||||
$lang->cmd_temp_save = '임시 저장';
|
||||
|
||||
$lang->cmd_toggle_checked_document = '선택항목 반전';
|
||||
$lang->cmd_delete_checked_document = '선택항목 삭제';
|
||||
$lang->cmd_document_do = '이 게시물을...';
|
||||
|
||||
$lang->msg_cart_is_null = '삭제할 글을 선택해주세요.';
|
||||
$lang->msg_category_not_moved = '이동할 수 없습니다.';
|
||||
$lang->msg_is_secret = '비밀글 입니다.';
|
||||
$lang->msg_checked_document_is_deleted = '%d개의 글이 삭제되었습니다.';
|
||||
|
||||
$lang->move_target_module = '대상 모듈';
|
||||
|
||||
// 관리자 페이지에서 검색할 대상
|
||||
$lang->search_target_list = array(
|
||||
'title' => '제목',
|
||||
'content' => '내용',
|
||||
'user_id' => '아이디',
|
||||
'member_srl' => '회원 번호',
|
||||
'user_name' => '사용자 이름',
|
||||
'nick_name' => '닉네임',
|
||||
'email_address' => '이메일',
|
||||
'homepage' => '홈페이지',
|
||||
'is_notice' => '공지사항',
|
||||
'is_secret' => '비밀글',
|
||||
'tags' => '태그',
|
||||
'readed_count' => '조회 수 (이상)',
|
||||
'voted_count' => '추천 수 (이상)',
|
||||
'comment_count ' => '코멘트 수 (이상)',
|
||||
'trackback_count ' => '트랙백 수 (이상)',
|
||||
'uploaded_count ' => '첨부파일 수 (이상)',
|
||||
'regdate' => '등록일',
|
||||
'last_update' => '최근 수정일',
|
||||
'ipaddress' => 'IP 주소',
|
||||
);
|
||||
|
||||
$lang->alias = 'Alias';
|
||||
$lang->history = '히스토리';
|
||||
$lang->about_use_history = '히스토리 기능의 사용여부를 지정합니다. 히스토리 기능을 사용할 경우, 문서 수정 후 이전 수정판으로 복원할 수 있습니다.';
|
||||
$lang->trace_only = '흔적만 남김';
|
||||
|
||||
$lang->cmd_trash = '휴지통';
|
||||
$lang->cmd_restore = '복원';
|
||||
$lang->cmd_restore_all = '모두 복원';
|
||||
|
||||
$lang->in_trash = '휴지통';
|
||||
$lang->trash_nick_name = '삭제자 닉네임';
|
||||
$lang->trash_date = '삭제 날짜';
|
||||
$lang->trash_description = '설명';
|
||||
|
||||
// 관리자 페이지에서 휴지통의 검색할 대상
|
||||
$lang->search_target_trash_list = array(
|
||||
'title' => '제목',
|
||||
'content' => '내용',
|
||||
'user_id' => '아이디',
|
||||
'member_srl' => '회원 번호',
|
||||
'user_name' => '사용자 이름',
|
||||
'nick_name' => '닉네임',
|
||||
'trash_member_srl' => '삭제자 회원 번호',
|
||||
'trash_user_name' => '삭제자 이름',
|
||||
'trash_nick_name' => '삭제자 닉네임',
|
||||
'trash_date' => '삭제일',
|
||||
'trash_ipaddress' => '삭제자 IP 주소',
|
||||
);
|
||||
|
||||
$lang->success_trashed = '휴지통으로 이동되었습니다.';
|
||||
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file modules/document/lang/ko.lang.php
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief 문서(document) 모듈의 기본 언어팩
|
||||
**/
|
||||
|
||||
$lang->document_list = '문서 목록';
|
||||
$lang->thumbnail_type = '썸네일 생성 방법';
|
||||
$lang->thumbnail_crop = '잘라내기 (정해진 크기에 꽉 찬 모습의 썸네일을 만듭니다.)';
|
||||
$lang->thumbnail_ratio = '비율 맞추기 (원본 이미지의 비율에 맞춥니다. 다만 정해진 크기에 여백이 생깁니다.)';
|
||||
$lang->cmd_delete_all_thumbnail = '썸네일 모두 삭제';
|
||||
$lang->title_bold = '제목 굵게';
|
||||
$lang->title_color = '제목 색깔';
|
||||
$lang->new_document_count = '새 글';
|
||||
|
||||
$lang->parent_category_title = '상위 카테고리 명';
|
||||
$lang->category_title = '분류 명';
|
||||
$lang->category_color = '분류 폰트색깔';
|
||||
$lang->expand = '펼침';
|
||||
$lang->category_group_srls = '그룹 제한';
|
||||
|
||||
$lang->cmd_make_child = '하위 카테고리 추가';
|
||||
$lang->cmd_enable_move_category = '카테고리 위치 변경 (선택 후 위 메뉴를 드래그하세요.)';
|
||||
|
||||
$lang->about_category_title = '카테고리 이름을 입력해주세요.';
|
||||
$lang->about_expand = '선택하시면 늘 펼쳐진 상태로 있게 합니다.';
|
||||
$lang->about_category_group_srls = '선택하신 그룹만 현재 카테고리를 지정할 수 있도록 합니다.';
|
||||
$lang->about_category_color = '분류 폰트색깔을 지정합니다. 예) red 또는 #ff0000';
|
||||
|
||||
$lang->cmd_search_next = '계속 검색';
|
||||
|
||||
$lang->cmd_temp_save = '임시 저장';
|
||||
|
||||
$lang->cmd_toggle_checked_document = '선택항목 반전';
|
||||
$lang->cmd_delete_checked_document = '선택항목 삭제';
|
||||
$lang->cmd_document_do = '이 게시물을...';
|
||||
|
||||
$lang->msg_cart_is_null = '삭제할 글을 선택해주세요.';
|
||||
$lang->msg_category_not_moved = '이동할 수 없습니다.';
|
||||
$lang->msg_is_secret = '비밀글 입니다.';
|
||||
$lang->msg_checked_document_is_deleted = '%d개의 글이 삭제되었습니다.';
|
||||
|
||||
$lang->move_target_module = '대상 모듈';
|
||||
|
||||
// 관리자 페이지에서 검색할 대상
|
||||
$lang->search_target_list = array(
|
||||
'title' => '제목',
|
||||
'content' => '내용',
|
||||
'user_id' => '아이디',
|
||||
'member_srl' => '회원 번호',
|
||||
'user_name' => '사용자 이름',
|
||||
'nick_name' => '닉네임',
|
||||
'email_address' => '이메일',
|
||||
'homepage' => '홈페이지',
|
||||
'is_notice' => '공지사항',
|
||||
'is_secret' => '비밀글',
|
||||
'tags' => '태그',
|
||||
'readed_count' => '조회 수 (이상)',
|
||||
'voted_count' => '추천 수 (이상)',
|
||||
'comment_count ' => '코멘트 수 (이상)',
|
||||
'trackback_count ' => '트랙백 수 (이상)',
|
||||
'uploaded_count ' => '첨부파일 수 (이상)',
|
||||
'regdate' => '등록일',
|
||||
'last_update' => '최근 수정일',
|
||||
'ipaddress' => 'IP 주소',
|
||||
);
|
||||
|
||||
$lang->alias = 'Alias';
|
||||
$lang->history = '히스토리';
|
||||
$lang->about_use_history = '히스토리 기능의 사용여부를 지정합니다. 히스토리 기능을 사용할 경우, 문서 수정 후 이전 수정판으로 복원할 수 있습니다.';
|
||||
$lang->trace_only = '흔적만 남김';
|
||||
|
||||
$lang->cmd_trash = '휴지통';
|
||||
$lang->cmd_restore = '복원';
|
||||
$lang->cmd_restore_all = '모두 복원';
|
||||
|
||||
$lang->in_trash = '휴지통';
|
||||
$lang->trash_nick_name = '삭제자 닉네임';
|
||||
$lang->trash_date = '삭제 날짜';
|
||||
$lang->trash_description = '설명';
|
||||
|
||||
// 관리자 페이지에서 휴지통의 검색할 대상
|
||||
$lang->search_target_trash_list = array(
|
||||
'title' => '제목',
|
||||
'content' => '내용',
|
||||
'user_id' => '아이디',
|
||||
'member_srl' => '회원 번호',
|
||||
'user_name' => '사용자 이름',
|
||||
'nick_name' => '닉네임',
|
||||
'trash_member_srl' => '삭제자 회원 번호',
|
||||
'trash_user_name' => '삭제자 이름',
|
||||
'trash_nick_name' => '삭제자 닉네임',
|
||||
'trash_date' => '삭제일',
|
||||
'trash_ipaddress' => '삭제자 IP 주소',
|
||||
);
|
||||
|
||||
$lang->success_trashed = '휴지통으로 이동되었습니다.';
|
||||
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,103 +1,103 @@
|
|||
<?php
|
||||
/**
|
||||
* @file ru.lang.php
|
||||
* @author zero <zero@nzeo.com> | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
|
||||
* @brief Russian basic language pack
|
||||
**/
|
||||
|
||||
$lang->document_list = 'Список документов';
|
||||
$lang->thumbnail_type = 'Тип миниатюры';
|
||||
$lang->thumbnail_crop = 'Обрезать';
|
||||
$lang->thumbnail_ratio = 'Соотношение';
|
||||
$lang->cmd_delete_all_thumbnail = 'Удалить все миниарюры';
|
||||
$lang->move_target_module = "Переместить в";
|
||||
$lang->title_bold = 'Жирное название';
|
||||
$lang->title_color = 'Цвет названия';
|
||||
$lang->new_document_count = 'Новые документы';
|
||||
|
||||
$lang->parent_category_title = 'Название верхней категории';
|
||||
$lang->category_title = 'Категория';
|
||||
$lang->category_color = 'Цвет шрифта категории';
|
||||
$lang->expand = 'Развернуть';
|
||||
$lang->category_group_srls = 'Доступные группы';
|
||||
|
||||
$lang->about_category_title = 'Добавьте дочернюю категорию';
|
||||
$lang->cmd_enable_move_category = 'Изменить местоположение категории(после выделения перетащите верхнее меню)';
|
||||
|
||||
$lang->about_category_title = 'Введите название категории';
|
||||
$lang->about_expand = 'Если эта опция выбрана, расширение будут применено всегда';
|
||||
$lang->about_category_group_srls = 'Только выбранные группы можно отнести к этой категории';
|
||||
$lang->about_category_color = 'Установить цвет шрифта категории. ex) red или #ff0000';
|
||||
|
||||
$lang->cmd_search_next = 'Искать дальше';
|
||||
|
||||
$lang->about_category_color = '분류 폰트색깔을 지정합니다.';
|
||||
$lang->cmd_temp_save = 'Сохранить временно';
|
||||
|
||||
$lang->cmd_toggle_checked_document = 'Перевернуть выбранные объекты';
|
||||
$lang->cmd_delete_checked_document = 'Удалить выбранные';
|
||||
$lang->cmd_document_do = 'Эту запись...';
|
||||
|
||||
$lang->msg_cart_is_null = 'Выберите записи,которые Вы хотите удалить';
|
||||
$lang->msg_category_not_moved = 'Невозможно переместить';
|
||||
$lang->msg_is_secret = 'Секретная запись';
|
||||
$lang->msg_checked_document_is_deleted = '%d записей удалено';
|
||||
|
||||
$lang->move_target_module = 'Этот модуль';
|
||||
|
||||
// Search targets in admin page
|
||||
$lang->search_target_list = array(
|
||||
'title' => 'Тема',
|
||||
'content' => 'Содержание',
|
||||
'user_id' => 'ID пользователя',
|
||||
'member_srl' => 'No. пользователя',
|
||||
'user_name' => 'Имя пользователя',
|
||||
'nick_name' => 'Ник',
|
||||
'email_address' => 'Email',
|
||||
'homepage' => 'Домашняя страница',
|
||||
'is_notice' => 'Объявления',
|
||||
'is_secret' => 'Секретная запись',
|
||||
'tags' => 'Тег',
|
||||
'readed_count' => 'Количество просмотров (свыше)',
|
||||
'voted_count' => 'Количество голосов (свыше)',
|
||||
'comment_count ' => 'Количество записей (свыше)',
|
||||
'trackback_count ' => 'Количество трекбеков (свыше)',
|
||||
'uploaded_count ' => 'Количество вложений (прикрепленных файлов) (свыше)',
|
||||
'regdate' => 'Дата регистрации',
|
||||
'last_update' => 'Дата последнего обновления',
|
||||
'ipaddress' => 'IP-Адрес',
|
||||
);
|
||||
|
||||
$lang->alias = "Alias";
|
||||
$lang->history = "History";
|
||||
$lang->about_use_history = "Determine whether to enable history feature, if it is enabled, update history would be stored and possible to restore old revisions.";
|
||||
$lang->trace_only = "Trace only";
|
||||
|
||||
$lang->cmd_trash = 'Корзина';
|
||||
$lang->cmd_restore = 'Восстановить';
|
||||
$lang->cmd_restore_all = 'Восстановить все';
|
||||
|
||||
$lang->in_trash = 'Корзина';
|
||||
$lang->trash_nick_name = 'Ник удалителя';
|
||||
$lang->trash_date = 'Дата удаления';
|
||||
$lang->trash_description = 'Описание';
|
||||
|
||||
// Возможен поиск на странице админа
|
||||
$lang->search_target_trash_list = array(
|
||||
'title' => 'Тема',
|
||||
'content' => 'Содержание',
|
||||
'user_id' => 'ID',
|
||||
'member_srl' =>'No пользователя',
|
||||
'user_name' => 'Имя пользователя',
|
||||
'nick_name' => 'Ник',
|
||||
'trash_member_srl' => 'Номер удалителя',
|
||||
'trash_user_name' => 'Имя удалителя',
|
||||
'trash_nick_name' => 'Ник удалителя',
|
||||
'trash_date' => 'Дата удаления',
|
||||
'trash_ipaddress' => 'IP адрес удалителя',
|
||||
);
|
||||
|
||||
$lang->success_trashed = 'Удалено в корзину';
|
||||
|
||||
$lang->success_trashed = "Successfully moved to trashcan";
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @file ru.lang.php
|
||||
* @author NHN (developers@xpressengine.com) | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
|
||||
* @brief Russian basic language pack
|
||||
**/
|
||||
|
||||
$lang->document_list = 'Список документов';
|
||||
$lang->thumbnail_type = 'Тип миниатюры';
|
||||
$lang->thumbnail_crop = 'Обрезать';
|
||||
$lang->thumbnail_ratio = 'Соотношение';
|
||||
$lang->cmd_delete_all_thumbnail = 'Удалить все миниарюры';
|
||||
$lang->move_target_module = "Переместить в";
|
||||
$lang->title_bold = 'Жирное название';
|
||||
$lang->title_color = 'Цвет названия';
|
||||
$lang->new_document_count = 'Новые документы';
|
||||
|
||||
$lang->parent_category_title = 'Название верхней категории';
|
||||
$lang->category_title = 'Категория';
|
||||
$lang->category_color = 'Цвет шрифта категории';
|
||||
$lang->expand = 'Развернуть';
|
||||
$lang->category_group_srls = 'Доступные группы';
|
||||
|
||||
$lang->about_category_title = 'Добавьте дочернюю категорию';
|
||||
$lang->cmd_enable_move_category = 'Изменить местоположение категории(после выделения перетащите верхнее меню)';
|
||||
|
||||
$lang->about_category_title = 'Введите название категории';
|
||||
$lang->about_expand = 'Если эта опция выбрана, расширение будут применено всегда';
|
||||
$lang->about_category_group_srls = 'Только выбранные группы можно отнести к этой категории';
|
||||
$lang->about_category_color = 'Установить цвет шрифта категории. ex) red или #ff0000';
|
||||
|
||||
$lang->cmd_search_next = 'Искать дальше';
|
||||
|
||||
$lang->about_category_color = '분류 폰트색깔을 지정합니다.';
|
||||
$lang->cmd_temp_save = 'Сохранить временно';
|
||||
|
||||
$lang->cmd_toggle_checked_document = 'Перевернуть выбранные объекты';
|
||||
$lang->cmd_delete_checked_document = 'Удалить выбранные';
|
||||
$lang->cmd_document_do = 'Эту запись...';
|
||||
|
||||
$lang->msg_cart_is_null = 'Выберите записи,которые Вы хотите удалить';
|
||||
$lang->msg_category_not_moved = 'Невозможно переместить';
|
||||
$lang->msg_is_secret = 'Секретная запись';
|
||||
$lang->msg_checked_document_is_deleted = '%d записей удалено';
|
||||
|
||||
$lang->move_target_module = 'Этот модуль';
|
||||
|
||||
// Search targets in admin page
|
||||
$lang->search_target_list = array(
|
||||
'title' => 'Тема',
|
||||
'content' => 'Содержание',
|
||||
'user_id' => 'ID пользователя',
|
||||
'member_srl' => 'No. пользователя',
|
||||
'user_name' => 'Имя пользователя',
|
||||
'nick_name' => 'Ник',
|
||||
'email_address' => 'Email',
|
||||
'homepage' => 'Домашняя страница',
|
||||
'is_notice' => 'Объявления',
|
||||
'is_secret' => 'Секретная запись',
|
||||
'tags' => 'Тег',
|
||||
'readed_count' => 'Количество просмотров (свыше)',
|
||||
'voted_count' => 'Количество голосов (свыше)',
|
||||
'comment_count ' => 'Количество записей (свыше)',
|
||||
'trackback_count ' => 'Количество трекбеков (свыше)',
|
||||
'uploaded_count ' => 'Количество вложений (прикрепленных файлов) (свыше)',
|
||||
'regdate' => 'Дата регистрации',
|
||||
'last_update' => 'Дата последнего обновления',
|
||||
'ipaddress' => 'IP-Адрес',
|
||||
);
|
||||
|
||||
$lang->alias = "Alias";
|
||||
$lang->history = "History";
|
||||
$lang->about_use_history = "Determine whether to enable history feature, if it is enabled, update history would be stored and possible to restore old revisions.";
|
||||
$lang->trace_only = "Trace only";
|
||||
|
||||
$lang->cmd_trash = 'Корзина';
|
||||
$lang->cmd_restore = 'Восстановить';
|
||||
$lang->cmd_restore_all = 'Восстановить все';
|
||||
|
||||
$lang->in_trash = 'Корзина';
|
||||
$lang->trash_nick_name = 'Ник удалителя';
|
||||
$lang->trash_date = 'Дата удаления';
|
||||
$lang->trash_description = 'Описание';
|
||||
|
||||
// Возможен поиск на странице админа
|
||||
$lang->search_target_trash_list = array(
|
||||
'title' => 'Тема',
|
||||
'content' => 'Содержание',
|
||||
'user_id' => 'ID',
|
||||
'member_srl' =>'No пользователя',
|
||||
'user_name' => 'Имя пользователя',
|
||||
'nick_name' => 'Ник',
|
||||
'trash_member_srl' => 'Номер удалителя',
|
||||
'trash_user_name' => 'Имя удалителя',
|
||||
'trash_nick_name' => 'Ник удалителя',
|
||||
'trash_date' => 'Дата удаления',
|
||||
'trash_ipaddress' => 'IP адрес удалителя',
|
||||
);
|
||||
|
||||
$lang->success_trashed = 'Удалено в корзину';
|
||||
|
||||
$lang->success_trashed = "Successfully moved to trashcan";
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,101 +1,101 @@
|
|||
<?php
|
||||
/* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
||||
░░ * @File : common/lang/vi.lang.php ░░
|
||||
░░ * @Author : zero (zero@nzeo.com) ░░
|
||||
░░ * @Trans : DucDuy Dao (webmaster@xpressengine.vn) ░░
|
||||
░░ * @Website: http://xpressengine.vn ░░
|
||||
░░ * @Brief : Vietnamese Language Pack (Only basic words are included here) ░░
|
||||
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
||||
*/
|
||||
|
||||
$lang->document_list = 'Danh sách bài viết';
|
||||
$lang->thumbnail_type = 'Định dạng hình nhỏ';
|
||||
$lang->thumbnail_crop = 'Hình cắt';
|
||||
$lang->thumbnail_ratio = 'Tỉ lệ';
|
||||
$lang->cmd_delete_all_thumbnail = 'Xóa tất cả hình nhỏ';
|
||||
$lang->move_target_module = "Vị trí Module";
|
||||
$lang->title_bold = 'Chữ đậm';
|
||||
$lang->title_color = 'Màu';
|
||||
$lang->new_document_count = 'Bài viết mới';
|
||||
|
||||
$lang->parent_category_title = 'Tên thể loại chính';
|
||||
$lang->category_title = 'Tên thể loại nhỏ';
|
||||
$lang->category_color = 'Màu chữ';
|
||||
$lang->expand = 'Mở rộng';
|
||||
$lang->category_group_srls = 'Nhóm được cho phép';
|
||||
|
||||
$lang->cmd_make_child = 'Thêm thể loại nhỏ';
|
||||
$lang->cmd_enable_move_category = "Thay đổi vị trí thể loại (Kéo lên Menu trên sau khi lựa chọn)";
|
||||
|
||||
$lang->about_category_title = 'Hãy nhập tên thể loại';
|
||||
$lang->about_expand = 'Nếu sử dụng tùy chọn này, Thể loại sẽ luôn luôn được trải rộng.';
|
||||
$lang->about_category_group_srls = 'Chỉ những nhóm đã chọn mới được phép sử dụng thể loại này.';
|
||||
$lang->about_category_color = 'Bạn có thể đặt màu cho thể loại.';
|
||||
|
||||
$lang->cmd_search_next = 'Tìm tiếp';
|
||||
|
||||
$lang->cmd_temp_save = 'Lưu tạm thời';
|
||||
|
||||
$lang->cmd_toggle_checked_document = 'Khôi phục những bài đã chọn';
|
||||
$lang->cmd_delete_checked_document = 'Xóa những bài đã chọn';
|
||||
$lang->cmd_document_do = 'Bình chọn / Phê bình';
|
||||
|
||||
$lang->msg_cart_is_null = 'Xin hãy chọn bài viết để xóa.';
|
||||
$lang->msg_category_not_moved = 'Không thể di chuyển';
|
||||
$lang->msg_is_secret = 'Bài viết này đã đặt bí mật';
|
||||
$lang->msg_checked_document_is_deleted = '%d bài viết đã được xóa.';
|
||||
|
||||
// Search targets in admin page
|
||||
$lang->search_target_list = array(
|
||||
'title' => 'Tiêu đề',
|
||||
'content' => 'Nội dung',
|
||||
'user_id' => 'ID sử dụng',
|
||||
'member_srl' => 'Mã thành viên',
|
||||
'user_name' => 'Tên',
|
||||
'nick_name' => 'Nickname',
|
||||
'email_address' => 'Email',
|
||||
'homepage' => 'Trang chủ',
|
||||
'is_notice' => 'Chú ý',
|
||||
'is_secret' => 'Bí mật',
|
||||
'tags' => 'Tag',
|
||||
'readed_count' => 'Lượt xem',
|
||||
'voted_count' => 'Lượt bình chọn',
|
||||
'comment_count ' => 'Số bình luận',
|
||||
'trackback_count ' => 'Số liên kết Web',
|
||||
'uploaded_count ' => 'Số đính kèm',
|
||||
'regdate' => 'Ngày gửi',
|
||||
'last_update' => 'Cập nhật lần cuối',
|
||||
'ipaddress' => 'IP',
|
||||
);
|
||||
|
||||
$lang->alias = "Bí danh";
|
||||
$lang->history = "Lịch sử";
|
||||
$lang->about_use_history = "Chức năng này sẽ lưu lại những thay đổi trên bài viết. Nếu sử dụng chức năng này, bạn có thể khôi phục lại trạng thái ban đầu của bài viết.";
|
||||
$lang->trace_only = "Chỉ theo dõi";
|
||||
|
||||
$lang->cmd_trash = "Thùng rác";
|
||||
$lang->cmd_restore = "Khôi phục";
|
||||
$lang->cmd_restore_all = "Khôi phục tất cả";
|
||||
|
||||
$lang->in_trash = "Thùng rác";
|
||||
$lang->trash_nick_name = "Người xóa";
|
||||
$lang->trash_date = "Ngày xóa";
|
||||
$lang->trash_description = "Mô tả";
|
||||
|
||||
// 관리자 페이지에서 휴지통의 검색할 대상
|
||||
$lang->search_target_trash_list = array(
|
||||
'title' => 'Tiêu đề',
|
||||
'content' => 'Nội dung',
|
||||
'user_id' => 'ID',
|
||||
'member_srl' => 'Mã số thành viên',
|
||||
'user_name' => 'Tên thật',
|
||||
'nick_name' => 'NickName',
|
||||
'trash_member_srl' => 'Mã số người xóa',
|
||||
'trash_user_name' => 'Tên người xóa',
|
||||
'trash_nick_name' => 'NickName người xóa',
|
||||
'trash_date' => 'Ngày xóa',
|
||||
'trash_ipaddress' => 'IP Người xóa',
|
||||
);
|
||||
|
||||
$lang->success_trashed = "Đã chuyển tới thùng rác thành công.";
|
||||
?>
|
||||
<?php
|
||||
/* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
||||
░░ * @File : common/lang/vi.lang.php ░░
|
||||
░░ * @Author : NHN (developers@xpressengine.com) ░░
|
||||
░░ * @Trans : DucDuy Dao (webmaster@xpressengine.vn) ░░
|
||||
░░ * @Website: http://xpressengine.vn ░░
|
||||
░░ * @Brief : Vietnamese Language Pack (Only basic words are included here) ░░
|
||||
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
||||
*/
|
||||
|
||||
$lang->document_list = 'Danh sách bài viết';
|
||||
$lang->thumbnail_type = 'Định dạng hình nhỏ';
|
||||
$lang->thumbnail_crop = 'Hình cắt';
|
||||
$lang->thumbnail_ratio = 'Tỉ lệ';
|
||||
$lang->cmd_delete_all_thumbnail = 'Xóa tất cả hình nhỏ';
|
||||
$lang->move_target_module = "Vị trí Module";
|
||||
$lang->title_bold = 'Chữ đậm';
|
||||
$lang->title_color = 'Màu';
|
||||
$lang->new_document_count = 'Bài viết mới';
|
||||
|
||||
$lang->parent_category_title = 'Tên thể loại chính';
|
||||
$lang->category_title = 'Tên thể loại nhỏ';
|
||||
$lang->category_color = 'Màu chữ';
|
||||
$lang->expand = 'Mở rộng';
|
||||
$lang->category_group_srls = 'Nhóm được cho phép';
|
||||
|
||||
$lang->cmd_make_child = 'Thêm thể loại nhỏ';
|
||||
$lang->cmd_enable_move_category = "Thay đổi vị trí thể loại (Kéo lên Menu trên sau khi lựa chọn)";
|
||||
|
||||
$lang->about_category_title = 'Hãy nhập tên thể loại';
|
||||
$lang->about_expand = 'Nếu sử dụng tùy chọn này, Thể loại sẽ luôn luôn được trải rộng.';
|
||||
$lang->about_category_group_srls = 'Chỉ những nhóm đã chọn mới được phép sử dụng thể loại này.';
|
||||
$lang->about_category_color = 'Bạn có thể đặt màu cho thể loại.';
|
||||
|
||||
$lang->cmd_search_next = 'Tìm tiếp';
|
||||
|
||||
$lang->cmd_temp_save = 'Lưu tạm thời';
|
||||
|
||||
$lang->cmd_toggle_checked_document = 'Khôi phục những bài đã chọn';
|
||||
$lang->cmd_delete_checked_document = 'Xóa những bài đã chọn';
|
||||
$lang->cmd_document_do = 'Bình chọn / Phê bình';
|
||||
|
||||
$lang->msg_cart_is_null = 'Xin hãy chọn bài viết để xóa.';
|
||||
$lang->msg_category_not_moved = 'Không thể di chuyển';
|
||||
$lang->msg_is_secret = 'Bài viết này đã đặt bí mật';
|
||||
$lang->msg_checked_document_is_deleted = '%d bài viết đã được xóa.';
|
||||
|
||||
// Search targets in admin page
|
||||
$lang->search_target_list = array(
|
||||
'title' => 'Tiêu đề',
|
||||
'content' => 'Nội dung',
|
||||
'user_id' => 'ID sử dụng',
|
||||
'member_srl' => 'Mã thành viên',
|
||||
'user_name' => 'Tên',
|
||||
'nick_name' => 'Nickname',
|
||||
'email_address' => 'Email',
|
||||
'homepage' => 'Trang chủ',
|
||||
'is_notice' => 'Chú ý',
|
||||
'is_secret' => 'Bí mật',
|
||||
'tags' => 'Tag',
|
||||
'readed_count' => 'Lượt xem',
|
||||
'voted_count' => 'Lượt bình chọn',
|
||||
'comment_count ' => 'Số bình luận',
|
||||
'trackback_count ' => 'Số liên kết Web',
|
||||
'uploaded_count ' => 'Số đính kèm',
|
||||
'regdate' => 'Ngày gửi',
|
||||
'last_update' => 'Cập nhật lần cuối',
|
||||
'ipaddress' => 'IP',
|
||||
);
|
||||
|
||||
$lang->alias = "Bí danh";
|
||||
$lang->history = "Lịch sử";
|
||||
$lang->about_use_history = "Chức năng này sẽ lưu lại những thay đổi trên bài viết. Nếu sử dụng chức năng này, bạn có thể khôi phục lại trạng thái ban đầu của bài viết.";
|
||||
$lang->trace_only = "Chỉ theo dõi";
|
||||
|
||||
$lang->cmd_trash = "Thùng rác";
|
||||
$lang->cmd_restore = "Khôi phục";
|
||||
$lang->cmd_restore_all = "Khôi phục tất cả";
|
||||
|
||||
$lang->in_trash = "Thùng rác";
|
||||
$lang->trash_nick_name = "Người xóa";
|
||||
$lang->trash_date = "Ngày xóa";
|
||||
$lang->trash_description = "Mô tả";
|
||||
|
||||
// 관리자 페이지에서 휴지통의 검색할 대상
|
||||
$lang->search_target_trash_list = array(
|
||||
'title' => 'Tiêu đề',
|
||||
'content' => 'Nội dung',
|
||||
'user_id' => 'ID',
|
||||
'member_srl' => 'Mã số thành viên',
|
||||
'user_name' => 'Tên thật',
|
||||
'nick_name' => 'NickName',
|
||||
'trash_member_srl' => 'Mã số người xóa',
|
||||
'trash_user_name' => 'Tên người xóa',
|
||||
'trash_nick_name' => 'NickName người xóa',
|
||||
'trash_date' => 'Ngày xóa',
|
||||
'trash_ipaddress' => 'IP Người xóa',
|
||||
);
|
||||
|
||||
$lang->success_trashed = "Đã chuyển tới thùng rác thành công.";
|
||||
?>
|
||||
|
|
|
|||
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