fix: previous and next post links included hidden posts (#6491)

#### What type of PR is this?
/kind bug
/area core
/milestone 2.19.x

#### What this PR does / why we need it:
修复文章的上一篇下一篇链接包含了隐藏分类下的文章

#### Does this PR introduce a user-facing change?
```release-note
修复文章的上一篇下一篇链接包含了隐藏分类下的文章
```
pull/6498/head
guqing 2024-08-22 16:24:55 +08:00 committed by GitHub
parent ad81f6dcb7
commit d8ec34b724
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 12 additions and 4 deletions

View File

@ -26,6 +26,7 @@ import run.halo.app.extension.ListResult;
import run.halo.app.extension.PageRequestImpl; import run.halo.app.extension.PageRequestImpl;
import run.halo.app.extension.ReactiveExtensionClient; import run.halo.app.extension.ReactiveExtensionClient;
import run.halo.app.extension.exception.ExtensionNotFoundException; import run.halo.app.extension.exception.ExtensionNotFoundException;
import run.halo.app.extension.index.query.Query;
import run.halo.app.extension.index.query.QueryFactory; import run.halo.app.extension.index.query.QueryFactory;
import run.halo.app.extension.router.selector.FieldSelector; import run.halo.app.extension.router.selector.FieldSelector;
import run.halo.app.extension.router.selector.LabelSelector; import run.halo.app.extension.router.selector.LabelSelector;
@ -114,6 +115,11 @@ public class PostFinderImpl implements PostFinder {
@Override @Override
public Mono<NavigationPostVo> cursor(String currentName) { public Mono<NavigationPostVo> cursor(String currentName) {
return postPredicateResolver.getListOptions() return postPredicateResolver.getListOptions()
.map(listOptions -> ListOptions.builder(listOptions)
// Exclude hidden posts
.andQuery(notHiddenPostQuery())
.build()
)
.flatMap(postListOption -> { .flatMap(postListOption -> {
var postNames = client.indexedQueryEngine() var postNames = client.indexedQueryEngine()
.retrieve(Post.GVK, postListOption, .retrieve(Post.GVK, postListOption,
@ -136,10 +142,14 @@ public class PostFinderImpl implements PostFinder {
.defaultIfEmpty(NavigationPostVo.empty()); .defaultIfEmpty(NavigationPostVo.empty());
} }
private static Query notHiddenPostQuery() {
return notEqual("status.hideFromList", BooleanUtils.TRUE);
}
@Override @Override
public Mono<ListResult<ListedPostVo>> list(Integer page, Integer size) { public Mono<ListResult<ListedPostVo>> list(Integer page, Integer size) {
var listOptions = ListOptions.builder() var listOptions = ListOptions.builder()
.fieldQuery(notEqual("status.hideFromList", BooleanUtils.TRUE)) .fieldQuery(notHiddenPostQuery())
.build(); .build();
return postPublicQueryService.list(listOptions, getPageRequest(page, size)); return postPublicQueryService.list(listOptions, getPageRequest(page, size));
} }
@ -207,9 +217,7 @@ public class PostFinderImpl implements PostFinder {
public Mono<ListResult<PostArchiveVo>> archives(Integer page, Integer size, String year, public Mono<ListResult<PostArchiveVo>> archives(Integer page, Integer size, String year,
String month) { String month) {
var listOptions = new ListOptions(); var listOptions = new ListOptions();
listOptions.setFieldSelector(FieldSelector.of( listOptions.setFieldSelector(FieldSelector.of(notHiddenPostQuery()));
notEqual("status.hideFromList", BooleanUtils.TRUE))
);
var labelSelectorBuilder = LabelSelector.builder(); var labelSelectorBuilder = LabelSelector.builder();
if (StringUtils.isNotBlank(year)) { if (StringUtils.isNotBlank(year)) {
labelSelectorBuilder.eq(Post.ARCHIVE_YEAR_LABEL, year); labelSelectorBuilder.eq(Post.ARCHIVE_YEAR_LABEL, year);