Fix #2235 allow selecting searchable types in integration search module

This commit is contained in:
Kijin Sung 2023-12-30 21:31:06 +09:00
parent 9fae527d3f
commit 12a4f5ed77
7 changed files with 170 additions and 56 deletions

View file

@ -31,9 +31,18 @@ class integration_searchAdminController extends integration_search
$config->skin = Context::get('skin'); $config->skin = Context::get('skin');
$config->mskin = Context::get('mskin'); $config->mskin = Context::get('mskin');
$config->block_robots = Context::get('block_robots') === 'N' ? false : true; $config->block_robots = Context::get('block_robots') === 'N' ? false : true;
$config->target_types = [];
$target_types = Context::get('target_types') ?? [];
foreach (['document', 'comment', 'multimedia', 'file'] as $type)
{
$config->target_types[$type] = in_array($type, $target_types);
}
$config->target = Context::get('target'); $config->target = Context::get('target');
$config->target_module_srl = Context::get('target_module_srl'); $config->target_module_srl = Context::get('target_module_srl');
if(!$config->target_module_srl) $config->target_module_srl = ''; if (!$config->target_module_srl)
{
$config->target_module_srl = '';
}
$oModuleController = getController('module'); $oModuleController = getController('module');
$output = $oModuleController->insertModuleConfig('integration_search', $config); $output = $oModuleController->insertModuleConfig('integration_search', $config);
@ -56,13 +65,13 @@ class integration_searchAdminController extends integration_search
// Get skin information (to check extra_vars) // Get skin information (to check extra_vars)
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $config->skin); $skin_info = $oModuleModel->loadSkinInfo($this->module_path, $config->skin);
// Check received variables (delete the basic variables such as mo, act, module_srl, page) // Check received variables (delete the basic variables such as mo, act, module_srl, page)
$obj = Context::getRequestVars(); $obj = Context::getRequestVars();
unset($obj->act); unset($obj->act);
unset($obj->module_srl); unset($obj->module_srl);
unset($obj->page); unset($obj->page);
// Separately handle if the extra_vars is an image type in the original skin_info // Separately handle if the extra_vars is an image type in the original skin_info
if($skin_info->extra_vars) if($skin_info->extra_vars)
{ {
@ -114,8 +123,8 @@ class integration_searchAdminController extends integration_search
$obj->{$vars->name} = $filename; $obj->{$vars->name} = $filename;
} }
} }
// Serialize and save // Serialize and save
$config->skin_vars = serialize($obj); $config->skin_vars = serialize($obj);
$oModuleController = getController('module'); $oModuleController = getController('module');

View file

