示例#1
0
        public HttpResponseMessage Post(string entity, [FromBody] JObject value)
        {
            // Add
            try
            {
                var collection = entity;
                OpenContentModuleConfig module = OpenContentModuleConfig.Create(ActiveModule, PortalSettings);

                var    manifest = module.Settings.Template.Manifest;
                string editRole = manifest.GetEditRole();

                IDataSource ds        = DataSourceManager.GetDataSource(module.Settings.Manifest.DataSource);
                var         dsContext = OpenContentUtils.CreateDataContext(module, UserInfo.UserID);
                dsContext.Collection = collection;
                if (!DnnPermissionsUtils.HasEditPermissions(module, editRole, -1))
                {
                    return(Request.CreateResponse(HttpStatusCode.Unauthorized));
                }
                ds.Add(dsContext, value.Properties().First().Value as JObject);

                return(Request.CreateResponse(HttpStatusCode.OK, ""));
            }
            catch (Exception exc)
            {
                App.Services.Logger.Error(exc);
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc));
            }
        }
示例#2
0
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            ModuleInfo module = ModuleContext.Configuration;

            if (App.Services.CreateGlobalSettingsRepository(ModuleContext.PortalId).GetAutoAttach())
            {
                // auto attach a ContentLocalized OpenContent module to the reference module of the default language
                AutoAttachLocalizedModule(ref module);
            }
            _engine             = new RenderEngine(OpenContentModuleConfig.Create(module, PortalSettings.Current), new DnnRenderContext(ModuleContext), LocalResourceFile);
            _renderinfo         = _engine.Info;
            _settings           = _engine.Settings;
            _engine.QueryString = Page.Request.QueryString;
            if (Page.Request.QueryString["id"] != null)
            {
                _engine.ItemId = Page.Request.QueryString["id"];
            }

            //initialize TemplateInitControl
            TemplateInit ti = (TemplateInit)TemplateInitControl;

            ti.ModuleContext = ModuleContext;
            ti.Settings      = _settings;
            ti.Renderinfo    = _renderinfo;
            ti.ResourceFile  = LocalResourceFile;
        }
示例#3
0
        public HttpResponseMessage Get(string entity)
        {
            try
            {
                var collection = entity;
                OpenContentModuleConfig module = OpenContentModuleConfig.Create(ActiveModule, PortalSettings);

                var manifest = module.Settings.Manifest;
                if (manifest.AdditionalDataDefined(entity))
                {
                    var dataManifest = manifest.AdditionalDataDefinition[entity];
                    var res          = new JObject();

                    IDataSource ds        = DataSourceManager.GetDataSource(module.Settings.Manifest.DataSource);
                    var         dsContext = OpenContentUtils.CreateDataContext(module, UserInfo.UserID);
                    dsContext.Collection = collection;
                    var dsItem = ds.GetData(dsContext, dataManifest.ScopeType, dataManifest.StorageKey ?? entity);
                    if (dsItem != null)
                    {
                        var json = dsItem.Data;
                        res[entity] = json;
                    }
                    return(Request.CreateResponse(HttpStatusCode.OK, res));
                }
                else
                {
                    return(Get(entity, 0, 100, null, null));
                }
            }
            catch (Exception exc)
            {
                App.Services.Logger.Error(exc);
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc));
            }
        }
