Showing with 2,694 additions and 1,008 deletions.
  1. +1 −1 muikku-atests-plugin-rest-model/pom.xml
  2. +1 −1 muikku-atests-plugin/pom.xml
  3. +0 −1 muikku-atests-plugin/src/main/java/fi/otavanopisto/muikku/atests/AcceptanceTestsRESTService.java
  4. +1 −1 muikku-atests/pom.xml
  5. +1 −0 muikku-atests/src/test/java/fi/otavanopisto/muikku/ui/PyramusMocks.java
  6. +1 −1 muikku-atests/src/test/java/fi/otavanopisto/muikku/ui/base/announcer/AnnouncerTestsBase.java
  7. +1 −1 muikku-atests/src/test/java/fi/otavanopisto/muikku/ui/base/course/picker/CoursePickerTestsBase.java
  8. +3 −3 muikku-atests/src/test/java/fi/otavanopisto/muikku/ui/base/course/users/CourseUsersTestsBase.java
  9. +0 −1 muikku-atests/src/test/java/fi/otavanopisto/muikku/ui/base/user/UserTestsBase.java
  10. +0 −2 muikku-atests/src/test/java/fi/otavanopisto/muikku/ui/sauce/user/UserTestsIT.java
  11. +5 −5 muikku-bom/pom.xml
  12. +1 −1 muikku-calendar/pom.xml
  13. +1 −1 muikku-core-plugins-persistence/pom.xml
  14. +17 −0 ...-persistence/src/main/java/fi/otavanopisto/muikku/plugins/material/model/QueryOrganizerField.java
  15. +21 −0 ...in/java/fi/otavanopisto/muikku/plugins/workspace/model/WorkspaceMaterialOrganizerFieldAnswer.java
  16. +3 −3 muikku-core-plugins/pom.xml
  17. +84 −22 ...plugins/src/main/java/fi/otavanopisto/muikku/plugins/announcer/WorkspaceAnnouncerBackingBean.java
  18. +0 −4 ...ugins/src/main/java/fi/otavanopisto/muikku/plugins/communicator/rest/CommunicatorRESTService.java
  19. +2 −8 ...ugins/src/main/java/fi/otavanopisto/muikku/plugins/guidancerequest/GuidanceRequestController.java
  20. +0 −66 ...gins/src/main/java/fi/otavanopisto/muikku/plugins/guidancerequest/GuidanceRequestRESTService.java
  21. +1 −11 ...main/java/fi/otavanopisto/muikku/plugins/guidancerequest/GuidanceRequestSeekerResultProvider.java
  22. +30 −0 ...lugins/src/main/java/fi/otavanopisto/muikku/plugins/material/HtmlMaterialFieldChangeListener.java
  23. +61 −0 ...-plugins/src/main/java/fi/otavanopisto/muikku/plugins/material/QueryOrganizerFieldController.java
  24. +1 −4 muikku-core-plugins/src/main/java/fi/otavanopisto/muikku/plugins/material/coops/CoOpsApiImpl.java
  25. +48 −0 ...ore-plugins/src/main/java/fi/otavanopisto/muikku/plugins/material/dao/QueryOrganizerFieldDAO.java
  26. +33 −0 ...s/src/main/java/fi/otavanopisto/muikku/plugins/material/fieldmeta/OrganizerFieldCategoryMeta.java
  27. +33 −0 .../main/java/fi/otavanopisto/muikku/plugins/material/fieldmeta/OrganizerFieldCategoryTermsMeta.java
  28. +83 −0 ...e-plugins/src/main/java/fi/otavanopisto/muikku/plugins/material/fieldmeta/OrganizerFieldMeta.java
  29. +33 −0 ...ugins/src/main/java/fi/otavanopisto/muikku/plugins/material/fieldmeta/OrganizerFieldTermMeta.java
  30. +0 −3 ...e-plugins/src/main/java/fi/otavanopisto/muikku/plugins/material/rest/HtmlMaterialRESTService.java
  31. +0 −13 muikku-core-plugins/src/main/java/fi/otavanopisto/muikku/plugins/wall/WallPluginDescriptor.java
  32. +0 −4 ...core-plugins/src/main/java/fi/otavanopisto/muikku/plugins/wall/impl/DefaultWallEntryProvider.java
  33. +10 −0 ...core-plugins/src/main/java/fi/otavanopisto/muikku/plugins/workspace/QueryFieldChangeListener.java
  34. +20 −0 ...rc/main/java/fi/otavanopisto/muikku/plugins/workspace/WorkspaceMaterialFieldAnswerController.java
  35. +77 −0 .../src/main/java/fi/otavanopisto/muikku/plugins/workspace/WorkspaceMaterialFieldChangeListener.java
  36. +64 −0 ...n/java/fi/otavanopisto/muikku/plugins/workspace/dao/WorkspaceMaterialOrganizerFieldAnswerDAO.java
  37. +48 −0 .../main/java/fi/otavanopisto/muikku/plugins/workspace/fieldio/WorkspaceOrganizerFieldIOHandler.java
  38. +34 −1 ...ore-plugins/src/main/java/fi/otavanopisto/muikku/plugins/workspace/rest/WorkspaceRESTService.java
  39. +4 −0 muikku-core-plugins/src/main/resources/META-INF/resources/dust/announcer/announcer_empty.dust
  40. +2 −1 muikku-core-plugins/src/main/resources/META-INF/resources/dust/discussion/discussion_item_open.dust
  41. +2 −1 muikku-core-plugins/src/main/resources/META-INF/resources/dust/discussion/discussion_reply.dust
  42. +0 −24 muikku-core-plugins/src/main/resources/META-INF/resources/jsf/announcer/workspace_announcer.xhtml
  43. +1 −1 muikku-core-plugins/src/main/resources/META-INF/resources/jsf/coursepicker/index.xhtml
  44. +1 −1 muikku-core-plugins/src/main/resources/META-INF/resources/jsf/discussion/index.xhtml
  45. +1 −0 muikku-core-plugins/src/main/resources/META-INF/resources/jsf/guider/templates/guider_base.xhtml
  46. +1 −0 muikku-core-plugins/src/main/resources/META-INF/resources/jsf/workspace/help.xhtml
  47. +1 −1 muikku-core-plugins/src/main/resources/META-INF/resources/jsf/workspace/materials.xhtml
  48. +1 −0 ...in/resources/META-INF/resources/jsf/workspace/templates/workspace-materials-management-view.xhtml
  49. +1 −0 .../main/resources/META-INF/resources/jsf/workspace/templates/workspace-materials-reading-view.xhtml
  50. +3 −0 muikku-core-plugins/src/main/resources/META-INF/resources/jsf/workspace/workspace.xhtml
  51. +37 −0 muikku-core-plugins/src/main/resources/META-INF/resources/jsf/workspace/workspace_announcer.xhtml
  52. +20 −0 ...ore-plugins/src/main/resources/META-INF/resources/scripts/ckplugins/muikku-image-target/plugin.js
  53. BIN ...A-INF/resources/scripts/ckplugins/muikku-organizerfield/gfx/muikku-placeholder-organizerfield.gif
  54. BIN .../META-INF/resources/scripts/ckplugins/muikku-organizerfield/icons/hidpi/muikku-organizerfield.png
  55. BIN ...ources/META-INF/resources/scripts/ckplugins/muikku-organizerfield/icons/muikku-organizerfield.png
  56. +10 −0 ...-plugins/src/main/resources/META-INF/resources/scripts/ckplugins/muikku-organizerfield/lang/en.js
  57. +10 −0 ...-plugins/src/main/resources/META-INF/resources/scripts/ckplugins/muikku-organizerfield/lang/fi.js
  58. +410 −0 ...e-plugins/src/main/resources/META-INF/resources/scripts/ckplugins/muikku-organizerfield/plugin.js
  59. +29 −26 .../main/resources/META-INF/resources/scripts/ckplugins/muikku-word-definition/dialogs/definition.js
  60. +73 −43 muikku-core-plugins/src/main/resources/META-INF/resources/scripts/gui/discussion.js
  61. +8 −2 muikku-core-plugins/src/main/resources/META-INF/resources/scripts/gui/guider.js
  62. +52 −28 muikku-core-plugins/src/main/resources/META-INF/resources/scripts/gui/muikku-field.js
  63. +245 −0 muikku-core-plugins/src/main/resources/META-INF/resources/scripts/gui/muikku-material-loader.js
  64. +42 −0 muikku-core-plugins/src/main/resources/META-INF/resources/scripts/gui/muikku-word-definition.js
  65. +1 −1 muikku-core-plugins/src/main/resources/META-INF/resources/scripts/gui/records.js
  66. +7 −1 muikku-core-plugins/src/main/resources/META-INF/resources/scripts/gui/socialnavigation.js
  67. +29 −5 muikku-core-plugins/src/main/resources/META-INF/resources/scripts/gui/workspace-discussions.js
  68. +7 −2 ...-core-plugins/src/main/resources/META-INF/resources/scripts/gui/workspace-material-editor-html.js
  69. +1 −1 muikku-core-plugins/src/main/resources/META-INF/resources/widgets/coursepicker-change-view.xhtml
  70. +4 −2 ...ugins/src/main/resources/fi/otavanopisto/muikku/plugins/forum/ForumJsPluginMessages_en.properties
  71. +3 −2 ...ugins/src/main/resources/fi/otavanopisto/muikku/plugins/forum/ForumJsPluginMessages_fi.properties
  72. +2 −1 ...src/main/resources/fi/otavanopisto/muikku/plugins/workspace/WorkspacePluginMessages_en.properties
  73. +2 −1 ...src/main/resources/fi/otavanopisto/muikku/plugins/workspace/WorkspacePluginMessages_fi.properties
  74. +1 −1 muikku-core/pom.xml
  75. +0 −2 muikku-core/src/main/java/fi/otavanopisto/muikku/notifier/NotifierController.java
  76. +2 −0 muikku-core/src/main/java/fi/otavanopisto/muikku/plugin/AfterPluginInitEvent.java
  77. +2 −2 muikku-core/src/main/java/fi/otavanopisto/muikku/search/SearchProvider.java
  78. +4 −0 muikku-core/src/main/java/fi/otavanopisto/muikku/security/MuikkuPermissions.java
  79. +8 −6 muikku-core/src/main/java/fi/otavanopisto/muikku/security/impl/DefaultPermissionResolver.java
  80. +1 −1 muikku-debug/pom.xml
  81. +1 −1 muikku-deus-nex-machina/pom.xml
  82. +1 −1 muikku-developer-tools/pom.xml
  83. +1 −1 muikku-dummy-mail-bridge-plugin/pom.xml
  84. +1 −1 muikku-elastic-search/pom.xml
  85. +4 −2 muikku-elastic-search/src/main/java/fi/otavanopisto/muikku/plugins/search/ElasticSearchProvider.java
  86. +1 −1 muikku-evaluation-plugin-persistence/pom.xml
  87. +1 −1 muikku-evaluation-plugin-rest-model/pom.xml
  88. +1 −1 muikku-evaluation-plugin/pom.xml
  89. +5 −0 muikku-evaluation-plugin/src/main/resources/META-INF/resources/jsf/evaluation/index.xhtml
  90. +73 −2 muikku-evaluation-plugin/src/main/resources/META-INF/resources/scripts/gui/evaluation.js
  91. +1 −1 muikku-facebook-oauth/pom.xml
  92. +1 −1 muikku-forum-plugin-rest-model/pom.xml
  93. +2 −2 muikku-google-calendar/pom.xml
  94. +1 −1 muikku-google-oauth/pom.xml
  95. +1 −1 muikku-h2db-plugin/pom.xml
  96. +1 −1 muikku-hsqldb-plugin/pom.xml
  97. +1 −1 muikku-jndi-mail-bridge-plugin/pom.xml
  98. +1 −1 muikku-mongo-log/pom.xml
  99. +1 −1 muikku-persistence/pom.xml
  100. +1 −1 muikku-plugin/pom.xml
  101. +1 −1 muikku-pyramus-oauth/pom.xml
  102. +1 −1 muikku-rest/pom.xml
  103. +17 −1 muikku-rest/src/main/java/fi/otavanopisto/muikku/rest/user/UserRESTService.java
  104. +1 −1 muikku-school-data-pyramus-persistence/pom.xml
  105. +1 −1 muikku-school-data-pyramus/pom.xml
  106. +16 −16 muikku/pom.xml
  107. +0 −3 muikku/src/main/java/fi/otavanopisto/muikku/facelets/WidgetSpaceSetComponent.java
  108. +0 −8 muikku/src/main/java/fi/otavanopisto/muikku/scheduler/Scheduler.java
  109. +0 −83 muikku/src/main/java/fi/otavanopisto/muikku/servlet/UserPictureUploadServlet.java
  110. +0 −3 muikku/src/main/webapp/META-INF/dust/discussion/discussion-confirm-thread-removal.dust
  111. +0 −28 muikku/src/main/webapp/META-INF/dust/discussion/discussion_create_area.dust
  112. +0 −49 muikku/src/main/webapp/META-INF/dust/discussion/discussion_create_message.dust
  113. +0 −37 muikku/src/main/webapp/META-INF/dust/discussion/discussion_create_reply.dust
  114. +0 −39 muikku/src/main/webapp/META-INF/dust/discussion/discussion_delete_area.dust
  115. +0 −38 muikku/src/main/webapp/META-INF/dust/discussion/discussion_edit_area.dust
  116. +0 −39 muikku/src/main/webapp/META-INF/dust/discussion/discussion_edit_message.dust
  117. +0 −34 muikku/src/main/webapp/META-INF/dust/discussion/discussion_edit_reply.dust
  118. +0 −6 muikku/src/main/webapp/META-INF/dust/discussion/discussion_empty.dust
  119. +0 −24 muikku/src/main/webapp/META-INF/dust/discussion/discussion_item.dust
  120. +0 −42 muikku/src/main/webapp/META-INF/dust/discussion/discussion_item_open.dust
  121. +0 −11 muikku/src/main/webapp/META-INF/dust/discussion/discussion_items.dust
  122. +0 −8 muikku/src/main/webapp/META-INF/dust/discussion/discussion_items_open.dust
  123. +0 −27 muikku/src/main/webapp/META-INF/dust/discussion/discussion_page.dust
  124. +0 −3 muikku/src/main/webapp/META-INF/dust/discussion/discussion_replies.dust
  125. +0 −27 muikku/src/main/webapp/META-INF/dust/discussion/discussion_replies_page.dust
  126. +0 −36 muikku/src/main/webapp/META-INF/dust/discussion/discussion_reply.dust
  127. +1 −0 muikku/src/main/webapp/WEB-INF/templates/default.xhtml
  128. +1 −0 muikku/src/main/webapp/WEB-INF/templates/flex-base.xhtml
  129. +1 −1 muikku/src/main/webapp/WEB-INF/templates/flex-main-env.xhtml
  130. +16 −4 muikku/src/main/webapp/WEB-INF/templates/flex-main-workspace.xhtml
  131. +2 −2 muikku/src/main/webapp/facelets/generic/workspaces-edit-dock.xhtml
  132. +147 −5 muikku/src/main/webapp/resources/theme-muikku/sass/_custom-ckeditor-modal.scss
  133. +104 −0 muikku/src/main/webapp/resources/theme-muikku/sass/_organizer-field.scss
  134. +96 −16 muikku/src/main/webapp/resources/theme-muikku/sass/_workspaces-materials-defaults.scss
  135. +114 −0 muikku/src/main/webapp/resources/theme-muikku/sass/flex/_organizer-field.scss
  136. +126 −69 muikku/src/main/webapp/resources/theme-muikku/sass/flex/_workspace-materials-defaults.scss
  137. +95 −4 muikku/src/main/webapp/resources/theme-muikku/sass/flex/evaluation.scss
  138. +8 −0 muikku/src/main/webapp/resources/theme-muikku/sass/flex/flex-main-workspace.scss
  139. +5 −1 muikku/src/main/webapp/resources/theme-muikku/sass/flex/flex-main.scss
  140. +53 −0 muikku/src/main/webapp/resources/theme-muikku/sass/flex/workspace-announcer.scss
  141. +2 −2 muikku/src/main/webapp/resources/theme-muikku/sass/flex/workspace-journal.scss
  142. +1 −0 muikku/src/main/webapp/resources/theme-muikku/sass/flex/workspace-materials.scss
  143. +1 −0 muikku/src/main/webapp/resources/theme-muikku/sass/workspaces-materials-management.scss
  144. +1 −0 muikku/src/main/webapp/resources/theme-muikku/sass/workspaces-materials-reading.scss
  145. +1 −0 muikku/src/main/webapp/resources/theme-muikku/sass/workspaces-materials.scss
  146. +2 −2 pom.xml
  147. +33 −0 updates/1.0126/160518_organizer.xml
@@ -5,7 +5,7 @@
<parent>
<groupId>fi.otavanopisto.muikku</groupId>
<artifactId>parent</artifactId>
<version>1.1.24-SNAPSHOT</version>
<version>1.1.27-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@@ -5,7 +5,7 @@
<parent>
<groupId>fi.otavanopisto.muikku</groupId>
<artifactId>parent</artifactId>
<version>1.1.24-SNAPSHOT</version>
<version>1.1.27-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@@ -66,7 +66,6 @@
import fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceMaterial;
import fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceMaterialAssignmentType;
import fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceNode;
import fi.otavanopisto.muikku.schooldata.SchoolDataBridgeUnauthorizedException;
import fi.otavanopisto.muikku.schooldata.WorkspaceEntityController;
import fi.otavanopisto.muikku.schooldata.events.SchoolDataWorkspaceDiscoveredEvent;
import fi.otavanopisto.muikku.session.local.LocalSession;
@@ -5,7 +5,7 @@
<parent>
<groupId>fi.otavanopisto.muikku</groupId>
<artifactId>parent</artifactId>
<version>1.1.24-SNAPSHOT</version>
<version>1.1.27-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@@ -494,6 +494,7 @@ public static void personsPyramusMocks() throws Exception {

}

@SuppressWarnings("unused")
private static StaffMember mockStaffMember(Long personId, Long staffMemberId, String firstName, String lastName, String email, UserRole role, List<String> tags, Map<String, String> variables, List<String> payloads) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper().registerModule(new JodaModule()).disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

@@ -73,7 +73,7 @@ public void deleteAnnouncementTest() throws JsonProcessingException, Exception {
waitForPresent("#ui-datepicker-div");
addTextToCKEditor("Announcer test announcement");
waitAndClick(".mf-toolbar input[name='send']");
waitForPresent(".an-announcement");
waitForPresent(".an-announcement-topic");
assertTextIgnoreCase(".an-announcement-topic>span", "Test title");
waitAndClick(".an-announcement-select input");
waitAndClick(".mf-items-toolbar .icon-delete");
@@ -50,7 +50,7 @@ public void coursePickerLoadMoreTest() throws Exception {
workspaces.add(createWorkspace("testcourse", "test course for testing " + i.toString(), i.toString(), Boolean.TRUE));
try {
getWebDriver().get(getAppUrl(true) + "/coursepicker");
waitForPresent("#coursesList");
waitForMoreThanSize(".cp-course", 24);
assertCount(".cp-course", 25);
waitAndClick(".mf-paging-tool");
waitForMoreThanSize(".cp-course", 25);
@@ -88,7 +88,7 @@ public void courseArchiveStudentTest() throws Exception {
waitForPresent(".workspace-students-listing-wrapper .workspace-users-name");
waitAndClick("div[data-user-id='PYRAMUS-STUDENT-2']>div.workspace-users-archive");
waitAndClick(".archive-button");
waitForClickable(".workspace-students-list");
waitForPresentAndVisible(".workspace-students-listing-wrapper");
ObjectMapper objectMapper = new ObjectMapper().registerModule(new JodaModule()).disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
String payload = objectMapper.writeValueAsString(new WebhookStudentUpdatePayload(2l));
TestUtilities.webhookCall("http://dev.muikku.fi:8080/pyramus/webhook", payload);
@@ -129,11 +129,11 @@ public void courseUnarchiveStudentTest() throws Exception {
waitForPresent(".workspace-students-listing-wrapper .workspace-users-name");
waitAndClick("div[data-user-id='PYRAMUS-STUDENT-2']>div.workspace-users-archive");
waitAndClick(".archive-button");
waitForClickable(".workspace-students-list");
waitForClickable(".workspace-students-inactive");
waitAndClick(".workspace-students-inactive");
waitAndClick("div[data-user-id='PYRAMUS-STUDENT-2']>div.workspace-users-unarchive");
waitAndClick(".unarchive-button");
waitForClickable(".workspace-students-list");
waitForPresentAndVisible(".workspace-students-listing-wrapper");
ObjectMapper objectMapper = new ObjectMapper().registerModule(new JodaModule()).disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
String payload = objectMapper.writeValueAsString(new WebhookStudentUpdatePayload(2l));
TestUtilities.webhookCall("http://dev.muikku.fi:8080/pyramus/webhook", payload);
@@ -4,7 +4,6 @@
import static org.junit.Assert.assertEquals;

import org.joda.time.DateTime;
import org.junit.Assert;
import org.junit.Test;

import com.fasterxml.jackson.core.JsonProcessingException;
@@ -2,14 +2,12 @@

import java.net.MalformedURLException;

import org.junit.After;
import org.junit.Before;
import org.junit.Rule;

import com.saucelabs.common.SauceOnDemandAuthentication;
import com.saucelabs.junit.SauceOnDemandTestWatcher;

import fi.otavanopisto.muikku.ui.base.indexpage.IndexPageTestsBase;
import fi.otavanopisto.muikku.ui.base.user.UserTestsBase;

public class UserTestsIT extends UserTestsBase {
@@ -4,7 +4,7 @@

<groupId>fi.otavanopisto.muikku</groupId>
<artifactId>bom</artifactId>
<version>1.1.24-SNAPSHOT</version>
<version>1.1.27-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Muikku BOM</name>

@@ -34,11 +34,11 @@

<!-- Neko -->

<nekohtml.version>1.9.6.2</nekohtml.version>
<nekohtml.version>1.9.22</nekohtml.version>

<!-- Muikku -->

<muikku.version>1.1.24-SNAPSHOT</muikku.version>
<muikku.version>1.1.27-SNAPSHOT</muikku.version>

<!-- Coops -->
<coops-spec.version>1.0.0</coops-spec.version>
@@ -134,9 +134,9 @@
</dependency>

<!-- Neko -->

<dependency>
<groupId>nekohtml</groupId>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>${nekohtml.version}</version>
</dependency>
@@ -5,7 +5,7 @@
<parent>
<groupId>fi.otavanopisto.muikku</groupId>
<artifactId>parent</artifactId>
<version>1.1.24-SNAPSHOT</version>
<version>1.1.27-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@@ -5,7 +5,7 @@
<parent>
<groupId>fi.otavanopisto.muikku</groupId>
<artifactId>parent</artifactId>
<version>1.1.24-SNAPSHOT</version>
<version>1.1.27-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@@ -0,0 +1,17 @@
package fi.otavanopisto.muikku.plugins.material.model;

import javax.persistence.Entity;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Transient;

@Entity
@PrimaryKeyJoinColumn(name = "id")
public class QueryOrganizerField extends QueryField {

@Transient
@Override
public String getType() {
return "application/vnd.muikku.field.organizer";
}

}
@@ -0,0 +1,21 @@
package fi.otavanopisto.muikku.plugins.workspace.model;

import javax.persistence.Entity;
import javax.persistence.Lob;
import javax.persistence.PrimaryKeyJoinColumn;

@Entity
@PrimaryKeyJoinColumn(name="id")
public class WorkspaceMaterialOrganizerFieldAnswer extends WorkspaceMaterialFieldAnswer {

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}

@Lob
private String value;
}
@@ -5,7 +5,7 @@
<parent>
<groupId>fi.otavanopisto.muikku</groupId>
<artifactId>parent</artifactId>
<version>1.1.24-SNAPSHOT</version>
<version>1.1.27-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@@ -138,8 +138,8 @@
<!-- Neko -->

<dependency>
<groupId>nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
</dependency>

<!-- Commons -->
@@ -1,33 +1,44 @@
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;
import javax.inject.Named;

import org.apache.commons.lang3.StringUtils;
import org.ocpsoft.rewrite.annotation.Join;
import org.ocpsoft.rewrite.annotation.Matches;
import org.ocpsoft.rewrite.annotation.Parameter;
import org.ocpsoft.rewrite.annotation.RequestAction;

import fi.otavanopisto.muikku.jsf.NavigationController;
import fi.otavanopisto.muikku.jsf.NavigationRules;
import fi.otavanopisto.muikku.model.users.UserEntity;
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.WorkspaceEntityController;
import fi.otavanopisto.muikku.schooldata.entity.Workspace;
import fi.otavanopisto.muikku.security.MuikkuPermissions;
import fi.otavanopisto.muikku.session.SessionController;

@Named
@Stateful
@RequestScoped
@Join (path = "/workspaceAnnouncer", to = "/jsf/announcer/workspace_announcer.jsf")
@Join(path = "/workspace/{workspaceUrlName}/announcer", to = "/jsf/workspace/workspace_announcer.jsf")
public class WorkspaceAnnouncerBackingBean {

@Parameter ("workspaceEntityId")
@Matches ("[0-9]{1,}")
private Long workspaceEntityId;
@Parameter
private String workspaceUrlName;

@Inject
private Logger logger;

@Inject
private SessionController sessionController;

@@ -37,40 +48,73 @@ public class WorkspaceAnnouncerBackingBean {
@Inject
private WorkspaceEntityController workspaceEntityController;

@Inject
private NavigationController navigationController;

@Inject
private SchoolDataBridgeSessionController schoolDataBridgeSessionController;

@Inject
@Named
private WorkspaceBackingBean workspaceBackingBean;

@RequestAction
public String init() {

UserEntity userEntity = sessionController.getLoggedUserEntity();

if (userEntity == null) {
return NavigationRules.ACCESS_DENIED;
String urlName = getWorkspaceUrlName();

if (StringUtils.isBlank(urlName)) {
return NavigationRules.NOT_FOUND;
}

WorkspaceEntity workspaceEntity = workspaceEntityController.findWorkspaceEntityById(workspaceEntityId);

WorkspaceEntity workspaceEntity = workspaceController
.findWorkspaceEntityByUrlName(urlName);
if (workspaceEntity == null) {
return NavigationRules.NOT_FOUND;
}

if (!sessionController.hasCoursePermission(AnnouncerPermissions.WORKSPACE_ANNOUNCER_TOOL, workspaceEntity)) {
return NavigationRules.ACCESS_DENIED;
if (!workspaceEntity.getPublished()) {
if (!sessionController.hasCoursePermission(MuikkuPermissions.ACCESS_UNPUBLISHED_WORKSPACE, workspaceEntity)) {
return NavigationRules.NOT_FOUND;
}
}

if (workspaceEntity.getAccess() != WorkspaceAccess.ANYONE) {
if (!sessionController.hasCoursePermission(AnnouncerPermissions.WORKSPACE_ANNOUNCER_TOOL, workspaceEntity)) {
if (!sessionController.isLoggedIn()) {
return navigationController.requireLogin();
} else {
return NavigationRules.ACCESS_DENIED;
}
}
}

workspaceBackingBean.setWorkspaceUrlName(urlName);

Workspace workspace = workspaceController.findWorkspace(workspaceEntity);

workspaceName = workspace.getName();
if (workspace.getNameExtension() != null) {
workspaceName += " (" + workspace.getNameExtension() + ")";
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();

return null;
}

public Long getWorkspaceEntityId() {
return workspaceEntityId;
public String getWorkspaceUrlName() {
return workspaceUrlName;
}

public void setWorkspaceEntityId(Long workspaceEntityId) {
this.workspaceEntityId = workspaceEntityId;
public void setWorkspaceUrlName(String workspaceUrlName) {
this.workspaceUrlName = workspaceUrlName;
}

public String getWorkspaceName() {
@@ -80,7 +124,25 @@ public String getWorkspaceName() {
public void setWorkspaceName(String workspaceName) {
this.workspaceName = workspaceName;
}

public String getWorkspaceNameExtension() {
return workspaceNameExtension;
}

public void setWorkspaceNameExtension(String workspaceNameExtension) {
this.workspaceNameExtension = workspaceNameExtension;
}

public Long getWorkspaceEntityId() {
return workspaceEntityId;
}

public void setWorkspaceEntityId(Long workspaceEntityId) {
this.workspaceEntityId = workspaceEntityId;
}

private String workspaceName;
private String workspaceNameExtension;
private Long workspaceEntityId;

}