using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using DotNetNuke.Security; using DotNetNuke.Security.Permissions; using DotNetNuke.Services.Exceptions; using DotNetNuke.Web.Api; using <%= fullNamespace %>.Components; using <%= fullNamespace %>.Models; namespace <%= fullNamespace %>.Services { /// /// This is a partial class that spans multiple class files, in order to keep the code manageable. Each method is necessary to support the front end SPA implementation. /// /// /// The SupportModules attribute will require that all API calls set and include module headers, event GET requests. Even Fiddler will return 401 Unauthorized errors. /// [SupportedModules("<%= extensionName %>")] public partial class <%= extensionName %>Controller : ServiceBase { /// /// Get an event /// /// /// /// GET: http://dnndev.me/DesktopModules/MVC/<%= namespace %>/<%= extensionName %>/API/<%= extensionName %>/Get<%= extensionName %>s /// [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.View)] [HttpGet] public HttpResponseMessage Get<%= extensionName %>s() { try { var <%= objectName %>s = <%= extensionName %>DataAccess.GetItems(ActiveModule.ModuleID); var response = new ServiceResponseInfo>> { Content = <%= objectName %>s.ToList() }; if (<%= objectName %>s == null || !<%= objectName %>s.Any()) { ServiceResponseHelperInfo>>.AddNoneFoundError("<%= extensionName %>Info", ref response); } return Request.CreateResponse(HttpStatusCode.OK, response.ObjectToJson()); } catch (Exception ex) { Exceptions.LogException(ex); return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ERROR_MESSAGE); } } /// /// Get an event /// /// /// /// GET: http://dnndev.me/DesktopModules/<%= namespace %>/<%= extensionName %>/MVC/API/<%= extensionName %>/Get<%= extensionName %> /// [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.View)] [HttpGet] public HttpResponseMessage Get<%= extensionName %>(int <%= objectName %>Id) { try { var <%= objectName %> = <%= extensionName %>DataAccess.GetItem(<%= objectName %>Id, ActiveModule.ModuleID); var response = new ServiceResponse<<%= extensionName %>Info> { Content = <%= objectName %> }; if (<%= objectName %> == null) { ServiceResponseHelper<<%= extensionName %>Info>.AddNoneFoundError("<%= extensionName %>Info", ref response); } return Request.CreateResponse(HttpStatusCode.OK, response.ObjectToJson()); } catch (Exception ex) { Exceptions.LogException(ex); return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ERROR_MESSAGE); } } /// /// Delete an event /// /// /// /// DELETE: http://dnndev.me/DesktopModules/<%= namespace %>/<%= extensionName %>/MVC/API/<%= extensionName %>/Delete<%= extensionName %> /// [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] [ValidateAntiForgeryToken] [HttpDelete] public HttpResponseMessage Delete<%= extensionName %>(int <%= objectName %>Id) { try { <%= extensionName %>DataAccess.DeleteItem(<%= objectName %>Id, ActiveModule.ModuleID); var response = new ServiceResponse { Content = SUCCESS_MESSAGE }; return Request.CreateResponse(HttpStatusCode.OK, response.ObjectToJson()); } catch (Exception ex) { Exceptions.LogException(ex); return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ERROR_MESSAGE); } } /// /// Create an event /// /// /// /// POST: http://dnndev.me/DesktopModules/MVC/<%= namespace %>/<%= extensionName %>/API/<%= extensionName %>/Ceate<%= extensionName %> /// [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] [ValidateAntiForgeryToken] [HttpPost] public HttpResponseMessage Create<%= extensionName %>(<%= extensionName %>Info new<%= extensionName %>) { try { new<%= extensionName %>.CreatedOnDate = DateTime.Now; new<%= extensionName %>.CreatedByUserId = UserInfo.UserID; new<%= extensionName %>.LastUpdatedOnDate = DateTime.Now; new<%= extensionName %>.LastUpdatedByUserId = UserInfo.UserID; new<%= extensionName %>.ModuleId = ActiveModule.ModuleID; var security = new PortalSecurity(); new<%= extensionName %>.Title = security.InputFilter(new<%= extensionName %>.Title.Trim(), PortalSecurity.FilterFlag.NoMarkup); new<%= extensionName %>.Description = security.InputFilter(new<%= extensionName %>.Description.Trim(), PortalSecurity.FilterFlag.NoMarkup); <%= extensionName %>DataAccess.CreateItem(new<%= extensionName %>); var response = new ServiceResponse { Content = Globals.RESPONSE_SUCCESS }; return Request.CreateResponse(HttpStatusCode.OK, response.ObjectToJson()); } catch (Exception ex) { Exceptions.LogException(ex); return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ERROR_MESSAGE); } } /// /// Update an event /// /// /// /// POST: http://dnndev.me/DesktopModules/MVC/<%= namespace %>/<%= extensionName %>/API/<%= extensionName %>/Update<%= extensionName %> /// [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] [ValidateAntiForgeryToken] [HttpPost] public HttpResponseMessage Update<%= extensionName %>(<%= extensionName %>Info <%= objectName %>) { try { var original<%= extensionName %> = <%= extensionName %>DataAccess.GetItem(<%= objectName %>.<%= extensionName %>Id, <%= objectName %>.ModuleId); var updatesToProcess = <%= extensionName %>HasUpdates(ref original<%= extensionName %>, ref <%= objectName %>); if (updatesToProcess) { original<%= extensionName %>.LastUpdatedOnDate = DateTime.Now; original<%= extensionName %>.LastUpdatedByUserId = UserInfo.UserID; var security = new PortalSecurity(); original<%= extensionName %>.Title = security.InputFilter(original<%= extensionName %>.Title.Trim(), PortalSecurity.FilterFlag.NoMarkup); original<%= extensionName %>.Description = security.InputFilter(original<%= extensionName %>.Description.Trim(), PortalSecurity.FilterFlag.NoMarkup); <%= extensionName %>DataAccess.UpdateItem(original<%= extensionName %>); } var saved<%= extensionName %> = <%= extensionName %>DataAccess.GetItem(original<%= extensionName %>.<%= extensionName %>Id, original<%= extensionName %>.ModuleId); var response = new ServiceResponse<<%= extensionName %>Info> { Content = saved<%= extensionName %> }; return Request.CreateResponse(HttpStatusCode.OK, response.ObjectToJson()); } catch (Exception ex) { Exceptions.LogException(ex); return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ERROR_MESSAGE); } } /// /// Use to determine if the user has edit permissions /// /// /// /// GET: http://dnndev.me/DesktopModules/MVC/<%= namespace %>/<%= extensionName %>/API/<%= extensionName %>/UserCanEdit<%= extensionName %> /// [AllowAnonymous] [HttpGet] public HttpResponseMessage UserCanEdit<%= extensionName %>() { ServiceResponse response = null; if (UserInfo.IsSuperUser || UserInfo.IsInRole(PortalSettings.AdministratorRoleName) || ModulePermissionController.HasModulePermission(ActiveModule.ModulePermissions, "Edit")) { response = new ServiceResponse() { Content = Globals.RESPONSE_SUCCESS }; } else { response = new ServiceResponse() { Content = Globals.RESPONSE_FAILURE }; } return Request.CreateResponse(HttpStatusCode.OK, response.ObjectToJson()); } #region Private Helper Methods private bool <%= extensionName %>HasUpdates(ref <%= extensionName %>Info original<%= extensionName %>, ref <%= extensionName %>Info new<%= extensionName %>) { var updatesToProcess = false; if (!string.Equals(new<%= extensionName %>.Title, original<%= extensionName %>.Title)) { original<%= extensionName %>.Title = new<%= extensionName %>.Title; updatesToProcess = true; } if (!string.Equals(new<%= extensionName %>.Description, original<%= extensionName %>.Description)) { original<%= extensionName %>.Description = new<%= extensionName %>.Description; updatesToProcess = true; } if (new<%= extensionName %>.ModuleId != original<%= extensionName %>.ModuleId) { original<%= extensionName %>.ModuleId = new<%= extensionName %>.ModuleId; updatesToProcess = true; } return updatesToProcess; } #endregion } }