wagtail 5.2.1__py3-none-any.whl → 5.2.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (439) hide show
  1. wagtail/__init__.py +1 -1
  2. wagtail/admin/locale/ar/LC_MESSAGES/django.po +2 -2
  3. wagtail/admin/locale/be/LC_MESSAGES/django.mo +0 -0
  4. wagtail/admin/locale/be/LC_MESSAGES/django.po +32 -7
  5. wagtail/admin/locale/be/LC_MESSAGES/djangojs.mo +0 -0
  6. wagtail/admin/locale/be/LC_MESSAGES/djangojs.po +9 -3
  7. wagtail/admin/locale/ca/LC_MESSAGES/django.mo +0 -0
  8. wagtail/admin/locale/ca/LC_MESSAGES/django.po +48 -49
  9. wagtail/admin/locale/cs/LC_MESSAGES/django.po +8 -10
  10. wagtail/admin/locale/de/LC_MESSAGES/django.po +47 -49
  11. wagtail/admin/locale/el/LC_MESSAGES/django.po +4 -4
  12. wagtail/admin/locale/es/LC_MESSAGES/django.po +38 -39
  13. wagtail/admin/locale/es_419/LC_MESSAGES/django.po +8 -8
  14. wagtail/admin/locale/et/LC_MESSAGES/django.po +12 -14
  15. wagtail/admin/locale/fa/LC_MESSAGES/django.po +18 -18
  16. wagtail/admin/locale/fi/LC_MESSAGES/django.po +18 -18
  17. wagtail/admin/locale/fr/LC_MESSAGES/django.po +42 -44
  18. wagtail/admin/locale/gl/LC_MESSAGES/django.po +52 -53
  19. wagtail/admin/locale/hi/LC_MESSAGES/djangojs.mo +0 -0
  20. wagtail/admin/locale/hi/LC_MESSAGES/djangojs.po +14 -0
  21. wagtail/admin/locale/hr_HR/LC_MESSAGES/django.po +12 -13
  22. wagtail/admin/locale/hr_HR/LC_MESSAGES/djangojs.po +2 -2
  23. wagtail/admin/locale/hu/LC_MESSAGES/django.po +42 -45
  24. wagtail/admin/locale/id_ID/LC_MESSAGES/django.po +6 -6
  25. wagtail/admin/locale/is_IS/LC_MESSAGES/django.po +49 -51
  26. wagtail/admin/locale/it/LC_MESSAGES/django.po +31 -32
  27. wagtail/admin/locale/ja/LC_MESSAGES/django.po +2 -2
  28. wagtail/admin/locale/ko/LC_MESSAGES/django.po +17 -18
  29. wagtail/admin/locale/lt/LC_MESSAGES/django.po +4 -4
  30. wagtail/admin/locale/nb/LC_MESSAGES/django.mo +0 -0
  31. wagtail/admin/locale/nb/LC_MESSAGES/django.po +488 -9
  32. wagtail/admin/locale/nb/LC_MESSAGES/djangojs.mo +0 -0
  33. wagtail/admin/locale/nb/LC_MESSAGES/djangojs.po +15 -1
  34. wagtail/admin/locale/nl/LC_MESSAGES/django.po +41 -44
  35. wagtail/admin/locale/pl/LC_MESSAGES/django.po +47 -49
  36. wagtail/admin/locale/pl/LC_MESSAGES/djangojs.po +3 -3
  37. wagtail/admin/locale/pt_BR/LC_MESSAGES/django.po +15 -16
  38. wagtail/admin/locale/pt_PT/LC_MESSAGES/django.po +20 -21
  39. wagtail/admin/locale/ro/LC_MESSAGES/django.po +50 -51
  40. wagtail/admin/locale/ru/LC_MESSAGES/django.po +57 -58
  41. wagtail/admin/locale/ru/LC_MESSAGES/djangojs.po +3 -3
  42. wagtail/admin/locale/sk_SK/LC_MESSAGES/django.po +4 -4
  43. wagtail/admin/locale/sl/LC_MESSAGES/django.po +37 -38
  44. wagtail/admin/locale/sl/LC_MESSAGES/djangojs.po +2 -2
  45. wagtail/admin/locale/sv/LC_MESSAGES/django.po +41 -43
  46. wagtail/admin/locale/tet/LC_MESSAGES/django.po +2 -2
  47. wagtail/admin/locale/th/LC_MESSAGES/django.po +2 -2
  48. wagtail/admin/locale/tr/LC_MESSAGES/django.po +4 -4
  49. wagtail/admin/locale/tr_TR/LC_MESSAGES/django.po +4 -4
  50. wagtail/admin/locale/uk/LC_MESSAGES/django.mo +0 -0
  51. wagtail/admin/locale/uk/LC_MESSAGES/django.po +23 -11
  52. wagtail/admin/locale/zh_Hans/LC_MESSAGES/django.po +4 -5
  53. wagtail/admin/locale/zh_Hant/LC_MESSAGES/django.po +2 -2
  54. wagtail/admin/mail.py +11 -10
  55. wagtail/admin/static/wagtailadmin/css/panels/draftail.css +1 -1
  56. wagtail/admin/tests/test_reports_views.py +42 -0
  57. wagtail/admin/tests/test_workflows.py +143 -0
  58. wagtail/admin/views/home.py +13 -0
  59. wagtail/admin/views/reports/aging_pages.py +2 -0
  60. wagtail/contrib/forms/locale/be/LC_MESSAGES/django.po +3 -3
  61. wagtail/contrib/forms/locale/hr_HR/LC_MESSAGES/django.po +2 -2
  62. wagtail/contrib/forms/locale/pl/LC_MESSAGES/django.po +3 -3
  63. wagtail/contrib/forms/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  64. wagtail/contrib/forms/locale/pt_BR/LC_MESSAGES/django.po +2 -2
  65. wagtail/contrib/forms/locale/ru/LC_MESSAGES/django.po +3 -3
  66. wagtail/contrib/forms/locale/sl/LC_MESSAGES/django.po +2 -2
  67. wagtail/contrib/forms/panels.py +5 -1
  68. wagtail/contrib/forms/tests/test_views.py +106 -0
  69. wagtail/contrib/modeladmin/locale/be/LC_MESSAGES/django.po +3 -3
  70. wagtail/contrib/modeladmin/locale/hi/LC_MESSAGES/django.mo +0 -0
  71. wagtail/contrib/modeladmin/locale/hi/LC_MESSAGES/django.po +6 -0
  72. wagtail/contrib/modeladmin/locale/hr_HR/LC_MESSAGES/django.po +2 -2
  73. wagtail/contrib/modeladmin/locale/nb/LC_MESSAGES/django.mo +0 -0
  74. wagtail/contrib/modeladmin/locale/nb/LC_MESSAGES/django.po +3 -0
  75. wagtail/contrib/modeladmin/locale/pl/LC_MESSAGES/django.po +3 -3
  76. wagtail/contrib/modeladmin/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  77. wagtail/contrib/modeladmin/locale/pt_BR/LC_MESSAGES/django.po +2 -2
  78. wagtail/contrib/modeladmin/locale/ru/LC_MESSAGES/django.po +3 -3
  79. wagtail/contrib/modeladmin/locale/sl/LC_MESSAGES/django.po +2 -2
  80. wagtail/contrib/modeladmin/locale/sr/LC_MESSAGES/django.po +2 -2
  81. wagtail/contrib/redirects/locale/ar/LC_MESSAGES/django.po +4 -4
  82. wagtail/contrib/redirects/locale/be/LC_MESSAGES/django.po +3 -3
  83. wagtail/contrib/redirects/locale/bg/LC_MESSAGES/django.po +4 -4
  84. wagtail/contrib/redirects/locale/ca/LC_MESSAGES/django.po +4 -4
  85. wagtail/contrib/redirects/locale/cs/LC_MESSAGES/django.po +4 -4
  86. wagtail/contrib/redirects/locale/cy/LC_MESSAGES/django.po +6 -6
  87. wagtail/contrib/redirects/locale/de/LC_MESSAGES/django.po +4 -5
  88. wagtail/contrib/redirects/locale/el/LC_MESSAGES/django.po +7 -7
  89. wagtail/contrib/redirects/locale/es/LC_MESSAGES/django.po +6 -6
  90. wagtail/contrib/redirects/locale/et/LC_MESSAGES/django.po +4 -4
  91. wagtail/contrib/redirects/locale/fa/LC_MESSAGES/django.po +4 -4
  92. wagtail/contrib/redirects/locale/fi/LC_MESSAGES/django.po +6 -6
  93. wagtail/contrib/redirects/locale/fr/LC_MESSAGES/django.po +4 -4
  94. wagtail/contrib/redirects/locale/gl/LC_MESSAGES/django.po +4 -4
  95. wagtail/contrib/redirects/locale/hi/LC_MESSAGES/django.mo +0 -0
  96. wagtail/contrib/redirects/locale/hi/LC_MESSAGES/django.po +6 -0
  97. wagtail/contrib/redirects/locale/hr_HR/LC_MESSAGES/django.po +8 -8
  98. wagtail/contrib/redirects/locale/hu/LC_MESSAGES/django.po +6 -6
  99. wagtail/contrib/redirects/locale/id_ID/LC_MESSAGES/django.po +4 -4
  100. wagtail/contrib/redirects/locale/is_IS/LC_MESSAGES/django.po +6 -6
  101. wagtail/contrib/redirects/locale/it/LC_MESSAGES/django.po +4 -4
  102. wagtail/contrib/redirects/locale/ja/LC_MESSAGES/django.po +2 -2
  103. wagtail/contrib/redirects/locale/ko/LC_MESSAGES/django.po +4 -4
  104. wagtail/contrib/redirects/locale/lt/LC_MESSAGES/django.po +4 -4
  105. wagtail/contrib/redirects/locale/mn/LC_MESSAGES/django.po +4 -4
  106. wagtail/contrib/redirects/locale/nb/LC_MESSAGES/django.mo +0 -0
  107. wagtail/contrib/redirects/locale/nb/LC_MESSAGES/django.po +106 -5
  108. wagtail/contrib/redirects/locale/nl/LC_MESSAGES/django.po +4 -4
  109. wagtail/contrib/redirects/locale/pl/LC_MESSAGES/django.po +9 -9
  110. wagtail/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.po +5 -5
  111. wagtail/contrib/redirects/locale/pt_PT/LC_MESSAGES/django.po +4 -4
  112. wagtail/contrib/redirects/locale/ro/LC_MESSAGES/django.po +4 -4
  113. wagtail/contrib/redirects/locale/ru/LC_MESSAGES/django.po +7 -7
  114. wagtail/contrib/redirects/locale/sk_SK/LC_MESSAGES/django.po +4 -4
  115. wagtail/contrib/redirects/locale/sl/LC_MESSAGES/django.po +6 -6
  116. wagtail/contrib/redirects/locale/sr/LC_MESSAGES/django.po +2 -2
  117. wagtail/contrib/redirects/locale/sv/LC_MESSAGES/django.po +4 -4
  118. wagtail/contrib/redirects/locale/tet/LC_MESSAGES/django.po +4 -4
  119. wagtail/contrib/redirects/locale/th/LC_MESSAGES/django.po +4 -4
  120. wagtail/contrib/redirects/locale/tr/LC_MESSAGES/django.po +4 -4
  121. wagtail/contrib/redirects/locale/tr_TR/LC_MESSAGES/django.po +4 -4
  122. wagtail/contrib/redirects/locale/uk/LC_MESSAGES/django.po +4 -4
  123. wagtail/contrib/redirects/locale/zh/LC_MESSAGES/django.po +4 -4
  124. wagtail/contrib/redirects/locale/zh_Hans/LC_MESSAGES/django.po +4 -4
  125. wagtail/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.po +4 -4
  126. wagtail/contrib/search_promotions/locale/ar/LC_MESSAGES/django.po +4 -4
  127. wagtail/contrib/search_promotions/locale/be/LC_MESSAGES/django.po +7 -7
  128. wagtail/contrib/search_promotions/locale/ca/LC_MESSAGES/django.mo +0 -0
  129. wagtail/contrib/search_promotions/locale/ca/LC_MESSAGES/django.po +9 -9
  130. wagtail/contrib/search_promotions/locale/cs/LC_MESSAGES/django.po +2 -2
  131. wagtail/contrib/search_promotions/locale/cy/LC_MESSAGES/django.po +4 -4
  132. wagtail/contrib/search_promotions/locale/de/LC_MESSAGES/django.po +6 -6
  133. wagtail/contrib/search_promotions/locale/el/LC_MESSAGES/django.po +4 -4
  134. wagtail/contrib/search_promotions/locale/es/LC_MESSAGES/django.po +6 -6
  135. wagtail/contrib/search_promotions/locale/et/LC_MESSAGES/django.po +4 -4
  136. wagtail/contrib/search_promotions/locale/fa/LC_MESSAGES/django.po +4 -4
  137. wagtail/contrib/search_promotions/locale/fi/LC_MESSAGES/django.po +6 -6
  138. wagtail/contrib/search_promotions/locale/fr/LC_MESSAGES/django.po +4 -4
  139. wagtail/contrib/search_promotions/locale/gl/LC_MESSAGES/django.po +6 -6
  140. wagtail/contrib/search_promotions/locale/hi/LC_MESSAGES/django.mo +0 -0
  141. wagtail/contrib/search_promotions/locale/hi/LC_MESSAGES/django.po +3 -0
  142. wagtail/contrib/search_promotions/locale/hr_HR/LC_MESSAGES/django.po +8 -8
  143. wagtail/contrib/search_promotions/locale/hu/LC_MESSAGES/django.po +4 -4
  144. wagtail/contrib/search_promotions/locale/id_ID/LC_MESSAGES/django.po +4 -4
  145. wagtail/contrib/search_promotions/locale/is_IS/LC_MESSAGES/django.po +8 -8
  146. wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.po +6 -6
  147. wagtail/contrib/search_promotions/locale/ja/LC_MESSAGES/django.po +4 -4
  148. wagtail/contrib/search_promotions/locale/ko/LC_MESSAGES/django.po +4 -4
  149. wagtail/contrib/search_promotions/locale/lt/LC_MESSAGES/django.po +6 -6
  150. wagtail/contrib/search_promotions/locale/nb/LC_MESSAGES/django.mo +0 -0
  151. wagtail/contrib/search_promotions/locale/nb/LC_MESSAGES/django.po +10 -4
  152. wagtail/contrib/search_promotions/locale/nl/LC_MESSAGES/django.po +6 -6
  153. wagtail/contrib/search_promotions/locale/pl/LC_MESSAGES/django.po +9 -9
  154. wagtail/contrib/search_promotions/locale/pt_BR/LC_MESSAGES/django.po +4 -4
  155. wagtail/contrib/search_promotions/locale/pt_PT/LC_MESSAGES/django.po +4 -4
  156. wagtail/contrib/search_promotions/locale/ro/LC_MESSAGES/django.po +4 -4
  157. wagtail/contrib/search_promotions/locale/ru/LC_MESSAGES/django.po +9 -9
  158. wagtail/contrib/search_promotions/locale/sk_SK/LC_MESSAGES/django.po +4 -4
  159. wagtail/contrib/search_promotions/locale/sl/LC_MESSAGES/django.po +6 -6
  160. wagtail/contrib/search_promotions/locale/sr/LC_MESSAGES/django.po +2 -2
  161. wagtail/contrib/search_promotions/locale/sv/LC_MESSAGES/django.po +4 -4
  162. wagtail/contrib/search_promotions/locale/th/LC_MESSAGES/django.po +4 -4
  163. wagtail/contrib/search_promotions/locale/tr/LC_MESSAGES/django.po +4 -4
  164. wagtail/contrib/search_promotions/locale/tr_TR/LC_MESSAGES/django.po +4 -4
  165. wagtail/contrib/search_promotions/locale/uk/LC_MESSAGES/django.po +4 -4
  166. wagtail/contrib/search_promotions/locale/zh_Hans/LC_MESSAGES/django.po +2 -2
  167. wagtail/contrib/search_promotions/locale/zh_Hant/LC_MESSAGES/django.po +2 -2
  168. wagtail/contrib/settings/locale/be/LC_MESSAGES/django.po +3 -3
  169. wagtail/contrib/settings/locale/hi/LC_MESSAGES/django.mo +0 -0
  170. wagtail/contrib/settings/locale/hi/LC_MESSAGES/django.po +27 -2
  171. wagtail/contrib/settings/locale/hr_HR/LC_MESSAGES/django.po +2 -2
  172. wagtail/contrib/settings/locale/nb/LC_MESSAGES/django.mo +0 -0
  173. wagtail/contrib/settings/locale/nb/LC_MESSAGES/django.po +13 -2
  174. wagtail/contrib/settings/locale/pl/LC_MESSAGES/django.po +3 -3
  175. wagtail/contrib/settings/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  176. wagtail/contrib/settings/locale/ru/LC_MESSAGES/django.po +3 -3
  177. wagtail/contrib/settings/locale/sl/LC_MESSAGES/django.po +2 -2
  178. wagtail/contrib/settings/locale/sr/LC_MESSAGES/django.po +2 -2
  179. wagtail/contrib/settings/locale/uk/LC_MESSAGES/django.mo +0 -0
  180. wagtail/contrib/settings/locale/uk/LC_MESSAGES/django.po +10 -2
  181. wagtail/contrib/simple_translation/locale/be/LC_MESSAGES/django.mo +0 -0
  182. wagtail/contrib/simple_translation/locale/be/LC_MESSAGES/django.po +30 -3
  183. wagtail/contrib/simple_translation/locale/hr_HR/LC_MESSAGES/django.po +2 -2
  184. wagtail/contrib/simple_translation/locale/nb/LC_MESSAGES/django.mo +0 -0
  185. wagtail/contrib/simple_translation/locale/nb/LC_MESSAGES/django.po +26 -0
  186. wagtail/contrib/simple_translation/locale/pl/LC_MESSAGES/django.po +3 -3
  187. wagtail/contrib/simple_translation/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  188. wagtail/contrib/simple_translation/locale/ru/LC_MESSAGES/django.po +3 -3
  189. wagtail/contrib/simple_translation/locale/sl/LC_MESSAGES/django.po +2 -2
  190. wagtail/contrib/styleguide/locale/be/LC_MESSAGES/django.po +3 -3
  191. wagtail/contrib/styleguide/locale/hi/LC_MESSAGES/django.mo +0 -0
  192. wagtail/contrib/styleguide/locale/hi/LC_MESSAGES/django.po +22 -0
  193. wagtail/contrib/styleguide/locale/hr_HR/LC_MESSAGES/django.po +2 -2
  194. wagtail/contrib/styleguide/locale/pl/LC_MESSAGES/django.po +3 -3
  195. wagtail/contrib/styleguide/locale/ru/LC_MESSAGES/django.po +3 -3
  196. wagtail/contrib/styleguide/locale/sl/LC_MESSAGES/django.po +2 -2
  197. wagtail/contrib/table_block/locale/be/LC_MESSAGES/django.po +3 -3
  198. wagtail/contrib/table_block/locale/hr_HR/LC_MESSAGES/django.po +2 -2
  199. wagtail/contrib/table_block/locale/pl/LC_MESSAGES/django.po +3 -3
  200. wagtail/contrib/table_block/locale/ru/LC_MESSAGES/django.po +3 -3
  201. wagtail/contrib/table_block/locale/sl/LC_MESSAGES/django.po +2 -2
  202. wagtail/contrib/typed_table_block/locale/ar/LC_MESSAGES/django.mo +0 -0
  203. wagtail/contrib/typed_table_block/locale/ar/LC_MESSAGES/django.po +44 -0
  204. wagtail/contrib/typed_table_block/locale/be/LC_MESSAGES/django.po +3 -3
  205. wagtail/contrib/typed_table_block/locale/pl/LC_MESSAGES/django.po +3 -3
  206. wagtail/contrib/typed_table_block/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  207. wagtail/contrib/typed_table_block/locale/pt_BR/LC_MESSAGES/django.po +2 -2
  208. wagtail/contrib/typed_table_block/locale/ru/LC_MESSAGES/django.po +3 -3
  209. wagtail/contrib/typed_table_block/locale/sl/LC_MESSAGES/django.po +2 -2
  210. wagtail/documents/locale/ar/LC_MESSAGES/django.mo +0 -0
  211. wagtail/documents/locale/ar/LC_MESSAGES/django.po +11 -10
  212. wagtail/documents/locale/be/LC_MESSAGES/django.mo +0 -0
  213. wagtail/documents/locale/be/LC_MESSAGES/django.po +17 -11
  214. wagtail/documents/locale/bg/LC_MESSAGES/django.po +4 -4
  215. wagtail/documents/locale/ca/LC_MESSAGES/django.po +10 -10
  216. wagtail/documents/locale/cs/LC_MESSAGES/django.po +6 -6
  217. wagtail/documents/locale/de/LC_MESSAGES/django.po +8 -10
  218. wagtail/documents/locale/el/LC_MESSAGES/django.po +8 -8
  219. wagtail/documents/locale/es/LC_MESSAGES/django.po +8 -8
  220. wagtail/documents/locale/et/LC_MESSAGES/django.po +6 -6
  221. wagtail/documents/locale/fa/LC_MESSAGES/django.po +8 -8
  222. wagtail/documents/locale/fi/LC_MESSAGES/django.po +10 -10
  223. wagtail/documents/locale/fr/LC_MESSAGES/django.po +6 -6
  224. wagtail/documents/locale/gl/LC_MESSAGES/django.po +8 -8
  225. wagtail/documents/locale/hi/LC_MESSAGES/django.mo +0 -0
  226. wagtail/documents/locale/hi/LC_MESSAGES/django.po +3 -0
  227. wagtail/documents/locale/hr_HR/LC_MESSAGES/django.po +14 -14
  228. wagtail/documents/locale/hu/LC_MESSAGES/django.po +8 -8
  229. wagtail/documents/locale/id_ID/LC_MESSAGES/django.po +6 -6
  230. wagtail/documents/locale/is_IS/LC_MESSAGES/django.po +8 -8
  231. wagtail/documents/locale/it/LC_MESSAGES/django.po +8 -8
  232. wagtail/documents/locale/ja/LC_MESSAGES/django.po +8 -8
  233. wagtail/documents/locale/ko/LC_MESSAGES/django.po +8 -8
  234. wagtail/documents/locale/lt/LC_MESSAGES/django.po +8 -8
  235. wagtail/documents/locale/mi/LC_MESSAGES/django.po +10 -10
  236. wagtail/documents/locale/mn/LC_MESSAGES/django.po +4 -5
  237. wagtail/documents/locale/nb/LC_MESSAGES/django.mo +0 -0
  238. wagtail/documents/locale/nb/LC_MESSAGES/django.po +158 -7
  239. wagtail/documents/locale/nl/LC_MESSAGES/django.po +8 -8
  240. wagtail/documents/locale/pl/LC_MESSAGES/django.po +11 -11
  241. wagtail/documents/locale/pt_BR/LC_MESSAGES/django.po +8 -8
  242. wagtail/documents/locale/pt_PT/LC_MESSAGES/django.po +8 -8
  243. wagtail/documents/locale/ro/LC_MESSAGES/django.po +8 -8
  244. wagtail/documents/locale/ru/LC_MESSAGES/django.po +9 -9
  245. wagtail/documents/locale/sk_SK/LC_MESSAGES/django.po +10 -10
  246. wagtail/documents/locale/sl/LC_MESSAGES/django.po +10 -10
  247. wagtail/documents/locale/sr/LC_MESSAGES/django.po +2 -2
  248. wagtail/documents/locale/sv/LC_MESSAGES/django.po +6 -6
  249. wagtail/documents/locale/th/LC_MESSAGES/django.po +8 -8
  250. wagtail/documents/locale/tr/LC_MESSAGES/django.po +8 -8
  251. wagtail/documents/locale/tr_TR/LC_MESSAGES/django.po +8 -8
  252. wagtail/documents/locale/uk/LC_MESSAGES/django.po +8 -8
  253. wagtail/documents/locale/zh/LC_MESSAGES/django.po +2 -2
  254. wagtail/documents/locale/zh_Hans/LC_MESSAGES/django.po +4 -4
  255. wagtail/documents/locale/zh_Hant/LC_MESSAGES/django.po +4 -4
  256. wagtail/embeds/locale/be/LC_MESSAGES/django.po +3 -3
  257. wagtail/embeds/locale/hr_HR/LC_MESSAGES/django.po +2 -2
  258. wagtail/embeds/locale/pl/LC_MESSAGES/django.po +3 -3
  259. wagtail/embeds/locale/ru/LC_MESSAGES/django.po +3 -3
  260. wagtail/embeds/locale/sl/LC_MESSAGES/django.po +2 -2
  261. wagtail/images/locale/ar/LC_MESSAGES/django.po +6 -6
  262. wagtail/images/locale/be/LC_MESSAGES/django.mo +0 -0
  263. wagtail/images/locale/be/LC_MESSAGES/django.po +24 -3
  264. wagtail/images/locale/ca/LC_MESSAGES/django.po +8 -8
  265. wagtail/images/locale/cs/LC_MESSAGES/django.po +8 -8
  266. wagtail/images/locale/cy/LC_MESSAGES/django.po +8 -8
  267. wagtail/images/locale/de/LC_MESSAGES/django.po +6 -6
  268. wagtail/images/locale/el/LC_MESSAGES/django.po +8 -8
  269. wagtail/images/locale/es/LC_MESSAGES/django.po +10 -10
  270. wagtail/images/locale/et/LC_MESSAGES/django.po +8 -8
  271. wagtail/images/locale/fa/LC_MESSAGES/django.po +8 -8
  272. wagtail/images/locale/fi/LC_MESSAGES/django.po +8 -8
  273. wagtail/images/locale/fr/LC_MESSAGES/django.po +6 -6
  274. wagtail/images/locale/gl/LC_MESSAGES/django.po +8 -8
  275. wagtail/images/locale/hi/LC_MESSAGES/django.mo +0 -0
  276. wagtail/images/locale/hi/LC_MESSAGES/django.po +25 -0
  277. wagtail/images/locale/hr_HR/LC_MESSAGES/django.po +8 -8
  278. wagtail/images/locale/hu/LC_MESSAGES/django.po +8 -8
  279. wagtail/images/locale/id_ID/LC_MESSAGES/django.po +6 -6
  280. wagtail/images/locale/is_IS/LC_MESSAGES/django.po +8 -8
  281. wagtail/images/locale/it/LC_MESSAGES/django.po +8 -8
  282. wagtail/images/locale/ja/LC_MESSAGES/django.po +8 -8
  283. wagtail/images/locale/ko/LC_MESSAGES/django.po +6 -6
  284. wagtail/images/locale/lt/LC_MESSAGES/django.po +8 -8
  285. wagtail/images/locale/nb/LC_MESSAGES/django.mo +0 -0
  286. wagtail/images/locale/nb/LC_MESSAGES/django.po +241 -9
  287. wagtail/images/locale/nl/LC_MESSAGES/django.po +10 -10
  288. wagtail/images/locale/pl/LC_MESSAGES/django.po +11 -11
  289. wagtail/images/locale/pt_BR/LC_MESSAGES/django.po +8 -8
  290. wagtail/images/locale/pt_PT/LC_MESSAGES/django.po +8 -8
  291. wagtail/images/locale/ro/LC_MESSAGES/django.po +8 -8
  292. wagtail/images/locale/ru/LC_MESSAGES/django.po +11 -11
  293. wagtail/images/locale/sk_SK/LC_MESSAGES/django.po +8 -8
  294. wagtail/images/locale/sl/LC_MESSAGES/django.mo +0 -0
  295. wagtail/images/locale/sl/LC_MESSAGES/django.po +46 -10
  296. wagtail/images/locale/sv/LC_MESSAGES/django.po +6 -6
  297. wagtail/images/locale/tet/LC_MESSAGES/django.po +4 -4
  298. wagtail/images/locale/th/LC_MESSAGES/django.po +8 -8
  299. wagtail/images/locale/tr/LC_MESSAGES/django.po +6 -6
  300. wagtail/images/locale/tr_TR/LC_MESSAGES/django.po +6 -6
  301. wagtail/images/locale/uk/LC_MESSAGES/django.po +8 -8
  302. wagtail/images/locale/zh_Hans/LC_MESSAGES/django.po +4 -4
  303. wagtail/images/locale/zh_Hant/LC_MESSAGES/django.po +4 -4
  304. wagtail/images/static/wagtailimages/js/focal-point-chooser.js +1 -1
  305. wagtail/locale/be/LC_MESSAGES/django.mo +0 -0
  306. wagtail/locale/be/LC_MESSAGES/django.po +11 -4
  307. wagtail/locale/hr_HR/LC_MESSAGES/django.po +2 -2
  308. wagtail/locale/nb/LC_MESSAGES/django.mo +0 -0
  309. wagtail/locale/nb/LC_MESSAGES/django.po +3 -0
  310. wagtail/locale/pl/LC_MESSAGES/django.po +3 -3
  311. wagtail/locale/pt_BR/LC_MESSAGES/django.po +1 -1
  312. wagtail/locale/ru/LC_MESSAGES/django.po +3 -3
  313. wagtail/locale/sl/LC_MESSAGES/django.po +2 -2
  314. wagtail/locale/uk/LC_MESSAGES/django.mo +0 -0
  315. wagtail/locale/uk/LC_MESSAGES/django.po +13 -0
  316. wagtail/locales/locale/be/LC_MESSAGES/django.po +3 -3
  317. wagtail/locales/locale/hr_HR/LC_MESSAGES/django.po +2 -2
  318. wagtail/locales/locale/pl/LC_MESSAGES/django.po +3 -3
  319. wagtail/locales/locale/ru/LC_MESSAGES/django.po +3 -3
  320. wagtail/locales/locale/sl/LC_MESSAGES/django.po +2 -2
  321. wagtail/project_template/requirements.txt +1 -1
  322. wagtail/query.py +1 -1
  323. wagtail/search/locale/be/LC_MESSAGES/django.po +3 -3
  324. wagtail/search/locale/hr_HR/LC_MESSAGES/django.po +2 -2
  325. wagtail/search/locale/nb/LC_MESSAGES/django.mo +0 -0
  326. wagtail/search/locale/nb/LC_MESSAGES/django.po +8 -1
  327. wagtail/search/locale/pl/LC_MESSAGES/django.po +3 -3
  328. wagtail/search/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  329. wagtail/search/locale/pt_BR/LC_MESSAGES/django.po +2 -2
  330. wagtail/search/locale/ru/LC_MESSAGES/django.po +3 -3
  331. wagtail/search/locale/sl/LC_MESSAGES/django.po +2 -2
  332. wagtail/sites/locale/be/LC_MESSAGES/django.po +3 -3
  333. wagtail/sites/locale/hi/LC_MESSAGES/django.mo +0 -0
  334. wagtail/sites/locale/hi/LC_MESSAGES/django.po +22 -0
  335. wagtail/sites/locale/hr_HR/LC_MESSAGES/django.po +2 -2
  336. wagtail/sites/locale/pl/LC_MESSAGES/django.po +3 -3
  337. wagtail/sites/locale/ru/LC_MESSAGES/django.po +3 -3
  338. wagtail/sites/locale/sl/LC_MESSAGES/django.po +2 -2
  339. wagtail/sites/locale/sr/LC_MESSAGES/django.po +2 -2
  340. wagtail/snippets/locale/ar/LC_MESSAGES/django.po +4 -4
  341. wagtail/snippets/locale/be/LC_MESSAGES/django.po +7 -7
  342. wagtail/snippets/locale/bg/LC_MESSAGES/django.po +4 -4
  343. wagtail/snippets/locale/ca/LC_MESSAGES/django.po +10 -10
  344. wagtail/snippets/locale/cs/LC_MESSAGES/django.po +4 -4
  345. wagtail/snippets/locale/cy/LC_MESSAGES/django.po +4 -4
  346. wagtail/snippets/locale/de/LC_MESSAGES/django.po +7 -7
  347. wagtail/snippets/locale/el/LC_MESSAGES/django.po +4 -4
  348. wagtail/snippets/locale/es/LC_MESSAGES/django.po +10 -10
  349. wagtail/snippets/locale/et/LC_MESSAGES/django.po +4 -4
  350. wagtail/snippets/locale/fa/LC_MESSAGES/django.po +4 -4
  351. wagtail/snippets/locale/fi/LC_MESSAGES/django.po +4 -4
  352. wagtail/snippets/locale/fr/LC_MESSAGES/django.po +9 -9
  353. wagtail/snippets/locale/gl/LC_MESSAGES/django.po +10 -10
  354. wagtail/snippets/locale/hi/LC_MESSAGES/django.mo +0 -0
  355. wagtail/snippets/locale/hi/LC_MESSAGES/django.po +25 -0
  356. wagtail/snippets/locale/hr_HR/LC_MESSAGES/django.po +12 -12
  357. wagtail/snippets/locale/hu/LC_MESSAGES/django.po +9 -9
  358. wagtail/snippets/locale/id_ID/LC_MESSAGES/django.po +4 -4
  359. wagtail/snippets/locale/is_IS/LC_MESSAGES/django.po +7 -7
  360. wagtail/snippets/locale/it/LC_MESSAGES/django.po +9 -9
  361. wagtail/snippets/locale/ja/LC_MESSAGES/django.po +4 -4
  362. wagtail/snippets/locale/ko/LC_MESSAGES/django.po +10 -10
  363. wagtail/snippets/locale/lt/LC_MESSAGES/django.po +4 -4
  364. wagtail/snippets/locale/mi/LC_MESSAGES/django.po +4 -4
  365. wagtail/snippets/locale/mn/LC_MESSAGES/django.po +4 -4
  366. wagtail/snippets/locale/nb/LC_MESSAGES/django.mo +0 -0
  367. wagtail/snippets/locale/nb/LC_MESSAGES/django.po +105 -5
  368. wagtail/snippets/locale/nl/LC_MESSAGES/django.po +12 -12
  369. wagtail/snippets/locale/pl/LC_MESSAGES/django.po +13 -13
  370. wagtail/snippets/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  371. wagtail/snippets/locale/pt_BR/LC_MESSAGES/django.po +6 -6
  372. wagtail/snippets/locale/pt_PT/LC_MESSAGES/django.po +4 -4
  373. wagtail/snippets/locale/ro/LC_MESSAGES/django.po +10 -10
  374. wagtail/snippets/locale/ru/LC_MESSAGES/django.po +12 -12
  375. wagtail/snippets/locale/sk_SK/LC_MESSAGES/django.po +2 -2
  376. wagtail/snippets/locale/sl/LC_MESSAGES/django.po +12 -12
  377. wagtail/snippets/locale/sr/LC_MESSAGES/django.po +2 -2
  378. wagtail/snippets/locale/sv/LC_MESSAGES/django.po +10 -10
  379. wagtail/snippets/locale/tet/LC_MESSAGES/django.po +4 -4
  380. wagtail/snippets/locale/th/LC_MESSAGES/django.po +4 -4
  381. wagtail/snippets/locale/tr/LC_MESSAGES/django.po +4 -4
  382. wagtail/snippets/locale/tr_TR/LC_MESSAGES/django.po +4 -4
  383. wagtail/snippets/locale/uk/LC_MESSAGES/django.po +4 -4
  384. wagtail/snippets/locale/zh/LC_MESSAGES/django.po +4 -4
  385. wagtail/snippets/locale/zh_Hans/LC_MESSAGES/django.po +4 -4
  386. wagtail/snippets/locale/zh_Hant/LC_MESSAGES/django.po +4 -4
  387. wagtail/snippets/templates/wagtailsnippets/snippets/index.html +1 -1
  388. wagtail/snippets/tests/test_viewset.py +26 -10
  389. wagtail/test/testapp/models.py +18 -0
  390. wagtail/tests/test_page_queryset.py +19 -0
  391. wagtail/tests/test_revision_model.py +23 -0
  392. wagtail/tests/test_workflow.py +20 -0
  393. wagtail/users/locale/ar/LC_MESSAGES/django.po +4 -4
  394. wagtail/users/locale/be/LC_MESSAGES/django.po +13 -13
  395. wagtail/users/locale/ca/LC_MESSAGES/django.po +12 -12
  396. wagtail/users/locale/cs/LC_MESSAGES/django.po +10 -10
  397. wagtail/users/locale/cy/LC_MESSAGES/django.po +12 -12
  398. wagtail/users/locale/de/LC_MESSAGES/django.po +10 -10
  399. wagtail/users/locale/el/LC_MESSAGES/django.po +4 -4
  400. wagtail/users/locale/es/LC_MESSAGES/django.po +12 -12
  401. wagtail/users/locale/et/LC_MESSAGES/django.po +10 -10
  402. wagtail/users/locale/fa/LC_MESSAGES/django.po +6 -6
  403. wagtail/users/locale/fi/LC_MESSAGES/django.po +12 -12
  404. wagtail/users/locale/fr/LC_MESSAGES/django.po +10 -10
  405. wagtail/users/locale/gl/LC_MESSAGES/django.po +12 -12
  406. wagtail/users/locale/hr_HR/LC_MESSAGES/django.po +16 -16
  407. wagtail/users/locale/hu/LC_MESSAGES/django.po +12 -12
  408. wagtail/users/locale/id_ID/LC_MESSAGES/django.po +4 -4
  409. wagtail/users/locale/is_IS/LC_MESSAGES/django.po +12 -12
  410. wagtail/users/locale/it/LC_MESSAGES/django.po +12 -12
  411. wagtail/users/locale/ja/LC_MESSAGES/django.po +4 -4
  412. wagtail/users/locale/ko/LC_MESSAGES/django.po +4 -4
  413. wagtail/users/locale/lt/LC_MESSAGES/django.po +4 -4
  414. wagtail/users/locale/lv/LC_MESSAGES/django.po +4 -4
  415. wagtail/users/locale/mn/LC_MESSAGES/django.po +8 -9
  416. wagtail/users/locale/nb/LC_MESSAGES/django.mo +0 -0
  417. wagtail/users/locale/nb/LC_MESSAGES/django.po +186 -5
  418. wagtail/users/locale/nl/LC_MESSAGES/django.po +10 -10
  419. wagtail/users/locale/pl/LC_MESSAGES/django.po +13 -13
  420. wagtail/users/locale/pt_BR/LC_MESSAGES/django.po +13 -13
  421. wagtail/users/locale/pt_PT/LC_MESSAGES/django.po +10 -10
  422. wagtail/users/locale/ro/LC_MESSAGES/django.po +12 -12
  423. wagtail/users/locale/ru/LC_MESSAGES/django.po +17 -17
  424. wagtail/users/locale/sk_SK/LC_MESSAGES/django.po +6 -6
  425. wagtail/users/locale/sl/LC_MESSAGES/django.po +14 -14
  426. wagtail/users/locale/sv/LC_MESSAGES/django.po +12 -12
  427. wagtail/users/locale/tet/LC_MESSAGES/django.po +4 -4
  428. wagtail/users/locale/th/LC_MESSAGES/django.po +4 -4
  429. wagtail/users/locale/tr/LC_MESSAGES/django.po +4 -4
  430. wagtail/users/locale/tr_TR/LC_MESSAGES/django.po +4 -4
  431. wagtail/users/locale/uk/LC_MESSAGES/django.po +12 -12
  432. wagtail/users/locale/zh_Hans/LC_MESSAGES/django.po +6 -6
  433. wagtail/users/locale/zh_Hant/LC_MESSAGES/django.po +2 -2
  434. {wagtail-5.2.1.dist-info → wagtail-5.2.3.dist-info}/METADATA +4 -3
  435. {wagtail-5.2.1.dist-info → wagtail-5.2.3.dist-info}/RECORD +439 -425
  436. {wagtail-5.2.1.dist-info → wagtail-5.2.3.dist-info}/LICENSE +0 -0
  437. {wagtail-5.2.1.dist-info → wagtail-5.2.3.dist-info}/WHEEL +0 -0
  438. {wagtail-5.2.1.dist-info → wagtail-5.2.3.dist-info}/entry_points.txt +0 -0
  439. {wagtail-5.2.1.dist-info → wagtail-5.2.3.dist-info}/top_level.txt +0 -0
