diff --git a/modules/integration_search/integration_search.model.php b/modules/integration_search/integration_search.model.php index d6ef8d796..04f316c97 100644 --- a/modules/integration_search/integration_search.model.php +++ b/modules/integration_search/integration_search.model.php @@ -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; diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index 6cb5dfd7c..ddcba0857 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -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"); diff --git a/modules/module/module.model.php b/modules/module/module.model.php index aaee58412..aef212c81 100644 --- a/modules/module/module.model.php +++ b/modules/module/module.model.php @@ -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