示例#4
0
        private List <dynamic> GetDataAsListOfDynamics()
        {
            var module = OpenContentModuleConfig.Create(this.ModuleConfiguration, PortalSettings);
            OpenContentController ctrl = new OpenContentController(ModuleContext.PortalId);
            var data = ctrl.GetContents(module.DataModule.ModuleId, "Submissions").OrderByDescending(c => c.CreatedOnDate);

            var dynData = new List <dynamic>();

            foreach (var item in data)
            {
                dynamic o    = new ExpandoObject();
                var     dict = (IDictionary <string, object>)o;
                o.CreatedOnDate = item.CreatedOnDate;
                o.Title         = item.Title;
                //o.Json = item.Json;
                dynamic d = JsonUtils.JsonToDynamic(item.Json);
                //o.Data = d;
                Dictionary <String, Object> jdic = Dyn2Dict(d);
                foreach (var p in jdic)
                {
                    dict[p.Key] = p.Value;
                }
                dynData.Add(o);
            }
            return(dynData);
        }
        public static bool CheckIfEditable(this OpenContentModuleInfo dataModule, OpenContentModuleConfig ocModuleConfig)
        {
            bool isEditable;

            //first check some weird Dnn issue
            if (HttpContext.Current != null && HttpContext.Current.Request.IsAuthenticated)
            {
                var personalization = (PersonalizationInfo)HttpContext.Current.Items["Personalization"];
                if (personalization != null && personalization.UserId == -1)
                {
                    //this should never happen.
                    //Let us make sure that the wrong value is no longer cached
                    HttpContext.Current.Items.Remove("Personalization");
                }
            }
            bool blnPreview = ocModuleConfig.PreviewEnabled;

            if (Globals.IsHostTab(ocModuleConfig.TabId))
            {
                blnPreview = false;
            }

            bool blnHasModuleEditPermissions = dataModule.HasEditRightsOnModule();

            if (blnPreview == false && blnHasModuleEditPermissions)
            {
                isEditable = true;
            }
            else
            {
                isEditable = false;
            }
            return(isEditable);
        }
        private List <dynamic> GetDataAsListOfDynamics()
        {
            var module = OpenContentModuleConfig.Create(this.ModuleConfiguration, PortalSettings);
            OpenContentController ctrl = new OpenContentController(ModuleContext.PortalId);
            var data = ctrl.GetContents(module.DataModule.ModuleId, "Submissions").OrderByDescending(c => c.CreatedOnDate);

            var dynData = new List <dynamic>();

            foreach (var item in data)
            {
                dynamic o    = new ExpandoObject();
                var     dict = (IDictionary <string, object>)o;
                o.CreatedOnDate = item.CreatedOnDate;
                o.Id            = item.ContentId;
                o.Title         = item.Title;
                try
                {
                    dynamic d = JsonUtils.JsonToDynamic(item.Json);
                    Dictionary <string, object> jdic = Dyn2Dict(d);
                    foreach (var p in jdic)
                    {
                        dict[p.Key] = p.Value;
                    }
                }
                catch (Exception e)
                {
                    o.Error = $"Failed to Convert item [{item.ContentId}] to dynamic. Item.CreatedOnDate: {item.CreatedOnDate}";
                }

                dynData.Add(o);
            }
            return(dynData);
        }
示例#7
0
        private static IEnumerable <IIndexableItem> GetModuleIndexableData(OpenContentModuleConfig module)
        {
            bool index    = false;
            var  settings = module.Settings;

            if (settings.TemplateAvailable)
            {
                index = settings.Manifest.Index;
            }
            if (!index)
            {
                return(null);
            }

            IDataSource ds = DataSourceManager.GetDataSource(settings.Manifest.DataSource);

            if (!(ds is IDataIndex))
            {
                return(null);
            }

            var dsContext = OpenContentUtils.CreateDataContext(module);
            var dataIndex = (IDataIndex)ds;

            return(dataIndex.GetIndexableData(dsContext));
        }
示例#8
0
        private JToken GenerateObject(string id, int tabId, int moduleId, bool onlyData)
        {
            var       module    = moduleId > 0 ? OpenContentModuleConfig.Create(moduleId, tabId, PortalSettings.Current) : _module;
            var       ds        = DataSourceManager.GetDataSource(module.Settings.Manifest.DataSource);
            var       dsContext = OpenContentUtils.CreateDataContext(module);
            IDataItem dataItem  = ds.Get(dsContext, id);

            if (dataItem != null)
            {
                var json = dataItem?.Data?.DeepClone() as JObject;
                //if (!string.IsNullOrEmpty(dataMember))
                //{
                //    json = json[dataMember];
                //}
                if (json != null)
                {
                    JsonUtils.SimplifyJson(json, GetCurrentCultureCode());
                    if (!onlyData)
                    {
                        var context = new JObject();
                        json["Context"]      = context;
                        context["Id"]        = dataItem.Id;
                        context["DetailUrl"] = GenerateDetailUrl(dataItem, json, module.Settings.Manifest, GetCurrentCultureCode(), tabId > 0 ? tabId : _detailTabId);
                    }
                    return(json);
                }
            }
            JObject res = new JObject();

            res["Id"]    = id;
            res["Title"] = "unknow";
            return(res);
        }