@@ -15,6 +15,11 @@ from freezegun import freeze_time
15
15
  from openpyxl import load_workbook
16
16
 
17
17
  from wagtail.admin.admin_url_finder import AdminURLFinder
18
+ from wagtail.admin.mail import (
19
+ BaseWorkflowStateEmailNotifier,
20
+ WorkflowStateApprovalEmailNotifier,
21
+ WorkflowStateRejectionEmailNotifier,
22
+ )
18
23
  from wagtail.admin.utils import (
19
24
  get_admin_base_url,
20
25
  get_latest_str,
@@ -3596,6 +3601,144 @@ class TestDashboardWithPages(BasePageWorkflowTests):
3596
3601
  "Compare with previous version",
3597
3602
  )
3598
3603
 
3604
+ def test_dashboard_after_deleting_object_in_moderation(self):
3605
+ # WorkflowState's content_object may point to a nonexistent object
3606
+ # https://github.com/wagtail/wagtail/issues/11300
3607
+ self.login(self.submitter)
3608
+ self.post("submit")
3609
+ self.object.delete()
3610
+
3611
+ response = self.client.get(reverse("wagtailadmin_home"))
3612
+ self.assertEqual(response.status_code, 200)
3613
+ self.assertNotContains(response, "Your pages and snippets in a workflow")
3614
+
3615
+ self.login(self.moderator)
3616
+ response = self.client.get(reverse("wagtailadmin_home"))
3617
+ self.assertEqual(response.status_code, 200)
3618
+ self.assertNotContains(response, "Awaiting your review")
3619
+
3599
3620
 
