Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="robots" content="noindex, nofollow" />
- <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
- <title>Проверка достижений студентов</title>
- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
- integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
- crossorigin="anonymous">
- <link rel="stylesheet" href="http://scirate.1spbgmu.ru/static/style.css">
- <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.js"
- integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU="
- crossorigin="anonymous"></script>
- <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
- integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"
- crossorigin="anonymous"></script>
- <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
- integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
- crossorigin="anonymous"></script>
- <style>
- .form-group.required .col-form-label:after {
- content:"*";
- color:red;
- }
- a.truncate {
- display: inline-block;
- margin-left: 0;
- max-width: 250px;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- }
- .card-link+.card-link {
- margin-left: 0;
- }
- </style>
- </head>
- <body>
- <nav class="navbar navbar-expand-lg navbar-dark ">
- <a class="navbar-brand" href="#">ПК УНД</a>
- <button class="navbar-toggler navbar-toggler-right"
- type="button"
- data-toggle="collapse"
- data-target="#navbarNav"
- aria-controls="navbarNav"
- aria-expanded="false"
- aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarNav">
- <ul class="navbar-nav mr-auto">
- <li class="nav-item ">
- <a class="nav-link" href="/SciRateSMUWeb/profile">Профиль</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="/SciRateSMUWeb/science">Научные достижения</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="/SciRateSMUWeb/elibrary-to-sciproduct">Elibrary.ru</a>
- </li>
- <li class="nav-item ">
- <a class="nav-link" href="/SciRateSMUWeb/grants">Гранты</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="/SciRateSMUWeb/ratings">Рейтинг студентов</a>
- </li>
- </ul>
- <ul class="navbar-nav">
- <li class="nav-item ">
- <a class="nav-link" href="/SciRateSMUWeb/logout">Выход</a>
- </li>
- </ul>
- </div>
- </nav>
- <div class="container">
- <h2 class="mt-3">Проверка достижений студентов</h2>
- <section class="filters mt-4">
- <form>
- <div class="form-group row required">
- <label for="category" class="col-sm-2 col-form-label">Категория</label>
- <div class="col">
- <select id="category" class="form-control">
- <option selected disabled>Выберите категорию...</option>
- <option value="science">Наука</option>
- <option value="social">Общественная деятельность</option>
- <option value="sport_competition">Спорт: соревнования</option>
- <option value="sport_gto">Спорт: значок ГТО</option>
- <option value="sport_category">Спорт: спортивный разряд</option>
- <option value="edu_stipend">Учеба: стипендия</option>
- <option value="edu_olympiad">Учеба: олимпиада</option>
- <option value="creativity_participation">Культура и творчество: участие в мероприятиях</option>
- <option value="creativity_organization">Культура и творчество: проведение мероприятий</option>
- <option value="creativity_presentation">Культура и творчество: публичное выступление</option>
- </select>
- </div>
- <div>
- <button type="button" id="updateButton" class="btn btn-primary" style="width: 110px;margin-right: 15px;">Загрузить</button>
- </div>
- </div>
- <hr>
- <div class="form-group row">
- <label for="category" class="col-sm-2 col-form-label">ФИО</label>
- <div class="col-sm-10">
- <input type="text" id="fullname" class="form-control" placeholder="Иванов" />
- <small id="fullnameHelp" class="form-text text-muted">Фильтровать продукты по конкретному пользователю (необязательное поле)</small>
- </div>
- </div>
- <div class="form-group row">
- <label for="category" class="col-sm-2 col-form-label">Показать</label>
- <div class="col-sm-10 d-flex">
- <div class="form-check form-check-inline">
- <input class="form-check-input" type="radio" name="checkedFilter" id="inlineRadio1" value="all">
- <label class="form-check-label" for="inlineRadio1">Все</label>
- </div>
- <div class="form-check form-check-inline">
- <input class="form-check-input" type="radio" name="checkedFilter" id="inlineRadio2" value="checked">
- <label class="form-check-label" for="inlineRadio2">Отмеченные</label>
- </div>
- <div class="form-check form-check-inline">
- <input class="form-check-input" checked type="radio" name="checkedFilter" id="inlineRadio3" value="unchecked">
- <label class="form-check-label" for="inlineRadio3">Не отмеченные</label>
- </div>
- </div>
- </div>
- <div class="form-group row">
- <div class="col-sm-12 text-right">
- <button type="button" id="renderButton" class="btn btn-primary">Применить фильтры</button>
- </div>
- </div>
- </form>
- </section>
- <hr/>
- <section class="content">
- </section>
- </div>
- <div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
- <input type="hidden" value="" class="currid">
- <div class="modal-dialog modal-dialog-centered" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title" id="exampleModalCenterTitle">Cообщение</h5>
- <button type="button" class="close" data-dismiss="modal" aria-label="Close">
- <span aria-hidden="true">×</span>
- </button>
- </div>
- <div class="modal-body">
- <textarea class="form-control" id="message" cols="30" rows="10"></textarea>
- <hr>
- <p>Дней на исправление:</p>
- <div class="form-check form-check-inline">
- <input class="form-check-input" type="radio" name="hoursTill" id="radio1" value="24">
- <label class="form-check-label" for="radio1">1 день</label>
- </div>
- <div class="form-check form-check-inline">
- <input class="form-check-input" type="radio" name="hoursTill" id="radio2" value="120">
- <label class="form-check-label" for="radio2">5 дней</label>
- </div>
- <div class="form-check form-check-inline">
- <input class="form-check-input" type="radio" name="hoursTill" id="radio3" value="168">
- <label class="form-check-label" for="radio3">7 дней</label>
- </div>
- <div class="form-check form-check-inline">
- <input class="form-check-input" type="radio" name="hoursTill" id="radio0" value="0">
- <label class="form-check-label" for="radio0">нет</label>
- </div>
- <hr>
- <p>Разрешить добавление?</p>
- <div class="form-check form-check-inline">
- <input class="form-check-input" type="radio" name="canManage" id="radio5" value="true">
- <label class="form-check-label" for="radio5">Да</label>
- </div>
- <div class="form-check form-check-inline">
- <input class="form-check-input" type="radio" name="canManage" id="radio6" value="false">
- <label class="form-check-label" for="radio6">Нет</label>
- </div>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-dismiss="modal">Закрыть</button>
- <button type="button" class="btn btn-primary">Отправить</button>
- </div>
- </div>
- </div>
- </div>
- <script>
- var storage = {};
- function getBaseUrl() {
- if (window.location.href.indexOf('localhost') === -1) {
- return 'http://scirate.1spbgmu.ru';
- } else {
- return 'http://localhost:8080';
- }
- }
- function wait(cond) {
- document.querySelector('html').style.cursor = cond ? 'progress' : 'auto';
- }
- function personnel(personnel) {
- console.log(personnel);
- return personnel.lastName + ' '
- + personnel.firstName
- + (personnel.middleName ? ' ' + personnel.middleName : '') + ', '
- + personnel.groupNum + ' группа.'
- }
- function links(attachments) {
- var links = '';
- for (var i = 0; i < attachments.length; i++) {
- links += '<a href="' + attachments[i][1] + '" target="_blank" class="card-link truncate mr-2" title="' + attachments[i][0] + '">' + attachments[i][0] + '</a>'
- }
- return links
- }
- function doAction(data) {
- return $.ajax({
- url: getBaseUrl() + '/SciRateSMUWeb/approve-data',
- method: 'POST',
- data: data,
- xhrFields: {
- withCredentials: true
- }
- });
- }
- function sendMessage(event_id, message) {
- return doAction({
- type: 'message',
- id: event_id,
- message: message
- });
- }
- function makeVerdict(event_id, verdict) {
- return doAction({
- type: 'verdict',
- id: event_id,
- verdict: verdict,
- action: 'create'
- })
- }
- function giveHours(event_id, hours, canManage, owner_id) {
- return doAction({
- type: 'date',
- id: event_id,
- hours: hours,
- canManage: canManage,
- productOwner: owner_id
- })
- }
- function updateUIVerdict(event_id, verdict) {
- $('#card_'+event_id+" .status")
- .removeClass('text-success')
- .removeClass('text-danger')
- .addClass(verdict ? 'text-success' : 'text-danger')
- .text(verdict ? "Утверждено" : "Отклонено");
- }
- function make_link(data) {
- var id = data.id;
- var type = data.subcategory;
- if (data.category == 'Общественная деятельность') {
- return '/SciRateSMUWeb/social-activity-item?said=' + id
- }
- if (data.category == 'Наука') {
- return '/SciRateSMUWeb/sciproduct?spid=' + id
- }
- if (type == 'Соревнования') {
- return '/SciRateSMUWeb/sport-item?type=competition&action=view&id=' + id
- }
- if (type == 'Значок ГТО') {
- return '/SciRateSMUWeb/sport-item?type=gto&action=view&id=' + id
- }
- if (type == 'Спортивный разряд') {
- return '/SciRateSMUWeb/sport-item?type=sportCategory&action=view&id=' + id
- }
- if (type == 'Олимпиада') {
- return '/SciRateSMUWeb/educational-activity-item?type=olympiad&action=view&id=' + id
- }
- if (type == 'Стипендия') {
- return '/SciRateSMUWeb/educational-activity-item?type=stipend&action=view&id=' + id
- }
- if (type == 'Участие в мероприятиях') {
- return '/SciRateSMUWeb/creative-activity-item?type=participation&action=view&id=' + id
- }
- if (type == 'Проведение мероприятий') {
- return '/SciRateSMUWeb/creative-activity-item?type=organizationParticipation&action=view&id=' + id
- }
- if (type == 'Публичное выступление') {
- return '/SciRateSMUWeb/creative-activity-item?type=presentation&action=view&id=' + id
- }
- return '#'
- }
- function product_to_card(data) {
- return (
- '<div class="card my-3" id="card_' + data.event_id + '">' +
- '<div class="card-header">' +
- personnel(data.personnel) +
- '</div>' +
- '<div class="card-body">' +
- '<h6 class="card-subtitle mb-2 text-muted">' +
- data.subcategory +
- '</h6>' +
- '<h5 class="card-title"><a href="' + make_link(data) + '" target="_blank">' + data.title + '</a></h5>' +
- (data.journal_name ? ('<p class="card-text">Журнал: ' + data.journal_name + '</p>') : '') +
- (data.conference_type ? ('<p class="card-text">' + data.conference_type + ' конференция</p>') : '') +
- (data.winner_place ? ('<p class="card-text">' + data.winner_place + ' место</p>') : '') +
- (data.description ? ('<p class="card-text">' + data.description + '</p>') : '') +
- (data.level_name ? ('<p class="card-text">Уровень: ' + data.level_name + '</p>') : '') +
- (data.type_name ? ('<p class="card-text">Результат: ' + data.type_name + '</p>') : '') +
- links(data.attachments) +
- '</div>'+
- '<div class="card-footer text-right">' +
- '<span class="mr-3 status' + (data.has_been_approved ? (data.is_approved ? " text-success" : " text-danger") : "") + '">' + (data.has_been_approved ? (data.is_approved ? "Утверждено" : "Отклонено") : "Еще не отмечено") + '</span>' +
- '<button type="button" class="btn btn-success mr-3" onclick="mark(' + data.event_id + ', true, '+data.personnel.id+');">Утвердить</button>' +
- '<button type="button" class="btn btn-danger" onclick="mark(' + data.event_id + ', false, '+data.personnel.id+');">Отклонить</button>' +
- '</div>' +
- '</div>')
- }
- function mark(event_id, verdict, owner_id) {
- makeVerdict(event_id, verdict)
- .done(function() {
- updateUIVerdict(event_id, verdict);
- if (!verdict) {
- $('.modal .currid').val(event_id);
- $('.modal textarea').val('');
- $('.modal').modal('show');
- $('.modal .btn-primary').off('click');
- $('.modal .btn-primary').on('click', function() {
- var hours = $('[name="hoursTill"]:checked').val();
- var canManage = $('[name="canManage"]:checked').val();
- if (hours && hours !== "0") {
- giveHours(event_id, hours, canManage, owner_id);
- }
- sendMessage(event_id, $('.modal textarea').val())
- .always(function() {
- $('.modal textarea').val('');
- $('.modal').modal('hide');
- $('.modal .btn-primary').off('click');
- $('.modal .currid').val('');
- })
- })
- }
- })
- }
- function check(fullname, personnel) {
- return (personnel.firstName != null && ~fullname.toLowerCase().indexOf(personnel.firstName.toLowerCase()))
- || (personnel.lastName != null && ~fullname.toLowerCase().indexOf(personnel.lastName.toLowerCase()))
- || (personnel.middleName != null && ~fullname.toLowerCase().indexOf(personnel.middleName.toLowerCase()))
- }
- function render(data) {
- wait(true);
- var fullname = document.querySelector('#fullname').value;
- var checkedFilter = document.querySelector('input[name="checkedFilter"]:checked').value;
- var html = [];
- for (var i = 0; i < 500; i++) {
- if (
- (checkedFilter === 'all'
- || (checkedFilter === 'unchecked' && !data[i].has_been_approved)
- || (checkedFilter === 'checked' && data[i].has_been_approved))
- && (fullname.trim() == '' || check(fullname, data[i].personnel))) {
- // html += product_to_card(data[i]);
- }
- }
- var content = document.querySelector('section.content');
- var contentParent = document.querySelector('section.content').parentNode;
- contentParent.removeChild(content);
- var newContent = createDomElement('section', 'content')
- newContent.appendChild(c);
- contentParent.appendChild(newContent);
- wait(false);
- }
- function createDomElement(tag, classes, id) {
- var e = document.createElement(tag);
- if (classes) { e.className = classes };
- if (id) { e.id = id };
- return e
- }
- function createLink(classes, href, text) {
- var link = createDomElement('a', classes);
- link.href = href;
- link.innerText = text;
- link.title = text;
- link.target = "_blank";
- return link;
- }
- function createCardText(text) {
- var p = createDomElement('p', 'card-text');
- p.innerText = text;
- return p;
- }
- function createAttchementsLinks(attachments) {
- var links = [];
- for (var i = 0; i < attachments.length; i++) {
- links.push(createLink("card-link truncate mr-2", attachments[i][1], attachments[i][0]))
- }
- return links
- }
- function createCard(card) {
- var cardy = createDomElement('div', 'card my-3', 'card_' + card.event_id);
- var cardHeader = createDomElement('div', 'card-header');
- cardHeader.innerText = personnel(card.personnel);
- var cardBody = createDomElement('div', 'card-body');
- var subtitle = createDomElement('h6', "card-subtitle mb-2 text-muted");
- subtitle.innerTex = card.subcategory;
- var title = createDomElement('h5', "card-title");
- title.appendChild(createLink(null, make_link(card), card.title));
- var paragraphs = [];
- paragraphs.push(card.journal_name ? createCardText('Журнал: ' + card.journal_name) : null);
- paragraphs.push(card.conference_type ? createCardText(card.conference_type + ' конференция') : null);
- paragraphs.push(card.winner_place ? createCardText(card.winner_place + ' место') : null);
- paragraphs.push(card.description ? createCardText(card.description) : null);
- paragraphs.push(card.level_name ? createCardText('Уровень: ' + card.level_name) : null);
- paragraphs.push(card.type_name ? createCardText('Результат: ' + card.type_name) : null);
- var links = createAttchementsLinks(card.attachments);
- var cardFooter = createDomElement('div', 'card-footer text-right');
- var status = createDomElement(
- 'span',
- 'mr-3 status ' + (card.has_been_approved ? (card.is_approved ? "text-success" : "text-danger") : '')
- );
- status.innerText = card.has_been_approved ? (card.is_approved ? "Утверждено" : "Отклонено") : "Еще не отмечено";
- var buttonGreen = createDomElement('button', 'btn btn-success mr-3');
- buttonGreen.innerText = 'Утвердить';
- buttonGreen.onclick = function() {
- mark(card.event_id, true, card.personnel.id);
- }
- var buttonRed = createDomElement('button', 'btn btn-danger');
- buttonRed.innerText = 'Отклонить';
- buttonRed.onclick = function() {
- mark(card.event_id, false, card.personnel.id);
- }
- ////////////
- var bodyContent = [subtitle, title].concat(paragraphs, links);
- for (var i = 0; i < bodyContent.length; i++) {
- if (bodyContent[i]) {
- cardBody.appendChild(bodyContent[i]);
- }
- }
- cardFooter.appendChild(status);
- cardFooter.appendChild(buttonGreen);
- cardFooter.appendChild(buttonRed);
- ///////////
- cardy.appendChild(cardHeader);
- cardy.appendChild(cardBody);
- cardy.appendChild(cardFooter);
- return cardy;
- }
- function update() {
- var category = $('#category').val();
- document.querySelector('#updateButton').innerText = 'Загрузка...';
- wait(true);
- $.get(getBaseUrl().replace('8080', '8888') + '/scirate/cards/list/'+category).done(function(data) {
- if (getBaseUrl().indexOf('localhost') !== -1) {
- data = JSON.parse(data);
- }
- storage = data;
- render(storage);
- document.querySelector('#updateButton').innerText = 'Загрузить';
- wait(false);
- }).fail(function() {
- document.querySelector('#updateButton').innerText = 'Загрузить';
- wait(false);
- })
- }
- $('#updateButton').click(update);
- $('#renderButton').click(function() {
- render(storage);
- });
- </script>
- <!-- 22.01.2020 22:54 -->
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement