예제 #1
0
        /// <summary>
        /// Deletes a dataset, which means the dataset is marked as deleted, but is not physically removed from the database.
        /// </summary>
        /// <param name="id">the identifier of the dataset to be purged.</param>
        /// <remarks>When a dataset is deleted, it is consodered as non-exisiting, but for the sake or provenance, citation, history, etc, it is not removed froom the database.
        /// The function to recover a deleted dataset, will not be provided.</remarks>
        /// <returns></returns>
        public ActionResult Delete(long id)
        {
            var datasetManager          = new DatasetManager();
            var entityPermissionManager = new EntityPermissionManager();

            try
            {
                if (datasetManager.DeleteDataset(id, ControllerContext.HttpContext.User.Identity.Name, true))
                {
                    //entityPermissionManager.Delete(typeof(Dataset), id); // This is not needed here.

                    if (this.IsAccessibale("DDM", "SearchIndex", "ReIndexUpdateSingle"))
                    {
                        var x = this.Run("DDM", "SearchIndex", "ReIndexUpdateSingle", new RouteValueDictionary()
                        {
                            { "id", id }, { "actionType", "DELETE" }
                        });
                    }
                }
            }
            catch (Exception e)
            {
                ViewData.ModelState.AddModelError("", $@"Dataset {id} could not be deleted.");
            }
            return(View());
            //return RedirectToAction("List");
        }
예제 #2
0
        public void DeleteDatasetTest()
        {
            var dm  = new DatasetManager();
            var rsm = new ResearchPlanManager();
            var mdm = new MetadataStructureManager();

            try
            {
                var dsHelper = new DatasetHelper();
                StructuredDataStructure dataStructure = dsHelper.CreateADataStructure();
                dataStructure.Should().NotBeNull("Failed to meet a precondition: a data strcuture is required.");

                var rp = dsHelper.CreateResearchPlan();
                rp.Should().NotBeNull("Failed to meet a precondition: a research plan is required.");

                var mds = mdm.Repo.Query().First();
                mds.Should().NotBeNull("Failed to meet a precondition: a metadata strcuture is required.");

                Dataset dataset = dm.CreateEmptyDataset(dataStructure, rp, mds);
                dm.DeleteDataset(dataset.Id, "Javad", false);

                dataset.Should().NotBeNull();
                dataset.Id.Should().BeGreaterThan(0, "Dataset is not persisted.");
                dataset.LastCheckIOTimestamp.Should().NotBeAfter(DateTime.UtcNow, "The dataset's timestamp is wrong.");
                dataset.DataStructure.Should().NotBeNull("Dataset must have a data structure.");
                dataset.Status.Should().Be(DatasetStatus.Deleted, "Dataset must be in Deleted status.");

                dm.PurgeDataset(dataset.Id);
                dsHelper.PurgeAllDataStructures();
            }
            finally
            {
                dm.Dispose();
                rsm.Dispose();
                mdm.Dispose();
            }
        }
예제 #3
0
        public ActionResult Delete(long id)
        {
            using (var datasetManager = new DatasetManager())
                using (var entityPermissionManager = new EntityPermissionManager())
                    using (var entityManager = new EntityManager())
                        using (var subjectManager = new SubjectManager())
                            using (var userManager = new UserManager())
                            {
                                try
                                {
                                    var userName = GetUsernameOrDefault();
                                    var user     = userManager.Users.Where(u => u.Name.Equals(userName)).FirstOrDefault();

                                    // check if a user is logged in
                                    if (user != null)
                                    {
                                        // is the user allowed to delete this dataset
                                        if (entityPermissionManager.HasEffectiveRight(user.UserName, typeof(Dataset), id, Security.Entities.Authorization.RightType.Delete))
                                        {
                                            //try delete the dataset
                                            if (datasetManager.DeleteDataset(id, ControllerContext.HttpContext.User.Identity.Name, true))
                                            {
                                                //send email
                                                var es = new EmailService();
                                                es.Send(MessageHelper.GetDeleteDatasetHeader(id),
                                                        MessageHelper.GetDeleteDatasetMessage(id, user.Name),
                                                        ConfigurationManager.AppSettings["SystemEmail"]
                                                        );

                                                //entityPermissionManager.Delete(typeof(Dataset), id); // This is not needed here.

                                                if (this.IsAccessible("DDM", "SearchIndex", "ReIndexUpdateSingle"))
                                                {
                                                    var x = this.Run("DDM", "SearchIndex", "ReIndexUpdateSingle", new RouteValueDictionary()
                                                    {
                                                        { "id", id }, { "actionType", "DELETE" }
                                                    });
                                                }
                                            }
                                        }
                                        else // user is not allowed
                                        {
                                            ViewData.ModelState.AddModelError("", $@"You do not have the permission to delete the record.");

                                            var es = new EmailService();
                                            es.Send(MessageHelper.GetTryToDeleteDatasetHeader(id),
                                                    MessageHelper.GetTryToDeleteDatasetMessage(id, GetUsernameOrDefault()),
                                                    ConfigurationManager.AppSettings["SystemEmail"]
                                                    );
                                        }
                                    }
                                    else // no user exist
                                    {
                                        ViewData.ModelState.AddModelError("", $@"This function can only be executed with a logged-in user.");

                                        var es = new EmailService();
                                        es.Send(MessageHelper.GetTryToDeleteDatasetHeader(id),
                                                MessageHelper.GetTryToDeleteDatasetMessage(id, userName),
                                                ConfigurationManager.AppSettings["SystemEmail"]
                                                );
                                    }
                                }
                                catch (Exception e) //for technical reasons the dataset cannot be deleted
                                {
                                    ViewData.ModelState.AddModelError("", $@"Dataset {id} could not be deleted.");
                                }
                            }

            return(View());
        }