示例#9
0
        private void SaveAdditionalData(string key)
        {
            var module = OpenContentModuleConfig.Create(this.ModuleConfiguration, PortalSettings);
            OpenContentSettings settings = this.OpenContentSettings();
            int modId        = settings.IsOtherModule ? settings.ModuleId : ModuleId;
            var manifest     = settings.Manifest;
            var dataManifest = manifest.GetAdditionalData(key);
            var ds           = DataSourceManager.GetDataSource(manifest.DataSource);
            var dsContext    = new DataSourceContext()
            {
                PortalId           = PortalSettings.PortalId,
                CurrentCultureCode = DnnLanguageUtils.GetCurrentCultureCode(),
                TabId          = TabId,
                ModuleId       = modId,
                TabModuleId    = this.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, JToken.Parse(txtSource.Text));
            }
            else
            {
                ds.UpdateData(dsContext, dsItem, JToken.Parse(txtSource.Text));
            }
            App.Services.CacheAdapter.SyncronizeCache(module);
        }
示例#10
0
        public HttpResponseMessage Get(string entity, string id)
        {
            try
            {
                //if (entity == "items")
                var collection = App.Config.DefaultCollection;
                OpenContentModuleConfig module = OpenContentModuleConfig.Create(ActiveModule, PortalSettings);

                JObject reqOptions = null;

                if (module.IsListMode())
                {
                    var indexConfig = OpenContentUtils.GetIndexConfig(module.Settings.TemplateDir, collection);
                    //bool isEditable = ActiveModule.CheckIfEditable(PortalSettings);
                    IDataSource ds        = DataSourceManager.GetDataSource(module.Settings.Manifest.DataSource);
                    var         dsContext = OpenContentUtils.CreateDataContext(module, UserInfo.UserID, false, reqOptions);
                    dsContext.Collection = collection;
                    var dsItem = ds.Get(dsContext, id);
                    var res    = new JObject();
                    res["meta"] = new JObject();
                    var items = new JArray();
                    if (dsItem != null)
                    {
                        var mf = new ModelFactorySingle(dsItem, module, collection);

                        string raison = "";
                        if (!OpenContentUtils.HaveViewPermissions(dsItem, module.UserRoles.FromDnnRoles(), indexConfig, out raison))
                        {
                            Exceptions.ProcessHttpException(new HttpException(404, "No detail view permissions for id=" + id + " (" + raison + ")"));
                            //throw new UnauthorizedAccessException("No detail view permissions for id " + info.DetailItemId);
                        }

                        mf.Options = reqOptions;
                        var model = mf.GetModelAsJson(false);
                        items.Add(model);
                        model["id"]          = dsItem.Id;
                        res["meta"]["total"] = dsItem == null ? 0 : 1;
                        JsonUtils.IdJson(model);
                        if (LogContext.IsLogActive)
                        {
                            var logKey = "Query";
                            LogContext.Log(module.ViewModule.ModuleId, logKey, "model", model);
                            res["meta"]["logs"] = JToken.FromObject(LogContext.Current.ModuleLogs(module.ViewModule.ModuleId));
                        }
                    }
                    res[entity] = items;
                    return(Request.CreateResponse(HttpStatusCode.OK, res));
                }
                else
                {
                    return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "not supported because not in multi items template "));
                }
            }
            catch (Exception exc)
            {
                App.Services.Logger.Error(exc);
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc));
            }
        }
示例#11
0
        public RenderEngine(ModuleInfo moduleinfo)
        {
            var ocModuleConfig = OpenContentModuleConfig.Create(moduleinfo.ModuleID, moduleinfo.TabID, PortalSettings.Current);

            _module     = ocModuleConfig;
            _renderinfo = new RenderInfo(_module.Settings.Template, _module.Settings.IsOtherModule);
            _settings   = _module.Settings;
        }
示例#12
0
 public RenderEngine(OpenContentModuleConfig ocModuleConfig, IRenderContext renderContext, string localResourceFile)
 {
     _module       = ocModuleConfig;
     _renderinfo   = new RenderInfo(_module.Settings.Template, _module.Settings.IsOtherModule);
     _settings     = _module.Settings;
     RenderContext = renderContext;
     ResourceFile  = localResourceFile;
 }
