Ejemplo n.º 1
0
        /// <summary>
        /// Saves site item.
        /// </summary>
        /// <instructions>
        /// Set inputItem.Id to null when creating a new object.
        /// </instructions>
        /// <param name="item">Site object</param>
        /// <returns>Result with save status and messages if error occurs. Does not return an identifier.</returns>
        public static async Task <Result> Save(models.Site item)
        {
            var messages = new List <string>();

            if (item == null)
            {
                return(new Result(ResultStatus.Failed, "Site cannot be null."));
            }

            Rules.StringRequiredMaxLength(item.Name, "Name", 25, ref messages);

            if (messages.Any())
            {
                return(new Result(ResultStatus.Failed, messages));
            }

            Tables.dbo.Site convertedSite = Convert(item);
            if (convertedSite == null)
            {
                return(new Result(ResultStatus.Failed, "Could not convert Site model to table."));
            }

            Result saveResult = await dbWrite.Item(convertedSite);

            return(saveResult);
        }
Ejemplo n.º 2
0
        internal static async Task <Result> Item(Tables.dbo.Site inputItem)
        {
            ResultStatus resultStatus;
            var          messages = new List <string>();

            try
            {
                await using var cmd = new SqlCommand("[dbo].[SaveSite]", new Base().SqlConnection)
                            {
                                CommandType = CommandType.StoredProcedure
                            };

                cmd.Parameters.Add("@Id", SqlDbType.UniqueIdentifier).Value = inputItem.Id;
                cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 25).Value   = inputItem.Name;
                await cmd.Connection.OpenAsync();

                await cmd.ExecuteNonQueryAsync();

                await cmd.Connection.CloseAsync();

                resultStatus = ResultStatus.Succeeded;
            }
            catch (System.Exception ex)
            {
                await Exception.Save(inputItem.Name, ex, "dbo.Site");

                resultStatus = ResultStatus.Failed;
                messages.Add(ex.Message);
            }
            return(new Result(resultStatus, messages));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Saves work and child items.
        /// </summary>
        /// <instructions>
        /// Set inputItem.Id to null when creating a new object.
        /// </instructions>
        /// <param name="site">Name of site related to work.</param>
        /// <param name="inputItem">Work object.</param>
        /// <returns>Returns save status and messages. If successful, returns an identifier via ReturnId.</returns>
        public static async Task <Result> Save(string site, models.Work inputItem)
        {
            var messages = new List <string>();

            if (inputItem == null)
            {
                return(new Result(ResultStatus.Failed, "Work cannot be null."));
            }

            Tables.dbo.Site siteItem = await dbRead.Site.Item(site);

            if (siteItem == null)
            {
                return(new Result(ResultStatus.Failed, "No site was found with that name."));
            }

            Tables.dbo.Image convertImage = Image.Convert(inputItem.Cover, siteItem.Id);
            if (convertImage == null)
            {
                return(new Result(ResultStatus.Failed, "Work must have a cover image."));
            }

            Result saveImageResult = await Image.Save(site, inputItem.Cover);

            if (saveImageResult.Status == ResultStatus.Failed)
            {
                return(new Result(saveImageResult.Status, messages));
            }

            Rules.StringRequiredMaxLength(inputItem.Title, "Title", 100, ref messages);
            Rules.StringRequiredMaxLength(inputItem.Authors, "Authors", 255, ref messages);
            if (Rules.StringRequiredMaxLength(inputItem.Href, "Href", 2048, ref messages) == Rules.Passed.Yes)
            {
                Rules.ValidateUrl(inputItem.Href, "Href", ref messages);
            }

            if (messages.Any())
            {
                return(new Result(ResultStatus.Failed, messages));
            }

            Tables.dbo.Work convertedWork = Convert(inputItem, siteItem.Id);
            if (convertedWork == null)
            {
                return(new Result(ResultStatus.Failed, "Could not convert Work model to table."));
            }

            Result output = await dbWrite.Item(site, convertedWork);

            if (output.Status == ResultStatus.PartialSuccess || output.Status == ResultStatus.Succeeded)
            {
                output.ReturnId = inputItem.Id;
            }
            return(output);
        }
        public static async Task <Result> Save(string site, Models.ProfessionalTranslator.Net.Log.Exception inputItem)
        {
            var messages = new List <string>();

            if (inputItem == null)
            {
                return(new Result(ResultStatus.Failed, "Exception cannot be null."));
            }

            Tables.dbo.Site siteItem = await dbRead.Site.Item(site);

            if (siteItem == null)
            {
                return(new Result(ResultStatus.Failed, "No site was found with that name."));
            }

            if (string.IsNullOrEmpty(inputItem.Message))
            {
                messages.Add("Message cannot be empty.");
            }
            if (string.IsNullOrEmpty(inputItem.Type))
            {
                messages.Add("Type cannot be empty.");
            }
            if (string.IsNullOrEmpty(inputItem.Class))
            {
                messages.Add("Class cannot be empty.");
            }
            else if (inputItem.Class.Length > 2048)
            {
                messages.Add("Class must be 2048 characters or fewer.");
            }

            if (messages.Any())
            {
                return(new Result(ResultStatus.Failed, messages));
            }

            var convertItem = new Tables.Log.Exception
            {
                Id          = inputItem.Id,
                SiteId      = siteItem.Id,
                Message     = inputItem.Message,
                Stacktrace  = inputItem.Stacktrace,
                Type        = inputItem.Type,
                Class       = inputItem.Class,
                DateCreated = inputItem.DateCreated ?? DateTime.Now
            };

            Result saveResult = await dbWrite.Item(site, convertItem);

            return(saveResult);
        }
