Showing with 1,670 additions and 1,722 deletions.
  1. +0 −12 ...ersistence/src/main/java/fi/otavanopisto/muikku/plugins/communicator/model/CommunicatorLabel.java
  2. +1 −3 ...e/src/main/java/fi/otavanopisto/muikku/plugins/communicator/model/CommunicatorMessageIdLabel.java
  3. +1 −3 ...stence/src/main/java/fi/otavanopisto/muikku/plugins/communicator/model/CommunicatorUserLabel.java
  4. +3 −16 ...src/main/java/fi/otavanopisto/muikku/plugins/announcer/WorkspaceAnnouncementsViewBackingBean.java
  5. +3 −27 ...plugins/src/main/java/fi/otavanopisto/muikku/plugins/announcer/WorkspaceAnnouncerBackingBean.java
  6. +1 −1 .../src/main/java/fi/otavanopisto/muikku/plugins/communicator/dao/CommunicatorMessageIdLabelDAO.java
  7. +2 −14 ...ugins/src/main/java/fi/otavanopisto/muikku/plugins/communicator/dao/CommunicatorUserLabelDAO.java
  8. +5 −33 .../src/main/java/fi/otavanopisto/muikku/plugins/communicator/rest/CommunicatorLabelRESTService.java
  9. +3 −14 ...re-plugins/src/main/java/fi/otavanopisto/muikku/plugins/coursepicker/CoursePickerRESTService.java
  10. +0 −11 ...core-plugins/src/main/java/fi/otavanopisto/muikku/plugins/coursepicker/CoursePickerWorkspace.java
  11. +25 −0 muikku-core-plugins/src/main/java/fi/otavanopisto/muikku/plugins/workspace/WorkspaceBackingBean.java
  12. +2 −5 ...ugins/src/main/java/fi/otavanopisto/muikku/plugins/workspace/WorkspaceDiscussionsBackingBean.java
  13. +1 −2 ...c/main/java/fi/otavanopisto/muikku/plugins/workspace/WorkspaceFrontPageManagementBackingBean.java
  14. +2 −14 ...-plugins/src/main/java/fi/otavanopisto/muikku/plugins/workspace/WorkspaceHelpPageBackingBean.java
  15. +1 −3 ...rc/main/java/fi/otavanopisto/muikku/plugins/workspace/WorkspaceHelpPageManagementBackingBean.java
  16. +2 −3 ...ns/src/main/java/fi/otavanopisto/muikku/plugins/workspace/WorkspaceMaterialUploadBackingBean.java
  17. +3 −21 ...plugins/src/main/java/fi/otavanopisto/muikku/plugins/workspace/WorkspaceMaterialsBackingBean.java
  18. +1 −3 ...c/main/java/fi/otavanopisto/muikku/plugins/workspace/WorkspaceMaterialsManagementBackingBean.java
  19. +2 −13 .../src/main/java/fi/otavanopisto/muikku/plugins/workspace/WorkspaceMaterialsReadingBackingBean.java
  20. +1 −2 ...main/java/fi/otavanopisto/muikku/plugins/workspace/WorkspacePermissionsManagementBackingBean.java
  21. +1 −2 .../java/fi/otavanopisto/muikku/plugins/workspace/WorkspacePermissionsRoleManagementBackingBean.java
  22. +0 −6 muikku-core-plugins/src/main/resources/META-INF/resources/dust/communicator/communicator_items.dust
  23. +0 −6 ...core-plugins/src/main/resources/META-INF/resources/dust/communicator/communicator_items_open.dust
  24. +0 −3 muikku-core-plugins/src/main/resources/META-INF/resources/dust/coursepicker/coursepickercourse.dust
  25. +0 −2 muikku-core-plugins/src/main/resources/META-INF/resources/jsf/coursepicker/index.xhtml
  26. +1 −1 muikku-core-plugins/src/main/resources/META-INF/resources/jsf/workspace/journal.xhtml
  27. +8 −2 muikku-core-plugins/src/main/resources/META-INF/resources/jsf/workspace/materials-reading.xhtml
  28. +8 −2 muikku-core-plugins/src/main/resources/META-INF/resources/jsf/workspace/materials.xhtml
  29. +1 −1 muikku-core-plugins/src/main/resources/META-INF/resources/jsf/workspace/users.xhtml
  30. +5 −0 muikku-core-plugins/src/main/resources/META-INF/resources/jsf/workspace/workspace-management.xhtml
  31. +60 −57 muikku-core-plugins/src/main/resources/META-INF/resources/scripts/gui/communicator.js
  32. +0 −13 muikku-core-plugins/src/main/resources/META-INF/resources/scripts/gui/coursepicker.js
  33. +11 −0 muikku-core-plugins/src/main/resources/META-INF/resources/scripts/gui/workspace-management.js
  34. +19 −0 ...-core-plugins/src/main/resources/META-INF/resources/scripts/gui/workspace-materials-management.js
  35. +1 −0 ...src/main/resources/fi/otavanopisto/muikku/plugins/workspace/WorkspacePluginMessages_en.properties
  36. +1 −0 ...src/main/resources/fi/otavanopisto/muikku/plugins/workspace/WorkspacePluginMessages_fi.properties
  37. +1 −3 muikku-core/src/main/java/fi/otavanopisto/muikku/schooldata/WorkspaceController.java
  38. +4 −0 muikku-core/src/main/java/fi/otavanopisto/muikku/schooldata/WorkspaceEntityController.java
  39. +20 −3 muikku-persistence/src/main/java/fi/otavanopisto/muikku/dao/workspace/WorkspaceEntityDAO.java
  40. +40 −8 .../main/java/fi/otavanopisto/muikku/plugins/schooldatapyramus/PyramusWorkspaceSchoolDataBridge.java
  41. +4 −0 muikku/src/main/webapp/WEB-INF/templates/flex-main-workspace.xhtml
  42. +4 −0 muikku/src/main/webapp/WEB-INF/templates/flex-materials-fullscreen-view.xhtml
  43. +10 −3 muikku/src/main/webapp/resources/theme-muikku/sass/flex/evaluation.scss
  44. +123 −123 muikku/src/main/webapp/resources/theme-muikku/sass/flex/workspace-discussions.scss
  45. +5 −1 muikku/src/main/webapp/resources/theme-muikku/sass/flex/workspace-journal.scss
  46. +26 −0 muikku/src/main/webapp/resources/theme-muikku/sass/flex/workspace-management.scss
  47. +644 −642 muikku/src/main/webapp/resources/theme-muikku/sass/flex/workspace-materials-management.scss
  48. +367 −389 muikku/src/main/webapp/resources/theme-muikku/sass/flex/workspace-materials-reading.scss
  49. +242 −250 muikku/src/main/webapp/resources/theme-muikku/sass/flex/workspace-materials.scss
  50. +5 −4 muikku/src/main/webapp/resources/theme-muikku/sass/flex/workspace-users.scss
  51. +0 −1 updates/1.0145/160822-communicator-userlabel.xml
@@ -29,23 +29,11 @@ public void setColor(Long color) {
this.color = color;
}

public Boolean getArchived() {
return archived;
}

public void setArchived(Boolean archived) {
this.archived = archived;
}

@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
private Long id;

@NotNull
@Column(nullable = false)
private Long color;

@NotNull
@Column(nullable = false)
private Boolean archived;
}
@@ -7,10 +7,8 @@
import javax.persistence.Id;
import javax.persistence.ManyToOne;

import fi.otavanopisto.security.ContextReference;

@Entity
public class CommunicatorMessageIdLabel implements ContextReference {
public class CommunicatorMessageIdLabel {

public Long getId() {
return id;
@@ -6,11 +6,9 @@

import org.hibernate.validator.constraints.NotEmpty;

import fi.otavanopisto.security.ContextReference;

@Entity
@PrimaryKeyJoinColumn(name = "id")
public class CommunicatorUserLabel extends CommunicatorLabel implements ContextReference {
public class CommunicatorUserLabel extends CommunicatorLabel {

public Long getUserEntity() {
return userEntity;
@@ -91,23 +91,10 @@ public String init() {
}
}

workspaceBackingBean.setWorkspaceUrlName(urlName);

schoolDataBridgeSessionController.startSystemSession();
try {
Workspace workspace = workspaceController.findWorkspace(workspaceEntity);
if (workspace == null) {
logger.log(Level.SEVERE, String.format("Could not find workspace for workspace entity (%d)", workspaceEntity.getId()));
return NavigationRules.NOT_FOUND;
}

workspaceName = workspace.getName();
workspaceNameExtension = workspace.getNameExtension();
} finally {
schoolDataBridgeSessionController.endSystemSession();
}

workspaceEntityId = workspaceEntity.getId();
workspaceBackingBean.setWorkspaceUrlName(urlName);
workspaceName = workspaceBackingBean.getWorkspaceName();
workspaceNameExtension = workspaceBackingBean.getWorkspaceNameExtension();

if (announcementId != null) {
currentAnnouncement = announcementController.findById(announcementId);
@@ -1,8 +1,5 @@
package fi.otavanopisto.muikku.plugins.announcer;

import java.util.logging.Level;
import java.util.logging.Logger;

import javax.ejb.Stateful;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
@@ -18,9 +15,7 @@
import fi.otavanopisto.muikku.model.workspace.WorkspaceAccess;
import fi.otavanopisto.muikku.model.workspace.WorkspaceEntity;
import fi.otavanopisto.muikku.plugins.workspace.WorkspaceBackingBean;
import fi.otavanopisto.muikku.schooldata.SchoolDataBridgeSessionController;
import fi.otavanopisto.muikku.schooldata.WorkspaceController;
import fi.otavanopisto.muikku.schooldata.entity.Workspace;
import fi.otavanopisto.muikku.security.MuikkuPermissions;
import fi.otavanopisto.muikku.session.SessionController;

@@ -33,9 +28,6 @@ public class WorkspaceAnnouncerBackingBean {
@Parameter
private String workspaceUrlName;

@Inject
private Logger logger;

@Inject
private SessionController sessionController;

@@ -45,9 +37,6 @@ public class WorkspaceAnnouncerBackingBean {
@Inject
private NavigationController navigationController;

@Inject
private SchoolDataBridgeSessionController schoolDataBridgeSessionController;

@Inject
@Named
private WorkspaceBackingBean workspaceBackingBean;
@@ -82,23 +71,10 @@ public String init() {
}
}

workspaceBackingBean.setWorkspaceUrlName(urlName);

schoolDataBridgeSessionController.startSystemSession();
try {
Workspace workspace = workspaceController.findWorkspace(workspaceEntity);
if (workspace == null) {
logger.log(Level.SEVERE, String.format("Could not find workspace for workspace entity (%d)", workspaceEntity.getId()));
return NavigationRules.NOT_FOUND;
}

workspaceName = workspace.getName();
workspaceNameExtension = workspace.getNameExtension();
} finally {
schoolDataBridgeSessionController.endSystemSession();
}

workspaceEntityId = workspaceEntity.getId();
workspaceBackingBean.setWorkspaceUrlName(urlName);
workspaceName = workspaceBackingBean.getWorkspaceName();
workspaceNameExtension = workspaceBackingBean.getWorkspaceNameExtension();

return null;
}
@@ -17,7 +17,7 @@

public class CommunicatorMessageIdLabelDAO extends CorePluginsDAO<CommunicatorMessageIdLabel> {

private static final long serialVersionUID = -7513353900590903561L;
private static final long serialVersionUID = -6282680425734880911L;

public CommunicatorMessageIdLabel create(UserEntity userEntity, CommunicatorMessageId messageId, CommunicatorLabel label) {
CommunicatorMessageIdLabel communicatorUserLabel = new CommunicatorMessageIdLabel();
@@ -14,15 +14,14 @@

public class CommunicatorUserLabelDAO extends CorePluginsDAO<CommunicatorUserLabel> {

private static final long serialVersionUID = -7513353900590903561L;
private static final long serialVersionUID = -5030572490919278599L;

public CommunicatorUserLabel create(String name, Long color, UserEntity userEntity) {
CommunicatorUserLabel communicatorUserLabel = new CommunicatorUserLabel();

communicatorUserLabel.setName(name);
communicatorUserLabel.setColor(color);
communicatorUserLabel.setUserEntity(userEntity.getId());
communicatorUserLabel.setArchived(false);

getEntityManager().persist(communicatorUserLabel);

@@ -37,10 +36,7 @@ public List<CommunicatorUserLabel> listByUser(UserEntity userEntity) {
Root<CommunicatorUserLabel> root = criteria.from(CommunicatorUserLabel.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(CommunicatorUserLabel_.userEntity), userEntity.getId()),
criteriaBuilder.equal(root.get(CommunicatorUserLabel_.archived), Boolean.FALSE)
)
criteriaBuilder.equal(root.get(CommunicatorUserLabel_.userEntity), userEntity.getId())
);

return entityManager.createQuery(criteria).getResultList();
@@ -55,14 +51,6 @@ public CommunicatorUserLabel update(CommunicatorUserLabel communicatorUserLabel,
return communicatorUserLabel;
}

public CommunicatorUserLabel updateArchived(CommunicatorUserLabel communicatorUserLabel, Boolean archived) {
communicatorUserLabel.setArchived(archived);

getEntityManager().persist(communicatorUserLabel);

return communicatorUserLabel;
}

@Override
public void delete(CommunicatorUserLabel communicatorUserLabel) {
super.delete(communicatorUserLabel);
@@ -35,7 +35,7 @@
@Produces ("application/json")
public class CommunicatorLabelRESTService extends PluginRESTService {

private static final long serialVersionUID = 5020674196438210604L;
private static final long serialVersionUID = 6680345677459264564L;

@Inject
@BaseUrl
@@ -79,7 +79,7 @@ public Response createMessageIdLabel(

CommunicatorLabel label = communicatorController.findUserLabelById(newLabel.getLabelId());

if (canAccessLabel(userEntity, label)) {
if ((label != null) && canAccessLabel(userEntity, label)) {
CommunicatorMessageIdLabel userLabel = communicatorController.findMessageIdLabel(userEntity, messageId, label);

if (userLabel == null) {
@@ -103,12 +103,10 @@ public Response getMessageIdLabel(
@PathParam ("COMMUNICATORMESSAGEID") Long communicatorMessageId,
@PathParam ("LABELID") Long labelId
) throws AuthorizationException {
// CommunicatorMessageId messageId = communicatorController.findCommunicatorMessageId(communicatorMessageId);
CommunicatorMessageIdLabel label = communicatorController.findMessageIdLabelById(labelId);
UserEntity userEntity = sessionController.getLoggedUserEntity();

if (!canAccessLabel(userEntity, label.getLabel())) {
// if (!sessionController.hasPermission(CommunicatorPermissionCollection.COMMUNICATOR_MANAGE_SETTINGS, userLabel)) {
return Response.status(Status.FORBIDDEN).build();
}

@@ -123,12 +121,10 @@ public Response getMessageIdLabel(
public Response deleteUserLabel(
@PathParam ("COMMUNICATORMESSAGEID") Long communicatorMessageId,
@PathParam ("LABELID") Long userLabelId) throws AuthorizationException {
// CommunicatorMessageId messageId = communicatorController.findCommunicatorMessageId(communicatorMessageId);
CommunicatorMessageIdLabel label = communicatorController.findMessageIdLabelById(userLabelId);
UserEntity userEntity = sessionController.getLoggedUserEntity();

if (!canAccessLabel(userEntity, label.getLabel())) {
// if (!sessionController.hasPermission(CommunicatorPermissionCollection.COMMUNICATOR_MANAGE_SETTINGS, userLabel)) {
return Response.status(Status.FORBIDDEN).build();
}

@@ -137,30 +133,6 @@ public Response deleteUserLabel(
return Response.noContent().build();
}

// @POST
// @Path ("/userLabels/{USERLABELID}")
// @RESTPermit(handling = Handling.INLINE, requireLoggedIn = true)
// public Response editUserLabel(
// @PathParam ("USERLABELID") Long userLabelId,
// CommunicatorUserLabelRESTModel updatedUserLabel
// ) throws AuthorizationException {
// if (!updatedUserLabel.getId().equals(userLabelId)) {
// return Response.status(Response.Status.BAD_REQUEST).entity("Id is immutable").build();
// }
//
// CommunicatorUserLabel userLabel = communicatorController.findUserLabelById(userLabelId);
//
// if (!sessionController.hasPermission(CommunicatorPermissionCollection.COMMUNICATOR_MANAGE_SETTINGS, userLabel)) {
// return Response.status(Status.FORBIDDEN).build();
// }
//
// CommunicatorUserLabel editedUserLabel = communicatorController.updateUserLabel(userLabel, updatedUserLabel.getName(), updatedUserLabel.getColor());
//
// return Response.ok(
// toRESTModel(editedUserLabel)
// ).build();
// }

@GET
@Path ("/userLabels")
@RESTPermit(handling = Handling.INLINE, requireLoggedIn = true)
@@ -203,7 +175,7 @@ public Response getUserLabel(
UserEntity userEntity = sessionController.getLoggedUserEntity();
CommunicatorUserLabel userLabel = communicatorController.findUserLabelById(userLabelId);

if (canAccessLabel(userEntity, userLabel)) {
if ((userLabel != null) && canAccessLabel(userEntity, userLabel)) {
return Response.ok(
toRESTModel(userLabel)
).build();
@@ -221,7 +193,7 @@ public Response deleteUserLabel(
UserEntity userEntity = sessionController.getLoggedUserEntity();
CommunicatorUserLabel userLabel = communicatorController.findUserLabelById(userLabelId);

if (canAccessLabel(userEntity, userLabel)) {
if ((userLabel != null) && canAccessLabel(userEntity, userLabel)) {
communicatorController.delete(userLabel);

return Response.noContent().build();
@@ -244,7 +216,7 @@ public Response editUserLabel(
UserEntity userEntity = sessionController.getLoggedUserEntity();
CommunicatorUserLabel userLabel = communicatorController.findUserLabelById(userLabelId);

if (canAccessLabel(userEntity, userLabel)) {
if ((userLabel != null) && canAccessLabel(userEntity, userLabel)) {
CommunicatorUserLabel editedUserLabel = communicatorController.updateUserLabel(userLabel, updatedUserLabel.getName(), updatedUserLabel.getColor());

return Response.ok(
@@ -263,7 +263,6 @@ public Response listWorkspaces(
String description = (String) result.get("description");
boolean canSignup = getCanSignup(workspaceEntity);
boolean isCourseMember = getIsAlreadyOnWorkspace(workspaceEntity);
Boolean canCopyWorkspace = getCopyWorkspace(workspaceEntity);
String educationTypeId = (String) result.get("educationTypeIdentifier");
String educationTypeName = null;

@@ -282,7 +281,7 @@ public Response listWorkspaces(
}

if (StringUtils.isNotBlank(name)) {
workspaces.add(createRestModel(workspaceEntity, name, nameExtension, description, educationTypeName, canSignup, canCopyWorkspace, isCourseMember));
workspaces.add(createRestModel(workspaceEntity, name, nameExtension, description, educationTypeName, canSignup, isCourseMember));
} else {
logger.severe(String.format("Search index contains workspace %s that does not have a name", workspaceIdentifier));
}
@@ -351,7 +350,6 @@ public Response getWorkspace(@PathParam("ID") Long workspaceEntityId) {

boolean canSignup = getCanSignup(workspaceEntity);
boolean isCourseMember = getIsAlreadyOnWorkspace(workspaceEntity);
Boolean canCopyWorkspace = getCopyWorkspace(workspaceEntity);
String educationTypeName = null;

if (workspace.getWorkspaceTypeId() != null) {
@@ -361,7 +359,7 @@ public Response getWorkspace(@PathParam("ID") Long workspaceEntityId) {
}
}

return Response.ok(createRestModel(workspaceEntity, workspace.getName(), workspace.getNameExtension(), workspace.getDescription(), educationTypeName, canSignup, canCopyWorkspace, isCourseMember)).build();
return Response.ok(createRestModel(workspaceEntity, workspace.getName(), workspace.getNameExtension(), workspace.getDescription(), educationTypeName, canSignup, isCourseMember)).build();
}

@POST
@@ -493,14 +491,6 @@ private boolean getCanSignup(WorkspaceEntity workspaceEntity) {
return false;
}

private boolean getCopyWorkspace(WorkspaceEntity workspaceEntity) {
if (sessionController.isLoggedIn()) {
return sessionController.hasEnvironmentPermission(MuikkuPermissions.COPY_WORKSPACE);
}

return false;
}

private Long getWorkspaceStudentRoleId() {
List<WorkspaceRoleEntity> workspaceStudentRoles = roleController.listWorkspaceRoleEntitiesByArchetype(WorkspaceRoleArchetype.STUDENT);
if (workspaceStudentRoles.size() == 1) {
@@ -511,7 +501,7 @@ private Long getWorkspaceStudentRoleId() {
}
}

private CoursePickerWorkspace createRestModel(WorkspaceEntity workspaceEntity, String name, String nameExtension, String description, String educationTypeName, boolean canSignup, Boolean canCopyWorkspace, boolean isCourseMember) {
private CoursePickerWorkspace createRestModel(WorkspaceEntity workspaceEntity, String name, String nameExtension, String description, String educationTypeName, boolean canSignup, boolean isCourseMember) {
Long numVisits = workspaceVisitController.getNumVisits(workspaceEntity);
Date lastVisit = workspaceVisitController.getLastVisit(workspaceEntity);
return new CoursePickerWorkspace(
@@ -526,7 +516,6 @@ private CoursePickerWorkspace createRestModel(WorkspaceEntity workspaceEntity, S
lastVisit,
educationTypeName,
canSignup,
canCopyWorkspace,
isCourseMember);
}