示例#13
0
        private static bool ModuleHasAlreadyData(ModuleInfo moduleInfo)
        {
            OpenContentModuleConfig ocModuleConfig = OpenContentModuleConfig.Create(moduleInfo, PortalSettings.Current);
            IDataSource             ds             = DataSourceManager.GetDataSource(ocModuleConfig.Settings.Manifest.DataSource);
            var dsContext = OpenContentUtils.CreateDataContext(ocModuleConfig);

            return(ds.Any(dsContext));
        }
示例#14
0
        public HttpResponseMessage Put(string entity, string id, [FromBody] JObject value)
        {
            // update
            try
            {
                OpenContentModuleConfig module = OpenContentModuleConfig.Create(ActiveModule, PortalSettings);

                string editRole        = module.Settings.Template.Manifest.GetEditRole();
                int    createdByUserid = -1;

                IDataSource ds        = DataSourceManager.GetDataSource(module.Settings.Manifest.DataSource);
                var         dsContext = OpenContentUtils.CreateDataContext(module, UserInfo.UserID);

                IDataItem dsItem = null;
                if (module.IsListMode())
                {
                    if (id != null)
                    {
                        var itemId = id;
                        dsItem = ds.Get(dsContext, itemId);
                        if (dsItem != null)
                        {
                            createdByUserid = dsItem.CreatedByUserId;
                        }
                    }
                }
                else
                {
                    dsContext.Single = true;
                    dsItem           = ds.Get(dsContext, null);
                    if (dsItem != null)
                    {
                        createdByUserid = dsItem.CreatedByUserId;
                    }
                }
                if (!DnnPermissionsUtils.HasEditPermissions(module, editRole, createdByUserid))
                {
                    return(Request.CreateResponse(HttpStatusCode.Unauthorized));
                }
                if (dsItem == null)
                {
                    ds.Add(dsContext, value.Properties().First().Value as JObject);
                }
                else
                {
                    ds.Update(dsContext, dsItem, value.Properties().First().Value as JObject);
                }
                App.Services.CacheAdapter.SyncronizeCache(module);

                return(Request.CreateResponse(HttpStatusCode.OK, ""));
            }
            catch (Exception exc)
            {
                App.Services.Logger.Error(exc);
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc));
            }
        }