3600
3621
  class TestDashboardWithSnippets(TestDashboardWithPages, BaseSnippetWorkflowTests):
3601
3622
  pass
3623
+
3624
+
3625
+ class TestDashboardWithNonLockableSnippets(TestDashboardWithSnippets):
3626
+ # This model does not use LockableMixin, and it also does not have a
3627
+ # GenericRelation to WorkflowState and Revision, but it should not break
3628
+ # the dashboard.
3629
+ # See https://github.com/wagtail/wagtail/issues/11300 for more details.
3630
+ model = ModeratedModel
3631
+
3632
+
3633
+ class TestWorkflowStateEmailNotifier(BasePageWorkflowTests):
3634
+ def setUp(self):
3635
+ super().setUp()
3636
+ # Ensure a revision exists
3637
+ self.object.save_revision()
3638
+
3639
+ def test_workflowstate_email_notifier_get_recipient_users__without_triggering_user(
3640
+ self,
3641
+ ):
3642
+ self.workflow.start(self.object, user=self.submitter)
3643
+ workflow_state = self.object.current_workflow_state
3644
+
3645
+ for notifier in [
3646
+ WorkflowStateApprovalEmailNotifier(),
3647
+ WorkflowStateRejectionEmailNotifier(),
3648
+ ]:
3649
+ with self.subTest(f"Testing with {notifier}"):
3650
+ self.assertSetEqual(
3651
+ notifier.get_recipient_users(workflow_state), {self.submitter}
3652
+ )
3653
+
3654
+ def test_workflowstate_email_notifier_get_recipient_users__with_trigerring_user(
3655
+ self,
3656
+ ):
3657
+ self.workflow.start(self.object, user=self.submitter)
3658
+ workflow_state = self.object.current_workflow_state
3659
+
3660
+ for notifier in [
3661
+ WorkflowStateApprovalEmailNotifier(),
3662
+ WorkflowStateRejectionEmailNotifier(),
3663
+ ]:
3664
+ with self.subTest(f"Testing with {notifier}"):
3665
+ self.assertSetEqual(
3666
+ notifier.get_recipient_users(workflow_state, user=self.moderator),
3667
+ {self.submitter},
3668
+ )
3669
+
3670
+ def test_workflowstate_email_notifier_get_recipient_users__without_requested_by(
3671
+ self,
3672
+ ):
3673
+ self.workflow.start(self.object, user=self.submitter)
3674
+ workflow_state: WorkflowState = self.object.current_workflow_state
3675
+ workflow_state.requested_by = None
3676
+ workflow_state.save(update_fields=["requested_by"])
3677
+
3678
+ for notifier in [
3679
+ WorkflowStateApprovalEmailNotifier(),
3680
+ WorkflowStateRejectionEmailNotifier(),
3681
+ ]:
3682
+ with self.subTest(f"Testing with {notifier}"):
3683
+ self.assertSetEqual(notifier.get_recipient_users(workflow_state), set())
3684
+ self.assertSetEqual(
3685
+ notifier.get_recipient_users(workflow_state, user=self.moderator),
3686
+ set(),
3687
+ )
3688
+
3689
+ def test_workflowstate_email_notifier_get_recipient_users__with_same_requested_by_and_triggering_user(
3690
+ self,
3691
+ ):
3692
+ self.workflow.start(self.object, user=self.submitter)
3693
+ workflow_state: WorkflowState = self.object.current_workflow_state
3694
+ workflow_state.requested_by = None
3695
+ workflow_state.save(update_fields=["requested_by"])
3696
+
3697
+ for notifier in [
3698
+ WorkflowStateApprovalEmailNotifier(),
3699
+ WorkflowStateRejectionEmailNotifier(),
3700
+ ]:
3701
+ with self.subTest(f"Testing with {notifier}"):
3702
+ self.assertSetEqual(notifier.get_recipient_users(workflow_state), set())
3703
+ self.assertSetEqual(
3704
+ notifier.get_recipient_users(workflow_state, user=self.submitter),
3705
+ set(),
3706
+ )
3707
+
3708
+ @mock.patch("wagtail.admin.mail.BaseWorkflowStateEmailNotifier.get_recipient_users")
3709
+ def test_base_workflowstate_email_notifier_get_valid_recipients(
3710
+ self, mock_get_recipient_users
3711
+ ):
3712
+ notifier = BaseWorkflowStateEmailNotifier()
3713
+
3714
+ # check with an empty set
3715
+ mock_get_recipient_users.return_value = set()
3716
+ self.assertSetEqual(notifier.get_valid_recipients(self.object), set())
3717
+
3718
+ # check None values are filtered out
3719
+ mock_get_recipient_users.return_value = {None}
3720
+ self.assertSetEqual(notifier.get_valid_recipients(self.object), set())
3721
+
3722
+ # check with a valid user
3723
+ mock_get_recipient_users.return_value = {self.submitter}
3724
+ notifications = ["approved", "rejected", "submitted"]
3725
+ for notification in notifications:
3726
+ with self.subTest(f"Testing with {notification}_notifications"):
3727
+ notifier.notification = notification
3728
+ self.assertSetEqual(
3729
+ notifier.get_valid_recipients(self.object), {self.submitter}
3730
+ )
3731
+
3732
+ # remove notifications and re-test
3733
+ userprofile = UserProfile.get_for_user(self.submitter)
3734
+ updated_fields = []
3735
+ for notification in notifications:
3736
+ attribute = f"{notification}_notifications"
3737
+ setattr(userprofile, attribute, False)
3738
+ updated_fields.append(attribute)
3739
+ userprofile.save(update_fields=updated_fields)
3740
+
3741
+ for notification in notifications:
3742
+ with self.subTest(f"Testing with {notification}_notifications"):
3743
+ notifier.notification = notification
3744
+ self.assertSetEqual(notifier.get_valid_recipients(self.object), set())
@@ -161,6 +161,12 @@ class UserObjectsInWorkflowModerationPanel(Component):
161
161
  )
162
162
  .order_by("-current_task_state__started_at")
163
163
  )
164
+ # Filter out workflow states where the GenericForeignKey points to
165
+ # a nonexistent object. This can happen if the model does not define
166
+ # a GenericRelation to WorkflowState and the instance is deleted.
167
+ context["workflow_states"] = [
168
+ state for state in context["workflow_states"] if state.content_object
169
+ ]
164
170
  else:
165
171
  context["workflow_states"] = WorkflowState.objects.none()
166
172
  context["request"] = request
@@ -188,6 +194,7 @@ class WorkflowObjectsToModeratePanel(Component):
188
194
  "revision",
189
195
  "task",
190
196
  "revision__user",
197
+ "workflow_state",
191
198
  )
192
199
  .prefetch_related(
193
200
  "revision__content_object",
@@ -198,6 +205,12 @@ class WorkflowObjectsToModeratePanel(Component):
198
205
  )
199
206
  for state in states:
200
207
  obj = state.revision.content_object
208
+ # Skip task states where the revision's GenericForeignKey points to
209
+ # a nonexistent object. This can happen if the model does not define
210
+ # a GenericRelation to WorkflowState and/or Revision and the instance
211
+ # is deleted.
212
+ if not obj:
213
+ continue
201
214
  actions = state.task.specific.get_actions(obj, request.user)
