public OpenContentSettings(IDictionary moduleSettings)
        {
            var template = moduleSettings["template"] as string;    //templatepath+file  or  //manifestpath+key

            FirstTimeInitialisation = string.IsNullOrEmpty(template);
            if (!FirstTimeInitialisation)
            {
                var templateUri = new FileUri(template);
                TemplateKey = new TemplateKey(templateUri);
                TemplateManifest templateManifest;
                Manifest = ManifestUtils.GetManifest(TemplateKey, out templateManifest);
                Template = templateManifest;
            }

            var sTabId    = moduleSettings["tabid"] as string;
            var sModuleId = moduleSettings["moduleid"] as string;

            TabId    = -1;
            ModuleId = -1;
            if (sTabId != null && sModuleId != null)
            {
                TabId    = int.Parse(sTabId);
                ModuleId = int.Parse(sModuleId);
            }

            Data   = moduleSettings["data"] as string;
            _query = moduleSettings["query"] as string;
            var sDetailTabId = moduleSettings["detailtabid"] as string;

            DetailTabId = -1;
            if (!string.IsNullOrEmpty(sDetailTabId))
            {
                DetailTabId = int.Parse(sDetailTabId);
            }
        }
        public HttpResponseMessage Settings()
        {
            string data     = (string)ActiveModule.ModuleSettings["data"];
            string template = (string)ActiveModule.ModuleSettings["template"];

            try
            {
                var     templateUri = new FileUri(template);
                string  key         = templateUri.FileNameWithoutExtension;
                var     fb          = new FormBuilder(templateUri);
                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 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 void RegisterStyleSheet(string filePath)
        {
            if (!filePath.StartsWith("http") && !filePath.StartsWith("/"))
            {
                filePath = VirtualPath + filePath;
            }
            if (!filePath.StartsWith("http"))
            {
                var file = new FileUri(filePath);
                filePath = file.UrlFilePath;
            }

            ClientResourceManager.RegisterStyleSheet((Page)HttpContext.Current.CurrentHandler, filePath, CSSOrder);
            CSSOrder++;
        }
Example #5
0
        public static string GetDefaultTemplate(string physicalFolder)
        {
            string    template = "";
            FolderUri folder   = new FolderUri(FolderUri.ReverseMapPath(physicalFolder));
            var       manifest = ManifestUtils.GetFileManifest(folder);

            if (manifest != null && manifest.HasTemplates)
            {
                //get the requested template key
                //var templateManifest = manifest.Templates.First().Value;
                //var templateUri = new FileUri(folder, templateManifest.Main.Template);
                template = folder.FolderPath + "/" + manifest.Templates.First().Key;
            }
            else
            {
                foreach (var item in Directory.GetFiles(physicalFolder))
                {
                    string fileName = Path.GetFileName(item).ToLower();
                    if (fileName == "template.hbs")
                    {
                        template = item;
                        break;
                    }
                    else if (fileName == "template.cshtml")
                    {
                        template = item;
                        break;
                    }
                    if (fileName.EndsWith(".hbs"))
                    {
                        template = item;
                    }
                    if (fileName.EndsWith(".cshtml"))
                    {
                        template = item;
                    }
                }
            }
            return(FileUri.ReverseMapPath(template));
        }
Example #6
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));
            }
        }
Example #7
0
        internal static void RegisterScript(Page page, string sourceFolder, string jsfilename, int jsOrder, string provider = "DnnBodyProvider")
        {
            if (page == null)
            {
                return;
            }
            if (string.IsNullOrEmpty(jsfilename))
            {
                return;
            }

            if (!jsfilename.StartsWith("/") && !jsfilename.Contains("//"))
            {
                jsfilename = sourceFolder + jsfilename;
            }
            else if (!jsfilename.Contains("//"))
            {
                var file = new FileUri(jsfilename);
                jsfilename = file.UrlFilePath;
            }
            ClientResourceManager.RegisterScript(page, jsfilename, jsOrder, provider);
        }
