diff --git a/.hgtags b/.hgtags index 57b38bca53a345c50b6a05ca259b3d1bdbe5390d..b2447a857714c2926fd25cc4170f43c483827203 100644 --- a/.hgtags +++ b/.hgtags @@ -70,3 +70,4 @@ cee7299c2b62edf89f6164ab81f3b785a234f95b OpenOLAT 9.3.2 4b1f3cb4957afcae660aa0823fa96aedf55a9382 OpenOLAT 9.3.3 4e992c6a31e099192c90eb5f364950bd34cc7741 OpenOLAT 9.3.4 3e4c2cc8495ac15f4af7397382655cfee1420336 OpenOLAT 9.3.5 +9a5d02062c328f6ab31aae75d02e7170c81fb459 OpenOLAT 9.4.0 diff --git a/src/main/java/org/olat/core/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/core/_i18n/LocalStrings_pt_BR.properties index 271f4d622e2a3775ac4318b7ee3c7a7c7f27fda9..15cc7b87e51ed569911871680a8556a397c7e1d3 100644 --- a/src/main/java/org/olat/core/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/core/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Thu Sep 05 14:17:25 CEST 2013 +#Thu May 15 14:40:56 CEST 2014 alert=Favor selecionar no m\u00EDnimo um objeto para sua a\u00E7\u00E3o. back=Voltar calendar.choose=Escolha uma data do mini calend\u00E1rio @@ -60,6 +60,7 @@ rating.5.4=$\:rating.4.4 rating.5.5=Excelente rating.explanation=Clique aqui para fazer avalia\u00E7\u00F5es save=Salvar +save.close=Salvar e fechar savesas=Salvar como search=Buscar select=Selecionar diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_pt_BR.properties index 51b1877bc1b42b2ff92a3f3a82f807e19629d658..bc91003e577afc637beb703cbb915b378ab64447 100644 --- a/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/core/commons/services/notifications/ui/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,5 @@ -#Fri Dec 17 17:13:22 CET 2010 +#Thu May 15 16:45:03 CEST 2014 +action.choose=Selecionar actions.title=Modifica\u00E7\u00F5es chelp.del=<i>$\:subs.deleted</i> chelp.home=<i>$org.olat.home\:menu.root</i> @@ -28,16 +29,13 @@ chelp.type=Nesta coluna, o tipo de objeto subscrito \u00E9 exibido. A coluna est chelp.unsubs=<i>$\:command.unsubscribe</i> command.subscribe=Inscrever command.unsubscribe=Desinscrever -help.hover.notif=Ajuda para notifica\u00E7\u00F5es -subscription.listitem.dateprefix=em {0} -user.unknown=desconhecido -action.choose=Selecionar confirm.delete=Voc\u00EA realmente quer apagar esta notifica\u00E7\u00E3o em que voc\u00EA se inscreveu? email.nok=Not\u00EDcias n\u00E3o puderam ser enviadas via e-mail. Por favor, tente novamente mais tarde ou contacte a equipe de suporte. email.ok=Not\u00EDcias enviadas por e-mail. emailLink=Enviar not\u00EDcias por e-mail error.date=Formato de data errada (dd.mm.yyyy) error.publisherdeleted=O recurso foi apagado e n\u00E3o pode mais ser mostrado. +help.hover.notif=Ajuda para notifica\u00E7\u00F5es info.notification.deleted=Esta notifica\u00E7\u00E3o subscrita foi exclu\u00EDda news.desc=A lista abaixo cont\u00E9m todas as modifica\u00E7\u00F5es dos recursos a que voc\u00EA se inscreveu. Voc\u00EA pode escolher qualquer per\u00EDodo que voc\u00EA desejar. news.in=encontrada em @@ -72,7 +70,10 @@ rss.olat.title=Bem-vindo {0} ao OLAT\! rss.title=Not\u00EDcias OLAT para {0} subs.deleted=Fonte da notifica\u00E7\u00E3o apagada\! subs.ok=V\u00E1lido +subscription.listitem.dateprefix=em {0} subscriptions.desc=Por favor, selecione uma assinatura na lista para chegar ao seu recurso. Exclua a sua assinatura se voc\u00EA n\u00E3o quiser mais receber not\u00EDcias. No entanto, \u00E9 poss\u00EDvel se inscrever novamente sempre que voc\u00EA quiser. subscriptions.no.subscriptions=N\u00E3o existem assinaturas neste momento. Voc\u00EA pode inscrever-se em not\u00EDcias de f\u00F3runs, wikis, pastas e v\u00E1rios outros recursos. Para inscrever, por favor, abra um recurso antes de clicar no link "Inscrever". subscriptions.title=Administrar assinaturas +user.formatted={0} {1} +user.unknown=desconhecido warn.nolaunch=O recursos selecionado n\u00E3o pode mais ser lan\u00E7ado. diff --git a/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java b/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java index 1c255d0096bcb0ef2b735dee5555944306125b85..b90b058a2caa976fb89d3dedad22a71f0528950f 100644 --- a/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java +++ b/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java @@ -426,6 +426,7 @@ public class MailManagerImpl extends BasicManager implements MailManager { */ @Override public void delete(DBMailLight mail, Identity identity, boolean deleteMetaMail) { + if(mail == null) return;//already deleted if(StringHelper.containsNonWhitespace(mail.getMetaId()) && deleteMetaMail) { List<DBMailLight> mails = getEmailsByMetaId(mail.getMetaId()); for(DBMailLight childMail:mails) { diff --git a/src/main/java/org/olat/core/util/vfs/NamedContainerImpl.java b/src/main/java/org/olat/core/util/vfs/NamedContainerImpl.java index cb3c5894d42b50fa041be9ec73fdcf59d45a2ba5..81a056f95a7f7effceed05892d1194ec883abf2f 100644 --- a/src/main/java/org/olat/core/util/vfs/NamedContainerImpl.java +++ b/src/main/java/org/olat/core/util/vfs/NamedContainerImpl.java @@ -55,7 +55,8 @@ public class NamedContainerImpl extends AbstractVirtualContainer { @Override public boolean exists() { - return delegate != null && delegate.exists(); + VFSContainer d = getDelegate(); + return d != null && d.exists(); } public VFSContainer getDelegate() { diff --git a/src/main/java/org/olat/course/archiver/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/archiver/_i18n/LocalStrings_pt_BR.properties index de3ce9fcae04ea938d493f73e436d9fd7cb48525..016d493ca8517814fbe7de39e21cb8c664756f3f 100644 --- a/src/main/java/org/olat/course/archiver/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/archiver/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Fri Jan 24 12:09:10 CET 2014 +#Thu May 15 16:45:46 CEST 2014 chelp.arch-logf.title=Avaliando arquivos de hist\u00F3rico chelp.ass=Avalia\u00E7\u00E3o chelp.cont=Contexto do grupo @@ -33,6 +33,7 @@ chelp.table1=b>Tab. 1\:</b> Poss\u00EDveis entradas nas colunas do arquivo de lo chelp.title=T\u00EDtulo chelp.uid=Identifica\u00E7\u00E3o de usu\u00E1rio chelp.ziel=Destino +cl=Check-List cmd.download=Baixar cmd.start=Iniciar column.field.missing=- diff --git a/src/main/java/org/olat/course/assessment/model/BulkAssessmentSettings.java b/src/main/java/org/olat/course/assessment/model/BulkAssessmentSettings.java index e702eb1dcd5b414df42070aa611b1b59b6713123..b0267ca5590f67f91b4036baa4518273aa037508 100644 --- a/src/main/java/org/olat/course/assessment/model/BulkAssessmentSettings.java +++ b/src/main/java/org/olat/course/assessment/model/BulkAssessmentSettings.java @@ -49,10 +49,10 @@ public class BulkAssessmentSettings implements Serializable { if (courseNode instanceof TACourseNode) { Boolean hasReturnBox = (Boolean)courseNode.getModuleConfiguration().get(TACourseNode.CONF_RETURNBOX_ENABLED); - hasReturnFiles = hasReturnBox.booleanValue(); + hasReturnFiles = hasReturnBox == null ? false : hasReturnBox.booleanValue(); } else if (courseNode instanceof ProjectBrokerCourseNode) { Boolean hasReturnBox = (Boolean)courseNode.getModuleConfiguration().get(ProjectBrokerCourseNode.CONF_RETURNBOX_ENABLED); - hasReturnFiles = hasReturnBox.booleanValue(); + hasReturnFiles = hasReturnBox == null ? false : hasReturnBox.booleanValue(); } else { hasReturnFiles = false; } diff --git a/src/main/java/org/olat/course/editor/EditorMainController.java b/src/main/java/org/olat/course/editor/EditorMainController.java index f8a14a0200dc71b6b481dba0aa084205a524752e..c5b8c561612ee830440ee24610cb07820b297bdd 100644 --- a/src/main/java/org/olat/course/editor/EditorMainController.java +++ b/src/main/java/org/olat/course/editor/EditorMainController.java @@ -213,14 +213,15 @@ public class EditorMainController extends MainLayoutBasicController implements G getUserActivityLogger().setStickyActionType(ActionType.admin); addLoggingResourceable(LoggingResourceable.wrap(CourseFactory.loadCourse(ores))); + // try to acquire edit lock for this course. + lockEntry = CoordinatorManager.getInstance().getCoordinator().getLocker().acquireLock(ores, ureq.getIdentity(), CourseFactory.COURSE_EDITOR_LOCK); + if(CourseFactory.isCourseEditSessionOpen(ores.getResourceableId())) { MainPanel empty = new MainPanel("empty"); putInitialPanel(empty); return; } - // try to acquire edit lock for this course. - lockEntry = CoordinatorManager.getInstance().getCoordinator().getLocker().acquireLock(ores, ureq.getIdentity(), CourseFactory.COURSE_EDITOR_LOCK); OLATResourceable lockEntryOres = OresHelper.createOLATResourceableInstance(LockEntry.class, 0l); CoordinatorManager.getInstance().getCoordinator().getEventBus().registerFor(this, getIdentity(), lockEntryOres); 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 0094416f09a8f333afb4bd2e7d472aee35251f27..f0d028d2a6eb4266be2942cb5926df7c95fb1456 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 @@ -#Sat Jan 18 15:45:57 CET 2014 +#Thu May 15 16:50:00 CEST 2014 access.form.label=Acesso ao curso inteiro tem access.legend=Modificar acesso ao curso inteiro alternative=Pesquisar por elemento de curso alternativo @@ -7,6 +7,7 @@ alternative.choose=Selecione um elemento curso alternativo e converta alternative.choose.description=Selecione da lista de elementos do curso alternativos, aqueles que ofere\u00E7am funcionalidade semelhante para converter este elemento de curso desativado. O t\u00EDtulo, descri\u00E7\u00E3o, regras de acesso e todo elemento subordinado ser\u00E1 copiado para o elemento convertido. apply=OK checkall=Selecionar tudo +checklist.wizard=Check-List chelp.1=Voc\u00EA tem que fornecer um t\u00EDtulo curto com no m\u00E1ximo 25 caracteres. chelp.10=Voc\u00EA pode determinar se apenas o seu conte\u00FAdo ou o seu t\u00EDtulo e descri\u00E7\u00E3o deve ser apresentado adicionalmente na \u00E1rea de conte\u00FAdo quando clicar em um elemento de curso em sua navega\u00E7\u00E3o. chelp.10acc=Este elemento de curso ficar\u00E1 vis\u00EDvel somente para tutores e administradores. @@ -331,6 +332,7 @@ command.coursepreview=Visualiza\u00E7\u00E3o? do curso command.deletenode=Apagar command.deletenode.header=A\u00E7\u00F5es command.movenode=Mover +command.multi.checklist=M\u00FAltiplos Check-Lists command.multi.sps=M\u00FAltiplas p\u00E1ginas command.publish=Publicar condition.noAccessExplanation.title=Informa\u00E7\u00E3o se vis\u00EDvel e acesso bloqueado @@ -450,7 +452,9 @@ publish.notpossible.setincomplete=Os elementos selecionados a serem publicados r publish.nowarnings=Problemas n\u00E3o encontrados publish.step.title.confirm=Sum\u00E1rio de modifica\u00E7\u00F5es publish.step.title.messages=Informa\u00E7\u00E3o +publish.step.update.title=Atualiza\u00E7\u00E3o em "background" publish.title=Publicar modifica\u00E7\u00F5es em curso em andamento +publish.update.description=Durante a publica\u00E7\u00E3o, os seguintes processos em segundo plano devem ser executados, a fim de garantir a consist\u00EAncia dos dados. Este processo pode levar algum tempo. Por favor, aguarde com a conclus\u00E3o da publica\u00E7\u00E3o at\u00E9 que tenha recebido um retorno de acordo. publish.withwarnings=Aviso publish.wizard.title=Publica\u00E7\u00E3o published.latest=Este curso foi publicado pela \u00FAltima vez em {0}. diff --git a/src/main/java/org/olat/course/member/wizard/ImportMemberOverviewIdentitiesController.java b/src/main/java/org/olat/course/member/wizard/ImportMemberOverviewIdentitiesController.java index 5ab0271e59febe04ec18ca6673adab28e83b5b57..a7309b3a8deffc19c699428d8b17a9a58f13b499 100644 --- a/src/main/java/org/olat/course/member/wizard/ImportMemberOverviewIdentitiesController.java +++ b/src/main/java/org/olat/course/member/wizard/ImportMemberOverviewIdentitiesController.java @@ -181,7 +181,7 @@ public class ImportMemberOverviewIdentitiesController extends StepFormBasicContr //search by names, must be lower case List<Identity> identities = securityManager.findIdentitiesByName(identListLowercase); for(Identity identity:identities) { - identListLowercase.remove(identity.getName()); + identListLowercase.remove(identity.getName().toLowerCase()); if (!PersistenceHelper.containsPersistable(oks, identity) && !securityManager.isIdentityInSecurityGroup(identity, anonymousSecGroup)) { oks.add(identity); diff --git a/src/main/java/org/olat/course/nodes/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/_i18n/LocalStrings_pt_BR.properties index f091bbb4320a4719a1b3c088578a7907e15d1f96..acb1b074e35e6a98798f973d0b44c750c34ec055 100644 --- a/src/main/java/org/olat/course/nodes/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/nodes/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Wed May 26 20:48:48 CEST 2010 +#Thu May 15 16:50:08 CEST 2014 editor.lock.message=Este elemento de curso est\u00E1 sendo modificado e, portanto, est\u00E1 bloqueado. editor.lock.title=Elemento de curso trancado guestnoaccess.message=Esta parte do curso n\u00E3o \u00E9 acess\u00EDvel para usu\u00E1rios convidados. <p>Para acessar esta parte do curso voc\u00EA tem que estar autenticado via sua universidade ou registrado no OLAT. @@ -7,6 +7,7 @@ learningObjectives.title=Descri\u00E7\u00E3o preview.notavailable=Nenhuma visualiza\u00E7\u00E3o est\u00E1 dispon\u00EDvel para o elemento de curso title_bc=Pasta title_blog=Blog +title_checklist=Check-List title_cl=Check list title_co=Formul\u00E1rio de contato title_cp=M\u00F3dulo IMS-CP diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java index 0bb62d0c2d7e47810b8b843b4eb5fd3a3a90a38c..e47ef4cb28992ce3cec382bc387a2eac00ad5f6f 100644 --- a/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java +++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java @@ -559,6 +559,8 @@ public class CheckListAssessmentController extends FormBasicController implement courseNode.updateScoreEvaluation(userCourseEnv, identity); } } + + reloadTable(); } private void doDisableEditingMode() { diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java index 68d302ed76c1fcd8ce426e27b44e39d296e8e943..f78b3df68b206e1b8d923843029cae69d6831ea7 100644 --- a/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java +++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java @@ -278,21 +278,26 @@ public class CheckListRunController extends FormBasicController implements Contr } else { theOne = wrapper.getDbCheckbox(); } - - Float score; - if(checked) { - score = wrapper.getCheckbox().getPoints(); + + if(theOne == null) { + //only warning because this happen in course preview + logWarn("A checkbox is missing: " + courseOres + " / " + courseNode.getIdent(), null); } else { - score = 0f; + Float score; + if(checked) { + score = wrapper.getCheckbox().getPoints(); + } else { + score = 0f; + } + checkboxManager.check(theOne, getIdentity(), score, new Boolean(checked)); + //make sure all results is on the database before calculating some scores + //manager commit already DBFactory.getInstance().commit(); + + courseNode.updateScoreEvaluation(userCourseEnv, getIdentity()); + + Checkbox checkbox = wrapper.getCheckbox(); + logUpdateCheck(checkbox.getCheckboxId(), checkbox.getTitle()); } - checkboxManager.check(theOne, getIdentity(), score, new Boolean(checked)); - //make sure all results is on the database before calculating some scores - //manager commit already DBFactory.getInstance().commit(); - - courseNode.updateScoreEvaluation(userCourseEnv, getIdentity()); - - Checkbox checkbox = wrapper.getCheckbox(); - logUpdateCheck(checkbox.getCheckboxId(), checkbox.getTitle()); exposeUserDataToVC(flc); } diff --git a/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_pt_BR.properties new file mode 100644 index 0000000000000000000000000000000000000000..a5e264026f3d0bab04f865eaf31c48e9d6aa1590 --- /dev/null +++ b/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_pt_BR.properties @@ -0,0 +1,16 @@ +#Thu May 15 17:05:25 CEST 2014 +add.checkbox=Adicionar checkbox +assessment=Avalia\u00E7\u00E3o +assessment.checkbox.description=Edite por Checkbox\: Aplique o filtro de Checkbox para editar o mesmo Checkbox de todos os participantes. +award.point.on=Pontua\u00E7\u00E3o concedida ao selecionar +box.assessment=Editar por Checkbox +box.check=Check +box.points=Pontua\u00E7\u00E3o +box.points.info=({0} pontos) +checkbox.title=T\u00EDtulo +checklist=Check-Lists +checklist.point.example=Pontua\u00E7\u00E3o (min\: {0} / m\u00E1x\: {1}) +checklist.update.assessment=Atualizando as informa\u00E7\u00F5es de avalia\u00E7\u00E3o de todos os participantes do curso. +checklist.update.efficiencystatements=Atualiza\u00E7\u00E3o os certificados de todos os usu\u00E1rios. +chelp.assessment.checkbox.1=Acesse os participantes do curso supervisionados por voc\u00EA filtrados por checkbox. Isto pode reduzir significativamente a taxa de erro, especialmente para grandes Check-Lists com v\u00E1rios CheckBox. +chelp.assessment.checkbox.2=Filtre a tabela de antem\u00E3o por grupo. Voc\u00EA pode, ent\u00E3o, escolher por primeiro ou \u00FAltimo nome, para facilitar a conformidade da sua lista de participantes com a lista de Check-Lists. diff --git a/src/main/java/org/olat/course/run/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/run/_i18n/LocalStrings_en.properties index aa6eb48dea0f3815cdfdb4fa086c41b08e06244f..fc8c16521a032148987e5f2a2f96b56862ffbbe6 100644 --- a/src/main/java/org/olat/course/run/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/course/run/_i18n/LocalStrings_en.properties @@ -24,7 +24,7 @@ command.openteststatistic=Test statistics command.opensurveystatistic=Survey statistics command.openrightmngt=Rights management command.opensimplegroupmngt=Members management -command.openstatistic=Course Statistics +command.openstatistic=Course statistics command.personalnote=Notes command.settings=Learning resource settings course.closed=This course is closed and can therefore no longer be edited or updated. diff --git a/src/main/java/org/olat/course/run/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/run/_i18n/LocalStrings_pl.properties index 8f1f721c9ecf75e2d73de6d9ee51750c137df613..5537dada7addeee00a86fdb7aa305db80651b274 100644 --- a/src/main/java/org/olat/course/run/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/course/run/_i18n/LocalStrings_pl.properties @@ -17,7 +17,8 @@ command.openarchiver=Archiwizacja command.openassessment=Ocenianie command.openeditor=Edytor command.opengroupmngt=Grupy -command.openteststatistic=Statystyki QTI +command.openteststatistic=Statystyki test +command.opensurveystatistic=Statystyki ankiet command.openrightmngt=Uprawnienia command.opensimplegroupmngt=Cz\u0142onkowie command.openstatistic=Statystyki diff --git a/src/main/java/org/olat/course/run/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/run/_i18n/LocalStrings_pt_BR.properties index 29144c10bc77bd96278a0d64bc5b85cac29898c9..566cc366a3186a15744a61cf5b9bc2f03fd85878 100644 --- a/src/main/java/org/olat/course/run/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/course/run/_i18n/LocalStrings_pt_BR.properties @@ -20,6 +20,7 @@ command.opendb=Banco de dados do Curso command.openeditor=Editor do curso command.opengroupmngt=Gerenciamento de grupo command.openteststatistic=Estat\u00EDsticas de Test +command.opensurveystatistic=Estat\u00EDsticas de Pesquisa command.openrightmngt=Gerenciamento de direitos command.opensimplegroupmngt=Gest\u00E3o de membros command.openstatistic=Ajuda sobre as configura\u00E7\u00F5es das descri\u00E7\u00F5es diff --git a/src/main/java/org/olat/ims/qti/statistics/manager/QTIStatisticsManagerImpl.java b/src/main/java/org/olat/ims/qti/statistics/manager/QTIStatisticsManagerImpl.java index b5f5c2ae57c165738488da06ac7dcaf6e7c5fdf9..89be6c9e50332cea9389c1d18720e0a53c073af5 100644 --- a/src/main/java/org/olat/ims/qti/statistics/manager/QTIStatisticsManagerImpl.java +++ b/src/main/java/org/olat/ims/qti/statistics/manager/QTIStatisticsManagerImpl.java @@ -301,7 +301,7 @@ public class QTIStatisticsManagerImpl implements QTIStatisticsManager { double averageScore = totalScore / totalResults; //difficulty (p-value) - double difficulty = numOfCorrectAnswers / totalResults; + double difficulty = numOfCorrectAnswers / (double)totalResults; double averageDuration = totalDuration / totalResults; StatisticsItem stats = new StatisticsItem(); diff --git a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_pt_BR.properties index bb272d5f57fe00214dcd20c05cbd55d36fffabd4..19d34846c269faf9a03e4bcdfc00cc97a3b9b8e4 100644 --- a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_pt_BR.properties @@ -1,4 +1,4 @@ -#Fri Sep 06 13:56:30 CEST 2013 +#Thu May 15 14:41:09 CEST 2014 add=+ add.to.list=Adicionar \u00E0 lista applications=Aplica\u00E7\u00F5es @@ -133,6 +133,8 @@ menu.pools.main=Cat\u00E1logo menu.pools.main.alt=Cat\u00E1logo menu.share=Compartilhamentos p\u00FAblicos metadatas=Metadados +my.list=Minhas listas +my.share=Meus compartilhamentos new.item=Criar pergunta next=Pr\u00F3ximo pool.key=ID diff --git a/src/main/java/org/olat/search/service/SearchServiceImpl.java b/src/main/java/org/olat/search/service/SearchServiceImpl.java index f68b96e68b1ba019a900c8bd509b1a042d96c428..8228f503663782b064445d7ec3c245554f602660 100644 --- a/src/main/java/org/olat/search/service/SearchServiceImpl.java +++ b/src/main/java/org/olat/search/service/SearchServiceImpl.java @@ -260,6 +260,9 @@ public class SearchServiceImpl implements SearchService { Future<List<Long>> futureResults = searchExecutor.submit(run); List<Long> results = futureResults.get(); queryCount++; + if(results == null) { + results = new ArrayList<Long>(1); + } return results; } catch (Exception e) { log.error("", e); diff --git a/src/main/webapp/static/js/jquery/openolat/jquery.statistics.chart.js b/src/main/webapp/static/js/jquery/openolat/jquery.statistics.chart.js index 751117d62117700f6dcff4f77cbecfb7ad11aba5..bf866d51bd0c63021713ff283ca8cfc3ae669764 100644 --- a/src/main/webapp/static/js/jquery/openolat/jquery.statistics.chart.js +++ b/src/main/webapp/static/js/jquery/openolat/jquery.statistics.chart.js @@ -605,9 +605,12 @@ height = placeholderheight - margin.top - margin.bottom; var cut = settings.cut; - + var maxScore = d3.max(values, function(d) { return d; }); + if(maxScore < 1.0) { + maxScore = 1.0; + } var x = d3.scale.linear() - .domain([0, 3.0]) + .domain([0, maxScore]) .range([0, width]); var data = d3.layout.histogram() diff --git a/src/main/webapp/static/js/jquery/openolat/jquery.statistics.chart.min.js b/src/main/webapp/static/js/jquery/openolat/jquery.statistics.chart.min.js index 759b11bffdd7822c8ccd887eaa37ec83dbf26f71..360f9148e459797ec0daa0ffe528f931af997385 100644 --- a/src/main/webapp/static/js/jquery/openolat/jquery.statistics.chart.min.js +++ b/src/main/webapp/static/js/jquery/openolat/jquery.statistics.chart.min.js @@ -1 +1 @@ -(function(a){a.fn.qtiStatistics=function(d,b){var c=a.extend({values:[],colors:[],cut:null,participants:-1,barHeight:40,xTopLegend:"x Top",xBottomLegend:"x Bottom",yLeftLegend:"y Left",yRightLegend:"y Right"},b);try{if(d=="histogramScore"){histogramScore(this,c)}else{if(d=="histogramDuration"){histogramDuration(this,c)}else{if(d=="horizontalBarSingleChoice"){horizontalBarSingleChoice(this,c)}else{if(d=="rightAnswerPerItem"){rightAnswerPerItem(this,c)}else{if(d=="averageScorePerItem"){averageScorePerItem(this,c)}else{if(d=="horizontalBarMultipleChoice"){horizontalBarMultipleChoice(this,c)}else{if(d=="horizontalBarMultipleChoiceSurvey"){horizontalBarMultipleChoiceSurvey(this,c)}}}}}}}}catch(f){if(console){console.log(f)}}return this};averageScorePerItem=function(b,f){var j=b.width();var h=f.values.reverse();var m=b.height();var g={top:10,right:60,bottom:40,left:60},d=j-g.left-g.right;var n=h.length*f.barHeight;b.height(n+g.top+g.bottom+"px");var l=d3.scale.linear().domain([0,d3.max(h,function(p){return p[1]})]).range([0,d]);var e=d3.svg.axis().scale(l).orient("bottom").ticks(10);var k=d3.scale.ordinal().domain(h.map(function(p){return p[0]})).rangeRoundBands([n,0]);var c=d3.svg.axis().scale(k).orient("left");var i=d3.select("#"+b.attr("id")).append("svg").attr("width",d+g.left+g.right).attr("height",n+g.top+g.bottom).append("g").attr("transform","translate("+g.left+","+g.top+")");i.append("g").attr("class","x axis").attr("transform","translate(0,"+n+")").call(e).append("text").attr("y",(g.bottom/1.7)).attr("x",(d/2)).attr("dy","1em").style("text-anchor","middle").text(f.xBottomLegend);i.selectAll(".bar0").data(h).enter().append("rect").attr("class","bar bar_default").attr("fill","bar_default").attr("x",0).attr("y",function(p){return k(p[0])+2}).attr("width",function(p){return l(p[1])}).attr("height",k.rangeBand()-4);var o=((k.rangeBand()/2)+3)+"px";i.selectAll(".bar0").data(h).enter().append("text").attr("x",function(p){return l(p[1])}).attr("y",function(p){return k(p[0])+2}).attr("dx",-3).attr("dy",o).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(p){return(p[1]<=0)?"":d3.round(p[1],2)});i.append("g").attr("class","y axis").call(c).append("text").attr("transform","rotate(-90)").attr("y",0-(g.right/1.7)).attr("x",0-(n/2)).attr("dy","1em").style("text-anchor","middle").text(f.yLeftLegend)};rightAnswerPerItem=function(c,g){var o=c.height();var k=c.width();var i=g.values.reverse();var h={top:15,right:60,bottom:40,left:60},f=k-h.left-h.right;var p=i.length*g.barHeight;c.height(p+h.top+h.bottom+"px");var l=g.participants;var n=d3.scale.linear().domain([0,l]).range([0,f]);var e=d3.scale.linear().domain([0,1]).range([0,f]);var b=d3.svg.axis().scale(e).orient("bottom").ticks(10,"%");var m=d3.scale.ordinal().domain(i.map(function(r){return r[0]})).rangeRoundBands([p,0]);var d=d3.svg.axis().scale(m).orient("left");var j=d3.select("#"+c.attr("id")).append("svg").attr("width",f+h.left+h.right).attr("height",p+h.top+h.bottom).append("g").attr("transform","translate("+h.left+","+h.top+")");j.append("g").attr("class","x axis").attr("transform","translate(0,"+p+")").call(b).append("text").attr("y",(h.bottom/1.7)).attr("x",(f/2)).attr("dy","1em").style("text-anchor","middle").text(g.xTopLegend);j.selectAll(".bar0").data(i).enter().append("rect").attr("class","bar bar_green").attr("fill","bar_green").attr("x",0).attr("y",function(r){return m(r[0])+2}).attr("width",function(r){return n(r[1])}).attr("height",m.rangeBand()-4);var q=((m.rangeBand()/2)+3)+"px";j.selectAll(".bar0").data(i).enter().append("text").attr("x",function(r){return n(r[1])}).attr("y",function(r){return m(r[0])+2}).attr("dx",-3).attr("dy",q).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(r){return(r[1]<=0)?"":r[1]});j.append("g").attr("class","y axis").call(d).append("text").attr("transform","rotate(-90)").attr("y",0-(h.right/1.7)).attr("x",0-(p/2)).attr("dy","1em").style("text-anchor","middle").text(g.yLeftLegend)};horizontalBarMultipleChoiceSurvey=function(c,g){var k=c.width();var i=g.values.reverse();var h={top:40,right:15,bottom:40,left:40};var p=i.length*g.barHeight;c.height(p+h.top+h.bottom+"px");var f=k-h.left-h.right;var l=g.participants;var n=l;console.log(g.colors);var o=d3.scale.linear().domain([0,n]).range([0,f]);var e=d3.scale.linear().domain([0,1]).range([0,f]);var b=d3.svg.axis().scale(e).orient("bottom").ticks(10,"%");var m=d3.scale.ordinal().domain(i.map(function(r){return r[0]})).rangeRoundBands([p,0]);var d=d3.svg.axis().scale(m).orient("left");var j=d3.select("#"+c.attr("id")).append("svg").attr("width",f+h.left+h.right).attr("height",p+h.top+h.bottom).append("g").attr("transform","translate("+h.left+","+h.top+")");j.append("g").attr("class","x axis").attr("transform","translate(0,"+p+")").call(b).append("text").attr("y",(h.bottom/1.7)).attr("x",(f/2)).attr("dy","1em").style("text-anchor","middle").text(g.xBottomLegend);j.append("g").attr("class","y axis").call(d).append("text").attr("transform","rotate(-90)").attr("y",0-h.left).attr("x",0-(p/2)).attr("dy","1em").style("text-anchor","middle").text(g.yLeftLegend);j.selectAll(".bar0").data(i).enter().append("rect").attr("class","bar bar_default").attr("fill","bar_default").attr("x",0).attr("y",function(r){return m(r[0])+2}).attr("width",function(r){return o(r[1])}).attr("height",m.rangeBand()-4);var q=((m.rangeBand()/2)+3)+"px";j.selectAll(".bar0").data(i).enter().append("text").attr("x",function(r){return o(r[1])}).attr("y",function(r){return m(r[0])+2}).attr("dx",-3).attr("dy",q).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(r){return(r[1]<=0)?"":r[1]})};horizontalBarMultipleChoice=function(c,g){var k=c.width();var i=g.values.reverse();var h={top:40,right:15,bottom:40,left:40};var p=i.length*g.barHeight;c.height(p+h.top+h.bottom+"px");var f=k-h.left-h.right;var l=g.participants;var n=l;var o=d3.scale.linear().domain([0,n]).range([0,f]);var e=d3.scale.linear().domain([0,1]).range([0,f]);var b=d3.svg.axis().scale(e).orient("bottom").ticks(10,"%");var m=d3.scale.ordinal().domain(i.map(function(r){return r[0]})).rangeRoundBands([p,0]);var d=d3.svg.axis().scale(m).orient("left");var j=d3.select("#"+c.attr("id")).append("svg").attr("width",f+h.left+h.right).attr("height",p+h.top+h.bottom).append("g").attr("transform","translate("+h.left+","+h.top+")");j.append("g").attr("class","x axis").attr("transform","translate(0,"+p+")").call(b).append("text").attr("y",(h.bottom/1.7)).attr("x",(f/2)).attr("dy","1em").style("text-anchor","middle").text(g.xBottomlegend);j.append("g").attr("class","y axis").call(d).append("text").attr("transform","rotate(-90)").attr("y",0-h.left).attr("x",0-(p/2)).attr("dy","1em").style("text-anchor","middle").text(g.yLeftLegend);j.selectAll(".bar0").data(i).enter().append("rect").attr("class","bar bar_green").attr("fill","bar_green").attr("x",0).attr("y",function(r){return m(r[0])+2}).attr("width",function(r){return o(r[1])}).attr("height",m.rangeBand()-4);var q=((m.rangeBand()/2)+3)+"px";j.selectAll(".bar0").data(i).enter().append("text").attr("x",function(r){return o(r[1])}).attr("y",function(r){return m(r[0])+2}).attr("dx",-3).attr("dy",q).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(r){return(r[1]<=0)?"":r[1]});j.selectAll(".bar1").data(i).enter().append("rect").attr("class","bar bar_red").attr("fill","bar_red").attr("x",function(r){return o(r[1])}).attr("y",function(r){return m(r[0])+2}).attr("width",function(r){return o(r[2])}).attr("height",m.rangeBand()-4);j.selectAll(".bar1").data(i).enter().append("text").attr("x",function(r){return o(r[1]+r[2])}).attr("y",function(r){return m(r[0])+2}).attr("dx",-3).attr("dy",q).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(r){return(r[2]<=0)?"":r[2]});j.selectAll(".bar2").data(i).enter().append("rect").attr("class","bar bar_grey").attr("fill","bar_grey").attr("x",function(r){return o(r[1]+r[2])}).attr("y",function(r){return m(r[0])+2}).attr("width",function(r){return o(r[3])}).attr("height",m.rangeBand()-4);j.selectAll(".bar2").data(i).enter().append("text").attr("x",function(r){return o(r[1]+r[2]+r[3])}).attr("y",function(r){return m(r[0])+2}).attr("dx",-3).attr("dy",q).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(r){return(r[3]<=0)?"":r[3]})};horizontalBarSingleChoice=function(c,h){var l=c.width();var j=h.values.reverse();var d=h.colors.reverse();var i={top:15,right:15,bottom:40,left:40};var q=j.length*h.barHeight;c.height(q+i.top+i.bottom+"px");var g=l-i.left-i.right;var m=h.participants;var o=m;var p=d3.scale.linear().domain([0,o]).range([0,g]);var f=d3.scale.linear().domain([0,1]).range([0,g]);var b=d3.svg.axis().scale(f).orient("bottom").ticks(10,"%");var n=d3.scale.ordinal().domain(j.map(function(s){return s[0]})).rangeRoundBands([q,0]);var e=d3.svg.axis().scale(n).orient("left");var k=d3.select("#"+c.attr("id")).append("svg").attr("width",g+i.left+i.right).attr("height",q+i.top+i.bottom).append("g").attr("transform","translate("+i.left+","+i.top+")");k.append("g").attr("class","x axis").attr("transform","translate(0,"+q+")").call(b).append("text").attr("y",(i.bottom/1.7)).attr("x",(g/2)).attr("dy","1em").style("text-anchor","middle").text(h.xBottomLegend);k.selectAll(".bar0").data(j).enter().append("rect").attr("class",function(t,s){if(d==null){return"bar bar0 bar_default"}else{if(d.length>s){return d[s]}else{return"bar bar0 bar_default"}}}).attr("fill","bar_green").attr("x",0).attr("y",function(s){return n(s[0])+2}).attr("width",function(s){return p(s[1])}).attr("height",n.rangeBand()-4);var r=((n.rangeBand()/2)+3)+"px";k.selectAll(".bar0").data(j).enter().append("text").attr("x",function(s){return p(s[1])}).attr("y",function(s){return n(s[0])+2}).attr("dx",-3).attr("dy",r).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(s){return(s[1]<=0)?"":s[1]});k.append("g").attr("class","y axis").call(e).append("text").attr("transform","rotate(-90)").attr("y",0-i.left).attr("x",0-(q/2)).attr("dy","1em").style("text-anchor","middle").text(h.yLeftLegend)};histogramDuration=function(v,u){var c=v.height();var q=v.width();var f=u.values;var s=d3.min(f,function(x){return x});var z=d3.max(f,function(x){return x});var d="%M:%S";if(z<10){d+=":%L"}var i=new Date(2012,0,1,0,0),w=d3.format(",.f"),A=d3.time.format(d),l=function(x){return A(new Date(i.getTime()+(x*1000)))};var n={top:10,right:60,bottom:40,left:60},r=q-n.left-n.right,p=c-n.top-n.bottom;var m=d3.scale.linear().domain([0,z]).range([0,r]);var B=d3.layout.histogram().bins(m.ticks(20))(f);var h=d3.sum(B,function(x){return x.y});var k=d3.scale.linear().domain([0,d3.max(B,function(x){return x.y})]).range([p,0]);var g=d3.scale.linear().domain([0,d3.max(B,function(x){return x.y/h})]).range([p,0]);var j=d3.svg.axis().scale(m).orient("bottom").tickFormat(l);var b=d3.svg.axis().scale(k).orient("right").ticks(k.domain()[1]).tickSubdivide(0);var e=d3.svg.axis().scale(g).orient("left").ticks(10,"%");var o=d3.select("#"+v.attr("id")).append("svg").attr("width",r+n.left+n.right).attr("height",p+n.top+n.bottom).append("g").attr("transform","translate("+n.left+","+n.top+")");var t=o.selectAll(".bar").data(B).enter().append("g").attr("class","bar bar_default").attr("transform",function(x){return"translate("+m(x.x)+","+k(x.y)+")"}).append("rect").attr("x",2).attr("width",m(B[0].dx)-4).attr("height",function(x){return p-k(x.y)});o.append("g").attr("class","y axis").call(e).append("text").attr("transform","rotate(-90)").attr("y",0-n.left).attr("x",0-(p/2)).attr("dy","1em").style("text-anchor","middle").text(u.yLeftLegend);o.append("g").attr("class","x axis").attr("transform","translate(0,"+p+")").call(j).append("text").attr("y",(n.bottom/1.1)).attr("x",(r/2)).attr("dx","1em").style("text-anchor","middle").text(u.xBottomLegend);o.append("g").attr("class","y axis").attr("transform","translate("+r+",0)").call(b).append("text").attr("transform","rotate(90)").attr("y",0-(n.right)).attr("x",(p/2)).attr("dy","1em").style("text-anchor","middle").text(u.yRightLegend)};histogramScore=function(s,r){var c=s.height();var o=s.width();var d=r.values;var l={top:10,right:60,bottom:40,left:60},p=o-l.left-l.right,n=c-l.top-l.bottom;var f=r.cut;var k=d3.scale.linear().domain([0,3]).range([0,p]);var t=d3.layout.histogram().bins(k.ticks(20))(d);var h=d3.sum(t,function(u){return u.y});var j=d3.scale.linear().domain([0,d3.max(t,function(u){return u.y})]).range([n,0]);var g=d3.scale.linear().domain([0,d3.max(t,function(u){return u.y/h})]).range([n,0]);var i=d3.svg.axis().scale(k).orient("bottom").tickFormat(d3.format(".01f"));var b=d3.svg.axis().scale(j).orient("right").ticks(j.domain()[1]).tickSubdivide(0);var e=d3.svg.axis().scale(g).orient("left").ticks(10,"%");var m=d3.select("#"+s.attr("id")).append("svg").attr("width",p+l.left+l.right).attr("height",n+l.top+l.bottom).append("g").attr("transform","translate("+l.left+","+l.top+")");var q=m.selectAll(".bar").data(t).enter().append("g").attr("class",function(v,u){if(f==null){return"bar bar_default"}else{if(t[u].x<f){return"bar bar_red"}else{return"bar bar_green"}}}).attr("transform",function(u){return"translate("+k(u.x)+","+j(u.y)+")"}).append("rect").attr("x",2).attr("width",k(t[0].dx)-4).attr("height",function(u){return n-j(u.y)});m.append("g").attr("class","y axis").call(e).append("text").attr("transform","rotate(-90)").attr("y",0-l.left).attr("x",0-(n/2)).attr("dy","1em").style("text-anchor","middle").text(r.yLeftLegend);m.append("g").attr("class","x axis").attr("transform","translate(0,"+n+")").call(i).append("text").attr("y",(l.bottom/1.1)).attr("x",(p/2)).attr("dx","1em").style("text-anchor","middle").text(r.xBottomLegend);m.append("g").attr("class","y axis").attr("transform","translate("+p+",0)").call(b).append("text").attr("transform","rotate(90)").attr("y",0-(l.right)).attr("x",(n/2)).attr("dy","1em").style("text-anchor","middle").text(r.yRightLegend)}}(jQuery)); \ No newline at end of file +(function(a){a.fn.qtiStatistics=function(d,b){var c=a.extend({values:[],colors:[],cut:null,participants:-1,barHeight:40,xTopLegend:"x Top",xBottomLegend:"x Bottom",yLeftLegend:"y Left",yRightLegend:"y Right"},b);try{if(d=="histogramScore"){histogramScore(this,c)}else{if(d=="histogramDuration"){histogramDuration(this,c)}else{if(d=="horizontalBarSingleChoice"){horizontalBarSingleChoice(this,c)}else{if(d=="rightAnswerPerItem"){rightAnswerPerItem(this,c)}else{if(d=="averageScorePerItem"){averageScorePerItem(this,c)}else{if(d=="horizontalBarMultipleChoice"){horizontalBarMultipleChoice(this,c)}else{if(d=="horizontalBarMultipleChoiceSurvey"){horizontalBarMultipleChoiceSurvey(this,c)}}}}}}}}catch(f){if(console){console.log(f)}}return this};averageScorePerItem=function(b,f){var j=b.width();var h=f.values.reverse();var m=b.height();var g={top:10,right:60,bottom:40,left:60},d=j-g.left-g.right;var n=h.length*f.barHeight;b.height(n+g.top+g.bottom+"px");var l=d3.scale.linear().domain([0,d3.max(h,function(p){return p[1]})]).range([0,d]);var e=d3.svg.axis().scale(l).orient("bottom").ticks(10);var k=d3.scale.ordinal().domain(h.map(function(p){return p[0]})).rangeRoundBands([n,0]);var c=d3.svg.axis().scale(k).orient("left");var i=d3.select("#"+b.attr("id")).append("svg").attr("width",d+g.left+g.right).attr("height",n+g.top+g.bottom).append("g").attr("transform","translate("+g.left+","+g.top+")");i.append("g").attr("class","x axis").attr("transform","translate(0,"+n+")").call(e).append("text").attr("y",(g.bottom/1.7)).attr("x",(d/2)).attr("dy","1em").style("text-anchor","middle").text(f.xBottomLegend);i.selectAll(".bar0").data(h).enter().append("rect").attr("class","bar bar_default").attr("fill","bar_default").attr("x",0).attr("y",function(p){return k(p[0])+2}).attr("width",function(p){return l(p[1])}).attr("height",k.rangeBand()-4);var o=((k.rangeBand()/2)+3)+"px";i.selectAll(".bar0").data(h).enter().append("text").attr("x",function(p){return l(p[1])}).attr("y",function(p){return k(p[0])+2}).attr("dx",-3).attr("dy",o).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(p){return(p[1]<=0)?"":d3.round(p[1],2)});i.append("g").attr("class","y axis").call(c).append("text").attr("transform","rotate(-90)").attr("y",0-(g.right/1.7)).attr("x",0-(n/2)).attr("dy","1em").style("text-anchor","middle").text(f.yLeftLegend)};rightAnswerPerItem=function(c,g){var o=c.height();var k=c.width();var i=g.values.reverse();var h={top:15,right:60,bottom:40,left:60},f=k-h.left-h.right;var p=i.length*g.barHeight;c.height(p+h.top+h.bottom+"px");var l=g.participants;var n=d3.scale.linear().domain([0,l]).range([0,f]);var e=d3.scale.linear().domain([0,1]).range([0,f]);var b=d3.svg.axis().scale(e).orient("bottom").ticks(10,"%");var m=d3.scale.ordinal().domain(i.map(function(r){return r[0]})).rangeRoundBands([p,0]);var d=d3.svg.axis().scale(m).orient("left");var j=d3.select("#"+c.attr("id")).append("svg").attr("width",f+h.left+h.right).attr("height",p+h.top+h.bottom).append("g").attr("transform","translate("+h.left+","+h.top+")");j.append("g").attr("class","x axis").attr("transform","translate(0,"+p+")").call(b).append("text").attr("y",(h.bottom/1.7)).attr("x",(f/2)).attr("dy","1em").style("text-anchor","middle").text(g.xTopLegend);j.selectAll(".bar0").data(i).enter().append("rect").attr("class","bar bar_green").attr("fill","bar_green").attr("x",0).attr("y",function(r){return m(r[0])+2}).attr("width",function(r){return n(r[1])}).attr("height",m.rangeBand()-4);var q=((m.rangeBand()/2)+3)+"px";j.selectAll(".bar0").data(i).enter().append("text").attr("x",function(r){return n(r[1])}).attr("y",function(r){return m(r[0])+2}).attr("dx",-3).attr("dy",q).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(r){return(r[1]<=0)?"":r[1]});j.append("g").attr("class","y axis").call(d).append("text").attr("transform","rotate(-90)").attr("y",0-(h.right/1.7)).attr("x",0-(p/2)).attr("dy","1em").style("text-anchor","middle").text(g.yLeftLegend)};horizontalBarMultipleChoiceSurvey=function(c,g){var k=c.width();var i=g.values.reverse();var h={top:40,right:15,bottom:40,left:40};var p=i.length*g.barHeight;c.height(p+h.top+h.bottom+"px");var f=k-h.left-h.right;var l=g.participants;var n=l;console.log(g.colors);var o=d3.scale.linear().domain([0,n]).range([0,f]);var e=d3.scale.linear().domain([0,1]).range([0,f]);var b=d3.svg.axis().scale(e).orient("bottom").ticks(10,"%");var m=d3.scale.ordinal().domain(i.map(function(r){return r[0]})).rangeRoundBands([p,0]);var d=d3.svg.axis().scale(m).orient("left");var j=d3.select("#"+c.attr("id")).append("svg").attr("width",f+h.left+h.right).attr("height",p+h.top+h.bottom).append("g").attr("transform","translate("+h.left+","+h.top+")");j.append("g").attr("class","x axis").attr("transform","translate(0,"+p+")").call(b).append("text").attr("y",(h.bottom/1.7)).attr("x",(f/2)).attr("dy","1em").style("text-anchor","middle").text(g.xBottomLegend);j.append("g").attr("class","y axis").call(d).append("text").attr("transform","rotate(-90)").attr("y",0-h.left).attr("x",0-(p/2)).attr("dy","1em").style("text-anchor","middle").text(g.yLeftLegend);j.selectAll(".bar0").data(i).enter().append("rect").attr("class","bar bar_default").attr("fill","bar_default").attr("x",0).attr("y",function(r){return m(r[0])+2}).attr("width",function(r){return o(r[1])}).attr("height",m.rangeBand()-4);var q=((m.rangeBand()/2)+3)+"px";j.selectAll(".bar0").data(i).enter().append("text").attr("x",function(r){return o(r[1])}).attr("y",function(r){return m(r[0])+2}).attr("dx",-3).attr("dy",q).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(r){return(r[1]<=0)?"":r[1]})};horizontalBarMultipleChoice=function(c,g){var k=c.width();var i=g.values.reverse();var h={top:40,right:15,bottom:40,left:40};var p=i.length*g.barHeight;c.height(p+h.top+h.bottom+"px");var f=k-h.left-h.right;var l=g.participants;var n=l;var o=d3.scale.linear().domain([0,n]).range([0,f]);var e=d3.scale.linear().domain([0,1]).range([0,f]);var b=d3.svg.axis().scale(e).orient("bottom").ticks(10,"%");var m=d3.scale.ordinal().domain(i.map(function(r){return r[0]})).rangeRoundBands([p,0]);var d=d3.svg.axis().scale(m).orient("left");var j=d3.select("#"+c.attr("id")).append("svg").attr("width",f+h.left+h.right).attr("height",p+h.top+h.bottom).append("g").attr("transform","translate("+h.left+","+h.top+")");j.append("g").attr("class","x axis").attr("transform","translate(0,"+p+")").call(b).append("text").attr("y",(h.bottom/1.7)).attr("x",(f/2)).attr("dy","1em").style("text-anchor","middle").text(g.xBottomlegend);j.append("g").attr("class","y axis").call(d).append("text").attr("transform","rotate(-90)").attr("y",0-h.left).attr("x",0-(p/2)).attr("dy","1em").style("text-anchor","middle").text(g.yLeftLegend);j.selectAll(".bar0").data(i).enter().append("rect").attr("class","bar bar_green").attr("fill","bar_green").attr("x",0).attr("y",function(r){return m(r[0])+2}).attr("width",function(r){return o(r[1])}).attr("height",m.rangeBand()-4);var q=((m.rangeBand()/2)+3)+"px";j.selectAll(".bar0").data(i).enter().append("text").attr("x",function(r){return o(r[1])}).attr("y",function(r){return m(r[0])+2}).attr("dx",-3).attr("dy",q).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(r){return(r[1]<=0)?"":r[1]});j.selectAll(".bar1").data(i).enter().append("rect").attr("class","bar bar_red").attr("fill","bar_red").attr("x",function(r){return o(r[1])}).attr("y",function(r){return m(r[0])+2}).attr("width",function(r){return o(r[2])}).attr("height",m.rangeBand()-4);j.selectAll(".bar1").data(i).enter().append("text").attr("x",function(r){return o(r[1]+r[2])}).attr("y",function(r){return m(r[0])+2}).attr("dx",-3).attr("dy",q).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(r){return(r[2]<=0)?"":r[2]});j.selectAll(".bar2").data(i).enter().append("rect").attr("class","bar bar_grey").attr("fill","bar_grey").attr("x",function(r){return o(r[1]+r[2])}).attr("y",function(r){return m(r[0])+2}).attr("width",function(r){return o(r[3])}).attr("height",m.rangeBand()-4);j.selectAll(".bar2").data(i).enter().append("text").attr("x",function(r){return o(r[1]+r[2]+r[3])}).attr("y",function(r){return m(r[0])+2}).attr("dx",-3).attr("dy",q).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(r){return(r[3]<=0)?"":r[3]})};horizontalBarSingleChoice=function(c,h){var l=c.width();var j=h.values.reverse();var d=h.colors.reverse();var i={top:15,right:15,bottom:40,left:40};var q=j.length*h.barHeight;c.height(q+i.top+i.bottom+"px");var g=l-i.left-i.right;var m=h.participants;var o=m;var p=d3.scale.linear().domain([0,o]).range([0,g]);var f=d3.scale.linear().domain([0,1]).range([0,g]);var b=d3.svg.axis().scale(f).orient("bottom").ticks(10,"%");var n=d3.scale.ordinal().domain(j.map(function(s){return s[0]})).rangeRoundBands([q,0]);var e=d3.svg.axis().scale(n).orient("left");var k=d3.select("#"+c.attr("id")).append("svg").attr("width",g+i.left+i.right).attr("height",q+i.top+i.bottom).append("g").attr("transform","translate("+i.left+","+i.top+")");k.append("g").attr("class","x axis").attr("transform","translate(0,"+q+")").call(b).append("text").attr("y",(i.bottom/1.7)).attr("x",(g/2)).attr("dy","1em").style("text-anchor","middle").text(h.xBottomLegend);k.selectAll(".bar0").data(j).enter().append("rect").attr("class",function(t,s){if(d==null){return"bar bar0 bar_default"}else{if(d.length>s){return d[s]}else{return"bar bar0 bar_default"}}}).attr("fill","bar_green").attr("x",0).attr("y",function(s){return n(s[0])+2}).attr("width",function(s){return p(s[1])}).attr("height",n.rangeBand()-4);var r=((n.rangeBand()/2)+3)+"px";k.selectAll(".bar0").data(j).enter().append("text").attr("x",function(s){return p(s[1])}).attr("y",function(s){return n(s[0])+2}).attr("dx",-3).attr("dy",r).attr("text-anchor","end").attr("fill","rgb(48,48,48)").attr("stroke","none").text(function(s){return(s[1]<=0)?"":s[1]});k.append("g").attr("class","y axis").call(e).append("text").attr("transform","rotate(-90)").attr("y",0-i.left).attr("x",0-(q/2)).attr("dy","1em").style("text-anchor","middle").text(h.yLeftLegend)};histogramDuration=function(v,u){var c=v.height();var q=v.width();var f=u.values;var s=d3.min(f,function(x){return x});var z=d3.max(f,function(x){return x});var d="%M:%S";if(z<10){d+=":%L"}var i=new Date(2012,0,1,0,0),w=d3.format(",.f"),A=d3.time.format(d),l=function(x){return A(new Date(i.getTime()+(x*1000)))};var n={top:10,right:60,bottom:40,left:60},r=q-n.left-n.right,p=c-n.top-n.bottom;var m=d3.scale.linear().domain([0,z]).range([0,r]);var B=d3.layout.histogram().bins(m.ticks(20))(f);var h=d3.sum(B,function(x){return x.y});var k=d3.scale.linear().domain([0,d3.max(B,function(x){return x.y})]).range([p,0]);var g=d3.scale.linear().domain([0,d3.max(B,function(x){return x.y/h})]).range([p,0]);var j=d3.svg.axis().scale(m).orient("bottom").tickFormat(l);var b=d3.svg.axis().scale(k).orient("right").ticks(k.domain()[1]).tickSubdivide(0);var e=d3.svg.axis().scale(g).orient("left").ticks(10,"%");var o=d3.select("#"+v.attr("id")).append("svg").attr("width",r+n.left+n.right).attr("height",p+n.top+n.bottom).append("g").attr("transform","translate("+n.left+","+n.top+")");var t=o.selectAll(".bar").data(B).enter().append("g").attr("class","bar bar_default").attr("transform",function(x){return"translate("+m(x.x)+","+k(x.y)+")"}).append("rect").attr("x",2).attr("width",m(B[0].dx)-4).attr("height",function(x){return p-k(x.y)});o.append("g").attr("class","y axis").call(e).append("text").attr("transform","rotate(-90)").attr("y",0-n.left).attr("x",0-(p/2)).attr("dy","1em").style("text-anchor","middle").text(u.yLeftLegend);o.append("g").attr("class","x axis").attr("transform","translate(0,"+p+")").call(j).append("text").attr("y",(n.bottom/1.1)).attr("x",(r/2)).attr("dx","1em").style("text-anchor","middle").text(u.xBottomLegend);o.append("g").attr("class","y axis").attr("transform","translate("+r+",0)").call(b).append("text").attr("transform","rotate(90)").attr("y",0-(n.right)).attr("x",(p/2)).attr("dy","1em").style("text-anchor","middle").text(u.yRightLegend)};histogramScore=function(s,r){var c=s.height();var o=s.width();var e=r.values;var l={top:10,right:60,bottom:40,left:60},p=o-l.left-l.right,n=c-l.top-l.bottom;var f=r.cut;var t=d3.max(e,function(v){return v});if(t<1){t=1}var k=d3.scale.linear().domain([0,t]).range([0,p]);var u=d3.layout.histogram().bins(k.ticks(20))(e);var h=d3.sum(u,function(v){return v.y});var j=d3.scale.linear().domain([0,d3.max(u,function(v){return v.y})]).range([n,0]);var g=d3.scale.linear().domain([0,d3.max(u,function(v){return v.y/h})]).range([n,0]);var i=d3.svg.axis().scale(k).orient("bottom").tickFormat(d3.format(".01f"));var b=d3.svg.axis().scale(j).orient("right").ticks(j.domain()[1]).tickSubdivide(0);var d=d3.svg.axis().scale(g).orient("left").ticks(10,"%");var m=d3.select("#"+s.attr("id")).append("svg").attr("width",p+l.left+l.right).attr("height",n+l.top+l.bottom).append("g").attr("transform","translate("+l.left+","+l.top+")");var q=m.selectAll(".bar").data(u).enter().append("g").attr("class",function(w,v){if(f==null){return"bar bar_default"}else{if(u[v].x<f){return"bar bar_red"}else{return"bar bar_green"}}}).attr("transform",function(v){return"translate("+k(v.x)+","+j(v.y)+")"}).append("rect").attr("x",2).attr("width",k(u[0].dx)-4).attr("height",function(v){return n-j(v.y)});m.append("g").attr("class","y axis").call(d).append("text").attr("transform","rotate(-90)").attr("y",0-l.left).attr("x",0-(n/2)).attr("dy","1em").style("text-anchor","middle").text(r.yLeftLegend);m.append("g").attr("class","x axis").attr("transform","translate(0,"+n+")").call(i).append("text").attr("y",(l.bottom/1.1)).attr("x",(p/2)).attr("dx","1em").style("text-anchor","middle").text(r.xBottomLegend);m.append("g").attr("class","y axis").attr("transform","translate("+p+",0)").call(b).append("text").attr("transform","rotate(90)").attr("y",0-(l.right)).attr("x",(n/2)).attr("dy","1em").style("text-anchor","middle").text(r.yRightLegend)}}(jQuery)); \ No newline at end of file diff --git a/src/main/webapp/static/themes/openolat/all/modules/_portlets_boxes.scss b/src/main/webapp/static/themes/openolat/all/modules/_portlets_boxes.scss index 8e77bbfa7fd6c3b89f89d64ed878c635270c3b05..89579742b6e3505b1c16e4f80824c5e12594a5f5 100644 --- a/src/main/webapp/static/themes/openolat/all/modules/_portlets_boxes.scss +++ b/src/main/webapp/static/themes/openolat/all/modules/_portlets_boxes.scss @@ -102,6 +102,8 @@ div.o_home_rsslink { div.o_portlet_repository_student td.b_first_child { width: 24px;} div.o_portlet_repository_teacher td.b_first_child { width: 24px;} + +.o_links_portlet p { margin:0; } /* small portlet icons */ .b_portlet .b_portlet_header { background-repeat:no-repeat; background-position: 0% 50%; padding-left:27px; padding-top:5px; padding-bottom:5px;} diff --git a/src/test/java/org/olat/ims/qti/statistics/manager/QTIStatisticsManagerLargeTest.java b/src/test/java/org/olat/ims/qti/statistics/manager/QTIStatisticsManagerLargeTest.java index f2aafcaefb9a67c334fc9d5f56d1f3f71451168c..4f8e542c9f15dacf284c2ee61095cbf42b36572b 100644 --- a/src/test/java/org/olat/ims/qti/statistics/manager/QTIStatisticsManagerLargeTest.java +++ b/src/test/java/org/olat/ims/qti/statistics/manager/QTIStatisticsManagerLargeTest.java @@ -297,7 +297,7 @@ public class QTIStatisticsManagerLargeTest extends OlatTestCase { QTIStatisticSearchParams searchParams = new QTIStatisticSearchParams(olatResource, olatResourceDetail); StatisticsItem stats = qtim.getItemStatistics(itemObject.getItemIdent(), maxValue, searchParams); - double difficulty = rightAnswersQ2 / numberOfParticipants; + double difficulty = rightAnswersQ2 / (double)numberOfParticipants; Assert.assertEquals(difficulty, stats.getDifficulty(), 0.1); Assert.assertEquals(scoreQ2, stats.getAverageScore(), 0.1); Assert.assertEquals(wrongAnswersQ2, stats.getNumOfIncorrectAnswers());