Changing Auto Publish Media on Upload Programmatically in Episerver
NTS: Ever needed to know if the AutoPublishMedia is set? Here is how and why you should.
Published 11th June 2019
Episerver 11
Last day I was looking for an API for checking “Automatically publish media on upload”. In the UI it is located in Admin/Configuration/System Settings/Editing …
However I couldn’t find it, not even when i googled it…
Where is it??
Well it is saved in tblSiteConfig:
I had to do some reflection in dotPeek searching for “AutoPublishMediaOnUpload” to find the API in EPiServer.Cms.Shell.SiteConfigurationRepositoryExtensions
API for AutoPublishMediaOnUpload
By using EPiServer.Cms.Shell.SiteConfigurationRepositoryExtensions you get some extention methods to ISiteConfigurationRepository
Example use:
_siteConfigurationRepository.GetAutoPublishMediaOnUpload(); _siteConfigurationRepository.SetAutoPublishMediaOnUpload(false); //or EPiServer.Cms.Shell.SiteConfigurationRepositoryExtensions.GetAutoPublishMediaOnUpload(SiteConfigurationRepository.GetInstance()) EPiServer.Cms.Shell.SiteConfigurationRepositoryExtensions.SetAutoPublishMediaOnUpload(SiteConfigurationRepository.GetInstance(),false); //or _siteConfigurationRepository.GetValue((string)null, "AutoPublishMediaOnUpload"); _siteConfigurationRepository.SetValue((string)null, "AutoPublishMediaOnUpload", "true");
Why do I need to check AutoPublishMediaOnUpload?
When you’re doing some saving programmatically on media and you don’t know how the editors wants it, normally (probably) it is published on upload, but what if the admins changes this behavior? this is how you future proof it:
_contentRepository.Save(fotowareMedia as MediaData, GetSaveAction(), AccessLevel.NoAccess); private SaveAction GetSaveAction() { //EPiServer.Cms.Shell.SiteConfigurationRepositoryExtensions.GetAutoPublishMediaOnUpload return _siteConfigurationRepository.GetAutoPublishMediaOnUpload() ? SaveAction.Publish : SaveAction.Save; }
EXTRA: Saving a custom property on site level
Example
_siteConfigurationRepository.SetValue((string)null, "MyCustomFlag", "Something");
Beware! SiteConfigurationRepository is unsupported INTERNAL API! Not covered by semantic versioning; might change without notice.
Results in
Data being saved in tblSiteConfig
Retrieve value
_siteConfigurationRepository.GetValue((string)null, "MyCustomFlag");
Further reading:
- https://blog.tech-fellow.net/2016/09/23/configure-episerver-media-auto-publish-on-upload/
- https://webhelp.episerver.com/latest/cms-admin/system-settings.htm
About the author
Luc Gosso
– Independent Senior Web Developer
working with Azure and Episerver
Twitter: @LucGosso
LinkedIn: linkedin.com/in/luc-gosso/
Github: github.com/lucgosso