public HttpResponseMessage Form(string key) { //string template = (string)ActiveModule.ModuleSettings["template"]; JObject json = new JObject(); try { OpenContentSettings settings = ActiveModule.OpenContentSettings(); if (settings.TemplateAvailable) { var formBuilder = new FormBuilder(settings.TemplateDir); json = formBuilder.BuildForm(key); if (UserInfo.UserID > 0 && json["schema"] is JObject) { json["schema"] = FormUtils.InitFields(json["schema"] as JObject, UserInfo); } } return(Request.CreateResponse(HttpStatusCode.OK, json)); } catch (Exception exc) { LoggingUtils.ProcessApiLoadException(this, exc); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc)); } }
public OpenContentModuleInfo(ModuleInfo viewModule) { ViewModule = viewModule; Settings = new OpenContentSettings(viewModule.ModuleSettings); TemplateKey = Settings.Template == null ? string.Empty : Settings.Template.Key.ToString(); TabID = viewModule.TabID; ModuleID = viewModule.ModuleID; TabModuleID = viewModule.TabModuleID; }
public HttpResponseMessage UpdateBuilder(JObject json) { try { OpenContentSettings settings = ActiveModule.OpenContentSettings(); if (json["data"] != null && json["schema"] != null && json["options"] != null) { var key = json["key"].ToString(); string prefix = string.IsNullOrEmpty(key) ? "" : key + "-"; var schema = json["schema"].ToString(); var options = json["options"].ToString(); var view = json["view"].ToString(); var index = json["index"].ToString(); var data = json["data"].ToString(); var datafile = new FileUri(settings.TemplateDir, $"{prefix}builder.json"); var schemafile = new FileUri(settings.TemplateDir, $"{prefix}schema.json"); var optionsfile = new FileUri(settings.TemplateDir, $"{prefix}options.json"); var viewfile = new FileUri(settings.TemplateDir, $"{prefix}view.json"); var indexfile = new FileUri(settings.TemplateDir, $"{prefix}index.json"); try { File.WriteAllText(datafile.PhysicalFilePath, data); File.WriteAllText(schemafile.PhysicalFilePath, schema); File.WriteAllText(optionsfile.PhysicalFilePath, options); File.WriteAllText(viewfile.PhysicalFilePath, view); if (string.IsNullOrEmpty(index)) { if (indexfile.FileExists) { File.Delete(indexfile.PhysicalFilePath); } } else { File.WriteAllText(indexfile.PhysicalFilePath, index); } } catch (Exception ex) { string mess = $"Error while saving file [{datafile.FilePath}]"; App.Services.Logger.Error(mess, ex); throw new Exception(mess, ex); } } return(Request.CreateResponse(HttpStatusCode.OK, new { isValid = true })); } catch (Exception exc) { App.Services.Logger.Error(exc); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc)); } }
public HttpResponseMessage Add(UpdateRequest req) { try { ModuleController mc = new ModuleController(); var requestModule = mc.GetModule(req.ModuleId, req.TabId, false); bool index = false; OpenContentSettings settings = requestModule.OpenContentSettings(); ModuleInfo module = requestModule; if (settings.ModuleId > 0) { module = mc.GetModule(settings.ModuleId, settings.TabId, false); } var manifest = settings.Template.Manifest; TemplateManifest templateManifest = settings.Template; index = settings.Template.Manifest.Index; string editRole = manifest.GetEditRole(); bool listMode = templateManifest != null && templateManifest.IsListTemplate; int createdByUserid = -1; OpenContentController ctrl = new OpenContentController(); if (listMode) { if (!OpenContentUtils.HasEditPermissions(PortalSettings, module, editRole, createdByUserid)) { return(Request.CreateResponse(HttpStatusCode.Unauthorized)); } var indexConfig = OpenContentUtils.GetIndexConfig(settings.Template.Key.TemplateDir); OpenContentInfo content = new OpenContentInfo() { ModuleId = module.ModuleID, Title = ActiveModule.ModuleTitle, Json = req.json.ToString(), JsonAsJToken = req.json, CreatedByUserId = UserInfo.UserID, CreatedOnDate = DateTime.Now, LastModifiedByUserId = UserInfo.UserID, LastModifiedOnDate = DateTime.Now, Html = "", }; ctrl.AddContent(content, index, indexConfig); return(Request.CreateResponse(HttpStatusCode.OK, "")); } else { return(Request.CreateResponse(HttpStatusCode.BadRequest, "It's not a list mode module")); } } catch (Exception exc) { Log.Logger.Error(exc); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc)); } }
public static bool CheckOpenContentSettings(ModuleInfo module, OpenContentSettings settings) { bool result = true; if (module != null && settings != null && settings.TemplateKey != null && settings.TemplateKey.TemplateDir != null && !settings.TemplateKey.TemplateDir.FolderExists) { var url = DnnUrlUtils.NavigateUrl(module.TabID); Log.Logger.ErrorFormat("Error loading OpenContent Template on page [{5}-{4}-{1}] module [{2}-{3}]. Reason: Template not found [{0}]", settings.TemplateKey.ToString(), url, module.ModuleID, module.ModuleTitle, module.TabID, module.PortalID); result = false; } return(result); }
private static SearchDocument CreateSearchDocument(ModuleInfo modInfo, OpenContentSettings settings, JToken content, string itemId, string culture, string title, string body, DateTime time) { // existance of settings.Template.Main has already been checked: we wouldn't be here if it doesn't exist // but still, we don't want to count on that too much var ps = new PortalSettings(modInfo.PortalID); ps.PortalAlias = PortalAliasController.Instance.GetPortalAlias(ps.DefaultPortalAlias); var url = TestableGlobals.Instance.NavigateURL(modInfo.TabID, ps, "", $"id={itemId}"); string docTitle = modInfo.ModuleTitle; // SK: this is the behaviour before introduction of DnnSearchTitle if (!string.IsNullOrEmpty(settings.Template?.Main?.DnnSearchTitle)) { var dynForHBS = JsonUtils.JsonToDictionary(content.ToString()); var hbEngine = new HandlebarsEngine(); docTitle = hbEngine.ExecuteWithoutFaillure(settings.Template.Main.DnnSearchTitle, dynForHBS, modInfo.ModuleTitle); } // Check if it is a single template if (settings.Template?.Type != "multiple") { // With a signle template we don't want to identify the content by id. url = TestableGlobals.Instance.NavigateURL(modInfo.TabID, ps, ""); } var retval = new SearchDocument { UniqueKey = modInfo.ModuleID + "-" + itemId + "-" + culture, PortalId = modInfo.PortalID, Title = docTitle.StripHtml(), Description = title.StripHtml(), Body = body.StripHtml(), ModifiedTimeUtc = time, CultureCode = culture, TabId = modInfo.TabID, ModuleId = modInfo.ModuleID, ModuleDefId = modInfo.ModuleDefID, Url = url }; // Add support for module terms if (modInfo.Terms != null && modInfo.Terms.Count > 0) { retval.Tags = CollectHierarchicalTags(modInfo.Terms); } return(retval); }
public HttpResponseMessage EditData(string key) { try { OpenContentSettings settings = ActiveModule.OpenContentSettings(); ModuleInfo module = ActiveModule; if (settings.ModuleId > 0) { ModuleController mc = new ModuleController(); module = mc.GetModule(settings.ModuleId, settings.TabId, false); } var manifest = settings.Manifest; TemplateManifest templateManifest = settings.Template; var dataManifest = manifest.GetAdditionalData(key); var templateFolder = string.IsNullOrEmpty(dataManifest.TemplateFolder) ? settings.TemplateDir : settings.TemplateDir.ParentFolder.Append(dataManifest.TemplateFolder); int createdByUserid = -1; var ds = DataSourceManager.GetDataSource(manifest.DataSource); var dsContext = new DataSourceContext() { PortalId = PortalSettings.PortalId, TabId = ActiveModule.TabID, ModuleId = module.ModuleID, TabModuleId = ActiveModule.TabModuleID, UserId = UserInfo.UserID, TemplateFolder = settings.TemplateDir.FolderPath, Config = manifest.DataSourceConfig, //Options = reqOptions }; var dsItem = ds.GetData(dsContext, dataManifest.ScopeType, dataManifest.StorageKey ?? key); var json = ds.GetDataAlpaca(dsContext, true, true, true, key); if (dsItem != null) { json["data"] = dsItem.Data; var versions = ds.GetDataVersions(dsContext, dsItem); if (versions != null) { json["versions"] = versions; } createdByUserid = dsItem.CreatedByUserId; } return(Request.CreateResponse(HttpStatusCode.OK, json)); } catch (Exception exc) { Log.Logger.Error(exc); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc)); } }
public HttpResponseMessage Version(string id, string ticks) { OpenContentSettings settings = ActiveModule.OpenContentSettings(); ModuleInfo module = ActiveModule; if (settings.ModuleId > 0) { ModuleController mc = new ModuleController(); module = mc.GetModule(settings.ModuleId, settings.TabId, false); } var manifest = settings.Template.Manifest; string editRole = manifest.GetEditRole(); JToken json = new JObject(); try { int createdByUserid = -1; var ds = DataSourceManager.GetDataSource(manifest.DataSource); var dsContext = new DataSourceContext() { ModuleId = module.ModuleID, ActiveModuleId = ActiveModule.ModuleID, TemplateFolder = settings.TemplateDir.FolderPath, Config = manifest.DataSourceConfig }; var dsItem = ds.Get(dsContext, id); if (dsItem != null) { var version = ds.GetVersion(dsContext, dsItem, new DateTime(long.Parse(ticks))); if (version != null) { json = version; createdByUserid = dsItem.CreatedByUserId; } } if (!OpenContentUtils.HasEditPermissions(PortalSettings, ActiveModule, editRole, createdByUserid)) { return(Request.CreateResponse(HttpStatusCode.Unauthorized)); } return(Request.CreateResponse(HttpStatusCode.OK, json)); } catch (Exception exc) { Log.Logger.Error(exc); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc)); } }
public ModelFactory(IEnumerable <IDataItem> dataList, ModuleInfo module, PortalSettings portalSettings, int mainTabId) { OpenContentSettings settings = module.OpenContentSettings(); this.DataList = dataList; this.settingsJson = settings.Data; this.PhysicalTemplateFolder = settings.Template.ManifestFolderUri.PhysicalFullDirectory + "\\"; this.Manifest = settings.Template.Manifest; this.TemplateFiles = settings.Template != null ? settings.Template.Main : null; this.Module = module; this.PortalSettings = portalSettings; this.PortalId = portalSettings.PortalId; this.TemplateManifest = settings.Template; this.MainTabId = mainTabId > 0 ? mainTabId : module.TabID; this.MainTabId = DnnUtils.GetTabByCurrentCulture(this.PortalId, this.MainTabId, GetCurrentCultureCode()); this.MainModuleId = settings.ModuleId > 0 ? settings.ModuleId : module.ModuleID; }
public HttpResponseMessage UpdateData(JObject json) { try { OpenContentSettings settings = ActiveModule.OpenContentSettings(); ModuleInfo module = ActiveModule; if (settings.ModuleId > 0) { ModuleController mc = new ModuleController(); module = mc.GetModule(settings.ModuleId, settings.TabId, false); } var manifest = settings.Template.Manifest; string key = json["key"].ToString(); var dataManifest = manifest.GetAdditionalData(key); var ds = DataSourceManager.GetDataSource(manifest.DataSource); var dsContext = new DataSourceContext() { PortalId = PortalSettings.PortalId, TabId = ActiveModule.TabID, ModuleId = module.ModuleID, TabModuleId = ActiveModule.TabModuleID, UserId = UserInfo.UserID, TemplateFolder = settings.TemplateDir.FolderPath, Config = manifest.DataSourceConfig, //Options = reqOptions }; var dsItem = ds.GetData(dsContext, dataManifest.ScopeType, dataManifest.StorageKey ?? key); if (dsItem == null) { ds.AddData(dsContext, dataManifest.ScopeType, dataManifest.StorageKey ?? key, json["form"]); } else { ds.UpdateData(dsContext, dsItem, json["form"]); } return(Request.CreateResponse(HttpStatusCode.OK, "")); } catch (Exception exc) { Log.Logger.Error(exc); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc)); } }
public HttpResponseMessage LoadBuilder(string key) { try { OpenContentSettings settings = ActiveModule.OpenContentSettings(); string prefix = string.IsNullOrEmpty(key) ? "" : key + "-"; JObject json = new JObject(); var dataJson = JsonUtils.LoadJsonFromCacheOrDisk(new FileUri(settings.TemplateDir, $"{prefix}builder.json")); if (dataJson != null) { json["data"] = dataJson; } return(Request.CreateResponse(HttpStatusCode.OK, json)); } catch (Exception exc) { App.Services.Logger.Error(exc); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc)); } }
public HttpResponseMessage UpdateBuilder(JObject json) { try { OpenContentSettings settings = ActiveModule.OpenContentSettings(); if (json["data"] != null && json["schema"] != null && json["options"] != null) { var key = json["key"].ToString(); string prefix = string.IsNullOrEmpty(key) ? "" : key + "-"; var schema = json["schema"].ToString(); var options = json["options"].ToString(); var view = json["view"].ToString(); var data = json["data"].ToString(); var datafile = new FileUri(settings.TemplateDir.UrlFolder + prefix + "builder.json"); var schemafile = new FileUri(settings.TemplateDir.UrlFolder + prefix + "schema.json"); var optionsfile = new FileUri(settings.TemplateDir.UrlFolder + prefix + "options.json"); var viewfile = new FileUri(settings.TemplateDir.UrlFolder + prefix + "view.json"); try { File.WriteAllText(datafile.PhysicalFilePath, data); File.WriteAllText(schemafile.PhysicalFilePath, schema); File.WriteAllText(optionsfile.PhysicalFilePath, options); File.WriteAllText(viewfile.PhysicalFilePath, view); } catch (Exception ex) { string mess = $"Error while saving file [{datafile.FilePath}]"; Log.Logger.Error(mess, ex); throw new Exception(mess, ex); } } return(Request.CreateResponse(HttpStatusCode.OK, "")); } catch (Exception exc) { Log.Logger.Error(exc); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc)); } }
private static SearchDocument GetLocalizedItem(ModuleInfo moduleInfo, OpenContentSettings settings, IDataItem content) { string culture = moduleInfo.CultureCode; JToken title; JToken description; JToken singleLanguage = content.Data.DeepClone(); //Clone to keep Simplification into this Method JsonUtils.SimplifyJson(singleLanguage, culture); if (content.Title.IsJson()) { title = singleLanguage["Title"] ?? moduleInfo.ModuleTitle; description = singleLanguage["Description"] ?? JsonToSearchableString(content.Data); } else { title = content.Title; description = JsonToSearchableString(singleLanguage); } var searchDoc = CreateSearchDocument(moduleInfo, settings, singleLanguage, content.Id, culture, title.ToString(), description.ToString(), content.LastModifiedOnDate.ToUniversalTime()); Log.Logger.DebugFormat("Indexing content {0}|{5} - OK! {1} ({2}) {4}", moduleInfo.ModuleID, searchDoc.Title, moduleInfo.TabID, "", content.LastModifiedOnDate.ToUniversalTime(), culture); return(searchDoc); }
public HttpResponseMessage EditQuerySettings() { string data = (string)ActiveModule.ModuleSettings["query"]; try { OpenContentSettings settings = ActiveModule.OpenContentSettings(); var fb = new FormBuilder(settings.TemplateDir); JObject json = fb.BuildQuerySettings(settings.Template.Collection); var dataJson = data.ToJObject("query settings json"); if (dataJson != null) { json["data"] = dataJson; } return(Request.CreateResponse(HttpStatusCode.OK, json)); } catch (Exception exc) { App.Services.Logger.Error(exc); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc)); } }
public HttpResponseMessage EditSettings(string key, bool templateFolder) { string data = (string)ActiveModule.ModuleSettings[key]; try { OpenContentSettings settings = ActiveModule.OpenContentSettings(); var fb = new FormBuilder(templateFolder ? settings.TemplateDir : new FolderUri("~/DesktopModules/OpenContent")); JObject json = fb.BuildForm(key, DnnLanguageUtils.GetCurrentCultureCode()); var dataJson = data.ToJObject("Raw settings json"); if (dataJson != null) { json["data"] = dataJson; } return(Request.CreateResponse(HttpStatusCode.OK, json)); } catch (Exception exc) { App.Services.Logger.Error(exc); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc)); } }
public HttpResponseMessage Edit(string id) { try { OpenContentSettings settings = ActiveModule.OpenContentSettings(); ModuleInfo module = ActiveModule; if (settings.ModuleId > 0) { ModuleController mc = new ModuleController(); module = mc.GetModule(settings.ModuleId, settings.TabId, false); } var manifest = settings.Manifest; TemplateManifest templateManifest = settings.Template; string editRole = manifest.GetEditRole(); bool listMode = templateManifest != null && templateManifest.IsListTemplate; var ds = DataSourceManager.GetDataSource(manifest.DataSource); var dsContext = new DataSourceContext() { ModuleId = module.ModuleID, ActiveModuleId = ActiveModule.ModuleID, TemplateFolder = settings.TemplateDir.FolderPath, Config = manifest.DataSourceConfig }; IDataItem dsItem = null; if (listMode) { if (!string.IsNullOrEmpty(id)) // not a new item { dsItem = ds.Get(dsContext, id); } } else { dsContext.Single = true; dsItem = ds.Get(dsContext, null); } int createdByUserid = -1; var json = ds.GetAlpaca(dsContext, true, true, true); //var content = GetContent(module.ModuleID, listMode, int.Parse(id)); //if (content != null) if (dsItem != null) { //json["data"] = content.Json.ToJObject("GetContent " + id); //json = dsItem.Data as JObject; json["data"] = dsItem.Data; if (json["schema"]["properties"]["ModuleTitle"] is JObject) { //json["data"]["ModuleTitle"] = ActiveModule.ModuleTitle; if (json["data"]["ModuleTitle"] != null && json["data"]["ModuleTitle"].Type == JTokenType.String) { json["data"]["ModuleTitle"] = ActiveModule.ModuleTitle; } else if (json["data"]["ModuleTitle"] != null && json["data"]["ModuleTitle"].Type == JTokenType.Object) { json["data"]["ModuleTitle"][DnnLanguageUtils.GetCurrentCultureCode()] = ActiveModule.ModuleTitle; } } var versions = ds.GetVersions(dsContext, dsItem); if (versions != null) { json["versions"] = versions; } //AddVersions(json, content); //createdByUserid = content.CreatedByUserId; createdByUserid = dsItem.CreatedByUserId; } if (!OpenContentUtils.HasEditPermissions(PortalSettings, ActiveModule, editRole, createdByUserid)) { return(Request.CreateResponse(HttpStatusCode.Unauthorized)); } return(Request.CreateResponse(HttpStatusCode.OK, json)); } catch (Exception exc) { Log.Logger.Error(exc); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc)); } }
public override IList <SearchDocument> GetModifiedSearchDocuments(ModuleInfo modInfo, DateTime beginDateUtc) { Log.Logger.Trace($"Indexing content Module {modInfo.ModuleID} - Tab {modInfo.TabID} - Culture {modInfo.CultureCode}- indexing from {beginDateUtc}"); var searchDocuments = new List <SearchDocument>(); //If module is marked as "don't index" then return no results if (modInfo.ModuleSettings.GetValue("AllowIndex", "True") == "False") { Log.Logger.Trace($"Indexing content {modInfo.ModuleID}|{modInfo.CultureCode} - NOT - MODULE Indexing disabled"); return(searchDocuments); } //If tab of the module is marked as "don't index" then return no results if (modInfo.ParentTab.TabSettings.GetValue("AllowIndex", "True") == "False") { Log.Logger.Trace($"Indexing content {modInfo.ModuleID}|{modInfo.CultureCode} - NOT - TAB Indexing disabled"); return(searchDocuments); } //If tab is marked as "inactive" then return no results if (modInfo.ParentTab.DisableLink) { Log.Logger.Trace($"Indexing content {modInfo.ModuleID}|{modInfo.CultureCode} - NOT - TAB is inactive"); return(searchDocuments); } var module = new OpenContentModuleInfo(modInfo); OpenContentSettings settings = modInfo.OpenContentSettings(); if (settings.Template?.Main == null || !settings.Template.Main.DnnSearch) { return(searchDocuments); } if (settings.IsOtherModule) { return(searchDocuments); } IDataSource ds = DataSourceManager.GetDataSource(module.Settings.Manifest.DataSource); var dsContext = OpenContentUtils.CreateDataContext(module); IDataItems contentList = ds.GetAll(dsContext, null); if (!contentList.Items.Any()) { Log.Logger.Trace($"Indexing content {modInfo.ModuleID}|{modInfo.CultureCode} - NOT - No content found"); } foreach (IDataItem content in contentList.Items) { if (content == null) { Log.Logger.Trace($"Indexing content {modInfo.ModuleID}|{modInfo.CultureCode} - NOT - Content is Null"); } else if (content.LastModifiedOnDate.ToUniversalTime() > beginDateUtc && content.LastModifiedOnDate.ToUniversalTime() < DateTime.UtcNow) { SearchDocument searchDoc; if (DnnLanguageUtils.IsMultiLingualPortal(modInfo.PortalID)) { // first process the default language module var culture = modInfo.CultureCode; var localizedData = GetLocalizedContent(content.Data, culture); searchDoc = CreateSearchDocument(modInfo, settings, localizedData, content.Id, culture, content.Title, content.LastModifiedOnDate.ToUniversalTime()); searchDocuments.Add(searchDoc); Log.Logger.Trace($"Indexing content {modInfo.ModuleID}|{culture} - OK! {searchDoc.Title} ({modInfo.TabID}) of {content.LastModifiedOnDate.ToUniversalTime()}"); // now do the same with any linked localized instances of this module if (modInfo.LocalizedModules != null) { foreach (var localizedModule in modInfo.LocalizedModules) { culture = localizedModule.Value.CultureCode; localizedData = GetLocalizedContent(content.Data, culture); searchDoc = CreateSearchDocument(modInfo, settings, localizedData, content.Id, culture, content.Title, content.LastModifiedOnDate.ToUniversalTime()); searchDocuments.Add(searchDoc); Log.Logger.Trace($"Indexing content {modInfo.ModuleID}|{culture} - OK! {searchDoc.Title} ({modInfo.TabID}) of {content.LastModifiedOnDate.ToUniversalTime()}"); } } } else { searchDoc = CreateSearchDocument(modInfo, settings, content.Data, content.Id, "", content.Title, content.LastModifiedOnDate.ToUniversalTime()); searchDocuments.Add(searchDoc); Log.Logger.Trace($"Indexing content {modInfo.ModuleID}|{modInfo.CultureCode} - OK! {searchDoc.Title} ({modInfo.TabID}) of {content.LastModifiedOnDate.ToUniversalTime()}"); } } else { Log.Logger.Trace($"Indexing content {modInfo.ModuleID}|{modInfo.CultureCode} - NOT - No need to index: lastmod {content.LastModifiedOnDate.ToUniversalTime()} "); } } return(searchDocuments); }
public HttpResponseMessage Update(JObject json) { try { bool index = false; OpenContentSettings settings = ActiveModule.OpenContentSettings(); ModuleInfo module = ActiveModule; if (settings.ModuleId > 0) { ModuleController mc = new ModuleController(); module = mc.GetModule(settings.ModuleId, settings.TabId, false); } var manifest = settings.Template.Manifest; TemplateManifest templateManifest = settings.Template; index = settings.Template.Manifest.Index; string editRole = manifest.GetEditRole(); bool listMode = templateManifest != null && templateManifest.IsListTemplate; int createdByUserid = -1; var ds = DataSourceManager.GetDataSource(manifest.DataSource); var dsContext = new DataSourceContext() { ModuleId = module.ModuleID, ActiveModuleId = ActiveModule.ModuleID, TemplateFolder = settings.TemplateDir.FolderPath, Index = index, UserId = UserInfo.UserID, PortalId = module.PortalID, Config = manifest.DataSourceConfig }; IDataItem dsItem = null; if (listMode) { if (json["id"] != null) { var itemId = json["id"].ToString(); dsItem = ds.Get(dsContext, itemId); //content = ctrl.GetContent(itemId); if (dsItem != null) { createdByUserid = dsItem.CreatedByUserId; } } } else { dsContext.Single = true; dsItem = ds.Get(dsContext, null); //dsItem = ctrl.GetFirstContent(module.ModuleID); if (dsItem != null) { createdByUserid = dsItem.CreatedByUserId; } } if (!OpenContentUtils.HasEditPermissions(PortalSettings, ActiveModule, editRole, createdByUserid)) { return(Request.CreateResponse(HttpStatusCode.Unauthorized)); } //var indexConfig = OpenContentUtils.GetIndexConfig(settings.Template.Key.TemplateDir); if (dsItem == null) { ds.Add(dsContext, json["form"] as JObject); } else { ds.Update(dsContext, dsItem, json["form"] as JObject); } if (json["form"]["ModuleTitle"] != null && json["form"]["ModuleTitle"].Type == JTokenType.String) { string moduleTitle = json["form"]["ModuleTitle"].ToString(); OpenContentUtils.UpdateModuleTitle(ActiveModule, moduleTitle); } else if (json["form"]["ModuleTitle"] != null && json["form"]["ModuleTitle"].Type == JTokenType.Object) { if (json["form"]["ModuleTitle"][DnnLanguageUtils.GetCurrentCultureCode()] != null) { string moduleTitle = json["form"]["ModuleTitle"][DnnLanguageUtils.GetCurrentCultureCode()].ToString(); OpenContentUtils.UpdateModuleTitle(ActiveModule, moduleTitle); } } return(Request.CreateResponse(HttpStatusCode.OK, "")); } catch (Exception exc) { Log.Logger.Error(exc); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc)); } }
public HttpResponseMessage Delete(JObject json) { try { bool index = false; OpenContentSettings settings = ActiveModule.OpenContentSettings(); ModuleInfo module = ActiveModule; if (settings.ModuleId > 0) { ModuleController mc = new ModuleController(); module = mc.GetModule(settings.ModuleId, settings.TabId, false); } var manifest = settings.Template.Manifest; TemplateManifest templateManifest = settings.Template; index = manifest.Index; string editRole = manifest.GetEditRole(); bool listMode = templateManifest != null && templateManifest.IsListTemplate; int createdByUserid = -1; var ds = DataSourceManager.GetDataSource(manifest.DataSource); var dsContext = new DataSourceContext() { ModuleId = module.ModuleID, ActiveModuleId = ActiveModule.ModuleID, TemplateFolder = settings.TemplateDir.FolderPath, Index = index, UserId = UserInfo.UserID, PortalId = module.PortalID, Config = manifest.DataSourceConfig }; IDataItem content = null; if (listMode) { content = ds.Get(dsContext, json["id"].ToString()); if (content != null) { createdByUserid = content.CreatedByUserId; } } else { dsContext.Single = true; content = ds.Get(dsContext, null); if (content != null) { createdByUserid = content.CreatedByUserId; } } if (!OpenContentUtils.HasEditPermissions(PortalSettings, ActiveModule, editRole, createdByUserid)) { return(Request.CreateResponse(HttpStatusCode.Unauthorized)); } if (content != null) { ds.Delete(dsContext, content); } return(Request.CreateResponse(HttpStatusCode.OK, "")); } catch (Exception exc) { Log.Logger.Error(exc); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc)); } }
private static SearchDocument CreateSearchDocument(ModuleInfo modInfo, OpenContentSettings settings, JToken contentData, string itemId, string culture, string dataItemTitle, DateTime time) { // existance of settings.Template.Main has already been checked: we wouldn't be here if it doesn't exist // but still, we don't want to count on that too much var ps = new PortalSettings(modInfo.PortalID); ps.PortalAlias = PortalAliasController.Instance.GetPortalAlias(ps.DefaultPortalAlias); string url = null; // Check if it is a single or list template if (settings.Template.IsListTemplate && settings.Template.Detail != null) { url = TestableGlobals.Instance.NavigateURL(modInfo.TabID, ps, "", $"id={itemId}"); } else { // With a signle template we don't want to identify the content by id. url = TestableGlobals.Instance.NavigateURL(modInfo.TabID, ps, ""); } // instanciate the search document var retval = new SearchDocument { UniqueKey = modInfo.ModuleID + "-" + itemId + "-" + culture, PortalId = modInfo.PortalID, ModifiedTimeUtc = time, CultureCode = culture, TabId = modInfo.TabID, ModuleId = modInfo.ModuleID, ModuleDefId = modInfo.ModuleDefID, Url = url }; // get the title from the template, if it's there if (!string.IsNullOrEmpty(settings.Template?.Main?.DnnSearchTitle)) { var dicForHbs = JsonUtils.JsonToDictionary(contentData.ToString()); var hbEngine = new HandlebarsEngine(); retval.Title = hbEngine.ExecuteWithoutFaillure(settings.Template.Main.DnnSearchTitle, dicForHbs, modInfo.ModuleTitle); } // SK: this is the behaviour before introduction of DnnSearchTitle else if (dataItemTitle.IsJson()) { if (contentData["Title"] != null) { retval.Title = contentData["Title"].ToString(); } else { retval.Title = modInfo.ModuleTitle; } } else { retval.Title = dataItemTitle; } // for the search text, we're using the template in DnnSearchText if it's used // otherwise, we fall back to previous behaviour: // - if the item has a field called Description, we use that // - otherwise just get the whole item contents if (!string.IsNullOrEmpty(settings.Template?.Main?.DnnSearchText)) { var dicForHbs = JsonUtils.JsonToDictionary(contentData.ToString()); var hbEngine = new HandlebarsEngine(); retval.Body = hbEngine.ExecuteWithoutFaillure(settings.Template.Main.DnnSearchText, dicForHbs, modInfo.ModuleTitle); } else if (contentData["Description"] != null) { retval.Body = contentData["Description"]?.ToString(); } else { retval.Body = JsonToSearchableString(contentData); } // for description, we also try and use the available template first // if that's not there, we'll use the body text for the search document if (!string.IsNullOrEmpty(settings.Template?.Main?.DnnSearchDescription)) { var dicForHbs = JsonUtils.JsonToDictionary(contentData.ToString()); var hbEngine = new HandlebarsEngine(); retval.Description = hbEngine.ExecuteWithoutFaillure(settings.Template.Main.DnnSearchDescription, dicForHbs, modInfo.ModuleTitle); } else { retval.Description = retval.Body; } retval.Title = HttpUtility.HtmlDecode(retval.Title).StripHtml(); retval.Body = HttpUtility.HtmlDecode(retval.Body).StripHtml(); retval.Description = HttpUtility.HtmlDecode(retval.Description).StripHtml(); // Add support for module terms if (modInfo.Terms != null && modInfo.Terms.Count > 0) { retval.Tags = CollectHierarchicalTags(modInfo.Terms); } return(retval); }
public static int GetMainTabId(this OpenContentSettings settings, int moduleTabId) { return(settings.DetailTabId > 0 ? settings.DetailTabId : (settings.TabId > 0 ? settings.TabId : moduleTabId)); }
public static bool IsListTemplate(this OpenContentSettings settings) { return(settings.Template != null && settings.Template.IsListTemplate); }
public static int GetModuleId(this OpenContentSettings settings, int defaultModuleId) { return(settings.IsOtherModule ? settings.ModuleId : defaultModuleId); }
public override IList <SearchDocument> GetModifiedSearchDocuments(ModuleInfo modInfo, DateTime beginDateUtc) { Log.Logger.TraceFormat("Indexing content Module {0} - Tab {1} - indexing from {3}", modInfo.ModuleID, modInfo.TabID, modInfo.CultureCode, beginDateUtc); var searchDocuments = new List <SearchDocument>(); //If module is marked as "don't index" then return no results if (modInfo.ModuleSettings.GetValue("AllowIndex", "True") == "False") { Log.Logger.TraceFormat("Indexing content {0}|{1} - NOT - MODULE Indexing disabled", modInfo.ModuleID, modInfo.CultureCode); return(searchDocuments); } //If tab of the module is marked as "don't index" then return no results if (modInfo.ParentTab.TabSettings.GetValue("AllowIndex", "True") == "False") { Log.Logger.TraceFormat("Indexing content {0}|{1} - NOT - TAB Indexing disabled", modInfo.ModuleID, modInfo.CultureCode); return(searchDocuments); } //If tab is marked as "inactive" then return no results if (modInfo.ParentTab.DisableLink) { Log.Logger.TraceFormat("Indexing content {0}|{1} - NOT - TAB is inactive", modInfo.ModuleID, modInfo.CultureCode); return(searchDocuments); } var module = new OpenContentModuleInfo(modInfo); OpenContentSettings settings = modInfo.OpenContentSettings(); //if (settings.Template?.Main == null || !settings.Template.Main.DnnSearch) //{ // Log.Logger.TraceFormat("Indexing content Module {0} - Tab {1} - settings.Template?.Main == null || !settings.Template.Main.DnnSearch", modInfo.ModuleID, modInfo.TabID, modInfo.CultureCode); // return searchDocuments; //} if (settings.IsOtherModule) { return(searchDocuments); } IDataSource ds = DataSourceManager.GetDataSource(module.Settings.Manifest.DataSource); var dsContext = OpenContentUtils.CreateDataContext(module); IDataItems contentList = ds.GetAll(dsContext, null); if (!contentList.Items.Any()) { Log.Logger.TraceFormat("Indexing content {0}|{1} - NOT - No content found", modInfo.ModuleID, modInfo.CultureCode); } foreach (IDataItem content in contentList.Items) { if (content == null) { Log.Logger.TraceFormat("Indexing content {0}|{1} - NOT - Content is Null", modInfo.ModuleID, modInfo.CultureCode); } else if (content.LastModifiedOnDate.ToUniversalTime() > beginDateUtc && content.LastModifiedOnDate.ToUniversalTime() < DateTime.UtcNow) { SearchDocument searchDoc; if (DnnLanguageUtils.IsMultiLingualPortal(modInfo.PortalID)) { searchDoc = GetLocalizedItem(modInfo, settings, content); searchDocuments.Add(searchDoc); if (modInfo.LocalizedModules != null) { foreach (var localizedModule in modInfo.LocalizedModules) { SearchDocument localizedSearchDoc = GetLocalizedItem(localizedModule.Value, settings, content); searchDocuments.Add(localizedSearchDoc); } } } else { searchDoc = CreateSearchDocument(modInfo, settings, content.Data, content.Id, "", content.Title, JsonToSearchableString(content.Data), content.LastModifiedOnDate.ToUniversalTime()); searchDocuments.Add(searchDoc); Log.Logger.TraceFormat("Indexing content {0}|{5} - OK! {1} ({2}) of {3}", modInfo.ModuleID, searchDoc.Title, modInfo.TabID, content.LastModifiedOnDate.ToUniversalTime(), modInfo.CultureCode); } } else { Log.Logger.TraceFormat("Indexing content {0}|{1} - NOT - No need to index: lastmod {2} ", modInfo.ModuleID, modInfo.CultureCode, content.LastModifiedOnDate.ToUniversalTime()); } } return(searchDocuments); }
public HttpResponseMessage LookupData(LookupDataRequestDTO req) { OpenContentSettings settings = ActiveModule.OpenContentSettings(); ModuleInfo module = ActiveModule; if (settings.ModuleId > 0) { ModuleController mc = new ModuleController(); module = mc.GetModule(settings.ModuleId, settings.TabId, false); } var manifest = settings.Template.Manifest; TemplateManifest templateManifest = settings.Template; string key = req.dataKey; var dataManifest = manifest.GetAdditionalData(key); List <LookupResultDTO> res = new List <LookupResultDTO>(); try { var ds = DataSourceManager.GetDataSource(manifest.DataSource); var dsContext = new DataSourceContext() { PortalId = PortalSettings.PortalId, TabId = ActiveModule.TabID, ModuleId = module.ModuleID, TabModuleId = ActiveModule.TabModuleID, UserId = UserInfo.UserID, TemplateFolder = settings.TemplateDir.FolderPath, Config = manifest.DataSourceConfig, //Options = reqOptions }; var dsItem = ds.GetData(dsContext, dataManifest.ScopeType, dataManifest.StorageKey ?? key); if (dsItem != null) { JToken json = dsItem.Data; if (!string.IsNullOrEmpty(req.dataMember)) { json = json[req.dataMember]; } if (json is JArray) { AddLookupItems(req.valueField, req.textField, req.childrenField, res, json as JArray); } /* * else if (json is JObject) * { * foreach (var item in json.Children<JProperty>()) * { * res.Add(new LookupResultDTO() * { * value = dataManifest.ModelKey ?? key +"/"+item.Name, * text = item.Value[req.textField] == null ? "" : item.Value[req.textField].ToString() * }); * } * } */ } return(Request.CreateResponse(HttpStatusCode.OK, res)); } catch (Exception exc) { Log.Logger.Error(exc); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc)); } }