diff --git a/.hgtags b/.hgtags index 8b33bca19480abb008db47d6d916bac9e6fc9303..ecaf438d8e40f21b0941e65f0de1722fc59003d2 100644 --- a/.hgtags +++ b/.hgtags @@ -25,3 +25,4 @@ b7a66eba6956d8af9e6159d21058a3cfb968cf75 OpenOLAT 8.1.2 0dab711bddc8be4198528b3c20d49ca57f3096ce OpenOLAT 8.1.3 96f9bf85cadb84b0ecdd805bed99f52038f7cd14 OpenOLAT 8.1.4 17bb7d9400ffb39d74a8f20b287ae0b2c26ba422 OpenOLAT 8.2.0beta +0189d836bdbaa47a4f01e3adb04738cceae6ba42 OpenOLAT 8.2.0beta2 diff --git a/NOTICE.TXT b/NOTICE.TXT index 0d0ed5acb767daf2f7bfc3504d3cc337056e7397..95e6eb474d1bc71c24fa2512c73b9c79d7191c08 100644 --- a/NOTICE.TXT +++ b/NOTICE.TXT @@ -26,6 +26,9 @@ Contributors and copy right holders of openolat.org codebase since 2011: Armin Blawitzki, Stefan Köber, Sven Morgener - VCRP Virtueller Campus Rheinland-Pfalz [http://www.vcrp.de] Stephan Clemenz +- Rain and Hail Agricultural Insurance [http://www.rainhail.com] + Brooke Hedrick + OpenOLAT logo and icons ----------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index 59687a731fb87cb84d6e763ec07f62cc7b47553b..8ee41cdf75e8157c1e9964d3791f29b76049339a 100644 --- a/pom.xml +++ b/pom.xml @@ -80,7 +80,6 @@ <test.env.db.postgresql.user>postgres</test.env.db.postgresql.user> <test.env.db.postgresql.pass>postgres</test.env.db.postgresql.pass> <test.env.db.postgresql.host.port>5432</test.env.db.postgresql.host.port> - <test.env.db.hibernate.ddl.auto>create</test.env.db.hibernate.ddl.auto> <test.env.instance.id>myolat</test.env.instance.id> <test.env.jmx.rmi.port.0>3000</test.env.jmx.rmi.port.0> @@ -121,7 +120,6 @@ <skipTests>false</skipTests> <skipITs>true</skipITs> <testFailureIgnore>false</testFailureIgnore> - <test.env.db.hibernate.ddl.auto> </test.env.db.hibernate.ddl.auto> <test.env>mysql</test.env> </properties> <build> @@ -322,7 +320,6 @@ <skipTests>false</skipTests> <skipITs>true</skipITs> <testFailureIgnore>false</testFailureIgnore> - <test.env.db.hibernate.ddl.auto> </test.env.db.hibernate.ddl.auto> <test.env>postgresql</test.env> </properties> <build> @@ -523,8 +520,6 @@ <skipTests>false</skipTests> <skipITs>true</skipITs> <testFailureIgnore>false</testFailureIgnore> - <test.env.db.hibernate.ddl.auto> - </test.env.db.hibernate.ddl.auto> <test.env>oracle</test.env> </properties> <build> @@ -1250,21 +1245,6 @@ <artifactId>poi-scratchpad</artifactId> <version>3.7</version> </dependency> - <dependency> - <groupId>org.apache.poi</groupId> - <artifactId>poi-ooxml</artifactId> - <version>3.7</version> - <exclusions> - <exclusion><!-- included in jdk 1.6 --> - <groupId>stax</groupId> - <artifactId>stax-api</artifactId> - </exclusion> - <exclusion><!-- included in jdk 1.6 --> - <groupId>org.apache.geronimo.specs</groupId> - <artifactId>geronimo-stax-api_1.0_spec</artifactId> - </exclusion> - </exclusions> - </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> @@ -1438,6 +1418,10 @@ <groupId>xerces</groupId> <artifactId>xmlParserAPIs</artifactId> </exclusion> + <exclusion> + <groupId>org.apache.ant</groupId> + <artifactId>ant</artifactId> + </exclusion> </exclusions> </dependency> <dependency> diff --git a/src/main/java/de/bps/course/assessment/_i18n/LocalStrings_pl.properties b/src/main/java/de/bps/course/assessment/_i18n/LocalStrings_pl.properties new file mode 100644 index 0000000000000000000000000000000000000000..8f69f9a6154704d87ff5e931e5f09c5b86c77147 --- /dev/null +++ b/src/main/java/de/bps/course/assessment/_i18n/LocalStrings_pl.properties @@ -0,0 +1,2 @@ +table.action.selectparticipant=Wybierz uczestnik\u00F3w +table.header.overallselect=Ca\u0142kowity wynik diff --git a/src/main/java/de/bps/course/nodes/den/_i18n/LocalStrings_pl.properties b/src/main/java/de/bps/course/nodes/den/_i18n/LocalStrings_pl.properties index b67849c313d4a6912dce31b9a23e82935b044486..9bc7f94cf37f33f0686016ab4029be1f2b1e5c7f 100644 --- a/src/main/java/de/bps/course/nodes/den/_i18n/LocalStrings_pl.properties +++ b/src/main/java/de/bps/course/nodes/den/_i18n/LocalStrings_pl.properties @@ -71,10 +71,10 @@ dates.table.participant.name=Imi\u0119 dates.table.participant.username=Imi\u0119 dates.table.participants.num=Liczba uczestnik\u00F3w dates.table.reserved=Reserved/Total -dates.table.run.enrolled=Signed up +dates.table.run.enrolled=Zapisany dates.table.run.full=Full dates.table.run.no_action=- -dates.table.run.notenrolled=Not signed up +dates.table.run.notenrolled=Nie zapisany dates.table.sign.in=Sign in dates.table.sign.out=Sign out dates.table.status=Status diff --git a/src/main/java/de/bps/course/nodes/vc/_i18n/LocalStrings_pl.properties b/src/main/java/de/bps/course/nodes/vc/_i18n/LocalStrings_pl.properties new file mode 100644 index 0000000000000000000000000000000000000000..5511e4e81cacc8c445b3deb086b28c2d8102e33c --- /dev/null +++ b/src/main/java/de/bps/course/nodes/vc/_i18n/LocalStrings_pl.properties @@ -0,0 +1 @@ +pane.tab.accessibility=Dost\u0119p diff --git a/src/main/java/de/bps/course/nodes/vc/_i18n/LocalStrings_pt_BR.properties b/src/main/java/de/bps/course/nodes/vc/_i18n/LocalStrings_pt_BR.properties new file mode 100644 index 0000000000000000000000000000000000000000..b61ad73041e56c91859b8dfdbd58c667db970d99 --- /dev/null +++ b/src/main/java/de/bps/course/nodes/vc/_i18n/LocalStrings_pt_BR.properties @@ -0,0 +1,3 @@ +#Wed Nov 07 21:33:35 CET 2012 +chelp.ced-vc-config.title=Configurar sala de aula virtual +chelp.hover.vc.config=Ajuda sobre a configura\u00E7\u00E3o da sala de aula virtual diff --git a/src/main/java/de/bps/ims/qti/export/_i18n/LocalStrings_pl.properties b/src/main/java/de/bps/ims/qti/export/_i18n/LocalStrings_pl.properties new file mode 100644 index 0000000000000000000000000000000000000000..ceed659299fb8f08e3cd0f424342b57f2f550356 --- /dev/null +++ b/src/main/java/de/bps/ims/qti/export/_i18n/LocalStrings_pl.properties @@ -0,0 +1 @@ +table.action.selectparticipant=Wybierz diff --git a/src/main/java/de/bps/olat/portal/links/_i18n/LocalStrings_pt_BR.properties b/src/main/java/de/bps/olat/portal/links/_i18n/LocalStrings_pt_BR.properties index 60a9fba7e288731168bd5b44807a08558cc30b2a..e111794385afe92d59767774c52bdcb9ff8d51aa 100644 --- a/src/main/java/de/bps/olat/portal/links/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/de/bps/olat/portal/links/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,25 @@ -#Mon Mar 02 09:53:59 CET 2009 +#Wed Nov 07 21:45:57 CET 2012 +access.all=Todos os usu\u00E1rios OpenOLAT tamb\u00E9m como convidados +access.guests=Convidados apenas +access.registered.users=Todos usu\u00E1rios OpenOLAT registrados +add.link=+ Adicionar link +del.link.success=Esse link foi exclu\u00EDdo +del.link.text=Voc\u00EA realmente deseja excluir o link "{0}" ? +del.link.title=Excluir um link +editor.button=Editar +error.link.not.found=N\u00E3o foi poss\u00EDvel encontrar este link na configura\u00E7\u00E3o\! Por favor, consulte os arquivos XML em olatdata manualmente. +link.desc=Descri\u00E7\u00E3o +link.editor.overview.intro=Clique em um link para editar os detalhes. Aqui voc\u00EA pode ver todos os links, o usu\u00E1rio do OpenOLAT ir\u00E1 ver apenas os links correspondentes sua configura\u00E7\u00E3o de visibilidade e idioma. +link.editor.title=Editar um link +link.institution=Vis\u00EDvel para +link.lang.all=Todos idiomas +link.language=Idioma +link.open.new.window=Abrir em nova janela +link.title=T\u00EDtulo +link.title.not.empty=Por favor forne\u00E7a um t\u00EDtulo para esse link +link.url=Link alvo +link.url.not.empty=Favor fornecer uma URL v\u00E1lida para este link. +link.viewable.for=Restri\u00E7\u00F5es de visibilidade no.content.found=Nenhum link encontrado portlet.description=Links interessantes fora do OpenOLAT. portlet.title=Links interessantes diff --git a/src/main/java/de/bps/onyx/plugin/course/nodes/iq/_i18n/LocalStrings_pl.properties b/src/main/java/de/bps/onyx/plugin/course/nodes/iq/_i18n/LocalStrings_pl.properties new file mode 100644 index 0000000000000000000000000000000000000000..3a216505a8deb65f115989db510e284577511e55 --- /dev/null +++ b/src/main/java/de/bps/onyx/plugin/course/nodes/iq/_i18n/LocalStrings_pl.properties @@ -0,0 +1 @@ +qti.form.allowShowSolution=Poka\u017C rozwi\u0105zania diff --git a/src/main/java/de/bps/onyx/plugin/run/_i18n/LocalStrings_pl.properties b/src/main/java/de/bps/onyx/plugin/run/_i18n/LocalStrings_pl.properties new file mode 100644 index 0000000000000000000000000000000000000000..791749f4c33906a9259b7e871492730fd3fb6fdf --- /dev/null +++ b/src/main/java/de/bps/onyx/plugin/run/_i18n/LocalStrings_pl.properties @@ -0,0 +1,4 @@ +attempts=Maksymalna liczba pr\u00F3b +attempts.noLimit=nieograniczone +attempts.result=Wynik testu +attempts.yourattempts=Liczba pr\u00F3b diff --git a/src/main/java/de/tuchemnitz/wizard/helper/catalog/_i18n/LocalStrings_pl.properties b/src/main/java/de/tuchemnitz/wizard/helper/catalog/_i18n/LocalStrings_pl.properties new file mode 100644 index 0000000000000000000000000000000000000000..abe37d82f550e86323c8325cbe495568238a13d5 --- /dev/null +++ b/src/main/java/de/tuchemnitz/wizard/helper/catalog/_i18n/LocalStrings_pl.properties @@ -0,0 +1,2 @@ +catalog.tree.add.intro=Wybierz kategori\u0119, w kt\u00F3rej chcesz umie\u015Bci\u0107 Tw\u00F3j zas\u00F3b edukacyjny. +catalog.tree.add.title=Dodaj zas\u00F3b "{0}" do katalogu. diff --git a/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/_i18n/LocalStrings_pl.properties b/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/_i18n/LocalStrings_pl.properties new file mode 100644 index 0000000000000000000000000000000000000000..166519b46be8ad253519b4de90c6a7e5d118459f --- /dev/null +++ b/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/_i18n/LocalStrings_pl.properties @@ -0,0 +1,37 @@ +car.label=Dost\u0119p maj\u0105 +car.makepublic=Opublikuj kurs +car.nologin=Zarejestrowani u\u017Cytkownicy platformy i go\u015Bcie +car.olat=Wszyscy zarejestrowani u\u017Cytkownicy platformy +car.university=U\u017Cytkownicy z instytucji "{0}" +car.warning.text=Je\u015Bli nie opublikujesz swojego kursu, nie b\u0119dzie on wy\u015Bwietlany w katalogu (w kategorii wybranej w kroku 2). Aby opublikowa\u0107 sw\u00F3j kurs p\u00F3\u017Aniej przejd\u017A do widoku szczeg\u00F3\u0142owego kursu. Wybierz link "Zmie\u0144 ustawienia" z menu "zas\u00F3b edukacyjny" i zaznacz odpowiedni\u0105 opcj\u0119 w sekcji "Dost\u0119p maj\u0105" w zak\u0142adce "Og\u00F3lne". Wybieraj\u0105c pozycj\u0119 "Zarejestrowani u\u017Cytkownicy platformy i go\u015Bcie" osoby niezarejestrowane w OLAT b\u0119d\u0105 mog\u0142y uzyska\u0107 dost\u0119p do kursu. +cce.contactform=E-mail +cce.contactform.descr=U\u017Cyj tego formularza do kontaktu z nauczycielem. +cce.contactform.subject=Temat +cce.downloadfolder=Pobierz folder +cce.downloadfolder.descr=Tutaj znajdziesz pliki do pobrania. +cce.edit=Edycja +cce.enrollment=Zapisy +cce.enrollment.descr=Tutaj mo\u017Cesz si\u0119 zapisa\u0107 na kurs +cce.enrollment.error.groupcount=Liczba grup musi wynosi\u0107 przynajmniej 1\! +cce.enrollment.error.subscribercount=Wprowad\u017A warto\u015B\u0107 wi\u0119ksz\u0105 od 0 lub pozostaw to pole puste\! +cce.forum=Forum +cce.informationpage=Strona informacyjna +cce.informationpage.default.hint=Kliknij na "Edytuj", \u017Ceby dostosowa\u0107 t\u0119 stron\u0119 do Twoich potrzeb. +cce.informationpage.default.message=Informacje dot. kursu "{0}". +cce.informationpage.default.welcome=Witamy w kursie "{0}" +cce.informationpage.descr=Tutaj znajdziesz troch\u0119 informacji o tym kursie. +cce.label=Elementy kursu +coursecreation.catalog.description=Umie\u015B\u0107 kurs w katalogu +coursecreation.catalog.title=Umie\u015B\u0107 kurs w katalogu +coursecreation.chooseaccessrights.shortDescription=Wybierz w\u0142a\u015Bciw\u0105 konfiguracj\u0119 dost\u0119pu dla kursu +coursecreation.choosecourseelements.shortDescription=Wybierz dodatkowe elementy kursu +coursecreation.choosecourseelements.title=Wybierz elementy kursu +coursecreation.enrollment.shortDescription=Wybierz szczeg\u00F3\u0142y dla strony zapis\u00F3w na kurs. Nazwy grup mog\u0105 by\u0107 w przysz\u0142o\u015Bci zmienione. +coursecreation.enrollment.title=Skonfiguruj zapisy na kurs +coursecreation.publish.description=Okre\u015Bl prawa dost\u0119pu dla nowego kursu przed opublikowaniem go. +coursecreation.publish.title=Opublikuj kurs +coursecreation.success=Tw\u00F3j kurs zosta\u0142 pomy\u015Blnie utworzony. Otrzymasz potwierdzaj\u0105cy e-mail. +coursecreation.title=Kreator kursu +en.accesscheckbox=Widzialno\u015B\u0107 pojedynczych element\u00F3w kursu tylko dla zarejestrowanych u\u017Cytkownik\u00F3w +noaccessexplain=Tylko zarejestrowani uczestnicy maj\u0105 dost\u0119p do tego elementu kursu. +noaccessroot=Ten kurs jest dost\u0119pny tylko dla "{0}" uczestnik\u00F3w. diff --git a/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/steps/_i18n/LocalStrings_pl.properties b/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/steps/_i18n/LocalStrings_pl.properties new file mode 100644 index 0000000000000000000000000000000000000000..503b55ff50e3da4610121794802da463900b78ab --- /dev/null +++ b/src/main/java/de/tuchemnitz/wizard/workflows/coursecreation/steps/_i18n/LocalStrings_pl.properties @@ -0,0 +1,5 @@ +coursecreation.catalog.description=Umie\u015B\u0107 kurs w katalogu +coursecreation.catalog.title=Umie\u015B\u0107 kurs w katalogu +coursecreation.choosecourseelements.title=Wybierz element kursu +coursecreation.publish.description=Okre\u015Bl prawa dost\u0119pu dla nowego kursu przed opublikowaniem go. +coursecreation.publish.title=Opublikuj kurs diff --git a/src/main/java/org/olat/admin/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/admin/_i18n/LocalStrings_pl.properties index 1f959462840a3023930448953236fbf08fc71c4a..ba790955a0f93da54aff043d5aabc5e7325735d7 100644 --- a/src/main/java/org/olat/admin/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/admin/_i18n/LocalStrings_pl.properties @@ -40,7 +40,7 @@ menu.imadmin=Komunikator menu.imadmin.alt=Administrowanie komunikatorem menu.jmx=JMX menu.jmx.alt=Poka\u017C warto\u015Bci JMX -menu.layout=Kompozycja +menu.layout=Wygl\u0105d menu.layout.alt=Modyfikuj kompozycj\u0119 ca\u0142ego systemu menu.logondeniedgroup=U\u017Cytkownicy niedopuszczeni do zalogowania menu.logondeniedgroup.alt=U\u017Cytkownicy niedopuszczeni do zalogowania si\u0119 w OLAT diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_pt_BR.properties index 4e041aebd5107567c41006ba524a35082ee31d7e..d7e8fbaf353616c0971318c7320921f26cca4856 100644 --- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Tue Apr 03 15:11:27 CEST 2012 +#Wed Nov 07 21:35:26 CET 2012 action.bulkedit=Editar os atributos desses usu\u00E1rios action.choose=Choose action.choose.finish=Fechar e terminar @@ -34,6 +34,7 @@ error.search.form.no.valid.datechooser=Por favor, indique uma data v\u00E1lida. error.search.form.no.wildcard.dublicates=Termos de pesquisa, incluindo `**` n\u00E3o s\u00E3o permitidos. error.search.form.notempty=Please fill in at least one of the available fields. error.search.form.to.short=Termo de pesquisa muito curto. +error.search.maxResults=Muitos resultados encontrados. Apenas o primeiro {0} s\u00E3o exibidos. form.password.new1=New password form.password.new2=Confirm password form.please.enter.new=Please enter a new password for this user @@ -136,3 +137,4 @@ title.usersearch=User search user.found=User was found view.effStatements=Comprovantes view.groups=Grupos +view.subscriptions=Assinaturas diff --git a/src/main/java/org/olat/admin/user/groups/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/admin/user/groups/_i18n/LocalStrings_pt_BR.properties index e180d43b177dba03951ecfc6ca2d5a98eeb49dc2..ebe1d17da8d3c67a56c22945b65b18e7deea60a2 100644 --- a/src/main/java/org/olat/admin/user/groups/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/admin/user/groups/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Tue Apr 03 15:41:04 CEST 2012 +#Wed Nov 07 21:36:21 CET 2012 add.groups=Adicionar aos grupos add.groups.title=Grupos de que este usu\u00E1rio \u00E9 um membro attende=Participantes @@ -8,6 +8,7 @@ error.choose.one=Por favor, escolha pelo menos um grupo. group.add.as=Adicionar como {0} group.add.result=Adicionar utilizador ao grupo(s). Como propriet\u00E1rio de "{0}", e como participante de "{1}". group.add.result.none=N\u00E3o adicionar o usu\u00E1rio a qualquer grupo. Ou nenhum foi seleccionado ou o utilizador j\u00E1 era membro deles. +group.delete.confirmation=Voc\u00EA realmente deseja excluir esse grupo? group.removed=Esse grupo n\u00E3o existe mais\! group.result.course=Curso\: {0}, {1} group.result.desc=Descri\u00E7\u00E3o\: {0} @@ -19,8 +20,11 @@ result=Grupos encontrados search.field=Procure um grupo\: send.email=Enviar e-mail de convite send.email.notif=Voc\u00EA quer enviar uma notifica\u00E7\u00E3o para o usu\u00E1rio? +table.group.add.participant=Adicionar como participante +table.group.add.tutor=Adicionar como treinador (coach) table.group.name=Nome do grupo table.group.type=Tipo do grupo +table.header.resources=$org.olat.group.ui.main\:table.header.resources table.user.joindate=Tempo de entrada table.user.role=Regra do usu\u00E1rio table.user.unsubscribe=Desinscrever diff --git a/src/main/java/org/olat/basesecurity/BaseSecurity.java b/src/main/java/org/olat/basesecurity/BaseSecurity.java index 9345921f15feff147fbbb2aeefcd45d5f693b432..b4b2350d812828d331247c9ee8b4a70361528fb0 100644 --- a/src/main/java/org/olat/basesecurity/BaseSecurity.java +++ b/src/main/java/org/olat/basesecurity/BaseSecurity.java @@ -430,6 +430,11 @@ public interface BaseSecurity { */ public void deletePolicy(SecurityGroup secGroup, String permission, OLATResource olatResourceable); + /** + * Delete all policies of a resource + */ + public void deletePolicies(OLATResource olatResourceable); + public boolean deletePolicies(Collection<SecurityGroup> secGroups, Collection<OLATResource> resources); // some queries mainly for the group/groupcontext management diff --git a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java index 0779f3ab3061895f5d33b501376ae2aace6fb517..af70c84eb8ea5b2a6c363f2f2ef61d3305b5e88e 100644 --- a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java +++ b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java @@ -694,7 +694,22 @@ public class BaseSecurityManager extends BasicManager implements BaseSecurity { deletePolicy(p); } } - + + @Override + public void deletePolicies(OLATResource resource) { + StringBuilder sb = new StringBuilder(); + sb.append("delete from ").append(PolicyImpl.class.getName()).append(" as poi ") + .append(" where poi.olatResource.key=:resourceKey"); + + int rowDeleted = DBFactory.getInstance().getCurrentEntityManager() + .createQuery(sb.toString()) + .setParameter("resourceKey", resource.getKey()) + .executeUpdate(); + if(isLogDebugEnabled()) { + logDebug(rowDeleted + " policies deleted"); + } + } + /** * * @see org.olat.basesecurity.BaseSecurity#createAndPersistInvitation() diff --git a/src/main/java/org/olat/collaboration/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/collaboration/_i18n/LocalStrings_pl.properties index c1aaaf5f663ad04c4f1b9d0cf0ee6527b4775e58..1ab28a945228ecb4d3a506cd3421b9dc1ab7779b 100644 --- a/src/main/java/org/olat/collaboration/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/collaboration/_i18n/LocalStrings_pl.properties @@ -1,6 +1,6 @@ #Sat Mar 13 23:32:54 CET 2010 calendar.access=Dost\u0119p do wpisu do kalendarza -calendar.access.all=W\u0142a\u015Bciciele i cz\u0142onkowie +calendar.access.all=Wszyscy cz\u0142onkowie calendar.access.owners=W\u0142a\u015Bciciele calendar.access.title=Konfiguruj dost\u0119p do wpisu do kalendarza collabtools.named.hasCalendar=Kalendarz diff --git a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pt_BR.properties index 14b8f9b2c2927f00ce65d98fd99eb14fe0e65b6d..29a5e0a90057dd9299e64d9cb13592797b92fd65 100644 --- a/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/commons/calendar/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Tue Apr 03 15:51:27 CEST 2012 +#Wed Nov 07 21:36:23 CET 2012 cal.add.event=Adicionar evento cal.add.readonly=(somente leitura) cal.color.choose=Escolher cor diff --git a/src/main/java/org/olat/commons/file/filechooser/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/commons/file/filechooser/_i18n/LocalStrings_pl.properties index 9e4a5bba93651b51145e9ced742ecc7b67170618..1621b0749b07b589c9947a3925ac7c048190fd3b 100644 --- a/src/main/java/org/olat/commons/file/filechooser/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/commons/file/filechooser/_i18n/LocalStrings_pl.properties @@ -39,7 +39,7 @@ label.zipupload=Za\u0142aduj jeden lub wiele plik\u00F3w HTML do folderu jako pa mf.cancel=Anuluj newfile=Nowy plik HTML no.file.chosen=<i>Nie wybrano pliku</i> -pane.tab.accessibility=dost\u0119p +pane.tab.accessibility=Dost\u0119p pane.tab.spconfig=Strona HMTL personalFolder=Folder osobisty selectfile=Wybierz ten plik diff --git a/src/main/java/org/olat/commons/info/model/InfoMessageImpl.java b/src/main/java/org/olat/commons/info/model/InfoMessageImpl.java index 06abd21c42c631633f2c6bf09a76b34865435260..b626c565452bfcf9b8e9e6ac7c937d0b1eb2f6a2 100644 --- a/src/main/java/org/olat/commons/info/model/InfoMessageImpl.java +++ b/src/main/java/org/olat/commons/info/model/InfoMessageImpl.java @@ -28,6 +28,8 @@ import org.olat.core.id.OLATResourceable; public class InfoMessageImpl extends PersistentObject implements InfoMessage { + private static final long serialVersionUID = 6373476657660866469L; + private Date modificationDate; private String title; diff --git a/src/main/java/org/olat/commons/info/notification/InfoMessageNotificationHandler.java b/src/main/java/org/olat/commons/info/notification/InfoMessageNotificationHandler.java index f26e083438058df0c6e389fe271fdecd3a41e2b4..a7660589f3c82044fdc78ffa5522e56835eda5c8 100644 --- a/src/main/java/org/olat/commons/info/notification/InfoMessageNotificationHandler.java +++ b/src/main/java/org/olat/commons/info/notification/InfoMessageNotificationHandler.java @@ -31,7 +31,6 @@ import org.olat.core.id.OLATResourceable; import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.logging.LogDelegator; import org.olat.core.util.Util; -import org.olat.core.util.notifications.NotificationHelper; import org.olat.core.util.notifications.NotificationsHandler; import org.olat.core.util.notifications.NotificationsManager; import org.olat.core.util.notifications.Publisher; @@ -90,7 +89,7 @@ public class InfoMessageNotificationHandler extends LogDelegator implements Noti String infoBusinessPath = info.getBusinessPath() + "[InfoMessage:" + info.getKey() + "]"; String urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(infoBusinessPath); Date dateInfo = info.getModificationDate() == null ? info.getCreationDate() : info.getModificationDate(); - SubscriptionListItem subListItem = new SubscriptionListItem(desc, tooltip, urlToSend, dateInfo, CSS_CLASS_ICON); + SubscriptionListItem subListItem = new SubscriptionListItem(desc, tooltip, urlToSend, infoBusinessPath, dateInfo, CSS_CLASS_ICON); si.addSubscriptionListItem(subListItem); } } catch (Exception e) { diff --git a/src/main/java/org/olat/commons/info/notification/InfoSubscriptionManager.java b/src/main/java/org/olat/commons/info/notification/InfoSubscriptionManager.java index 08e2fc41ba98827e8271fb1bf8514d75c76ecfa8..fb3521e701e601988d2e3e7e3bcafe4536d628a8 100644 --- a/src/main/java/org/olat/commons/info/notification/InfoSubscriptionManager.java +++ b/src/main/java/org/olat/commons/info/notification/InfoSubscriptionManager.java @@ -22,7 +22,6 @@ package org.olat.commons.info.notification; import java.util.List; -import org.olat.core.gui.UserRequest; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.util.notifications.PublisherData; diff --git a/src/main/java/org/olat/core/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/core/_i18n/LocalStrings_it.properties index cfac120b01c15536fe68c60a13c558cec196f3fd..4c78a2b0f4e76c3f104a11e1476e779c5ca756cd 100644 --- a/src/main/java/org/olat/core/_i18n/LocalStrings_it.properties +++ b/src/main/java/org/olat/core/_i18n/LocalStrings_it.properties @@ -1,4 +1,4 @@ -#Mon Jan 10 12:05:00 CET 2011 +#Mon Oct 29 20:05:26 CET 2012 alert=Selezioni almeno un oggetto per l'azione desiderata, p.f. back=Indietro calendar.choose=Selezioni una data nel calendario mini @@ -30,6 +30,7 @@ info.header=Informazione info.saved=Le Sue indicazioni sono state salvate. input.toolong=La Sua entrata \u00E8 troppo estesa. logout=Log out +module.change.warning=Per attivare i suoi cambiamenti OpenOLAT deve essere riavviato. new.form.mandatory=Questa casella non pu\u00F2 rimanere vuota. next=Avanti no=No @@ -76,6 +77,8 @@ table.showpages=Pagine this.language.in.english=Italian this.language.translated=Italiano this.language.translator.names=Giovanni Nicoli +tomcat.options.restart=Riavviare ora +tomcat.options.restartonidle=Riavviare non appena l'ultimo utente \u00E8 disconnesso toolbox.actions=Azioni toolbox.tools=Strumenti top=in alto diff --git a/src/main/java/org/olat/core/commons/controllers/impressum/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/core/commons/controllers/impressum/_i18n/LocalStrings_it.properties new file mode 100644 index 0000000000000000000000000000000000000000..e801334d59017a68fe7d6aba0ec863b342994480 --- /dev/null +++ b/src/main/java/org/olat/core/commons/controllers/impressum/_i18n/LocalStrings_it.properties @@ -0,0 +1,9 @@ +#Mon Oct 29 20:50:20 CET 2012 +ContactController.menu.title=Contatto +ImpressumController.menu.title=Note legali +TermsOfUseController.menu.title=Termini di utilizzo +TermsOfUseController.menu.title.alt=Termini di utilizzo +contact.to=Segreteria +contactform.intro=Modulo di contatto per richieste generali. +contactform.title=Contatto +main.menu.title=Note legali diff --git a/src/main/java/org/olat/core/commons/controllers/resume/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/core/commons/controllers/resume/_i18n/LocalStrings_it.properties new file mode 100644 index 0000000000000000000000000000000000000000..068d6251db9241d28b16a9b7425b5bf910755322 --- /dev/null +++ b/src/main/java/org/olat/core/commons/controllers/resume/_i18n/LocalStrings_it.properties @@ -0,0 +1,5 @@ +#Mon Oct 29 20:07:30 CET 2012 +askagain.label=Non chiedere pi\u00F9. +resume=Vuole ripristinare la sua ultima sessione? +resume.button=S\u00EC +resume.button.cancel=No diff --git a/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsBackController.java b/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsBackController.java index f56ffee7ed6494c6b171eefc82e290f892bd3e87..4c33848d149ac618379de003af786f84aa55eff9 100644 --- a/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsBackController.java +++ b/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsBackController.java @@ -116,6 +116,10 @@ public class LayoutMain3ColsBackController extends MainLayoutBasicController imp else getWindowControl().pushToMainArea(backVC); } + + public boolean isFullScreen() { + return fullScreen; + } // fxdiff FXOLAT-116: SCORM improvements public void setAsFullscreen(UserRequest ureq) { @@ -134,7 +138,7 @@ public class LayoutMain3ColsBackController extends MainLayoutBasicController imp public void deactivate() { getWindowControl().pop(); // fxdiff FXOLAT-116: SCORM improvements - if (fullScreen) { + if (fullScreen && thebaseChief != null) { thebaseChief.removeBodyCssClass("b_full_screen"); } } diff --git a/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsController.java b/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsController.java index 3ae272f4ace8c352f44d5773d7c6c016f82bfde9..be275af7cdb8d9389a27989f247475bf55719a09 100644 --- a/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsController.java +++ b/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsController.java @@ -157,6 +157,10 @@ public class LayoutMain3ColsController extends MainLayoutBasicController impleme putInitialPanel(layoutMainVC); } + public boolean isFullScreen() { + return fullScreen; + } + public void setAsFullscreen(UserRequest ureq) { ChiefController cc = (ChiefController) Windows.getWindows(ureq).getAttribute("AUTHCHIEFCONTROLLER"); if (cc instanceof BaseChiefController) { @@ -181,7 +185,7 @@ public class LayoutMain3ColsController extends MainLayoutBasicController impleme if (fullScreen) { if(thebaseChief != null) { thebaseChief.removeBodyCssClass("b_full_screen"); - } else { + } else if (ureq != null){ ChiefController cc = (ChiefController) Windows.getWindows(ureq).getAttribute("AUTHCHIEFCONTROLLER"); if (cc instanceof BaseChiefController) { thebaseChief = (BaseChiefController) cc; diff --git a/src/main/java/org/olat/core/commons/modules/bc/FolderRunController.java b/src/main/java/org/olat/core/commons/modules/bc/FolderRunController.java index 29ece95fe557bfadecb7461a6f7747f9744cf54d..fa9e71e41a3ea5541374520dc9f052a085bd716c 100644 --- a/src/main/java/org/olat/core/commons/modules/bc/FolderRunController.java +++ b/src/main/java/org/olat/core/commons/modules/bc/FolderRunController.java @@ -126,6 +126,8 @@ public class FolderRunController extends BasicController implements Activateable */ public FolderRunController(UserRequest ureq, WindowControl wControl) { this(new BriefcaseWebDAVProvider().getContainer(ureq.getIdentity()), true, true, true, ureq, wControl); + //set the resource URL to match the indexer ones + setResourceURL("[Identity:" + ureq.getIdentity().getKey() + "][userfolder:0]"); } /** @@ -268,6 +270,12 @@ public class FolderRunController extends BasicController implements Activateable enableDisableQuota(ureq); putInitialPanel(folderContainer); } + + public void setResourceURL(String resourceUrl) { + if(searchC != null) { + searchC.setResourceUrl(resourceUrl); + } + } public void event(UserRequest ureq, Controller source, Event event) { if (source == folderCommandController) { diff --git a/src/main/java/org/olat/core/commons/modules/bc/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/commons/modules/bc/_i18n/LocalStrings_de.properties index 126c3be2d510bbf32b9cf50308d735e5a9869707..28a296c0307ea8203ca2142f0c7036f3d1e50121 100644 --- a/src/main/java/org/olat/core/commons/modules/bc/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/core/commons/modules/bc/_i18n/LocalStrings_de.properties @@ -1,25 +1,25 @@ -#Mon Mar 02 09:54:04 CET 2009 +#Wed Nov 07 16:24:56 CET 2012 Directory=Ordner FileDeleteFailed=Datei/Ordner <b>{0}</b> konnten nicht gel\u00F6scht werden. FileDeleted=Dateien/Ordner <b>{0}</b> wurden erfolgreich gel\u00F6scht. FileDoesNotExist=Die Operation konnte nicht ausgef\u00FChrt werden\: Datei konnte nicht gefunden werden. Beachten Sie, dass Sonderzeichen in Dateinamen nicht unterst\u00FCtzt werden. FileMoveCopyFailed=Datei <b>{0}</b> konnte nicht verschoben/kopiert werden. FileRenameFailed=Datei <b>{0}</b> konnte nicht umbenannt werden. -FileUnzipFailed=Datei <b>{0}</b> konnte nicht entzippt werden. +FileUnzipFailed=Datei <b>{0}</b> konnte nicht entzippt werden.\r\nBitte beachten Sie dass Umlaute oder Sonderzeichen in Dateinamen nicht unterst\u00FCtzt werden. FileUnzipped=Datei <b>{0}</b> wurde erfolgreich entzippt. Locked=Gesperrt von {1} {0} am {2} NoFileChoosen=Es wurde keine Datei hochgeladen. +NoFileChosen=Keine Datei gew\u00E4hlt NoFiles=Keine Ordner/Dateien vorhanden OverlappingTarget=Quelle und Ziel \u00FCberschneiden sich. -TargetNameAlreadyUsed=Eine Datei mit demselben Namen existiert bereits. QuotaExceeded=Ihr Ordner ist voll. QuotaExceededSupport=Ihr Ordner ist voll. Wenden Sie sich an {0}, um mehr Speicherplatz zu beantragen. +TargetNameAlreadyUsed=Eine Datei mit demselben Namen existiert bereits. ULLimitExceeded=Die Datei ist zu gross (max. {0}MB) oder Ihr Ordner ist voll. Wenden Sie sich an {1}, um mehr Speicherplatz zu beantragen. UnknownFile=Unbekannt UploadCanceled=Datei\u00FCbermittlung abgebrochen. UploadSuccess=Datei <b>{0}</b> erfolgreich hochgeladen. WrongMimeType=Die hochgeladene Datei ist vom falschen Dateityp. Folgende Dateitypen (MimeType) sind zugelassen\: {0} -NoFileChosen=Keine Datei gewählt add=Hinzuf\u00FCgen... alert=Bitte w\u00E4hlen Sie mindestens ein Objekt aus. cap.upload=Dokument wird \u00FCbertragen. Bitte warten... @@ -40,9 +40,8 @@ cfile.header=Neues Dokument erstellen cfile.name=Name cfile.name.empty=Bitte geben Sie einen Namen ein. cfile.name.example=index.html, info.txt, mystyles.css -cfile.name.notvalid=Dieser Dateiname enthält unzulässige Zeichen, bitte entfernen Sie alle Sonderzeichen wie /,:, etc. -cfile.name.notvalid.cannot.edit.metadata=Dieser Dateiname enthält unzulässige Zeichen, Sie können die Metadaten daher nicht editieren. -copyfile=Datei kopieren +cfile.name.notvalid=Dieser Dateiname enth\u00E4lt unzul\u00E4ssige Zeichen, bitte entfernen Sie alle Sonderzeichen wie /,\:, etc. +cfile.name.notvalid.cannot.edit.metadata=Dieser Dateiname enth\u00E4lt unzul\u00E4ssige Zeichen, Sie k\u00F6nnen die Metadaten daher nicht editieren. checkall=Alle ausw\u00E4hlen chelp.bc-webdav.title=WebDAV chelp.buddy=<i>$org.olat.group.ui\:LearningGroup</i> @@ -61,7 +60,7 @@ chelp.how2=Inzwischen bieten auch diverse Anwenderprogramme (z.B. Macromedia Dre chelp.how3=Um einen Ordner auf OLAT \u00FCber WebDAV zu erreichen ben\u00F6tigen Sie\: chelp.how4=Adresse (URL) der Server-Ressource\: Benutzen Sie hierzu die URL, so wie sie unterhalb der WebDAV-f\u00E4higen OLAT-Ordner steht. chelp.how4a=Benutzername\: Verwenden Sie Ihren OLAT-Benutzernamen (jener Name, der nach dem Einloggen unten links auf dem Bildschirm steht). -chelp.how5=WebDAV-Passwort\: Benutzen Sie Ihr WebDav-Passwort. Ihr WebDAV-Passwort können Sie unter Home -> Einstellungen -> WebDAV ändern. Wenn ein OLAT Passwort gesetzt wurde, verwenden Sie dieses für den WebDav Zugang. +chelp.how5=WebDAV-Passwort\: Benutzen Sie Ihr WebDav-Passwort. Ihr WebDAV-Passwort k\u00F6nnen Sie unter Home -> Einstellungen -> WebDAV \u00E4ndern. Wenn ein OLAT Passwort gesetzt wurde, verwenden Sie dieses f\u00FCr den WebDav Zugang. chelp.how8=Verbinden Sie sich nun mittels der angegebenen URL, dem Benutzernamen und dem Passwort mit Ihrer OLAT-Instanz. chelp.how81=Eine Schritt-f\u00FCr-Schritt-Anleitung finden Sie in der grossen Hilfe im Kapitel "Einsatz von WebDav". chelp.how9=Wenn Sie die Verbindung erfolgreich eingerichtet haben, \u00F6ffnet sich auf Ihrem Rechner ein Verzeichnis, das die folgenden Unterverzeichnisse enth\u00E4lt\: @@ -83,6 +82,7 @@ chelp.why2=Mit WebDAV hingegen k\u00F6nnen Sie von Ihrem Rechner bequem mit Drag command.closepreview=Vorschau schliessen command.preview=Vorschau anzeigen copy=Kopieren +copyfile=Datei kopieren del=L\u00F6schen del.confirm=Wollen Sie folgende Dateien wirklich l\u00F6schen? del.header=L\u00F6schen best\u00E4tigen @@ -93,6 +93,7 @@ edit=Bearbeiten editQuota=Quota anpassen editQuota.nop=F\u00FCr dieses Objekt kann keine Quota gesetzt werden. editor=Editor +eportfolio=Diese Datei als Artefakt dem ePortfolio hinzuf\u00FCgen. failed=Operation fehlgeschlagen file=Datei header.Info=Metadaten @@ -103,6 +104,7 @@ header.Status=Status header.Type=Typ header.Version=Version help.hover.webdav=Hilfe zur Benutzung des WebDAV-Links +invalid.file.names=Folgende Dateinamen sind ung\u00FCltig, weil sie unzul\u00E4ssige Zeichen enthalten (/,\:, etc.). Bitte \u00E4ndern Sie die Namen entsprechend. lock.description=Eine oder mehrere Dateien sind gesperrt. lock.title=Datei(en) gesperrt mc.copy=Objekte kopieren @@ -132,22 +134,22 @@ text.element.error.notlongerthan=Dateien und Ordner d\u00FCrfen nicht mehr als 2 ul=Datei hochladen ul.file=Datei ul.header=Dateiupload +ul.lockedFile.text=Es gibt bereits eine Datei mit dem Namen {0} und sie ist gesperrt. Wollen Sie sie als "{1}" hochladen oder abbrechen? +ul.lockedFile.title=Datei gesperrt ul.overwrite=Es gibt bereits eine Datei mit dem Namen {0}. Wollen Sie sie \u00FCberschreiben? -ul.versionoroverwrite=Es gibt bereits eine Datei mit dem Namen {0}. Wollen Sie eine neue Version erstellen? ul.overwrite.threeoptions.cancel=Abbrechen ul.overwrite.threeoptions.newVersion=Neue Version ul.overwrite.threeoptions.overwrite=\u00DCberschreiben ul.overwrite.threeoptions.rename=Als "{0}" hochladen ul.overwrite.threeoptions.text=Es gibt bereits eine Datei mit dem Namen "{0}". Wollen Sie sie \u00FCberschreiben, als "{1}" hochladen, oder abbrechen? ul.overwrite.threeoptions.title=Datei bereits vorhanden -ul.tooManyRevisions.title=Sie haben zu viele Revisionen. -ul.tooManyRevisions.description=Die maximale Anzahl Revisionen beträgt {0}. Sie haben {1} Revisionen. Bitte löschen Sie Revisionen um neue hinzuzufügen. -ul.lockedFile.title=Datei gesperrt -ul.lockedFile.text=Es gibt bereits eine Datei mit dem Namen {0} und sie ist gesperrt. Wollen Sie sie als "{1}" hochladen oder abbrechen? ul.quote=Information zur Belegung Ihres Ordners ul.select=Datei w\u00E4hlen ul.target=Ziel +ul.tooManyRevisions.description=Die maximale Anzahl Revisionen betr\u00E4gt {0}. Sie haben {1} Revisionen. Bitte l\u00F6schen Sie Revisionen um neue hinzuzuf\u00FCgen. +ul.tooManyRevisions.title=Sie haben zu viele Revisionen. ul.upload=Hochladen +ul.versionoroverwrite=Es gibt bereits eine Datei mit dem Namen {0}. Wollen Sie eine neue Version erstellen? uncheckall=Auswahl l\u00F6schen unzip=Entzippen unzip.alreadyexists=Es gibt bereits einen Ordner mit dem Namen {0}. Eventuell haben Sie diese Datei bereits fr\u00FCher ausgepackt. Sie k\u00F6nnen den Ordner {0} umbenennen und die Datei erneut auspacken. @@ -161,7 +163,5 @@ zip.confirm=Folgende Dateien werden gezippt\: zip.extension=.zip zip.header=Dateien zippen zip.name=Name der neuen ZIP-Datei -zip.name.empty=Bitte geben Sie einen Namen für die neue Datei ein. -zip.name.notvalid=Dieser Dateiname ist ungültig, bitte entfernen Sie alle Pfadinformationen\! -invalid.file.names=Folgende Dateinamen sind ungültig, weil sie unzulässige Zeichen enthalten (/,:, etc.). Bitte ändern Sie die Namen entsprechend. -eportfolio=Diese Datei als Artefakt dem ePortfolio hinzufügen. \ No newline at end of file +zip.name.empty=Bitte geben Sie einen Namen f\u00FCr die neue Datei ein. +zip.name.notvalid=Dieser Dateiname ist ung\u00FCltig, bitte entfernen Sie alle Pfadinformationen\! diff --git a/src/main/java/org/olat/core/commons/modules/bc/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/core/commons/modules/bc/_i18n/LocalStrings_pl.properties index b721f520697e93e1c029e28bf9da7b06e4c1c440..d1605be768486f9c9d6705693772e563bf13b900 100644 --- a/src/main/java/org/olat/core/commons/modules/bc/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/core/commons/modules/bc/_i18n/LocalStrings_pl.properties @@ -48,7 +48,7 @@ chelp.buddy=<i>$org.olat.group.ui\:LearningGroup</i> chelp.couFol=<b>coursefolders</b>\: chelp.groFol=<b>groupfolders</b>\: chelp.home=<b>home</b>\: -chelp.homeP=<i>$org.olat.home\:menu.root</i> +chelp.homeP=<i>$org.olat.home\:main.menu.title</i> chelp.how=Jak mog\u0119 u\u017Cywa\u0107 WebDAV? chelp.how1=Microsoft Windows XP i Mac OS X na og\u00F3\u0142 wspieraj\u0105 WebDAV. chelp.how10=Wszystkie kursy, do kt\u00F3rych folder\u00F3w masz dost\u0119p. Dotyczy autor\u00F3w. @@ -129,9 +129,9 @@ resize_image=Optymalizuj rozmiar obraz\u00F3w dla sieci Web (1280 x 1280) searchfile=Znajd\u017A success=Operacja powiod\u0142a si\u0119 text.element.error.notlongerthan=Nazwy plik\u00F3w i folder\u00F3w nie mog\u0105 przekracza\u0107 20 znak\u00F3w -ul=Przeka\u017C plik +ul=Za\u0142aduj plik ul.file=Plik -ul.header=Przekazywanie pliku +ul.header=Za\u0142adowanie pliku ul.lockedFile.text=Plik {0} ju\u017C istnieje i zosta\u0142 zablokowany. Czy chcesz przes\u0142a\u0107 go jako "{1}"? Mo\u017Cesz r\u00F3wnie\u017C anulowa\u0107 operacj\u0119? ul.lockedFile.title=Plik zablokowany ul.overwrite=Plik o nazwie {0} ju\u017C istnieje. Chcesz go nadpisa\u0107? diff --git a/src/main/java/org/olat/core/commons/modules/bc/commands/CmdServeResource.java b/src/main/java/org/olat/core/commons/modules/bc/commands/CmdServeResource.java index 2e9582644cd71cc1a9b249255fc2c1c8a201fa40..b31ea23a67c3aff7d746998fdea0a9f2f14fac9b 100644 --- a/src/main/java/org/olat/core/commons/modules/bc/commands/CmdServeResource.java +++ b/src/main/java/org/olat/core/commons/modules/bc/commands/CmdServeResource.java @@ -125,10 +125,14 @@ public class CmdServeResource implements FolderCommand { // that loads the .js file if (g_encoding != null) vmr.setEncoding(g_encoding); mr = vmr; - } else { - // binary data: not .html, not .htm, not .js -> treated as is + } else if (path.endsWith(".txt")) { + //text files created in OpenOLAT are utf-8, prefer this encoding VFSMediaResource vmr = new VFSMediaResource(vfsfile); + vmr.setEncoding("utf-8"); mr = vmr; + } else { + // binary data: not .html, not .htm, not .js -> treated as is + mr = new VFSMediaResource(vfsfile); } } diff --git a/src/main/java/org/olat/core/commons/modules/bc/commands/CmdUnzip.java b/src/main/java/org/olat/core/commons/modules/bc/commands/CmdUnzip.java index e23c0469606dc9a7dd2f85a11eb6ea1c44f67efb..130b0087eddf41e35c005d983f1aca8dc6d9ed86 100644 --- a/src/main/java/org/olat/core/commons/modules/bc/commands/CmdUnzip.java +++ b/src/main/java/org/olat/core/commons/modules/bc/commands/CmdUnzip.java @@ -83,8 +83,13 @@ public class CmdUnzip extends BasicController implements FolderCommand { for (String sItem:selection.getFiles()) { VFSItem vfsItem = currentContainer.resolve(sItem); if (vfsItem instanceof VFSLeaf) { - boolean isAdmin = ureq.getUserSession().getRoles().isOLATAdmin(); - lockedFiles.addAll(checkLockedFiles((VFSLeaf)vfsItem, currentContainer, ureq.getIdentity(), isAdmin)); + try { + boolean isAdmin = ureq.getUserSession().getRoles().isOLATAdmin(); + lockedFiles.addAll(checkLockedFiles((VFSLeaf)vfsItem, currentContainer, ureq.getIdentity(), isAdmin)); + } catch (Exception e) { + String name = vfsItem == null ? "NULL" : vfsItem.getName(); + getWindowControl().setError(translator.translate("FileUnzipFailed", new String[]{name})); + } } } diff --git a/src/main/java/org/olat/core/commons/persistence/_spring/databaseCorecontext.xml b/src/main/java/org/olat/core/commons/persistence/_spring/databaseCorecontext.xml index a4973f47565d9d1557d2d41451fc2f145d5d0555..aa07ec297dde54bf514a837f9f16cbf913807e6f 100644 --- a/src/main/java/org/olat/core/commons/persistence/_spring/databaseCorecontext.xml +++ b/src/main/java/org/olat/core/commons/persistence/_spring/databaseCorecontext.xml @@ -123,7 +123,7 @@ <bean id="hibernateProps" class="org.olat.core.commons.persistence.DBVendorHibernatePropertiesSimplification"> <constructor-arg> - <props> + <props> <prop key="hibernate.show_sql">${db.show_sql}</prop> <prop key="hibernate.generate_statistics">true</prop> <!-- <entry key="hibernate.query.substitutions">true 1, false 0, yes 'Y', no 'N'</value></entry> --> diff --git a/src/main/java/org/olat/core/commons/portlets/didYouKnow/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/core/commons/portlets/didYouKnow/_i18n/LocalStrings_pl.properties index e8f977120fa1a2ea73268d8b69223328b16e77c6..4f6b8bd622ae6e3572d7ee6105c2625ff3eec8b3 100644 --- a/src/main/java/org/olat/core/commons/portlets/didYouKnow/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/core/commons/portlets/didYouKnow/_i18n/LocalStrings_pl.properties @@ -28,6 +28,6 @@ Q-7=... mo\u017Cesz ogl\u0105da\u0107 wizyt\u00F3wki innych u\u017Cytkownik\u00F Q-8=... je\u015Bli zechcesz, mo\u017Cesz udost\u0119pni\u0107 innym swoje dokumenty? Q-9=... nie powiniene\u015B u\u017Cywa\u0107 przycisk\u00F3w "Wstecz" i "Od\u015Bwie\u017C" w swojej przegl\u0105darce? didYouKnow.description=Przydatne informacje -didYouKnow.title=Czy wiesz \u017Ce...? +didYouKnow.title=Czy wiesz, \u017Ce...? next=Nast\u0119pny... not.found=Nie znaleziono pyta\u0144, ani odpowiedzi diff --git a/src/main/java/org/olat/core/commons/services/mark/impl/ui/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/core/commons/services/mark/impl/ui/_i18n/LocalStrings_it.properties index bd6f5006b15ed3e29426e4070b89db2e22abb1f2..64cfb96586f64389883e7f8b0323931a20742082 100644 --- a/src/main/java/org/olat/core/commons/services/mark/impl/ui/_i18n/LocalStrings_it.properties +++ b/src/main/java/org/olat/core/commons/services/mark/impl/ui/_i18n/LocalStrings_it.properties @@ -1,4 +1,6 @@ -#Sun Aug 15 10:39:27 CEST 2010 +#Mon Oct 29 20:12:38 CET 2012 mark=Marcare mark.no_stat=Nessun altro utente ha marcato questa risorsa mark.stat={0} altri utenti hanno gi\u00E0 marcato questa risorsa +mark.stat.self=Lei e $\:mark.stat +mark.stat.self.only=Solo lei ha contrassegnato questa risorsa finora. diff --git a/src/main/java/org/olat/core/dispatcher/mapper/manager/MapperServiceImpl.java b/src/main/java/org/olat/core/dispatcher/mapper/manager/MapperServiceImpl.java index fa80c1b935809c40f10fc9c9835fc405e77d0bae..1de2c879587b56b3075589dd5e235f027e28968c 100644 --- a/src/main/java/org/olat/core/dispatcher/mapper/manager/MapperServiceImpl.java +++ b/src/main/java/org/olat/core/dispatcher/mapper/manager/MapperServiceImpl.java @@ -97,7 +97,7 @@ public class MapperServiceImpl implements MapperService { mapperIdToMapper.put(mapid, mapper); mapperToMapperId.put(mapper, mapid); if(session.getSessionInfo() == null) { - return mapid; + return WebappHelper.getServletContextPath() + DispatcherAction.PATH_MAPPED + mapid; } String sessionId = session.getSessionInfo().getSession().getId(); diff --git a/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListRenderer.java b/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListRenderer.java index b286cb5184f78797875322a520eacced8ab8d5e7..7137ff237ee5ff7a3241e076408095ad87a9ae9d 100644 --- a/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListRenderer.java +++ b/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListRenderer.java @@ -196,15 +196,15 @@ public class TextBoxListRenderer implements ComponentRenderer { // but only in flexiform String o_ffEvent = FormJSHelper.getJSFnCallFor(rootForm, dispatchId, 2); output.append("onEmptyInput: function(input){").append(lineBreak); - output.append("console.log('onEmptyInput');").append(lineBreak); + //output.append("console.log('onEmptyInput');").append(lineBreak); output.append(o_ffEvent).append("; } , ").append(lineBreak); output.append("onUserAdd: function(input){").append(lineBreak); - output.append("console.log('onUserAdd');").append(lineBreak); + //output.append("console.log('onUserAdd');").append(lineBreak); output.append(o_ffEvent).append("; } , ").append(lineBreak); output.append("onUserRemove: function(input){").append(lineBreak); - output.append("console.log('onUserRemove');").append(lineBreak); + //output.append("console.log('onUserRemove');").append(lineBreak); output.append(o_ffEvent).append("; } , ").append(lineBreak); } output.append("regexSearch: false });").append(lineBreak); diff --git a/src/main/java/org/olat/core/gui/control/ConfigurationChangedListener.java b/src/main/java/org/olat/core/gui/control/ConfigurationChangedListener.java new file mode 100644 index 0000000000000000000000000000000000000000..afd530130c88f1df2eecebd1d2410ca08de425ad --- /dev/null +++ b/src/main/java/org/olat/core/gui/control/ConfigurationChangedListener.java @@ -0,0 +1,34 @@ +/** + * <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.core.gui.control; + +/** + * Simple interface to propagate the news "configuration has changed" + * through wrappers and controllers. + * + * + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public interface ConfigurationChangedListener { + + public void configurationChanged(); + +} diff --git a/src/main/java/org/olat/core/gui/control/floatingresizabledialog/FloatingResizableDialogController.java b/src/main/java/org/olat/core/gui/control/floatingresizabledialog/FloatingResizableDialogController.java index 9b6694eb313d02e80ca2e903f9c708cfb99ea145..52b655ede0238c6aabd2bb89ee9c6988f0f994df 100644 --- a/src/main/java/org/olat/core/gui/control/floatingresizabledialog/FloatingResizableDialogController.java +++ b/src/main/java/org/olat/core/gui/control/floatingresizabledialog/FloatingResizableDialogController.java @@ -36,6 +36,7 @@ import org.olat.core.gui.components.velocity.VelocityContainer; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; +import org.olat.core.gui.control.winmgr.JSCommand; import org.olat.core.util.ConsumableBoolean; /** @@ -196,4 +197,19 @@ public class FloatingResizableDialogController extends BasicController { public String getPanelName() { return panelName; } + + public JSCommand getCloseCommand () { + String w = getPanelName(); + StringBuilder sb = new StringBuilder(); + sb.append("try{"); + sb.append("Ext.getCmp('").append(w).append("').purgeListeners();"); + sb.append("Ext.getCmp('").append(w).append("').close();"); + sb.append("Ext.getCmp('").append(w).append("').distroy();"); + sb.append("}catch(e){}"); + return new JSCommand(sb.toString()); + } + + public void executeCloseCommand() { + getWindowControl().getWindowBackOffice().sendCommandTo(getCloseCommand()); + } } diff --git a/src/main/java/org/olat/core/gui/control/floatingresizabledialog/_content/index.html b/src/main/java/org/olat/core/gui/control/floatingresizabledialog/_content/index.html index 546a34f7296c90f1eae92aa105b9e2bf2aa136b2..afba2b30296779399c282c604e7f52174d4f1eb6 100644 --- a/src/main/java/org/olat/core/gui/control/floatingresizabledialog/_content/index.html +++ b/src/main/java/org/olat/core/gui/control/floatingresizabledialog/_content/index.html @@ -64,7 +64,7 @@ id: '${panelName}', title: '$title', closable:true, - collapsible:false, + collapsible:true, constrain: ${constrain}, resizable: ${resizable}, width: winWidth, @@ -88,7 +88,8 @@ win.purgeListeners(); win.close(); win.destroy(); - if (!o_info.linkbusy) { + if (!o_info.linkbusy) { + window.suppressOlatOnUnloadOnce = true; o_beforeserver(); $r.javaScriptBgCommand("close") } @@ -97,6 +98,7 @@ ${panelName}.on('resize', function(win, width, height){ #if ($ajaxFlags.isIframePostEnabled()) if (!o_info.linkbusy) { + window.suppressOlatOnUnloadOnce = true; o_beforeserver(); $r.javaScriptBgCommand("geometry") + '?p='+ encodeURIComponent(win.getPosition()+':'+win.getSize().width+','+win.getSize().height); } @@ -112,7 +114,8 @@ ${panelName}.on('move', function(win, x, y){ #if ($ajaxFlags.isIframePostEnabled()) - if (!o_info.linkbusy) { + if (!o_info.linkbusy) { + window.suppressOlatOnUnloadOnce = true; o_beforeserver(); $r.javaScriptBgCommand("geometry") + '?p='+ encodeURIComponent(win.getPosition()+':'+win.getSize().width+','+win.getSize().height); } diff --git a/src/main/java/org/olat/core/gui/control/generic/ajax/autocompletion/_content/autocomplete.html b/src/main/java/org/olat/core/gui/control/generic/ajax/autocompletion/_content/autocomplete.html index 5bd0dde4f724c383ea9714bf9952003b5ad28682..2687288ed58ee926d33acd64d99f9a4d2eda5d2e 100644 --- a/src/main/java/org/olat/core/gui/control/generic/ajax/autocompletion/_content/autocomplete.html +++ b/src/main/java/org/olat/core/gui/control/generic/ajax/autocompletion/_content/autocomplete.html @@ -37,7 +37,7 @@ Ext.onReady(function(){ oldCombo = null; } - console.log('Hello'); + ##console.log('Hello'); ## Data store gets key value pairs from server var dataStore = new Ext.data.Store({ @@ -89,9 +89,9 @@ Ext.onReady(function(){ ## by the form submit and the combo box result list is showed delayed. In this case ## don't expand comboBox.on('expand', function(combo) { - console.log('Expand'); + ##console.log('Expand'); var elem=document.getElementById('${r.getId("aj_ac_f")}'); - console.log('Expand', elem); + ##console.log('Expand', elem); if (!elem) combo.collapse(); elem = null; } diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_static/js/iframe.js b/src/main/java/org/olat/core/gui/control/generic/iframe/_static/js/iframe.js index e17ff96424011d8b95abb4999983670b0e71805a..0a3c98f32145db98a4aaba3e998fb0f7afdc0605 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/_static/js/iframe.js +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_static/js/iframe.js @@ -123,7 +123,7 @@ function b_sizeIframe() { // page loaded loaded=true; } catch(e) { - console.log(e); + //console.log(e); } } @@ -156,7 +156,7 @@ function b_hideExtMessageBox(){ } counter++; } catch (e) { - console.log(e); + //console.log(e); clearInterval(activ); } } ,50); @@ -313,7 +313,7 @@ function b_addOnclickEvent(myFnc) { window.click = fnc; } } catch(e) { - console.log(e); + //console.log(e); } } diff --git a/src/main/java/org/olat/core/gui/control/generic/title/TitledWrapperController.java b/src/main/java/org/olat/core/gui/control/generic/title/TitledWrapperController.java index c666340510cb097b48620bf58db8335c323d0f52..2d1e5d0c25eb03271dad20d3435d50bf17d77497 100644 --- a/src/main/java/org/olat/core/gui/control/generic/title/TitledWrapperController.java +++ b/src/main/java/org/olat/core/gui/control/generic/title/TitledWrapperController.java @@ -31,6 +31,7 @@ import java.util.List; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.velocity.VelocityContainer; +import org.olat.core.gui.control.ConfigurationChangedListener; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; @@ -53,7 +54,7 @@ import org.olat.core.util.StringHelper; * Initial Date: 21.06.2007 <br> * @author Lavinia Dumitrescu, Florian Gnägi */ -public class TitledWrapperController extends BasicController implements CloneableController, Activateable2 { +public class TitledWrapperController extends BasicController implements CloneableController, Activateable2, ConfigurationChangedListener { private static final String COMPONENT_NAME = "child"; //Velocity variable @@ -130,7 +131,14 @@ public class TitledWrapperController extends BasicController implements Cloneabl putInitialPanel(theVelocityContainer); } - + + @Override + public void configurationChanged() { + if(contentController instanceof ConfigurationChangedListener) { + ((ConfigurationChangedListener)contentController).configurationChanged(); + } + } + protected void doDispose() { if (descriptionController != null) { descriptionController.dispose(); diff --git a/src/main/java/org/olat/core/logging/JavaScriptTracingController.java b/src/main/java/org/olat/core/logging/JavaScriptTracingController.java index 6b9dc7490ed0a38b4773f9cc3ef7fa9238bf9b90..61f9b56adffa2951f99fbc95cac619aa3c4a031c 100644 --- a/src/main/java/org/olat/core/logging/JavaScriptTracingController.java +++ b/src/main/java/org/olat/core/logging/JavaScriptTracingController.java @@ -107,7 +107,7 @@ public class JavaScriptTracingController extends BasicController { String jsFile = request.getParameter("jsFile"); // currently only debug level is supported but in the future... String level = request.getParameter("level"); - if (level.equals("debug")) { + if (level != null && level.equals("debug") && logMsg != null) { // log to standard OLAT logging system logDebug(logMsg, jsFile); } diff --git a/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_pl.properties index 82d0d94497b007ab24b0a6bbcecc558661e6e1c0..10c610be116af7559ac3650bcbdd5b2fda26f43c 100644 --- a/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_pl.properties @@ -12,24 +12,24 @@ contact.cp.from=Kopia wys\u0142ana do nadawcy footer.no.userdata=\n\n--- \n Wiadomo\u015B\u0107 zosta\u0142a automatycznie wys\u0142ana z systemu OpenOLAT\n{0} footer.with.userdata=\n\n--- \n{2} {3} ({0})\n{4}\n\n Wiadomo\u015B\u0107 zosta\u0142a wys\u0142ana z systemu OpenOLAT\n{1} help.hover.mail-templ=Pomoc dla szablonu u\u017Cycia poczty -mail.empty.box=Skrzynka odbiorcza nie zawiera \u017Cadnych wiadomo\u015Bci. +mail.empty.box=Skrzynka nie zawiera e-maili. mail.from=Nadawca -mail.from.miscellaneous=R\u00F3\u017Cne +mail.from.miscellaneous=R\u00F3\u017Cni mail.inbox=Skrzynka odbiorcza mail.inbox.alt=Skrzynka odbiorcza mail.inbox.title=Skrzynka odbiorcza -mail.marked=Oznaczony +mail.marked=Oznaczone mail.notification.type=E-maile mail.outbox=Skrzynka nadawcza mail.outbox.alt=Skrzynka nadawcza -mail.outbox.meta=Te e-maile zosta\u0142y wys\u0142ane jako masowe. +mail.outbox.meta=te e-maile zosta\u0142y wys\u0142ane jako zbiorcze mail.outbox.title=Skrzynka nadawcza -mail.read=Czytaj -mail.receivedDate=Otrzymano -mail.recipients=Adresat +mail.read=Przeczytane +mail.receivedDate=Odebrano +mail.recipients=Odbiorca mail.sendDate=Wys\u0142ano mail.subject=Temat -mail.unmarked=Niezaznaczone +mail.unmarked=Nieoznaczone mail.unread=Nieprzeczytane mailhelper.error.attachment=Wiadomo\u015B\u0107 nie mog\u0142a zosta\u0107 wys\u0142ana\: nieprawid\u0142owy za\u0142\u0105cznik. Powiadom adresat\u00F3w tej wiadomo\u015Bci w inny spos\u00F3b... mailhelper.error.failedusers=Wiadomo\u015B\u0107 nie mog\u0142a zosta\u0107 wys\u0142ana do nast\u0119puj\u0105cych os\u00F3b. Powiadom adresat\u00F3w tej wiadomo\u015Bci w inny spos\u00F3b... diff --git a/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_pt_BR.properties index 8e3f458ee349ce913267a575c776d1d0e9c1c352..2c6cead00eeda6c80a80d3daf3e7949633581db5 100644 --- a/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/core/util/mail/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Tue Apr 03 15:50:40 CEST 2012 +#Wed Nov 07 21:32:59 CET 2012 chelp.mail-admin.title=$\:mail.admin.title chelp.mail-templ.title=$\:mailnotification.title chelp.mail.module=OLAT tem um sistema de caixa de entrada e-mail interno que lista todos os e-mails enviados e recebidos de cada usu\u00E1rio em seu HOME. A caixa de entrada de E-mail OLAT \u00E9 um componente opcional. diff --git a/src/main/java/org/olat/core/util/notifications/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/core/util/notifications/_i18n/LocalStrings_pl.properties index d12f2b390ea9ef9dd28fd192dd950703dad48a60..fbe7d587f404ab3d03eb38bbd6fec53380b9819d 100644 --- a/src/main/java/org/olat/core/util/notifications/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/core/util/notifications/_i18n/LocalStrings_pl.properties @@ -1,7 +1,7 @@ #Fri Dec 17 17:13:24 CET 2010 actions.title=Modyfikacje chelp.del=<i>$org.olat.notifications\:subs.deleted</i> -chelp.home=<i>$org.olat.home\:menu.root</i> +chelp.home=<i>$org.olat.home\:main.menu.title</i> chelp.home-notifications.title=Pomoc odno\u015Bnie powiadomie\u0144 chelp.notif=<i>$org.olat.home\:menu.notifications</i> chelp.notif1=OLAT mo\u017Ce pomaga\u0107 ci w uzyskiwaniu informacji o modyfikacjach na forach i w folderach. @@ -15,8 +15,8 @@ chelp.notif2=W celu uzyskania tych informacji musisz okre\u015Bli\u0107 fora i f chelp.notif3=Musisz wyrba\u0107 $\:chelp.subs w odpowiednich forach i folderach. chelp.notif4=Raz dziennie otrzymasz informacje o powiadomieniach poprzez e-mail. chelp.notif5=Mo\u017Cesz uzyska\u0107 informacje o modyfikacjach poprzez $\:chelp.rss (link lub $\:chelp.home). -chelp.notif6=Na stronie z informacjami og\u00F3lnym zobaczysz tylko nowo\u015Bci. -chelp.notif7=Przy pomocy $\:chelp.home -> $\:chelp.notif uzyskasz list\u0119 wszystkich subskrybowanych for i folder\u00F3w. +chelp.notif6=Na stronie g\u0142\u00F3wnej zobaczysz tylko nowo\u015Bci. +chelp.notif7=Po wybraniu "Powiadomienia" uzyskasz list\u0119 wszystkich subskrybowanych for i folder\u00F3w. chelp.notif8=Ponadto, otrzymasz nast\u0119puj\u0105ce informacje\: chelp.notif9=Wpis $\:chelp.ok poajwi si\u0119, je\u015Bli masz dost\u0119p do odpowiedniego fora lub folderu i czy nadal jest to aktualne (warunki dost\u0119pu mog\u0142y si\u0119 zmieni\u0107 w mi\u0119dzyczasie). chelp.ok=<i>$org.olat.notifications\:subs.ok</i> diff --git a/src/main/java/org/olat/course/area/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/area/_i18n/LocalStrings_en.properties index 4861909729abf9ddb28e8e0a00e8ddc7b1b6dd1e..0e6fe75da3b7e1fee9edfd9fcfb845ca04790bdf 100644 --- a/src/main/java/org/olat/course/area/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/course/area/_i18n/LocalStrings_en.properties @@ -1,12 +1,12 @@ #Wed Oct 24 16:32:07 CEST 2012 action=Action -course.areas.description=Create a new learning area with the button below. You can then use the learning area in the course editor to limit course element across and assign groups to learning areas. +course.areas.description=Create a new learning area with the button below. You can then use the learning area in the course editor to limit course element access and assign groups to learning areas. course.areas.title=Learning areas within course create.area=Create learning area delete=Delete delete.area.description=Do you really want to delete the learning area "{0}"? delete.area.title=Delete learning area edit=Edit -resources.noresources=No learning areas have been created in this course so far. +resources.noresources=There are no learning areas available for this course yet. table.header.description=Description table.header.name=Name diff --git a/src/main/java/org/olat/course/area/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/area/_i18n/LocalStrings_pt_BR.properties new file mode 100644 index 0000000000000000000000000000000000000000..7c585de8e07cd554391ce6324095cb43e3edf34d --- /dev/null +++ b/src/main/java/org/olat/course/area/_i18n/LocalStrings_pt_BR.properties @@ -0,0 +1,12 @@ +#Tue Nov 06 15:49:20 CET 2012 +action=A\u00E7\u00E3o +course.areas.description=Crie uma nova \u00E1rea de aprendizagem com o bot\u00E3o abaixo. Voc\u00EA pode ent\u00E3o usar a \u00E1rea de aprendizagem no editor de curso para limitar elementos de curso e atribuir grupos \u00E0 \u00E1reas de aprendizagem. +course.areas.title=\u00C1reas de aprendizagem dentro do curso +create.area=Criar \u00E1rea de aprendizagem +delete=Excluir +delete.area.description=Voc\u00EA realmente deseja apagar a \u00E1rea de aprendizagem "{0}"? +delete.area.title=Excluir \u00E1rea de aprendizagem +edit=Editar +resources.noresources=Nenhuma \u00E1rea de aprendizagem foi criada neste curso at\u00E9 agora. +table.header.description=Descri\u00E7\u00E3o +table.header.name=Nome diff --git a/src/main/java/org/olat/course/assessment/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/assessment/_i18n/LocalStrings_pl.properties index 39b40d7dde54f5077064f736aae0fa7432565490..8f13e26ce6c76b90aaf434cd6582ca40ef8910cc 100644 --- a/src/main/java/org/olat/course/assessment/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/course/assessment/_i18n/LocalStrings_pl.properties @@ -93,7 +93,7 @@ institutionalemail=E-mail instytucji\: institutionalname=Instytucja\: institutionaluseridentifier=Identyfikator instytucji\: lastname=Nazwisko\: -log.title=Log modyfikacji +log.title=Rejestr zmian menu.bulkfocus=Masowe ocenianie menu.bulkfocus.alt=Masowe ocenianie element\u00F3w kursu i zada\u0144 menu.groupfocus=Dla grup diff --git a/src/main/java/org/olat/course/assessment/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/assessment/_i18n/LocalStrings_pt_BR.properties index 2a5990e073538075450069eac6dc5b0f35706801..4572f49f1839c5fe6ab785100fe77a2bfe48ef52 100644 --- a/src/main/java/org/olat/course/assessment/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/assessment/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Mon Apr 02 23:33:29 CEST 2012 +#Wed Nov 07 18:20:57 CET 2012 action.choose=Selecionar artefact.title=Comprovantes de conclus\u00E3o para curso {0} assessmentLock=Esta avalia\u00E7\u00E3o est\u00E1 sendo modificada pelo usu\u00E1rio {0} ({1}) e est\u00E1 bloqueada. Favor tentar novamente mais tarde. @@ -41,6 +41,7 @@ course=Curso\: course.link=Abrir curso date=Data\: detailview.title=Visualizar detalhes da avalia\u00E7\u00E3o +efficiencyStatements.cannot.delete=Voc\u00EA n\u00E3o pode excluir o comprovante de realiza\u00E7\u00E3o de um curso existente. efficiencyStatements.course.noaccess=Este curso foi bloqueado, voc\u00EA n\u00E3o tem mais acesso. efficiencyStatements.course.noexists=Este curso foi apagado, voc\u00EA n\u00E3o tem mais acesso. efficiencyStatements.delete.confirm=Voc\u00EA realmente quer apagar o comprovante de conclus\u00E3o do curso <i>{0}</i>? @@ -48,7 +49,17 @@ efficiencyStatementsPortlet.description=Acesso r\u00E1pido para as seus comprova efficiencyStatementsPortlet.nostatements=N\u00E3o h\u00E1 nenhum comprovante de conclus\u00E3o dispon\u00EDvel para voc\u00EA efficiencyStatementsPortlet.showAll=Exibir tudo efficiencyStatementsPortlet.title=Meus comprovantes de conclus\u00E3o +efficiencystatement.config=Mudar configura\u00E7\u00E3o +efficiencystatement.config.off=Desativado +efficiencystatement.config.on=Ativado +efficiencystatement.intro.1=Cursos com elementos de avalia\u00E7\u00E3o (pontua\u00E7\u00E3o / aprova\u00E7\u00E3o) ir\u00E3o gerar um comprovante de conclus\u00E3o para cada usu\u00E1rio. Esse comprovante \u00E9 atualizado automaticamente sempre houver altera\u00E7\u00F5es de dados de avalia\u00E7\u00E3o, seja manualmente por um treinador/coach ou por uma execu\u00E7\u00E3o do teste. O comprovante pode ser acessado pelo usu\u00E1rio na caixa de ferramentas do curso ou na \u00E1rea pessoal (Home) do usu\u00E1rio. +efficiencystatement.intro.2=O recurso de comprovante de conclus\u00E3o pode ser habilitado / desabilitado na configura\u00E7\u00E3o do curso conforme desejado. Neste momento, a gera\u00E7\u00E3o do comprovante est\u00E1 <strong>{0}</ strong>. +efficiencystatement.intro.3=Ao alterar as regras de avalia\u00E7\u00E3o ou adicionar avalia\u00E7\u00F5es \u200B\u200Bem um curso que j\u00E1 estiver sendo utilizado por alunos, os comprovantes de conclus\u00E3o devem ser recalculados. +efficiencystatement.intro.4=Selecione o bot\u00E3o abaixo para recalcular os comprovantes de conclus\u00E3o para este curso agora. Esta a\u00E7\u00E3o pode demorar um pouco. efficiencystatement.nodata=N\u00E3o h\u00E1 nenhum resultado de avalia\u00E7\u00E3o para ser exibido +efficiencystatement.recalculate=Recalcular comprovantes de conclus\u00E3o +efficiencystatement.recalculate.finished=Os comprovantes de conclus\u00E3o foram recalculados. +efficiencystatement.recalculate.warning=Com esta sele\u00E7\u00E3o, os comprovantes de conclus\u00E3o ser\u00E3o recalculados. Isso pode demorar um pouco. Voc\u00EA quer proceder agora? efficiencystatement.title=Comprovante de conclus\u00E3o email=E-mail\: finished=Fechar @@ -102,6 +113,8 @@ lastname=\u00DAltimo nome\: log.title=Hist\u00F3rico de ocorr\u00EAncias menu.bulkfocus=Avalia\u00E7\u00E3o em massa menu.bulkfocus.alt=Avalia\u00E7\u00E3o em massa de elementos de curso referentes a avalia\u00E7\u00F5es e tarefas. +menu.efficiency.statment=Comprovantes de conclus\u00E3o +menu.efficiency.statment.alt=$\:menu.efficiency.statment menu.groupfocus=Por grupos menu.groupfocus.alt=Selecionar um grupo para obter an\u00E1lise das avalia\u00E7\u00F5es de seus participantes. menu.index=Avalia\u00E7\u00E3o diff --git a/src/main/java/org/olat/course/condition/Condition.java b/src/main/java/org/olat/course/condition/Condition.java index 6808de4dd7b6e3c557d4ab9b45a878d82a9a0a9f..30f0c3f511ccdee9d801df67b2c8bfd3bb5ac644 100644 --- a/src/main/java/org/olat/course/condition/Condition.java +++ b/src/main/java/org/olat/course/condition/Condition.java @@ -38,7 +38,6 @@ import org.olat.core.util.StringHelper; public class Condition implements Serializable, Cloneable { transient private String conditionId = null; private String condition = null; - private String conditionUpgraded = null; private boolean expertMode = false; private String easyModeBeginDate; @@ -95,11 +94,11 @@ public class Condition implements Serializable, Cloneable { } public String getConditionUpgraded() { - return conditionUpgraded; + return null; } public void setConditionUpgraded(String conditionUpgraded) { - this.conditionUpgraded = conditionUpgraded; + //only for compatibility reason, don't delete these methods } /** diff --git a/src/main/java/org/olat/course/condition/interpreter/ConditionInterpreter.java b/src/main/java/org/olat/course/condition/interpreter/ConditionInterpreter.java index 320750a2e6d15ab9d017e9863bba98a80907b84c..69fb769a1fbea6cd7a08121fb49235a1d5d47eea 100644 --- a/src/main/java/org/olat/course/condition/interpreter/ConditionInterpreter.java +++ b/src/main/java/org/olat/course/condition/interpreter/ConditionInterpreter.java @@ -272,9 +272,7 @@ public class ConditionInterpreter { * @return True if evaluation successfull. */ public boolean evaluateCondition(Condition c) { - if(c.isExpertMode() && StringHelper.containsNonWhitespace(c.getConditionUpgraded())) { - return evaluateCondition(c.getConditionUpgraded()); - } else if (!c.isExpertMode() && (c.getAttributeConditions() == null || c.getAttributeConditions().isEmpty())) { + if (!c.isExpertMode() && (c.getAttributeConditions() == null || c.getAttributeConditions().isEmpty())) { //experimental optimized evaluation of the easy conditions //return evaluateEasyCondition(c); } diff --git a/src/main/java/org/olat/course/config/ui/courselayout/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/config/ui/courselayout/_i18n/LocalStrings_pl.properties new file mode 100644 index 0000000000000000000000000000000000000000..4abb751c9ad7ea5fc7f00937d500a5d8f9a05f2d --- /dev/null +++ b/src/main/java/org/olat/course/config/ui/courselayout/_i18n/LocalStrings_pl.properties @@ -0,0 +1,10 @@ +course.layout.custom=Dostosuj... +course.layout.default=Domy\u015Blny +course.layout.legacy=z foderu kursu {0} +course.layout.predefined=Szablon kursu +course.layout.save=Zapisz +course.layout.selector=Wybierz wygl\u0105d dla tego kursu +course.layout.template=Szablon systemowy {0} +logo.image.label=Logo w nag\u0142\u00F3wku +tab.layout.title=Ustawienia +upload.second.logo=Za\u0142aduj logo diff --git a/src/main/java/org/olat/course/config/ui/courselayout/attribs/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/config/ui/courselayout/attribs/_i18n/LocalStrings_pl.properties new file mode 100644 index 0000000000000000000000000000000000000000..9e8823b9ceb20e519b00cce4336239a5175b1879 --- /dev/null +++ b/src/main/java/org/olat/course/config/ui/courselayout/attribs/_i18n/LocalStrings_pl.properties @@ -0,0 +1,6 @@ +attribute.title.backgroundColor=Kolor t\u0142a +attribute.title.color=Kolor +attribute.title.font=Czcionka +attribute.title.preview=Podgl\u0105d +attribute.title.size=Rozmiar czcionki +preview.sample=Prosty podgl\u0105d tekstu diff --git a/src/main/java/org/olat/course/config/ui/courselayout/elements/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/config/ui/courselayout/elements/_i18n/LocalStrings_pl.properties new file mode 100644 index 0000000000000000000000000000000000000000..02defaeac3cc4e0f0b4cccffb3119136ef92f0f3 --- /dev/null +++ b/src/main/java/org/olat/course/config/ui/courselayout/elements/_i18n/LocalStrings_pl.properties @@ -0,0 +1,5 @@ +element.title.header=Nag\u0142\u00F3wki +element.title.link=Linki +element.title.menu=Menu +element.title.text=Tekst +element.title.toolbox=Narz\u0119dzia diff --git a/src/main/java/org/olat/course/db/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/db/_i18n/LocalStrings_pl.properties new file mode 100644 index 0000000000000000000000000000000000000000..f704b78e6b7aa85a8c4ec857652f01dcb17f9fb2 --- /dev/null +++ b/src/main/java/org/olat/course/db/_i18n/LocalStrings_pl.properties @@ -0,0 +1,2 @@ +command.closedb=Zamknij +command.new_db=Utw\u00F3rz now\u0105 baz\u0119 diff --git a/src/main/java/org/olat/course/db/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/db/_i18n/LocalStrings_pt_BR.properties new file mode 100644 index 0000000000000000000000000000000000000000..a2ab9954a54397c73c88c4be0af4fab17f12edb1 --- /dev/null +++ b/src/main/java/org/olat/course/db/_i18n/LocalStrings_pt_BR.properties @@ -0,0 +1,13 @@ +#Wed Nov 07 18:22:23 CET 2012 +command.new_db=Criar novo banco de dados +customDb.category=Nome +customDb.create=Criar +customDb.custom_db=Banco de dados +customDb.entry.identity=Usu\u00E1rio +customDb.entry.name=Nome +customDb.entry.value=Valor +customDb.export=Exportar +customDb.reset=Resetar +customDb.url=URL +main.menu.title=Bancos de dados +main.menu.title.alt=Bancos de dados de cursos diff --git a/src/main/java/org/olat/course/editor/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/editor/_i18n/LocalStrings_en.properties index c6682f321e1c4f564c66b3cbcfa2d646d77e6388..68664835ad1d419356659c1756dc6e59a0fa8b8e 100644 --- a/src/main/java/org/olat/course/editor/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/course/editor/_i18n/LocalStrings_en.properties @@ -319,7 +319,7 @@ chelp.wordTrue=TRUE command.admin.header=Collecting function command.closeeditor=Close editor command.copynode=Copy -command.courseareas=learning areas +command.courseareas=Learning areas command.coursefolder=Storage folder command.coursepreview=Course preview command.deletenode=Delete diff --git a/src/main/java/org/olat/course/editor/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/editor/_i18n/LocalStrings_pl.properties index fcc4f360e97141338fcf6efcf8e92d45beb92964..369d3641d47387c7b7afb0ee5fffe2643c2fce71 100644 --- a/src/main/java/org/olat/course/editor/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/course/editor/_i18n/LocalStrings_pl.properties @@ -1,5 +1,5 @@ #Wed Jul 28 13:33:32 CEST 2010 -access.form.label=Access to the entire course have +access.form.label=Dost\u0119p do ca\u0142ego kursu maj\u0105 access.legend=Modyfikuj ustawienia dost\u0119pu do ca\u0142ego kursu apply=OK checkall=Zaznacz wszystko @@ -23,7 +23,7 @@ chelp.16vis=Mo\u017Cesz ograniczy\u0107 widoczno\u015B\u0107, wykorzystuj\u0105c chelp.2=Kr\u00F3tki tytu\u0142 pojawia si\u0119 w menu nawigacji oraz w obszarze zawarto\u015Bci, je\u015Bli wybrano. chelp.3=Mo\u017Cesz nada\u0107 elementowi kursu tytu\u0142 sk\u0142adaj\u0105cy si\u0119 z maksimum 255 znak\u00F3w. chelp.4=Tytu\u0142 pokazuje si\u0119 jako wskaz\u00F3wka w menu nawigacji i jako podtytu\u0142 w obszarze zawarto\u015Bci, je\u015Bli wybrano. -chelp.5=Mo\u017Cesz okre\u015Bli\u0107 element kursu przy u\u017Cyciu {0}. +chelp.5=Tu mo\u017Cesz zdefiniowa\u0107 element kursu. chelp.6=Je\u015Bli ten element kursu jest wybrany w bie\u017C\u0105cym kursie, jego opis pojawi si\u0119 w obszarze zawarto\u015Bci. chelp.7=Potrzebujesz <b>numeru ID</b> po prawej stronie powy\u017Cej w tym polu, aby m\u00F3c odnie\u015B\u0107 si\u0119 do tego elementu kursu z innego. chelp.8=Aby umie\u015Bci\u0107 odno\u015Bnik do tego elementu w innym kursie lub gdzie\u015B na zewn\u0105trz OLAT, wykorzystaj link zewn\u0119trzny jako atrybut href w kodzie HTML swojej strony. @@ -81,9 +81,9 @@ chelp.ced-dialog-acc-r.title=$\:chelp.titleAccDiR chelp.ced-dialog-acc-rw.title=$\:chelp.titleAccDiRw chelp.ced-expert-eg.title=Przyk\u0142ady u\u017Cycia sk\u0142adni eksperckiej chelp.ced-expert-expl.title=Konfiguracja trybie eksperckim -chelp.ced-fo-acc-mo.title=$\:chelp.titleAccFoMo -chelp.ced-fo-acc-r.title=$\:chelp.titleAccFoR -chelp.ced-fo-acc-rw.title=$\:chelp.titleAccFoRw +chelp.ced-fo-acc-mo.title=Forum\: prawo moderowania +chelp.ced-fo-acc-r.title=Forum\: prawo odczytu +chelp.ced-fo-acc-rw.title=Forum\: prawo zapisu chelp.ced-noAcc-expl.title=$\:chelp.titleNoAcc chelp.ced-ta-acc.title=$\:chelp.titleAccTa chelp.ced-vis.title=$\:chelp.titleVis diff --git a/src/main/java/org/olat/course/editor/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/editor/_i18n/LocalStrings_pt_BR.properties index 29e18c5d9df6ab00bdf3a58977aaa4bcdb91519e..a1b1360aa46efeb0b302702783d5c52d79af3b5c 100644 --- a/src/main/java/org/olat/course/editor/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/editor/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Mon Apr 02 23:45:56 CEST 2012 +#Wed Nov 07 18:23:02 CET 2012 access.form.label=Acesso ao curso inteiro tem access.legend=Modificar acesso ao curso inteiro apply=OK @@ -319,6 +319,7 @@ chelp.wordTrue=TRUE command.admin.header=Fun\u00E7\u00E3o de coleta command.closeeditor=Fechar editor command.copynode=Copiar +command.courseareas=\u00C1reas de aprendizagem command.coursefolder=Pasta de armazenamento command.coursepreview=Visualiza\u00E7\u00E3o? do curso command.deletenode=Apagar @@ -405,6 +406,8 @@ nodeConfigForm.learningobjectives=Descri\u00E7\u00E3o nodeConfigForm.menumust=Um t\u00EDtulo curto deve ser indicado nodeConfigForm.menutitle=T\u00EDtulo curto nodeConfigForm.save=Salvar +nodeConfigForm.short_title_content=T\u00EDtulo curto e conte\u00FAdo +nodeConfigForm.short_title_desc_content=T\u00EDtulo curto, descri\u00E7\u00E3o e conte\u00FAdo nodeConfigForm.title=Descri\u00E7\u00E3o de elemento de curso nodeConfigForm.title_content=T\u00EDtulo e conte\u00FAdo nodeConfigForm.title_desc_content=T\u00EDtulo, descri\u00E7\u00E3o e conte\u00FAdo diff --git a/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java b/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java index 0eaf64aa2bd5ec19f643b97375ebc95b8b7eb42a..34b19facfa8fef004564390624d66a0b0dc48ccc 100644 --- a/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java +++ b/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java @@ -259,6 +259,12 @@ public class PersistingCourseGroupManager extends BasicManager implements Course public void deleteCourseGroupmanagement() { //delete permission group to course businessGroupService.removeResource(courseResource); + //delete areas + List<BGArea> areas = getAllAreas(); + for(BGArea area:areas) { + areaManager.deleteBGArea(area); + } + logAudit("Deleting course groupmanagement for " + courseResource.toString()); } diff --git a/src/main/java/org/olat/course/groupsandrights/_chelp/grp-rights.html b/src/main/java/org/olat/course/groupsandrights/_chelp/grp-rights.html new file mode 100644 index 0000000000000000000000000000000000000000..9054c776e9f4b4af3abe175ba9e2e599e581f0cf --- /dev/null +++ b/src/main/java/org/olat/course/groupsandrights/_chelp/grp-rights.html @@ -0,0 +1,8 @@ +<p>$r.translate("chelp.intro")</p> +<p><b>$r.translate("bgr.groupmngt"):</b> $r.translate("chelp.groupmngt")</p> +<p><b>$r.translate("bgr.editor"):</b> $r.translate("chelp.editor")</p> +<p><b>$r.translate("bgr.archive"):</b> $r.translate("chelp.archive")</p> +<p><b>$r.translate("bgr.assess"):</b> $r.translate("chelp.assess")</p> +<p><b>$r.translate("bgr.glossary"):</b> $r.translate("chelp.glossary")</p> +<p><b>$r.translate("bgr.statistics"):</b> $r.translate("chelp.statistics")</p> + diff --git a/src/main/java/org/olat/course/groupsandrights/_content/right_list.html b/src/main/java/org/olat/course/groupsandrights/_content/right_list.html index 6d4f409d717622dc0498ca53ba622dc57dd424aa..099cb447805172273ff692471ffd27473eba0858 100644 --- a/src/main/java/org/olat/course/groupsandrights/_content/right_list.html +++ b/src/main/java/org/olat/course/groupsandrights/_content/right_list.html @@ -1,3 +1,5 @@ +$r.contextHelpWithWrapper("org.olat.course.groupsandrights","grp-rights.html","help.hover.courseGrpRights") + <h4 class="b_with_small_icon_left b_group_icon"> $r.translate("menu.rights") </h4> diff --git a/src/main/java/org/olat/course/groupsandrights/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/groupsandrights/_i18n/LocalStrings_de.properties index 85bcb1b3e46c8b9b0475d8cb07fa45128e8b31e1..cbae90dbb89eed481599522571b0db802dfe48d9 100644 --- a/src/main/java/org/olat/course/groupsandrights/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/course/groupsandrights/_i18n/LocalStrings_de.properties @@ -14,4 +14,13 @@ menu.rights=Rechte remove.all=Alle Rechte Entfernen add.all=Alle Rechte hinzufügen tutor=Betreuer -participant=Teilnehmer \ No newline at end of file +participant=Teilnehmer +chelp.intro=Hier legen Sie für dem Kurs zugewiesene Gruppen fest, welche Kursberechtigungen den Teilnehmern und Besitzern zugewiesen werden. +chelp.statistics=Mitglieder dürfen auf die Kurs Statistiken zugreifen und herunterladen. +chelp.glossary=Dieses Recht erlaubt es den Mitgliedern das Glossar zu bearbeiten. +chelp.assess=Auch ohne Betreuerrechte können Mitglieder mit diesem Recht mit Hilfe des Bewertungswerkzeug die Leistungen der Kursteilnehmer bewerten und kommentieren. +chelp.archive=Mitglieder haben Zugriff auf die Datenarchivierung und dürfen Kursdaten wie z.B. Foren archivieren. +chelp.editor=Auch Nicht-Autoren können den Kurseditor mit allen dazu gehörenden Funktionalitäten benutzen. +chelp.groupmngt=Mitglieder dürfen die Mitgliederverwaltung des Kurses verwenden und dort dieselben Aktionen vornehmen wie Sie als Kursautor bez. Besitzer. +help.hover.courseGrpRights=Hilfe zur Mitgliederverwaltung, Rechte +chelp.grp-rights.title=Mitgliederverwaltung\: $:menu.rights \ No newline at end of file diff --git a/src/main/java/org/olat/course/groupsandrights/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/groupsandrights/_i18n/LocalStrings_en.properties index 86a831ccc5d3ada0b08cfaa7162638d8b12e71f5..a4c7038181e3b7b2e988aaa9c38503033822c8c9 100644 --- a/src/main/java/org/olat/course/groupsandrights/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/course/groupsandrights/_i18n/LocalStrings_en.properties @@ -15,3 +15,12 @@ table.header.groups=Groups table.header.remove=Remove table.header.role=Role tutor=Coach +chelp.intro=Here you can allocate course rights to all members of groups associated with this course. Please notice the distinction between group participants and group owners. +chelp.statistics=Members are allowed to access and download course statistics. +chelp.glossary=Members are permitted to administer the glossary. +chelp.assess=Members can assess and comment on the progress of course participants by means of the assessment tool, even without coaching rights. +chelp.archive=Members have access to the course data, i.e. they are allowed to archive course data such as forums, etc. +chelp.editor=Members are allowed to use the course editor along with all its features. +chelp.groupmngt=Members are allowed to use the members management of their course and do what a course author or owner is permitted to do. +help.hover.courseGrpRights=Help about the rights in member management +chelp.grp-rights.title=Members management\: $:menu.rights \ No newline at end of file diff --git a/src/main/java/org/olat/course/groupsandrights/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/groupsandrights/_i18n/LocalStrings_pt_BR.properties index 9e20a539277afda0a167e32adf631d599516d559..cdd924e47dae1ee1603b23493417eb18fb1d869d 100644 --- a/src/main/java/org/olat/course/groupsandrights/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/groupsandrights/_i18n/LocalStrings_pt_BR.properties @@ -1,8 +1,26 @@ -#Wed May 26 20:48:17 CEST 2010 +#Wed Nov 07 18:32:18 CET 2012 +add.all=Adicionar todas as permiss\u00F5es bgr.archive=Ferramenta para arquivar bgr.assess=Ferramenta de avalia\u00E7\u00E3o +bgr.dbs=Banco de dados de Curso bgr.editor=Editor de curso bgr.glossary=Ferramenta do gloss\u00E1rio bgr.groupmngt=Grupo gestor bgr.statistics=Estat\u00EDstica +chelp.archive=Os membros t\u00EAm acesso aos dados do curso, ou seja, eles s\u00E3o autorizados a arquivar dados de cursos tais como f\u00F3runs, etc +chelp.assess=Os membros podem avaliar e comentar sobre o andamento dos participantes do curso por meio da ferramenta de avalia\u00E7\u00E3o, mesmo sem os direitos de coaching. +chelp.editor=Membros t\u00EAm permiss\u00E3o para usar o editor de curso, juntamente com todas os seus recursos. +chelp.glossary=Membros est\u00E3o autorizados a administrar o gloss\u00E1rio. +chelp.groupmngt=Membros est\u00E3o autorizados a utilizar a gest\u00E3o membros de seu curso e fazer o que um autor do curso ou propriet\u00E1rio pode fazer. +chelp.grp-rights.title=Gest\u00E3o de membros\: $\:menu.rights +chelp.intro=Aqui voc\u00EA pode atribuir direitos de curso para todos os membros de grupos associados a este curso. Note a distin\u00E7\u00E3o entre os participantes do grupo e os propriet\u00E1rios do grupo. +chelp.statistics=Membros t\u00EAm permiss\u00E3o para acessar e baixar as estat\u00EDsticas do curso. +help.hover.courseGrpRights=Ajuda sobre as permiss\u00F5es na gest\u00E3o de membros +menu.rights=Permiss\u00F5es noRestriction=Sem restri\u00E7\u00E3o +participant=Participante +remove.all=Remover todas as permiss\u00F5es +table.header.groups=Grupos +table.header.remove=Remover +table.header.role=Fun\u00E7\u00E3o +tutor=Treinador (Coach) diff --git a/src/main/java/org/olat/course/member/EditMembershipController.java b/src/main/java/org/olat/course/member/EditMembershipController.java new file mode 100644 index 0000000000000000000000000000000000000000..09de0fb75e5546941c586255aadb4476818376d9 --- /dev/null +++ b/src/main/java/org/olat/course/member/EditMembershipController.java @@ -0,0 +1,416 @@ +/** + * <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.course.member; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +import org.olat.core.CoreSpringFactory; +import org.olat.core.commons.persistence.PersistenceHelper; +import org.olat.core.gui.UserRequest; +import org.olat.core.gui.components.form.flexible.FormItemContainer; +import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement; +import org.olat.core.gui.components.form.flexible.impl.Form; +import org.olat.core.gui.components.form.flexible.impl.FormBasicController; +import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; +import org.olat.core.gui.components.form.flexible.impl.elements.MultipleSelectionElementImpl; +import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel; +import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel; +import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModel; +import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory; +import org.olat.core.gui.components.table.DefaultTableDataModel; +import org.olat.core.gui.control.Controller; +import org.olat.core.gui.control.Event; +import org.olat.core.gui.control.WindowControl; +import org.olat.core.id.Identity; +import org.olat.course.member.PermissionHelper.BGPermission; +import org.olat.course.member.PermissionHelper.RepoPermission; +import org.olat.group.BusinessGroupMembership; +import org.olat.group.BusinessGroupService; +import org.olat.group.BusinessGroupView; +import org.olat.group.model.BusinessGroupMembershipChange; +import org.olat.group.ui.main.MemberPermissionChangeEvent; +import org.olat.repository.RepositoryEntry; +import org.olat.repository.RepositoryManager; +import org.olat.repository.model.RepositoryEntryMembership; + +/** + * + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + */ +public class EditMembershipController extends FormBasicController { + + private EditMemberTableDataModel tableDataModel; + private MultipleSelectionElement repoRightsEl; + private MemberInfoController infoController; + private boolean withButtons; + + private static final String[] repoRightsKeys = {"owner", "tutor", "participant"}; + + private final Identity member; + private final List<Identity> members; + private List<RepositoryEntryMembership> memberships; + private List<BusinessGroupMembership> groupMemberships; + + private final RepositoryEntry repoEntry; + private final RepositoryManager repositoryManager; + private final BusinessGroupService businessGroupService; + + private static final String[] keys = new String[] { "ison" }; + private static final String[] values = new String[] {""}; + + public EditMembershipController(UserRequest ureq, WindowControl wControl, Identity member, + RepositoryEntry repoEntry) { + super(ureq, wControl, "edit_member"); + this.member = member; + this.members = null; + this.repoEntry = repoEntry; + this.withButtons = true; + repositoryManager = CoreSpringFactory.getImpl(RepositoryManager.class); + businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class); + + memberships = repositoryManager.getRepositoryEntryMembership(repoEntry, member); + + infoController = new MemberInfoController(ureq, wControl, member, repoEntry, mainForm); + listenTo(infoController); + + initForm(ureq); + loadModel(member); + + Date membershipCreation = null; + if(memberships != null) { + for(RepositoryEntryMembership membership:memberships) { + Date creationDate = membership.getCreationDate(); + if(creationDate != null && (membershipCreation == null || membershipCreation.compareTo(creationDate) > 0)) { + membershipCreation = creationDate; + } + } + } + + if(groupMemberships != null) { + for(BusinessGroupMembership membership:groupMemberships) { + Date creationDate = membership.getCreationDate(); + if(creationDate != null && (membershipCreation == null || membershipCreation.compareTo(creationDate) > 0)) { + membershipCreation = creationDate; + } + } + } + infoController.setMembershipCreation(membershipCreation); + } + + public EditMembershipController(UserRequest ureq, WindowControl wControl, List<Identity> members, + RepositoryEntry repoEntry) { + super(ureq, wControl, "edit_member"); + + this.member = null; + this.members = (members == null ? null : new ArrayList<Identity>(members)); + this.repoEntry = repoEntry; + this.withButtons = true; + repositoryManager = CoreSpringFactory.getImpl(RepositoryManager.class); + businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class); + + memberships = Collections.emptyList(); + + initForm(ureq); + loadModel(member); + } + + public EditMembershipController(UserRequest ureq, WindowControl wControl, List<Identity> members, + RepositoryEntry repoEntry, Form rootForm) { + super(ureq, wControl, LAYOUT_CUSTOM, "edit_member", rootForm); + + this.member = null; + this.members = (members == null ? null : new ArrayList<Identity>(members)); + this.repoEntry = repoEntry; + this.withButtons = false; + repositoryManager = CoreSpringFactory.getImpl(RepositoryManager.class); + businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class); + + memberships = Collections.emptyList(); + + initForm(ureq); + loadModel(member); + } + + private void loadModel(Identity member) { + List<BusinessGroupView> groups = businessGroupService.findBusinessGroupViews(null, repoEntry.getOlatResource(), 0, -1); + List<Long> businessGroupKeys = PersistenceHelper.toKeys(groups); + + groupMemberships = member == null ? + Collections.<BusinessGroupMembership>emptyList() : businessGroupService.getBusinessGroupMembership(businessGroupKeys, member); + List<MemberOption> options = new ArrayList<MemberOption>(); + for(BusinessGroupView group:groups) { + MemberOption option = new MemberOption(group); + BGPermission bgPermission = PermissionHelper.getPermission(group.getKey(), member, groupMemberships); + option.setTutor(createSelection(bgPermission.isTutor(), true)); + option.setParticipant(createSelection(bgPermission.isParticipant(), true)); + boolean waitingListEnable = group.getWaitingListEnabled() != null && group.getWaitingListEnabled().booleanValue(); + option.setWaiting(createSelection(bgPermission.isWaitingList(), waitingListEnable)); + options.add(option); + } + + tableDataModel.setObjects(options); + } + + private MultipleSelectionElement createSelection(boolean selected, boolean enabled) { + String name = "cb" + UUID.randomUUID().toString().replace("-", ""); + MultipleSelectionElement selection = new MultipleSelectionElementImpl(name, MultipleSelectionElementImpl.createVerticalLayout("checkbox",1)); + selection.setKeysAndValues(keys, values, null); + flc.add(name, selection); + selection.select(keys[0], selected); + selection.setEnabled(enabled); + return selection; + } + + @Override + protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { + + if(formLayout instanceof FormLayoutContainer) { + FormLayoutContainer layoutCont = (FormLayoutContainer)formLayout; + if(infoController != null) { + layoutCont.add("infos", infoController.getInitialFormItem()); + layoutCont.add(infoController.getInitialFormItem()); + } + + String title = translate("edit.member.title", new String[]{ repoEntry.getDisplayname() }); + layoutCont.contextPut("editTitle", title); + } + //repository entry rights + + String[] repoValues = new String[] { + translate("role.repo.owner"), translate("role.repo.tutor"), translate("role.repo.participant") + }; + repoRightsEl = uifactory.addCheckboxesVertical("repoRights", formLayout, repoRightsKeys, repoValues, null, 1); + if(member != null) { + RepoPermission repoPermission = PermissionHelper.getPermission(repoEntry, member, memberships); + repoRightsEl.select("owner", repoPermission.isOwner()); + repoRightsEl.select("tutor", repoPermission.isTutor()); + repoRightsEl.select("participant", repoPermission.isParticipant()); + } + + //group rights + FlexiTableColumnModel tableColumnModel = FlexiTableDataModelFactory.createFlexiTableColumnModel(); + tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.header.groups")); + tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.header.tutorsCount")); + tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.header.participantsCount")); + tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.header.freePlace")); + tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.header.tutors")); + tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.header.participants")); + tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.header.waitingList")); + + tableDataModel = new EditMemberTableDataModel(Collections.<MemberOption>emptyList(), tableColumnModel); + uifactory.addTableElement("groupList", tableDataModel, formLayout); + + if(withButtons) { + FormLayoutContainer buttonLayout = FormLayoutContainer.createButtonLayout("buttonLayout", getTranslator()); + formLayout.add(buttonLayout); + buttonLayout.setRootForm(mainForm); + uifactory.addFormSubmitButton("ok", buttonLayout); + uifactory.addFormCancelButton("cancel", buttonLayout, ureq, getWindowControl()); + } + } + + @Override + protected void doDispose() { + // + } + + public Identity getMember() { + return member; + } + + public List<Identity> getMembers() { + return members; + } + + @Override + protected void formOK(UserRequest ureq) { + MemberPermissionChangeEvent e = new MemberPermissionChangeEvent(member); + collectRepoChanges(e); + collectGroupChanges(e); + fireEvent(ureq, e); + } + + @Override + protected void formCancelled(UserRequest ureq) { + fireEvent(ureq, Event.CANCELLED_EVENT); + } + + public void collectRepoChanges(MemberPermissionChangeEvent e) { + RepoPermission repoPermission = PermissionHelper.getPermission(repoEntry, member, memberships); + + Set<String> selectRepoRights = repoRightsEl.getSelectedKeys(); + boolean repoOwner = selectRepoRights.contains("owner"); + e.setRepoOwner(repoOwner == repoPermission.isOwner() ? null : new Boolean(repoOwner)); + boolean repoTutor = selectRepoRights.contains("tutor"); + e.setRepoTutor(repoTutor == repoPermission.isTutor() ? null : new Boolean(repoTutor)); + boolean repoParticipant = selectRepoRights.contains("participant"); + e.setRepoParticipant(repoParticipant == repoPermission.isParticipant() ? null : new Boolean(repoParticipant)); + } + + public void collectGroupChanges(MemberPermissionChangeEvent e) { + List<BusinessGroupMembershipChange> changes = new ArrayList<BusinessGroupMembershipChange>(); + + for(MemberOption option:tableDataModel.getObjects()) { + BGPermission bgPermission = PermissionHelper.getPermission(option.getGroupKey(), member, groupMemberships); + BusinessGroupMembershipChange change = new BusinessGroupMembershipChange(member, option.getGroup()); + boolean bgTutor = option.getTutor().isAtLeastSelected(1); + change.setTutor(bgPermission.isTutor() == bgTutor ? null : new Boolean(bgTutor)); + boolean bgParticipant = option.getParticipant().isAtLeastSelected(1); + change.setParticipant(bgPermission.isParticipant() == bgParticipant ? null : new Boolean(bgParticipant)); + boolean bgWaitingList = option.getWaiting().isEnabled() && option.getWaiting().isAtLeastSelected(1); + change.setWaitingList(bgPermission.isWaitingList() == bgWaitingList ? null : new Boolean(bgWaitingList)); + + if(change.getTutor() != null || change.getParticipant() != null || change.getWaitingList() != null) { + changes.add(change); + } + } + e.setGroupChanges(changes); + } + + private static class MemberOption { + private final BusinessGroupView group; + private MultipleSelectionElement tutor; + private MultipleSelectionElement participant; + private MultipleSelectionElement waiting; + + public MemberOption(BusinessGroupView group) { + this.group = group; + } + + public BusinessGroupView getGroup() { + return group; + } + + public Long getGroupKey() { + return group.getKey(); + } + + public String getGroupName() { + return group.getName(); + } + + public long getTutorCount() { + return group.getNumOfOwners(); + } + + public long getParticipantCount() { + return group.getNumOfParticipants(); + } + + public Integer getMaxParticipants() { + return group.getMaxParticipants(); + } + + public MultipleSelectionElement getTutor() { + return tutor; + } + + public void setTutor(MultipleSelectionElement tutor) { + this.tutor = tutor; + } + + public MultipleSelectionElement getParticipant() { + return participant; + } + + public void setParticipant(MultipleSelectionElement participant) { + this.participant = participant; + } + + public MultipleSelectionElement getWaiting() { + return waiting; + } + + public void setWaiting(MultipleSelectionElement waiting) { + this.waiting = waiting; + } + } + + private static class EditMemberTableDataModel extends DefaultTableDataModel<MemberOption> implements FlexiTableDataModel { + private FlexiTableColumnModel columnModel; + + public EditMemberTableDataModel(List<MemberOption> options, FlexiTableColumnModel columnModel) { + super(options); + this.columnModel = columnModel; + } + + @Override + public FlexiTableColumnModel getTableColumnModel() { + return columnModel; + } + + @Override + public void setTableColumnModel(FlexiTableColumnModel tableColumnModel) { + columnModel = tableColumnModel; + } + + @Override + public int getColumnCount() { + return columnModel.getColumnCount(); + } + + @Override + public Object getValueAt(int row, int col) { + MemberOption option = getObject(row); + switch(Cols.values()[col]) { + case groupName: return option.getGroupName(); + case tutorCount: return new Long(option.getTutorCount()); + case participantCount: return new Long(option.getParticipantCount()); + case freePlaces: { + Integer maxParticipants = option.getMaxParticipants(); + if(maxParticipants != null && maxParticipants.intValue() > 0) { + long free = maxParticipants - option.getParticipantCount(); + return Long.toString(free); + } + return "∞"; + } + case tutor: return option.getTutor(); + case participant: return option.getParticipant(); + case waitingList: return option.getWaiting(); + default: return option; + } + } + } + + public static enum Cols { + groupName("table.header.groups"), + tutorCount("table.header.tutorsCount"), + participantCount("table.header.participantsCount"), + freePlaces("table.header.freePlace"), + tutor("table.header.tutors"), + participant("table.header.participants"), + waitingList("table.header.waitingList"); + + private final String i18n; + + private Cols(String i18n) { + this.i18n = i18n; + } + + public String i18n() { + return i18n; + } + } +} \ No newline at end of file diff --git a/src/main/java/org/olat/course/member/MemberInfoController.java b/src/main/java/org/olat/course/member/MemberInfoController.java new file mode 100644 index 0000000000000000000000000000000000000000..4b8c05cabfb58b7e4ca869e2febd53866fae2df4 --- /dev/null +++ b/src/main/java/org/olat/course/member/MemberInfoController.java @@ -0,0 +1,169 @@ +/** + * <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.course.member; + +import java.util.Date; +import java.util.List; + +import org.olat.NewControllerFactory; +import org.olat.core.CoreSpringFactory; +import org.olat.core.gui.UserRequest; +import org.olat.core.gui.components.form.flexible.FormItem; +import org.olat.core.gui.components.form.flexible.FormItemContainer; +import org.olat.core.gui.components.form.flexible.elements.FormLink; +import org.olat.core.gui.components.form.flexible.elements.StaticTextElement; +import org.olat.core.gui.components.form.flexible.impl.Form; +import org.olat.core.gui.components.form.flexible.impl.FormBasicController; +import org.olat.core.gui.components.form.flexible.impl.FormEvent; +import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; +import org.olat.core.gui.control.Controller; +import org.olat.core.gui.control.WindowControl; +import org.olat.core.id.Identity; +import org.olat.core.util.Formatter; +import org.olat.core.util.Util; +import org.olat.course.assessment.UserCourseInformations; +import org.olat.course.assessment.manager.UserCourseInformationsManager; +import org.olat.repository.RepositoryEntry; +import org.olat.user.DisplayPortraitController; +import org.olat.user.UserManager; +import org.olat.user.propertyhandlers.UserPropertyHandler; + +/** + * + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + */ +public class MemberInfoController extends FormBasicController { + + private FormLink homeLink, contactLink, assessmentLink; + private StaticTextElement membershipCreationEl; + + private final Identity identity; + private final Long repoEntryKey; + private final UserCourseInformations courseInfos; + + private final UserManager userManager; + private final UserCourseInformationsManager efficiencyStatementManager; + + public MemberInfoController(UserRequest ureq, WindowControl wControl, Identity identity, + RepositoryEntry repoEntry, Form rootForm) { + super(ureq, wControl, LAYOUT_CUSTOM, "info_member", rootForm); + setTranslator(Util.createPackageTranslator(UserPropertyHandler.class, ureq.getLocale(), getTranslator())); + + userManager = CoreSpringFactory.getImpl(UserManager.class); + efficiencyStatementManager = CoreSpringFactory.getImpl(UserCourseInformationsManager.class); + + this.identity = identity; + repoEntryKey = repoEntry.getKey(); + + courseInfos = efficiencyStatementManager.getUserCourseInformations(repoEntry.getOlatResource().getResourceableId(), identity); + + initForm(ureq); + } + + @Override + protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { + if(formLayout instanceof FormLayoutContainer) { + FormLayoutContainer layoutCont = (FormLayoutContainer)formLayout; + + Controller dpc = new DisplayPortraitController(ureq, getWindowControl(), identity, true, false); + listenTo(dpc); // auto dispose + layoutCont.put("image", dpc.getInitialComponent()); + layoutCont.contextPut("fullname", userManager.getUserDisplayName(identity.getUser())); + } + + //user properties + FormLayoutContainer userPropertiesContainer = FormLayoutContainer.createDefaultFormLayout("userProperties", getTranslator()); + formLayout.add("userProperties", userPropertiesContainer); + + List<UserPropertyHandler> userPropertyHandlers = userManager.getUserPropertyHandlersFor(getClass().getCanonicalName(), false); + for (UserPropertyHandler userPropertyHandler : userPropertyHandlers) { + if (userPropertyHandler == null) continue; + + String propName = userPropertyHandler.getName(); + String value = userPropertyHandler.getUserProperty(identity.getUser(), getLocale()); + String key = userPropertyHandler.i18nFormElementLabelKey(); + if(value == null) { + value = ""; + } + uifactory.addStaticTextElement("up_" + propName, key, value, userPropertiesContainer); + } + + //course informations + FormLayoutContainer courseInfosContainer = FormLayoutContainer.createDefaultFormLayout("courseInfos", getTranslator()); + formLayout.add("courseInfos", courseInfosContainer); + + Formatter formatter = Formatter.getInstance(getLocale()); + + String lastVisit = ""; + String numOfVisits = "0"; + if(courseInfos != null) { + if(courseInfos.getRecentLaunch() != null) { + lastVisit = formatter.formatDate(courseInfos.getRecentLaunch()); + } + if(courseInfos.getVisit() >= 0) { + numOfVisits = Integer.toString(courseInfos.getVisit()); + } + } + membershipCreationEl = uifactory.addStaticTextElement("firstTime", "course.membership.creation", "", courseInfosContainer); + uifactory.addStaticTextElement("lastTime", "course.lastTime", lastVisit, courseInfosContainer); + uifactory.addStaticTextElement("numOfVisits", "course.numOfVisits", numOfVisits, courseInfosContainer); + + //links + homeLink = uifactory.addFormLink("home", formLayout, "b_link_left_icon b_link_to_home"); + formLayout.add("home", homeLink); + contactLink = uifactory.addFormLink("contact", formLayout, "b_link_left_icon b_link_mail"); + formLayout.add("contact", contactLink); + assessmentLink = uifactory.addFormLink("assessment", formLayout, "b_link_left_icon b_link_assessment"); + formLayout.add("assessment", assessmentLink); + } + + public void setMembershipCreation(Date date) { + if(date != null) { + Formatter formatter = Formatter.getInstance(getLocale()); + membershipCreationEl.setValue(formatter.formatDate(date)); + } + } + + @Override + protected void doDispose() { + // + } + + @Override + protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { + if(source == homeLink) { + String businessPath = "[Identity:" + identity.getKey() + "]"; + NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl()); + } else if (source == contactLink) { + String businessPath = "[Identity:" + identity.getKey() + "][Contact:0]"; + NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl()); + } else if (source == assessmentLink) { + String businessPath = "[RepositoryEntry:" + repoEntryKey + "][assessmentTool:0][Identity:" + identity.getKey() + "]"; + NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl()); + } else { + super.formInnerEvent(ureq, source, event); + } + } + + @Override + protected void formOK(UserRequest ureq) { + // + } +} \ No newline at end of file diff --git a/src/main/java/org/olat/course/member/MemberSearchForm.java b/src/main/java/org/olat/course/member/MemberSearchForm.java index 65c1b6526a5b3148302d0707d13030c1ac07b4ab..a5c3d302d2afc2955a288c73bcbc8469f0856d3e 100644 --- a/src/main/java/org/olat/course/member/MemberSearchForm.java +++ b/src/main/java/org/olat/course/member/MemberSearchForm.java @@ -75,6 +75,7 @@ public class MemberSearchForm extends FormBasicController { formLayout.add(leftContainer); //user property login = uifactory.addTextElement("login", "search.login", 128, "", leftContainer); + login.setDisplaySize(28); userPropertyHandlers = userManager.getUserPropertyHandlersFor(getClass().getCanonicalName(), false); propFormItems = new HashMap<String,FormItem>(); @@ -87,7 +88,12 @@ public class MemberSearchForm extends FormBasicController { if (userPropertyHandler instanceof EmailProperty && fi instanceof TextElement) { TextElement textElement = (TextElement)fi; textElement.setItemValidatorProvider(null); + } + if(fi instanceof TextElement) { + ((TextElement)fi).setDisplaySize(28); + } + propFormItems.put(userPropertyHandler.getName(), fi); } diff --git a/src/main/java/org/olat/course/member/_content/edit_member.html b/src/main/java/org/olat/course/member/_content/edit_member.html new file mode 100644 index 0000000000000000000000000000000000000000..0613558e69489151df536e60357f24943434ddd2 --- /dev/null +++ b/src/main/java/org/olat/course/member/_content/edit_member.html @@ -0,0 +1,20 @@ +#if($r.available("infos")) + $r.render("infos")<br/> +#end +#if($r.available("repoRights")) + <fieldset> + <legend>$editTitle</legend> + <div class="b_form_desc">$r.translate("edit.member.repo.desc")</div> + $r.render("repoRights") + </fieldset> +#end +#if($r.available("groupList")) + <fieldset> + <legend>$r.translate("edit.member.groups")</legend> + <div class="b_form_desc">$r.translate("edit.member.groups.desc")</div> + $r.render("groupList") + </fieldset> +#end +#if($r.available("buttonLayout")) + $r.render("buttonLayout") +#end \ No newline at end of file diff --git a/src/main/java/org/olat/course/member/_content/search_form.html b/src/main/java/org/olat/course/member/_content/search_form.html index 90eb3abd9deb81a13c9ca22a65269bef958252be..abc3e6117cff3e3e3c6374c847b97e55330fcbf2 100644 --- a/src/main/java/org/olat/course/member/_content/search_form.html +++ b/src/main/java/org/olat/course/member/_content/search_form.html @@ -1,12 +1,12 @@ <br/> <div class="b_clearfix"> - <div class="b_c33l"> + <div class="b_c40l"> <div class="b_subcl"> $r.render("left_1") $r.render("button_layout") </div> </div> - <div class="b_c66r"> + <div class="b_c60r b_labels_minified"> <div class="b_subcr"> $r.render("right_1") </div> diff --git a/src/main/java/org/olat/course/member/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/member/_i18n/LocalStrings_de.properties index 50dde0fba937fbe9b7d70ddc34f672f1d9d32c88..1cd44ef0d826cfb7bea02f2d2ed7a0e4603d0333 100644 --- a/src/main/java/org/olat/course/member/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/course/member/_i18n/LocalStrings_de.properties @@ -24,6 +24,8 @@ import.member=$org.olat.group.ui.main\:import.member edit.member=$org.olat.group.ui.main\:edit.member edit.member.title=Mitgliederrechte Kurs "{0}" edit.member.groups=$org.olat.group.ui.main\:edit.member.groups +edit.member.repo.desc=Fügen Sie den Benutzer dem Kurs hinzu als: +edit.member.groups.desc=Fügen Sie den Benutzer den unten aufgeführten Gruppen durch Auswählen der entsprechenden Checkbox(en) hinzu. mail.member=E-Mail course.membership.creation=Kurs Beitritt course.lastTime=Zuletzt geöfnnet diff --git a/src/main/java/org/olat/course/member/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/member/_i18n/LocalStrings_en.properties index ea91cb1b3c97c46eac90ec4701b0bda6fb7351c5..cc7610fde0b6afb8aa84d144cee3ec553bc8d0d9 100644 --- a/src/main/java/org/olat/course/member/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/course/member/_i18n/LocalStrings_en.properties @@ -9,6 +9,8 @@ dialog.modal.bg.leave.text=Do you really want to remove the user(s) {0} from the edit.member=Edit member edit.member.groups=Group membership edit.member.title=Member right for the course "{0}" +edit.member.repo.desc=Add user to the course as: +edit.member.groups.desc=Add user to the groups below by selecting the appropriate checkboxes. group.add=Add group group.create=Create group home=Visiting card @@ -16,7 +18,7 @@ import.member=Import members mail.member=E-Mail members.all=All menu.breadcrumbs=$org.olat.course.run\:command.opensimplegroupmngt -menu.groups=GroupsManage +menu.groups=Groups menu.groups.alt=Groups management menu.members=Members menu.members.alt=Members management diff --git a/src/main/java/org/olat/course/member/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/member/_i18n/LocalStrings_pt_BR.properties new file mode 100644 index 0000000000000000000000000000000000000000..78b14428d73d2609054f2a71dfe5cfa1c30da168 --- /dev/null +++ b/src/main/java/org/olat/course/member/_i18n/LocalStrings_pt_BR.properties @@ -0,0 +1,72 @@ +#Wed Nov 07 19:05:31 CET 2012 +action=A\u00E7\u00E3o +add.member=Adicionar membro +assessment=Ferramenta de Avalia\u00E7\u00E3o +course.lastTime=\u00DAltimo acesso +course.membership.creation=Inscri\u00E7\u00E3o +course.numOfVisits=Lan\u00E7amentos do curso +dialog.modal.bg.leave.text=Voc\u00EA realmente deseja remover o(s) usu\u00E1rio(s) {0} do curso e todos os grupos? +edit.member=Editar membro +edit.member.groups=Filia\u00E7\u00E3o ao grupo +edit.member.groups.desc=Adicionar usu\u00E1rio para os grupos abaixo, selecionando as op\u00E7\u00F5es apropriadas. +edit.member.repo.desc=Adicionar usu\u00E1rio ao curso como\: +edit.member.title=Direito de membro para o curso "{0}" +error.atleastone=Pelo menos um dono \u00E9 necess\u00E1rio para um curso. +group.add=Adicionar grupo +group.create=Criar grupo +home=Cart\u00E3o de visitas +import.member=Importar membros +mail.member=E-mail +members.all=Todos +menu.breadcrumbs=$org.olat.course.run\:command.opensimplegroupmngt +menu.groups=Grupos +menu.groups.alt=Gest\u00E3o de Grupos +menu.members=Membros +menu.members.alt=Gest\u00E3o de membros +menu.orders=Reservas +menu.orders.alt=Gest\u00E3o de reservas +menu.rights=Permiss\u00F5es +menu.rights.alt=Gest\u00E3o de permiss\u00F5es +nomembers=N\u00E3o h\u00E1 membros que satisfa\u00E7am seus crit\u00E9rios +owners=Propriet\u00E1rios +owners.infos=Os propriet\u00E1rios t\u00EAm editorial completo e direitos administrativos para este curso. +participants=Participantes +participants.infos=Os participantes t\u00EAm acesso ao curso. <br/>Participantes do grupo t\u00EAm acesso ao grupo e ao curso. +role.group.participant=Participante do Grupo +role.group.tutor=Grupo de treinadores (Coach) +role.group.waiting=Lista de espera +role.repo.owner=Propriet\u00E1rio +role.repo.participant=Participante +role.repo.tutor=Treinador +search=Buscar +search.all=Todos membros +search.attendee=$\:role.repo.participant +search.group=Apenas membros de grupos +search.login=Usu\u00E1rio +search.origin=Origem +search.origin.alt=Mostrar +search.owner=$\:role.repo.owner +search.repo=Apenas membros de curso +search.roles=Fun\u00E7\u00E3o +search.tutor=$\:role.repo.tutor +search.waiting=Lista de espera +select.group=Adicionar grupo +table.header.edit=Editar +table.header.firstName=Primeiro Nome +table.header.firstTime=Entrando +table.header.freePlace=Livre +table.header.groups=Grupos +table.header.lastName=\u00DAltimo nome +table.header.lastTime=\u00DAltima visita +table.header.mail=E-mail +table.header.participants=Participante +table.header.participantsCount=Atribu\u00EDdo +table.header.remove=Remover +table.header.role=Fun\u00E7\u00F5es +table.header.tutors=Treinador (Coach) +table.header.tutorsCount=Treinadores (Coaches) +table.header.waitingList=Lista de espera +tutors=Treinadores (Coaches) +tutors.infos=Treinadores t\u00EAm acesso \u00E0s ferramentas de avalia\u00E7\u00E3o e coaching dos participantes do curso. <br/> Treinadores do Grupo t\u00EAm acesso \u00E0 ferramenta de avalia\u00E7\u00E3o e coaching para seus respectivos participantes do grupo. +waiting.infos=As pessoas na lista de espera n\u00E3o t\u00EAm acesso ao grupo ou curso. O acesso ao grupo s\u00F3 \u00E9 liberado quando vagas estiverem dispon\u00EDveis ou o treinador do grupo realocar o participante manualmente. +waitinglist=Lista de espera diff --git a/src/main/java/org/olat/course/member/wizard/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/member/wizard/_i18n/LocalStrings_pt_BR.properties new file mode 100644 index 0000000000000000000000000000000000000000..75e2b6aadf7cb7f681b4a01235d9247404827ead --- /dev/null +++ b/src/main/java/org/olat/course/member/wizard/_i18n/LocalStrings_pt_BR.properties @@ -0,0 +1,8 @@ +#Wed Nov 07 19:06:26 CET 2012 +form.addusers=Usu\u00E1rios +form.names.example=test01<br/>author02<br/> +import.choose.title=Indicar nome do usu\u00E1rio +import.confirm.title=Revisar +import.import.title=Inserir nome de usu\u00E1rios +import.mail.title=Notifica\u00E7\u00E3o por E-mail +import.permission.title=Permiss\u00F5es diff --git a/src/main/java/org/olat/course/nodes/GenericCourseNode.java b/src/main/java/org/olat/course/nodes/GenericCourseNode.java index 896afec2968790d2911f2d549db883768e74a305..c418b5dcb06f989ecca17fdb4a0fc306c6124900 100644 --- a/src/main/java/org/olat/course/nodes/GenericCourseNode.java +++ b/src/main/java/org/olat/course/nodes/GenericCourseNode.java @@ -439,7 +439,7 @@ public abstract class GenericCourseNode extends GenericNode implements CourseNod String processExpression = convertExpressionNameToKey(expression, envMapper); processExpression = convertExpressionKeyToKey(expression, envMapper); if(!expression.equals(processExpression)) { - condition.setConditionUpgraded(processExpression); + condition.setConditionExpression(processExpression); } } } @@ -483,7 +483,7 @@ public abstract class GenericCourseNode extends GenericNode implements CourseNod if(backwardsCompatible) { condition.setEasyModeGroupAreaAccessIds(null); condition.setEasyModeGroupAccessIds(null); - condition.setConditionUpgraded(null); + //condition.setConditionUpgraded(null); } } diff --git a/src/main/java/org/olat/course/nodes/basiclti/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/basiclti/_i18n/LocalStrings_pt_BR.properties index a7c40e89bab62df46d186bec65b58f6b04973ebb..df3e42f09f474f398b9b9068b558a80114d852c3 100644 --- a/src/main/java/org/olat/course/nodes/basiclti/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/nodes/basiclti/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Thu Sep 16 17:10:39 CEST 2010 +#Wed Nov 07 19:06:32 CET 2012 LTConfigForm.invalidurl=Por favor, indique uma URL v\u00E1lida. LTConfigForm.key=Chave LTConfigForm.key.example=Exemplo\: 12345 @@ -34,4 +34,5 @@ form.title=Configura\u00E7\u00E3o da p\u00E1gina LTI help.hover.lt.conf=Ajuda para configurar a p\u00E1gina LTI pane.tab.accessibility=Acesso pane.tab.ltconfig=Conte\u00FAdo da p\u00E1gina +preview=Amostra title_lti=P\u00E1gina LTI diff --git a/src/main/java/org/olat/course/nodes/bc/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/bc/_i18n/LocalStrings_pl.properties index 06280a2e4188e65ebcb73abe1f37b6e86adcb3c9..fd53c82ce6b05b0f1a0311b73256b93dd7989532 100644 --- a/src/main/java/org/olat/course/nodes/bc/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/course/nodes/bc/_i18n/LocalStrings_pl.properties @@ -18,9 +18,9 @@ pane.tab.folder=Konfiguracja folderu peekview.allItemsLink=Wszystkie dokumenty preview.canDownload=\u015Aci\u0105ganie dozwolone preview.canUpload=Przekazywanie dozwolone -preview.conf.toggle=Toggle configuration on/off +preview.conf.toggle=Poka\u017C/ukryj konfiguracj\u0119 preview.header=Folder konfiguracji dla sztucznego u\u017Cytkownika preview.info=Zawarto\u015B\u0107 folderu jest pokazana poni\u017Cej preview.quotaKB=Przydzia\u0142 w kB -title_bc=Dost\u0119p +title_bc=Folder warn.folderdelete=Ostrze\u017Cenie\: Wszystkie pliki w tym folderze zostan\u0105 usuni\u0119te diff --git a/src/main/java/org/olat/course/nodes/co/CORunController.java b/src/main/java/org/olat/course/nodes/co/CORunController.java index 326832807a5988a917da7d58d2b43ba5cffa2ade..ab7339e5e579efab5d0c6846976f15b86b552b10 100644 --- a/src/main/java/org/olat/course/nodes/co/CORunController.java +++ b/src/main/java/org/olat/course/nodes/co/CORunController.java @@ -118,7 +118,7 @@ public class CORunController extends BasicController { String grpNames = (String)moduleConfiguration.get(COEditController.CONFIG_KEY_EMAILTOGROUPS); @SuppressWarnings("unchecked") List<Long> groupKeys = (List<Long>) moduleConfiguration.get(COEditController.CONFIG_KEY_EMAILTOGROUP_IDS); - if(groupKeys != null && StringHelper.containsNonWhitespace(grpNames)) { + if(groupKeys == null && StringHelper.containsNonWhitespace(grpNames)) { groupKeys = businessGroupService.toGroupKeys(grpNames, cgm.getCourseResource()); } if (coachesConfigured != null && coachesConfigured.booleanValue()) { diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pl.properties index 217cf32a796f6f5e821c192ae2b14308cac17160..c3b4e99f70ec406aa8d492d1ea5bb0804f47aa47 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pl.properties @@ -11,12 +11,12 @@ chelp.cp2=Kliknij przycisk $\:chelp.chooseCp ,aby wybra\u0107 plik ZIP z po\u017 chelp.cp3=Je\u015Bli ju\u017C doda\u0142e\u015B $\:chelp.cp, nazwa pliku pojawi si\u0119 w polu, a przycisk $\:chelp.prevCp po prawej stronie powy\u017Cej. chelp.cp4=Masz teraz mo\u017Cliwo\u015B\u0107 wybrania innego pliku ZIP poprzez przycisk $\:chelp.chanCp . chelp.disp1=W menu rozwijanym $\:chelp.dispStart masz dwie mo\u017Cliwo\u015Bci\: -chelp.disp10=$org.olat.course.nodes.scorm\:chelp.set8 +chelp.disp10=To pozwala na kodowanie Javascript za pomoc\u0105 predefiniowanego zestawu znak\u00F3w (domy\u015Blnie ten sam zestaw b\u0119dzie u\u017Cywany do tre\u015Bci i JavaScript). chelp.disp2=Klikaj\u0105c na elemencie kursu jego zawarto\u015B\u0107 zostanie wy\u015Bwietlona bezpo\u015Brednio w obszarze zawarto\u015Bci OLAT. chelp.disp3=Klikaj\u0105c na elemencie kursu tymczasowa strona pojawia si\u0119 wraz z przyciskiem start w obszarze zawarto\u015Bci OLAT. chelp.disp7=Przy pomocy menu rozwijanego $\:chelp.dispCp mo\u017Cesz zdecydowa\u0107, czy nawigacja twoich CP powinna by\u0107 widoczna. chelp.disp8=Je\u015Bli wybierzesz $\:chelp.dispStartNo w $\:chelp.dispStart i potem $\:chelp.dispCpYes, nawigacja CP b\u0119dzie zainstalowana w nawigacji kursu. -chelp.disp9=$org.olat.course.nodes.scorm\:chelp.set7 +chelp.disp9=OLAT pr\u00F3buje wykry\u0107 zestaw znak\u00F3w automatycznie. Je\u015Bli opcja "Automatic" nie "zadzia\u0142a" mo\u017Cliwe jest skonfigurowanie kodowania tre\u015Bci za pomoc\u0105 predefiniowanego zestawu znak\u00F3w (w przypadku braku kodowania zestaw znak\u00F3w ISO-8899-1 b\u0119dzie u\u017Cywany domy\u015Blnie). chelp.dispCp=<b>$org.olat.course.editor\:display.config.compMenu</b> chelp.dispCpYes=<i>«$org.olat.course.editor\:display.config.compMenu.true»</i> chelp.dispStart=<b>$org.olat.course.editor\:display.config.startPage</b> diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pt_BR.properties index aa69413450b6c0ca766792f67f27006f5bc33f92..665fefec8c591da7c4508ca9ba918a769225ec0d 100644 --- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Mon Apr 02 23:46:10 CEST 2012 +#Wed Nov 07 21:33:05 CET 2012 chelp.ced-cp-disp.title=$\:chelp.ced-disp.title chelp.ced-cp.title=Sele\u00E7\u00E3o de m\u00F3dulo IMS-CP chelp.ced-disp.title=Exibi\u00E7\u00E3o de conte\u00FAdos @@ -52,4 +52,5 @@ help.hover.cp-filename=Ajuda para selecionar um m\u00F3dulo IMS-CP no.cp.chosen=<i>Nenhum m\u00F3dulo IMS-CP selecionado</i> pane.tab.accessibility=Acesso pane.tab.cpconfig=M\u00F3dulo did\u00E1tico +preview.cp=Amostra title_cp=CP learning content diff --git a/src/main/java/org/olat/course/nodes/en/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/en/_i18n/LocalStrings_pl.properties index f822d592ac39669f2c699c5a42644e83a963b130..5f92019345b2113ed11b33e2c6ff82c6fd51d8ab 100644 --- a/src/main/java/org/olat/course/nodes/en/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/course/nodes/en/_i18n/LocalStrings_pl.properties @@ -68,5 +68,5 @@ pane.tab.accessibility=Dost\u0119p pane.tab.enconfig=Konfiguracja popupchooseareas=Wybierz obszary edukacyjne z zarz\u0105dzania grup\u0105 popupchoosegroups=Wybierz grupy z zarz\u0105dzania grup\u0105 -title_en=Ocenianie +title_en=Rekrutacja waitinglist.explain=Jeste\u015B na li\u015Bcie oczekuj\u0105cych na zapisanie si\u0119 do poni\u017Cszej grupy edukacyjnej. Kliknij 'Anuluj zapisanie si\u0119' by opu\u015Bci\u0107 list\u0119 oczekuj\u0105cych. diff --git a/src/main/java/org/olat/course/nodes/iq/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/iq/_i18n/LocalStrings_pt_BR.properties index 12d976899538beb8f557310ff5059a9d6b9d35ed..5b0361c8350db438297ca203380b8c8267997f62 100644 --- a/src/main/java/org/olat/course/nodes/iq/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/nodes/iq/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Mon Apr 02 23:50:37 CEST 2012 +#Wed Nov 07 19:08:29 CET 2012 Intro.self=Clicar o bot\u00E3o "Iniciar" para executar o auto-teste. Intro.surv=Clicar o bot\u00E3o "Iniciar" para executar a pesquisa. Intro.test=Clicar o bot\u00E3o "Iniciar" para executar o teste. @@ -94,6 +94,7 @@ condition.accessibility.title=Acesso correcttest=Teste correto coursefolder=Pasta de armazenamento do curso "{0}" disclaimer.file.invalid=Algumas informa\u00E7\u00F5es n\u00E3o podem ser apresentadas porque o arquivo referenciado {0} n\u00E3o est\u00E1 mais dispon\u00EDvel. Favor entre em contato com seu administrador de Curso. +error.assessment.stopped=Seu tutor selecioneu o seu teste. error.entry.locked=O recurso did\u00E1tico selecionado \u00E9 editado atualmente por outro usu\u00E1rio. Favor selecionar algum outro recurso did\u00E1tico. error.self.undefined.long=Nenhum auto-teste definido para "{0}" . Escolher um. error.self.undefined.short=Nenhum auto-teste definido para "{0}" . @@ -131,6 +132,7 @@ pane.tab.iqconfig.test=Configura\u00E7\u00E3o de teste passed.no=Falhou passed.yes=Passou passed.yourpassed=Seu status +preview=Amostra preview.points.set=Pontos para previs\u00E3o s\u00E3o ajustados. qti.form.attempts=N\u00FAmero m\u00E1ximo de tentativas qti.form.attempts.noLimit=Ilimitado diff --git a/src/main/java/org/olat/course/nodes/members/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/members/_i18n/LocalStrings_pl.properties new file mode 100644 index 0000000000000000000000000000000000000000..14f532076b1104c9ec40b113eef2c1eee9c41b20 --- /dev/null +++ b/src/main/java/org/olat/course/nodes/members/_i18n/LocalStrings_pl.properties @@ -0,0 +1,3 @@ +members.participants=Uczestnik +pane.tab.accessibility=Dost\u0119p +title_info=Lista uczestnik\u00F3w diff --git a/src/main/java/org/olat/course/nodes/ms/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/ms/_i18n/LocalStrings_pl.properties index df52856a6f03244ce08a0519967443504283f308..c5088011ecf230d849c0e372904cef9dec589091 100644 --- a/src/main/java/org/olat/course/nodes/ms/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/course/nodes/ms/_i18n/LocalStrings_pl.properties @@ -38,14 +38,14 @@ form.max=Maksymalny wynik form.min=Minimalny wynik form.no=Nie form.passed=Wy\u015Bwietl zaliczono/nie zaliczono -form.passed.type=Typ wy\u015Bwietlania +form.passed.type=Typ zaliczania form.passedtype.cutval=Automatyczne u\u017Cywanie warto\u015Bci zaliczaj\u0105cej form.passedtype.manual=R\u0119cznie przez nauczyciela form.score=Przyznany wynik form.yes=Tak help.hover.ms-conf=Pom\u00F3\u017C skonfigurowa\u0107 r\u0119czn\u0105 ocen\u0119 info.title=Informacje o ocenie -log.title=Zmie\u0144 loga +log.title=Rejestr zmian pane.tab.accessibility=Dost\u0119p pane.tab.configuration=Ocena passed.cut=Wymagany do zaliczenia wynik diff --git a/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_pt_BR.properties index f0e103254e37913c6d805a2c96abeac45e4ecb62..7a31c0fb552cbfb4c49e5b3ac64f234abfb7909a 100644 --- a/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/nodes/portfolio/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Thu Sep 08 16:42:37 CEST 2011 +#Wed Nov 07 19:09:03 CET 2012 ced.hover=Ajuda sobre o elemento de curso portfolio chelp.ced_portfolio.attention=Por favor, note que voc\u00EA s\u00F3 pode avaliar tarefas portfolio submetidos se os participantes do curso s\u00E3o registrados em grupos de estudo. Voc\u00EA deve, portanto, criar grupos de aprendizagem com os participantes do primeiro curso do seu grupo gestor. chelp.ced_portfolio.detail=No caso de voc\u00EA j\u00E1 ter adicionado um modelo de portfolio ele aparecer\u00E1 via $\:selected.map . Basta seguir este link para chegar \u00E0 pr\u00E9-visualiza\u00E7\u00E3o. Ent\u00E3o voc\u00EA vai ter a possibilidade de selecionar outro conte\u00FAdo por meio do bot\u00E3o "$\:select.map". Se um modelo de carteira j\u00E1 foi baixado e editado n\u00E3o ser\u00E1 mais poss\u00EDvel substitu\u00ED-lo. @@ -54,6 +54,15 @@ pane.tab.portfolio_config=Conte\u00FAdo did\u00E1tico pane.tab.portfolio_config.explanation=Configurar tarefa Portfolio pane.tab.portfolio_config.title=Selecionar ou criar modelo de portfolio pane.tab.portfolio_scoring=Avalia\u00E7\u00E3o +passed.cut=$org.olat.course.nodes.ms\:passed.cut +passed.title=$org.olat.course.nodes.ms\:passed.title +passed.yourpassed=$org.olat.course.nodes.ms\:passed.yourpassed +preview.map=Amostra +score.max=$org.olat.course.nodes.ms\:score.max +score.min=$org.olat.course.nodes.ms\:score.min +score.noscore=$org.olat.course.nodes.ms\:score.noscore +score.title=$org.olat.course.nodes.ms\:score.title +score.yourscore=$org.olat.course.nodes.ms\:score.yourscore select.map=Substituir modelo de portfolio select.map2=Selecione modelo de portfolio select.mymap=Tarefa Portfolio recolhida diff --git a/src/main/java/org/olat/course/nodes/projectbroker/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/projectbroker/_i18n/LocalStrings_pl.properties index e1973dee161a97888efd995b8eb3cf383f41eb97..b9bfa20dcf2244eaca0429fcf17a64b66fcf05f6 100644 --- a/src/main/java/org/olat/course/nodes/projectbroker/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/course/nodes/projectbroker/_i18n/LocalStrings_pl.properties @@ -21,7 +21,7 @@ chelp.projectbroker-optionsFormSettings.title=Konfiguracja chelp.projectbroker.customfieldAddFieldLinkCustomfieldNameLabel=W polu "$\:customfield.name.label" mo\u017Cesz wskaza\u0107 preferowan\u0105 nazw\u0119 pola. chelp.projectbroker.themaPl=W\u0105tki chelp.projectbroker.themaSg=W\u0105tek -chelp.projectbroker.themenboerse=Topic assignment +chelp.projectbroker.themenboerse=Przypisanie tematu create.new.project.button=Utw\u00F3rz $\:chelp.projectbroker.themaSg customfield.add.field.link=Dodaj pole customfield.delete.link.0=Usu\u0144 pole @@ -31,7 +31,7 @@ customfield.delete.link.3=Delete field customfield.delete.link.4=Usu\u0144 pole customfield.example.name=Przyk\u0142ad\: wydzia\u0142 customfield.example.value=Przyk\u0142ad\: wydzia\u0142 medyczny, wydzia\u0142 teologiczny -customfield.name.label=Imi\u0119 +customfield.name.label=Nazwa customfield.table.enabled=Pojawia si\u0119 w tabeli customfield.value.label=Warto\u015B\u0107 delete.confirm=Czy na pewno chcesz usun\u0105\u0107 $\:chelp.projectbroker.themaSg `{0}`? diff --git a/src/main/java/org/olat/course/nodes/projectbroker/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/projectbroker/_i18n/LocalStrings_pt_BR.properties index e0ab80df969577aa947bd780979c5466c6abcf8b..599f436570d24f4ba519ef9488c608a1fb2fb068 100644 --- a/src/main/java/org/olat/course/nodes/projectbroker/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/nodes/projectbroker/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Mon Apr 02 23:53:18 CEST 2012 +#Wed Nov 07 21:33:07 CET 2012 ENROLLMENT_EVENT=Data de registro HANDOUT_EVENT=Vencimento account.manager.groupdescription=Administrador de $\:chelp.projectbroker.themenboerse <i>{0}</i>, criado automaticamente. diff --git a/src/main/java/org/olat/course/nodes/scorm/ScormEditController.java b/src/main/java/org/olat/course/nodes/scorm/ScormEditController.java index 8e954aeb133e4f59efb0b71686087e724795d0f1..4f927a3a958a3eeff371f65f3ff89c927d090b5f 100644 --- a/src/main/java/org/olat/course/nodes/scorm/ScormEditController.java +++ b/src/main/java/org/olat/course/nodes/scorm/ScormEditController.java @@ -241,7 +241,7 @@ public class ScormEditController extends ActivateableTabbableDefaultController i ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapScormRepositoryEntry(re)); ScormAPIandDisplayController previewController = ScormMainManager.getInstance().createScormAPIandDisplayController(ureq, getWindowControl(), showMenu, null, cpRoot, null, course.getResourceableId().toString(), - ScormConstants.SCORM_MODE_BROWSE, ScormConstants.SCORM_MODE_NOCREDIT, true, false, true, fullWindow); + ScormConstants.SCORM_MODE_BROWSE, ScormConstants.SCORM_MODE_NOCREDIT, true, false, true, fullWindow, false); // configure some display options boolean showNavButtons = config.getBooleanSafe(ScormEditController.CONFIG_SHOWNAVBUTTONS, true); previewController.showNavButtons(showNavButtons); diff --git a/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java b/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java index e5159e6c6334d9b5c059c730dfc4edbc7e267cde..c357881920d173db73125b0e33284f0f4886b947 100644 --- a/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java +++ b/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java @@ -34,12 +34,12 @@ import org.olat.core.gui.components.Window; import org.olat.core.gui.components.panel.Panel; import org.olat.core.gui.components.tree.TreeEvent; import org.olat.core.gui.components.velocity.VelocityContainer; +import org.olat.core.gui.control.ConfigurationChangedListener; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.ControllerEventListener; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; -import org.olat.core.id.Identity; import org.olat.core.logging.AssertException; import org.olat.core.util.CodeHelper; import org.olat.core.util.event.GenericEventListener; @@ -50,6 +50,8 @@ import org.olat.course.nodes.ScormCourseNode; import org.olat.course.run.scoring.ScoreEvaluation; import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.fileresource.FileResourceManager; +import org.olat.instantMessaging.CloseInstantMessagingEvent; +import org.olat.instantMessaging.InstantMessaging; import org.olat.modules.ModuleConfiguration; import org.olat.modules.scorm.ScormAPICallback; import org.olat.modules.scorm.ScormAPIandDisplayController; @@ -66,7 +68,7 @@ import org.olat.util.logging.activity.LoggingResourceable; * * @author Felix Jost */ -public class ScormRunController extends BasicController implements ScormAPICallback, GenericEventListener { +public class ScormRunController extends BasicController implements ScormAPICallback, GenericEventListener, ConfigurationChangedListener { private ModuleConfiguration config; private File cpRoot; @@ -83,8 +85,6 @@ public class ScormRunController extends BasicController implements ScormAPICallb private UserCourseEnvironment userCourseEnv; private ChooseScormRunModeForm chooseScormRunMode; private boolean isPreview; - - private Identity identity; private boolean isAssessable; /** @@ -108,14 +108,12 @@ public class ScormRunController extends BasicController implements ScormAPICallb this.userCourseEnv = userCourseEnv; this.config = config; this.scormNode = scormNode; - this.identity = ureq.getIdentity(); addLoggingResourceable(LoggingResourceable.wrap(scormNode)); init(ureq); } private void init(UserRequest ureq) { - startPage = createVelocityContainer("run"); // show browse mode option only if not assessable, hide it if in // "real test mode" @@ -231,6 +229,9 @@ public class ScormRunController extends BasicController implements ScormAPICallb } private void doLaunch(UserRequest ureq, boolean doActivate) { + ureq.getUserSession().getSingleUserEventCenter() + .fireEventToListenersOf(new CloseInstantMessagingEvent(), InstantMessaging.TOWER_EVENT_ORES); + if (cpRoot == null) { // it is the first time we start the contentpackaging from this // instance @@ -259,25 +260,34 @@ public class ScormRunController extends BasicController implements ScormAPICallb courseId = new Long(CodeHelper.getRAMUniqueID()).toString(); scormDispC = ScormMainManager.getInstance().createScormAPIandDisplayController(ureq, getWindowControl(), showMenu, null, cpRoot, null, courseId, ScormConstants.SCORM_MODE_BROWSE, ScormConstants.SCORM_MODE_NOCREDIT, true, false, doActivate, - fullWindow); + fullWindow, false); } else { + boolean attemptsIncremented = false; + //increment user attempts only once! + if(!config.getBooleanSafe(ScormEditController.CONFIG_ADVANCESCORE, true) + || !config.getBooleanSafe(ScormEditController.CONFIG_ATTEMPTSDEPENDONSCORE, false)) { + scormNode.incrementUserAttempts(userCourseEnv); + attemptsIncremented = true; + } + courseId = userCourseEnv.getCourseEnvironment().getCourseResourceableId().toString(); if (isAssessable) { scormDispC = ScormMainManager.getInstance().createScormAPIandDisplayController(ureq, getWindowControl(), showMenu, this, cpRoot, null, courseId + "-" + scormNode.getIdent(), ScormConstants.SCORM_MODE_NORMAL, - ScormConstants.SCORM_MODE_CREDIT, false, isAssessable, doActivate, fullWindow); + ScormConstants.SCORM_MODE_CREDIT, false, isAssessable, doActivate, fullWindow, attemptsIncremented); // <OLATCE-289> // scormNode.incrementUserAttempts(userCourseEnv); // </OLATCE-289> } else if (chooseScormRunMode.getSelectedElement().equals(ScormConstants.SCORM_MODE_NORMAL)) { scormDispC = ScormMainManager.getInstance().createScormAPIandDisplayController(ureq, getWindowControl(), showMenu, null, cpRoot, null, courseId + "-" + scormNode.getIdent(), ScormConstants.SCORM_MODE_NORMAL, - ScormConstants.SCORM_MODE_CREDIT, false, isAssessable, doActivate, fullWindow); + ScormConstants.SCORM_MODE_CREDIT, false, isAssessable, doActivate, fullWindow, attemptsIncremented); } else { scormDispC = ScormMainManager.getInstance().createScormAPIandDisplayController(ureq, getWindowControl(), showMenu, null, cpRoot, null, courseId, ScormConstants.SCORM_MODE_BROWSE, ScormConstants.SCORM_MODE_NOCREDIT, false, isAssessable, doActivate, - fullWindow); + fullWindow, attemptsIncremented); } + } // configure some display options boolean showNavButtons = config.getBooleanSafe(ScormEditController.CONFIG_SHOWNAVBUTTONS, true); @@ -332,6 +342,11 @@ public class ScormRunController extends BasicController implements ScormAPICallb return (config.getBooleanEntry(NodeEditController.CONFIG_COMPONENT_MENU).booleanValue()); } + @Override + public void configurationChanged() { + scormDispC.configurationChanged(); + } + /** * @see org.olat.core.gui.control.DefaultController#doDispose(boolean) */ diff --git a/src/main/java/org/olat/course/nodes/scorm/_chelp/ced-scorm-settings.html b/src/main/java/org/olat/course/nodes/scorm/_chelp/ced-scorm-settings.html index 0bbf870d6f4781d16ecaa45c0257e7fadd8e2d88..528cf389d4f895b34a8c547c6773b580d39eb90c 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_chelp/ced-scorm-settings.html +++ b/src/main/java/org/olat/course/nodes/scorm/_chelp/ced-scorm-settings.html @@ -4,6 +4,9 @@ <b>$r.translate("shownavbuttons.label"):</b> $r.translate("chelp.set2") <br/><br/> <b>$r.translate("fullwindow.label"):</b> $r.translate("chelp.set10") <br/><br/> <b>$r.translate("closeonfinish.label"):</b> $r.translate("chelp.set11") <br/><br/> + + <b>$r.translate("rawcontent.label"):</b> $r.translate("chelp.set11") <br/><br/> + <b>$r.translate("height.label"):</b> $r.translate("chelp.set3") $r.translate("chelp.set4") <br/><br/> <b>$r.translate("encoding.content"):</b> $r.translate("chelp.set7")<br/><br/> <b>$r.translate("encoding.js"):</b> $r.translate("chelp.set8")<br/><br/> diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_de.properties index 9d684d791fc87884ab87f55b786d734d9b487681..0b4f7492d82bcf608dc8a3428a95a3b5d9e5173f 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_de.properties @@ -28,6 +28,7 @@ chelp.set10=Ist diese Checkbox markiert, wird OpenOLAT mit dem \u00D6ffnen des K chelp.set11=Das SCORM Modul wird automatisch geschlossen sobald es beendet ist, und der Benutzer kehrt in die Kursansicht zur\u00FCck. chelp.set12=Falls dem Benutzer mehrere L\u00F6sungsversuche zur Verf\u00FCgung stehen, kann mit Markieren dieser Checkbox verhindert werden, dass ein erneuter Anlauf ein bereits bestehendes Resultat verschlechtert. chelp.set13=Mittels des Drop-Down-Menus k\u00F6nnen Sie die Anzahl der L\u00F6sungsversuche einschr\u00E4nken. Der h\u00F6chste zur Auswahl stehende Wert ist 20. +chelp.set14=Schaltet einen Kompatibilitätsmodus für den SCORM Kursbaustein sein, falls OpenOLAT Probleme mit der Darstellung der SCORM-Inhalte hat. Bei eingeschaltetem Kompatibilitätsmodus muss die Höhe der Anzeigefläche manuell gesetzt werden. chosencp=Gew\u00E4hlter SCORM-Lerninhalt command.changecp=SCORM-Lerninhalt auswechseln command.importcp=SCORM-Lerninhalt w\u00E4hlen oder importieren diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_en.properties index 3857e111b5502cc5fc1c094f2fef57cf603e7b35..974f1952becab7484627fb861f1a5987b74740d3 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_en.properties @@ -28,6 +28,7 @@ chelp.set10=Check this box if you want OpenOLAT to be hidden while the SCORM mod chelp.set11=Check this box if the SCORM module should automatically close when it's finished, returning the participant to the course. chelp.set12=If this box is checked, a score already achieved will not be decreased by further attempts. chelp.set13=By means of the drop-down menu the number of attempts available can be limited. +chelp.set14=Check this box if OpenOLAT has problems correctly displaying the SCORM content. If this compatibility mode is enabled, you need to manually set the window height. chosencp=Selected SCORM learning content command.changecp=Replace SCORM learning content command.choosecp=Choose SCORM learning content diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pt_BR.properties index 9786302bbf4ca80c7b121cf6ca4d6c0ef3ee259c..c150db563a0bcbea2c7658175a1920c3526c50dc 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Tue Apr 03 00:01:19 CEST 2012 +#Wed Nov 07 19:10:47 CET 2012 advance.score.label=Impedir tentativas posteriores de diminuir pontua\u00E7\u00E3o assessable.label=Transfer\u00EAncia de pontos do SCORM attempts.depends.label=Conta tentativas apenas se a nota \u00E9 transferido @@ -25,6 +25,7 @@ chelp.set10=Marque esta caixa se voc\u00EA quiser que o OpenOLAT seja escondido chelp.set11=Marque esta caixa se o m\u00F3dulo SCORM deve fechar automaticamente quando terminar, voltando o participante, ao curso. chelp.set12=Se esta op\u00E7\u00E3o estiver marcada, a pontua\u00E7\u00E3o j\u00E1 alcan\u00E7ada n\u00E3o ser\u00E1 reduzida em outras tentativas. chelp.set13=Atrav\u00E9s do menu, o n\u00FAmero de tentativas dispon\u00EDveis pode ser limitado. +chelp.set14=Marque esta op\u00E7\u00E3o se o OpenOLAT tiver problemas ao exibir o conte\u00FAdo SCORM. Se este modo de compatibilidade for ativado, voc\u00EA precisa configurar manualmente a altura da janela. chelp.set2=Determine se ele dever\u00E1 ser poss\u00EDvel navegar atrav\u00E9s dos bot\u00F5es Voltar e Avan\u00E7ar no seu conte\u00FAdo SCORM. chelp.set3=Atrav\u00E9s do menu suspenso, voc\u00EA pode determinar a altura da p\u00E1ginas SCORM. chelp.set4=Voc\u00EA tem a possibilidade de configur\u00E1-los atrav\u00E9s $\:chelp.auto para a respectiva altura de janela ou a um determinado valor de sua escolha. @@ -69,6 +70,8 @@ pane.tab.cpconfig=M\u00F3dulo did\u00E1tico passed.no=N\u00E3o passou passed.yes=Passou passed.yourpassed=Status +rawcontent.height.error=Se "$\:rawcontent.label" est\u00E1 selecionado, voc\u00EA precisa especificar a altura da janela +rawcontent.label=Conte\u00FAdo bruto score.noscoreinfoyet=N\u00E3o h\u00E1 pontua\u00E7\u00E3o para este objeto SCORM pois n\u00E3o ocorreram tentativas. score.title=Pontos score.yourscore=pontua\u00E7\u00E3o atingida diff --git a/src/main/java/org/olat/course/nodes/tu/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/tu/_i18n/LocalStrings_pl.properties index 0b249a89d8bfd3da3412b294e1f3c7a0fd0c5f09..d90d1e5723766f070cb5bcda70d3cdbf8f8532e3 100644 --- a/src/main/java/org/olat/course/nodes/tu/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/course/nodes/tu/_i18n/LocalStrings_pl.properties @@ -32,7 +32,7 @@ command.show=Poka\u017C zawarto\u015B\u0107 edukacyjn\u0105 command.showpopup=Poka\u017C zawarto\u015B\u0107 edukacyjn\u0105 w nowym oknie condition.accessibility.title=Dost\u0119p description.label=Konfiguruj spos\u00F3b wy\u015Bwietlania -description.preamble=Zdecyduj jak Tw\u00F3j materia\u0142 powinien by\u0107 prezentowany.<br /><br />The contents' security level drops top down as the acceptability of certain design elements (frames, CSS, Javascript u.\u00E4.) increases. +description.preamble=Zdecyduj jak Tw\u00F3j materia\u0142 powinien by\u0107 prezentowany.<br /><br />Pami\u0119taj, \u017Ce poziom bezpiecze\u0144stwo spada wraz z u\u017Cyciem pewnych element\u00F3w strony (takich jak ramki, CSS, Javascript, etc.). error.hostmissing.long=Zewn\u0119trzna strona "{0}" wymaga skonfigurowania hosta w zak\u0142adce "Zewn\u0119trzny zas\u00F3b". error.hostmissing.short=Nie zdefiniowano hosta dla "{0}". form.legende.mandatory=Obowi\u0105zkowe pola diff --git a/src/main/java/org/olat/course/nodes/tu/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/tu/_i18n/LocalStrings_pt_BR.properties index 7668212fee7e9dacf10b0ea50d17316e2172cbcc..22a020722b5d8625f2b639fd2324dd302be37687 100644 --- a/src/main/java/org/olat/course/nodes/tu/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/nodes/tu/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Tue Apr 03 14:01:13 CEST 2012 +#Wed Nov 07 19:10:53 CET 2012 TUConfigForm.invalidurl=Favor inserir uma URL v\u00E1lida. TUConfigForm.pass=Senha TUConfigForm.protected=P\u00E1gina controlada por senha @@ -46,3 +46,4 @@ option.tunnel.iframe.label=<b>Encaixado (fonte oculta)</b> option.tunnel.inline.label=<b>Integrado completamente</b> pane.tab.accessibility=Acesso pane.tab.tuconfig=Recurso externo +preview=Amostra diff --git a/src/main/java/org/olat/course/nodes/vitero/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/vitero/_i18n/LocalStrings_pl.properties new file mode 100644 index 0000000000000000000000000000000000000000..5511e4e81cacc8c445b3deb086b28c2d8102e33c --- /dev/null +++ b/src/main/java/org/olat/course/nodes/vitero/_i18n/LocalStrings_pl.properties @@ -0,0 +1 @@ +pane.tab.accessibility=Dost\u0119p diff --git a/src/main/java/org/olat/course/nodes/wiki/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/wiki/_i18n/LocalStrings_pl.properties index 0e3048888a90f7535d06b5adcf0e2b5af74c574d..07cb202af7cbca5880709d92aa892f0cacace36c 100644 --- a/src/main/java/org/olat/course/nodes/wiki/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/course/nodes/wiki/_i18n/LocalStrings_pl.properties @@ -54,7 +54,7 @@ chelp.wiki2=Kliknij przycisk $\:chelp.chooseWiki by wybra\u0107 $\:chelp.wiki z chelp.wiki3=Je\u015Bli juz doda\u0142e\u015B Wiki $\:chelp.wiki, jego nazwa pojawi si\u0119 w polu z przyciskiem $\:chelp.prevWiki po prawej stronie u g\u00F3ry. chelp.wiki4=Masz teraz mo\u017Cliwo\u015B\u0107 wyboru innego Wiki z u\u017Cyciem przycisku $\:chelp.chanWiki . chosenwiki=Wybrany portal Wiki -command.change=Mie\u0144 portal Wiki +command.change=Zmie\u0144 portal Wiki command.choose=Wybierz portal Wiki command.close=Zamknij widok command.create=Wybierz, utw\u00F3rz lub zaimportuj Wiki diff --git a/src/main/java/org/olat/course/repository/CreateNewCourseController.java b/src/main/java/org/olat/course/repository/CreateNewCourseController.java index bddafe838a9832d3494ffb7198e1becec2f20502..509adbbc6e9f739ddbcdf525754207c3103acea5 100644 --- a/src/main/java/org/olat/course/repository/CreateNewCourseController.java +++ b/src/main/java/org/olat/course/repository/CreateNewCourseController.java @@ -25,6 +25,9 @@ package org.olat.course.repository; +import java.io.File; +import java.util.UUID; + import org.olat.basesecurity.BaseSecurity; import org.olat.basesecurity.BaseSecurityManager; import org.olat.basesecurity.Constants; @@ -34,10 +37,14 @@ import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; +import org.olat.core.util.CodeHelper; import org.olat.core.util.Formatter; import org.olat.course.CourseFactory; import org.olat.course.CourseModule; import org.olat.course.ICourse; +import org.olat.course.export.CourseEnvironmentMapper; +import org.olat.course.groupsandrights.CourseGroupManager; +import org.olat.course.groupsandrights.PersistingCourseGroupManager; import org.olat.course.nodes.CourseNode; import org.olat.course.tree.CourseEditorTreeNode; import org.olat.repository.RepositoryEntry; @@ -144,7 +151,26 @@ public class CreateNewCourseController extends BasicController implements IAddCo CourseFactory.saveCourse(course.getResourceableId()); CourseFactory.closeCourseEditSession(course.getResourceableId(), true); } - + + @Override + public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) { + ICourse sourceCourse = CourseFactory.loadCourse(sourceEntry.getOlatResource().getResourceableId()); + CourseGroupManager sourceCgm = sourceCourse.getCourseEnvironment().getCourseGroupManager(); + CourseEnvironmentMapper env = PersistingCourseGroupManager.getInstance(sourceCourse).getBusinessGroupEnvironment(); + + File fExportDir = new File(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString()); + fExportDir.mkdirs(); + sourceCgm.exportCourseBusinessGroups(fExportDir, env, false); + + course = CourseFactory.loadCourse(newEntry.getOlatResource().getResourceableId()); + CourseGroupManager cgm = course.getCourseEnvironment().getCourseGroupManager(); + // import groups + CourseEnvironmentMapper envMapper = cgm.importCourseBusinessGroups(fExportDir); + //upgrade to the current version of the course + course = CourseFactory.loadCourse(cgm.getCourseResource()); + course.postImport(envMapper); + } + /** * @see org.olat.core.gui.control.DefaultController#doDispose(boolean) */ diff --git a/src/main/java/org/olat/course/repository/ImportCourseController.java b/src/main/java/org/olat/course/repository/ImportCourseController.java index 02bd32174ed66bc87683f1fe2a338dead69e2887..da68f12b1b78fab792a769b4f73166af94e18823 100644 --- a/src/main/java/org/olat/course/repository/ImportCourseController.java +++ b/src/main/java/org/olat/course/repository/ImportCourseController.java @@ -35,7 +35,6 @@ import org.olat.basesecurity.BaseSecurity; import org.olat.basesecurity.BaseSecurityManager; import org.olat.basesecurity.Constants; import org.olat.commons.file.filechooser.FileChooserController; -import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.panel.Panel; @@ -46,7 +45,6 @@ import org.olat.core.gui.control.controller.BasicController; import org.olat.core.util.FileUtils; import org.olat.core.util.Formatter; import org.olat.core.util.vfs.LocalFileImpl; -import org.olat.core.util.vfs.LocalImpl; import org.olat.core.util.vfs.QuotaManager; import org.olat.core.util.vfs.VFSLeaf; import org.olat.core.util.vfs.filters.VFSItemFileTypeFilter; @@ -161,6 +159,11 @@ public class ImportCourseController extends BasicController implements IAddContr CourseFactory.saveCourse(course.getResourceableId()); CourseFactory.closeCourseEditSession(course.getResourceableId(),true); } + + @Override + public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) { + // + } /** * @see org.olat.repository.controllers.IAddController#transactionAborted() diff --git a/src/main/java/org/olat/course/repository/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/repository/_i18n/LocalStrings_pt_BR.properties index 575f6ae456bc36a8cfc54ffd35aef6d332896ba4..cc0bcf4682b971b3fb067456f7972143c8ca1ae1 100644 --- a/src/main/java/org/olat/course/repository/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/repository/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Thu Sep 08 16:42:37 CEST 2011 +#Wed Nov 07 19:11:06 CET 2012 command.linkresource="Linkar" recurso did\u00E1tico dc.id=ID do curso dc.longtitle=T\u00EDtulo do curso @@ -29,6 +29,7 @@ import.suc.continue=Completar importa\u00E7\u00E3o do curso import.suc.intro=Este curso foi importado com sucesso. Voc\u00EA ser\u00E1 redirecionado para a pasta de recursos did\u00E1tico para preencher detalhes e completar a importa\u00E7\u00E3o do curso. import.suc.title=Curso importado com sucesso import.title=Importa\u00E7\u00E3o das refer\u00EAncias +import.yesmode.action=Importar todos os recursos sem perguntar node.blog=Ajuda a respeito de autores de t\u00F3picos node.cp=M\u00F3dulo IMS-CP node.ep=Modelo/Template de Portfolio diff --git a/src/main/java/org/olat/course/run/RunMainController.java b/src/main/java/org/olat/course/run/RunMainController.java index aedd952d14360e935013e5bb32a0edf46a79f1d9..6a141c7ac4b04f239eefac05c1f8f6ad83192451 100644 --- a/src/main/java/org/olat/course/run/RunMainController.java +++ b/src/main/java/org/olat/course/run/RunMainController.java @@ -52,6 +52,7 @@ import org.olat.core.gui.components.tree.TreeEvent; import org.olat.core.gui.components.tree.TreeModel; import org.olat.core.gui.components.tree.TreeNode; import org.olat.core.gui.components.velocity.VelocityContainer; +import org.olat.core.gui.control.ConfigurationChangedListener; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; @@ -925,14 +926,14 @@ public class RunMainController extends MainLayoutBasicController implements Gene // course to present him/her a nice view when // he/she closes the editor to return to the run main (this controller) } else { - dispose(); + doDisposeAfterEvent(); } } else if (event instanceof OLATResourceableJustBeforeDeletedEvent) { OLATResourceableJustBeforeDeletedEvent ojde = (OLATResourceableJustBeforeDeletedEvent) event; // make sure it is our course (actually not needed till now, since we // registered only to one event, but good style. if (ojde.targetEquals(course, true)) { - dispose(); + doDisposeAfterEvent(); } } else if (event instanceof AssessmentChangedEvent) { AssessmentChangedEvent ace = (AssessmentChangedEvent) event; @@ -995,16 +996,23 @@ public class RunMainController extends MainLayoutBasicController implements Gene } } else if (event instanceof CourseConfigEvent) { - dispose(); - + doDisposeAfterEvent(); } else if (event instanceof EntryChangedEvent && ((EntryChangedEvent)event).getChange()!=EntryChangedEvent.MODIFIED_AT_PUBLISH) { //courseRepositoryEntry changed (e.g. fired at course access rule change) EntryChangedEvent repoEvent = (EntryChangedEvent) event; if (courseRepositoryEntry.getKey().equals(repoEvent.getChangedEntryKey()) && repoEvent.getChange() == EntryChangedEvent.MODIFIED) { - dispose(); + doDisposeAfterEvent(); } } } + + private void doDisposeAfterEvent() { + if(currentNodeController instanceof ConfigurationChangedListener) { + //give to opportunity to close popups ... + ((ConfigurationChangedListener)currentNodeController).configurationChanged(); + } + dispose(); + } /** diff --git a/src/main/java/org/olat/course/run/preview/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/run/preview/_i18n/LocalStrings_pl.properties index 1bb8830aac164fc431fd66341b3d9b47922b1f61..db63c1fc5d38ba49ba0f347577a6bc77798f7b4a 100644 --- a/src/main/java/org/olat/course/run/preview/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/course/run/preview/_i18n/LocalStrings_pl.properties @@ -28,7 +28,7 @@ details.longtitle=D\u0142ugi tytu\u0142 details.role=Rodzaj uczestnika details.time=Data podgl\u0105du details.title=Kr\u00F3tki tytu\u0142 -details.toggle=Toggle information on/off +details.toggle=Poka\u017C/ukryj informacje details.visibility=Regu\u0142a widoczno\u015Bci details.visibility.none=<i>brak</i> form.area=Obszar edukacyjny diff --git a/src/main/java/org/olat/group/manager/BusinessGroupDAO.java b/src/main/java/org/olat/group/manager/BusinessGroupDAO.java index 67c85d7c4b2975e7c2f286ef2d7cc6116914ee16..7233b9e7dd7741f0951d226bbb573e404d3f7c59 100644 --- a/src/main/java/org/olat/group/manager/BusinessGroupDAO.java +++ b/src/main/java/org/olat/group/manager/BusinessGroupDAO.java @@ -390,29 +390,6 @@ public class BusinessGroupDAO { return groups; } - public List<Long> toGroupKeys(String groupNames, OLATResource resource) { - if(!StringHelper.containsNonWhitespace(groupNames)) return Collections.emptyList(); - - String[] groupNameArr = groupNames.split(","); - List<String> names = new ArrayList<String>(); - for(String name:groupNameArr) { - names.add(name.trim()); - } - - if(names.isEmpty()) return Collections.emptyList(); - - StringBuilder sb = new StringBuilder(); - sb.append("select bgs.key from ").append(BusinessGroupImpl.class.getName()).append(" as bgs ") - .append(" where bgs.resource.key =:resourceKey and bgs.name in (:names)"); - - List<Long> keys = dbInstance.getCurrentEntityManager().createQuery(sb.toString(), Long.class) - .setParameter("resourceKey", resource.getKey()) - .setParameter("names", names) - .setHint("org.hibernate.cacheable", Boolean.TRUE) - .getResultList(); - return keys; - } - public int countBusinessGroups(SearchBusinessGroupParams params, OLATResource resource) { TypedQuery<Number> query = createFindDBQuery(params, resource, Number.class) .setHint("org.hibernate.cacheable", Boolean.TRUE); diff --git a/src/main/java/org/olat/group/manager/BusinessGroupRelationDAO.java b/src/main/java/org/olat/group/manager/BusinessGroupRelationDAO.java index cac9e3a47f86677ad443fe2b02ed401b4e8a5bba..81b8619f70df84d82b5b1f9f5746c8f4bf677faf 100644 --- a/src/main/java/org/olat/group/manager/BusinessGroupRelationDAO.java +++ b/src/main/java/org/olat/group/manager/BusinessGroupRelationDAO.java @@ -31,6 +31,7 @@ import org.olat.basesecurity.SecurityGroupMembershipImpl; import org.olat.core.commons.persistence.DB; import org.olat.core.commons.persistence.PersistenceHelper; import org.olat.core.id.Identity; +import org.olat.core.util.StringHelper; import org.olat.group.BusinessGroup; import org.olat.group.BusinessGroupImpl; import org.olat.group.BusinessGroupShort; @@ -322,6 +323,30 @@ public class BusinessGroupRelationDAO { return query.getResultList(); } + public List<Long> toGroupKeys(String groupNames, OLATResource resource) { + if(!StringHelper.containsNonWhitespace(groupNames)) return Collections.emptyList(); + + String[] groupNameArr = groupNames.split(","); + List<String> names = new ArrayList<String>(); + for(String name:groupNameArr) { + names.add(name.trim()); + } + + if(names.isEmpty()) return Collections.emptyList(); + + StringBuilder sb = new StringBuilder(); + sb.append("select rel.group.key from ").append(BGResourceRelation.class.getName()).append(" as rel ") + .append(" inner join rel.group bgs") + .append(" where rel.resource.key=:resourceKey and bgs.name in (:names)"); + + List<Long> keys = dbInstance.getCurrentEntityManager().createQuery(sb.toString(), Long.class) + .setParameter("resourceKey", resource.getKey()) + .setParameter("names", names) + .setHint("org.hibernate.cacheable", Boolean.TRUE) + .getResultList(); + return keys; + } + private boolean and(StringBuilder sb, boolean and) { if(and) sb.append(" and "); else sb.append(" where "); diff --git a/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java b/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java index 3279558b106713e8a9c1f9d7011c4a9a0b858eb3..f3511e33713ca3d6fcaaedfef688afdf645418b9 100644 --- a/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java +++ b/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java @@ -721,7 +721,7 @@ public class BusinessGroupServiceImpl implements BusinessGroupService, UserDataD @Override @Transactional(readOnly=true) public List<Long> toGroupKeys(String groupNames, OLATResource resource) { - return businessGroupDAO.toGroupKeys(groupNames, resource); + return businessGroupRelationDAO.toGroupKeys(groupNames, resource); } @Override diff --git a/src/main/java/org/olat/group/ui/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/group/ui/_i18n/LocalStrings_it.properties index df0ded8488ad8cf23ebe6b6f38e2f6e66806eef3..bd228e81471adae28eac9a2f895c99389696a468 100644 --- a/src/main/java/org/olat/group/ui/_i18n/LocalStrings_it.properties +++ b/src/main/java/org/olat/group/ui/_i18n/LocalStrings_it.properties @@ -1,61 +1,84 @@ -#Mon Aug 30 13:20:21 CEST 2010 +#Mon Oct 29 23:51:19 CET 2012 BuddyGroup=Gruppo di lavoro LearningGroup=Gruppo di studio RightGroup=Gruppo con diritti action.choose=Seleziona +admin.menu.title=Gruppo +admin.menu.title.alt=Configurazione gruppo +archive.areas=Aree di studio +archive.coursename=Nome del corso +archive.date=Lista di gruppo creata in data +archive.group.context.description=Descrizione del contesto +archive.group.context.name=Nome del contesto +archive.group.context.type=Tipo di contesto +archive.group.description=Descrizione del gruppo +archive.group.name=Nome del gruppo +archive.group.type=Tipo di gruppo +archive.groups=Gruppi +archive.header.owners=Proprietari +archive.header.partipiciant=Membri +archive.header.waitinggroup=Lista d'attesa +archive.interninfo=Informazione interna +archive.title=Gestione del gruppo +author.allow.create=Autore +bgcopywizard.copyform.owners=Tutori del gruppo +chkBox.show.owners=Membri vedono tutori +cmd.group.create=Nuovo gruppo di studio +cmd.owners.message=E-mail ai tutori create.form.bulkmode.areanames=Creazione in massa di aree configurate identicamente create.form.bulkmode.bgnames=Creazione in massa di gruppi configurati identicamente +create.form.businesspath=Collegamento a questo gruppo create.form.enableAutoCloseRanks=Avanzamento automatico create.form.enableWaitinglist=Lista d'attesa create.form.error.enableAutoCloseRanks=L'avanzamento automatico pu\u00F2 essere attivato solo se ha attivato la lista d'attesa. create.form.error.enableWaitinglist=La lista d'attesa \u00E8 attivabile solo se il numero dei partecipanti \u00E8 stato limitato. create.form.error.illegalName=Virgole e virgolette non sono ammesse nei nomi di gruppi. +create.form.error.illegalNames=$\:create.form.error.illegalName . I seguenti nomi di gruppo non sono validi\: {0} create.form.error.nameTooLong=I nomi dei gruppi non possono contenere pi\u00F9 di 100 segni create.form.error.numberOrNull=Immettere solo cifre o non compilare per "nessun limite". +create.form.groupcard=Biglietto da visita create.form.message.example.group=(Esempio\: rosso,verde,blu) +create.form.title=Creare un nuovo gruppo di studio create.form.title.bgname=Nome del gruppo create.form.title.bgnames=Nome del gruppo create.form.title.description=Descrizione create.form.title.max=Numero previsto <br>di partecipanti create.form.title.min=Numero minimo <br>di partecipanti create.form.title.minmax.example=In caso di non limitazione\: lasciare vuoto +default.context=Creazione automatica nel corso error.group.name.exists=Questo nome di gruppo \u00E8 gi\u00E0 in uso in questo contesto\: scelga un altro nome, p.f. +fieldset.legend.groupowners=Tutori +fieldset.legend.grouppartips=Partecipanti form.error.disableNonEmptyWaitingList=La lista d'attesa non \u00E8 vuota. Per disattivare la lista d'attesa occorre disiscrivere tutti i partecipanti. -group.type=Gruppo di lavoro +group.deleted=Il gruppo \u00E8 stato eliminato. +group.name=Nome gruppo +group.not.existing=Il gruppo desiderato non esiste pi\u00F9. +group.type=Gruppo di studio +grouplist.title=Lista di tutti i gruppi di studio nel corso +grouprun.details.title=Informazioni sul gruppo di studio groupsPortlet.description=Accesso rapido ai gruppi di studio, di lavoro e con diritti pi\u00F9 importanti groupsPortlet.no_member=Lei \u00E8 stato disiscritta/o da questo gruppo o il gruppo \u00E8 stato eliminato. groupsPortlet.nogroups=Lei non figura in alcun gruppo groupsPortlet.showAll=Mostrare tutti groupsPortlet.title=I miei gruppi -notification.mail.error=Non \u00E8 stato possibile inviare la e-mail. Informi l'utente personalmente, p.f. -notification.mail.self.error=Non \u00E8 stato possibile inviarLe la e-mail. -warn.foldernotavailable=La cartella \u00E8 momentaneamente disattivata e non pu\u00F2 essere mostrata. -warn.forumnotavailable=Il forum \u00E8 momentaneamente disattivato e non pu\u00F2 essere mostrato. - - -bgcopywizard.copyform.owners=Tutori del gruppo -chkBox.show.owners=Membri vedono tutori -cmd.group.create=Nuovo gruppo di studio -cmd.owners.message=E-mail ai tutori -create.form.title=Creare un nuovo gruppo di studio -fieldset.legend.groupowners=Tutori -fieldset.legend.grouppartips=Partecipanti -group.type=Gruppo di studio -grouplist.title=Lista di tutti i gruppi di studio nel corso -grouprun.details.title=Informazioni sul gruppo di studio menu.allgroups=Tutti i gruppi di studio menu.allgroups.alt=Elenco di tutti i gruppi di studio. menu.index=Gestione dei gruppi menu.index.alt=Gestisca i gruppi di studio. +module.admin.allow.create=Pu\u00F2 creare il gruppo +module.admin.desc=Specificare chi pu\u00F2 creare gruppi. +module.admin.title=Gestione dei gruppi newgroup.title=Creazione di un nuovo gruppo di studio. notification.mail.added.body=*** Questo \u00E8 un messaggio generato automaticamente. Non risponda al messaggio, p.f. *** \n\n\u00C8 appena stata/o invitata/o da {0} {1} ({3}) in un gruppo di studio\: \n\nNome del gruppo\: $groupname\nDescrizione\: $groupdescription\n\nPer qualsiasi questione contatti {0} {1} ({2}), p.f. \n\nQuesto gruppo di studio viene utilizzato nelle risorse didattiche seguenti\:\n\n$courselist notification.mail.added.self.body=*** Questo \u00E8 un messaggio generato automaticamente. Non risponda al messaggio, p.f. *** \n\nSi \u00E8 appena iscritta/o in un gruppo di studio\: \n\nNome del gruppo\: $groupname\nDescrizione\: $groupdescription\n\nQuesto gruppo di studio viene utilizzato nelle risorse didattiche seguenti\:\n\n$courselist notification.mail.added.self.subject=Gruppo di studio OLAT $groupname notification.mail.added.subject=Gruppo di studio OLAT $groupname +notification.mail.error=Non \u00E8 stato possibile inviare la e-mail. Informi l'utente personalmente, p.f. notification.mail.removed.body=*** Questo \u00E8 un messaggio generato automaticamente. Non risponda al messaggio, p.f. *** \r\n\r\n\u00C8 stata/o disiscritta/o da {0} {1} ({3}) da un gruppo di studio\: \r\n\r\nNome del gruppo\: $groupname\r\nDescrizione\: $groupdescription\r\n\r\nPer qualsiasi questione contatti {0} {1} ({2}), p.f. \r\n\r\nQuesto gruppo di studio \u00E8 stato utilizzato nelle risorse didattiche seguenti\:\r\n\r\n$courselist notification.mail.removed.self.body=*** Questo \u00E8 un messaggio generato automaticamente. Non risponda al messaggio, p.f. *** \n\nSi \u00E8 appena disiscritta/o da un gruppo di studio\: \n\nNome del gruppo\: $groupname\nDescrizione\: $groupdescription\n\nQuesto gruppo di studio \u00E8 stato utilizzato nelle risorse didattiche seguenti\:\n\n$courselist notification.mail.removed.self.subject=Gruppo di studio OLAT $groupname\: si \u00E8 disiscritta/o. notification.mail.removed.subject=Gruppo di studio OLAT $groupname\: \u00E8 stata/o disiscritta/o. +notification.mail.self.error=Non \u00E8 stato possibile inviarLe la e-mail. notification.mail.waitingList.added.body=*** Questo \u00E8 un messaggio generato automaticamente. Non risponda al messaggio, p.f. *** \r\n\r\nLei \u00E8 iscritta/o alla seguente lista d'attesa\: \r\n\r\nNome del gruppo\: $groupname\r\nDescrizione\: $groupdescription notification.mail.waitingList.added.subject=Gruppo di studio OLAT $groupname \: lista d'attesa. notification.mail.waitingList.removed.body=*** Questo \u00E8 un messaggio generato automaticamente. Non risponda al messaggio, p.f. *** \r\n\r\nSi \u00E8 appena disiscritta/o dalla lista d'attesa del seguente gruppo di studio\: \r\n\r\nNome del gruppo\: $groupname\r\nDescrizione\: $groupdescription @@ -69,6 +92,7 @@ owners.message.to=Tutti i tutori sendtochooser.form.chckbx.owners=Tutti i tutori sendtochooser.form.chckbx.partip=Tutti i partecipanti sendtochooser.form.chckbx.waitingList=Tutte le persone in lista d'attesa +user.allow.create=Studente userdetails.ownergroups.noGroups=Questo utente non \u00E8 tutore di alcun gruppo. userdetails.ownergroups.title=Gruppi con tutorato userlist.owners.noOwners=A nessun gruppo \u00E8 stato assegnato un tutore. @@ -76,24 +100,5 @@ userlist.owners.title=Tutori userlist.participants.title=Partecipanti userlist.title=Lista di tutti i membri nei gruppi di studio userlist.waitinglist.title=Lista d'attesa - - - -archive.areas=Aree di studio -archive.coursename=Nome del corso -archive.date=Lista di gruppo creata in data -archive.group.context.description=Descrizione del contesto -archive.group.context.name=Nome del contesto -archive.group.context.type=Tipo di contesto -archive.group.description=Descrizione del gruppo -archive.group.name=Nome del gruppo -archive.group.type=Tipo di gruppo -archive.groups=Gruppi -archive.header.owners=Proprietari -archive.header.partipiciant=Membri -archive.header.waitinggroup=Lista d'attesa -archive.interninfo=Informazione interna -archive.title=Gestione del gruppo -default.context=Creazione automatica nel corso -group.name=Nome gruppo -group.not.existing=Il gruppo desiderato non esiste pi\u00F9. +warn.foldernotavailable=La cartella \u00E8 momentaneamente disattivata e non pu\u00F2 essere mostrata. +warn.forumnotavailable=Il forum \u00E8 momentaneamente disattivato e non pu\u00F2 essere mostrato. diff --git a/src/main/java/org/olat/group/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/group/ui/_i18n/LocalStrings_pt_BR.properties index c400c351b39a3ef28d4108f839a7a69b15e66fbe..1fd7bf48c5f38bb60df571a181962ac93a357dbb 100644 --- a/src/main/java/org/olat/group/ui/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/group/ui/_i18n/LocalStrings_pt_BR.properties @@ -1,8 +1,30 @@ -#Tue Apr 03 15:01:16 CEST 2012 +#Tue Nov 06 12:41:17 CET 2012 BuddyGroup=Grupo de projeto LearningGroup=Grupo de estudo RightGroup=Grupo de direitos action.choose=Selecionar +admin.menu.title=Grupo +admin.menu.title.alt=Configura\u00E7\u00E3o do Grupo +archive.areas=\u00C1reas de ensino +archive.coursename=Nome do curso +archive.date=Lista de grupos criada em +archive.group.context.description=Descri\u00E7\u00E3o de contexto +archive.group.context.name=Nome de contexto +archive.group.context.type=Tipo de contexto +archive.group.description=Descri\u00E7\u00E3o do grupo +archive.group.name=Nome do grupo +archive.group.type=Tipo do grupo +archive.groups=Grupos +archive.header.owners=Propriet\u00E1rios +archive.header.partipiciant=Membros +archive.header.waitinggroup=Lista de espera +archive.interninfo=Informa\u00E7\u00E3o interna +archive.title=Gerenciamento do grupo +author.allow.create=Autor +bgcopywizard.copyform.owners=Tutores do grupo +chkBox.show.owners=Membros podem ver tutores +cmd.group.create=Novo grupo de estudo +cmd.owners.message=E-mail aos tutores create.form.bulkmode.areanames=Volume de produ\u00E7\u00E3o de \u00E1reas configurados iguais create.form.bulkmode.bgnames=Volume de produ\u00E7\u00E3o de grupos configurados iguais create.form.businesspath=Link para esse grupo @@ -14,52 +36,49 @@ create.form.error.illegalName=V\u00EDrgulas ou aspas n\u00E3o s\u00E3o permitida create.form.error.illegalNames=$\:create.form.error.illegalName. Os nomes dos grupos seguintes s\u00E3o inv\u00E1lidos\: {0} create.form.error.nameTooLong=Nomes de grupo n\u00E3o devem conter mais de 100 caracteres create.form.error.numberOrNull=Apenas n\u00FAmeros ou campo vazio para "sem restri\u00E7\u00E3o" +create.form.groupcard=Cart\u00E3o de Visitas create.form.message.example.group=Vermelho, Verde, Azul +create.form.title=Criar novo grupo de estudo create.form.title.bgname=Nome do grupo create.form.title.bgnames=Todos os nomes dos grupos(serparado por v\u00EDrgula) create.form.title.description=Descri\u00E7\u00E3o create.form.title.max=N\u00FAmero m\u00E1ximo de <br>participantes create.form.title.min=Quorum <br>participantes create.form.title.minmax.example=Deixar vazio se "sem restri\u00E7\u00E3o" +default.context=Criado automaticamente no curso error.group.name.exists=Este nome de grupo j\u00E1 est\u00E1 sendo usado neste contexto, favor selecionar outro. +fieldset.legend.groupowners=Tutores +fieldset.legend.grouppartips=Participantes form.error.disableNonEmptyWaitingList=Lista de espera cont\u00E9m dados. Para desativar esta lista, voc\u00EA tem que excluir todos os participantes primeiro. group.deleted=O grupo foi exclu\u00EDdo -group.type=Grupo de projeto +group.name=Nome do Grupo +group.not.existing=O grupo pretendido n\u00E3o existe mais. +group.type=Grupo de estudo +grouplist.title=Lista de todos grupos de estudo neste curso +grouprun.details.title=Informa\u00E7\u00E3o sobre grupos de estudo groupsPortlet.description=Acesso r\u00E1pido aos grupos mais importantes de estudo, direitos e projeto groupsPortlet.no_member=Voc\u00EA foi removido como membro deste grupo ou o grupo foi deletado. groupsPortlet.nogroups=Voc\u00EA n\u00E3o \u00E9 membro de nenhum grupo groupsPortlet.showAll=Exibir tudo groupsPortlet.title=Meus grupos -notification.mail.error=O e-mail n\u00E3o p\u00F4de ser enviado. Favor notificar este usu\u00E1rio pessoalmente. -notification.mail.self.error=O e-mail n\u00E3o pode ser enviado. -warn.foldernotavailable=Esta pasta n\u00E3o est\u00E1 ativada atualmente e n\u00E3o pode ser exibida. -warn.forumnotavailable=O f\u00F3rum n\u00E3o est\u00E1 ativado atualmente e n\u00E3o pode ser exibido. - - - -bgcopywizard.copyform.owners=Tutores do grupo -chkBox.show.owners=Membros podem ver tutores -cmd.group.create=Novo grupo de estudo -cmd.owners.message=E-mail aos tutores -create.form.title=Criar novo grupo de estudo -fieldset.legend.groupowners=Tutores -fieldset.legend.grouppartips=Participantes -group.type=Grupo de estudo -grouplist.title=Lista de todos grupos de estudo neste curso -grouprun.details.title=Informa\u00E7\u00E3o sobre grupos de estudo menu.allgroups=Todos grupos de estudo menu.allgroups.alt=Listar todos grupos de estudo menu.index=Grupo gestor menu.index.alt=Administrar grupos de estudo +module.admin.allow.create=Permitir criar grupo +module.admin.desc=Especifique aqui quem pode criar grupos. +module.admin.title=Gest\u00E3o de grupos newgroup.title=Criar novo grupo de estudo notification.mail.added.body=*** Esta \u00E9 uma mensagem automatica, n\u00E3o responder *** \n\nVoc\u00EA foi convidado a um grupo de estudo pelo {0} {1} ({3})\: \n\nNome do grupo\: $groupname\nDescri\u00E7\u00E3o\: $groupdescription\n\nPara quest\u00F5es, favor contactar {0} {1} ({2}). \n\nEste grupo de estudo \u00E9 usado nos seguintes recursos did\u00E1ticos\:\n\n$courselist notification.mail.added.self.body=*** Esta \u00E9 uma mensagem automatica, n\u00E3o responder *** \n\nVoc\u00EA acabou de entrar em um grupo de estudo\: \n\nNome do grupo\: $groupname\nDescri\u00E7\u00E3o\: $groupdescription\n\nEste grupo de estudo ser\u00E1 usado nos seguintes recursos did\u00E1ticos\:\n\n$courselist notification.mail.added.self.subject=Grupo de estudo OLAT $groupname notification.mail.added.subject=Grupo de estudo OLAT $groupname +notification.mail.error=O e-mail n\u00E3o p\u00F4de ser enviado. Favor notificar este usu\u00E1rio pessoalmente. notification.mail.removed.body=*** Esta \u00E9 uma mensagem automatica, n\u00E3o responder *** \n\nVoc\u00EA saiu de um grupo de estudo pelo {0} {1} ({3})\: \n\nNome do grupo\:\: $groupname\nDescri\u00E7\u00E3o\: $groupdescription\n\nPara quest\u00F5es, favor contactar {0} {1} ({2}).\n\nEste grupo de estudo foi usado nos seguintes recursos did\u00E1ticos\:\n\n$courselist notification.mail.removed.self.body=*** Esta \u00E9 uma mensagem automatica, n\u00E3o responder *** \n\nVoc\u00EA acabou de sair de um grupo de estudo\: \n\nNome do grupo\: $groupname\nDescri\u00E7\u00E3o\: $groupdescription\n\nEste grupo de estudo foi usado nos seguintes recursos did\u00E1ticos\:\n\n$courselist notification.mail.removed.self.subject=Grupo de estudo OLAT $groupname\: Voc\u00EA foi retirado. notification.mail.removed.subject=Grupo de estudo OLAT $groupname\: Voc\u00EA saiu. +notification.mail.self.error=O e-mail n\u00E3o pode ser enviado. notification.mail.waitingList.added.body=*** Esta \u00E9 uma mensagem automatica, n\u00E3o responder *** \n\n Voce est\u00E1 na lista de espera do grupo de estudo\: \n\nGrupo\: $groupname\nDescr\u00E7\u00E3o\: $groupdescription\n\n notification.mail.waitingList.added.subject=Lista de espera do grupo de estudo $groupname do OLAT notification.mail.waitingList.removed.body=*** Esta \u00E9 uma mensagem automatica, n\u00E3o responder *** \n\n Voce n\u00E3o est\u00E1 mais na lista de espera do grupo de estudo\: \n\nGrupo\: $groupname\nDescri\u00E7\u00E3o\: $groupdescription\n\n @@ -73,6 +92,7 @@ owners.message.to=Todos os tutores sendtochooser.form.chckbx.owners=Todos tutores sendtochooser.form.chckbx.partip=Todos participantes sendtochooser.form.chckbx.waitingList=Todas pessoas na lista de espera +user.allow.create=Aprendiz userdetails.ownergroups.noGroups=Este usu\u00E1rio n\u00E3o \u00E9 tutor de nenhum grupo userdetails.ownergroups.title=Grupos com instrutor userlist.owners.noOwners=Nenhum destes grupos tem tutores @@ -80,24 +100,5 @@ userlist.owners.title=Tutores userlist.participants.title=Participantes userlist.title=Lista de todos os membros em grupos de estudo userlist.waitinglist.title=Lista de espera - - - -archive.areas=\u00C1reas de ensino -archive.coursename=Nome do curso -archive.date=Lista de grupos criada em -archive.group.context.description=Descri\u00E7\u00E3o de contexto -archive.group.context.name=Nome de contexto -archive.group.context.type=Tipo de contexto -archive.group.description=Descri\u00E7\u00E3o do grupo -archive.group.name=Nome do grupo -archive.group.type=Tipo do grupo -archive.groups=Grupos -archive.header.owners=Propriet\u00E1rios -archive.header.partipiciant=Membros -archive.header.waitinggroup=Lista de espera -archive.interninfo=Informa\u00E7\u00E3o interna -archive.title=Gerenciamento do grupo -default.context=Criado automaticamente no curso -group.name=Nome do Grupo -group.not.existing=O grupo pretendido n\u00E3o existe mais. +warn.foldernotavailable=Esta pasta n\u00E3o est\u00E1 ativada atualmente e n\u00E3o pode ser exibida. +warn.forumnotavailable=O f\u00F3rum n\u00E3o est\u00E1 ativado atualmente e n\u00E3o pode ser exibido. diff --git a/src/main/java/org/olat/group/ui/area/_chelp/grp-Area-des.html b/src/main/java/org/olat/group/ui/area/_chelp/grp-Area-des.html index 7e33ca43141447d9e76da922a95785385ac53e06..2398ee977ad82f5289621b70d56c4150a42d22d6 100644 --- a/src/main/java/org/olat/group/ui/area/_chelp/grp-Area-des.html +++ b/src/main/java/org/olat/group/ui/area/_chelp/grp-Area-des.html @@ -1,6 +1,4 @@ -<p> - $r.translate("chelp.desc.area.intro") -</p> +<p>$r.translate("chelp.desc.area.intro")</p> <p> <b>$r.translateWithPackage("org.olat.group.ui.area","area.form.name"):</b> $r.translate("chelp.desc.area1") diff --git a/src/main/java/org/olat/group/ui/area/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/group/ui/area/_i18n/LocalStrings_de.properties index f4ca3522d2d1f76b748701f41df3004bb2ef7a09..768a445575b74d48487a11578a7b2e201d0e2ce0 100644 --- a/src/main/java/org/olat/group/ui/area/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/group/ui/area/_i18n/LocalStrings_de.properties @@ -5,10 +5,10 @@ area.form.error.illegalName=Kommas und Anf\u00FChrungszeichen sind nicht erlaubt area.form.name=Name des Lernbereichs area.form.name.example=(Beispiel: Rot,Grün,Blau) chelp.desc.allChars=Der Name kann beliebig sein und darf alle Sonderzeichen und Ziffern enthalten. -chelp.desc.area.intro=Lernbereiche werden verwendet um verschiedene Bereiche innerhalb eines Kurses auf einfache Weise Gruppen zuzuordnen. Der Vorteil gegenüber der expliziten Auflistung aller relevanten Gruppen in den Zugangs- und Sichtbarkeitsbeschränkung ist die grössere Flexibilität und die einfachere Handhabung im Kurseditor. Werden neue Gruppenregeln im Kurs definiert, so muss dieser neu publiziert werden. Ist stattdessen eine Lernbereichsregel definiert, so kann die Teilnahme einer Gruppe in der Lernbereichsverwaltung definiert werden. Der Kurs muss hierfür nicht neu publisziert werden. +chelp.desc.area.intro=Lernbereiche werden verwendet um verschiedene Bereiche innerhalb eines Kurses auf einfache Weise Gruppen zuzuordnen. Der Vorteil gegenüber der expliziten Auflistung aller relevanten Gruppen in den Zugangs- und Sichtbarkeitsbeschränkung ist die grössere Flexibilität und die einfachere Handhabung im Kurseditor. Werden neue Gruppenregeln im Kurs definiert, so muss dieser neu publiziert werden. Ist stattdessen eine Lernbereichsregel definiert, so kann die Teilnahme einer Gruppe in der Lernbereichsverwaltung definiert werden. Der Kurs muss hierfür nicht neu publiziert werden. chelp.desc.area=Lernbereich chelp.desc.area1=Sie m\u00FCssen Ihren $\:chelp.desc.area mit einem Namen versehen. -chelp.desc.area2=Der Name des Bereichts erscheint in der \u00DCbersicht des Lernbereichs. +chelp.desc.area2=Der Name des Bereichs erscheint in der \u00DCbersicht des Lernbereichs. chelp.desc.area3=Optional k\u00F6nnen Sie dem $\:chelp.desc.area eine n\u00E4here Beschreibung geben. chelp.desc.area4=Sie erscheint in der \u00DCbersicht. chelp.grp-Area-des.title=Lernbereich: Beschreibung diff --git a/src/main/java/org/olat/group/ui/area/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/group/ui/area/_i18n/LocalStrings_en.properties index b92711d7c837948d675d67eec5d3917af289d987..b8d7cd86b1bdb2f477b0113409c86a01771997f0 100644 --- a/src/main/java/org/olat/group/ui/area/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/group/ui/area/_i18n/LocalStrings_en.properties @@ -6,12 +6,12 @@ area.form.name=Name of learning area area.form.name.example=(Example\: red, green, blue) chelp.desc.allChars=You can choose any name including symbols and numerals. chelp.desc.area=Learning area -chelp.desc.area.intro=Learning areas are used to grant access to different areas of the course to certain groups in a simple way. The advantage over the explicit listing of all relevant groups in the visibility and access conditions of course elements is the increase of flexibility and the simplified handling in the course editor. When adding a group to a group rule in the course editor, the course has to be published every time and the group has to be added to every course element that should follow this access rule. In contrast, when using a learning area instead, the changes in the course editor has to be made only once and assigning the groups to those learning areas is a simple task that does not require re-publishing of the course. -chelp.desc.area1=You have to provide your $\:chelp.desc.area with a name. +chelp.desc.area.intro=Learning areas are used to easily assign groups to different elements within a course. Instead of explicitly listing all relevant groups in the access and visibility rules, just add the learning area. If group access / visibility rules are added or modified, you need to republish the course. If, on the other hand, a learning area is edited by adding or removing groups, no access rule needs to be modified, and thus the course doesn't need to be published. +chelp.desc.area1=You have to provide your learning area with a name. chelp.desc.area2=The area's name appears in the overview of your learning area. -chelp.desc.area3=You can optionally provide your $\:chelp.desc.area with further details. +chelp.desc.area3=You can optionally provide your learning area with further details. chelp.desc.area4=It will appear on the overview page. -chelp.grp-Area-des.title=Describe learning area +chelp.grp-Area-des.title=Learning area: description error.area.name.exists=The name of this learning area is already used in the group management, please select another. fieldset.legend.details=Description of learning area fieldset.legend.groups=Assignment of learning groups to learning areas diff --git a/src/main/java/org/olat/group/ui/area/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/group/ui/area/_i18n/LocalStrings_it.properties index a6fca81417e2707d0cb824ccc6b19a9a3941e0bc..58a174e48107d004e477dd6675af1a84dc84bb9f 100644 --- a/src/main/java/org/olat/group/ui/area/_i18n/LocalStrings_it.properties +++ b/src/main/java/org/olat/group/ui/area/_i18n/LocalStrings_it.properties @@ -1,4 +1,4 @@ -#Tue Dec 21 18:58:42 CET 2010 +#Mon Oct 29 20:21:06 CET 2012 area.edit.title=Editazione dell'area di studio <i>{0}</i> area.form.description=Descrizione area.form.error.illegalName=Le virgole non sono ammesse @@ -6,6 +6,7 @@ area.form.name=Nome dell'area di studio area.form.name.example=(Esempio\: rosso,verde,blu) chelp.desc.allChars=Il nome pu\u00F2 essere arbitrario e pu\u00F2 contenere tutti i segni speciali e cifre. chelp.desc.area=Area di studio +chelp.desc.area.intro=Le aree di studio sono utilizzate per permettere l'accesso a differenti aree del corso a determinati gruppi in modo semplice. Il vantaggio rispetto a listare esplicitamente tutti i gruppi rilevanti nelle condizioni di visibilit\u00E0 e accesso degli elementi di corso \u00E8 una pi\u00F9 elevata flessibilit\u00E0 e una gestione pi\u00F9 semplice nell'editore di corso. Quando viene aggiunto un gruppo in una regola di limitazione a gruppi nell'editore di corso, il corso deve essere pubblicato ogni volta, e il gruppo deve essere aggiunto ad ogni elemento di corso che deve seguire la stessa regola di accesso. Al contrario, quando viene invece utilizzata una area di studio, i cambiamenti nell'editore di corso devono essere fatti una sola volta, e assegnare i gruppi a tali aree di studio \u00E8 una attivit\u00E0 semplice che non richiede la ripubblicazione del corso. chelp.desc.area1=Deve attribuire un nome all'$\:chelp.desc.area . chelp.desc.area2=Il nome dell'area appare nella visione d'insieme dell'area di studio. chelp.desc.area3=Pu\u00F2 descrivere opzionalmente in modo pi\u00F9 esteso l'$\:chelp.desc.area . diff --git a/src/main/java/org/olat/group/ui/area/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/group/ui/area/_i18n/LocalStrings_pt_BR.properties index 6b1f45b97fe3603da770c3247ade45d0ad3781ba..cf9e3f83b4acb2da6796a83e4e0344454eaedaa9 100644 --- a/src/main/java/org/olat/group/ui/area/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/group/ui/area/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Fri Sep 17 16:22:10 CEST 2010 +#Tue Nov 06 12:49:57 CET 2012 area.edit.title=Editar \u00E1rea de ensino <i>{0}</i> area.form.description=Descri\u00E7\u00E3o area.form.error.illegalName=V\u00EDrgulas e aspas n\u00E3o s\u00E3o permitidas. @@ -6,6 +6,7 @@ area.form.name=Nome da \u00E1rea de ensino area.form.name.example=(Exemplo\: vermelho, verde, azul) chelp.desc.allChars=Voc\u00EA pode escolher qualquer nome incluindo s\u00EDmbolos e n\u00FAmeros. chelp.desc.area=\u00C1rea de ensino +chelp.desc.area.intro=\u00C1reas de aprendizagem s\u00E3o utilizados para garantir o acesso a diferentes \u00E1reas do curso a certos grupos de uma forma simplificada. A vantagem sobre a listagem expl\u00EDcita de todos os grupos relevantes em condi\u00E7\u00F5es de visibilidade e acesso de elementos do curso \u00E9 o aumento da flexibilidade e do manuseio simplificado no editor de curso. Ao adicionar um grupo a uma regra de grupo no editor, o curso tem de ser publicado todas as vezes e o grupo tem que ser adicionado a cada elemento de curso que deveria seguir esta regra de acesso. Em contraste, quando se utiliza uma \u00E1rea de aprendizagem, as altera\u00E7\u00F5es no editor curso precisam ser feitas apenas uma vez e atribuir os grupos para as \u00E1reas de aprendizagem \u00E9 uma tarefa simples que n\u00E3o necessita de re-publica\u00E7\u00E3o do curso. chelp.desc.area1=Voc\u00EA tem que prover sua $\:chelp.desc.area com um nome. chelp.desc.area2=O nome da \u00E1rea aparece na vis\u00E3o geral da \u00E1rea de ensino. chelp.desc.area3=Voc\u00EA pode opcionalmente prover a $\:chelp.desc.area com descri\u00E7\u00E3o adicional. diff --git a/src/main/java/org/olat/group/ui/edit/BusinessGroupEditController.java b/src/main/java/org/olat/group/ui/edit/BusinessGroupEditController.java index 4e844ffedd7f3b44adecd8fb7c438424a8cf1db4..6d99aa475c55b50f9bdace3b76865825fa8bce45 100644 --- a/src/main/java/org/olat/group/ui/edit/BusinessGroupEditController.java +++ b/src/main/java/org/olat/group/ui/edit/BusinessGroupEditController.java @@ -92,6 +92,8 @@ public class BusinessGroupEditController extends BasicController implements Cont private BusinessGroupMembersController membersController; private BusinessGroupEditResourceController resourceController; private BusinessGroupEditAccessController tabAccessCtrl; + + private int membersTab; /** * Never call this constructor directly, use the BGControllerFactory instead!! @@ -188,7 +190,7 @@ public class BusinessGroupEditController extends BasicController implements Cont tabbedPane.addTab(translate("group.edit.tab.collabtools"), collaborationToolsController.getInitialComponent()); membersController.updateBusinessGroup(currBusinessGroup); - tabbedPane.addTab(translate("group.edit.tab.members"), membersController.getInitialComponent()); + membersTab = tabbedPane.addTab(translate("group.edit.tab.members"), membersController.getInitialComponent()); //resources (optional) resourceController = getResourceController(ureq); if(resourceController != null) { @@ -246,6 +248,9 @@ public class BusinessGroupEditController extends BasicController implements Cont public void event(UserRequest ureq, Component source, Event event) { if (source == tabbedPane && event instanceof TabbedPaneChangedEvent) { tabbedPane.addToHistory(ureq, getWindowControl()); + if(tabbedPane.getSelectedPane() == membersTab) { + membersController.updateBusinessGroup(currBusinessGroup); + } } } diff --git a/src/main/java/org/olat/group/ui/edit/BusinessGroupMembersController.java b/src/main/java/org/olat/group/ui/edit/BusinessGroupMembersController.java index 4e0b6de85f40b38d3e3069ffe0502fc6247b6159..eefaaac67371fa5bc8ab39aa83669365e8e46a68 100644 --- a/src/main/java/org/olat/group/ui/edit/BusinessGroupMembersController.java +++ b/src/main/java/org/olat/group/ui/edit/BusinessGroupMembersController.java @@ -125,6 +125,8 @@ public class BusinessGroupMembersController extends BasicController { mainVC.contextPut("hasWaitingGrp", new Boolean(hasWaitingList)); dmsForm.setWaitingListVisible(hasWaitingList); } + + membersController.reloadModel(); } @Override diff --git a/src/main/java/org/olat/group/ui/edit/_chelp/grp-member.html b/src/main/java/org/olat/group/ui/edit/_chelp/grp-member.html index 073b826bf6637f4d9478154a9b165f301944c73f..472a4b4dc8c3d204ab2c130961db1101a2290131 100644 --- a/src/main/java/org/olat/group/ui/edit/_chelp/grp-member.html +++ b/src/main/java/org/olat/group/ui/edit/_chelp/grp-member.html @@ -1,12 +1,4 @@ -<p> - $r.translate("chelp.membLearn1") -</p> -<p> - $r.translate("chelp.membLearn2") -</p> -<p> - $r.translate("chelp.membAll3") -</p> -<p> - $r.translate("chelp.membDownload") -</p> \ No newline at end of file +<p>$r.translate("chelp.membLearn1")</p> +<p>$r.translate("chelp.membLearn2")</p> +<p>$r.translate("chelp.membAll3")</p> +<p>$r.translate("chelp.membDownload")</p> \ No newline at end of file diff --git a/src/main/java/org/olat/group/ui/edit/_chelp/grp-resources.html b/src/main/java/org/olat/group/ui/edit/_chelp/grp-resources.html new file mode 100644 index 0000000000000000000000000000000000000000..eb298517a296a0463779c6d809c092e67b75179b --- /dev/null +++ b/src/main/java/org/olat/group/ui/edit/_chelp/grp-resources.html @@ -0,0 +1,2 @@ +<p>$r.translate("chelp.resource1")</p> +<p>$r.translate("chelp.resource2")</p> \ No newline at end of file diff --git a/src/main/java/org/olat/group/ui/edit/_content/tab_bgResources.html b/src/main/java/org/olat/group/ui/edit/_content/tab_bgResources.html index 8ac227e830bb10ff4f2b013acd9fa69e80ea1f85..999e867c51a621d56e544b89a0712e91f5f6212c 100644 --- a/src/main/java/org/olat/group/ui/edit/_content/tab_bgResources.html +++ b/src/main/java/org/olat/group/ui/edit/_content/tab_bgResources.html @@ -1,5 +1,6 @@ <fieldset> <legend>$r.translate("fieldset.legend.resources")</legend> + $r.contextHelpWithWrapper("org.olat.group.ui.edit","grp-resources.html","help.hover.bgGrpResources") <div class="b_clearfix"> <div class="b_float_right"> $r.render("cmd.addresource") diff --git a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_de.properties index d79624b8014ac900555e9270ca447c4f41ea497f..1c3a519e8bbcdab95bc69096e7e786a92e3471a8 100644 --- a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_de.properties @@ -26,19 +26,22 @@ chelp.grp-memberParticipants.title=$org.olat.group.ui\:LearningGroup: Teilnehmer chelp.grp-memberWaiting.title=$org.olat.group.ui\:LearningGroup: Warteliste chelp.grp-select-area.title=Gruppe: Lernbereiche zuweisen chelp.grp-tools.title=$org.olat.group.ui\:LearningGroup: Kollaborative Werkzeuge konfigurieren +chelp.grp-resources.title=Gruppe\: Kurse chelp.learn1=Sofern im Gruppenmanagement des Kurses Lernbereiche erstellt worden sind, erscheinen diese im Tab. chelp.learn2=Sie haben mittels den Checkboxes die M\u00F6glichkeit zu bestimmen, zu welchen Lernbereichen die Gruppe geh\u00F6ren soll. chelp.learn3=Diese Einstellung wird in die Konfigurationstabs <i>$org.olat.group.ui.area\:tab.groups</i> der gew\u00E4hlten Lernbereiche \u00FCbernommen. chelp.learn4=Sind noch keine Lernbereiche erstellt worden, erscheint der Text\: -chelp.membAll3=Mit der Option "$:chkBox.open.owners" bzw "$:chkBox.open.partips" kann die Liste der Gruppenmitglieder zudem auf der \u00F6ffentlich sichtbaren Gruppenvisitenkarte für alle Systembenutzer freigeschaltet werden. Wurde die Anzeige für eine Nutzergruppe abgewählt, verschwindet der Eintrag Mitglieder für diese Nutzer aus der Navigation. +chelp.membAll3=Mit der Option "$:chkBox.open.owners", "$:chkBox.open.partips" und "$:chkBox.open.waitingList" kann die Liste der Gruppenmitglieder zudem auf der \u00F6ffentlich sichtbaren Gruppenvisitenkarte für alle Systembenutzer freigeschaltet werden. Wurde die Anzeige für eine Nutzergruppe abgewählt, verschwindet der Eintrag Mitglieder für diese Nutzer aus der Navigation. chelp.membDownload=Mit der Option "$:chkBox.open.downloadList" können Sie steuern, ob Teilnehmer die Mitgliederliste zusätzlich auch als Excel Datei herunterladen dürfen oder nicht. chelp.membBudLea8=$\:fieldset.legend.grouppartips haben kein Recht, die Gruppe zu administrieren und besitzen beschr\u00E4nkte Schreibrechte im Forum. -chelp.membLearn1=Die $\:group.edit.tab.members einer $org.olat.group.ui\:LearningGroup bestehen aus <b>Betreuer</b> und <b>Teilnehmern</b>. -chelp.membLearn2=Hier k\u00F6nnen Sie bestimmen, ob den Mitgliedern der $org.olat.group.ui\:LearningGroup entweder alle anderen Mitglieder oder lediglich die Betreuer resp. die Teilnehmer oder keine anderen Mitglieder angezeigt werden. +chelp.membLearn1=Die Mitglieder einer Gruppe bestehen aus <b>Betreuer</b> und <b>Teilnehmern</b>. +chelp.membLearn2=Hier k\u00F6nnen Sie bestimmen, wer die Mitglieder und Warteliste einer Gruppe sehen darf, ob alle Mitglieder, nur die Betreuer, die Teilnehmer oder nur die Warteliste oder gar keine Mitglieder angezeigt werden. chelp.membLearn5=Wenn Sie eine neue Gruppe erstellen, sind Sie automatisch Betreuer dieser Gruppe. Betreuer der Gruppe erhalten den Link "$org.olat.group.ui.run\:menutree.administration" im Menu. chelp.membLearn6=Sie k\u00F6nnen die $org.olat.group.ui\:LearningGroup also administrieren, insbesondere auch andere Benutzer zu Betreuern ernennen und die Gruppe löschen. chelp.membLearn7=$org.olat.group.ui\:fieldset.legend.groupowners k\u00F6nnen beliebige Benutzer als $\:fieldset.legend.grouppartips in die Gruppe einladen. chelp.membLearn8=Betreuer können die Kandidaten in der Warteliste als Teilnehmer übernehmen oder aus der Warteliste entfernen. In beiden Fällen können sie bestimmen, ob die Benutzer darüber per Email notifiziert werden sollen und können gegenfalls den Emailtext anpassen. +chelp.resource1=Hier legen Sie fest, ob und mit welchen Kursen eine Gruppe verbunden ist. Über "$:cmd.addresource" können Sie die Kurse einbinden, bei denen Sie als Besitzer eingetragen sind. Es gibt keine Beschränkung der Anzahl eingebundener Kurse. +chelp.resource2=Sobald die Gruppe mit mindestens einem Kurs verbunden wurde, erscheint der Eintrag "Kurs" in der Navigation. chelp.right1=Sie haben die M\u00F6glichkeit, den Mitgliedern der Gruppe innerhalb des Kurses die Berechtigung f\u00FCr den Zugriff und die Verwendung der folgenden Werkzeuge zu vergeben\: chelp.tools.infoEd=Die Information k\u00F6nnen Sie weiter unten sogleich editieren chelp.tools.learn1=Sie k\u00F6nnen den Mitgliedern Ihrer $org.olat.group.ui\:LearningGroup eine Information bereitstellen. @@ -61,6 +64,7 @@ help.hover.bgGrpMngmnt=Hilfe zur Anzeige von Mitgliedern in einer Gruppe help.hover.bgGrpMngmntOwner=Hilfe zu den Betreuern einer Gruppe help.hover.bgGrpMngmntParticipants=Hilfe zu den Teilnehmern einer Gruppe help.hover.bgGrpMngmntWaiting=Hilfe zur Warteliste einer Gruppe +help.hover.bgGrpResources=Hilfe zu den Kursen einer Gruppe help.hover.bgRights=Hilfe zu den Berechtigungen einer Gruppe chkBox.show.owners=Mitglieder sehen Betreuer chkBox.show.partips=Mitglieder sehen Teilnehmer diff --git a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_en.properties index 6052a44ec9a836ca12b84623c7f8e78464ada809..2049799cfcc1a07a7bec6f037e44a697360a12aa 100644 --- a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_en.properties @@ -26,19 +26,22 @@ chelp.grp-memberParticipants.title=Group\: participants chelp.grp-memberWaiting.title=Group\: waiting list chelp.grp-select-area.title=Group\: assign learning areas chelp.grp-tools.title=Group\: configure collaborative tools +chelp.grp-resources.title=Group\: courses chelp.learn1=Provided that learning areas have already been created in the group management of this course, they will appear in a tab. chelp.learn2=By means of check boxes you have the possibility to decide to which learning areas your group shall belong. chelp.learn3=This setting is adopted into the configuration tab <i>$org.olat.group.ui.area\:tab.groups</i> of the learning areas selected. chelp.learn4=If no learning areas have been created the following text will appear\: chelp.membAll3=Depending on your selection, the list of members is visible to group members or to all users. If visibility is deselected, the entry "Members" will disappear from navigation. chelp.membBudLea8=$\:fieldset.legend.grouppartips have no right to administer groups and possess only limited write permission in the forum. -chelp.membDownload=With the option "$\:chkBox.open.downloadList" you can control wether or not members of the group can download the member list an an excel file. +chelp.membDownload=The option "$\:chkBox.open.downloadList" additionally allows participants to download the list of members as excel file. chelp.membLearn1=The members of a group consist of <b>coaches</b> and <b>participants</b>. -chelp.membLearn2=Here you can decide whether all members, no members, or merely course coaches or participants are displayed +chelp.membLearn2=Here you can decide which user groups are allowed to view the members and waiting list of a group, whether all members, no members, or merely course coaches, participants or the waiting list are displayed. chelp.membLearn5=If you create a new group, you are automatically one of the coaches of this group. Coaches of this group will see the link "$org.olat.group.ui.run\:menutree.administration" in the menu. They can then administer this group, appoint other users as owners and delete the group. chelp.membLearn6=They can then administer that group and appoint other OLAT users as coaches. chelp.membLearn7=Coaches can invite users to be participants of their group. chelp.membLearn8=Coaches can accept candidates from a waiting list as participants or delete them. Either way you can determine if users should be notified via e-mail; its text will be adaptable. +chelp.resource1=Here you can determine whether a group is connected to one or multiple courses. Clicking on "$:cmd.addresource" allows you to link as many courses you are owner of with the group. There is no limit to the number of embedded courses. +chelp.resource2=Once the group has been associated with at least one course, the entry "Course" appears in the navigation. chelp.right1=You have the possibility to assign access rights as well as the right to use the following tools to members of a group with the same rights during this course\: chelp.tools.infoEd=You can immediately edit this information further down. chelp.tools.learn1=You can provide information for members of your group. @@ -90,6 +93,7 @@ help.hover.bgGrpMngmnt=Help to display members of a group help.hover.bgGrpMngmntOwner=Help regarding coaches of groups help.hover.bgGrpMngmntParticipants=Help regarding members of groups help.hover.bgGrpMngmntWaiting=Help regarding waiting lists of groups +help.hover.bgGrpResources=Help regarding courses of groups help.hover.bgRights=Help regarding rights of a group resource.remove=You really doesn't want the groups management "{0}" in course "{1}"? The group and the course are not deleted with this action. You can add the relation between them at any time. resources.add=Link course diff --git a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_it.properties index 5850a58d70b15ae119358795c38b4b8f0374c750..e74bae70061ddf5750aa039da6e6eef213a0ae96 100644 --- a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_it.properties +++ b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_it.properties @@ -1,4 +1,4 @@ -#Sat Jan 08 12:41:55 CET 2011 +#Mon Oct 29 23:52:56 CET 2012 areachoice.no.areas.admin=Non \u00E8 stata trovata alcuna area di studio. Crei un'area di studio nella gestione dei gruppi. areachoice.no.areas.owner=Non \u00E8 stata trovata alcuna area di studio. Le aree di studio possono essere create solo da persone con diritti su tutta la gestione dei gruppi. chelp.area1=Nel caso siano stati creati gruppi di studio nel corso, questi appaiono nella scheda. @@ -18,20 +18,21 @@ chelp.desc.learn7=Nel caso in cui il numero previsto di partecipanti venga super chelp.desc.learn8=Se la casella non viene compilata, il $org.olat.group.ui\:LearningGroup pu\u00F2 contenere un numero illimitato di partecipanti. chelp.desc.learn9=Se ha limitato il numero dei partecipanti, allora pu\u00F2 aggiungere una lista d'attesa al gruppo di studio. chelp.grp-Area-select-learn.title=Assegnare dei gruppi di studio a delle aree di studio +chelp.grp-assign.title=Gruppo con diritti\: attribuire dei diritti chelp.grp-des.title=Descrivere il $org.olat.group.ui\:LearningGroup chelp.grp-member.title=Membri dei gruppi di studio -chelp.grp-memberOwner.title=Tutori dei gruppi di studio +chelp.grp-memberOwner.title=$org.olat.group.ui\:LearningGroup\: $org.olat.group.ui\:fieldset.legend.groupowners chelp.grp-memberParticipants.title=Partecipanti a gruppi di studio chelp.grp-memberWaiting.title=Lista d'attesa di gruppi di studio chelp.grp-select-area.title=Assegnare delle aree di studio a dei gruppi di studio chelp.grp-tools.title=$org.olat.group.ui\:LearningGroup\: configurare gli strumenti collaborativi -chelp.grp-assign.title=Gruppo con diritti\: attribuire dei diritti chelp.learn1=Nel caso siano state create aree di studio nella gestione dei gruppi del corso, queste appaiono nella scheda. chelp.learn2=Mediante le caselle di controllo pu\u00F2 stabilire a quali aree di studio deve appartenere il gruppo di studio. chelp.learn3=Questa preferenza viene ripresa nelle schede di configurazione <i>$org.olat.group.ui.area\:tab.groups</i> delle aree di studio selezionate. chelp.learn4=Se non sono ancora state create aree di studio, appare il testo\: chelp.membAll3=Nell'ultimo caso scompare dalla navigazione l'entrata "$org.olat.group.ui.run\:menutree.members" . chelp.membBudLea8=I $\:fieldset.legend.grouppartips non possiedono diritti amministrativi sul gruppo e godono di diritti di scrittura limitati nel forum. +chelp.membDownload=Con l'opzione "$\:chkBox.open.downloadList" pu\u00F2 controllare se i membri del gruppo possono, o meno, scaricare la lista dei membri in un file excel. chelp.membLearn1=Tra i $\:group.edit.tab.members di un $org.olat.group.ui\:LearningGroup figurano <b>Tutori</b> e <b>Partecipanti</b>. chelp.membLearn2=Pu\u00F2 stabilire qui se ai membri del $org.olat.group.ui\:LearningGroup devono venire mostrati\: tutti gli altri membri; solo i tutori o, rispettivamente, solo i partecipanti; nessun altro membro. chelp.membLearn5=Ai $org.olat.group.ui\:fieldset.legend.groupowners del $org.olat.group.ui\:LearningGroup viene messo a disposizione nel menu il link "$org.olat.group.ui.run\:menutree.administration" . @@ -42,6 +43,7 @@ chelp.right1=\u00C8 possibile attribuire le autorizzazioni seguenti ai membri de chelp.tools.infoEd=L'informazione pu\u00F2 venire editata subito, pi\u00F9 sotto chelp.tools.learn1=pu\u00F2 mettere a disposizione un'informazione a tutti i membri del $org.olat.group.ui\:LearningGroup. chelp.tools.learn10=Pu\u00F2 mettere a disposizione un ePortfolio al $org.olat.group.ui\:LearningGroup . +chelp.tools.learn13=Pu\u00F2 assegnare a questo gruppo una stanza di chat privata. chelp.tools.learn2=L'informazione pu\u00F2 venire mostrata attraverso la navigazione del $org.olat.group.ui\:LearningGroup. chelp.tools.learn3=L'integrazione di una e-mail Le permette di inviare messaggi e-mail ai tutori, ai partecipanti o a tutti i membri (tutori e partecipanti) del Suo $org.olat.group.ui\:LearningGroup chelp.tools.learn4=la cartella serve allo scambio di dati tra i membri del Suo $org.olat.group.ui\:LearningGroup . @@ -52,17 +54,15 @@ chelp.tools.learn8=pu\u00F2 mettere a disposizione del $org.olat.group.ui\:Learn chelp.tools.learn9=Pu\u00F2 mettere un Wiki a disposizione del $org.olat.group.ui\:LearningGroup. chelp.tools.quota=Lo spazio di memoria disponibile \u00E8 di 10 MB. chelp.tools.title=Configurazione degli strumenti di collaborazione -help.hover.bgArea=Aiuto per l'assegnazione di aree di studio a dei gruppi di studio -help.hover.bgCollabTools=Aiuto per gli strumenti di collaborazione di un gruppo di studio -help.hover.bgDetail=Aiuto per la descrizione di un gruppo di studio -help.hover.bgGrpMngmnt=Aiuto per la visualizzazione dei membri in un gruppo di studio -help.hover.bgGrpMngmntOwner=Aiuto concernente i tutori di un gruppo di studio -help.hover.bgGrpMngmntParticipants=Aiuto concernente i partecipanti a un gruppo di studio -help.hover.bgGrpMngmntWaiting=Aiuto concernente la lista d'attesa di un gruppo di studio -help.hover.bgRights=Aiuto per i diritti di un gruppo con diritti -chkBox.show.owners=Membri vedono proprietari +chkBox.open=Pubblicare il gruppo nell'area dei gruppi per la prenotazione +chkBox.open.downloadList=Gli utenti possono scaricare la lista dei membri +chkBox.open.owners=Gli utenti possono vedere i tutori +chkBox.open.partips=Tutti gli utenti possono vedere i partecipanti +chkBox.open.waitingList=Tutti gli utenti possono vedere la lista d'attesa +chkBox.show.owners=Membri vedono tutori chkBox.show.partips=Membri vedono partecipanti chkBox.show.waitingList=Membri vedono lista d'attesa +cmd.addresource=Aggiungere corso error.message.locked=Questo gruppo viene attualmente modificato dall'utente {0} ({1}) e dunque \u00E8 bloccato. Riprovi pi\u00F9 tardi, p.f. fieldset.legend.areas=Aree di studio assegnate fieldset.legend.collabtools=Strumenti di collaborazione @@ -70,11 +70,29 @@ fieldset.legend.details=Dettagli fieldset.legend.displaymembers=Visualizzazione membri fieldset.legend.groupowners=Proprietari fieldset.legend.grouppartips=Partecipanti +fieldset.legend.open=Visibilit\u00E0 +fieldset.legend.resources=Corsi collegati fieldset.legend.rights=Diritti attribuiti fieldset.legend.waitinggroup=Lista d'attesa +group.deleted=$org.olat.group.ui\:group.deleted +group.edit.tab.accesscontrol=Configurazione pubblicazione e prenotazione group.edit.tab.areas=Aree di studio group.edit.tab.collabtools=Strumenti group.edit.tab.details=Descrizione group.edit.tab.members=Membri +group.edit.tab.resources=Corsi group.edit.tab.rights=Autorizzazioni group.edit.title=Editazione del gruppo <i>{0}</i> +help.hover.bgArea=Aiuto per l'assegnazione di aree di studio a dei gruppi di studio +help.hover.bgCollabTools=Aiuto per gli strumenti di collaborazione di un gruppo di studio +help.hover.bgDetail=Aiuto per la descrizione di un gruppo di studio +help.hover.bgGrpMngmnt=Aiuto per la visualizzazione dei membri in un gruppo di studio +help.hover.bgGrpMngmntOwner=Aiuto concernente i tutori di un gruppo di studio +help.hover.bgGrpMngmntParticipants=Aiuto concernente i partecipanti a un gruppo di studio +help.hover.bgGrpMngmntWaiting=Aiuto concernente la lista d'attesa di un gruppo di studio +help.hover.bgRights=Aiuto per i diritti di un gruppo con diritti +resource.remove=Vuole realmente rimuovere dalla gestione dei gruppi "{0}" il corso "{1}"? Il gruppo e il corso non sono eliminati con questa azione. Pu\u00F2 aggiungere di nuovo la relazione tra i due in ogni momento. +resources.add=Collegare corso +resources.add.title=Selezionare corso +resources.noresources=Questo gruppo non \u00E8 utilizzato in alcun corso. Scegliere "Aggiungere corso" per collegare un corso a questo gruppo. +resources.remove=rimuovere diff --git a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_pl.properties index 1baed80367191f2d01c891d51655f7c44a0353b5..862f08d9be5d7897d0950172d30313a435a648b2 100644 --- a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_pl.properties @@ -59,7 +59,7 @@ help.hover.bgGrpMngmntParticipants=Pomoc dotycz\u0105ca cz\u0142onk\u00F3w grup help.hover.bgGrpMngmntWaiting=Pomoc dotycz\u0105ca listy oczekuj\u0105cych w grupie edukacyjnej help.hover.bgRights=Pom\u00F3\u017C przypisa\u0107 uprawnienia do grupy uprawnie\u0144 chkBox.show.owners=Cz\u0142onkowie widz\u0105 w\u0142a\u015Bcicieli -chkBox.show.partips=Cz\u0142onkowie widz\u0105 si\u0119 nawzajem +chkBox.show.partips=Cz\u0142onkowie widz\u0105 uczestnik\u00F3w chkBox.show.waitingList=Uczestnicy widz\u0105 list\u0119 oczekuj\u0105cych error.message.locked=Ta grupa jest w\u0142a\u015Bnie edytowana przez u\u017Cytkownika {0} ({1}) i dlatego zablokowana. Spr\u00F3buj p\u00F3\u017Aniej. fieldset.legend.areas=Przypisane obszary edukacyjne @@ -67,7 +67,7 @@ fieldset.legend.collabtools=Narz\u0119dzia wsp\u00F3\u0142pracy fieldset.legend.details=Szczeg\u00F3\u0142y fieldset.legend.displaymembers=Cz\u0142onkowie grupy fieldset.legend.groupowners=W\u0142a\u015Bciciele -fieldset.legend.grouppartips=Cz\u0142onkowie +fieldset.legend.grouppartips=Uczestnicy fieldset.legend.rights=Przypisane uprawnienia fieldset.legend.waitinggroup=Lista oczekuj\u0105cych group.edit.tab.areas=Obszary edukacyjne diff --git a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_pt_BR.properties index 20106a23d55bba8c922e729a52246c41a671e321..1659bc08528da55ac2dba35070a37df5c75e54a9 100644 --- a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Tue Apr 03 15:01:47 CEST 2012 +#Wed Nov 07 18:11:38 CET 2012 areachoice.no.areas.admin=Nenhuma \u00E1rea de ensino encontrada. Favor criar uma \u00E1rea de ensino dentro do seu grupo gestor. areachoice.no.areas.owner=Nenhuma \u00E1rea de ensino encontrada. Novas \u00E1reas de ensino somente podem ser criadas por usu\u00E1rios que tenham acesso ao grupo gestor. chelp.area1=Em os grupos de estudo tendo sido criados neste curso, estes aparecer\u00E3o na guia. @@ -18,30 +18,35 @@ chelp.desc.learn7=Se o n\u00FAmero planejado de participantes for excedido, os p chelp.desc.learn8=Se voc\u00EA deixar este campo vazio, o $org.olat.group.ui\:LearningGroup ser\u00E1 aberto a qualquer n\u00FAmero de participantes. chelp.desc.learn9=Se voc\u00EA quer limitar o n\u00FAmero de seus participantes voc\u00EA pode entretanto adicionar uma lista de espera em seu grupo de ensino. chelp.grp-Area-select-learn.title=Atribuindo grupos de estudo a uma \u00E1rea de ensino +chelp.grp-assign.title=Atribuindo direitos a um grupo com os mesmos direitos chelp.grp-des.title=Descri\u00E7\u00E3o do $org.olat.group.ui\:LearningGroup chelp.grp-member.title=$\:group.edit.tab.members de um $org.olat.group.ui\:LearningGroup chelp.grp-memberOwner.title=Os tutores dos grupos de estudo chelp.grp-memberParticipants.title=Os membros dos grupos de estudo chelp.grp-memberWaiting.title=Lista de espera do grupo de estudo +chelp.grp-resources.title=Grupo\: cursos chelp.grp-select-area.title=Atribuindo \u00E1reas de ensino a um grupo de estudo chelp.grp-tools.title=$\:chelp.tools.title \: $org.olat.group.ui\:LearningGroup -chelp.grp-assign.title=Atribuindo direitos a um grupo com os mesmos direitos chelp.learn1=Em as \u00E1reas de ensino tendo sido criadas no grupo gestor deste curso, estas aparecer\u00E3o na guia. chelp.learn2=Por meio de check box (sele\u00E7\u00E3o) voc\u00EA tem a possibilidade de decidir a qual \u00E1rea de ensino seu grupo de estudo deve pertencer. chelp.learn3=Este ajuste \u00E9 usado nas guias de configura\u00E7\u00E3o <i>$org.olat.group.ui.area\:tab.groups</i> das \u00E1reas de ensino selecionadas. chelp.learn4=Se nenhuma \u00E1rea de ensino foi criada ainda, o seguinte texto aparecer\u00E1\: chelp.membAll3=No \u00FAltimo caso o item <i>«$org.olat.group.ui.run\:menutree.members»</i> desaparecer\u00E1 da navega\u00E7\u00E3o. chelp.membBudLea8=$\:fieldset.legend.grouppartips n\u00E3o tem direito de administrar o grupo e possui apenas autoridade limitada de escrita no f\u00F3rum. +chelp.membDownload=Com a op\u00E7\u00E3o "$\:chkBox.open.downloadList" voc\u00EA pode controlar se os membros podem ou n\u00E3o baixar a lista de membros de um arquivo do Excel. chelp.membLearn1=Os $\:group.edit.tab.members de um $org.olat.group.ui\:LearningGroup consistem em <b>tutores</b> e <b>participantes</b>. chelp.membLearn2=Aqui voc\u00EA pode decidir se todos os membros ou somente os tutores ou participantes s\u00E3o mostrados aos membros do $org.olat.group.ui\:LearningGroup . chelp.membLearn5=$org.olat.group.ui\:fieldset.legend.groupowners do $org.olat.group.ui\:LearningGroup obt\u00E9m o link <i>«$org.olat.group.ui.run\:menutree.administration»</i> no menu. chelp.membLearn6=Desta maneira eles podem administrar o $org.olat.group.ui\:LearningGroup e nomear outros usu\u00E1rios do OLAT como tutores. chelp.membLearn7=$org.olat.group.ui\:fieldset.legend.groupowners podem convidar qualquer usu\u00E1rio do OLAT como $\:fieldset.legend.grouppartips de seu grupo. chelp.membLearn8=Os tutores podem aceitar candidatos de uma lista de espera como participantes ou exclu\u00ED-los. De qualquer forma, voc\u00EA pode determinar se os usu\u00E1rios devem ser notificados via e-mail, o texto ser\u00E1 adapt\u00E1vel. +chelp.resource1=Aqui voc\u00EA pode determinar se um grupo \u00E9 ligado a um ou v\u00E1rios cursos. Clicando em "$\:cmd.addresource" voc\u00EA poder\u00E1 vincular v\u00E1rios cursos que voc\u00EA \u00E9 propriet\u00E1rio ao grupo. N\u00E3o h\u00E1 nenhum limite para o n\u00FAmero de cursos vinculados. +chelp.resource2=Uma vez que o grupo est\u00E1 associado \u00E0 pelo menos um curso, a entrada "Curso" aparecer\u00E1 na navega\u00E7\u00E3o. chelp.right1=Voc\u00EA tem a possibilidade de atribuir direitos de acesso assim como o direito de usar as seguintes ferramentas aos membros de um grupo com os mesmos direitos durante este curso. chelp.tools.infoEd=Voc\u00EA pode imediatamente editar esta informa\u00E7\u00E3o mais para baixo. chelp.tools.learn1=Voc\u00EA pode fornecer informa\u00E7\u00E3o para membros de seu $org.olat.group.ui\:LearningGroup. chelp.tools.learn10=Voc\u00EA pode fornecer este $org.olat.group.ui\:LearningGroup com um ePortfolio. +chelp.tools.learn13=Voc\u00EA pode fornecer a este grupo uma sala de bate-papo privada. chelp.tools.learn2=Esta informa\u00E7\u00E3o pode ser mostrada por meio da navega\u00E7\u00E3o do $org.olat.group.ui\:LearningGroup. chelp.tools.learn3=Voc\u00EA pode enviar um e-mail para propriet\u00E1rios, participantes ou todos os membros, (isto \u00E9 propriet\u00E1rios e participantes) de seu $org.olat.group.ui\:LearningGroup usando um formul\u00E1rio de contato. chelp.tools.learn4=Voc\u00EA permite aos membros de seu $org.olat.group.ui\:LearningGroup trocarem arquivos usando uma pasta. @@ -52,18 +57,15 @@ chelp.tools.learn8=Voce pode colocar um calend\u00E1rio a disposi\u00E7\u00E3o d chelp.tools.learn9=Voc\u00EA pode colocar um Wiki a disposi\u00E7\u00E3o do $org.olat.group.ui\:LearningGroup. chelp.tools.quota=A capacidade de armazenamento dispon\u00EDvel \u00E9 10 MB. chelp.tools.title=Configura\u00E7\u00E3o das ferramentas colaborativas -help.hover.bgArea=Ajuda para assinalar \u00E1reas de ensino a um grupo de estudo -help.hover.bgCollabTools=Ajuda para usar ferramentas de colabora\u00E7\u00E3o de um grupo de estudo -help.hover.bgDetail=Ajuda para descrever um grupo de estudo -help.hover.bgGrpMngmnt=Ajuda para adicionar usu\u00E1rios a um grupo de estudo -help.hover.bgGrpMngmntOwner=Ajuda sobre os tutores de grupos de estudo -help.hover.bgGrpMngmntParticipants=Ajudar a respeito dos membros de grupos de estudo -help.hover.bgGrpMngmntWaiting=Ajuda sobre listas de espera de grupos de estudo -help.hover.bgRights=Ajuda para atribuir direitos a um grupo de direitos chkBox.open=Publicar grupo na \u00E1rea do grupo para reserva +chkBox.open.downloadList=Os usu\u00E1rios podem baixar a lista de membros +chkBox.open.owners=Todos os usu\u00E1rios podem ver os treinadores +chkBox.open.partips=Todos os usu\u00E1rios podem ver os participantes +chkBox.open.waitingList=Todos os usu\u00E1rios podem ver a lista de espera chkBox.show.owners=Membros podem ver propriet\u00E1rios chkBox.show.partips=Membros podem ver participantes chkBox.show.waitingList=Membros podem ver lista de espera +cmd.addresource=Adicionar curso error.message.locked=Este grupo est\u00E1 sendo editado pelo usu\u00E1rio {0} ({1}) e est\u00E1 bloqueado. Favor tentar novamente mais tarde. fieldset.legend.areas=\u00C1reas de ensino atribu\u00EDdas fieldset.legend.collabtools=Ferramentas de colabora\u00E7\u00E3o @@ -72,6 +74,7 @@ fieldset.legend.displaymembers=Exibir membros fieldset.legend.groupowners=Propriet\u00E1rios fieldset.legend.grouppartips=Participantes fieldset.legend.open=Visibilidade +fieldset.legend.resources=Cursos linkados fieldset.legend.rights=Direitos atribu\u00EDdos fieldset.legend.waitinggroup=Lista de espera group.deleted=$org.olat.group.ui\:group.deleted @@ -80,5 +83,20 @@ group.edit.tab.areas=\u00C1reas de ensino group.edit.tab.collabtools=Ferramentas group.edit.tab.details=Descri\u00E7\u00E3o group.edit.tab.members=Membros +group.edit.tab.resources=Cursos group.edit.tab.rights=Direitos group.edit.title=Editar grupo <i>{0}</i> +help.hover.bgArea=Ajuda para assinalar \u00E1reas de ensino a um grupo de estudo +help.hover.bgCollabTools=Ajuda para usar ferramentas de colabora\u00E7\u00E3o de um grupo de estudo +help.hover.bgDetail=Ajuda para descrever um grupo de estudo +help.hover.bgGrpMngmnt=Ajuda para adicionar usu\u00E1rios a um grupo de estudo +help.hover.bgGrpMngmntOwner=Ajuda sobre os tutores de grupos de estudo +help.hover.bgGrpMngmntParticipants=Ajudar a respeito dos membros de grupos de estudo +help.hover.bgGrpMngmntWaiting=Ajuda sobre listas de espera de grupos de estudo +help.hover.bgGrpResources=Ajuda sobre cursos de grupos +help.hover.bgRights=Ajuda para atribuir direitos a um grupo de direitos +resource.remove=Voc\u00EA realmente n\u00E3o quer o grupo gestor "{0}" no curso "{1}"? O grupo e o curso n\u00E3o s\u00E3o exclu\u00EDdos com esta a\u00E7\u00E3o. Voc\u00EA pode adicionar a rela\u00E7\u00E3o entre eles a qualquer momento. +resources.add=Linkar curso +resources.add.title=Selecionar Curso +resources.noresources=Este grupo n\u00E3o \u00E9 utilizado em nenhum curso. Escolha "Adicionar curso" para vincular o curso a este grupo. +resources.remove=Remover diff --git a/src/main/java/org/olat/group/ui/homepage/_content/groupinfodisplay.html b/src/main/java/org/olat/group/ui/homepage/_content/groupinfodisplay.html index b4148c5111e0c4d08e18b75b163c6918d5039711..56a4f390cffacebbb3dae78e7ffdefaf4b6cb02d 100644 --- a/src/main/java/org/olat/group/ui/homepage/_content/groupinfodisplay.html +++ b/src/main/java/org/olat/group/ui/homepage/_content/groupinfodisplay.html @@ -9,4 +9,4 @@ $!numMembers $r.translate("GroupInfoDisplayController.content.numParticipants") #end </div> -</div> \ No newline at end of file +</div></div> \ No newline at end of file diff --git a/src/main/java/org/olat/group/ui/homepage/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/group/ui/homepage/_i18n/LocalStrings_it.properties new file mode 100644 index 0000000000000000000000000000000000000000..5cce7d11991b26b871f923489fb3eccdb192be98 --- /dev/null +++ b/src/main/java/org/olat/group/ui/homepage/_i18n/LocalStrings_it.properties @@ -0,0 +1,23 @@ +#Mon Oct 29 23:53:30 CET 2012 +GroupInfoDisplayController.content.numParticipant=Membro +GroupInfoDisplayController.content.numParticipants=Membri +GroupInfoDisplayController.content.title=Gruppo +contact.to=Membri del gruppo +contactform.intro=Messaggio a tutti i membri di questo gruppo. +contactform.nobody=Questo gruppo non ha n\u00E9 partecipanti n\u00E9 tutori. +contactform.noowners=Questo gruppo non ha tutori. +contactform.noparticipants=Questo gruppo non ha partecipanti. +contactform.title=Contatto +form.fieldset.message=Messaggio +form.fieldset.to=Destinatario +form.to=A\: +form.to.all=Partecipanti e tutori +form.to.owners=Proprietari +form.to.participants=Partecipanti +main.menu.contact=Contatto +main.menu.members=Membri +main.menu.title=Informazioni gruppo +userlist.owners.title=$org.olat.group.ui.edit\:fieldset.legend.groupowners +userlist.participants.title=$org.olat.group.ui.edit\:fieldset.legend.grouppartips +userlist.title=Membri del gruppo +userlist.waitingList.title=$org.olat.group.ui.edit\:fieldset.legend.waitinggroup diff --git a/src/main/java/org/olat/group/ui/homepage/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/group/ui/homepage/_i18n/LocalStrings_pt_BR.properties index 373afd4d40708c14fa0dc20d0219dd44665489ac..e87bdc3bcc8238248a293ba5c5bc873452a74d24 100644 --- a/src/main/java/org/olat/group/ui/homepage/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/group/ui/homepage/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,5 @@ -#Wed Mar 07 16:38:17 CET 2012 +#Tue Nov 06 12:55:01 CET 2012 +GroupInfoDisplayController.content.numParticipant=Membro GroupInfoDisplayController.content.numParticipants=Membros GroupInfoDisplayController.content.title=Grupo contact.to=Membros de grupo @@ -16,4 +17,7 @@ form.to.participants=Membros main.menu.contact=Contato main.menu.members=Membros main.menu.title=Informa\u00E7\u00E3o do grupo +userlist.owners.title=$org.olat.group.ui.edit\:fieldset.legend.groupowners +userlist.participants.title=$org.olat.group.ui.edit\:fieldset.legend.grouppartips userlist.title=Membros do grupo +userlist.waitingList.title=$org.olat.group.ui.edit\:fieldset.legend.waitinggroup diff --git a/src/main/java/org/olat/group/ui/main/AbstractBusinessGroupListController.java b/src/main/java/org/olat/group/ui/main/AbstractBusinessGroupListController.java index 3f16fc940cf6d4052539668f2ca6b054a517ee46..18c987ef45c66ce0bfb5e6a1f614273ab991c051 100644 --- a/src/main/java/org/olat/group/ui/main/AbstractBusinessGroupListController.java +++ b/src/main/java/org/olat/group/ui/main/AbstractBusinessGroupListController.java @@ -399,11 +399,12 @@ public abstract class AbstractBusinessGroupListController extends BasicControlle * @param ureq */ private void doLeave(UserRequest ureq, BusinessGroup group) { + List<Identity> identityToRemove = Collections.singletonList(getIdentity()); // 1) remove as owner if (securityManager.isIdentityInSecurityGroup(getIdentity(), group.getOwnerGroup())) { List<Identity> ownerList = securityManager.getIdentitiesOfSecurityGroup(group.getOwnerGroup()); if (ownerList.size() > 1) { - businessGroupService.removeOwners(ureq.getIdentity(), Collections.singletonList(getIdentity()), group); + businessGroupService.removeOwners(getIdentity(), identityToRemove, group); } else { // he is the last owner, but there must be at least one oner // give him a warning, as long as he tries to leave, he gets @@ -415,8 +416,9 @@ public abstract class AbstractBusinessGroupListController extends BasicControlle // if identity was also owner it must have successfully removed to end here. // now remove the identity also as participant. // 2) remove as participant - List<Identity> identities = Collections.singletonList(getIdentity()); - businessGroupService.removeParticipants(ureq.getIdentity(), identities, group, null);//TODO memail + businessGroupService.removeParticipants(getIdentity(), identityToRemove, group, null);//TODO memail + // 3) remove from waiting list + businessGroupService.removeFromWaitingList(getIdentity(), identityToRemove, group, null); } /** diff --git a/src/main/java/org/olat/group/ui/main/AccessActionColumnDescriptor.java b/src/main/java/org/olat/group/ui/main/AccessActionColumnDescriptor.java index 37c20135012dac37512b08adee819c2ac101e7c8..337c6c7dd88369ed09a907d5bd9f18f9f4292bd5 100644 --- a/src/main/java/org/olat/group/ui/main/AccessActionColumnDescriptor.java +++ b/src/main/java/org/olat/group/ui/main/AccessActionColumnDescriptor.java @@ -91,11 +91,11 @@ public class AccessActionColumnDescriptor extends DefaultColumnDescriptor { sb.append(translator.translate("table.header.group.full")); } } else if(item.isWaitingListEnabled()) { - if(item.isAutoCloseRanksEnabled()) { - sb.append(translator.translate("table.access")); - } else { + if(item.isFull()) { sb.append(translator.translate("table.access.waitingList")); - } + } else { + sb.append(translator.translate("table.access")); + } } else { sb.append(translator.translate("table.access")); } diff --git a/src/main/java/org/olat/group/ui/main/AdminBusinessGroupsController.java b/src/main/java/org/olat/group/ui/main/AdminBusinessGroupsController.java index 939a0238b2a0348001393eaaa78374b301f72b41..1005f237a2be113e7aafa12664c6847a842a1213 100644 --- a/src/main/java/org/olat/group/ui/main/AdminBusinessGroupsController.java +++ b/src/main/java/org/olat/group/ui/main/AdminBusinessGroupsController.java @@ -33,6 +33,7 @@ import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.StateEntry; +import org.olat.group.BusinessGroup; import org.olat.group.model.SearchBusinessGroupParams; import org.olat.group.ui.main.BusinessGroupTableModelWithType.Cols; @@ -109,6 +110,11 @@ public class AdminBusinessGroupsController extends AbstractBusinessGroupListCont super.event(ureq, source, event); } + protected void doLaunch(UserRequest ureq, BusinessGroup group) { + ureq.getUserSession().putEntryInNonClearedStore("wild_card_" + group.getKey(), Boolean.TRUE); + super.doLaunch(ureq, group); + } + private void doSearch(UserRequest ureq, SearchEvent event) { long start = isLogDebugEnabled() ? System.currentTimeMillis() : 0; diff --git a/src/main/java/org/olat/group/ui/main/BusinessGroupSearchController.java b/src/main/java/org/olat/group/ui/main/BusinessGroupSearchController.java index 4c6369558668c9881f1d10b9cf75a3ebd5b6561c..4079167b2fdeb7b90467749ea637baf0b429f0ca 100644 --- a/src/main/java/org/olat/group/ui/main/BusinessGroupSearchController.java +++ b/src/main/java/org/olat/group/ui/main/BusinessGroupSearchController.java @@ -95,19 +95,24 @@ public class BusinessGroupSearchController extends FormBasicController implement if(showId) { id = uifactory.addTextElement("cif_id", "cif.id", 12, "", leftContainer); id.setRegexMatchCheck("\\d*", "search.id.format"); + id.setDisplaySize(28); } displayName = uifactory.addTextElement("cif_displayname", "cif.displayname", 255, "", leftContainer); displayName.setFocus(true); + displayName.setDisplaySize(28); owner = uifactory.addTextElement("cif_owner", "cif.owner", 255, "", leftContainer); if (limitUsername != null) { owner.setValue(limitUsername); owner.setEnabled(false); } + owner.setDisplaySize(28); description = uifactory.addTextElement("cif_description", "cif.description", 255, "", leftContainer); + description.setDisplaySize(28); courseTitle = uifactory.addTextElement("cif_coursetitle", "cif.coursetitle", 255, "", leftContainer); + courseTitle.setDisplaySize(28); FormLayoutContainer rightContainer = FormLayoutContainer.createDefaultFormLayout("right_1", getTranslator()); rightContainer.setRootForm(mainForm); diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_de.properties index a70438cb51d248f86ab0459e8b5e122536722b96..4a4ec59cbc69e2c91c4fd634cdd2830ca02fa4e6 100644 --- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_de.properties @@ -1,5 +1,5 @@ #Mon Mar 02 09:54:04 CET 2009 -create.form.title=Neue Arbeitsgruppe erstellen +create.form.title=Neue Gruppe erstellen create.group=Gruppe erstellen create.group.description=Erzeugen Sie eine neue Gruppe mit der unten stehenden Schaltfläche. Als Betreuer dieser Gruppe können Sie danach die Gruppenwerkzeuge freischalten, Benutzer hinzufügen oder die Gruppe veröffentlichen. copy.group=Kopieren diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_it.properties index b8cb745765aa463b13d0b6c4d833d57ff131ef8f..e95a9c9b2c992d5da776894273c936db487b0174 100644 --- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_it.properties +++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_it.properties @@ -1,5 +1,17 @@ -#Fri Aug 27 14:54:05 CEST 2010 +#Mon Oct 29 23:56:22 CET 2012 +action=Azione +cif.coursetitle=Titolo del corso +cif.description=Descrizione +cif.displayname=Nome +cif.error.allempty=Si prega di compilare almeno un campo del modulo. +cif.id=ID +cif.owner=Proprietario +config.group=Configurare +copy.group=Duplicare +course.groups=Dai corsi create.form.title=Creare un nuovo gruppo di lavoro +create.group=Creare gruppo +create.group.description=Creare un nuovo gruppo con il pulsante sottostante. Come proprietario di questo gruppo, pu\u00F2 sbloccare gli strumenti di gruppo, aggiungere utenti o pubblicare il gruppo. dialog.modal.bg.delete.text=Vuole veramente eliminare il gruppo di lavoro "{0}"?<p> dialog.modal.bg.leave.text=Se abbandona ora il gruppo di lavoro "{0}" non potr\u00E0 pi\u00F9 accedervi. <br> Vuole veramente abbandonare il gruppo di lavoro?<p> index.header=Gruppi @@ -11,8 +23,21 @@ learning.intro=Nella lista sottostante trova tutti i gruppi di studio a cui part menu.index=Gruppi menu.index.alt=Lavori con i Suoi gruppi. msg.atleastone=Nel gruppo di lavoro deve essere registrato almeno una/un proprietaria/o. +notification.mail.added.body=*** Questo \u00E8 un messaggio generato automaticamente. Non risponda al messaggio, p.f. *** \r\n\r\n\u00C8 stata/o invitata/o da {0} {1} ({3}) in un gruppo di lavoro\: \r\n\r\nNome del gruppo\: $groupname\r\nDescrizione\: $groupdescription\r\n\r\nSe non \u00E8 vuole convalidare questa operazione, pu\u00F2 disiscriversi dal gruppo. +notification.mail.added.self.body=*** Questo \u00E8 un messaggio generato automaticamente. Non risponda al messaggio, p.f. *** \n\nHa aperto un gruppo di lavoro OLAT\: \n\nNome del gruppo\: $groupname\nDescrizione\: $groupdescription\n\nPu\u00F2 eliminare il gruppo in qualsiasi momento. +notification.mail.added.self.subject=Gruppo di lavoro OLAT $groupname +notification.mail.added.subject=Gruppo di lavoro OLAT $groupname +notification.mail.deleted.body=*** Questo \u00E8 un messaggio generato automaticamente. Non risponda al messaggio, p.f. *** \r\n\r\n\u00C8 stata/o disiscritta/o da {0} {1} ({3}) dal gruppo di lavoro perch\u00E9 quest'ultimo \u00E8 stato eliminato\: \r\n\r\nNome del gruppo\: $groupname\r\nDescrizione\: $groupdescription\r\n\r\nPer qualsiasi chiarimento contatti {0} {1} ({2}), p.f. +notification.mail.deleted.subject=Gruppo di lavoro OLAT $groupname\: il gruppo \u00E8 stato eliminato +notification.mail.removed.body=*** Questo \u00E8 un messaggio generato automaticamente. Non risponda al messaggio, p.f. *** \r\n\r\n\u00C8 stata/o disiscritta/o da {0} {1} ({3}) dal gruppo di lavoro\: \r\n\r\nNome del gruppo\: $groupname\r\nDescrizione\: $groupdescription\r\n\r\nPer qualsiasi chiarimento contatti {0} {1} ({2}), p.f. +notification.mail.removed.self.body=*** Questo \u00E8 un messaggio generato automaticamente. Non risponda al messaggio, p.f. *** \r\n\r\nSi \u00E8 appena disiscritta/o dal gruppo di lavoro\: \r\n\r\nNome del gruppo\: $groupname\r\nDescrizione\: $groupdescription +notification.mail.removed.self.subject=Gruppo di lavoro OLAT $groupname\: Lei si \u00E8 disiscritta/o. +notification.mail.removed.subject=Gruppo di lavoro OLAT $groupname\: \u00E8 stata/o disiscritta/o. +owned.groups=Proprietario +owned.groups.2=Di propriet\u00E0 right.header=Gruppi con diritti right.intro=In questa lista trova tutti i gruppi con diritti a cui partecipa. +search.owner=Proprietario table.header.bgname=Nome table.header.delete=Eliminare table.header.description=Descrizione @@ -23,13 +48,3 @@ tools.add.buddygroup=Gruppo di lavoro tools.add.header=Creare tools.delete.header=Eliminare tools.delete.unusedgroup=Gruppi di lavoro -notification.mail.added.body=*** Questo \u00E8 un messaggio generato automaticamente. Non risponda al messaggio, p.f. *** \r\n\r\n\u00C8 stata/o invitata/o da {0} {1} ({3}) in un gruppo di lavoro\: \r\n\r\nNome del gruppo\: $groupname\r\nDescrizione\: $groupdescription\r\n\r\nSe non \u00E8 vuole convalidare questa operazione, pu\u00F2 disiscriversi dal gruppo. -notification.mail.added.self.body=*** Questo \u00E8 un messaggio generato automaticamente. Non risponda al messaggio, p.f. *** \n\nHa aperto un gruppo di lavoro OLAT\: \n\nNome del gruppo\: $groupname\nDescrizione\: $groupdescription\n\nPu\u00F2 eliminare il gruppo in qualsiasi momento. -notification.mail.added.self.subject=Gruppo di lavoro OLAT $groupname -notification.mail.added.subject=Gruppo di lavoro OLAT $groupname -notification.mail.deleted.body=*** Questo \u00E8 un messaggio generato automaticamente. Non risponda al messaggio, p.f. *** \r\n\r\n\u00C8 stata/o disiscritta/o da {0} {1} ({3}) dal gruppo di lavoro perch\u00E9 quest'ultimo \u00E8 stato eliminato\: \r\n\r\nNome del gruppo\: $groupname\r\nDescrizione\: $groupdescription\r\n\r\nPer qualsiasi chiarimento contatti {0} {1} ({2}), p.f. -notification.mail.deleted.subject=Gruppo di lavoro OLAT $groupname\: il gruppo \u00E8 stato eliminato -notification.mail.removed.body=*** Questo \u00E8 un messaggio generato automaticamente. Non risponda al messaggio, p.f. *** \r\n\r\n\u00C8 stata/o disiscritta/o da {0} {1} ({3}) dal gruppo di lavoro\: \r\n\r\nNome del gruppo\: $groupname\r\nDescrizione\: $groupdescription\r\n\r\nPer qualsiasi chiarimento contatti {0} {1} ({2}), p.f. -notification.mail.removed.self.body=*** Questo \u00E8 un messaggio generato automaticamente. Non risponda al messaggio, p.f. *** \r\n\r\nSi \u00E8 appena disiscritta/o dal gruppo di lavoro\: \r\n\r\nNome del gruppo\: $groupname\r\nDescrizione\: $groupdescription -notification.mail.removed.self.subject=Gruppo di lavoro OLAT $groupname\: Lei si \u00E8 disiscritta/o. -notification.mail.removed.subject=Gruppo di lavoro OLAT $groupname\: \u00E8 stata/o disiscritta/o. diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_pl.properties index d330778e6b77769ec20cfd09aadc28aa0f35064e..1625ffed6639ade4b9e6770427bed80be09121ba 100644 --- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_pl.properties @@ -11,7 +11,7 @@ learning.intro=Poni\u017Csza lista pokazuje wszystkie grupy edukacyjne, w kt\u00 menu.index=Grupy menu.index.alt=Pracuj ze swoimi grupami menu.opengroups=Grupy "opublikowane" -menu.opengroups.alt=Grupy projektu, kt\u00F3re s\u0105 opublikowane i mo\u017Cna si\u0119 do nich zapisywa\u0107 +menu.opengroups.alt="Opublikowane" grupy projektu z otwart\u0105 rejestracj\u0105 msg.atleastone=W grupie projektu musi by\u0107 co najmniej jeden w\u0142a\u015Bciciel. right.header=Grupy uprawnie\u0144 right.intro=Poni\u017Csza lista pokazuje wszystkie grupy uprawnie\u0144, w kt\u00F3rych uczestniczysz. diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_pt_BR.properties index d868d3d677b1a5b2cc9d83dff036edc981de1090..4aa3a69bbdde0c1cdeb89592a62a235f9d4328a9 100644 --- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_pt_BR.properties @@ -1,13 +1,22 @@ -#Tue Apr 03 15:05:18 CEST 2012 +#Tue Nov 06 15:20:47 CET 2012 +action=A\u00E7\u00E3o +cif.coursetitle=T\u00EDtulo do Curso cif.description=Descri\u00E7\u00E3o cif.displayname=Nome cif.error.allempty=Por favor, preencha pelo menos um campo de formul\u00E1rio. cif.id=ID cif.owner=Propriet\u00E1rio +config.group=Configurar +copy.group=Duplicar +course.groups=Dos Cursos create.form.title=Criar novo grupo de projeto +create.group=Criar grupo +create.group.description=Criar um novo grupo com o bot\u00E3o abaixo. Como treinador deste grupo que voc\u00EA pode, ent\u00E3o, abrir as ferramentas do grupo, adicionar usu\u00E1rios ou publicar o grupo. dialog.modal.bg.delete.text=Voc\u00EA realmente quer apagar o grupo de projeto "{0}" ?<p> +dialog.modal.bg.delete.title=Excluir grupo? dialog.modal.bg.leave.text=Se voc\u00EA deixar o grupo de projeto "{0}" voc\u00EA n\u00E3o ter\u00E1 acesso. <br>Voc\u00EA realmente quer deixar este grupo de projeto?<p> dialog.modal.bg.mail.text=Voc\u00EA quer informar os membros deste grupo por e-mail? +email.group=Enviar E-mail group.access.success=O acesso ao grupo bem sucedido index.header=Grupos index.intro=A seguinte lista mostra todos os grupos de projeto, estudo e direitos que voc\u00EA participa. @@ -15,42 +24,89 @@ index.table.nogroup=Voc\u00EA n\u00E3o est\u00E1 registrado em nenhum grupo. info.group.deleted=Esse grupo de projeto foi removido. learning.header=Grupos de estudo learning.intro=A seguinte lista mostra todos os grupos de estudo que voc\u00EA participa. +main.menu.title=Grupos +main.menu.title.alt=Grupos +marked.groups=Favorito +menu.group.admin=Gest\u00E3o de grupos +menu.group.admin.alt=Gest\u00E3o de Grupo +menu.groups=Meus grupos +menu.groups.alt=Trabalhar com seus grupos menu.index=Grupos menu.index.alt=Trabalhar com seus grupos menu.opengroups=Grupos publicados menu.opengroups.alt=Grupos de projetos que s\u00E3o publicados e reservados. +merge.group=Juntar +msg.alleastone.editable.group=Voc\u00EA deve selecionar pelo menos um grupo que voc\u00EA possui. msg.atleastone=Deve haver no m\u00EDnimo um propriet\u00E1rio neste grupo de projeto. +notification.mail.added.body=*** Esta \u00E9 uma mensagem autom\u00E1tica, n\u00E3o responder *** \n\nVoc\u00EA foi convidado a um grupo de projeto pelo {0} {1} ({3})\: \n\nNome do grupo\: $groupname\nDescri\u00E7\u00E3o\: $groupdescription\nSe voc\u00EA n\u00E3o concordar, voc\u00EA pode sair do grupo de projeto. +notification.mail.added.self.body=*** Esta \u00E9 uma mensagem autom\u00E1tica, n\u00E3o responder *** \n\nVoc\u00EA criou um grupo de projeto no OLAT\: \n\nNome do grupo\: $groupname\nDescri\u00E7\u00E3o\: $groupdescription\n\nVoc\u00EA pode apagar este grupo a qualquer momento. +notification.mail.added.self.subject=Grupo de projeto do OLAT $groupname +notification.mail.added.subject=Grupo de projeto do OLAT $groupname +notification.mail.deleted.body=*** Esta \u00E9 uma mensagem autom\u00E1tica, n\u00E3o responder *** \n\nEstando grupo eliminado, voc\u00EA foi excluido pelo {0} {1} ({3})\: \n\nNome do grupo\: $groupname\nDescri\u00E7\u00E3o\: $groupdescription\n\nPara quest\u00F5es favor contactar {0} {1} ({2}). +notification.mail.deleted.subject=Grupo de projeto do OLAT $groupname\: O grupo foi apagado +notification.mail.removed.body=*** Esta \u00E9 uma mensagem autom\u00E1tica, n\u00E3o responder *** \n\nVoc\u00EA foi convidado a um grupo de projeto pelo {0} {1} ({3})\: \n\nNome do grupo\: $groupname\nDescri\u00E7\u00E3o\: $groupdescription\nPara quest\u00F5es favor contactar {0} {1} ({2}). +notification.mail.removed.self.body=*** Esta \u00E9 uma mensagem autom\u00E1tica, n\u00E3o responder *** \n\nVoc\u00EA acabou de sair deste grupo de projeto\: \n\nNome do grupo\: $groupname\nDescri\u00E7\u00E3o\: $groupdescription\n\n +notification.mail.removed.self.subject=Grupo de projeto do OLAT $groupname\: Voc\u00EA deixou este grupo. +notification.mail.removed.subject=Grupo de projeto do OLAT $groupname\: Voc\u00EA saiu. open.header=Grupos de projetos p\u00FAblicos open.intro=Nesta lista voc\u00EA encontrar\u00E1 todos os grupos de projetos publicados que voc\u00EA pode participar open.nogroup=Nenhum grupo de projeto foi encontrado e que possa ser exibido. opengroups.all=Todos grupos opengroups.search=Buscar +owned.groups=Treinador +owned.groups.2=Treinados right.header=Grupos de direitos right.intro=A seguinte lista mostra todos os grupos de direitos que voc\u00EA participa. +search.all=Todos +search.attendee=Participante search.generic=M\u00E1scara de busca search.header=Grupo +search.headless=\u00D3rf\u00E3os +search.headless.check=Grupos sem membros e recursos +search.id.format=ID de Grupo inv\u00E1lido search.intro=Buscar em grupo search.limit.type=Tipo +search.no=N\u00E3o +search.open=Publicado +search.owner=Treinador +search.public=Grupo p\u00FAblico +search.resources=Linkado com cursos +search.roles=Fun\u00E7\u00E3o +search.waiting=Lista de espera +search.yes=Sim table.access=Reservar +table.access.waitingList=Adicionar a lista de espera +table.config=Configurar +table.delete=Excluir +table.duplicate=Duplicar +table.email=Enviar E-mail table.header.ac=AC +table.header.ac.method=Acesso table.header.bgname=Nome +table.header.businesscard=Contato table.header.delete=Apagar table.header.description=Descri\u00E7\u00E3o table.header.edit=Editar +table.header.firstTime=Inscri\u00E7\u00E3o +table.header.freePlaces=Vagas +table.header.group.full=Completo +table.header.key=ID +table.header.lastTime=\u00DAltima visita +table.header.lastUsage=\u00DAltimo Acesso (admin) table.header.leave=Deixar +table.header.leave.waiting=Sair +table.header.mark=Favorito +table.header.participantsCount=Atribu\u00EDdo table.header.resources=Curso +table.header.role=Fun\u00E7\u00E3o +table.header.tutorsCount=Treinador table.header.type=Tipo +table.header.waitingListCount=Lista de espera +table.leave=Sair +table.merge=Juntar +table.users.management=Administrar membros tools.add.buddygroup=Grupo de projeto tools.add.header=Criar tools.delete.header=Apagar tools.delete.unusedgroup=Grupos de projeto -notification.mail.added.body=*** Esta \u00E9 uma mensagem autom\u00E1tica, n\u00E3o responder *** \n\nVoc\u00EA foi convidado a um grupo de projeto pelo {0} {1} ({3})\: \n\nNome do grupo\: $groupname\nDescri\u00E7\u00E3o\: $groupdescription\nSe voc\u00EA n\u00E3o concordar, voc\u00EA pode sair do grupo de projeto. -notification.mail.added.self.body=*** Esta \u00E9 uma mensagem autom\u00E1tica, n\u00E3o responder *** \n\nVoc\u00EA criou um grupo de projeto no OLAT\: \n\nNome do grupo\: $groupname\nDescri\u00E7\u00E3o\: $groupdescription\n\nVoc\u00EA pode apagar este grupo a qualquer momento. -notification.mail.added.self.subject=Grupo de projeto do OLAT $groupname -notification.mail.added.subject=Grupo de projeto do OLAT $groupname -notification.mail.deleted.body=*** Esta \u00E9 uma mensagem autom\u00E1tica, n\u00E3o responder *** \n\nEstando grupo eliminado, voc\u00EA foi excluido pelo {0} {1} ({3})\: \n\nNome do grupo\: $groupname\nDescri\u00E7\u00E3o\: $groupdescription\n\nPara quest\u00F5es favor contactar {0} {1} ({2}). -notification.mail.deleted.subject=Grupo de projeto do OLAT $groupname\: O grupo foi apagado -notification.mail.removed.body=*** Esta \u00E9 uma mensagem autom\u00E1tica, n\u00E3o responder *** \n\nVoc\u00EA foi convidado a um grupo de projeto pelo {0} {1} ({3})\: \n\nNome do grupo\: $groupname\nDescri\u00E7\u00E3o\: $groupdescription\nPara quest\u00F5es favor contactar {0} {1} ({2}). -notification.mail.removed.self.body=*** Esta \u00E9 uma mensagem autom\u00E1tica, n\u00E3o responder *** \n\nVoc\u00EA acabou de sair deste grupo de projeto\: \n\nNome do grupo\: $groupname\nDescri\u00E7\u00E3o\: $groupdescription\n\n -notification.mail.removed.self.subject=Grupo de projeto do OLAT $groupname\: Voc\u00EA deixou este grupo. -notification.mail.removed.subject=Grupo de projeto do OLAT $groupname\: Voc\u00EA saiu. +users.group=Administrar membros diff --git a/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java b/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java index b482ffdc490660ffc778009d66539a1c220dfda9..7abf57ca7d42cbe921e1f66a78be5be0bfeaa709 100644 --- a/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java +++ b/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java @@ -67,9 +67,9 @@ import org.olat.core.logging.AssertException; import org.olat.core.logging.activity.OlatResourceableType; import org.olat.core.logging.activity.ThreadLocalUserActivityLogger; import org.olat.core.util.StringHelper; -import org.olat.core.util.UserSession; import org.olat.core.util.Util; import org.olat.core.util.coordinate.CoordinatorManager; +import org.olat.core.util.event.EventBus; import org.olat.core.util.event.GenericEventListener; import org.olat.core.util.mail.ContactList; import org.olat.core.util.mail.ContactMessage; @@ -196,7 +196,7 @@ public class BusinessGroupMainRunController extends MainLayoutBasicController im private final BaseSecurity securityManager; private final BusinessGroupService businessGroupService; - private UserSession userSession; + private EventBus singleUserEventBus; private String adminNodeId; // reference to admin menu item // not null indicates tool is enabled @@ -221,6 +221,8 @@ public class BusinessGroupMainRunController extends MainLayoutBasicController im */ public BusinessGroupMainRunController(UserRequest ureq, WindowControl control, BusinessGroup bGroup) { super(ureq, control); + + assessmentEventOres = OresHelper.createOLATResourceableType(AssessmentEvent.class); /* * lastUsage, update lastUsage if group is run if you can acquire the lock @@ -238,25 +240,15 @@ public class BusinessGroupMainRunController extends MainLayoutBasicController im putInitialPanel(columnLayoutCtr.getInitialComponent()); return; } - List<BusinessGroupMembership> memberships = businessGroupService.getBusinessGroupMembership(Collections.singletonList(bGroup.getKey()), getIdentity()); if(isOnWaitinglist(memberships)) { - VelocityContainer vc = createVelocityContainer("waiting"); - vc.contextPut("name", bGroup.getName()); - columnLayoutCtr = new LayoutMain3ColsController(ureq, getWindowControl(), null, null, vc, "grouprun"); - listenTo(columnLayoutCtr); // cleanup on dispose - putInitialPanel(columnLayoutCtr.getInitialComponent()); + putInitialPanel(getOnWaitingListMessage(ureq, bGroup)); return; } - - addLoggingResourceable(LoggingResourceable.wrap(businessGroup)); ThreadLocalUserActivityLogger.log(GroupLoggingAction.GROUP_OPEN, getClass()); - - this.userSession = ureq.getUserSession(); - this.assessmentEventOres = OresHelper.createOLATResourceableType(AssessmentEvent.class); isAdmin = ureq.getUserSession().getRoles().isOLATAdmin() || ureq.getUserSession().getRoles().isGroupManager() @@ -285,8 +277,9 @@ public class BusinessGroupMainRunController extends MainLayoutBasicController im // putInitialPanel(columnLayoutCtr.getInitialComponent()); - // register for AssessmentEvents triggered by this user - userSession.getSingleUserEventCenter().registerFor(this, userSession.getIdentity(), assessmentEventOres); + // register for AssessmentEvents triggered by this user + singleUserEventBus = ureq.getUserSession().getSingleUserEventCenter(); + singleUserEventBus.registerFor(this, ureq.getIdentity(), assessmentEventOres); //disposed message controller //must be created beforehand @@ -305,27 +298,39 @@ public class BusinessGroupMainRunController extends MainLayoutBasicController im this.showError("grouprun.disabled"); } - //check managed - //fxdiff VCRP-1,2: access control of resources - ACService acService = CoreSpringFactory.getImpl(ACService.class); - AccessResult acResult = acService.isAccessible(businessGroup, getIdentity(), false); - if(acResult.isAccessible()) { - needActivation = false; - } else if (businessGroup != null && acResult.getAvailableMethods().size() > 0) { - accessController = ACUIFactory.createAccessController(ureq, getWindowControl(), acResult.getAvailableMethods()); - listenTo(accessController); - mainPanel.setContent(accessController.getInitialComponent()); - bgTree.setTreeModel(new GenericTreeModel()); - needActivation = true; - return; + Object wildcard = ureq.getUserSession().getEntry("wild_card_" + businessGroup.getKey()); + if(wildcard == null) { + //check managed + //fxdiff VCRP-1,2: access control of resources + ACService acService = CoreSpringFactory.getImpl(ACService.class); + AccessResult acResult = acService.isAccessible(businessGroup, getIdentity(), false); + if(acResult.isAccessible()) { + needActivation = false; + } else if (businessGroup != null && acResult.getAvailableMethods().size() > 0) { + accessController = ACUIFactory.createAccessController(ureq, getWindowControl(), acResult.getAvailableMethods()); + listenTo(accessController); + mainPanel.setContent(accessController.getInitialComponent()); + bgTree.setTreeModel(new GenericTreeModel()); + needActivation = true; + } else { + mainPanel.setContent(new Panel("empty")); + bgTree.setTreeModel(new GenericTreeModel()); + needActivation = true; + } } else { - mainPanel.setContent(new Panel("empty")); - bgTree.setTreeModel(new GenericTreeModel()); - needActivation = true; - return; + ureq.getUserSession().removeEntryFromNonClearedStore("wild_card_" + businessGroup.getKey()); + needActivation = false; } } + private Component getOnWaitingListMessage(UserRequest ureq, BusinessGroup group) { + VelocityContainer vc = createVelocityContainer("waiting"); + vc.contextPut("name", group.getName()); + columnLayoutCtr = new LayoutMain3ColsController(ureq, getWindowControl(), null, null, vc, "grouprun"); + listenTo(columnLayoutCtr); // cleanup on dispose + return columnLayoutCtr.getInitialComponent(); + } + private boolean isOnWaitinglist(List<BusinessGroupMembership> memberships) { boolean waiting = false; for(BusinessGroupMembership membership:memberships) { @@ -422,11 +427,19 @@ public class BusinessGroupMainRunController extends MainLayoutBasicController im //fxdiff VCRP-1,2: access control of resources } else if (source == accessController) { if(event.equals(AccessEvent.ACCESS_OK_EVENT)) { - mainPanel.setContent(main); - bgTree.setTreeModel(buildTreeModel()); removeAsListenerAndDispose(accessController); accessController = null; - needActivation = false; + + //check if on waiting list + List<BusinessGroupMembership> memberships = businessGroupService.getBusinessGroupMembership(Collections.singletonList(businessGroup.getKey()), getIdentity()); + if(isOnWaitinglist(memberships)) { + Component cmp = getOnWaitingListMessage(ureq, businessGroup); + mainPanel.setContent(cmp); + } else { + mainPanel.setContent(main); + bgTree.setTreeModel(buildTreeModel()); + needActivation = false; + } } else if(event.equals(AccessEvent.ACCESS_FAILED_EVENT)) { String msg = ((AccessEvent)event).getMessage(); if(StringHelper.containsNonWhitespace(msg)) { @@ -766,7 +779,7 @@ public class BusinessGroupMainRunController extends MainLayoutBasicController im protected void doDispose() { ThreadLocalUserActivityLogger.log(GroupLoggingAction.GROUP_CLOSED, getClass()); - if (chatCtr != null) { + if (chatCtr instanceof InstantMessagingGroupChatController) { InstantMessagingGroupChatController chat = (InstantMessagingGroupChatController) chatCtr; if (chat.isChatWindowOpen()) { chat.close(); @@ -776,8 +789,9 @@ public class BusinessGroupMainRunController extends MainLayoutBasicController im } CoordinatorManager.getInstance().getCoordinator().getEventBus().deregisterFor(this, businessGroup); - - userSession.getSingleUserEventCenter().deregisterFor(this, assessmentEventOres); + if(singleUserEventBus != null) { + singleUserEventBus.deregisterFor(this, assessmentEventOres); + } } @Override diff --git a/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_en.properties index e97d68305d4bc86f5b6d7b23147ae616928a3b24..2a811c0cf724d3d3233e2a35ab016f084e8d1078 100644 --- a/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_en.properties @@ -1,5 +1,5 @@ #Thu May 26 09:55:51 CEST 2011 -businessgroup.contact.bodytext=\n\n---\nGo immediately to group {0} \: "{1}" +businessgroup.contact.bodytext=\n\n---\nDirect link to the group {0} \: "{1}" businessgroup.contact.subject={0} \: group.deleted=$org.olat.group.ui\:group.deleted group.on.waitinglist=You are on the waiting list for this group. Please be patient. diff --git a/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_it.properties index 084607249cf04ab06ea26a3d8b9495e2c44e62f8..69129b3ebb3affb344b02cceeaa730359a9420b3 100644 --- a/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_it.properties +++ b/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_it.properties @@ -1,4 +1,4 @@ -#Sat Jan 08 14:50:02 CET 2011 +#Mon Oct 29 23:57:02 CET 2012 businessgroup.contact.bodytext=\n\n---\nVai direttamente al gruppo {0} \: "{1}" businessgroup.contact.subject={0} \: grouprun.configurationchanged=La configurazione di questo gruppo \u00E8 appena stata modificata. Il gruppo \u00E8 stato riavviato. @@ -41,10 +41,10 @@ sendtochooser.form.chckbx.waitingList=Tutte le persone in lista d'attesa sendtochooser.form.error.nonselected=Deve essere selezionato almeno un gruppo di destinatari. sendtochooser.form.error.norecipent=Deve essere selezionato almeno un destinatario. sendtochooser.form.header=Selezione dei destinatari per la e-mail -sendtochooser.form.radio.owners=Tutore -sendtochooser.form.radio.owners.all=Tutti i tutori -sendtochooser.form.radio.owners.choose=Tutori selezionati -sendtochooser.form.radio.owners.nothing=Nessun tutore +sendtochooser.form.radio.owners=Proprietario +sendtochooser.form.radio.owners.all=Tutti i proprietari +sendtochooser.form.radio.owners.choose=Proprietari selezionati +sendtochooser.form.radio.owners.nothing=Nessun proprietario sendtochooser.form.radio.partip=Partecipante sendtochooser.form.radio.partip.all=Tutti i partecipanti sendtochooser.form.radio.partip.choose=Partecipanti selezionati diff --git a/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_pl.properties index 228bdd35fe360d51c6127c7088780c3fd48d2cb5..fc477ba944bcc410fe0a1fb187f52d630dd8be00 100644 --- a/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_pl.properties @@ -11,8 +11,8 @@ menutree.administration=Administracja menutree.administration.alt=Administracja menutree.calendar=Kalendarz menutree.calendar.alt=Kalendarz -menutree.chat=Czat -menutree.chat.alt=Czat z cz\u0142onkami grupy. +menutree.chat=Komunikator +menutree.chat.alt=Wymiana komunikat\u00F3w z cz\u0142onkami grupy. menutree.contactform=E-mail menutree.contactform.alt=E-mail menutree.folder=Folder @@ -39,14 +39,14 @@ sendtochooser.form.chckbx.waitingList=Wszystkie osoby w kolejce oczekuj\u0105cyc sendtochooser.form.error.nonselected=Musi zosta\u0107 podany co najmniej jeden odbiorca. sendtochooser.form.error.norecipent=Powinien by\u0107 wybrany przynajmniej jeden odbiorca. sendtochooser.form.header=Wska\u017C odbiorc\u00F3w dla wiadomo\u015Bci e-mail -sendtochooser.form.radio.owners=Nauczyciele -sendtochooser.form.radio.owners.all=Wszyscy nauczyciele -sendtochooser.form.radio.owners.choose=Wybrani nauczyciele -sendtochooser.form.radio.owners.nothing=\u017Baden z nauczycieli -sendtochooser.form.radio.partip=Cz\u0142onkowie -sendtochooser.form.radio.partip.all=Wszyscy cz\u0142onkowie -sendtochooser.form.radio.partip.choose=Wybrani cz\u0142onkowie -sendtochooser.form.radio.partip.nothing=\u017Baden z cz\u0142onk\u00F3w +sendtochooser.form.radio.owners=W\u0142a\u015Bciciele +sendtochooser.form.radio.owners.all=Wszyscy w\u0142a\u015Bciciele +sendtochooser.form.radio.owners.choose=Wybrani w\u0142a\u015Bciciele +sendtochooser.form.radio.owners.nothing=\u017Baden z w\u0142a\u015Bcicieli +sendtochooser.form.radio.partip=Uczestnicy +sendtochooser.form.radio.partip.all=Wszyscy uczestnicy +sendtochooser.form.radio.partip.choose=Wybrani uczestnicy +sendtochooser.form.radio.partip.nothing=\u017Baden z uczestnik\u00F3w sendtochooser.form.radio.partip.rightgroup.all=Wszyscy cz\u0142onkowie sendtochooser.form.radio.partip.rightgroup.choose=Wybrani cz\u0142onkowie sendtochooser.form.radio.rightgroup=Cz\u0142onkowie diff --git a/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_pt_BR.properties index 04a94bf351d403b68f2f229dde14472df5138661..5fedd8f9559f9a4b9eda1d8482eb0a70b8c70cca 100644 --- a/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_pt_BR.properties @@ -1,7 +1,8 @@ -#Tue Apr 03 15:49:57 CEST 2012 +#Tue Nov 06 13:10:19 CET 2012 businessgroup.contact.bodytext=\n\n---\nIr imediatamente para o grupo {0} \: "{1}" businessgroup.contact.subject={0} \: group.deleted=$org.olat.group.ui\:group.deleted +group.on.waitinglist=Voc\u00EA est\u00E1 na lista de espera desse grupos. Por favor seja paciente groupchat.not.available=$org.olat.instantMessaging.groupchat\:groupchat.not.available grouprun.configurationchanged=A configura\u00E7\u00E3o deste grupo foi mudada e executada novamente. grouprun.details.description=Descri\u00E7\u00E3o diff --git a/src/main/java/org/olat/group/ui/wizard/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/group/ui/wizard/_i18n/LocalStrings_it.properties index b5d27dd01bf5487c9d498e419be51750eea24236..01aa2b59c85fc14125f1144f5bfb318166297263 100644 --- a/src/main/java/org/olat/group/ui/wizard/_i18n/LocalStrings_it.properties +++ b/src/main/java/org/olat/group/ui/wizard/_i18n/LocalStrings_it.properties @@ -1,10 +1,10 @@ -#Fri Aug 27 14:54:37 CEST 2010 +#Mon Oct 29 23:58:05 CET 2012 backLink=Indietro bgcopywizard.copyform.areas=Configurazione aree di studio bgcopywizard.copyform.label=Copia di bgcopywizard.copyform.membersvisibility=Configurazione visualizzazione dei membri bgcopywizard.copyform.name.copy=Copia -bgcopywizard.copyform.owners=Tutori del gruppo +bgcopywizard.copyform.owners=Proprietari del gruppo bgcopywizard.copyform.participants=Partecipanti del gruppo bgcopywizard.copyform.rights=Configurazione diritti bgcopywizard.copyform.title=Selezioni ci\u00F2 che vuole copiare @@ -23,6 +23,8 @@ continue=Avanti create.form.error.emptylist=Indichi almeno un nome di un gruppo, p.f. create.form.error.numberOrNull=Solo cifre, p.f. (o lasciare vuoto) create.form.title.max=Numero previsto <br>di partecipanti +email.select.receiver.tutor=Tutori +email.select.receivers.desc=Scegliere i destinatari\: tutori, partecipanti o entrambi. error.selectatleastonearea=Selezioni almeno un'area di studio, p.f. error.selectatleastonecolumn=Selezioni almeno una colonna, p.f. error.selectatleastonegroup=Selezioni almeno un gruppo, p.f. @@ -40,3 +42,4 @@ memberlistwizard.groupchoice=Selezione gruppi memberlistwizard.outputchoice=Selezione formato output memberlistwizard.title=Creare liste dei membri del gruppo showfile=Scaricamento file +users.addowner=Aggiungere proprietario diff --git a/src/main/java/org/olat/group/ui/wizard/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/group/ui/wizard/_i18n/LocalStrings_pt_BR.properties index 84bbf05c89de40a412820c8c3efd8f181ff06487..bb7702ada34f40a4374e9117741737e79df4d3fd 100644 --- a/src/main/java/org/olat/group/ui/wizard/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/group/ui/wizard/_i18n/LocalStrings_pt_BR.properties @@ -1,6 +1,8 @@ -#Fri Sep 17 17:58:20 CEST 2010 +#Tue Nov 06 15:21:02 CET 2012 +action.general=A\u00E7\u00E3o backLink=Back bgcopywizard.copyform.areas=Configura\u00E7\u00E3o das \u00E1reas de ensino +bgcopywizard.copyform.courses=Atribui\u00E7\u00F5es do curso bgcopywizard.copyform.label=C\u00F3pia de bgcopywizard.copyform.membersvisibility=Configura\u00E7\u00E3o de apresenta\u00E7\u00E3o de membros bgcopywizard.copyform.name.copy=Copiar @@ -19,10 +21,26 @@ bgcopywizard.multiple.groupnames.title=Inserir a lista de nomes de grupos bgcopywizard.multiple.groupnames.tooLongGroupname=Nomes de grupo n\u00E3o devem conter mais de 100 caracteres bgcopywizard.multiple.title=Wizard para m\u00FAltiplas c\u00F3pias de grupos bgcopywizard.title=Wizard para c\u00F3pia de grupo +config.resources.desc=Cursos +config.resources.noresources=Escolha "Adicionar curso" para vincular um ou mais cursos para este(s) grupo(s) +config.resources.title=Cursos +config.tools.desc=Ferramentas de colabora\u00E7\u00E3o +config.tools.off=desligado +config.tools.on=ligado +config.tools.title=Ferramentas continue=Pr\u00F3ximo +copy.wizard.bgstep=Copiar "{0}" create.form.error.emptylist=Por favor indique pelo menos o nome de um grupo create.form.error.numberOrNull=Somente d\u00EDgitos, por favor\! (Ou ent\u00E3o deixe em branco) create.form.title.max=n\u00FAmero previsto de <br>participantes +email.select.receiver.description=Recipiente +email.select.receiver.participant=Participantes +email.select.receiver.title=Destinat\u00E1rios +email.select.receiver.tutor=Treinadores +email.select.receivers=Enviar E-mail +email.select.receivers.desc=Escolha os destinat\u00E1rios\: treinadores, participantes ou ambos. +email.write.description=Escrever E-mail +email.write.title=Escrevre E-mail error.selectatleastonearea=Favor selecionar pelo menos uma \u00E1rea de ensino. error.selectatleastonecolumn=Favor selecionar pelo menos uma coluna. error.selectatleastonegroup=Favor selecionar pelo menos um grupo. @@ -39,4 +57,24 @@ memberlistwizard.finished.title=Cria\u00E7\u00E3o da lista conclu\u00EDda memberlistwizard.groupchoice=Selecionar grupos memberlistwizard.outputchoice=Selecionar formato de sa\u00EDda memberlistwizard.title=Criar lista contendo nomes dos participantes dos grupos +merge.confirmation=Estes grupos ser\u00E3o apagados ap\u00F3s a jun\u00E7\u00E3o\: "{0}". +merge.confirmation.description=Confirma\u00E7\u00E3o +merge.confirmation.title=Confirma\u00E7\u00E3o +merge.description=Escolha a qual grupo os grupos selecionados dever\u00E3o unidos +merge.target.description=Escolha o grupo alvo +merge.target.group=Grupo alvo +merge.target.title=Escolha o grupo alvo +merge.wizard.title=Unir grupos +remove=Remover showfile=Baixar arquivo +table.role=Fun\u00E7\u00E3o +table.status=Status +table.subject.action=A\u00E7\u00E3o +table.user.login=Login +users.addowner=Adicionar treinador +users.addparticipant=Adicionar participante +users.addwaiting=Adicionar a lista de espera +users.email.desc=Enviar E-mail +users.email.title=Enviar E-mail +users.manage.desc=Administrar membros +users.manage.title=Membros gestores diff --git a/src/main/java/org/olat/ims/cp/ui/CreateNewCPController.java b/src/main/java/org/olat/ims/cp/ui/CreateNewCPController.java index 0344aafe893fc8b7a931a6fe253ec35eb75c0da7..cd936263650955ae9ca576f4b4a6edc28842f4c7 100644 --- a/src/main/java/org/olat/ims/cp/ui/CreateNewCPController.java +++ b/src/main/java/org/olat/ims/cp/ui/CreateNewCPController.java @@ -89,6 +89,11 @@ public class CreateNewCPController extends BasicController implements IAddContro secMgr.createAndPersistPolicy(re.getOwnerGroup(), Constants.PERMISSION_ADMIN, re.getOlatResource()); } + @Override + public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) { + // + } + public void transactionAborted() { // Don't do nothing! } diff --git a/src/main/java/org/olat/ims/qti/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/ims/qti/_i18n/LocalStrings_pt_BR.properties index c4217fda45effa7c3b16375074cb105c394e207b..2ac68cc8b5da60c481300089b90a71043ad44669 100644 --- a/src/main/java/org/olat/ims/qti/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/ims/qti/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Fri Sep 17 17:58:26 CEST 2010 +#Wed Nov 07 21:34:52 CET 2012 DetailedResults=Resultados em detalhe ERROR_ASSESSMENT_OUTOFTIME=Limite de tempo do teste excedido. ERROR_ITEM_OUTOFTIME=Tempo limite para esta quest\u00E3o excedido. @@ -22,6 +22,7 @@ ass.identifier=N\u00FAmero de identifica\u00E7\u00E3o ass.inst=Institui\u00E7\u00E3o ass.title=Avalia\u00E7\u00E3o ass.user=Candidato +column.header.action=A\u00E7\u00E3o column.header.assesspoints=Pontua\u00E7\u00E3o column.header.date=Data column.header.details=Detalhes @@ -41,13 +42,18 @@ head.ass.summary=Ficha de avalia\u00E7\u00E3o head.score=Resultado de pontua\u00E7\u00E3o hours=Horas mins=Minutos +notReleased=N\u00E3o lan\u00E7ado num.av=N\u00FAmero de quest\u00F5es dispon\u00EDveis num.pres=N\u00FAmero de quest\u00F5es apresentadas num.tried=N\u00FAmero de quest\u00F5es tentadas +open=Abrir render.hint=Dica para solu\u00E7\u00E3o render.item.maxanswers=N\u00FAmero m\u00E1ximo de respostas render.item.minanswers=N\u00FAmero m\u00EDnimo de respostas render.solution=Solu\u00E7\u00E3o correta +retrievetest=Puxar +retrievetest.confirm.text=Voc\u00EA realmente quer puxar o teste de {0}? +retrievetest.confirm.title=Puxar teste score.cut=Pontua\u00E7\u00E3o necess\u00E1ria score.max=Pontua\u00E7\u00E3o M\u00E1xima score.min=Pontua\u00E7\u00E3o M\u00EDnima diff --git a/src/main/java/org/olat/ims/qti/editor/AddNewQTIDocumentController.java b/src/main/java/org/olat/ims/qti/editor/AddNewQTIDocumentController.java index 8dc6b76f7bfe4c7443c36ccf24a984d3acddf67e..dfc1d37ba289ae19234ff0eb04f5f8e2b9a0cac6 100644 --- a/src/main/java/org/olat/ims/qti/editor/AddNewQTIDocumentController.java +++ b/src/main/java/org/olat/ims/qti/editor/AddNewQTIDocumentController.java @@ -129,6 +129,11 @@ public class AddNewQTIDocumentController extends DefaultController implements IA tmpPackage.cleanupTmpPackageDir(); } + @Override + public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) { + // + } + /** * @see org.olat.repository.controllers.IAddController#transactionAborted() */ diff --git a/src/main/java/org/olat/ims/qti/render/ResultsBuilder.java b/src/main/java/org/olat/ims/qti/render/ResultsBuilder.java index ac82b9462ec4a0a93f2cb896a368aa7ad6f8c9d5..96b847276a7acf105d61565959086b32e667c643 100644 --- a/src/main/java/org/olat/ims/qti/render/ResultsBuilder.java +++ b/src/main/java/org/olat/ims/qti/render/ResultsBuilder.java @@ -47,6 +47,8 @@ import org.olat.core.id.UserConstants; import org.olat.core.util.Formatter; import org.olat.core.util.StringHelper; import org.olat.core.util.Util; +import org.olat.core.util.filter.Filter; +import org.olat.core.util.filter.FilterFactory; import org.olat.ims.qti.QTIModule; import org.olat.ims.qti.container.AssessmentContext; import org.olat.ims.qti.container.DecimalVariable; @@ -90,6 +92,7 @@ public class ResultsBuilder { Element result = root.addElement("result"); Element extension_result = result.addElement("extension_result"); + String baseUrl = ai.getResolver().getStaticsBaseURI() + "/"; // add items (not qti standard, but nice to display original questions -> // put it into extensions) //extension_result. @@ -101,6 +104,7 @@ public class ResultsBuilder { // because el_item had already a parent. // make a clone for adding to extension_result Element el_item = (Element) sectionCtx.getItemContext(j).getEl_item().clone(); + recurseMattextForMediaURLFiltering(baseUrl, el_item); extension_result.add(el_item); } } @@ -358,6 +362,28 @@ public class ResultsBuilder { } return res_doc; } + + private void recurseMattextForMediaURLFiltering(String baseUrl, Element el) { + @SuppressWarnings("unchecked") + List<Element> children = el.elements(); + for(int i=children.size(); i-->0; ) { + Element child = (Element)children.get(i); + recurseMattextForMediaURLFiltering(baseUrl, child); + + String name = child.getName(); + if("mattext".equals(name)) { + Object cdata = child.getData(); + if(cdata instanceof String) { + String content = (String)cdata; + Filter urlFilter = FilterFactory.getBaseURLToMediaRelativeURLFilter(baseUrl); + String withBaseUrl = urlFilter.filter(content); + if(!content.equals(withBaseUrl)) { + child.setText(withBaseUrl); + } + } + } + } + } /** * Strip extension_result and section_result tags diff --git a/src/main/java/org/olat/instantMessaging/CloseInstantMessagingEvent.java b/src/main/java/org/olat/instantMessaging/CloseInstantMessagingEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..117c2077bbbdbc3c1ada2a1846b7f77ce10172fe --- /dev/null +++ b/src/main/java/org/olat/instantMessaging/CloseInstantMessagingEvent.java @@ -0,0 +1,41 @@ +/** + * <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.instantMessaging; + +import org.olat.core.util.event.MultiUserEvent; + +/** + * + * Description:<br> + * Message to close a new message window. Only use this event with + * the Single VM message bus with the SingleUserEventCenter!!! + * + * <P> + * Initial Date: 2 mar. 2011 <br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + */ +public class CloseInstantMessagingEvent extends MultiUserEvent { + + private static final long serialVersionUID = -2290953538061783875L; + + public CloseInstantMessagingEvent() { + super("closeim"); + } +} diff --git a/src/main/java/org/olat/instantMessaging/InstantMessaging.java b/src/main/java/org/olat/instantMessaging/InstantMessaging.java index 29e568510c989479e6b9ce30def2c0b2bd55d103..9b0054238e7ecbfb422ec2ba0f1bb8a1904a86a5 100644 --- a/src/main/java/org/olat/instantMessaging/InstantMessaging.java +++ b/src/main/java/org/olat/instantMessaging/InstantMessaging.java @@ -36,6 +36,7 @@ import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; +import org.olat.core.util.resource.OresHelper; import org.olat.instantMessaging.groupchat.GroupChatManagerController; import org.olat.instantMessaging.ui.ConnectedUsersListEntry; @@ -47,6 +48,11 @@ import org.olat.instantMessaging.ui.ConnectedUsersListEntry; * framework outside the package <P> */ public interface InstantMessaging { + /** + * Category of events which trigger close/open chat from extern + */ + public static final OLATResourceable TOWER_EVENT_ORES = OresHelper.createOLATResourceableType("InstantMessagingTower"); + /** * called when OLAT server is started and needs to sync the learinggroups with the IM server. diff --git a/src/main/java/org/olat/instantMessaging/OpenInstantMessageEvent.java b/src/main/java/org/olat/instantMessaging/OpenInstantMessageEvent.java index 6ce6d3a5b6fe602cc8a3c53b89ca608bf2e47e57..10d223e3dbe404d8c632adabb02730d82e9d9a9a 100644 --- a/src/main/java/org/olat/instantMessaging/OpenInstantMessageEvent.java +++ b/src/main/java/org/olat/instantMessaging/OpenInstantMessageEvent.java @@ -34,6 +34,8 @@ import org.olat.core.util.event.MultiUserEvent; */ public class OpenInstantMessageEvent extends MultiUserEvent { + private static final long serialVersionUID = -7767366726634855700L; + private final String jabberId; private final UserRequest ureq; diff --git a/src/main/java/org/olat/instantMessaging/groupchat/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/instantMessaging/groupchat/_i18n/LocalStrings_pl.properties index 958d7141125f3efe4078e7ad1e0261ca146f303a..bb8ae91ab6603efef1c27275c6a859758f6296c4 100644 --- a/src/main/java/org/olat/instantMessaging/groupchat/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/instantMessaging/groupchat/_i18n/LocalStrings_pl.properties @@ -6,7 +6,7 @@ course.chat.click.to.join=W czacie kursu mo\u017Cesz wysy\u0142a\u0107 i otrzymy course.chat.intro=Tutaj mo\u017Cesz poczatowa\u0107 z u\u017Cytkownikami, kt\u00F3rzy w\u0142a\u015Bnie teraz ogl\u0105daj\u0105 ten kurs...<br />Jeste\u015B zalogowany anonimowo. Mo\u017Cesz jednak zdecydowa\u0107 czy chcesz u\u017Cy\u0107 swojej nazwy u\u017Cytkownika OLAT. course.groupchat=Pok\u00F3j\: coursechat.not.available=Czat tego kursu jest chwilowo niedost\u0119pny. Spr\u00F3buj p\u00F3\u017Aniej... -coursechat.not.available.short=Czat jest niedost\u0119pny. +coursechat.not.available.short=Komunikator jest niedost\u0119pny. groupchat.new.msg=Nowa wiadomo\u015B\u0107 w pokoju czata tego kursu\! groupchat.not.available=Czat jest niedost\u0119pny. groupchat.roster=Uczestnicy @@ -19,7 +19,7 @@ init.messaging=Init msg.send=Wy\u015Blij msg.send.error=Twoja wiadomo\u015B\u0107 nie zosta\u0142a wys\u0142ana. nobody=Nikt -openChat=Wejd\u017A do pokoju czata +openChat=Skorzystaj z komunikatora participants.in.chat=kursant\u00F3w na czacie toogle.anonymous=Poka\u017C nazw\u0119 u\u017Cytkownika update.roster=Aktualizacja diff --git a/src/main/java/org/olat/instantMessaging/rosterandchat/ChatController.java b/src/main/java/org/olat/instantMessaging/rosterandchat/ChatController.java index 978a53f8630fb9b81272bd1f6ccf353655f903d5..0ace3fb3da1b8fb70d17d79a5862ba2ce7c3b8a0 100644 --- a/src/main/java/org/olat/instantMessaging/rosterandchat/ChatController.java +++ b/src/main/java/org/olat/instantMessaging/rosterandchat/ChatController.java @@ -87,7 +87,7 @@ public class ChatController extends BasicController implements GenericEventListe private String jsTweakCmd = ""; private String jsFocusCmd = ""; - private List allChats; + private List<String> allChats; private EventBus singleUserEventCenter; public ChatController(UserRequest ureq, WindowControl wControl, String chatPartnerJid, int offsetX, int offsetY, Message initialMessage) { @@ -97,9 +97,9 @@ public class ChatController extends BasicController implements GenericEventListe this.username = getIdentity().getName(); this.singleUserEventCenter = ureq.getUserSession().getSingleUserEventCenter(); - allChats = (List) ureq.getUserSession().getEntry("chats"); + allChats = (List<String>) ureq.getUserSession().getEntry("chats"); if (allChats == null) { - allChats = new ArrayList(); + allChats = new ArrayList<String>(); ureq.getUserSession().putEntry("chats", allChats); } allChats.add(Integer.toString(hashCode())); @@ -157,7 +157,7 @@ public class ChatController extends BasicController implements GenericEventListe refresh.setCustomEnabledLinkCSS("b_small_icoureq.getUserSession().getSingleUserEventCenter().n sendMessageFormo_instantmessaging_refresh_icon"); refresh.setTitle("im.refresh"); - putInitialPanel(chatPanelCtr.getInitialComponent()); + putInitialPanel(chatPanelCtr.getInitialComponent()); } @Override @@ -203,7 +203,21 @@ public class ChatController extends BasicController implements GenericEventListe * @see org.olat.core.util.event.GenericEventListener#event(org.olat.core.gui.control.Event) */ public void event(Event event) { - InstantMessagingEvent imEvent = (InstantMessagingEvent)event; + if(event instanceof InstantMessagingEvent) { + processInstantMessageEvent((InstantMessagingEvent)event); + } + } + + /** + * This method close the chat from extern + */ + protected void closeChat() { + allChats.remove(Integer.toString(hashCode())); + singleUserEventCenter.fireEventToListenersOf(new MultiUserEvent("ChatWindowClosed"), OresHelper.createOLATResourceableType(InstantMessaging.class)); + chatPanelCtr.executeCloseCommand(); + } + + private void processInstantMessageEvent(InstantMessagingEvent imEvent) { if (imEvent.getCommand().equals("chatmessage")) { //chat mode. user started chat himself Message msg = (Message)imEvent.getPacket(); diff --git a/src/main/java/org/olat/instantMessaging/rosterandchat/ChatManagerController.java b/src/main/java/org/olat/instantMessaging/rosterandchat/ChatManagerController.java index b0115fe0b9086d5b3f96254afa057b8d1990967b..96683c78d10045fe87194a1ae15d5dab0fa8a66f 100644 --- a/src/main/java/org/olat/instantMessaging/rosterandchat/ChatManagerController.java +++ b/src/main/java/org/olat/instantMessaging/rosterandchat/ChatManagerController.java @@ -24,6 +24,7 @@ */ package org.olat.instantMessaging.rosterandchat; +import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; @@ -99,6 +100,24 @@ public class ChatManagerController extends BasicController { protected void doDispose() { chats.clear(); } + + /** + * Close the chats windows + */ + protected void closeAllChats() { + List<String> jabberIds = new ArrayList<String>(chats.keySet()); + for(String jabberId :jabberIds) { + Component p = container.getComponent(jabberId); + if(p != null) { + container.remove(p); + } + ChatController ctrl = chats.get(jabberId); + if(ctrl != null) { + ctrl.closeChat(); + } + } + chats.clear(); + } /** * diff --git a/src/main/java/org/olat/instantMessaging/rosterandchat/InstantMessagingMainController.java b/src/main/java/org/olat/instantMessaging/rosterandchat/InstantMessagingMainController.java index 88e301a009ff9c028c44c22800554b15a76aa911..94c5b7ab80a47af64564ee9b3e53d9535ba7946c 100644 --- a/src/main/java/org/olat/instantMessaging/rosterandchat/InstantMessagingMainController.java +++ b/src/main/java/org/olat/instantMessaging/rosterandchat/InstantMessagingMainController.java @@ -57,7 +57,9 @@ import org.olat.course.nodes.iq.AssessmentEvent; import org.olat.ims.qti.process.AssessmentInstance; import org.olat.instantMessaging.ClientHelper; import org.olat.instantMessaging.ClientManager; +import org.olat.instantMessaging.CloseInstantMessagingEvent; import org.olat.instantMessaging.ConncectedUsersHelper; +import org.olat.instantMessaging.InstantMessaging; import org.olat.instantMessaging.InstantMessagingEvent; import org.olat.instantMessaging.InstantMessagingModule; import org.olat.instantMessaging.OpenInstantMessageEvent; @@ -77,7 +79,6 @@ public class InstantMessagingMainController extends BasicController implements G public static final String ACTION_MSG = "cmd.msg"; private VelocityContainer main = createVelocityContainer("index"); private VelocityContainer chatContent = createVelocityContainer("chat"); - private VelocityContainer chatMsgFieldContent = createVelocityContainer("chatMsgField"); private VelocityContainer statusChangerContent = createVelocityContainer("statusChangerContent"); private VelocityContainer statusChangerLink = createVelocityContainer("statusChangerLink"); private VelocityContainer newMsgIcon = createVelocityContainer("newMsgIcon"); @@ -98,7 +99,6 @@ public class InstantMessagingMainController extends BasicController implements G private String username; private FloatingResizableDialogController statusChangerPanelCtr; private FloatingResizableDialogController rosterPanelCtr; - private FloatingResizableDialogController chatPanelCtr; private JSAndCSSComponent jsc; private ChatManagerController chatMgrCtrl; private Map<String, NewMessageIconInfo> showNewMessageHolder = new HashMap<String, NewMessageIconInfo>(2); @@ -221,6 +221,7 @@ public class InstantMessagingMainController extends BasicController implements G singleUserEventCenter = ureq.getUserSession().getSingleUserEventCenter(); singleUserEventCenter.registerFor(this, getIdentity(), ass); + singleUserEventCenter.registerFor(this, getIdentity(), InstantMessaging.TOWER_EVENT_ORES); putInitialPanel(main); } @@ -233,6 +234,7 @@ public class InstantMessagingMainController extends BasicController implements G InstantMessagingModule.getAdapter().getClientManager().deregisterControllerListener(username, this); InstantMessagingModule.getAdapter().getClientManager().destroyInstantMessagingClient(username); singleUserEventCenter.deregisterFor(this, ass); + singleUserEventCenter.deregisterFor(this, InstantMessaging.TOWER_EVENT_ORES); } /** @@ -375,12 +377,6 @@ public class InstantMessagingMainController extends BasicController implements G onlineOfflineCount.setCustomDisplayText(clientHelper.buddyCountOnline()); removeAsListenerAndDispose(rosterPanelCtr); rosterPanel.setContent(null); - - } else if (source == chatPanelCtr) { - //closing the floating panel event - notifieNewMsgPanel.setContent(newMsgIcon); - chatMsgFieldContent.contextPut("chatMessages", ""); - jsc.setRefreshIntervall(InstantMessagingModule.getIDLE_POLLTIME()); } else if (source == chatMgrCtrl) { //closing events from chat manager controller notifieNewMsgPanel.setContent(newMsgIcon); @@ -393,29 +389,51 @@ public class InstantMessagingMainController extends BasicController implements G * @see org.olat.core.util.event.GenericEventListener#event(org.olat.core.gui.control.Event) */ public void event(Event event) { - - if (event instanceof AssessmentEvent) { - if(((AssessmentEvent)event).getEventType().equals(AssessmentEvent.TYPE.STARTED)) { - main.contextPut("inAssessment", true); - return; - } - if(((AssessmentEvent)event).getEventType().equals(AssessmentEvent.TYPE.STOPPED)) { - OLATResourceable a = OresHelper.createOLATResourceableType(AssessmentInstance.class); - if (singleUserEventCenter.getListeningIdentityCntFor(a)<1) { - main.contextPut("inAssessment", false); - } - return; - } + if(event instanceof InstantMessagingEvent) { + processInstantMessageEvent((InstantMessagingEvent)event); + } else if (event instanceof AssessmentEvent) { + processAssessmentEvent((AssessmentEvent)event); + } else if (event instanceof OpenInstantMessageEvent) { + processOpenInstantMessageEvent((OpenInstantMessageEvent)event); + } else if(event instanceof CloseInstantMessagingEvent) { + processCloseInstantMessageEvent(); } - - if(event instanceof OpenInstantMessageEvent) { - String jabberId = ((OpenInstantMessageEvent)event).getJabberId(); - UserRequest ureq = ((OpenInstantMessageEvent)event).getUreq(); - chatMgrCtrl.createChat(ureq, getWindowControl(), jabberId); - return; + } + + private void processAssessmentEvent(AssessmentEvent event) { + if(event.getEventType().equals(AssessmentEvent.TYPE.STARTED)) { + main.contextPut("inAssessment", true); + } else if(event.getEventType().equals(AssessmentEvent.TYPE.STOPPED)) { + OLATResourceable a = OresHelper.createOLATResourceableType(AssessmentInstance.class); + if (singleUserEventCenter.getListeningIdentityCntFor(a)<1) { + main.contextPut("inAssessment", false); + } + } + } + + private void processOpenInstantMessageEvent(OpenInstantMessageEvent event) { + String jabberId = event.getJabberId(); + UserRequest ureq = event.getUreq(); + chatMgrCtrl.createChat(ureq, getWindowControl(), jabberId); + } + + private void processCloseInstantMessageEvent() { + if(statusChangerPanelCtr != null) { + statusChangerPanelCtr.executeCloseCommand(); + removeAsListenerAndDispose(statusChangerPanelCtr); + statusPanel.setContent(null); } - - InstantMessagingEvent imEvent = (InstantMessagingEvent)event; + if(rosterPanelCtr != null) { + rosterPanelCtr.executeCloseCommand(); + removeAsListenerAndDispose(rosterPanelCtr); + rosterPanel.setContent(null); + } + if(chatMgrCtrl != null) { + chatMgrCtrl.closeAllChats(); + } + } + + private void processInstantMessageEvent(InstantMessagingEvent imEvent) { if (imEvent.getCommand().equals("presence")) { Presence presence = (Presence) imEvent.getPacket(); logDebug("incoming presence for user: "+presence.getFrom() +" type: "+presence, null); @@ -429,7 +447,6 @@ public class InstantMessagingMainController extends BasicController implements G statusChanger.setCustomEnabledLinkCSS("b_small_icon o_instantmessaging_"+clientHelper.getStatus()+"_icon"); statusChanger.setDirty(true); }}); - } else if (imEvent.getCommand().equals("message")) { //user receives messages from an other user Message initialMessage = (Message)imEvent.getPacket(); @@ -449,7 +466,6 @@ public class InstantMessagingMainController extends BasicController implements G } } } - } /** diff --git a/src/main/java/org/olat/login/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/login/_i18n/LocalStrings_de.properties index 35cb5b92bd11596b8e813e0acec2981e36146491..2d2ef69f76c32a1c254fb6d4b88d92f38ec4de6d 100644 --- a/src/main/java/org/olat/login/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/login/_i18n/LocalStrings_de.properties @@ -84,7 +84,7 @@ login.altprovider=Alternative M\u00F6glichkeiten f\u00FCr Login login.blocked=<b>Anmeldung ist f\u00FCr diesen Benutzernamen gesperrt.</b><p><font size\="-1">Es wurden zu viele ung\u00FCltige Anmeldeversuche registriert. Eine Anmeldung mit diesem Benutzernamen wurde aus Sicherheitsgr\u00FCnden f\u00FCr die n\u00E4chsten {0} Minuten gesperrt.</p></font> login.browserswitch=Ihr Internet-Browser unterst\u00FCtzt nicht alle Funktionen in OpenOLAT. Beste Resultate erhalten Sie mit Internet Explorer ab Version 7 sowie <a href\="http\://www.mozilla-europe.org/en/products/firefox/">Mozilla Firefox ab Version 2.</a> login.button=Login -login.error=<b>Benutzername oder Passwort ungültig.</b><p>Mögliche Gründe\:<ul><li><b>Sie haben sich vertippt\:</b><br>Versuchen Sie es bitte nochmals\!<li><b>Sie haben den falschen Benutzernamen und Passwort benutzt\:</b><br>Wenn Sie noch nie mit OpenOLAT gearbeitet haben, m\u00FCssen Sie sich entweder \u00FCber Ihre Hochschule identifizieren oder einen Zugang bei {0} beantragen.</ul></p> +login.error=Benutzername oder Passwort falsch. Bitte versuchen Sie es erneut oder nutzen Sie die Funktion "$:menu.pw". login.form=OpenOLAT Anmeldung login.header=OpenOLAT - infinite learning login.intro=Bitte melden Sie sich mit Ihrem pers\u00F6nlichen OpenOLAT-Benutzernamen und Passwort an. diff --git a/src/main/java/org/olat/login/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/login/_i18n/LocalStrings_en.properties index 5ae389ec098b7c834ca069c9b8b12f87575db9f2..56bf5ccaa6294f4d451b2ac9351b8dbd95e8abeb 100644 --- a/src/main/java/org/olat/login/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/login/_i18n/LocalStrings_en.properties @@ -81,7 +81,7 @@ login.altprovider=Alternative login possibilities. login.blocked=<b>Login blocked for this user name.</b><p><font size\="-1">Too many failed login attempts. For security reasons, further attempts will be blocked for a period of {0} minutes.</p></font> login.browserswitch=Your Internet browser does not support all features of OpenOLAT. For best results we recommend Internet Explorer 7 (or a newer version) or <a href\="http\://www.mozilla-europe.org/en/products/firefox/">Mozilla Firefox 2 (or newer version).</a> login.button=Login -login.error=<b>OpenOLAT user name or password invalid.</b><p>Possible reasons may be\:<ul><li><b>You mistyped\:</b><br>Please try again\!<li><b>Wrong user name or password\:</b><br>If this is the first time you work with OpenOLAT you will either have to identify yourself via your university or contact {0} in order to get access.</ul></p> +login.error=User name or password wrong. Please try again or use the function "$:menu.pw". login.form=OpenOLAT login login.header=OpenOLAT - infinite learning login.intro=Please log in with your personal OpenOLAT user name and password. diff --git a/src/main/java/org/olat/login/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/login/_i18n/LocalStrings_fr.properties index f68ada7bc3f07c1e91f14663b23150a01a29f648..bc2dd9bb37669bd3801637fc77de6e555b3343d3 100644 --- a/src/main/java/org/olat/login/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/login/_i18n/LocalStrings_fr.properties @@ -82,7 +82,7 @@ login.blocked=<b>L'acc\u00E8s pour cet utilisateur est bloqu\u00E9</b><p><font s login.browserswitch=Votre navigateur internet n'est pas compatible avec toutes les fonctions dans OpenOLAT. Vous obtiendrez les meilleurs r\u00E9sultats avec Internet-Explorer \u00E0 partir de la version 7 ainsi qu'avec <a href\="http\://www.mozilla-europe.org/en/products/firefox/">Mozilla Firefox \u00E0 partir de la version 2.</a> login.button=Login login.custommsg= -login.error=<b>Nom d'utilisateur ou mot de passe invalide</b><p>Raisons possibles\:<ul><li><b>Vous avez fait une faute de frappe\:</b><br>Veuillez r\u00E9essayer\!<li><b>Vous avez utilis\u00E9 un mot de passe ou un nom d'utilisateur erronn\u00E9\:</b><br>Si vous n'avez encore jamais travaill\u00E9 avec OpenOLAT 3.x., vous devez vous identifier soit via votre \u00E9tablissement d'enseignement sup\u00E9rieur, soit en demandant un acc\u00E8s \u00E0 {0}.</ul></p> +login.error=Nom d'utilisateur ou mot de passe invalide. Veuillez r\u00E9essayer ou utiliser la fonction "$:menu.pw". login.form=Connexion OpenOLAT login.header=OpenOLAT - infinite learning login.intro=Veuillez vous connecter avec votre nom d'utilisateur et mot de passe OpenOLAT personnel diff --git a/src/main/java/org/olat/login/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/login/_i18n/LocalStrings_pl.properties index 0f1e861efada2ce39ff52ebd700973479b8cbf64..51573560fd6b157bb733661c59d2277f5503dcf6 100644 --- a/src/main/java/org/olat/login/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/login/_i18n/LocalStrings_pl.properties @@ -60,7 +60,7 @@ chelp.dmz.title=Pierwszy dost\u0119p do OpenOLAT chelp.forg1=Kliknij tu, aby uzyska\u0107 pomoc, je\u015Bli zapomnia\u0142e\u015B has\u0142a. chelp.guest1=Mo\u017Cesz r\u00F3wnie\u017C odwiedzi\u0107 OpenOLAT jako go\u015B\u0107 bez rejestracji. chelp.guest2=Jako go\u015B\u0107 dysponujesz ograniczon\u0105 funkcjonalno\u015Bci\u0105. -chelp.log1=Wybierasz swoj\u0105 uczelni\u0119 na stronie pocz\u0105tkowej. Jeste\u015B przekazany i poproszony o podanie swoich danych dost\u0119pu. +chelp.log1=Wprowadzasz swoje dane dost\u0119powe - nazw\u0119 u\u017Cytkownika (lub adres e-mail) oraz has\u0142o. chelp.log2=Tym sposobem mo\u017Cesz u\u017Cywa\u0107 pe\u0142nej funkcjonalno\u015Bci OpenOLAT. chelp.log3=Je\u015Bli nie nale\u017Cysz do \u017Cadnej z wymienionych uczelni, wybierz <i>$\:login.altprovider</i> . default.shib.intro=Zostaniesz przekierowany do uwierzytelniania. diff --git a/src/main/java/org/olat/login/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/login/_i18n/LocalStrings_pt_BR.properties index 2f82c519021956a5a901235948439a9f496f961b..1d6fa3eed2cb9c6f621e88b55d671e56ad30e1f7 100644 --- a/src/main/java/org/olat/login/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/login/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Tue Apr 03 15:51:02 CEST 2012 +#Wed Nov 07 19:11:08 CET 2012 about.copyright=Copyright e contribui\u00E7\u00F5es about.date=Zurique, 8 de Fevereiro de 2011 about.history=O OpenOLAT, Sistema de Gerenciamento de Aprendizagem, est\u00E1 sendo desenvolvido pela comunidade OpenOLAT desde 2011. OpenOLAT \u00E9 derivado do LMS de c\u00F3digo aberto OLAT, desenvolvido pela Universidade de Zurique e \u00E9 usado em todo o mundo por institui\u00E7\u00F5es educacionais e outras empresas. OpenOLAT \u00E9 de fonte aberta e pode ser utilizado e modificado livremente. diff --git a/src/main/java/org/olat/modules/cp/CPDisplayController.java b/src/main/java/org/olat/modules/cp/CPDisplayController.java index a71308e89dfc6d1d4ff8c3edb5b429b792ded90e..17baa563e1e966dc2ca0a308bf5dfe617151581a 100644 --- a/src/main/java/org/olat/modules/cp/CPDisplayController.java +++ b/src/main/java/org/olat/modules/cp/CPDisplayController.java @@ -25,6 +25,7 @@ package org.olat.modules.cp; +import java.io.IOException; import java.util.List; import org.olat.core.CoreSpringFactory; @@ -139,10 +140,17 @@ public class CPDisplayController extends BasicController implements Activateable // even if we do not show the menu, we need to build parse the manifest and // find the first node to display at startup VFSItem mani = rootContainer.resolve("imsmanifest.xml"); - if (mani == null || !(mani instanceof VFSLeaf)) { throw new OLATRuntimeException("error.manifest.missing", null, this.getClass() - .getPackage().getName(), "CP " + rootContainer + " has no imsmanifest", null); } + if (mani == null || !(mani instanceof VFSLeaf)) { + showError("error.manifest.missing"); + return; + } // initialize tree model in any case - ctm = new CPManifestTreeModel((VFSLeaf) mani); + try { + ctm = new CPManifestTreeModel((VFSLeaf) mani); + } catch (IOException e) { + showError("error.manifest.corrupted"); + return; + } if (showMenu) { // the menu is only initialized when needed. diff --git a/src/main/java/org/olat/modules/cp/CPManifestTreeModel.java b/src/main/java/org/olat/modules/cp/CPManifestTreeModel.java index 95435c31a4f7f9f66c529689e511a81386a85c9a..a1d578cbfc485d558d889bdedbcdab67927fcb77 100644 --- a/src/main/java/org/olat/modules/cp/CPManifestTreeModel.java +++ b/src/main/java/org/olat/modules/cp/CPManifestTreeModel.java @@ -35,6 +35,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import org.apache.commons.io.IOUtils; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.XPath; @@ -42,7 +43,6 @@ import org.olat.core.gui.components.tree.GenericTreeModel; import org.olat.core.gui.components.tree.GenericTreeNode; import org.olat.core.gui.components.tree.TreeNode; import org.olat.core.logging.AssertException; -import org.olat.core.logging.OLATRuntimeException; import org.olat.core.util.vfs.VFSLeaf; import org.olat.core.util.xml.XMLParser; import org.olat.ims.resources.IMSEntityResolver; @@ -63,7 +63,7 @@ public class CPManifestTreeModel extends GenericTreeModel { * Constructor of the content packaging tree model * @param manifest the imsmanifest.xml file */ - CPManifestTreeModel(VFSLeaf manifest) { + CPManifestTreeModel(VFSLeaf manifest) throws IOException { Document doc = loadDocument(manifest); // get all organization elements. need to set namespace rootElement = doc.getRootElement(); @@ -182,7 +182,7 @@ public class CPManifestTreeModel extends GenericTreeModel { return gtn; } - private Document loadDocument(VFSLeaf documentF) { + private Document loadDocument(VFSLeaf documentF) throws IOException { InputStream in = null; Document doc = null; try { @@ -190,20 +190,14 @@ public class CPManifestTreeModel extends GenericTreeModel { XMLParser xmlParser = new XMLParser(new IMSEntityResolver()); doc = xmlParser.parse(in, false); in.close(); - } - catch (IOException e) { - throw new OLATRuntimeException(CPManifestTreeModel.class, "could not read and parse from file " + documentF, e); + } catch (IOException e) { + throw e; + } catch(Exception e) { + throw new IOException("could not read and parse from file " + documentF, e); } finally { - try { - if (in != null) - in.close(); - } - catch (Exception e) { - // we did our best to close the inputStream - } + IOUtils.closeQuietly(in); } return doc; } - } diff --git a/src/main/java/org/olat/modules/cp/CPOfflineReadableManager.java b/src/main/java/org/olat/modules/cp/CPOfflineReadableManager.java index 7158f527dade1b1e18c4e3755db19b06f70859e0..4b1fb3d8497176dc168a2628af5c636d4c7dae5c 100644 --- a/src/main/java/org/olat/modules/cp/CPOfflineReadableManager.java +++ b/src/main/java/org/olat/modules/cp/CPOfflineReadableManager.java @@ -65,7 +65,7 @@ import org.olat.fileresource.FileResourceManager; public class CPOfflineReadableManager { private static CPOfflineReadableManager instance = new CPOfflineReadableManager(); - OLog logger = Tracing.createLoggerFor(CPOfflineReadableManager.class); + private static final OLog log = Tracing.createLoggerFor(CPOfflineReadableManager.class); private static final String DIRNAME_CPOFFLINEMENUMAT = "cp_offline_menu_mat"; private static final String FILENAME_START = "_START_.html"; @@ -115,9 +115,13 @@ public class CPOfflineReadableManager { * the resulting zip-filename */ public void makeCPOfflineReadable(File unzippedDir, File targetZip) { - writeOfflineCPStartHTMLFile(unzippedDir); - File cpOfflineMat = new File(WebappHelper.getContextRoot() + "/static/" + DIRNAME_CPOFFLINEMENUMAT); - zipOfflineReadableCP(unzippedDir, targetZip, cpOfflineMat); + try { + writeOfflineCPStartHTMLFile(unzippedDir); + File cpOfflineMat = new File(WebappHelper.getContextRoot() + "/static/" + DIRNAME_CPOFFLINEMENUMAT); + zipOfflineReadableCP(unzippedDir, targetZip, cpOfflineMat); + } catch (IOException e) { + log.error("", e); + } } /** @@ -132,17 +136,21 @@ public class CPOfflineReadableManager { * the resulting zip-filename */ public void makeCPOfflineReadable(OLATResourceable ores, String zipName) { - String repositoryHome = FolderConfig.getCanonicalRepositoryHome(); - FileResourceManager fm = FileResourceManager.getInstance(); - String relPath = fm.getUnzippedDirRel(ores); - String resId = ores.getResourceableId().toString(); + try { + String repositoryHome = FolderConfig.getCanonicalRepositoryHome(); + FileResourceManager fm = FileResourceManager.getInstance(); + String relPath = fm.getUnzippedDirRel(ores); + String resId = ores.getResourceableId().toString(); - File unzippedDir = new File(repositoryHome + "/" + relPath); - File targetZip = new File(repositoryHome + "/" + resId + "/" + zipName); - File cpOfflineMat = new File(WebappHelper.getContextRoot() + "/static/" + DIRNAME_CPOFFLINEMENUMAT); + File unzippedDir = new File(repositoryHome + "/" + relPath); + File targetZip = new File(repositoryHome + "/" + resId + "/" + zipName); + File cpOfflineMat = new File(WebappHelper.getContextRoot() + "/static/" + DIRNAME_CPOFFLINEMENUMAT); - writeOfflineCPStartHTMLFile(unzippedDir); - zipOfflineReadableCP(unzippedDir, targetZip, cpOfflineMat); + writeOfflineCPStartHTMLFile(unzippedDir); + zipOfflineReadableCP(unzippedDir, targetZip, cpOfflineMat); + } catch (IOException e) { + log.error("", e); + } } /** @@ -154,7 +162,7 @@ public class CPOfflineReadableManager { * @param unzippedDir * the directory that contains the unzipped CP */ - private void writeOfflineCPStartHTMLFile(File unzippedDir) { + private void writeOfflineCPStartHTMLFile(File unzippedDir) throws IOException { /* first, we do the menu-tree */ File mani = new File(unzippedDir, FILENAME_IMSMANIFEST); @@ -178,9 +186,9 @@ public class CPOfflineReadableManager { String template = FileUtils.load(CPOfflineReadableManager.class.getResourceAsStream("_content/cpofflinereadable.html"), "utf-8"); boolean evalResult = velocityEngine.evaluate(ctx, sw, "cpexport", template); if (!evalResult) - logger.error("Could not evaluate velocity template for CP Export"); + log.error("Could not evaluate velocity template for CP Export"); } catch (IOException e) { - logger.error("Error while evaluating velovity template for CP Export",e); + log.error("Error while evaluating velovity template for CP Export",e); } File f = new File(unzippedDir, FILENAME_START); @@ -270,7 +278,7 @@ public class CPOfflineReadableManager { boolean zipResult = ZipUtil.zip(allFilesInUnzippedDir, unzippedDir, targetZip, true); if(!targetZip.exists()){ - logger.warn("targetZip does not exists after zipping. zip-result is: "+ zipResult); + log.warn("targetZip does not exists after zipping. zip-result is: "+ zipResult); } } diff --git a/src/main/java/org/olat/modules/cp/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/cp/_i18n/LocalStrings_de.properties index d81af75d872720b143c92430cb589b19c04d9e83..6ba8541289cfb3e9c4939e6f0869c7a1140c6284 100644 --- a/src/main/java/org/olat/modules/cp/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/modules/cp/_i18n/LocalStrings_de.properties @@ -4,4 +4,5 @@ print.node=Drucken print.node.list=Seite print.node.list.title=Druckkonfiguration print.node.list.desc=W\u00E4hlen Sie eine oder mehrere Seiten f\u00FCr den Ausdruck aus -error.manifest.missing=Dieser CP-Lerninhalt ist ung\u00FCltig\: Fehlendes imsmanifest.xml. Mehr Informationen dazu finden Sie unter http\://www.imsglobal.org. \ No newline at end of file +error.manifest.missing=Dieser CP-Lerninhalt ist ung\u00FCltig\: Fehlendes imsmanifest.xml. Mehr Informationen dazu finden Sie unter http\://www.imsglobal.org. +error.manifest.corrupted=Dieser CP-Lerninhalt ist ung\u00FCltig\: imsmanifest.xml ist ung\u00FCltig. Mehr Informationen dazu finden Sie unter http\://www.imsglobal.org. \ No newline at end of file diff --git a/src/main/java/org/olat/modules/cp/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/cp/_i18n/LocalStrings_en.properties index bdeef23e04a3a725a1e7799439b9107ecb63fcfa..9d40ab1cf56c7459bdb4108a3501fdfb9dee85d9 100644 --- a/src/main/java/org/olat/modules/cp/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/modules/cp/_i18n/LocalStrings_en.properties @@ -1,5 +1,6 @@ #Mon May 16 17:33:59 CEST 2011 error.manifest.missing=This CP learning content is invalid\: missing imsmanifest.xml. For more information see http\://www.imsglobal.org. +error.manifest.corrupted=This CP learning content is invalid\: imsmanifest.xml is probably invalid. For more information see http\://www.imsglobal.org. previous=Back print.node=Print print.node.list=Page diff --git a/src/main/java/org/olat/modules/cp/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/modules/cp/_i18n/LocalStrings_pt_BR.properties index 653aa351ee88fe16b6f1db4add905f9962f5b2aa..8c6bd78318cd16ff8556efe529270d83d4e6514b 100644 --- a/src/main/java/org/olat/modules/cp/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/modules/cp/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,5 @@ -#Tue Apr 03 14:58:42 CEST 2012 +#Wed Nov 07 21:34:15 CET 2012 +error.manifest.corrupted=Este conte\u00FAdo aprendizagem CP \u00E9 inv\u00E1lido\: imsmanifest.xml provavelmente \u00E9 inv\u00E1lido. Para mais informa\u00E7\u00F5es, consulte http\://www.imsglobal.org. error.manifest.missing=Este conte\u00FAdo IMS-CP \u00E9 inv\u00E1lido\: manifesto imsmanifest.xml ausente. Para mais informa\u00E7\u00F5es veja http\://www.imsglobal.org previous=Voltar print.node=Imprimir diff --git a/src/main/java/org/olat/modules/glossary/CreateNewGlossaryController.java b/src/main/java/org/olat/modules/glossary/CreateNewGlossaryController.java index ed95d27c6e1b3e22c265cac057663517cc67c07f..686cc39e3d67a13d6170a5b02ab67f42f9f2cae4 100644 --- a/src/main/java/org/olat/modules/glossary/CreateNewGlossaryController.java +++ b/src/main/java/org/olat/modules/glossary/CreateNewGlossaryController.java @@ -105,6 +105,11 @@ public class CreateNewGlossaryController extends DefaultController implements IA return; } // nothing to do here. + @Override + public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) { + // + } + /** * @see org.olat.core.gui.control.DefaultController#doDispose(boolean) */ diff --git a/src/main/java/org/olat/modules/iq/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/modules/iq/_i18n/LocalStrings_pl.properties index f5cacf4a566ca3416c86279902b5330fe9697c2e..e4d7fff44ddf5d4dc4c9c35d4f4de85643073df8 100644 --- a/src/main/java/org/olat/modules/iq/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/modules/iq/_i18n/LocalStrings_pl.properties @@ -15,7 +15,7 @@ MESSAGE_SECTION_INFODEMANDED=Informacje o tej sekcji pyta\u0144. MESSAGE_SECTION_SUBMITTED=Odpowiedzi w tej sesji zosta\u0142y zapisane. ResBuilder.NoAnswer=[brak odpowiedzi] actualPoints=Obecny wynik -attemptsleft=Zosta\u0142o {0} pr\u00F3b. +attemptsleft=Zosta\u0142o(y) {0} pr\u00F3b(y). attemptslimit=Liczba pr\u00F3b ograniczona cancelAssess=Anuluj test cancelSurvey=Anuluj ankiet\u0119 diff --git a/src/main/java/org/olat/modules/scorm/ScormAPIMapper.java b/src/main/java/org/olat/modules/scorm/ScormAPIMapper.java index 0147b02ba086f794f1b7793830c9f47289a0e26d..64baa3211b6a69d70eb333776b3a6ee37ccd46cd 100644 --- a/src/main/java/org/olat/modules/scorm/ScormAPIMapper.java +++ b/src/main/java/org/olat/modules/scorm/ScormAPIMapper.java @@ -77,14 +77,15 @@ public class ScormAPIMapper implements Mapper, ScormAPICallback, Serializable { private String lesson_mode; private String credit_mode; private boolean isAssessable; - private boolean incrementsAttempt; + private boolean attemptsIncremeted; private File cpRoot; public ScormAPIMapper() { //for XStream } - public ScormAPIMapper(Identity identity, String resourceId, String courseIdNodeId, boolean isAssessable, File cpRoot, OLATApiAdapter scormAdapter) { + public ScormAPIMapper(Identity identity, String resourceId, String courseIdNodeId, boolean isAssessable, + File cpRoot, OLATApiAdapter scormAdapter, boolean attemptsIncremeted) { this.scormAdapter = scormAdapter; this.identity = identity; this.identityKey = identity.getKey(); @@ -94,8 +95,8 @@ public class ScormAPIMapper implements Mapper, ScormAPICallback, Serializable { this.cpRoot = cpRoot; this.lesson_mode = scormAdapter.getLessonMode(); this.credit_mode = scormAdapter.getCreditMode(); - this.incrementsAttempt = true; this.scormAdapter.addAPIListener(this); + this.attemptsIncremeted = attemptsIncremeted; } private final void check() { @@ -128,30 +129,10 @@ public class ScormAPIMapper implements Mapper, ScormAPICallback, Serializable { } @Override - public void lmsCommit(String olatSahsId, Properties scoScores) { + public void lmsCommit(String olatSahsId, Properties scoProperties) { if (isAssessable) { checkForLms(); - - // do a sum-of-scores over all sco scores - float score = 0f; - for (Iterator<Object> it_score = scoScores.values().iterator(); it_score.hasNext();) { - String aScore = (String) it_score.next(); - float ascore = Float.parseFloat(aScore); - score += ascore; - } - float cutval = scormNode.getCutValueConfiguration().floatValue(); - boolean passed = (score >= cutval); - ScoreEvaluation sceval = new ScoreEvaluation(new Float(score), Boolean.valueOf(passed)); - boolean incrementAttempts = false; - scormNode.updateUserScoreEvaluation(sceval, userCourseEnv, identity, incrementAttempts); - userCourseEnv.getScoreAccounting().scoreInfoChanged(scormNode, sceval); - - if (log.isDebug()) { - String msg = "for scorm node:" + scormNode.getIdent() + " (" + scormNode.getShortTitle() + ") a lmsCommit for scoId " - + olatSahsId + " occured, total sum = " + score + ", cutvalue =" + cutval + ", passed: " + passed - + ", all scores now = " + scoScores.toString(); - log.debug(msg, null); - } + calculateScorePassed(olatSahsId, scoProperties); } } @@ -159,62 +140,62 @@ public class ScormAPIMapper implements Mapper, ScormAPICallback, Serializable { public void lmsFinish(String olatSahsId, Properties scoProperties) { if (isAssessable) { checkForLms(); - - // do a sum-of-scores over all sco scores + calculateScorePassed(olatSahsId, scoProperties); + } + } + + private void calculateScorePassed(String olatSahsId, Properties scoProperties) { + // do a sum-of-scores over all sco scores + // <OLATEE-27> + float score = -1f; + // </OLATEE-27> + for (Iterator<Object> it_score = scoProperties.values().iterator(); it_score.hasNext();) { // <OLATEE-27> - float score = -1f; + if (score < 0f) { + score = 0f; + } // </OLATEE-27> - for (Iterator<Object> it_score = scoProperties.values().iterator(); it_score.hasNext();) { - // <OLATEE-27> - if (score == -1f) { - score = 0f; - } + String aScore = (String) it_score.next(); + float ascore = Float.parseFloat(aScore); + score += ascore; + } + + float cutval = scormNode.getCutValueConfiguration().floatValue(); + boolean passed = (score >= cutval); + // if advanceScore option is set update the score only if it is higher + // <OLATEE-27> + ModuleConfiguration config = scormNode.getModuleConfiguration(); + if (config.getBooleanSafe(ScormEditController.CONFIG_ADVANCESCORE, true)) { + Float currentScore = scormNode.getUserScoreEvaluation(userCourseEnv).getScore(); + if (score > (currentScore != null ? currentScore : -1f)) { // </OLATEE-27> - String aScore = (String) it_score.next(); - float ascore = Float.parseFloat(aScore); - score += ascore; - } - - float cutval = scormNode.getCutValueConfiguration().floatValue(); - ScoreEvaluation sceval; - boolean passed = (score >= cutval); - boolean incrementAttemptsOnFinish = incrementsAttempt; - // if advanceScore option is set update the score only if it is - // higher - // <OLATEE-27> - ModuleConfiguration config = scormNode.getModuleConfiguration(); - if (config.getBooleanSafe(ScormEditController.CONFIG_ADVANCESCORE, true)) { - if (score > (scormNode.getUserScoreEvaluation(userCourseEnv).getScore() != null ? scormNode.getUserScoreEvaluation( - userCourseEnv).getScore() : -1)) { - // </OLATEE-27> - sceval = new ScoreEvaluation(new Float(score), Boolean.valueOf(passed)); - scormNode.updateUserScoreEvaluation(sceval, userCourseEnv, identity, incrementAttemptsOnFinish); - userCourseEnv.getScoreAccounting().scoreInfoChanged(scormNode, sceval); - incrementsAttempt = false;//increment only once - } else if (!config.getBooleanSafe(ScormEditController.CONFIG_ATTEMPTSDEPENDONSCORE, false)) { - sceval = scormNode.getUserScoreEvaluation(userCourseEnv); - scormNode.updateUserScoreEvaluation(sceval, userCourseEnv, identity, incrementAttemptsOnFinish); - userCourseEnv.getScoreAccounting().scoreInfoChanged(scormNode, sceval); - incrementsAttempt = false;//increment only once + if(!attemptsIncremeted && config.getBooleanSafe(ScormEditController.CONFIG_ATTEMPTSDEPENDONSCORE, false)) { + attemptsIncremeted = true; } - } else { - // <OLATEE-27> - if (score == -1f) { - score = 0f; - } - // </OLATEE-27> - sceval = new ScoreEvaluation(new Float(score), Boolean.valueOf(passed)); - scormNode.updateUserScoreEvaluation(sceval, userCourseEnv, identity, incrementAttemptsOnFinish); + ScoreEvaluation sceval = new ScoreEvaluation(new Float(score), Boolean.valueOf(passed)); + scormNode.updateUserScoreEvaluation(sceval, userCourseEnv, identity, attemptsIncremeted); + userCourseEnv.getScoreAccounting().scoreInfoChanged(scormNode, sceval); + } else if (!config.getBooleanSafe(ScormEditController.CONFIG_ATTEMPTSDEPENDONSCORE, false)) { + ScoreEvaluation sceval = scormNode.getUserScoreEvaluation(userCourseEnv); + scormNode.updateUserScoreEvaluation(sceval, userCourseEnv, identity, false); userCourseEnv.getScoreAccounting().scoreInfoChanged(scormNode, sceval); - incrementsAttempt = false;//increment only once } - - if (log.isDebug()) { - String msg = "for scorm node:" + scormNode.getIdent() + " (" + scormNode.getShortTitle() + ") a lmsCommit for scoId " - + olatSahsId + " occured, total sum = " + score + ", cutvalue =" + cutval + ", passed: " + passed - + ", all scores now = " + scoProperties.toString(); - log.debug(msg, null); + } else { + // <OLATEE-27> + if (score < 0f) { + score = 0f; } + // </OLATEE-27> + ScoreEvaluation sceval = new ScoreEvaluation(new Float(score), Boolean.valueOf(passed)); + scormNode.updateUserScoreEvaluation(sceval, userCourseEnv, identity, false); + userCourseEnv.getScoreAccounting().scoreInfoChanged(scormNode, sceval); + } + + if (log.isDebug()) { + String msg = "for scorm node:" + scormNode.getIdent() + " (" + scormNode.getShortTitle() + ") a lmsCommit for scoId " + + olatSahsId + " occured, total sum = " + score + ", cutvalue =" + cutval + ", passed: " + passed + + ", all scores now = " + scoProperties.toString(); + log.debug(msg, null); } } @@ -229,7 +210,6 @@ public class ScormAPIMapper implements Mapper, ScormAPICallback, Serializable { log.debug("scorm api request by user:"+ identity.getName() +": " + apiCall + "('" + apiCallParamOne + "' , '" + apiCallParamTwo + "')"); } - String returnValue = ""; StringMediaResource smr = new StringMediaResource(); smr.setContentType("text/html"); smr.setEncoding("utf-8"); @@ -239,8 +219,8 @@ public class ScormAPIMapper implements Mapper, ScormAPICallback, Serializable { smr.setData("<html><body></body></html>"); return smr; } - + String returnValue = ""; if (apiCall != null) { if (apiCall.equals(LMS_INITIALIZE)) { returnValue = scormAdapter.LMSInitialize(apiCallParamOne); @@ -262,10 +242,8 @@ public class ScormAPIMapper implements Mapper, ScormAPICallback, Serializable { smr.setData("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"></head><body><p>" + returnValue + "</p></body></html>"); return smr; - } smr.setData(""); return smr; } - -} +} \ No newline at end of file diff --git a/src/main/java/org/olat/modules/scorm/ScormAPIandDisplayController.java b/src/main/java/org/olat/modules/scorm/ScormAPIandDisplayController.java index 97c4fca5efb3d6b13ff2c7de730de0f8849cf0d0..adc95ce0d22b073a1f80704b0e79df7192f1740e 100644 --- a/src/main/java/org/olat/modules/scorm/ScormAPIandDisplayController.java +++ b/src/main/java/org/olat/modules/scorm/ScormAPIandDisplayController.java @@ -26,18 +26,15 @@ package org.olat.modules.scorm; import java.io.File; -import java.util.Collections; import java.util.Iterator; import java.util.Locale; import java.util.Map; -import org.olat.core.CoreSpringFactory; import org.olat.core.commons.fullWebApp.LayoutMain3ColsBackController; import org.olat.core.commons.fullWebApp.LayoutMain3ColsController; import org.olat.core.commons.fullWebApp.LayoutMain3ColsPreviewController; import org.olat.core.commons.modules.bc.FolderConfig; import org.olat.core.dispatcher.mapper.Mapper; -import org.olat.core.dispatcher.mapper.MapperService; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.htmlheader.jscss.JSAndCSSComponent; @@ -48,6 +45,7 @@ import org.olat.core.gui.components.tree.MenuTree; import org.olat.core.gui.components.tree.TreeEvent; import org.olat.core.gui.components.tree.TreeNode; import org.olat.core.gui.components.velocity.VelocityContainer; +import org.olat.core.gui.control.ConfigurationChangedListener; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; @@ -70,11 +68,8 @@ import org.olat.course.CourseModule; * the sco api calls to the scorm RTE backend. It provides also an navigation to * navigate in the tree with "pre" "next" buttons. */ -public class ScormAPIandDisplayController extends MainLayoutBasicController { - //private static final String PACKAGE = Util.getPackageName(ScormAPIandDisplayController.class); +public class ScormAPIandDisplayController extends MainLayoutBasicController implements ConfigurationChangedListener { - // private static final String ACTIVITY_CONTENTPACKING_GET_FILE = - // "CONTENTPACKING_GET_FILE"; protected static final String LMS_INITIALIZE = "LMSInitialize"; protected static final String LMS_GETVALUE = "LMSGetValue"; protected static final String LMS_SETVALUE = "LMSSetValue"; @@ -105,9 +100,11 @@ public class ScormAPIandDisplayController extends MainLayoutBasicController { * @param lesson_mode add null for the default value or "normal", "browse" or * "review" * @param credit_mode add null for the default value or "credit", "no-credit" + * @param attemptsIncremented Is the attempts counter already incremented */ - ScormAPIandDisplayController(UserRequest ureq, WindowControl wControl, boolean showMenu, ScormAPICallback apiCallback, File cpRoot, String resourceId, String courseIdNodeId, String lesson_mode, - String credit_mode, boolean previewMode, boolean assessable, boolean activate, boolean fullWindow) { + ScormAPIandDisplayController(UserRequest ureq, WindowControl wControl, boolean showMenu, ScormAPICallback apiCallback, + File cpRoot, String resourceId, String courseIdNodeId, String lesson_mode, String credit_mode, + boolean previewMode, boolean assessable, boolean activate, boolean fullWindow, boolean attemptsIncremented) { super(ureq, wControl); // logging-note: the callers of createScormAPIandDisplayController make sure they have the scorm resource added to the ThreadLocalUserActivityLogger @@ -220,7 +217,7 @@ public class ScormAPIandDisplayController extends MainLayoutBasicController { listenTo(columnLayoutCtr); //scrom API calls get handled by this mapper - Mapper mapper = new ScormAPIMapper(ureq.getIdentity(), resourceId, courseIdNodeId, assessable, cpRoot, scormAdapter); + Mapper mapper = new ScormAPIMapper(ureq.getIdentity(), resourceId, courseIdNodeId, assessable, cpRoot, scormAdapter, attemptsIncremented); String scormCallbackUri = registerMapper(ureq, mapper); myContent.contextPut("scormCallbackUri", scormCallbackUri+"/"); } @@ -340,6 +337,17 @@ public class ScormAPIandDisplayController extends MainLayoutBasicController { scormAdapter.launchItem(scormId); iframectr.setCurrentURI(identifierRes); } + + @Override + public void configurationChanged() { + if(columnLayoutCtr instanceof LayoutMain3ColsBackController) { + LayoutMain3ColsBackController layoutCtr = (LayoutMain3ColsBackController)columnLayoutCtr; + layoutCtr.deactivate(); + } else if(columnLayoutCtr instanceof LayoutMain3ColsController) { + LayoutMain3ColsController layoutCtr = (LayoutMain3ColsController)columnLayoutCtr; + layoutCtr.deactivate(null); + } + } /** * @see org.olat.core.gui.control.DefaultController#doDispose(boolean) diff --git a/src/main/java/org/olat/modules/scorm/ScormMainManager.java b/src/main/java/org/olat/modules/scorm/ScormMainManager.java index b9ea7bb5eb9b89248c703e343080d9b48a4fdfec..3cbf29bed6d4be45a05c50cf675e60755d858cee 100644 --- a/src/main/java/org/olat/modules/scorm/ScormMainManager.java +++ b/src/main/java/org/olat/modules/scorm/ScormMainManager.java @@ -63,8 +63,11 @@ public class ScormMainManager extends BasicManager { */ //fxdiff FXOLAT-116: SCORM improvements public ScormAPIandDisplayController createScormAPIandDisplayController(UserRequest ureq, WindowControl wControl, boolean showMenu, ScormAPICallback apiCallback, - File cpRoot, String resourceId, String courseId, String lesson_mode, String credit_mode, boolean previewMode, boolean assessable, boolean activate, boolean fullWindow) { - return new ScormAPIandDisplayController(ureq, wControl, showMenu, apiCallback, cpRoot, resourceId, courseId, lesson_mode, credit_mode, previewMode, assessable, activate, fullWindow); + File cpRoot, String resourceId, String courseId, String lesson_mode, String credit_mode, + boolean previewMode, boolean assessable, boolean activate, boolean fullWindow, boolean attemptsIncremented) { + + return new ScormAPIandDisplayController(ureq, wControl, showMenu, apiCallback, cpRoot, resourceId, courseId, lesson_mode, credit_mode, + previewMode, assessable, activate, fullWindow, attemptsIncremented); } } diff --git a/src/main/java/org/olat/modules/sharedfolder/CreateNewSharedFolderController.java b/src/main/java/org/olat/modules/sharedfolder/CreateNewSharedFolderController.java index 7246a6da5e89692923268f0be4251122e78d6bb1..0c76ad279d3620582a197130814a4f4379efb342 100644 --- a/src/main/java/org/olat/modules/sharedfolder/CreateNewSharedFolderController.java +++ b/src/main/java/org/olat/modules/sharedfolder/CreateNewSharedFolderController.java @@ -100,6 +100,11 @@ public class CreateNewSharedFolderController extends DefaultController implement return; } // nothing to do here. + @Override + public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) { + // + } + /** * @see org.olat.core.gui.control.DefaultController#doDispose(boolean) */ diff --git a/src/main/java/org/olat/modules/vitero/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/modules/vitero/ui/_i18n/LocalStrings_pt_BR.properties index 7da2ea0e6d7ce36dba1d5b85b875e48998dc9ddd..d4e50346dbead384aae42d6b6e5c3c242f5eba58 100644 --- a/src/main/java/org/olat/modules/vitero/ui/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/modules/vitero/ui/_i18n/LocalStrings_pt_BR.properties @@ -1,2 +1,2 @@ -#Mon Apr 02 17:44:20 CEST 2012 +#Wed Nov 07 18:11:44 CET 2012 admin.menu.title=vitero diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefactHandler.java b/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefactHandler.java index 8ebac701fa5830826848023069c83c9b50d81405..5c6a8487decd70b3aecbf9c051ff848d3da7ac2e 100644 --- a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefactHandler.java +++ b/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogArtefactHandler.java @@ -121,9 +121,8 @@ public class LiveBlogArtefactHandler extends EPAbstractHandler<LiveBlogArtefact> OLATResourceable ores = OresHelper.createOLATResourceableInstance(BlogFileResource.TYPE_NAME, Long.parseLong(oresId)); Feed feed = manager.getFeed(ores); - DummyFilter filter = new DummyFilter(); for (Item item : feed.getPublishedItems()) { - OlatDocument itemDoc = new FeedItemDocument(item, context, filter); + OlatDocument itemDoc = new FeedItemDocument(item, context); String content = itemDoc.getContent(); sb.append(content); } diff --git a/src/main/java/org/olat/modules/webFeed/search/document/FeedItemDocument.java b/src/main/java/org/olat/modules/webFeed/search/document/FeedItemDocument.java index 304e451b09fc75e742245ee4df7e3a237e78b020..bc462fd0f84d6c71fb71bc76336e5f0d9e686d38 100644 --- a/src/main/java/org/olat/modules/webFeed/search/document/FeedItemDocument.java +++ b/src/main/java/org/olat/modules/webFeed/search/document/FeedItemDocument.java @@ -21,6 +21,7 @@ package org.olat.modules.webFeed.search.document; import org.olat.core.commons.services.search.OlatDocument; import org.olat.core.util.filter.Filter; +import org.olat.core.util.filter.FilterFactory; import org.olat.modules.webFeed.models.Item; import org.olat.search.service.SearchResourceContext; @@ -33,13 +34,18 @@ import org.olat.search.service.SearchResourceContext; * @author gwassmann */ public class FeedItemDocument extends OlatDocument { + private static Filter tagsFilter = FilterFactory.getHtmlTagsFilter(); - public FeedItemDocument(Item item, SearchResourceContext searchResourceContext, Filter mediaUrlFilter) { + public FeedItemDocument(Item item, SearchResourceContext searchResourceContext) { super(); setTitle(item.getTitle()); - setAuthor(item.getAuthor()); - setDescription(mediaUrlFilter.filter(item.getDescription())); - setContent(mediaUrlFilter.filter(item.getContent())); + setAuthor(item.getAuthor()); + // Remove HTML tags from description and content, not useful in index + String rawDescription = tagsFilter.filter(item.getDescription()); + setDescription(rawDescription); + // Remove HTML tags from content and content, not useful in index + String rawContent = tagsFilter.filter(item.getContent()); + setContent(rawContent); setLastChange(item.getLastModified()); setResourceUrl(searchResourceContext.getResourceUrl()); setDocumentType(searchResourceContext.getDocumentType()); diff --git a/src/main/java/org/olat/modules/webFeed/search/indexer/FeedCourseNodeIndexer.java b/src/main/java/org/olat/modules/webFeed/search/indexer/FeedCourseNodeIndexer.java index 58d3364ddb97467b3f24a4393f4f25d3d9e09821..fdda0d5b090da75387de765019b8673b6ce2730b 100644 --- a/src/main/java/org/olat/modules/webFeed/search/indexer/FeedCourseNodeIndexer.java +++ b/src/main/java/org/olat/modules/webFeed/search/indexer/FeedCourseNodeIndexer.java @@ -24,11 +24,8 @@ import java.io.IOException; import org.olat.core.commons.services.search.OlatDocument; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; -import org.olat.core.util.filter.Filter; -import org.olat.core.util.filter.FilterFactory; import org.olat.course.ICourse; import org.olat.course.nodes.CourseNode; -import org.olat.modules.webFeed.dispatching.Path; import org.olat.modules.webFeed.managers.FeedManager; import org.olat.modules.webFeed.models.Feed; import org.olat.modules.webFeed.models.Item; @@ -85,13 +82,9 @@ public abstract class FeedCourseNodeIndexer extends DefaultIndexer implements Co OlatDocument feedNodeDoc = new FeedNodeDocument(feed, nodeSearchContext); indexer.addDocument(feedNodeDoc.getLuceneDocument()); - // Make sure images are displayed properly - String mapperBaseURL = Path.getFeedBaseUri(feed, null, course.getResourceableId(), courseNode.getIdent()); - Filter mediaUrlFilter = FilterFactory.getBaseURLToMediaRelativeURLFilter(mapperBaseURL); - // Only index items. Feed itself is indexed by RepositoryEntryIndexer. for (Item item : feed.getPublishedItems()) { - OlatDocument itemDoc = new FeedItemDocument(item, nodeSearchContext, mediaUrlFilter); + OlatDocument itemDoc = new FeedItemDocument(item, nodeSearchContext); indexer.addDocument(itemDoc.getLuceneDocument()); } } catch (NullPointerException e) { diff --git a/src/main/java/org/olat/modules/webFeed/search/indexer/FeedRepositoryIndexer.java b/src/main/java/org/olat/modules/webFeed/search/indexer/FeedRepositoryIndexer.java index 53b01438846800d8d134071343eaf9c66cdc276b..7a2886945f64127f4eb18f580afaf9c82fca312e 100644 --- a/src/main/java/org/olat/modules/webFeed/search/indexer/FeedRepositoryIndexer.java +++ b/src/main/java/org/olat/modules/webFeed/search/indexer/FeedRepositoryIndexer.java @@ -22,9 +22,6 @@ package org.olat.modules.webFeed.search.indexer; import java.io.IOException; import org.olat.core.commons.services.search.OlatDocument; -import org.olat.core.util.filter.Filter; -import org.olat.core.util.filter.FilterFactory; -import org.olat.modules.webFeed.dispatching.Path; import org.olat.modules.webFeed.managers.FeedManager; import org.olat.modules.webFeed.models.Feed; import org.olat.modules.webFeed.models.Item; @@ -61,12 +58,6 @@ public abstract class FeedRepositoryIndexer extends DefaultIndexer { } Feed feed = FeedManager.getInstance().getFeed(repositoryEntry.getOlatResource()); - // Make sure images are displayed properly - // TODO:GW It's only working for public resources, because base url is - // personal. -> fix - String mapperBaseURL = Path.getFeedBaseUri(feed, null, null, null); - Filter mediaUrlFilter = FilterFactory.getBaseURLToMediaRelativeURLFilter(mapperBaseURL); - // Only index items. Feed itself is indexed by RepositoryEntryIndexer. if (isLogDebugEnabled()) { logDebug("PublishedItems size=" + feed.getPublishedItems().size()); @@ -74,7 +65,7 @@ public abstract class FeedRepositoryIndexer extends DefaultIndexer { for (Item item : feed.getPublishedItems()) { SearchResourceContext feedContext = new SearchResourceContext(searchResourceContext); feedContext.setDocumentType(getDocumentType()); - OlatDocument itemDoc = new FeedItemDocument(item, feedContext, mediaUrlFilter); + OlatDocument itemDoc = new FeedItemDocument(item, feedContext); indexer.addDocument(itemDoc.getLuceneDocument()); } } catch (NullPointerException e) { diff --git a/src/main/java/org/olat/modules/webFeed/ui/blog/CreateBlogController.java b/src/main/java/org/olat/modules/webFeed/ui/blog/CreateBlogController.java index 6670ebb34b04a4edccd3fde101bc40301fdf3522..b4b1a0dab844ba01f3752d3cecbfd9e40bbc2c7a 100644 --- a/src/main/java/org/olat/modules/webFeed/ui/blog/CreateBlogController.java +++ b/src/main/java/org/olat/modules/webFeed/ui/blog/CreateBlogController.java @@ -93,10 +93,15 @@ public class CreateBlogController extends DefaultController implements IAddContr /** * @see org.olat.repository.controllers.IAddController#repositoryEntryCreated(org.olat.repository.RepositoryEntry) */ - @SuppressWarnings("unused") + @Override public void repositoryEntryCreated(RepositoryEntry re) { // Nothing to do here, but thanks for asking. } + + @Override + public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) { + // + } /** * @see org.olat.repository.controllers.IAddController#transactionAborted() diff --git a/src/main/java/org/olat/modules/webFeed/ui/podcast/CreatePodcastController.java b/src/main/java/org/olat/modules/webFeed/ui/podcast/CreatePodcastController.java index 0d34690fe22633abfd4830d30fd56af88b790613..f281c26373155b30ff7cd828c6881d5174e5871b 100644 --- a/src/main/java/org/olat/modules/webFeed/ui/podcast/CreatePodcastController.java +++ b/src/main/java/org/olat/modules/webFeed/ui/podcast/CreatePodcastController.java @@ -93,10 +93,15 @@ public class CreatePodcastController extends DefaultController implements IAddCo /** * @see org.olat.repository.controllers.IAddController#repositoryEntryCreated(org.olat.repository.RepositoryEntry) */ - @SuppressWarnings("unused") + @Override public void repositoryEntryCreated(RepositoryEntry re) { // Nothing to do here, but thanks for asking. } + + @Override + public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) { + // + } /** * @see org.olat.repository.controllers.IAddController#transactionAborted() diff --git a/src/main/java/org/olat/portfolio/ui/CreateStructureMapTemplateController.java b/src/main/java/org/olat/portfolio/ui/CreateStructureMapTemplateController.java index 4e71be748134b408425eb4c03dc47e141ed5be9f..987a8606eef1c19657d32106d2379d55d68b5bec 100644 --- a/src/main/java/org/olat/portfolio/ui/CreateStructureMapTemplateController.java +++ b/src/main/java/org/olat/portfolio/ui/CreateStructureMapTemplateController.java @@ -85,7 +85,6 @@ public class CreateStructureMapTemplateController extends BasicController implem * org.olat.core.gui.control.Event) */ @Override - @SuppressWarnings("unused") protected void event(UserRequest ureq, Component source, Event event) { // Nothing to catch } @@ -111,6 +110,11 @@ public class CreateStructureMapTemplateController extends BasicController implem ePFMgr.createAndPersistPortfolioPage(mapTemp, title, description); } } + + @Override + public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) { + // + } /** * @see org.olat.repository.controllers.IAddController#transactionAborted() diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_pl.properties index 9e27034b7e0be631a9ef82209bd3c705c12f25ca..80e9e02ec53b26aa8688938664678192a2130f79 100644 --- a/src/main/java/org/olat/registration/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_pl.properties @@ -7,8 +7,8 @@ disclaimer.form.cancelled=Nie zaakceptowa\u0142e\u015B warunk\u00F3w disclaimer.header=Warunki disclaimer.nok=Odrzu\u0107 disclaimer.ok=Akceptuj -disclaimer.paragraph1=U\u00BFytkownik OpenOLAT musi by\u0107 \u015Bwiadom, \u017Ce OpenOLAT mo\u017Ce by\u0107 u\u017Cywany wy\u0142\u0105cznie do uczenia si\u0119 lub nauczania. On/ona nie mo\u017Ce narusza\u0107 jakiegokolwiek prawa Szwajcarii. W szczeg\u00F3lno\u015Bci u\u017Cytkownicy OpenOLAT nie mog\u0105 rozpowszechnia\u0107 materia\u0142\u00F3w pornograficznych, rasistowskich, lub natutury drastycznej, lub przechowywa\u0107 takie materia\u0142y na serwerze OpenOLAT. Ponadto u\u017Cytkownicy nie mog\u0105 udost\u0119pnia\u0107 materia\u0142\u00F3w pod\u017Cegaj\u0105cych do nielegalnych dzia\u0142a\u0144. -disclaimer.paragraph2=The service operator rezerwuje sobie prawo do blokowania dost\u0119pu do serwera OpenOLAT u\u017Cytkwonikom naruszaj\u0105cym powy\u017Csze zasady i usuni\u0119cia danych u\u017Cytkownika. Uniwersystet w Zurychu mo\u017Ce r\u00F3wnie\u017C podj\u0105\u0107 w powy\u017Cszych przypadkach kroki prawne. +disclaimer.paragraph1=U\u017Cytkownik OpenOLAT musi by\u0107 \u015Bwiadom, \u017Ce OpenOLAT mo\u017Ce by\u0107 u\u017Cywany wy\u0142\u0105cznie do uczenia si\u0119 lub nauczania. On/ona nie mo\u017Ce narusza\u0107 jakiegokolwiek prawa Szwajcarii. W szczeg\u00F3lno\u015Bci u\u017Cytkownicy OpenOLAT nie mog\u0105 rozpowszechnia\u0107 materia\u0142\u00F3w pornograficznych, rasistowskich, lub natutury drastycznej, lub przechowywa\u0107 takie materia\u0142y na serwerze OpenOLAT. Ponadto u\u017Cytkownicy nie mog\u0105 udost\u0119pnia\u0107 materia\u0142\u00F3w pod\u017Cegaj\u0105cych do nielegalnych dzia\u0142a\u0144. +disclaimer.paragraph2=Administrator platformy rezerwuje sobie prawo do blokowania dost\u0119pu do serwera OpenOLAT u\u017Cytkwonikom naruszaj\u0105cym powy\u017Csze zasady i usuni\u0119cia danych u\u017Cytkownika. Uniwersystet w Zurychu mo\u017Ce r\u00F3wnie\u017C podj\u0105\u0107 w powy\u017Cszych przypadkach kroki prawne. disclaimer.terms.of.usage=<b>Regulamin</b> email.address=Adres e-mail email.address.maynotbeempty=Adres e-mail nie mo\u017Ce by\u0107 pusty diff --git a/src/main/java/org/olat/registration/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/registration/_i18n/LocalStrings_pt_BR.properties index 6e18a7baa0cb26abf2218c1518110aa40a003911..637e4309a15b3cbf34a00e68dc9dc708170cba54 100644 --- a/src/main/java/org/olat/registration/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/registration/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,22 @@ -#Tue Apr 03 14:23:29 CEST 2012 +#Wed Nov 07 19:17:52 CET 2012 +admin.enableRegistration=Ativar auto-inscri\u00E7\u00E3o +admin.enableRegistration.on=Habilitado +admin.enableRegistrationLink=Ativar o auto-inscri\u00E7\u00E3o de sites externos +admin.enableRegistrationLogin=Ativar o link de auto-inscri\u00E7\u00E3o na p\u00E1gina de acesso +admin.enableStaticProp=Ativar o mapeamento das propriedades do usu\u00E1rio +admin.menu.title=Auto-inscri\u00E7\u00E3o +admin.menu.title.alt=$\:admin.menu.title +admin.registration.domains=Lista de dom\u00EDnios +admin.registration.domains.desc=Opcionalmente, a auto-inscri\u00E7\u00E3o pode ser limitada a um ou v\u00E1rios dom\u00EDnios. Para ativar essa fun\u00E7\u00E3o adicionar uma lista de dom\u00EDnios no formul\u00E1rio abaixo, por exemplo\: Openolat.com, *olat.org, hotmail.com +admin.registration.domains.error=Os dom\u00EDnios a seguir n\u00E3o s\u00E3o v\u00E1lidos\: {0} +admin.registration.domains.title=Limite de dom\u00EDnios +admin.registration.property=Nome da propriedade do usu\u00E1rio +admin.registration.propertyValue=Valor da propriedade do usu\u00E1rio +admin.registration.propertyValue.error=Valor da propriedade do usu\u00E1rio inv\u00E1lido +admin.registration.staticprop.desc=Opcionalmente uma propriedade de usu\u00E1rio pode ser configurado para um valor padr\u00E3o depois da auto-inscri\u00E7\u00E3o. Isto pode ser usado para identificar facilmente os utilizadores que se auto-inscreveram e separ\u00E1-los, por exemplo de usu\u00E1rios LDAP. +admin.registration.staticprop.title=Mapeamento da propriedade de usu\u00E1rio +admin.registration.title=Auto-Inscri\u00E7\u00E3o +admin.registrationLinkExample=Exemplo de c\u00F3digo disclaimer.acknowledged=<b>Eu l\u00ED o disclaimer, entend\u00ED e concordo.</b> disclaimer.additionalcheckbox=<b>Concordo com os termos de armazenamento de dados</b> disclaimer.additionallinktext=Termos de uso (Documento PDF) @@ -27,6 +45,7 @@ form.check5=Favor digitar duas senhas id\u00EAnticas. form.check6=O nome de usu\u00E1rio j\u00E1 existe. Favor escolher outro. form.general.error=Favor corigir os seguintes campos\: form.legende.mandatory=Este campos tem que ser preenchidos. +form.mail.whitelist.error=O seu endere\u00E7o de e-mail n\u00E3o foi encontrado em nossa lista. Por favor, use seu endere\u00E7o de e-mail corporativo. form.password.enter.new=Mudar senha form.password.error.nomatch=Senhas n\u00E3o coincidem form.password.new1=Nova senha diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java index 083f2aad12ef4795aedcbba10fcb73f0bc522fa9..f6f0f0aec55da6e743df7e0d82e288f7ef55fcc2 100644 --- a/src/main/java/org/olat/repository/RepositoryManager.java +++ b/src/main/java/org/olat/repository/RepositoryManager.java @@ -78,6 +78,7 @@ import org.olat.core.util.vfs.VFSLeaf; import org.olat.core.util.vfs.VFSManager; import org.olat.course.assessment.manager.UserCourseInformationsManager; import org.olat.group.GroupLoggingAction; +import org.olat.group.context.BGContext2Resource; import org.olat.group.model.BGResourceRelation; import org.olat.repository.delete.service.RepositoryDeletionManager; import org.olat.repository.handlers.RepositoryHandler; @@ -225,15 +226,6 @@ public class RepositoryManager extends BasicManager { DBFactory.getInstance().saveObject(re); } - /** - * Update repo entry. - * @param re - */ - /*public void updateRepositoryEntry(RepositoryEntry re) { - re.setLastModified(new Date()); - DBFactory.getInstance().updateObject(re); - }*/ - /** * Delete repo entry. * @param re @@ -311,6 +303,8 @@ public class RepositoryManager extends BasicManager { */ public void deleteRepositoryEntryAndBasesecurity(RepositoryEntry entry) { entry = (RepositoryEntry) DBFactory.getInstance().loadObject(entry,true); + //delete all policies + BaseSecurityManager.getInstance().deletePolicies(entry.getOlatResource()); DBFactory.getInstance().deleteObject(entry); OLATResourceManager.getInstance().deleteOLATResourceable(entry); SecurityGroup ownerGroup = entry.getOwnerGroup(); @@ -420,6 +414,9 @@ public class RepositoryManager extends BasicManager { logDebug("deleteRepositoryEntry after load entry.getOwnerGroup()=" + entry.getOwnerGroup()); RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(entry); OLATResource ores = entry.getOlatResource(); + //delete old context + deleteBGcontext(ores); + if (!handler.readyToDelete(ores, ureq, wControl)) { return false; } @@ -435,16 +432,33 @@ public class RepositoryManager extends BasicManager { CatalogManager.getInstance().resourceableDeleted(entry); // delete the entry entry = (RepositoryEntry) DBFactory.getInstance().loadObject(entry,true); - logDebug("deleteRepositoryEntry after reload entry=" + entry); - deleteRepositoryEntryAndBasesecurity(entry); // inform handler to do any cleanup work... handler must delete the // referenced resourceable aswell. handler.cleanupOnDelete(entry.getOlatResource()); + + logDebug("deleteRepositoryEntry after reload entry=" + entry); + deleteRepositoryEntryAndBasesecurity(entry); + logDebug("deleteRepositoryEntry Done"); return true; } + private void deleteBGcontext(OLATResource resource) { + StringBuilder sb = new StringBuilder(); + sb.append("delete from ").append(BGContext2Resource.class.getName()) + .append(" as ctxt where ctxt.resource.key=:resourceKey"); + + int rowContextDeleted = dbInstance.getCurrentEntityManager() + .createQuery(sb.toString()) + .setParameter("resourceKey", resource.getKey()) + .executeUpdate(); + + if(log.isDebug()) { + log.debug("Context deleted: " + rowContextDeleted); + } + } + /** * Lookup repo entry by key. * @param the repository entry key (not the olatresourceable key) diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_pl.properties index 41289be0fb67f9c50afcd428007149497b86740f..73638ad145c93432b81eadc41ef20fa4073caab4 100644 --- a/src/main/java/org/olat/repository/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_pl.properties @@ -62,7 +62,7 @@ chelp.file=<i>$org.olat.repository\:FileResource.FILE</i> chelp.fldst2=$org.olat.repository\:details.referenceinfoheader chelp.fldst8=$org.olat.repository\:details.summaryprop chelp.gloss=<i>$org.olat.repository\:FileResource.GLOSSARY</i> -chelp.guest=<i>guest</i> +chelp.guest=<i>go\u015B\u0107</i> chelp.img=<i>$org.olat.repository\:FileResource.IMAGE</i> chelp.iniAuth=$org.olat.repository\:cif.initialAuthor chelp.lang=<i>lang</i> @@ -79,14 +79,14 @@ chelp.pdf=<i>$org.olat.repository\:FileResource.PDF</i> chelp.pp=<i>$org.olat.repository\:FileResource.PPT</i> chelp.ref=<b>$org.olat.repository\:cif.resourcename\:</b> chelp.rep-meta-desc.title=Wpisywanie informacji podczas dodawania zasobu edukacyjnego. -chelp.rep-meta-guest.title=$\:chelp.rep-meta-owner.title -chelp.rep-meta-info.title=$\:addinfo.owner -chelp.rep-meta-infoCourse.title=$\:chelp.rep-meta-info.title -chelp.rep-meta-learner.title=$\:chelp.rep-meta-owner.title -chelp.rep-meta-olatauthor.title=$\:chelp.rep-meta-owner.title -chelp.rep-meta-olatauthorEd.title=$\:chelp.rep-meta-owner.title +chelp.rep-meta-guest.title=Zas\u00F3b edukacyjny\: informacje +chelp.rep-meta-info.title=Zas\u00F3b edukacyjny\: informacje dodatkowe +chelp.rep-meta-infoCourse.title=Zas\u00F3b edukacyjny\: dodatkowe informacje +chelp.rep-meta-learner.title=Zas\u00F3b edukacyjny\: informacje +chelp.rep-meta-olatauthor.title=Zas\u00F3b edukacyjny\: podstawowe informacje +chelp.rep-meta-olatauthorEd.title=Zas\u00F3b edukacyjny\: podstawowe ustawienia chelp.rep01=Mo\u017Cesz zobaczy\u0107 inforamcje odno\u015Bnie zasob\u00F3w edukacyjnych (metadane) poprzez $\:chelp.detail . -chelp.rep02=Zanim b\u0119dziesz m\u00F3g\u0142 utworzy\u0107 lub doda\u0107 zas\u00F3b euckayjny musisz poda\u0107 kilka informacji (tzw. metadane). +chelp.rep02=Zanim b\u0119dziesz m\u00F3g\u0142 utworzy\u0107 lub doda\u0107 zas\u00F3b edukacyjny musisz poda\u0107 kilka informacji (tzw. metadane). chelp.rep1=Mo\u017Cesz ogl\u0105da\u0107 i zmienia\u0107 informacje o zasobach edukacyjnych (metadane) poprzez $\:chelp.detail . chelp.rep10=To pole mo\u017Ce zawiera\u0107 aktywne lub nieaktywne pole wyboru, jak r\u00F3wnie\u017C wpis $\:chelp.noLaun . chelp.rep101=Dzi\u0119ki temu ustawieniu dowiesz si\u0119, czy inni autorzy kursu mog\u0105 do\u0142\u0105czy\u0107 t\u0119 zawarto\u015B\u0107 edukacyjn\u0105 do innych kurs\u00F3w. @@ -150,7 +150,7 @@ chkbx.efficency.onoff=Wykaz osi\u0105gni\u0119\u0107 chkbx.glossary.onoff=Aktywuj s\u0142ownik cif.access=Dost\u0119p maj\u0105 cif.access.owners=Tylko w\u0142a\u015Bciciele tego zasobu edukacyjnego -cif.access.owners_authors=W\u0142a\u015Bciciele i inny autorzy +cif.access.owners_authors=W\u0142a\u015Bciciele i inni autorzy cif.access.users=Wszyscy zarejestrowani u\u017Cytkownicy cif.access.users_guests=Zarejestrowani u\u017Cytkownicy i go\u015Bcie cif.author=Autor @@ -222,7 +222,7 @@ details.edit=Modyfikuj details.edit.error.references=Nie mo\u017Cna edytowa\u0107 zasobu edukacyjnego. S\u0105 aktywne odniesienia do tego zasobu.<br /><br /><font color\="red">{0}</font> details.entryinfoheader=Informacje details.extlinkheader=Zewn\u0119trzny link do tego zasobu edukacyjnego -details.groups=Przypisz w\u0142a\u015Bcicieli +details.groups=Zarz\u0105dzaj w\u0142a\u015Bcicielami details.header=Szczeg\u00F3\u0142y details.launch=Poka\u017C details.noreferenceinfo=Nie u\u017Cyto w \u017Cadnym kursie @@ -251,7 +251,7 @@ form.log.level.stat=Pliki log\u00F3w u\u017Cytkownika (anonimowe) form.log.level.user=Pliki log\u00F3w u\u017Cytkownika (spersonalizowane) glossary.isconfigured=S\u0142ownik glossary.no.glossary=Nie wybrano s\u0142ownika -groups.header=Przypisz w\u0142a\u015Bciciel zasobu edukacyjnego +groups.header=Przypisz w\u0142a\u015Bcicieli zasobu edukacyjnego groups.intro=Przypisz u\u017Cytkownik\u00F3w OpenOLAT do w\u0142a\u015Bcicieli wybranego zasobu edukacyjnego.<br />W\u0142a\u015Bciciele mog\u0105 czyta\u0107, modyfikowa\u0107 i usuwa\u0107 zas\u00F3b edukacyjny. heading.disabled=Funkcja niedost\u0119pna help.hover.meta.info.owner=Pomoc dotycz\u0105ca w\u0142a\u015Bcicieli @@ -332,7 +332,7 @@ tab.efficencystatement=Wykaz osi\u0105gni\u0119\u0107 tab.glossary=S\u0142ownik tab.glossary.flexions=Serwis morfologiczny tab.glossary.register=Indeks alfabetyczny -tab.layout=Sk\u00F3rka +tab.layout=Wygl\u0105d tab.log=Pliki log tab.public=Og\u00F3lnie tab.sharedfolder=Folder zasob\u00F3w diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_pt_BR.properties index c5f1329e83f0d39b52a500cd91a41a9084344f10..d8c70eec2f8f02461f170a088287c2e4e1440133 100644 --- a/src/main/java/org/olat/repository/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Tue Apr 03 14:29:56 CEST 2012 +#Wed Nov 07 19:36:42 CET 2012 CourseModule=Curso EPStructuredMapTemplate=Template/modelo de Portfolio Failed=A transmiss\u00E3o deste arquivo falhou. @@ -172,6 +172,7 @@ cif.description=Descri\u00E7\u00E3o cif.displayname=T\u00EDtulo do recurso did\u00E1tico cif.downloaded=N\u00FAmero de downloads cif.error.allempty=Favor preencher pelo menos um campo da tela. +cif.error.corrupted=O recurso did\u00E1tico est\u00E1 corrompido e n\u00E3o pode ser exibido. Contate o seu pessoal de apoio ou utilize o link de exclus\u00E3o para remover esse recurso do sistema. cif.error.description.empty=Favor preencher o campo "Descri\u00E7\u00E3o". cif.error.displayname.empty=Favor preencher o campo "T\u00EDtulo do recurso did\u00E1tico". cif.error.idnotint=Este n\u00FAmero de identifica\u00E7\u00E3o n\u00E3o existe. @@ -183,7 +184,9 @@ cif.lastUsage.na=- cif.lastusage=\u00DAltimo acesso cif.launched=N\u00FAmero de lan\u00E7amentos cif.ores_id=OpenOLAT-ID do recurso +cif.owners=Autores cif.resourcename=Nome do arquivo +cif.softkey=OpenOLAT soft ID cif.type=Tipo cif.type.na=n/a cif.usedbycnt=Usu\u00E1rios atuais @@ -213,6 +216,7 @@ csc.label=Como voc\u00EA quer continuar? csc.startwizard=Fa\u00E7a um curso simples com um assistente csc.title=Pr\u00F3ximos passos del.confirm=Voc\u00EA realmente quer apagar este recurso did\u00E1tico? (est\u00E1 sendo usado por {0} usu\u00E1rios neste momento) +del.confirm.corrupted=$\:del.confirm<div class\='b_error'> Este recurso did\u00E1tico foi identificado como corrompido e, portanto, n\u00E3o pode ser arquivado. Continue a remover o recurso do sistema sem arquivamento. </div> del.header=Apagar recurso did\u00E1tico details.bookmark=Marcar como favorito details.catadd=Adicionar ao catalogo @@ -227,6 +231,7 @@ details.delete.error.editor=Recurso did\u00E1tico n\u00E3o pode ser apagado. Est details.delete.error.references=Recurso did\u00E1tico n\u00E3o pode ser apagado. Existem refer\u00EAncias ativas para este recurso no OpenOLAT.<br /><br /><font color\="red">{0}</font> details.description=Descri\u00E7\u00E3o do recurso did\u00E1tico details.download=Baixar Conte\u00FAdo +details.download.compatible=Exportar conte\u00FAdo (compat\u00EDvel com "voltar") details.edit=Modificar details.edit.error.references=Recurso did\u00E1tico n\u00E3o pode ser apagado. Existem refer\u00EAncias ativas para este recurso no OpenOLAT.<br /><br /><font color\="red">{0}</font> details.entryinfoheader=Informa\u00E7\u00F5es deste item diff --git a/src/main/java/org/olat/repository/controllers/AddFileResourceController.java b/src/main/java/org/olat/repository/controllers/AddFileResourceController.java index ecbef0f64008228c52497ddf99485cb5bcdb3d40..a091c8aefc36f81fc25443b834e31b44ded4cf8b 100644 --- a/src/main/java/org/olat/repository/controllers/AddFileResourceController.java +++ b/src/main/java/org/olat/repository/controllers/AddFileResourceController.java @@ -261,7 +261,12 @@ public class AddFileResourceController extends BasicController implements IAddCo // nothing to do here. return; } - + + @Override + public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) { + // nothing to do here. + } + /** * @see org.olat.core.gui.control.DefaultController#doDispose(boolean) */ diff --git a/src/main/java/org/olat/repository/controllers/IAddController.java b/src/main/java/org/olat/repository/controllers/IAddController.java index 543fd8829bb4ab17e999c9f854300c0c3d12e932..8163b3eccfa4a731c0171ad9429d9be1f42c01db 100644 --- a/src/main/java/org/olat/repository/controllers/IAddController.java +++ b/src/main/java/org/olat/repository/controllers/IAddController.java @@ -61,6 +61,13 @@ public interface IAddController extends Disposable { */ public void repositoryEntryCreated(RepositoryEntry re); + /** + * Called only if the repository entry is copied + * @param sourceEntry The source of the copy, the original + * @param newEntry The new repository entry + */ + public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry); + /** * Called if the repository aborts the transaction. Do any cleanup work. */ diff --git a/src/main/java/org/olat/repository/controllers/RepositoryCopyController.java b/src/main/java/org/olat/repository/controllers/RepositoryCopyController.java index 53b0dc4bc87262dac9115a1676eb91585c0a8027..d21ea17b6058c826685a56d3ded2a7e50979ac9c 100644 --- a/src/main/java/org/olat/repository/controllers/RepositoryCopyController.java +++ b/src/main/java/org/olat/repository/controllers/RepositoryCopyController.java @@ -145,6 +145,7 @@ public class RepositoryCopyController extends BasicController { RepositoryHandler typeToCopy = RepositoryHandlerFactory.getInstance().getRepositoryHandler(sourceEntry); IAddController addController = typeToCopy.createAddController(null, null, ureq, getWindowControl()); addController.repositoryEntryCreated(newEntry); + addController.repositoryEntryCopied(sourceEntry, newEntry); // dispose immediately (cleanup temp files), not really used // as a controller, should be in a business logic frontend manager instead! addController.dispose(); diff --git a/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java b/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java index 02efd8f18e8acda834b1387e3b8f0995145cef3e..f082d85dcbd04746555085cce77be899226206d8 100644 --- a/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java +++ b/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java @@ -36,7 +36,6 @@ import org.olat.core.gui.control.generic.layout.MainLayoutController; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.logging.AssertException; -import org.olat.core.logging.activity.StringResourceableType; import org.olat.core.logging.activity.ThreadLocalUserActivityLogger; import org.olat.core.util.coordinate.LockResult; import org.olat.fileresource.FileResourceManager; @@ -117,7 +116,7 @@ public class SCORMCPHandler extends FileHandler implements RepositoryHandler { } //fxdiff FXOLAT-116: SCORM improvements MainLayoutController realController = ScormMainManager.getInstance().createScormAPIandDisplayController(ureq, wControl, true, null, cpRoot, - res.getResourceableId().toString(), null, "browse", "no-credit", false, false, false, false); + res.getResourceableId().toString(), null, "browse", "no-credit", false, false, false, false, false); //fxdiff VCRP-1: access control of learn resources RepositoryMainAccessControllerWrapper wrapper = new RepositoryMainAccessControllerWrapper(ureq, wControl, res, realController); return wrapper; diff --git a/src/main/java/org/olat/repository/handlers/WikiCreateController.java b/src/main/java/org/olat/repository/handlers/WikiCreateController.java index 9aeeab130779382006723d9c135994e2d5dcb1b4..8217e54ef558646401c430bcebb1cd487d495bf9 100644 --- a/src/main/java/org/olat/repository/handlers/WikiCreateController.java +++ b/src/main/java/org/olat/repository/handlers/WikiCreateController.java @@ -101,6 +101,11 @@ public class WikiCreateController extends DefaultController implements IAddContr public void repositoryEntryCreated(RepositoryEntry re) { // } + + @Override + public void repositoryEntryCopied(RepositoryEntry sourceEntry, RepositoryEntry newEntry) { + // + } /** * @see org.olat.repository.controllers.IAddController#transactionAborted() diff --git a/src/main/java/org/olat/repository/portlet/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/repository/portlet/_i18n/LocalStrings_pl.properties index 759ac64ef136dc4373d5585ed7453ab05a6b42e3..58950f7c555e5d53f523dfbe07591847eb4ca24d 100644 --- a/src/main/java/org/olat/repository/portlet/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/repository/portlet/_i18n/LocalStrings_pl.properties @@ -2,6 +2,6 @@ repositoryPortlet.noentry=W tej chwili nie ma kurs\u00F3w do wy\u015Bwietlenia repositoryPortlet.showAll=Poka\u017C wszystko repositoryPortlet.student.description=Lista wszystkich kurs\u00F3w, w kt\u00F3rych uczestnicz\u0119 -repositoryPortlet.student.title=Moje obecne kursy +repositoryPortlet.student.title=Moje kursy repositoryPortlet.teacher.description=Lista wszystkich kurs\u00F3w, kt\u00F3rych jestem autorem lub opiekunem -repositoryPortlet.teacher.title=Kursy, w kt\u00F3rych obecnie ucz\u0119 +repositoryPortlet.teacher.title=Moje nadzorowane kursy diff --git a/src/main/java/org/olat/resource/accesscontrol/manager/ACFrontendManager.java b/src/main/java/org/olat/resource/accesscontrol/manager/ACFrontendManager.java index df8d5bd81ea7d7a248057061492976b4fb814379..4a5037777b17a1012ac89512ca49dde24f3bfa63 100644 --- a/src/main/java/org/olat/resource/accesscontrol/manager/ACFrontendManager.java +++ b/src/main/java/org/olat/resource/accesscontrol/manager/ACFrontendManager.java @@ -205,6 +205,9 @@ public class ACFrontendManager extends BasicManager implements ACService { } public List<OLATResourceAccess> filterRepositoryEntriesWithAC(List<RepositoryEntry> repoEntries) { + if(repoEntries == null || repoEntries.isEmpty()) { + return Collections.emptyList(); + } List<Long> resourceKeys = new ArrayList<Long>(); for(RepositoryEntry entry:repoEntries) { OLATResource ores = entry.getOlatResource(); diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/free/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/resource/accesscontrol/provider/free/ui/_i18n/LocalStrings_pt_BR.properties index eea58c63b126ccd723a5ce7f02ddd10dbe17f5a6..af83277985b3b40cde825ed8a67658053cc08594 100644 --- a/src/main/java/org/olat/resource/accesscontrol/provider/free/ui/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/resource/accesscontrol/provider/free/ui/_i18n/LocalStrings_pt_BR.properties @@ -1,5 +1,7 @@ -#Tue Apr 03 13:58:07 CEST 2012 +#Tue Nov 06 14:04:04 CET 2012 access.button=Ordenar access.free.desc=Este recurso est\u00E1 dispon\u00EDvel gratuitamente. Selecione o bot\u00E3o "$\:access.button" para se cadastrar e ter acesso. access.free.title=Conte\u00FAdo livre -free.method=Dispon\u00EDvel gratuitamente \ No newline at end of file +create=$org.olat.resource.accesscontrol.ui\:create +free.method=Dispon\u00EDvel gratuitamente +offer.description=$org.olat.resource.accesscontrol.ui\:offer.description diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_pt_BR.properties index e6da248b7f96f99381185c33e29e41009c06124a..da27773b7c92a14db232db174049981bbdb683f1 100644 --- a/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/resource/accesscontrol/provider/token/ui/_i18n/LocalStrings_pt_BR.properties @@ -1,8 +1,10 @@ -#Tue Apr 03 13:58:07 CEST 2012 +#Tue Nov 06 14:04:11 CET 2012 access.button=Ordenar access.token.desc=Este recurso \u00E9 protegido por um c\u00F3digo de acesso. Digite o c\u00F3digo de acesso e selecione o bot\u00E3o "$\:access.button" para se cadastrar para ter acesso. O c\u00F3digo de acesso ser\u00E3o fornecidos pelo operador do recurso. access.token.title=Conte\u00FAdo protegido accesscontrol.token=C\u00F3digo de acesso -token.method=C\u00F3digo de acesso +create=$org.olat.resource.accesscontrol.ui\:create invalid.token=C\u00F3digo de acesso errado -invalid.token.format=O c\u00F3digo de acesso deve ter pelo menos um s\u00EDmbolo \ No newline at end of file +invalid.token.format=O c\u00F3digo de acesso deve ter pelo menos um s\u00EDmbolo +offer.description=$org.olat.resource.accesscontrol.ui\:offer.description +token.method=C\u00F3digo de acesso diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_pl.properties index 9492d0c75500ffe3ebb3c9329dfd26804eed3a6f..cae48fa6e906d4da535adf8ce92f6eb57fc6dfb9 100644 --- a/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_pl.properties @@ -1,18 +1,18 @@ #Tue Jul 31 15:46:15 CEST 2012 order.menu.title=Rezerwacje order.nr=Numer rezerwacji -order.part.payment=Typ rezerwacji -order.status.canceled=Przerwana/y +order.part.payment=Metoda rezerwacji +order.status.canceled=Skasowana order.status.error=B\u0142\u0105d -order.status.new=Nowa/y -order.status.payed=Op\u0142acona/y +order.status.new=Nowa +order.status.payed=Op\u0142acona order.status.prepayment=W trakcie op\u0142acania order.summary=Tre\u015B\u0107 -orders.admin.my=Rezerwacje tego zasobu -orders.admin.my.desc=Ten zas\u00F3b zosta\u0142 zarezerwowany przez nast\u0119puj\u0105ce osoby. Wybierz rezerwacj\u0119, \u017Ceby zobaczy\u0107 szczeg\u00F3\u0142y. +orders.admin.my=Rezerwacje +orders.admin.my.desc=Ten zas\u00F3b zosta\u0142 zarezerwowany przez nast\u0119puj\u0105ce osoby. Wybierz rezerwacj\u0119, \u017Ceby zobaczy\u0107 jej szczeg\u00F3\u0142y. orders.my=Moje rezerwacje table.order.details=Wybierz -table.order.empty=Nie ma obecnie \u017Cadnych rezerwacji do wy\u015Bwietlenia +table.order.empty=Aktualnie nie ma \u017Cadnych rezerwacji do wy\u015Bwietlenia. to=Do\: -transaction.date=Utworzono -transaction.details.title=Szczeg\u00F3\u0142y transakcji +transaction.date=Utworzona +transaction.details.title=Szczeg\u00F3\u0142y diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_pt_BR.properties index f5a74e2b10e70d889ef64e70080110fcf13c8ab4..29392800cb480e5ce0e4ac0752e88a041b75ec52 100644 --- a/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/resource/accesscontrol/ui/_i18n/LocalStrings_pt_BR.properties @@ -1,13 +1,16 @@ -#Tue Apr 03 13:58:07 CEST 2012 +#Tue Nov 06 14:06:00 CET 2012 access.button=Ordenar access.desc=Este recurso ainda n\u00E3o est\u00E1 contabilizado por voc\u00EA. Uma reserva \u00E9 necess\u00E1ria para lan\u00E7ar este recurso. Selecione um dos m\u00E9todos de reserva dispon\u00EDveis abaixo para registrar este recurso. +access.free.desc=Este recurso est\u00E1 dispon\u00EDvel gratuitamente para voc\u00EA. Pressione o bot\u00E3o "$\:access.button" e se registre para acessar. +access.free.title=Conte\u00FAdo gratuito access.info.price.noVat={0} access.info.price.vat={0} (incl. {1}% VAT) access.refused.desc=Este recurso est\u00E1 dispon\u00EDvel para reserva. Por favor, tente novamente mais tarde ou entre em contato com o propriet\u00E1rio deste recurso. access.title=Reservar conte\u00FAdo -accesscontrol.desc.end=Selecione o bot\u00E3o "$\:add.accesscontrol" para selecionar um ou mais m\u00E9todos de reserva. Como op\u00E7\u00E3o voc\u00EA tamb\u00E9m pode definir o per\u00EDodo em que cada m\u00E9todo de reserva \u00E9 v\u00E1lido. +access.token.desc=Este recurso \u00E9 protegido com um c\u00F3digo de acesso. Digite o c\u00F3digo de acesso e pressione o bot\u00E3o "$\:access.button" para acessar. O c\u00F3digo de acesso pode ser obtido a partir do operador deste recurso. +access.token.title=Conte\u00FAdo protegido accesscontrol.desc=Voc\u00EA pode configurar a m\u00E9todos de reserva para acessar este recurso. $\:accesscontrol.desc.end -accesscontrol_group.desc=Voc\u00EA pode configurar a m\u00E9todos de reserva para acessar este grupo. $\:accesscontrol.desc.end +accesscontrol.desc.end=Selecione o bot\u00E3o "$\:add.accesscontrol" para selecionar um ou mais m\u00E9todos de reserva. Como op\u00E7\u00E3o voc\u00EA tamb\u00E9m pode definir o per\u00EDodo em que cada m\u00E9todo de reserva \u00E9 v\u00E1lido. accesscontrol.no.methods.full.access=N\u00E3o h\u00E1 nenhum m\u00E9todo de reserva configurado para restringir o acesso. Este recurso pode ser acessado por todos os usu\u00E1rios conhecidos, sem uma reserva expl\u00EDcita. Selecione o bot\u00E3o "$\:add.accesscontrol" para restringir o acesso e / ou para exigir uma reserva expl\u00EDcita. accesscontrol.no.methods.no.access=N\u00E3o h\u00E1 nenhum m\u00E9todo de reserva configurado. Este recurso s\u00F3 pode ser acessado por membros expl\u00EDcitos deste recurso. Selecione o bot\u00E3o "$\:add.accesscontrol" para adicionar um m\u00E9todo de reserva e publicar o recurso. accesscontrol.table.from=v\u00E1lido a partir de @@ -15,8 +18,10 @@ accesscontrol.table.method=M\u00E9todo de reserva accesscontrol.table.to=para accesscontrol.title=Configurar m\u00E9todos de reserva accesscontrol.token=C\u00F3digo de acesso +accesscontrol_group.desc=Voc\u00EA pode configurar a m\u00E9todos de reserva para acessar este grupo. $\:accesscontrol.desc.end add.accesscontrol=Adicionar m\u00E9todo de reserva add.accesscontrol.intro=Selecione um m\u00E9todo de reserva para controlar o acesso a este recurso. Voc\u00EA pode adicionar v\u00E1rios m\u00E9todos de reserva e configurar per\u00EDodos de valida\u00E7\u00E3o diferentes para cada m\u00E9todo de reserva. +add.token=Criar c\u00F3digo de acesso chelp.accesscontrol.access=Se um recurso de aprendizagem \u00E9 publicada para todos os usu\u00E1rios registrados, voc\u00EA pode especificar os termos para lan\u00E7ar este recurso aqui. chelp.accesscontrol.access.free=O recurso pode ser lan\u00E7ado por todos os usu\u00E1rios sem quaisquer restri\u00E7\u00F5es e sem reserva expl\u00EDcita. Neste caso, voc\u00EA n\u00E3o saber\u00E1 quem lan\u00E7ou esse recurso de aprendizado e voc\u00EA n\u00E3o ter\u00E1 acesso aos dados em tempo de execu\u00E7\u00E3o como os resultados do teste (dispon\u00EDvel apenas em cursos). Este \u00E9 o comportamento padr\u00E3o. chelp.accesscontrol.access.member=Por outro lado, se voc\u00EA quiser publicar o recurso a uma lista bem definida de usu\u00E1rios, escolha "membros apenas". Neste caso, voc\u00EA pode administrar seus participantes e lista de treinadores na \u00E1rea de administra\u00E7\u00E3o. diff --git a/src/main/java/org/olat/restapi/system/MemoryWebService.java b/src/main/java/org/olat/restapi/system/MemoryWebService.java index 3e5884ee84814e79d96fd6c841556b79cb0cfcfd..03980730703d799f0b6c69e00b95ddbd9b5f30d8 100644 --- a/src/main/java/org/olat/restapi/system/MemoryWebService.java +++ b/src/main/java/org/olat/restapi/system/MemoryWebService.java @@ -54,7 +54,7 @@ public class MemoryWebService implements Sampler { private static final OLog log = Tracing.createLoggerFor(MemoryWebService.class); - private List<MemorySampleVO> memorySamples = new ArrayList<MemorySampleVO>(1000); + private List<MemorySampleVO> memorySamples = new ArrayList<MemorySampleVO>(100); public MemoryWebService() { //start sampling diff --git a/src/main/java/org/olat/search/service/document/file/ExcelOOXMLDocument.java b/src/main/java/org/olat/search/service/document/file/ExcelOOXMLDocument.java index 16c2838e2238cbf0e157135295f531a51f14fb65..56379881e42bc0b7635ae38f4834fda6836c7b8c 100644 --- a/src/main/java/org/olat/search/service/document/file/ExcelOOXMLDocument.java +++ b/src/main/java/org/olat/search/service/document/file/ExcelOOXMLDocument.java @@ -1,260 +1,251 @@ /** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <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 -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <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> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -*/ - + * <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.search.service.document.file; -import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; import org.apache.lucene.document.Document; -import org.apache.poi.openxml4j.opc.OPCPackage; -import org.apache.poi.ss.usermodel.BuiltinFormats; -import org.apache.poi.ss.usermodel.DataFormatter; -import org.apache.poi.xssf.eventusermodel.XSSFReader; -import org.apache.poi.xssf.model.SharedStringsTable; -import org.apache.poi.xssf.model.StylesTable; -import org.apache.poi.xssf.usermodel.XSSFCellStyle; -import org.apache.poi.xssf.usermodel.XSSFRichTextString; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.util.FileUtils; -import org.olat.core.util.StringHelper; import org.olat.core.util.vfs.VFSLeaf; import org.olat.search.service.SearchResourceContext; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTHeaderFooter; +import org.olat.search.service.document.file.utils.ShieldInputStream; +import org.olat.search.service.document.file.utils.SlicedDocument; import org.xml.sax.Attributes; import org.xml.sax.InputSource; +import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.helpers.XMLReaderFactory; /** + * * Description:<br> - * Parse the Excel XML document (.xslx) with Apache POI - * <P> - * Initial Date: 14 dec. 2009 <br> + * Parse the Microsoft Office XML document (.pptx, .docx...) with a SAX parser * - * @author srosse, stephane.rosse@frentix.com + * <P> + * Initial Date: 5 nov. 2012<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com */ public class ExcelOOXMLDocument extends FileDocument { - private static final long serialVersionUID = -7566825844774480380L; + private static final long serialVersionUID = 2322994231200065526L; private static final OLog log = Tracing.createLoggerFor(ExcelOOXMLDocument.class); - public final static String FILE_TYPE = "type.file.excel"; - - public ExcelOOXMLDocument() { - // - } + private static final String SHEET = "xl/worksheets/sheet"; + public final static String EXCEL_FILE_TYPE = "type.file.excel"; public static Document createDocument(SearchResourceContext leafResourceContext, VFSLeaf leaf) throws IOException, DocumentException, DocumentAccessException { - ExcelOOXMLDocument excelDocument = new ExcelOOXMLDocument(); - excelDocument.init(leafResourceContext, leaf); - excelDocument.setFileType(FILE_TYPE); - excelDocument.setCssIcon("b_filetype_xls"); - if (log.isDebug()) log.debug(excelDocument.toString()); - return excelDocument.getLuceneDocument(); + ExcelOOXMLDocument officeDocument = new ExcelOOXMLDocument(); + officeDocument.init(leafResourceContext, leaf); + officeDocument.setFileType(EXCEL_FILE_TYPE); + officeDocument.setCssIcon("b_filetype_xls"); + + if (log.isDebug()) { + log.debug(officeDocument.toString()); + } + return officeDocument.getLuceneDocument(); } - protected FileContent readContent(VFSLeaf leaf) throws DocumentException { - BufferedInputStream bis = null; - StringBuilder buffy = new StringBuilder(); + @Override + public FileContent readContent(VFSLeaf leaf) throws IOException, DocumentException { + //first step parse shared strings + Map<String,String> sharedStrings = parseSharedStrings(leaf); + //parse sheets + String content = parseSheets(sharedStrings, leaf); + + return new FileContent(content); + } + + + private String parseSheets(Map<String,String> sharedStrings, VFSLeaf leaf) throws IOException, DocumentException { + InputStream stream = null; + ZipInputStream zip = null; try { - bis = new BufferedInputStream(leaf.getInputStream()); - - OPCPackage pkg = OPCPackage.open(bis); - XSSFReader r = new XSSFReader(pkg); - SharedStringsTable sst = r.getSharedStringsTable(); - XMLReader parser = XMLReaderFactory.createXMLReader(); - StylesTable styles = r.getStylesTable(); - MySheetHandler handler = new MySheetHandler(buffy, styles, sst); - parser.setContentHandler(handler); - - for (XSSFReader.SheetIterator it = (XSSFReader.SheetIterator) r.getSheetsData(); it.hasNext();) { - InputStream sheet = it.next(); - InputSource sheetSource = new InputSource(sheet); - parser.parse(sheetSource); - sheet.close(); + stream = leaf.getInputStream(); + zip = new ZipInputStream(stream); + ZipEntry entry = zip.getNextEntry(); + + SlicedDocument doc = new SlicedDocument(); + while (entry != null) { + String name = entry.getName(); + if(name.startsWith(SHEET) && name.endsWith(".xml")) { + String position = name.substring(SHEET.length(), name.indexOf(".xml")); + + OfficeDocumentHandler dh = new OfficeDocumentHandler(sharedStrings); + parse(new ShieldInputStream(zip), dh); + doc.setContent(Integer.parseInt(position), dh.getContent()); + } + entry = zip.getNextEntry(); } - - return new FileContent(buffy.toString()); + return doc.toStringAndClear(); + } catch (DocumentException e) { + throw e; } catch (Exception e) { - throw new DocumentException(e.getMessage(), e); + throw new DocumentException(e.getMessage()); } finally { - FileUtils.closeSafely(bis); + FileUtils.closeSafely(zip); + FileUtils.closeSafely(stream); } } - - enum xssfDataType { - BOOL, ERROR, FORMULA, INLINESTR, SSTINDEX, NUMBER, + + private Map<String,String> parseSharedStrings( VFSLeaf leaf) throws IOException, DocumentException { + SharedStringsHandler dh = new SharedStringsHandler(); + + InputStream stream = null; + ZipInputStream zip = null; + try { + stream = leaf.getInputStream(); + zip = new ZipInputStream(stream); + ZipEntry entry = zip.getNextEntry(); + while (entry != null) { + String name = entry.getName(); + if(name.endsWith("xl/sharedStrings.xml")) { + parse(new ShieldInputStream(zip), dh); + break; + } + entry = zip.getNextEntry(); + } + return dh.getMap(); + } catch (DocumentException e) { + throw e; + } catch (Exception e) { + throw new DocumentException(e.getMessage()); + } finally { + FileUtils.closeSafely(zip); + FileUtils.closeSafely(stream); + } } - - public class MySheetHandler extends DefaultHandler { - private final StringBuilder content; - - private StringBuilder buffer; - private xssfDataType nextDataType; - private int formatIndex; - private String formatString; - private CTHeaderFooter headerFooter = CTHeaderFooter.Factory.newInstance(); - - private final SharedStringsTable sst; - private final StylesTable stylesTable; - private final DataFormatter formatter = new DataFormatter(); - - public MySheetHandler(StringBuilder content, StylesTable styles, SharedStringsTable sst) { - this.sst = sst; - this.content = content; - this.stylesTable = styles; + + private void parse(InputStream stream, DefaultHandler handler) throws DocumentException { + try { + XMLReader parser = XMLReaderFactory.createXMLReader(); + parser.setContentHandler(handler); + parser.setEntityResolver(handler); + try { + parser.setFeature("http://xml.org/sax/features/validation", false); + } catch(Exception e) { + log.error("Cannot deactivate validation", e); + } + parser.parse(new InputSource(stream)); + } catch (Exception e) { + throw new DocumentException("XML parser configuration error", e); + } + } + + private class OfficeDocumentHandler extends DefaultHandler { + private final StringBuilder sb = new StringBuilder(); + + private boolean row = false; + private boolean sharedStrings = false; + private Map<String,String> strings; + + public OfficeDocumentHandler(Map<String,String> strings) { + this.strings = strings; } - @Override - public void startDocument() { - headerFooter = CTHeaderFooter.Factory.newInstance(); + public StringBuilder getContent() { + return sb; } @Override - public void endDocument() { - append(headerFooter.getFirstHeader()); - append(headerFooter.getOddHeader()); - append(headerFooter.getEvenHeader()); - - append(headerFooter.getFirstFooter()); - append(headerFooter.getOddFooter()); - append(headerFooter.getEvenFooter()); + public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { + if("row".equals(qName)) { + row = true; + } else if (row && "c".equals(qName)) { + String t = attributes.getValue("t"); + if("s".equals(t)) { + sharedStrings = true; + } + } } @Override - public void startElement(String uri, String localName, String name, Attributes attributes) { - if (name.equals("c")) { - // c -> cell - // Set up defaults. - nextDataType = xssfDataType.NUMBER; - formatIndex = -1; - formatString = null; - - String cellType = attributes.getValue("t"); - String cellStyleStr = attributes.getValue("s"); - if ("b".equals(cellType)) { - nextDataType = xssfDataType.BOOL; - } else if ("e".equals(cellType)) { - nextDataType = xssfDataType.ERROR; - } else if ("inlineStr".equals(cellType)) { - nextDataType = xssfDataType.INLINESTR; - } else if ("s".equals(cellType)) { - nextDataType = xssfDataType.SSTINDEX; - } else if ("str".equals(cellType)) { - nextDataType = xssfDataType.FORMULA; - } else if (cellStyleStr != null) { - // It's a number, but almost certainly one with a special style or - // format - int styleIndex = Integer.parseInt(cellStyleStr); - XSSFCellStyle style = stylesTable.getStyleAt(styleIndex); - formatIndex = style.getDataFormat(); - formatString = style.getDataFormatString(); - if (formatString == null) formatString = BuiltinFormats.getBuiltinFormat(formatIndex); + public void endElement(String uri, String localName, String qName) throws SAXException { + if("row".equals(qName)) { + row = false; + if(sb .length() > 0 && sb.charAt(sb.length() - 1) != '\n'){ + sb.append('\n'); } + } else if (row && "c".equals(qName)) { + sharedStrings = false; } - // Clear contents cache - buffer = new StringBuilder(); } @Override - public void endElement(String uri, String localName, String name) { - if (name.equals("c")) { - // - } else if ("v".equals(name)) { - String thisStr = null; - switch (nextDataType) { - case BOOL: - char first = buffer.charAt(0); - thisStr = first == '0' ? "FALSE" : "TRUE"; - break; - case ERROR: - thisStr = buffer.toString(); - break; - case FORMULA: - // A formula could result in a string value, - // so always add double-quote characters. - thisStr = buffer.toString(); - break; - case INLINESTR: - // TODO: have seen an example of this, so it's untested. - XSSFRichTextString rtsi = new XSSFRichTextString(buffer.toString()); - thisStr = rtsi.toString(); - break; - case SSTINDEX: - String sstIndex = buffer.toString(); - try { - int idx = Integer.parseInt(sstIndex); - XSSFRichTextString rtss = new XSSFRichTextString(sst.getEntryAt(idx)); - thisStr = rtss.toString(); - } catch (NumberFormatException ex) { - // sorry but it's not a disaster... - } - break; - - case NUMBER: - String n = buffer.toString(); - if (this.formatString != null) thisStr = formatter.formatRawCellContents(Double.parseDouble(n), this.formatIndex, - this.formatString); - else thisStr = n; - break; + public void characters(char[] ch, int start, int length) { + if(sharedStrings) { + String key = new String(ch, start, length); + String value = strings.get(key); + if(value != null) { + if(sb .length() > 0 && sb.charAt(sb.length() - 1) != ' '){ + sb.append(' '); + } + sb.append(value); } - - append(thisStr); - } else if ("firstHeader".equals(name)) { - headerFooter.setFirstHeader(buffer.toString()); - } else if ("firstFooter".equals(name)) { - headerFooter.setFirstFooter(buffer.toString()); - } else if ("evenFooter".equals(name)) { - headerFooter.setEvenFooter(buffer.toString()); - } else if ("evenHeaderer".equals(name)) { - headerFooter.setEvenHeader(buffer.toString()); - } else if ("oddHeader".equals(name)) { - headerFooter.setOddHeader(buffer.toString()); - } else if ("oddFooter".equals(name)) { - headerFooter.setOddFooter(buffer.toString()); - } else if ("row".equals(name)) { - if (content.length() > 0 && content.charAt(content.length() - 1) != '\n') { - content.append('\n'); + } else { + if(sb .length() > 0 && sb.charAt(sb.length() - 1) != ' '){ + sb.append(' '); } + sb.append(ch, start, length); } } + } + + private class SharedStringsHandler extends DefaultHandler { + private int position = 0; + private StringBuilder sb; + private Map<String,String> strings = new HashMap<String,String>(); + + public Map<String,String> getMap() { + return strings; + } @Override - public void characters(char[] ch, int start, int length) { - buffer.append(ch, start, length); + public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { + if("t".equals(qName)) { + sb = new StringBuilder(); + } } - private final void append(String str) { - if (StringHelper.containsNonWhitespace(str)) { - if (content.length() > 0) content.append(' '); - content.append(str); + @Override + public void endElement(String uri, String localName, String qName) throws SAXException { + if("si".equals(qName)) { + String string = sb.toString().trim(); + strings.put(Integer.toString(position), string); + position++; + } + } + + @Override + public void characters(char[] ch, int start, int length) { + if(sb .length() > 0 && sb.charAt(sb.length() - 1) != ' '){ + sb.append(' '); } + sb.append(ch, start, length); } } -} +} \ No newline at end of file diff --git a/src/main/java/org/olat/search/service/document/file/OpenDocument.java b/src/main/java/org/olat/search/service/document/file/OpenDocument.java index faa848509024e23b0f753540df54573f5c0441c9..29db42a1099c541f252b47a013132d63811991a9 100644 --- a/src/main/java/org/olat/search/service/document/file/OpenDocument.java +++ b/src/main/java/org/olat/search/service/document/file/OpenDocument.java @@ -31,6 +31,7 @@ import org.olat.core.logging.Tracing; import org.olat.core.util.FileUtils; import org.olat.core.util.vfs.VFSLeaf; import org.olat.search.service.SearchResourceContext; +import org.olat.search.service.document.file.utils.ShieldInputStream; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; @@ -154,57 +155,4 @@ public class OpenDocument extends FileDocument { sb.append(ch, start, length); } } - - private class ShieldInputStream extends InputStream { - private final ZipInputStream delegate; - - public ShieldInputStream(ZipInputStream delegate) { - this.delegate = delegate; - } - - @Override - public int read() throws IOException { - return delegate.read(); - } - - @Override - public int available() throws IOException { - return delegate.available(); - } - - @Override - public void close() { - // do nothing - } - - @Override - public synchronized void mark(int readlimit) { - delegate.mark(readlimit); - } - - @Override - public boolean markSupported() { - return delegate.markSupported(); - } - - @Override - public int read(byte[] b, int off, int len) throws IOException { - return delegate.read(b, off, len); - } - - @Override - public int read(byte[] b) throws IOException { - return delegate.read(b); - } - - @Override - public synchronized void reset() throws IOException { - delegate.reset(); - } - - @Override - public long skip(long n) throws IOException { - return delegate.skip(n); - } - } } diff --git a/src/main/java/org/olat/search/service/document/file/PowerPointOOXMLDocument.java b/src/main/java/org/olat/search/service/document/file/PowerPointOOXMLDocument.java index f37c587ba9ec905a81df405b1f1ca7b070a1ee8f..118563f84ff0a8aeb5a27da50ef1e6e66ba85da0 100644 --- a/src/main/java/org/olat/search/service/document/file/PowerPointOOXMLDocument.java +++ b/src/main/java/org/olat/search/service/document/file/PowerPointOOXMLDocument.java @@ -1,153 +1,138 @@ /** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <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 -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <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> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -*/ - + * <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.search.service.document.file; -import java.io.BufferedInputStream; import java.io.IOException; +import java.io.InputStream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; import org.apache.lucene.document.Document; -import org.apache.poi.POIXMLDocument; -import org.apache.poi.POIXMLTextExtractor; -import org.apache.poi.extractor.ExtractorFactory; -import org.apache.poi.xslf.XSLFSlideShow; -import org.apache.poi.xslf.usermodel.XMLSlideShow; -import org.apache.poi.xslf.usermodel.XSLFSlide; -import org.apache.xmlbeans.XmlException; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; +import org.olat.core.util.FileUtils; import org.olat.core.util.vfs.VFSLeaf; import org.olat.search.service.SearchResourceContext; -import org.openxmlformats.schemas.drawingml.x2006.main.CTRegularTextRun; -import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody; -import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph; -import org.openxmlformats.schemas.presentationml.x2006.main.CTComment; -import org.openxmlformats.schemas.presentationml.x2006.main.CTCommentList; -import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape; -import org.openxmlformats.schemas.presentationml.x2006.main.CTNotesSlide; -import org.openxmlformats.schemas.presentationml.x2006.main.CTShape; -import org.openxmlformats.schemas.presentationml.x2006.main.CTSlide; -import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideIdListEntry; +import org.olat.search.service.document.file.utils.ShieldInputStream; +import org.olat.search.service.document.file.utils.SlicedDocument; +import org.xml.sax.InputSource; +import org.xml.sax.XMLReader; +import org.xml.sax.helpers.DefaultHandler; +import org.xml.sax.helpers.XMLReaderFactory; /** * * Description:<br> - * Parse the PowerPoint XML document (.pptx) with Apache POI + * Parse the Microsoft Office XML document (.pptx, .docx...) with a SAX parser * * <P> - * Initial Date: 14 dec. 2009 <br> - * @author srosse, stephane.rosse@frentix.com + * Initial Date: 5 nov. 2012<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com */ public class PowerPointOOXMLDocument extends FileDocument { private static final long serialVersionUID = 2322994231200065526L; private static final OLog log = Tracing.createLoggerFor(PowerPointOOXMLDocument.class); - public final static String FILE_TYPE = "type.file.ppt"; - - public PowerPointOOXMLDocument() { - // - } + public final static String POWERPOINT_FILE_TYPE = "type.file.ppt"; + private static final String SLIDE = "ppt/slides/slide"; public static Document createDocument(SearchResourceContext leafResourceContext, VFSLeaf leaf) throws IOException, DocumentException, DocumentAccessException { - PowerPointOOXMLDocument powerPointDocument = new PowerPointOOXMLDocument(); - powerPointDocument.init(leafResourceContext, leaf); - powerPointDocument.setFileType(FILE_TYPE); - powerPointDocument.setCssIcon("b_filetype_ppt"); - if (log.isDebug()) log.debug(powerPointDocument.toString()); - return powerPointDocument.getLuceneDocument(); + PowerPointOOXMLDocument officeDocument = new PowerPointOOXMLDocument(); + officeDocument.init(leafResourceContext, leaf); + officeDocument.setFileType(POWERPOINT_FILE_TYPE); + officeDocument.setCssIcon("b_filetype_ppt"); + if (log.isDebug()) { + log.debug(officeDocument.toString()); + } + return officeDocument.getLuceneDocument(); } + @Override public FileContent readContent(VFSLeaf leaf) throws IOException, DocumentException { - BufferedInputStream bis = null; - StringBuilder buffy = new StringBuilder(); + SlicedDocument doc = new SlicedDocument(); + + InputStream stream = null; + ZipInputStream zip = null; try { - bis = new BufferedInputStream(leaf.getInputStream()); - POIXMLTextExtractor extractor = (POIXMLTextExtractor) ExtractorFactory.createExtractor(bis); - POIXMLDocument document = extractor.getDocument(); - String title = getTitle(document); - - if (document instanceof XSLFSlideShow) { - XSLFSlideShow slideShow = (XSLFSlideShow) document; - XMLSlideShow xmlSlideShow = new XMLSlideShow(slideShow); - extractContent(buffy, xmlSlideShow); - } + stream = leaf.getInputStream(); - return new FileContent(title, buffy.toString()); + zip = new ZipInputStream(stream); + ZipEntry entry = zip.getNextEntry(); + while (entry != null) { + String name = entry.getName(); + if(name.startsWith(SLIDE) && name.endsWith(".xml")) { + int lastIndex = name.indexOf(".xml"); + String position = name.substring(SLIDE.length(), lastIndex); + + OfficeDocumentHandler dh = new OfficeDocumentHandler(); + parse(new ShieldInputStream(zip), dh); + doc.setContent(Integer.parseInt(position), dh.getContent()); + } + entry = zip.getNextEntry(); + } + } catch (DocumentException e) { + throw e; } catch (Exception e) { throw new DocumentException(e.getMessage()); } finally { - if (bis != null) { - bis.close(); - } + FileUtils.closeSafely(zip); + FileUtils.closeSafely(stream); } + return new FileContent(doc.toStringAndClear()); } - private String getTitle(POIXMLDocument document) { - if(document.getProperties() != null && document.getProperties().getCoreProperties() != null) { - return document.getProperties().getCoreProperties().getTitle(); + private void parse(InputStream stream, DefaultHandler handler) throws DocumentException { + try { + XMLReader parser = XMLReaderFactory.createXMLReader(); + parser.setContentHandler(handler); + parser.setEntityResolver(handler); + try { + parser.setFeature("http://xml.org/sax/features/validation", false); + } catch(Exception e) { + log.error("Cannot deactivate validation", e); + } + parser.parse(new InputSource(stream)); + } catch (Exception e) { + throw new DocumentException("XML parser configuration error", e); } - return null; } + + private class OfficeDocumentHandler extends DefaultHandler { + private final StringBuilder sb = new StringBuilder(); - private void extractContent(StringBuilder buffy, XMLSlideShow xmlSlideShow) throws IOException, XmlException { - XSLFSlide[] slides = xmlSlideShow.getSlides(); - for (XSLFSlide slide : slides) { - CTSlide rawSlide = slide._getCTSlide(); - CTSlideIdListEntry slideId = slide._getCTSlideId(); - - CTNotesSlide notes = xmlSlideShow._getXSLFSlideShow().getNotes(slideId); - CTCommentList comments = xmlSlideShow._getXSLFSlideShow().getSlideComments(slideId); - - extractShapeContent(buffy, rawSlide.getCSld().getSpTree()); - - if (comments != null) { - for (CTComment comment : comments.getCmArray()) { - buffy.append(comment.getText()).append(' '); - } - } + public StringBuilder getContent() { + return sb; + } - if (notes != null) { - extractShapeContent(buffy, notes.getCSld().getSpTree()); - } + @Override + public InputSource resolveEntity(String publicId, String systemId) { + return null; } - } - private void extractShapeContent(StringBuilder buffy, CTGroupShape gs) { - CTShape[] shapes = gs.getSpArray(); - for (CTShape shape : shapes) { - CTTextBody textBody = shape.getTxBody(); - if (textBody != null) { - CTTextParagraph[] paras = textBody.getPArray(); - for (CTTextParagraph textParagraph : paras) { - CTRegularTextRun[] textRuns = textParagraph.getRArray(); - for (CTRegularTextRun textRun : textRuns) { - buffy.append(textRun.getT()).append(' '); - } - } + @Override + public void characters(char[] ch, int start, int length) { + if(sb .length() > 0 && sb.charAt(sb.length() - 1) != ' '){ + sb.append(' '); } + sb.append(ch, start, length); } } } \ No newline at end of file diff --git a/src/main/java/org/olat/search/service/document/file/TextDocument.java b/src/main/java/org/olat/search/service/document/file/TextDocument.java index acd704355b03d86c420fc1a7a1c4e1420b6d27b3..28d16db1297f8bd7ed7fd2371c0d04454acb2eaf 100644 --- a/src/main/java/org/olat/search/service/document/file/TextDocument.java +++ b/src/main/java/org/olat/search/service/document/file/TextDocument.java @@ -25,13 +25,15 @@ package org.olat.search.service.document.file; -import java.io.BufferedInputStream; import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Reader; +import java.io.StringWriter; +import java.io.Writer; import org.apache.lucene.document.Document; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; -import org.olat.core.util.FileUtils; import org.olat.core.util.vfs.VFSLeaf; import org.olat.search.service.SearchResourceContext; @@ -44,6 +46,10 @@ public class TextDocument extends FileDocument { private static final OLog log = Tracing.createLoggerFor(TextDocument.class); public final static String FILE_TYPE = "type.file.text"; + /** + * Limit the maximal size of the content read to index. + */ + public static int MAX_SIZE = 200000; public TextDocument() { // @@ -60,9 +66,28 @@ public class TextDocument extends FileDocument { @Override protected FileContent readContent(VFSLeaf leaf) throws IOException { - BufferedInputStream bis = new BufferedInputStream(leaf.getInputStream()); - String content = FileUtils.load(bis, "utf-8"); - bis.close(); - return new FileContent(content); + StringWriter out = new StringWriter(); + InputStreamReader in = new InputStreamReader(leaf.getInputStream()); + try { + copy(in, out); + } catch (Exception e) { + log.error("", e); + } + return new FileContent(out.toString()); + } + + private void copy(Reader input, Writer output) + throws IOException { + char[] buffer = new char[4096]; + + int count = 0; + int n = 0; + while (-1 != (n = input.read(buffer))) { + output.write(buffer, 0, n); + count += n; + if(count >= MAX_SIZE) { + break; + } + } } } diff --git a/src/main/java/org/olat/search/service/document/file/WordOOXMLDocument.java b/src/main/java/org/olat/search/service/document/file/WordOOXMLDocument.java index e282a76fa00f3ddccf4c12f95a39b21ff52a64a7..40572574011ca672cd81863a4b61c2bf307ab108 100644 --- a/src/main/java/org/olat/search/service/document/file/WordOOXMLDocument.java +++ b/src/main/java/org/olat/search/service/document/file/WordOOXMLDocument.java @@ -17,146 +17,128 @@ * frentix GmbH, http://www.frentix.com * <p> */ - package org.olat.search.service.document.file; -import java.io.BufferedInputStream; import java.io.IOException; -import java.util.Iterator; +import java.io.InputStream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; import org.apache.lucene.document.Document; -import org.apache.poi.POIXMLDocument; -import org.apache.poi.POIXMLTextExtractor; -import org.apache.poi.extractor.ExtractorFactory; -import org.apache.poi.xwpf.model.XWPFCommentsDecorator; -import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy; -import org.apache.poi.xwpf.model.XWPFHyperlinkDecorator; -import org.apache.poi.xwpf.model.XWPFParagraphDecorator; -import org.apache.poi.xwpf.usermodel.XWPFDocument; -import org.apache.poi.xwpf.usermodel.XWPFParagraph; -import org.apache.xmlbeans.XmlException; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; +import org.olat.core.util.FileUtils; import org.olat.core.util.vfs.VFSLeaf; import org.olat.search.service.SearchResourceContext; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBookmark; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr; +import org.olat.search.service.document.file.utils.ShieldInputStream; +import org.olat.search.service.document.file.utils.SlicedDocument; +import org.xml.sax.InputSource; +import org.xml.sax.XMLReader; +import org.xml.sax.helpers.DefaultHandler; +import org.xml.sax.helpers.XMLReaderFactory; /** * * Description:<br> - * Parse the Word XML document (.docx) with Apache POI + * Parse the Word XML document (.docx) with a SAX parser * * <P> - * Initial Date: 14 dec. 2009 <br> - * @author srosse, stephane.rosse@frentix.com + * Initial Date: 5 nov. 2012<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com */ public class WordOOXMLDocument extends FileDocument { - private static final long serialVersionUID = 3684533132759600322L; + private static final long serialVersionUID = 2322994231200065526L; private static final OLog log = Tracing.createLoggerFor(WordOOXMLDocument.class); - public final static String FILE_TYPE = "type.file.word"; + public final static String WORD_FILE_TYPE = "type.file.word"; + private static final String HEADER = "word/header"; + private static final String FOOTER = "word/footer"; - public WordOOXMLDocument() { - // - } - - public static Document createDocument(SearchResourceContext leafResourceContext, VFSLeaf leaf) throws IOException,DocumentException,DocumentAccessException { - WordOOXMLDocument wordDocument = new WordOOXMLDocument(); - wordDocument.init(leafResourceContext,leaf); - wordDocument.setFileType(FILE_TYPE); - wordDocument.setCssIcon("b_filetype_doc"); - if (log.isDebug()) log.debug(wordDocument.toString()); - return wordDocument.getLuceneDocument(); + public static Document createDocument(SearchResourceContext leafResourceContext, VFSLeaf leaf) + throws IOException, DocumentException, DocumentAccessException { + WordOOXMLDocument officeDocument = new WordOOXMLDocument(); + officeDocument.init(leafResourceContext, leaf); + officeDocument.setFileType(WORD_FILE_TYPE); + officeDocument.setCssIcon("b_filetype_doc"); + + if (log.isDebug()) { + log.debug(officeDocument.toString()); + } + return officeDocument.getLuceneDocument(); } - protected FileContent readContent(VFSLeaf leaf) throws IOException, DocumentException { - BufferedInputStream bis = null; - StringBuilder buffy = new StringBuilder(); + @Override + public FileContent readContent(VFSLeaf leaf) throws IOException, DocumentException { + SlicedDocument doc = new SlicedDocument(); + + InputStream stream = null; + ZipInputStream zip = null; try { - bis = new BufferedInputStream(leaf.getInputStream()); - POIXMLTextExtractor extractor = (POIXMLTextExtractor) ExtractorFactory.createExtractor(bis); - POIXMLDocument document = extractor.getDocument(); - String title = getTitle(document); - - if (document instanceof XWPFDocument) { - XWPFDocument xDocument = (XWPFDocument) document; - XWPFHeaderFooterPolicy hfPolicy = xDocument.getHeaderFooterPolicy(); - extractHeaders(buffy, hfPolicy); - extractContent(buffy, xDocument); - extractFooters(buffy, hfPolicy); + stream = leaf.getInputStream(); + + zip = new ZipInputStream(stream); + ZipEntry entry = zip.getNextEntry(); + while (entry != null) { + String name = entry.getName(); + if(name.endsWith("word/document.xml")) { + OfficeDocumentHandler dh = new OfficeDocumentHandler(); + parse(new ShieldInputStream(zip), dh); + doc.setContent(0, dh.getContent()); + } else if(name.startsWith(HEADER) && name.endsWith(".xml")) { + String position = name.substring(HEADER.length(), name.indexOf(".xml")); + + OfficeDocumentHandler dh = new OfficeDocumentHandler(); + parse(new ShieldInputStream(zip), dh); + doc.setHeader(Integer.parseInt(position), dh.getContent()); + } else if(name.startsWith(FOOTER) && name.endsWith(".xml")) { + String position = name.substring(FOOTER.length(), name.indexOf(".xml")); + + OfficeDocumentHandler dh = new OfficeDocumentHandler(); + parse(new ShieldInputStream(zip), dh); + doc.setFooter(Integer.parseInt(position), dh.getContent()); + } + entry = zip.getNextEntry(); } - - return new FileContent(title, buffy.toString()); + } catch (DocumentException e) { + throw e; } catch (Exception e) { throw new DocumentException(e.getMessage()); } finally { - if (bis != null) { - bis.close(); - } + FileUtils.closeSafely(zip); + FileUtils.closeSafely(stream); } + return new FileContent(doc.toStringAndClear()); } - private String getTitle(POIXMLDocument document) { - if(document.getProperties() != null && document.getProperties().getCoreProperties() != null) { - return document.getProperties().getCoreProperties().getTitle(); - } - return null; - } - - private void extractContent(StringBuilder buffy, XWPFDocument document) - throws IOException, XmlException { - // first all paragraphs - Iterator<XWPFParagraph> i = document.getParagraphsIterator(); - while (i.hasNext()) { - XWPFParagraph paragraph = i.next(); - CTSectPr ctSectPr = null; - if (paragraph.getCTP().getPPr() != null) { - ctSectPr = paragraph.getCTP().getPPr().getSectPr(); - } - - XWPFHeaderFooterPolicy headerFooterPolicy = null; - if (ctSectPr != null) { - headerFooterPolicy = new XWPFHeaderFooterPolicy(document, ctSectPr); - extractHeaders(buffy, headerFooterPolicy); - } - - XWPFParagraphDecorator decorator = new XWPFCommentsDecorator(new XWPFHyperlinkDecorator(paragraph, null, true)); - - CTBookmark[] bookmarks = paragraph.getCTP().getBookmarkStartArray(); - for (CTBookmark bookmark : bookmarks) { - buffy.append(bookmark.getName()).append(' '); - } - - buffy.append(decorator.getText()).append(' '); - - if (ctSectPr != null) { - extractFooters(buffy, headerFooterPolicy); + private void parse(InputStream stream, DefaultHandler handler) throws DocumentException { + try { + XMLReader parser = XMLReaderFactory.createXMLReader(); + parser.setContentHandler(handler); + parser.setEntityResolver(handler); + try { + parser.setFeature("http://xml.org/sax/features/validation", false); + } catch(Exception e) { + log.error("Cannot deactivate validation", e); } + parser.parse(new InputSource(stream)); + } catch (Exception e) { + throw new DocumentException("XML parser configuration error", e); } } + + private class OfficeDocumentHandler extends DefaultHandler { + private final StringBuilder sb = new StringBuilder(); - private void extractFooters(StringBuilder buffy, XWPFHeaderFooterPolicy hfPolicy) { - if (hfPolicy.getFirstPageFooter() != null) { - buffy.append(hfPolicy.getFirstPageFooter().getText()).append(' '); + public StringBuilder getContent() { + return sb; } - if (hfPolicy.getEvenPageFooter() != null) { - buffy.append(hfPolicy.getEvenPageFooter().getText()).append(' '); - } - if (hfPolicy.getDefaultFooter() != null) { - buffy.append(hfPolicy.getDefaultFooter().getText()).append(' '); - } - } - private void extractHeaders(StringBuilder buffy, XWPFHeaderFooterPolicy hfPolicy) { - if (hfPolicy.getFirstPageHeader() != null) { - buffy.append(hfPolicy.getFirstPageHeader().getText()).append(' '); - } - if (hfPolicy.getEvenPageHeader() != null) { - buffy.append(hfPolicy.getEvenPageHeader().getText()).append(' '); - } - if (hfPolicy.getDefaultHeader() != null) { - buffy.append(hfPolicy.getDefaultHeader().getText()).append(' '); + @Override + public void characters(char[] ch, int start, int length) { + if(sb .length() > 0 && sb.charAt(sb.length() - 1) != ' '){ + sb.append(' '); + } + sb.append(ch, start, length); } } } \ No newline at end of file diff --git a/src/main/java/org/olat/search/service/document/file/utils/ShieldInputStream.java b/src/main/java/org/olat/search/service/document/file/utils/ShieldInputStream.java new file mode 100644 index 0000000000000000000000000000000000000000..9a8c7c73dcf89875f0979a04c887c1881d20b386 --- /dev/null +++ b/src/main/java/org/olat/search/service/document/file/utils/ShieldInputStream.java @@ -0,0 +1,86 @@ +/** + * <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.search.service.document.file.utils; + +import java.io.IOException; +import java.io.InputStream; +import java.util.zip.ZipInputStream; + +/** + * It's a wrapper for a ZIP input stream which MUST not be closed + * at the end of the processing of an entry, but only at the end + * of the whole ZIP processing. + * + * <P> + * Initial Date: 5 nov. 2012<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix + */ +public class ShieldInputStream extends InputStream { + private final ZipInputStream delegate; + + public ShieldInputStream(ZipInputStream delegate) { + this.delegate = delegate; + } + + @Override + public int read() throws IOException { + return delegate.read(); + } + + @Override + public int available() throws IOException { + return delegate.available(); + } + + @Override + public void close() { + // do nothing + } + + @Override + public synchronized void mark(int readlimit) { + delegate.mark(readlimit); + } + + @Override + public boolean markSupported() { + return delegate.markSupported(); + } + + @Override + public int read(byte[] b, int off, int len) throws IOException { + return delegate.read(b, off, len); + } + + @Override + public int read(byte[] b) throws IOException { + return delegate.read(b); + } + + @Override + public synchronized void reset() throws IOException { + delegate.reset(); + } + + @Override + public long skip(long n) throws IOException { + return delegate.skip(n); + } +} diff --git a/src/main/java/org/olat/search/service/document/file/utils/SlicedDocument.java b/src/main/java/org/olat/search/service/document/file/utils/SlicedDocument.java new file mode 100644 index 0000000000000000000000000000000000000000..da4afa5dd9b0e2ad6ab242e4e058ec45c437e8b7 --- /dev/null +++ b/src/main/java/org/olat/search/service/document/file/utils/SlicedDocument.java @@ -0,0 +1,87 @@ +/** + * <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.search.service.document.file.utils; + +import java.util.ArrayList; +import java.util.List; + +/** + * + * Utility class to help reorder the slides/sheets/fotters/headers of XML + * documents which are sliced in different numbered XML files + * + * <P> + * Initial Date: 5 nov. 2012<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + */ +public class SlicedDocument { + + private List<StringBuilder> headers = new ArrayList<StringBuilder>(); + private List<StringBuilder> documents = new ArrayList<StringBuilder>(); + private List<StringBuilder> footers = new ArrayList<StringBuilder>(); + + private int size; + + public void setHeader(int index, StringBuilder doc) { + ensureSize(headers, index); + documents.set(index, doc); + size += doc.length(); + } + + public void setContent(int index, StringBuilder doc) { + ensureSize(documents, index); + documents.set(index, doc); + size += doc.length(); + } + + public void setFooter(int index, StringBuilder doc) { + ensureSize(footers, index); + footers.set(index, doc); + size += doc.length(); + } + + private final void ensureSize(List<StringBuilder> list, int index) { + if(list.size() <= index) { + for(int i=list.size(); i< (index+20); i++) { + list.add(null); + } + } + } + + private final List<StringBuilder> toStringAndClear(StringBuilder content, List<StringBuilder> list) { + if(list != null && !list.isEmpty()) { + for(StringBuilder document:list) { + if(document != null) { + content.append(document).append('\n'); + } + } + list.clear(); + } + return null; + } + + public String toStringAndClear() { + StringBuilder content = new StringBuilder(size + 100); + headers = toStringAndClear(content, headers); + documents = toStringAndClear(content, documents); + footers = toStringAndClear(content, footers); + return content.toString(); + } +} diff --git a/src/main/java/org/olat/search/ui/SearchControllerFactory.java b/src/main/java/org/olat/search/ui/SearchControllerFactory.java index f7e1b8db08b9ae1ebd6c15bba09d1e7f78577372..cf297053c48cd518bb3e000737bba406483f3ff0 100644 --- a/src/main/java/org/olat/search/ui/SearchControllerFactory.java +++ b/src/main/java/org/olat/search/ui/SearchControllerFactory.java @@ -26,6 +26,7 @@ import java.util.Locale; import java.util.Map; import org.olat.basesecurity.BaseSecurityManager; +import org.olat.basesecurity.IdentityShort; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.services.search.ResultDocument; import org.olat.core.commons.services.search.ui.ResultController; @@ -36,9 +37,7 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.impl.Form; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.translator.Translator; -import org.olat.core.id.Identity; import org.olat.core.id.User; -import org.olat.core.id.UserConstants; import org.olat.core.id.context.BusinessControl; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; @@ -51,6 +50,7 @@ import org.olat.group.BusinessGroupService; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; import org.olat.search.service.document.ContextHelpDocument; +import org.olat.user.UserManager; /** * Description:<br> @@ -133,16 +133,17 @@ public class SearchControllerFactory implements SearchServiceUIFactory { return courseNode.getShortTitle(); } if ("Identity".equals(tokenType)) { - Identity identity = BaseSecurityManager.getInstance().loadIdentityByKey(Long.parseLong(tokenKey)); - User user = identity.getUser(); - return user.getProperty(UserConstants.LASTNAME, locale) + " " + user.getProperty(UserConstants.FIRSTNAME, locale) ; + IdentityShort identity = BaseSecurityManager.getInstance().loadIdentityShortByKey(Long.parseLong(tokenKey)); + return UserManager.getInstance().getUserDisplayName(identity); } if ("BusinessGroup".equals(tokenType)) { BusinessGroup bg = CoreSpringFactory.getImpl(BusinessGroupService.class).loadBusinessGroup(Long.parseLong(tokenKey)); return bg == null ? "" : bg.getName(); } - Translator translator = Util.createPackageTranslator(this.getClass(), locale); + if("userfolder".equals(tokenType)) { + return translator.translate("type.identity.publicfolder"); + } String translated = translator.translate(tokenType); if (translated == null || translated.length() > 64) { return token;//no translation, translator return an error diff --git a/src/main/java/org/olat/social/shareLink/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/social/shareLink/_i18n/LocalStrings_pt_BR.properties new file mode 100644 index 0000000000000000000000000000000000000000..db8f745033f26e123586994b787168ec9873c0b5 --- /dev/null +++ b/src/main/java/org/olat/social/shareLink/_i18n/LocalStrings_pt_BR.properties @@ -0,0 +1,8 @@ +#Tue Nov 06 14:08:14 CET 2012 +share.delicious=Adicionar link aos favoritos no delicous +share.digg=Compartilhar link no digg +share.facebook=Compatilhar link no facebook +share.google=Adicionar link aos favoritos do Google +share.link=Copiar link +share.mail=Compartilhar link no E-mail +share.twitter=Tweetar link diff --git a/src/main/java/org/olat/user/UserInfoMainController.java b/src/main/java/org/olat/user/UserInfoMainController.java index 8ff91cceb06cfab19478a8826233607d727ea8d1..2091eaf86083c86ea42bd94ed5631d62acef33e3 100644 --- a/src/main/java/org/olat/user/UserInfoMainController.java +++ b/src/main/java/org/olat/user/UserInfoMainController.java @@ -296,6 +296,7 @@ public class UserInfoMainController extends MainLayoutBasicController implements removeAsListenerAndDispose(folderRunController); folderRunController = new FolderRunController(namedFolder, false, true, false, ureq, getWindowControl()); + folderRunController.setResourceURL("[Identity:" + identity.getKey() + "][userfolder:0]"); listenTo(folderRunController); myContent.put("userinfo", folderRunController.getInitialComponent()); diff --git a/src/main/java/org/olat/user/propertyhandlers/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/user/propertyhandlers/_i18n/LocalStrings_pt_BR.properties index 992cc7784f7d1cf83f0170ba4071868e4378ba9e..fcfd59432144a46720b33fbd91026263765f151b 100644 --- a/src/main/java/org/olat/user/propertyhandlers/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/user/propertyhandlers/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Tue Apr 03 14:22:19 CEST 2012 +#Wed Nov 07 19:11:34 CET 2012 form.example.free={0} form.example.icqname=(16827354) form.example.icqname.notvalidated=Seu n\u00FAmero de ICQ n\u00E3o p\u00F4de ser verificado, mas foi considerado v\u00E1lido. @@ -21,6 +21,8 @@ form.name.city=Cidade form.name.city.error.empty=O campo "Cidade" \u00E9 obrigat\u00F3rio. form.name.country=Pa\u00EDs form.name.country.error.empty=O campo "Pa\u00EDs" \u00E9 obrigat\u00F3rio. +form.name.date.future.error=A data escolhida deve estar no futuro +form.name.date.past.error=A data escolhida deve estar no passado form.name.degree=Gradua\u00E7\u00E3o acad\u00EAmica form.name.department=Departamento / Empresa form.name.email=Endere\u00E7o de e-mail diff --git a/src/main/resources/database/postgresql/setupDatabase.sql b/src/main/resources/database/postgresql/setupDatabase.sql index f62cbba5caef3fcb876cedac54df620165901f46..ad090039a3dff4896a4deb8a2bc9766134ac65e6 100644 --- a/src/main/resources/database/postgresql/setupDatabase.sql +++ b/src/main/resources/database/postgresql/setupDatabase.sql @@ -196,9 +196,9 @@ create table o_user ( language varchar(30), fontsize varchar(10), notification_interval varchar(16), - receiverealmail varchar(16), presencemessagespublic bool, informsessiontimeout bool not null, + receiverealmail varchar(16), primary key (user_id) ); create table o_userproperty ( diff --git a/src/main/resources/serviceconfig/olat.properties b/src/main/resources/serviceconfig/olat.properties index d2af48e46eda2c52d894f9a2f5949c1e592ea09f..f4e845c85d7d7a7e42e7c9455f34e1a01c7dbc83 100644 --- a/src/main/resources/serviceconfig/olat.properties +++ b/src/main/resources/serviceconfig/olat.properties @@ -431,10 +431,6 @@ db.url.options.mysql=?useUnicode=true&characterEncoding=UTF-8 # enable database debugging (seldom required except for developers) db.show_sql=false -# validate, update, create, create-drop are valid entries. -# set to validate or disable with empty value to not validate against your database. -#db.hibernate.ddl.auto=update -db.hibernate.ddl.auto= # configure the c3p0 pool with hibernate db.hibernate.c3p0.minsize=20 db.hibernate.c3p0.maxsize=50 diff --git a/src/main/webapp/static/js/egg.js b/src/main/webapp/static/js/egg.js index aaa3153617f4bb79a92fc323f1dfcdb4be36428c..8286d0b56bef0b14846b5579e74bec830a0c236f 100644 --- a/src/main/webapp/static/js/egg.js +++ b/src/main/webapp/static/js/egg.js @@ -26,7 +26,7 @@ var q = 1100; // flow text at right side: plain text - no html allowed! var t = "thank you for using the \nlearning management\nsystem OpenOLAT\n\n" + "OpenOLAT contains \ncode contributed by:\n\nroberto bagnoli\nhanspeter brun\npatrick brunner\nstephan clemenz\nlavinia dumitrescu\n" - + "lars eberle\nstefan egli\nclaudia ehrle\njoel fisler\nflorian gnaegi\nchristian guretzki\nroman haag\n" + + "lars eberle\nstefan egli\nclaudia ehrle\njoel fisler\nflorian gnaegi\nchristian guretzki\nroman haag\nbrooke hedrick\n" + "stefan hofstetter\nkristina isacson\ndesiree iturbide\nsabina jeger\nfelix jost\nandreas kapp\nmartin kernland\ningmar kroll\nmatthai kurian\n" + "tiziana perini\nmaurus rohrer\nstéphane rossé\nsandra roth\nalexander schneider\nfranziska schneider\nguido schnider\nmaya schuessler\nruth schuermann\n" + "renata sevcikova\nconi steinemann\nmike stock\nalexandra stucki\nsergio trentini\ngregor wassmann\nmarion weber\ncarsten weisse\ntimo wuersch\nhans-joerg zuberbuehler\n" diff --git a/src/main/webapp/static/themes/openolat/all/modules/_formsandbuttons.scss b/src/main/webapp/static/themes/openolat/all/modules/_formsandbuttons.scss index 71109482700ba8fae19463e36e8ce3bdf823a38d..8cdaec17d8c6b4070261a641ff4563e8e171bfa7 100644 --- a/src/main/webapp/static/themes/openolat/all/modules/_formsandbuttons.scss +++ b/src/main/webapp/static/themes/openolat/all/modules/_formsandbuttons.scss @@ -151,7 +151,7 @@ span.b_toggle_slide_legend {font-size: 90%; } } .b_link_course { - > span { background-image: transparent url('../openolat/images/book-open-next.png');} + > span {background-image: url('../openolat/images/book-open-next.png');} } .b_link_group { @@ -223,6 +223,8 @@ div.b_form { &.b_form_spacer.b_form_spacer_noline { margin: 10px 0; border-bottom: 0; padding: 0;} } + + /* form element wrapper: label and element */ div.b_form_element_wrapper { vertical-align: middle; @@ -277,6 +279,16 @@ div.b_form { }// end div.b_form +div.b_labels_minified div.b_form div.b_form_element_wrapper { + div.b_form_element_label { + width: 10%; + } + + div.b_form_element { + margin-left: 12%; + } + } + // LOL :) shift form to left if no labels (see linklist edit for example) div.form_shift_left { left: -25%; } diff --git a/src/test/java/org/olat/course/FunctionalCourseTest.java b/src/test/java/org/olat/course/FunctionalCourseTest.java index 55b6c78088c29e2a6971385149bba7918eb3e9da..cb7bc6620319ff3e513fdcfe22499ca880c0b285 100644 --- a/src/test/java/org/olat/course/FunctionalCourseTest.java +++ b/src/test/java/org/olat/course/FunctionalCourseTest.java @@ -31,6 +31,7 @@ import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.SecureRandom; import java.util.List; +import java.util.Random; import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.IOUtils; @@ -82,9 +83,9 @@ public class FunctionalCourseTest { public final static String EDITOR_COURSE_OVERVIEW_FILE = "/org/olat/course/overview_comprehensive_guide_to_c_programming.html"; public final static int LARGE_COURSE_FILE_COUNT = 20; - public final static long LARGE_COURSE_FILE_SIZE = 50000; - public final static int LARGE_COURSE_TEST_COUNT = 200; - public final static int LARGE_COURSE_GROUP_COUNT = 150; + public final static long LARGE_COURSE_FILE_SIZE = 5000000; + public final static int LARGE_COURSE_TEST_COUNT = 20; + public final static int LARGE_COURSE_GROUP_COUNT = 15; public final static String LARGE_COURSE_IQ_TEST_SHORT_TITLE = "QTI"; public final static String LARGE_COURSE_IQ_TEST_LONG_TITLE = "generated test No. "; public final static String LARGE_COURSE_IQ_TEST_DESCRIPTION_0 = "generated within a loop: test#"; @@ -127,7 +128,6 @@ public class FunctionalCourseTest { } } - @Ignore @Test @RunAsClient public void checkCreateUsingWizard(){ @@ -156,7 +156,6 @@ public class FunctionalCourseTest { functionalUtil.logout(browser); } - @Ignore @Test @RunAsClient public void checkCreateUsingEditor() throws FileNotFoundException, IOException, URISyntaxException{ @@ -239,6 +238,7 @@ public class FunctionalCourseTest { @RunAsClient public void checkCreateLargeCourse() throws URISyntaxException, IOException, NoSuchAlgorithmException, NoSuchProviderException{ File[] largeFile = new File[LARGE_COURSE_FILE_COUNT]; + Random random = new Random(); for(int i = 0; i < largeFile.length; i++){ File currentFile = @@ -257,7 +257,9 @@ public class FunctionalCourseTest { ByteArrayOutputStream dataOut = new ByteArrayOutputStream(); dataOut.write(new String("Line number #" + j + ": ").getBytes()); - dataOut.write(Base64.encodeBase64(SecureRandom.getInstance("SHA1PRNG", "SUN").generateSeed(512), false)); + byte[] chunck = new byte[1024]; + random.nextBytes(chunck); + dataOut.write(Base64.encodeBase64(chunck, false)); dataOut.write("\n".getBytes()); IOUtils.write(dataOut.toByteArray(), out); out.flush(); @@ -302,7 +304,7 @@ public class FunctionalCourseTest { /* create course node and assign qti test to it */ Assert.assertTrue(functionalCourseUtil.createCourseNode(browser, CourseNodeAlias.IQ_TEST, - title, LARGE_COURSE_IQ_TEST_LONG_TITLE, description, + title, LARGE_COURSE_IQ_TEST_LONG_TITLE + i, description, 2 * i + 4)); Assert.assertTrue(functionalCourseUtil.createQTITest(browser, title, description)); } diff --git a/src/test/java/org/olat/group/test/BusinessGroupRelationDAOTest.java b/src/test/java/org/olat/group/test/BusinessGroupRelationDAOTest.java index fc108590bd44b31590247b92334281f02ce3f4fe..3dc759d33135f95f63355b8739f0ef77ddba8062 100644 --- a/src/test/java/org/olat/group/test/BusinessGroupRelationDAOTest.java +++ b/src/test/java/org/olat/group/test/BusinessGroupRelationDAOTest.java @@ -602,6 +602,22 @@ public class BusinessGroupRelationDAOTest extends OlatTestCase { Assert.assertEquals(3, count); } + @Test + public void toGroupKeys() { + //create a resource with 2 groups + OLATResource resource = JunitTestHelper.createRandomResource(); + BusinessGroup group1 = businessGroupDao.createAndPersist(null, "to-group-1", "to-group-1-desc", -1, -1, false, false, false, false, false); + businessGroupRelationDao.addRelationToResource(group1, resource); + BusinessGroup group2 = businessGroupDao.createAndPersist(null, "to-group-2", "to-group-2-desc", -1, -1, false, false, false, false, false); + businessGroupRelationDao.addRelationToResource(group2, resource); + dbInstance.commitAndCloseSession(); + + List<Long> groupKeys = businessGroupRelationDao.toGroupKeys("to-group-1", resource); + Assert.assertNotNull(groupKeys); + Assert.assertEquals(1, groupKeys.size()); + Assert.assertTrue(groupKeys.contains(group1.getKey())); + } + @Test public void countResourcesOfBusinessGroups() { //create 3 entries and 1 group diff --git a/src/test/java/org/olat/search/service/document/file/OfficeDocumentTest.java b/src/test/java/org/olat/search/service/document/file/OfficeDocumentTest.java new file mode 100644 index 0000000000000000000000000000000000000000..4a92bd3e9e917cf2849059b0ced849f778a40147 --- /dev/null +++ b/src/test/java/org/olat/search/service/document/file/OfficeDocumentTest.java @@ -0,0 +1,103 @@ +package org.olat.search.service.document.file; + +import java.io.File; +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; + +import junit.framework.Assert; + +import org.junit.Test; +import org.olat.core.util.vfs.VFSLeaf; +import org.olat.search.service.document.file.FileDocument.FileContent; +import org.olat.test.VFSJavaIOFile; + +/** + * Test the low memory text extractor for OpenXML (Microsoft Office XML) + * documents. + * + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + */ +public class OfficeDocumentTest { + + @Test + public void testWordOpenXMLDocument() throws IOException, DocumentException, DocumentAccessException, URISyntaxException { + URL docUrl = OfficeDocumentTest.class.getResource("Test_word_indexing.docx"); + Assert.assertNotNull(docUrl); + + VFSLeaf doc = new VFSJavaIOFile(new File(docUrl.toURI())); + WordOOXMLDocument document = new WordOOXMLDocument(); + FileContent content = document.readContent(doc); + Assert.assertNotNull(content); + String body = content.getContent(); + Assert.assertTrue(body.contains("Document compatibility test")); + Assert.assertTrue(body.contains("They prefer to start writing a document at home in desktop or laptop computer")); + } + + @Test + public void testWordDocument() throws IOException, DocumentException, DocumentAccessException, URISyntaxException { + URL docUrl = OfficeDocumentTest.class.getResource("Test_word_indexing.doc"); + Assert.assertNotNull(docUrl); + + VFSLeaf doc = new VFSJavaIOFile(new File(docUrl.toURI())); + WordDocument document = new WordDocument(); + FileContent content = document.readContent(doc); + Assert.assertNotNull(content); + String body = content.getContent(); + Assert.assertTrue(body.contains("Lorem ipsum dolor sit amet")); + } + + @Test + public void testExcelOpenXMLDocument() throws IOException, DocumentException, DocumentAccessException, URISyntaxException { + URL docUrl = OfficeDocumentTest.class.getResource("Test_excel_indexing.xlsx"); + Assert.assertNotNull(docUrl); + + VFSLeaf doc = new VFSJavaIOFile(new File(docUrl.toURI())); + ExcelOOXMLDocument document = new ExcelOOXMLDocument(); + FileContent content = document.readContent(doc); + Assert.assertNotNull(content); + String body = content.getContent(); + Assert.assertTrue(body.contains("Numbers and their Squares")); + Assert.assertTrue(body.contains("225")); + } + + @Test + public void testExcelDocument() throws IOException, DocumentException, DocumentAccessException, URISyntaxException { + URL docUrl = OfficeDocumentTest.class.getResource("Test_excel_indexing.xls"); + Assert.assertNotNull(docUrl); + + VFSLeaf doc = new VFSJavaIOFile(new File(docUrl.toURI())); + ExcelDocument document = new ExcelDocument(); + FileContent content = document.readContent(doc); + Assert.assertNotNull(content); + String body = content.getContent(); + Assert.assertTrue(body.contains("Nachname")); + Assert.assertTrue(body.contains("olat4you")); + } + + @Test + public void testPowerPointOpenXMLDocument() throws IOException, DocumentException, DocumentAccessException, URISyntaxException { + URL docUrl = OfficeDocumentTest.class.getResource("Test_ppt_indexing.pptx"); + Assert.assertNotNull(docUrl); + + VFSLeaf doc = new VFSJavaIOFile(new File(docUrl.toURI())); + PowerPointOOXMLDocument document = new PowerPointOOXMLDocument(); + FileContent content = document.readContent(doc); + Assert.assertNotNull(content); + String body = content.getContent(); + Assert.assertTrue(body.contains("Here is some text")); + } + + @Test + public void testPowerPointDocument() throws IOException, DocumentException, DocumentAccessException, URISyntaxException { + URL docUrl = OfficeDocumentTest.class.getResource("Test_ppt_indexing.ppt"); + Assert.assertNotNull(docUrl); + + VFSLeaf doc = new VFSJavaIOFile(new File(docUrl.toURI())); + PowerPointDocument document = new PowerPointDocument(); + FileContent content = document.readContent(doc); + Assert.assertNotNull(content); + String body = content.getContent(); + Assert.assertTrue(body.contains("Sample Powerpoint Slide")); + } +} \ No newline at end of file diff --git a/src/test/java/org/olat/search/service/document/file/Test_excel_indexing.xls b/src/test/java/org/olat/search/service/document/file/Test_excel_indexing.xls new file mode 100644 index 0000000000000000000000000000000000000000..6b8e635137dc6fdffa9a950a5f6043431249340c Binary files /dev/null and b/src/test/java/org/olat/search/service/document/file/Test_excel_indexing.xls differ diff --git a/src/test/java/org/olat/search/service/document/file/Test_excel_indexing.xlsx b/src/test/java/org/olat/search/service/document/file/Test_excel_indexing.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8d5169f84108cc4af5dd66e2c0957eb52e6622e6 Binary files /dev/null and b/src/test/java/org/olat/search/service/document/file/Test_excel_indexing.xlsx differ diff --git a/src/test/java/org/olat/search/service/document/file/Test_ppt_indexing.ppt b/src/test/java/org/olat/search/service/document/file/Test_ppt_indexing.ppt new file mode 100644 index 0000000000000000000000000000000000000000..b48cfaf2bd7045c21c5f65e1478725e8cee84ed7 Binary files /dev/null and b/src/test/java/org/olat/search/service/document/file/Test_ppt_indexing.ppt differ diff --git a/src/test/java/org/olat/search/service/document/file/Test_ppt_indexing.pptx b/src/test/java/org/olat/search/service/document/file/Test_ppt_indexing.pptx new file mode 100644 index 0000000000000000000000000000000000000000..7ab7212e6b087c1a559887d64973b0386e625e1c Binary files /dev/null and b/src/test/java/org/olat/search/service/document/file/Test_ppt_indexing.pptx differ diff --git a/src/test/java/org/olat/search/service/document/file/Test_word_indexing.doc b/src/test/java/org/olat/search/service/document/file/Test_word_indexing.doc new file mode 100644 index 0000000000000000000000000000000000000000..7511e47a7c49354834da4e371367ea0ffb5c65f6 Binary files /dev/null and b/src/test/java/org/olat/search/service/document/file/Test_word_indexing.doc differ diff --git a/src/test/java/org/olat/search/service/document/file/Test_word_indexing.docx b/src/test/java/org/olat/search/service/document/file/Test_word_indexing.docx new file mode 100755 index 0000000000000000000000000000000000000000..56868a6a479dcd8d1de201d129699d1f0e071fec Binary files /dev/null and b/src/test/java/org/olat/search/service/document/file/Test_word_indexing.docx differ diff --git a/src/test/java/org/olat/test/AllTestsJunit4.java b/src/test/java/org/olat/test/AllTestsJunit4.java index 58a8426ad953400b98f49a3388bd3d9dcd49d255..1134ba49ec64c9fd2b1e0ff9d3bea8b8a25e7df0 100644 --- a/src/test/java/org/olat/test/AllTestsJunit4.java +++ b/src/test/java/org/olat/test/AllTestsJunit4.java @@ -102,6 +102,7 @@ import org.junit.runners.Suite; org.olat.properties.PropertyTest.class,//ok org.olat.search.service.document.file.FileDocumentFactoryTest.class, org.olat.search.service.document.file.PDFDocumentTest.class, + org.olat.search.service.document.file.OfficeDocumentTest.class, org.olat.catalog.CatalogManagerTest.class,//ok org.olat.bookmark.BookmarkManagerTest.class,//ok org.olat.notifications.NotificationsManagerTest.class,//fail diff --git a/src/test/java/org/olat/test/VFSJavaIOFile.java b/src/test/java/org/olat/test/VFSJavaIOFile.java index 5fd92fb877d721b2ad424f2a03b15604c1f38452..6cff7c7097cf6afa26b8aff3a99390cef87d5a67 100644 --- a/src/test/java/org/olat/test/VFSJavaIOFile.java +++ b/src/test/java/org/olat/test/VFSJavaIOFile.java @@ -44,6 +44,10 @@ public class VFSJavaIOFile implements VFSLeaf { private final String name; private final File file; + public VFSJavaIOFile(File file) { + this(file.getName(), file); + } + public VFSJavaIOFile(String name, File file) { this.name = name; this.file = file; diff --git a/src/test/profile/mysql/olat.arquillian.properties b/src/test/profile/mysql/olat.arquillian.properties index 879959dae9462da1a53fcae955bad1cce5414b9b..da98eb23e3e04584d7eded2ec431fc5e1c321596 100644 --- a/src/test/profile/mysql/olat.arquillian.properties +++ b/src/test/profile/mysql/olat.arquillian.properties @@ -50,5 +50,4 @@ db.user=olat db.pass=olat db.host.port=3306 db.database.dialect=org.hibernate.dialect.MySQL5InnoDBDialect -db.hibernate.ddl.auto= auto.upgrade.database=false diff --git a/src/test/profile/mysql/olat.eclipse.properties b/src/test/profile/mysql/olat.eclipse.properties index 5d4a513a70e84a7d121e0d8fad928d5cf6b7394e..e6d7f11d9d34090cbcdc8cd1558a661e4156ecd8 100644 --- a/src/test/profile/mysql/olat.eclipse.properties +++ b/src/test/profile/mysql/olat.eclipse.properties @@ -48,5 +48,4 @@ db.user=olat db.pass=olat db.host.port=3306 db.database.dialect=org.hibernate.dialect.MySQL5InnoDBDialect -db.hibernate.ddl.auto= auto.upgrade.database=false diff --git a/src/test/profile/mysql/olat.local.properties b/src/test/profile/mysql/olat.local.properties index 294504438377201b2b3f0c201204d8258ddbd54e..37ce7f8df96d3b2d7bad95faa0843e1cfbc9fdd7 100644 --- a/src/test/profile/mysql/olat.local.properties +++ b/src/test/profile/mysql/olat.local.properties @@ -50,5 +50,4 @@ db.user=${test.env.db.user} db.pass=${test.env.db.pass} db.host.port=${test.env.db.host.port} db.database.dialect=org.hibernate.dialect.MySQL5InnoDBDialect -db.hibernate.ddl.auto=${test.env.db.hibernate.ddl.auto} auto.upgrade.database=false diff --git a/src/test/profile/oracle/olat.eclipse.properties b/src/test/profile/oracle/olat.eclipse.properties index 964f8099f28d37494aef14219ccbc020bd9d437f..59206f1663490227373e0ee2d5dab974a118b33e 100644 --- a/src/test/profile/oracle/olat.eclipse.properties +++ b/src/test/profile/oracle/olat.eclipse.properties @@ -50,5 +50,4 @@ db.host=192.168.1.202 db.host.port=1521 db.default.schema=olattest db.database.dialect=org.hibernate.dialect.Oracle10gDialect -db.hibernate.ddl.auto= auto.upgrade.database=false diff --git a/src/test/profile/oracle/olat.local.properties b/src/test/profile/oracle/olat.local.properties index 6ad9838e0b92226be0d11e8262efd6843116a113..246324d6ab263dfed6e960c64d7d0d4ef66ef7a3 100644 --- a/src/test/profile/oracle/olat.local.properties +++ b/src/test/profile/oracle/olat.local.properties @@ -50,5 +50,4 @@ db.host=192.168.1.202 db.host.port=1521 db.default.schema=olattest db.database.dialect=org.hibernate.dialect.Oracle10gDialect -db.hibernate.ddl.auto= auto.upgrade.database=false diff --git a/src/test/profile/postgresql/olat.eclipse.properties b/src/test/profile/postgresql/olat.eclipse.properties index 73dcd05a8bf5eebdd5eec44c3657c7d56e1be003..98cd6e1f2df75d5f6f935a2d5b160f71287c6b45 100644 --- a/src/test/profile/postgresql/olat.eclipse.properties +++ b/src/test/profile/postgresql/olat.eclipse.properties @@ -50,4 +50,3 @@ db.user=postgres db.pass=postgres db.host.port=5432 db.database.dialect=org.hibernate.dialect.PostgreSQLDialect -db.hibernate.ddl.auto= diff --git a/src/test/profile/postgresql/olat.local.properties b/src/test/profile/postgresql/olat.local.properties index 542389b5b2ef3c8902378a28f35c72e43742ef21..5f0960d7d5e13a974954eb8da28d4b41ed874373 100644 --- a/src/test/profile/postgresql/olat.local.properties +++ b/src/test/profile/postgresql/olat.local.properties @@ -50,5 +50,4 @@ db.user=${test.env.db.postgresql.user} db.pass=${test.env.db.postgresql.pass} db.host.port=${test.env.db.postgresql.host.port} db.database.dialect=org.hibernate.dialect.PostgreSQLDialect -db.hibernate.ddl.auto=${test.env.db.hibernate.ddl.auto} auto.upgrade.database=false