단어를 범용적으로 바꾸고 회원 메뉴에 차단리스트 추가

This commit is contained in:
BJRambo 2020-02-05 15:47:59 +09:00
parent ad76cc030f
commit 696ca5a6bf
17 changed files with 124 additions and 114 deletions

View file

@ -4,8 +4,8 @@
<actions>
<action name="dispNcenterliteNotifyList" type="view" permission="member" />
<action name="dispNcenterliteUserConfig" type="view" permission="member" />
<action name="dispNcenterliteIndividualBlockList" type="view" />
<action name="dispNcenterliteInsertIndividualBlock" type="view" />
<action name="dispNcenterliteUnsubscribeList" type="view" />
<action name="dispNcenterliteInsertUnsubscribe" type="view" />
<action name="getColorsetList" type="model" permission="root" />
<action name="getMyNotifyListTpl" type="model" permission="member" />
@ -13,7 +13,7 @@
<action name="procNcenterliteUserConfig" type="controller" permission="member" />
<action name="procNcenterliteNotifyReadAll" type="controller" permission="member" />
<action name="procNcenterliteRedirect" type="controller" permission="member" method="GET|POST" />
<action name="procNcenterliteInsertIndividualBlock" type="controller" />
<action name="procNcenterliteInsertUnsubscribe" type="controller" />
<action name="dispNcenterliteAdminConfig" type="view" admin_index="true" menu_name="ncenterlite" menu_index="true" />
<action name="dispNcenterliteAdminAdvancedconfig" type="view" menu_name="ncenterlite" />

View file

@ -126,10 +126,13 @@ $lang->ncenterlite_commnet_event_noti_some = '대댓글은 알리지 않음';
$lang->ncenterlite_message_event = '쪽지 알림 설정';
$lang->ncenterlite_message_event_about = '쪽지 알림을 사용하지 않음(XE의 기본 쪽지 알림을 사용)';
$lang->ncenterlite_mid_use = '모듈별 사용 설정';
$lang->ncenterlite_to_block = '차단함';
$lang->ncenterlite_unblock = '차단 안함';
$lang->this_message_block = '이 게시글/댓글의 알림 차단여부';
$lang->about_this_message_block = '이 게시글/댓글의 알림을 차단합니다.';
$lang->ncenterlite_to_unsubscribe = '수신 거부';
$lang->ncenterlite_subscribe = '수신 거부 안함';
$lang->this_message_unsubscribe = '이 게시글/댓글의 알림 수신 거부';
$lang->about_this_message_unsubscribe = '이 게시글/댓글의 알림을 수신 거부합니다.';
$lang->unsubscribe_list = '수신 거부 리스트';
$lang->unsubscribe = '개별 문서/댓글 알림 수신 거부';
$lang->about_unsubscribe = '개별 문서/댓글 알림 수신을 거부하는 기능을 사용합니다.';
$lang->member_menu_view = '회원 메뉴 표시';
$lang->member_menu_on = '표시';
$lang->member_menu_off = '표시하지 않음';
@ -175,4 +178,4 @@ $lang->ncenterlite_custom_list = '커스텀 리스트';
$lang->msg_not_use_user_setting = '유저 세팅을 제공하지 않습니다. 관리자에게 문의하세요.';
$lang->msg_denger_rhymix_user = '<strong>경고!</strong> 라이믹스에서는 코어에 포함된 순정 알림센터를 사용해야 합니다.<br />XE용 알림센터를 삭제하고, 라이믹스 알림센터를 다시 설치해 주시기 바랍니다.';
$lang->msg_test_notifycation_success = '테스트알림더미를 정상적으로 생성하였습니다.';
$lang->msg_individual_block_not_support = '개별 차단 기능을 제공하지 않습니다. 관리자에게 문의하세요.';
$lang->msg_unsubscribe_block_not_support = '개별 수신 거부 기능을 제공하지 않습니다. 관리자에게 문의하세요.';

View file

@ -35,7 +35,7 @@ class ncenterliteAdminController extends ncenterlite
'highlight_effect',
'comment_all',
'comment_all_notify_module_srls',
'individual_block',
'unsubscribe',
);
foreach($config_vars as $val)

