/* * This file is part of SYZOJ. * * Copyright (c) 2016 Menci * * SYZOJ is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * SYZOJ is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public * License along with SYZOJ. If not, see . */ 'use strict'; let User = syzoj.model('user'); let Article = syzoj.model('article'); let Contest = syzoj.model('contest'); let Problem = syzoj.model('problem'); let Divine = require('syzoj-divine'); let TimeAgo = require('javascript-time-ago'); let zh = require('../libs/timeago'); TimeAgo.locale(zh); const timeAgo = new TimeAgo('zh-CN'); app.get('/', async (req, res) => { try { let ranklist = await User.query([1, syzoj.config.page.ranklist_index || 3], { is_show: true }, [[syzoj.config.sorting.ranklist.field, syzoj.config.sorting.ranklist.order]]); await ranklist.forEachAsync(async x => x.renderInformation()); let notices = (await Article.query(null, { is_notice: true }, [['public_time', 'desc']])).map(article => ({ title: article.title, url: syzoj.utils.makeUrl(['article', article.id]), date: syzoj.utils.formatDate(article.public_time, 'L') })); let fortune = null; if (res.locals.user) { fortune = Divine(res.locals.user.username, res.locals.user.sex); } let contests = await Contest.query([1, 5], { is_public: true }, [['start_time', 'desc']]); let problems = (await Problem.query([1, 5], { is_public: true }, [['publicize_time', 'desc']])).map(problem => ({ id: problem.id, title: problem.title, time: timeAgo.format(new Date(problem.publicize_time)), })); res.render('index', { ranklist: ranklist, notices: notices, fortune: fortune, contests: contests, problems: problems, links: syzoj.config.links }); } catch (e) { syzoj.log(e); res.render('error', { err: e }); } }); app.get('/help', async (req, res) => { try { res.render('help'); } catch (e) { syzoj.log(e); res.render('error', { err: e }); } });