private List <GroupCardModel> FindRecommendedGroups()
        {
            List <GroupCardModel> grpItems = new List <GroupCardModel>();

            if (CurrentMember != null)
            {
                String [] issues   = new List <string>(CurrentMember.Children.Select(x => x.Issues.Select(k => k.Key.ToString("B").ToUpper())).SelectMany(x => x)).ToArray();
                String[]  grades   = new List <string>(CurrentMember.Children.Select(x => x.Grades.Select(g => g.Key.ToString("B").ToUpper())).SelectMany(x => x)).ToArray();
                String[]  topics   = CurrentMember.Interests.Select(x => x.Key.ToString("B").ToUpper()).ToArray();
                String[]  states   = new string[] { CurrentMember.zipCodeToState() };
                String[]  partners = new string[0]; //Partners not applicable to Member profile

                if (issues.Count() > 0 && grades.Count() > 0 && topics.Count() > 0)
                {
                    litViewProfileLink1.Visible = false;
                }
                else if ((issues.Count() > 0 || grades.Count() > 0) || topics.Count() > 0)
                {
                    //Set message to
                    //"For better recommendations, complete your full profile (link to profile process)"
                    litViewProfileLink1.Visible = true;
                }

                return(Groups.FindGroups(issues, topics, grades, states, partners).OrderByDescending(x => x.NumOfMembers).ToList());
            }
            return(grpItems);
        }
