예제 #1
0
        private void CreateDatabaseRequest(BasicNodeViewModel model, DatabaseRequestType type)
        {
            // Check the relationships
            foreach (RelationshipViewModel rel in model.Relationships)
            {
                // If the referenced node does not have an id,
                if (!rel.TargetId.HasValue)
                {
                    // Give the referenced node an id
                    rel.TargetId = Guid.NewGuid();
                    // Set the value of IsNewAddition to true
                    rel.IsNewAddition = true;
                }
            }

            using (ApplicationDbContext context = ApplicationDbContext.Create())
            {
                // Get the user that submitted the request
                ApplicationUser submitter = context.Users.Single(x => x.UserName == User.Identity.Name);
                // Create the request
                DatabaseRequest request = new DatabaseRequest
                {
                    RequestType    = type,
                    Id             = Guid.NewGuid(),
                    SubmissionDate = DateTime.Now,
                    Submitter      = submitter,
                    NodeDataType   = model.ContentType,
                    NodeData       = model.SerializeToContentType(),
                };
                // Add the request to the database
                context.Requests.Add(request);
                context.SaveChanges();
            }
        }
예제 #2
0
        public bool CheckRequestsAndCommitChanges(BasicNodeViewModel fromForm, DatabaseRequest fromDatabase)
        {
            bool result = true;

            //try
            //{
            DatabaseDriver systemDriver = new DatabaseDriver();

            if (fromDatabase.RequestType == DatabaseRequestType.Create)
            {
                systemDriver.AddNode(fromForm.ToModel());
            }
            else if (fromDatabase.RequestType == DatabaseRequestType.Update)
            {
                systemDriver.UpdateNode(fromForm.ToModel());
            }
            else if (fromDatabase.RequestType == DatabaseRequestType.Delete)
            {
                systemDriver.DeleteNode(fromForm.Id);
            }
            //}
            //catch
            //{
            //    result = false;
            //}

            return(result);
        }
예제 #3
0
        public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            if (bindingContext == null)
            {
                throw new ArgumentNullException("Binding context is null", "bindingContext");
            }

            HttpRequestBase        formRequest = controllerContext.HttpContext.Request;
            RequestReviewViewModel result      = new RequestReviewViewModel();
            Guid requestId;
            DatabaseRequestType requestType;
            NodeContentType     nodeDataType;
            bool approved;
            BasicNodeViewModel nodeViewModel = null;

            if (!Guid.TryParse(formRequest.Form["RequestId"], out requestId))
            {
                bindingContext.ModelState.AddModelError("RequestId", "Invalid request id");
            }
            if (!Enum.TryParse <DatabaseRequestType>(formRequest.Form["RequestType"], out requestType))
            {
                bindingContext.ModelState.AddModelError("RequestType", "Invalid request type");
            }
            if (!Enum.TryParse <NodeContentType>(formRequest.Form["NodeDataType"], out nodeDataType))
            {
                bindingContext.ModelState.AddModelError("NodeDataType", "Invalid node data type");
            }
            // I don't really care about the full data for the deletion requests
            if (requestType != DatabaseRequestType.Delete)
            {
                nodeViewModel = (new NodeModelBinder()).BindModel(controllerContext, bindingContext) as BasicNodeViewModel;
            }
            else
            {
                nodeViewModel = new BasicNodeViewModel {
                    Id = Guid.Parse(formRequest.Form["Id"]), ContentType = nodeDataType
                };
            }
            if (!bool.TryParse(formRequest.Form["Approved"], out approved))
            {
                bindingContext.ModelState.AddModelError("Approved", "Invalid approval state");
            }

            if (bindingContext.ModelState.IsValid)
            {
                result = new RequestReviewViewModel
                {
                    RequestId    = requestId,
                    RequestType  = requestType,
                    NodeDataType = nodeDataType,
                    NodeData     = nodeViewModel,
                    Notes        = formRequest.Form["Notes"],
                    Approved     = approved
                };
            }

            return(result);
        }
