#### What type of PR is this?
/kind improvement
/area core
/milestone 2.5.x
#### What this PR does / why we need it:
为评论接口增加排序条件。当前只增加了根据创建时间进行正/倒序排列,后续持续进行补充。
#### Which issue(s) this PR fixes:
Fixes#3364
#### Special notes for your reviewer:
调用评论列表接口。增加排序条件 `sort=creationTimestamp,desc` ,查看列表是否正确排序。
#### Does this PR introduce a user-facing change?
```release-note
为评论列表接口增加按照创建时间进行最新/最早排序
```
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.5.x
#### What this PR does / why we need it:
优化插件的升级流程
how to test it?
1. 测试正常的插件升级是否正常
2. 测试插件升级失败后插件是否会被卸载的问题
3. 测试没有 version 的插件安装是否能成功
4. 在插件目录不会多出一个名为 `{升级插件名称}-null.jar` 的文件
#### Which issue(s) this PR fixes:
Fixes#3839
#### Does this PR introduce a user-facing
```release-note
优化插件的升级流程
```
#### What type of PR is this?
/kind bug
/area console
/milestone 2.5.x
#### What this PR does / why we need it:
修复在 Dialog 组件中,如果 onConfirm 方法出现异常,按钮加载状态没有复原的问题。
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/3844
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind bug
/area core
/milestone 2.5.x
#### What this PR does / why we need it:
This PR adds PostVisibleChangedEvent to synchronizing post indices when post visible is changed, whether from public to private or from private to public.
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/3438
#### Special notes for your reviewer:
1. Install Search plugin
2. Create a post
3. Try to search the post
4. Make post private
5. Try to search the post
6. Make post public
7. Try to search the post
#### Does this PR introduce a user-facing change?
```release-note
修复隐藏的文章已然能够被搜索到问题
```
#### What type of PR is this?
/kind feature
/area console
/milestone 2.5.x
#### What this PR does / why we need it:
添加复制附件链接的功能,支持三种格式:URL、HTML 格式、Markdown 格式。
#### Which issue(s) this PR fixes:
Fixes#3801
#### Special notes for your reviewer:
测试方式:
1. 上传若干不同格式的附件。
2. 打开附件详情,检查列出的格式是否正确。
3. 检查复制链接的内容是否正确。
#### Does this PR introduce a user-facing change?
```release-note
Console 端的附件详情支持复制链接的功能。
```
#### What type of PR is this?
/kind bug
/area core
/milestone 2.5.x
#### What this PR does / why we need it:
修复文章上下篇数据查询 NPE 问题
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind feature
/area core
/milestone 2.5.x
/kind api-change
#### What this PR does / why we need it:
为客户端提供一套 APIs
#### Which issue(s) this PR fixes:
Fixes#3661
#### Does this PR introduce a user-facing change?
```release-note
为访客端提供一套完整的 API
```
#### What type of PR is this?
/kind bug
/area core
/milestone 2.5.x
#### What this PR does / why we need it:
修复插件安装后无法启动会导致卸载后插件 JAR 文件残留的问题
how to test it?
1. 安装一个无法启动的插件,比如在插件声明周期方法中抛一个异常
2. 启动插件,然后卸载插件看插件 JAR 是否被正确删除
3. 如果是插件开发模式则不会删除文件
#### Which issue(s) this PR fixes:
Fixes#3840
#### Does this PR introduce a user-facing change?
```release-note
修复插件安装后无法启动会导致卸载后插件 JAR 文件残留的问题
```
#### What type of PR is this?
/kind bug
/area console
/milestone 2.5.0
#### What this PR does / why we need it:
修复登录表单与顶部间距异常的问题,并解决在 https://github.com/halo-dev/halo/pull/3756 中提到的在低分辨率屏幕下,语言选择和表单元素重叠的问题。
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/3806
#### Special notes for your reviewer:
测试方式:
1. 检查登录页面的表单是否和以前的版本一致即可。
2. 可以尝试调整浏览器的缩放大小,检查是否有样式问题。
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind improvement
/area console
/milestone 2.5.x
#### What this PR does / why we need it:
修改 Vue Router 的 scrollBehavior 配置,添加是否是不同路由的跳转,如果是才会在跳转之后滚动到页面顶部。可以解决在 https://github.com/halo-dev/halo/issues/3833 中提到的打开附件详情之后,列表滚动到顶部的问题。这是因为在打开附件详情的时候会修改路由的参数。
#### Which issue(s) this PR fixes:
Fixes#3833
#### Special notes for your reviewer:
测试方式:
1. 上传若干附件,滚动到列表底部。
2. 然后打开某个附件详情,观察列表是否自动滚动到了顶部,如果没有,则修改有效。
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind bug
/area console
/milestone 2.5.x
#### What this PR does / why we need it:
修复文章分类和标签选择组件在 Repeater 组件中,下拉框无法完整显示的问题。
<img width="598" alt="image" src="https://user-images.githubusercontent.com/21301288/233818471-0334b449-e2eb-44aa-a5ce-ed9a4ad54e8b.png">
#### Which issue(s) this PR fixes:
Fixes#3479
#### Does this PR introduce a user-facing change?
```release-note
修复 Console 端的文章分类和标签选择组件在 Repeater 组件中,下拉框无法完整显示的问题。
```
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.5.x
/kind api-change
#### What this PR does / why we need it:
提供自定义 API 用于创建用户账号
简化了创建用户账号需要先创建账号,再分配角色再重置密码的复杂流程。
需要 Console 端适配此 PR
#### Which issue(s) this PR fixes:
Fixes#2852
#### Does this PR introduce a user-facing change?
```release-note
优化用户账号创建流程
```
#### What type of PR is this?
/kind cleanup
/area core
#### What this PR does / why we need it:
Upgrade to Spring Boot 3.0.6.
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/3829
#### Does this PR introduce a user-facing change?
```release-note
升级 Spring Boot 至 3.0.6
```
#### What type of PR is this?
/kind bug
/area plugin
/area core
#### What this PR does / why we need it:
Close file system after reading plugin descriptor.
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/3720
#### How to test?
1. Build a plugin and install it
2. Update plugin.yaml of the plugin, rebuild and upgrade it
3. Check the change you modified
#### Does this PR introduce a user-facing change?
```release-note
修复无法正常升级插件的问题
```
#### What type of PR is this?
/kind improvement
/area console
/milestone 2.5.x
#### What this PR does / why we need it:
为 FormKit 表单中包含了 required 验证的表单元素的 label 添加指示器(*),优化可访问性。
<img width="694" alt="image" src="https://user-images.githubusercontent.com/21301288/233822533-6a30b43e-738a-47f3-92c1-045d34cc1ba3.png">
#### Which issue(s) this PR fixes:
Fixes#3823
#### Special notes for your reviewer:
测试方式:
1. 检查 Console 端的表单中必填项的 label 是否添加了 * 即可。
#### Does this PR introduce a user-facing change?
```release-note
为 FormKit 表单中包含了 required 验证的表单元素的 label 添加指示器(*),优化可访问性。
```
#### What type of PR is this?
/kind improvement
/area console
#### What this PR does / why we need it:
调整 ESLint 的执行参数,添加 max-warnings 为 0,意味着在提交或者运行 CI 的时候不再允许包含 warning 级别的检测。
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind improvement
/area console
/milestone 2.5.x
#### What this PR does / why we need it:
升级 @tanstack/vue-query 的版本至 [v4.29.1](https://github.com/TanStack/query/releases/tag/v4.29.1),并默认将 `refetchOnWindowFocus` 选项设置为 false。此选项的作用是当窗口重新聚焦时,刷新当前页面请求的状态(重新请求接口),目前暂时不需要使用它。
#### Does this PR introduce a user-facing change?
```release-note
升级 Console 端 `@tanstack/vue-query` 依赖的版本至 [v4.29.1](https://github.com/TanStack/query/releases/tag/v4.29.1)
```
#### What type of PR is this?
/kind bug
/area console
/milestone 2.5.x
#### What this PR does / why we need it:
修复升级插件之后没有自动刷新页面的问题,一般情况来说,升级插件之后需要重载插件 Console 部分的资源。
#### Special notes for your reviewer:
测试方式:
1. 以 deployment 模式启动 Halo
2. 测试升级插件之后是否有正常刷新页面
#### Does this PR introduce a user-facing change?
```release-note
修复 Console 端升级插件之后没有自动刷新页面的问题。
```
#### What type of PR is this?
/kind feature
/area console
/milestone 2.5.0
#### What this PR does / why we need it:
为 Console 端添加 Description 组件。
#### Which issue(s) this PR fixes:
Fixes#3790
#### Special notes for your reviewer:
测试方式:
1. 检查主题管理、插件详情、认证方式详情页面的样式是否异常即可。
#### Does this PR introduce a user-facing change?
```release-note
为 Console 端添加 Description 组件。
```
#### What type of PR is this?
/kind improvement
/area console
/milestone 2.5.x
#### What this PR does / why we need it:
支持在附件上传弹框中点击完成按钮关闭弹框。
<img width="647" alt="image" src="https://user-images.githubusercontent.com/21301288/232964793-d4e94e7a-fc81-4d1b-b0fc-b93d8f5bc537.png">
#### Special notes for your reviewer:
测试方式:
1. 测试上传完附件之后,点击完成按钮,观察是否关闭上传弹框即可。
#### Does this PR introduce a user-facing change?
```release-note
优化 Console 端上传附件的弹框,支持点击完成按钮以关闭弹框。
```
#### What type of PR is this?
/kind improvement
/area core
#### What this PR does / why we need it:
对初始超级管理员用户名增加合法性校验
#### Which issue(s) this PR fixes:
Fixes#3482
#### Does this PR introduce a user-facing change?
```release-note
对初始超级管理员用户名增加合法性校验
```
#### What type of PR is this?
/kind feature
/area core
/area plugin
#### What this PR does / why we need it:
This PR adds reconciliation mechanism for plugin. After that, we could define a `Reconciler<Request>` like the following when developing plugin:
```java
@Slf4j
@Component
public class ApplicationReconciler implements Reconciler<Reconciler.Request> {
@Override
public Result reconcile(Request request) {
log.info("Application {} changed.", request);
return Result.doNotRetry();
}
@Override
public Controller setupWith(ControllerBuilder builder) {
return builder
.extension(new Application())
.workerCount(1)
.build();
}
}
```
You can reconcile any extensions as needed.
Meanwhile, all plugins will be stopped when Halo is shutting down.
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/3783
#### Does this PR introduce a user-facing change?
```release-note
支持在插件中定义 Reconciler
```
#### What type of PR is this?
/kind feature
/area console
/milestone 2.5.x
#### What this PR does / why we need it:
为上传组件 Uppy 导入中文繁体的语言包。
#### Which issue(s) this PR fixes:
Ref https://github.com/halo-dev/halo/pull/3672
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind improvement
/area core
#### What this PR does / why we need it:
优化异常信息
- 5xx 服务器内部错误不显示异常详情到页面,如主题模板表达式错误
- 访问 `GET /apis/api.halo.run/v1alpha1/comments` 提示 400 且不会打印异常堆栈
- 访问不存在的主题静态资源提示 404 且不会打印异常堆栈,如 `GET /themes/guqing-higan/assets/dist/style1.css`
#### Which issue(s) this PR fixes:
Fixes#3483
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind improvement
/kind api-change
/area core
/milestone 2.5.x
#### What this PR does / why we need it:
Add property `halo.use-absolute-permalink`(default is `false`) to control permalink generation. Leave `halo.external-url` as `null` by default.
Meanwhile, I enhanced `ExternalUrlSupplier#getURL` to get URL from not only properties but only http request.
#### How to use it?
```yaml
halo:
use-absolute-permalink: false
```
Or:
```yaml
halo:
external-url: https://halo.run/
use-absolute-permalink: false
```
Or:
```yaml
halo:
external-url: https://halo.run/
use-absolute-permalink: true
```
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/3762
#### Special notes for your reviewer:
#### Does this PR introduce a user-facing change?
```release-note
新增是否生成相对地址的配置
```
#### What type of PR is this?
/kind documentation
#### What this PR does / why we need it:
更新 SECURITY.md 文档中支持的版本。
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind improvement
/area console
/milestone 2.5.x
#### What this PR does / why we need it:
在主题列表激活主题之后,自动刷新页面。
#### Which issue(s) this PR fixes:
Fixes#3778
#### Special notes for your reviewer:
测试方式:
1. 打开主题列表,选择任意主题激活,观察是否刷新页面。
#### Does this PR introduce a user-facing change?
```release-note
优化 Console 端激活主题的流程,支持激活后自动刷新页面
```
#### What type of PR is this?
/kind improvement
/area console
/milestone 2.5.x
#### What this PR does / why we need it:
优化安装主题和升级主题的流程,支持在升级或者安装之后自动关闭弹框以及刷新数据。
#### Special notes for your reviewer:
测试方式:
1. 测试升级或者安装新主题之后是否关闭弹框以及是否有提示即可。
#### Does this PR introduce a user-facing change?
```release-note
优化 Console 端安装和升级主题的流程,支持自动关闭安装弹框和显示反馈提示
```
#### What type of PR is this?
/kind bug
/area console
#### What this PR does / why we need it:
为默认编辑器侦听器增加 `immediate` 属性,使其在创建之后立即执行,生成目录。
#### Which issue(s) this PR fixes:
Fixes#3769
#### Special notes for your reviewer:
打开已经存在并且具有标题的文章/页面,查看大纲是否正常生成。
#### Does this PR introduce a user-facing change?
```release-note
修复文章/页面已有内容重新编辑时,无法立即显示大纲的问题。
```
#### What type of PR is this?
/kind bug
/area console
#### What this PR does / why we need it:
修复 Console 端仪表盘添加组件时,切换标签页面报错的问题。
#### Which issue(s) this PR fixes:
Fixes#3764
#### Does this PR introduce a user-facing change?
```release-note
修复 Console 端仪表盘添加组件时的报错问题。
```
#### What type of PR is this?
/kind feature
/area core
#### What this PR does / why we need it:
Use Gradle plugin `maven-publish` to publish Halo modules(`platform.application`, `platform.plugin` and `api`) to Maven central repository.
```bash
# Try to publish to Maven local repository.
./gradlew publish
# Really publish to Maven central repository.
./gradlew -Prelease publish -PossrhUsername=username -PossrhPassword=password
```
Note that currently we only support manually publishing.
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/2730
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind improvement
/area console
#### What this PR does / why we need it:
此修改对登录、注册界面原有风格无影响。解决了1920*1080分辨率下,注册界面,“已有账号 立即登录”与“简体中文”文字重叠问题
#### Which issue(s) this PR fixes:
Fixes#3695
#### Special notes for your reviewer:
#### Does this PR introduce a user-facing change?
```release-note
解决1920*1080分辨率下,注册界面,“已有账号 立即登录”与“简体中文”文字重叠问题
```
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.5.x
#### What this PR does / why we need it:
允许用户修改自己的元数据信息
how to test it
使用 API 修改元数据 `PUT localhost:8090/apis/api.console.halo.run/v1alpha1/users/-`
1. 修改 annotations 中的 `"rbac.authorization.halo.run/role-names": "[\"super-role\",\"fake-role\"]"` 会被复原
2. 修改其他的 annotations 能正确修改,也能增加新的 annotation
#### Which issue(s) this PR fixes:
Fixes#3544
#### Does this PR introduce a user-facing change?
```release-note
允许用户修改自己的元数据信息
```
#### What type of PR is this?
/kind feature
/area core
/area plugin
/kind api-change
#### What this PR does / why we need it:
新增 reload 插件的 API
how to test it?
通过以下 API 测试是否可以在不重启 Halo 的情况下使新改动的插件代码生效
```shell
./gradlew clean build && curl -u your-name:your-password -X PUT http://127.0.0.1:8090/apis/api.console.halo.run/v1alpha1/plugins/{plugin-name}/reload
```
#### Which issue(s) this PR fixes:
Fixes#3748
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind feature
/area core
/area plugin
#### What this PR does / why we need it:
This PR refactor AttachmentEndpoint by extracting `upload`, `delete`, `getPremalink` and `getSharedURL` logic in the endpoint into AttachmentService. Meanwhile, I expose the service to plugin, so that we can use the service in plugin conveniently.
#### Special notes for your reviewer:
Please confirm that those changes won't influence existing attachment features.
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind bug
/area core
#### What this PR does / why we need it:
修复作者页无法访问的问题
#### Which issue(s) this PR fixes:
Fixes#3718
#### Does this PR introduce a user-facing change?
```release-note
修复作者页无法访问的问题
```
#### What type of PR is this?
/kind improvement
/area core
#### What this PR does / why we need it:
将文章摘要作为 meta description 以优化文章页的 SEO
how to test it?
查看文章页和自定义页面的 head 中是否具有 `<meta name="description" content="文章摘要"/>` 标签
#### Which issue(s) this PR fixes:
Fixes#2682
#### Does this PR introduce a user-facing change?
```release-note
将文章摘要作为 meta description 以优化文章页的 SEO
```
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.5.x
#### What this PR does / why we need it:
仅允许拥有 authenticated 角色的用户修改个人资料
how to test it?
用户在未登录时访问 `PUT /apis/api.console.halo.run/v1alpha1/users/-` 出现 401 状态码则符合预期,登录后则可以正常调用
#### Which issue(s) this PR fixes:
Fixes#3737
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind bug
/area core
#### What this PR does / why we need it:
- Use the class loader belonging to the parameter type when creating a generic class.
- Use full qualified class name when generating a generic class.
Before testing, you have to set property `springdoc.cache.disabled` to `true`.
#### Which issue(s) this PR fixes:
Fixes#3728
#### Does this PR introduce a user-facing change?
```release-note
None
```
#### What type of PR is this?
/kind bug
/area console
#### What this PR does / why we need it:
获取主题配置时,重复添加了上次已经获取到的主题配置,导致重复显示。并同步修改了 plugin 中可能出现问题的位置。
#### Which issue(s) this PR fixes:
Fixes#3726
#### Special notes for your reviewer:
1. 打开 Console 端主题页面
2. 点击右上角预览页面
3. 关闭预览页面,选项卡无重复即为正常。
#### Does this PR introduce a user-facing change?
```release-note
修复 Console 端主题设置中,选项卡会重复显示的问题
```