View file

@ -66,14 +66,15 @@ class ncenterliteController extends ncenterlite
}
}
function procNcenterliteInsertIndividualBlock()
function procNcenterliteInsertUnsubscribe()
{
/** @var ncenterliteModel $oNcenterliteModel */
$oNcenterliteModel = getModel('ncenterlite');
$config = $oNcenterliteModel->getConfig();
if($config->individual_block !== 'Y')
if($config->unsubscribe !== 'Y')
{
throw new Rhymix\Framework\Exception('msg_individual_block_not_support');
throw new Rhymix\Framework\Exception('msg_unsubscribe_block_not_support');
}
$member_srl = Context::get('member_srl');
@ -88,16 +89,16 @@ class ncenterliteController extends ncenterlite
}
$obj = Context::getRequestVars();
if($obj->individual_srl)
if($obj->unsubscribe_srl)
{
$userBlockData = $oNcenterliteModel->getUserIndividualBlockConfigByIndividualSrl($obj->individual_srl);
$userBlockData = $oNcenterliteModel->getUserUnsubscribeConfigByUnsubscribeSrl($obj->unsubscribe_srl);
}
else if($obj->target_srl)
{
$userBlockData = $oNcenterliteModel->getUserIndividualBlockConfigByTargetSrl($obj->target_srl, $member_srl);
$userBlockData = $oNcenterliteModel->getUserUnsubscribeConfigByTargetSrl($obj->target_srl, $member_srl);
}
if($obj->individual_type == 'document')
if($obj->unsubscribe_type == 'document')
{
$text = cut_str(getModel('document')->getDocument($obj->target_srl)->get('title'), 30);
}
@ -110,7 +111,7 @@ class ncenterliteController extends ncenterlite
$args = new stdClass();
$args->member_srl = $member_srl;
$args->target_srl = $obj->target_srl;
if($obj->individual_type == 'document')
if($obj->unsubscribe_type == 'document')
{
$args->document_srl = $obj->target_srl;
}
@ -118,7 +119,7 @@ class ncenterliteController extends ncenterlite
{
$args->document_srl = $comment->get('document_srl');
}
$args->individual_type = $obj->individual_type;
$args->unsubscribe_type = $obj->unsubscribe_type;
$args->text = $text;
if($obj->value == 'Y')
@ -126,8 +127,8 @@ class ncenterliteController extends ncenterlite
// 데이터가 있으면 차단, 데이터가 없으면 차단하지 않기 때문에 따로 업데이트를 하지 않는다.
if(!$userBlockData)
{
$args->individual_srl = getNextSequence();
$output = executeQuery('ncenterlite.insertIndividualBlock', $args);
$args->unsubscribe_srl = getNextSequence();
$output = executeQuery('ncenterlite.insertUnsubscribe', $args);
if(!$output->toBool())
{
return $output;
@ -135,13 +136,13 @@ class ncenterliteController extends ncenterlite
}
else
{
$args->individual_srl = $userBlockData->individual_srl;
$args->unsubscribe_srl = $userBlockData->unsubscribe_srl;
}
}
else
{
$args->individual_srl = $obj->individual_srl;
$output = executeQuery('ncenterlite.deleteIndividualBlock', $args);
$args->unsubscribe_srl = $obj->unsubscribe_srl;
$output = executeQuery('ncenterlite.deleteUnsubscribe', $args);
if(!$output->toBool())
{
return $output;
@ -155,7 +156,7 @@ class ncenterliteController extends ncenterlite
}
else
{
$this->setRedirectUrl(getNotEncodedUrl('act', 'dispNcenterliteIndividualBlockList', 'member_srl', $member_srl));
$this->setRedirectUrl(getNotEncodedUrl('act', 'dispNcenterliteUnsubscribeList', 'member_srl', $member_srl));
}
}
@ -393,12 +394,12 @@ class ncenterliteController extends ncenterlite
}
// 받는 사람이 문서를 차단하고 있을 경우
if($oNcenterliteModel->getUserIndividualBlockConfigByTargetSrl($document_srl, $abs_member_srl))
if($oNcenterliteModel->getUserUnsubscribeConfigByTargetSrl($document_srl, $abs_member_srl))
{
return;
}
if($oNcenterliteModel->getUserIndividualBlockConfigByTargetSrl($parent_srl, $abs_member_srl))
if($oNcenterliteModel->getUserUnsubscribeConfigByTargetSrl($parent_srl, $abs_member_srl))
{
return;
}
@ -436,7 +437,7 @@ class ncenterliteController extends ncenterlite
return;
}
if($oNcenterliteModel->getUserIndividualBlockConfigByTargetSrl($document_srl, $abs_member_srl))
if($oNcenterliteModel->getUserUnsubscribeConfigByTargetSrl($document_srl, $abs_member_srl))
{
return;
}
@ -1031,6 +1032,10 @@ class ncenterliteController extends ncenterlite
$target_srl = Context::get('target_srl');
$oMemberController->addMemberMenu('dispNcenterliteNotifyList', 'ncenterlite_my_list');
if($config->unsubscribe == 'Y')
{
$oMemberController->addMemberMenu('dispNcenterliteUnsubscribeList', 'unsubscribe_list');
}
}
if($config->user_notify_setting == 'Y')

