public static IHtmlControl JumpBar(string urlWithoutPageIndex, int allItemCount, int itemCountOnPage, int pageIndex) { int pageCount = BinaryHlp.RoundUp(allItemCount, itemCountOnPage); int startIndex = Math.Max(0, pageIndex - 9); int endIndex = Math.Min(startIndex + 20, pageCount); List <IHtmlControl> items = new List <IHtmlControl>(); if (pageIndex > 0) { items.Add( new HLink(JumpPageUrl(urlWithoutPageIndex, pageIndex - 1), "назад").FontBold().MarginRight(10) ); } for (int i = startIndex; i < endIndex; ++i) { items.Add(ViewJumpHlp.JumpElement(urlWithoutPageIndex, i, i == pageIndex, i == startIndex)); } if (pageIndex < pageCount - 1) { items.Add( new HLink(JumpPageUrl(urlWithoutPageIndex, pageIndex + 1), "далее").FontBold().MarginLeft(10) ); } return(new HPanel( items.ToArray() ).MarginTop(25).MarginLeft(5)); }
public static IHtmlControl GetArticleListView(SiteState state, LightObject currentUser, int pageNumber) { int[] allArticleIds = context.Articles.AllObjectIds; int pageCount = BinaryHlp.RoundUp(allArticleIds.Length, articleCountOnPage); int curPos = pageNumber * articleCountOnPage; if (curPos < 0 || curPos >= allArticleIds.Length) { return(new HPanel()); } int[] articleIds = ArrayHlp.GetRange(allArticleIds, curPos, Math.Min(articleCountOnPage, allArticleIds.Length - curPos) ); LightObject[] articleList = ArrayHlp.Convert(articleIds, delegate(int id) { return(new LightObject(context.Articles, id)); } ); IHtmlControl[] items = GetArticleItems(state, articleList); return(new HPanel( Decor.Title("Статьи").MarginBottom(15), new HPanel( new HPanel( items ), ViewJumpHlp.JumpBar("/stati", context.Articles.AllObjectIds.Length, articleCountOnPage, pageNumber) ) )); }
public static T[] GetPageItems <T>(T[] allItems, int itemCountOnPage, int pageNumber) { int pageCount = BinaryHlp.RoundUp(allItems.Length, itemCountOnPage); int curPos = pageNumber * itemCountOnPage; if (curPos < 0 || curPos >= allItems.Length) { return(null); } return(ArrayHlp.GetRange(allItems, curPos, Math.Min(itemCountOnPage, allItems.Length - curPos))); }
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 GetCorrespondenceView(SiteState state, IDataLayer forumConnection, LightObject user, LightObject collocutor, out string title) { title = "Личные сообщения"; int pageIndex = state.Option.Get(OptionType.CorrespondencePageIndex); int messageCount = DatabaseHlp.RowCount(forumConnection, "", "correspondence", "user_id = @userId and collocutor_id = @collocutorId", new DbParameter("userId", user.Id), new DbParameter("collocutorId", collocutor.Id) ); int pageCount = BinaryHlp.RoundUp(messageCount, 5); HButton prevButton = null; if (pageCount - 1 > pageIndex) { prevButton = Decor.ButtonMidi("предыдущие").Event("page_prev", "", delegate { state.Option.Set(OptionType.CorrespondencePageIndex, pageIndex + 1); } ); } HButton nextButton = null; if (pageIndex > 0) { nextButton = Decor.ButtonMidi("следующие").Event("page_next", "", delegate { state.Option.Set(OptionType.CorrespondencePageIndex, pageIndex - 1); } ); } TableLink messageLink = DialogueHlp.LoadCorrespondenceLink(forumConnection, string.Format("user_id = @userId and collocutor_id = @collocutorId order by create_time desc limit 5 offset {0}", pageIndex * 5 ), new DbParameter("userId", user.Id), new DbParameter("collocutorId", collocutor.Id) ); RowLink[] messages = messageLink.AllRows; List <IHtmlControl> messageBlocks = new List <IHtmlControl>(); if (prevButton != null || nextButton != null) { messageBlocks.Add( new HPanel( new HPanel(prevButton), new HPanel(nextButton) ).MarginTop(5).MarginBottom(5) ); } for (int i = messages.Length - 1; i >= 0; --i) { //if (i == 2) // messageBlocks.Add(new HAnchor("bottom")); messageBlocks.Add(GetMessageBlock(forumConnection, state, user, collocutor, messages[i], i)); } IHtmlControl addPanel = GetAddPanel(context, state, user, collocutor, false); return(new HPanel( GetCorrespondenceHeader(state, user, collocutor), new HPanel( messageBlocks.ToArray() ).BorderBottom(Decor.bottomBorder), addPanel )); }