Skip to content

Commit

Permalink
Merge branch '1.10.x' into issue/8773
Browse files Browse the repository at this point in the history
# Conflicts:
#	.github/workflows/compile.yml
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Lib/console-shim.js
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/Lib/jstree.js
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-common.js
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-admin-settings.js
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-autorefresh.js
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset-video.js
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-asset.js
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-direct.js
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart-proxied.js
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-edit-cloudvideopart.js
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-metadata-cloudvideopart.js
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-data.js
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-alt.js
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-dash.js
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-html5.js
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors-smp.js
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-injectors.js
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Scripts/cloudmedia-videoplayer-main.js
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-admin-asset.css
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-admin-selecttask.css
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-admin-settings.css
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-edit-assets.css
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-edit-cloudvideopart.css
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-edit-jobs.css
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-progress.css
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-tabs.css
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/cloudmedia-videoplayer.css
#	src/Orchard.Web/Modules/Orchard.Azure.MediaServices/Styles/menu.cloudmedia-mediaproviders.css
#	src/Orchard.Web/Modules/Orchard.DynamicForms/Scripts/LayoutEditor.js
#	src/Orchard.Web/Modules/Orchard.DynamicForms/Scripts/Lib.js
#	src/Orchard.Web/Modules/Orchard.DynamicForms/Scripts/Lib.min.js
#	src/Orchard.Web/Modules/Orchard.DynamicForms/Styles/DynamicForms-Admin.css
#	src/Orchard.Web/Modules/Orchard.DynamicForms/Styles/DynamicForms.css
#	src/Orchard.Web/Modules/Orchard.DynamicForms/packages.config
#	src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.js
#	src/Orchard.Web/Modules/Orchard.Layouts/Scripts/LayoutEditor.min.js
#	src/Orchard.Web/Modules/Orchard.Layouts/Scripts/Models.js
#	src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.css
#	src/Orchard.Web/Modules/Orchard.Layouts/Styles/LayoutEditor.min.css
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-af.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-am.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ar-DZ.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ar-EG.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ar.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-az.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-bg.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-bs.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ca.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-cs.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-da.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-de-CH.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-de.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-el.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-en-AU.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-en-GB.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-en-NZ.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-eo.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-es-AR.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-es-PE.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-es.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-et.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-eu.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fa.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fi.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fo.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fr-CH.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-fr.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-gl.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-gu.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-he.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-hi-IN.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-hr.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-hu.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-hy.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-id.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-is.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-it.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ja.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ka.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-km.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ko.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-lt.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-lv.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-me-ME.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-me.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-mk.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ml.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ms.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-mt.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-nl-BE.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-nl.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-no.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-pl.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-pt-BR.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-rm.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ro.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ru.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sk.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sl.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sq.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sr-SR.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sr.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-sv.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ta.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-th.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-tr.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-tt.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-uk.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-ur.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-vi.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-zh-CN.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-zh-HK.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars-zh-TW.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.all.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.coptic.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.ethiopian-am.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.ethiopian.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.hebrew-he.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.hebrew.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.islamic-ar.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.islamic-fa.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.islamic.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.julian.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.lang.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.mayan.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.min.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.nepali-ne.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.nepali.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.persian-fa.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.persian.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-af.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-am.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ar-DZ.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ar-EG.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ar.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-az.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-bg.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-bs.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ca.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-cs.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-da.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-de-CH.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-de.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-el.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-en-AU.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-en-GB.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-en-NZ.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-eo.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-es-AR.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-es-PE.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-es.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-et.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-eu.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fa.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fi.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fo.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fr-CH.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-fr.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-gl.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-gu.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-he.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-hi-IN.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-hr.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-hu.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-hy.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-id.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-is.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-it.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ja.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ka.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-km.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ko.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-lt.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-lv.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-me-ME.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-me.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-mk.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ml.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ms.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-mt.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-nl-BE.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-nl.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-no.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-pl.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-pt-BR.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-rm.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ro.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ru.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sk.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sl.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sq.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sr-SR.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sr.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-sv.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ta.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-th.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-tr.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-tt.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-uk.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-ur.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-vi.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-zh-CN.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-zh-HK.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker-zh-TW.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker.ext.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker.full.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.picker.lang.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.plus.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.taiwan-zh-TW.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.taiwan.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.thai-th.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.thai.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.ummalqura-ar.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.ummalqura.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/Calendars/jquery.calendars.validation.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/TimeEntry/jquery.timeentry.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular-resource.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular-sanitize.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular-sortable.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/angular.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/bootstrap.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.blockui.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.colorbox.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.cookie.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.fileupload-full.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.plugin.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/jquery.utils.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/knockout.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/moment.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/underscore.js
#	src/Orchard.Web/Modules/Orchard.Resources/Scripts/uri.js
#	src/Orchard.Web/Modules/Orchard.Resources/Styles/Calendars/jquery.calendars.picker.full.css
#	src/Orchard.Web/Modules/Orchard.Resources/Styles/TimeEntry/jquery.timeentry.css
#	src/Orchard.Web/Modules/Orchard.Resources/Styles/bootstrap.css
#	src/Orchard.Web/Modules/Orchard.Resources/Styles/bootstrap.min.css
#	src/Orchard.Web/Modules/Orchard.Resources/Styles/font-awesome.css
#	src/Orchard.Web/Modules/Orchard.Resources/Styles/font-awesome.min.css
#	src/Orchard.Web/Modules/Orchard.Resources/Styles/jquery-datetime-editor.css
#	src/Orchard.Web/Modules/Orchard.Resources/Styles/jquery-ui.css
#	src/Orchard.Web/Modules/Orchard.Resources/Styles/jquery-ui.min.css
#	src/Orchard.Web/Modules/Orchard.Resources/Styles/jquery.colorbox.css
  • Loading branch information