202
215
  workflow_tasks = state.workflow_state.all_tasks_with_status()
203
216
 
@@ -82,6 +82,8 @@ class AgingPagesView(PageReportView):
82
82
  user_id_value, get_deleted_user_display_name(user_id=user_id_value)
83
83
  )
84
84
  page.last_published_by_user = last_published_by_user
85
+ else:
86
+ page.last_published_by_user = ""
85
87
 
86
88
  def decorate_paginated_queryset(self, queryset):
87
89
  user_ids = set(queryset.values_list("last_published_by", flat=True))
@@ -17,9 +17,9 @@ msgstr ""
17
17
  "Content-Type: text/plain; charset=UTF-8\n"
18
18
  "Content-Transfer-Encoding: 8bit\n"
19
19
  "Language: be\n"
20
- "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
21
- "n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || "
22
- "(n%100>=11 && n%100<=14)? 2 : 3);\n"
20
+ "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
21
+ "%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
22
+ "%100>=11 && n%100<=14)? 2 : 3);\n"
23
23
 
24
24
  msgid "Wagtail forms"
25
25
  msgstr "Формы Wagtail"
@@ -18,8 +18,8 @@ msgstr ""
18
18
  "Content-Type: text/plain; charset=UTF-8\n"
19
19
  "Content-Transfer-Encoding: 8bit\n"