@ -146,6 +146,8 @@ class integration_searchView extends integration_search
// Search by search tab // Search by search tab
$where = Context::get('where'); $where = Context::get('where');
Context::set('where', $where); Context::set('where', $where);
$target_types = $config->target_types ?? ['document' => true, 'comment' => true, 'multimedia' => true, 'file' => true];
Context::set('target_types', $target_types);
// Create integration search model object // Create integration search model object
if($is_keyword) if($is_keyword)
@ -159,31 +161,86 @@ class integration_searchView extends integration_search
$search_target = Context::get('search_target'); $search_target = Context::get('search_target');
if(!in_array($search_target, array('title','content','title_content','tag'))) $search_target = 'title_content'; if(!in_array($search_target, array('title','content','title_content','tag'))) $search_target = 'title_content';
Context::set('search_target', $search_target); Context::set('search_target', $search_target);
if ($target_types['document'])
$output = $oIS->getDocuments($target, $module_srl_list, $search_target, $is_keyword, $page, 10); {
$output = $oIS->getDocuments($target, $module_srl_list, $search_target, $is_keyword, $page, 10);
}
else
{
$output = new BaseObject;
}
Context::set('output', $output); Context::set('output', $output);
$this->setTemplateFile("document", $page); $this->setTemplateFile("document", $page);
break; break;
case 'comment' : case 'comment' :
$output = $oIS->getComments($target, $module_srl_list, $is_keyword, $page, 10); if ($target_types['comment'])
{
$output = $oIS->getComments($target, $module_srl_list, $is_keyword, $page, 10);
}
else
{
$output = new BaseObject;
}
Context::set('output', $output); Context::set('output', $output);
$this->setTemplateFile("comment", $page); $this->setTemplateFile("comment", $page);
break; break;
case 'multimedia' : case 'multimedia' :
$output = $oIS->getImages($target, $module_srl_list, $is_keyword, $page,20); if ($target_types['multimedia'])
{
$output = $oIS->getImages($target, $module_srl_list, $is_keyword, $page,20);
}
else
{
$output = new BaseObject;
}
Context::set('output', $output); Context::set('output', $output);
$this->setTemplateFile("multimedia", $page); $this->setTemplateFile("multimedia", $page);
break; break;
case 'file' : case 'file' :
$output = $oIS->getFiles($target, $module_srl_list, $is_keyword, $page, 20); if ($target_types['file'])
{
$output = $oIS->getFiles($target, $module_srl_list, $is_keyword, $page, 20);
}
else
{
$output = new BaseObject;
}
Context::set('output', $output); Context::set('output', $output);
$this->setTemplateFile("file", $page); $this->setTemplateFile("file", $page);
break; break;
default : default :
$output['document'] = $oIS->getDocuments($target, $module_srl_list, 'title_content', $is_keyword, $page, 5); if ($target_types['document'])
$output['comment'] = $oIS->getComments($target, $module_srl_list, $is_keyword, $page, 5); {
$output['multimedia'] = $oIS->getImages($target, $module_srl_list, $is_keyword, $page, 5); $output['document'] = $oIS->getDocuments($target, $module_srl_list, 'title_content', $is_keyword, $page, 5);
$output['file'] = $oIS->getFiles($target, $module_srl_list, $is_keyword, $page, 5); }
else
{
$output['document'] = new BaseObject;
}
if ($target_types['comment'])
{
$output['comment'] = $oIS->getComments($target, $module_srl_list, $is_keyword, $page, 5);
}
else
{
$output['comment'] = new BaseObject;
}
if ($target_types['multimedia'])
{
$output['multimedia'] = $oIS->getImages($target, $module_srl_list, $is_keyword, $page, 5);
}
else
{
$output['multimedia'] = new BaseObject;
}
if ($target_types['file'])
{
$output['file'] = $oIS->getFiles($target, $module_srl_list, $is_keyword, $page, 5);
}
else
{
$output['file'] = new BaseObject;
}
$output['trackback'] = new BaseObject; $output['trackback'] = new BaseObject;
Context::set('search_result', $output); Context::set('search_result', $output);
Context::set('search_target', 'title_content'); Context::set('search_target', 'title_content');

View file

@ -10,7 +10,9 @@ $lang->msg_admin_not_enabled = 'The integrated search is not available. Please s
$lang->is_result_text = 'There are <strong>%d</strong> result(s) for <strong>\'%s\'</strong>'; $lang->is_result_text = 'There are <strong>%d</strong> result(s) for <strong>\'%s\'</strong>';
$lang->multimedia = 'Images/Video'; $lang->multimedia = 'Images/Video';
$lang->integration_search_block_robots = 'Block Robots'; $lang->integration_search_block_robots = 'Block Robots';
$lang->include_search_target = 'Search for selected modules'; $lang->integration_search_target_types = 'Search Types';
$lang->integration_search_target_modules = 'Search Modules';
$lang->include_search_target = 'Search selected modules only';
$lang->exclude_search_target = 'Exclude selected modules from search'; $lang->exclude_search_target = 'Exclude selected modules from search';
$lang->is_search_option['document']['title_content'] = 'Subject+Content'; $lang->is_search_option['document']['title_content'] = 'Subject+Content';
$lang->is_search_option['document']['title'] = 'Subject'; $lang->is_search_option['document']['title'] = 'Subject';

View file

@ -10,8 +10,10 @@ $lang->msg_admin_not_enabled = '통합 검색을 사용할 수 없습니다. 통
$lang->is_result_text = '<strong>\'%s\'</strong>에 대한 검색결과 <strong>%d</strong>건'; $lang->is_result_text = '<strong>\'%s\'</strong>에 대한 검색결과 <strong>%d</strong>건';
$lang->multimedia = '이미지/동영상'; $lang->multimedia = '이미지/동영상';
$lang->integration_search_block_robots = '로봇 접근 차단'; $lang->integration_search_block_robots = '로봇 접근 차단';
$lang->include_search_target = '선택된 대상만 검색'; $lang->integration_search_target_types = '검색 대상 종류';
$lang->exclude_search_target = '선택된 대상을 검색에서 제외'; $lang->integration_search_target_modules = '검색 대상 페이지';
$lang->include_search_target = '선택한 모듈만 검색';
$lang->exclude_search_target = '선택한 모듈을 검색에서 제외';
$lang->is_search_option['document']['title_content'] = '제목+내용'; $lang->is_search_option['document']['title_content'] = '제목+내용';
$lang->is_search_option['document']['title'] = '제목'; $lang->is_search_option['document']['title'] = '제목';
$lang->is_search_option['document']['content'] = '내용'; $lang->is_search_option['document']['content'] = '내용';