BenedekFarkas committed Apr 17, 2024
2 parents 7b07ab9 + 04e9c73 commit 70e1366
Show file tree
Hide file tree
Showing 11 changed files with 195 additions and 53 deletions.
46 changes: 41 additions & 5 deletions .github/workflows/compile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,25 +10,61 @@ on:
- 1.10.x

jobs:
compile:
name: Compile
compile-dotnet:
name: Compile .NET solution
defaults:
run:
shell: pwsh
runs-on: windows-latest

steps:
- name: Clone repository
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
uses: actions/[email protected]

- name: Restore NuGet packages
run: nuget restore src/Orchard.sln

- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2.0.0
uses: microsoft/setup-msbuild@v2

- name: Compile
run: msbuild Orchard.proj /m /v:minimal /t:Compile /p:MvcBuildViews=true /p:TreatWarningsAsErrors=true -WarnAsError

- name: Test
run: msbuild Orchard.proj /m /v:minimal /t:Test

compile-node:
name: Compile client-side assets
defaults:
run:
shell: pwsh
runs-on: windows-latest
steps:
- name: Clone repository
uses: actions/[email protected]

- name: Setup NodeJS
uses: actions/[email protected]
with:
node-version: '7'

- name: Setup NPM packages
working-directory: ./src
run: |
npm install --loglevel warn
# Install gulp globally to be able to run the rebuild task, using the same version as in the project.
$gulpVersion = (Get-Content Package.json -Raw | ConvertFrom-Json).devDependencies.gulp
Start-Process npm -NoNewWindow -Wait -ArgumentList "install gulp@$gulpVersion -g --loglevel warn"
- name: Rebuild client-side assets
working-directory: ./src
run: |
gulp rebuild
git add . # To make line ending changes "disappear".
$gitStatus = (git status --porcelain)
if ($gitStatus)
{
throw ("Client-side assets are not up-to-date. Please run 'gulp rebuild' and commit the changes.`n" +
[System.String]::Join([System.Environment]::NewLine, $gitStatus))
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
@using Orchard.Utility.Extensions

@{
var urlPrefix = WorkContext.Resolve<ShellSettings>().RequestUrlPrefix;

Layout.Title = T("Manage Aliases").Text;
var aliasService = WorkContext.Resolve<IAliasService>();
AdminIndexOptions options = Model.Options;
Expand Down Expand Up @@ -59,10 +57,10 @@
<tr>
<td>
<input type="hidden" value="@alias.Path" name="@Html.FieldNameFor(m => Model.AliasEntries[index].Alias.Path)" />
@Html.Link(alias.Path == String.Empty ? "/" : alias.Path, Href("~/" + urlPrefix + alias.Path))
@Html.Link(alias.Path == String.Empty ? "/" : alias.Path, Href("~/" + alias.Path))
</td>
<td>
@Html.Link(url, Href("~/" + urlPrefix + "/" + url))
@Html.Link(url, Href("~/" + url))
</td>
</tr>
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
@using Orchard.Utility.Extensions

@{
var urlPrefix = WorkContext.Resolve<ShellSettings>().RequestUrlPrefix;

Layout.Title = T("Manage Aliases").Text;
var aliasService = WorkContext.Resolve<IAliasService>();
AdminIndexOptions options = Model.Options;
Expand Down Expand Up @@ -73,10 +71,10 @@
<input type="checkbox" value="true" name="@Html.FieldNameFor(m => Model.AliasEntries[index].IsChecked)" />
</td>
<td>
@Html.Link(alias.Path == String.Empty ? "/" : alias.Path, Href("~/" + urlPrefix + alias.Path))
@Html.Link(alias.Path == String.Empty ? "/" : alias.Path, Href("~/" + alias.Path))
</td>
<td>
@Html.Link(url, Href("~/" + urlPrefix + "/" + url))
@Html.Link(url, Href("~/" + url))
</td>
<td>
<ul class="action-links">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,5 +74,11 @@ public ActionResult BulkDelete(IEnumerable<int> submissionIds) {

return Redirect(Request.UrlReferrer.ToString());
}

public ActionResult Export(string id) =>
File(
_formService.ExportSubmissions(id),
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"Export.xlsx");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,12 @@
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="DocumentFormat.OpenXml, Version=3.0.2.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\DocumentFormat.OpenXml.3.0.2\lib\net46\DocumentFormat.OpenXml.dll</HintPath>
</Reference>
<Reference Include="DocumentFormat.OpenXml.Framework, Version=3.0.2.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\DocumentFormat.OpenXml.Framework.3.0.2\lib\net46\DocumentFormat.OpenXml.Framework.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.4.1.0\lib\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>
</Reference>
Expand All @@ -68,6 +74,7 @@
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Web.ApplicationServices" />
<Reference Include="System.Web.DynamicData" />
<Reference Include="System.Web.Entity" />
Expand Down Expand Up @@ -96,6 +103,7 @@
<Reference Include="System.Xml" />
<Reference Include="System.Configuration" />
<Reference Include="System.Xml.Linq" />
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Content Include="Assets\CSS\DynamicForms-Admin.css" />
Expand Down Expand Up @@ -598,4 +606,4 @@
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
</Project>
</Project>
132 changes: 111 additions & 21 deletions src/Orchard.Web/Modules/Orchard.DynamicForms/Services/FormService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Data;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using Orchard.Collections;
using Orchard.ContentManagement;
using Orchard.ContentManagement.MetaData;
Expand All @@ -21,6 +25,7 @@
using Orchard.Layouts.Services;
using Orchard.Localization.Services;
using Orchard.Services;
using Orchard.Utility.Extensions;

namespace Orchard.DynamicForms.Services {
public class FormService : IFormService {
Expand All @@ -38,16 +43,16 @@ public class FormService : IFormService {
private readonly ICultureAccessor _cultureAccessor;

public FormService(
ILayoutSerializer serializer,
IClock clock,
IRepository<Submission> submissionRepository,
IFormElementEventHandler elementHandlers,
IContentDefinitionManager contentDefinitionManager,
IBindingManager bindingManager,
IDynamicFormEventHandler formEventHandler,
ILayoutSerializer serializer,
IClock clock,
IRepository<Submission> submissionRepository,
IFormElementEventHandler elementHandlers,
IContentDefinitionManager contentDefinitionManager,
IBindingManager bindingManager,
IDynamicFormEventHandler formEventHandler,
Lazy<IEnumerable<IElementValidator>> validators,
IDateLocalizationServices dateLocalizationServices,
IOrchardServices services,
IDateLocalizationServices dateLocalizationServices,
IOrchardServices services,
ICultureAccessor cultureAccessor) {

_serializer = serializer;
Expand Down Expand Up @@ -152,6 +157,90 @@ public IPageOfItems<Submission> GetSubmissions(string formName = null, int? skip
};
}

public Stream ExportSubmissions(string formName = null) {
var stream = new MemoryStream();

string GetColumnId(int columnNumber) {
string result = "";
do {
result = ((char)((columnNumber - 1) % 26 + (int)'A')).ToString() + result;
columnNumber = (columnNumber - 1) / 26;
} while (columnNumber != 0);
return result;
}

// Create a spreadsheet document.
var spreadsheetDocument = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook);

// Add a WorkbookPart to the document.
var workbookpart = spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook = new Workbook();

// Add a WorksheetPart to the WorkbookPart.
var worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
var sheetData = new SheetData();
worksheetPart.Worksheet = new Worksheet(sheetData);

// Add Sheets to the Workbook.
var sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild(new Sheets());

// Fetch submissions
var query = _submissionRepository.Table;

if (!String.IsNullOrWhiteSpace(formName)) {
query = query.Where(x => x.FormName == formName);
}

var submissions = new Orderable<Submission>(query).Desc(x => x.CreatedUtc).Queryable.ToArray();

foreach (var formGroup in submissions.GroupBy(s => s.FormName)) {
// Append a new worksheet and associate it with the workbook.
var sheet = new Sheet() {
Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart),
SheetId = 1,
Name = formGroup.Key
};
sheets.Append(sheet);

var data = GenerateDataTable(formGroup);
uint rowIndex = 1;

var headerRow = new Row { RowIndex = rowIndex };
sheetData.Append(headerRow);

for (int i = 0; i < data.Columns.Count; i++) {
var title = data.Columns[i].ToString().CamelFriendly();
headerRow.Append(new Cell {
CellReference = GetColumnId(i + 1) + rowIndex,
InlineString = new InlineString { Text = new Text(title) },
DataType = new EnumValue<CellValues>(CellValues.InlineString),
});
}

foreach (DataRow dataRow in data.Rows) {
rowIndex++;
var row = new Row { RowIndex = rowIndex };
sheetData.Append(row);
for (int i = 0; i < data.Columns.Count; i++) {
var value = dataRow[data.Columns[i]];
row.Append(new Cell {
CellReference = GetColumnId(i + 1) + rowIndex,
InlineString = new InlineString { Text = new Text(value.ToString()) },
DataType = new EnumValue<CellValues>(CellValues.InlineString),
});
}
}
}

workbookpart.Workbook.Save();

// Close the document.
spreadsheetDocument.Dispose();
stream.Seek(0, SeekOrigin.Begin);

return stream;
}

public void DeleteSubmission(Submission submission) {
_submissionRepository.Delete(submission);
}
Expand Down Expand Up @@ -191,10 +280,10 @@ public NameValueCollection ReadElementValues(Form form, IValueProvider valueProv

// Collect any remaining form values not handled by any specific element.
var requestForm = _services.WorkContext.HttpContext.Request.Form;
var blackList = new[] {"__RequestVerificationToken", "formName", "contentId"};
foreach (var key in
from string key in requestForm
where !String.IsNullOrWhiteSpace(key) && !blackList.Contains(key) && values[key] == null
var blackList = new[] { "__RequestVerificationToken", "formName", "contentId" };
foreach (var key in
from string key in requestForm
where !String.IsNullOrWhiteSpace(key) && !blackList.Contains(key) && values[key] == null
select key) {

values.Add(key, requestForm[key]);
Expand All @@ -204,13 +293,14 @@ from string key in requestForm
}

public DataTable GenerateDataTable(IEnumerable<Submission> submissions) {
var records = submissions.Select(x => Tuple.Create(x, x.ToNameValues())).ToArray();
var records = submissions.Select(x => System.Tuple.Create(x, x.ToNameValues())).ToArray();
var columnNames = new HashSet<string>();
var dataTable = new DataTable();

foreach (var key in
from record in records
from string key in record.Item2 where !columnNames.Contains(key)
foreach (var key in
from record in records
from string key in record.Item2
where !columnNames.Contains(key)
where !String.IsNullOrWhiteSpace(key)
select key) {
columnNames.Add(key);
Expand Down Expand Up @@ -282,7 +372,7 @@ public ContentItem CreateContentItem(Form form, IValueProvider valueProvider) {
if (form.Publication == "Publish" || !contentTypeSettings.Draftable) {
_contentManager.Publish(contentItem);
}

return contentItem;
}

Expand All @@ -307,8 +397,8 @@ public void RegisterClientValidationAttributes(FormElement element, RegisterClie
}

private static void InvokePartBindings(
ContentItem contentItem,
IEnumerable<ContentPartBindingDescriptor> lookup,
ContentItem contentItem,
IEnumerable<ContentPartBindingDescriptor> lookup,
PartBindingSettings partBindingSettings,
string value) {

Expand Down Expand Up @@ -348,7 +438,7 @@ private static void InvokeFieldBindings(
if (field == null)
return;

var fieldBindingDescriptorsQuery =
var fieldBindingDescriptorsQuery =
from partBindingDescriptor in lookup
where partBindingDescriptor.Part.PartDefinition.Name == partBindingSettings.Name
from fieldBindingDescriptor in partBindingDescriptor.FieldBindings
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Data;
using System.IO;
using System.Web.Mvc;
using Orchard.Collections;
using Orchard.ContentManagement;
Expand All @@ -20,6 +21,7 @@ public interface IFormService : IDependency {
Submission CreateSubmission(Submission submission);
Submission GetSubmission(int id);
IPageOfItems<Submission> GetSubmissions(string formName = null, int? skip = null, int? take = null);
Stream ExportSubmissions(string formName = null);
void DeleteSubmission(Submission submission);
int DeleteSubmissions(IEnumerable<int> submissionIds);
void ReadElementValues(FormElement element, ReadElementValuesContext context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
dataColumns.Add(Model.Submissions.Columns[i]);
}
}
<div class="manage">
@Html.ActionLink(T("Export").Text, "Export", "SubmissionAdmin", new { id = Model.FormName, area = "Orchard.DynamicForms" }, new { @class = "button primaryAction" })
</div>
@using (Html.BeginFormAntiForgeryPost()) {
<fieldset class="bulk-actions">
<label for="publishActions">@T("Actions:")</label>
Expand Down
Loading

0 comments on commit 70e1366

Please sign in to comment.