View file

@ -670,16 +670,16 @@ class ncenterliteModel extends ncenterlite
return $output->data;
}
function getUserIndividualBlockConfigByIndividualSrl($individual_srl = 0)
function getUserUnsubscribeConfigByUnsubscribeSrl($unsubscribe_srl = 0)
{
$args = new stdClass();
$args->individual_srl = $individual_srl;
$output = executeQuery('ncenterlite.getUserIndividualBlockConfigByIndividualSrl', $args);
$args->unsubscribe_srl = $unsubscribe_srl;
$output = executeQuery('ncenterlite.getUserUnsubscribeConfigByUnsubscribeSrl', $args);
return $output->data;
}
function getUserIndividualBlockConfigByTargetSrl($target_srl = 0, $member_srl = null)
function getUserUnsubscribeConfigByTargetSrl($target_srl = 0, $member_srl = null)
{
if(!$member_srl)
{
@ -689,7 +689,7 @@ class ncenterliteModel extends ncenterlite
$args = new stdClass();
$args->target_srl = $target_srl;
$args->member_srl = $member_srl;
$output = executeQuery('ncenterlite.getUserIndividualBlockConfigByTargetSrl', $args);
$output = executeQuery('ncenterlite.getUserUnsubscribeConfigByTargetSrl', $args);
return $output->data;
}

View file

@ -72,15 +72,15 @@ class ncenterliteView extends ncenterlite
$this->setTemplateFile('userconfig');
}
function dispNcenterliteIndividualBlockList()
function dispNcenterliteUnsubscribeList()
{
/** @var ncenterliteModel $oNcenterliteModel */
$oNcenterliteModel = getModel('ncenterlite');
$config = $oNcenterliteModel->getConfig();
if($config->individual_block !== 'Y')
if($config->unsubscribe !== 'Y')
{
throw new Rhymix\Framework\Exception('msg_individual_block_not_support');
throw new Rhymix\Framework\Exception('msg_unsubscribe_block_not_support');
}
if(!Rhymix\Framework\Session::getMemberSrl())
@ -100,43 +100,43 @@ class ncenterliteView extends ncenterlite
$args->list_count = '20';
$args->page_count = '10';
$args->member_srl = $member_srl;
$output = executeQuery('ncenterlite.getIndividualBlockList', $args);
$output = executeQuery('ncenterlite.getUnsubscribeList', $args);
Context::set('total_count', $output->page_navigation->total_count);
Context::set('total_page', $output->page_navigation->total_page);
Context::set('page', $output->page);
Context::set('individual_list', $output->data);
Context::set('unsubscribe_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
$this->setTemplateFile('individualList');
$this->setTemplateFile('unsubscribeList');
}
function dispNcenterliteInsertIndividualBlock()
function dispNcenterliteInsertUnsubscribe()
{
/** @var ncenterliteModel $oNcenterliteModel */
$oNcenterliteModel = getModel('ncenterlite');
$target_srl = Context::get('target_srl');
$individual_srl = Context::get('individual_srl');
$individual_type = Context::get('individual_type');
$unsubscribe_srl = Context::get('unsubscribe_srl');
$unsubscribe_type = Context::get('unsubscribe_type');
$member_srl = Context::get('member_srl');
if($individual_srl)
if($unsubscribe_srl)
{
$output = $oNcenterliteModel->getUserIndividualBlockConfigByIndividualSrl($individual_srl);
$output = $oNcenterliteModel->getUserUnsubscribeConfigByUnsubscribeSrl($unsubscribe_srl);
}
else
{
$output = $oNcenterliteModel->getUserIndividualBlockConfigByTargetSrl($target_srl, $member_srl);
$output = $oNcenterliteModel->getUserUnsubscribeConfigByTargetSrl($target_srl, $member_srl);
}
if((!$target_srl || !$individual_type) && !$output)
if((!$target_srl || !$unsubscribe_type) && !$output)
{
throw new Rhymix\Framework\Exceptions\InvalidRequest;
}
if($individual_type == 'document')
if($unsubscribe_type == 'document')
{
$text = getModel('document')->getDocument($target_srl)->get('title');
$type = '문서';
@ -149,7 +149,7 @@ class ncenterliteView extends ncenterlite
}
else
{
Context::set('individual_type', 'comment');
Context::set('unsubscribe_type', 'comment');
$type = '댓글';
}
}
@ -168,16 +168,16 @@ class ncenterliteView extends ncenterlite
}
else
{
Context::set('individual_type', 'document');
Context::set('unsubscribe_type', 'document');
$type = '문서';
}
}
}
Context::set('individualData', $output);
Context::set('unsubscribeData', $output);
Context::set('text', $text);
Context::set('type', $type);
$this->setTemplateFile('individualBlock');
$this->setTemplateFile('unsubscribe');
}
}