示例#15
0
        public HttpResponseMessage Put(string entity, string id, string memberAction, [FromBody] JObject value)
        {
            // action
            try
            {
                var collection = entity;
                OpenContentModuleConfig module = OpenContentModuleConfig.Create(ActiveModule, PortalSettings);
                string editRole        = module.Settings.Template.Manifest.GetEditRole();
                int    createdByUserid = -1;

                IDataSource ds        = DataSourceManager.GetDataSource(module.Settings.Manifest.DataSource);
                var         dsContext = OpenContentUtils.CreateDataContext(module, UserInfo.UserID);
                dsContext.Collection = collection;
                IDataItem dsItem = null;
                if (module.IsListMode())
                {
                    if (id != null)
                    {
                        var itemId = id;
                        dsItem = ds.Get(dsContext, 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 (!DnnPermissionsUtils.HasEditPermissions(module, editRole, createdByUserid))
                {
                    return(Request.CreateResponse(HttpStatusCode.Unauthorized));
                }
                //var indexConfig = OpenContentUtils.GetIndexConfig(settings.Template.Key.TemplateDir);
                JToken res = null;
                if (dsItem != null)
                {
                    res = ds.Action(dsContext, memberAction, dsItem, value);
                }

                return(Request.CreateResponse(HttpStatusCode.OK, res));
            }
            catch (Exception exc)
            {
                App.Services.Logger.Error(exc);
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc));
            }
        }
        protected void cmdSaveDefault_Click(object sender, EventArgs e)
        {
            if (sourceList.SelectedValue == DATATYPE_DATA)
            {
                var module = OpenContentModuleConfig.Create(this.ModuleConfiguration, PortalSettings);
                TemplateManifest template = module.Settings.Template;

                if (template != null)
                {
                    var dataFilename = template.MainTemplateUri().PhysicalFullDirectory + "\\data.json";
                    if (template.IsListTemplate)
                    {
                        string itemId = Request.QueryString["id"];
                        if (!string.IsNullOrEmpty(itemId))
                        {
                            File.WriteAllText(dataFilename, txtSource.Text);
                        }
                        else
                        {
                            JArray lst = null;
                            if (!string.IsNullOrEmpty(txtSource.Text))
                            {
                                lst = JArray.Parse(txtSource.Text);
                                if (lst.Count > 0)
                                {
                                    File.WriteAllText(dataFilename, lst[0].ToString());
                                }
                            }
                        }
                    }
                    else
                    {
                        File.WriteAllText(dataFilename, txtSource.Text);
                    }
                }
            }
            else if (sourceList.SelectedValue == DATATYPE_SETTINGS)
            {
                var module = OpenContentModuleConfig.Create(this.ModuleConfiguration, PortalSettings);
                TemplateManifest template = module.Settings.Template;
                var settingsFilename      = template.MainTemplateUri().PhysicalFullDirectory + "\\" + template.Key.ShortKey + "-data.json";
                File.WriteAllText(settingsFilename, txtSource.Text);
            }
            else if (sourceList.SelectedValue == DATATYPE_FILTER)
            {
                var module = OpenContentModuleConfig.Create(this.ModuleConfiguration, PortalSettings);
                TemplateManifest template = module.Settings.Template;
                var settingsFilename      = template.MainTemplateUri().PhysicalFullDirectory + "\\" + "filter-data.json";
                File.WriteAllText(settingsFilename, txtSource.Text);
            }
            else
            {
                //SaveAdditionalData(sourceList.SelectedValue);
            }
        }
        public static bool HasAllUsersViewPermissions(this OpenContentModuleConfig module)
        {
            bool blnHasModuleViewPermissions = false;

            if (module.ViewModule != null)
            {
                //DNN already checks SuperUser and Administrator
                blnHasModuleViewPermissions = ModulePermissionController.HasModuleAccess(AppDefinitions.SecurityAccessLevel.View.ToDnnSecurityAccessLevel(), "CONTENT", DnnUtils.GetDnnModule(module.ViewModule));
            }
            return(blnHasModuleViewPermissions);
        }
示例#18
0
        public HttpResponseMessage Delete(string entity, string id)
        {
            try
            {
                OpenContentModuleConfig module = OpenContentModuleConfig.Create(ActiveModule, PortalSettings);
                string editRole        = module.Settings.Template.Manifest.GetEditRole();
                int    createdByUserid = -1;

                IDataSource ds        = DataSourceManager.GetDataSource(module.Settings.Manifest.DataSource);
                var         dsContext = OpenContentUtils.CreateDataContext(module, UserInfo.UserID);

                IDataItem dsItem = null;
                if (module.IsListMode())
                {
                    if (id != null)
                    {
                        var itemId = id;
                        dsItem = ds.Get(dsContext, itemId);
                        if (dsItem != null)
                        {
                            createdByUserid = dsItem.CreatedByUserId;
                        }
                    }
                }
                else
                {
                    dsContext.Single = true;
                    dsItem           = ds.Get(dsContext, null);
                    if (dsItem != null)
                    {
                        createdByUserid = dsItem.CreatedByUserId;
                    }
                }
                if (!DnnPermissionsUtils.HasEditPermissions(module, editRole, createdByUserid))
                {
                    return(Request.CreateResponse(HttpStatusCode.Unauthorized));
                }
                //var indexConfig = OpenContentUtils.GetIndexConfig(settings.Template.Key.TemplateDir);
                if (dsItem != null)
                {
                    ds.Delete(dsContext, dsItem);
                }
                return(Request.CreateResponse(HttpStatusCode.OK, ""));
            }
            catch (Exception exc)
            {
                App.Services.Logger.Error(exc);
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc));
            }
        }
示例#19
0
 protected ModelFactoryBase(string settingsJson, Manifest.Manifest manifest, TemplateManifest templateManifest, TemplateFiles templateFiles, OpenContentModuleConfig module, int portalId, string cultureCode)
 {
     this._settingsJson     = settingsJson;
     this._manifest         = manifest;
     this._templateFiles    = templateFiles;
     this._module           = module;
     this._cultureCode      = cultureCode;
     this._portalId         = portalId;
     this._templateManifest = templateManifest;
     this._collection       = templateManifest.Collection;
     this._detailTabId      = DnnUtils.GetTabByCurrentCulture(this._portalId, module.GetDetailTabId(), GetCurrentCultureCode());
     _ds        = DataSourceManager.GetDataSource(_manifest.DataSource);
     _dsContext = OpenContentUtils.CreateDataContext(_module);
 }
        private static void ReIndexIfNeeded(int moduleid, int tabid, int portalId)
        {
            var currentUserCount     = UserController.GetUserCountByPortal(portalId);
            var userCountAtLastIndex = DnnUtils.GetPortalSetting("UserCountAtLastIndex", 0);

            if (currentUserCount != userCountAtLastIndex)
            {
                // reindex module data
                var module = OpenContentModuleConfig.Create(moduleid, tabid, null);
                LuceneUtils.ReIndexModuleData(module);
                DnnUtils.SetPortalSetting("UserCountAtLastIndex", currentUserCount);
                App.Services.Logger.Info("DnnUsers reindexed");
            }
        }
