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:
ngleader 2013-09-29 23:32:39 +00:00
parent cc47d2b247
commit 2d3f149b5a
2042 changed files with 129266 additions and 126243 deletions

View file

@ -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 */

View file

@ -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 */

View file

@ -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 */

View file

@ -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

View file

@ -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 */

View file

@ -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 */

View file

@ -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 */

View file

@ -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>

View file

@ -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>

View file

@ -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[회원 간의 쪽지나 친구 관리 등 커뮤니케이션 기능을 수행합니다. 이 기능을 사용하려면 [설치된 애드온] &gt; [커뮤니케이션] 애드온을 활성화 하세요.]]></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>

View file

@ -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}

View 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>

View 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();
}

View 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>

View file

@ -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>

View file

@ -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>

View 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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -1 +1 @@
</div>
</section>

View file

@ -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>

View file

@ -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}

View file

@ -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:"&nbsp;"}</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:"&nbsp;"}</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">&lsaquo; {$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">&laquo; {$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} &rsaquo;</a>
<li><a href="{getUrl('page',$page_navigation->last_page,'document_srl','')}" class="direction">{$lang->last_page} &raquo;</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" />

View file

@ -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;
}
});
});

View file

@ -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>&nbsp;</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>&nbsp;</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">&lsaquo; {$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">&laquo; {$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} &rsaquo;</a>
<li><a href="{getUrl('page',$page_navigation->last_page,'document_srl','')}" class="direction">{$lang->last_page} &raquo;</a></li>
</ul>
</div>
<include target="./common_footer.html" />

View file

@ -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-->

View file

@ -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>

View file

@ -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>

View file

@ -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-->

View file

@ -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>

View file

@ -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();
}
}