View file

@ -1,8 +0,0 @@
<query id="deleteIndividualBlock" action="delete">
<tables>
<table name="ncenterlite_block_individual" />
</tables>
<conditions>
<condition operation="equal" column="individual_srl" var="individual_srl" notnull="notnull" filter="number" />
</conditions>
</query>

View file

@ -0,0 +1,8 @@
<query id="deleteUnsubscribeBlock" action="delete">
<tables>
<table name="ncenterlite_unsubscribe" />
</tables>
<conditions>
<condition operation="equal" column="unsubscribe_srl" var="unsubscribe_srl" notnull="notnull" filter="number" />
</conditions>
</query>

View file

@ -1,6 +1,6 @@
<query id="getIndividualBlockList" action="select">
<query id="getUnsubscribeBlockList" action="select">
<tables>
<table name="ncenterlite_block_individual" />
<table name="ncenterlite_unsubscribe" />
</tables>
<columns>
@ -11,7 +11,7 @@
<condition operation="equal" column="member_srl" var="member_srl" filter="number" notnull="notnull" />
</conditions>
<navigation>
<index default="individual_srl" var="list_order" order="desc" />
<index default="unsubscribe_srl" var="list_order" order="desc" />
<list_count var="list_count" default="5" />
<page_count var="page_count" default="2" />
<page var="page" default="1" />

View file

@ -1,13 +0,0 @@
<query id="getUserIndividualBlockConfigByIndividualSrl" action="select">
<tables>
<table name="ncenterlite_block_individual" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="individual_srl" var="individual_srl" filter="number" notnull="notnull" />
</conditions>
</query>

View file

@ -1,6 +1,6 @@
<query id="getUserIndividualBlockConfigByTargetSrl" action="select">
<query id="getUserUnsubscribeConfigByTargetSrl" action="select">
<tables>
<table name="ncenterlite_block_individual" />
<table name="ncenterlite_unsubscribe" />
</tables>
<columns>

View file

@ -0,0 +1,13 @@
<query id="getUserUnsubscribeBlockConfigByUnsubscribeSrl" action="select">
<tables>
<table name="ncenterlite_unsubscribe" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="unsubscribe_srl" var="unsubscribe_srl" filter="number" notnull="notnull" />
</conditions>
</query>