20
20
  "Language: hr_HR\n"
21
- "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
22
- "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
21
+ "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
22
+ "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
23
23
 
24
24
  msgid "Wagtail forms"
25
25
  msgstr "Wagtail formulari"
@@ -19,9 +19,9 @@ msgstr ""
19
19
  "Content-Type: text/plain; charset=UTF-8\n"
20
20
  "Content-Transfer-Encoding: 8bit\n"
21
21
  "Language: pl\n"
22
- "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && "
23
- "(n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && "
24
- "n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
22
+ "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n"
23
+ "%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n"
24
+ "%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
25
25
 
26
26
  msgid "Wagtail forms"
27
27
  msgstr "Formularze Wagtail"
@@ -10,7 +10,7 @@
10
10
  # Guilherme Nabanete <neoheartz@gmail.com>, 2016
11
11
  # Luiz Boaretto <lboaretto@gmail.com>, 2016
12
12
  # Luiz Boaretto <lboaretto@gmail.com>, 2016-2020
13
- # Rodrigo de Almeida Sottomaior Macedo <rmsolucoeseminformatica@protonmail.com>, 2022
13
+ # Rodrigo de Almeida Sottomaior Macedo <sottomaiormacedotec@gmail.com>, 2022
14
14
  msgid ""
15
15
  msgstr ""
