diff --git a/src/main/java/org/olat/_spring/extensionContext.xml b/src/main/java/org/olat/_spring/extensionContext.xml index 771c8d381d8d765eba9c5a387f7905c356c43db6..ecfaddd8630908bef5ed3fbb40ada1befc8a4e0d 100644 --- a/src/main/java/org/olat/_spring/extensionContext.xml +++ b/src/main/java/org/olat/_spring/extensionContext.xml @@ -398,25 +398,6 @@ </list> </property> </bean> - <!-- the quota menu-entry --> - <bean class="org.olat.core.extensions.action.GenericActionExtension" init-method="initExtensionPoints" > - <property name="order" value="7203" /> - <property name="navigationKey" value="quota" /> - <property name="actionController"> - <bean class="org.olat.core.gui.control.creator.AutoCreator" scope="prototype"> - <property name="className" value="org.olat.admin.quota.QuotaController"/> - </bean> - </property> - <property name="translationPackage" value="org.olat.admin" /> - <property name="i18nActionKey" value="menu.quota"/> - <property name="i18nDescriptionKey" value="menu.quota.alt"/> - <property name="parentTreeNodeIdentifier" value="sysconfigParent" /> - <property name="extensionPoints"> - <list> - <value>org.olat.admin.SystemAdminMainController</value> - </list> - </property> - </bean> <!-- Security admin. panel --> <bean class="org.olat.core.extensions.action.GenericActionExtension" init-method="initExtensionPoints"> <property name="order" value="8805" /> diff --git a/src/main/java/org/olat/admin/sysinfo/LargeFilesController.java b/src/main/java/org/olat/admin/sysinfo/LargeFilesController.java index 03c628e6c23f18d29e9cc106d55762816f0d4500..f4cfdf291282fd181f0bf075ce7fd10bd08fe5ac 100644 --- a/src/main/java/org/olat/admin/sysinfo/LargeFilesController.java +++ b/src/main/java/org/olat/admin/sysinfo/LargeFilesController.java @@ -319,10 +319,6 @@ public class LargeFilesController extends FormBasicController implements Extende columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, LargeFilesTableColumns.fileType)); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, LargeFilesTableColumns.downloadCount)); - DefaultFlexiColumnModel sendMail = new DefaultFlexiColumnModel(false, LargeFilesTableColumns.sendMail, "sendMail", new LargeFilesSendMailCellRenderer()); - sendMail.setIconHeader(CSSHelper.getIconCssClassFor(CSSHelper.CSS_CLASS_MAIL)); - columnsModel.addFlexiColumnModel(sendMail); - columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, LargeFilesTableColumns.author, "selectAuthor")); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, LargeFilesTableColumns.license)); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, LargeFilesTableColumns.language)); @@ -339,6 +335,11 @@ public class LargeFilesController extends FormBasicController implements Extende columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, LargeFilesTableColumns.pubDate)); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, LargeFilesTableColumns.createdAt)); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, LargeFilesTableColumns.lastModifiedAt)); + + DefaultFlexiColumnModel sendMail = new DefaultFlexiColumnModel(true, LargeFilesTableColumns.sendMail, "sendMail", new LargeFilesSendMailCellRenderer()); + sendMail.setAlwaysVisible(true); + sendMail.setIconHeader(CSSHelper.getIconCssClassFor(CSSHelper.CSS_CLASS_MAIL)); + columnsModel.addFlexiColumnModel(sendMail); largeFilesTableModel = new LargeFilesTableModel(columnsModel, getLocale()); largeFilesTableElement = uifactory.addTableElement(getWindowControl(), "large_files", largeFilesTableModel, getTranslator(), formLayout); @@ -490,7 +491,7 @@ public class LargeFilesController extends FormBasicController implements Extende cmsg.addEmailTo(contactList); cmsg.setSubject("Too large files in your personal folder"); - String bodyStart = translate("largefiles.mail.start", new String[] {user.getUser().getFirstName() + user.getUser().getLastName()}); + String bodyStart = translate("largefiles.mail.start", new String[] {user.getUser().getFirstName() + " " + user.getUser().getLastName()}); String bodyFiles = "<ul>"; String bodyEnd = translate("largefiles.mail.end"); diff --git a/src/main/java/org/olat/core/commons/services/_spring/servicesCorecontext.xml b/src/main/java/org/olat/core/commons/services/_spring/servicesCorecontext.xml index 603257c3149e46053e7edf9e5706a87e3779b653..188b1837000918ffa6bb980f7f00655e661d77d3 100644 --- a/src/main/java/org/olat/core/commons/services/_spring/servicesCorecontext.xml +++ b/src/main/java/org/olat/core/commons/services/_spring/servicesCorecontext.xml @@ -78,26 +78,6 @@ </property> </bean> - <!-- The version configuration --> - <bean class="org.olat.core.extensions.action.GenericActionExtension" init-method="initExtensionPoints" > - <property name="order" value="7204" /> - <property name="navigationKey" value="versioning" /> - <property name="actionController"> - <bean class="org.olat.core.gui.control.creator.AutoCreator" scope="prototype"> - <property name="className" value="org.olat.core.commons.services.vfs.ui.version.VersionAdminController"/> - </bean> - </property> - <property name="translationPackage" value="org.olat.admin" /> - <property name="i18nActionKey" value="menu.versions"/> - <property name="i18nDescriptionKey" value="menu.versions.alt"/> - <property name="parentTreeNodeIdentifier" value="sysconfigParent" /> - <property name="extensionPoints"> - <list> - <value>org.olat.admin.SystemAdminMainController</value> - </list> - </property> - </bean> - <!-- Pdf service --> <bean class="org.olat.core.extensions.action.GenericActionExtension" init-method="initExtensionPoints"> <property name="order" value="8280" /> diff --git a/src/main/java/org/olat/core/commons/services/vfs/ui/version/VFSTrashController.java b/src/main/java/org/olat/core/commons/services/vfs/ui/version/VFSTrashController.java index 740885d1cf4f50399233cf033d1c23cf74953c72..138f14c010fe440617cb3c4ee9f7d99edcffc25b 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/ui/version/VFSTrashController.java +++ b/src/main/java/org/olat/core/commons/services/vfs/ui/version/VFSTrashController.java @@ -152,6 +152,7 @@ public class VFSTrashController extends FormBasicController implements ProgressD orphansListTableEl = uifactory.addTableElement(getWindowControl(), "orphansList", versionsDeletedFileDataModel, 24, false, getTranslator(), tableLayout); orphansListTableEl.setEmtpyTableMessageKey("version.noDeletedFiles"); orphansListTableEl.setMultiSelect(true); + orphansListTableEl.setSelectAllEnable(true); FlexiTableSortOptions sortOptions = new FlexiTableSortOptions(true); sortOptions.setDefaultOrderBy(new SortKey(VersionsDeletedCols.size.name(), false)); orphansListTableEl.setSortSettings(sortOptions); @@ -159,9 +160,6 @@ public class VFSTrashController extends FormBasicController implements ProgressD orphansDeleteButton = uifactory.addFormLink("delete", tableLayout, Link.BUTTON); orphansDeleteButton.setIconLeftCSS(CSSHelper.getIconCssClassFor(CSSHelper.CSS_CLASS_TRASHED)); - - tableLayout.add("orphansTable", orphansListTableEl); - tableLayout.add("orphansDelete", orphansDeleteButton); } @Override diff --git a/src/main/java/org/olat/core/commons/services/vfs/ui/version/_content/orphans.html b/src/main/java/org/olat/core/commons/services/vfs/ui/version/_content/orphans.html index 05396d8574cb002c225c792407a80d99084183d5..0193b5d04996cd98a553ed40a20ff72eb1a81db0 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/ui/version/_content/orphans.html +++ b/src/main/java/org/olat/core/commons/services/vfs/ui/version/_content/orphans.html @@ -1,7 +1,7 @@ <fieldset class="o_form_horizontal"> <legend class="o_text_right">$r.translate("version.deletedFiles")</legend> - $r.render("orphansTable") + $r.render("orphansList") <div class="o_button_group"> - $r.render("orphansDelete") + $r.render("delete") </div> </fieldset> \ No newline at end of file diff --git a/src/main/java/org/olat/ims/qti21/model/xml/interactions/FIBAssessmentItemBuilder.java b/src/main/java/org/olat/ims/qti21/model/xml/interactions/FIBAssessmentItemBuilder.java index cdc43c53a7eacba1a1414700123feac334d9a55f..03bf16bdd19b8120a70a1fbde925997ad72a1d0f 100644 --- a/src/main/java/org/olat/ims/qti21/model/xml/interactions/FIBAssessmentItemBuilder.java +++ b/src/main/java/org/olat/ims/qti21/model/xml/interactions/FIBAssessmentItemBuilder.java @@ -508,7 +508,7 @@ public class FIBAssessmentItemBuilder extends AssessmentItemBuilder { if(textEntry.getAlternatives() != null && !textEntry.getAlternatives().isEmpty()) { for(TextEntryAlternative alternative:textEntry.getAlternatives()) { double altScore = alternative.getScore(); - if(altScore >= 0.0d && score != null && score.doubleValue() == altScore) { + if(altScore >= 0.0d && score != null && score.doubleValue() != altScore) { return true; } } diff --git a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java index bc9840006d9210896a8f2d4f3c619bb4bd01453a..813f607bac57a6dd1aae31da97c8ef2520986ad3 100644 --- a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java +++ b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java @@ -799,13 +799,13 @@ public class QuestionListController extends AbstractItemListController implement } private void doOpenImport(UserRequest ureq) { - String title = translate("import"); + removeAsListenerAndDispose(calloutCtrl); removeAsListenerAndDispose(importSourcesCtrl); + importSourcesCtrl = new ImportSourcesController(ureq, getWindowControl()); listenTo(importSourcesCtrl); - removeAsListenerAndDispose(calloutCtrl); - calloutCtrl = new CloseableCalloutWindowController(ureq, getWindowControl(), importSourcesCtrl.getInitialComponent(), importItem, title, true, null); + calloutCtrl = new CloseableCalloutWindowController(ureq, getWindowControl(), importSourcesCtrl.getInitialComponent(), importItem, null, true, null); listenTo(calloutCtrl); calloutCtrl.activate(); } diff --git a/src/main/java/org/olat/restapi/system/MonitoringWebService.java b/src/main/java/org/olat/restapi/system/MonitoringWebService.java index 94deb688ca6af2d55687b013f47a3a1f6fdfda13..a2e687865542e06b52c1dadc5c083eb620dac7f5 100644 --- a/src/main/java/org/olat/restapi/system/MonitoringWebService.java +++ b/src/main/java/org/olat/restapi/system/MonitoringWebService.java @@ -51,6 +51,7 @@ public class MonitoringWebService { private static final MemoryWebService memoryWebService = new MemoryWebService(); private static final ThreadsWebService threadsWebService = new ThreadsWebService(); private static final OpenOLATStatisticsWebService ooStatsWebService = new OpenOLATStatisticsWebService(); + private static final VFSStatsWebService vfsStatsWebService = new VFSStatsWebService(); public MonitoringWebService() { //make Spring happy @@ -86,6 +87,12 @@ public class MonitoringWebService { return threadsWebService; } + @Path("revisionsSize") + public VFSStatsWebService getRevisionsSizeWS() { + return vfsStatsWebService; + } + + /** * Return the configuration of the monitoring, which probes are available, diff --git a/src/main/java/org/olat/restapi/system/VFSStatsWebService.java b/src/main/java/org/olat/restapi/system/VFSStatsWebService.java new file mode 100644 index 0000000000000000000000000000000000000000..02721e961623752e0a36258d625dc5bf08bc75e7 --- /dev/null +++ b/src/main/java/org/olat/restapi/system/VFSStatsWebService.java @@ -0,0 +1,68 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.restapi.system; + +import java.util.List; + +import javax.ws.rs.GET; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import org.olat.core.CoreSpringFactory; +import org.olat.core.commons.persistence.DB; +import org.olat.restapi.system.vo.VFSStatsVO; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * + * <h3>Description:</h3> + * + * Initial Date: 21 juin 2010 <br> + * @author srosse, stephane.rosse@frentix.com, www.frentix.com + */ +public class VFSStatsWebService { + + @Autowired + private DB dbInstance; + + public VFSStatsWebService() { + CoreSpringFactory.autowireObject(this); + } + + @GET + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + public Response getRevisionSizeXML() { + StringBuilder sb = new StringBuilder(256); + sb.append("select SUM(size) from vfsrevision"); + + List<Long> revisionsSize = dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), Long.class) + .getResultList(); + + Long size = revisionsSize == null || revisionsSize.isEmpty() ? Long.valueOf(0) : revisionsSize.get(0); + + dbInstance.commitAndCloseSession(); + + VFSStatsVO vo = new VFSStatsVO(size); + + return Response.ok(vo).build(); + } +} \ No newline at end of file diff --git a/src/main/java/org/olat/restapi/system/vo/VFSStatsVO.java b/src/main/java/org/olat/restapi/system/vo/VFSStatsVO.java new file mode 100644 index 0000000000000000000000000000000000000000..fd8f7dae93478fe9e0a51f726066909c2b4d3dd8 --- /dev/null +++ b/src/main/java/org/olat/restapi/system/vo/VFSStatsVO.java @@ -0,0 +1,61 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.restapi.system.vo; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; + + +/** + * + * <h3>Description:</h3> + * + * + * Initial Date: 21 juin 2010 <br> + * @author srosse, stephane.rosse@frentix.com, www.frentix.com + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlRootElement(name = "vfsStatsVO") +public class VFSStatsVO { + + @XmlAttribute(name="revisionsSize", required=true) + private long revisionsSize; + + public VFSStatsVO() { + //make JAXB happy + } + + public VFSStatsVO(long revisionsSize) { + this.revisionsSize = revisionsSize; + } + + public long getRevisionsSize() { + return revisionsSize; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("revisionsSize=").append(getRevisionsSize()); + return sb.toString(); + } +} diff --git a/src/main/webapp/static/movie/mediaelementjs/features/markers/o_markers.js b/src/main/webapp/static/movie/mediaelementjs/features/markers/o_markers.js index 92e52115d8af31913e892f8f0b52f63a3f086132..503253f93da515c2d08cd6c4710ac4be0b8db42e 100644 --- a/src/main/webapp/static/movie/mediaelementjs/features/markers/o_markers.js +++ b/src/main/webapp/static/movie/mediaelementjs/features/markers/o_markers.js @@ -41,6 +41,9 @@ Object.assign(MediaElementPlayer.prototype, { media.addEventListener('durationchange', function () { player.setmarkers(controls); }); + media.addEventListener('loadedmetadata', function () {// for external video like YouTube + player.setmarkers(controls); + }); media.addEventListener('timeupdate', function () { currentPos = Math.floor(media.currentTime); if (lastPlayPos > currentPos) { diff --git a/src/test/java/org/olat/core/commons/services/vfs/manager/VFSRevisionDAOTest.java b/src/test/java/org/olat/core/commons/services/vfs/manager/VFSRevisionDAOTest.java index 70d10ee3fe0e9bde0bf67b0584534f6595837381..24be32b4ab009a1eb75526ee8839af5da3f33b75 100644 --- a/src/test/java/org/olat/core/commons/services/vfs/manager/VFSRevisionDAOTest.java +++ b/src/test/java/org/olat/core/commons/services/vfs/manager/VFSRevisionDAOTest.java @@ -228,15 +228,15 @@ public class VFSRevisionDAOTest extends OlatTestCase { Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("rev-1"); VFSMetadata metadata1 = vfsMetadataDao.createMetadata(UUID.randomUUID().toString(), "test/revs", "text1.txt", new Date(), 10l, false, "file:///text.tx", "file", null); - VFSRevision revision1 = revisionDao.createRevision(author, "._oo_vr_1_text.txt", 1, 25l, new Date(), "A comment", metadata1); + VFSRevision revision1 = revisionDao.createRevision(author, "._oo_vr_1_text.txt", 1, 25l, Date.from(ZonedDateTime.now().minusMinutes(5).toInstant()), "A comment", metadata1); dbInstance.commitAndCloseSession(); VFSMetadata metadata2 = vfsMetadataDao.createMetadata(UUID.randomUUID().toString(), "test/revs", "text2.txt", new Date(), 10l, false, "file:///text.tx", "file", null); - VFSRevision revision2 = revisionDao.createRevision(author, "._oo_vr_2_text.txt", 1, 25l, new Date(), "A comment", metadata2); + VFSRevision revision2 = revisionDao.createRevision(author, "._oo_vr_2_text.txt", 1, 25l, Date.from(ZonedDateTime.now().minusMinutes(5).toInstant()), "A comment", metadata2); dbInstance.commitAndCloseSession(); VFSMetadata metadata3 = vfsMetadataDao.createMetadata(UUID.randomUUID().toString(), "test/revs", "text3.txt", new Date(), 10l, false, "file:///text.tx", "file", null); - VFSRevision revision3 = revisionDao.createRevision(author, "._oo_vr_3_text.txt", 1, 25l, new Date(), "A comment", metadata3); + VFSRevision revision3 = revisionDao.createRevision(author, "._oo_vr_3_text.txt", 1, 25l, Date.from(ZonedDateTime.now().minusMinutes(5).toInstant()), "A comment", metadata3); dbInstance.commitAndCloseSession(); int maxResult = 100; diff --git a/src/test/java/org/olat/restapi/SystemTest.java b/src/test/java/org/olat/restapi/SystemTest.java index 60007f5f849792681b9717d6a3660da937685a6d..7bb55b463cc999ca5b648c66372b6d1e711bd2e7 100644 --- a/src/test/java/org/olat/restapi/SystemTest.java +++ b/src/test/java/org/olat/restapi/SystemTest.java @@ -36,17 +36,18 @@ import org.olat.restapi.system.vo.MemoryStatisticsVO; import org.olat.restapi.system.vo.MemoryVO; import org.olat.restapi.system.vo.MonitoringInfosVO; import org.olat.restapi.system.vo.OpenOLATStatisticsVO; -import org.olat.restapi.system.vo.StatusVO; import org.olat.restapi.system.vo.ReleaseInfosVO; import org.olat.restapi.system.vo.RepositoryStatisticsVO; import org.olat.restapi.system.vo.RuntimeStatisticsVO; import org.olat.restapi.system.vo.SessionsVO; +import org.olat.restapi.system.vo.StatusVO; import org.olat.restapi.system.vo.TasksVO; import org.olat.restapi.system.vo.ThreadStatisticsVO; import org.olat.restapi.system.vo.ThreadVO; import org.olat.restapi.system.vo.ThreadVOes; import org.olat.restapi.system.vo.ThreadsVO; import org.olat.restapi.system.vo.UserStatisticsVO; +import org.olat.restapi.system.vo.VFSStatsVO; import org.olat.test.OlatRestTestCase; /** @@ -427,4 +428,17 @@ public class SystemTest extends OlatRestTestCase { conn.shutdown(); } + + @Test + public void testVFSStats() throws IOException, URISyntaxException { + RestConnection conn = new RestConnection(); + assertTrue(conn.login("administrator", "openolat")); + + URI systemUri = conn.getContextURI().path("system").path("monitoring").path("revisionsSize").build(); + VFSStatsVO revisionsInfos = conn.get(systemUri, VFSStatsVO.class); + assertNotNull(revisionsInfos); + assertNotNull(revisionsInfos.getRevisionsSize()); + + conn.shutdown(); + } }