View file

@ -1,12 +1,12 @@
<query id="insertIndividualBlock" action="insert">
<query id="insertUnsubscribeBlock" action="insert">
<tables>
<table name="ncenterlite_block_individual" />
<table name="ncenterlite_unsubscribe" />
</tables>
<columns>
<column name="individual_srl" var="individual_srl" filter="number" notnull="notnull" />
<column name="unsubscribe_srl" var="unsubscribe_srl" filter="number" notnull="notnull" />
<column name="member_srl" var="member_srl" filter="number" notnull="notnull" />
<column name="target_srl" var="target_srl" filter="number" notnull="notnull" />
<column name="individual_type" var="individual_type" notnull="notnull" />
<column name="unsubscribe_type" var="unsubscribe_type" notnull="notnull" />
<column name="text" var="text" notnull="notnull" />
</columns>
</query>

View file

@ -1,7 +1,7 @@
<table name="ncenterlite_block_individual">
<column name="individual_srl" type="number" size="11" notnull="notnull" primary_key="primary_key" />
<table name="ncenterlite_unsubscribe">
<column name="unsubscribe_srl" type="number" size="11" notnull="notnull" primary_key="primary_key" />
<column name="member_srl" type="number" size="11" notnull="notnull" index="idx_member_srl" />
<column name="text" type="text" notnull="notnull" />
<column name="target_srl" type="number" size="11" notnull="notnull" />
<column name="individual_type" type="varchar" size="10" notnull="notnull" />
<column name="unsubscribe_type" type="varchar" size="10" notnull="notnull" />
</table>

View file

@ -2,23 +2,21 @@
<include target="../../../member/skins/default/common_header.html" />
<div class="xm">
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/ncenterlite/skins/default/individualblock/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/ncenterlite/skins/default/unsubscribe/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="insertConfig" action="./" method="post" class="form-horizontal" id="fo_ncenterlite">
<input type="hidden" name="module" value="ncenterlite" />
<input type="hidden" name="act" value="procNcenterliteInsertIndividualBlock" />
<input type="hidden" name="xe_validator_id" value="modules/ncenterlite/skins/default/individualblock/1" />
<!--@if($individualData)-->
<input type="hidden" name="target_srl" value="{$individualData->target_srl}" />
<input type="hidden" name="individual_srl" value="{$individualData->individual_srl}" />
<input type="hidden" name="individual_type" value="{$individualData->individual_type}" />
<input type="hidden" name="act" value="procNcenterliteInsertUnsubscribe" />
<input type="hidden" name="xe_validator_id" value="modules/ncenterlite/skins/default/unsubscribe/1" />
<!--@if($unsubscribeData)-->
<input type="hidden" name="target_srl" value="{$unsubscribeData->target_srl}" />
<input type="hidden" name="unsubscribe_srl" value="{$unsubscribeData->unsubscribe_srl}" />
<input type="hidden" name="unsubscribe_type" value="{$unsubscribeData->unsubscribe_type}" />
<!--@else-->
<input type="hidden" name="target_srl" value="{$target_srl}" />
<input type="hidden" name="individual_srl" value="{$individual_srl}" />
<input type="hidden" name="individual_type" value="{$individual_type}" />
<input type="hidden" name="unsubscribe_srl" value="{$unsubscribe_srl}" />
<input type="hidden" name="unsubscribe_type" value="{$unsubscribe_type}" />
<!--@end-->
<section class="section">
<div class="control-group">
@ -33,8 +31,8 @@
<label class="control-label">내용</label>
<div class="controls">
<p>
<!--@if($individualData)-->
{$individualData->text}
<!--@if($unsubscribeData)-->
{$unsubscribeData->text}
<!--@else-->
{$text}
<!--@end-->
@ -43,15 +41,15 @@
</div>
<div class="control-group">
<label class="control-label">{$lang->this_message_block}</label>
<label class="control-label">{$lang->this_message_unsubscribe}</label>
<div class="controls">
<label class="inline">
<input type="radio" name="value" value="Y" checked="checked"|cond="$individualData->value != 'N'" /> {$lang->ncenterlite_to_block}
<input type="radio" name="value" value="Y" checked="checked"|cond="$unsubscribeData->value != 'N'" /> {$lang->ncenterlite_to_unsubscribe}
</label>
<label class="inline">
<input type="radio" name="value" value="N" checked="checked"|cond="$individualData->value == 'N'" /> {$lang->ncenterlite_unblock}
<input type="radio" name="value" value="N" checked="checked"|cond="$unsubscribeData->value == 'N'" /> {$lang->ncenterlite_subscribe}
</label>
<p>{$lang->about_this_message_block}</p>
<p>{$lang->about_this_message_unsubscribe}</p>
</div>
</div>
</section>