16
16
  "Project-Id-Version: Wagtail\n"
@@ -18,7 +18,7 @@ msgstr ""
18
18
  "POT-Creation-Date: 2023-10-19 23:14+0100\n"
19
19
  "PO-Revision-Date: 2014-09-11 15:42+0000\n"
20
20
  "Last-Translator: Rodrigo de Almeida Sottomaior Macedo "
21
- "<rmsolucoeseminformatica@protonmail.com>, 2022\n"
21
+ "<sottomaiormacedotec@gmail.com>, 2022\n"
22
22
  "Language-Team: Portuguese (Brazil) (http://app.transifex.com/torchbox/"
23
23
  "wagtail/language/pt_BR/)\n"
24
24
  "MIME-Version: 1.0\n"
@@ -27,9 +27,9 @@ msgstr ""
27
27
  "Content-Type: text/plain; charset=UTF-8\n"
28
28
  "Content-Transfer-Encoding: 8bit\n"
29
29
  "Language: ru\n"
30
- "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
31
- "n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || "
32
- "(n%100>=11 && n%100<=14)? 2 : 3);\n"
30
+ "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
31
+ "%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
32
+ "%100>=11 && n%100<=14)? 2 : 3);\n"
33
33
 
34
34
  msgid "Wagtail forms"
35
35
  msgstr "Формы Wagtail"
@@ -21,8 +21,8 @@ msgstr ""
21
21
  "Content-Type: text/plain; charset=UTF-8\n"
22
22
  "Content-Transfer-Encoding: 8bit\n"
23
23
  "Language: sl\n"
24
- "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || "
25
- "n%100==4 ? 2 : 3);\n"
24
+ "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
25
+ "%100==4 ? 2 : 3);\n"
26
26
 
27
27
  msgid "Wagtail forms"
28
28
  msgstr "Obrazci Wagtail"
@@ -18,7 +18,11 @@ class FormSubmissionsPanel(Panel):
18
18
  def submissions(self):
19
19
  form_page_model = self.panel.model
20
20
  form_submissions_model = form_page_model().get_submission_class()
21
- return form_submissions_model.objects.filter(page=self.instance)
21
+ if self.instance.pk:
22
+ return form_submissions_model.objects.filter(page=self.instance)
23
+ else:
24
+ # Page has not been created yet, so there can't be any submissions
25
+ return form_submissions_model.objects.none()
22
26
 
23
27
  @cached_property
24
28
  def submission_count(self):
@@ -76,6 +76,30 @@ class TestFormResponsesPanel(TestCase):
76
76
  self.assertFalse(self.panel.is_shown())
77
77
 
78
78
 
79
+ class TestFormResponsesPanelWithNewPage(TestCase):
80
+ def setUp(self):
81
+ self.request = RequestFactory().get("/")
82
+ user = AnonymousUser() # technically, Anonymous users cannot access the admin
83
+ self.request.user = user
84
+
85
+ self.form_page = FormPage()
86
+
87
+ self.FormPageForm = get_form_for_model(
88
+ FormPage,
89
+ form_class=WagtailAdminPageForm,
90
+ fields=["title", "slug", "to_address", "from_address", "subject"],
91
+ )
92
+
93
+ panel = FormSubmissionsPanel().bind_to_model(FormPage)
94
+ self.panel = panel.get_bound_panel(
95
+ instance=self.form_page, form=self.FormPageForm(), request=self.request
96
+ )
97
+
98
+ def test_render_without_submissions(self):
99
+ """The panel should not be shown if the number of submission is zero."""
100
+ self.assertFalse(self.panel.is_shown())
101
+
102
+
79
103
  class TestFormResponsesPanelWithCustomSubmissionClass(WagtailTestUtils, TestCase):
80
104
  def setUp(self):
81
105
  self.request = RequestFactory().get("/")
@@ -1824,3 +1848,85 @@ class TestPreview(WagtailTestUtils, TestCase):
1824
1848
  response = self.client.get(preview_url + params)
1825
1849
  self.assertEqual(response.status_code, 200)
1826
1850
  self.assertTemplateUsed(response, template)
1851
+
1852
+
1853
+ class TestFormPageCreate(WagtailTestUtils, TestCase):
1854
+ def setUp(self):
1855
+ # Find root page
1856
+ self.root_page = Page.objects.get(id=2)
1857
+
1858
+ # Login
1859
+ self.user = self.login()
1860
+
1861
+ def test_get_creation_form(self):
1862
+ response = self.client.get(
1863
+ reverse(
1864
+ "wagtailadmin_pages:add",
1865
+ args=("tests", "formpage", self.root_page.id),
1866
+ )
1867
+ )
1868
+ self.assertEqual(response.status_code, 200)
1869
+
1870
+ def test_post_creation_form(self):
1871
+ post_data = {
1872
+ "title": "Form page!",
1873
+ "slug": "contact-us",
1874
+ "form_fields-TOTAL_FORMS": "1",
1875
+ "form_fields-INITIAL_FORMS": "1",
1876
+ "form_fields-MIN_NUM_FORMS": "0",
1877
+ "form_fields-MAX_NUM_FORMS": "1000",
1878
+ "form_fields-0-id": "",
1879
+ "form_fields-0-label": "Field One",
1880
+ "form_fields-0-field_type": "singleline",
1881
+ }
1882
+ response = self.client.post(
1883
+ reverse(
1884
+ "wagtailadmin_pages:add",
1885
+ args=("tests", "formpage", self.root_page.id),
1886
+ ),
1887
+ post_data,
1888
+ )
1889
+ # Find the page and check it
1890
+ page = Page.objects.get(slug="contact-us")
1891
+
1892
+ # Should be redirected to edit page
1893
+ self.assertRedirects(
1894
+ response, reverse("wagtailadmin_pages:edit", args=(page.id,))
1895
+ )
1896
+
1897
+
1898
+ class TestFormPageEdit(WagtailTestUtils, TestCase):
1899
+ def setUp(self):
1900
+ self.form_page = make_form_page()
1901
+
1902
+ # Login
1903
+ self.user = self.login()
1904
+
1905
+ def test_get_edit_form(self):
1906
+ response = self.client.get(
1907
+ reverse("wagtailadmin_pages:edit", args=(self.form_page.id,))
1908
+ )
1909
+ self.assertEqual(response.status_code, 200)
1910
+
1911
+ def test_post_edit_form(self):
1912
+ post_data = {
1913
+ "title": "Updated form page",
1914
+ "slug": "contact-us",
1915
+ "form_fields-TOTAL_FORMS": "1",
1916
+ "form_fields-INITIAL_FORMS": "1",
1917
+ "form_fields-MIN_NUM_FORMS": "0",
1918
+ "form_fields-MAX_NUM_FORMS": "1000",
1919
+ "form_fields-0-id": "",
1920
+ "form_fields-0-label": "Field One",
1921
+ "form_fields-0-field_type": "singleline",
1922
+ }
1923
+ response = self.client.post(
1924
+ reverse("wagtailadmin_pages:edit", args=(self.form_page.id,)),
1925
+ post_data,
1926
+ )
1927
+ # Should be redirected to edit page
1928
+ self.assertRedirects(
1929
+ response, reverse("wagtailadmin_pages:edit", args=(self.form_page.id,))
1930
+ )
1931
+ page = Page.objects.get(slug="contact-us").get_latest_revision_as_object()
1932
+ self.assertEqual(page.title, "Updated form page")
@@ -16,9 +16,9 @@ msgstr ""
16
16
  "Content-Type: text/plain; charset=UTF-8\n"
17
17
  "Content-Transfer-Encoding: 8bit\n"
18
18
  "Language: be\n"
19
- "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
20
- "n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || "
21
- "(n%100>=11 && n%100<=14)? 2 : 3);\n"
19
+ "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
20
+ "%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
21
+ "%100>=11 && n%100<=14)? 2 : 3);\n"
22
22
 
23
23
  msgid "Edit"
24
24
  msgstr "Рэдагаваць"
@@ -18,5 +18,11 @@ msgstr ""
18
18
  "Language: hi\n"
