Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions contentcuration/contentcuration/tests/viewsets/test_user.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,3 +91,27 @@ def test_no_delete_user(self):
reverse("user-detail", kwargs={"pk": self.user.id})
)
self.assertEqual(response.status_code, 405, response.content)


class ChannelUserCRUDTestCase(StudioAPITestCase):
def setUp(self):
super(ChannelUserCRUDTestCase, self).setUp()
self.channel = testdata.channel()
self.user = testdata.user()
self.channel.editors.add(self.user)

def test_fetch_users(self):
self.client.force_authenticate(user=self.user)
response = self.client.get(
reverse("user-list"), data={"channel": self.channel.id}, format="json",
)
self.assertEqual(response.status_code, 200, response.content)

def test_fetch_users_no_permissions(self):
new_channel = testdata.channel()
self.client.force_authenticate(user=self.user)
response = self.client.get(
reverse("user-list"), data={"channel": new_channel.id}, format="json",
)
self.assertEqual(response.status_code, 200, response.content)
self.assertEqual(response.json(), [])
3 changes: 2 additions & 1 deletion contentcuration/contentcuration/viewsets/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
from rest_framework.response import Response

from contentcuration.constants import feature_flags
from contentcuration.models import boolean_val
from contentcuration.models import Channel
from contentcuration.models import User
from contentcuration.utils.pagination import get_order_queryset
Expand Down Expand Up @@ -163,7 +164,7 @@ class ChannelUserFilter(RequiredFilterSet):
def filter_channel(self, queryset, name, value):
# Check permissions
if not self.request.user.can_edit(value):
return queryset.none()
return queryset.none().annotate(can_edit=boolean_val(False), can_view=boolean_val(False))
user_queryset = User.objects.filter(id=OuterRef("id"))
queryset = queryset.annotate(
can_edit=Exists(user_queryset.filter(editable_channels=value)),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,7 @@
"SavedSearchesModal.editAction": "تعديل",
"SavedSearchesModal.deleteAction": "حذف",
"SavedSearchesModal.closeAction": "إغلاق",
"SavedSearchesModal.closeButtonLabel": "إغلاق",
"SavedSearchesModal.savedSearchesTitle": "عمليات بحث محفوظة",
"SavedSearchesModal.noSavedSearches": "لا توجد لديك أية عمليات بحث محفوظة",
"SavedSearchesModal.searchDeletedSnackbar": "تم حذف سجلات البحث",
Expand Down Expand Up @@ -1212,4 +1213,4 @@
"AdministrationAppError.unauthorizedDetails": "يجب أن تكون مسؤولاً في الاستوديو لتتمكن من عرض هذه الصفحة",
"AdministrationIndex.channelsLabel": "القنوات",
"AdministrationIndex.usersLabel": "المستخدمون"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,7 @@
"SavedSearchesModal.editAction": "Editar",
"SavedSearchesModal.deleteAction": "Eliminar",
"SavedSearchesModal.closeAction": "Cerrar",
"SavedSearchesModal.closeButtonLabel": "Cerrar",
"SavedSearchesModal.savedSearchesTitle": "Búsquedas guardadas",
"SavedSearchesModal.noSavedSearches": "No tiene ninguna búsqueda guardada",
"SavedSearchesModal.searchDeletedSnackbar": "Búsqueda guardada eliminada",
Expand Down Expand Up @@ -673,7 +674,7 @@
"CatalogFAQ.newContentQuestion": "¿Es Learning Equality quien añade nuevos recursos a los canales?",
"CatalogFAQ.newContentAnswer": "Nuestro equipo de contenidos añade nuevas fuentes y canales a la biblioteca y actualiza los canales existentes a medida que los creadores de contenido ponen a disposición nuevos materiales.",
"CatalogFAQ.customContentQuestion": "¿Cómo puedo añadir mis propios materiales o recomendar materiales de otros creadores para esta biblioteca?",
"CatalogFAQ.customContentAnswer": "Nos encantaría que se ponga en contacto con nosotros acerca de sus propios materiales o sus recomendaciones. Escribanos a content@learningequality.org.",
"CatalogFAQ.customContentAnswer": "Para añadir sus propios materiales, cree una cuenta de Kolibri Studio en https://studio.learningequality.org. Si desea recomendar materiales educativos públicos para incuir a la Biblioteca de Contenidos de Kolibri envíenos un correo electrónico a content@learningequality.org.",
"CatalogFAQ.usingResourcesHeader": "Acerca del uso de estos recursos",
"CatalogFAQ.usingContentQuestion": "He encontrado algo que me interesa y me gustaría empezar a usar. ¿Qué debo hacer?",
"CatalogFAQ.usingContentAnswer": "¡Genial! Todos estos recursos han sido especialmente empaquetados para su uso en Kolibri, nuestra plataforma de Código Abierto para aprender sin conexión, así que por favor revise cómo empezar con Kolibri primero, luego siga las instrucciones para importar materiales.",
Expand Down Expand Up @@ -1212,4 +1213,4 @@
"AdministrationAppError.unauthorizedDetails": "Necesita ser administrador de Studio para ver esta página",
"AdministrationIndex.channelsLabel": "Canales",
"AdministrationIndex.usersLabel": "Usuarios"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,7 @@
"SavedSearchesModal.editAction": "Modifier",
"SavedSearchesModal.deleteAction": "Supprimer",
"SavedSearchesModal.closeAction": "Fermer",
"SavedSearchesModal.closeButtonLabel": "Fermer",
"SavedSearchesModal.savedSearchesTitle": "Recherches enregistrées",
"SavedSearchesModal.noSavedSearches": "Vous n'avez aucune recherche enregistrée",
"SavedSearchesModal.searchDeletedSnackbar": "Recherche enregistrée supprimée",
Expand Down Expand Up @@ -673,7 +674,7 @@
"CatalogFAQ.newContentQuestion": "Learning Equality ajoute-t-il de nouveaux supports ?",
"CatalogFAQ.newContentAnswer": "Notre équipe chargée des contenus ajoute régulièrement de nouvelles sources et chaînes à la bibliothèque, et met à jour les chaînes existantes au fur et à mesure que les créateurs de contenus mettent à disposition de nouveaux supports.",
"CatalogFAQ.customContentQuestion": "Comment puis-je ajouter mes propres supports ou recommander des supports d'autres créateurs pour cette bibliothèque ?",
"CatalogFAQ.customContentAnswer": "Nous serions ravis d'échanger avec vous au sujet de vos propres supports ou de vos recommandations. Merci de nous contacter à l'adresse content@learningequality.org !",
"CatalogFAQ.customContentAnswer": "Pour ajouter vos propres matériaux, créez un compte sur Kolibri Studio en allant sur https://studio.learningequality.org. Des recommandations au sujet des types de matériels éducatifs à ajouter à la bibliothèque de contenu de Kolibri peuvent être obtenues en contactant content@learningequality.org.",
"CatalogFAQ.usingResourcesHeader": "À propos de l'utilisation de ces ressources",
"CatalogFAQ.usingContentQuestion": "J'ai trouvé quelque chose qui m'intéresse et j'aimerais commencer à l'utiliser. Que dois-je faire ?",
"CatalogFAQ.usingContentAnswer": "Formidable ! Toutes ces ressources ont été spécifiquement traitées pour permettre leur utilisation sur Kolibri, notre plateforme open source destinée à l'apprentissage hors ligne. Pour commencer, découvrez comment lancer Kolibri, puis suivez les instructions pour y importer des ressources.",
Expand Down Expand Up @@ -1212,4 +1213,4 @@
"AdministrationAppError.unauthorizedDetails": "Il faut être administrateur de Studio pour voir cette page",
"AdministrationIndex.channelsLabel": "Chaînes",
"AdministrationIndex.usersLabel": "Utilisateurs"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,7 @@
"SavedSearchesModal.editAction": "Edit",
"SavedSearchesModal.deleteAction": "Delete",
"SavedSearchesModal.closeAction": "Close",
"SavedSearchesModal.closeButtonLabel": "बंद (close)",
"SavedSearchesModal.savedSearchesTitle": "Saved searches",
"SavedSearchesModal.noSavedSearches": "You do not have any saved searches",
"SavedSearchesModal.searchDeletedSnackbar": "Saved search deleted",
Expand Down Expand Up @@ -1212,4 +1213,4 @@
"AdministrationAppError.unauthorizedDetails": "You need to be an administrator of Studio to view this page",
"AdministrationIndex.channelsLabel": "Channels",
"AdministrationIndex.usersLabel": "Users"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,7 @@
"SavedSearchesModal.editAction": "Edit",
"SavedSearchesModal.deleteAction": "Delete",
"SavedSearchesModal.closeAction": "Close",
"SavedSearchesModal.closeButtonLabel": "Fechar",
"SavedSearchesModal.savedSearchesTitle": "Saved searches",
"SavedSearchesModal.noSavedSearches": "You do not have any saved searches",
"SavedSearchesModal.searchDeletedSnackbar": "Saved search deleted",
Expand Down Expand Up @@ -1212,4 +1213,4 @@
"AdministrationAppError.unauthorizedDetails": "You need to be an administrator of Studio to view this page",
"AdministrationIndex.channelsLabel": "Channels",
"AdministrationIndex.usersLabel": "Users"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1105,6 +1105,7 @@
"ReviewSelectionsPage.resourcesInTopic": "{count, number} {count, plural, zero {} one {مصدر} two {مصدرين} few {مصادر} many {مصدراً} other {مصادر}}",
"ReviewSelectionsPage.reviewSelectionHeader": "مراجعة الإختيارات",
"SavedSearchesModal.cancelAction": "إلغاء",
"SavedSearchesModal.closeButtonLabel": "إغلاق",
"SavedSearchesModal.deleteAction": "حذف",
"SavedSearchesModal.deleteConfirmation": "هل أنت متأكد من أنك تريد حذف عملية البحث المحفوظة؟",
"SavedSearchesModal.deleteSearchTitle": "حذف عمليات البحث المحفوظة",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@
"CatalogFAQ.channelQuestion": "¿Qué es un canal?",
"CatalogFAQ.coachContentAnswer": "La mayoría de los recursos están dirigidos a los estudiantes, pero algunos, como planes de clase, actualizaciones temáticas, guías de aprendizaje profesional y similares, están dirigidos a profesores y tutores. En Kolibri, marcamos este contenido como \"apoyo para tutores\" y limitamos su visibilidad a aquellos usuarios con las cuentas de tutor. Si ves materiales para tutores en el canal, indican que posiblemente se requiere menos planificación por parte de facilitadores que usen esos recursos.",
"CatalogFAQ.coachContentQuestion": "¿Qué son los 'recursos para tutores'?",
"CatalogFAQ.customContentAnswer": "Nos encantaría que se ponga en contacto con nosotros acerca de sus propios materiales o sus recomendaciones. Escribanos a content@learningequality.org.",
"CatalogFAQ.customContentAnswer": "Para añadir sus propios materiales, cree una cuenta de Kolibri Studio en https://studio.learningequality.org. Si desea recomendar materiales educativos públicos para incuir a la Biblioteca de Contenidos de Kolibri envíenos un correo electrónico a content@learningequality.org.",
"CatalogFAQ.customContentQuestion": "¿Cómo puedo añadir mis propios materiales o recomendar materiales de otros creadores para esta biblioteca?",
"CatalogFAQ.descriptionP1": "Aquí puede aprender más sobre los recursos educativos disponibles para uso público en Kolibri, que están organizados en \"canales\". Utilice los filtros para navegar por los canales por palabra clave, idioma o formatos de los materiales dentro.",
"CatalogFAQ.descriptionP2": "Haga clic en un canal para obtener una vista previa de los temas y temas que cubre, aprender más sobre su creador, ver cuántos recursos contiene el canal y aprender a importarlo en Kolibri. También puede encontrar contenido específico para tutores (planes de clase, guías profesionales de profesores y otros materiales complementarios de facilitación), evaluaciones y ejercicios y subtítulos para la accesibilidad.",
Expand Down Expand Up @@ -1105,6 +1105,7 @@
"ReviewSelectionsPage.resourcesInTopic": "{count, number} {count, plural, one {material} other {materiales}}",
"ReviewSelectionsPage.reviewSelectionHeader": "Revisar seleccionado",
"SavedSearchesModal.cancelAction": "Cancelar",
"SavedSearchesModal.closeButtonLabel": "Cerrar",
"SavedSearchesModal.deleteAction": "Eliminar",
"SavedSearchesModal.deleteConfirmation": "Confirme que desea eliminar esta búsqueda guardada",
"SavedSearchesModal.deleteSearchTitle": "Borrar búsqueda guardada",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@
"CatalogFAQ.channelQuestion": "Qu'est-ce qu'une chaîne ?",
"CatalogFAQ.coachContentAnswer": "La plupart des ressources sont destinées aux apprenants, mais certaines, telles que les plans de leçon, les remises à niveau sur telle ou telle matière, les guides d'apprentissage professionnel et autres, sont destinées aux enseignants et aux facilitateurs. Dans Kolibri, nous marquons ce contenu comme étant « pour les éducateurs », les seuls à y avoir accès. Alors avis aux planificateurs ! Si vous trouvez ce type de ressource, vous pourriez vous épargner du temps de planification !",
"CatalogFAQ.coachContentQuestion": "En quoi consistent les « ressources pour les éducateurs » ?",
"CatalogFAQ.customContentAnswer": "Nous serions ravis d'échanger avec vous au sujet de vos propres supports ou de vos recommandations. Merci de nous contacter à l'adresse content@learningequality.org !",
"CatalogFAQ.customContentAnswer": "Pour ajouter vos propres matériaux, créez un compte sur Kolibri Studio en allant sur https://studio.learningequality.org. Des recommandations au sujet des types de matériels éducatifs à ajouter à la bibliothèque de contenu de Kolibri peuvent être obtenues en contactant content@learningequality.org.",
"CatalogFAQ.customContentQuestion": "Comment puis-je ajouter mes propres supports ou recommander des supports d'autres créateurs pour cette bibliothèque ?",
"CatalogFAQ.descriptionP1": "Découvrez dans cette section les ressources pédagogiques, organisées en « chaînes », disponibles en libres accès sur Kolibri. Servez-vous des filtres pour explorer les chaînes par mot-clé, langue ou format de média.",
"CatalogFAQ.descriptionP2": "Cliquez sur une chaîne pour un aperçu des matières et des thèmes qui y sont abordés, en savoir plus sur son créateur, voir combien de ressources elle regroupe et apprendre comment les importer dans Kolibri. Vous pouvez également y trouver des contenus destinés spécifiquement aux éducateurs (plans de leçons, guides professionnels pour les enseignants et autres supports d'animation supplémentaires), des évaluations et des exercices, et des légendes pour assurer leur accessibilité.",
Expand Down Expand Up @@ -1105,6 +1105,7 @@
"ReviewSelectionsPage.resourcesInTopic": "{count, number} {count, plural, one {ressource} other {ressources}}",
"ReviewSelectionsPage.reviewSelectionHeader": "Passer en revue la sélection",
"SavedSearchesModal.cancelAction": "Annuler",
"SavedSearchesModal.closeButtonLabel": "Fermer",
"SavedSearchesModal.deleteAction": "Supprimer",
"SavedSearchesModal.deleteConfirmation": "Êtes-vous sûr de vouloir supprimer cette recherche enregistrée ?",
"SavedSearchesModal.deleteSearchTitle": "Supprimer la recherche enregistrée",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1105,6 +1105,7 @@
"ReviewSelectionsPage.resourcesInTopic": "{count, number} {count, plural, one {संसाधन} other {संसाधन}}",
"ReviewSelectionsPage.reviewSelectionHeader": "Review selections",
"SavedSearchesModal.cancelAction": "रद्द करें",
"SavedSearchesModal.closeButtonLabel": "बंद (close)",
"SavedSearchesModal.deleteAction": "मिटाएँ",
"SavedSearchesModal.deleteConfirmation": "Are you sure you want to delete this saved search?",
"SavedSearchesModal.deleteSearchTitle": "Delete saved search",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1105,6 +1105,7 @@
"ReviewSelectionsPage.resourcesInTopic": "{count, number} {count, plural, one {recurso} other {recursos}}",
"ReviewSelectionsPage.reviewSelectionHeader": "Review selections",
"SavedSearchesModal.cancelAction": "Cancelar",
"SavedSearchesModal.closeButtonLabel": "Fechar",
"SavedSearchesModal.deleteAction": "Excluir",
"SavedSearchesModal.deleteConfirmation": "Are you sure you want to delete this saved search?",
"SavedSearchesModal.deleteSearchTitle": "Delete saved search",
Expand Down