Ejemplo n.º 5
0
        internal static Tables.dbo.Site Convert(models.Site inputItem)
        {
            if (inputItem == null)
            {
                return(null);
            }
            var output = new Tables.dbo.Site
            {
                Id   = inputItem.Id,
                Name = inputItem.Name
            };

            return(output);
        }
        /// <summary>
        /// Saves page and child items.
        /// </summary>
        /// <instructions>
        /// Set inputItem.Id to null when creating a new object.
        /// </instructions>
        /// <param name="site">Name of site to which page is related.</param>
        /// <param name="area">Area where page resides.</param>
        /// <param name="inputItem">Subscriber object.</param>
        /// <returns>Returns save status and messages. If successful, returns an identifier via ReturnId.</returns>
        public static async Task <Result> Save(string site, Area area, models.Subscriber inputItem)
        {
            var messages = new List <string>();

            if (inputItem == null)
            {
                return(new Result(ResultStatus.Failed, "Subscriber cannot be null."));
            }

            Tables.dbo.Site siteItem = await dbRead.Site.Item(site);

            if (siteItem == null)
            {
                return(new Result(ResultStatus.Failed, "No site was found with that name."));
            }

            Rules.StringRequiredMaxLength(inputItem.FirstName, "Name", 50, ref messages);
            Rules.StringRequiredMaxLength(inputItem.LastName, "Name", 50, ref messages);
            if (Rules.StringRequiredMaxLength(inputItem.EmailAddress, "Email Address", 255, ref messages) ==
                Rules.Passed.Yes)
            {
                Rules.ValidateEmailAddress(inputItem.EmailAddress, "Email Address", ref messages);
            }

            if (messages.Any())
            {
                return(new Result(ResultStatus.Failed, messages));
            }

            models.Subscriber existingItem = await Item(site, area, inputItem.EmailAddress);

            Guid returnId = existingItem?.Id ?? Guid.NewGuid();
            int  areaId   = Enumerators.Values.Area(area);
            var  saveItem = new Tables.dbo.Subscriber
            {
                Id           = returnId,
                SiteId       = siteItem.Id,
                AreaId       = areaId,
                FirstName    = inputItem.FirstName,
                LastName     = inputItem.LastName,
                EmailAddress = inputItem.EmailAddress
            };

            Result saveSubscriberResult = await dbWrite.Item(site, saveItem);

            messages = saveSubscriberResult.Messages;

            return(new Result(saveSubscriberResult.Status, messages, returnId));
        }