示例#21
0
        public HttpResponseMessage Post(string entity, [FromBody] JObject value)
        {
            // Add
            try
            {
                OpenContentModuleConfig module = OpenContentModuleConfig.Create(ActiveModule, PortalSettings);

                var    manifest = module.Settings.Template.Manifest;
                string editRole = manifest.GetEditRole();

                IDataSource ds        = DataSourceManager.GetDataSource(module.Settings.Manifest.DataSource);
                var         dsContext = OpenContentUtils.CreateDataContext(module, UserInfo.UserID);

                if (!DnnPermissionsUtils.HasEditPermissions(module, editRole, -1))
                {
                    return(Request.CreateResponse(HttpStatusCode.Unauthorized));
                }
                ds.Add(dsContext, value.Properties().First().Value as JObject);

                var dsItem = ds.Get(dsContext, dsContext.Id);
                var res    = new JObject();
                res["meta"] = new JObject();
                var items = new JArray();
                if (dsItem != null)
                {
                    var collection = App.Config.DefaultCollection;
                    var mf         = new ModelFactorySingle(dsItem, module, collection);
                    var model      = mf.GetModelAsJson(false);
                    items.Add(model);
                    model["id"]          = dsContext.Id;
                    res["meta"]["total"] = dsItem == null ? 0 : 1;
                    JsonUtils.IdJson(model);
                    if (LogContext.IsLogActive)
                    {
                        var logKey = "Query";
                        LogContext.Log(module.ViewModule.ModuleId, logKey, "model", model);
                        res["meta"]["logs"] = JToken.FromObject(LogContext.Current.ModuleLogs(module.ViewModule.ModuleId));
                    }
                }
                res[entity] = items;
                return(Request.CreateResponse(HttpStatusCode.OK, res));

                //return Request.CreateResponse(HttpStatusCode.OK, "");
            }
            catch (Exception exc)
            {
                App.Services.Logger.Error(exc);
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc));
            }
        }
示例#22
0
        protected ModelFactoryBase(OpenContentModuleConfig module, string collection)
        {
            OpenContentSettings settings = module.Settings;

            this._settingsJson     = settings.Data;
            this._manifest         = settings.Template.Manifest;
            this._templateFiles    = settings.Template?.Main;
            this._module           = module;
            this._portalId         = module.PortalId;
            this._templateManifest = settings.Template;
            this._collection       = collection;
            this._detailTabId      = DnnUtils.GetTabByCurrentCulture(this._portalId, module.GetDetailTabId(), GetCurrentCultureCode());
            _ds        = DataSourceManager.GetDataSource(_manifest.DataSource);
            _dsContext = OpenContentUtils.CreateDataContext(_module);
        }
示例#23
0
        private static void RegisterModuleDataForIndexing(LuceneController lc, OpenContentModuleConfig module)
        {
            var indexableData = GetModuleIndexableData(module);
            var dataExample   = indexableData?.ToList().FirstOrDefault();

            if (dataExample == null)
            {
                return;
            }

            var indexConfig = OpenContentUtils.GetIndexConfig(module.Settings.Template); //todo index is being build from schema & options. But they should be provided by the provider, not directly from the files

            string scope = dataExample.GetScope();

            lc.AddList(indexableData, indexConfig, scope);
        }
 public static bool HasEditRole(OpenContentModuleConfig ocModuleConfig, string editrole, int createdByUserId)
 {
     if (String.IsNullOrEmpty(editrole))
     {
         return(false);
     }
     if (editrole.ToLower() == "all")
     {
         return(true);
     }
     if (ocModuleConfig.IsInRole(editrole) && (createdByUserId == -1 || createdByUserId == ocModuleConfig.UserId))
     {
         return(true);
     }
     return(false);
 }
