static IHtmlControl GetDialogBlock(IDataLayer forumConnection, UserStorage userStorage, LightObject user, RowLink dialog, int messageIndex) { LightObject collocutor = userStorage.FindUser(dialog.Get(DialogueType.CollocutorId)); if (collocutor == null) { return(null); } bool read = dialog.Get(DialogueType.Unread); bool inbox = dialog.Get(DialogueType.Inbox); LightObject author = inbox ? collocutor : user; DateTime localTime = dialog.Get(DialogueType.ModifyTime).ToLocalTime(); HBefore before = null; if (!inbox) { before = std.BeforeAwesome(@"\f112", 8); } IHtmlControl messageBlock = new HPanel("", new IHtmlControl[] { new HPanel( ViewUserHlp.AvatarBlock(collocutor) ).PositionAbsolute().Left(0).Top(0).Padding(7, 5, 10, 5), new HPanel( new HPanel( new HLabel(collocutor.Get(UserType.Login)).FontBold(), new HLabel(collocutor.Get(UserType.FirstName)).MarginLeft(5), new HLabel(localTime.ToString("dd.MM.yyyy HH:mm")).PositionAbsolute().Right(5) .FontSize("90%").Color(Decor.minorColor) ).PositionRelative().MarginBottom(6), new HLabel( //BasketballHlp.PreViewComment(dialog.Get(DialogueType.Content)), dialog.Get(DialogueType.Content), before ).Block().PaddingBottom(15).BorderBottom("1px solid silver").MarginBottom(5) .FontBold(read).Color(read ? Decor.textColor : Decor.minorColor) .Width("100%").NoWrap().Overflow("hidden").CssAttribute("text-overflow", "ellipsis") ).BoxSizing().Width("100%").BorderLeft(Decor.columnBorder).Padding(7, 5, 5, 5) }, new HHover().Background(Decor.pageBackground) ).PositionRelative().PaddingLeft(64).BorderTop("2px solid #fff").Color(Decor.textColor); //if (messageIndex % 2 != 0) // messageBlock.Background(Decor.evenBackground); return(new HLink(string.Format("{0}", UrlHlp.ShopUrl("dialog", collocutor.Id)), messageBlock, new HHover().Background(Decor.pageBackground) ).TextDecoration("none")); }
public static IHtmlControl GetNewsView(SiteState state, LightObject currentUser, TopicStorage topic, out string description) { LightObject news = topic.Topic; description = BasketballHlp.GetDescriptionForNews(news); DateTime localTime = (news.Get(ObjectType.ActFrom) ?? DateTime.UtcNow).ToLocalTime(); int publisherId = news.Get(NewsType.PublisherId); LightObject publisher = context.UserStorage.FindUser(publisherId); IHtmlControl editPanel = null; if (currentUser != null && (currentUser.Id == publisherId || currentUser.Get(BasketballUserType.IsModerator))) { editPanel = ViewNewsHlp.GetNewsEditPanel(state, topic); } IHtmlControl moderatorPanel = GetModeratorPanel(state, currentUser, topic, localTime); return(new HPanel( Decor.Title(news.Get(NewsType.Title)), new HLabel(localTime.ToString(Decor.timeFormat)).Block().FontBold(), new HTextView(news.Get(NewsType.Text)).PositionRelative().Overflow("hidden"), new HPanel( new HLabel("Добавил:").MarginRight(5), new HLink(UrlHlp.ShopUrl("user", publisherId), publisher?.Get(UserType.Login)) ), new HLink(news.Get(NewsType.OriginUrl), news.Get(NewsType.OriginName)), ViewTagHlp.GetViewTagsPanel(context.Tags.TagBox, topic.Topic), editPanel, moderatorPanel, ViewCommentHlp.GetCommentsPanel(context.MessageConnection, state, currentUser, topic, topic.MessageLink.AllRows) )); }
static IHtmlControl GetModeratorPanel(LightObject user) { return(new HPanel( Decor.PropertyEdit("editBannedUntil", "Заблокировать до (например, 22.12.2018)", user.Get(BasketballUserType.BannedUntil)?.ToString("dd.MM.yyyy") ), Decor.PropertyEdit("editNotRedactorUntil", "Запретить добавление новостей до", user.Get(BasketballUserType.NotRedactorUntil)?.ToString("dd.MM.yyyy") ), Decor.Button("Сохранить").Event("user_rights_save", "moderatorEdit", delegate(JsonData json) { string bannedUntilStr = json.GetText("editBannedUntil"); string notRedactorUntilStr = json.GetText("editNotRedactorUntil"); LightObject editUser = DataBox.LoadObject(context.UserConnection, UserType.User, user.Id); DateTime bannedUntil; if (DateTime.TryParse(bannedUntilStr, out bannedUntil)) { editUser.Set(BasketballUserType.BannedUntil, bannedUntil); } else { editUser.Set(BasketballUserType.BannedUntil, null); } DateTime notRedactorUntil; if (DateTime.TryParse(notRedactorUntilStr, out notRedactorUntil)) { editUser.Set(BasketballUserType.NotRedactorUntil, notRedactorUntil); } else { editUser.Set(BasketballUserType.NotRedactorUntil, null); } editUser.Box.Update(); context.UserStorage.Update(); } ) ).EditContainer("moderatorEdit").MarginTop(10)); }
public static bool IsBanned(LightObject user) { DateTime?bannedUntil = user.Get(BasketballUserType.BannedUntil); if (bannedUntil != null && bannedUntil.Value > DateTime.UtcNow) { return(true); } return(false); }
public static bool NoRedactor(LightObject user) { DateTime?noRedactorUntil = user.Get(BasketballUserType.NotRedactorUntil); if (noRedactorUntil != null && noRedactorUntil.Value > DateTime.UtcNow) { return(true); } return(false); }
static IHtmlControl GetActualPublicationPanel(SiteState state) { return(new HPanel( Decor.Subtitle("Обсуждаемое").MarginBottom(10).MarginTop(5), new HGrid <RowLink>(context.LastPublicationComments, delegate(RowLink comment) { int topicId = comment.Get(MessageType.ArticleId); TopicStorage topic = null; string url = ""; if (context.News.ObjectById.Exist(topicId)) { topic = context.NewsStorages.ForTopic(topicId); url = UrlHlp.ShopUrl("news", topic?.TopicId); } else if (context.Articles.ObjectById.Exist(topicId)) { topic = context.ArticleStorages.ForTopic(topicId); url = UrlHlp.ShopUrl("article", topic?.TopicId); } if (topic == null || topic.Topic == null) { return new HPanel(); } int userId = comment.Get(MessageType.UserId); LightObject user = context.UserStorage.FindUser(userId); DateTime localTime = comment.Get(MessageType.CreateTime).ToLocalTime(); string replyUrl = string.Format("{0}#reply{1}", url, comment.Get(MessageType.Id)); return new HPanel( new HPanel( new HLabel(localTime.ToString("HH:mm")).MarginRight(5) .Title(localTime.ToString(Decor.timeFormat)), new HLabel(user?.Get(UserType.Login)) ), new HLink(url, topic.Topic.Get(TopicType.Title) ).MarginRight(5), new HLink( replyUrl, "", new HBefore().ContentIcon(13, 13).Background("/images/full.gif", "no-repeat", "bottom").VAlign(-2) //new HImage("/images/full.gif").VAlign(-2) ) //ViewNewsHlp.GetCommentElement(topic.MessageLink.AllRows.Length, url) ).MarginBottom(6); }, new HRowStyle() ).FontSize("90%") ).Padding(15, 15, 10, 15).MarginBottom(5).Background(Decor.pageBackground)); }
public static IHtmlControl GetArticleView(SiteState state, LightObject currentUser, TopicStorage topic) { if (topic == null || topic.Topic == null) { return(null); } LightObject article = topic.Topic; DateTime localTime = (article.Get(ObjectType.ActFrom) ?? DateTime.UtcNow).ToLocalTime(); int publisherId = article.Get(NewsType.PublisherId); LightObject publisher = context.UserStorage.FindUser(publisherId); IHtmlControl editPanel = null; if (currentUser != null && (currentUser.Id == publisherId || currentUser.Get(BasketballUserType.IsModerator))) { editPanel = ViewArticleHlp.GetArticleEditPanel(state, topic); } string author = article.Get(ArticleType.Author); int commentCount = topic.MessageLink.AllRows.Length; string articleUrl = UrlHlp.ShopUrl("article", article.Id); return(new HPanel( Decor.Title(article.Get(NewsType.Title)), new HPanel( new HLabel(string.Format("{0},", author)).FontBold().MarginRight(5).Hide(StringHlp.IsEmpty(author)), new HLabel(article.Get(ArticleType.OriginName)) .FontBold().MarginRight(5), new HLabel(string.Format("| {0}", localTime.ToString("dd MMMM yyyy"))) ).FontSize("90%"), new HPanel( new HLabel("Комментарии:").Color(Decor.minorColor), ViewNewsHlp.GetCommentElement(commentCount, articleUrl) ).FontSize("90%"), //new HLabel(localTime.ToString(Decor.timeFormat)).Block().FontBold(), new HTextView(article.Get(NewsType.Text)), new HLabel("Автор:").MarginRight(5).Hide(StringHlp.IsEmpty(author)), new HLabel(author).FontBold().MarginRight(5).Hide(StringHlp.IsEmpty(author)), new HLabel("|").MarginRight(5).Hide(StringHlp.IsEmpty(author)), new HLink(article.Get(NewsType.OriginUrl), article.Get(NewsType.OriginName)), new HPanel( new HLabel("Добавил:").MarginRight(5), new HLink(UrlHlp.ShopUrl("user", publisherId), publisher?.Get(UserType.Login)) ).MarginTop(5), editPanel, ViewCommentHlp.GetCommentsPanel(context.MessageConnection, state, currentUser, topic, topic.MessageLink.AllRows) )); }
static IHtmlControl GetWhomBlock(SiteState state, UserStorage userStorage, TopicStorage topic, Dictionary <int, string> htmlRepresentByMessageId, RowLink comment) { int commentId = comment.Get(MessageType.Id); int?whomId = comment.Get(MessageType.WhomId); if (whomId == null) { return(null); } RowLink whom = topic.MessageLink.FindRow(MessageType.MessageById, whomId.Value); if (whom == null) { return(null); } LightObject whomUser = userStorage.FindUser(whom.Get(MessageType.UserId)); DateTime whomTime = whom.Get(MessageType.CreateTime).ToLocalTime(); string whomHint = string.Format("whom_{0}", commentId); IHtmlControl whomTextBlock = null; if (state.BlockHint == whomHint) { //string whomDisplay = BasketballHlp.PreViewComment(whom.Get(MessageType.Content)); string whomDisplay = DictionaryHlp.GetValueOrDefault(htmlRepresentByMessageId, whomId.Value); whomTextBlock = new HPanel( new HTextView(whomDisplay).FontSize(12) ).Padding(5); } return(new HPanel( new HPanel( new HButton( whomUser?.Get(UserType.Login), new HHover().TextDecoration("none") ).Color(Decor.linkColor).TextDecoration("underline").MarginRight(5) .Event("whom_display", "", delegate { state.SetBlockHint(whomHint); }, commentId ), new HLabel(string.Format("({0})", whomTime.ToString(Decor.timeFormat))) ), whomTextBlock ).Color(Decor.minorColor).FontSize("90%")); }
static IHtmlControl GetUserRedoPanel(SiteState state, LightObject user) { return(new HPanel( Decor.PropertyEdit("editUserName", "Ваше имя (*):", user.Get(UserType.FirstName)), Decor.PropertyEdit("editUserEmail", "Email (*):", user.Get(UserType.Email)), Decor.PropertyEdit("editUserCountry", "Страна:", user.Get(BasketballUserType.Country)), Decor.PropertyEdit("editUserCity", "Город:", user.Get(BasketballUserType.City)), Decor.PropertyEdit("editUserInterests", "Интересы:", user.Get(BasketballUserType.Interests)), Decor.PropertyEdit("editUserAboutMe", "О себе:", user.Get(BasketballUserType.AboutMe)), Decor.PropertyEdit("editUserCommunity", "На basketball.ru с:", user.Get(BasketballUserType.CommunityMember)), Decor.Button("Сохранить") .Event("user_edit_save", "userContainer", delegate(JsonData json) { string name = json.GetText("editUserName"); string email = json.GetText("editUserEmail"); string country = json.GetText("editUserCountry"); string city = json.GetText("editUserCity"); string interests = json.GetText("editUserInterests"); string aboutMe = json.GetText("editUserAboutMe"); string community = json.GetText("editUserCommunity"); WebOperation operation = state.Operation; if (!operation.Validate(email, "Не задана электронная почта")) { return; } if (!operation.Validate(!email.Contains("@"), "Некорректный адрес электронной почты")) { return; } if (!operation.Validate(name, "Не задано имя")) { return; } LightObject editUser = DataBox.LoadObject(context.UserConnection, UserType.User, user.Id); editUser.Set(UserType.FirstName, name); editUser.Set(UserType.Email, email); editUser.Set(BasketballUserType.Country, country); editUser.Set(BasketballUserType.City, city); editUser.Set(BasketballUserType.Interests, interests); editUser.Set(BasketballUserType.AboutMe, aboutMe); editUser.Set(BasketballUserType.CommunityMember, community); editUser.Set(ObjectType.ActTill, DateTime.UtcNow); editUser.Box.Update(); context.UserStorage.Update(); state.BlockHint = ""; } ) ).EditContainer("userContainer")); }
static IHtmlControl GetCorrespondenceHeader(SiteState state, LightObject user, LightObject collocutor) { return(new HPanel( new HPanel( new HLink(UrlHlp.ShopUrl("dialog"), new HLabel("Назад", std.BeforeAwesome(@"\f104", 8).FontSize(26).FontBold(false).VAlign(-4) ).Color(Decor.minorColor).FontBold() ) ).InlineBlock().PositionAbsolute().Left(5).Top(10), new HPanel( new HLink(UrlHlp.ShopUrl("user", collocutor?.Id), collocutor?.Get(UserType.Login) ).FontBold(), new HLabel(collocutor?.Get(UserType.FirstName)).Block() ).Padding(7, 5, 10, 5), new HPanel( new HLink(UrlHlp.ShopUrl("user", collocutor?.Id), ViewUserHlp.AvatarBlock(collocutor).Size(32, 32) ) ).PositionAbsolute().Right(5).Top(5) ).PositionRelative().Align(null).BorderBottom(Decor.buttonBorder) .PaddingLeft(50).PaddingRight(50)); }
protected void Application_BeginRequest(object sender, EventArgs e) { requestCount++; string path = (this.Context.Request.Path ?? "").ToLower(); LightObject redirect = SiteContext.Default.Store.Redirects.Find(path); if (redirect != null) { Context.Response.Status = "301 Moved Permanently"; Context.Response.StatusCode = 301; Context.Response.AddHeader("Location", redirect.Get(RedirectType.To)); return; } }
static IHtmlControl GetAdminPanel(LightObject user) { bool isModerator = user.Get(BasketballUserType.IsModerator); return(new HPanel( Decor.Button(isModerator ? "Лишить прав модератора" : "Сделать модератором") .Event("moderator_rights", "", delegate { LightObject editUser = DataBox.LoadObject(context.UserConnection, UserType.User, user.Id); editUser.Set(BasketballUserType.IsModerator, !isModerator); editUser.Box.Update(); context.UserStorage.Update(); } ) )); }
public static IHtmlControl GetForumView(SiteState state, LightObject currentUser, LightSection forum) { return(new HPanel( Decor.Title("Форумы").MarginBottom(15), new HGrid <LightSection>(forum.Subsections, delegate(LightSection subSection) { TopicStorage lastTopic = GetLastTopicForForumSection(subSection); RowLink lastMessage = lastTopic == null ? null : _.Last(lastTopic.MessageLink.AllRows); LightObject lastUser = FindUserForMessage(lastMessage); return new HPanel( new HPanel( new HLink(UrlHlp.ShopUrl("page", subSection.Id), subSection.Get(SectionType.Title) ).FontBold() ).RelativeWidth(50).PaddingLeft(5).VAlign(true).PaddingTop(15) .MediaTablet(new HStyle().Block().Width("auto")), new HPanel( new HPanel( new HLink(UrlHlp.ShopUrl("topic", lastTopic?.TopicId), lastTopic?.Topic.Get(TopicType.Title) ) ).MarginTop(7).MarginBottom(3), new HPanel( new HLink(UrlHlp.ShopUrl("user", lastUser?.Id), lastUser?.Get(UserType.Login) ), new HLabel( lastMessage?.Get(MessageType.CreateTime).ToLocalTime().ToString(Decor.timeFormat) ).MarginLeft(7).MarginRight(7), new HLink( string.Format("{0}?page=last#bottom", UrlHlp.ShopUrl("topic", lastTopic?.TopicId)), new HImage("/images/full.gif") ).Hide(lastMessage == null) ).MarginBottom(7) ).RelativeWidth(50).Padding(0, 5).Height(45).BorderLeft(Decor.columnBorder) .MediaTablet(new HStyle().Width("auto").Border("none")) ); }, new HRowStyle().Even(new HTone().Background(Decor.evenBackground)) ).BorderBottom(Decor.bottomBorder).MarginBottom(10), DecorEdit.AdminGroupPanel(state.EditMode, forum.Id) )); }
static IHtmlControl GetModeratorPanel(SiteState state, LightObject currentUser, TopicStorage topic, DateTime localTime) { bool isModerator = currentUser != null && currentUser.Get(BasketballUserType.IsModerator); if (!state.EditMode && !state.ModeratorMode) { return(null); } return(new HPanel( new HTextEdit("newsDate", localTime.ToString(Decor.timeFormat)) .Width(100).MarginRight(10).FontFamily("Tahoma").FontSize(12), Decor.Button("Изменить дату").Event("news_date_modify", "newsAdminContainer", delegate(JsonData json) { string dateStr = json.GetText("newsDate"); WebOperation operation = state.Operation; if (!operation.Validate(dateStr, "Дата не задана")) { return; } DateTime editDate; if (!operation.Validate(!DateTime.TryParse(dateStr, out editDate), "Неверный формат даты")) { return; } LightObject editNews = DataBox.LoadObject(context.FabricConnection, NewsType.News, topic.TopicId); editNews.Set(ObjectType.ActFrom, editDate.ToUniversalTime()); editNews.Set(ObjectType.ActTill, DateTime.UtcNow); editNews.Box.Update(); context.UpdateNews(); context.NewsStorages.ForTopic(topic.TopicId).UpdateTopic(); } ) ).EditContainer("newsAdminContainer")); }
static IHtmlControl GetArticleEditPanel(SiteState state, TopicStorage topic) { LightObject article = topic.Topic; string blockHint = string.Format("article_edit_{0}", article.Id); IHtmlControl redoPanel = null; if (state.BlockHint == blockHint) { IHtmlControl deletePanel = null; if (state.ModeratorMode) { deletePanel = ViewNewsHlp.DeleteTopicPanel(state, topic); } redoPanel = new HPanel( deletePanel, new HPanel( Decor.PropertyEdit("editArticleTitle", "Заголовок статьи", article.Get(NewsType.Title)), new HPanel( new HLabel("Аннотация").FontBold(), new HTextArea("editArticleAnnotation", article.Get(NewsType.Annotation)) .Width("100%").Height("4em").MarginBottom(5) ), new HPanel( new HInputCheck( "editArticleWideContent", article.Get(ArticleType.WideContent), new HAfter().Content("Таблицы шире колонки статьи").MarginLeft(18).MarginBottom(1) ).NoWrap() ).MarginBottom(5), HtmlHlp.CKEditorCreate("editArticleText", article.Get(NewsType.Text), "300px", true), Decor.PropertyEdit("editArticleAuthor", "Автор", article.Get(ArticleType.Author)), Decor.PropertyEdit("editArticleOriginName", "Источник (без префикса http://)", article.Get(NewsType.OriginName)), Decor.PropertyEdit("editArticleOriginUrl", "Ссылка (с префиксом http://)", article.Get(NewsType.OriginUrl)), Decor.Button("Сохранить статью").CKEditorOnUpdateAll().MarginTop(10).MarginBottom(10) .Event("save_article_edit", "editArticleData", delegate(JsonData json) { string title = json.GetText("editArticleTitle"); string annotation = json.GetText("editArticleAnnotation"); bool wideContent = json.GetBool("editArticleWideContent"); string text = json.GetText("editArticleText"); string author = json.GetText("editArticleAuthor"); string originName = json.GetText("editArticleOriginName"); string originUrl = json.GetText("editArticleOriginUrl"); WebOperation operation = state.Operation; if (!operation.Validate(title, "Не задан заголовок")) { return; } if (!operation.Validate(text, "Не задан текст")) { return; } LightObject editNews = DataBox.LoadObject(context.FabricConnection, ArticleType.Article, article.Id); editNews.SetWithoutCheck(NewsType.Title, title); editNews.Set(ArticleType.WideContent, wideContent); editNews.Set(NewsType.Annotation, annotation); editNews.Set(NewsType.Text, text); editNews.Set(ArticleType.Author, author); editNews.Set(NewsType.OriginName, originName); editNews.Set(NewsType.OriginUrl, originUrl); editNews.Set(ObjectType.ActTill, DateTime.UtcNow); editNews.Box.Update(); context.UpdateArticles(); context.ArticleStorages.ForTopic(article.Id).UpdateTopic(); state.BlockHint = ""; }, article.Id ) ).EditContainer("editArticleData"), new HPanel( EditElementHlp.GetImageThumb(article.Id) ), new HPanel( EditElementHlp.GetDescriptionImagesPanel(state.Option, article.Id) ) ).Padding(5, 10).MarginTop(10).Background(Decor.pageBackground); } return(new HPanel( Decor.Button("Редактировать") .Event("article_edit", "", delegate { state.SetBlockHint(blockHint); } ), redoPanel ).MarginTop(5)); }
public static IHtmlControl GetForumSectionView(SiteState state, LightObject currentUser, LightSection section) { LightHead[] topics = context.Forum.ForSection(section.Id).Topics; IHtmlControl addPanel = null; if (currentUser != null) { addPanel = GetTopicAddPanel(state, currentUser, section); } return(new HPanel( Decor.Title(section.Get(SectionType.Title)).MarginBottom(15), new HPanel( new HLink("/forum", "Форумы") ).MarginBottom(25), //new HPanel( // new HLink("/forum", "Форумы"), // ArrowElement(), // new HLabel(section.Get(SectionType.Title)) //).MarginBottom(10), addPanel, new HGrid <LightHead>(topics, delegate(LightHead topic) { TopicStorage topicStorage = context.Forum.TopicsStorages.ForTopic(topic.Id); //int publisherId = topicStorage.Topic.Get(TopicType.PublisherId); //LightObject user = context.UserStorage.FindUser(publisherId); RowLink lastMessage = _.Last(topicStorage.MessageLink.AllRows); LightObject lastUser = FindUserForMessage(lastMessage); return new HPanel( new HPanel( new HLink(string.Format("{0}?page=last", UrlHlp.ShopUrl("topic", topic.Id)), topic.Get(TopicType.Title) ).FontBold() ).RelativeWidth(55).Padding(8, 5, 9, 5).BorderRight(Decor.columnBorder) .MediaTablet(new HStyle().Block().Width("auto")), //new HPanel( // new HLink(UrlHlp.ShopUrl("user", publisherId), // user?.Get(UserType.Login) // ).FontBold() //).Align(null), new HPanel( new HLabel(topicStorage.MessageLink.AllRows.Length) ).Align(null).RelativeWidth(10).PaddingTop(8).PaddingBottom(9).BorderRight(Decor.columnBorder) .MediaTablet(new HStyle().Width(50).PaddingTop(0)), new HPanel( new HLink(UrlHlp.ShopUrl("user", lastUser?.Id), lastUser?.Get(UserType.Login) ), new HLabel( lastMessage?.Get(MessageType.CreateTime).ToLocalTime().ToString(Decor.timeFormat) ).MarginLeft(7).MarginRight(7), new HLink( string.Format("{0}?page=last#bottom", UrlHlp.ShopUrl("topic", topic.Id)), new HImage("/images/full.gif") ) ).RelativeWidth(35).Padding(0, 5) .MediaTablet(new HStyle().Width("auto")) ); }, new HRowStyle().Even(new HTone().Background(Decor.evenBackground)) ).BorderBottom(Decor.bottomBorder).MarginBottom(10) )); }
public static string GetDescriptionForNews(LightObject topic) { try { string text = topic.Get(NewsType.Text); if (StringHlp.IsEmpty(text)) { return(""); } int[] endIndices = new int[] { text.IndexOf("</p>"), text.IndexOf("</h3>"), text.IndexOf("<br") }; int endIndex = -1; foreach (int index in endIndices) { if (index < 0) { continue; } if (endIndex < 0 || index < endIndex) { endIndex = index; } } //if (topic.Id == 102001) //{ // Logger.AddMessage("EndIndices: {0}, {1}, {2}, {3}", text, endIndices[0], endIndices[1], endIndices[2]); //} if (endIndex < 0) { return(""); } StringBuilder builder = new StringBuilder(); string rawDescription = text.Substring(0, endIndex); bool openBracket = false; int currentIndex = 0; while (currentIndex < rawDescription.Length) { int startIndex = currentIndex; if (openBracket) { openBracket = false; currentIndex = rawDescription.IndexOf('>', currentIndex) + 1; if (currentIndex == 0) { break; } continue; } openBracket = true; currentIndex = rawDescription.IndexOf('<', currentIndex); if (currentIndex < 0) { currentIndex = rawDescription.Length; } builder.Append(rawDescription.Substring(startIndex, currentIndex - startIndex).Trim('\n')); continue; } string description = builder.ToString(); return(description.Replace("«", "«").Replace("»", "»") .Replace(""", "").Replace(" ", " ")); } catch (Exception ex) { Logger.WriteException(ex, "TopicId: {0}", topic?.Id); return(""); } //return text.Substring(startIndex + 3, endIndex - startIndex - 3).Replace("«", "«").Replace("»", "»"); }
public static IHtmlControl GetAddPanel(BasketballContext context, SiteState state, LightObject user, LightObject collocutor, bool sendFromUserView) { if (user == null) { return(null); } if (user.Id == collocutor.Id) { return(null); } IHtmlControl editPanel = null; if (state.BlockHint == "messageAdd") { string commentValue = BasketballHlp.AddCommentFromCookie(); editPanel = new HPanel( new HTextArea("messageContent", commentValue).BoxSizing().Width("100%") .Height("10em").MarginTop(5).MarginBottom(5), Decor.Button("отправить") .OnClick(BasketballHlp.AddCommentToCookieScript("messageContent")) .Event("message_add_save", "messageData", delegate(JsonData json) { string content = json.GetText("messageContent"); if (StringHlp.IsEmpty(content)) { return; } DialogueHlp.SendMessage(context, user.Id, collocutor.Id, content); state.BlockHint = ""; BasketballHlp.ResetAddComment(); if (sendFromUserView) { state.Operation.Message = "Сообщение успешно отправлено"; } } ), new HElementControl( h.Script(h.type("text/javascript"), "$('.messageContent').focus();"), "" ) ).EditContainer("messageData"); } HButton moderatorButton = null; HPanel moderatorPanel = null; if (!sendFromUserView) { moderatorButton = new HButton("", std.BeforeAwesome(@"\f1e2", 0) ).PositionAbsolute().Right(5).Top(0) .Title("Модерирование личных сообщений").FontSize(14) .Color(state.BlockHint == correspondenceModeration ? Decor.redColor : Decor.disabledColor) .Event("correspondence_moderation_set", "", delegate { state.SetBlockHint(correspondenceModeration); }); if (state.BlockHint == correspondenceModeration) { bool lockedCollocutor = user.Get(BasketballUserType.LockedUserIds, collocutor.Id); moderatorPanel = new HPanel( Decor.ButtonMidi(!lockedCollocutor ? "Заблокировать собеседника" : "Разблокировать собеседника") .Event("collocutor_locked", "", delegate { LightObject editUser = DataBox.LoadObject(context.UserConnection, UserType.User, user.Id); editUser.Set(BasketballUserType.LockedUserIds, collocutor.Id, !lockedCollocutor); editUser.Box.Update(); context.UserStorage.Update(); }), new HSpoiler(Decor.ButtonMidi("Удаление переписки").Block().FontBold(false), new HPanel( Decor.ButtonMidi("Удалить? (без подтверждения)") .MarginTop(5).MarginLeft(10) .Event("correspondence_delete", "", delegate { context.ForumConnection.GetScalar("", "Delete From correspondence Where user_id = @userId and collocutor_id = @collocutorId", new DbParameter("userId", user.Id), new DbParameter("collocutorId", collocutor.Id) ); context.ForumConnection.GetScalar("", "Delete From dialogue Where user_id = @userId and collocutor_id = @collocutorId", new DbParameter("userId", user.Id), new DbParameter("collocutorId", collocutor.Id) ); context.UpdateUnreadDialogs(); }) ) ).MarginTop(10) ).MarginTop(10); } } bool locked = user.Get(BasketballUserType.LockedUserIds, collocutor.Id) || collocutor.Get(BasketballUserType.LockedUserIds, user.Id); return(new HPanel( new HPanel( Decor.ButtonMidi("Написать сообщение") .Hide(locked) .Event("message_add", "", delegate { state.SetBlockHint("messageAdd"); } ), new HLabel("Вы не можете отправить сообщение этому пользователю").Hide(!locked) .MarginLeft(10).Color(Decor.subtitleColor), moderatorButton ).PositionRelative(), editPanel, moderatorPanel ).MarginTop(10).MarginBottom(10)); }
static HElement Page(HttpContext httpContext, SiteState state, string kind, int?id) { UserHlp.DirectAuthorization(httpContext, SiteContext.Default.SiteSettings); LightObject currentUser = UserHlp.GetCurrentUser(httpContext, SiteContext.Default.UserStorage); if (currentUser != null && (BasketballHlp.IsBanned(currentUser) || currentUser.Get(UserType.NotConfirmed))) { currentUser = null; httpContext.Logout(); } state.EditMode = httpContext.IsInRole("edit"); state.SeoMode = httpContext.IsInRole("seo"); state.UserMode = currentUser != null; int[] foundTagIds = state.Option.Get(OptionType.FoundTagIds); if (foundTagIds != null && foundTagIds.Length > 0) { kind = "search"; id = null; } IHtmlControl adminSectionPanel = null; if (kind == "page") { LightSection section = store.Sections.FindSection(id); adminSectionPanel = DecorEdit.AdminSectionPanel( state.EditMode, state.SeoMode, kind, section, false ); } IHtmlControl dialogBox = null; if (!StringHlp.IsEmpty(state.Operation.Message)) { dialogBox = DecorEdit.GetDialogBox(state); } bool isForum = kind == "topic"; if (kind == "page") { LightSection pageSection = store.Sections.FindSection(id); string designKind = pageSection.Get(SectionType.DesignKind); if (pageSection != null && (designKind == "forum" || designKind == "forumSection")) { isForum = true; } } string title = ""; string description = ""; SchemaOrg schema = null; bool wideContent; IHtmlControl centerView = ViewHlp.GetCenter(httpContext, state, currentUser, kind, id, out title, out description, out schema, out wideContent ); if (centerView == null && StringHlp.IsEmpty(state.RedirectUrl)) { return(null); } BasketballContext context = (BasketballContext)SiteContext.Default; try { if (currentUser != null && kind == "dialog" && id != null) { if (context.UnreadDialogLink.FindRow(DialogReadType.UnreadByUserId, currentUser.Id) != null) { DialogueHlp.MarkReadCorrespondence(context.ForumConnection, currentUser.Id, id.Value); context.UpdateUnreadDialogs(); } } } catch (Exception ex) { Logger.WriteException(ex); } HEventPanel mainPanel = new HEventPanel( new HPanel( new HAnchor("top"), DecorEdit.AdminMainPanel(SiteContext.Default.SiteSettings, httpContext), ViewHeaderHlp.GetHeader(httpContext, state, currentUser, kind, id, isForum), adminSectionPanel, new HPanel( new HPanel( centerView, new HPanel( ViewRightColumnHlp.GetRightColumnView(state, isForum).InlineBlock().MarginRight(15) .MediaLaptop(new HStyle().Block().MarginRight(0)) .MediaTablet(new HStyle().InlineBlock().MarginRight(15)) .MediaSmartfon(new HStyle().Width("100%").MarginRight(0)), ViewRightColumnHlp.GetReclameColumnView(state).InlineBlock().VAlign(true) ).Hide(wideContent).PositionAbsolute().Top(13).Right(15) .MediaTablet(new HStyle().Position("static").MarginTop(15)) //.MediaSmartfon(new HStyle().Width("100%")) ).PositionRelative().Align(true) .Padding(15).PaddingRight(485) .WidthLimit("", kind == "" ? "727px" : "892px") .MediaLaptop(new HStyle().PaddingRight(250)) .MediaTablet(new HStyle().PaddingRight(15)) .MediaSmartfon(new HStyle().PaddingLeft(5).PaddingRight(5)) ).MarginLeft(12).MarginRight(12).PaddingBottom(160).Background(Decor.panelBackground) .BoxSizing().HeightLimit("900px", "") .MediaTablet(new HStyle().MarginLeft(0).MarginRight(0)) ), ViewHlp.GetFooterView(kind == ""), dialogBox //popupPanel ).Width("100%").BoxSizing().Align(null).Background(Decor.pageBackground) .Padding(1) .FontFamily("Tahoma").FontSize(12); //.Color(Decor.textColor); if (!StringHlp.IsEmpty(state.PopupHint) || dialogBox != null) { mainPanel.OnClick(";"); mainPanel.Event("popup_reset", "", delegate { state.PopupHint = ""; state.Operation.Reset(); }); } StringBuilder css = new StringBuilder(); std.AddStyleForFileUploaderButtons(css); HElement mainElement = mainPanel.ToHtml("main", css); SiteSettings settings = SiteContext.Default.SiteSettings; //string blockHint = state.BlockHint; //bool withCkeditor = false; //if (!StringHlp.IsEmpty(blockHint)) //{ // withCkeditor = blockHint == "news_add" || blockHint.StartsWith("article_edit_") || // blockHint.StartsWith("news_edit_"); //} //bool withFileuploader = kind == "user" || withCkeditor; return(h.Html ( h.Head( h.Element("title", title), h.MetaDescription(description), h.LinkCss(UrlHlp.FileUrl("/css/static.css")), h.LinkShortcutIcon("/images/favicon.ico"), h.Meta("viewport", "width=device-width"), //h.LinkCss("/css/font-awesome.css"), //h.LinkCss("/css/fileuploader.css"), h.LinkScript("/scripts/fileuploader.js"), h.LinkScript("/ckeditor/ckeditor.js?v=4113"), HtmlHlp.CKEditorUpdateAll(), h.Raw(store.SeoWidgets.WidgetsCode), HtmlHlp.SchemaOrg(schema), h.OpenGraph("type", "website"), h.OpenGraph("title", title), h.OpenGraph("url", description), h.OpenGraph("site_name", settings.Organization), h.OpenGraph("image", settings.FullUrl("/images/logo_mini.jpg")) ), h.Body( h.Css(h.Raw(css.ToString())), h.Div( HtmlHlp.RedirectScript(state.RedirectUrl) ), //h.Div( // withFileuploader ? h.LinkScript("/scripts/fileuploader.js") : null, // withCkeditor ? h.LinkScript("/ckeditor/ckeditor.js") : null, // withCkeditor ? HtmlHlp.CKEditorUpdateAll() : null //), mainElement //withEditor ? h.Script(h.type("text/javascript"), "console.log('withScript');") : null, //!withFileuploader && withEditor ? h.LinkScript("/scripts/fileuploader.js") : null, //withEditor ? h.LinkScript("/ckeditor/ckeditor.js") : null, //withEditor ? HtmlHlp.CKEditorUpdateAll() : null //HtmlHlp.SchemaOrg(schema), ) )); }
public static IHtmlControl GetCenter(HttpContext httpContext, SiteState state, LightObject currentUser, string kind, int?id, out string title, out string description, out SchemaOrg schema, out bool wideContent) { title = ""; description = ""; schema = null; wideContent = false; SiteSettings settings = context.SiteSettings; switch (kind) { case "": { title = store.SEO.Get(SEOType.MainTitle); description = store.SEO.Get(SEOType.MainDescription); LightSection main = store.Sections.FindMenu("main"); return(ViewHlp.GetMainView(state, currentUser)); } case "news": { if (!context.News.ObjectById.Exist(id)) { return(null); } TopicStorage topicStorage = context.NewsStorages.ForTopic(id ?? 0); LightKin topic = topicStorage.Topic; //string tagsDisplay; IHtmlControl view = ViewNewsHlp.GetNewsView(state, currentUser, topicStorage, out description); title = topic.Get(NewsType.Title); //string postfix = ""; //if (!StringHlp.IsEmpty(tagsDisplay)) // postfix = ". "; //description = string.Format("{0}{1}Живое обсуждение баскетбольных событий на basketball.ru.com", // tagsDisplay, postfix //); string logoUrl = settings.FullUrl("/images/logo.gif"); schema = new SchemaOrg("NewsArticle", settings.FullUrl(UrlHlp.ShopUrl("news", id)), title, new string[] { logoUrl }, topic.Get(ObjectType.ActFrom), topic.Get(ObjectType.ActTill), topic.Get(TopicType.OriginName), settings.Organization, logoUrl, description ); return(view); } case "article": { if (!context.Articles.ObjectById.Exist(id)) { return(null); } TopicStorage topicStorage = context.ArticleStorages.ForTopic(id ?? 0); LightKin topic = topicStorage.Topic; title = topic.Get(ArticleType.Title); description = topic.Get(ArticleType.Annotation); string logoUrl = settings.FullUrl("/images/logo.gif"); schema = new SchemaOrg("Article", settings.FullUrl(UrlHlp.ShopUrl("article", id)), title, new string[] { logoUrl }, topic.Get(ObjectType.ActFrom), topic.Get(ObjectType.ActTill), topic.Get(TopicType.OriginName), settings.Organization, logoUrl, description ); wideContent = topic.Get(ArticleType.WideContent); return(ViewArticleHlp.GetArticleView(state, currentUser, topicStorage)); } case "topic": { TopicStorage topic = context.Forum.TopicsStorages.ForTopic(id ?? 0); title = topic.Topic.Get(TopicType.Title); int pageNumber = 0; { string pageArg = httpContext.Get("page"); int messageCount = topic.MessageLink.AllRows.Length; if (pageArg == "last" && messageCount > 0) { pageNumber = BinaryHlp.RoundUp(messageCount, ViewForumHlp.forumMessageCountOnPage) - 1; } else { pageNumber = ConvertHlp.ToInt(pageArg) ?? 0; } } return(ViewForumHlp.GetTopicView(state, currentUser, topic, pageNumber)); } case "tags": { int?tagId = httpContext.GetUInt("tag"); int pageNumber = httpContext.GetUInt("page") ?? 0; return(ViewNewsHlp.GetTagView(state, currentUser, tagId, pageNumber, out title, out description)); } case "search": { return(ViewNewsHlp.GetFoundTagListView(state, out title)); } case "user": { LightObject user = context.UserStorage.FindUser(id ?? -1); if (user == null) { return(null); } title = string.Format("{0} - Basketball.ru.com", user.Get(UserType.Login)); return(ViewUserHlp.GetUserView(state, currentUser, user)); } case "page": { LightSection section = store.Sections.FindSection(id); title = FabricHlp.GetSeoTitle(section, section.Get(SectionType.Title)); description = FabricHlp.GetSeoDescription(section, section.Get(SectionType.Annotation)); int pageNumber = httpContext.GetUInt("page") ?? 0; string designKind = section.Get(SectionType.DesignKind); switch (designKind) { case "news": { int[] allNewsIds = context.News.AllObjectIds; return(ViewNewsHlp.GetNewsListView(state, currentUser, pageNumber)); } case "articles": return(ViewArticleHlp.GetArticleListView(state, currentUser, pageNumber)); case "forum": return(ViewForumHlp.GetForumView(state, currentUser, section)); case "forumSection": return(ViewForumHlp.GetForumSectionView(state, currentUser, section)); default: return(null); } } case "dialog": { if (currentUser == null) { return(null); } if (id == null) { return(ViewDialogueHlp.GetDialogueView(state, context.ForumConnection, context.UserStorage, currentUser, out title )); } LightObject collocutor = context.UserStorage.FindUser(id.Value); if (collocutor == null) { return(null); } return(ViewDialogueHlp.GetCorrespondenceView(state, context.ForumConnection, currentUser, collocutor, out title )); } case "passwordreset": title = "Восстановление пароля - basketball.ru.com"; return(ViewHlp.GetRestorePasswordView(state)); case "register": title = "Регистрация - basketball.ru.com"; return(ViewHlp.GetRegisterView(state)); case "confirmation": { title = "Подтверждение аккаунта"; int? userId = httpContext.GetUInt("id"); string hash = httpContext.Get("hash"); if (userId == null) { return(ViewUserHlp.GetMessageView( "Вам выслано письмо с кодом активации. Чтобы завершить процедуру регистрации, пройдите по ссылке, указанной в письме, и учётная запись будет активирована. Если вы не получили письмо, то попробуйте войти на сайт со своим логином и паролем. Тогда письмо будет отправлено повторно." )); } if (StringHlp.IsEmpty(hash)) { return(null); } LightObject user = context.UserStorage.FindUser(userId.Value); if (userId == null) { return(null); } if (!user.Get(UserType.NotConfirmed)) { return(ViewUserHlp.GetMessageView("Пользователь успешно активирован")); } string login = user.Get(UserType.Login); string etalon = UserHlp.CalcConfirmationCode(user.Id, login, "bbbin"); if (hash?.ToLower() != etalon?.ToLower()) { return(ViewUserHlp.GetMessageView("Неверный хэш")); } LightObject editUser = DataBox.LoadObject(context.UserConnection, UserType.User, user.Id); editUser.Set(UserType.NotConfirmed, false); editUser.Box.Update(); context.UserStorage.Update(); string xmlLogin = UserType.Login.CreateXmlIds("", login); HttpContext.Current.SetUserAndCookie(xmlLogin); state.RedirectUrl = "/"; return(new HPanel()); } } return(null); }
public static IHtmlControl GetRestorePasswordView(SiteState state) { return(new HPanel( Decor.Title("Восстановление пароля"), Decor.AuthEdit("login", "Введите логин:"), Decor.AuthEdit("email", "Или E-mail:"), new HPanel( Decor.Button("Выслать пароль на почту").Event("user_restore", "restoreData", delegate(JsonData json) { string login = json.GetText("login"); string email = json.GetText("email"); WebOperation operation = state.Operation; if (!operation.Validate(StringHlp.IsEmpty(login) && StringHlp.IsEmpty(email), "Введите логин или email")) { return; } LightObject findUser = null; if (!StringHlp.IsEmpty(login)) { string xmlLogin = UserType.Login.CreateXmlIds("", login); findUser = context.UserStorage.FindUser(xmlLogin); } else { foreach (LightObject user in context.UserStorage.All) { if (user.Get(BasketballUserType.Email) == email) { findUser = user; break; } } } if (!operation.Validate(findUser == null, "Пользователь не найден")) { return; } try { HElement answer = h.Div( h.P(string.Format("Ваш логин: {0}", findUser.Get(BasketballUserType.Login))), h.P(string.Format("Ваш пароль: {0}", findUser.Get(BasketballUserType.Password))) ); SiteSettings settings = SiteContext.Default.SiteSettings; SmtpClient smtpClient = AuthHlp.CreateSmtpClient( settings.SmtpHost, settings.SmtpPort, settings.SmtpUserName, settings.SmtpPassword); AuthHlp.SendMail(smtpClient, settings.MailFrom, findUser.Get(BasketballUserType.Email), "Восстановление пароля", answer.ToHtmlText() ); } catch (Exception ex) { Logger.WriteException(ex); operation.Validate(true, string.Format("Непредвиденная ошибка при отправке заявки: {0}", ex.Message)); return; } operation.Message = "Пароль выслан вам на почту"; } ) ) ).EditContainer("restoreData")); }
static IHtmlControl GetNewsEditPanel(SiteState state, TopicStorage topic) { LightObject news = topic.Topic; string blockHint = string.Format("news_edit_{0}", news.Id); IHtmlControl redoPanel = null; if (state.BlockHint == blockHint) { IHtmlControl deletePanel = null; if (state.ModeratorMode) { deletePanel = DeleteTopicPanel(state, topic); } if (state.Tag == null) { state.Tag = ViewTagHlp.GetTopicDisplayTags(context.Tags.TagBox, topic.Topic); } redoPanel = new HPanel( deletePanel, Decor.PropertyEdit("newsTitle", "Заголовок новости", news.Get(NewsType.Title)), new HPanel( HtmlHlp.CKEditorCreate("newsText", news.Get(NewsType.Text), "300px", true) ), ViewTagHlp.GetEditTagsPanel(state, context.Tags.TagBox, state.Tag as List <string>, false), Decor.PropertyEdit("newsOriginName", "Источник", news.Get(NewsType.OriginName)), Decor.PropertyEdit("newsOriginUrl", "Ссылка", news.Get(NewsType.OriginUrl)), Decor.Button("Изменить новость").CKEditorOnUpdateAll().MarginTop(10) .Event("save_news_edit", "editNewsData", delegate(JsonData json) { string title = json.GetText("newsTitle"); string text = json.GetText("newsText"); string originName = json.GetText("newsOriginName"); string originUrl = json.GetText("newsOriginUrl"); WebOperation operation = state.Operation; if (!operation.Validate(title, "Не задан заголовок")) { return; } if (!operation.Validate(text, "Не задан текст")) { return; } LightKin editNews = DataBox.LoadKin(context.FabricConnection, NewsType.News, news.Id); editNews.SetWithoutCheck(NewsType.Title, title); editNews.Set(NewsType.Text, text); editNews.Set(NewsType.OriginName, originName); editNews.Set(NewsType.OriginUrl, originUrl); editNews.Set(ObjectType.ActTill, DateTime.UtcNow); ViewTagHlp.SaveTags(context, state, editNews); editNews.Box.Update(); context.UpdateNews(); context.NewsStorages.ForTopic(news.Id).UpdateTopic(); state.BlockHint = ""; }, news.Id ) ).EditContainer("editNewsData") .Padding(5, 10).MarginTop(10).Background(Decor.pageBackground); } return(new HPanel( Decor.Button("Редактировать") .Event("news_edit", "", delegate { state.SetBlockHint(blockHint); } ), redoPanel ).MarginTop(10)); }
public static IHtmlControl GetCommentBlock(IDataLayer commentConnection, SiteState state, LightObject currentUser, TopicStorage topic, Dictionary <int, string> htmlRepresentByMessageId, RowLink comment) { LightObject user = context.UserStorage.FindUser(comment.Get(MessageType.UserId)); DateTime localTime = comment.Get(MessageType.CreateTime).ToLocalTime(); IHtmlControl whomBlock = GetWhomBlock(state, context.UserStorage, topic, htmlRepresentByMessageId, comment); int commentId = comment.Get(MessageType.Id); string answerHint = string.Format("answer_{0}", commentId); IHtmlControl answerBlock = null; if (currentUser != null && state.BlockHint == answerHint) { string commentValue = BasketballHlp.AddCommentFromCookie(); answerBlock = new HPanel( new HTextArea("answerContent", commentValue).Width("100%").Height("10em").MarginTop(5).MarginBottom(5), Decor.Button("отправить") .OnClick(BasketballHlp.AddCommentToCookieScript("answerContent")) .Event("save_answer", "answerContainer", delegate(JsonData json) { lock (lockObj) { string content = json.GetText("answerContent"); if (StringHlp.IsEmpty(content)) { return; } if (BasketballHlp.IsDuplicate(topic, currentUser.Id, content)) { return; } InsertMessageAndUpdate(commentConnection, topic, currentUser, commentId, content); state.BlockHint = ""; BasketballHlp.ResetAddComment(); } }, commentId ), new HElementControl( h.Script(h.type("text/javascript"), "$('.answerContent').focus();"), "" ) ).EditContainer("answerContainer"); } IHtmlControl editBlock = null; if (currentUser != null && currentUser.Id == user?.Id) { editBlock = new HPanel( ); } string redoHint = string.Format("redo_{0}", commentId); HButton redoButton = null; if (currentUser != null && currentUser.Id == user?.Id) { redoButton = Decor.ButtonMini("редактировать").Event("comment_redo", "", delegate(JsonData json) { state.SetBlockHint(redoHint); }, commentId ); } IHtmlControl redoBlock = null; if (currentUser != null && state.BlockHint == redoHint) { redoBlock = new HPanel( new HTextArea("redoContent", comment.Get(MessageType.Content)) .Width("100%").Height("10em").MarginTop(5).MarginBottom(5), Decor.Button("изменить").Event("save_redo", "redoContainer", delegate(JsonData json) { string content = json.GetText("redoContent"); if (StringHlp.IsEmpty(content)) { return; } //content = BasketballHlp.PreSaveComment(content); commentConnection.GetScalar("", "Update message Set content=@content, modify_time=@time Where id=@id", new DbParameter("content", content), new DbParameter("time", DateTime.UtcNow), new DbParameter("id", commentId) ); topic.UpdateMessages(); state.BlockHint = ""; }, commentId ), new HElementControl( h.Script(h.type("text/javascript"), "$('.redoContent').focus();"), "" ) ).EditContainer("redoContainer"); } IHtmlControl deleteElement = null; if (state.ModeratorMode) { deleteElement = new HButton("", std.BeforeAwesome(@"\f00d", 0) ).MarginLeft(5).Color(Decor.redColor).Title("удалить комментарий") .Event("delete_comment", "", delegate { MessageHlp.DeleteMessage(commentConnection, commentId); topic.UpdateMessages(); context.UpdateLastComments(commentConnection == context.ForumConnection); }, commentId ); } string topicType = topic.Topic.Get(ObjectType.TypeId) == NewsType.News ? "news" : "article"; string anchor = string.Format("reply{0}", commentId); return(new HXPanel( new HAnchor(anchor), new HPanel( new HLink(UrlHlp.ShopUrl("user", user?.Id), user?.Get(UserType.Login) ).FontBold(), new HLabel(user?.Get(UserType.FirstName)).Block() .MediaTablet(new HStyle().InlineBlock().MarginLeft(5)), new HPanel( ViewUserHlp.AvatarBlock(user) ).MarginTop(5) .MediaTablet(new HStyle().Display("none")) ).BoxSizing().WidthLimit("100px", "").Padding(7, 5, 10, 5) .MediaTablet(new HStyle().Block().PaddingBottom(0).PaddingRight(110)), new HPanel( new HPanel( new HLabel(localTime.ToString("dd.MM.yyyy HH:mm")).MarginRight(5) .MediaTablet(new HStyle().MarginBottom(5)), new HLink(string.Format("/{0}/{1}#{2}", topicType, topic.TopicId, anchor), "#").TextDecoration("none") .Hide(commentConnection == context.ForumConnection), deleteElement ).Align(false).FontSize("90%").Color(Decor.minorColor), whomBlock, new HTextView( DictionaryHlp.GetValueOrDefault(htmlRepresentByMessageId, commentId) ).PaddingBottom(15).MarginBottom(5).BorderBottom("1px solid silver"), new HPanel( Decor.ButtonMini("ответить").Event("comment_answer", "", delegate { state.SetBlockHint(answerHint); }, commentId ), redoButton ).Hide(currentUser == null), answerBlock, redoBlock ).BoxSizing().Width("100%").BorderLeft(Decor.columnBorder).Padding(7, 5, 5, 5) .MediaTablet(new HStyle().Block().MarginTop(-19)) ).BorderTop("2px solid #fff")); }
static IHtmlControl GetMessageBlock(IDataLayer forumConnection, SiteState state, LightObject user, LightObject collocutor, RowLink message, int messageIndex) { int messageId = message.Get(CorrespondenceType.Id); LightObject author = message.Get(CorrespondenceType.Inbox) ? collocutor : user; DateTime localTime = message.Get(CorrespondenceType.CreateTime).ToLocalTime(); IHtmlControl deleteElement = null; if (state.BlockHint == "correspondence_moderation") { deleteElement = new HButton("", std.BeforeAwesome(@"\f00d", 0) ).MarginLeft(5).Color(Decor.redColor).Title("удалить комментарий") .Event("delete_message", "", delegate { forumConnection.GetScalar("", "Delete From correspondence Where id = @messageId", new DbParameter("messageId", messageId) ); }, messageId ); } IHtmlControl messageBlock = new HPanel("", new IHtmlControl[] { new HPanel( ViewUserHlp.AvatarBlock(author) ).PositionAbsolute().Left(0).Top(0).Padding(7, 5, 10, 5), new HPanel( new HPanel( //new HLabel(author.Get(UserType.Login)).FontBold(), new HLink(UrlHlp.ShopUrl("user", author.Id), author.Get(UserType.FirstName) ).FontBold(), //new HLabel(author.Get(UserType.FirstName)).MarginLeft(5), new HPanel( new HLabel(localTime.ToString("dd.MM.yyyy HH:mm")).FontSize("90%").Color(Decor.minorColor), deleteElement ).InlineBlock().PositionAbsolute().Right(5) ).PositionRelative().MarginBottom(6), new HTextView( BasketballHlp.PreViewComment(message.Get(CorrespondenceType.Content)) ).Block().PaddingBottom(15).BorderBottom("1px solid silver").MarginBottom(5) ).BoxSizing().Width("100%").BorderLeft(Decor.columnBorder).Padding(7, 5, 5, 5) } ).PositionRelative().PaddingLeft(64).BorderTop("2px solid #fff").Color(Decor.textColor); //IHtmlControl messageBlock = new HXPanel( // new HPanel( // new HLink(UrlHlp.ShopUrl("user", author.Id), // author.Get(UserType.Login) // ).FontBold(), // new HLabel(author.Get(UserType.FirstName)).Block() // .MediaTablet(new HStyle().InlineBlock().MarginLeft(5)), // new HPanel( // ViewUserHlp.AvatarBlock(author) // ).MarginTop(5) // .MediaTablet(new HStyle().Display("none")) // ).BoxSizing().WidthLimit("100px", "").Padding(7, 5, 10, 5) // .MediaTablet(new HStyle().Block().PaddingBottom(0).PaddingRight(110)), // new HPanel( // new HPanel( // new HLabel(localTime.ToString("dd.MM.yyyy HH:mm")).MarginRight(5) // .MediaTablet(new HStyle().MarginBottom(5)), // deleteElement // ).Align(false).FontSize("90%").Color(Decor.minorColor), // new HTextView( // BasketballHlp.PreViewComment(message.Get(CorrespondenceType.Content)) // ).PaddingBottom(15).MarginBottom(5).BorderBottom("1px solid silver") // ).BoxSizing().Width("100%").BorderLeft(Decor.columnBorder).Padding(7, 5, 5, 5) // .MediaTablet(new HStyle().Block().MarginTop(-19)) //).BorderTop("2px solid #fff"); if (messageIndex % 2 != 0) { messageBlock.Background(Decor.evenBackground); } return(messageBlock); }
public static IHtmlControl GetUserView(SiteState state, LightObject currentUser, LightObject user) { string communityMember = user.Get(BasketballUserType.CommunityMember); bool isModerator = user.Get(BasketballUserType.IsModerator); DateTime?bannedUntil = user.Get(BasketballUserType.BannedUntil); DateTime?noRedactorUntil = user.Get(BasketballUserType.NotRedactorUntil); string bannedUntilStr = ""; if (bannedUntil != null && bannedUntil > DateTime.UtcNow) { bannedUntilStr = bannedUntil.Value.ToLocalTime().ToString(Decor.timeFormat); } string noRedactorUntilStr = ""; if (noRedactorUntil != null && noRedactorUntil > DateTime.UtcNow) { noRedactorUntilStr = noRedactorUntil.Value.ToLocalTime().ToString(Decor.timeFormat); } IHtmlControl[] rows = new IHtmlControl[] { UserField("Имя", ValueLabel(user.Get(UserType.FirstName)).FontBold()), UserField("Дата регистрации", ValueLabel(user.Get(ObjectType.ActFrom)?.ToLocalTime().ToString(Decor.timeFormat)) ), !StringHlp.IsEmpty(communityMember) ? UserField("На basketball.ru c", ValueLabel(communityMember)) : null, UserField("Страна", ValueLabel(user.Get(BasketballUserType.Country))), UserField("Город", ValueLabel(user.Get(BasketballUserType.City))), UserField("Интересы", ValueLabel(user.Get(BasketballUserType.Interests))), UserField("О себе", ValueLabel(user.Get(BasketballUserType.AboutMe))), UserField("Статус", ValueLabel("Модератор").FontBold()).Hide(!isModerator), UserField("Заблокирован до", ValueLabel(bannedUntilStr).FontBold()).Hide(StringHlp.IsEmpty(bannedUntilStr)), UserField("Не добавляет до", ValueLabel(noRedactorUntilStr).FontBold()).Hide(StringHlp.IsEmpty(noRedactorUntilStr)) }; int i = -1; foreach (IHtmlControl row in rows) { if (row == null) { continue; } ++i; if (i % 2 == 0) { row.Background(Decor.pageBackground); } } IHtmlControl redoAvatarPanel = null; IHtmlControl editPanel = null; if (currentUser != null && currentUser.Id == user.Id) { redoAvatarPanel = GetRedoAvatarPanel(user); editPanel = GetUserEditPanel(state, user); } IHtmlControl adminPanel = null; if (state.EditMode) { adminPanel = GetAdminPanel(user); } IHtmlControl moderatorPanel = null; if (state.ModeratorMode) { moderatorPanel = GetModeratorPanel(user); } return(new HPanel( Decor.Title(user.Get(UserType.Login)), new HPanel( AvatarBlock(user).PositionAbsolute().Left(12).Top("50%").MarginTop(-25), new HPanel( rows ).Padding(1).Border("1px solid #eeeeee") ).PositionRelative().BoxSizing().WidthLimit("", "480px").PaddingLeft(74), ViewDialogueHlp.GetAddPanel(context, state, currentUser, user, true), redoAvatarPanel, editPanel, adminPanel, moderatorPanel )); }
public static IHtmlControl GetAuthBlock(HttpContext httpContext, SiteState state, LightObject currentUser) { HImage keyImage = new HImage(UrlHlp.ImageUrl("key.gif")).MarginRight(8).VAlign(false); if (currentUser == null) { return(new HPanel( keyImage, new HTextEdit("authLogin").Width(90).MarginRight(5), new HPasswordEdit("authPassword").Width(90).MarginRight(5), Decor.Button("Войти").Event("user_login", "loginData", delegate(JsonData json) { string login = json.GetText("authLogin"); string password = json.GetText("authPassword"); WebOperation operation = state.Operation; if (!operation.Validate(login, "Введите логин")) { return; } if (!operation.Validate(password, "Введите пароль")) { return; } string xmlLogin = UserType.Login.CreateXmlIds("", login); LightObject user = SiteContext.Default.UserStorage.FindUser(xmlLogin); if (!operation.Validate(user == null, "Логин не найден")) { return; } if (!operation.Validate(user.Get(UserType.Password) != password, "Неверный пароль")) { return; } if (!operation.Validate(user.Get(UserType.NotConfirmed), "Ваш аккаунт не подтвержден через электронную почту. Письмо для подтверждения выслано вам на почту еще раз.")) { try { BasketballHlp.SendRegistrationConfirmation(user.Id, login, user.Get(UserType.Email)); } catch (Exception ex) { Logger.WriteException(ex); } return; } if (!operation.Validate(BasketballHlp.IsBanned(user), string.Format("Вы заблокированы до {0} и не можете войти на сайт", user.Get(BasketballUserType.BannedUntil)?.ToLocalTime().ToString("dd-MM-yyyy HH:mm") ) )) { return; } httpContext.SetUserAndCookie(xmlLogin); } ), new HPanel( new HPanel(new HLink("/register", "Регистрация")) .MediaSmartfon(new HStyle().InlineBlock()), new HPanel(new HLink("/passwordreset", "Забыли пароль")) .MediaSmartfon(new HStyle().InlineBlock().MarginLeft(10)) ).Align(true).InlineBlock().MarginLeft(5).FontSize("80%").VAlign(false) .MediaSmartfon(new HStyle().Block().MarginLeft(18)) ).EditContainer("loginData").PositionRelative().InlineBlock().MarginTop(10) .MediaTablet(new HStyle().MarginTop(5)) .MediaSmartfon(new HStyle().MarginTop(0))); } HButton moderatorButton = null; if (currentUser.Get(BasketballUserType.IsModerator)) { moderatorButton = new HButton("", std.BeforeAwesome(@"\f1e2", 0) ).Title("Режим модерирования").MarginRight(3).MarginLeft(5).FontSize(14) .Color(state.ModeratorMode ? Decor.redColor : Decor.disabledColor) .Event("moderator_mode_set", "", delegate { state.ModeratorMode = !state.ModeratorMode; }); } return(new HPanel( keyImage, new HLabel("Здравствуйте,").MarginRight(5), new HLink(UrlHlp.ShopUrl("user", currentUser.Id), currentUser.Get(UserType.FirstName)).FontBold(), new HLabel("!"), moderatorButton, Decor.Button("Выйти").MarginLeft(5).Event("user_logout", "", delegate(JsonData json) { httpContext.Logout(); } ) ).InlineBlock().MarginTop(10)); }