mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-19 19:29:56 +09:00
merge from 1.7.3.5(r13153:r13167)
git-svn-id: http://xe-core.googlecode.com/svn/trunk@13168 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
parent
cc47d2b247
commit
2d3f149b5a
2042 changed files with 129266 additions and 126243 deletions
|
|
@ -1,39 +1,66 @@
|
|||
<?php
|
||||
/**
|
||||
* @class communicationAdminController
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief communication module of the admin controller class
|
||||
**/
|
||||
|
||||
class communicationAdminController extends communication {
|
||||
/**
|
||||
* @class communicationAdminController
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief communication module of the admin controller class
|
||||
*/
|
||||
class communicationAdminController extends communication
|
||||
{
|
||||
|
||||
/**
|
||||
* Initialization
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
/**
|
||||
* Initialization
|
||||
*/
|
||||
function init()
|
||||
{
|
||||
|
||||
/**
|
||||
* save configurations of the communication module
|
||||
* @return void|Object (success : void, fail : Object)
|
||||
**/
|
||||
function procCommunicationAdminInsertConfig() {
|
||||
// get the default information
|
||||
$args = Context::gets('skin','colorset','editor_skin','editor_colorset', 'mskin', 'layout_srl', 'mlayout_srl');
|
||||
}
|
||||
|
||||
if(!$args->skin) $args->skin = 'default';
|
||||
if(!$args->colorset) $args->colorset = 'white';
|
||||
if(!$args->editor_skin) $args->editor_skin = 'default';
|
||||
if(!$args->mskin) $args->mskin = 'default';
|
||||
if(!$args->layout_srl) $args->layout_srl = null;
|
||||
/**
|
||||
* save configurations of the communication module
|
||||
* @return void|Object (success : void, fail : Object)
|
||||
*/
|
||||
function procCommunicationAdminInsertConfig()
|
||||
{
|
||||
// get the default information
|
||||
$args = Context::gets('skin', 'colorset', 'editor_skin', 'sel_editor_colorset', 'mskin', 'mcolorset', 'layout_srl', 'mlayout_srl');
|
||||
$args->editor_colorset = $args->sel_editor_colorset;
|
||||
unset($args->sel_editor_colorset);
|
||||
|
||||
// create the module module Controller object
|
||||
$oModuleController = &getController('module');
|
||||
$output = $oModuleController->insertModuleConfig('communication',$args);
|
||||
if(!$args->skin)
|
||||
{
|
||||
$args->skin = 'default';
|
||||
}
|
||||
|
||||
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispCommunicationAdminConfig');
|
||||
return $this->setRedirectUrl($returnUrl, $output);
|
||||
}
|
||||
if(!$args->colorset)
|
||||
{
|
||||
$args->colorset = 'white';
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
if(!$args->editor_skin)
|
||||
{
|
||||
$args->editor_skin = 'default';
|
||||
}
|
||||
|
||||
if(!$args->mskin)
|
||||
{
|
||||
$args->mskin = 'default';
|
||||
}
|
||||
|
||||
if(!$args->layout_srl)
|
||||
{
|
||||
$args->layout_srl = NULL;
|
||||
}
|
||||
|
||||
// create the module module Controller object
|
||||
$oModuleController = getController('module');
|
||||
$output = $oModuleController->insertModuleConfig('communication', $args);
|
||||
|
||||
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispCommunicationAdminConfig');
|
||||
|
||||
return $this->setRedirectUrl($returnUrl, $output);
|
||||
}
|
||||
|
||||
}
|
||||
/* End of file communication.admin.controller.php */
|
||||
/* Location: ./modules/comment/communication.admin.controller.php */
|
||||
|
|
|
|||
|
|
@ -1,45 +1,70 @@
|
|||
<?php
|
||||
/**
|
||||
* @class communicationAdminModel
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief communication module of the admin model class
|
||||
**/
|
||||
|
||||
class communicationAdminModel extends communication {
|
||||
/**
|
||||
* @class communicationAdminModel
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief communication module of the admin model class
|
||||
*/
|
||||
class communicationAdminModel extends communication
|
||||
{
|
||||
|
||||
/**
|
||||
* Initialization
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
/**
|
||||
* Initialization
|
||||
*/
|
||||
function init()
|
||||
{
|
||||
|
||||
/**
|
||||
* the html to select colorset of the skin
|
||||
* @return void
|
||||
**/
|
||||
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);
|
||||
|
||||
$security = new Security();
|
||||
$security->encodeHTML('skin_info.colorset..title','skin_info.colorset..name');
|
||||
$security->encodeHTML('skin_info.colorset..name');
|
||||
/**
|
||||
* the html to select colorset of the skin
|
||||
* @return void
|
||||
*/
|
||||
function getCommunicationAdminColorset()
|
||||
{
|
||||
$skin = Context::get('skin');
|
||||
$type = Context::get('type') == 'P' ? 'P' : 'M';
|
||||
Context::set('type', $type);
|
||||
|
||||
$oTemplate = &TemplateHandler::getInstance();
|
||||
$tpl = $oTemplate->compile($this->module_path.'tpl', 'colorset_list');
|
||||
}
|
||||
if($type == 'P')
|
||||
{
|
||||
$dir = 'skins';
|
||||
}
|
||||
else
|
||||
{
|
||||
$dir = 'm.skins';
|
||||
}
|
||||
|
||||
$this->add('tpl', $tpl);
|
||||
}
|
||||
if(!$skin)
|
||||
{
|
||||
$tpl = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
$oModuleModel = getModel('module');
|
||||
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $skin, $dir);
|
||||
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);
|
||||
|
||||
$security = new Security();
|
||||
$security->encodeHTML('skin_info.colorset..title', 'skin_info.colorset..name');
|
||||
$security->encodeHTML('skin_info.colorset..name');
|
||||
|
||||
$oTemplate = TemplateHandler::getInstance();
|
||||
$tpl = $oTemplate->compile($this->module_path . 'tpl', 'colorset_list');
|
||||
}
|
||||
|
||||
$this->add('tpl', $tpl);
|
||||
$this->add('type', $type);
|
||||
}
|
||||
|
||||
}
|
||||
/* End of file communication.admin.model.php */
|
||||
/* Location: ./modules/comment/communication.admin.model.php */
|
||||
|
|
|
|||
|
|
@ -1,58 +1,67 @@
|
|||
<?php
|
||||
/**
|
||||
* @class communicationAdminView
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* communication module of the admin view class
|
||||
**/
|
||||
|
||||
class communicationAdminView extends communication {
|
||||
/**
|
||||
* @class communicationAdminView
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* communication module of the admin view class
|
||||
*/
|
||||
class communicationAdminView extends communication
|
||||
{
|
||||
|
||||
/**
|
||||
* Initialization
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
/**
|
||||
* Initialization
|
||||
*/
|
||||
function init()
|
||||
{
|
||||
|
||||
/**
|
||||
* configuration to manage messages and friends
|
||||
* @return void
|
||||
**/
|
||||
function dispCommunicationAdminConfig()
|
||||
{
|
||||
// Creating an object
|
||||
$oEditorModel = &getModel('editor');
|
||||
$oModuleModel = &getModel('module');
|
||||
$oLayoutModel = &getModel('layout');
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
// get the configurations of communication module
|
||||
Context::set('communication_config', $oCommunicationModel->getConfig() );
|
||||
// get a list of layout
|
||||
Context::set('layout_list', $oLayoutModel->getLayoutList() );
|
||||
// get a list of editor skins
|
||||
Context::set('editor_skin_list', $oEditorModel->getEditorSkinList() );
|
||||
// get a list of communication skins
|
||||
Context::set('communication_skin_list', $oModuleModel->getSkins($this->module_path) );
|
||||
// get a list of communication skins
|
||||
Context::set('communication_mobile_skin_list', $oModuleModel->getSkins($this->module_path, 'm.skins') );
|
||||
}
|
||||
|
||||
// Get a layout list
|
||||
$layout_list = $oLayoutModel->getLayoutList();
|
||||
Context::set('layout_list', $layout_list);
|
||||
/**
|
||||
* configuration to manage messages and friends
|
||||
* @return void
|
||||
*/
|
||||
function dispCommunicationAdminConfig()
|
||||
{
|
||||
// Creating an object
|
||||
$oEditorModel = getModel('editor');
|
||||
$oModuleModel = getModel('module');
|
||||
$oLayoutModel = getModel('layout');
|
||||
$oCommunicationModel = getModel('communication');
|
||||
|
||||
$mlayout_list = $oLayoutModel->getLayoutList(0, 'M');
|
||||
Context::set('mlayout_list', $mlayout_list);
|
||||
// get the configurations of communication module
|
||||
Context::set('communication_config', $oCommunicationModel->getConfig());
|
||||
|
||||
$security = new Security();
|
||||
$security->encodeHTML('communication_config..');
|
||||
$security->encodeHTML('layout_list..');
|
||||
$security->encodeHTML('editor_skin_list..');
|
||||
$security->encodeHTML('communication_skin_list..title');
|
||||
$security->encodeHTML('communication_mobile_skin_list..title');
|
||||
// get a list of layout
|
||||
Context::set('layout_list', $oLayoutModel->getLayoutList());
|
||||
|
||||
// specify a template
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile('index');
|
||||
}
|
||||
// get a list of editor skins
|
||||
Context::set('editor_skin_list', $oEditorModel->getEditorSkinList());
|
||||
|
||||
}
|
||||
?>
|
||||
// get a list of communication skins
|
||||
Context::set('communication_skin_list', $oModuleModel->getSkins($this->module_path));
|
||||
|
||||
// get a list of communication skins
|
||||
Context::set('communication_mobile_skin_list', $oModuleModel->getSkins($this->module_path, 'm.skins'));
|
||||
|
||||
// Get a layout list
|
||||
$layout_list = $oLayoutModel->getLayoutList();
|
||||
Context::set('layout_list', $layout_list);
|
||||
|
||||
$mlayout_list = $oLayoutModel->getLayoutList(0, 'M');
|
||||
Context::set('mlayout_list', $mlayout_list);
|
||||
|
||||
$security = new Security();
|
||||
$security->encodeHTML('communication_config..');
|
||||
$security->encodeHTML('layout_list..');
|
||||
$security->encodeHTML('editor_skin_list..');
|
||||
$security->encodeHTML('communication_skin_list..title');
|
||||
$security->encodeHTML('communication_mobile_skin_list..title');
|
||||
|
||||
// specify a template
|
||||
$this->setTemplatePath($this->module_path . 'tpl');
|
||||
$this->setTemplateFile('index');
|
||||
}
|
||||
|
||||
}
|
||||
/* End of file communication.admin.view.php */
|
||||
/* Location: ./modules/comment/communication.admin.view.php */
|
||||
|
|
|
|||
|
|
@ -1,77 +1,98 @@
|
|||
<?php
|
||||
/**
|
||||
* @class communication
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* communication module of the high class
|
||||
**/
|
||||
|
||||
class communication extends ModuleObject {
|
||||
/**
|
||||
* @class communication
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* communication module of the high class
|
||||
*/
|
||||
class communication extends ModuleObject
|
||||
{
|
||||
|
||||
/**
|
||||
* Implement if additional tasks are necessary when installing
|
||||
* @return Object
|
||||
**/
|
||||
function moduleInstall() {
|
||||
// Create a temporary file storage for one new private message notification
|
||||
FileHandler::makeDir('./files/member_extra_info/new_message_flags');
|
||||
return new Object();
|
||||
}
|
||||
/**
|
||||
* Implement if additional tasks are necessary when installing
|
||||
* @return Object
|
||||
*/
|
||||
function moduleInstall()
|
||||
{
|
||||
// Create a temporary file storage for one new private message notification
|
||||
FileHandler::makeDir('./files/member_extra_info/new_message_flags');
|
||||
return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* method to check if successfully installed.
|
||||
* @return boolean true : need to update false : don't need to update
|
||||
**/
|
||||
function checkUpdate() {
|
||||
if(!is_dir("./files/member_extra_info/new_message_flags")) return true;
|
||||
/**
|
||||
* method to check if successfully installed.
|
||||
* @return boolean true : need to update false : don't need to update
|
||||
*/
|
||||
function checkUpdate()
|
||||
{
|
||||
if(!is_dir("./files/member_extra_info/new_message_flags"))
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
$oModuleModel = &getModel('module');
|
||||
$config = $oModuleModel->getModuleConfig('message');
|
||||
$oModuleModel = getModel('module');
|
||||
$config = $oModuleModel->getModuleConfig('message');
|
||||
|
||||
if($config->skin)
|
||||
if($config->skin)
|
||||
{
|
||||
$config_parse = explode('.', $config->skin);
|
||||
if(count($config_parse) > 1)
|
||||
{
|
||||
$config_parse = explode('.', $config->skin);
|
||||
if (count($config_parse) > 1)
|
||||
$template_path = sprintf('./themes/%s/modules/communication/', $config_parse[0]);
|
||||
if(is_dir($template_path))
|
||||
{
|
||||
$template_path = sprintf('./themes/%s/modules/communication/', $config_parse[0]);
|
||||
if(is_dir($template_path)) return true;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update
|
||||
* @return Object
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
if(!is_dir("./files/member_extra_info/new_message_flags"))
|
||||
FileHandler::makeDir('./files/member_extra_info/new_message_flags');
|
||||
/**
|
||||
* Update
|
||||
* @return Object
|
||||
*/
|
||||
function moduleUpdate()
|
||||
{
|
||||
if(!is_dir("./files/member_extra_info/new_message_flags"))
|
||||
{
|
||||
FileHandler::makeDir('./files/member_extra_info/new_message_flags');
|
||||
}
|
||||
|
||||
$oModuleModel = &getModel('module');
|
||||
$config = $oModuleModel->getModuleConfig('message');
|
||||
$oModuleModel = getModel('module');
|
||||
$config = $oModuleModel->getModuleConfig('message');
|
||||
if(!is_object($config))
|
||||
{
|
||||
$config = new stdClass();
|
||||
}
|
||||
|
||||
if($config->skin)
|
||||
if($config->skin)
|
||||
{
|
||||
$config_parse = explode('.', $config->skin);
|
||||
if(count($config_parse) > 1)
|
||||
{
|
||||
$config_parse = explode('.', $config->skin);
|
||||
if (count($config_parse) > 1)
|
||||
$template_path = sprintf('./themes/%s/modules/communication/', $config_parse[0]);
|
||||
if(is_dir($template_path))
|
||||
{
|
||||
$template_path = sprintf('./themes/%s/modules/communication/', $config_parse[0]);
|
||||
if(is_dir($template_path))
|
||||
{
|
||||
$config->skin = implode('|@|', $config_parse);
|
||||
$oModuleController = &getController('module');
|
||||
$oModuleController->updateModuleConfig('communication', $config);
|
||||
}
|
||||
$config->skin = implode('|@|', $config_parse);
|
||||
$oModuleController = getController('module');
|
||||
$oModuleController->updateModuleConfig('communication', $config);
|
||||
}
|
||||
}
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
}
|
||||
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-generate the cache file
|
||||
* @return void
|
||||
**/
|
||||
function recompileCache() {
|
||||
}
|
||||
}
|
||||
?>
|
||||
/**
|
||||
* Re-generate the cache file
|
||||
* @return void
|
||||
*/
|
||||
function recompileCache()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
/* End of file communication.class.php */
|
||||
/* Location: ./modules/comment/communication.class.php */
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,8 +1,18 @@
|
|||
<?php
|
||||
require_once(_XE_PATH_.'modules/communication/communication.view.php');
|
||||
class communicationMobile extends communicationView {
|
||||
function init() {
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
|
||||
require_once(_XE_PATH_ . 'modules/communication/communication.view.php');
|
||||
|
||||
/**
|
||||
* @class communicationMobile
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* Mobile class of communication module
|
||||
*/
|
||||
class communicationMobile extends communicationView
|
||||
{
|
||||
|
||||
function init()
|
||||
{
|
||||
$oCommunicationModel = getModel('communication');
|
||||
|
||||
$this->communication_config = $oCommunicationModel->getConfig();
|
||||
$skin = $this->communication_config->mskin;
|
||||
|
|
@ -12,7 +22,7 @@ class communicationMobile extends communicationView {
|
|||
$tpl_path = sprintf('%sm.skins/%s', $this->module_path, $skin);
|
||||
$this->setTemplatePath($tpl_path);
|
||||
|
||||
$oLayoutModel = &getModel('layout');
|
||||
$oLayoutModel = getModel('layout');
|
||||
$layout_info = $oLayoutModel->getLayout($this->communication_config->mlayout_srl);
|
||||
if($layout_info)
|
||||
{
|
||||
|
|
@ -21,6 +31,10 @@ class communicationMobile extends communicationView {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display message box
|
||||
* @return void|Object (void : success, Object : fail)
|
||||
*/
|
||||
function dispCommunicationMessages()
|
||||
{
|
||||
// Error appears if not logged-in
|
||||
|
|
@ -37,17 +51,46 @@ class communicationMobile extends communicationView {
|
|||
|
||||
// Set the variables
|
||||
$message_srl = Context::get('message_srl');
|
||||
$message_type = 'R';
|
||||
Context::set('message_type', $message_type);
|
||||
$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');
|
||||
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
// extract contents if message_srl exists
|
||||
if($message_srl)
|
||||
if($message_srl)
|
||||
{
|
||||
$templateFile = 'read_message';
|
||||
$columnList = array('message_srl', 'sender_srl', 'receiver_srl', 'message_type', 'title', 'content', 'readed', 'regdate');
|
||||
$message = $oCommunicationModel->getSelectedMessage($message_srl, $columnList);
|
||||
if($message->message_srl == $message_srl && ($message->receiver_srl == $logged_info->member_srl) )
|
||||
|
||||
switch($message->message_type)
|
||||
{
|
||||
case 'R':
|
||||
if($message->receiver_srl != $logged_info->member_srl)
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
}
|
||||
break;
|
||||
|
||||
case 'S':
|
||||
if($message->sender_srl != $logged_info->member_srl)
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
}
|
||||
break;
|
||||
|
||||
case 'T':
|
||||
if($message->receiver_srl != $logged_info->member_srl && $message->sender_srl != $logged_info->member_srl)
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
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);
|
||||
|
|
@ -57,6 +100,7 @@ class communicationMobile extends communicationView {
|
|||
{
|
||||
$templateFile = 'messages';
|
||||
}
|
||||
|
||||
// Extract a list
|
||||
$columnList = array('message_srl', 'readed', 'title', 'member.member_srl', 'member.nick_name', 'message.regdate', 'readed_date');
|
||||
$output = $oCommunicationModel->getMessages($message_type, $columnList);
|
||||
|
|
@ -73,4 +117,70 @@ class communicationMobile extends communicationView {
|
|||
|
||||
$this->setTemplateFile($templateFile);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display list of message box
|
||||
* @return void
|
||||
*/
|
||||
function dispCommunicationMessageBoxList()
|
||||
{
|
||||
$this->setTemplateFile('message_box');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display message sending
|
||||
* @return void|Object (void : success, Object : fail)
|
||||
*/
|
||||
function dispCommunicationSendMessage()
|
||||
{
|
||||
$oCommunicationModel = getModel('communication');
|
||||
$oMemberModel = getModel('member');
|
||||
|
||||
// Error appears if not logged-in
|
||||
if(!Context::get('is_logged'))
|
||||
{
|
||||
return $this->stop('msg_not_logged');
|
||||
}
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// get receipient's information
|
||||
// check inalid request
|
||||
$receiver_srl = Context::get('receiver_srl');
|
||||
if(!$receiver_srl)
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
}
|
||||
|
||||
// check receiver and sender are same
|
||||
if($logged_info->member_srl == $receiver_srl)
|
||||
{
|
||||
return $this->stop('msg_cannot_send_to_yourself');
|
||||
}
|
||||
|
||||
// get message_srl of the original message if it is a reply
|
||||
$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);
|
||||
if(!$receiver_info)
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
}
|
||||
|
||||
Context::set('receiver_info', $receiver_info);
|
||||
$this->setTemplateFile('send_message');
|
||||
}
|
||||
|
||||
}
|
||||
/* End of file communication.mobile.php */
|
||||
/* Location: ./modules/comment/communication.mobile.php */
|
||||
|
|
|
|||
|
|
@ -1,199 +1,287 @@
|
|||
<?php
|
||||
/**
|
||||
* @class communicationModel
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* communication module of the Model class
|
||||
**/
|
||||
|
||||
class communicationModel extends communication {
|
||||
/**
|
||||
* @class communicationModel
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* communication module of the Model class
|
||||
*/
|
||||
class communicationModel extends communication
|
||||
{
|
||||
|
||||
/**
|
||||
* Initialization
|
||||
* @return void
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
/**
|
||||
* Initialization
|
||||
* @return void
|
||||
*/
|
||||
function init()
|
||||
{
|
||||
|
||||
/**
|
||||
* get the configuration
|
||||
* @return object config of communication module
|
||||
**/
|
||||
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';
|
||||
if(!$communication_config->mskin) $communication_config->mskin = 'default';
|
||||
/**
|
||||
* get the configuration
|
||||
* @return object config of communication module
|
||||
*/
|
||||
function getConfig()
|
||||
{
|
||||
$oModuleModel = getModel('module');
|
||||
$communication_config = $oModuleModel->getModuleConfig('communication');
|
||||
|
||||
return $communication_config;
|
||||
}
|
||||
if(!is_object($communication_config))
|
||||
{
|
||||
$communication_config = new stdClass();
|
||||
}
|
||||
|
||||
/**
|
||||
* get the message contents
|
||||
* @param int $message_srl
|
||||
* @param array $columnList
|
||||
* @return object message information
|
||||
**/
|
||||
function getSelectedMessage($message_srl, $columnList = array()) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
if(!$communication_config->skin)
|
||||
{
|
||||
$communication_config->skin = 'default';
|
||||
}
|
||||
|
||||
$args->message_srl = $message_srl;
|
||||
$output = executeQuery('communication.getMessage',$args, $columnList);
|
||||
$message = $output->data;
|
||||
if(!$message) return ;
|
||||
// get recipient's information if it is a sent message
|
||||
$oMemberModel = &getModel('member');
|
||||
if($message->sender_srl == $logged_info->member_srl && $message->message_type == 'S') $member_info = $oMemberModel->getMemberInfoByMemberSrl($message->receiver_srl);
|
||||
// get sendor's information if it is a received/archived message
|
||||
else $member_info = $oMemberModel->getMemberInfoByMemberSrl($message->sender_srl);
|
||||
if(!$communication_config->colorset)
|
||||
{
|
||||
$communication_config->colorset = 'white';
|
||||
}
|
||||
|
||||
if($member_info) {
|
||||
foreach($member_info as $key => $val) {
|
||||
if($key != 'regdate') $message->{$key} = $val;
|
||||
}
|
||||
}
|
||||
// change the status if is a received and not yet read message
|
||||
if($message->message_type == 'R' && $message->readed != 'Y') {
|
||||
$oCommunicationController = &getController('communication');
|
||||
$oCommunicationController->setMessageReaded($message_srl);
|
||||
}
|
||||
if(!$communication_config->editor_skin)
|
||||
{
|
||||
$communication_config->editor_skin = 'default';
|
||||
}
|
||||
|
||||
return $message;
|
||||
}
|
||||
if(!$communication_config->mskin)
|
||||
{
|
||||
$communication_config->mskin = 'default';
|
||||
}
|
||||
|
||||
/**
|
||||
* get a new message
|
||||
* @param array $columnList
|
||||
* @return object message information
|
||||
**/
|
||||
function getNewMessage($columnList = array()) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
$args->receiver_srl = $logged_info->member_srl;
|
||||
$args->readed = 'N';
|
||||
return $communication_config;
|
||||
}
|
||||
|
||||
$output = executeQuery('communication.getNewMessage', $args, $columnList);
|
||||
if(!count($output->data)) return;
|
||||
$message = array_pop($output->data);
|
||||
/**
|
||||
* get the message contents
|
||||
* @param int $message_srl
|
||||
* @param array $columnList
|
||||
* @return object message information
|
||||
*/
|
||||
function getSelectedMessage($message_srl, $columnList = array())
|
||||
{
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$oCommunicationController = &getController('communication');
|
||||
$oCommunicationController->setMessageReaded($message->message_srl);
|
||||
$args = new stdClass();
|
||||
$args->message_srl = $message_srl;
|
||||
$output = executeQuery('communication.getMessage', $args, $columnList);
|
||||
|
||||
return $message;
|
||||
}
|
||||
$message = $output->data;
|
||||
if(!$message)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* get a message list
|
||||
* @param string $message_type (R: Received Message, S: Sent Message, T: Archive)
|
||||
* @param array $columnList
|
||||
* @return Object
|
||||
**/
|
||||
function getMessages($message_type = "R", $columnList = array()) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
// get recipient's information if it is a sent message
|
||||
$oMemberModel = getModel('member');
|
||||
|
||||
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;
|
||||
|
||||
}
|
||||
// Other variables
|
||||
$args->sort_index = 'message.list_order';
|
||||
$args->page = Context::get('page');
|
||||
$args->list_count = 20;
|
||||
$args->page_count = 10;
|
||||
return executeQuery($query_id, $args, $columnList);
|
||||
}
|
||||
if($message->sender_srl == $logged_info->member_srl && $message->message_type == 'S')
|
||||
{
|
||||
$member_info = $oMemberModel->getMemberInfoByMemberSrl($message->receiver_srl);
|
||||
}
|
||||
// get sendor's information if it is a received/archived message
|
||||
else
|
||||
{
|
||||
$member_info = $oMemberModel->getMemberInfoByMemberSrl($message->sender_srl);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of friends
|
||||
* @param int $friend_group_srl (default 0)
|
||||
* @param array $columnList
|
||||
* @return Object
|
||||
**/
|
||||
function getFriends($friend_group_srl = 0, $columnList = array()) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
if($member_info)
|
||||
{
|
||||
foreach($member_info as $key => $val)
|
||||
{
|
||||
if($key != 'regdate')
|
||||
{
|
||||
$message->{$key} = $val;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$args->friend_group_srl = $friend_group_srl;
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
// Other variables
|
||||
$args->page = Context::get('page');
|
||||
$args->sort_index = 'friend.list_order';
|
||||
$args->list_count = 10;
|
||||
$args->page_count = 10;
|
||||
$output = executeQuery('communication.getFriends', $args, $columnList);
|
||||
return $output;
|
||||
}
|
||||
// change the status if is a received and not yet read message
|
||||
if($message->message_type == 'R' && $message->readed != 'Y')
|
||||
{
|
||||
$oCommunicationController = getController('communication');
|
||||
$oCommunicationController->setMessageReaded($message_srl);
|
||||
}
|
||||
|
||||
/**
|
||||
* check if a friend is already added
|
||||
* @param int $member_srl
|
||||
* @return int
|
||||
**/
|
||||
function isAddedFriend($member_srl) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
return $message;
|
||||
}
|
||||
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->target_srl = $member_srl;
|
||||
$output = executeQuery('communication.isAddedFriend', $args);
|
||||
return $output->data->count;
|
||||
}
|
||||
/**
|
||||
* get a new message
|
||||
* @param array $columnList
|
||||
* @return object message information
|
||||
*/
|
||||
function getNewMessage($columnList = array())
|
||||
{
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
/**
|
||||
* Get a group of friends
|
||||
* @param int $friend_group_srl
|
||||
* @return object
|
||||
**/
|
||||
function getFriendGroupInfo($friend_group_srl) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
$args = new stdClass();
|
||||
$args->receiver_srl = $logged_info->member_srl;
|
||||
$args->readed = 'N';
|
||||
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->friend_group_srl = $friend_group_srl;
|
||||
$output = executeQuery('communication.getNewMessage', $args, $columnList);
|
||||
if(!count($output->data))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$output = executeQuery('communication.getFriendGroup', $args);
|
||||
return $output->data;
|
||||
}
|
||||
$message = array_pop($output->data);
|
||||
|
||||
/**
|
||||
* Get a list of groups
|
||||
* @return array
|
||||
**/
|
||||
function getFriendGroups() {
|
||||
$logged_info = Context::get('logged_info');
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$oCommunicationController = getController('communication');
|
||||
$oCommunicationController->setMessageReaded($message->message_srl);
|
||||
|
||||
$output = executeQueryArray('communication.getFriendGroups', $args);
|
||||
$group_list = $output->data;
|
||||
if(!$group_list) return;
|
||||
return $group_list;
|
||||
}
|
||||
return $message;
|
||||
}
|
||||
|
||||
/**
|
||||
* check whether to be added in the friend list
|
||||
* @param int $target_srl
|
||||
* @return boolean (true : friend, false : not friend)
|
||||
**/
|
||||
function isFriend($target_srl) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
/**
|
||||
* get a message list
|
||||
* @param string $message_type (R: Received Message, S: Sent Message, T: Archive)
|
||||
* @param array $columnList
|
||||
* @return Object
|
||||
*/
|
||||
function getMessages($message_type = "R", $columnList = array())
|
||||
{
|
||||
$logged_info = Context::get('logged_info');
|
||||
$args = new stdClass();
|
||||
|
||||
$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;
|
||||
}
|
||||
}
|
||||
?>
|
||||
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;
|
||||
}
|
||||
|
||||
// Other variables
|
||||
$args->sort_index = 'message.list_order';
|
||||
$args->page = Context::get('page');
|
||||
$args->list_count = 20;
|
||||
$args->page_count = 10;
|
||||
|
||||
return executeQuery($query_id, $args, $columnList);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of friends
|
||||
* @param int $friend_group_srl (default 0)
|
||||
* @param array $columnList
|
||||
* @return Object
|
||||
*/
|
||||
function getFriends($friend_group_srl = 0, $columnList = array())
|
||||
{
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$args = new stdClass();
|
||||
$args->friend_group_srl = $friend_group_srl;
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
|
||||
// Other variables
|
||||
$args->page = Context::get('page');
|
||||
$args->sort_index = 'friend.list_order';
|
||||
$args->list_count = 10;
|
||||
$args->page_count = 10;
|
||||
|
||||
$output = executeQuery('communication.getFriends', $args, $columnList);
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* check if a friend is already added
|
||||
* @param int $member_srl
|
||||
* @return int
|
||||
*/
|
||||
function isAddedFriend($member_srl)
|
||||
{
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$args = new stdClass();
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->target_srl = $member_srl;
|
||||
|
||||
$output = executeQuery('communication.isAddedFriend', $args);
|
||||
|
||||
return $output->data->count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a group of friends
|
||||
* @param int $friend_group_srl
|
||||
* @return object
|
||||
*/
|
||||
function getFriendGroupInfo($friend_group_srl)
|
||||
{
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$args = new stdClass();
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
$args->friend_group_srl = $friend_group_srl;
|
||||
|
||||
$output = executeQuery('communication.getFriendGroup', $args);
|
||||
|
||||
return $output->data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of groups
|
||||
* @return array
|
||||
*/
|
||||
function getFriendGroups()
|
||||
{
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$args = new stdClass();
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
|
||||
$output = executeQueryArray('communication.getFriendGroups', $args);
|
||||
|
||||
$group_list = $output->data;
|
||||
if(!$group_list)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
return $group_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* check whether to be added in the friend list
|
||||
* @param int $target_srl
|
||||
* @return boolean (true : friend, false : not friend)
|
||||
*/
|
||||
function isFriend($target_srl)
|
||||
{
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$args = new stdClass();
|
||||
$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;
|
||||
}
|
||||
|
||||
}
|
||||
/* End of file communication.model.php */
|
||||
/* Location: ./modules/comment/communication.model.php */
|
||||
|
|
|
|||
|
|
@ -1,276 +1,374 @@
|
|||
<?php
|
||||
/**
|
||||
* @class communicationView
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* View class of communication module
|
||||
**/
|
||||
|
||||
class communicationView extends communication {
|
||||
/**
|
||||
* @class communicationView
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* View class of communication module
|
||||
*/
|
||||
class communicationView extends communication
|
||||
{
|
||||
|
||||
/**
|
||||
* Initialization
|
||||
* @return void
|
||||
**/
|
||||
function init() {
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
/**
|
||||
* Initialization
|
||||
* @return void
|
||||
*/
|
||||
function init()
|
||||
{
|
||||
$oCommunicationModel = getModel('communication');
|
||||
|
||||
$this->communication_config = $oCommunicationModel->getConfig();
|
||||
$skin = $this->communication_config->skin;
|
||||
$this->communication_config = $oCommunicationModel->getConfig();
|
||||
$skin = $this->communication_config->skin;
|
||||
|
||||
Context::set('communication_config', $this->communication_config);
|
||||
Context::set('communication_config', $this->communication_config);
|
||||
|
||||
$config_parse = explode('|@|', $skin);
|
||||
if (count($config_parse) > 1){
|
||||
$tpl_path = sprintf('./themes/%s/modules/communication/', $config_parse[0]);
|
||||
}else{
|
||||
$tpl_path = sprintf('%sskins/%s', $this->module_path, $skin);
|
||||
}
|
||||
$this->setTemplatePath($tpl_path);
|
||||
$config_parse = explode('|@|', $skin);
|
||||
|
||||
$oLayoutModel = &getModel('layout');
|
||||
$layout_info = $oLayoutModel->getLayout($this->communication_config->layout_srl);
|
||||
if($layout_info)
|
||||
if(count($config_parse) > 1)
|
||||
{
|
||||
$tpl_path = sprintf('./themes/%s/modules/communication/', $config_parse[0]);
|
||||
}
|
||||
else
|
||||
{
|
||||
$tpl_path = sprintf('%sskins/%s', $this->module_path, $skin);
|
||||
}
|
||||
|
||||
$this->setTemplatePath($tpl_path);
|
||||
|
||||
$oLayoutModel = getModel('layout');
|
||||
$layout_info = $oLayoutModel->getLayout($this->communication_config->layout_srl);
|
||||
if($layout_info)
|
||||
{
|
||||
$this->module_info->layout_srl = $this->communication_config->layout_srl;
|
||||
$this->setLayoutPath($layout_info->path);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display message box
|
||||
* @return void|Object (void : success, Object : fail)
|
||||
*/
|
||||
function dispCommunicationMessages()
|
||||
{
|
||||
// Error appears if not logged-in
|
||||
if(!Context::get('is_logged'))
|
||||
{
|
||||
return $this->stop('msg_not_logged');
|
||||
}
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
if(!array_key_exists('dispCommunicationMessages', $logged_info->menu_list))
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
}
|
||||
|
||||
// Set the variables
|
||||
$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');
|
||||
|
||||
// extract contents if message_srl exists
|
||||
if($message_srl)
|
||||
{
|
||||
$columnList = array('message_srl', 'sender_srl', 'receiver_srl', 'message_type', 'title', 'content', 'readed', 'regdate');
|
||||
$message = $oCommunicationModel->getSelectedMessage($message_srl, $columnList);
|
||||
|
||||
switch($message->message_type)
|
||||
{
|
||||
$this->module_info->layout_srl = $this->communication_config->layout_srl;
|
||||
$this->setLayoutPath($layout_info->path);
|
||||
}
|
||||
}
|
||||
case 'R':
|
||||
if($message->receiver_srl != $logged_info->member_srl)
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
}
|
||||
break;
|
||||
|
||||
/**
|
||||
* Display message box
|
||||
* @return void|Object (void : success, Object : fail)
|
||||
**/
|
||||
function dispCommunicationMessages() {
|
||||
// Error appears if not logged-in
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
if(!array_key_exists('dispCommunicationMessages', $logged_info->menu_list))
|
||||
case 'S':
|
||||
if($message->sender_srl != $logged_info->member_srl)
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
}
|
||||
break;
|
||||
|
||||
case 'T':
|
||||
if($message->receiver_srl != $logged_info->member_srl && $message->sender_srl != $logged_info->member_srl)
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if($message->message_srl == $message_srl && ($message->receiver_srl == $logged_info->member_srl || $message->sender_srl == $logged_info->member_srl))
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
}
|
||||
|
||||
// Set the variables
|
||||
$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');
|
||||
// extract contents if message_srl exists
|
||||
if($message_srl) {
|
||||
$columnList = array('message_srl', 'sender_srl', 'receiver_srl', 'message_type', 'title', 'content', 'readed', 'regdate');
|
||||
$message = $oCommunicationModel->getSelectedMessage($message_srl, $columnList);
|
||||
switch($message->message_type)
|
||||
{
|
||||
case 'R':
|
||||
if($message->receiver_srl != $logged_info->member_srl)
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
}
|
||||
break;
|
||||
case 'S':
|
||||
if($message->sender_srl != $logged_info->member_srl)
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
}
|
||||
break;
|
||||
case 'T':
|
||||
if($message->receiver_srl != $logged_info->member_srl && $message->sender_srl != $logged_info->member_srl)
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
}
|
||||
break;
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
// Extract a list
|
||||
$columnList = array('message_srl', 'readed', 'title', 'member.member_srl', 'member.nick_name', 'message.regdate', 'readed_date');
|
||||
$output = $oCommunicationModel->getMessages($message_type, $columnList);
|
||||
|
||||
// set a template file
|
||||
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);
|
||||
|
||||
$oSecurity = new Security();
|
||||
$oSecurity->encodeHTML('message_list..nick_name');
|
||||
|
||||
$this->setTemplateFile('messages');
|
||||
}
|
||||
|
||||
/**
|
||||
* display a new message
|
||||
* @return void|Object (void : success, Object : fail)
|
||||
**/
|
||||
function dispCommunicationNewMessage() {
|
||||
$this->setLayoutPath('./common/tpl/');
|
||||
$this->setLayoutFile('popup_layout');
|
||||
// Error appears if not logged-in
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
// get a new message
|
||||
$columnList = array('message_srl', 'member_srl', 'nick_name', 'title', 'content', 'sender_srl');
|
||||
$message = $oCommunicationModel->getNewMessage($columnList);
|
||||
if($message) {
|
||||
stripEmbedTagForAdmin($message->content, $message->sender_srl);
|
||||
Context::set('message', $message);
|
||||
}
|
||||
|
||||
// Delete a flag
|
||||
$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');
|
||||
}
|
||||
// Extract a list
|
||||
$columnList = array('message_srl', 'readed', 'title', 'member.member_srl', 'member.nick_name', 'message.regdate', 'readed_date');
|
||||
$output = $oCommunicationModel->getMessages($message_type, $columnList);
|
||||
|
||||
/**
|
||||
* Display message sending
|
||||
* @return void|Object (void : success, Object : fail)
|
||||
**/
|
||||
function dispCommunicationSendMessage() {
|
||||
$this->setLayoutPath('./common/tpl/');
|
||||
$this->setLayoutFile("popup_layout");
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
$oMemberModel = &getModel('member');
|
||||
// Error appears if not logged-in
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
// get receipient's information
|
||||
// set a template file
|
||||
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);
|
||||
|
||||
// check inalid request
|
||||
$receiver_srl = Context::get('receiver_srl');
|
||||
if(!$receiver_srl) return $this->stop('msg_invalid_request');
|
||||
$oSecurity = new Security();
|
||||
$oSecurity->encodeHTML('message_list..nick_name');
|
||||
|
||||
// check receiver and sender are same
|
||||
if($logged_info->member_srl == $receiver_srl) return $this->stop('msg_cannot_send_to_yourself');
|
||||
// get message_srl of the original message if it is a reply
|
||||
$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);
|
||||
}
|
||||
}
|
||||
$this->setTemplateFile('messages');
|
||||
}
|
||||
|
||||
$receiver_info = $oMemberModel->getMemberInfoByMemberSrl($receiver_srl);
|
||||
if(!$receiver_info)
|
||||
/**
|
||||
* display a new message
|
||||
* @return void|Object (void : success, Object : fail)
|
||||
*/
|
||||
function dispCommunicationNewMessage()
|
||||
{
|
||||
$this->setLayoutPath('./common/tpl/');
|
||||
$this->setLayoutFile('popup_layout');
|
||||
|
||||
// Error appears if not logged-in
|
||||
if(!Context::get('is_logged'))
|
||||
{
|
||||
return $this->stop('msg_not_logged');
|
||||
}
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$oCommunicationModel = getModel('communication');
|
||||
|
||||
// get a new message
|
||||
$columnList = array('message_srl', 'member_srl', 'nick_name', 'title', 'content', 'sender_srl');
|
||||
$message = $oCommunicationModel->getNewMessage($columnList);
|
||||
if($message)
|
||||
{
|
||||
stripEmbedTagForAdmin($message->content, $message->sender_srl);
|
||||
Context::set('message', $message);
|
||||
}
|
||||
|
||||
// Delete a flag
|
||||
$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');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display message sending
|
||||
* @return void|Object (void : success, Object : fail)
|
||||
*/
|
||||
function dispCommunicationSendMessage()
|
||||
{
|
||||
$this->setLayoutPath('./common/tpl/');
|
||||
$this->setLayoutFile("popup_layout");
|
||||
|
||||
$oCommunicationModel = getModel('communication');
|
||||
$oMemberModel = getModel('member');
|
||||
|
||||
// Error appears if not logged-in
|
||||
if(!Context::get('is_logged'))
|
||||
{
|
||||
return $this->stop('msg_not_logged');
|
||||
}
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// get receipient's information
|
||||
// check inalid request
|
||||
$receiver_srl = Context::get('receiver_srl');
|
||||
if(!$receiver_srl)
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
}
|
||||
|
||||
// check receiver and sender are same
|
||||
if($logged_info->member_srl == $receiver_srl)
|
||||
{
|
||||
return $this->stop('msg_cannot_send_to_yourself');
|
||||
}
|
||||
|
||||
// get message_srl of the original message if it is a reply
|
||||
$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)
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
$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);
|
||||
}
|
||||
}
|
||||
|
||||
Context::set('receiver_info', $receiver_info);
|
||||
// set a signiture by calling getEditor of the editor module
|
||||
$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);
|
||||
$receiver_info = $oMemberModel->getMemberInfoByMemberSrl($receiver_srl);
|
||||
if(!$receiver_info)
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
}
|
||||
|
||||
$this->setTemplateFile('send_message');
|
||||
}
|
||||
Context::set('receiver_info', $receiver_info);
|
||||
|
||||
/**
|
||||
* display a list of friends
|
||||
* @return void|Object (void : success, Object : fail)
|
||||
**/
|
||||
function dispCommunicationFriend() {
|
||||
// Error appears if not logged-in
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
// set a signiture by calling getEditor of the editor module
|
||||
$oEditorModel = getModel('editor');
|
||||
$option = new stdClass();
|
||||
$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);
|
||||
|
||||
$oCommunicationModel = &getModel('communication');
|
||||
// get a group list
|
||||
$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);
|
||||
// get a list of friends
|
||||
$friend_group_srl = Context::get('friend_group_srl');
|
||||
$columnList = array('friend_srl', 'friend_group_srl', 'target_srl', 'member.nick_name', 'friend.regdate');
|
||||
$output = $oCommunicationModel->getFriends($friend_group_srl, $columnList);
|
||||
$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;
|
||||
}
|
||||
}
|
||||
// set a template file
|
||||
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('send_message');
|
||||
}
|
||||
|
||||
$this->setTemplateFile('friends');
|
||||
}
|
||||
/**
|
||||
* display a list of friends
|
||||
* @return void|Object (void : success, Object : fail)
|
||||
*/
|
||||
function dispCommunicationFriend()
|
||||
{
|
||||
// Error appears if not logged-in
|
||||
if(!Context::get('is_logged'))
|
||||
{
|
||||
return $this->stop('msg_not_logged');
|
||||
}
|
||||
|
||||
/**
|
||||
* display Add a friend
|
||||
* @return void|Object (void : success, Object : fail)
|
||||
**/
|
||||
function dispCommunicationAddFriend() {
|
||||
$this->setLayoutPath('./common/tpl/');
|
||||
$this->setLayoutFile("popup_layout");
|
||||
// error appears if not logged-in
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
$oCommunicationModel = getModel('communication');
|
||||
|
||||
$target_srl = Context::get('target_srl');
|
||||
if(!$target_srl) return $this->stop('msg_invalid_request');
|
||||
// get information of the member
|
||||
$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);
|
||||
// get a group list
|
||||
$friend_group_list = $oCommunicationModel->getFriendGroups();
|
||||
Context::set('friend_group_list', $friend_group_list);
|
||||
// get a group list
|
||||
$tmp_group_list = $oCommunicationModel->getFriendGroups();
|
||||
$group_count = count($tmp_group_list);
|
||||
|
||||
$this->setTemplateFile('add_friend');
|
||||
}
|
||||
for($i = 0; $i < $group_count; $i++)
|
||||
{
|
||||
$friend_group_list[$tmp_group_list[$i]->friend_group_srl] = $tmp_group_list[$i];
|
||||
}
|
||||
|
||||
/**
|
||||
* display add a group of friends
|
||||
* @return void|Object (void : success, Object : fail)
|
||||
**/
|
||||
function dispCommunicationAddFriendGroup() {
|
||||
$this->setLayoutPath('./common/tpl/');
|
||||
$this->setLayoutFile("popup_layout");
|
||||
// error apprears if not logged-in
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
$logged_info = Context::get('logged_info');
|
||||
// change to edit mode when getting the group_srl
|
||||
$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');
|
||||
}
|
||||
}
|
||||
?>
|
||||
Context::set('friend_group_list', $friend_group_list);
|
||||
|
||||
// get a list of friends
|
||||
$friend_group_srl = Context::get('friend_group_srl');
|
||||
$columnList = array('friend_srl', 'friend_group_srl', 'target_srl', 'member.nick_name', 'friend.regdate');
|
||||
|
||||
$output = $oCommunicationModel->getFriends($friend_group_srl, $columnList);
|
||||
$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;
|
||||
}
|
||||
}
|
||||
|
||||
// set a template file
|
||||
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');
|
||||
}
|
||||
|
||||
/**
|
||||
* display Add a friend
|
||||
* @return void|Object (void : success, Object : fail)
|
||||
*/
|
||||
function dispCommunicationAddFriend()
|
||||
{
|
||||
$this->setLayoutPath('./common/tpl/');
|
||||
$this->setLayoutFile("popup_layout");
|
||||
|
||||
// error appears if not logged-in
|
||||
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');
|
||||
}
|
||||
|
||||
// get information of the member
|
||||
$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);
|
||||
|
||||
// get a group list
|
||||
$friend_group_list = $oCommunicationModel->getFriendGroups();
|
||||
Context::set('friend_group_list', $friend_group_list);
|
||||
|
||||
$this->setTemplateFile('add_friend');
|
||||
}
|
||||
|
||||
/**
|
||||
* display add a group of friends
|
||||
* @return void|Object (void : success, Object : fail)
|
||||
*/
|
||||
function dispCommunicationAddFriendGroup()
|
||||
{
|
||||
$this->setLayoutPath('./common/tpl/');
|
||||
$this->setLayoutFile("popup_layout");
|
||||
|
||||
// error apprears if not logged-in
|
||||
if(!Context::get('is_logged'))
|
||||
{
|
||||
return $this->stop('msg_not_logged');
|
||||
}
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// change to edit mode when getting the group_srl
|
||||
$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');
|
||||
}
|
||||
|
||||
}
|
||||
/* End of file communication.view.php */
|
||||
/* Location: ./modules/comment/communication.view.php */
|
||||
|
|
|
|||
|
|
@ -8,10 +8,10 @@
|
|||
<title xml:lang="vi">Liên lạc</title>
|
||||
<title xml:lang="zh-TW">交流</title>
|
||||
<title xml:lang="tr">İletişim</title>
|
||||
<description xml:lang="ko">회원들간의 쪽지, 친구기능을 담당하는 모듈입니다.</description>
|
||||
<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 messages, friend functions.</description>
|
||||
<description xml:lang="en">This is for managing messages, 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>
|
||||
|
|
|
|||
|
|
@ -1,32 +1,33 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<module>
|
||||
<grants />
|
||||
<permissions />
|
||||
<actions>
|
||||
<action name="dispCommunicationMessages" type="view" standalone="true" />
|
||||
<action name="dispCommunicationSendMessage" type="view" standalone="true" />
|
||||
<action name="dispCommunicationNewMessage" type="view" standalone="true" />
|
||||
<grants />
|
||||
<permissions />
|
||||
<actions>
|
||||
<action name="dispCommunicationMessages" type="view" standalone="true" />
|
||||
<action name="dispCommunicationSendMessage" type="view" standalone="true" />
|
||||
<action name="dispCommunicationNewMessage" type="view" standalone="true" />
|
||||
|
||||
<action name="dispCommunicationFriend" type="view" standalone="true" />
|
||||
<action name="dispCommunicationAddFriend" type="view" standalone="true" />
|
||||
<action name="dispCommunicationAddFriendGroup" type="view" standalone="true" />
|
||||
<action name="dispCommunicationFriend" type="view" standalone="true" />
|
||||
<action name="dispCommunicationAddFriend" type="view" standalone="true" />
|
||||
<action name="dispCommunicationAddFriendGroup" type="view" standalone="true" />
|
||||
<action name="dispCommunicationMessageBoxList" type="mobile" standalone="true" />
|
||||
|
||||
<action name="procCommunicationUpdateAllowMessage" type="controller" standalone="true" />
|
||||
<action name="procCommunicationSendMessage" type="controller" standalone="true" ruleset="sendMessage" />
|
||||
<action name="procCommunicationStoreMessage" type="controller" standalone="true" />
|
||||
<action name="procCommunicationDeleteMessage" type="controller" standalone="true" />
|
||||
<action name="procCommunicationDeleteMessages" type="controller" standalone="true" />
|
||||
<action name="procCommunicationUpdateAllowMessage" type="controller" standalone="true" />
|
||||
<action name="procCommunicationSendMessage" type="controller" standalone="true" ruleset="sendMessage" />
|
||||
<action name="procCommunicationStoreMessage" type="controller" standalone="true" />
|
||||
<action name="procCommunicationDeleteMessage" type="controller" standalone="true" />
|
||||
<action name="procCommunicationDeleteMessages" type="controller" standalone="true" />
|
||||
|
||||
<action name="procCommunicationAddFriend" type="controller" standalone="true" ruleset="addFriend" />
|
||||
<action name="procCommunicationMoveFriend" type="controller" standalone="true" ruleset="deleteCheckedFriend" />
|
||||
<action name="procCommunicationDeleteFriend" type="controller" standalone="true" ruleset="deleteCheckedFriend" />
|
||||
<action name="procCommunicationAddFriend" type="controller" standalone="true" ruleset="addFriend" />
|
||||
<action name="procCommunicationMoveFriend" type="controller" standalone="true" ruleset="deleteCheckedFriend" />
|
||||
<action name="procCommunicationDeleteFriend" type="controller" standalone="true" ruleset="deleteCheckedFriend" />
|
||||
|
||||
<action name="procCommunicationAddFriendGroup" type="controller" standalone="true" ruleset="addFriendGroup" />
|
||||
<action name="procCommunicationRenameFriendGroup" type="controller" standalone="true" />
|
||||
<action name="procCommunicationDeleteFriendGroup" type="controller" standalone="true" />
|
||||
<action name="procCommunicationAddFriendGroup" type="controller" standalone="true" ruleset="addFriendGroup" />
|
||||
<action name="procCommunicationRenameFriendGroup" type="controller" standalone="true" />
|
||||
<action name="procCommunicationDeleteFriendGroup" type="controller" standalone="true" />
|
||||
|
||||
<action name="getCommunicationAdminColorset" type="model" standalone="true" />
|
||||
<action name="procCommunicationAdminInsertConfig" type="controller" standalone="true" ruleset="insertConfig" />
|
||||
<action name="dispCommunicationAdminConfig" type="view" standalone="true" admin_index="true" />
|
||||
</actions>
|
||||
<action name="getCommunicationAdminColorset" type="model" standalone="true" />
|
||||
<action name="procCommunicationAdminInsertConfig" type="controller" standalone="true" ruleset="insertConfig" />
|
||||
<action name="dispCommunicationAdminConfig" type="view" standalone="true" admin_index="true" />
|
||||
</actions>
|
||||
</module>
|
||||
|
|
|
|||
|
|
@ -11,14 +11,14 @@
|
|||
<value xml:lang="vi"><![CDATA[Thông báo]]></value>
|
||||
</item>
|
||||
<item name="about_communication">
|
||||
<value xml:lang="ko"><![CDATA[회원 간의 쪽지나 친구 관리 등 커뮤니케이션 기능을 수행하는 모듈입니다.]]></value>
|
||||
<value xml:lang="ko"><![CDATA[회원 간의 쪽지나 친구 관리 등 커뮤니케이션 기능을 수행합니다. 이 기능을 사용하려면 [설치된 애드온] > [커뮤니케이션] 애드온을 활성화 하세요.]]></value>
|
||||
<value xml:lang="en"><![CDATA[This module is used for communication between members, such as exchanging messages or mamaging friends.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[会員間でメッセージや友達管理などコミュニティ機能を提供するモジュールです。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[管理在线会员间短信息及好友功能的模块。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[管理短訊息及好友功能的模組。]]></value>
|
||||
<value xml:lang="fr"><![CDATA[Ce module exécute des fonctions communicatives comme Messages ou Amis]]></value>
|
||||
<value xml:lang="ru"><![CDATA[Модуль для общения между пользователями]]></value>
|
||||
<value xml:lang="es"><![CDATA[회원간의 쪽지나 친구 관리등 커뮤니케이션 기능을 수행하는 모듈입니다]]></value>
|
||||
<value xml:lang="es"><![CDATA[회원간의 쪽지나 친구 관리 등 커뮤니케이션 기능을 수행합니다]]></value>
|
||||
<value xml:lang="tr"><![CDATA[İletişim modülü; üyelerin, mesajlaşması ve arkadaşlarıyla iletişimleri için kullanılan modüldür.]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Module này thực hiện chức năng giao tiếp, tin nhắn hay bạn bè.]]></value>
|
||||
</item>
|
||||
|
|
@ -217,6 +217,18 @@
|
|||
<value xml:lang="tr"><![CDATA[Arkadaş Ekle]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Thêm bạn]]></value>
|
||||
</item>
|
||||
<item name="cmd_message_box">
|
||||
<value xml:lang="ko"><![CDATA[쪽지함]]></value>
|
||||
<value xml:lang="en"><![CDATA[Message Box]]></value>
|
||||
<value xml:lang="jp"><![CDATA[メッセージ]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[短信箱]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[短訊箱]]></value>
|
||||
<value xml:lang="fr"><![CDATA[Lire des Messages]]></value>
|
||||
<value xml:lang="ru"><![CDATA[Личные сообщений]]></value>
|
||||
<value xml:lang="es"><![CDATA[Buzón de mensajes]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Mesaj Kutusu]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Hộp tin nhắn]]></value>
|
||||
</item>
|
||||
<item name="cmd_view_message_box">
|
||||
<value xml:lang="ko"><![CDATA[쪽지함 보기]]></value>
|
||||
<value xml:lang="en"><![CDATA[Message Box]]></value>
|
||||
|
|
@ -359,4 +371,8 @@
|
|||
<value xml:lang="en"><![CDATA[Send a message to the author about this. If you don't write a message, it is not sent.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[作成者にメッセージを送信し、知らせます。作成しなければ送信されません。]]></value>
|
||||
</item>
|
||||
<item name="friends_page_does_not_support">
|
||||
<value xml:lang="ko"><![CDATA[모바일 환경에서는 친구 보기 페이지를 지원하지 않습니다. PC 화면으로 이동하세요.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Friends in a mobile environment is not supported. Please go to the PC page.]]></value>
|
||||
</item>
|
||||
</lang>
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ input[type=radio]{width:13px;height:13px;margin:0;padding:0}
|
|||
.hx a{color:#000}
|
||||
.hx .ex{font-size:12px}
|
||||
.hx .tg{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;padding:0;overflow:visible;border:0;cursor:pointer;opacity:0;background:none}
|
||||
.hx .ca{font-size:12px;text-decoration:underline;color:#333}
|
||||
.hx .ca{font-size:12px;text-decoration:underline;color:#333;margin-left:10px}
|
||||
.hx .ca:after{content:"";display:inline-block;position:relative;left:4px;width:0;height:0;border:4px solid;border-color:transparent;border-left-color:#8d7de1;margin:0 -8px 0 0}
|
||||
.hx .write{position:absolute;top:8px;right:10px;background-position:0 0;display:inline-block;width:28px;height:27px;font-size:0;overflow:hidden;text-indent:-28px}
|
||||
/* Global Navigation */
|
||||
|
|
@ -104,6 +104,7 @@ input[type=radio]{width:13px;height:13px;margin:0;padding:0}
|
|||
.ff label+input[type=text],
|
||||
.ff label+input[type=password],
|
||||
.ff label+textarea{padding:5px}
|
||||
.ff .memberInfo{padding:5px 5px 5px 28px;background:url(../img/member.png) no-repeat 0px center;}
|
||||
/* Button Area */
|
||||
.bna{text-align:center;padding:0 10px;margin:10px 0;zoom:1}
|
||||
.bna:after{content:"";display:block;clear:both}
|
||||
|
|
@ -111,8 +112,8 @@ input[type=radio]{width:13px;height:13px;margin:0;padding:0}
|
|||
.bn[type=submit],
|
||||
.bn[type=button]{height:28px}
|
||||
.bn[href]{height:26px}
|
||||
.bn.dark{border-color:#666;background:#777 -webkit-gradient(linear,0% 0%,0% 100%,from(#7e7c78),to(#5c5b58));background:#777 -moz-linear-gradient(top,#7e7c78,#5c5b58);background-color:#777;color:#fff;box-shadow:0 0 1px #fff inset;-moz-box-shadow:0 0 1px #fff inset;-webkit-box-shadow:0 0 1px #fff inset}
|
||||
.bn.white{border-color:#b5b5b5;background:#1b1b1b -webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#f6f6f6),color-stop(0.5,#f0f0f0),color-stop(0.5,#e4e4e4));background:#1b1b1b -moz-linear-gradient(top,#fff,#e4e4e4);background-color:#fff;color:#000}
|
||||
.bn.dark{border-color:#666;background:-webkit-linear-gradient(top,#7e7c78,#5c5b58);background:-moz-linear-gradient(top,#7e7c78,#5c5b58);background:-o-linear-gradient(top,#7e7c78,#5c5b58);background:-ms-linear-gradient(top,#7e7c78,#5c5b58);background:linear-gradient(top,#7e7c78,#5c5b58);background-color:#777;color:#fff;box-shadow:0 0 1px #fff inset;-moz-box-shadow:0 0 1px #fff inset;-webkit-box-shadow:0 0 1px #fff inset}
|
||||
.bn.white{border-color:#b5b5b5;background:-webkit-linear-gradient(top,#fff,#f0f0f0 50%,#e4e4e4 50%,#f6f6f6 100%);background:-moz-linear-gradient(top,#fff,#f0f0f0 50%,#e4e4e4 50%,#f6f6f6 100%);background:-o-linear-gradient(top,#fff,#f0f0f0 50%,#e4e4e4 50%,#f6f6f6 100%);background:-ms-linear-gradient(top,#fff,#f0f0f0 50%,#e4e4e4 50%,#f6f6f6 100%);background:linear-gradient(top,#fff,#f0f0f0 50%,#e4e4e4 50%,#f6f6f6 100%);background-color:#fff;color:#000;margin-right:2px}
|
||||
/* Pagination */
|
||||
.pn{font-size:12px;text-align:center;background:#f2f0ec;padding:15px 0;border-top:1px solid #fff}
|
||||
.pn a{color:#333;text-decoration:none}
|
||||
|
|
|
|||
7
modules/communication/m.skins/default/friends.html
Normal file
7
modules/communication/m.skins/default/friends.html
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<load target="./css/mcommunication.css" />
|
||||
<div class="hx h2">
|
||||
<h2>{$member_title = $lang->cmd_view_friend}</h2>
|
||||
</div>
|
||||
<div class="co">
|
||||
<p>{$lang->friends_page_does_not_support}</p>
|
||||
</div>
|
||||
22
modules/communication/m.skins/default/js/communication.js
Normal file
22
modules/communication/m.skins/default/js/communication.js
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
/* 개별 쪽지 삭제 */
|
||||
function doDeleteMessage(message_srl) {
|
||||
if(!message_srl) return;
|
||||
if(!confirm(confirm_delete_msg)) return;
|
||||
|
||||
var params = new Array();
|
||||
params['message_srl'] = message_srl;
|
||||
exec_xml('communication', 'procCommunicationDeleteMessage', params, completeDeleteMessage);
|
||||
}
|
||||
|
||||
function completeDeleteMessage(ret_obj) {
|
||||
alert(ret_obj['message']);
|
||||
location.href = current_url.setQuery('message_srl','');
|
||||
}
|
||||
|
||||
function mergeContents()
|
||||
{
|
||||
var $form = jQuery('#fo_comm');
|
||||
var content = $form.find('textarea[name=new_content]').val() + $form.find('input[name=source_content]').val();
|
||||
$form.find('input[name=content]').val(content);
|
||||
$form.submit();
|
||||
}
|
||||
11
modules/communication/m.skins/default/message_box.html
Normal file
11
modules/communication/m.skins/default/message_box.html
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<load target="./css/mcommunication.css" />
|
||||
<div class="bd">
|
||||
<div class="hx h2">
|
||||
<h2>{$lang->cmd_message_box}</h2>
|
||||
</div>
|
||||
<ul class="gn">
|
||||
<li loop="$lang->message_box=>$key,$val">
|
||||
<a href="{getUrl('act','dispCommunicationMessages','message_type',$key)}">{$lang->message_box[$key]}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
<load target="css/mcommunication.css" />
|
||||
<div class="bd">
|
||||
<div class="hx h2">
|
||||
<h2>{$lang->message_box['R']}</h2>
|
||||
<h2>{$lang->message_box[$message_type]}<a href="{getUrl('page','','act','dispCommunicationMessageBoxList','')}" class="ca">{$lang->cmd_message_box}</a></h2>
|
||||
</div>
|
||||
<ul class="lt">
|
||||
<li loop="$message_list => $no,$val" class="read"|cond="$val->readed == 'Y'" class="unread"|cond="$val->readed != 'Y'">
|
||||
|
|
@ -14,4 +13,3 @@
|
|||
<strong>{$page} / {$page_navigation->last_page}</strong>
|
||||
<a cond="$page != $page_navigation->last_page" href="{getUrl('page',$page+1,'document_srl','')}" class="next">{$lang->cmd_next}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,12 +1,19 @@
|
|||
{@ Context::addJsFile("./common/js/jquery.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xe.min.js", true, '', -100000) }
|
||||
<load target="css/mcommunication.css" />
|
||||
|
||||
<load target="./js/communication.js" />
|
||||
<div class="hx h2">
|
||||
<h2>{$message->title}</h2><span class="ex">{$message->nick_name} | {zdate($message->regdate, "Y.m.d H:i")}</span>
|
||||
</div>
|
||||
<div class="co">
|
||||
<div class="xe_content">{$message->content}</div>
|
||||
<div class="xe_content">{$message->content}</div>
|
||||
</div>
|
||||
<div class="bna">
|
||||
<span class="fl"><a href="{getUrl('message_srl', '')}" class="bn white">{$lang->cmd_list}</a></span>
|
||||
<span class="fr"><a href="#" onClick="doDeleteMessage('{$message->message_srl}');" class="bn white">{$lang->cmd_delete}</a></span>
|
||||
<span class="fr" cond="$message->sender_srl != $logged_info->member_srl"><a href="{getUrl('act','dispCommunicationSendMessage','receiver_srl',$message->sender_srl,'message_srl',$message->message_srl)}" class="bn white">{$lang->cmd_reply_message}</a></span>
|
||||
</div>
|
||||
<script>
|
||||
var confirm_delete_msg = "{$lang->confirm_delete}";
|
||||
</script>
|
||||
|
||||
|
|
|
|||
45
modules/communication/m.skins/default/send_message.html
Normal file
45
modules/communication/m.skins/default/send_message.html
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
{@ Context::addJsFile("./common/js/jquery.min.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xe.min.js", true, '', -100000) }
|
||||
<load target="./css/mcommunication.css" />
|
||||
<load target="js/communication.js" />
|
||||
|
||||
<div class="hx h2">
|
||||
<h2>{$lang->cmd_send_message}</h2>
|
||||
</div>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/communication/m.skins/default/send_message/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form ruleset="sendMessage" action="./" method="post" class="ff" id="fo_comm">
|
||||
<input type="hidden" name="module" value="communication" />
|
||||
<input type="hidden" name="is_popup" value="Y" />
|
||||
<input type="hidden" name="act" value="procCommunicationSendMessage" />
|
||||
<input type="hidden" name="receiver_srl" value="{$receiver_info->member_srl}" />
|
||||
<input type="hidden" name="source_content" value="{htmlspecialchars($source_message->content)}" />
|
||||
<input type="hidden" name="content" value="" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/communication/m.skins/default/send_message/1" />
|
||||
<ul>
|
||||
<li>
|
||||
<span class="memberInfo">{$receiver_info->nick_name}</span>
|
||||
</li>
|
||||
<li>
|
||||
<label for="message_title">{$lang->title}</label>
|
||||
<input type="text" name="title" id="message_title" value="{$source_message->title}"/>
|
||||
</li>
|
||||
<li class="xe_content">
|
||||
{$source_message->content}
|
||||
</li>
|
||||
<li>
|
||||
<label for="message_content">{$lang->content}</label>
|
||||
<textarea id="message_content" name="new_content" rows="8" style="width:100%"></textarea>
|
||||
</li>
|
||||
<li>
|
||||
<span id="message_send_mail"><input type="checkbox" value="Y" name="send_mail" /> {$lang->cmd_send_mail}</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="bna">
|
||||
<span class="fl"><a href="{getUrl('act', 'dispCommunicationMessages')}" class="bn white">{$lang->cmd_back}</a></span>
|
||||
<span class="fr"><button type="button" class="bn white" onClick="mergeContents();">{$lang->cmd_send_message}</button></span>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
|
|
@ -1,18 +1,16 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<skin version="0.2">
|
||||
<title xml:lang="ko">XE 커뮤니케이션 모바일 기본 스킨</title>
|
||||
<description xml:lang="ko">
|
||||
XE 커뮤니케이션 모바일 기본 스킨입니다.
|
||||
NHN (developers@xpressengine.com)
|
||||
</description>
|
||||
<version>0.1</version>
|
||||
<date>2012-08-07</date>
|
||||
|
||||
<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="zh-TW">NHN</name>
|
||||
<name xml:lang="tr">NHN</name>
|
||||
</author>
|
||||
<extra_vars />
|
||||
</skin>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<skin version="0.2">
|
||||
<title xml:lang="ko">XE 커뮤니케이션 모바일 기본 스킨</title>
|
||||
<description xml:lang="ko">
|
||||
XE 커뮤니케이션 모바일 기본 스킨입니다.
|
||||
NHN (developers@xpressengine.com)
|
||||
</description>
|
||||
<version>0.1</version>
|
||||
<date>2012-08-07</date>
|
||||
<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="zh-TW">NHN</name>
|
||||
<name xml:lang="tr">NHN</name>
|
||||
</author>
|
||||
</skin>
|
||||
|
|
|
|||
|
|
@ -1,16 +1,17 @@
|
|||
<load target="filter/add_friend.xml" />
|
||||
<load target="css/communication.css" />
|
||||
<load target="js/communication.js" />
|
||||
<h1 class="h1">{$lang->cmd_add_friend}</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form ruleset="addFriend" action="./" method="post" class="form">
|
||||
<input type="hidden" name="module" value="communication" />
|
||||
<input type="hidden" name="act" value="procCommunicationAddFriend" />
|
||||
<input type="hidden" name="target_srl" value="{$target_info->member_srl}" />
|
||||
<div class="table">
|
||||
<table width="100%" border="1" cellspacing="0">
|
||||
<div class="xc">
|
||||
<h1>{$lang->cmd_add_friend}</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/communication/skins/default/add_friend/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form ruleset="addFriend" action="./" method="post">
|
||||
<input type="hidden" name="module" value="communication" />
|
||||
<input type="hidden" name="act" value="procCommunicationAddFriend" />
|
||||
<input type="hidden" name="target_srl" value="{$target_info->member_srl}" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/communication/skins/default/add_friend/1" />
|
||||
<table class="table table-striped table-hover">
|
||||
<tr>
|
||||
<th scope="row">{$lang->nick_name}</th>
|
||||
<td>{$target_info->nick_name}</td>
|
||||
|
|
@ -22,12 +23,12 @@
|
|||
<option value="">{$lang->default_friend_group}</option>
|
||||
<option loop="$friend_group_list => $key,$val" value="{$val->friend_group_srl}">{$val->title}</option>
|
||||
</select>
|
||||
<a href="{getUrl('act','dispCommunicationAddFriendGroup')}" onclick="popopen(this.href);return false;">{$lang->cmd_add_friend_group}</a>
|
||||
<a href="{getUrl('act','dispCommunicationAddFriendGroup')}" class="btn" onclick="popopen(this.href);return false;">{$lang->cmd_add_friend_group}</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="btnArea">
|
||||
<span class="btn"><input type="submit" value="{$lang->cmd_add_friend}" /></span>
|
||||
</div>
|
||||
</form>
|
||||
<div class="btnArea" style="border-top:0;padding:0">
|
||||
<input type="submit" value="{$lang->cmd_add_friend}" class="btn btn-inverse" />
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,30 +1,28 @@
|
|||
<load target="css/communication.css" />
|
||||
<load target="js/communication.js" />
|
||||
<h1 class="h1">
|
||||
<!--@if($friend_group->friend_group_srl)-->
|
||||
{$lang->cmd_rename_friend_group}
|
||||
<!--@else-->
|
||||
{$lang->cmd_add_friend_group}
|
||||
<!--@end-->
|
||||
</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form ruleset="addFriendGroup" action="./" method="post" class="form">
|
||||
<input type="hidden" name="module" value="communication" />
|
||||
<input type="hidden" name="act" value="procCommunicationAddFriendGroup" />
|
||||
<input type="hidden" name="friend_group_srl" value="{$friend_group->friend_group_srl}" />
|
||||
<ul>
|
||||
<li>
|
||||
<p class="q">{$lang->msg_insert_group_name}</p>
|
||||
<p class="a"><input name="title" type="text" value="{htmlspecialchars($friend_group->title)}"/></p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="btnArea">
|
||||
<div class="xc">
|
||||
<h1 style="border-bottom:1px solid #ccc">
|
||||
<!--@if($friend_group->friend_group_srl)-->
|
||||
<span class="btn"><input type="submit" value="{$lang->cmd_modify}" /></span>
|
||||
{$lang->cmd_rename_friend_group}
|
||||
<!--@else-->
|
||||
<span class="btn"><input type="submit" value="{$lang->cmd_insert}" /></span>
|
||||
{$lang->cmd_add_friend_group}
|
||||
<!--@end-->
|
||||
</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/communication/skins/default/add_friend_group/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
</form>
|
||||
<form ruleset="addFriendGroup" action="./" method="post" class="form-horizontal">
|
||||
<input type="hidden" name="module" value="communication" />
|
||||
<input type="hidden" name="act" value="procCommunicationAddFriendGroup" />
|
||||
<input type="hidden" name="friend_group_srl" value="{$friend_group->friend_group_srl}" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/communication/skins/default/add_friend_group/1" />
|
||||
<div class="control-group">
|
||||
<label for="title" class="control-label">{$lang->msg_insert_group_name}</label>
|
||||
<div class="controls"><input name="title" id="title" type="text" value="{htmlspecialchars($friend_group->title)}"/></div>
|
||||
</div>
|
||||
<div class="btnArea">
|
||||
<input cond="$friend_group->friend_group_srl" type="submit" value="{$lang->cmd_modify}" class="btn btn-inverse" />
|
||||
<input cond="!$friend_group->friend_group_srl" type="submit" value="{$lang->cmd_insert}" class="btn btn-inverse" />
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
|
@ -1 +1 @@
|
|||
</div>
|
||||
</section>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
<load target="css/communication.css" />
|
||||
<load target="js/communication.js" />
|
||||
<div class="xc">
|
||||
<div class="nav" cond="$is_logged && $logged_info->menu_list && (!$member_srl || $member_srl == $logged_info->member_srl)">
|
||||
<ul>
|
||||
<li loop="$logged_info->menu_list => $key,$val" class="active"|cond="$key==$act">
|
||||
<a href="{getUrl('act',$key)}"><span>{Context::getLang($val)}</span></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<section class="xc">
|
||||
<ul class="nav nav-tabs" cond="$is_logged && $logged_info->menu_list && (!$member_srl || $member_srl == $logged_info->member_srl)">
|
||||
<li loop="$logged_info->menu_list => $key,$val" class="active"|cond="$key==$act">
|
||||
<a href="{getUrl('act',$key)}">{Context::getLang($val)}</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
|
|||
|
|
@ -1,113 +1,292 @@
|
|||
@charset "utf-8";
|
||||
/* Element Reset */
|
||||
/* Horizontal Align */
|
||||
.xc .pull-right{float:right}
|
||||
.xc .pull-left{float:left}
|
||||
/* DL Horizontal */
|
||||
.xc .dl-horizontal{*zoom:1}
|
||||
.xc .dl-horizontal:before,
|
||||
.xc .dl-horizontal:after{display:table;line-height:0;content:""}
|
||||
.xc .dl-horizontal:after{clear:both}
|
||||
.xc .dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}
|
||||
.xc .dl-horizontal dd{margin-left:180px}
|
||||
/* Form Control Reset */
|
||||
.xc form{margin:0 0 20px}
|
||||
.xc fieldset{padding:0;margin:0;border:0}
|
||||
.xc label,
|
||||
.xc input,
|
||||
.xc button,
|
||||
.xc select,
|
||||
.xc textarea{font-weight:normal;line-height:20px}
|
||||
.xc label{display:block;margin-bottom:5px}
|
||||
.xc textarea,
|
||||
.xc input[type="text"],
|
||||
.xc input[type="password"],
|
||||
.xc input[type="datetime"],
|
||||
.xc input[type="datetime-local"],
|
||||
.xc input[type="date"],
|
||||
.xc input[type="month"],
|
||||
.xc input[type="time"],
|
||||
.xc input[type="week"],
|
||||
.xc input[type="number"],
|
||||
.xc input[type="email"],
|
||||
.xc input[type="url"],
|
||||
.xc input[type="search"],
|
||||
.xc input[type="tel"],
|
||||
.xc input[type="color"]{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;line-height:20px;color:#555555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}
|
||||
.xc input,
|
||||
.xc textarea{width:206px}
|
||||
.xc textarea{height:auto}
|
||||
.xc textarea,
|
||||
.xc input[type="text"],
|
||||
.xc input[type="password"],
|
||||
.xc input[type="datetime"],
|
||||
.xc input[type="datetime-local"],
|
||||
.xc input[type="date"],
|
||||
.xc input[type="month"],
|
||||
.xc input[type="time"],
|
||||
.xc input[type="week"],
|
||||
.xc input[type="number"],
|
||||
.xc input[type="email"],
|
||||
.xc input[type="url"],
|
||||
.xc input[type="search"],
|
||||
.xc input[type="tel"],
|
||||
.xc input[type="color"]{background-color:#ffffff;border:1px solid #cccccc;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear 0.2s, box-shadow linear 0.2s;-moz-transition:border linear 0.2s, box-shadow linear 0.2s;-o-transition:border linear 0.2s, box-shadow linear 0.2s;transition:border linear 0.2s, box-shadow linear 0.2s}
|
||||
.xc textarea:focus,
|
||||
.xc input[type="text"]:focus,
|
||||
.xc input[type="password"]:focus,
|
||||
.xc input[type="datetime"]:focus,
|
||||
.xc input[type="datetime-local"]:focus,
|
||||
.xc input[type="date"]:focus,
|
||||
.xc input[type="month"]:focus,
|
||||
.xc input[type="time"]:focus,
|
||||
.xc input[type="week"]:focus,
|
||||
.xc input[type="number"]:focus,
|
||||
.xc input[type="email"]:focus,
|
||||
.xc input[type="url"]:focus,
|
||||
.xc input[type="search"]:focus,
|
||||
.xc input[type="tel"]:focus,
|
||||
.xc input[type="color"]:focus{border-color:rgba(82, 168, 236, 0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6)}
|
||||
.xc input[type="radio"],
|
||||
.xc input[type="checkbox"]{margin:0;line-height:normal}
|
||||
.xc input[type="file"],
|
||||
.xc input[type="image"],
|
||||
.xc input[type="submit"],
|
||||
.xc input[type="reset"],
|
||||
.xc input[type="button"],
|
||||
.xc input[type="radio"],
|
||||
.xc input[type="checkbox"]{width:auto}
|
||||
.xc select,
|
||||
.xc input[type="file"]{height:26px;*margin-top:4px;line-height:26px}
|
||||
.xc select{background-color:#ffffff;border:1px solid #cccccc}
|
||||
.xc select[multiple],
|
||||
.xc select[size]{height:auto}
|
||||
.xc select:focus,
|
||||
.xc input[type="file"]:focus,
|
||||
.xc input[type="radio"]:focus,
|
||||
.xc input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}
|
||||
.xc input:-moz-placeholder,
|
||||
.xc textarea:-moz-placeholder {color:#999999}
|
||||
.xc input:-ms-input-placeholder,
|
||||
.xc textarea:-ms-input-placeholder {color:#999999}
|
||||
.xc input::-webkit-input-placeholder,
|
||||
.xc textarea::-webkit-input-placeholder {color:#999999}
|
||||
.xc input,
|
||||
.xc textarea{margin-left:0}
|
||||
.xc input[disabled],
|
||||
.xc select[disabled],
|
||||
.xc textarea[disabled],
|
||||
.xc input[readonly],
|
||||
.xc select[readonly],
|
||||
.xc textarea[readonly]{cursor:not-allowed;background-color:#eeeeee}
|
||||
.xc input[type="radio"][disabled],
|
||||
.xc input[type="checkbox"][disabled],
|
||||
.xc input[type="radio"][readonly],
|
||||
.xc input[type="checkbox"][readonly]{background-color:transparent}
|
||||
.xc input:focus:invalid,
|
||||
.xc textarea:focus:invalid,
|
||||
.xc select:focus:invalid {color:#b94a48;border-color:#ee5f5b}
|
||||
.xc input:focus:invalid:focus,
|
||||
.xc textarea:focus:invalid:focus,
|
||||
.xc select:focus:invalid:focus {border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}
|
||||
/* Forms */
|
||||
.xc .form-horizontal .control-group{margin-bottom:20px;*zoom:1}
|
||||
.xc .form-horizontal .control-group:before,
|
||||
.xc .form-horizontal .control-group:after{display:table;line-height:0;content:""}
|
||||
.xc .form-horizontal .control-group:after{clear:both}
|
||||
.xc .form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}
|
||||
.xc .form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}
|
||||
.xc .form-horizontal .controls:first-child{*padding-left:180px}
|
||||
.xc .form-horizontal .help-block{margin-bottom:0}
|
||||
.xc .form-horizontal input+.help-block,
|
||||
.xc .form-horizontal select+.help-block,
|
||||
.xc .form-horizontal textarea+.help-block,
|
||||
.xc .form-horizontal .input-prepend+.help-block,
|
||||
.xc .form-horizontal .input-append+.help-block{margin-top:10px}
|
||||
.xc .help-block,
|
||||
.xc .help-inline{color:#595959}
|
||||
.xc .help-block{display:block;margin-bottom:10px}
|
||||
.xc .help-inline{margin:0;display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}
|
||||
.xc .input-append,
|
||||
.xc .input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}
|
||||
.xc .input-append input,
|
||||
.xc .input-prepend input,
|
||||
.xc .input-append select,
|
||||
.xc .input-prepend select{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}
|
||||
.xc .input-append input:focus,
|
||||
.xc .input-prepend input:focus,
|
||||
.xc .input-append select:focus,
|
||||
.xc .input-prepend select:focus{z-index:2}
|
||||
.xc .input-append .add-on,
|
||||
.xc .input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#eeeeee;border:1px solid #ccc}
|
||||
.xc .input-append .add-on,
|
||||
.xc .input-prepend .add-on,
|
||||
.xc .input-append .btn,
|
||||
.xc .input-prepend .btn{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
|
||||
.xc .input-append .active,
|
||||
.xc .input-prepend .active{background-color:#a9dba9;border-color:#46a546}
|
||||
.xc .input-prepend .add-on,
|
||||
.xc .input-prepend .btn{margin-right:-1px}
|
||||
.xc .input-prepend .add-on:first-child,
|
||||
.xc .input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}
|
||||
.xc .input-append input,
|
||||
.xc .input-append select{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}
|
||||
.xc .input-append input+.btn-group .btn:last-child,
|
||||
.xc .input-append select+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}
|
||||
.xc .input-append .add-on,
|
||||
.xc .input-append .btn,
|
||||
.xc .input-append .btn-group{margin-left:-1px}
|
||||
.xc .input-append .add-on:last-child,
|
||||
.xc .input-append .btn:last-child,
|
||||
.xc .input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}
|
||||
.xc .input-prepend.input-append input,
|
||||
.xc .input-prepend.input-append select{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
|
||||
.xc .input-prepend.input-append input+.btn-group .btn,
|
||||
.xc .input-prepend.input-append select+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}
|
||||
.xc .input-prepend.input-append .add-on:first-child,
|
||||
.xc .input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}
|
||||
.xc .input-prepend.input-append .add-on:last-child,
|
||||
.xc .input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}
|
||||
.xc .input-prepend.input-append .btn-group:first-child{margin-left:0}
|
||||
.xc .form-horizontal input,
|
||||
.xc .form-horizontal textarea,
|
||||
.xc .form-horizontal select,
|
||||
.xc .form-horizontal .help-inline,
|
||||
.xc .form-horizontal .input-prepend,
|
||||
.xc .form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}
|
||||
.xc .form-horizontal .hide{display:none}
|
||||
.xc .control-group{margin-bottom:10px}
|
||||
/* Tabs */
|
||||
.xc .nav{margin:0 0 20px 0;padding:0;list-style:none}
|
||||
.xc .nav>li>a{display:block}
|
||||
.xc .nav>li>a:hover,
|
||||
.xc .nav>li>a:focus{text-decoration:none;background-color:#eeeeee}
|
||||
.xc .nav-tabs{*zoom:1}
|
||||
.xc .nav-tabs:before,
|
||||
.xc .nav-tabs:after{display:table;line-height:0;content:""}
|
||||
.xc .nav-tabs:after{clear:both}
|
||||
.xc .nav-tabs>li{float:left}
|
||||
.xc .nav-tabs>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}
|
||||
.xc .nav-tabs{border-bottom:1px solid #ddd}
|
||||
.xc .nav-tabs>li{margin-bottom:-1px}
|
||||
.xc .nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}
|
||||
.xc .nav-tabs>li>a:hover,
|
||||
.xc .nav-tabs>li>a:focus{border-color:#eeeeee #eeeeee #dddddd}
|
||||
.xc .nav-tabs>.active>a,
|
||||
.xc .nav-tabs>.active>a:hover,
|
||||
.xc .nav-tabs>.active>a:focus{color:#555555;cursor:default;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent}
|
||||
/* Table */
|
||||
.xc .table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0;width:100%;margin-bottom:20px}
|
||||
.xc .table th,
|
||||
.xc .table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #dddddd}
|
||||
.xc .table th{font-weight:bold}
|
||||
.xc .table thead th{vertical-align:bottom}
|
||||
.xc .table caption+thead tr:first-child th,
|
||||
.xc .table caption+thead tr:first-child td,
|
||||
.xc .table colgroup+thead tr:first-child th,
|
||||
.xc .table colgroup+thead tr:first-child td,
|
||||
.xc .table thead:first-child tr:first-child th,
|
||||
.xc .table thead:first-child tr:first-child td{border-top:0}
|
||||
.xc .table tbody+tbody{border-top:2px solid #dddddd}
|
||||
.xc .table-striped tbody>tr:nth-child(odd)>td,
|
||||
.xc .table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}
|
||||
.xc .table-hover tbody tr:hover>td,
|
||||
.xc .table-hover tbody tr:hover>th{background-color:#f5f5f5}
|
||||
/* Pangination */
|
||||
.xc .pagination{margin:20px 0}
|
||||
.xc .pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05)}
|
||||
.xc .pagination ul>li{display:inline}
|
||||
.xc .pagination ul>li>a,
|
||||
.xc .pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#ffffff;border:1px solid #dddddd;border-left-width:0}
|
||||
.xc .pagination ul>li>a:hover,
|
||||
.xc .pagination ul>li>a:focus,
|
||||
.xc .pagination ul>.active>a,
|
||||
.xc .pagination ul>.active>span{background-color:#f5f5f5}
|
||||
.xc .pagination ul>.active>a,
|
||||
.xc .pagination ul>.active>span{color:#999999;cursor:default}
|
||||
.xc .pagination ul>.disabled>span,
|
||||
.xc .pagination ul>.disabled>a,
|
||||
.xc .pagination ul>.disabled>a:hover,
|
||||
.xc .pagination ul>.disabled>a:focus{color:#999999;cursor:default;background-color:transparent}
|
||||
.xc .pagination ul>li:first-child>a,
|
||||
.xc .pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}
|
||||
.xc .pagination ul>li:last-child>a,
|
||||
.xc .pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}
|
||||
.xc .pagination-centered{text-align:center}
|
||||
/* Button */
|
||||
.xc .btn{font-size:12px;font-family:inherit;display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;line-height:20px;height:auto;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(to bottom, #ffffff, #e6e6e6);background-repeat:repeat-x;border:1px solid #cccccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05)}
|
||||
.xc .btn:hover,
|
||||
.xc .btn:focus,
|
||||
.xc .btn:active,
|
||||
.xc .btn.active,
|
||||
.xc .btn.disabled,
|
||||
.xc .btn[disabled]{color:#333333;background-color:#e6e6e6;*background-color:#d9d9d9}
|
||||
.xc .btn:active,
|
||||
.xc .btn.active{background-color:#cccccc \9}
|
||||
.xc .btn:first-child{*margin-left:0}
|
||||
.xc .btn:hover,
|
||||
.xc .btn:focus{color:#333333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear}
|
||||
.xc .btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}
|
||||
.xc .btn.active,
|
||||
.xc .btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}
|
||||
.xc .btn.disabled,
|
||||
.xc .btn[disabled]{cursor:default;background-image:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}
|
||||
.xc .btn-inverse.active{color:rgba(255, 255, 255, 0.75)}
|
||||
.xc .btn-inverse{color:#ffffff!important;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#363636;*background-color:#222222;background-image:-moz-linear-gradient(top, #444444, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));background-image:-webkit-linear-gradient(top, #444444, #222222);background-image:-o-linear-gradient(top, #444444, #222222);background-image:linear-gradient(to bottom, #444444, #222222);background-repeat:repeat-x;border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}
|
||||
.xc .btn-inverse:hover,
|
||||
.xc .btn-inverse:focus,
|
||||
.xc .btn-inverse:active,
|
||||
.xc .btn-inverse.active,
|
||||
.xc .btn-inverse.disabled,
|
||||
.xc .btn-inverse[disabled]{color:#ffffff;background-color:#222222;*background-color:#151515}
|
||||
.xc .btn-inverse:active,
|
||||
.xc .btn-inverse.active{background-color:#080808 \9}
|
||||
.xc button.btn,
|
||||
.xc input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}
|
||||
.xc button.btn::-moz-focus-inner,
|
||||
.xc input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}
|
||||
.xc .btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}
|
||||
.xc .btn-group:first-child{*margin-left:0}
|
||||
.xc .btn-group+.btn-group{margin-left:5px}
|
||||
.xc .btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
|
||||
.xc .btn-group>.btn+.btn{margin-left:-1px}
|
||||
.xc .btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}
|
||||
.xc .btn-group>.btn:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}
|
||||
.xc .btn-group>.btn:hover,
|
||||
.xc .btn-group>.btn:focus,
|
||||
.xc .btn-group>.btn:active,
|
||||
.xc .btn-group>.btn.active{z-index:2}
|
||||
/* Communication Module Customize */
|
||||
.xc,
|
||||
.xc table,
|
||||
.xc input,
|
||||
.xc textarea,
|
||||
.xc select,
|
||||
.xc button{font-family:Tahoma,Geneva,sans-serif;font-size:12px;color:#333}
|
||||
.xc button,
|
||||
.xc input[type=submit],
|
||||
.xc input[type=reset],
|
||||
.xc input[type=button]{cursor:pointer;overflow:visible}
|
||||
.xc img{border:0}
|
||||
.xc p{line-height:1.5}
|
||||
/* Heading */
|
||||
.xc .h1,
|
||||
.xc .h2,
|
||||
.xc .h3,
|
||||
.xc .h4{position:relative;border-bottom-style:solid;border-bottom-color:#ccc;zoom:1}
|
||||
.xc .h1{border-bottom-width:4px;font-size:24px}
|
||||
.xc .h2{border-bottom-width:3px;font-size:20px}
|
||||
.xc .h3{border-bottom-width:2px;font-size:16px}
|
||||
.xc .h4{border-bottom-width:1px;font-size:12px}
|
||||
/* Lined Tab Navigation */
|
||||
.xc .nav{padding:0;margin:1em 0}
|
||||
.xc .nav ul{position:relative;margin:0;padding:0;list-style:none;border-bottom:1px solid #ccc;zoom:1}
|
||||
.xc .nav ul:after{content:"";display:block;clear:both}
|
||||
.xc .nav li{float:left;margin-bottom:-1px}
|
||||
.xc .nav li a{position:relative;float:left;text-decoration:none;border:1px solid #eee;border-bottom-color:#ccc;background:#fafafa;color:#333}
|
||||
.xc .nav li a span{display:inline-block;height:14px;padding:6px 15px 6px 15px;letter-spacing:-1px;cursor:pointer}
|
||||
.xc .nav li.active a{border:1px solid #ccc;border-bottom:1px solid #fff;margin-top:-1px;background:transparent}
|
||||
.xc .nav li.active a span{padding-top:7px;font-weight:bold}
|
||||
/* Form */
|
||||
.xc .form{margin:1em 0;padding:0}
|
||||
.xc .form fieldset{margin:0 0 2em 0;padding:0;border:0}
|
||||
.xc .form em{font-style:normal;color:#e00}
|
||||
.xc .form label{margin-right:1em;line-height:1;vertical-align:middle}
|
||||
.xc .form input[type=checkbox]+label,
|
||||
.xc .form input[type=radio]+label,
|
||||
.xc .form input[type=file]{cursor:pointer}
|
||||
.xc .form ul{position:relative;margin:0;padding:0;list-style:none;border-top:2px solid #ccc;border-bottom:1px solid #ccc;zoom:1}
|
||||
.xc .form li{list-style:none;border:1px solid #ddd;border-left:0;border-right:0;margin:-1px 0;padding:8px 0;vertical-align:top;zoom:1}
|
||||
.xc .form li:first-child{border-top:0}
|
||||
.xc .form li>label:first-child{display:block;font-weight:bold}
|
||||
.xc .form li label em{font-weight:normal}
|
||||
.xc .form label.overlap{position:absolute;color:#aaa}
|
||||
.xc .form input[type=text],
|
||||
.xc .form input[type=password],
|
||||
.xc .form input[type=file],
|
||||
.xc .form textarea{position:relative;width:280px;margin:2px 0;border:1px solid #b7b7b7;border-right-color:#e1e1e1;border-bottom-color:#e1e1e1;background:transparent}
|
||||
.xc .form input[type=text],
|
||||
.xc .form input[type=password],
|
||||
.xc .form input[type=file]{height:22px;line-height:22px;vertical-align:middle;padding:0 4px}
|
||||
.xc .form input[type=text].loading,
|
||||
.xc .form input.loading[type=password]{padding-right:24px;width:260px;background:transparent url(../img/preLoader16.gif) no-repeat 265px center}
|
||||
.xc .form input[type=checkbox],
|
||||
.xc .form input[type=radio]{margin:0;padding:0;width:13px;height:13px;vertical-align:middle}
|
||||
.xc .form input[type=text][disabled=disabled],
|
||||
.xc .form input[type=password][disabled=disabled],
|
||||
.xc .form input[type=checkbox][disabled=disabled],
|
||||
.xc .form input[type=radio][disabled=disabled],
|
||||
.xc .form input[type=file][disabled=disabled],
|
||||
.xc .form textarea[disabled=disabled],
|
||||
.xc .form select[disabled=disabled]{background:#ddd !important;text-shadow:1px 1px 0 #fff}
|
||||
.xc .form textarea{padding:3px 4px;vertical-align:top}
|
||||
.xc .form span.desc,
|
||||
.xc .form em.desc{line-height:22px;vertical-align:middle;margin:0 10px}
|
||||
.xc .form p.desc{margin:.25em 0;line-height:1.4}
|
||||
.xc .form .q{font-weight:bold;margin:0 0 5px 0}
|
||||
.xc .form .a{margin:0 0 5px 0}
|
||||
.xc .form .tgForm{margin-right:1em}
|
||||
.xc .form .h1 + ul,
|
||||
.xc .form .h2 + ul,
|
||||
.xc .form .h3 + ul,
|
||||
.xc .form .h4 + ul{border-top:0}
|
||||
/* Table */
|
||||
.xc .table{margin:1em 0}
|
||||
.xc .table table{width:100%;border:0;border-collapse:collapse;border-top:2px solid #ccc}
|
||||
.xc .table caption{font-weight:bold;text-align:left;line-height:22px;padding:5px 0}
|
||||
.xc .table caption:after{content:"";display:block;clear:both}
|
||||
.xc .table caption a{font-weight:normal}
|
||||
.xc .table caption em{float:right;margin-left:1em}
|
||||
.xc .table caption strong{color:#e00}
|
||||
.xc .table caption .side{float:right;font-weight:normal;margin-left:1em}
|
||||
.xc .table th,
|
||||
.xc .table td{border:0;padding:8px;vertical-align:top;text-align:left;border-bottom:1px solid #ddd;white-space:nowrap}
|
||||
.xc .table th{background:#f8f8f8}
|
||||
.xc .table thead th{border-bottom:1px solid #999}
|
||||
.xc .table tfoot td{font-weight:bold;background:#f8f8f8}
|
||||
.xc .table.even tbody tr:nth-of-type(even) td{background-color:#fafafa}
|
||||
.xc .table td>input[type=text]{margin:-1px 0 -3px 0 !important;vertical-align:middle}
|
||||
.xc .table img{vertical-align:middle}
|
||||
.xc .table em{font-style:normal;font-weight:normal;color:#e00}
|
||||
.xc .table .title,
|
||||
.xc .table .text{white-space:normal}
|
||||
/* Pagination */
|
||||
.xc .pagination{margin:1em 0;text-align:center;line-height:normal}
|
||||
.xc .pagination *{vertical-align:middle}
|
||||
.xc .pagination a,
|
||||
.xc .pagination strong{position:relative;display:inline-block;padding:2px 4px;font-weight:bold;text-decoration:none;line-height:normal;color:#333 !important;vertical-align:middle}
|
||||
.xc .pagination a:hover,
|
||||
.xc .pagination a:active,
|
||||
.xc .pagination a:focus{border:1px solid #ddd;margin:0 -1px}
|
||||
.xc .pagination strong{color:#e00 !important;font-size:20px}
|
||||
.xc .pagination .direction{font-weight:normal;white-space:nowrap}
|
||||
.xc .pagination .direction:hover,
|
||||
.xc .pagination .direction:active,
|
||||
.xc .pagination .direction:focus{border:0;margin:0;text-decoration:underline}
|
||||
.xc .pagination input{width:30px;text-align:center}
|
||||
.xc .pagination button{overflow:visible}
|
||||
/* Text Button */
|
||||
.xc input.text,
|
||||
.xc button.text{border:0;overflow:visible;padding:0;margin:0 4px 0 0;color:#33a;background:none;text-decoration:underline}
|
||||
.xc table{font-size:13px}
|
||||
.xc h1{font-size:22px}
|
||||
.xc .nav a,
|
||||
.xc .btn{text-decoration:none}
|
||||
.xc .table{border-top:1px solid #ddd;border-bottom:1px solid #ddd}
|
||||
.xc .table>caption{text-align:left;font-weight:bold}
|
||||
.xc .table>caption>.pull-right{position:relative;top:-8px}
|
||||
.xc .control-group:first-child,
|
||||
.xc .control-group:first-of-type{border-top:0}
|
||||
|
|
@ -1,77 +1,75 @@
|
|||
<include target="./common_header.html" />
|
||||
<load target="filter/delete_friend_group.xml" />
|
||||
<load target="filter/move_friend.xml" />
|
||||
<h1 class="h1">{$member_title = $lang->cmd_view_friend }</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<h1>{$member_title = $lang->cmd_view_friend }</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/communication/skins/default/frineds/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form ruleset="deleteCheckedFriend" id="fo_friend_list" action="./" method="post" class="form">
|
||||
<form ruleset="deleteCheckedFriend" id="fo_friend_list" action="./" method="post">
|
||||
<input type="hidden" name="module" value="communication" />
|
||||
<input type="hidden" name="act" value="procCommunicationDeleteFriend" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/communication/skins/default/frineds/1" />
|
||||
|
||||
<div class="btnArea">
|
||||
<span class="etc">
|
||||
<select name="jumpMenu" id="jumpMenu">
|
||||
<select name="jumpMenu" id="jumpMenu" style="margin:0">
|
||||
<option value="">{$lang->default_friend_group}</option>
|
||||
<!--@foreach($friend_group_list as $key => $val)-->
|
||||
<option value="{$val->friend_group_srl}" <!--@if($val->friend_group_srl == $friend_group_srl)-->selected="selected"<!--@end--> >{$val->title}</option>
|
||||
<!--@end-->
|
||||
</select>
|
||||
<button type="button" onclick="doJumpFriendGroup()">{$lang->cmd_move}</button>
|
||||
<button type="button" class="btn" onclick="doJumpFriendGroup()">{$lang->cmd_move}</button>
|
||||
</span>
|
||||
<select name="friend_group_list" id="friend_group_list">
|
||||
<!--@foreach($friend_group_list as $key => $val)-->
|
||||
<option value="{$val->friend_group_srl}" <!--@if($val->friend_group_srl == $friend_group_srl)-->selected="selected"<!--@end--> >{$val->title}</option>
|
||||
<!--@end-->
|
||||
<select name="friend_group_list" id="friend_group_list" style="margin:0">
|
||||
<option loop="$friend_group_list => $key,$val" value="{$val->friend_group_srl}" selected="selected"|cond="$val->friend_group_srl == $friend_group_srl">{$val->title}</option>
|
||||
</select>
|
||||
<button type="button" onclick="doRenameFriendGroup();return false;">{$lang->cmd_modify}...</button>
|
||||
<button type="button" onclick="doDeleteFriendGroup();return false;">{$lang->cmd_delete}</button>
|
||||
<a href="{getUrl('','module','communication','act','dispCommunicationAddFriendGroup')}" onclick="popopen(this.href);return false;">{$lang->cmd_add_friend_group}</a>
|
||||
<span class="btn-group">
|
||||
<button type="button" class="btn" onclick="doRenameFriendGroup();return false;">{$lang->cmd_modify}</button>
|
||||
<button type="button" class="btn" onclick="doDeleteFriendGroup();return false;">{$lang->cmd_delete}</button>
|
||||
<a href="{getUrl('','module','communication','act','dispCommunicationAddFriendGroup')}" class="btn" onclick="popopen(this.href);return false;">{$lang->cmd_add_friend_group}</a>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="table even">
|
||||
<table width="100%" border="1" cellspacing="0">
|
||||
<caption>Total: {$total_count}</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{$lang->friend_group}</th>
|
||||
<th>{$lang->nick_name}</th>
|
||||
<th>{$lang->regdate}</th>
|
||||
<th><input name="check_all" type="checkbox" onclick="XE.checkboxToggleAll('friend_srl_list[]', { wrap:'fo_friend_list' });" /></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr loop="$friend_list => $no,$val">
|
||||
<td>{$val->group_title?$val->group_title:" "}</td>
|
||||
<td><a href="#popup_menu_area" class="member_{$val->target_srl}">{$val->nick_name}</a></td>
|
||||
<td>{zdate($val->regdate,"Y-m-d")}</td>
|
||||
<td><input type="checkbox" name="friend_srl_list[]" value="{$val->friend_srl}" /></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<table class="table table-striped table-hover">
|
||||
<caption>Total: {$total_count}</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{$lang->friend_group}</th>
|
||||
<th>{$lang->nick_name}</th>
|
||||
<th>{$lang->regdate}</th>
|
||||
<th><input name="check_all" type="checkbox" /></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr loop="$friend_list => $no,$val">
|
||||
<td>{$val->group_title?$val->group_title:" "}</td>
|
||||
<td><a href="#popup_menu_area" class="member_{$val->target_srl}">{$val->nick_name}</a></td>
|
||||
<td>{zdate($val->regdate,"Y-m-d")}</td>
|
||||
<td><input type="checkbox" name="friend_srl_list[]" value="{$val->friend_srl}" /></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="btnArea">
|
||||
<select name="target_friend_group_srl">
|
||||
<!--@foreach($friend_group_list as $key => $val)-->
|
||||
<option value="{$val->friend_group_srl}">{$val->title}</option>
|
||||
<!--@end-->
|
||||
<select name="target_friend_group_srl" style="margin:0">
|
||||
<option loop="$friend_group_list => $key,$val" value="{$val->friend_group_srl}">{$val->title}</option>
|
||||
</select>
|
||||
<button type="submit" name="act" value="procCommunicationMoveFriend">{$lang->cmd_move}</button>
|
||||
<button type="submit" name="act" value="procCommunicationDeleteFriend">{$lang->cmd_delete}</button>
|
||||
<span class="btn-group __submit_group">
|
||||
<button type="submit" name="act" class="btn" value="procCommunicationMoveFriend">{$lang->cmd_move}</button>
|
||||
<button type="submit" name="act" class="btn" value="procCommunicationDeleteFriend">{$lang->cmd_delete}</button>
|
||||
</span>
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<a href="{getUrl('page','','document_srl','')}" class="direction">‹ {$lang->first_page}</a>
|
||||
<!--@while($page_no = $page_navigation->getNextPage())-->
|
||||
<!--@if($page == $page_no)-->
|
||||
<strong>{$page_no}</strong>
|
||||
<!--@else-->
|
||||
<a href="{getUrl('page',$page_no,'document_srl','')}">{$page_no}</a>
|
||||
<div class="pagination pagination-centered">
|
||||
<ul>
|
||||
<li><a href="{getUrl('page','','document_srl','')}" class="direction">« {$lang->first_page}</a></li>
|
||||
<!--@while($page_no = $page_navigation->getNextPage())-->
|
||||
<li class="active"|cond="$page == $page_no"><a href="{getUrl('page',$page_no,'document_srl','')}">{$page_no}</a></li>
|
||||
<!--@end-->
|
||||
<!--@end-->
|
||||
<a href="{getUrl('page',$page_navigation->last_page,'document_srl','')}" class="direction">{$lang->last_page} ›</a>
|
||||
<li><a href="{getUrl('page',$page_navigation->last_page,'document_srl','')}" class="direction">{$lang->last_page} »</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</form>
|
||||
<form action="./" method="get" id="for_delete_group">
|
||||
<input type="hidden" name="friend_group_srl" value="" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/communication/skins/default/frineds/1" />
|
||||
</form>
|
||||
<include target="./common_footer.html" />
|
||||
|
|
|
|||
|
|
@ -88,5 +88,16 @@ function doMoveFriend() {
|
|||
/* 친구 그룹 선택 */
|
||||
function doJumpFriendGroup() {
|
||||
var sel_val = jQuery('#jumpMenu option:selected').val();
|
||||
location.href = current_url.setQuery('friend_group_srl', sel_val);
|
||||
location.href = current_url.setQuery('friend_group_srl', sel_val);
|
||||
}
|
||||
|
||||
jQuery(function($){
|
||||
$('.__submit_group button[type=submit]').click(function(e){
|
||||
var sel_val = $('input[name="friend_srl_list[]"]:checked').length;
|
||||
if(sel_val == 0)
|
||||
{
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -2,98 +2,92 @@
|
|||
<load target="filter/delete_checked_message.xml" />
|
||||
<load target="filter/update_allow_message.xml" />
|
||||
<div class="btnArea">
|
||||
<form action="./" method="GET" class="etc" onsubmit="location.href=current_url.setQuery('message_srl','').setQuery('message_type',this.message_box.options[this.message_box.selectedIndex].value); return false;">
|
||||
<select name="message_box">
|
||||
<form action="./" method="GET" style="margin:0;display:inline-block;*display:inline;zoom:1" onsubmit="location.href=current_url.setQuery('message_srl','').setQuery('message_type',this.message_box.options[this.message_box.selectedIndex].value); return false;">
|
||||
<select name="message_box" style="margin:0">
|
||||
<option loop="$lang->message_box => $key,$val" selected="selected"|cond="$key==$message_type" value="{$key}" >{$val}</option>
|
||||
</select>
|
||||
<input type="submit" value="{$lang->cmd_select}" />
|
||||
<input type="submit" value="{$lang->cmd_select}" class="btn" />
|
||||
</form>
|
||||
<form action="./" method="POST" class="setupMessage">
|
||||
<form action="./" method="POST" style="margin:0;display:inline-block;*display:inline;zoom:1">
|
||||
<input type="hidden" name="module" value="communication" />
|
||||
<input type="hidden" name="act" value="procCommunicationUpdateAllowMessage" />
|
||||
<input type="hidden" name="message_type" value="{$message_type}" />
|
||||
<select name="allow_message">
|
||||
<select name="allow_message" style="margin:0">
|
||||
<option loop="$lang->allow_message_type => $key,$val" value="{$key}" selected="selected"|cond="$logged_info->allow_message==$key">{$val}</option>
|
||||
</select>
|
||||
<input type="submit" value="{$lang->cmd_save}">
|
||||
<input type="submit" value="{$lang->cmd_save}" class="btn">
|
||||
</form>
|
||||
</div>
|
||||
<div class="table even" cond="$message">
|
||||
<table width="100%" border="1" cellspacing="0">
|
||||
<tr>
|
||||
<th class="title">{$message->title}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="popup_menu_area" class="member_{$message->member_srl}">{$message->nick_name}</a>
|
||||
{zdate($message->regdate, "Y.m.d H:i")}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text">
|
||||
<div class="xe_content">{$message->content}</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="btnArea">
|
||||
<button cond="$message->message_type != 'S' && $message->member_srl != $logged_info->member_srl" type="button" onclick="doSendMessage('{$message->sender_srl}','{$message->message_srl}');">{$lang->cmd_reply_message}</button>
|
||||
<button cond="$message->message_type == 'R'" type="button" onclick="doStoreMessage('{$message->message_srl}');">{$lang->cmd_store}</button>
|
||||
<button type="button" onclick="doDeleteMessage('{$message->message_srl}');">{$lang->cmd_delete}</button>
|
||||
</div>
|
||||
<table class="table table-striped table-hover" cond="$message">
|
||||
<tr>
|
||||
<th>{$message->title}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="popup_menu_area" class="member_{$message->member_srl}">{$message->nick_name}</a>
|
||||
{zdate($message->regdate, "Y.m.d H:i")}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="xe_content">
|
||||
{$message->content}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="btnArea btn-group" cond="$message" style="margin-bottom:20px">
|
||||
<button class="btn" cond="$message->message_type != 'S' && $message->member_srl != $logged_info->member_srl" type="button" onclick="doSendMessage('{$message->sender_srl}','{$message->message_srl}');">{$lang->cmd_reply_message}</button>
|
||||
<button class="btn" cond="$message->message_type == 'R'" type="button" onclick="doStoreMessage('{$message->message_srl}');">{$lang->cmd_store}</button>
|
||||
<button class="btn" type="button" onclick="doDeleteMessage('{$message->message_srl}');">{$lang->cmd_delete}</button>
|
||||
</div>
|
||||
|
||||
<form action="./" method="get" id="fo_message_list">
|
||||
<input type="hidden" name="module" value="communication" />
|
||||
<input type="hidden" name="act" value="procCommunicationDeleteMessages" />
|
||||
<input type="hidden" name="message_type" value="{$message_type}" />
|
||||
<div class="table even">
|
||||
<table width="100%" border="1" cellspacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="title">{$lang->title}</th>
|
||||
<th scope="col">
|
||||
<!--@if($message_type == "S")-->
|
||||
{$lang->receiver}
|
||||
<!--@else-->
|
||||
{$lang->sender}
|
||||
<!--@end-->
|
||||
</th>
|
||||
<th scope="col">{$lang->regdate}</th>
|
||||
<th scope="col">{$lang->readed_date}</th>
|
||||
<th scope="col"><input name="check_all" type="checkbox" onclick="XE.checkboxToggleAll('message_srl_list[]', { wrap:'fo_message_list' });" /></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr loop="$message_list => $no,$val">
|
||||
<td class="title">
|
||||
<a cond="$val->readed=='Y'" href="{getUrl('message_srl',$val->message_srl)}">{$val->title}</a>
|
||||
<a cond="$val->readed!='Y'" href="{getUrl('message_srl',$val->message_srl)}"><strong>{$val->title}</strong></a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="#popup_menu_area" class="member_{$val->member_srl}">{$val->nick_name}</a>
|
||||
</td>
|
||||
<td>
|
||||
{zdate($val->regdate,"Y-m-d")}
|
||||
</td>
|
||||
<td><block cond="$val->readed=='Y'">{zdate($val->readed_date,"Y-m-d H:i")}</block> </td>
|
||||
<td><input name="message_srl_list[]" type="checkbox" value="{$val->message_srl}" /></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="title">{$lang->title}</th>
|
||||
<th scope="col">
|
||||
<!--@if($message_type == "S")-->
|
||||
{$lang->receiver}
|
||||
<!--@else-->
|
||||
{$lang->sender}
|
||||
<!--@end-->
|
||||
</th>
|
||||
<th scope="col">{$lang->regdate}</th>
|
||||
<th scope="col">{$lang->readed_date}</th>
|
||||
<th scope="col"><input name="check_all" type="checkbox" onclick="XE.checkboxToggleAll('message_srl_list[]', {wrap:'fo_message_list'})"/></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr loop="$message_list => $no,$val">
|
||||
<td class="title">
|
||||
<a cond="$val->readed=='Y'" href="{getUrl('message_srl',$val->message_srl)}">{$val->title}</a>
|
||||
<a cond="$val->readed!='Y'" href="{getUrl('message_srl',$val->message_srl)}"><strong>{$val->title}</strong></a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="#popup_menu_area" class="member_{$val->member_srl}">{$val->nick_name}</a>
|
||||
</td>
|
||||
<td>
|
||||
{zdate($val->regdate,"Y-m-d")}
|
||||
</td>
|
||||
<td><block cond="$val->readed=='Y'">{zdate($val->readed_date,"Y-m-d H:i")}</block> </td>
|
||||
<td><input name="message_srl_list[]" type="checkbox" value="{$val->message_srl}" /></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="btnArea">
|
||||
<input type="submit" value="{$lang->cmd_delete}" />
|
||||
<input type="submit" class="btn" value="{$lang->cmd_delete}" />
|
||||
</div>
|
||||
</form>
|
||||
<div class="pagination">
|
||||
<a href="{getUrl('page','','document_srl','')}" class="direction">‹ {$lang->first_page}</a>
|
||||
<!--@while($page_no = $page_navigation->getNextPage())-->
|
||||
<!--@if($page == $page_no)-->
|
||||
<strong>{$page_no}</strong>
|
||||
<!--@else-->
|
||||
<a href="{getUrl('page',$page_no,'document_srl','')}">{$page_no}</a>
|
||||
<div class="pagination pagination-centered">
|
||||
<ul>
|
||||
<li><a href="{getUrl('page','','document_srl','')}" class="direction">« {$lang->first_page}</a></li>
|
||||
<!--@while($page_no = $page_navigation->getNextPage())-->
|
||||
<li class="active"|cond="$page == $page_no"><a href="{getUrl('page',$page_no,'document_srl','')}">{$page_no}</a></li>
|
||||
<!--@end-->
|
||||
<!--@end-->
|
||||
<a href="{getUrl('page',$page_navigation->last_page,'document_srl','')}" class="direction">{$lang->last_page} ›</a>
|
||||
<li><a href="{getUrl('page',$page_navigation->last_page,'document_srl','')}" class="direction">{$lang->last_page} »</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<include target="./common_footer.html" />
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
<load target="css/communication.css" />
|
||||
<load target="js/communication.js" />
|
||||
<!--@if($message)-->
|
||||
<h1 class="h1">{$lang->message_received}</h1>
|
||||
<div class="table">
|
||||
<table width="100%" border="1" cellspacing="0">
|
||||
<div class="xc" cond="$message">
|
||||
<h1>{$lang->message_received}</h1>
|
||||
<table class="table table-striped table-hover">
|
||||
<!--@if($message->member_srl != $logged_info->member_srl)-->
|
||||
<tr>
|
||||
<th scope="row">{$lang->sender}</th>
|
||||
|
|
@ -11,19 +11,17 @@
|
|||
<!--@end-->
|
||||
<tr>
|
||||
<th scope="row">{$lang->title}</th>
|
||||
<td class="title">{htmlspecialchars($message->title)}</td>
|
||||
<td>{htmlspecialchars($message->title)}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="xe_content">{$message->content}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</table>
|
||||
<div class="btnArea">
|
||||
<span class="btn-group">
|
||||
<button cond="$message->member_srl != $logged_info->member_srl" class="btn" type="button" onclick="doSendMessage('{$message->sender_srl}','{$message->message_srl}');return false;">{$lang->cmd_reply_message}</button>
|
||||
<button type="button" class="btn" onclick="doStoreMessage('{$message->message_srl}');return false;">{$lang->cmd_store}</button>
|
||||
<button type="button" class="btn" onclick="doDeleteMessage('{$message->message_srl}');return false;">{$lang->cmd_delete}</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnArea">
|
||||
<span class="etc"><button type="button" onclick="location.href=location.href;return false;">{$lang->cmd_next}</button></span>
|
||||
<!--@if($message->member_srl != $logged_info->member_srl)-->
|
||||
<button type="button" onclick="doSendMessage('{$message->sender_srl}','{$message->message_srl}');return false;">{$lang->cmd_reply_message}</button>
|
||||
<!--@end-->
|
||||
<button type="button" onclick="doStoreMessage('{$message->message_srl}');return false;">{$lang->cmd_store}</button>
|
||||
<button type="button" onclick="doDeleteMessage('{$message->message_srl}');return false;">{$lang->cmd_delete}</button>
|
||||
</div>
|
||||
<!--@end-->
|
||||
|
|
|
|||
|
|
@ -1,22 +1,24 @@
|
|||
<load target="css/communication.css" />
|
||||
<load target="js/communication.js" />
|
||||
<h1 class="h1">{$lang->cmd_send_message}</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form ruleset="sendMessage" action="./" method="post">
|
||||
<input type="hidden" name="module" value="communication" />
|
||||
<input type="hidden" name="act" value="procCommunicationSendMessage" />
|
||||
<input type="hidden" name="content" value="{htmlspecialchars($source_message->content)}" />
|
||||
<input type="hidden" name="receiver_srl" value="{$receiver_info->member_srl}" />
|
||||
<div class="table">
|
||||
<table width="100%" border="1" cellspacing="0" class="form">
|
||||
<div class="xc">
|
||||
<h1>{$lang->cmd_send_message}</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/communication/skins/default/send_message/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form ruleset="sendMessage" action="./" method="post">
|
||||
<input type="hidden" name="module" value="communication" />
|
||||
<input type="hidden" name="act" value="procCommunicationSendMessage" />
|
||||
<input type="hidden" name="content" value="{htmlspecialchars($source_message->content)}" />
|
||||
<input type="hidden" name="receiver_srl" value="{$receiver_info->member_srl}" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/communication/skins/default/send_message/1" />
|
||||
<table class="table table-striped table-hover">
|
||||
<tr>
|
||||
<th scope="row"><label for="textfield1">{$lang->receiver}</label></th>
|
||||
<td>{$receiver_info->nick_name}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->title}</th>
|
||||
<td><input type="text" name="title" id="message_title" value="{$source_message->title}"/></td>
|
||||
<td><input type="text" name="title" id="message_title" value="{$source_message->title}" style="width:90%" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->cmd_option}</th>
|
||||
|
|
@ -24,8 +26,8 @@
|
|||
</tr>
|
||||
</table>
|
||||
{$editor}
|
||||
</div>
|
||||
<div class="btnArea">
|
||||
<span class="btn"><input type="submit" value="{$lang->cmd_send_message}" /></span>
|
||||
</div>
|
||||
</form>
|
||||
<div class="btnArea">
|
||||
<input type="submit" value="{$lang->cmd_send_message}" class="btn btn-inverse" />
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -50,73 +50,4 @@
|
|||
<name xml:lang="zh-TW">NHN</name>
|
||||
<name xml:lang="tr">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>
|
||||
<title xml:lang="tr">varsayılan</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>
|
||||
<title xml:lang="tr">Deniz Mavisi</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>
|
||||
<title xml:lang="tr">Yeşil</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>
|
||||
<title xml:lang="tr">Kırmızı</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>
|
||||
<title xml:lang="tr">Mor</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>
|
||||
<title xml:lang="tr">Siyah</title>
|
||||
</color>
|
||||
</colorset>
|
||||
</skin>
|
||||
|
|
|
|||
|
|
@ -1,15 +1,7 @@
|
|||
<!--@foreach($skin_info->colorset as $key => $val)-->
|
||||
<!--@if($val->screenshot)-->
|
||||
{@ $_img_info = getImageSize($val->screenshot); $_height = $_img_info[1]+40; $_width = $_img_info[0]+20; $_talign = "center"; }
|
||||
<!--@else-->
|
||||
{@ $_width = 200; $_height = 20; $_talign = "left"; }
|
||||
<!--@end-->
|
||||
<div style="float:left;text-align:{$_talign};margin-bottom:1em;width:{$_width}px;height:{$_height}px;margin-right:10px;">
|
||||
<input type="radio" name="colorset" value="{$val->name}" id="colorset_{$key}" <!--@if($communication_config->colorset==$val->name)-->checked="checked"<!--@end-->/>
|
||||
<label for="colorset_{$key}">{$val->title}</label>
|
||||
<!--@if($val->screenshot)-->
|
||||
<br />
|
||||
<img src="{$val->screenshot}" alt="{$val->title}" style="border:1px solid #888888;padding:2px;margin:2px;"/>
|
||||
<!--@end-->
|
||||
<div loop="$skin_info->colorset => $key, $val" style="padding:3px 0 0 0;display:inline-block;*display:inline;zoom:1;min-width:220px;vertical-align:top">
|
||||
<label cond="$type == 'P'" for="colorset_{$key}"><input type="radio" name="colorset" value="{$val->name}" id="colorset_{$key}" checked="checked"|cond="$communication_config->colorset==$val->name" /> {$val->title}</label>
|
||||
<label cond="$type == 'M'" for="mcolorset_{$key}"><input type="radio" name="mcolorset" value="{$val->name}" id="mcolorset_{$key}" checked="checked"|cond="$communication_config->mcolorset==$val->name" /> {$val->title}</label>
|
||||
<div class="x_thumbnail" cond="$val->screenshot" style="display:inline-block;*display:inline;zoom:1;min-width:200px">
|
||||
<img src="{$val->screenshot}" alt="{$val->title}" style="min-width:200px" />
|
||||
</div>
|
||||
</div>
|
||||
<!--@end-->
|
||||
|
|
|
|||
|
|
@ -1,76 +1,93 @@
|
|||
<load target="js/communication_admin.js" usecdn="true" />
|
||||
<load target="../../editor/tpl/js/editor_module_config.js" usecdn="true" />
|
||||
<h1 class="h1">{$lang->communication} <em>{$lang->cmd_management}</em></h1>
|
||||
<p>{nl2br($lang->about_communication)}</p>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
|
||||
<div class="x_page-header">
|
||||
<h1>
|
||||
{$lang->communication} {$lang->cmd_management}
|
||||
<a href="#aboutCommunication" class="x_pull-right x_icon-question-sign" data-toggle style="margin-top:13px">{$lang->help}</a>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<p class="x_alert x_alert-info" id="aboutCommunication" hidden>{nl2br($lang->about_communication)}</p>
|
||||
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/communication/tpl/index/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form ruleset="insertConfig" action="./" method="post" class="form">
|
||||
|
||||
<form ruleset="insertConfig" action="./" method="post" class="x_form-horizontal">
|
||||
<input type="hidden" name="module" value="communication" />
|
||||
<input type="hidden" name="act" value="procCommunicationAdminInsertConfig">
|
||||
<div class="table">
|
||||
<table width="100%" border="1" cellspacing="0">
|
||||
<tr>
|
||||
<th scope="row">{$lang->editor_skin}</th>
|
||||
<td>
|
||||
<select name="editor_skin" onchange="getEditorSkinColorList(this.value)">
|
||||
<!--@foreach($editor_skin_list as $editor_skin)-->
|
||||
<option value="{$editor_skin}" <!--@if($editor_skin==$communication_config->editor_skin)-->selected="selected"<!--@end-->>{$editor_skin}</option>
|
||||
<!--@end-->
|
||||
</select>
|
||||
<select name="editor_colorset" id="sel_editor_colorset" style="display:none">
|
||||
</select>
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
getEditorSkinColorList('{$communication_config->editor_skin}','{$communication_config->editor_colorset}');
|
||||
//]]></script>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->layout}</th>
|
||||
<td>
|
||||
<select id="layout" name="layout_srl">
|
||||
<option value="0">{$lang->notuse}</option>
|
||||
<option loop="$layout_list => $key,$val" value="{$val->layout_srl}" selected="selected"|cond="$val->layout_srl == $communication_config->layout_srl">{$val->title} ({$val->layout})</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->skin}</th>
|
||||
<td>
|
||||
<select name="skin" onchange="doGetSkinColorset(this.options[this.selectedIndex].value);return false;">
|
||||
<!--@foreach($communication_skin_list as $key=>$val)-->
|
||||
<option value="{$key}" <!--@if($key==$communication_config->skin)-->selected="selected"<!--@end-->>{$val->title}</option>
|
||||
<!--@end-->
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->colorset}</th>
|
||||
<td><div id="communication_colorset"></div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{$lang->mobile_layout}</th>
|
||||
<td>
|
||||
<select id="layout" name="mlayout_srl">
|
||||
<option value="0">{$lang->notuse}</option>
|
||||
<option loop="$mlayout_list => $key,$val" value="{$val->layout_srl}" selected="selected"|cond="$val->layout_srl == $communication_config->mlayout_srl">{$val->title} ({$val->layout})</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->mobile_skin}</th>
|
||||
<td>
|
||||
<select name="mskin">
|
||||
<option loop="$communication_mobile_skin_list => $key,$val" value="{$key}" selected="selected"|cond="$key==$communication_config->mskin" >{$val->title}</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<input type="hidden" name="xe_validator_id" value="modules/communication/tpl/index/1" />
|
||||
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="editor_skin">{$lang->editor_skin}</label>
|
||||
<div class="x_controls">
|
||||
<select name="editor_skin" id="editor_skin" onchange="getEditorSkinColorList(this.value)">
|
||||
<option loop="$editor_skin_list => $editor_skin" value="{$editor_skin}" selected="selected"|cond="$editor_skin==$communication_config->editor_skin">{$editor_skin}</option>
|
||||
</select>
|
||||
<select name="sel_editor_colorset" style="display:none">
|
||||
</select>
|
||||
<script>
|
||||
//<![CDATA[
|
||||
getEditorSkinColorList('{$communication_config->editor_skin}','{$communication_config->editor_colorset}');
|
||||
//]]>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="layout">{$lang->layout}</label>
|
||||
<div class="x_controls">
|
||||
<select id="layout" name="layout_srl" style="width:auto">
|
||||
<option value="0">{$lang->notuse}</option>
|
||||
<option loop="$layout_list => $key,$val" value="{$val->layout_srl}" selected="selected"|cond="$val->layout_srl == $communication_config->layout_srl">{$val->title} ({$val->layout})</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="skin">{$lang->skin}</label>
|
||||
<div class="x_controls">
|
||||
<select name="skin" id="skin" style="width:auto" onchange="doGetSkinColorset(this.options[this.selectedIndex].value, 'P')">
|
||||
<option loop="$communication_skin_list => $key, $val" value="{$key}" selected="selected"|cond="$key==$communication_config->skin">{$val->title}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group" id="__skin_colorset">
|
||||
<label class="x_control-label">{$lang->colorset}</label>
|
||||
<div class="x_controls">
|
||||
<div id="communication_colorset"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="mlayout_srl">{$lang->mobile_layout}</label>
|
||||
<div class="x_controls">
|
||||
<select id="mlayout_srl" name="mlayout_srl" style="width:auto">
|
||||
<option value="0">{$lang->notuse}</option>
|
||||
<option loop="$mlayout_list => $key,$val" value="{$val->layout_srl}" selected="selected"|cond="$val->layout_srl == $communication_config->mlayout_srl">{$val->title} ({$val->layout})</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="mskin">{$lang->mobile_skin}</label>
|
||||
<div class="x_controls">
|
||||
<select name="mskin" id="mskin" style="width:auto" onchange="doGetSkinColorset(this.options[this.selectedIndex].value, 'M')">
|
||||
<option loop="$communication_mobile_skin_list => $key,$val" value="{$key}" selected="selected"|cond="$key==$communication_config->mskin" >{$val->title}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group" id="__mskin_colorset">
|
||||
<label class="x_control-label">{$lang->colorset}</label>
|
||||
<div class="x_controls">
|
||||
<div id="communication_mcolorset"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="btnArea">
|
||||
<span class="btn"><input type="submit" value="{$lang->cmd_registration}" /></span>
|
||||
<button class="x_btn x_btn-primary" type="submit">{$lang->cmd_registration}</button>
|
||||
</div>
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
jQuery(function() { doGetSkinColorset("{$communication_config->skin}"); });
|
||||
<script>
|
||||
jQuery(function() {
|
||||
doGetSkinColorset("{$communication_config->skin}", 'P');
|
||||
doGetSkinColorset("{$communication_config->mskin}", 'M');
|
||||
});
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -1,14 +1,32 @@
|
|||
/* 스킨 컬러셋 구해옴 */
|
||||
function doGetSkinColorset(skin) {
|
||||
function doGetSkinColorset(skin, type) {
|
||||
var params = new Array();
|
||||
params['skin'] = skin;
|
||||
params['type'] = type;
|
||||
|
||||
var response_tags = new Array('error','message','tpl');
|
||||
var response_tags = new Array('error','message','tpl', 'type');
|
||||
exec_xml('communication', 'getCommunicationAdminColorset', params, doDisplaySkinColorset, response_tags);
|
||||
}
|
||||
|
||||
function doDisplaySkinColorset(ret_obj) {
|
||||
var tpl = ret_obj["tpl"];
|
||||
jQuery('#communication_colorset').html(tpl);
|
||||
var type = ret_obj['type'];
|
||||
var $controls = null;
|
||||
var $control_group = null;
|
||||
|
||||
if(type == 'P'){
|
||||
$controls = jQuery('#communication_colorset');
|
||||
$control_group = jQuery('#__skin_colorset');
|
||||
}else{
|
||||
$controls = jQuery('#communication_mcolorset');
|
||||
$control_group = jQuery('#__mskin_colorset');
|
||||
}
|
||||
|
||||
$controls.html(tpl);
|
||||
if(tpl){
|
||||
$control_group.show();
|
||||
}else{
|
||||
$control_group.hide();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue