member모듈에서 쪽지/친구등의 커뮤니케이션 기능을 communication 모듈로 분리. member_extra_info 애드온에서 쪽지/친구와 관련된 기능을 member_communication 애드온으로 분리

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@4226 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2008-05-30 09:33:04 +00:00
parent f7968229e6
commit 08cee6952c
135 changed files with 1980 additions and 1293 deletions

View file

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<addon version="0.1">
<title xml:lang="ko">사용자 추가 정보 및 커뮤니케이션 기능 활성화</title>
<title xml:lang="jp">会員情報・コミュニティアドオン</title>
<title xml:lang="zh-CN">用户扩展信息</title>
<title xml:lang="en">Activation of Member's Additional Information and Communication Function.</title>
<title xml:lang="ge">Die Aktivierung der Mitglied's weitere Informations-und Kommunikations-Funktion.</title>
<title xml:lang="es">Addon para activar la función de la Información addcional del usuario y de la comunicación.</title>
<title xml:lang="ru">Аддон для предоставления дополнительной информации о пользователях и коммуникации</title>
<addon version="0.2">
<title xml:lang="ko">회원 확장 정보 출력</title>
<title xml:lang="jp">회원 확장 정보 출력</title>
<title xml:lang="zh-CN">회원 확장 정보 출력</title>
<title xml:lang="en">회원 확장 정보 출력</title>
<title xml:lang="ge">회원 확장 정보 출력</title>
<title xml:lang="es">회원 확장 정보 출력</title>
<title xml:lang="ru">회원 확장 정보 출력</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<name xml:lang="ko">제로</name>
<name xml:lang="jp">Zero</name>
@ -16,74 +16,32 @@
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<description xml:lang="ko">
사용자의 정보중 이미지이름, 이미지마크, 서명등을 화면에 출력해주는 애드온입니다.
이런 정보들을 사용하지 않을 경우를 대비하여 별도의 애드온으로 빼어서 실행시간을 줄여줍니다.
회원이 등록한 이미지이름, 이미지마크, 서명등을 화면에 출력하는 애드온입니다.
이미지이름, 이미지마크, 서명등을 노출하고 싶다면 이 애드온을 활성화 시키세요.
1. 출력되기 직전 &amp;lt;div class="member_회원번호"&amp;gt;....&amp;lt;/div&amp;gt; 로 정의가 된 부분을 찾아 회원번호를 구해서 이미지이름, 이미지마크가 있는지를 확인하여 있으면 내용을 변경해버립니다.
2. 출력되기 직전 &amp;lt;div class="document_번호"&amp;gt;...&amp;lt;/div&amp;gt;로 정의된 곳을 찾아 글의 내용이라 판단, 하단에 서명을 추가합니다.
3. 새로운 쪽지가 왔을 경우 팝업으로 띄움
4. MemberModel::getMemberMenu 호출시 대상이 회원일 경우 쪽지 보내기 기능 추가합니다.
5. MemberModel::getMemberMenu 호출시 친구 등록 메뉴를 추가합니다.
</description>
<description xml:lang="jp">
会員情報のイメージ名、イメージマーク、署名などを画面に表示するアドオンです。
このような情報を使用しない場合、アドオンを「使用」に設定すれば、実行時間を少なくします。
イメージ名、イメージマーク、署名などを表示させたい時は、このアドオンを「使用」に設定して下さい。
1. 出力の直前 &lt;div class="member_会員番号"&gt;....&lt;/div&gt; に定義された部分を探し、会員番号をチェックしてイメージ名、イメージマークがあるかを確認します。あった場合は内容を変更します。
2. 出力の直前 &lt;div class="document_番号"&gt;...&lt;/div&gt;に定義された部分を探し、書込みの内容だと判断して、下段に署名を追加します。
3. 新しいメッセージが来た場合ポップアップで表示します。
4. MemberModel::getMemberMenu を呼出す時、相手が会員の場合はメッセージ送信の機能を追加します。
5. MemberModel::getMemberMenu を呼出す時、友達登録メニュを追加します。
회원이 등록한 이미지이름, 이미지마크, 서명등을 화면에 출력하는 애드온입니다.
이미지이름, 이미지마크, 서명등을 노출하고 싶다면 이 애드온을 활성화 시키세요.
</description>
<description xml:lang="zh-CN">
此插件将把用户信息中的昵称图片,用户图标,签名等信息显示到页面当中。
因部分用户不使用此项功能或为了考虑页面载入速度,以插件形式提供此项功能。
要想使用会员扩展信息请激活此插件。
1. 显示之前先查找定义为 &amp;lt;div class="member_会员编号"&amp;gt;....&amp;lt;/div&amp;gt; 的部分获得会员编号后,再以会员编号确认有没有昵称图片/用户图标,有的话即可更新相关内容。
2. 显示之前先查找定义为 &amp;lt;div class="document_编号"&amp;gt;...&amp;lt;/div&amp;gt;的部分判断此处为主题内容后,在此处下方添加个人签名。
3. 收到新消息时,用弹出窗口显示。
4. 呼出MemberModel::getMemberMenu时如对方是会员就添加[发送短消息]功能。
5. 呼出MemberModel::getMemberMenu时添加[加为好友]菜单。
회원이 등록한 이미지이름, 이미지마크, 서명등을 화면에 출력하는 애드온입니다.
이미지이름, 이미지마크, 서명등을 노출하고 싶다면 이 애드온을 활성화 시키세요.
</description>
<description xml:lang="en">
Among other information about users, this addon displays image name, image mark, and signature.
This addon is normally turned off to reduce loading time.
To display image name, image mark, and the signature, please turn on this addon.
1. Right before displaying, this addon will seek for the unique key of the member from &amp;lt;div class="member_{unique key of member}"&amp;gt;....&amp;lt;/div&amp;gt; and will replace the content with the image name and/or image mark if they exist.
2. Right before displaying, this addon will search for &amp;lt;div class="document_{unique key of document}"&amp;gt;...&amp;lt;/div&amp;gt; and will display the signature in the bottom of the article.
3. When a new msessage is arrived, this will display the message in the popup window.
4. This makes available to send a message if the target is a member when MemberModel::getMemberMenu is called.
5. This adds a menu for registering as a friend when MemberModel::getMemberMenu is called.
회원이 등록한 이미지이름, 이미지마크, 서명등을 화면에 출력하는 애드온입니다.
이미지이름, 이미지마크, 서명등을 노출하고 싶다면 이 애드온을 활성화 시키세요.
</description>
<description xml:lang="ge">
Unter anderem Informationen über Benutzer, dieses Addon zeigt Bild Name, Bild-Marke, und Unterschrift.
Dieses Addon ist normalerweise ausgeschaltet zu verringern Ladezeit.
So zeigen Sie Image-Namen-, Bild-Marke, und die Unterschrift, wenden Sie sich bitte in diesem Addon.
1. Recht vor Anzeigen, dieses Addon wird sich für den eindeutigen Schlüssel des Mitglieds aus &lt; div class = "member_ (eindeutigen Schlüssel zu den Mitgliedern)" &gt; ....&lt; / div &gt; und ersetzen wird der Inhalt mit den Image-Namen und / oder Bild-Marke, wenn sie vorhanden sind.
2. Recht vor Anzeigen, dieses Addon wird nach &lt; div class = "document_ (eindeutigen Schlüssel des Dokuments)" ... &gt; &lt; / div &gt; und die Anzeige der Signatur in der unteren der Artikel.
3. Wenn eine neue msessage ist angekommen, dieser wird die Nachricht in einem Popup-Fenster.
4. Dies stellt eine Nachricht zu senden, wenn das Ziel ist Mitglied bei MemberModel:: getMemberMenu aufgerufen.
5. Dadurch wird ein Menü für die Eintragung als Freund, wenn MemberModel:: getMemberMenu aufgerufen.
회원이 등록한 이미지이름, 이미지마크, 서명등을 화면에 출력하는 애드온입니다.
이미지이름, 이미지마크, 서명등을 노출하고 싶다면 이 애드온을 활성화 시키세요.
</description>
<description xml:lang="es">
Addon que permite mostrar en la pantalla las informaciones del usuario, la imagen del nombre, Imagen de marca y la firma .
En caso de no usar estas informaciones, esta forma de usar separadamente en addon permite reducir el tiempo de ejecución.
Deberá activar este addon si desea mostrar informaciones adicionales.
1. Justo antes de mostrar la información del usuario, este addon buscará la definición "&lt;div class="member_Número del usuario"&gt;....&lt;/div&gt;", si la encuentra, reemplazará la imagen del nombre y/o la imagen de marca.
2. Justo antes de mostrar, este addon va a localizar la definición "&lt;div class="document_Número de documento"&gt;...&lt;/div&gt; e insertará la firma en la parte final del documento.
3. Si ha llegado un nuevo mensaje, aprarecerá una ventana popup.
4. Se activa la función "Enviar Mensajes" si la persona que envió la nota es usuario al comprobar en MemberModel::getMemberMenu.
5. Agrega el menú "Ägregar Amigo" al llamar MemberModel::getMemberMenu.
회원이 등록한 이미지이름, 이미지마크, 서명등을 화면에 출력하는 애드온입니다.
이미지이름, 이미지마크, 서명등을 노출하고 싶다면 이 애드온을 활성화 시키세요.
</description>
<description xml:lang="ru">
Среди другой информации о пользователях, этот аддон показывает имя изображения, марку изображения и подпись.
В случае, если Вы не используете эту информацию, это стоит в стороне от базовой информации, так что время выполнения будет снижено.
Чтобы отображать имя изображения, марку изображения и подпись, пожалуйста, включите этот аддон.
1. Прямо перед отображением информации пользователя, это создаст уникальный ключ члена из определения "&amp;lt;div class="член_{уникальный ключ члена}"&amp;gt;....&amp;lt;/div&amp;gt;" и заменит имя изображения и/или марку изображения, если они существуют.
2. Прямо перед отображением, это должно найти определение "&amp;lt;div class="документ_{уникальный ключ документа}"&amp;gt;...&amp;lt;/div&amp;gt;" и вставить подпись внизу.
3. Когда будет получено новое сообщение, оно всплывет.
4. Это позволяет отправить сообщение, если назначение является членом, когда MemberModel::getMemberMenu вызывается.
5. Это добавляет меню для регистрации как друга, когда MemberModel::getMemberMenu вызывается.
회원이 등록한 이미지이름, 이미지마크, 서명등을 화면에 출력하는 애드온입니다.
이미지이름, 이미지마크, 서명등을 노출하고 싶다면 이 애드온을 활성화 시키세요.
</description>
</author>
</addon>

View file

@ -1,3 +0,0 @@
<?php
$lang->alert_new_message_arrived = 'You have a new message. Do you want to check now?';
?>

View file

@ -1,3 +0,0 @@
<?php
$lang->alert_new_message_arrived = 'Usted tiene un nuevo mensaje. Quiere comprobar ahora?';
?>

View file

@ -1,3 +0,0 @@
<?php
$lang->alert_new_message_arrived = 'Sie haben eine neue Nachricht. Wollen Sie jetzt prüfen, ob?';
?>

View file

@ -1,3 +0,0 @@
<?php
$lang->alert_new_message_arrived = '新しいメッセージが届きました。確認しますか。';
?>

View file

@ -1,3 +0,0 @@
<?php
$lang->alert_new_message_arrived = '새로운 메세지가 도착하였습니다. 확인하시겠습니까?';
?>

View file

@ -1,9 +0,0 @@
<?php
/**
* @file ru.lang.php
* @author zero <zero@nzeo.com> | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
* @brief Russian basic language pack for Zeroboard XE
**/
$lang->alert_new_message_arrived = 'У Вас есть новые сообщения. Хотите проверить сейчас?';
?>

View file

@ -1,3 +0,0 @@
<?php
$lang->alert_new_message_arrived = '您有新消息。要确认吗?';
?>

View file

@ -4,22 +4,14 @@
/**
* @file image_name.addon.php
* @author zero (zero@nzeo.com)
* @brief 사용자의 이미지이름/ 이미지마크나 커뮤니케이션 기능을 추가시킴
*
* 1. 출력되기 직전 <div class="member_회원번호">....</div> 정의가 부분을 찾아 회원번호를 구해서
* 이미지이름, 이미지마크가 있는지를 확인하여 있으면 내용을 변경해버립니다.
*
* 3. 새로운 쪽지가 왔을 경우 팝업으로 띄움
*
* 4. MemberModel::getMemberMenu 호출시 대상이 회원일 경우 쪽지 보내기 기능 추가합니다.
*
* 5. MemberModel::getMemberMenu 호출시 친구 등록 메뉴를 추가합니다.
* @brief 사용자의 이미지이름/ 이미지마크등을 출력
*
* <div class="member_회원번호">....</div> 정의가 부분을 찾아 회원번호를 구해서
* 이미지이름, 이미지마크가 있는지를 확인하여 있으면 내용을 변경해버립니다.
**/
/**
* 1,2 기능 수행 : 출력되기 바로 직전일 경우에 이미지이름/이미지마크등을 변경
* 조건 : called_position == 'before_display_content'
* 출력되기 바로 직전일 경우에 이미지이름/이미지마크등을 변경
**/
if($called_position == "before_display_content") {
@ -29,88 +21,5 @@
// 1. 출력문서중에서 <div class="member_번호">content</div>를 찾아 MemberController::transImageName() 를 이용하여 이미지이름/마크로 변경
$output = preg_replace_callback('!<(div|span)([^\>]*)member_([0-9]+)([^\>]*)>(.*?)\<\/(div|span)\>!is', 'memberTransImageName', $output);
/**
* 3 기능 수행 : 시작할때 새쪽지가 왔는지 검사
* 조건 : called_position = 'before_module_init', module != 'member'
**/
} elseif($called_position == 'before_module_init' && $this->module != 'member' && Context::get('is_logged') ) {
// 로그인된 사용자 정보를 구함
$logged_info = Context::get('logged_info');
// 회원 로그인 정보중에서 쪽지등의 메뉴를 추가
$logged_info->menu_list['dispMemberFriend'] = 'cmd_view_friend';
$logged_info->menu_list['dispMemberMessages'] = 'cmd_view_message_box';
Context::set('logged_info', $logged_info);
$_SESSION['logged_info'] = $logged_info;
$flag_path = './files/member_extra_info/new_message_flags/'.getNumberingPath($logged_info->member_srl);
$flag_file = sprintf('%s%s', $flag_path, $logged_info->member_srl);
// 새로운 쪽지에 대한 플래그가 있으면 쪽지 보기 팝업 띄움
if(file_exists($flag_file)) {
@unlink($flag_file);
Context::loadLang('./addons/member_extra_info/lang');
$script = sprintf('<script type="text/javascript"> xAddEventListener(window,"load", function() {if(confirm("%s")) { popopen("%s"); }}); </script>', Context::getLang('alert_new_message_arrived'), Context::getRequestUri().'?module=member&act=dispMemberNewMessage');
Context::addHtmlHeader( $script );
}
/**
* 4,5 기능 수행 : 사용자 이름을 클릭시 요청되는 MemberModel::getMemberMenu 후에 $menu_list에 쪽지 발송, 친구추가등의 링크 추가
* 조건 : called_position == 'after_module_proc', module = 'member', act = 'getMemberMenu'
**/
} elseif($called_position == 'after_module_proc' && $this->module == 'member' && $this->act == 'getMemberMenu') {
// 비로그인 사용자라면 패스
if(!Context::get('is_logged')) return;
// 로그인된 사용자 정보를 구함
$logged_info = Context::get('logged_info');
$member_srl = Context::get('target_srl');
// 템플릿에서 사용되기 전의 menu_list를 가져옴
$menu_list = $this->get('menu_list');
// 자신이라면 쪽지함 보기 기능 추가
if($logged_info->member_srl == $member_srl) {
// 4. 자신의 쪽지함 보기 기능 추가
$menu_str = Context::getLang('cmd_view_message_box');
$menu_link = "current_url.setQuery('act','dispMemberMessages').setQuery('message_type','')";
$menu_list .= sprintf("\n%s,%s,move_url(%s,'Y')", Context::getRequestUri().'/modules/member/tpl/images/icon_message_box.gif', $menu_str, $menu_link);
// 5. 친구 목록 보기
$menu_str = Context::getLang('cmd_view_friend');
$menu_link = "current_url.setQuery('act','dispMemberFriend')";
$menu_list .= sprintf("\n%s,%s,move_url(%s,'Y')", Context::getRequestUri().'/modules/member/tpl/images/icon_friend_box.gif',$menu_str, $menu_link);
// 아니라면 쪽지 발송, 친구 등록 추가
} else {
// 대상 회원의 정보를 가져옴
$target_member_info = $this->getMemberInfoByMemberSrl($member_srl);
if(!$target_member_info->member_srl) return;
// 로그인된 사용자 정보를 구함
$logged_info = Context::get('logged_info');
// 4. 쪽지 발송 메뉴를 만듬
if( $logged_info->is_admin == 'Y' || $target_member_info->allow_message =='Y' || ($target_member_info->allow_message == 'F' && $this->isFriend($member_srl))) {
$menu_str = Context::getLang('cmd_send_message');
$menu_link = sprintf('%s?module=member&amp;act=dispMemberSendMessage&amp;receiver_srl=%s',Context::getRequestUri(),$member_srl);
$menu_list .= sprintf("\n%s,%s,popopen('%s','sendMessage')", Context::getRequestUri().'/modules/member/tpl/images/icon_write_message.gif', $menu_str, $menu_link);
}
// 5. 친구 등록 메뉴를 만듬 (이미 등록된 친구가 아닐 경우)
if(!$this->isAddedFriend($member_srl)) {
$menu_str = Context::getLang('cmd_add_friend');
$menu_link = sprintf('%s?module=member&amp;act=dispMemberAddFriend&amp;target_srl=%s',Context::getRequestUri(),$member_srl);
$menu_list .= sprintf("\n%s,%s,popopen('%s','addFriend')", Context::getRequestUri().'/modules/member/tpl/images/icon_add_friend.gif', $menu_str, $menu_link);
}
}
// 템플릿에 적용되게 하기 위해 module의 variables에 재등록
$this->add('menu_list', $menu_list);
}
?>

View file

@ -121,8 +121,8 @@
$sender_member_srl = $logged_info->member_srl;
// 쪽지 발송
$oMemberController = &getController('member');
$oMemberController->sendMessage($sender_member_srl, $receiver_srl, $title, $content, false);
$oCommunicationController = &getController('communication');
$oCommunicationController->sendMessage($sender_member_srl, $receiver_srl, $title, $content, false);
}
function isExistsHomepage() {

View file

@ -0,0 +1,35 @@
<?php
/**
* @class communicationAdminController
* @author zero (zero@nzeo.com)
* @brief communication module의 admin controller class
**/
class communicationAdminController extends communication {
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief communication 모듈 설정 저장
**/
function procCommunicationAdminInsertConfig() {
// 기본 정보를 받음
$args = Context::gets('skin','colorset','editor_skin');
if(!$args->skin) $args->skin = "default";
if(!$args->colorset) $args->colorset = "white";
if(!$args->editor_skin) $args->editor_skin = "default";
// module Controller 객체 생성하여 입력
$oModuleController = &getController('module');
$output = $oModuleController->insertModuleConfig('communication',$args);
return $output;
}
}
?>

View file

@ -0,0 +1,40 @@
<?php
/**
* @class communicationAdminModel
* @author zero (zero@nzeo.com)
* @brief communication module의 admin model class
**/
class communicationAdminModel extends communication {
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief 지정된 스킨의 컬러셋 선택을 위한 html을 return
**/
function getCommunicationAdminColorset() {
$skin = Context::get('skin');
if(!$skin) $tpl = "";
else {
$oModuleModel = &getModel('module');
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $skin);
Context::set('skin_info', $skin_info);
$oModuleModel = &getModel('module');
$communication_config = $oModuleModel->getModuleConfig('communication');
if(!$communication_config->colorset) $communication_config->colorset = "white";
Context::set('communication_config', $communication_config);
$oTemplate = &TemplateHandler::getInstance();
$tpl = $oTemplate->compile($this->module_path.'tpl', 'colorset_list');
}
$this->add('tpl', $tpl);
}
}
?>

View file

@ -0,0 +1,40 @@
<?php
/**
* @class communicationAdminView
* @author zero (zero@nzeo.com)
* @brief communication module의 admin view class
**/
class communicationAdminView extends communication {
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief 쪽지 친구등의 관리를 위한 설정
**/
function dispCommunicationAdminConfig() {
// 객체 생성
$oEditorModel = &getModel('editor');
$oModuleModel = &getModel('module');
$oCommunicationModel = &getModel('communication');
// communication 모듈의 모듈설정 읽음
Context::set('communication_config', $oCommunicationModel->getConfig() );
// 에디터 스킨 목록을 구함
Context::set('editor_skin_list', $oEditorModel->getEditorSkinList() );
// 커뮤니케이션 스킨 목록을 구함
Context::set('communication_skin_list', $oModuleModel->getSkins($this->module_path) );
// template 지정
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('index');
}
}
?>

View file

@ -0,0 +1,71 @@
<?php
/**
* @class communication
* @author zero (zero@nzeo.com)
* @brief communication module의 high class
**/
class communication extends ModuleObject {
/**
* @brief 설치시 추가 작업이 필요할시 구현
**/
function moduleInstall() {
// 새쪽지 알림을 위한 임시 파일 저장소 생성
FileHandler::makeDir('./files/member_extra_info/new_message_flags');
// action forward에 등록 (관리자 모드에서 사용하기 위함)
$oModuleController = &getController('module');
$oModuleController->insertActionForward('communication', 'view', 'dispCommunicationAdminConfig');
$oModuleController->insertActionForward('communication', 'view', 'dispCommunicationMessages');
$oModuleController->insertActionForward('communication', 'view', 'dispCommunicationFriend');
return new Object();
}
/**
* @brief 설치가 이상이 없는지 체크하는 method
**/
function checkUpdate() {
if(!is_dir("./files/member_extra_info/new_message_flags")) return true;
$oModuleModel = &getModel('module');
if(!$oModuleModel->getActionForward('dispCommunicationAdminConfig')) return true;
if(!$oModuleModel->getActionForward('dispCommunicationMessages')) return true;
if(!$oModuleModel->getActionForward('dispCommunicationFriend')) return true;
return false;
}
/**
* @brief 업데이트 실행
**/
function moduleUpdate() {
if(!is_dir("./files/member_extra_info/new_message_flags"))
FileHandler::makeDir('./files/member_extra_info/new_message_flags');
$oModuleModel = &getModel('module');
$oModuleController = &getController('module');
if(!$oModuleModel->getActionForward('dispCommunicationAdminConfig'))
$oModuleController->insertActionForward('communication', 'view', 'dispCommunicationAdminConfig');
if(!$oModuleModel->getActionForward('dispCommunicationMessages'))
$oModuleController->insertActionForward('communication', 'view', 'dispCommunicationMessages');
if(!$oModuleModel->getActionForward('dispCommunicationFriend'))
$oModuleController->insertActionForward('communication', 'view', 'dispCommunicationFriend');
return new Object(0, 'success_updated');
}
/**
* @brief 캐시 파일 재생성
**/
function recompileCache() {
}
}
?>

View file

@ -0,0 +1,413 @@
<?php
/**
* @class communicationController
* @author zero (zero@nzeo.com)
* @brief communication module의 Controller class
**/
class communicationController extends communication {
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief 쪽지함 설정 변경
**/
function procCommunicationUpdateAllowMessage() {
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
$args->allow_message = Context::get('allow_message');
if(!in_array($args->allow_message, array('Y','N','F'))) $args->allow_message = 'Y';
$logged_info = Context::get('logged_info');
$args->member_srl = $logged_info->member_srl;
$output = executeQuery('communication.updateAllowMessage', $args);
return $output;
}
/**
* @brief 쪽지 발송
**/
function procCommunicationSendMessage() {
// 로그인 정보 체크
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
$logged_info = Context::get('logged_info');
// 변수 검사
$receiver_srl = Context::get('receiver_srl');
if(!$receiver_srl) return new Object(-1, 'msg_not_exists_member');
$title = trim(Context::get('title'));
if(!$title) return new Object(-1, 'msg_title_is_null');
$content = trim(Context::get('content'));
if(!$content) return new Object(-1, 'msg_content_is_null');
$send_mail = Context::get('send_mail');
if($send_mail != 'Y') $send_mail = 'N';
// 받을 회원이 있는지에 대한 검사
$oMemberModel = &getModel('member');
$receiver_member_info = $oMemberModel->getMemberInfoByMemberSrl($receiver_srl);
if($receiver_member_info->member_srl != $receiver_srl) return new Object(-1, 'msg_not_exists_member');
// 받을 회원의 쪽지 수신여부 검사 (최고관리자이면 패스)
if($logged_info->is_admin != 'Y') {
if($receiver_member_info->allow_message == 'F') {
if(!$oCommunicationModel->isFriend($receiver_member_info->member_srl)) return new object(-1, 'msg_allow_message_to_friend');
} elseif($receiver_member_info->allow_messge == 'N') {
return new object(-1, 'msg_disallow_message');
}
}
// 쪽지 발송
$output = $this->sendMessage($logged_info->member_srl, $receiver_srl, $title, $content);
// 메일로도 발송
if($output->toBool() && $send_mail == 'Y') {
$view_url = Context::getRequestUri();
$content = sprintf("%s<br /><br />From : <a href=\"%s\" target=\"_blank\">%s</a>",$content, $view_url, $view_url);
$oMail = new Mail();
$oMail->setTitle($title);
$oMail->setContent($content);
$oMail->setSender($logged_info->user_name, $logged_info->email_address);
$oMail->setReceiptor($receiver_member_info->user_name, $receiver_member_info->email_address);
$oMail->send();
}
return $output;
}
function sendMessage($sender_srl, $receiver_srl, $title, $content, $sender_log = true) {
$content = removeHackTag($content);
// 보내는 사용자의 쪽지함에 넣을 쪽지
$sender_args->sender_srl = $sender_srl;
$sender_args->receiver_srl = $receiver_srl;
$sender_args->message_type = 'S';
$sender_args->title = $title;
$sender_args->content = $content;
$sender_args->readed = 'N';
$sender_args->regdate = date("YmdHis");
$sender_args->related_srl = getNextSequence();
$sender_args->message_srl = getNextSequence();
$sender_args->list_order = getNextSequence()*-1;
// 받는 회원의 쪽지함에 넣을 쪽지
$receiver_args->message_srl = $sender_args->related_srl;
$receiver_args->related_srl = 0;
$receiver_args->list_order = $sender_args->related_srl*-1;
$receiver_args->sender_srl = $sender_srl;
if(!$receiver_args->sender_srl) $receiver_args->sender_srl = $receiver_srl;
$receiver_args->receiver_srl = $receiver_srl;
$receiver_args->message_type = 'R';
$receiver_args->title = $title;
$receiver_args->content = $content;
$receiver_args->readed = 'N';
$receiver_args->regdate = date("YmdHis");
$oDB = &DB::getInstance();
$oDB->begin();
// 발송하는 회원의 쪽지함에 넣을 쪽지
if($sender_srl && $sender_log) {
$output = executeQuery('communication.sendMessage', $sender_args);
if(!$output->toBool()) {
$oDB->rollback();
return $output;
}
}
// 받을 회원의 쪽지함에 넣을 쪽지
$output = executeQuery('communication.sendMessage', $receiver_args);
if(!$output->toBool()) {
$oDB->rollback();
return $output;
}
// 받는 회원의 쪽지 발송 플래그 생성 (파일로 생성)
$flag_path = './files/member_extra_info/new_message_flags/'.getNumberingPath($receiver_srl);
FileHandler::makeDir($flag_path);
$flag_file = sprintf('%s%s', $flag_path, $receiver_srl);
FileHandler::writeFile($flag_file,'1');
$oDB->commit();
return new Object(0,'success_sended');
}
/**
* @brief 특정 쪽지를 보관함으로 보냄
**/
function procCommunicationStoreMessage() {
// 로그인 정보 체크
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
$logged_info = Context::get('logged_info');
// 변수 체크
$message_srl = Context::get('message_srl');
if(!$message_srl) return new Object(-1,'msg_invalid_request');
// 쪽지를 가져옴
$oCommunicationModel = &getModel('communication');
$message = $oCommunicationModel->getSelectedMessage($message_srl);
if(!$message || $message->message_type != 'R') return new Object(-1,'msg_invalid_request');
$args->message_srl = $message_srl;
$args->receiver_srl = $logged_info->member_srl;
$output = executeQuery('communication.setMessageStored', $args);
if(!$output->toBool()) return $output;
$this->setMessage('success_registed');
}
/**
* @brief 쪽지 삭제
**/
function procCommunicationDeleteMessage() {
// 로그인 정보 체크
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
$logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl;
// 변수 체크
$message_srl = Context::get('message_srl');
if(!$message_srl) return new Object(-1,'msg_invalid_request');
// 쪽지를 가져옴
$oCommunicationModel = &getModel('communication');
$message = $oCommunicationModel->getSelectedMessage($message_srl);
if(!$message) return new Object(-1,'msg_invalid_request');
// 발송인+type=S or 수신인+type=R 검사
if($message->sender_srl == $member_srl && $message->message_type == 'S') {
if(!$message_srl) return new Object(-1, 'msg_invalid_request');
} elseif($message->receiver_srl == $member_srl && $message->message_type == 'R') {
if(!$message_srl) return new Object(-1, 'msg_invalid_request');
}
// 삭제
$args->message_srl = $message_srl;
$output = executeQuery('communication.deleteMessage', $args);
if(!$output->toBool()) return $output;
$this->setMessage('success_deleted');
}
/**
* @brief 선택된 다수의 쪽지 삭제
**/
function procCommunicationDeleteMessages() {
// 로그인 정보 체크
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
$logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl;
// 변수 체크
$message_srl_list = trim(Context::get('message_srl_list'));
if(!$message_srl_list) return new Object(-1, 'msg_cart_is_null');
$message_srl_list = explode('|@|', $message_srl_list);
if(!count($message_srl_list)) return new Object(-1, 'msg_cart_is_null');
$message_type = Context::get('message_type');
if(!$message_type || !in_array($message_type, array('R','S','T'))) return new Object(-1, 'msg_invalid_request');
$message_count = count($message_srl_list);
$target = array();
for($i=0;$i<$message_count;$i++) {
$message_srl = (int)trim($message_srl_list[$i]);
if(!$message_srl) continue;
$target[] = $message_srl;
}
if(!count($target)) return new Object(-1,'msg_cart_is_null');
// 삭제
$args->message_srls = implode(',',$target);
$args->message_type = $message_type;
if($message_type == 'S') $args->sender_srl = $member_srl;
else $args->receiver_srl = $member_srl;
$output = executeQuery('communication.deleteMessages', $args);
if(!$output->toBool()) return $output;
$this->setMessage('success_deleted');
}
/**
* @brief 친구 추가
**/
function procCommunicationAddFriend() {
// 로그인 정보 체크
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
$logged_info = Context::get('logged_info');
$target_srl = (int)trim(Context::get('target_srl'));
if(!$target_srl) return new Object(-1,'msg_invalid_request');
// 변수 정리
$args->friend_srl = getNextSequence();
$args->list_order = $args->friend_srl * -1;
$args->friend_group_srl = Context::get('friend_group_srl');
$args->member_srl = $logged_info->member_srl;
$args->target_srl = $target_srl;
$output = executeQuery('communication.addFriend', $args);
if(!$output->toBool()) return $output;
$this->add('member_srl', $target_srl);
$this->setMessage('success_registed');
}
/**
* @brief 등록된 친구의 그룹 이동
**/
function procCommunicationMoveFriend() {
// 로그인 정보 체크
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
$logged_info = Context::get('logged_info');
// 변수 체크
$friend_srl_list = trim(Context::get('friend_srl_list'));
if(!$friend_srl_list) return new Object(-1, 'msg_cart_is_null');
$friend_srl_list = explode('|@|', $friend_srl_list);
if(!count($friend_srl_list)) return new Object(-1, 'msg_cart_is_null');
$friend_count = count($friend_srl_list);
$target = array();
for($i=0;$i<$friend_count;$i++) {
$friend_srl = (int)trim($friend_srl_list[$i]);
if(!$friend_srl) continue;
$target[] = $friend_srl;
}
if(!count($target)) return new Object(-1,'msg_cart_is_null');
// 변수 정리
$args->friend_srls = implode(',',$target);
$args->member_srl = $logged_info->member_srl;
$args->friend_group_srl = Context::get('target_friend_group_srl');
$output = executeQuery('communication.moveFriend', $args);
if(!$output->toBool()) return $output;
$this->setMessage('success_moved');
}
/**
* @brief 친구 삭제
**/
function procCommunicationDeleteFriend() {
// 로그인 정보 체크
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
$logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl;
// 변수 체크
$friend_srl_list = trim(Context::get('friend_srl_list'));
if(!$friend_srl_list) return new Object(-1, 'msg_cart_is_null');
$friend_srl_list = explode('|@|', $friend_srl_list);
if(!count($friend_srl_list)) return new Object(-1, 'msg_cart_is_null');
$friend_count = count($friend_srl_list);
$target = array();
for($i=0;$i<$friend_count;$i++) {
$friend_srl = (int)trim($friend_srl_list[$i]);
if(!$friend_srl) continue;
$target[] = $friend_srl;
}
if(!count($target)) return new Object(-1,'msg_cart_is_null');
// 삭제
$args->friend_srls = implode(',',$target);
$args->member_srl = $logged_info->member_srl;
$output = executeQuery('communication.deleteFriend', $args);
if(!$output->toBool()) return $output;
$this->setMessage('success_deleted');
}
/**
* @brief 친구 그룹 추가
**/
function procCommunicationAddFriendGroup() {
// 로그인 정보 체크
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
$logged_info = Context::get('logged_info');
// 변수 정리
$args->friend_group_srl = trim(Context::get('friend_group_srl'));
$args->member_srl = $logged_info->member_srl;
$args->title = Context::get('title');
if(!$args->title) return new Object(-1, 'msg_invalid_request');
// friend_group_srl이 있으면 수정
if($args->friend_group_srl) {
$output = executeQuery('communication.renameFriendGroup', $args);
$msg_code = 'success_updated';
// 아니면 입력
} else {
$output = executeQuery('communication.addFriendGroup', $args);
$msg_code = 'success_registed';
}
if(!$output->toBool()) return $output;
$this->setMessage($msg_code);
}
/**
* @brief 친구 그룹 이름 변경
**/
function procCommunicationRenameFriendGroup() {
// 로그인 정보 체크
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
$logged_info = Context::get('logged_info');
// 변수 정리
$args->friend_group_srl= Context::get('friend_group_srl');
$args->member_srl = $logged_info->member_srl;
$args->title = Context::get('title');
if(!$args->title) return new Object(-1, 'msg_invalid_request');
$output = executeQuery('communication.renameFriendGroup', $args);
if(!$output->toBool()) return $output;
$this->setMessage('success_updated');
}
/**
* @brief 친구 그룹 삭제
**/
function procCommunicationDeleteFriendGroup() {
// 로그인 정보 체크
if(!Context::get('is_logged')) return new Object(-1, 'msg_not_logged');
$logged_info = Context::get('logged_info');
// 변수 정리
$args->friend_group_srl = Context::get('friend_group_srl');
$args->member_srl = $logged_info->member_srl;
$output = executeQuery('communication.deleteFriendGroup', $args);
if(!$output->toBool()) return $output;
$this->setMessage('success_deleted');
}
/**
* @brief 특정 쪽지의 상태를 읽은 상태로 변경
**/
function setMessageReaded($message_srl) {
$args->message_srl = $message_srl;
$args->related_srl = $message_srl;
return executeQuery('communication.setMessageReaded', $args);
}
}
?>