예제 #4
0
        public ActionResult FlagDeletion(Guid id)
        {
            string message = "An error occurred. The node was not flagged";

            Response.StatusCode = (int)HttpStatusCode.InternalServerError;
            BasicNodeModel toDelete = null;

            using (NeoDriver driver = new NeoDriver())
            {
                toDelete = driver.GetNode(id);
            }

            // If the node with the given id is not null,
            if (toDelete != null)
            {
                DatabaseRequest request = new DatabaseRequest
                {
                    Id             = Guid.NewGuid(),
                    RequestType    = DatabaseRequestType.Delete,
                    SubmissionDate = DateTime.Now,
                    NodeDataType   = toDelete.ContentType,
                    NodeData       = JsonConvert.SerializeObject(BasicNodeViewModel.FromModel(toDelete)),
                    Approved       = false,
                    ApprovalDate   = null,
                    Notes          = null,
                    Reviewed       = false,
                    ReviewedDate   = null,
                    Reviewer       = null,
                    ReviewerRefId  = null
                };

                // Add a deletion request,
                using (ApplicationDbContext context = ApplicationDbContext.Create())
                {
                    request.Submitter = context.Users.Single(u => u.UserName == User.Identity.Name);
                    context.Requests.Add(request);
                    context.SaveChanges();
                }

                message             = "Node flagged for deletion";
                Response.StatusCode = (int)HttpStatusCode.Accepted;
            }
            else
            {
                message             = "Could not find the specified node.";
                Response.StatusCode = (int)HttpStatusCode.NotFound;
            }

            return(Json(new { message = message }));
        }
예제 #5
0
        public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            if (bindingContext == null)
            {
                throw new ArgumentNullException("Binding context is null", "bindingContext");
            }
            HttpRequestBase    request = controllerContext.HttpContext.Request;
            BasicNodeViewModel result  = null;

            NodeContentType contentType = (NodeContentType)Enum.Parse(typeof(NodeContentType), request.Form["ContentType"]);
            DateTime?       releaseDate = request.Form["ReleaseDate"] != null?ParseDateTime(request.Form["ReleaseDate"]) : null;

            DateTime?deathDate = contentType == NodeContentType.Media ? null : request.Form["DeathDate"] != null?ParseDateTime(request.Form["DeathDate"]) : null;

            if (contentType == NodeContentType.Company)
            {
                result = new CompanyNodeViewModel();
            }
            else if (contentType == NodeContentType.Media)
            {
                result = new MediaNodeViewModel
                {
                    Genres        = ParseFromJson <IEnumerable <string> >(request.Form["Genres"]),
                    MediaType     = (NodeMediaType)Enum.Parse(typeof(NodeMediaType), request.Form["MediaType"]),
                    FranchiseName = request.Form["FranchiseName"].Trim()
                };
            }
            else if (contentType == NodeContentType.Person)
            {
                result = new PersonNodeViewModel
                {
                    GivenName  = request.Form["GivenName"].Trim(),
                    FamilyName = request.Form["FamilyName"].Trim(),
                    Status     = (PersonStatus)Enum.Parse(typeof(PersonStatus), request.Form["Status"])
                };
            }

            result.Id            = Guid.Parse(request.Form["Id"]);
            result.ContentType   = contentType;
            result.CommonName    = contentType == NodeContentType.Person ? $"{((PersonNodeViewModel)result).GivenName} {((PersonNodeViewModel)result).FamilyName}" : request.Form["CommonName"].Trim();
            result.OtherNames    = ParseFromJson <IEnumerable <string> >(request.Form["OtherNames"]);
            result.ReleaseDate   = releaseDate;
            result.DeathDate     = deathDate;
            result.Relationships = ParseFromJson <IEnumerable <RelationshipViewModel> >(request.Form["Relationships"]);

            // Validate the object
            Validate(result, bindingContext);

            return(result);
        }
