Compare commits
19 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
a50aa383d9 | ||
|
9c53257729 | ||
|
ed8855272f | ||
|
09aa0bd4d6 | ||
|
4d2d7fa113 | ||
|
9393fbe326 | ||
|
955bdaa438 | ||
|
60dfad5d76 | ||
|
e16b1da761 | ||
|
09cae66ca4 | ||
|
7684bac74d | ||
|
2cf3e52596 | ||
|
167de9bf65 | ||
|
993a034527 | ||
|
9bd954ea9b | ||
|
1487affb8e | ||
|
e74261184f | ||
|
13131186bf | ||
|
f7bbf4d746 |
@ -1,16 +1,16 @@
|
|||||||
image: romanov73/is:ng-tracker-container
|
image: romanov73/is:ng-tracker-container-11
|
||||||
|
|
||||||
variables:
|
variables:
|
||||||
GRADLE_OPTS: "-Dorg.gradle.daemon=false"
|
GRADLE_OPTS: "-Dorg.gradle.daemon=false"
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- service postgresql stop
|
- service postgresql stop
|
||||||
- service postgresql start
|
- service postgresql start
|
||||||
- eval $(ssh-agent -s)
|
- eval $(ssh-agent -s)
|
||||||
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
|
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
|
||||||
- mkdir -p ~/.ssh
|
- mkdir -p ~/.ssh
|
||||||
- chmod 700 ~/.ssh
|
- chmod 700 ~/.ssh
|
||||||
- git log --pretty="%cn;%cd;%s" > src/main/resources/commits.log
|
- git log --pretty="%cn;%cd;%s" > src/main/resources/commits.log
|
||||||
|
|
||||||
build:
|
build:
|
||||||
stage: build
|
stage: build
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
buildscript {
|
buildscript {
|
||||||
ext {
|
ext {
|
||||||
versionSpringBoot = '1.5.10.RELEASE'
|
versionSpringBoot = '2.1.3.RELEASE'
|
||||||
}
|
}
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
@ -105,13 +105,14 @@ dependencies {
|
|||||||
compile group: 'org.springframework.boot', name: 'spring-boot-starter-jetty'
|
compile group: 'org.springframework.boot', name: 'spring-boot-starter-jetty'
|
||||||
compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa'
|
compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa'
|
||||||
compile group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf'
|
compile group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf'
|
||||||
compile group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-springsecurity4'
|
compile group: 'nz.net.ultraq.thymeleaf', name: 'thymeleaf-layout-dialect'
|
||||||
|
compile group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-springsecurity5'
|
||||||
compile group: 'com.fasterxml.jackson.module', name: 'jackson-module-afterburner'
|
compile group: 'com.fasterxml.jackson.module', name: 'jackson-module-afterburner'
|
||||||
compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-hibernate5'
|
compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-hibernate5'
|
||||||
|
|
||||||
compile group: 'postgresql', name: 'postgresql', version: '9.1-901.jdbc4'
|
compile group: 'org.postgresql', name: 'postgresql', version: '42.2.5'
|
||||||
|
|
||||||
compile group: 'org.liquibase', name: 'liquibase-core', version: '3.5.3'
|
compile group: 'org.liquibase', name: 'liquibase-core', version: '3.6.3'
|
||||||
compile group: 'com.mattbertolini', name: 'liquibase-slf4j', version: '2.0.0'
|
compile group: 'com.mattbertolini', name: 'liquibase-slf4j', version: '2.0.0'
|
||||||
|
|
||||||
compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.7'
|
compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.7'
|
||||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
|
|||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.5.1-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-bin.zip
|
||||||
|
@ -2,7 +2,6 @@ package ru.ulstu.conference.model;
|
|||||||
|
|
||||||
import org.hibernate.annotations.Fetch;
|
import org.hibernate.annotations.Fetch;
|
||||||
import org.hibernate.annotations.FetchMode;
|
import org.hibernate.annotations.FetchMode;
|
||||||
import org.hibernate.validator.constraints.NotBlank;
|
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
import ru.ulstu.core.model.BaseEntity;
|
import ru.ulstu.core.model.BaseEntity;
|
||||||
import ru.ulstu.deadline.model.Deadline;
|
import ru.ulstu.deadline.model.Deadline;
|
||||||
@ -20,6 +19,7 @@ import javax.persistence.OrderBy;
|
|||||||
import javax.persistence.Table;
|
import javax.persistence.Table;
|
||||||
import javax.persistence.Temporal;
|
import javax.persistence.Temporal;
|
||||||
import javax.persistence.TemporalType;
|
import javax.persistence.TemporalType;
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
@ -2,14 +2,15 @@ package ru.ulstu.conference.model;
|
|||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import org.hibernate.validator.constraints.NotEmpty;
|
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
import ru.ulstu.core.model.BaseEntity;
|
||||||
import ru.ulstu.deadline.model.Deadline;
|
import ru.ulstu.deadline.model.Deadline;
|
||||||
import ru.ulstu.name.NameContainer;
|
import ru.ulstu.name.NameContainer;
|
||||||
import ru.ulstu.paper.model.Paper;
|
import ru.ulstu.paper.model.Paper;
|
||||||
|
|
||||||
import javax.persistence.Temporal;
|
import javax.persistence.Temporal;
|
||||||
import javax.persistence.TemporalType;
|
import javax.persistence.TemporalType;
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
import javax.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@ -89,8 +90,8 @@ public class ConferenceDto extends NameContainer {
|
|||||||
this.beginDate = conference.getBeginDate();
|
this.beginDate = conference.getBeginDate();
|
||||||
this.endDate = conference.getEndDate();
|
this.endDate = conference.getEndDate();
|
||||||
this.deadlines = conference.getDeadlines();
|
this.deadlines = conference.getDeadlines();
|
||||||
this.userIds = convert(conference.getUsers(), user -> user.getId());
|
this.userIds = convert(conference.getUsers(), BaseEntity::getId);
|
||||||
this.paperIds = convert(conference.getPapers(), paper -> paper.getId());
|
this.paperIds = convert(conference.getPapers(), BaseEntity::getId);
|
||||||
this.users = conference.getUsers();
|
this.users = conference.getUsers();
|
||||||
this.papers = conference.getPapers();
|
this.papers = conference.getPapers();
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ public class ConferenceUserService {
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public ConferenceUser update(ConferenceUser user) {
|
public ConferenceUser update(ConferenceUser user) {
|
||||||
ConferenceUser updateUser = conferenceUserRepository.findOne(user.getId());
|
ConferenceUser updateUser = conferenceUserRepository.getOne(user.getId());
|
||||||
updateUser.setDeposit(user.getDeposit());
|
updateUser.setDeposit(user.getDeposit());
|
||||||
updateUser.setParticipation(user.getParticipation());
|
updateUser.setParticipation(user.getParticipation());
|
||||||
conferenceUserRepository.save(updateUser);
|
conferenceUserRepository.save(updateUser);
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
package ru.ulstu.configuration;
|
package ru.ulstu.configuration;
|
||||||
|
|
||||||
import org.hibernate.validator.constraints.NotBlank;
|
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@ConfigurationProperties(prefix = "ng-tracker")
|
@ConfigurationProperties(prefix = "ng-tracker")
|
||||||
@Validated
|
@Validated
|
||||||
|
@ -2,18 +2,18 @@ package ru.ulstu.configuration;
|
|||||||
|
|
||||||
import org.eclipse.jetty.server.ServerConnector;
|
import org.eclipse.jetty.server.ServerConnector;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
|
import org.springframework.boot.web.embedded.jetty.JettyServerCustomizer;
|
||||||
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
|
import org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory;
|
||||||
import org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainerFactory;
|
import org.springframework.boot.web.server.ConfigurableWebServerFactory;
|
||||||
import org.springframework.boot.context.embedded.jetty.JettyServerCustomizer;
|
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
public class HttpListenerConfiguration implements EmbeddedServletContainerCustomizer {
|
public class HttpListenerConfiguration implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> {
|
||||||
@Value("${server.http.port}")
|
@Value("${server.http.port}")
|
||||||
private int httpPort;
|
private int httpPort;
|
||||||
|
|
||||||
private void configureJetty(JettyEmbeddedServletContainerFactory jettyFactory) {
|
private void configureJetty(JettyServletWebServerFactory jettyFactory) {
|
||||||
jettyFactory.addServerCustomizers((JettyServerCustomizer) server -> {
|
jettyFactory.addServerCustomizers((JettyServerCustomizer) server -> {
|
||||||
ServerConnector serverConnector = new ServerConnector(server);
|
ServerConnector serverConnector = new ServerConnector(server);
|
||||||
serverConnector.setPort(httpPort);
|
serverConnector.setPort(httpPort);
|
||||||
@ -22,9 +22,9 @@ public class HttpListenerConfiguration implements EmbeddedServletContainerCustom
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void customize(ConfigurableEmbeddedServletContainer container) {
|
public void customize(ConfigurableWebServerFactory factory) {
|
||||||
if (container instanceof JettyEmbeddedServletContainerFactory) {
|
if (factory instanceof JettyServletWebServerFactory) {
|
||||||
configureJetty((JettyEmbeddedServletContainerFactory) container);
|
configureJetty((JettyServletWebServerFactory) factory);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,8 @@ package ru.ulstu.configuration;
|
|||||||
import nz.net.ultraq.thymeleaf.LayoutDialect;
|
import nz.net.ultraq.thymeleaf.LayoutDialect;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.thymeleaf.extras.springsecurity4.dialect.SpringSecurityDialect;
|
import org.thymeleaf.extras.springsecurity5.dialect.SpringSecurityDialect;
|
||||||
import org.thymeleaf.spring4.SpringTemplateEngine;
|
import org.thymeleaf.spring5.SpringTemplateEngine;
|
||||||
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
|
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
|
||||||
import org.thymeleaf.templateresolver.ITemplateResolver;
|
import org.thymeleaf.templateresolver.ITemplateResolver;
|
||||||
|
|
||||||
@ -17,7 +17,6 @@ public class MailTemplateConfiguration {
|
|||||||
final SpringTemplateEngine templateEngine = new SpringTemplateEngine();
|
final SpringTemplateEngine templateEngine = new SpringTemplateEngine();
|
||||||
templateEngine.addTemplateResolver(templateResolver);
|
templateEngine.addTemplateResolver(templateResolver);
|
||||||
templateEngine.addTemplateResolver(emailTemplateResolver());
|
templateEngine.addTemplateResolver(emailTemplateResolver());
|
||||||
templateEngine.addTemplateResolver(mvcTemplateResolver());
|
|
||||||
templateEngine.addDialect(new LayoutDialect());
|
templateEngine.addDialect(new LayoutDialect());
|
||||||
templateEngine.addDialect(sec);
|
templateEngine.addDialect(sec);
|
||||||
return templateEngine;
|
return templateEngine;
|
||||||
@ -25,22 +24,10 @@ public class MailTemplateConfiguration {
|
|||||||
|
|
||||||
public ClassLoaderTemplateResolver emailTemplateResolver() {
|
public ClassLoaderTemplateResolver emailTemplateResolver() {
|
||||||
ClassLoaderTemplateResolver emailTemplateResolver = new ClassLoaderTemplateResolver();
|
ClassLoaderTemplateResolver emailTemplateResolver = new ClassLoaderTemplateResolver();
|
||||||
emailTemplateResolver.setPrefix("mail_templates/");
|
emailTemplateResolver.setPrefix("/mail_templates/");
|
||||||
emailTemplateResolver.setTemplateMode("HTML5");
|
emailTemplateResolver.setTemplateMode("HTML");
|
||||||
emailTemplateResolver.setSuffix(".html");
|
emailTemplateResolver.setSuffix(".html");
|
||||||
emailTemplateResolver.setOrder(1);
|
|
||||||
emailTemplateResolver.setCharacterEncoding(StandardCharsets.UTF_8.name());
|
emailTemplateResolver.setCharacterEncoding(StandardCharsets.UTF_8.name());
|
||||||
return emailTemplateResolver;
|
return emailTemplateResolver;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ClassLoaderTemplateResolver mvcTemplateResolver() {
|
|
||||||
ClassLoaderTemplateResolver emailTemplateResolver = new ClassLoaderTemplateResolver();
|
|
||||||
emailTemplateResolver.setPrefix("templates");
|
|
||||||
emailTemplateResolver.setTemplateMode("HTML5");
|
|
||||||
emailTemplateResolver.setSuffix(".html");
|
|
||||||
emailTemplateResolver.setOrder(2);
|
|
||||||
emailTemplateResolver.setCharacterEncoding(StandardCharsets.UTF_8.name());
|
|
||||||
return emailTemplateResolver;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,10 @@ package ru.ulstu.configuration;
|
|||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
|
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
|
||||||
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
|
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
|
||||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
public class MvcConfiguration extends WebMvcConfigurerAdapter {
|
public class MvcConfiguration implements WebMvcConfigurer {
|
||||||
@Override
|
@Override
|
||||||
public void addViewControllers(ViewControllerRegistry registry) {
|
public void addViewControllers(ViewControllerRegistry registry) {
|
||||||
registry.addViewController("/{articlename:\\w+}");
|
registry.addViewController("/{articlename:\\w+}");
|
||||||
|
@ -6,19 +6,19 @@ import org.springframework.data.domain.Sort;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
public class OffsetablePageRequest implements Pageable, Serializable {
|
public class OffsetablePageRequest implements Pageable, Serializable {
|
||||||
private final int offset;
|
private final long offset;
|
||||||
private final int count;
|
private final int count;
|
||||||
private final Sort sort;
|
private final Sort sort;
|
||||||
|
|
||||||
public OffsetablePageRequest(int offset, int count) {
|
public OffsetablePageRequest(long offset, int count) {
|
||||||
this(offset, count, null);
|
this(offset, count, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public OffsetablePageRequest(int offset, int count, Sort.Direction direction, String... properties) {
|
public OffsetablePageRequest(long offset, int count, Sort.Direction direction, String... properties) {
|
||||||
this(offset, count, new Sort(direction, properties));
|
this(offset, count, new Sort(direction, properties));
|
||||||
}
|
}
|
||||||
|
|
||||||
public OffsetablePageRequest(int offset, int count, Sort sort) {
|
public OffsetablePageRequest(long offset, int count, Sort sort) {
|
||||||
if (offset < 0) {
|
if (offset < 0) {
|
||||||
throw new IllegalArgumentException("Offset value must not be less than zero!");
|
throw new IllegalArgumentException("Offset value must not be less than zero!");
|
||||||
}
|
}
|
||||||
@ -42,11 +42,11 @@ public class OffsetablePageRequest implements Pageable, Serializable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getPageNumber() {
|
public int getPageNumber() {
|
||||||
return offset / count;
|
return (int) (offset / count);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getOffset() {
|
public long getOffset() {
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,9 +89,9 @@ public class OffsetablePageRequest implements Pageable, Serializable {
|
|||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
final int prime = 31;
|
final int prime = 31;
|
||||||
int result = 1;
|
long result = 1;
|
||||||
result = prime * result + offset;
|
result = prime * result + offset;
|
||||||
result = prime * result + count;
|
result = prime * result + count;
|
||||||
return result;
|
return (int) result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ public class DeadlineService {
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public Deadline update(Deadline deadline) {
|
public Deadline update(Deadline deadline) {
|
||||||
Deadline updateDeadline = deadlineRepository.findOne(deadline.getId());
|
Deadline updateDeadline = deadlineRepository.getOne(deadline.getId());
|
||||||
updateDeadline.setDate(deadline.getDate());
|
updateDeadline.setDate(deadline.getDate());
|
||||||
updateDeadline.setDescription(deadline.getDescription());
|
updateDeadline.setDescription(deadline.getDescription());
|
||||||
deadlineRepository.save(updateDeadline);
|
deadlineRepository.save(updateDeadline);
|
||||||
@ -44,6 +44,6 @@ public class DeadlineService {
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public void remove(Integer deadlineId) {
|
public void remove(Integer deadlineId) {
|
||||||
deadlineRepository.delete(deadlineId);
|
deadlineRepository.deleteById(deadlineId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,7 +69,7 @@ public class FileService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public FileData getFile(Integer fileId) {
|
public FileData getFile(Integer fileId) {
|
||||||
return fileRepository.findOne(fileId);
|
return fileRepository.getOne(fileId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteTmpFile(String tmpFileName) throws IOException {
|
public void deleteTmpFile(String tmpFileName) throws IOException {
|
||||||
@ -98,7 +98,7 @@ public class FileService {
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public FileData update(FileDataDto fileDataDto) {
|
public FileData update(FileDataDto fileDataDto) {
|
||||||
FileData file = fileRepository.findOne(fileDataDto.getId());
|
FileData file = fileRepository.getOne(fileDataDto.getId());
|
||||||
return fileRepository.save(copyFromDto(file, fileDataDto));
|
return fileRepository.save(copyFromDto(file, fileDataDto));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,7 +117,7 @@ public class FileService {
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public void delete(Integer fileId) {
|
public void delete(Integer fileId) {
|
||||||
fileRepository.delete(fileRepository.findOne(fileId));
|
fileRepository.delete(fileRepository.getOne(fileId));
|
||||||
}
|
}
|
||||||
|
|
||||||
public FileDataDto createFromMultipartFile(MultipartFile multipartFile) throws IOException {
|
public FileDataDto createFromMultipartFile(MultipartFile multipartFile) throws IOException {
|
||||||
@ -134,7 +134,7 @@ public class FileService {
|
|||||||
File renamed = getTmpFilePath(fileDataDto.getName()).toFile();
|
File renamed = getTmpFilePath(fileDataDto.getName()).toFile();
|
||||||
oldFile.renameTo(renamed);
|
oldFile.renameTo(renamed);
|
||||||
} else {
|
} else {
|
||||||
Files.write(getTmpFilePath(fileDataDto.getName()), fileRepository.findOne(fileDataDto.getId()).getData());
|
Files.write(getTmpFilePath(fileDataDto.getName()), fileRepository.getOne(fileDataDto.getId()).getData());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,13 +3,13 @@ package ru.ulstu.grant.model;
|
|||||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.hibernate.validator.constraints.NotEmpty;
|
|
||||||
import ru.ulstu.deadline.model.Deadline;
|
import ru.ulstu.deadline.model.Deadline;
|
||||||
import ru.ulstu.file.model.FileDataDto;
|
import ru.ulstu.file.model.FileDataDto;
|
||||||
import ru.ulstu.paper.model.PaperDto;
|
import ru.ulstu.paper.model.PaperDto;
|
||||||
import ru.ulstu.project.model.ProjectDto;
|
import ru.ulstu.project.model.ProjectDto;
|
||||||
import ru.ulstu.user.model.UserDto;
|
import ru.ulstu.user.model.UserDto;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
package ru.ulstu.odin.model;
|
package ru.ulstu.odin.model;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import org.hibernate.validator.constraints.NotBlank;
|
|
||||||
import org.hibernate.validator.constraints.NotEmpty;
|
|
||||||
import ru.ulstu.core.error.OdinException;
|
import ru.ulstu.core.error.OdinException;
|
||||||
import ru.ulstu.odin.model.annotation.OdinCaption;
|
import ru.ulstu.odin.model.annotation.OdinCaption;
|
||||||
import ru.ulstu.odin.model.annotation.OdinReadOnly;
|
import ru.ulstu.odin.model.annotation.OdinReadOnly;
|
||||||
import ru.ulstu.odin.model.annotation.OdinVisible;
|
import ru.ulstu.odin.model.annotation.OdinVisible;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package ru.ulstu.odin.model;
|
package ru.ulstu.odin.model;
|
||||||
|
|
||||||
import org.hibernate.validator.constraints.Email;
|
|
||||||
import ru.ulstu.odin.model.annotation.OdinString;
|
import ru.ulstu.odin.model.annotation.OdinString;
|
||||||
import ru.ulstu.odin.model.annotation.OdinString.OdinStringType;
|
import ru.ulstu.odin.model.annotation.OdinString.OdinStringType;
|
||||||
|
|
||||||
|
import javax.validation.constraints.Email;
|
||||||
import javax.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
|
@ -3,11 +3,11 @@ package ru.ulstu.paper.model;
|
|||||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.hibernate.validator.constraints.NotEmpty;
|
|
||||||
import ru.ulstu.deadline.model.Deadline;
|
import ru.ulstu.deadline.model.Deadline;
|
||||||
import ru.ulstu.file.model.FileDataDto;
|
import ru.ulstu.file.model.FileDataDto;
|
||||||
import ru.ulstu.user.model.UserDto;
|
import ru.ulstu.user.model.UserDto;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
import javax.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package ru.ulstu.project.model;
|
package ru.ulstu.project.model;
|
||||||
|
|
||||||
import org.hibernate.validator.constraints.NotBlank;
|
|
||||||
import ru.ulstu.core.model.BaseEntity;
|
import ru.ulstu.core.model.BaseEntity;
|
||||||
import ru.ulstu.deadline.model.Deadline;
|
import ru.ulstu.deadline.model.Deadline;
|
||||||
import ru.ulstu.file.model.FileData;
|
import ru.ulstu.file.model.FileData;
|
||||||
@ -13,6 +12,7 @@ import javax.persistence.Enumerated;
|
|||||||
import javax.persistence.JoinColumn;
|
import javax.persistence.JoinColumn;
|
||||||
import javax.persistence.ManyToOne;
|
import javax.persistence.ManyToOne;
|
||||||
import javax.persistence.OneToMany;
|
import javax.persistence.OneToMany;
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -2,10 +2,10 @@ package ru.ulstu.project.model;
|
|||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import org.hibernate.validator.constraints.NotEmpty;
|
|
||||||
import ru.ulstu.deadline.model.Deadline;
|
import ru.ulstu.deadline.model.Deadline;
|
||||||
import ru.ulstu.grant.model.GrantDto;
|
import ru.ulstu.grant.model.GrantDto;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ public class ProjectService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ProjectDto findOneDto(Integer id) {
|
public ProjectDto findOneDto(Integer id) {
|
||||||
return new ProjectDto(projectRepository.findOne(id));
|
return new ProjectDto(projectRepository.getOne(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Project.ProjectStatus> getProjectStatuses() {
|
public List<Project.ProjectStatus> getProjectStatuses() {
|
||||||
@ -86,7 +86,7 @@ public class ProjectService {
|
|||||||
project.setStatus(projectDto.getStatus() == null ? APPLICATION : projectDto.getStatus());
|
project.setStatus(projectDto.getStatus() == null ? APPLICATION : projectDto.getStatus());
|
||||||
project.setTitle(projectDto.getTitle());
|
project.setTitle(projectDto.getTitle());
|
||||||
if (projectDto.getGrant() != null && projectDto.getGrant().getId() != null) {
|
if (projectDto.getGrant() != null && projectDto.getGrant().getId() != null) {
|
||||||
project.setGrant(grantRepository.findOne(projectDto.getGrant().getId()));
|
project.setGrant(grantRepository.getOne(projectDto.getGrant().getId()));
|
||||||
}
|
}
|
||||||
project.setRepository(projectDto.getRepository());
|
project.setRepository(projectDto.getRepository());
|
||||||
project.setDeadlines(deadlineService.saveOrCreate(projectDto.getDeadlines()));
|
project.setDeadlines(deadlineService.saveOrCreate(projectDto.getDeadlines()));
|
||||||
@ -105,7 +105,7 @@ public class ProjectService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Project findById(Integer id) {
|
public Project findById(Integer id) {
|
||||||
return projectRepository.findOne(id);
|
return projectRepository.getOne(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package ru.ulstu.students.model;
|
|||||||
|
|
||||||
import org.hibernate.annotations.Fetch;
|
import org.hibernate.annotations.Fetch;
|
||||||
import org.hibernate.annotations.FetchMode;
|
import org.hibernate.annotations.FetchMode;
|
||||||
import org.hibernate.validator.constraints.NotBlank;
|
|
||||||
import ru.ulstu.core.model.BaseEntity;
|
import ru.ulstu.core.model.BaseEntity;
|
||||||
import ru.ulstu.deadline.model.Deadline;
|
import ru.ulstu.deadline.model.Deadline;
|
||||||
import ru.ulstu.tags.model.Tag;
|
import ru.ulstu.tags.model.Tag;
|
||||||
@ -20,6 +19,7 @@ import javax.persistence.OneToMany;
|
|||||||
import javax.persistence.OrderBy;
|
import javax.persistence.OrderBy;
|
||||||
import javax.persistence.Temporal;
|
import javax.persistence.Temporal;
|
||||||
import javax.persistence.TemporalType;
|
import javax.persistence.TemporalType;
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -3,10 +3,10 @@ package ru.ulstu.students.model;
|
|||||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.hibernate.validator.constraints.NotEmpty;
|
|
||||||
import ru.ulstu.deadline.model.Deadline;
|
import ru.ulstu.deadline.model.Deadline;
|
||||||
import ru.ulstu.tags.model.Tag;
|
import ru.ulstu.tags.model.Tag;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -2,12 +2,12 @@ package ru.ulstu.tags.model;
|
|||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import org.hibernate.validator.constraints.NotEmpty;
|
|
||||||
import ru.ulstu.core.model.BaseEntity;
|
import ru.ulstu.core.model.BaseEntity;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import javax.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.Table;
|
import javax.persistence.Table;
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
import javax.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
|
@ -34,7 +34,7 @@ public class TagService {
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public Tag getExistById(Tag tag) {
|
public Tag getExistById(Tag tag) {
|
||||||
return tagRepository.findOne(tag.getId());
|
return tagRepository.getOne(tag.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
|
@ -65,7 +65,7 @@ public class EventService {
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public Integer update(EventDto eventDto) {
|
public Integer update(EventDto eventDto) {
|
||||||
Event event = eventRepository.findOne(eventDto.getId());
|
Event event = eventRepository.getOne(eventDto.getId());
|
||||||
return eventRepository.save(copyFromDto(event, eventDto)).getId();
|
return eventRepository.save(copyFromDto(event, eventDto)).getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,13 +76,13 @@ public class EventService {
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public void delete(Integer eventId) {
|
public void delete(Integer eventId) {
|
||||||
Event event = eventRepository.findOne(eventId);
|
Event event = eventRepository.getOne(eventId);
|
||||||
event.setParents(null);
|
event.setParents(null);
|
||||||
eventRepository.delete(event);
|
eventRepository.delete(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Event> findByIds(List<Integer> ids) {
|
public List<Event> findByIds(List<Integer> ids) {
|
||||||
return eventRepository.findAll(ids);
|
return eventRepository.findAllById(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createBasedOn(Event event, Date executeDate) {
|
public void createBasedOn(Event event, Date executeDate) {
|
||||||
@ -97,7 +97,7 @@ public class EventService {
|
|||||||
event = eventRepository.save(event);
|
event = eventRepository.save(event);
|
||||||
|
|
||||||
//set child to parent
|
//set child to parent
|
||||||
Event parentEvent = eventRepository.findOne(parentEventId);
|
Event parentEvent = eventRepository.getOne(parentEventId);
|
||||||
parentEvent.setChild(event);
|
parentEvent.setChild(event);
|
||||||
eventRepository.save(parentEvent);
|
eventRepository.save(parentEvent);
|
||||||
}
|
}
|
||||||
@ -127,7 +127,7 @@ public class EventService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void updatePaperDeadlines(Paper paper) {
|
public void updatePaperDeadlines(Paper paper) {
|
||||||
eventRepository.delete(eventRepository.findAllByPaper(paper));
|
eventRepository.deleteAll(eventRepository.findAllByPaper(paper));
|
||||||
|
|
||||||
createFromPaper(paper);
|
createFromPaper(paper);
|
||||||
}
|
}
|
||||||
|
@ -48,13 +48,13 @@ public class TimelineService {
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public Integer update(TimelineDto timelineDto) {
|
public Integer update(TimelineDto timelineDto) {
|
||||||
Timeline timeline = timelineRepository.findOne(timelineDto.getId());
|
Timeline timeline = timelineRepository.getOne(timelineDto.getId());
|
||||||
return timelineRepository.save(copyFromDto(timeline, timelineDto)).getId();
|
return timelineRepository.save(copyFromDto(timeline, timelineDto)).getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public void delete(Integer timelineId) {
|
public void delete(Integer timelineId) {
|
||||||
Timeline timeline = timelineRepository.findOne(timelineId);
|
Timeline timeline = timelineRepository.getOne(timelineId);
|
||||||
timelineRepository.delete(timeline);
|
timelineRepository.delete(timeline);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,15 +3,9 @@ package ru.ulstu.user.controller;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.security.access.annotation.Secured;
|
import org.springframework.security.access.annotation.Secured;
|
||||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.ui.ModelMap;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.PutMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
import ru.ulstu.configuration.Constants;
|
import ru.ulstu.configuration.Constants;
|
||||||
import ru.ulstu.core.model.response.PageableItems;
|
import ru.ulstu.core.model.response.PageableItems;
|
||||||
import ru.ulstu.core.model.response.Response;
|
import ru.ulstu.core.model.response.Response;
|
||||||
@ -19,15 +13,12 @@ import ru.ulstu.odin.controller.OdinController;
|
|||||||
import ru.ulstu.odin.model.OdinMetadata;
|
import ru.ulstu.odin.model.OdinMetadata;
|
||||||
import ru.ulstu.odin.model.OdinVoid;
|
import ru.ulstu.odin.model.OdinVoid;
|
||||||
import ru.ulstu.odin.service.OdinService;
|
import ru.ulstu.odin.service.OdinService;
|
||||||
import ru.ulstu.user.model.UserDto;
|
import ru.ulstu.user.model.*;
|
||||||
import ru.ulstu.user.model.UserListDto;
|
|
||||||
import ru.ulstu.user.model.UserResetPasswordDto;
|
|
||||||
import ru.ulstu.user.model.UserRoleConstants;
|
|
||||||
import ru.ulstu.user.model.UserRoleDto;
|
|
||||||
import ru.ulstu.user.model.UserSessionListDto;
|
|
||||||
import ru.ulstu.user.service.UserService;
|
import ru.ulstu.user.service.UserService;
|
||||||
import ru.ulstu.user.service.UserSessionService;
|
import ru.ulstu.user.service.UserSessionService;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpSession;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
|
|
||||||
import static ru.ulstu.user.controller.UserController.URL;
|
import static ru.ulstu.user.controller.UserController.URL;
|
||||||
@ -142,8 +133,8 @@ public class UserController extends OdinController<UserListDto, UserDto> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: add page for user edit (user-profile)
|
// TODO: add page for user edit (user-profile)
|
||||||
@PostMapping("/change-information")
|
@PostMapping(value = "/change-information", params = "save")
|
||||||
public Response<UserDto> changeInformation(@Valid @RequestBody UserDto userDto) {
|
public Response<UserDto> changeInformation(@Valid UserDto userDto) {
|
||||||
log.debug("REST: UserController.changeInformation( {} )", userDto.getLogin());
|
log.debug("REST: UserController.changeInformation( {} )", userDto.getLogin());
|
||||||
return new Response<>(userService.updateUserInformation(userDto));
|
return new Response<>(userService.updateUserInformation(userDto));
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,35 @@
|
|||||||
|
package ru.ulstu.user.controller;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.ui.ModelMap;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import ru.ulstu.configuration.Constants;
|
||||||
|
import ru.ulstu.user.model.User;
|
||||||
|
import ru.ulstu.user.model.UserDto;
|
||||||
|
import ru.ulstu.user.service.UserSessionService;
|
||||||
|
import springfox.documentation.annotations.ApiIgnore;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpSession;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@RequestMapping(value = "/profile")
|
||||||
|
@ApiIgnore
|
||||||
|
public class UserProfileController {
|
||||||
|
|
||||||
|
private final UserSessionService userSessionService;
|
||||||
|
|
||||||
|
public UserProfileController(UserSessionService userSessionService)
|
||||||
|
{
|
||||||
|
this.userSessionService = userSessionService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/profile")
|
||||||
|
public void getUserProfile(ModelMap modelMap, HttpServletRequest request) {
|
||||||
|
HttpSession session = request.getSession(false);
|
||||||
|
final String sessionId = session.getAttribute(Constants.SESSION_ID_ATTR).toString();
|
||||||
|
UserDto userDto = userSessionService.getUserBySessionId(sessionId);
|
||||||
|
modelMap.addAttribute("userDto", userDto);
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,6 @@
|
|||||||
package ru.ulstu.user.model;
|
package ru.ulstu.user.model;
|
||||||
|
|
||||||
import org.hibernate.annotations.BatchSize;
|
import org.hibernate.annotations.BatchSize;
|
||||||
import org.hibernate.validator.constraints.Email;
|
|
||||||
import ru.ulstu.configuration.Constants;
|
import ru.ulstu.configuration.Constants;
|
||||||
import ru.ulstu.core.model.BaseEntity;
|
import ru.ulstu.core.model.BaseEntity;
|
||||||
|
|
||||||
@ -15,6 +14,7 @@ import javax.persistence.ManyToMany;
|
|||||||
import javax.persistence.Table;
|
import javax.persistence.Table;
|
||||||
import javax.persistence.Temporal;
|
import javax.persistence.Temporal;
|
||||||
import javax.persistence.TemporalType;
|
import javax.persistence.TemporalType;
|
||||||
|
import javax.validation.constraints.Email;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import javax.validation.constraints.Pattern;
|
import javax.validation.constraints.Pattern;
|
||||||
import javax.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
package ru.ulstu.user.model;
|
package ru.ulstu.user.model;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import org.hibernate.validator.constraints.Email;
|
|
||||||
import org.hibernate.validator.constraints.NotBlank;
|
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
import ru.ulstu.configuration.Constants;
|
import ru.ulstu.configuration.Constants;
|
||||||
import ru.ulstu.odin.model.OdinDto;
|
import ru.ulstu.odin.model.OdinDto;
|
||||||
@ -12,6 +10,8 @@ import ru.ulstu.odin.model.annotation.OdinString;
|
|||||||
import ru.ulstu.odin.model.annotation.OdinVisible;
|
import ru.ulstu.odin.model.annotation.OdinVisible;
|
||||||
import ru.ulstu.user.controller.UserController;
|
import ru.ulstu.user.controller.UserController;
|
||||||
|
|
||||||
|
import javax.validation.constraints.Email;
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
import javax.validation.constraints.Pattern;
|
import javax.validation.constraints.Pattern;
|
||||||
import javax.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package ru.ulstu.user.model;
|
package ru.ulstu.user.model;
|
||||||
|
|
||||||
import org.hibernate.validator.constraints.NotEmpty;
|
|
||||||
import ru.ulstu.configuration.Constants;
|
import ru.ulstu.configuration.Constants;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
import javax.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ import org.springframework.mail.javamail.MimeMessageHelper;
|
|||||||
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.scheduling.annotation.Async;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.thymeleaf.context.Context;
|
import org.thymeleaf.context.Context;
|
||||||
import org.thymeleaf.spring4.SpringTemplateEngine;
|
import org.thymeleaf.spring5.SpringTemplateEngine;
|
||||||
import ru.ulstu.configuration.ApplicationProperties;
|
import ru.ulstu.configuration.ApplicationProperties;
|
||||||
import ru.ulstu.configuration.Constants;
|
import ru.ulstu.configuration.Constants;
|
||||||
import ru.ulstu.user.model.User;
|
import ru.ulstu.user.model.User;
|
||||||
@ -19,11 +19,9 @@ import java.util.Map;
|
|||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class MailService {
|
public class MailService {
|
||||||
private final Logger log = LoggerFactory.getLogger(MailService.class);
|
|
||||||
|
|
||||||
private static final String USER = "user";
|
private static final String USER = "user";
|
||||||
private static final String BASE_URL = "baseUrl";
|
private static final String BASE_URL = "baseUrl";
|
||||||
|
private final Logger log = LoggerFactory.getLogger(MailService.class);
|
||||||
private final JavaMailSender javaMailSender;
|
private final JavaMailSender javaMailSender;
|
||||||
private final SpringTemplateEngine templateEngine;
|
private final SpringTemplateEngine templateEngine;
|
||||||
private final MailProperties mailProperties;
|
private final MailProperties mailProperties;
|
||||||
|
@ -26,7 +26,7 @@ public class UserMapper {
|
|||||||
public Set<UserRole> rolesFromDto(Set<UserRoleDto> strings) {
|
public Set<UserRole> rolesFromDto(Set<UserRoleDto> strings) {
|
||||||
return Optional.ofNullable(strings).orElse(Collections.emptySet()).stream()
|
return Optional.ofNullable(strings).orElse(Collections.emptySet()).stream()
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.map(role -> userRoleRepository.findOne(role.getId().toString()))
|
.map(role -> userRoleRepository.getOne(role.getId().toString()))
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import org.slf4j.LoggerFactory;
|
|||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.Sort;
|
import org.springframework.data.domain.Sort;
|
||||||
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||||
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
import org.springframework.security.core.userdetails.UserDetails;
|
import org.springframework.security.core.userdetails.UserDetails;
|
||||||
import org.springframework.security.core.userdetails.UserDetailsService;
|
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
@ -93,7 +94,7 @@ public class UserService implements UserDetailsService {
|
|||||||
|
|
||||||
@Transactional(readOnly = true)
|
@Transactional(readOnly = true)
|
||||||
public PageableItems<UserListDto> getAllUsers(int offset, int count) {
|
public PageableItems<UserListDto> getAllUsers(int offset, int count) {
|
||||||
final Page<User> page = userRepository.findAll(new OffsetablePageRequest(offset, count, new Sort("id")));
|
final Page<User> page = userRepository.findAll(new OffsetablePageRequest(offset, count, Sort.by("id")));
|
||||||
return new PageableItems<>(page.getTotalElements(), userMapper.userEntitiesToUserListDtos(page.getContent()));
|
return new PageableItems<>(page.getTotalElements(), userMapper.userEntitiesToUserListDtos(page.getContent()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,7 +164,7 @@ public class UserService implements UserDetailsService {
|
|||||||
userDto.getId())) {
|
userDto.getId())) {
|
||||||
throw new UserLoginExistsException(userDto.getLogin());
|
throw new UserLoginExistsException(userDto.getLogin());
|
||||||
}
|
}
|
||||||
User user = userRepository.findOne(userDto.getId());
|
User user = userRepository.getOne(userDto.getId());
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
throw new UserNotFoundException(userDto.getId().toString());
|
throw new UserNotFoundException(userDto.getId().toString());
|
||||||
}
|
}
|
||||||
@ -215,7 +216,7 @@ public class UserService implements UserDetailsService {
|
|||||||
userDto.getId())) {
|
userDto.getId())) {
|
||||||
throw new UserEmailExistsException(userDto.getEmail());
|
throw new UserEmailExistsException(userDto.getEmail());
|
||||||
}
|
}
|
||||||
User user = userRepository.findOne(userDto.getId());
|
User user = userRepository.getOne(userDto.getId());
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
throw new UserNotFoundException(userDto.getId().toString());
|
throw new UserNotFoundException(userDto.getId().toString());
|
||||||
}
|
}
|
||||||
@ -234,7 +235,7 @@ public class UserService implements UserDetailsService {
|
|||||||
if (!userDto.isPasswordsValid() || !userDto.isOldPasswordValid()) {
|
if (!userDto.isPasswordsValid() || !userDto.isOldPasswordValid()) {
|
||||||
throw new UserPasswordsNotValidOrNotMatchException();
|
throw new UserPasswordsNotValidOrNotMatchException();
|
||||||
}
|
}
|
||||||
final String login = UserUtils.getCurrentUserLogin();
|
final String login = UserUtils.getCurrentUserLogin(SecurityContextHolder.getContext());
|
||||||
final User user = userRepository.findOneByLoginIgnoreCase(login);
|
final User user = userRepository.findOneByLoginIgnoreCase(login);
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
throw new UserNotFoundException(login);
|
throw new UserNotFoundException(login);
|
||||||
@ -280,7 +281,7 @@ public class UserService implements UserDetailsService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public UserDto deleteUser(Integer userId) {
|
public UserDto deleteUser(Integer userId) {
|
||||||
final User user = userRepository.findOne(userId);
|
final User user = userRepository.getOne(userId);
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
throw new UserNotFoundException(userId.toString());
|
throw new UserNotFoundException(userId.toString());
|
||||||
}
|
}
|
||||||
@ -309,15 +310,15 @@ public class UserService implements UserDetailsService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public List<User> findByIds(List<Integer> ids) {
|
public List<User> findByIds(List<Integer> ids) {
|
||||||
return userRepository.findAll(ids);
|
return userRepository.findAllById(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
public User findById(Integer id) {
|
public User findById(Integer id) {
|
||||||
return userRepository.findOne(id);
|
return userRepository.getOne(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public User getCurrentUser() {
|
public User getCurrentUser() {
|
||||||
String login = UserUtils.getCurrentUserLogin();
|
String login = UserUtils.getCurrentUserLogin(SecurityContextHolder.getContext());
|
||||||
User user = userRepository.findOneByLoginIgnoreCase(login);
|
User user = userRepository.findOneByLoginIgnoreCase(login);
|
||||||
if (user == null) {
|
if (user == null) {
|
||||||
throw new UserNotFoundException(login);
|
throw new UserNotFoundException(login);
|
||||||
|
@ -10,10 +10,13 @@ import ru.ulstu.core.jpa.OffsetablePageRequest;
|
|||||||
import ru.ulstu.core.model.response.PageableItems;
|
import ru.ulstu.core.model.response.PageableItems;
|
||||||
import ru.ulstu.user.error.UserNotFoundException;
|
import ru.ulstu.user.error.UserNotFoundException;
|
||||||
import ru.ulstu.user.model.User;
|
import ru.ulstu.user.model.User;
|
||||||
|
import ru.ulstu.user.model.UserDto;
|
||||||
import ru.ulstu.user.model.UserSession;
|
import ru.ulstu.user.model.UserSession;
|
||||||
import ru.ulstu.user.model.UserSessionListDto;
|
import ru.ulstu.user.model.UserSessionListDto;
|
||||||
import ru.ulstu.user.repository.UserSessionRepository;
|
import ru.ulstu.user.repository.UserSessionRepository;
|
||||||
|
|
||||||
|
import javax.mail.Session;
|
||||||
|
|
||||||
import static ru.ulstu.core.util.StreamApiUtils.convert;
|
import static ru.ulstu.core.util.StreamApiUtils.convert;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@ -22,10 +25,12 @@ public class UserSessionService {
|
|||||||
private final Logger log = LoggerFactory.getLogger(UserSessionService.class);
|
private final Logger log = LoggerFactory.getLogger(UserSessionService.class);
|
||||||
private final UserSessionRepository userSessionRepository;
|
private final UserSessionRepository userSessionRepository;
|
||||||
private final UserService userService;
|
private final UserService userService;
|
||||||
|
private final UserMapper userMapper;
|
||||||
|
|
||||||
public UserSessionService(UserSessionRepository userSessionRepository, UserService userService) {
|
public UserSessionService(UserSessionRepository userSessionRepository, UserService userService, UserMapper userMapper) {
|
||||||
this.userSessionRepository = userSessionRepository;
|
this.userSessionRepository = userSessionRepository;
|
||||||
this.userService = userService;
|
this.userService = userService;
|
||||||
|
this.userMapper = userMapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(readOnly = true)
|
@Transactional(readOnly = true)
|
||||||
@ -54,4 +59,9 @@ public class UserSessionService {
|
|||||||
userSessionRepository.save(userSession);
|
userSessionRepository.save(userSession);
|
||||||
log.debug("User session {} closed", sessionId);
|
log.debug("User session {} closed", sessionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public UserDto getUserBySessionId(String sessionId) {
|
||||||
|
User user = userSessionRepository.findOneBySessionId(sessionId).getUser();
|
||||||
|
return new UserDto(user);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,12 +17,12 @@ public class UserUtils {
|
|||||||
return RandomStringUtils.randomNumeric(DEF_COUNT);
|
return RandomStringUtils.randomNumeric(DEF_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getCurrentUserLogin() {
|
public static String getCurrentUserLogin(SecurityContext securityContext) {
|
||||||
final SecurityContext securityContext = SecurityContextHolder.getContext();
|
|
||||||
if (securityContext == null) {
|
if (securityContext == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
final Authentication authentication = securityContext.getAuthentication();
|
final Authentication authentication = securityContext.getAuthentication();
|
||||||
|
|
||||||
if (authentication.getPrincipal() instanceof UserDetails) {
|
if (authentication.getPrincipal() instanceof UserDetails) {
|
||||||
final UserDetails springSecurityUser = (UserDetails) authentication.getPrincipal();
|
final UserDetails springSecurityUser = (UserDetails) authentication.getPrincipal();
|
||||||
return springSecurityUser.getUsername();
|
return springSecurityUser.getUsername();
|
||||||
|
@ -2,12 +2,11 @@
|
|||||||
spring.main.banner-mode=off
|
spring.main.banner-mode=off
|
||||||
server.port=8443
|
server.port=8443
|
||||||
server.http.port=8080
|
server.http.port=8080
|
||||||
spring.http.multipart.maxFileSize=20MB
|
multipart.maxFileSize=20MB
|
||||||
spring.http.multipart.maxRequestSize=20MB
|
multipart.maxRequestSize=20MB
|
||||||
# Thymeleaf Settings
|
# Thymeleaf Settings
|
||||||
spring.thymeleaf.cache=false
|
spring.thymeleaf.cache=false
|
||||||
# SSL Settings
|
# SSL Settings
|
||||||
security.require-ssl=true
|
|
||||||
server.ssl.key-store=classpath:sample.jks
|
server.ssl.key-store=classpath:sample.jks
|
||||||
server.ssl.key-store-password=secret
|
server.ssl.key-store-password=secret
|
||||||
server.ssl.key-password=password
|
server.ssl.key-password=password
|
||||||
@ -25,12 +24,12 @@ spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFact
|
|||||||
spring.datasource.url=jdbc:postgresql://localhost:5432/ng-tracker
|
spring.datasource.url=jdbc:postgresql://localhost:5432/ng-tracker
|
||||||
spring.datasource.username=postgres
|
spring.datasource.username=postgres
|
||||||
spring.datasource.password=postgres
|
spring.datasource.password=postgres
|
||||||
spring.datasource.driverclassName=org.postgresql.Driver
|
|
||||||
spring.jpa.hibernate.ddl-auto=validate
|
spring.jpa.hibernate.ddl-auto=validate
|
||||||
|
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false
|
||||||
# Liquibase Settings
|
# Liquibase Settings
|
||||||
liquibase.drop-first=false
|
spring.liquibase.change-log=classpath:db/changelog-master.xml
|
||||||
liquibase.enabled=true
|
spring.liquibase.drop-first=false
|
||||||
liquibase.change-log=classpath:db/changelog-master.xml
|
spring.liquibase.enabled=true
|
||||||
# Application Settings
|
# Application Settings
|
||||||
ng-tracker.base-url=http://127.0.0.1:8080
|
ng-tracker.base-url=http://127.0.0.1:8080
|
||||||
ng-tracker.undead-user-login=admin
|
ng-tracker.undead-user-login=admin
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
|
||||||
|
<changeSet author="orion" id="20190423_100000-1">
|
||||||
|
<addColumn tableName="hibernate_sequences">
|
||||||
|
<column name="next_val" type="bigint"/>
|
||||||
|
</addColumn>
|
||||||
|
</changeSet>
|
||||||
|
</databaseChangeLog>
|
@ -2,11 +2,11 @@
|
|||||||
padding-right: 0px;
|
padding-right: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-deadline-date{
|
.form-deadline-date {
|
||||||
padding-right: 3px;
|
padding-right: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.div-deadline-description{
|
.div-deadline-description {
|
||||||
padding-left: 5px;
|
padding-left: 5px;
|
||||||
padding-right: 5px;
|
padding-right: 5px;
|
||||||
}
|
}
|
||||||
|
@ -83,10 +83,10 @@
|
|||||||
margin-right: 4px;
|
margin-right: 4px;
|
||||||
margin-bottom: 4px;
|
margin-bottom: 4px;
|
||||||
|
|
||||||
font-size: 75%;
|
font-size: 75%;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tag-name span[data-role="remove"] {
|
.tag-name span[data-role="remove"] {
|
||||||
|
@ -1,37 +1,37 @@
|
|||||||
/*<![CDATA[*/
|
/*<![CDATA[*/
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
|
|
||||||
$("#tags .tag .tag-name input[type=text]").each(function() {
|
$("#tags .tag .tag-name input[type=text]").each(function () {
|
||||||
$(this).attr("size", $(this).val().length)
|
$(this).attr("size", $(this).val().length)
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
$("#task-form").keydown(function(event){
|
|
||||||
if(event.keyCode == 13) {
|
|
||||||
event.preventDefault();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
function removeTag () {
|
|
||||||
$(this).parent().parent().remove();
|
$("#task-form").keydown(function (event) {
|
||||||
|
if (event.keyCode == 13) {
|
||||||
|
event.preventDefault();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function removeTag() {
|
||||||
|
$(this).parent().parent().remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$("#input-tag").keyup(function (event) {
|
$("#input-tag").keyup(function (event) {
|
||||||
if(event.keyCode == 13 || event.keyCode == 188) {
|
if (event.keyCode == 13 || event.keyCode == 188) {
|
||||||
var tagNumber = $("#tags .tag").length;
|
var tagNumber = $("#tags .tag").length;
|
||||||
var tagName = $.trim($(this).val());
|
var tagName = $.trim($(this).val());
|
||||||
var addTag = true;
|
var addTag = true;
|
||||||
// проверка, добавлен ли этот тег
|
// проверка, добавлен ли этот тег
|
||||||
$("#tags .tag .tag-name input[type=text]").each(function() {
|
$("#tags .tag .tag-name input[type=text]").each(function () {
|
||||||
if(tagName === $(this).val()) {
|
if (tagName === $(this).val()) {
|
||||||
addTag = false;
|
addTag = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// если тег не добавлен
|
// если тег не добавлен
|
||||||
if(addTag) {
|
if (addTag) {
|
||||||
// контейнер тега
|
// контейнер тега
|
||||||
var newTagRow = $("<div/>")
|
var newTagRow = $("<div/>")
|
||||||
.attr("id", 'tags' + tagNumber)
|
.attr("id", 'tags' + tagNumber)
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:th="http://www.thymeleaf.org"
|
xmlns:th="http://www.thymeleaf.org"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default">
|
layout:decorate="~{default}">
|
||||||
<head>
|
<head>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:th="http://www.thymeleaf.org"
|
xmlns:th="http://www.thymeleaf.org"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default">
|
layout:decorate="~{default}">
|
||||||
<head>
|
<head>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:th="http://www.thymeleaf.org"
|
xmlns:th="http://www.thymeleaf.org"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default">
|
layout:decorate="~{default}">
|
||||||
<head>
|
<head>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:th="http://www.thymeleaf.org"
|
xmlns:th="http://www.thymeleaf.org"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default">
|
layout:decorate="~{default}">
|
||||||
<head>
|
<head>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default" xmlns:th="">
|
layout:decorate="~{default}" xmlns:th="">
|
||||||
<head>
|
<head>
|
||||||
<link rel="stylesheet" type="text/css" href="../css/conference.css"/>
|
<link rel="stylesheet" type="text/css" href="../css/conference.css"/>
|
||||||
</head>
|
</head>
|
||||||
|
@ -61,8 +61,14 @@
|
|||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link js-scroll-trigger" target="_blank" href="https://kias.rfbr.ru/">КИАС РФФИ</a>
|
<a class="nav-link js-scroll-trigger" target="_blank" href="https://kias.rfbr.ru/">КИАС РФФИ</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item dropdown">
|
||||||
<a class="nav-link js-scroll-trigger" href="/logout">Выход</a>
|
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
|
Профиль
|
||||||
|
</a>
|
||||||
|
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
|
||||||
|
<a class="dropdown-item" href="/profile/profile">Личный кабинет</a>
|
||||||
|
<a class="dropdown-item" href="/logout">Выход</a>
|
||||||
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default">
|
layout:decorate="~{default}">
|
||||||
<head>
|
<head>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default">
|
layout:decorate="~{default}">
|
||||||
<head>
|
<head>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default">
|
layout:decorate="~{default}">
|
||||||
<head>
|
<head>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default" xmlns:th="http://www.w3.org/1999/xhtml">
|
layout:decorate="~{default}" xmlns:th="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default" xmlns:th="">
|
layout:decorate="~{default}" xmlns:th="">
|
||||||
<head>
|
<head>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default">
|
layout:decorate="~{default}">
|
||||||
<head>
|
<head>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default">
|
layout:decorate="~{default}">
|
||||||
<head>
|
<head>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default" xmlns:th="http://www.w3.org/1999/xhtml">
|
layout:decorate="~{default}" xmlns:th="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default" xmlns:th="http://www.w3.org/1999/xhtml">
|
layout:decorate="~{default}" xmlns:th="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default" xmlns:th="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/html">
|
layout:decorate="~{default}" xmlns:th="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/html">
|
||||||
<head>
|
<head>
|
||||||
<link rel="stylesheet" href="../css/paper.css"/>
|
<link rel="stylesheet" href="../css/paper.css"/>
|
||||||
</head>
|
</head>
|
||||||
@ -95,7 +95,7 @@
|
|||||||
th:onclick="|$('#deadlines${rowStat.index}\\.description').val('');
|
th:onclick="|$('#deadlines${rowStat.index}\\.description').val('');
|
||||||
$('#deadlines${rowStat.index}\\.date').val('');
|
$('#deadlines${rowStat.index}\\.date').val('');
|
||||||
$('#addDeadline').click();|"><span
|
$('#addDeadline').click();|"><span
|
||||||
aria-hidden="true"><i class="fa fa-times"/></span>
|
aria-hidden="true"><i class="fa fa-times"></i></span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default" xmlns:th="">
|
layout:decorate="~{default}" xmlns:th="">
|
||||||
<head>
|
<head>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
71
src/main/resources/templates/profile/profile.html
Normal file
71
src/main/resources/templates/profile/profile.html
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en"
|
||||||
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
|
layout:decorate="~{default}" xmlns:th="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/html">
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="container" layout:fragment="content">
|
||||||
|
<section id="ewrq">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-12 text-center">
|
||||||
|
<h2 class="section-heading text-uppercase">Личный кабинет</h2>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr/>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-12">
|
||||||
|
<form id="profile-form" method="post" th:action="@{'/api/1.0/users/change-information'}"
|
||||||
|
th:object="${userDto}">
|
||||||
|
<input type="hidden" name="id" th:field="*{id}"/>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="firstName">Имя:</label>
|
||||||
|
<input class="form-control" id="firstName" type="text"
|
||||||
|
placeholder="Имя"
|
||||||
|
th:field="*{firstName}"/>
|
||||||
|
<p th:if="${#fields.hasErrors('firstName')}" th:errors="*{firstName}"
|
||||||
|
class="alert alert-danger">Incorrect firstName</p>
|
||||||
|
<p class="help-block text-danger"></p>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="lastName">Фамилия:</label>
|
||||||
|
<input class="form-control" id="lastName" type="text"
|
||||||
|
placeholder="lastName"
|
||||||
|
th:field="*{lastName}"/>
|
||||||
|
<p th:if="${#fields.hasErrors('lastName')}" th:errors="*{lastName}"
|
||||||
|
class="alert alert-danger">Incorrect lastName</p>
|
||||||
|
<p class="help-block text-danger"></p>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="email">Email:</label>
|
||||||
|
<input class="form-control" id="email" type="text"
|
||||||
|
placeholder="Email"
|
||||||
|
th:field="*{email}"/>
|
||||||
|
<p th:if="${#fields.hasErrors('email')}" th:errors="*{email}"
|
||||||
|
class="alert alert-danger">Incorrect email</p>
|
||||||
|
<p class="help-block text-danger"></p>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="login">login:</label>
|
||||||
|
<input class="form-control" id="login" type="text"
|
||||||
|
placeholder="login"
|
||||||
|
th:field="*{login}"/>
|
||||||
|
<p th:if="${#fields.hasErrors('login')}" th:errors="*{login}"
|
||||||
|
class="alert alert-danger">Incorrect login</p>
|
||||||
|
<p class="help-block text-danger"></p>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<button id="sendMessageButton" name="save"
|
||||||
|
class="btn btn-success text-uppercase"
|
||||||
|
type="submit">
|
||||||
|
Сохранить
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -2,7 +2,7 @@
|
|||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:th="http://www.thymeleaf.org"
|
xmlns:th="http://www.thymeleaf.org"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default">
|
layout:decorate="~{default}">
|
||||||
<head>
|
<head>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:th="http://www.thymeleaf.org"
|
xmlns:th="http://www.thymeleaf.org"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default">
|
layout:decorate="~{default}">
|
||||||
<head>
|
<head>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en"
|
<html lang="en"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorator="default">
|
layout:decorate="~{default}">
|
||||||
<head>
|
<head>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
Loading…
Reference in New Issue
Block a user