View file

@ -0,0 +1,189 @@
<?php
/**
* @class communicationModel
* @author zero (zero@nzeo.com)
* @brief communication module의 Model class
**/
class communicationModel extends communication {
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief 설정된 내용을 구함
**/
function getConfig() {
$oModuleModel = &getModel('module');
$communication_config = $oModuleModel->getModuleConfig('communication');
if(!$communication_config->skin) $communication_config->skin = 'default';
if(!$communication_config->colorset) $communication_config->colorset = 'white';
if(!$communication_config->editor_skin) $communication_config->editor_skin = 'default';
return $communication_config;
}
/**
* @brief 쪽지 내용을 가져옴
**/
function getSelectedMessage($message_srl) {
$logged_info = Context::get('logged_info');
$args->message_srl = $message_srl;
$output = executeQuery('communication.getMessage',$args);
$message = $output->data;
if(!$message) return ;
// 보낸 쪽지일 경우 받는 사람 정보를 구함
$oMemberModel = &getModel('member');
if($message->sender_srl == $logged_info->member_srl && $message->message_type == 'S') $member_info = $oMemberModel->getMemberInfoByMemberSrl($message->receiver_srl);
// 보관/받은 쪽지일 경우 보낸 사람 정보를 구함
else $member_info = $oMemberModel->getMemberInfoByMemberSrl($message->sender_srl);
if($member_info) {
foreach($member_info as $key => $val) {
if($key != 'regdate') $message->{$key} = $val;
}
}
// 받은 쪽지이고 아직 읽지 않았을 경우 읽은 상태로 변경
if($message->message_type == 'R' && $message->readed != 'Y') {
$oCommunicationController = &getController('communication');
$oCommunicationController->setMessageReaded($message_srl);
}
return $message;
}
/**
* @brief 쪽지를 가져옴
**/
function getNewMessage() {
$logged_info = Context::get('logged_info');
$args->receiver_srl = $logged_info->member_srl;
$args->readed = 'N';
$output = executeQuery('communication.getNewMessage', $args);
if(!count($output->data)) return;
$message = array_pop($output->data);
$oCommunicationController = &getController('communication');
$oCommunicationController->setMessageReaded($message->message_srl);
return $message;
}
/**
* @brief 쪽지 목록 가져오기
* type = R : 받은 쪽지
* type = S : 보낸 쪽지
* type = T : 보관함
**/
function getMessages($message_type = "R") {
$logged_info = Context::get('logged_info');
switch($message_type) {
case 'R' :
$args->member_srl = $logged_info->member_srl;
$args->message_type = 'R';
$query_id = 'communication.getReceivedMessages';
break;
case 'T' :
$args->member_srl = $logged_info->member_srl;
$args->message_type = 'T';
$query_id = 'communication.getStoredMessages';
break;
default :
$args->member_srl = $logged_info->member_srl;
$args->message_type = 'S';
$query_id = 'communication.getSendedMessages';
break;
}
// 기타 변수들 정리
$args->sort_index = 'message.list_order';
$args->page = Context::get('page');
$args->list_count = 20;
$args->page_count = 10;
return executeQuery($query_id, $args);
}
/**
* @brief 친구 목록 가져오기
**/
function getFriends($friend_group_srl = 0) {
$logged_info = Context::get('logged_info');
$args->friend_group_srl = $friend_group_srl;
$args->member_srl = $logged_info->member_srl;
// 기타 변수들 정리
$args->page = Context::get('page');
$args->sort_index = 'friend.list_order';
$args->list_count = 10;
$args->page_count = 10;
$output = executeQuery('communication.getFriends', $args);
return $output;
}
/**
* @brief 이미 친구로 등록되었는지 검사
**/
function isAddedFriend($member_srl) {
$logged_info = Context::get('logged_info');
$args->member_srl = $logged_info->member_srl;
$args->target_srl = $member_srl;
$output = executeQuery('communication.isAddedFriend', $args);
return $output->data->count;
}
/**
* @brief 특정 친구 그룹 가져오기
**/
function getFriendGroupInfo($friend_group_srl) {
$logged_info = Context::get('logged_info');
$args->member_srl = $logged_info->member_srl;
$args->friend_group_srl = $friend_group_srl;
$output = executeQuery('communication.getFriendGroup', $args);
return $output->data;
}
/**
* @brief 그룹 목록 가져오기
**/
function getFriendGroups() {
$logged_info = Context::get('logged_info');
$args->member_srl = $logged_info->member_srl;
$output = executeQuery('communication.getFriendGroups', $args);
$group_list = $output->data;
if(!$group_list) return;
if(!is_array($group_list)) $group_list = array($group_list);
return $group_list;
}
/**
* @brief 특정 회원의 친구 목록에 포함되어 있는지를 확인
**/
function isFriend($target_srl) {
$logged_info = Context::get('logged_info');
$args->member_srl = $target_srl;
$args->target_srl = $logged_info->member_srl;
$output = executeQuery('communication.isAddedFriend', $args);
if($output->data->count) return true;
return false;
}
}
?>

View file