예제 #6
0
        /// <summary>
        /// Run the validator to validate the object and add validation errors to the model state.
        /// </summary>
        /// <param name="boundObject">The object being bound</param>
        /// <param name="context">The model binding context</param>
        private void Validate(BasicNodeViewModel boundObject, ModelBindingContext context)
        {
            List <ValidationResult> errors = new List <ValidationResult>();

            // If the model is not valid
            if (!Validator.TryValidateObject(boundObject, new ValidationContext(boundObject, null, null), errors, true))
            {
                // Add the model errors to the ModelState
                foreach (ValidationResult err in errors)
                {
                    foreach (string propertyKey in err.MemberNames)
                    {
                        context.ModelState.AddModelError(propertyKey, err.ErrorMessage);
                    }
                }
            }
        }
예제 #7
0
        /// <summary>
        /// Parses the node data string
        /// </summary>
        /// <returns>The </returns>
        public BasicNodeViewModel ParseModel()
        {
            BasicNodeViewModel viewModel = null;

            if (NodeDataType == NodeContentType.Company)
            {
                viewModel = JsonConvert.DeserializeObject <CompanyNodeViewModel>(NodeData) as CompanyNodeViewModel;
            }
            else if (NodeDataType == NodeContentType.Media)
            {
                viewModel = JsonConvert.DeserializeObject <MediaNodeViewModel>(NodeData) as MediaNodeViewModel;
            }
            else if (NodeDataType == NodeContentType.Person)
            {
                viewModel = JsonConvert.DeserializeObject <PersonNodeViewModel>(NodeData) as PersonNodeViewModel;
            }

            return(viewModel);
        }
예제 #8
0
        // GET: Edit/Index/
        public ActionResult Index(string id)
        {
            ActionResult result = View("Error");

            if (!string.IsNullOrWhiteSpace(id))
            {
                // Try to parse the Guid string
                Guid parsedId;
                if (Guid.TryParse(id, out parsedId))
                {
                    // The string was parsed, find the node
                    // We have been given an id of a node to edit
                    ViewBag.Title = "Edit Node Data";
                    BasicNodeViewModel viewModel = null;
                    // Get the node to edit
                    using (NeoDriver driver = new NeoDriver())
                    {
                        BasicNodeModel model = driver.GetNodeAndRelationships(parsedId);
                        viewModel = BasicNodeViewModel.FromModel(model);
                    }
                    // Return a view
                    if (viewModel != null)
                    {
                        result = View(model: viewModel);
                    }
                }
                else
                {
                    Response.StatusCode        = (int)HttpStatusCode.BadRequest;
                    Response.StatusDescription = $"Invalid id value: {id}";
                }
            }
            else
            {
                // We are creating a new node
                ViewBag.Title = "Create New Node";
                result        = View(model: new BasicNodeViewModel {
                    Id = Guid.NewGuid(), ContentType = 0
                });
            }
            return(result);
        }
예제 #9
0
        private ActionResult CheckModelAndMakeRequest(BasicNodeViewModel model)
        {
            ActionResult result = View("Index", model);

            // If the model state is valid,
            if (ModelState.IsValid)
            {
                DatabaseRequestType requestType = 0;
                using (NeoDriver driver = new NeoDriver())
                {
                    // TODO: This will no longer work to check if this is an update or creation request
                    requestType = driver.GetNode(model.Id) != null ? DatabaseRequestType.Update : DatabaseRequestType.Create;
                }
                // Create the database request
                CreateDatabaseRequest(model, requestType);
                // Redirect to the accepted page
                result = RedirectToAction("Accepted", "Edit");
            }

            return(result);
        }
예제 #10
0
 public ActionResult Index(BasicNodeViewModel model)
 {
     return(CheckModelAndMakeRequest(model));
 }