View file

@ -2,14 +2,14 @@
{@ $_loaded = true; } {@ $_loaded = true; }
<!--// 컬러셋 체크 --> <!--// 컬러셋 체크 -->
<!--@if($module_info->colorset != "white")--> <!--@if(!isset($module_info->colorset) || $module_info->colorset !== 'white')-->
{@if(!is_object($module_info)) $module_info = new stdClass;} {@ $module_info = $module_info ?? new stdClass}
{@$module_info->colorset = "white"} {@ $module_info->colorset = 'white'}
<!--@end--> <!--@end-->
<!--// CSS 파일 로드 (컬러셋에 따라서) --> <!--// CSS 파일 로드 (컬러셋에 따라서) -->
<!--@if($module_info->colorset == "white")--> <!--@if($module_info->colorset === 'white')-->
<!--%import("white.css")--> <load target="white.css" />
<!--@end--> <!--@end-->
<div id="spot"> <div id="spot">
@ -24,11 +24,28 @@
</div> </div>
<ul class="localNavigation"> <ul class="localNavigation">
<li <!--@if(!$where)-->class="on"<!--@end-->><a href="{getAutoEncodedUrl('where','','page','','division','')}">{$lang->integration_search}</a></li> <li class="on"|cond="!$where">
<li <!--@if($where=='document')-->class="on"<!--@end-->><a href="{getAutoEncodedUrl('where','document','page',1,'division','')}">{$lang->document}</a></li> <a href="{getAutoEncodedUrl('where','','page','','division','')}">{$lang->integration_search}</a>
<li <!--@if($where=='comment')-->class="on"<!--@end-->><a href="{getAutoEncodedUrl('where','comment','page',1,'division','')}">{$lang->comment}</a></li> </li>
<li cond="$trackback_module_exist" <!--@if($where=='trackback')-->class="on"<!--@end-->><a href="{getAutoEncodedUrl('where','trackback','page',1,'division','')}">{$lang->trackback}</a></li> <!--@if($target_types['document'])-->
<li <!--@if($where=='multimedia')-->class="on"<!--@end-->><a href="{getAutoEncodedUrl('where','multimedia','page',1,'division','')}">{$lang->multimedia}</a></li> <li class="on"|cond="$where=='document'">
<li <!--@if($where=='file')-->class="on"<!--@end-->><a href="{getAutoEncodedUrl('where','file','page',1,'division','')}">{$lang->file}</a></li> <a href="{getAutoEncodedUrl('where','document','page',1,'division','')}">{$lang->document}</a>
</ul> </li>
<!--@endif-->
<!--@if($target_types['comment'])-->
<li class="on"|cond="$where=='comment'">
<a href="{getAutoEncodedUrl('where','comment','page',1,'division','')}">{$lang->comment}</a>
</li>
<!--@endif-->
<!--@if($target_types['multimedia'])-->
<li class="on"|cond="$where=='multimedia'">
<a href="{getAutoEncodedUrl('where','multimedia','page',1,'division','')}">{$lang->multimedia}</a>
</li>
<!--@endif-->
<!--@if($target_types['file'])-->
<li class="on"|cond="$where=='file'">
<a href="{getAutoEncodedUrl('where','file','page',1,'division','')}">{$lang->file}</a>
</li>
<!--@endif-->
</ul>
<!--@end--> <!--@end-->

View file