View file

@ -1,4 +1,7 @@
<include target="../../../member/skins/default/common_header.html" />
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/ncenterlite/skins/default/unsubscribe/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<table class="table table-striped table-hover" style="margin-top:20px;">
<thead class="bg_f_f9">
<tr>
@ -8,18 +11,18 @@
</tr>
</thead>
<tbody>
<!--@foreach($individual_list as $no => $val)-->
<!--@foreach($unsubscribe_list as $no => $val)-->
<tr>
<td>
<!--@if($val->individual_type == 'document')-->
<!--@if($val->unsubscribe_type == 'document')-->
<span>문서</span>
<!--@else-->
<span>댓글</span>
<!--@end-->
</td>
<td>
<!--@if($val->individual_type == 'document')-->
<a href="{getUrl('', 'document_srl', $val->target_url)}">{$val->text}</a>
<!--@if($val->unsubscribe_type == 'document')-->
<a href="{getUrl('', 'document_srl', $val->target_srl)}">{$val->text}</a>
<!--@else-->
<a href="{getUrl('', 'document_srl', $val->document_srl)}#{$val->target_srl}">{$val->text}</a>
<!--@end-->
@ -28,13 +31,14 @@
<form action="./" method="post">
<fieldset>
<input type="hidden" name="module" value="ncenterlite" />
<input type="hidden" name="act" value="procNcenterliteInsertIndividualBlock" />
<input type="hidden" name="act" value="procNcenterliteInsertUnsubscribe" />
<input type="hidden" name="xe_validator_id" value="modules/ncenterlite/skins/default/unsubscribe/1" />
<input type="hidden" name="target_srl" value="{$val->target_srl}" />
<input type="hidden" name="individual_type" value="{$val->individual_type}" />
<input type="hidden" name="individual_srl" value="{$val->individual_srl}" />
<select name="value" style="width:75px;">
<option value="Y">{$lang->ncenterlite_to_block}</option>
<option value="N">{$lang->ncenterlite_unblock}</option>
<input type="hidden" name="unsubscribe_type" value="{$val->unsubscribe_type}" />
<input type="hidden" name="unsubscribe_srl" value="{$val->unsubscribe_srl}" />
<select name="value" style="width:175px;">
<option value="Y">{$lang->ncenterlite_to_unsubscribe}</option>
<option value="N">{$lang->ncenterlite_subscribe}</option>
</select>
<button type="submit" class="x_btn">{$lang->cmd_setup}</button>
</fieldset>

View file

@ -95,15 +95,15 @@
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">개별 문서/댓글 알림 차단</label>
<label class="x_control-label">{$lang->unsubscribe}</label>
<div class="x_controls">
<label class="x_inline">
<input type="radio" name="individual_block" value="Y" checked="checked"|cond="$config->individual_block === 'Y'" /> {$lang->use}
<input type="radio" name="unsubscribe" value="Y" checked="checked"|cond="$config->unsubscribe === 'Y'" /> {$lang->use}
</label>
<label class="x_inline">
<input type="radio" name="individual_block" value="N" checked="checked"|cond="$config->individual_block !== 'Y'" /> {$lang->notuse}
<input type="radio" name="unsubscribe" value="N" checked="checked"|cond="$config->unsubscribe !== 'Y'" /> {$lang->notuse}
</label>
<p class="x_help-block">{$lang->about_highlight_effect}</p>
<p class="x_help-block">{$lang->about_unsubscribe}</p>
</div>
</div>
</section>