Ejemplo n.º 7
0
        public static async Task <models.Site> Item(string enumerator)
        {
            Tables.dbo.Site item = await dbRead.Item(enumerator);

            if (item == null)
            {
                return(null);
            }
            var output = new models.Site
            {
                Id   = item.Id,
                Name = item.Name
            };

            return(output);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Save image.
        /// </summary>
        /// /// <instructions>
        /// Set inputItem.Id to null when creating a new object.
        /// </instructions>
        /// <param name="site">Name of site for image.</param>
        /// <param name="inputItem">Image object.</param>
        /// <note>See https://stackoverflow.com/questions/39322085/how-to-save-iformfile-to-disk for admin save file.</note>
        /// <returns>Returns save status and messages. If successful, returns an identifier via ReturnId.</returns>
        public static async Task <Result> Save(string site, models.Image inputItem)
        {
            var messages = new List <string>();

            if (inputItem == null)
            {
                return(new Result(ResultStatus.Failed, "Image cannot be null."));
            }

            Tables.dbo.Site siteItem = await dbRead.Site.Item(site);

            if (siteItem == null)
            {
                return(new Result(ResultStatus.Failed, "No site was found with that name."));
            }

            Rules.StringRequiredMaxLength(inputItem.Path, "Path", 440, ref messages);

            if (messages.Any())
            {
                return(new Result(ResultStatus.Failed, messages));
            }

            Tables.dbo.Image convertedImage = Convert(inputItem, siteItem.Id);
            if (convertedImage == null)
            {
                return(new Result(ResultStatus.Failed, "Could not convert Image model to table."));
            }

            Result saveImageResult = await dbWrite.Item(site, convertedImage);

            if (saveImageResult.Status == ResultStatus.PartialSuccess || saveImageResult.Status == ResultStatus.Succeeded)
            {
                saveImageResult.ReturnId = inputItem.Id;
            }

            return(saveImageResult);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Saves page and child items.
        /// </summary>
        /// <instructions>
        /// Set inputItem.Id to null when creating a new object.
        /// </instructions>
        /// <param name="site">Name of site to which page is related.</param>
        /// <param name="area">Area where page resides.</param>
        /// <param name="inputItem">Page object.</param>
        /// <returns>Returns save status and messages. If successful, returns an identifier via ReturnId.</returns>
        public static async Task <Result> Save(string site, Area area, models.Page inputItem)
        {
            var saveStatus = ResultStatus.Undetermined;
            var messages   = new List <string>();

            if (inputItem == null)
            {
                return(new Result(ResultStatus.Failed, "Page cannot be null."));
            }

            Tables.dbo.Site siteItem = await dbRead.Site.Item(site);

            if (siteItem == null)
            {
                return(new Result(ResultStatus.Failed, "No site was found with that name."));
            }

            Rules.StringRequiredMaxLength(inputItem.Name, "Name", 50, ref messages);

            if (messages.Any())
            {
                return(new Result(saveStatus, messages));
            }

            models.Page existingItem = await Item(site, area, inputItem.Name);

            Guid returnId = existingItem?.Id ?? Guid.NewGuid();
            int  areaId   = Enumerators.Values.Area(area);
            var  saveItem = new Tables.dbo.Page
            {
                Id     = returnId,
                SiteId = siteItem.Id,
                AreaId = areaId,
                Name   = inputItem.Name
            };

            Result savePageResult = await dbWrite.Item(site, saveItem);

            if (savePageResult.Status == ResultStatus.Failed)
            {
                return(new Result(savePageResult.Status, savePageResult.Messages));
            }

            // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator
            //foreach (Models.ProfessionalTranslator.Net.Localized.Page localizedPage in inputItem.Bodies)
            //{
            //    var saveLocalization = new Tables.Localization.Page
            //    {
            //        Id = saveItem.Id,
            //        Html = localizedPage.Html,
            //        Title = localizedPage.Title,
            //        Lcid = localizedPage.Lcid
            //    };
            //    Result localizedResult = await DatabaseOperations.Localization.Write.Page.Item(site, saveLocalization);
            //    if (localizedResult.Status != ResultStatus.Failed) continue;
            //    saveStatus = ResultStatus.PartialSuccess;
            //    messages.AddRange(localizedResult.Messages);
            //}

            if (saveStatus == ResultStatus.Undetermined)
            {
                saveStatus = ResultStatus.Succeeded;
            }

            return(new Result(saveStatus, messages, returnId));
        }
        /// <summary>
        /// Saves testimonial and child items.
        /// </summary>
        /// <instructions>
        /// Set inputItem.Id to null when creating a new object.
        /// </instructions>
        /// <param name="site">Name of site related to testimonial.</param>
        /// <param name="inputItem">Testimonial object.</param>
        /// <returns>Returns save status and messages. If successful, returns an identifier via ReturnId.</returns>
        public static async Task <Result> Save(string site, models.Testimonial inputItem)
        {
            var saveStatus = ResultStatus.Undetermined;
            var messages   = new List <string>();

            if (inputItem == null)
            {
                return(new Result(ResultStatus.Failed, "Testimonial cannot be null."));
            }

            Tables.dbo.Site siteItem = await dbRead.Site.Item(site);

            if (siteItem == null)
            {
                return(new Result(ResultStatus.Failed, "No site was found with that name."));
            }

            Tables.dbo.Work convertedWork = Work.Convert(inputItem.Work, siteItem.Id);
            if (convertedWork == null)
            {
                return(new Result(ResultStatus.Failed, "Could not convert work model to table."));
            }

            Tables.dbo.Image convertedPortrait = Image.Convert(inputItem.Portrait, siteItem.Id);
            if (convertedPortrait == null)
            {
                return(new Result(ResultStatus.Failed, "Could not convert portrait model to table."));
            }

            // Disabled until portraits are used for testimonials rather than covers.
            //Result savePortraitResult = await Image.Save(site, inputItem.Portrait);
            //if (savePortraitResult.Status == SaveStatus.Failed)
            //{
            //    return savePortraitResult;
            //}

            inputItem.Portrait.Id = convertedPortrait.Id;

            Rules.StringRequiredMaxLength(inputItem.Name, "Name", 100, ref messages);

            if (Rules.StringRequiredMaxLength(inputItem.EmailAddress, "Email Address", 256, ref messages) ==
                Rules.Passed.Yes)
            {
                Rules.ValidateEmailAddress(inputItem.EmailAddress, "Email Address", ref messages);
            }

            if (messages.Any())
            {
                return(new Result(ResultStatus.Failed, messages));
            }

            var saveItem = new Tables.dbo.Testimonial
            {
                Id              = inputItem.Id,
                SiteId          = siteItem.Id,
                WorkId          = convertedWork.Id,
                PortraitImageId = convertedPortrait.Id,
                Name            = inputItem.Name,
                EmailAddress    = inputItem.EmailAddress,
                Approved        = inputItem.Approved
            };

            Result saveTestimonialResult = await dbWrite.Item(site, saveItem);

            if (saveTestimonialResult.Status == ResultStatus.Failed)
            {
                return(saveTestimonialResult);
            }

            // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator
            foreach (Models.ProfessionalTranslator.Net.Localized.Testimonial localizedPage in inputItem.Entries)
            {
                var saveLocalization = new Tables.Localization.Testimonial
                {
                    Id   = saveItem.Id,
                    Html = localizedPage.Html,
                    Lcid = localizedPage.Lcid
                };
                Result localizedResult = await DatabaseOperations.Localization.Write.Testimonial.Item(site, saveLocalization);

                if (localizedResult.Status != ResultStatus.Failed)
                {
                    continue;
                }
                saveStatus = ResultStatus.Failed;
                messages.AddRange(localizedResult.Messages);
                break;
            }

            if (saveStatus == ResultStatus.Undetermined)
            {
                saveStatus = ResultStatus.Succeeded;
            }

            return(new Result(saveStatus, messages, inputItem.Id));
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Saves inquiry and client.
        /// </summary>
        /// <instructions>
        /// Set inputItem.Id to null when creating a new object.
        /// </instructions>
        /// <param name="site">Name of site for image.</param>
        /// <param name="inputItem">Inquiry object.</param>
        /// /// <param name="clientItem">Client to be associated with this inquiry.</param>
        /// <returns>Returns save status and messages. If successful, returns an identifier via ReturnId.</returns>
        public static async Task <Result> Save(string site, Models.ProfessionalTranslator.Net.Log.Inquiry inputItem, models.Client clientItem)
        {
            var saveStatus = ResultStatus.Undetermined;
            var messages   = new List <string>();

            if (inputItem == null)
            {
                return(new Result(ResultStatus.Failed, "Inquiry cannot be null."));
            }

            Tables.dbo.Site siteItem = await dboDbRead.Site.Item(site);

            if (siteItem == null)
            {
                return(new Result(ResultStatus.Failed, "No site was found with that name."));
            }

            Rules.StringRequiredMaxLength(inputItem.TranslationType, "Translation Type", 25, ref messages);
            Rules.StringRequiredMaxLength(inputItem.TranslationDirection, "Translation Direction", 25, ref messages);
            Rules.StringRequiredMaxLength(inputItem.SubjectMatter, "SubjectMatter", 50, ref messages);
            Rules.MinIntValue(inputItem.WordCount, "Word Count", 1, ref messages);

            Rules.StringRequired(inputItem.Message, "Message", ref messages);

            if (messages.Any())
            {
                return(new Result(ResultStatus.Failed, messages));
            }

            Tables.Log.Inquiry convertedInquiry = Convert(inputItem, siteItem.Id);
            if (convertedInquiry == null)
            {
                return(new Result(ResultStatus.Failed, "Could not convert Inquiry model to table."));
            }

            Guid returnId = convertedInquiry.Id;

            Result saveInquiryResult = await dbWrite.Item(site, convertedInquiry);

            if (saveInquiryResult.Status == ResultStatus.PartialSuccess || saveInquiryResult.Status == ResultStatus.Succeeded)
            {
                saveInquiryResult.ReturnId = returnId;
            }
            else
            {
                saveStatus = saveInquiryResult.Status;
            }

            if (saveStatus == ResultStatus.Undetermined)
            {
                foreach (Models.ProfessionalTranslator.Net.Upload.Client uploads in clientItem.Uploads)
                {
                    Result uploadResult = await ClientInquiry.Item(uploads.Id, returnId);

                    if (uploadResult.Status != ResultStatus.Failed)
                    {
                        continue;
                    }
                    saveStatus = ResultStatus.Failed;
                    messages.AddRange(uploadResult.Messages);
                }
            }

            if (saveStatus == ResultStatus.Undetermined)
            {
                saveStatus = ResultStatus.Succeeded;
            }

            return(new Result(saveStatus, messages, returnId));
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Saves client and client uploads.
        /// </summary>
        /// <instructions>
        /// Set inputItem.Id to null when creating a new object.
        /// </instructions>
        /// <param name="site">Name of site related to testimonial.</param>
        /// <param name="inputItem">Client object.</param>
        /// <returns>Returns save status and messages. If successful, returns an identifier via ReturnId.</returns>
        public static async Task <Result> Save(string site, models.Client inputItem)
        {
            var saveStatus = ResultStatus.Undetermined;
            var messages   = new List <string>();

            if (inputItem == null)
            {
                return(new Result(ResultStatus.Failed, "Client cannot be null."));
            }

            Tables.dbo.Site siteItem = await dbRead.Site.Item(site);

            if (siteItem == null)
            {
                return(new Result(ResultStatus.Failed, "No site was found with that name."));
            }

            Rules.StringRequiredMaxLength(inputItem.Name, "Name", 150, ref messages);

            if (Rules.StringRequiredMaxLength(inputItem.EmailAddress, "Email Address", 256, ref messages) ==
                Rules.Passed.Yes)
            {
                Rules.ValidateEmailAddress(inputItem.EmailAddress, "Email Address", ref messages);
            }

            foreach (Models.ProfessionalTranslator.Net.Upload.Client uploads in inputItem.Uploads)
            {
                Rules.StringRequiredMaxLength(uploads.GeneratedFilename, "Generated filename", 45, ref messages);
                Rules.StringRequiredMaxLength(uploads.OriginalFilename, "Original filename", 256, ref messages);
            }

            if (messages.Any())
            {
                return(new Result(ResultStatus.Failed, messages));
            }

            var saveItem = new Tables.dbo.Client
            {
                Id           = inputItem.Id,
                SiteId       = siteItem.Id,
                Name         = inputItem.Name,
                EmailAddress = inputItem.EmailAddress
            };

            Result saveClientResult = await dbWrite.Item(site, saveItem);

            if (saveClientResult.Status == ResultStatus.Failed)
            {
                return(saveClientResult);
            }

            // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator
            foreach (Models.ProfessionalTranslator.Net.Upload.Client uploads in inputItem.Uploads)
            {
                var saveUpload = new Tables.Upload.Client
                {
                    Id                = uploads.Id,
                    ClientId          = saveItem.Id,
                    GeneratedFilename = uploads.GeneratedFilename,
                    OriginalFilename  = uploads.OriginalFilename
                };
                Result uploadResult = await DatabaseOperations.Upload.Write.Client.Item(saveUpload);

                if (uploadResult.Status != ResultStatus.Failed)
                {
                    continue;
                }
                saveStatus = ResultStatus.PartialSuccess;
                messages.AddRange(uploadResult.Messages);
            }

            if (saveStatus == ResultStatus.Undetermined)
            {
                saveStatus = ResultStatus.Succeeded;
            }

            return(new Result(saveStatus, messages, inputItem.Id));
        }