Commit Graph

477 Commits

Author SHA1 Message Date
Rômulo Penido
7fc6cd6755 feat: add usage_key to breadcrumbs in Studio search index (#34535) 2024-04-25 11:00:50 -07:00
Maria Grimaldi
809ffc3743 feat: connect teams with content groups using dynamic partition generator (#33788)
Implements the connection from the teams feature to the content groups feature. This implementation uses the dynamic partition generator extension point to associate content groups with the users that belong to a Team.

This implementation was heavily inspired by the enrollment tracks dynamic partitions.
2024-04-25 13:02:49 -04:00
Yusuf Musleh
a31ed929f7 feat: update studio search index when object tags change (#34559)
* feat: Update search index when object tags updated

* feat: Update index when library block tags change

* refactor: Remove extra params

* docs: Add new event to hook events docs

* feat: Add and use upsert_block_tags_index_docs

This takes care of updating tags data in search index for both course and library blocks.

* chore: Update openedx-events

* fix: Update tests + include course block tags in reindex

* feat: Fix static-type issues + adjust tag_object

* fix: bug retrieving the Meilisearch API key UID (first time only)

* docs: Update comments

---------

Co-authored-by: Braden MacDonald <braden@opencraft.com>
2024-04-22 10:53:49 -07:00
Rômulo Penido
90b253a38a feat: update Studio search index when course content is updated (#34391) 2024-04-18 09:53:21 -07:00
Jillian
d67211051b feat: restrict Studio search results based on user permissions (#34471)
* feat: adds SearchAccess model

Stores a numeric ID for each course + library, which will generally be
shorter than the full context_key, so we can pack more of them into the
the Meilisearch search filter.

Also:

* Adds data migration pre-populates the SearchAccess model from the existing
  CourseOverview and ContentLibrary records
* Adds signal handlers to add/remove SearchAccess entries when content
  is created or deleted.
* Adds get_access_ids_for_request() helper method for use in views.
* Adds tests.

* test: can't import content.search in lms tests

* feat: use SearchAccess in documents and views

* Adds an access_id field to the document, which stores the
  SearchAccess.id for the block's context.
* Use the requesting user's allowed access_ids to filter search results
  to documents with those access_ids.
* Since some users have a lot of individual access granted, limit the
  number of access_ids in the filter to a large number (1_000)
* Updates tests to demonstrate.

* test: can't import content.search or content_staging in lms tests

* fix: make access_id field filterable

* fix: use SearchAccess.get_or_create in signal handlers

In theory, we shouldn't have to do this, because the CREATE and DELETE
events should keep the SearchAccess table up-to-date.

But in practice, signals can be missed (or in tests, they may be
disabled). So we assume that it's ok to re-use a SearchAccess.id created
for a given course or library context_key.

* refactor: refactors the view tests to make them clearer

Uses helper methods and decorators to wrap the settings and patches used
by multiple view tests.

* feat: adds org filters to meilisearch filter

* Uses content_tagging.rules.get_user_orgs to fetch the user's
  content-related orgs for use in the meilisearch filter.
* Limits the number of orgs used to 1_000 to keep token size down

* refactor: removes data migration

Users should use the reindex_studio management command to populate SearchAccess.

* refactor: adds functions to common.djangoapps.student.role_helpers

to allow general access to the user's RoleCache without having to access
private attributes of User or RoleCache.

Related changes:

* Moves some functionality from openedx.core.djangoapps.enrollments.data.get_user_roles
  to this new helper method.
* Use these new helper method in content_tagging.rules

* fix: get_access_ids_for_request only returns individual access

instead of all course keys that the user can read.

Org- and GlobalStaff access checks will handle the rest.

* fix: use org-level permissions when generating search filter

Also refactors tests to demonstrate this change for OrgStaff and
OrgInstructor users.

* refactor: remove SearchAccess creation signal handlers

Lets SearchAccess entries be created on demand during search indexing.

* feat: omit access_ids from the search filter that are covered by the user's org roles

---------

Co-authored-by: Rômulo Penido <romulo.penido@gmail.com>
2024-04-17 11:21:34 -07:00
Chris Chávez
ddb407a3f2 feat: handle tags when importing/exporting courses (#34356) 2024-04-08 11:39:46 -07:00
Jillian
7ad225658f feat: don't use OLX for tags when copying/duplicating blocks (#34386) 2024-04-02 09:59:57 -07:00
Braden MacDonald
f663739510 feat: Index Studio content using Meilisearch [experimental] (#34310) 2024-03-22 10:08:31 -07:00
Maria Grimaldi
45178e0ced feat: add paginated HomePageCoursesV2 view with filtering & ordering (#34173) 2024-03-20 11:31:59 -04:00
Justin Hynes
8d7a13f358 feat: update task and signals responsible for cert available dates in Credentials
[APER-3229]

The monolith and the Credentials IDA keep independent records of a course runs certificate availability/visibility preferences. This PR aims to improve the communication between the monolith and the Credentiala IDA to keep the availability date/preference in sync with the monoliths records.

The current code is too strict and actually prevents valid updates in some configurations.

Additionally, the Credentials IDA doesn't understand the concept of "course pacing" (instructor-paced vs self-paced) and has troubles with courses with an availability date of "end". Instead of having to add the concept of course pacing (and syncing more data between the two systems), this PR proposes sending the end date of a course as the "certificate available date" to Credentials.

This way, the Credentials IDA can manage the visibility of awarded credentials in a course run with a display behavior of "end" using the existing feature set and models of the Credentials service.
2024-03-18 12:30:40 +00:00
Muhammad Adeel Tajamul
cf6a629ee7 fix: discussion tab should be None if discussion tab is disabled (#33861) 2023-12-11 15:06:37 +05:00
ABBOUD Moncef
9b44065ab0 fix: hide sequences & sections when access is restricted in units through cohorts (#33191)
This does two major things:

* Removes subsections from a student's course outline if the
  subsection's units are all restricted to a cohort that the student
  is not a part of (see CohortPartitionGroupsOutlineProcessor).
* Removes sections from the course outline if the user is not allowed
  to see any of its child subsections.
2023-09-19 10:05:02 -04:00
Artur Gaspar
7da99848a7 fix: edxnotes visibility in courseware and courseware API (#33096)
This retrieves user preferences for edxnotes visibility by:
1. Adding a `bind_course_for_student` method to course overview model.
2. Using a bound XBlock in the `toggle_notes.html` template.

The previously used unbound course instance was returning a default value.
2023-09-07 17:59:51 +02:00
Sagirov Evgeniy
c5d1807c81 feat!: remove most Old Mongo functionality (#31134)
This commit leaves behind just enough Old Mongo (DraftModulestore)
functionality to allow read-only access to static assets and the
root CourseBlock. It removes:

* create/update operations
* child/parent traversal
* inheritance related code

It also removes or converts tests for this functionality.

The ability to read from the root CourseBlock was maintained for
backwards compatibility, since top-level course settings are often
stored here, and this is used by various parts of the codebase,
like displaying dashboards and re-building CourseOverview models.

Any attempt to read the contents of a course by getting the
CourseBlock's children will return an empty list (i.e. it will look
empty).

This commit does _not_ delete content on MongoDB or run any sort of
data migration or cleanup.
2023-09-06 10:01:31 -04:00
Braden MacDonald
a013c08ae6 fix: incorrect type hints in a few places (#33104) 2023-08-28 10:34:08 -07:00
Yagnesh1998
dd191e9400 feat: Update models.py 2023-08-08 18:12:01 +05:30
Yagnesh1998
0fae4c975b feat: Update models.py
removed white space
2023-08-08 17:50:12 +05:30
Yagnesh1998
6967ca6f6e Merge branch 'master' into edx-depr31 2023-08-08 17:37:25 +05:30
Yagnesh1998
b2286f4b5d feat: Update models.py 2023-08-08 17:37:04 +05:30
Awais Qureshi
4da29d914d chore: adding migrations related with django-history. (#32935) 2023-08-08 16:04:06 +05:00
Yagnesh1998
e7e69d5cd7 feat: Update models.py
remove white space.
2023-08-04 10:33:49 +05:30
Yagnesh1998
ba01ca9b2a feat: Update models.py 2023-08-04 10:28:28 +05:30
Yagnesh1998
6ace2aa293 Merge branch 'master' into edx-depr31 2023-08-02 16:09:27 +05:30
Braden MacDonald
57420ed613 feat: expand mypy static type checking (#32591)
* chore: typing + fixes for content_staging
* chore: typing + fixes for learning_sequences
* chore: typing + fixes for content_libraries
* chore: typing + fixes for new XBlock runtime
* feat: type hinting more code with mypy
2023-07-19 09:58:19 -07:00
Yagnesh1998
6e8c10c791 Merge branch 'openedx:master' into edx-depr31 2023-07-17 15:54:46 +05:30
Yusuf Musleh
4ad8ba1b41 feat: list courses details by keys
This adds the ability to get a list of detailed courses based on their
keys provided in the newly added `keys` query param in the `GET /courses/v1/courses/`
endpoint.
2023-07-12 17:22:38 +03:00
Edward Zarecor
aff9d82b7d Merge branch 'master' into edx-depr31 2023-07-04 08:39:10 +02:00
Jansen Kantor
17c4fc03d4 feat: add course field for ORA flex peer override (#32594)
* feat: add course field for ORA flex peer override

* style: quality

* style: remove auto import
2023-06-29 12:48:33 -04:00
Yagnesh1998
751411951d feat: Remove block_structure.invalidate_cache_on_publish waffle flag … (#32517)
* feat: Remove block_structure.invalidate_cache_on_publish waffle flag depr33.

* feat: Update test_signals.py

* feat: Update signals.py

---------

Co-authored-by: Edward Zarecor <ezarecor@tcril.org>
2023-06-29 10:57:41 -04:00
Yagnesh1998
f0112deb2c feat: Update test_models.py 2023-06-22 15:17:09 +05:30
Yagnesh
14f90eba96 feat: BLOCK_STRUCTURES_SETTINGS['PRUNING_ACTIVE'] toggle removed depr31 2023-06-17 02:31:07 +05:30
muhammad-ammar
2a24bf8c4f chore: add comment 2023-06-13 19:40:06 +05:00
muhammad-ammar
2ecd06a735 feat: trigger signals to import and delete course details from plugin 2023-06-12 18:31:57 +05:00
Pooja Kulkarni
9245bc0f76 refactor: rename descriptor -> block within openedx/core/djangoapps
Co-authored-by: Agrendalath <piotr@surowiec.it>
2023-04-26 17:10:54 +02:00
Feanil Patel
40eedc6889 test: Update query counts now that we've removed a waffle flag.
Various tests with query counts need to be updated now that we have
removed a waffle check that was in their codepath.
2023-01-22 18:39:51 -05:00
Feanil Patel
e46bfcd252 feat!: Remove block_structure.raise_error_when_not_found waffle flag.
Per this DEPR: https://github.com/openedx/public-engineering/issues/34

This was a temporary waffle and is no longer needed.

BREAKING_CHANGE: Setting the
`block_structure.raise_error_when_not_found` waffle switch via
django-waffle will be ignored.

Note for Operators: If you have this waffle swicth in your systems, it
should be removed.
2023-01-20 13:09:24 -05:00
Nathan Sprenkle
670477e7d5 fix: add fallthrough exception for course overview (#31582)
An issue trying to get a course overview for a deleted course and trying
to write back into the DB had been raising unhandled errors. Catching
other classes of errors to keep this function from breaking. Should just
return None in these cases and log the exception.
2023-01-18 11:40:38 -05:00
Sagirov Eugeniy
1936de4d68 test: updated CourseOverview Signals Tests for split modulestore 2023-01-17 14:53:10 -05:00
Syed Muhammad Dawoud Sheraz Ali
d2fd26ee91 feat: the ability to filter active courses in course listing api (#31502)
* feat: the ability to filter active courses in course listing api
2023-01-09 20:37:30 +05:00
0x29a
83396ffb07 refactor: convert course_module term to course_block 2022-12-19 17:48:49 +01:00
0x29a
cf47f6385f refactor: xmodule/error_module.py -> xmodule/error_block.py 2022-12-19 17:48:49 +01:00
0x29a
0df1411636 refactor: xmodule/course_module.py -> xmodule/course_block.py 2022-12-19 17:48:49 +01:00
Kaustav Banerjee
99cd4a4715 feat: disable allowed enrollment if enrollment closed 2022-12-13 15:49:25 +01:00
AsadAzam
1925eb10c9 feat: add external id mapping in courseoverview (#31243) 2022-11-07 15:08:08 +05:00
Varsha Menon
c4b2c49ab6 feat: show exam info in course outline 2022-10-26 14:28:27 +00:00
Sagirov Eugeniy
3f3d0d25d8 feat!: Remove inheritance-related code from Old Mongo 2022-10-24 11:58:44 -04:00
Sarina Canelake
4a2f231302 fix: fix github url strings (org edx -> openedx) 2022-09-15 14:52:28 -04:00
Sagirov Evgeniy
b429e55cac feat!: remove Studio editing for Old Mongo Courses
This removes user-facing Studio edit support for Old Mongo courses
(courses that have a CourseKey of the format {org}/{course}/{run}).
This does not affect our normal courses, which have CourseKeys
starting with "course-v1:".

After this commit:

* Old Mongo courses will continue to appear on the Studio course
  listing page, but are not clickable.
* Any attempt to directly access an Old Mongo course in Studio via URL
  fail with a 404 error.
* Course certificates will still be available for Old Mongo courses.
* Old Mongo courses will continue to be returned by CourseOverviews
  and get_course_summaries() calls.

We decided against removing Old Mongo courses from the listing entirely
because that would require very expensive CourseOverviews query to
filter them out. Making that query more efficient would involve a
database migration to add appropriate indexing, which is something else
that we are looking to avoid. CourseOverviews are used everywhere in
the system, so we want to avoid changing how they work so that we can
minimize risk.

This is part of the Old Mongo Modulestore deprecation effort:
  https://github.com/openedx/public-engineering/issues/62
2022-09-14 10:53:33 -04:00
Leangseu Kim
719ddff238 fix: section.due datetime version issue 2022-08-11 13:53:11 -04:00
Muhammad Soban Javed
d053bba952 Revert "Revert "refactor: move common/lib/capa/capa to xmodule/capa" (#30762)"
This reverts commit 4463ee751d.
2022-07-27 15:36:08 +05:00