示例#25
0
        private static void ReIndexIfNeeded(int moduleid, int tabid, int portalId)
        {
            if (PortalSettings.Current == null)
            {
                return;                                 // we can not reindex even if we wanted, because we are not in a regular http context (maybe console? scheduler? ashx?)
            }
            var currentUserCount     = UserController.GetUserCountByPortal(portalId);
            var userCountAtLastIndex = DnnUtils.GetPortalSetting("UserCountAtLastIndex", 0);

            if (currentUserCount != userCountAtLastIndex)
            {
                // reindex module data
                var module = OpenContentModuleConfig.Create(moduleid, tabid, null);
                LuceneUtils.ReIndexModuleData(module);
                DnnUtils.SetPortalSetting("UserCountAtLastIndex", currentUserCount);
                App.Services.Logger.Info("DnnUsers reindexed");
            }
        }
示例#26
0
        public HttpResponseMessage Get(string entity)
        {
            try
            {
                OpenContentModuleConfig module = OpenContentModuleConfig.Create(ActiveModule, PortalSettings);

                var manifest = module.Settings.Manifest;
                TemplateManifest templateManifest = module.Settings.Template;
                if (manifest.AdditionalDataDefined(entity))
                {
                    var dataManifest = manifest.AdditionalDataDefinition[entity];
                    //string scope = AdditionalDataUtils.GetScope(dataManifest, PortalSettings.PortalId, ActiveModule.TabID, module.ModuleID, ActiveModule.TabModuleID);

                    //var templateFolder = string.IsNullOrEmpty(dataManifest.TemplateFolder) ? settings.TemplateDir : settings.TemplateDir.ParentFolder.Append(dataManifest.TemplateFolder);
                    //var fb = new FormBuilder(templateFolder);
                    //JObject json = fb.BuildForm(entity);
                    var res = new JObject();

                    IDataSource ds        = DataSourceManager.GetDataSource(module.Settings.Manifest.DataSource);
                    var         dsContext = OpenContentUtils.CreateDataContext(module, UserInfo.UserID);

                    var dsItem = ds.GetData(dsContext, dataManifest.ScopeType, dataManifest.StorageKey ?? entity);
                    if (dsItem != null)
                    {
                        var json = dsItem.Data;
                        JsonUtils.IdJson(json);
                        res[entity] = json;
                    }
                    return(Request.CreateResponse(HttpStatusCode.OK, res));
                }
                else
                {
                    return(Get(entity, 0, 100, null, null));
                }
            }
            catch (Exception exc)
            {
                App.Services.Logger.Error(exc);
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc));
            }
        }
        public HttpResponseMessage GetExcel(int moduleId, int tabId, string template, string fileName)
        {
            IEnumerable <IDataItem> dataList = new List <IDataItem>();
            var module   = OpenContentModuleConfig.Create(moduleId, tabId, PortalSettings);
            var manifest = module.Settings.Template.Manifest;

            if (!module.HasAllUsersViewPermissions())
            {
                return(Request.CreateResponse(HttpStatusCode.Unauthorized));
            }

            bool useLucene = module.Settings.Template.Manifest.Index;

            if (useLucene)
            {
                var indexConfig = OpenContentUtils.GetIndexConfig(module.Settings.Template);

                QueryBuilder queryBuilder = new QueryBuilder(indexConfig);
                queryBuilder.Build(module.Settings.Query, PortalSettings.UserMode != PortalSettings.Mode.Edit, UserInfo.UserID, DnnLanguageUtils.GetCurrentCultureCode(), UserInfo.Social.Roles.FromDnnRoles());
                IDataSource ds        = DataSourceManager.GetDataSource(module.Settings.Manifest.DataSource);
                var         dsContext = OpenContentUtils.CreateDataContext(module, UserInfo.UserID);

                var dsItems = ds.GetAll(dsContext, queryBuilder.Select);
                dataList = dsItems.Items;
            }

            var     mf    = new ModelFactoryMultiple(dataList, null, manifest, null, null, module);
            dynamic model = mf.GetModelAsDictionary(true);

            var    rssTemplate = new FileUri(module.Settings.TemplateDir, template + ".hbs");
            string source      = rssTemplate.FileExists ? FileUriUtils.ReadFileFromDisk(rssTemplate) : GenerateTemplateFromModel(model, rssTemplate);

            HandlebarsEngine hbEngine = new HandlebarsEngine();
            string           res      = hbEngine.Execute(source, model);

            var fileBytes = ExcelUtils.CreateExcel(res);

            return(ExcelUtils.CreateExcelResponseMessage(fileName, fileBytes));
        }
示例#28
0
        public HttpResponseMessage GetFeed(int moduleId, int tabId, string template, string mediaType)
        {
            IEnumerable <IDataItem> dataList = new List <IDataItem>();
            var module   = OpenContentModuleConfig.Create(moduleId, tabId, PortalSettings);
            var manifest = module.Settings.Template.Manifest;

            if (!module.HasAllUsersViewPermissions())
            {
                return(Request.CreateResponse(HttpStatusCode.Unauthorized));
            }

            var    rssTemplate = new FileUri(module.Settings.TemplateDir, template + ".hbs");
            string source      = File.ReadAllText(rssTemplate.PhysicalFilePath);

            bool useLucene = module.Settings.Template.Manifest.Index;

            if (useLucene)
            {
                var indexConfig = OpenContentUtils.GetIndexConfig(module.Settings.Template);

                QueryBuilder queryBuilder = new QueryBuilder(indexConfig);
                queryBuilder.Build(module.Settings.Query, PortalSettings.UserMode != PortalSettings.Mode.Edit, UserInfo.UserID, DnnLanguageUtils.GetCurrentCultureCode(), UserInfo.Social.Roles.FromDnnRoles());

                IDataSource ds        = DataSourceManager.GetDataSource(module.Settings.Manifest.DataSource);
                var         dsContext = OpenContentUtils.CreateDataContext(module, UserInfo.UserID);

                var dsItems = ds.GetAll(dsContext, queryBuilder.Select);
                dataList = dsItems.Items;
            }
            var              mf       = new ModelFactoryMultiple(dataList, null, manifest, null, null, module);
            dynamic          model    = mf.GetModelAsDictionary(false, true);
            HandlebarsEngine hbEngine = new HandlebarsEngine();
            string           res      = hbEngine.Execute(source, model);
            var              response = new HttpResponseMessage();

            response.Content = new StringContent(res);
            response.Content.Headers.ContentType = new MediaTypeHeaderValue(mediaType);
            return(response);
        }
示例#29
0
        private void GetDetailData(RenderInfo info, OpenContentModuleConfig module)
        {
            info.ResetData();
            var ds        = DataSourceManager.GetDataSource(module.Settings.Manifest.DataSource);
            var dsContext = OpenContentUtils.CreateDataContext(module);

            var dsItem = ds.Get(dsContext, info.DetailItemId);

            //if (LogContext.IsLogActive)
            //{
            //    var logKey = "Get detail data";
            //    LogContext.Log(_module.ModuleID, logKey, "debuginfo", dsItems.DebugInfo);
            //}

            if (dsItem != null)
            {
                //check permissions
                bool isEditable = _module.ViewModule.CheckIfEditable(module);
                if (!isEditable)
                {
                    var    indexConfig = OpenContentUtils.GetIndexConfig(info.Template);
                    string raison;
                    if (!OpenContentUtils.HaveViewPermissions(dsItem, module.UserRoles.FromDnnRoles(), indexConfig, out raison))
                    {
                        App.Services.Logger.Error($"Error accessing {HttpContext.Current?.Request?.Url?.AbsoluteUri}. Referrer {HttpContext.Current?.Request?.UrlReferrer?.AbsoluteUri}");
                        if (module.ViewModule.HasEditRightsOnModule())
                        {
                            throw new NotAuthorizedException(404, $"No detail view permissions for id={info.DetailItemId}  (due to {raison}) \nGo into Edit Mode to view/change the item.");
                        }
                        else
                        {
                            throw new NotAuthorizedException(404, $"Access denied. You might want to contact your administrator for more information. (due to {raison})");
                        }
                    }
                }
                info.SetData(dsItem, dsItem.Data, module.Settings.Data);
            }
        }
示例#30
0
        private static bool ModuleHasValidConfig(ModuleInfo moduleInfo)
        {
            OpenContentModuleConfig ocModuleConfig = OpenContentModuleConfig.Create(moduleInfo, PortalSettings.Current);

            return(ocModuleConfig.Settings.Manifest != null);
        }