protected override DriverResult Editor(ContentPart part, FieldExternal field, IUpdateModel updater, dynamic shapeHelper) { var settings = field.PartFieldDefinition.Settings.GetModel <FieldExternalSetting>(); var viewModel = new FieldExternalVM { Setting = settings, Field = field }; if (updater.TryUpdateModel(viewModel, GetPrefix(field, part), null, null)) { } if (settings.Required && string.IsNullOrEmpty(settings.ExternalURL) && string.IsNullOrEmpty(field.ExternalUrl)) { updater.AddModelError("External Url", T("The field {0} is mandatory", field.Name.CamelFriendly())); } if (_orchardServices.WorkContext.HttpContext.Request.Form["submit.Save"] == "submit.StartSchedule") { _fieldExternalService.ScheduleNextTask(settings.ScheduledMinute, part.ContentItem); } return(Editor(part, field, shapeHelper)); }
public void Process(ScheduledTaskContext context) { if (context.Task.TaskType == TaskType) { string CallUrl = ""; try { Logger.Information("ExternalContent task item #{0} version {1} scheduled at {2} utc", context.Task.ContentItem.Id, context.Task.ContentItem.Version, context.Task.ScheduledUtc); var displayalias = context.Task.ContentItem.As <AutoroutePart>().DisplayAlias; // Calculate the hostname to call based on settings of fields (if defined an InternalHostNameForScheduledTask) or the base url of the tenant var baseUrl = _orchardServices.WorkContext.CurrentSite.BaseUrl; var baseUrlFromSettings = context.Task.ContentItem.Parts.SelectMany(x => x.Fields.Where(f => f.FieldDefinition.Name == typeof(FieldExternal).Name && f.PartFieldDefinition.Settings.GetModel <FieldExternalSetting>() != null && !string.IsNullOrWhiteSpace(f.PartFieldDefinition.Settings.GetModel <FieldExternalSetting>().InternalHostNameForScheduledTask))) .Select(p => p.PartFieldDefinition.Settings.GetModel <FieldExternalSetting>().InternalHostNameForScheduledTask) .FirstOrDefault(); CallUrl = baseUrl; if (baseUrlFromSettings != null) { CallUrl = baseUrlFromSettings; } //var host = _shellSettings.RequestUrlHost; var prefix = _shellSettings.RequestUrlPrefix; //if (!string.IsNullOrEmpty(host)) // CallUrl += host; if (!string.IsNullOrEmpty(prefix) && prefix.ToLower() != "default") { CallUrl += "/" + prefix; } CallUrl += @"/Webservices/Alias?displayalias=" + displayalias; // var urlHelper = new UrlHelper(wc.HttpContext.Request.RequestContext); // var CallUrl = urlHelper.ItemDisplayUrl(context.Task.ContentItem); // HostingEnvironment.MapPath("~/") + _shellSettings.Name + "\\Webservices\\Alias?displayalias=" + displayalias; WebClient myClient = new WebClient(); IApiKeyService apiKeyService = null; if (_orchardServices.WorkContext.TryResolve <IApiKeyService>(out apiKeyService)) { var iv = GetRandomIV(); var key = apiKeyService.GetValidApiKey(iv, true); // protezione attiva inserisco header myClient.Headers.Set("ApiKey", key); myClient.Headers.Set("AKIV", iv); } Stream response = myClient.OpenRead(CallUrl); response.Close(); } catch (Exception e) { Logger.Error(e, "Error during webclient call to this URL: " + CallUrl + "\r\nMessage: " + e.Message); } finally { try { var fields = context.Task.ContentItem.Parts.SelectMany(x => x.Fields.Where(f => f.FieldDefinition.Name == typeof(FieldExternal).Name)).Cast <FieldExternal>(); Int32 minuti = 0; foreach (var field in fields) { var settings = field.PartFieldDefinition.Settings.GetModel <FieldExternalSetting>(); if (settings.ScheduledMinute > 0) { minuti = settings.ScheduledMinute; } } if (minuti > 0) { _fieldExternalService.ScheduleNextTask(minuti, context.Task.ContentItem); } } catch (Exception e) { Logger.Error(e, e.Message); } } } }
public void Process(ScheduledTaskContext context) { if (context.Task.TaskType == TaskType) { try { Logger.Information("ExternalContent task item #{0} version {1} scheduled at {2} utc", context.Task.ContentItem.Id, context.Task.ContentItem.Version, context.Task.ScheduledUtc); var displayalias = context.Task.ContentItem.As <AutoroutePart>().DisplayAlias; // // using (var wc = _ using (var wc = shellContext.LifetimeScope.Resolve<IWorkContextAccessor>().CreateWorkContextScope()) { //// var tenantSiteName = wc.Resolve<ISiteService>().GetSiteSettings().SiteName; // var wc = _workContextAccessor.CreateWorkContextScope(); // var workcontext = WorkContextExtensions.GetWorkContext(wc); //// var tenantSiteName = wc.Resolve<ISiteService>().GetSiteSettings().SiteName; // var settings = workContext.Resolve<ShellSettings>(); // _shellSettings. //var httpContextAccessor = GlobalConfiguration.Configuration.DependencyResolver.GetService(typeof(IHttpContextAccessor)) as IHttpContextAccessor; //var workContext = WorkContextExtensions.GetWorkContext(httpContextAccessor.Current().Request.RequestContext); //return workContext.CurrentSite.BaseUrl; string CallUrl = _orchardServices.WorkContext.CurrentSite.BaseUrl; //var host = _shellSettings.RequestUrlHost; var prefix = _shellSettings.RequestUrlPrefix; //if (!string.IsNullOrEmpty(host)) // CallUrl += host; if (!string.IsNullOrEmpty(prefix) && prefix.ToLower() != "default") { CallUrl += "/" + prefix; } CallUrl += @"/Webservices/Alias?displayalias=" + displayalias; // var urlHelper = new UrlHelper(wc.HttpContext.Request.RequestContext); // var CallUrl = urlHelper.ItemDisplayUrl(context.Task.ContentItem); // HostingEnvironment.MapPath("~/") + _shellSettings.Name + "\\Webservices\\Alias?displayalias=" + displayalias; WebClient myClient = new WebClient(); IApiKeyService apiKeyService = null; if (_orchardServices.WorkContext.TryResolve <IApiKeyService>(out apiKeyService)) { var iv = GetRandomIV(); var key = apiKeyService.GetValidApiKey(iv); // protezione attiva inserisco header myClient.Headers.Set("ApiKey", key); myClient.Headers.Set("AKIV", iv); } Stream response = myClient.OpenRead(CallUrl); response.Close(); } catch (Exception e) { Logger.Error(e, e.Message); } finally { try { var fields = context.Task.ContentItem.Parts.SelectMany(x => x.Fields.Where(f => f.FieldDefinition.Name == typeof(FieldExternal).Name)).Cast <FieldExternal>(); Int32 minuti = 0; foreach (var field in fields) { var settings = field.PartFieldDefinition.Settings.GetModel <FieldExternalSetting>(); if (settings.ScheduledMinute > 0) { minuti = settings.ScheduledMinute; } } if (minuti > 0) { _fieldExternalService.ScheduleNextTask(minuti, context.Task.ContentItem); } } catch (Exception e) { Logger.Error(e, e.Message); } } } }