示例#1
0
        public async Task <IActionResult> DeleteTrack(int trackId)
        {
            Track track = await _Db.Tracks.Include(t => t.Activities).ThenInclude(a => a.ActivityImages).Where(t => t.Id == trackId).FirstOrDefaultAsync();

            if (track == null)
            {
                return(NotFound(new ResponseHelper("Something went wrong. Please refresh the page and try again.", "Could not find track in database")));
            }

            //using(var transaction = await _Db.Database.BeginTransactionAsync())
            //{
            foreach (Activity activity in track.Activities)
            {
                _Db.RemoveRange(activity.ActivityImages);
                _Db.Remove(activity);
            }

            _Db.Remove(track);
            await _Db.SaveChangesAsync();

            //    transaction.Commit();
            //}

            return(Ok());
        }
示例#2
0
        public async Task <IActionResult> DeleteQuestion(int quizId, int questionId)
        {
            Quiz quiz = await _Db.Quizzes.FindAsync(quizId);

            QuizQuestion question = await _Db.QuizQuestions.FindAsync(questionId);

            if (question == null)
            {
                return(NotFound(new ResponseHelper("Something went wrong. Please refresh your browser and try again.", "Unable to find question in database")));
            }

            using (var transaction = await _Db.Database.BeginTransactionAsync())
            {
                quiz.UpdatedAt = DateTime.UtcNow;

                question.CorrectAnswerId = null;
                await _Db.SaveChangesAsync();

                _Db.Remove(question);
                await _Db.SaveChangesAsync();

                transaction.Commit();
            }

            return(Ok());
        }
        public async Task <IActionResult> DeleteCategory(int id)
        {
            try
            {
                FactFileCategory category = await _Db.FactFileCategories
                                            .Include(cat => cat.FactFileEntries)
                                            .ThenInclude(entry => entry.Activities)
                                            .Include(cat => cat.FactFileEntries)
                                            .ThenInclude(entry => entry.FactFileEntryImages)
                                            .Include(cat => cat.FactFileEntries)
                                            .ThenInclude(entry => entry.FactFileNuggets)
                                            .Where(cat => cat.Id == id)
                                            .FirstOrDefaultAsync();

                if (category == null)
                {
                    return(NotFound(new ResponseHelper("Something went wrong. If the problem persists, please contact the developers")));
                }

                if (category.FactFileEntries.Any(entry => entry.Activities.Count > 0))
                {
                    StringBuilder message = new StringBuilder("Unable to delete the category as the following entries are linked to guided walk actvities:\n");
                    foreach (FactFileEntry entry in category.FactFileEntries)
                    {
                        if (entry.Activities.Count > 0)
                        {
                            message.AppendLine(entry.PrimaryName + ", ");
                        }
                    }
                    return(BadRequest(new ResponseHelper(message.ToString())));
                }

                // Delete all fact file entry images and nuggets first (can't use cascade delete due to EF Core)
                foreach (FactFileEntry entry in category.FactFileEntries)
                {
                    _Db.RemoveRange(entry.FactFileEntryImages);
                    _Db.RemoveRange(entry.FactFileNuggets);
                }

                _Db.Remove(category);
                await _Db.SaveChangesAsync();

                return(Ok());
            }
            catch (Exception ex)
            {
                _Logger.LogError("Error deleting category", ex.Message);
                _Logger.LogError(ex.StackTrace);
                return(BadRequest(new ResponseHelper("Something went wrong, please try again in a few minutes.", ex.Message)));
            }
        }
        public async Task <IActionResult> DeleteItem(int id)
        {
            try
            {
                NavItem itemToDelete = await _Db.NavItems.FindAsync(id);

                if (itemToDelete == null)
                {
                    return(NotFound(new ResponseHelper("Something went wrong, please try again later")));
                }

                await _Db.Entry(itemToDelete).Collection(c => c.NavItemPages).LoadAsync();

                _Db.Remove(itemToDelete);

                if (itemToDelete.NavItemPages != null)
                {
                    _Db.RemoveRange(itemToDelete.NavItemPages);
                }

                await _Db.SaveChangesAsync();

                return(Ok());
            }
            catch (Exception ex)
            {
                _Logger.LogError("Error deleting navlink", ex.Message);
                _Logger.LogError(ex.StackTrace);
                return(BadRequest(new ResponseHelper("Something went wrong, please try again later.", ex.Message)));
            }
        }