Beispiel #2
0
        /// <summary>
        /// Checks-out the given books by setting the CheckedOutBy
        /// property to the CurrentMember MemberID.
        /// </summary>
        /// <param name="books">List<Book></param>
        public static bool CheckoutBooks(List <Book> books)
        {
            LibraryContext context = new LibraryContext();

            Member member = CurrentMember.GetCurrentMember();

            int memberID = Convert.ToInt32(member.MemberID);

            foreach (Book book in books)
            {
                Book dbBook = context.Books.Find(book.ISBN);
                dbBook.CheckedOutBy = memberID;
            }

            context.SaveChanges();

            if (IsChecked(books))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Beispiel #3
0
        public ActionResult Create(MemberVo input)
        {
            ViewBag.Title = "Add New User";

            if (this.ModelState.IsValid)
            {
                input.password = CurrentMember.HashWord(input.password);

                var item = memberManager.insert(input);

                if (input.memberRoleTypes != null)
                {
                    foreach (int roleId in input.memberRoleTypes)
                    {
                        var memberRoleLookupVo = new MemberRoleLookupVo();
                        memberRoleLookupVo.memberId         = input.memberId;
                        memberRoleLookupVo.memberRoleTypeId = roleId;
                        memberRoleLookupVo.isActive         = true;

                        memberRoleLookupManager.insert(memberRoleLookupVo);
                    }
                }
                return(RedirectToAction("Index"));
            }


            return(View(input));
        }
Beispiel #4
0
        public async Task XpAsync([Remainder] DiscordMember?member = null)
        {
            member ??= (DiscordMember)Context.User;
            await Context.Channel.TriggerTypingAsync();

            var serverAttachFilesPerm  = Context.Guild !.CurrentMember.GetPermissions().HasPermission(Permissions.AttachFiles);
            var channelAttachFilesPerm = Context.Guild !.CurrentMember.PermissionsIn(Context.Channel).HasPermission(Permissions.AttachFiles);

            if (!serverAttachFilesPerm && !channelAttachFilesPerm)
            {
                await ReplyErrorAsync(Localization.XpNoAttachFilesPermission);

                return;
            }

            if (serverAttachFilesPerm && !channelAttachFilesPerm)
            {
                await ReplyErrorAsync(Localization.XpNoAttachFilesChannelPermission);

                return;
            }

            await using var xpImage = await Service.GenerateXpImageAsync(member);

            await Context.Channel.SendMessageAsync(new DiscordMessageBuilder().WithFile($"{member.Id}_xp.png", xpImage));
        }
Beispiel #5
0
        private void updateDueDateInLendingList(Account account, ObservableCollection <BookToShow> renewBookList)
        {
            foreach (var book in renewBookList)
            {
                BookItem bookItem = dataLoadFromDB.findBookItemByID(int.Parse(book.Id));

                if (bookItem.dueDate != null)
                {
                    DateTime dateTime = (DateTime)bookItem.dueDate;
                    bookItem.dueDate = dateTime.AddDays(10);
                }
                bookItem.lendingStatus = model.enums.LendingStatus.RENEWED;

                if (Db.getInstace().updateLendingRenew(CurrentMember.getInstance().GetAccount(), bookItem))
                {
                    if (dataLoadFromDB.updateBookItem(bookItem) != null)
                    {
                        returnUpdateBook();
                        returnUpdateMember();
                    }
                }
                else
                {
                    MessageBox.Show("Unknow error");
                }
            }
        }
Beispiel #6
0
        public MemberVo update(MemberVo input, int?memberId = null)
        {
            using (var db = new MainDb())
            {
                if (memberId == null)
                {
                    memberId = input.memberId;
                }

                var res = db.members.Include(i => i.contactInfo).FirstOrDefault(e => e.memberId == memberId);

                if (res == null)
                {
                    return(null);
                }

                input.created = res.created;

                if (!string.IsNullOrEmpty(input.passwordReset))
                {
                    input.password = CurrentMember.HashWord(input.passwordReset);
                }
                else
                {
                    input.password = res.password;
                }

                // input.createdBy = res.createdBy;
                db.Entry(res).CurrentValues.SetValues(input);


                db.SaveChanges();
                return(res);
            }
        }
Beispiel #7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ChartBulletSeries{TModel, TCurrent, TTarget}"/> class.
        /// </summary>
        /// <param name="targetExpression">The expression used to extract the point target from the chart model.</param>
        /// <param name="currentExpression">The expression used to extract the point current from the chart model.</param>
        /// <param name="colorExpression">The expression used to extract the point color from the chart model.</param>
        /// <param name="categoryExpression">The expression used to extract the point category from the chart model.</param>
        /// <param name="noteTextExpression">The expression used to extract the point note text from the chart model.</param>
        public ChartBulletSeries(
            Expression <Func <TModel, TValue> > currentExpression,
            Expression <Func <TModel, TValue> > targetExpression,
            Expression <Func <TModel, string> > colorExpression,
            Expression <Func <TModel, TCategory> > categoryExpression,
            Expression <Func <TModel, string> > noteTextExpression)
        {
            if (typeof(TModel).IsPlainType() && !currentExpression.IsBindable())
            {
                throw new InvalidOperationException(Exceptions.MemberExpressionRequired);
            }

            CurrentMember = currentExpression.MemberWithoutInstance();

            if (typeof(TModel).IsPlainType() && !targetExpression.IsBindable())
            {
                throw new InvalidOperationException(Exceptions.MemberExpressionRequired);
            }

            TargetMember = targetExpression.MemberWithoutInstance();

            if (colorExpression != null)
            {
                if (typeof(TModel).IsPlainType() && !colorExpression.IsBindable())
                {
                    throw new InvalidOperationException(Exceptions.MemberExpressionRequired);
                }

                ColorMember = colorExpression.MemberWithoutInstance();
            }

            if (categoryExpression != null)
            {
                if (typeof(TModel).IsPlainType() && !categoryExpression.IsBindable())
                {
                    throw new InvalidOperationException(Exceptions.MemberExpressionRequired);
                }

                Category       = categoryExpression.Compile();
                CategoryMember = categoryExpression.MemberWithoutInstance();
            }

            if (noteTextExpression != null)
            {
                if (typeof(TModel).IsPlainType() && !noteTextExpression.IsBindable())
                {
                    throw new InvalidOperationException(Exceptions.MemberExpressionRequired);
                }

                NoteTextMember = noteTextExpression.MemberWithoutInstance();
            }

            if (string.IsNullOrEmpty(Name))
            {
                Name = CurrentMember.AsTitle();
            }

            Initialize();
        }
Beispiel #8
0
        public BookBorrowReturn()
        {
            InitializeComponent();
            selectedBooks = new ObservableCollection <BookToShow>();
            CurrentMember current = CurrentMember.getInstance();

            DataContext = new ReturnBookViewModel(current.GetAccount());
            UserScanerBoardViewModel.updateLedingBookList += UserScanerBoardViewModel_updateLedingBookList;
        }
Beispiel #9
0
        public JsonNetResult SaveMemberInfo(Customers newEntity, string ddlProvince, string ddlCity, string ddlArea, string ttbAddress)
        {
            newEntity.Mobile = newEntity.Mobile.Trim();
            if (newEntity.Mobile.IsNullOrTrimEmpty())
            {
                return(new JsonNetResult(new OpResult()
                {
                    Successed = false, Message = "手机不能为空"
                }));
            }
            if (new Regex(@"^1[3|5|7|8|][0-9]{9}$").IsMatch(newEntity.Mobile) == false)
            {
                return(new JsonNetResult(new OpResult()
                {
                    Successed = false, Message = "手机格式不正确"
                }));
            }

            var userId = CurrentMember.MemberId.ToString();

            var code     = Request.Params["Code"];
            var customer = new MemberService().GetMember(userId);

            if (customer == null)
            {
                return(new JsonNetResult(new OpResult()
                {
                    Successed = false, Message = "找不到会员信息"
                }));
            }
            else
            {
                if (customer.Mobile.IsNullOrTrimEmpty())
                {
                    return(new JsonNetResult(new OpResult()
                    {
                        Successed = false, Message = "找不到会员手机号"
                    }));
                }
                if (customer.Mobile != newEntity.Mobile)
                { //当修改手机(账户名)时
                    var r = new PhoneCodeService().CheckMobileCode(newEntity.Mobile, code);
                    if (r == false)
                    {
                        return(new JsonNetResult(new OpResult()
                        {
                            Successed = false, Message = "修改手机号时,验证码错误"
                        }));
                    }
                }
                var result = new MemberService().SaveMemberInfo(userId, newEntity, ddlProvince, ddlCity, ddlArea, ttbAddress);

                CurrentMember.ReSetMemberSession(CurrentMember.MemberId);
                return(new JsonNetResult(result));
            }
        }
Beispiel #10
0
 public ActionResult EditProfile(MemberVo input)
 {
     Edit(input);
     if (!this.ModelState.IsValid)
     {
         return(View("Edit", input));
     }
     CurrentMember.reload();
     return(View("Details", CurrentMember.member));
 }
        public bool CurrentMemberIsWriteVisible()
        {
            Type allowProtectedForType = null;

            if (AllowProtectedMembersOnRoot && _stack.Depth == 1)
            {
                allowProtectedForType = CurrentType.UnderlyingType;
            }
            return(CurrentMember.IsWriteVisibleTo(LocalAssembly, allowProtectedForType));
        }
        public bool SetLogin(Customers member, bool isRememberMe, string urlHost)
        {
            CurrentMember.SetMemberSession(member);
            string userData = string.Format("{0},{1},{2},{3}", member.Id, member.Mobile, member.FullName, member.ChangePasswordTimeStamp);

            CookieHelper.SaveTicketCookie(Constants.LOGIN_COOKIE_NAME, userData, 0, urlHost);
            if (isRememberMe)
            {
                var cookieValue = string.Format("{0},{1},{2}", member.Id, member.Mobile, member.ChangePasswordTimeStamp);
                SetLoginCookie(cookieValue, 43200, urlHost);
            }
            return(true);
        }
Beispiel #13
0
        public void SignIn(object sender, EventArgs e)
        {
            Member member = new Member();

            if (!IsEmpty(txtUsername.Text))
            {
                member.Username = txtUsername.Text;
            }

            if (!InvalidInt(txtPIN.Text))
            {
                member.PIN = Convert.ToInt32(txtPIN.Text);
            }

            if (MemberDB.IsMember(member))
            {
                if (MemberDB.LogIn(member))
                {
                    Member dbMember =
                        CurrentMember.GetCurrentMember();

                    if (chkAdmin2.Checked is true &&
                        dbMember.IsAdmin is true)
                    {
                        this.Hide();

                        FrmAdmin addAdminForm =
                            new FrmAdmin();

                        addAdminForm.ShowDialog();

                        this.Close();
                    }
                    else
                    {
                        this.Hide();

                        FrmLibrary addLibraryForm =
                            new FrmLibrary();

                        addLibraryForm.ShowDialog();

                        this.Close();
                    }
                }
                else
                {
                    MessageBox.Show("PIN incorrect. Try again.");
                }
            }
 private bool checkBlaskList()
 {
     if (CurrentMember.getInstance().GetAccount() == null)
     {
         return(false);
     }
     if (CurrentMember.getInstance().GetAccount().status == enums.AccountStatus.BLACKLISTED)
     {
         MessageBox.Show("Blacklist member can only return book!", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning);
         return(true);
     }
     else
     {
         return(false);
     }
 }
        private bool isInLendingBookList(BookItem item)
        {
            Account account = CurrentMember.getInstance().GetAccount();

            if (account != null)
            {
                foreach (var bookItem in account.getLendingBookItems())
                {
                    if (item.id == bookItem.id)
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
Beispiel #16
0
        private void removeSeletedItem()
        {
            BookToShow       temp         = SelectedItem;
            DataLoadFromDB   data         = DataLoadFromDB.getIntance();
            MessageBoxResult dialogResult = MessageBox.Show("Ensure that you want to delete this item from member reserved list! It can't be undo", "Warning", MessageBoxButton.OKCancel, MessageBoxImage.Warning);

            if (dialogResult == MessageBoxResult.OK)
            {
                ConfirmBooks.Remove(temp);
                BookItem      tempBookItem = data.findBookItemByID(int.Parse(temp.Id));
                CurrentMember current      = CurrentMember.getInstance();
                current.GetAccount().removeBookToReserveBookList(tempBookItem, "CANCELED");
            }
            else
            {
                return;
            }
        }
        public ActionResult Login(MemberVo input)
        {
            if (this.ModelState.IsValid)
            {
                if (CurrentMember.validateUser(input.username, input.password))
                {
                    FormsAuthentication.SetAuthCookie(input.username, true);
                    return(RedirectToAction("Index", "Home"));
                    //FormsAuthentication.RedirectFromLoginPage(input.username, true);
                }
                else
                {
                    ViewBag.uname = input.username;
                    this.ModelState.AddModelError("", "Please check Username and Password, and try again.");
                }
            }

            return(View());
        }
Beispiel #18
0
        public ActionResult Login(LoginVm input)
        {
            if (this.ModelState.IsValid)
            {
                // validate user
                if (CurrentMember.validateUser(input.email, input.password))
                {
                    memberManager.updateLastLoginForMember(input.email, input.password);
                    FormsAuthentication.RedirectFromLoginPage(input.email, input.rememberMe);
                }
                else
                {
                    ViewBag.uname = input.email;
                    this.ModelState.AddModelError("", "Please check Username and Password, and try again.");
                }
            }

            return(View());
        }
Beispiel #19
0
        /// <summary>
        /// Gets all books checked out by a member.
        /// </summary>
        /// <param name="member">Member</param>
        /// <returns>List<Book></returns>
        public static List <Book> GetMemberBooks()
        {
            Member member = CurrentMember.GetCurrentMember();

            List <Book> allBooks = GetAllBooks();

            List <Book> memberBooks = new List <Book>();

            int memberID = Convert.ToInt32(member.MemberID);

            foreach (Book book in allBooks)
            {
                if (book.CheckedOutBy == memberID)
                {
                    memberBooks.Add(book);
                }
            }

            return(memberBooks);
        }
        protected override void OnInit(EventArgs e)
        {
            Item   parentItem = Sitecore.Context.Database.GetItem(Sitecore.Data.ID.Parse(Constants.Pages.ParentsGroups));
            string itemHref   = Sitecore.Links.LinkManager.GetItemUrl(parentItem);

            ref_ParentGroup.HRef    = itemHref;
            litBackLink.Text        = DictionaryConstants.GroupRecommendedBackLink;//back to parents page
            litRecommendHeader.Text = DictionaryConstants.RecommendedHeader;
            litGroupPrivacy.Text    = DictionaryConstants.GroupPrivacyStatement;
            if (CurrentMember != null)
            {
                litViewProfileLink1.Text = String.Format(DictionaryConstants.ViewProfileLink1,
                                                         CurrentMember != null ?
                                                         CurrentMember.GetMemberPublicProfile() :
                                                         UnderstoodDotOrg.Common.Helpers.MembershipHelper.SignUpLink()
                                                         );
            }

            base.OnInit(e);
        }
Beispiel #21
0
        public ActionResult ResetPassword(string un, Guid rt)
        {
            //TODO: Check the un and rt matching and then perform following
            //get member of received username
            MemberVo member = memberManager.getByUsername(un);

            if (member.passwordResetToken != null && member.passwordResetToken == rt)
            {
                //generate random password
                string newpassword = memberManager.GenerateRandomPassword(6);
                //reset password
                member.password           = CurrentMember.HashWord(newpassword);
                member.passwordResetToken = null;
                memberManager.update(member);

                //get user emailid to send password
                string emailid = member.email;

                //send email
                string subject = "New Password";
                string body    = "<b>Please find the New Password</b><br/>" + newpassword; //edit it
                try
                {
                    emailSender.send("SilList System Administrator", emailid, subject, body);
                    TempData["Message"] = "Mail Sent.";
                }
                catch (Exception ex)
                {
                    TempData["Message"] = "Error occured while sending email." + ex.Message;
                }

                //display message
                TempData["Message"] = "Success! Check email we sent. Your New Password Is " + newpassword;
            }
            else
            {
                TempData["Message"] = "Username and token not maching.";
            }

            return(View());
        }
        //by checking-in the selected book we set CheckedOutBy = 0
        public static bool CheckInBooks(List <Book> books)
        {
            Member member = CurrentMember.GetCurrentMember();

            foreach (Book book in books)
            {
                Book dbBook = context.Books.Find(book.ISBN);
                dbBook.CheckedOutBy = 0;
            }

            context.SaveChanges();

            if (IsChecked(books))
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
Beispiel #23
0
        public ActionResult LogOn(string username, string password, bool?auto, string returnUrl, FormCollection form)
        {
            //验证码必填项及验证码
            if (string.IsNullOrEmpty(username))
            {
                Common.VerifyCodeHelper.ChangeCode();
                return(Content(ContentIcon.Error + "|请输入用户名"));
            }
            if (string.IsNullOrEmpty(password))
            {
                Common.VerifyCodeHelper.ChangeCode();
                return(Content(ContentIcon.Error + "|请输入密码"));
            }
            string verifycode = form["verifycode"];

            if (string.IsNullOrEmpty(verifycode))
            {
                Common.VerifyCodeHelper.ChangeCode();
                return(Content(ContentIcon.Error + "|请输入验证码"));
            }
            else
            {
                if (Session["verifyCode"] == null)
                {
                    Common.VerifyCodeHelper.ChangeCode();
                    return(Content(ContentIcon.Error + "|验证码已过期,请刷新验证码"));
                }
                else
                {
                    if (verifycode.ToLower() != Session["verifyCode"].ToString().ToLower())
                    {
                        Common.VerifyCodeHelper.ChangeCode();
                        return(Content(ContentIcon.Error + "|验证码不正确"));
                    }
                }
            }
            //登录验证用户名、密码
            string url      = string.Empty;
            string _message = string.Empty;

            if (auto == null)
            {
                auto = false;
            }
            bool _true = CurrentMember.LogOn(username, password, (bool)auto, out _message);

            if (_true)
            {
                url = "/admin";
                //防跳转钓鱼
                if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(url))
                {
                    url = returnUrl;
                }
                else
                {
                    url = "/admin";
                }
                Common.VerifyCodeHelper.ChangeCode();
                return(Content(ContentIcon.Succeed + "|" + _message + "|" + url));
            }
            else
            {
                Common.VerifyCodeHelper.ChangeCode();
                return(Content(ContentIcon.Error + "|" + _message));
            }
        }
Beispiel #24
0
        ///
        /// This method will override the getrolesforuser method in roleprovider and do the custom implementation
        ///
        ///
        ///
        public override string[] GetRolesForUser(string username)
        {
            var rolesArray = CurrentMember.getRoleNames().ToArray <string>();

            return(rolesArray);
        }
Beispiel #25
0
        public void DumpProperty()
        {
            // should we dump it at all?
            if (!CurrentMember.CanRead() || CurrentMemberDumpAttribute.Skip == ShouldDump.Skip)
            {
                return;
            }

            var pi = CurrentMember as PropertyInfo;

            // can't dump indexers
            if (pi != null && pi.GetIndexParameters().Length > 0)
            {
                return;
            }

            if (pi != null && pi.IsVirtual())
            {
                // for virtual properties dump the instance value at the the least derived class level that declares the property for first time.
                if (CurrentType.BaseType.GetProperty(CurrentMember.Name, _dumper.Settings.PropertyBindingFlags) != null)
                {
                    return;
                }

                pi = InstanceType.GetProperty(CurrentMember.Name, _dumper.Settings.PropertyBindingFlags);
            }

            var    fi    = CurrentMember as FieldInfo;
            Type   type  = null;
            object value = null;

            try
            {
                if (pi != null)
                {
                    type  = pi.PropertyType;
                    value = pi.GetValue(Instance, null);
                }
                else
                {
                    type  = fi.FieldType;
                    value = fi.GetValue(Instance);
                }
            }
            catch (Exception x)
            {
                // this should not happen but...
                value = $"<{x.Message}>";
            }

            var dontDumpNulls = CurrentMemberDumpAttribute.DumpNullValues == ShouldDump.Skip ||
                                CurrentMemberDumpAttribute.DumpNullValues == ShouldDump.Default && DumpNullValues == ShouldDump.Skip;

            if (IsInDumpingMode)
            {
                // should we dump a null value of the current property
                if (value == null && dontDumpNulls)
                {
                    return;
                }

                // write the property header
                _dumper.Writer.WriteLine();
                _dumper.Writer.Write(
                    CurrentMemberDumpAttribute.LabelFormat,
                    CurrentMember.Name);

                if (!(DumpedPropertyCustom(value, type) ||                                         // dump the property value using caller's customization (see ValueFormat="ToString", DumpClass, DumpMethod) if any.
                      _dumper.Writer.DumpedBasicValue(value, CurrentMemberDumpAttribute) ||
                      _dumper.Writer.DumpedBasicNullable(value, CurrentMemberDumpAttribute) ||
                      _dumper.Writer.Dumped(value as Delegate) ||
                      _dumper.Writer.Dumped(value as MemberInfo) ||
                      DumpedCollection(value, CurrentMember, CurrentMemberDumpAttribute)))
                {
                    // dump a property representing an associated class or struct object
                    var currentPropertyDumpAttribute = !CurrentMemberDumpAttribute.IsDefaultAttribute() ? CurrentMemberDumpAttribute : null;

                    _dumper.DumpObject(value, null, currentPropertyDumpAttribute, this);
                }
            }
            else
            {
                // write the property header
                DumpScript.BeginDumpProperty(CurrentMember, CurrentMemberDumpAttribute);

                if (!DumpedPropertyCustom(value, type))                                             // dump the property value using caller's customization (see ValueFormat="ToString", DumpClass, DumpMethod) if any.
                {
                    DumpScript.AddDumpPropertyOrCollectionValue(CurrentMember, CurrentMemberDumpAttribute);
                }

                DumpScript.EndDumpProperty(CurrentMember, dontDumpNulls);
            }
        }
Beispiel #26
0
 //注销
 public ActionResult LogOut()
 {
     CurrentMember.LogOut();
     return(Redirect("/admin/account/logon"));
 }
Beispiel #27
0
        /// <summary>
        /// Tries to deserialize an object from an XElement.
        /// </summary>
        /// <param name="element"></param>
        /// <param name="t"></param>
        /// <param name="setter"></param>
        /// <param name="newobj"></param>
        /// <param name="logWarnings">Whether warning messages should be emitted in case of missing properties.</param>
        /// <returns>True on success.</returns>
        public virtual bool TryDeserializeObject(XElement element, ITypeData t, Action <object> setter, object newobj = null, bool logWarnings = true)
        {
            if (element.IsEmpty && !element.HasAttributes)
            {
                setter(null);
                return(true);
            }
            if (newobj == null)
            {
                try
                {
                    newobj = t.CreateInstance(Array.Empty <object>());
                    t      = TypeData.GetTypeData(newobj);
                }
                catch (TargetInvocationException ex)
                {
                    if (ex.InnerException is System.ComponentModel.LicenseException)
                    {
                        throw new Exception(string.Format("Could not create an instance of '{0}': {1}", t.GetAttribute <DisplayAttribute>().Name, ex.InnerException.Message));
                    }
                    else
                    {
                        ExceptionDispatchInfo.Capture(ex.InnerException).Throw();
                    }
                }
            }

            var prevobj = Object;

            Object = newobj;
            var t2 = t;

            if (newobj == null)
            {
                throw new ArgumentNullException(nameof(newobj));
            }
            var properties = t2.GetMembers()
                             .Where(x => x.HasAttribute <XmlIgnoreAttribute>() == false)
                             .ToArray();

            try
            {
                foreach (var prop in properties)
                {
                    var attr = prop.GetAttribute <XmlAttributeAttribute>();
                    if (attr == null)
                    {
                        continue;
                    }
                    var name       = string.IsNullOrWhiteSpace(attr.AttributeName) ? prop.Name : attr.AttributeName;
                    var attr_value = element.Attribute(XmlConvert.EncodeLocalName(name));
                    var p          = prop as MemberData;

                    if (p != null && attr_value != null && p.Member is PropertyInfo csprop)
                    {
                        try
                        {
                            readContentInternal(csprop.PropertyType, false, () => attr_value.Value, element, out object value);

                            p.SetValue(newobj, value);
                        }
                        catch (Exception e)
                        {
                            if (logWarnings)
                            {
                                Log.Warning(element, "Attribute value '{0}' was not read correctly as a {1}", attr_value.Value, p);
                                Log.Debug(e);
                            }
                        }
                    }
                }

                if (properties.FirstOrDefault(x => x.HasAttribute <XmlTextAttribute>()) is IMemberData mem2)
                {
                    object value;
                    if (mem2.TypeDescriptor is TypeData td &&
                        readContentInternal(td.Load(), false, () => element.Value, element, out object _value))
                    {
                        value = _value;
                    }
                    else
                    {
                        value = StringConvertProvider.FromString(element.Value, mem2.TypeDescriptor, null);
                    }
                    mem2.SetValue(newobj, value);
                }
                else
                {
                    var    props    = properties.ToLookup(x => x.GetAttributes <XmlElementAttribute>().FirstOrDefault()?.ElementName ?? x.Name);
                    var    elements = element.Elements().ToArray();
                    bool[] visited  = new bool[elements.Length];

                    double order = 0;
                    int    foundWithCurrentType = 0;
                    while (true)
                    {
                        double nextOrder = 1000;
                        // since the object might be dynamically adding properties as other props are added.
                        // we need to iterate a bit. Example: Test Plan Reference.

                        int found = visited.Count(x => x);
                        for (int i = 0; i < elements.Length; i++)
                        {
                            var element2 = elements[i];
                            if (visited[i])
                            {
                                continue;
                            }
                            if (element2.Attribute(IgnoreMemberXName) is XAttribute attr && attr.Value == "true")
                            {
                                visited[i] = true;
                                continue;
                            }
                            IMemberData property        = null;
                            var         name            = XmlConvert.DecodeName(element2.Name.LocalName);
                            var         propertyMatches = props[name];

                            int hits = 0;
                            foreach (var p in propertyMatches)
                            {
                                if (p.Writable || p.HasAttribute <XmlIgnoreAttribute>())
                                {
                                    property = p;
                                    hits++;
                                }
                            }

                            if (0 == hits)
                            {
                                try
                                {
                                    if (property == null)
                                    {
                                        property = t2.GetMember(name);
                                    }
                                    if (property == null)
                                    {
                                        property = t2.GetMembers().FirstOrDefault(x => x.Name == name);
                                    }
                                }
                                catch { }
                                if (property == null || property.Writable == false)
                                {
                                    continue;
                                }
                                hits = 1;
                            }
                            if (hits > 1)
                            {
                                Log.Warning(element2, "Multiple properties named '{0}' are available to the serializer in '{1}' this might give issues in serialization.", element2.Name.LocalName, t.GetAttribute <DisplayAttribute>().Name);
                            }

                            if (property.GetAttribute <DeserializeOrderAttribute>() is DeserializeOrderAttribute orderAttr)
                            {
                                if (order < orderAttr.Order)
                                {
                                    if (orderAttr.Order < nextOrder)
                                    {
                                        nextOrder = orderAttr.Order;
                                    }
                                    continue;
                                }
                            }
                            else
                            {
                                nextOrder = order;
                            }

                            visited[i] = true;
                            var prev = CurrentMember;
                            CurrentMember = property;
                            try
                            {
                                if (CurrentMember.HasAttribute <XmlIgnoreAttribute>())      // This property shouldn't have been in the file in the first place, but in case it is (because of a change or a bug), we shouldn't try to set it. (E.g. SweepLoopRange.SweepStep)
                                {
                                    if (!CurrentMember.HasAttribute <BrowsableAttribute>()) // In the special case we assume that this is some compatibility property that still needs to be set if present in the XML. (E.g. TestPlanReference.DynamicDataContents)
                                    {
                                        continue;
                                    }
                                }

                                if (property is MemberData mem && mem.Member is PropertyInfo Property && Property.PropertyType.HasInterface <IList>() && Property.PropertyType.IsGenericType && Property.HasAttribute <XmlElementAttribute>())
                                {
                                    // Special case to mimic old .NET XmlSerializer behavior
                                    var             list     = (IList)Property.GetValue(newobj);
                                    Action <object> setValue = x => list.Add(x);
                                    Serializer.Deserialize(element2, setValue, Property.PropertyType.GetGenericArguments().First());
                                }
                                else
                                {
                                    Action <object> setValue = x =>
                                    {
                                        var current = property.GetValue(newobj);
                                        property.SetValue(newobj, x);
                                        if (false == Equals(current, x))
                                        { // for some value-like type, it may be needed
                                            // to set the parent object when a property is changed
                                            // example: complex test plan parameters.
                                            setter(newobj);
                                        }
                                    };
                                    Serializer.Deserialize(element2, setValue, property.TypeDescriptor);
                                }
                            }
 // setting current member
 private static void SetMember(Member member)
 {
     CurrentMember.SetCurrentMember(member);
 }
Beispiel #29
0
        public async Task BackgroundAsync(string url)
        {
            var userDb = await DbContext.GetOrAddAsync(x => x.UserId == Context.User.Id, () => new UserEntity { UserId = Context.User.Id });

            if (userDb.Currency < 1000)
            {
                await ReplyErrorAsync(Localization.GamblingCurrencyNotEnough, Configuration.Currency);

                return;
            }

            if (!Uri.TryCreate(url, UriKind.Absolute, out var backgroundUri))
            {
                await ReplyErrorAsync(Localization.UtilityUrlNotValid);

                Context.Command.ResetCooldowns();
                return;
            }

            if (backgroundUri.Scheme != Uri.UriSchemeHttps)
            {
                await ReplyErrorAsync(Localization.UtilityUrlNotHttps);

                Context.Command.ResetCooldowns();
                return;
            }

            await Context.Channel.TriggerTypingAsync();

            using var result = await HttpClient.GetAsync(backgroundUri);

            if (!result.IsSuccessStatusCode)
            {
                await ReplyErrorAsync(Localization.UtilityImageOrUrlNotGood);

                Context.Command.ResetCooldowns();
                return;
            }

            await using var backgroundStream = await result.Content.ReadAsStreamAsync();

            if (!(RiasUtilities.IsPng(backgroundStream) || RiasUtilities.IsJpg(backgroundStream)))
            {
                await ReplyErrorAsync(Localization.UtilityUrlNotPngJpg);

                return;
            }

            var serverAttachFilesPerm  = Context.Guild !.CurrentMember.GetPermissions().HasPermission(Permissions.AttachFiles);
            var channelAttachFilesPerm = Context.Guild !.CurrentMember.PermissionsIn(Context.Channel).HasPermission(Permissions.AttachFiles);

            if (!serverAttachFilesPerm && !channelAttachFilesPerm)
            {
                await ReplyErrorAsync(Localization.ProfileBackgroundNoAttachFilesPermission);

                return;
            }

            if (serverAttachFilesPerm && !channelAttachFilesPerm)
            {
                await ReplyErrorAsync(Localization.ProfileBackgroundNoAttachFilesChannelPermission);

                return;
            }

            backgroundStream.Position      = 0;
            await using var profilePreview = await Service.GenerateProfileBackgroundAsync(Context.User, backgroundStream);

            var componentInteractionArgs = await SendConfirmationButtonsAsync(new DiscordMessageBuilder()
                                                                              .WithEmbed(new DiscordEmbedBuilder
            {
                Color = RiasUtilities.Yellow,
                Description = GetText(Localization.ProfileBackgroundPreview),
                ImageUrl = $"attachment://{Context.User.Id}_profile_preview.png"
            })
                                                                              .WithFile($"{Context.User.Id}_profile_preview.png", profilePreview));

            if (componentInteractionArgs is null)
            {
                return;
            }

            userDb.Currency -= 1000;

            var profileDb = await DbContext.GetOrAddAsync(x => x.UserId == Context.User.Id, () => new ProfileEntity { UserId = Context.User.Id, BackgroundDim = 50 });

            profileDb.BackgroundUrl = url;

            await DbContext.SaveChangesAsync();

            await ButtonsActionModifyDescriptionAsync(componentInteractionArgs.Value.Result.Message, Localization.ProfileBackgroundSet);
        }