Example #8
0
        public HttpResponseMessage Css(int tabid, int portalid)
        {
            List <string> templates = new List <string>();
            StringBuilder css       = new StringBuilder();
            var           tab       = TabController.Instance.GetTab(tabid, portalid);

            foreach (ModuleInfo module in tab.Modules.Cast <ModuleInfo>().Where(m => m.ModuleDefinition.DefinitionName == App.Config.Opencontent && !m.IsDeleted))
            {
                var moduleSettings = module.OpenContentSettings();
                if (moduleSettings.Template != null)
                {
                    var filePath = moduleSettings.Template.MainTemplateUri().FilePath;
                    if (!templates.Contains(filePath))
                    {
                        var cssfilename = new FileUri(Path.ChangeExtension(filePath, "css"));
                        if (cssfilename.FileExists)
                        {
                            if (UserInfo.IsSuperUser)
                            {
                                css.Append("/*").Append((cssfilename.FilePath)).AppendLine("*/");
                            }
                            css.AppendLine(CssMin.CompressCSS(File.ReadAllText(cssfilename.PhysicalFilePath)));
                        }
                        templates.Add(filePath);
                    }
                }
            }
            var res = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent(css.ToString(), Encoding.UTF8, "text/css")
            };

            res.Headers.CacheControl = new CacheControlHeaderValue {
                MaxAge = new TimeSpan(365, 0, 0, 0), Public = true, Private = false
            };
            return(res);
        }
        public List <PageDto> GetDetailPages(string template, int tabModuleId)
        {
            string format;
            int    othermoduleTabId = ActiveModule.TabID;
            int    moduleId         = ActiveModule.ModuleID;

            var listItems   = new List <PageDto>();
            var templateUri = new FileUri(template);
            var manifest    = templateUri.ToTemplateManifest();

            int othermoduleDetailTabId = -1;

            if (manifest != null && manifest.IsListTemplate && manifest.Manifest.Templates.Any(t => t.Value.Detail != null))
            {
                if (tabModuleId > 0)
                {
                    var dsModule = (new ModuleController()).GetTabModule(tabModuleId);
                    othermoduleTabId       = dsModule.TabID;
                    moduleId               = dsModule.ModuleID;
                    othermoduleDetailTabId = GetOtherModuleDetailTabId(othermoduleTabId, moduleId);
                    //if (othermoduleDetailTabId > 0)
                    //{
                    //    //add extra li with "Default Detail Page" directly to dropdown
                    //    format = LogContext.IsLogActive ? "Main Module Detail Page - [{0}]" : "Main Module Detail Page";
                    //    listItems.Add(new PageDto()
                    //    {
                    //        Text = string.Format(format, othermoduleDetailTabId),
                    //        TabId = othermoduleDetailTabId
                    //    });
                    //}
                }

                Dictionary <string, int> tabs = TabController.GetTabPathDictionary(ActiveModule.PortalID, DnnLanguageUtils.GetCurrentCultureCode());

                foreach (var tabId in tabs.Where(i => IsTabWithModuleWithSameMainModule(i.Value, moduleId) && IsAccessibleTab(i.Value)))
                {
                    string tabname = tabId.Key.Replace("//", " / ").TrimStart(" / ");

                    List <string> infoText = new List <string>();

                    if (othermoduleDetailTabId > 0 && tabId.Value == othermoduleDetailTabId)
                    {
                        infoText.Add("Main Module Detail");
                    }

                    if ((othermoduleTabId > 0 && tabId.Value == othermoduleTabId) || (othermoduleTabId == -1 && tabId.Value == ActiveModule.TabID))
                    {
                        //add extra li with "Main Module Page" directly to dropdown
                        //format = LogContext.IsLogActive ? "Main Module Page - {0} [{1}]" : "Main Module Page";
                        //listItems.Add(new PageDto()
                        //{
                        //    Text = string.Format(format, tabname, tabId.Value),
                        //    TabId = -1
                        //});
                        infoText.Add("Main Module ");
                    }
                    if (othermoduleTabId > 0 && tabId.Value == ActiveModule.TabID)
                    {
                        //add extra li with "CurrentPage" directly to dropdown
                        //format = LogContext.IsLogActive ? "Current Page - {0} [{1}]" : "Current Page";
                        //listItems.Add(new PageDto()
                        //{
                        //    Text = string.Format(format, tabname, tabId.Value),
                        //    TabId = tabId.Value
                        //});
                        infoText.Add("Current");
                    }

                    format = LogContext.IsLogActive ? "{0} [{1}]" : "{0}";
                    if (othermoduleTabId > 0 && tabId.Value == ActiveModule.TabID)
                    {
                        listItems.Add(new PageDto()
                        {
                            Text  = string.Format(format, tabname, tabId.Value) + " (Current)",
                            TabId = tabId.Value
                        });
                    }
                    else
                    {
                        listItems.Add(new PageDto()
                        {
                            Text  = string.Format(format, tabname, tabId.Value) + (infoText.Any() ? " (" + string.Join(",", infoText.ToArray()) + ")" : ""),
                            TabId = tabId.Value
                        });
                    }
                }

                return(listItems.OrderBy(x => x.Text).ToList());
            }
            return(listItems);
        }
