Ejemplo n.º 1
0
        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));
            }
        }
Ejemplo n.º 4
0
        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));
            }
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
 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));
     }
 }
Ejemplo n.º 8
0
        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));
            }
        }
Ejemplo n.º 9
0
        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;
        }
Ejemplo n.º 10
0
 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));
            }
        }
Ejemplo n.º 12
0
        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));
            }
        }
Ejemplo n.º 13
0
        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));
            }
        }
Ejemplo n.º 16
0
        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));
            }
        }
Ejemplo n.º 17
0
        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);
        }
Ejemplo n.º 18
0
        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));
            }
        }
Ejemplo n.º 19
0
 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);
        }
Ejemplo n.º 21
0
 public static int GetMainTabId(this OpenContentSettings settings, int moduleTabId)
 {
     return(settings.DetailTabId > 0 ? settings.DetailTabId : (settings.TabId > 0 ? settings.TabId : moduleTabId));
 }
Ejemplo n.º 22
0
 public static bool IsListTemplate(this OpenContentSettings settings)
 {
     return(settings.Template != null && settings.Template.IsListTemplate);
 }
Ejemplo n.º 23
0
 public static int GetModuleId(this OpenContentSettings settings, int defaultModuleId)
 {
     return(settings.IsOtherModule ? settings.ModuleId : defaultModuleId);
 }
Ejemplo n.º 24
0
        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);
        }
Ejemplo n.º 25
0
        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));
            }
        }