/** * Get liked members common api controller * * @access protected * @param string $parent_table target parent table * @param int $parent_id target parent record id * @param string $public_flag_related related table for check brows authority * @param array $parent_member_id_relateds related table and property array for check edit authority * @param int $limit record count for get * @param int $limit_max record limited count for get * @param string $parent_id_prop parent table id property. * @return Response (json|html) * @throws Exception in Controller_Base::controller_common_api * @see Controller_Base::controller_common_api */ protected function api_get_liked_members_common($parent_table, $parent_id, $public_flag_related = null, $parent_member_id_relateds = array(), $limit = 0, $limit_max = 0, $parent_id_prop = null) { $this->api_accept_formats = array('json', 'html'); $this->controller_common_api(function () use($parent_table, $parent_id, $public_flag_related, $parent_member_id_relateds, $limit, $limit_max, $parent_id_prop) { if (!conf('like.isEnabled')) { throw new HttpNotFoundException(); } $like_model = Site_Model::get_model_name($parent_table . '_like'); $parent_id = (int) $parent_id; $parent_model = Site_Model::get_model_name($parent_table); $parent_obj = $parent_model::check_authority($parent_id, 0, $public_flag_related); if (!$parent_id_prop) { $parent_id_prop = $parent_table . '_id'; } $auther_member_ids = Util_Orm::get_related_member_ids($parent_obj, $parent_member_id_relateds); foreach ($auther_member_ids as $member_id) { $this->check_browse_authority($public_flag_related ? $parent_obj->{$public_flag_related}->public_flag : $parent_obj->public_flag, $member_id); } $default_params = array('desc' => 1, 'latest' => 1, 'limit' => $limit ?: conf('view_params_default.like.members.popover.limit')); list($limit, $is_latest, $is_desc, $since_id, $max_id) = $this->common_get_list_params($default_params, $limit_max ?: conf('view_params_default.like.members.popover.limit_max')); $params[$parent_id_prop] = $parent_id; list($list, $next_id) = $like_model::get_list($params, $limit, $is_latest, $is_desc, $since_id, $max_id, 'member', $this->format == 'json'); $data = array('list' => $list, 'next_id' => $next_id); if ($this->format == 'html') { $data += array('related_member_table_name' => 'member', 'is_simple_list' => true, 'list_id' => 'liked_member_list_' . $parent_id, 'get_uri' => Site_Util::get_api_uri_get_liked_members(Site_Model::convert_table2controller_path($parent_table), $parent_id), 'no_data_message' => sprintf('%sしている%sはいません', term('form.like'), term('member.view'))); if ($since_id) { $data['since_id'] = $since_id; } } $this->set_response_body_api($data, $this->format == 'html' ? '_parts/member_list' : null); }); }