Example #10
0
 public static List <ListItem> GetTemplates(PortalSettings portalSettings, int moduleId, FileUri selectedTemplate, string moduleSubDir)
 {
     if (selectedTemplate == null)
     {
         return(GetTemplates(portalSettings, moduleId, null as TemplateManifest, moduleSubDir));
     }
     return(GetTemplates(portalSettings, moduleId, selectedTemplate.ToTemplateManifest(), moduleSubDir));
 }
Example #11
0
        public static List <ListItem> GetTemplatesFiles(PortalSettings portalSettings, int moduleId, TemplateManifest selectedTemplate, string moduleSubDir, FileUri otherModuleTemplate)
        {
            //bool otherModuleSkinTemplate = otherModuleTemplate != null && otherModuleTemplate.PhysicalFilePath.Contains(HostingEnvironment.MapPath(GetSkinTemplateFolder(portalSettings, moduleSubDir)));
            string basePath = HostingEnvironment.MapPath(GetSiteTemplateFolder(portalSettings, moduleSubDir));

            if (!Directory.Exists(basePath))
            {
                Directory.CreateDirectory(basePath);
            }
            var dirs = Directory.GetDirectories(basePath);

            if (otherModuleTemplate != null)
            {
                var selDir = otherModuleTemplate.PhysicalFullDirectory;
                if (!dirs.Contains(selDir))
                {
                    selDir = Path.GetDirectoryName(selDir);
                }
                if (dirs.Contains(selDir))
                {
                    dirs = new string[] { selDir }
                }
                ;
                else
                {
                    dirs = new string[] { }
                };
            }
            List <ListItem> lst = new List <ListItem>();

            foreach (var dir in dirs)
            {
                string templateCat = "Site";
                //string dirName = Path.GetFileNameWithoutExtension(dir);
                string dirName = dir.Substring(basePath.Length);
                int    modId   = -1;
                if (int.TryParse(dirName, out modId))
                {
                    // if numeric directory name --> module template
                    if (modId == moduleId)
                    {
                        // this module -> show
                        templateCat = "Module";
                    }
                    else
                    {
                        // if it's from an other module -> don't show
                        continue;
                    }
                }

                IEnumerable <string> files         = Directory.EnumerateFiles(dir, "*.*", SearchOption.AllDirectories);
                IEnumerable <string> manifestfiles = files.Where(s => s.EndsWith("manifest.json"));
                var manifestTemplateFound          = false;
                if (manifestfiles.Any())
                {
                    foreach (string manifestFile in manifestfiles)
                    {
                        FileUri manifestFileUri = FileUri.FromPath(manifestFile);
                        var     manifest        = ManifestUtils.GetFileManifest(manifestFileUri);
                        if (manifest != null && manifest.HasTemplates)
                        {
                            manifestTemplateFound = true;
                            foreach (var template in manifest.Templates)
                            {
                                FileUri templateUri  = new FileUri(manifestFileUri.FolderPath, template.Key);
                                string  templateName = Path.GetDirectoryName(manifestFile).Substring(basePath.Length).Replace("\\", " / ");
                                if (!string.IsNullOrEmpty(template.Value.Title))
                                {
                                    templateName = templateName + " - " + template.Value.Title;
                                }
                                var item = new ListItem((templateCat == "Site" ? "" : templateCat + " : ") + templateName, templateUri.FilePath);
                                if (selectedTemplate != null && templateUri.FilePath.ToLowerInvariant() == selectedTemplate.Key.ToString().ToLowerInvariant())
                                {
                                    item.Selected = true;
                                }
                                lst.Add(item);
                            }
                        }
                    }
                }
                if (!manifestTemplateFound)
                {
                    IEnumerable <string> scriptfiles = files.Where(s => s.EndsWith(".cshtml") || s.EndsWith(".vbhtml") || s.EndsWith(".hbs"));
                    foreach (string script in scriptfiles)
                    {
                        FileUri templateUri = FileUri.FromPath(script);

                        string scriptName = script.Remove(script.LastIndexOf(".")).Replace(basePath, "");
                        if (templateCat == "Module")
                        {
                            if (scriptName.ToLower().EndsWith("template"))
                            {
                                scriptName = "";
                            }
                            else
                            {
                                scriptName = scriptName.Substring(scriptName.LastIndexOf("\\") + 1);
                            }
                        }
                        else if (scriptName.ToLower().EndsWith("template"))
                        {
                            scriptName = scriptName.Remove(scriptName.LastIndexOf("\\"));
                        }
                        else
                        {
                            scriptName = scriptName.Replace("\\", " - ");
                        }

                        var item = new ListItem((templateCat == "Site" ? "" : templateCat + " : ") + scriptName, templateUri.FilePath);
                        if (selectedTemplate != null && templateUri.FilePath.ToLowerInvariant() == selectedTemplate.Key.ToString().ToLowerInvariant())
                        {
                            item.Selected = true;
                        }
                        lst.Add(item);
                    }
                }
            }
            // skin
            basePath = HostingEnvironment.MapPath(GetSkinTemplateFolder(portalSettings, moduleSubDir));
            if (Directory.Exists(basePath))
            {
                dirs = Directory.GetDirectories(basePath);
                if (otherModuleTemplate != null /*&& */)
                {
                    var selDir = otherModuleTemplate.PhysicalFullDirectory;
                    if (!dirs.Contains(selDir))
                    {
                        selDir = Path.GetDirectoryName(selDir);
                    }
                    if (dirs.Contains(selDir))
                    {
                        dirs = new string[] { selDir }
                    }
                    ;
                    else
                    {
                        dirs = new string[] { }
                    };
                }

                foreach (var dir in dirs)
                {
                    string templateCat = "Skin";

                    IEnumerable <string> files         = Directory.EnumerateFiles(dir, "*.*", SearchOption.AllDirectories);
                    IEnumerable <string> manifestfiles = files.Where(s => s.EndsWith("manifest.json"));
                    var manifestTemplateFound          = false;

                    if (manifestfiles.Any())
                    {
                        foreach (string manifestFile in manifestfiles)
                        {
                            FileUri manifestFileUri = FileUri.FromPath(manifestFile);
                            var     manifest        = ManifestUtils.GetFileManifest(manifestFileUri);
                            if (manifest != null && manifest.HasTemplates)
                            {
                                manifestTemplateFound = true;
                                foreach (var template in manifest.Templates)
                                {
                                    FileUri templateUri  = new FileUri(manifestFileUri.FolderPath, template.Key);
                                    string  templateName = Path.GetDirectoryName(manifestFile).Substring(basePath.Length).Replace("\\", " / ");
                                    if (!string.IsNullOrEmpty(template.Value.Title))
                                    {
                                        templateName = templateName + " - " + template.Value.Title;
                                    }
                                    var item = new ListItem((templateCat == "Site" ? "" : templateCat + " : ") + templateName, templateUri.FilePath);
                                    if (selectedTemplate != null && templateUri.FilePath.ToLowerInvariant() == selectedTemplate.Key.ToString().ToLowerInvariant())
                                    {
                                        item.Selected = true;
                                    }
                                    lst.Add(item);
                                }
                            }
                        }
                    }
                    if (!manifestTemplateFound)
                    {
                        var scriptfiles =
                            Directory.EnumerateFiles(dir, "*.*", SearchOption.AllDirectories)
                            .Where(s => s.EndsWith(".cshtml") || s.EndsWith(".vbhtml") || s.EndsWith(".hbs"));
                        foreach (string script in scriptfiles)
                        {
                            string scriptName = script.Remove(script.LastIndexOf(".")).Replace(basePath, "");
                            if (scriptName.ToLower().EndsWith("template"))
                            {
                                scriptName = scriptName.Remove(scriptName.LastIndexOf("\\"));
                            }
                            else
                            {
                                scriptName = scriptName.Replace("\\", " - ");
                            }

                            FileUri templateUri = FileUri.FromPath(script);
                            var     item        = new ListItem(templateCat + " : " + scriptName, templateUri.FilePath);
                            if (selectedTemplate != null &&
                                templateUri.FilePath.ToLowerInvariant() == selectedTemplate.Key.ToString().ToLowerInvariant())
                            {
                                item.Selected = true;
                            }
                            lst.Add(item);
                        }
                    }
                }
            }
            return(lst);
        }
        private static string[] GetDirs(TemplateManifest selectedTemplate, FileUri otherModuleTemplate, bool advanced, string basePath, string[] dirs, List <ListItem> lst, string folderType)
        {
            if (Directory.Exists(basePath))
            {
                dirs = Directory.GetDirectories(basePath);
                if (otherModuleTemplate != null /*&& */)
                {
                    var selDir = otherModuleTemplate.PhysicalFullDirectory;
                    if (!dirs.Contains(selDir))
                    {
                        selDir = Path.GetDirectoryName(selDir);
                    }
                    if (dirs.Contains(selDir))
                    {
                        dirs = new string[] { selDir }
                    }
                    ;
                    else
                    {
                        dirs = new string[] { }
                    };
                }

                foreach (var dir in dirs)
                {
                    string templateCat = folderType;

                    IEnumerable <string> files         = Directory.EnumerateFiles(dir, "*.*", SearchOption.AllDirectories);
                    IEnumerable <string> manifestfiles = files.Where(s => s.EndsWith("manifest.json"));
                    var manifestTemplateFound          = false;

                    if (manifestfiles.Any())
                    {
                        foreach (string manifestFile in manifestfiles)
                        {
                            FileUri manifestFileUri = FileUri.FromPath(manifestFile);
                            var     manifest        = ManifestUtils.LoadManifestFileFromCacheOrDisk(manifestFileUri);
                            if (manifest != null && manifest.HasTemplates)
                            {
                                manifestTemplateFound = true;
                                foreach (var template in manifest.Templates)
                                {
                                    FileUri templateUri  = new FileUri(manifestFileUri.FolderPath, template.Key);
                                    string  templateName = Path.GetDirectoryName(manifestFile).Substring(basePath.Length).Replace("\\", " / ");
                                    if (!String.IsNullOrEmpty(template.Value.Title))
                                    {
                                        if (advanced)
                                        {
                                            templateName = templateName + " - " + template.Value.Title;
                                        }
                                    }
                                    var item = new ListItem((templateCat == "Site" ? "" : templateCat + " : ") + templateName, templateUri.FilePath);
                                    if (selectedTemplate != null && templateUri.FilePath.ToLowerInvariant() == selectedTemplate.Key.ToString().ToLowerInvariant())
                                    {
                                        item.Selected = true;
                                    }
                                    lst.Add(item);
                                    if (!advanced)
                                    {
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    if (!manifestTemplateFound)
                    {
                        var scriptfiles =
                            Directory.EnumerateFiles(dir, "*.*", SearchOption.AllDirectories)
                            .Where(s => s.EndsWith(".cshtml") || s.EndsWith(".vbhtml") || s.EndsWith(".hbs"));
                        foreach (string script in scriptfiles)
                        {
                            string scriptName = script.Remove(script.LastIndexOf(".")).Replace(basePath, "");
                            if (scriptName.ToLower().EndsWith("template"))
                            {
                                scriptName = scriptName.Remove(scriptName.LastIndexOf("\\"));
                            }
                            else
                            {
                                scriptName = scriptName.Replace("\\", " - ");
                            }

                            FileUri templateUri = FileUri.FromPath(script);
                            var     item        = new ListItem(templateCat + " : " + scriptName, templateUri.FilePath);
                            if (selectedTemplate != null &&
                                templateUri.FilePath.ToLowerInvariant() == selectedTemplate.Key.ToString().ToLowerInvariant())
                            {
                                item.Selected = true;
                            }
                            lst.Add(item);
                        }
                    }
                }
            }

            return(dirs);
        }