Commit Graph

493 Commits

Author SHA1 Message Date
Navin Karkera
ec34753043 fix: update library v2 search index synchronously (#35367)
Discarded components need to be removed from index in sync to make sure
that users see the latest updated data.
2024-08-30 12:16:02 -07:00
Navin Karkera
c65478e487 feat: index library collections in studio meilisearch index (#35324) 2024-08-27 10:45:46 -07:00
Chris Chávez
2e77e65d1c feat: Problem types added as filterable attribute [FC-0059] (#35242) 2024-08-27 11:43:29 -05:00
Navin Karkera
c3480b8f0b chore: add comment 2024-08-19 17:01:25 +05:30
Navin Karkera
fed8a803f1 test: delete documents that were never published on discard 2024-08-19 17:01:25 +05:30
Navin Karkera
e1495398e2 refactor: delete documents that were never published on discard 2024-08-19 17:01:25 +05:30
Navin Karkera
140b9bb968 refactor: delete all documents on discard 2024-08-19 17:01:25 +05:30
Navin Karkera
2efff2697b refactor: parallelize content block update on discard 2024-08-19 17:01:25 +05:30
Navin Karkera
65258117d8 fix: delete discarded drafts from meilisearch index 2024-08-19 17:01:25 +05:30
Jillian
6b5d812d38 feat: adds sortable fields to studio content search index (#35103) 2024-07-25 18:18:49 +00:00
Rômulo Penido
238dca732e fix: skip block indexing if it raises an error while loading (#35139)
* fix: skip block indexing if it raises an error while loading
* test: add tests to the issue
2024-07-26 02:15:57 +09:30
Braden MacDonald
e1e3c87a95 fix: searching tag refinement was sometimes not working (#34933) 2024-06-07 09:30:05 +09:30
Braden MacDonald
6bfe08c147 fix: reindex_studio was crashing if instance had too many courses (#34905) 2024-06-07 09:29:01 +09:30
Kyle McCormick
11626148d9 refactor: switch from mock to unittest.mock (#34844)
As of Python 3.3, the 3rd-party `mock` package has been subsumed into the
standard `unittest.mock` package. Refactoring tests to use the latter will
allow us to drop `mock` as a dependency, which is currently coming in
transitively through requirements/edx/paver.in.

We don't actually drop the `mock` dependency in this PR. That will happen
naturally in:

* https://github.com/openedx/edx-platform/pull/34830
2024-05-22 13:52:24 -04:00
Kyle McCormick
15caa9746f refactor: Completely remove Blockstore (#34739)
Blockstore and all of its (experimental) functionality has been replaced with
openedx-learning, aka "Learning Core". This commit uninstalls the now-unused
openedx-blockstore package and removes all dangling references to it.

Note: This also removes the `copy_library_from_v1_to_v2` management command,
which has been broken ever since we switched from Blockstore to Learning Core.

Part of this DEPR: https://github.com/openedx/public-engineering/issues/238
2024-05-13 09:48:18 -04:00
Chris Chávez
b551a32a49 fix: Stop autotagging nor indexing the course root XBlock (#34627)
* fix: Multiple auto-tagging when creating a course

* Avoid tagging course-block and course-info blocks
* Tests

* feat: Avoid create index for course blocks
2024-05-07 11:14:33 -07:00
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