
OpenProject 12.0.8 补丁版本解读关键缺陷修复与工时、通知模块底层实现分析【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openprojectOpenProject 12.0.8 是 2022 年 2 月 23 日发布的补丁版本围绕工作包标题输入、通知设置中的项目下拉、工时Time Entry记录与显示细节修复了多个缺陷官方建议所有运行 12.x 的用户升级。本文以官方发布说明为主体结合当前仓库中的模型与前端源码逐条还原这些缺陷的技术背景与修复背后的实现原理帮助运维与二次开发人员理解升级内容并定位相关问题。版本发布概览与升级建议本版本发布说明位于 docs/release-notes/12/12-0-8/README.md发布日期为 2022-02-23。官方在发布说明中明确给出的结论是The release contains several bug fixes and we recommend updating to the newest version.即本次发布以缺陷修复为主不包含新功能官方建议用户升级到最新补丁版本以修复已发现的问题。在同一系列下12.0.8 之后还有 12.0.92022-03-14与 12.0.102022-03-16两个补丁版本完整的 12.x 版本时间线可参见 docs/release-notes/12/README.md。值得注意的是当前仓库 lib/open_project/version.rb 中MAJOR 18说明仓库主线早已远超 12.x因此本文所讨论的 12.0.8 属于历史补丁版本若你仍运行 12.0.x 系列建议参考 12.x 后续全部补丁并按发布说明逐级升级。缺陷修复清单完整继承自官方发布说明12.0.8 一共修复了 4 个缺陷官方以工作包Work Package编号形式引用编号缺陷描述#39833在 FirefoxFF中输入内容时工作包标题输入框会缩小#40934通知设置中选择项目的下拉框被限制为每页对象数选项#41015当最近的工作包被删除且工时被分配到项目上时无法记录新的工时#41034小型显示缺陷下面结合仓库源码逐一分析这些缺陷背后的实现逻辑帮助读者理解修复点为什么值得关注。缺陷 #39833Firefox 中工作包标题输入框缩小这是一个纯前端表现层问题在 Firefox 浏览器中编辑工作包标题subject字段时输入框宽度会异常收缩。工作包标题输入位于前端工作包编辑表单中相关字段渲染逻辑集中在frontend/src/app/features/work-packages/目录下的字段组件edit-field体系内标题作为可编辑内联字段其输入框尺寸由 CSS 布局与输入框自身样式共同决定。此类缺陷通常源于不同浏览器对输入框box-sizing或弹性布局flex计算的差异属于典型的浏览器兼容性修复发布说明中未提供具体补丁内容因此这里不做细节推断。缺陷 #40934通知设置中项目选择下拉框分页异常通知设置允许用户针对特定项目定制通知规则。从后端模型看app/models/notification_setting.rb 中belongs_to :project, optional: true belongs_to :user即每条通知设置可以可选地关联一个项目项目为空的记录则代表全局默认通知设置。该模型还定义了完整的通知事件常量集例如WATCHED、ASSIGNEE、RESPONSIBLE、MENTIONED、WORK_PACKAGE_CREATED、WORK_PACKAGE_COMMENTED、START_DATE、DUE_DATE、OVERDUE等见 notification_setting.rb。本次缺陷的具体表现是在通知设置界面选择针对哪个项目的下拉框中可选项被错误地限制为分页大小objects per page所规定的条目数导致无法看到全部项目。这一问题的根源在于下拉数据加载复用了分页查询而未对项目下拉场景做全量加载或正确的分页处理。从功能角度理解NotificationSetting与project的可选关联意味着按项目细化通知是核心交互路径项目下拉不全会直接影响用户为特定项目配置邮件/站内通知如WORK_PACKAGE_CREATED、WORK_PACKAGE_COMMENTED、DUE_DATE提醒等因此该修复对通知功能的可用性至关重要。缺陷 #41015删除最近的工作包后无法记录工时这是本次发布中影响面最大、也最值得展开的修复。工时Time Entry在 OpenProject 中位于 costs 模块其模型定义在 modules/costs/app/models/time_entry.rbclass TimeEntry ApplicationRecord ALLOWED_ENTITY_TYPES %w[WorkPackage Meeting].freeze # could have used polymorphic association # project association here allows easy loading of time entries at project level with one database trip belongs_to :project belongs_to :entity, polymorphic: true belongs_to :user belongs_to :activity, class_name: TimeEntryActivity belongs_to :rate, - { where(type: %w[HourlyRate DefaultHourlyRate]) }, class_name: Rate belongs_to :logged_by, class_name: User从源码注释可以看出设计意图工时记录不直接belongs_to :work_package而是通过多态关联belongs_to :entity关联到WorkPackage或Meeting同时冗余保存project_id以便在项目维度一次性加载全部工时one database trip。模型对user_id、project_id、spent_on、entity均做了非空校验见 time_entry.rb。缺陷场景的复现路径是用户先在一个工作包上记录工时随后该工作包被删除但工时记录被重新分配或仍然归属到项目维度此后当用户再次尝试记录新的工时条目时界面报错、无法保存。结合模型实现可以推断其技术原因工时记录的保存依赖entity关联存在而最近工作包被删除后、工时条目挂在项目上的中间状态entity已失效、仅保留project关联未在保存逻辑中被正确处理导致校验或关联解析失败。该修复正是要保证这种项目级工时的边界场景下新工时的创建流程依然可用。与之配套的还有 modules/costs/app/models/entry/costs.rb 中的成本计算逻辑与before_save :update_costs钩子time_entry.rb它们共同决定了工时条目的成本核算因此在工时无法保存的缺陷中成本字段的更新链同样需要保持完整。缺陷 #41034小型显示缺陷发布说明仅将其描述为 Small display bug未给出更具体的复现信息也没有对应的细节说明。由于官方未提供具体补丁内容此处不做进一步技术推断。对社区贡献者的致谢发布说明在 Contributions 一节中向社区成员报告缺陷、帮助定位与提供修复表达了感谢并特别感谢了本次版本中报告并定位问题的社区成员Martin Aschenbrenner 与 Rince wind。这也是 OpenProject 发布说明的一贯格式每个补丁版本都会记录来自社区的贡献体现了其开源协作流程——社区用户通过 OpenProject 社区实例提交缺陷报告以工作包编号形式追踪再由核心团队在后续补丁中修复。如何验证你当前运行的版本对于运维人员升级前应先确认当前部署版本。仓库中 lib/open_project/version.rb 定义了版本常量module OpenProject module VERSION # :nodoc: MAJOR 18 MINOR 0 PATCH 0版本字符串由to_semver与ARRAY/STRING组合生成version.rb并可通过RELEASE_DATE文件或 git 提交时间获取发布日期version.rb。在已部署实例上通常可在页面底部或系统信息中查看版本号若版本号低于 12.0.8 且你仍处于 12.x 分支则建议按官方建议应用本补丁。总结OpenProject 12.0.8 是一个典型的缺陷修复补丁规模虽小但覆盖了三个核心使用场景工作包编辑体验修复 Firefox 下标题输入框缩小的浏览器兼容问题通知设置可用性修复项目选择下拉被分页限制的问题恢复按项目定制通知的完整交互后端由NotificationSetting模型承载app/models/notification_setting.rb工时记录可靠性修复最近工作包被删除后无法记录新工时的数据边界问题其背后是多态entity关联与项目冗余关联并存的工时模型设计modules/costs/app/models/time_entry.rb。官方明确建议所有用户升级到该补丁版本。若你的实例仍运行在 12.x 早期版本可依次参考 12.x 发布说明索引 中列出的后续补丁版本12.0.9、12.0.10 及更高结合自身部署情况规划升级路径。【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考