use of org.olat.modules.qpool.model.QuestionItemImpl in project openolat by klemens.
the class QItemQueriesDAO method getItemsOfPool.
public List<QuestionItemView> getItemsOfPool(SearchQuestionItemParams params, Collection<Long> inKeys, int firstResult, int maxResults, SortKey... orderBy) {
StringBuilder sb = new StringBuilder();
sb.append("select item,").append(" (select count(sgmi.key) from ").append(SecurityGroupMembershipImpl.class.getName()).append(" as sgmi").append(" where sgmi.identity.key=:identityKey and sgmi.securityGroup=ownerGroup").append(" ) as owners,").append(" (select count(competence.key) from ctaxonomycompetence competence").append(" where taxonomyLevel.materializedPathKeys like concat(competence.taxonomyLevel.materializedPathKeys, '%')").append(" and competence.identity.key=:identityKey").append(" and competence.type='").append(TaxonomyCompetenceTypes.teach).append("'").append(" ) as teacher,").append(" (select count(competence.key) from ctaxonomycompetence competence").append(" where taxonomyLevel.materializedPathKeys like concat(competence.taxonomyLevel.materializedPathKeys, '%')").append(" and competence.identity.key=:identityKey").append(" and competence.type='").append(TaxonomyCompetenceTypes.manage).append("'").append(" ) as manager,").append("pool2item.editable,").append(" (select count(mark.key) from ").append(MarkImpl.class.getName()).append(" as mark ").append(" where mark.creator.key=:identityKey and mark.resId=item.key and mark.resName='QuestionItem'").append(" ) as marks,").append(" (select count(rating.key) from userrating as rating").append(" where rating.resId=item.key and rating.resName='QuestionItem'").append(" and rating.creator.key=:identityKey").append(" ) as numberOfRatingsIdentity,").append(" (select avg(rating.rating) from userrating as rating").append(" where rating.resId=item.key and rating.resName='QuestionItem'").append(" ) as rating,").append(" (select count(rating.key) from userrating as rating").append(" where rating.resId=item.key and rating.resName='QuestionItem'").append(" ) as numberOfRatingsTotal").append(" from qpool2item pool2item").append(" inner join pool2item.item item").append(" inner join fetch item.ownerGroup ownerGroup").append(" left join fetch item.type itemType").append(" left join fetch item.taxonomyLevel taxonomyLevel").append(" left join fetch item.educationalContext educationalContext").append(" where pool2item.pool.key=:poolKey");
if (inKeys != null && inKeys.size() > 0) {
sb.append(" and item.key in (:inKeys)");
}
if (StringHelper.containsNonWhitespace(params.getFormat())) {
sb.append(" and item.format=:format");
}
appendOrderBy(sb, "item", "taxonomyLevel", orderBy);
TypedQuery<Object[]> query = dbInstance.getCurrentEntityManager().createQuery(sb.toString(), Object[].class).setParameter("poolKey", params.getPoolKey()).setParameter("identityKey", params.getIdentity().getKey());
if (inKeys != null && inKeys.size() > 0) {
query.setParameter("inKeys", inKeys);
}
appendParameters(params, query);
if (firstResult >= 0) {
query.setFirstResult(firstResult);
}
if (maxResults > 0) {
query.setMaxResults(maxResults);
}
List<Object[]> results = query.getResultList();
List<QuestionItemView> views = new ArrayList<>();
for (Object[] result : results) {
ItemWrapper itemWrapper = ItemWrapper.builder((QuestionItemImpl) result[0]).setAuthor((Number) result[1]).setTeacher((Number) result[2]).setManager((Number) result[3]).setEditableInPool((Boolean) result[4]).setMarked((Number) result[5]).setRater((Number) result[6]).setRating((Double) result[7]).setNumberOfRatings((Number) result[8]).create();
views.add(itemWrapper);
}
return views;
}
use of org.olat.modules.qpool.model.QuestionItemImpl in project openolat by klemens.
the class QuestionItemDAO method removeAuthors.
public void removeAuthors(List<Identity> authors, QuestionItemShort item) {
QuestionItemImpl lockedItem = loadForUpdate(item);
SecurityGroup secGroup = lockedItem.getOwnerGroup();
for (Identity author : authors) {
if (securityManager.isIdentityInSecurityGroup(author, secGroup)) {
securityManager.removeIdentityFromSecurityGroup(author, secGroup);
}
}
dbInstance.commit();
}
use of org.olat.modules.qpool.model.QuestionItemImpl in project openolat by klemens.
the class QuestionItemDAO method createAndPersist.
public QuestionItemImpl createAndPersist(Identity owner, String title, String format, String language, TaxonomyLevel taxonLevel, String dir, String rootFilename, QItemType type) {
QuestionItemImpl item = create(title, format, dir, rootFilename);
if (type != null) {
item.setType(type);
}
item.setLanguage(language);
item.setTaxonomyLevel(taxonLevel);
persist(owner, item);
return item;
}
use of org.olat.modules.qpool.model.QuestionItemImpl in project openolat by klemens.
the class CollectionDAO method addItemToCollection.
/**
* Add an item to a collection
* @param itemKey
* @param collection
* @return true if the item is in the collection after the call
*/
public boolean addItemToCollection(QuestionItemShort item, List<QuestionItemCollection> collections) {
QuestionItemImpl lockedItem = questionItemDao.loadForUpdate(item);
if (lockedItem == null) {
return false;
}
Set<QuestionItemCollection> uniqueCollections = new HashSet<>(collections);
for (QuestionItemCollection collection : uniqueCollections) {
if (!isInCollection(collection, lockedItem)) {
CollectionToItem coll2Item = new CollectionToItem();
coll2Item.setCreationDate(new Date());
coll2Item.setCollection(collection);
coll2Item.setItem(lockedItem);
dbInstance.getCurrentEntityManager().persist(coll2Item);
}
}
dbInstance.commit();
return true;
}
use of org.olat.modules.qpool.model.QuestionItemImpl in project OpenOLAT by OpenOLAT.
the class TechnicalMetadataEditController method formOK.
@Override
protected void formOK(UserRequest ureq) {
if (item instanceof QuestionItemImpl) {
QuestionItemImpl itemImpl = (QuestionItemImpl) item;
QuestionItemAuditLogBuilder builder = qpoolService.createAuditLogBuilder(getIdentity(), Action.UPDATE_QUESTION_ITEM_METADATA);
builder.withBefore(itemImpl);
itemImpl.setItemVersion(versionEl.getValue());
item = qpoolService.updateItem(item);
builder.withAfter(itemImpl);
qpoolService.persist(builder.create());
fireEvent(ureq, new QItemEdited(item));
}
}
Aggregations