@ -0,0 +1,221 @@
<?php
/**
* @class communicationView
* @author zero (zero@nzeo.com)
* @brief communication module의 View class
**/
class communicationView extends communication {
/**
* @brief 초기화
**/
function init() {
$oCommunicationModel = &getModel('communication');
$this->communication_config = $oCommunicationModel->getConfig();
$skin = $this->communication_config->skin;
Context::set('communication_config', $this->communication_config);
$tpl_path = sprintf('%sskins/%s', $this->module_path, $skin);
$this->setTemplatePath($tpl_path);
}
/**
* @brief 쪽지함 출력
**/
function dispCommunicationMessages() {
// 로그인이 되어 있지 않으면 오류 표시
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
// 변수 설정
$message_srl = Context::get('message_srl');
$message_type = Context::get('message_type');
if(!in_array($message_type, array('R','S','T'))) {
$message_type = 'R';
Context::set('message_type', $message_type);
}
$oCommunicationModel = &getModel('communication');
// message_srl이 있으면 내용 추출
if($message_srl) {
$message = $oCommunicationModel->getSelectedMessage($message_srl);
if($message->message_srl == $message_srl && ($message->receiver_srl == $logged_info->member_srl || $message->sender_srl == $logged_info->member_srl) ) Context::set('message', $message);
}
// 목록 추출
$output = $oCommunicationModel->getMessages($message_type);
// 템플릿에 쓰기 위해서 context::set
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('message_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
$this->setTemplateFile('messages');
}
/**
* @brief 쪽지 보여줌
**/
function dispCommunicationNewMessage() {
$this->setLayoutFile('popup_layout');
// 로그인이 되어 있지 않으면 오류 표시
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
$oCommunicationModel = &getModel('communication');
// 새 쪽지를 가져옴
$message = $oCommunicationModel->getNewMessage();
if($message) Context::set('message', $message);
// 플래그 삭제
$flag_path = './files/communication_extra_info/new_message_flags/'.getNumberingPath($logged_info->member_srl);
$flag_file = sprintf('%s%s', $flag_path, $logged_info->member_srl);
@unlink($flag_file);
$this->setTemplateFile('new_message');
}
/**
* @brief 쪽지 발송 출력
**/
function dispCommunicationSendMessage() {
$this->setLayoutFile("popup_layout");
$oCommunicationModel = &getModel('communication');
$oMemberModel = &getModel('member');
// 로그인이 되어 있지 않으면 오류 표시
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
// 쪽지 받을 사용자 정보 구함
$receiver_srl = Context::get('receiver_srl');
if(!$receiver_srl || $logged_info->member_srl == $receiver_srl) return $this->stop('msg_not_logged');
// 답글 쪽지일 경우 원본 메세지의 글번호를 구함
$message_srl = Context::get('message_srl');
if($message_srl) {
$source_message = $oCommunicationModel->getSelectedMessage($message_srl);
if($source_message->message_srl == $message_srl && $source_message->sender_srl == $receiver_srl) {
$source_message->title = "[re] ".$source_message->title;
$source_message->content = "\r\n<br />\r\n<br /><div style=\"padding-left:5px; border-left:5px solid #DDDDDD;\">".trim($source_message->content)."</div>";
Context::set('source_message', $source_message);
}
}
$receiver_info = $oMemberModel->getMemberInfoByMemberSrl($receiver_srl);
Context::set('receiver_info', $receiver_info);
// 에디터 모듈의 getEditor를 호출하여 서명용으로 세팅
$oEditorModel = &getModel('editor');
$option->primary_key_name = 'receiver_srl';
$option->content_key_name = 'content';
$option->allow_fileupload = false;
$option->enable_autosave = false;
$option->enable_default_component = false;
$option->enable_component = false;
$option->resizable = false;
$option->disable_html = true;
$option->height = 300;
$option->skin = $this->communication_config->editor_skin;
$editor = $oEditorModel->getEditor($logged_info->member_srl, $option);
Context::set('editor', $editor);
$this->setTemplateFile('send_message');
}
/**
* @brief 친구 목록 보기
**/
function dispCommunicationFriend() {
// 로그인이 되어 있지 않으면 오류 표시
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
$oCommunicationModel = &getModel('communication');
// 그룹 목록을 가져옴
$tmp_group_list = $oCommunicationModel->getFriendGroups();
$group_count = count($tmp_group_list);
for($i=0;$i<$group_count;$i++) $friend_group_list[$tmp_group_list[$i]->friend_group_srl] = $tmp_group_list[$i];
Context::set('friend_group_list', $friend_group_list);
// 친구 목록을 가져옴
$friend_group_srl = Context::get('friend_group_srl');
$output = $oCommunicationModel->getFriends($friend_group_srl);
$friend_count = count($output->data);
if($friend_count) {
foreach($output->data as $key => $val) {
$group_srl = $val->friend_group_srl;
$group_title = $friend_group_list[$group_srl]->title;
if(!$group_title) $group_title = Context::get('default_friend_group');
$output->data[$key]->group_title = $group_title;
}
}
// 템플릿에 쓰기 위해서 context::set
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('friend_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
$this->setTemplateFile('friends');
}
/**
* @brief 친구 추가
**/
function dispCommunicationAddFriend() {
$this->setLayoutFile("popup_layout");
// 로그인이 되어 있지 않으면 오류 표시
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
$target_srl = Context::get('target_srl');
if(!$target_srl) return $this->stop('msg_invalid_request');
// 대상 회원의 정보를 구함
$oMemberModel = &getModel('member');
$oCommunicationModel = &getModel('communication');
$communication_info = $oMemberModel->getMemberInfoByMemberSrl($target_srl);
if($communication_info->member_srl != $target_srl) return $this->stop('msg_invalid_request');
Context::set('target_info', $communication_info);
// 그룹의 목록을 구함
$friend_group_list = $oCommunicationModel->getFriendGroups();
Context::set('friend_group_list', $friend_group_list);
$this->setTemplateFile('add_friend');
}
/**
* @brief 친구 그룹 추가
**/
function dispCommunicationAddFriendGroup() {
$this->setLayoutFile("popup_layout");
// 로그인이 되어 있지 않으면 오류 표시
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
// 그룹 번호가 넘어오면 수정모드로..
$friend_group_srl = Context::get('friend_group_srl');
if($friend_group_srl) {
$oCommunicationModel = &getModel('communication');
$friend_group = $oCommunicationModel->getFriendGroupInfo($friend_group_srl);
if($friend_group->friend_group_srl == $friend_group_srl) Context::set('friend_group', $friend_group);
}
$this->setTemplateFile('add_friend_group');
}
}
?>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<module version="0.1" category="utility">
<title xml:lang="ko">커뮤니케이션</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2008. 5. 30">
<name xml:lang="ko">제로</name>
<description xml:lang="ko">회원들간의 쪽지, 친구기능을 담당하는 모듈입니다.</description>
</author>
</module>

View file

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<module>
<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="procCommunicationUpdateAllowMessage" type="controller" standalone="true" />
<action name="procCommunicationSendMessage" type="controller" standalone="true" />
<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" />
<action name="procCommunicationMoveFriend" type="controller" standalone="true" />
<action name="procCommunicationDeleteFriend" type="controller" standalone="true" />
<action name="procCommunicationAddFriendGroup" type="controller" standalone="true" />
<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" />
<action name="dispCommunicationAdminConfig" type="view" standalone="true" admin_index="true" />
</actions>
</module>

View file

@ -0,0 +1,48 @@
<?php
/**
* @file en.lang.php
* @author zero (zero@nzeo.com)
* @brief English Language Pack (Only Basic Things)
**/
$lang->communication = 'Communication';
$lang->about_communication = '회원간의 쪽지나 친구 관리등 커뮤니케이션 기능을 수행하는 모듈입니다';
$lang->allow_message = 'Receive Messages';
$lang->allow_message_type = array(
'Y' => 'Receive All',
'N' => 'Reject All',
'F' => 'Only Friends',
);
$lang->message_box = array(
'R' => 'Received',
'S' => 'Sent',
'T' => 'Mailbox',
);
$lang->readed_date = "Read Date";
$lang->sender = 'Sender';
$lang->receiver = 'Receiver';
$lang->friend_group = 'Friend Group';
$lang->default_friend_group = 'Unassigned Group';
$lang->cmd_send_message = 'Send Message';
$lang->cmd_reply_message = 'Reply Message';
$lang->cmd_view_friend = 'Friends';
$lang->cmd_add_friend = 'Add to Friends';
$lang->cmd_view_message_box = 'Message Box';
$lang->cmd_store = "Save";
$lang->cmd_add_friend_group = 'Add Friend Group';
$lang->cmd_rename_friend_group = 'Modify Friend Group Name';
$lang->msg_no_message = 'There is no message';
$lang->message_received = 'You have a new message';
$lang->msg_title_is_null = 'Please input the title of message';
$lang->msg_content_is_null = 'Please input the content';
$lang->msg_allow_message_to_friend = "Failed to send because receiver only allows friends' messages";
$lang->msg_disallow_message = 'Failed to send because receiver rejects message reception';
$lang->about_allow_message = 'You can decide message reception';
?>

View file

@ -0,0 +1,49 @@
<?php
/**
* @file es.lang.php
* @author zero (zero@nzeo.com)
* @brief Spanish Language Pack (Only Basic Things)
**/
$lang->communication = 'Communication';
$lang->about_communication = '회원간의 쪽지나 친구 관리등 커뮤니케이션 기능을 수행하는 모듈입니다';
$lang->allow_message = 'Permitir la recepción del mensaje';
$lang->allow_message_type = array(
'Y' => 'Recibir todo',
'N' => 'Rechazar',
'F' => 'Sólo amigos',
);
$lang->message_box = array(
'R' => 'Recibido',
'S' => 'Enviado',
'T' => 'Buzon de Email',
);
$lang->readed_date = "Fecha Leído";
$lang->sender = 'Remitente';
$lang->receiver = 'Receptor';
$lang->friend_group = 'Grupo de amigos';
$lang->default_friend_group = 'Grupo desasignado';
$lang->cmd_send_message = 'Enviar Mensaje';
$lang->cmd_reply_message = 'Responder el mensaje';
$lang->cmd_view_friend = 'Amigos';
$lang->cmd_add_friend = 'Registrar como Amigo';
$lang->cmd_view_message_box = 'Buzón de mensajes';
$lang->cmd_store = "Guardar";
$lang->cmd_add_friend_group = 'agregar grupo de amigos';
$lang->cmd_rename_friend_group = 'Cambiar el nombre del grupo de amigos';
$lang->msg_no_message = 'No hay mensajes';
$lang->message_received = 'Usted ha recibido un mensaje';
$lang->msg_title_is_null = 'Por favor ingresar el título de la nota';
$lang->msg_content_is_null = 'Por favor ingresar el contenido';
$lang->msg_allow_message_to_friend = "Falló el envío por permitir sólo mensajes de sus amigos";
$lang->msg_disallow_message = 'Falló el envío por ser usuario rechazado para recibir mensajes';
$lang->about_allow_message = 'Usted puede decidir la recepción del mensaje';
?>

View file

@ -0,0 +1,49 @@
<?php
/**
* @file modules/member/jp.lang.php
* @author zero (zero@nzeo.com) 翻訳RisaPapa、ミニミ、liahona
* @brief 日本語言語パッケージ(基本的な内容のみ)
**/
$lang->communication = '커뮤니케이션';
$lang->about_communication = '회원간의 쪽지나 친구 관리등 커뮤니케이션 기능을 수행하는 모듈입니다';
$lang->allow_message = 'メッセージの受信';
$lang->allow_message_type = array(
'Y' => '全て受信',
'N' => '全て受信しない',
'F' => '友達からのみ受信する',
);
$lang->message_box = array(
'R' => 'メッセージ受信ボックス',
'S' => 'メッセージ送信ボックス',
'T' => '保存ボックス',
);
$lang->readed_date = "開封時間";
$lang->sender = '送信者';
$lang->receiver = '受信者';
$lang->friend_group = '友達グループ';
$lang->default_friend_group = 'グループ未指定';
$lang->cmd_send_message = 'メッセージ送信';
$lang->cmd_reply_message = 'メッセージ返信';
$lang->cmd_view_friend = '友達表示';
$lang->cmd_add_friend = '友達登録';
$lang->cmd_view_message_box = 'メッセージ表示';
$lang->cmd_store = "保存";
$lang->cmd_add_friend_group = '友達グループ追加';
$lang->cmd_rename_friend_group = '友達グループ名変更';
$lang->msg_no_message = 'メッセージがありません。';
$lang->message_received = 'メッセージが届きました。';
$lang->msg_title_is_null = 'メッセージのタイトルを入力してください。';
$lang->msg_content_is_null = '内容を入力してください。';
$lang->msg_allow_message_to_friend = '友達からのみメッセージを受信できるように設定したユーザであるため、送信できませんでした。';
$lang->msg_disallow_message = 'メッセージの受信を拒否している受信者であるため、送信できませんでした。';
$lang->about_allow_message = 'メッセージを受信するかを設定します。';
?>

View file

@ -0,0 +1,48 @@
<?php
/**
* @file ko.lang.php
* @author zero (zero@nzeo.com)
* @brief 한국어 언어팩 (기본적인 내용만 수록)
**/
$lang->communication = '커뮤니케이션';
$lang->about_communication = '회원간의 쪽지나 친구 관리등 커뮤니케이션 기능을 수행하는 모듈입니다';
$lang->allow_message = '쪽지 수신 허용';
$lang->allow_message_type = array(
'Y' => '전체 수신',
'N' => '거부',
'F' => '친구만 허용',
);
$lang->message_box = array(
'R' => '받은 쪽지함',
'S' => '보낸 쪽지함',
'T' => '보관함',
);
$lang->readed_date = "읽은 시간";
$lang->sender = '보낸이';
$lang->receiver = '받는이';
$lang->friend_group = '친구 그룹';
$lang->default_friend_group = '그룹 미지정';
$lang->cmd_send_message = '쪽지 보내기';
$lang->cmd_reply_message = '쪽지 답장';
$lang->cmd_view_friend = '친구 보기';
$lang->cmd_add_friend = '친구 등록';
$lang->cmd_view_message_box = '쪽지함 보기';
$lang->cmd_store = "보관";
$lang->cmd_add_friend_group = '친구 그룹 추가';
$lang->cmd_rename_friend_group = '친구 그룹 이름 변경';
$lang->msg_no_message = '쪽지가 없습니다';
$lang->message_received = '쪽지가 왔습니다';
$lang->msg_title_is_null = '쪽지 제목을 입력해주세요';
$lang->msg_content_is_null = '내용을 입력해주세요';
$lang->msg_allow_message_to_friend = '친구에게만 쪽지 수신을 허용한 사용자라서 쪽지 발송을 하지 못했습니다';
$lang->msg_disallow_message = '쪽지 수신을 거부한 사용자라서 쪽지 발송을 하지 못했습니다';
$lang->about_allow_message = '쪽지 수신 여부를 결정할 수 있습니다';
?>

View file

@ -0,0 +1,50 @@
<?php
/**
* @file ru.lang.php
* @author zero <zero@nzeo.com> | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
* @brief Russian basic language pack for Zeroboard XE
**/
$lang->communication = 'Communication';
$lang->about_communication = '회원간의 쪽지나 친구 관리등 커뮤니케이션 기능을 수행하는 모듈입니다';
$lang->allow_message = 'Разрешить прием сообщений';
$lang->allow_message_type = array(
'Y' => 'Принимать все',
'N' => 'Отклонять все',
'F' => 'Только друзья',
);
$lang->message_box = array(
'R' => 'Принятые',
'S' => 'Отправленные',
'T' => 'Почтовый ящик',
);
$lang->readed_date = "Дата прочтения";
$lang->sender = 'Отправитель';
$lang->receiver = 'Получатель';
$lang->friend_group = 'Группа друзей';
$lang->default_friend_group = 'Неприсвоенная группа';
$lang->cmd_send_message = 'Отправить сообщение';
$lang->cmd_reply_message = 'Ответить';
$lang->cmd_view_friend = 'Дзузья';
$lang->cmd_add_friend = 'Сделать другом';
$lang->cmd_view_message_box = 'Ящик сообщений';
$lang->cmd_store = "Сохранить";
$lang->cmd_add_friend_group = 'Добавить группу друзей';
$lang->cmd_rename_friend_group = 'Изменить имя группы друзей';
$lang->msg_no_message = 'Нет сообщений';
$lang->message_received = 'Новое сообщение';
$lang->msg_title_is_null = 'Пожалуйста, введите тему сообщения';
$lang->msg_content_is_null = 'Пожалуйста, введите содержание';
$lang->msg_allow_message_to_friend = "Отправка провалена, поскольку получатель принимает сообщения только от друзей";
$lang->msg_disallow_message = 'Отправка провалена, поскольку получатель отклоняет прием сообщений';
$lang->about_allow_message = 'Вы можете определить политику принятия сообщений';
?>

View file

@ -0,0 +1,49 @@
<?php
/**
* @file zh-CN.lang.php
* @author zero (zero@nzeo.com)
* @brief 简体中文语言包 (只收录基本内容)
**/
$lang->communication = '커뮤니케이션';
$lang->about_communication = '회원간의 쪽지나 친구 관리등 커뮤니케이션 기능을 수행하는 모듈입니다';
$lang->allow_message = '允许接收短消息';
$lang->allow_message_type = array(
'Y' => '全部接收',
'N' => '拒收',
'F' => '只允许好友',
);
$lang->message_box = array(
'R' => '收件箱',
'S' => '发件箱',
'T' => '保管箱',
);
$lang->readed_date = "阅读日期";
$lang->sender = '寄件人';
$lang->receiver = '收件人';
$lang->friend_group = '好友组';
$lang->default_friend_group = '组未指定';
$lang->cmd_send_message = '发送短消息';
$lang->cmd_reply_message = '回复短消息';
$lang->cmd_view_friend = '查看好友';
$lang->cmd_add_friend = '加为好友';
$lang->cmd_view_message_box = '查看短信箱';
$lang->cmd_store = "保管";
$lang->cmd_add_friend_group = '添加好友组';
$lang->cmd_rename_friend_group = '修改好友组名称';
$lang->msg_no_message = '没有短消息。';
$lang->message_received = '您有新消息。';
$lang->msg_title_is_null = '请输入短消息标题。';
$lang->msg_content_is_null = '请输入内容。';
$lang->msg_allow_message_to_friend = '因其为只允许接收好友短消息的用户,所以不能发送短消息。';
$lang->msg_disallow_message = '因其为拒绝接收短消息的用户,所以不能发送短消息。';
$lang->about_allow_message = '可以选择短消息接收与否。';
?>

View file

@ -34,7 +34,7 @@
<option value="{$val->friend_group_srl}">{$val->title}</option>
<!--@end-->
</select>
<span class="fr"><a href="{getUrl('act','dispMemberAddFriendGroup')}" onclick="popopen(this.href);return false;" class="button"><span>{$lang->cmd_add_friend_group}</span></a></span>
<span class="fr"><a href="{getUrl('act','dispCommunicationAddFriendGroup')}" onclick="popopen(this.href);return false;" class="button"><span>{$lang->cmd_add_friend_group}</span></a></span>
</div>
</div>

View file

@ -0,0 +1 @@
</div>

View file

@ -0,0 +1,36 @@
<!--%import("js/communication.js")-->
<!--%import("css/common.css")-->
<!--@if($communication_config->colorset=="purple")-->
<!--%import("css/purple.css")-->
<!--@elseif($communication_config->colorset=="green")-->
<!--%import("css/green.css")-->
<!--@elseif($communication_config->colorset=="red")-->
<!--%import("css/red.css")-->
<!--@elseif($communication_config->colorset=="cyan")-->
<!--%import("css/cyan.css")-->
<!--@elseif($communication_config->colorset=="black")-->
<!--%import("css/black.css")-->
<!--@else-->
<!--%import("css/white.css")-->
<!--@end-->
<div id="memberModule">
<!--@if($member_title)-->
<div class="boardHeader">
<h3>{$member_title}</h3>
<!--@if($is_logged && $logged_info->menu_list && (!$member_srl || $member_srl == $logged_info->member_srl) )-->
<form action="./" method="get" class="member_option">
<input type="hidden" name="mid" value="{$mid}" />
<select name="act">
<!--@foreach($logged_info->menu_list as $key => $val)-->
<option value="{$key}" <!--@if($key == $act)-->selected="selected"<!--@end-->>{Context::getLang($val)}</option>
<!--@end-->
</select>
<input type="image" src="./images/button_go.gif" />
</form>
<!--@end-->
</div>
<!--@end-->

View file

@ -0,0 +1,54 @@
@charset "utf-8";
.boardHeader h3 { margin:0; padding:0; float:left; clear:both; font-size:1.2em; padding:1em 2em .7em 1.2em; border:none; border-left:1px solid #e1e1dd; border-bottom:3px solid #fe3614; background:url(../images/common/lineH3.gif) no-repeat right bottom;}
.memberSmallBox .header h3 { margin:0; border:none; float:left; clear:both; font-size:1.2em; padding:.8em 2em .6em 1.2em; border:none; border-bottom:3px solid #fe3614; background:url(../images/common/lineH3.gif) no-repeat right bottom;}
/* button */
a.button, span.button, del.button,
a.button span, span.button button, span.button input, del.button span{
background-image:url(../images/black/form_buttons.png);
_background-image:url(../images/black/form_buttons.gif);
}
del.button span,
a.button, span.button, del.button,
a.button span, span.button button, span.button input, del.button span{
color:#FFFFFF;
}
.inputTypeText { background-color:transparent !important; color:#AAAAAA !important; }
.inputTypeText:hover, .inputTypeText:focus { background-color:transparent; color:#AAAAAA; }
/* replace color */
.memberSmallBox { border:1px solid #888888; }
.memberSmallBox .header { background:transparent url("../images/black/bgH3.gif) no-repeat left bottom; }
.memberSmallBox .header h3 { background:transparent url("../images/black/lineH3.gif") no-repeat right bottom; color:#888888; border-bottom:3px solid #888888; }
.memberSmallBox .openid_user_id { color:#AAAAAA; background:transparent url("../images/black/openid_input_bg.gif") no-repeat left 50% !important; }
.memberSmallBox .help { background-color:transparent; }
.memberInfoTable tr.first-child th, .memberInfoTable tr.first-child td { background-color:transparent; color:#AAAAAA; }
.memberInfoTable tr th, .memberInfoTable tr td { background-color:transparent; color:#AAAAAA; }
.memberInfoTable td input { background-color:transparent; color:#AAAAAA; }
.memberInfoTable caption { color:#AAAAAA; }
div.checkValue { color:#BBBBBB !important; }
.boardHeader { border:1px solid #888888; }
.boardHeader { background:transparent url("../images/black/bgH3.gif) no-repeat left bottom; }
.boardHeader h3 { border:none; background:transparent url("../images/black/lineH3.gif") no-repeat right bottom; color:#888888; border-bottom:3px solid #888888; }
table.list { border:1px solid #000000 !important; }
table.list th { background:#282829 url("../images/black/lineBoardListTh.gif") no-repeat left bottom; border:1px solid #444444 !important; color:#AAAAAA; }
table.list tr { background-color:transparent !important; }
table.list tr td.title { color:#BBBBBB !important; }
table.list tr td.title a { color:#BBBBBB !important; }
table.list tr td { border-top:1px solid #888888 !important; }
table .list tr td, table.list tr td * { color:#BBBBBB; }
.pageNavigation a { border:none !important; }
.pageNavigation .current { border:none !important; color:#EEEEEE; }
.memberSmallBox .leftHeaderType th { background:transparent; color:#AAAAAA; }
.memberSmallBox .leftHeaderType td { color:#AAAAAA; }
#popup_content { background-color:#000000; }

View file

@ -0,0 +1,175 @@
@charset "utf-8";
/* common */
.memberSmallBox { border:1px solid #e0e1db; margin:5em auto 1em auto;}
.memberSmallBox fieldset { border:0; margin:0; }
.memberSmallBox.w400 { width:400px;}
.memberSmallBox.w500 { width:500px;}
.memberSmallBox.w400pop { width:400px; margin:0; padding:0;}
.memberSmallBox.w500pop { width:500px; margin:0; padding:0;}
.memberSmallBox.w600pop { width:600px; margin:0; padding:0;}
.memberSmallBox .header { position:relative; _width:100%; background:#ffffff url(../images/common/bgH3.gif) no-repeat left bottom; overflow:hidden;}
.boardInformation { font:normal 11px Tahoma; width:100%; clear:both; margin:1em 0 .5em 0; overflow:hidden; color:#666666; height:28px;}
.boardInformation strong { font:bold 11px Tahoma; color:#ff6600;}
.boardHeader { position:relative; _width:100%; border-top:1px solid #e1e1dd; border-bottom:none; background:#ffffff url(../images/common/bgH3.gif) no-repeat right bottom; overflow:hidden;}
.boardHeader .member_option { float:right; position:relative; top:1em; right:1em; }
.boardHeader select { vertical-align:bottom; }
.boardHeader input { vertical-align:bottom; _padding-bottom:1px;}
.boardHeader .essential { position:absolute; top:1.5em; right:1em; color:#54564b; font-size:.9em;}
.boardHeader .essential:first-letter { color:#ff0000;}
/* list */
.list { width:100%; border:1px solid #e0e1db; table-layout:fixed;}
.list tr:first-child td, .list tr.first-child td { border-top:1px solid #e0e1db; white-space:nowrap;}
.list tr.bg1 { background:#ffffff}
.list tr.bg2 { background:#fbfbfb;}
.list th { color:#3e3f3e; font-weight:white; border-bottom:1px solid #ffffff; padding:.5em .2em .5em .2em; background:#ffffff url(../images/common/lineBoardListTh.gif) no-repeat left bottom; white-space:nowrap;}
.list th a { color:#3e3f3e;}
.list th:first-child, .list th.first-child { background-position:-3px bottom; border-left:1px solid #ffffff;}
.list th.check { padding:0;}
.list th select, .list th input { vertical-align:middle;}
.list td { border-top:1px solid #eff0ed; padding:.5em; text-align:center; height:35px;}
.list td.registDate { font:.8em Tahoma; color:#999999; text-align:center;}
.list td.num { font:.8em Tahoma; color:#999999; text-align:center;}
.list td.check { text-align:center;}
.list td.user { color:#333333; font-size:.9em; text-align:left;}
.list td.user a { color:#333333;}
.list td.userId { font:.9em Tahoma;}
.list td.userNick { font-size:.9em; color:#999999;}
.list td.sendMessage { text-align:center; padding:0;}
.list td.sendMessage .buttonFixedLeft { float:left; position:relative; margin-left:1em;}
.list td input { _margin:-3px;}
.list td.title { text-align:left; }
.list td.title.bold { font-size:1.2em; font-weight:bold;}
.list td.title.bold a { position:relative; top:.3em;}
.list td.title * { vertical-align:middle;}
.list td.title, .list td.title a { color:#444444; text-decoration:none;}
.list td.title a:visited { color:#777777; text-decoration:none;}
.list td.checkDate { font:.8em Tahoma; color:#333333; text-align:center;}
.list td.subject { font-size:1em; text-align:left; color:#555555; }
.list td.subject a { text-decoration:none; color:#555555; }
.memberSelect { margin-top:2px; }
.saved_content { margin-top:1em; padding-top:1em; border-top:1px dotted #DDDDDD; }
/* login */
.memberSmallBox .login { border:none; padding:2em 0 1.5em 2em;}
.memberSmallBox .login legend { position:absolute; overflow:hidden; width:1px; height:1px; font-size:.001em; text-indent:-100em;}
.memberSmallBox .login dl { margin:0; padding:0; overflow:hidden; float:left; margin-right:10px; width:250px;}
.memberSmallBox .login dl dt { margin:0; padding:0; width:100px; clear:left; float:left; color:#54564b; height:24px; padding-top:3px;}
.memberSmallBox .login dl dd { margin:0; padding:0; float:left; height:27px; width:150px; }
.memberSmallBox .login .keep { clear:both; white-space:nowrap; margin-left:100px;}
.memberSmallBox .login .keep input { vertical-align:middle;}
.memberSmallBox .login .keep label { margin:0; padding:0; font-size:11px; color:#999999;}
.memberSmallBox .openid_user_id { background: url(../images/openid_input_bg.gif) left no-repeat; background-color: #ffffff; background-position: 0 50%; padding:3px 3px 3px 18px; border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; line-height:1em; vertical-align:middle; color:#666666; width:120px;}
.memberSmallBox .help { background:#f5f5f3; color:#666666; border-top:1px solid #eaebe7; overflow:hidden; padding:1.1em; }
/* logout */
.memberSmallBox .text { color:#54564b; text-align:center; padding:4em 2em 5em 2em;}
.memberSmallBox .text p { margin:0; padding:0; margin-bottom:.5em;}
/* friend */
.friendNum { float:left; background:url(../images/common/iconFriend.gif) no-repeat .5em .4em; padding:.4em 0 0 2em;}
.friendNum strong { font:bold 11px Tahoma; color:#ff6600;}
/* message */
.readMessage { border:1px solid #e0e1db; border-top:none; margin-bottom:2em;}
.readMessage .messageHeader { padding:1.5em; height:1em; overflow:hidden;}
.readMessage .messageHeader h4 { margin:0; padding:0; float:left; padding-left:.5em; font-size:1em; background:url(../images/common/iconArrow99.gif) no-repeat left .3em;}
.readMessage .messageHeader address { float:right; white-space:nowrap;}
.readMessage .messageHeader address em { font-size:1em; font-style:white; color:#333333; margin-right:.3em; float:left;}
.readMessage .messageHeader address em a { color:#333333;}
.readMessage .messageHeader address .date { font:.8em Tahoma; color:#999999; margin-left:10px;}
.readMessage .messageBody { border:1px solid #e0e1db; margin:0 1.5em 1.5em 1.5em; padding:1em; color:#666666;}
.readMessage .deleteOrKeep { padding:.5em 0; overflow:hidden; background:#f5f5f3; border-top:1px solid #eaebe7; _width:100%;}
.messageSetup { float:left; overflow:hidden; }
.instantMessage { float:right; overflow:hidden;}
.instantMessage li { float:left; padding:0 .8em 0 .8em; margin-left:-1px; background:url(../images/common/line_1x10_e0e0e0.gif) no-repeat left center; list-style:none; }
.instantMessage li a { text-decoration:none; display:block; float:left; height:1em; height:1.1em; overflow:hidden; font-size:1em; white-space:nowrap; color:#666666; padding-left:1.8em; background:url(../images/common/iconInstantMessage.gif) no-repeat left top;}
.instantMessage li.on a { background-position:left -14px; font-weight:bold;}
.instantMessage li a strong { color:#ff6600;}
/* member info */
.memberInfoTable { width:100%; border:1px solid #e0e1db; margin-bottom:10px;}
.memberInfoTable caption { padding:2em 0 .5em 1.5em; font-weight:bold; text-align:left; background:url(../images/common/iconH3.gif) no-repeat .5em 2em;}
.memberInfoTable tr.first-child th, .memberInfoTable tr.first-child td { border-top:none;}
.memberInfoTable th, .memberInfoTable td { border-top:1px solid #eaebe7; padding:.5em;}
.memberInfoTable th { background:#f5f5f3; text-align:left; padding:.5em 1em;}
.memberInfoTable td { border-left:1px solid #eaebe7;}
.memberInfoTable td input { border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; padding:3px; height:1em; line-height:1em; background:#fbfbfb; vertical-align:middle; margin-right:.5em; margin-bottom:.5em; color:#666666;}
.memberInfoTable td input.radio, .memberInfoTable td input.check { border:none; padding:0; margin:0; background:none; margin-top:.4em;}
.memberInfoTable td input.w4em { width:4em;}
.memberInfoTable td input.w2em { width:2em;}
.memberInfoTable td select { margin-right:.5em;}
.memberInfoTable td checkbox { border:0; }
.memberInfoTable td .fl { margin-right:.5em;}
.memberInfoTable td br { clear:both;}
.memberInfoTable td p { clear:both; margin:0; padding:0; font-size:.9em; color:#999999; padding-top:.5em; margin-right:.5em;}
.memberInfoTable td label { color:#3f4040; padding-top:.3em; margin-right:.5em;}
.memberInfoTable td ul { list-style:none; }
.memberInfoTable td .checkbox { border:none; }
/* 아이디, 이름, 이메일 주소 중복 체크후 중복되면 출력되는 메세지의 className */
.memberInfoTable td .checkValue { margin-top:5px; font-weight:bold; color:#444444; }
/* modify/ insert member info */
.memberImage { clear:both; }
.memberImage .info { margin-bottom:1.5em; float:left; margin-right:1em;}
.memberImage .form { float:left; }
.memberImage .form input { height:1.5em; margin:0 .3em 0 0; padding:0;}
.checkbox li { float:left; margin-right:2em; }
.checkbox li input { border:none; }
.display_date { cursor:pointer; width:80px; float:left; border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; height:1em; padding:3px; }
.krZip .address2 { clear:both; margin-top:10px;}
.extendDesc { clear:both; margin-top:0; font-size:.9em; color:#999999; }
.extendPublic { clear:both; margin-top:5px; padding:0; font-size:.9em; color:#999999; }
.extendPublic input { padding:0; margin:0; }
.publicItem { display:block; margin-top:5px;}
.publicItem input { margin:0; padding:0;}
.publicItem label { font-weight:normal; margin:0; padding:0; color:#666666;}
span.publicItem { display:inline; margin:0; font-weight:normal; color:#666666; }
span.privateItem { display:inline; margin:0; font-weight:normal; color:#666666; }
.agreementBox { border:1px solid #AAAAAA; margin:.5em 0 0 0; padding:1em; border-bottom:none; height:200px; overflow-y:scroll;}
.agreementButton { background-color:#EEEEEE; padding:1em; border:1px solid #AAAAAA; border-top:none;}
/* popup common */
.memberSmallBox .complex { padding:1.5em 2em 2em 2em;}
.memberSmallBox .leftHeaderType { border-top:1px solid #e0e1db; border-left:1px solid #e0e1db; width:100%;}
.memberSmallBox .leftHeaderType th, .memberSmallBox .leftHeaderType td { border-right:1px solid #e0e1db; border-bottom:1px solid #e0e1db; padding:.8em 1em .6em 1em;}
.memberSmallBox .leftHeaderType th { color:#333333; text-align:left; background:#f5f5f3;}
.memberSmallBox .leftHeaderType td { color:#444444;}
.memberSmallBox .group { border:1px solid #e0e1db; border-width:1px 0; overflow:hidden; padding:.5em 0; margin-top:.7em; height:23px;}
.memberSmallBox .group select { width:11em; margin-top:1px;}
.memberSmallBox .editor { margin:10px 0 0 0; _height:400px; }
/* password change */
.memberSmallBox .pwModify { border:none;}
.memberSmallBox .pwModify legend { position:absolute; overflow:hidden; width:1px; height:1px; font-size:.001em; text-indent:-100em;}
.memberSmallBox .pwModify input { width:9em;}
.memberSmallBox .pwModify br { display:block; margin-bottom:.2em}
.memberSmallBox .pwModify p { margin:0; padding:0; text-align:center; margin-top:1em; color:#54564b;}
/* pageNavigation */
.pageNavigation { position:relative; display:block; padding:1.5em 0 2em 0; text-align:center; font:bold .8em Tahoma; }
.pageNavigation a { position:relative; margin-left:-4px; font:bold 1em Tahoma; color:#666666; display:inline-block; padding:1px 7px 2px 6px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; }
.pageNavigation a:hover { background:#F7F7F7; text-decoration:none; }
.pageNavigation a:visited { color:#999999;}
.pageNavigation a.goToFirst { border:none; border-right:1px solid #ffffff; border-left:1px solid #ffffff; z-index:99; vertical-align:top; padding:0px 7px 4px 6px;}
.pageNavigation a.goToLast { border:none; border-right:1px solid #ffffff; border-left:1px solid #ffffff; z-index:99; vertical-align:top; padding:0px 7px 4px 6px;}
.pageNavigation a.goToFirst img, .pageNavigation a.goToLast img { display:inline-block; padding:2px 0; position:relative; top:2px; _top:1px;}
.pageNavigation .current { position:relative; margin-left:-4px; font:bold 1em Tahoma; color:#ff6600; display:inline-block; padding:1px 7px 1px 6px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; }
/* Own Document */
img.button_go { position:relative; bottom:-4px; }

View file

@ -0,0 +1,4 @@
@charset "utf-8";
.boardHeader h3 { margin:0; padding:0; float:left; clear:both; font-size:1.2em; padding:1em 2em .7em 1.2em; border-left:1px solid #d1d9db; border-bottom:3px solid #2895c0; background:url(../images/common/lineH3.gif) no-repeat right bottom;}
.memberSmallBox .header h3 { margin:0; border:none; float:left; clear:both; font-size:1.2em; padding:.8em 2em .6em 1.2em; border-bottom:3px solid #2895c0; background:url(../images/common/lineH3.gif) no-repeat right bottom;}

View file

@ -0,0 +1,4 @@
@charset "utf-8";
.boardHeader h3 { margin:0; padding:0; float:left; clear:both; font-size:1.2em; padding:1em 2em .7em 1.2em; border-left:1px solid #d0dbd1; border-bottom:3px solid #38b549; background:url(../images/common/lineH3.gif) no-repeat right bottom;}
.memberSmallBox .header h3 { margin:0; border:none; float:left; clear:both; font-size:1.2em; padding:.8em 2em .6em 1.2em; border-bottom:3px solid #38b549; background:url(../images/common/lineH3.gif) no-repeat right bottom;}

View file

@ -0,0 +1,4 @@
@charset "utf-8";
.boardHeader h3 { margin:0; padding:0; float:left; clear:both; font-size:1.2em; padding:1em 2em .7em 1.2em; border-left:1px solid #d1d9db; border-bottom:3px solid #ac19a9; background:url(../images/common/lineH3.gif) no-repeat right bottom;}
.memberSmallBox .header h3 { margin:0; border:none; float:left; clear:both; font-size:1.2em; padding:.8em 2em .6em 1.2em; border-bottom:3px solid #ac19a9; background:url(../images/common/lineH3.gif) no-repeat right bottom;}

View file

@ -0,0 +1,4 @@
@charset "utf-8";
.boardHeader h3 { margin:0; padding:0; float:left; clear:both; font-size:1.2em; padding:1em 2em .7em 1.2em; border-left:1px solid #e1e1dd; border-bottom:3px solid #fe3614; background:url(../images/common/lineH3.gif) no-repeat right bottom;}
.memberSmallBox .header h3 { margin:0; border:none; float:left; clear:both; font-size:1.2em; padding:.8em 2em .6em 1.2em; border-bottom:3px solid #fe3614; background:url(../images/common/lineH3.gif) no-repeat right bottom;}

View file

@ -0,0 +1,5 @@
@charset "utf-8";
.boardHeader h3 { margin:0; padding:0; float:left; clear:both; font-size:1.2em; padding:1em 2em .7em 1.2em; border:none; border-left:1px solid #e1e1dd; border-bottom:3px solid #fe3614; background:url(../images/common/lineH3.gif) no-repeat right bottom;}
.memberSmallBox .header h3 { margin:0; border:none; float:left; clear:both; font-size:1.2em; padding:.8em 2em .6em 1.2em; border:none; border-bottom:3px solid #fe3614; background:url(../images/common/lineH3.gif) no-repeat right bottom;}

View file

@ -1,4 +1,4 @@
<filter name="add_friend" module="member" act="procMemberAddFriend" confirm_msg_code="confirm_submit">
<filter name="add_friend" module="communication" act="procCommunicationAddFriend" confirm_msg_code="confirm_submit">
<form />
<parameter />
<response callback_func="completeAddFriend">

View file

@ -1,4 +1,4 @@
<filter name="add_friend_group" module="member" act="procMemberAddFriendGroup" confirm_msg_code="confirm_submit">
<filter name="add_friend_group" module="communication" act="procCommunicationAddFriendGroup" confirm_msg_code="confirm_submit">
<form>
<node target="title" required="true" minlength="1" maxlength="240" />
</form>

View file

@ -0,0 +1 @@
<filter name="delete_checked_friend" module="communication" act="procCommunicationDeleteFriend" confirm_msg_code="confirm_delete" />

View file

@ -0,0 +1 @@
<filter name="delete_checked_message" module="communication" act="procCommunicationDeleteMessages" confirm_msg_code="confirm_delete" />

View file

@ -0,0 +1 @@
<filter name="delete_friend_group" module="communication" act="procCommunicationDeleteFriendGroup" confirm_msg_code="confirm_delete" />

View file

@ -0,0 +1 @@
<filter name="move_friend" module="communication" act="procCommunicationMoveFriend" confirm_msg_code="confirm_move" />

View file

@ -1,4 +1,4 @@
<filter name="send_message" module="member" act="procMemberSendMessage" confirm_msg_code="confirm_submit">
<filter name="send_message" module="communication" act="procCommunicationSendMessage" confirm_msg_code="confirm_submit">
<form>
<node target="title" required="true" minlength="1" maxlength="240" />
<node target="content" required="true" minlength="1" />

View file

@ -0,0 +1,5 @@
<filter name="update_allow_message" module="communication" act="procCommunicationUpdateAllowMessage">
<form />
<parameter />
<response />
</filter>

View file

@ -1,5 +1,7 @@
{@ $member_title = $lang->cmd_view_friend }
<!--#include("./common_header.html")-->
<!--%import("filter/delete_checked_friend.xml")-->
<!--%import("filter/delete_friend_group.xml")-->
<!--%import("filter/move_friend.xml")-->
@ -16,7 +18,7 @@
</select>
<a href="#" onclick="doRenameFriendGroup();return false;" class="button"><span>{$lang->cmd_modify}</span></a>
<a href="#" onclick="doDeleteFriendGroup();return false;" class="button"><span>{$lang->cmd_delete}</span></a>
<a href="{getUrl('module','member','act','dispMemberAddFriendGroup')}" onclick="popopen(this.href);return false;" class="button"><span>{$lang->cmd_add_friend_group}</span></a>
<a href="{getUrl('module','communication','act','dispCommunicationAddFriendGroup')}" onclick="popopen(this.href);return false;" class="button"><span>{$lang->cmd_add_friend_group}</span></a>
</div>
</div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 419 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 B

View file

@ -0,0 +1,101 @@
/* 쪽지 발송 */
function completeSendMessage(ret_obj) {
alert(ret_obj['message']);
window.close();
}
function doSendMessage(member_srl, message_srl) {
if(typeof(message_srl)=='undefined') message_srl = 0;
var url = current_url.setQuery('module','communication').setQuery('act','dispCommunicationSendMessage').setQuery('receiver_srl',member_srl).setQuery('message_srl',message_srl);
popopen(url, 'sendMessage');
}
/* 쪽지 모두 선택 */
function doCheckAll(obj, fo_id) {
var fo_obj = xGetElementById(fo_id);
for(var i=0; i<fo_obj.length; i++) {
if(fo_obj[i].type == "checkbox" && fo_obj[i] != obj) fo_obj[i].checked = obj.checked;
}
}
/* 개별 쪽지 삭제 */
function doDeleteMessage(message_srl) {
if(!message_srl) 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 doStoreMessage(message_srl) {
if(!message_srl) return;
var params = new Array();
params['message_srl'] = message_srl;
exec_xml('communication', 'procCommunicationStoreMessage', params, completeStoreMessage);
}
function completeStoreMessage(ret_obj) {
alert(ret_obj['message']);
location.href = current_url.setQuery('message_srl','');
}
/* 친구 추가 후 */
function completeAddFriend(ret_obj) {
alert(ret_obj['message']);
var member_srl = ret_obj['member_srl'];
if(opener && opener.loaded_member_menu_list) {
opener.loaded_member_menu_list[ret_obj['member_srl']] = '';
}
window.close();
}
/* 친구 그룹 추가 후 */
function completeAddFriendGroup(ret_obj) {
alert(ret_obj['message']);
if(opener) opener.location.href = opener.location.href;
window.close();
}
/* 친구 그룹 삭제 */
function doDeleteFriendGroup() {
var obj = xGetElementById('friend_group_list');
if(obj.options.length<1) return;
var friend_group_srl = obj.options[obj.selectedIndex].value;
var fo_obj = xGetElementById('for_delete_group');
fo_obj.friend_group_srl.value = friend_group_srl;
procFilter(fo_obj, delete_friend_group);
}
function completeDeleteFriendGroup(ret_obj) {
alert(ret_obj['message']);
location.href = current_url.setQuery('friend_group_srl','');
}
/* 친구 그룹의 이름 변경 */
function doRenameFriendGroup() {
var obj = xGetElementById('friend_group_list');
if(obj.options.length<1) return;
var friend_group_srl = obj.options[obj.selectedIndex].value;
popopen("./?module=communication&act=dispCommunicationAddFriendGroup&friend_group_srl="+friend_group_srl);
}
/* 친구 그룹 이동 */
function doMoveFriend() {
var fo_obj = xGetElementById('fo_friend_list');
procFilter(fo_obj, move_friend);
}
/* 친구 그룹 선택 */
function doJumpFriendGroup() {
var sel_obj = xGetElementById('jumpMenu');
var sel_idx = sel_obj.selectedIndex;
var sel_val = sel_obj.options[sel_idx].value;
location.href = current_url.setQuery('friend_group_srl', sel_val);
}

View file

@ -3,7 +3,9 @@
{@ $member_title = $val}
<!--@end-->
<!--@end-->
<!--#include("./common_header.html")-->
<!--%import("filter/delete_checked_message.xml")-->
<!--%import("filter/update_allow_message.xml")-->

Binary file not shown.

After

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Some files were not shown because too many files have changed in this diff Show more