/** * 再帰的にフォルダIDを取得 * */ static function get_recursive_folder_id_array($folder_id_array) { $ret_folder_id_array = $folder_id_array; foreach ($folder_id_array as $folder_id) { $sub_folder_id_array = ACSGenericFolder::get_sub_folder_id_array($folder_id); if (count($sub_folder_id_array)) { // サブフォルダがあるとき $ret_folder_id_array = array_merge($ret_folder_id_array, ACSGenericFolder::get_recursive_folder_id_array($sub_folder_id_array)); } } return $ret_folder_id_array; }
/** * 全コミュニティプットファイル検索 * * @param $community_where putコミュニティ検索条件 * @param $unread_check_user_community_id unreadチェック実施時のユーザコミュニティid * @param $form 検索条件 * @return フォルダ情報の配列 */ function search_all_put_file_info_row_array($form, $community_where = "", $unread_check_user_community_id = "", $days = false) { // 1. コミュニティにプットされてるユーザフォルダのfolder_idを全て取得する $sql = "SELECT folder_id"; $sql .= " FROM put_community"; if ($community_where != "") { $sql .= " WHERE " . $community_where; } $row_array = ACSDB::_get_row_array($sql); $folder_id_array = array(); foreach ($row_array as $row) { array_push($folder_id_array, $row['folder_id']); } if (count($folder_id_array) == 0) { // 0件 return array(); } // 2. コミュニティフォルダからアクセス可能な中身のフォルダのfolder_idを全て取得する $user_folder_id_array = ACSGenericFolder::get_recursive_folder_id_array($folder_id_array); if (count($user_folder_id_array) == 0) { // 0件 return array(); } // 3. 検索対象となる、ユーザがプットしたフォルダ以下のフォルダID CSV $user_folder_id_array_csv = implode(',', $user_folder_id_array); $sql = "SELECT * "; if ($unread_check_user_community_id != '') { $sql .= ",acs_is_unread_file(" . $unread_check_user_community_id . ",file_info.file_id) as is_unread "; } $sql .= " FROM folder LEFT OUTER JOIN put_community ON folder.folder_id = put_community.folder_id, folder_file, file_info"; $sql .= " WHERE folder.folder_id IN ({$user_folder_id_array_csv})"; $sql .= " AND folder.folder_id = folder_file.folder_id"; $sql .= " AND folder_file.file_id = file_info.file_id"; if ($form['q'] != '') { $query_array_array = ACSLib::get_query_array_array($form['q']); $where_sql = ''; foreach ($query_array_array as $query_array) { if (!count($query_array)) { continue; } $sub_where_sql = ''; foreach ($query_array as $query) { $query = pg_escape_string($query); ACSLib::escape_ilike($query); if ($sub_where_sql != '') { $sub_where_sql .= " OR "; } $sub_where_sql .= "("; $sub_where_sql .= " file_info.display_file_name ILIKE '%{$query}%'"; $sub_where_sql .= " OR file_info.comment ILIKE '%{$query}%'"; $sub_where_sql .= ")"; } if ($sub_where_sql != '') { if ($where_sql != '') { $where_sql .= " AND "; } $where_sql .= "({$sub_where_sql})"; } } if ($where_sql != '') { $sql .= " AND ({$where_sql})"; } } // // 日数指定がある場合 if ($days !== false) { $sql = $sql . " AND " . ACSLib::get_sql_condition_from_today("file_info.update_date", $days); } // ORDER if ($rows != false) { // 表示件数制御 // $display_count = ACSSystemConfig::get_keyword_value(ACSMsg::get_mst('system_config_group', 'D02'), 'NEW_INFO_TOP_DISPLAY_MAX_COUNT'); $sql = $sql . " OFFSET 0 LIMIT " . $display_count; } else { if ($form['order'] == 'update_date') { $sql .= " ORDER BY file_info.update_date DESC"; } else { $sql .= " ORDER BY file_info.display_file_name ASC"; } } $row_array = ACSDB::_get_row_array($sql); return $row_array; }