示例#5
0
        //DELETE: /admin/pages/{pageId}
        public async Task <IActionResult> Delete(int pageId)
        {
            try
            {
                var page = await _Db.Pages.Where(c => c.Id == pageId)
                           .Include(p => p.PageRevisions)
                           .ThenInclude(pr => pr.RevisionTextComponents)
                           .ThenInclude(rtf => rtf.TextComponent)
                           .FirstOrDefaultAsync();

                if (page == null)
                {
                    return(NotFound());
                }

                // First, mark all text fields for removal
                foreach (PageRevision rev in page.PageRevisions)
                {
                    foreach (RevisionTextComponent rtf in rev.RevisionTextComponents)
                    {
                        _Db.Remove(rtf.TextComponent);
                    }
                    _Db.Remove(rev);
                }

                _Db.Remove(page);
                await _Db.SaveChangesAsync();

                _Logger.LogDebug("Page {0} has been deleted", page.Name);

                return(Ok(Url.Action(
                              "Index",
                              "Page", new
                {
                    area = "admin-portal,web",
                    filter = page.Section.ToString()
                })
                          ));
            }
            catch (Exception ex)
            {
                _Logger.LogError("Error deleting page {0}: {1}", pageId, ex.Message);
                _Logger.LogError(ex.StackTrace);
                return(BadRequest(new ResponseHelper("Something went wrong, please try again later", ex.Message)));
            }
        }
示例#6
0
        public async Task <IActionResult> Delete(int id)
        {
            try
            {
                BaseMedia media = await _Db.Media.FindAsync(id);

                if (media == null)
                {
                    return(NotFound("The requested media file does not exist."));
                }

                // Todo: Check whether the media file is being used in the website or app
                // and prevent deletion if so.
                Dictionary <string, HashSet <string> > usages = media.GetUsages(_Db);

                // If the usages dictionary has keys, file is used
                if (usages.Count > 0)
                {
                    return(BadRequest(new ResponseHelper("This file cannot be deleted as it is in use. Remove usages and try again.")));
                }

                // Otherwise, we can go ahead and delete

                if (media is ImageMedia)
                {
                    // Delete the directory containing image versions
                    string dirPath = Path.Combine("Storage", "Media", "Images", Path.GetFileNameWithoutExtension(media.Filename));
                    try
                    {
                        Directory.Delete(dirPath, recursive: true);
                    }
                    catch (DirectoryNotFoundException)
                    {
                        _Logger.LogWarning("While deleting image {0}: Version directory not found. Continuing.", id);
                    }
                }

                // Finally, delete the media file itself
                System.IO.File.Delete(media.FilePath);

                // And remove its record in the database
                _Db.Remove(media);
                await _Db.SaveChangesAsync();

                _Logger.LogDebug("Media file {0} deleted", id);

                return(Ok());
            }
            catch (Exception ex)
            {
                _Logger.LogError("Error deleting media file {0}: {1}", id, ex.Message);
                _Logger.LogError(ex.StackTrace);
                return(BadRequest("Something went wrong, please try again later."));
            }
        }
示例#7
0
        public async Task <IActionResult> Delete(int id)
        {
            Notice n = await _Database.Notices.FindAsync(id);;

            try
            {
                _Database.Remove(n);
                await _Database.SaveChangesAsync();

                return(Ok($"{n.Title} has been deleted."));
            }
            catch (Exception ex)
            {
                _Logger.LogError("Error deleting notice: {0}", ex.Message);
                _Logger.LogTrace(ex.Message);
                return(BadRequest(new ResponseHelper($"\"{n.Title}\" could not be deleted, please try again later.", ex.Message)));
            }
        }
示例#8
0
        public async Task <IActionResult> UnsubscribeFromChannel(int channelId)
        {
            try
            {
                _Db.Remove(new ChannelMembership
                {
                    AccountId             = User.AccountId(),
                    NotificationChannelId = channelId
                });

                _Logger.LogDebug("User {0} unsubscribed from notification channel {1}", User.AccountName(), channelId);
                await _Db.SaveChangesAsync();

                return(Ok($"Unsubscribed from {_Db.NotificationChannels.Find(channelId).Name}"));
            }
            catch (Exception ex)
            {
                _Logger.LogError("Error unsubscribing {0} from notification channel ID {1}", User.AccountName(), channelId);
                _Logger.LogError(ex.StackTrace);
                return(BadRequest(new ResponseHelper("Something went wrong, please try again later", ex.Message)));
            }
        }