19
19
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
20
20
 
21
+ msgid "Saving…"
22
+ msgstr "Saving…"
23
+
24
+ msgid "Save"
25
+ msgstr "Save"
26
+
21
27
  msgid "Editing"
22
28
  msgstr "संपादन"
@@ -17,8 +17,8 @@ msgstr ""
17
17
  "Content-Type: text/plain; charset=UTF-8\n"
18
18
  "Content-Transfer-Encoding: 8bit\n"
19
19
  "Language: hr_HR\n"
20
- "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
21
- "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
20
+ "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
21
+ "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
22
22
 
23
23
  msgid "Wagtail ModelAdmin"
24
24
  msgstr "Wagtail ModelAdmin"
@@ -210,5 +210,8 @@ msgstr "Inspiserer"
210
210
  msgid "Inspecting %(object)s"
211
211
  msgstr "Inspiserer %(object)s"
212
212
 
213
+ msgid "Action"
214
+ msgstr "Handling"
215
+
213
216
  msgid "Date"
214
217
  msgstr "Dato"
@@ -21,9 +21,9 @@ msgstr ""
21
21
  "Content-Type: text/plain; charset=UTF-8\n"
22
22
  "Content-Transfer-Encoding: 8bit\n"
23
23
  "Language: pl\n"
24
- "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && "
25
- "(n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && "
26
- "n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
24
+ "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n"
25
+ "%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n"
26
+ "%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
27
27
 
28
28
  msgid "Wagtail ModelAdmin"
29
29
  msgstr "Wagtail ModelAdmin"
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # Translators:
6
6
  # Luiz Boaretto <lboaretto@gmail.com>, 2016,2019-2020
7
- # Rodrigo de Almeida Sottomaior Macedo <rmsolucoeseminformatica@protonmail.com>, 2021-2022
7
+ # Rodrigo de Almeida Sottomaior Macedo <sottomaiormacedotec@gmail.com>, 2021-2022
8
8
  msgid ""
9
9
  msgstr ""
10
10
  "Project-Id-Version: Wagtail\n"
@@ -12,7 +12,7 @@ msgstr ""
12
12
  "POT-Creation-Date: 2023-10-19 23:14+0100\n"
13
13
  "PO-Revision-Date: 2016-05-11 20:22+0000\n"
14
14
  "Last-Translator: Rodrigo de Almeida Sottomaior Macedo "
15
- "<rmsolucoeseminformatica@protonmail.com>, 2021-2022\n"
15
+ "<sottomaiormacedotec@gmail.com>, 2021-2022\n"
16
16
  "Language-Team: Portuguese (Brazil) (http://app.transifex.com/torchbox/"
17
17
  "wagtail/language/pt_BR/)\n"
18
18
  "MIME-Version: 1.0\n"
@@ -25,9 +25,9 @@ msgstr ""
25
25
  "Content-Type: text/plain; charset=UTF-8\n"
26
26
  "Content-Transfer-Encoding: 8bit\n"
27
27
  "Language: ru\n"
28
- "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
29
- "n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || "
30
- "(n%100>=11 && n%100<=14)? 2 : 3);\n"
28
+ "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
29
+ "%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
30
+ "%100>=11 && n%100<=14)? 2 : 3);\n"
31
31
 
32
32
  msgid "Wagtail ModelAdmin"
33
33
  msgstr "Управление моделями Wagtail"
@@ -18,8 +18,8 @@ msgstr ""
18
18
  "Content-Type: text/plain; charset=UTF-8\n"
19
19
  "Content-Transfer-Encoding: 8bit\n"
20
20
  "Language: sl\n"
21
- "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || "
22
- "n%100==4 ? 2 : 3);\n"
21
+ "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
22
+ "%100==4 ? 2 : 3);\n"
23
23
 
24
24
  msgid "Wagtail ModelAdmin"
25
25
  msgstr "Wagtail ModelAdmin"
@@ -16,8 +16,8 @@ msgstr ""
16
16
  "Content-Type: text/plain; charset=UTF-8\n"
17
17
  "Content-Transfer-Encoding: 8bit\n"
18
18
  "Language: sr\n"
19
- "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
20
- "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
19
+ "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
20
+ "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
21
21
 
22
22
  msgid "Saving…"
23
23
  msgstr "Čuvanje..."
@@ -146,11 +146,11 @@ msgstr "عذرًا ، لا توجد عمليات إعادة توجيه تطاب
146
146
 
147
147
  #, python-format
148
148
  msgid ""
149
- "No redirects have been created. Why not <a "
150
- "href=\"%(wagtailredirects_add_redirect_url)s\">add one</a>?"
149
+ "No redirects have been created. Why not <a href="
150
+ "\"%(wagtailredirects_add_redirect_url)s\">add one</a>?"
151
151
  msgstr ""
152
- "لم يتم إنشاء عمليات إعادة توجيه. لماذا لا<a "
153
- "href=\"%(wagtailredirects_add_redirect_url)s\"> تضيف واحدة</a>؟"
152
+ "لم يتم إنشاء عمليات إعادة توجيه. لماذا لا<a href="
153
+ "\"%(wagtailredirects_add_redirect_url)s\"> تضيف واحدة</a>؟"
154
154
 
155
155
  msgid "Search redirects"
156
156
  msgstr "ابحث تغييرات الاتجاه"
@@ -17,9 +17,9 @@ msgstr ""
17
17
  "Content-Type: text/plain; charset=UTF-8\n"
18
18
  "Content-Transfer-Encoding: 8bit\n"
19
19
  "Language: be\n"
20
- "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
21
- "n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || "
22
- "(n%100>=11 && n%100<=14)? 2 : 3);\n"
20
+ "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
21
+ "%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
22
+ "%100>=11 && n%100<=14)? 2 : 3);\n"
23
23
 
24
24
  msgid "Type"
25
25
  msgstr "Тып"
@@ -77,11 +77,11 @@ msgstr "Редактирайте това пренасочване"
77
77
 
78
78
  #, python-format
79
79
  msgid ""
80
- "No redirects have been created. Why not <a "
81
- "href=\"%(wagtailredirects_add_redirect_url)s\">add one</a>?"
80
+ "No redirects have been created. Why not <a href="
81
+ "\"%(wagtailredirects_add_redirect_url)s\">add one</a>?"
82
82
  msgstr ""
83
- "Няма създадени пренасочвания. Защо не <a "
84
- "href=\"%(wagtailredirects_add_redirect_url)s\">добавите един сега</a>?"
83
+ "Няма създадени пренасочвания. Защо не <a href="
84
+ "\"%(wagtailredirects_add_redirect_url)s\">добавите един сега</a>?"
85
85
 
86
86
  #, python-format
87
87
  msgid "Redirect '%(redirect_title)s' updated."
@@ -215,11 +215,11 @@ msgstr "Ho sentim, cap redirecció coincideix amb \"<em>%(query_string)s</em>\""
215
215
 
216
216
  #, python-format
217
217
  msgid ""
218
- "No redirects have been created. Why not <a "
219
- "href=\"%(wagtailredirects_add_redirect_url)s\">add one</a>?"
218
+ "No redirects have been created. Why not <a href="
219
+ "\"%(wagtailredirects_add_redirect_url)s\">add one</a>?"
220
220
  msgstr ""
221
- "No s'ha creat cap redirecció. Per què no <a "
222
- "href=\"%(wagtailredirects_add_redirect_url)s\">afegeixes una</a>?"
221
+ "No s'ha creat cap redirecció. Per què no <a href="
222
+ "\"%(wagtailredirects_add_redirect_url)s\">afegeixes una</a>?"
223
223
 
224
224
  msgid "Search redirects"
225
225
  msgstr "Cerca redireccions"
@@ -184,11 +184,11 @@ msgstr ""
184
184
 
185
185
  #, python-format
186
186
  msgid ""
187
- "No redirects have been created. Why not <a "
188
- "href=\"%(wagtailredirects_add_redirect_url)s\">add one</a>?"
187
+ "No redirects have been created. Why not <a href="
188
+ "\"%(wagtailredirects_add_redirect_url)s\">add one</a>?"
189
189
  msgstr ""
190
- "Nebyly nalezeny žádná přesměrování. Nové přesměrování můžete přidat <a "
191
- "href=\"%(wagtailredirects_add_redirect_url)s\">zde</a>?"
190
+ "Nebyly nalezeny žádná přesměrování. Nové přesměrování můžete přidat <a href="
191
+ "\"%(wagtailredirects_add_redirect_url)s\">zde</a>?"
192
192
 
193
193
  msgid "Search redirects"
194
194
  msgstr "Hledat přesměrování"