@ -1,25 +1,33 @@
<!--#include("header.html")--> <include target="header.html" />
{@ $output = $search_result['document'] } <!--@if($target_types['document'])-->
<!--#include("document.html")--> {@ $output = $search_result['document']}
<!--@if($output->data)--> <include target="document.html" />
<div class="isMore"><a href="{getAutoEncodedUrl('where','document','page',1)}">more</a></div> <!--@if($output->data)-->
<!--@end--> <div class="isMore"><a href="{getAutoEncodedUrl('where','document','page',1)}">more</a></div>
<!--@endif-->
<!--@endif-->
{@ $output = $search_result['comment'] } <!--@if($target_types['comment'])-->
<!--#include("comment.html")--> {@ $output = $search_result['comment']}
<!--@if($output->data)--> <include target="comment.html" />
<div class="isMore"><a href="{getAutoEncodedUrl('where','comment','page',1)}">more</a></div> <!--@if($output->data)-->
<!--@end--> <div class="isMore"><a href="{getAutoEncodedUrl('where','comment','page',1)}">more</a></div>
<!--@endif-->
<!--@endif-->
{@ $output = $search_result['multimedia'] } <!--@if($target_types['multimedia'])-->
<!--#include("multimedia.html")--> {@ $output = $search_result['multimedia']}
<!--@if($output->data)--> <include target="multimedia.html" />
<div class="isMore"><a href="{getAutoEncodedUrl('where','multimedia','page',1)}">more</a></div> <!--@if($output->data)-->
<!--@end--> <div class="isMore"><a href="{getAutoEncodedUrl('where','multimedia','page',1)}">more</a></div>
<!--@endif-->
<!--@endif-->
{@ $output = $search_result['file'] } <!--@if($target_types['file'])-->
<!--#include("file.html")--> {@ $output = $search_result['file']}
<!--@if($output->data)--> <include target="file.html" />
<div class="isMore"><a href="{getAutoEncodedUrl('where','file','page',1)}">more</a></div> <!--@if($output->data)-->
<!--@end--> <div class="isMore"><a href="{getAutoEncodedUrl('where','file','page',1)}">more</a></div>
<!--@endif-->
<!--@endif-->

View file

@ -34,16 +34,35 @@
</div> </div>
</div> </div>
<div class="x_control-group"> <div class="x_control-group">
<label for="block_robots" class="x_control-label">{$lang->integration_search_block_robots}</label> <label class="x_control-label">{$lang->integration_search_block_robots}</label>
<div class="x_controls"> <div class="x_controls">
<select name="block_robots" id="block_robots"> <label for="block_robots_Y" class="x_inline">
<option value="Y" selected="selected"|cond="!isset($config->block_robots) || $config->block_robots">{$lang->cmd_yes}</option> <input type="radio" name="block_robots" id="block_robots_Y" value="Y" checked="checked"|cond="!isset($config->block_robots) || $config->block_robots" /> {$lang->cmd_yes}
<option value="N" selected="selected"|cond="isset($config->block_robots) && !$config->block_robots">{$lang->cmd_no}</option> </label>
</select> <label for="block_robots_N" class="x_inline">
<input type="radio" name="block_robots" id="block_robots_N" value="N" checked="checked"|cond="isset($config->block_robots) && !$config->block_robots" /> {$lang->cmd_no}
</label>
</div> </div>
</div> </div>
<div class="x_control-group"> <div class="x_control-group">
<label class="x_control-label">{$lang->target}</label> <label class="x_control-label">{$lang->integration_search_target_types}</label>
<div class="x_controls">
<label class="x_inline">
<input type="checkbox" name="target_types[]" value="document" checked="checked"|cond="!isset($config->target_types) || !empty($config->target_types['document'])" /> {$lang->document}
</label>
<label class="x_inline">
<input type="checkbox" name="target_types[]" value="comment" checked="checked"|cond="!isset($config->target_types) || !empty($config->target_types['comment'])" /> {$lang->comment}
</label>
<label class="x_inline">
<input type="checkbox" name="target_types[]" value="multimedia" checked="checked"|cond="!isset($config->target_types) || !empty($config->target_types['multimedia'])" /> {$lang->multimedia}
</label>
<label class="x_inline">
<input type="checkbox" name="target_types[]" value="file" checked="checked"|cond="!isset($config->target_types) || !empty($config->target_types['file'])" /> {$lang->file}
</label>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->integration_search_target_modules}</label>
<div class="x_controls"> <div class="x_controls">
<select name="target"> <select name="target">
<option value="include">{$lang->include_search_target}</option> <option value="include">{$lang->include_search_target}</option>