mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-04 01:01:41 +09:00
Fix #955 exclude inaccessible modules from integration search
This commit is contained in:
parent
f0ad692650
commit
fbd9af16a9
3 changed files with 101 additions and 27 deletions
|
|
@ -30,21 +30,24 @@ class integration_searchModel extends module
|
|||
*/
|
||||
function getDocuments($target, $module_srls_list, $search_target, $search_keyword, $page=1, $list_count = 20)
|
||||
{
|
||||
if(is_array($module_srls_list)) $module_srls_list = implode(',',$module_srls_list);
|
||||
if(!is_array($module_srls_list))
|
||||
{
|
||||
$module_srls_list = $module_srl_list ? explode(',', $module_srls_list) : array();
|
||||
}
|
||||
$accessible_modules = array_keys(getModel('module')->getAccessibleModuleList());
|
||||
|
||||
$args = new stdClass();
|
||||
if($target == 'exclude')
|
||||
{
|
||||
$module_srls_list .= ',0'; // exclude 'trash'
|
||||
if ($module_srls_list{0} == ',') $module_srls_list = substr($module_srls_list, 1);
|
||||
$args->exclude_module_srl = $module_srls_list;
|
||||
$args->module_srl = $accessible_modules;
|
||||
$args->exclude_module_srl = array_diff($module_srls_list, $accessible_modules);
|
||||
}
|
||||
else
|
||||
{
|
||||
$args->module_srl = $module_srls_list;
|
||||
$args->exclude_module_srl = '0'; // exclude 'trash'
|
||||
$args->module_srl = array_intersect($module_srls_list, $accessible_modules);
|
||||
$args->exclude_module_srl = array(0); // exclude 'trash'
|
||||
}
|
||||
|
||||
|
||||
$args->page = $page;
|
||||
$args->list_count = $list_count;
|
||||
$args->page_count = 10;
|
||||
|
|
@ -73,21 +76,23 @@ class integration_searchModel extends module
|
|||
*/
|
||||
function getComments($target, $module_srls_list, $search_keyword, $page=1, $list_count = 20)
|
||||
{
|
||||
$args = new stdClass();
|
||||
|
||||
if(is_array($module_srls_list))
|
||||
if(!is_array($module_srls_list))
|
||||
{
|
||||
if (count($module_srls_list) > 0) $module_srls = implode(',',$module_srls_list);
|
||||
$module_srls_list = $module_srl_list ? explode(',', $module_srls_list) : array();
|
||||
}
|
||||
$accessible_modules = array_keys(getModel('module')->getAccessibleModuleList());
|
||||
|
||||
$args = new stdClass();
|
||||
if($target == 'exclude')
|
||||
{
|
||||
$args->module_srl = $accessible_modules;
|
||||
$args->exclude_module_srl = array_diff($module_srls_list, $accessible_modules);
|
||||
}
|
||||
else
|
||||
{
|
||||
if($module_srls_list)
|
||||
{
|
||||
$module_srls = $module_srls_list;
|
||||
}
|
||||
$args->module_srl = array_intersect($module_srls_list, $accessible_modules);
|
||||
$args->exclude_module_srl = array(0); // exclude 'trash'
|
||||
}
|
||||
if($target == 'exclude') $args->exclude_module_srl = $module_srls;
|
||||
else $args->module_srl = $module_srls;
|
||||
|
||||
$args->page = $page;
|
||||
$args->list_count = $list_count;
|
||||
|
|
@ -120,12 +125,25 @@ class integration_searchModel extends module
|
|||
{
|
||||
$oTrackbackModel = getAdminModel('trackback');
|
||||
if(!$oTrackbackModel) return new BaseObject();
|
||||
$args = new stdClass();
|
||||
|
||||
if(is_array($module_srls_list)) $module_srls = implode(',',$module_srls_list);
|
||||
else $module_srls = $module_srls_list;
|
||||
if($target == 'exclude') $args->exclude_module_srl = $module_srls;
|
||||
else $args->module_srl = $module_srls;
|
||||
if(!is_array($module_srls_list))
|
||||
{
|
||||
$module_srls_list = $module_srl_list ? explode(',', $module_srls_list) : array();
|
||||
}
|
||||
$accessible_modules = array_keys(getModel('module')->getAccessibleModuleList());
|
||||
|
||||
$args = new stdClass();
|
||||
if($target == 'exclude')
|
||||
{
|
||||
$args->module_srl = $accessible_modules;
|
||||
$args->exclude_module_srl = array_diff($module_srls_list, $accessible_modules);
|
||||
}
|
||||
else
|
||||
{
|
||||
$args->module_srl = array_intersect($module_srls_list, $accessible_modules);
|
||||
$args->exclude_module_srl = array(0); // exclude 'trash'
|
||||
}
|
||||
|
||||
$args->page = $page;
|
||||
$args->list_count = $list_count;
|
||||
$args->page_count = 10;
|
||||
|
|
@ -153,12 +171,24 @@ class integration_searchModel extends module
|
|||
*/
|
||||
function _getFiles($target, $module_srls_list, $search_keyword, $page, $list_count, $direct_download = 'Y')
|
||||
{
|
||||
$args = new stdClass();
|
||||
if(!is_array($module_srls_list))
|
||||
{
|
||||
$module_srls_list = $module_srl_list ? explode(',', $module_srls_list) : array();
|
||||
}
|
||||
$accessible_modules = array_keys(getModel('module')->getAccessibleModuleList());
|
||||
|
||||
if(is_array($module_srls_list)) $module_srls = implode(',',$module_srls_list);
|
||||
else $module_srls = $module_srls_list;
|
||||
if($target == 'exclude') $args->exclude_module_srl = $module_srls;
|
||||
else $args->module_srl = $module_srls;
|
||||
$args = new stdClass();
|
||||
if($target == 'exclude')
|
||||
{
|
||||
$args->module_srl = $accessible_modules;
|
||||
$args->exclude_module_srl = array_diff($module_srls_list, $accessible_modules);
|
||||
}
|
||||
else
|
||||
{
|
||||
$args->module_srl = array_intersect($module_srls_list, $accessible_modules);
|
||||
$args->exclude_module_srl = array(0); // exclude 'trash'
|
||||
}
|
||||
|
||||
$args->page = $page;
|
||||
$args->list_count = $list_count;
|
||||
$args->page_count = 10;
|
||||
|
|
|
|||
|
|
@ -3253,6 +3253,7 @@ class memberController extends member
|
|||
$member_srl = intval($member_srl);
|
||||
Rhymix\Framework\Cache::delete("member:member_info:$member_srl");
|
||||
Rhymix\Framework\Cache::delete("member:member_groups:$member_srl:site:$site_srl");
|
||||
Rhymix\Framework\Cache::delete("site_and_module:accessible_modules:$member_srl");
|
||||
if ($site_srl != 0)
|
||||
{
|
||||
Rhymix\Framework\Cache::delete("member:member_groups:$member_srl:site:0");
|
||||
|
|
|
|||
|
|
@ -2185,6 +2185,49 @@ class moduleModel extends module
|
|||
return $__cache = $grant;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of modules that the member can access.
|
||||
*
|
||||
* @param object $member_info
|
||||
* @return array
|
||||
*/
|
||||
function getAccessibleModuleList($member_info = null)
|
||||
{
|
||||
if(!$member_info)
|
||||
{
|
||||
$member_info = Context::get('logged_info');
|
||||
}
|
||||
|
||||
$result = Rhymix\Framework\Cache::get(sprintf('site_and_module:accessible_modules:%d', $member_info->member_srl));
|
||||
if($result === null)
|
||||
{
|
||||
$mid_list = $this->getMidList();
|
||||
$result = array();
|
||||
|
||||
foreach($mid_list as $module_info)
|
||||
{
|
||||
$grant = $this->getGrant($module_info, $member_info);
|
||||
if(!$grant->access)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
foreach(array('list', 'view') as $require_grant)
|
||||
{
|
||||
if(isset($grant->{$require_grant}) && $grant->{$require_grant} === false)
|
||||
{
|
||||
continue 2;
|
||||
}
|
||||
}
|
||||
$result[$module_info->module_srl] = $module_info;
|
||||
}
|
||||
ksort($result);
|
||||
|
||||
Rhymix\Framework\Cache::set(sprintf('site_and_module:accessible_modules:%d', $member_info->member_srl), $result);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get privileges(granted) information of the member for target module by target_srl
|
||||
* @param string $target_srl as module_srl. It may be a reference serial number
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue