diff --git a/.gitignore b/.gitignore index b357106ec6b1..8438685c9770 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,4 @@ library/src/webapp/skin/morpheus-default/ **/src/main/frontend/node/ scormplayer/scorm-tool/contentPackages .vscode/ +.java-version diff --git a/announcement/announcement-api/api/src/java/org/sakaiproject/announcement/api/AnnouncementService.java b/announcement/announcement-api/api/src/java/org/sakaiproject/announcement/api/AnnouncementService.java index 9fbb9913278c..0f52ffbf5308 100644 --- a/announcement/announcement-api/api/src/java/org/sakaiproject/announcement/api/AnnouncementService.java +++ b/announcement/announcement-api/api/src/java/org/sakaiproject/announcement/api/AnnouncementService.java @@ -22,7 +22,6 @@ package org.sakaiproject.announcement.api; import java.util.List; -import java.util.Map; import org.sakaiproject.entity.api.Entity; import org.sakaiproject.entity.api.Reference; @@ -101,12 +100,6 @@ public interface AnnouncementService extends MessageService /** Security function giving the user permission to all groups, if granted to at the channel or site level. */ public static final String SECURE_ANNC_ALL_GROUPS = SECURE_ANNC_ROOT + SECURE_ALL_GROUPS; - /** release date property names for announcements */ - public static final String RELEASE_DATE = "releaseDate"; - - /** retract date property names for announcements */ - public static final String RETRACT_DATE = "retractDate"; - /** modified date property names for announcements */ public static final String MOD_DATE = "modDate"; @@ -176,13 +169,6 @@ public AnnouncementChannelEdit addAnnouncementChannel(String ref) throws IdUsedE */ public String getRssUrl(Reference ref); - /** - * Determine if message viewable based on release/retract dates (if set) - * @param AnnouncementMessage - * @return boolean - */ - public boolean isMessageViewable(AnnouncementMessage message); - /** * clears the message cache for this channel * @param channelRef diff --git a/announcement/announcement-impl/impl/src/java/org/sakaiproject/announcement/impl/BaseAnnouncementService.java b/announcement/announcement-impl/impl/src/java/org/sakaiproject/announcement/impl/BaseAnnouncementService.java index 24b234054cab..5c0581f28df5 100644 --- a/announcement/announcement-impl/impl/src/java/org/sakaiproject/announcement/impl/BaseAnnouncementService.java +++ b/announcement/announcement-impl/impl/src/java/org/sakaiproject/announcement/impl/BaseAnnouncementService.java @@ -26,7 +26,6 @@ import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.time.Instant; -import java.util.Arrays; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -709,45 +708,6 @@ public String getRssUrl(Reference ref) return rssUrlString.toString(); } - /** - * {@inheritDoc} - */ - public boolean isMessageViewable(AnnouncementMessage message) - { - final ResourceProperties messageProps = message.getProperties(); - - final Instant now = Instant.now(); - try - { - final Instant releaseDate = message.getProperties().getInstantProperty(RELEASE_DATE); - - if (now.isBefore(releaseDate)) - { - return false; - } - } - catch (Exception e) - { - // Just not using/set Release Date - } - - try - { - final Instant retractDate = message.getProperties().getInstantProperty(RETRACT_DATE); - - if (now.isAfter(retractDate)) - { - return false; - } - } - catch (Exception e) - { - // Just not using/set Retract Date - } - - return true; - } - /** * {@inheritDoc} */ diff --git a/assignment/api/src/resources/assignment_es.properties b/assignment/api/src/resources/assignment_es.properties index 1cc3c0968b64..017b87bf69ce 100644 --- a/assignment/api/src/resources/assignment_es.properties +++ b/assignment/api/src/resources/assignment_es.properties @@ -200,7 +200,7 @@ gen.nograd=No hay calificaci\u00f3n gen.notavail=La tarea no est\u00e1 disponible; Estado\: {0}
gen.notope=Sin abrir gen.notset=No establecido -gen.notsta=No la has empezado +gen.notsta=No ha empezado gen.hpsta=Cl\u00e1usula de veracidad aceptada gen.of=de gen.open=Abierta @@ -964,6 +964,7 @@ external.tool.label=Opciones de herramienta externa (LTI) external.tool.placeholder=Seleccione una herramienta externa external.tool.find=Seleccione una herramienta externa (LTI) external.tool.goto=Ir a la herramienta externa +external.tool.deleted=*Borrado* external.tool.new.window=Abrir herramienta externa en ventana nueva external.tool.launched=La herramienta externa se ha abierto, refresque la p\u00e1gina para volver a lanzarla. external.tool.expired=El lanzamiento ha expirado, refresque la p\u00e1gina diff --git a/assignment/impl/src/java/org/sakaiproject/assignment/impl/AssignmentEventObserver.java b/assignment/impl/src/java/org/sakaiproject/assignment/impl/AssignmentEventObserver.java index edbde8fd8e27..a3baffe2f7cc 100644 --- a/assignment/impl/src/java/org/sakaiproject/assignment/impl/AssignmentEventObserver.java +++ b/assignment/impl/src/java/org/sakaiproject/assignment/impl/AssignmentEventObserver.java @@ -22,6 +22,7 @@ import java.util.stream.IntStream; import org.apache.commons.lang3.StringUtils; +import org.sakaiproject.assignment.api.AssignmentReferenceReckoner; import org.sakaiproject.assignment.api.AssignmentService; import org.sakaiproject.assignment.api.model.Assignment; import org.sakaiproject.assignment.api.model.AssignmentSubmission; @@ -32,6 +33,10 @@ import org.sakaiproject.exception.PermissionException; import org.sakaiproject.grading.api.AssessmentNotFoundException; import org.sakaiproject.grading.api.GradingService; +import org.sakaiproject.site.api.SiteService; +import org.sakaiproject.tasks.api.Priorities; +import org.sakaiproject.tasks.api.TaskService; +import org.sakaiproject.tasks.api.UserTaskAdapterBean; import org.sakaiproject.user.api.User; import org.sakaiproject.user.api.UserDirectoryService; import org.sakaiproject.user.api.UserNotDefinedException; @@ -45,6 +50,7 @@ public class AssignmentEventObserver implements Observer { @Setter private AssignmentService assignmentService; @Setter private EventTrackingService eventTrackingService; @Setter private GradingService gradingService; + @Setter private TaskService taskService; @Setter private UserDirectoryService userDirectoryService; public void init() { @@ -136,6 +142,26 @@ public void update(Observable o, Object arg) { } } break; + case SiteService.EVENT_USER_SITE_MEMBERSHIP_ADD: + + // A user has been added to a site. Lets make sure any current assignments + // for that site have a corresponding task for the new user. + String userId = userDirectoryService.idFromReference(event.getResource()); + String siteId = event.getContext(); + assignmentService.getAssignmentsForContext(siteId).forEach(ass -> { + + + String ref = AssignmentReferenceReckoner.reckoner().assignment(ass).reckon().getReference(); + taskService.getTask(ref).ifPresent(task -> { + + UserTaskAdapterBean userTaskBean = new UserTaskAdapterBean(); + userTaskBean.setTaskId(task.getId()); + userTaskBean.setUserId(userId); + userTaskBean.setPriority(Priorities.HIGH); + + taskService.createUserTask(task, userTaskBean); + }); + }); default: log.debug("This observer is not interested in event [{}]", event); break; diff --git a/assignment/impl/src/test/org/sakaiproject/assignment/impl/AssignmentServiceTest.java b/assignment/impl/src/test/org/sakaiproject/assignment/impl/AssignmentServiceTest.java index 0746fe164fad..5167799c36b7 100644 --- a/assignment/impl/src/test/org/sakaiproject/assignment/impl/AssignmentServiceTest.java +++ b/assignment/impl/src/test/org/sakaiproject/assignment/impl/AssignmentServiceTest.java @@ -26,6 +26,7 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import static org.mockito.Mockito.verify; import java.io.BufferedReader; import java.io.InputStream; @@ -46,6 +47,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Observable; import java.util.Optional; import java.util.Random; import java.util.Set; @@ -85,6 +87,10 @@ import org.sakaiproject.site.api.Group; import org.sakaiproject.site.api.Site; import org.sakaiproject.site.api.SiteService; +import org.sakaiproject.tasks.api.Priorities; +import org.sakaiproject.tasks.api.Task; +import org.sakaiproject.tasks.api.TaskService; +import org.sakaiproject.tasks.api.UserTaskAdapterBean; import org.sakaiproject.time.api.UserTimeService; import org.sakaiproject.tool.api.SessionManager; import org.sakaiproject.user.api.User; @@ -126,6 +132,7 @@ public class AssignmentServiceTest extends AbstractTransactionalJUnit4SpringCont @Autowired private SessionManager sessionManager; @Autowired private ServerConfigurationService serverConfigurationService; @Autowired private SiteService siteService; + @Autowired private TaskService taskService; @Resource(name = "org.sakaiproject.time.api.UserTimeService") private UserTimeService userTimeService; @Autowired private UserDirectoryService userDirectoryService; @@ -1489,6 +1496,45 @@ public void canSubmit() { } } + @Test + public void createsTasksForNewlyAddedUser() { + + String siteId = "xyz"; + + Assignment assignment = createNewAssignment(siteId); + + String assignmentRef = AssignmentReferenceReckoner.reckoner().assignment(assignment).reckon().getReference(); + + String studentId = "student1"; + String userReference = "/user/" + studentId; + when(userDirectoryService.idFromReference(userReference)).thenReturn(studentId); + + // Mock up an existing Task + Long taskId = 232L; + Task task = mock(Task.class); + when(task.getId()).thenReturn(taskId);; + when(taskService.getTask(assignmentRef)).thenReturn(Optional.of(task)); + + // Mock up an event, and then "fire" it + Event event = mock(Event.class); + when(event.getEvent()).thenReturn(SiteService.EVENT_USER_SITE_MEMBERSHIP_ADD); + when(event.getContext()).thenReturn(siteId); + when(event.getResource()).thenReturn(userReference); + when(event.getModify()).thenReturn(true); + assignmentEventObserver.update(null, event); + + // Verify that getTask is called on our taskService mock + verify(taskService).getTask(assignmentRef); + + UserTaskAdapterBean userTaskBean = new UserTaskAdapterBean(); + userTaskBean.setTaskId(task.getId()); + userTaskBean.setUserId(studentId); + userTaskBean.setPriority(Priorities.HIGH); + + // Verify that createUserTask is called on our taskService mock, with the correct arguments + verify(taskService).createUserTask(task, userTaskBean); + } + private AssignmentSubmission createNewSubmission(String context, String submitterId, Assignment assignment) throws UserNotDefinedException, IdUnusedException { if (assignment == null) { diff --git a/assignment/impl/src/webapp/WEB-INF/components.xml b/assignment/impl/src/webapp/WEB-INF/components.xml index f7cc024a919e..aa12885ce560 100644 --- a/assignment/impl/src/webapp/WEB-INF/components.xml +++ b/assignment/impl/src/webapp/WEB-INF/components.xml @@ -296,6 +296,7 @@ + diff --git a/assignment/tool/src/java/org/sakaiproject/assignment/entityproviders/AssignmentEntityProvider.java b/assignment/tool/src/java/org/sakaiproject/assignment/entityproviders/AssignmentEntityProvider.java index 534f30bf8ec9..457e6c748c22 100644 --- a/assignment/tool/src/java/org/sakaiproject/assignment/entityproviders/AssignmentEntityProvider.java +++ b/assignment/tool/src/java/org/sakaiproject/assignment/entityproviders/AssignmentEntityProvider.java @@ -2247,7 +2247,9 @@ public SimplePeerAssessmentItem(PeerAssessmentItem item) { this.scaledFactor = item.getScaledFactor(); this.draft = item.isDraft(); - this.attachmentUrlList = item.getAttachmentRefList().stream() + this.attachmentUrlList = Optional.ofNullable(item.getAttachmentRefList()) + .orElseGet(Collections::emptyList) + .stream() .map(Reference::getUrl) .collect(Collectors.toList()); } diff --git a/assignment/tool/src/java/org/sakaiproject/assignment/tool/AssignmentAction.java b/assignment/tool/src/java/org/sakaiproject/assignment/tool/AssignmentAction.java index ae11ba71495d..9baaaeef3ee2 100644 --- a/assignment/tool/src/java/org/sakaiproject/assignment/tool/AssignmentAction.java +++ b/assignment/tool/src/java/org/sakaiproject/assignment/tool/AssignmentAction.java @@ -1698,6 +1698,7 @@ private String build_student_view_submission_context(VelocityPortlet portlet, Co String contextString = (String) state.getAttribute(STATE_CONTEXT_STRING); context.put("context", contextString); context.put("NamePropSubmissionScaledPreviousGrades", ResourceProperties.PROP_SUBMISSION_SCALED_PREVIOUS_GRADES); + context.put("showUserId", serverConfigurationService.getBoolean("assignment.users.ids.show", true)); User user = (User) state.getAttribute(STATE_USER); log.debug(this + " BUILD SUBMISSION FORM WITH USER " + user.getId() + " NAME " + user.getDisplayName()); diff --git a/assignment/tool/src/webapp/js/assignmentsByStudent.js b/assignment/tool/src/webapp/js/assignmentsByStudent.js index ba79eb005404..f964ba54c167 100644 --- a/assignment/tool/src/webapp/js/assignmentsByStudent.js +++ b/assignment/tool/src/webapp/js/assignmentsByStudent.js @@ -64,7 +64,7 @@ function renderGrouping({ studentName, actionLink, expanded, studentUserId, user -
+ #supplementItems($!allowViewModelAnswer $!allowReadAssignmentNoteItem $!allowViewAllPurposeItem $!assignmentModelAnswerItem $!assignmentNoteItem $!assignmentAllPurposeItem) diff --git a/assignment/tool/src/webapp/vm/assignment/chef_assignments_instructor_new_edit_assignment.vm b/assignment/tool/src/webapp/vm/assignment/chef_assignments_instructor_new_edit_assignment.vm index f37959414a61..a3813df12350 100644 --- a/assignment/tool/src/webapp/vm/assignment/chef_assignments_instructor_new_edit_assignment.vm +++ b/assignment/tool/src/webapp/vm/assignment/chef_assignments_instructor_new_edit_assignment.vm @@ -504,6 +504,8 @@ class="form-control" maxlength="100" placeholder="$tlang.getString('external.tool.placeholder')" value="$!value_ContentTitle"> + + + diff --git a/common/archive-api/src/main/java/org/sakaiproject/archive/api/ArchiveService.java b/common/archive-api/src/main/java/org/sakaiproject/archive/api/ArchiveService.java index 8badb4624e93..fe8fa0066c93 100644 --- a/common/archive-api/src/main/java/org/sakaiproject/archive/api/ArchiveService.java +++ b/common/archive-api/src/main/java/org/sakaiproject/archive/api/ArchiveService.java @@ -96,4 +96,10 @@ public interface ArchiveService * @throws IOException */ public String archiveAndZip(String siteId) throws IOException; + + /** + * get the current storage path for a particular site + * @return Current storage path for a particular site + */ + public String getStoragePathForSiteArchive(String siteId); } diff --git a/common/archive-impl/impl2/src/java/org/sakaiproject/archive/impl/ArchiveService2Impl.java b/common/archive-impl/impl2/src/java/org/sakaiproject/archive/impl/ArchiveService2Impl.java index cd610f20075e..08c9ee125093 100644 --- a/common/archive-impl/impl2/src/java/org/sakaiproject/archive/impl/ArchiveService2Impl.java +++ b/common/archive-impl/impl2/src/java/org/sakaiproject/archive/impl/ArchiveService2Impl.java @@ -75,7 +75,7 @@ public void setSiteZipper(SiteZipper siteZipper) { public void setStoragePath(String path) { m_storagePath = path; } - + /** Path used for processing zips **/ protected String m_unzipPath = "/"; public void setUnzipPath(String unzipPath) { @@ -142,6 +142,13 @@ public void destroy() { log.info("destroy()"); } + /** + * get the current storage path for a particular site + * @return Current storage path for a particular site + */ + public String getStoragePathForSiteArchive(String siteId) { + return m_siteArchiver.getStoragePathForSiteArchive(siteId, m_storagePath); + } /** * Create an archive for the resources of a site. diff --git a/common/archive-impl/impl2/src/java/org/sakaiproject/archive/impl/SiteArchiver.java b/common/archive-impl/impl2/src/java/org/sakaiproject/archive/impl/SiteArchiver.java index 5d155c3d0d91..95c9228a8a67 100644 --- a/common/archive-impl/impl2/src/java/org/sakaiproject/archive/impl/SiteArchiver.java +++ b/common/archive-impl/impl2/src/java/org/sakaiproject/archive/impl/SiteArchiver.java @@ -108,6 +108,14 @@ public void setContentHostingService(ContentHostingService service) { @Setter private TransactionTemplate transactionTemplate; + /** + * Capture the naming convention for the site archive folder + */ + public String getStoragePathForSiteArchive(String siteId, String m_storagePath) { + String storagePath = m_storagePath + siteId + "-archive/"; + return storagePath; + } + public String archive(String siteId, String m_storagePath, String fromSystem) { StringBuilder results = new StringBuilder(); @@ -131,10 +139,10 @@ public String archive(String siteId, String m_storagePath, String fromSystem) Time now = m_timeService.newTime(); // this is the folder we are writing files to - String storagePath = m_storagePath + siteId + "-archive/"; + String storagePath = getStoragePathForSiteArchive(siteId, m_storagePath); // create the directory for the archive - File dir = new File(m_storagePath + siteId + "-archive/"); + File dir = new File(storagePath); // clear the directory (if site already archived) so resources are not duplicated try { diff --git a/common/archive-impl/impl2/src/java/org/sakaiproject/archive/impl/SiteMerger.java b/common/archive-impl/impl2/src/java/org/sakaiproject/archive/impl/SiteMerger.java index b6a3780e001b..358934186d5b 100644 --- a/common/archive-impl/impl2/src/java/org/sakaiproject/archive/impl/SiteMerger.java +++ b/common/archive-impl/impl2/src/java/org/sakaiproject/archive/impl/SiteMerger.java @@ -157,6 +157,16 @@ public String merge(String fileName, String siteId, String creatorId, String m_s // track old to new attachment names Map attachmentNames = new HashMap(); + // The archive.xml is really a debug log, not actual archive data - it does not participate in any merge + for (int i = 0; i < files.length; i++) + { + if ((files[i] != null) && (files[i].getPath().indexOf("archive.xml") != -1)) + { + files[i] = null; + break; + } + } + // firstly, merge the users for (int i = 0; i < files.length; i++) { diff --git a/commons/tool/src/webapp/js/commons.js b/commons/tool/src/webapp/js/commons.js index ac45cd1e9ac1..6528a9d33897 100644 --- a/commons/tool/src/webapp/js/commons.js +++ b/commons/tool/src/webapp/js/commons.js @@ -152,9 +152,7 @@ commons.switchState = function (state, arg) { }); if(commons.currentUserPermissions.postDeleteAny){ //if the user can delete any post, we will give them access to Hi-Priority posting too. document.getElementById('commons-editor-priority-container').removeAttribute('style'); - document.querySelectorAll("[data-bs-toggle='popover']").forEach(t => { - (new bootstrap.Popover(t)); - }); + bootstrap.Popover.getOrCreateInstance(document.body); // Initializes all popovers } editorPostButton.click(function (e) { diff --git a/commons/tool/src/webapp/js/commons_utils.js b/commons/tool/src/webapp/js/commons_utils.js index bebdabf60222..b5fd49a0192e 100644 --- a/commons/tool/src/webapp/js/commons_utils.js +++ b/commons/tool/src/webapp/js/commons_utils.js @@ -429,9 +429,7 @@ commons.utils = { var numberOfLikes = $('.commons-likes-count'); numberOfLikes.each(function(){commons.utils.addLikeCount(this)}); commons.utils.getUserLikes(); - document.querySelectorAll("[data-bs-toggle='popover']").forEach(t => { - (new bootstrap.Popover(t)); - }); + bootstrap.Popover.getOrCreateInstance(document.body); // Initializes all popovers var textarea = $('#commons-comment-textarea-' + post.id); textarea.each(function () { autosize(this); }); var creator = $('#commons-comment-creator-' + post.id); diff --git a/config/configuration/bundles/src/bundle/org/sakaiproject/config/bundle/default.sakai.properties b/config/configuration/bundles/src/bundle/org/sakaiproject/config/bundle/default.sakai.properties index 86f574250896..fce37b57beed 100644 --- a/config/configuration/bundles/src/bundle/org/sakaiproject/config/bundle/default.sakai.properties +++ b/config/configuration/bundles/src/bundle/org/sakaiproject/config/bundle/default.sakai.properties @@ -200,12 +200,12 @@ # **NOTE: typically top.login and container.login should not be both set true or false # Include the user id and password for login on the gateway site # DEFAULT: true -#top.login=true +#top.login=false # Let the container handle login or not. # Set to true for single-sign on type setups, false for just internal login # DEFAULT: false -#container.login=false +#container.login=true # Enabled extra login (use when enabling container login e.g. CAS) for direct guest login into Sakai # DEFAULT: false (disabled) @@ -349,7 +349,7 @@ # Direct URLs to tools # enables a link icon for each tool in the portal so you can get a direct URL to the tool. # DEFAULT: false -# portal.tool.direct.url.enabled=false +# portal.tool.direct.url.enabled=true # In conjunction with the above, if set to true, shows the option to shorten that link. # DEFAULT: true @@ -396,7 +396,7 @@ # Let Sakai generate database objects on startup. # If this is false then Sakai will NOT create tables or load default DB data on startup (it will have to be created manually) # DEFAULT: true (from component-manager/kernel.properties) -# auto.ddl=true +# auto.ddl=false # This works in conjunction with auto.ddl in the following way # if auto.ddl=true then hibernate.hbm2ddl.auto=update @@ -411,7 +411,7 @@ # Enable hibernate SQL debugging output in the logs. # DEFAULT: false -# hibernate.show_sql=false +# hibernate.show_sql=true # Enable hibernate to generate metric statistics # DEFAULT: false @@ -569,7 +569,7 @@ # Allows users to upload zip files and have them be expanded into the content (resources tool) and # allows downloading a zip file of a folder or folders from Sakai content (through resources tool) # DEFAULT: true -# content.zip.enabled=true +# content.zip.enabled=false # Set the limit of the max number of files to extract from a zip archive # DEFAULT: 1000 @@ -577,11 +577,11 @@ # Enable zip file expansion into content (affects resources), on by default # DEFAULT: true -# content.zip.expand.enabled=true +# content.zip.expand.enabled=false # Enable content compression into zip file (affects resources), on by default # DEFAULT: true -# content.zip.compress.enabled=true +# content.zip.compress.enabled=false # KNL-1221 Charsets used to expand zip file name. # No matter set or not, UTF-8 will be tested. @@ -598,7 +598,7 @@ # Enable creation of Web Content tools from resources, on by default. # DEFAULT: true -# content.make.site.page=true +# content.make.site.page=false # SAK-21955 - Enforce a limit for how many files are displayed in resources # Not having a limit could potentially lead to slow performance or errors @@ -1168,7 +1168,7 @@ # If true then the EhCache will be registered with the JMX agent to make it easier to monitor the # cache statistics. # DEFAULT: true -# memory.ehcache.jmx=true +# memory.ehcache.jmx=false ## NOTE: all caches can be configured like so: # memory.{cachename}={key=value,key=value,...} @@ -1375,7 +1375,7 @@ ## Session timeout dialog popup configuration # DEFAULT: true -# timeoutDialogEnabled=true +# timeoutDialogEnabled=false # DEFAULT: 600 # timeoutDialogWarningSeconds=600 @@ -1464,7 +1464,7 @@ # Use SSL/TLS to connect to the SMPT server # DEFAULT: false -# smtpUseSSL@org.sakaiproject.email.api.EmailService=false +# smtpUseSSL@org.sakaiproject.email.api.EmailService=true # Run in test mode - email will be written to the log rather than sent # NOTE: this will work even if no other settings have been set @@ -1617,7 +1617,7 @@ # Enable editing alias for existing sites # DEFAULT: false -# site-manage.enable.alias.edit=false +# site-manage.enable.alias.edit=true #### SAK-23257: Restrict site maintainer from adding or elevating users to certain roles. #### For example, prevent the Instructor of a course site from adding new Instructor users @@ -1861,7 +1861,7 @@ # Controls the display of the "Total Points" column on the overview screen. # DEFAULT: false (Total Points column is not shown) -#gradebook.display.total.points=false +#gradebook.display.total.points=true # SAK-22205 - Gradebook custom export format # Controls which columns are included by default in the export format @@ -1876,7 +1876,7 @@ # SAK-18588 - Allow students to see total number of points in gradebook # Default: false -# gradebook.showCoursePoints +#gradebook.showCoursePoints=true # SAK-20370 - Show total points in all grades view for instructor # Default: false @@ -1904,6 +1904,10 @@ # Default: true # gradebook.stats.assignments.displayed=false +# Default for displaying user ids to the students when viewing an assignment group submission +# Default: true +# assignment.users.ids.show=false + # Default for course grade stats displayed # Default: true # gradebook.stats.coursegrade.displayed=false @@ -1954,6 +1958,10 @@ # DEFAULT: false # gradebookng.allowColumnResizing=true +# SAK-50770 +# DEFAULT: false +# gradebookng.export.enabelOsirisExport=true + # SAK-46075: max upload file size, defined in megabytes # DEFAULT: 2 # gradebook.import.maxSize=3 @@ -1962,7 +1970,7 @@ # Allows an instructor or any user with assignments management permissions to submit the assignment on behalf of a student # who has no submission yet (via the View Assignment list by student) # DEFAULT: true (enabled) -# assignments.instructor.submit.for.student=true +# assignments.instructor.submit.for.student=false # Allow configuration of assignment dates # assignment.visibledate = @@ -1978,7 +1986,7 @@ # all individuals receive this grade in the Gradebook. Overrides for a single user grade is supported. # https://jira.sakaiproject.org/browse/SAK-22282 # DEFAULT: true (enabled) -# assignment.group.submission.enabled=true +# assignment.group.submission.enabled=false # Enable visible date feature. When enabled, student can see assignment but can not submit/save yet. # This feature is driven by a need for us to show students upcoming tasks but not allow them to act on them until the open date. @@ -1987,11 +1995,11 @@ # The system setting for whether to show the Option tool link or not (true|false) # DEFAULT: true (enabled) -# assignment.enableViewOption=true +# assignment.enableViewOption=false # Enable a content review service (true|false). Enabling this is only one part of the check - the review service has to be available and enabled for each site as well. # DEFAULT: false (disabled) -# assignment.useContentReview=false +# assignment.useContentReview=true # Comma separated list of possible letter grades to use # DEFAULT: A+,A,A-,B+,B,B-,C+,C,C-,D+,D,D-,E,F @@ -2163,19 +2171,19 @@ # Shows or hides the store in institutional index option # Default: true -# contentreview.option.store_inst_index=true +# contentreview.option.store_inst_index=false # The default check mark in the Store in Institutional Index option in the GUI # Default: true -# contentreview.option.store_inst_index.default=true +# contentreview.option.store_inst_index.default=false # Shows or hides the exclude self plagiarism option # Default: true -# contentreview.option.exclude_self_plag=true +# contentreview.option.exclude_self_plag=false # The default check mark in the Exclude Self Plagiarism option in the GUI # Default: true -# contentreview.option.exclude_self_plag.default=true +# contentreview.option.exclude_self_plag.default=false # Shows or hides the report when it is preliminary / non-final # Default: true @@ -2403,7 +2411,7 @@ # Enable iCal import/export via instructor-named ICS file. # DEFAULT: true -# ical.public.userdefined.subscribe=true +# ical.public.userdefined.subscribe=false # This is legacy: recommend using ical.public.userdefined.subscribe instead # ical.experimental=true @@ -2586,7 +2594,7 @@ # If making the Resources tool Hidden, subsequently make the Resources root content "Hidden but Accessible" # Default changed in SAK-40270 # DEFAULT: true -# poh.resources.content.sync.visibility = true +# poh.resources.content.sync.visibility = false ## PODCAST # Configurable toolId for Resources tool check @@ -2641,16 +2649,16 @@ # Allow users to change their profile picture? (true/false) # DEFAULT: true -# profile2.picture.change.enabled=true +# profile2.picture.change.enabled=false # Can users upload an image or just link to an existing one? (upload/url/official) # *NOTE: If using official, see below. # DEFAULT: upload -# profile2.picture.type=upload +# profile2.picture.type=url # Allow users to change their privacy settings? (true/false) # DEFAULT: true -# profile2.privacy.change.enabled=true +# profile2.privacy.change.enabled=false # Override the default privacy settings with these options (0=everyone, 1=only connections, 2=only me) # This will set the defaults for a person with no existing privacy record @@ -2722,11 +2730,11 @@ # Sets the ability for a user to change their profile image on a per user type basis. (true/false) # DEFAULT: if not set, defaults to the value of profile2.picture.change.enabled which defaults to true -# profile2.picture.change.USER_TYPE.enabled=true +# profile2.picture.change.USER_TYPE.enabled=false # Official Image Support - to enable support for using official images, set to true # DEFAULT: false -# profile2.official.image.enabled=false +# profile2.official.image.enabled=true # If enabled, where should Profile2 look for the officially provided images? # If 'url', you need to add a URL for each user to the PROFILE_IMAGES_OFFICIAL_T table in the database. @@ -2759,7 +2767,7 @@ # Gravatar Support # Allow users to set gravatars as their images (true/false) # DEFAULT: true -# profile2.gravatar.image.enabled=true +# profile2.gravatar.image.enabled=false # Wall Support # Enable/disable the Profile2 wall page globally (true/false) @@ -2771,7 +2779,7 @@ # Use the wall page as the default Profile2 page (true/false) # DEFAULT: false -# profile2.wall.default=false +# profile2.wall.default=true ## Email notification of a profile change # You can configure an email to be sent to a specific user whenever anyone updates their profile. (true/false) @@ -2795,26 +2803,26 @@ # Enable/disable the gallery feature? (true/false) # DEFAULT: true -# profile2.gallery.enabled=true +# profile2.gallery.enabled=false # Enable/disable the connections feature? (true/false) # If Connections are disabled, than messaging is also disabled as # messages may only be sent to connections. # DEFAULT: true -# profile2.connections.enabled=true +# profile2.connections.enabled=false # Enable/disable the messaging feature? (true/false) # DEFAULT: true -# profile2.messaging.enabled=true +# profile2.messaging.enabled=false # Enable/disable the friend search options (true/false) # DEFAULT: true -# profile2.search.enabled=true +# profile2.search.enabled=false # Enable/disable the privacy feature? (true/false) # Be sure to set global privacy settings as desired if this is disabled. # DEFAULT: true -# profile2.privacy.enabled=true +# profile2.privacy.enabled=false # Enable/disable the preferences tab? (true/false) # DEFAULT: true @@ -2822,11 +2830,11 @@ # Allow status updates and display? (true/false) # DEFAULT: true -# profile2.profile.status.enabled=true +# profile2.profile.status.enabled=false # Enable/dsiable the myKudos feature? (true/false) # DEFAULT: true -# profile2.myKudos.enabled=true +# profile2.myKudos.enabled=false # Enable/disable the online status feature (true/false) # This feature shows if you are currently logged in. @@ -2835,7 +2843,7 @@ # Should users profiles be linked in forum posts? (true/false) # Works in conjunction with *msgcntr.forums.showProfileInfo* and *msgcntr.messages.showProfileInfo* # DEFAULT: true -# profile2.profile.link.enabled=true +# profile2.profile.link.enabled=false # Default reply email address # msgcntr.notification.from.address.reply=reply@sakaiproject.org @@ -2889,27 +2897,27 @@ # Use in combination with the privacy defaults/locking to set this as desired otherwise it will show redundant options. # You can further customise this in the individual settings below # DEFAULT: true -# profile2.profile.fields.enabled=true +# profile2.profile.fields.enabled=false # Enable/disable the staff profile section? (true/false) # DEFAULT: true -# profile2.profile.staff.enabled=true +# profile2.profile.staff.enabled=false # Enable/disable the student profile section? (true/false) # DEFAULT: true -# profile2.profile.student.enabled=true +# profile2.profile.student.enabled=false # Enable/disable the social profile section? (true/false) # DEFAULT: true -# profile2.profile.social.enabled=true +# profile2.profile.social.enabled=false # Enable/disable the interests profile section? (true/false) # DEFAULT: true -# profile2.profile.interests.enabled=true +# profile2.profile.interests.enabled=false # Enable/disable the business profile section? (true/false) # DEFAULT: false -# profile2.profile.business.enabled=false +# profile2.profile.business.enabled=true # If using official images via a URL, the default behaviour is to redirect to that image. # You can optionally tell Profile2 to fetch the data on your behalf and render it the same as an uploaded image rather than performing a redirect @@ -2973,7 +2981,7 @@ # Indicates whether users should see "Show Other Sites" twiggle in list mode of dropbox tool # DEFAULT: false -# resources.show_all_collections.dropbox=false +# resources.show_all_collections.dropbox=true # Indicates whether users should see "Show Other Sites" twiggle in list mode of file picker # DEFAULT: false @@ -3155,7 +3163,7 @@ # This should only be activated on the actual search server node and all other nodes should have this turned off to restrict access. # See https://jira.sakaiproject.org/browse/SRCH-96 # DEFAULT: true -# searchServer@org.sakaiproject.search.api.SearchService=true +# searchServer@org.sakaiproject.search.api.SearchService=false # Exclude indexing user sites # DEFAULT: true @@ -3204,7 +3212,7 @@ # Turning on http communication so you can use curl and other tools. You want to make sure this is firewalled to the outside world, but its really handy to have on even in production. # DEFAULT: true -# opensearch.http.enabled=true +# opensearch.http.enabled=false # Default port to use for http communication above # DEFAULT: 9200 @@ -3341,7 +3349,7 @@ ### SAK-28059 Auto filter term to the most recent term # DEFAULT: false -# site.setup.autoFilterTerm=false +# site.setup.autoFilterTerm=true ### SAK-21336 Allow maintainers/admins to remove orphaned members from a site # Valid possibilities: admins or maintainers; admins=super users only, maintainers=maintain user of the site like Instructor @@ -3398,7 +3406,7 @@ # This setting controls if the page renders to display user auditing information in Site Info. # This does NOT prevent writing audit information to the database # DEFAULT: true -# user_audit_log_display=true +# user_audit_log_display=false # SAK-34034 Filter by group in the Site Info Groups Management screen # DEFAULT: true (enabled) @@ -3589,7 +3597,7 @@ # Show the fill in numeric question type # DEFAULT: true -#samigo.question.show.fillinnumeric +#samigo.question.show.fillinnumeric=false # Show the survey question type # DEFAULT: true @@ -3597,7 +3605,7 @@ # Show the matrix survey question type # DEFAULT: true -#samigo.question.show.matrixsurvey +#samigo.question.show.matrixsurvey=false # Show the calculated question question type # DEFAULT: none (null) @@ -3605,7 +3613,7 @@ # Show the ImageMap question type # DEFAULT: true -#samigo.question.show.showImageMapQuestion=true +#samigo.question.show.showImageMapQuestion=false # In the PDF print output, setting this to true will remove all HTML formatting from the questions and answers (This was a legacy setting just added incase someone was using it or it was causing problems) # Default: false @@ -3661,11 +3669,6 @@ # DEFAULT: true (import will create and use groups in the destination site) # samigo.create.groups.on.import=false -# SAK-46501 property to select the default sorting column in assessment list view -# The column by which we want to sort the table -# DEFAULT: 2 -# samigo.assessmentSortingColumn=9 - # SAK-50690 Meetings: select message and option to show attendance reports # Select whether to display the informational alert of the meetings tool. # DEFAULT: false @@ -3711,6 +3714,14 @@ # DEFAULT: https://safeexambrowser.org/download_en.html # seb.download.link= +# S2U-21 Enable URL filtering for Safe Exam browser +# DEFAULT: false +# seb.URL.filter.enable=true + +# S2U-21 List of URLs to filter for Safe Exam browser +# DEFAULT: [SERVER_URL] +# seb.URL.filter.rules=*.nightly.sakaiproject.org + ######################################### # MEMBERSHIP TOOL ######################################### @@ -3729,15 +3740,15 @@ # Suppport group editing in Worksite Setup tool: true or false # DEFAULT: true -# wsetup.group.support=true +# wsetup.group.support=false # Show the groups summary on the front of Site Info # DEFAULT: true -# wsetup.group.support.summary=true +# wsetup.group.support.summary=false # Support prepopulating mailarchive with email address SAK-19298 # DEFAULT: true -# wsetup.mailarchive.prepopulate.email=true +# wsetup.mailarchive.prepopulate.email=false # One or more site types (course, project, etc.) for which the joinable option is not setable (within Worksite Setup or Site Info tool) # wsetup.disable.joinable.count=1 @@ -4027,7 +4038,7 @@ ## SAK-15887 - Creation of citationsAdmin configurable # DEFAULT: true -# citationsAdmin.autocreate = true +# citationsAdmin.autocreate = false ## SAK-22297 - Configure the default number of citations on a page # DEFAULT: 50 @@ -4162,7 +4173,7 @@ # SAK-24862 Option to Import Start & End Dates for Forums # DEFAULT: true -# msgcntr.forums.import.openCloseDates=true +# msgcntr.forums.import.openCloseDates=false # SAK-24854 Maxsize of the rankimage for image ranks # DEFAULT: 102400 @@ -4191,12 +4202,12 @@ # SAK-25099 Allow / disallow maintainers from revising the "Posts are anonymous" setting on existing topics. # Setting to true risks abuse by maintainers. # DEFAULT: false -# msgcntr.forums.postAnonymous.revisable=false +# msgcntr.forums.postAnonymous.revisable=true # SAK-25099 Allow / disallow maintainers from revising the "Reveal identities to roles with the 'Identify Anonymous Authors' permission" setting on existing topics. # Setting to true risks abuse by maintainers. # DEFAULT: false -# msgcntr.forums.revealIDsToRoles.revisable=false +# msgcntr.forums.revealIDsToRoles.revisable=true # SAK-31068 Configure forums Import / Duplication behavior # By default, will set imported objects in Draft mode @@ -4433,7 +4444,7 @@ # this variable control behavior. THe default is true, which says to display it. # This can be overriden with the allow inine property (SAKAI:allow_inline) on file or folder. # DEFAULT: true, display HTML files -# lessonbuilder.inlinehtml=true +# lessonbuilder.inlinehtml=false # lessonbuilder.use-csp-headers # Should HTML files use Content-Security-Policy: sandbox? @@ -4507,7 +4518,7 @@ # set, that's the folder that will be hidden. If not, the individual folders # created for each page will be hidden. # DEFAULT: false -# lessonbuilder.folder.hidden=false +# lessonbuilder.folder.hidden=true # Allow an institution to configure the name of the default CSS file. This file # can be supplied by the user to set site-specific CSS for Lessons. The file @@ -4520,16 +4531,16 @@ # All site to disable project /direct/lessons. Default is to enable it # DEFAULT: true, allow /direct/lessons -# lessonbuilder.keitai=true +# lessonbuilder.keitai=false # Control icons. Lessons has its own icons for some content type. # This property will cause Lessons to use normal Sakai icons for all types # DEFAULT: false, use special Lessons icons -# lessonbuilder.use-sakai-icons=false +# lessonbuilder.use-sakai-icons=true # Control whether links can be attached in the file picker # DEFAULT: true -# lessonbuilder.attachlinks=true +# lessonbuilder.attachlinks=false # Contrrol whether an the options dialog includes a link that will allow # the user to remove all pages not referred to by another page. Normally @@ -5165,6 +5176,10 @@ # DEFAULT: true # signup.export.group.participants.by.slot=false +# Signup deployList +# if list < deployList, it deploy the list +# DEFAULT: 0 +# signup.deployList=2 # ###################################### # SAK-29271 Feedback Tool Properties @@ -5172,11 +5187,6 @@ # Recipient address that will receive the contact emails # feedback.technicalAddress = someaddress@institution.org -# Signup deployList -# if list < deployList, it deploy the list -# DEFAULT: 0 -# signup.deployList=2 - # Enable/Disable the content panel # DEFAULT: true # feedback.show.content.panel = false @@ -5439,7 +5449,7 @@ #TAGS # If the tag service will be enabled or not. (default is true) -#tagservice.enabled=true +#tagservice.enabled=false # The max size of the pages returned by the rest services in searches and lists # to avoid heavy queries in big collections. (By default 200) @@ -5942,7 +5952,7 @@ # Configure a 1EdTech Personal Needs & Preferences (PNP) Server # The @ sign is a place holder in the PNP URL for either the user_id or email (see below) -# lti.pnp.baseurl=https://pnp.amp-up.io/ims/afapnp/v1p0/users/@/afapnprecords +# lti.pnp.baseurl=https://pnp.amp-up.io/ims/afapnp/v1p0/users/@/activities/default/afapnprecords # DEFAULT: none # Normally for PNP we include the user_id value from the LTI launch. How the user_id is diff --git a/config/localization/bundles/src/bundle/org/sakaiproject/localization/bundle/siteemacon/siteemacon_ca.properties b/config/localization/bundles/src/bundle/org/sakaiproject/localization/bundle/siteemacon/siteemacon_ca.properties index 408fee860869..f1670c39cccf 100644 --- a/config/localization/bundles/src/bundle/org/sakaiproject/localization/bundle/siteemacon/siteemacon_ca.properties +++ b/config/localization/bundles/src/bundle/org/sakaiproject/localization/bundle/siteemacon/siteemacon_ca.properties @@ -30,11 +30,11 @@ folder=Carpeta sitat=espai a -the=el/la/l\u2019 +the=l\u2019espai -tothe=el/la/l\u2019 +tothe=l\u2019espai -forthe=des del +forthe=des de l\u2019espai separator=---------------------- diff --git a/config/localization/bundles/src/bundle/org/sakaiproject/localization/bundle/siteemacon/siteemacon_es.properties b/config/localization/bundles/src/bundle/org/sakaiproject/localization/bundle/siteemacon/siteemacon_es.properties index 35328acd23ea..719b3a249b40 100644 --- a/config/localization/bundles/src/bundle/org/sakaiproject/localization/bundle/siteemacon/siteemacon_es.properties +++ b/config/localization/bundles/src/bundle/org/sakaiproject/localization/bundle/siteemacon/siteemacon_es.properties @@ -1,10 +1,10 @@ -anewres=Se ha a\u00f1adido un nuevo recurso al sitio +anewres=Se ha a\u00f1adido un nuevo recurso en anewres2=Se ha actualizado un recurso en anewresDnD=Se ha a\u00f1adido un nuevo recurso en -anewresDnD.plural={0} recursos nuevos se han a\u00f1adido a +anewresDnD.plural={0} recursos nuevos se han a\u00f1adido en anewres2DnD=Un recurso ha sido actualizado en @@ -30,9 +30,9 @@ folder=Carpeta\: sitat=de -the=el +the=el sitio -tothe=al sitio +tothe=el sitio forthe=del sitio diff --git a/content/content-tool/tool/src/webapp/vm/content/sakai_resources_list.vm b/content/content-tool/tool/src/webapp/vm/content/sakai_resources_list.vm index 7f27aad2693b..880dcca0bf15 100644 --- a/content/content-tool/tool/src/webapp/vm/content/sakai_resources_list.vm +++ b/content/content-tool/tool/src/webapp/vm/content/sakai_resources_list.vm @@ -161,7 +161,7 @@ #set ($itemsOnLine = 0) #foreach($key in $listActions.keySet()) #set($action = $listActions.get("$key")) - @@ -172,11 +172,11 @@ ####### listActions are a list of multipleItemAction that you can do on individual resource/collection items. #if (!$dropboxMode) #if($canShowHide) - - @@ -184,7 +184,7 @@ #end ####### end SAK-23304, add Show and Hide #if ($canZipDownload) - @@ -214,7 +214,7 @@ #if (!$dropboxMode)