Commit Graph

7647 Commits

Author SHA1 Message Date
Justin Hynes
9fbc6e3bf4 feat: purge name from certificate records during user retirement (#34799)
[APER-3241]

This PR updates the retirement pipeline to purge learners' names from certificate records when their account is being retired.

It also introduces a new management command that can be used by Open edX operators to purge the leftover name data (PII data) from the `certificates_generatedcertificate` table. This is designed as a one-time use data fixup, as the retirement functionality should clean this moving forward.
2024-05-16 09:17:40 -04:00
Muhammad Adeel Tajamul
7709f4b2c6 fix: updated email notifications task and ui fixes (#34803) 2024-05-16 05:18:59 +05:00
Kyle D. McCormick
7d7a18d28b build: add system check to warn of pending devstack settings removal
Note: I had originally implemented this as a `warnings.warn()` call
directly in lms/envs/devstack.py and cms/envs/devstack.py, but for
whatever reason, those warnings were getting swallowed. System checks
display more prominently, anyway.

Part of: https://github.com/openedx/public-engineering/issues/247
2024-05-15 12:56:59 -04:00
Yusuf Musleh
e8d07cf747 test: Update tagged openassessment test 2024-05-14 10:37:38 +03:00
Tim McCormack
20c082c33b feat: Remove direct New Relic references (use configured telemetry) (#34781)
Now that edx-django-utils can report to other telemetry backends, we need
to remove the direct newrelic references.
2024-05-13 17:10:46 +00: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
sundasnoreen12
60e86dd076 Merge pull request #34687 from openedx/sundas/INF-1371
fix: fixed tds width and margins issues
2024-05-13 11:41:29 +05:00
Muhammad Adeel Tajamul
0d4adaa5d7 fix: updated ace template for notifications email digest (#34778) 2024-05-10 17:52:19 +05:00
sundasnoreen12
2c4e039313 fix: moved tr outside forloop 2024-05-10 14:50:30 +05:00
sundasnoreen12
7789923d21 refactor: added tr tags 2024-05-10 13:03:01 +05:00
sundasnoreen12
f976266b21 refactor: paragraph tag is not holding children in email template 2024-05-10 13:02:40 +05:00
sundasnoreen12
ab66687a19 fix: added fix based on recent master changes 2024-05-10 13:02:40 +05:00
Rômulo Penido
b42da7429f feat: Enable taxonomy/tagging feature in MFE by default (#34633)
* feat: make tagging feature enabled by default

* fix: use the correct flag for tagging enabled

* fix: make compatible with other changes from master

* fix: more compatibility fixes

* fix: show tag counts at all levels of the outline, not just units

* chore: typo

* test: fix counts in test suite now that tagging is on by default

---------

Co-authored-by: Braden MacDonald <braden@opencraft.com>
Co-authored-by: Yusuf Musleh <yusuf@opencraft.com>
2024-05-09 18:57:05 +05:30
Chris Chávez
7f6133c940 [FC-0049] feat: Update remove object-tag permission (#34728)
* feat: Update remove object-tag permission

* chore: Bump openedx-learning version
2024-05-09 17:38:25 +05:30
Muhammad Adeel Tajamul
6e48229616 fix: unregistered task of type for email notification (#34751) 2024-05-09 15:16:59 +05:00
Muhammad Adeel Tajamul
c72908f719 fix: updated email digest management command (#34729) 2024-05-08 11:58:01 +05: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
Kyle D. McCormick
b1393ac3eb fix: fall back to settings.COMPREHENSIVE_THEME_DIRS correctly
There was a logical error in the compile_sass management command:
instead of falling back to settings.COMPREHENSIVE_THEME_DIRS when
--theme-dirs was *None or missing*, we only fell back to it when
--theme-dirs was *missing*.

This caused theme compilation to be skipped when COMREHENSIVE_THEME_DIRS
*is not set* in the environment, even though
settings.COMPREHENSIVE_THEME_DIRS *is set* in Django settings, which
is currently the case for edx.org.
2024-05-07 08:40:40 -04:00
Kyle D. McCormick
21a1235a28 revert: revert: build: finish replacing paver assets
This reverts commit 4c0284b87d.
2024-05-07 08:40:40 -04:00
Muhammad Adeel Tajamul
a454da9ca6 feat: added daily and weekly email digest (#34539)
* feat: added daily and weekly email digest
2024-05-07 12:15:03 +05:00
Kyle McCormick
4c0284b87d Revert "build: finish replacing paver assets (#34554)" (#34700)
Reverts #34554, which causes compilation of edX.org's
legacy comprehensive theme to be skipped in their deployment pipeline.
We have not determined the precise cause yet, but it seems like the
compile_sass management command is not correctly getting the
list of comprehensive theme directories from Django settings.
2024-05-06 12:57:51 -04:00
Kyle McCormick
3f0f7ce705 build: finish replacing paver assets (#34554)
Together, these changes make it so that all features of the Paver-based
asset compilation system are supported with drop-in Paver-free
replacements. The remaining Paver asset functions are trivial wrappers,
which can be comfortably deleted before Sumac.

* Turn `./manage.py ... compile_sass` into a simple wrapper around `npm
  run compile-sass`
* Turn `paver webpack` into a simple wrapper around `npm run webpack`
* Turn `pavelib.assets:collect_assets` into a simple wrapper around
  `./manage.py ... collectstatic`
* Add/improve deprecation warnings for all Paver asset commands.
* Load defaults for asset-related Django settings from environment
  variables. This allows the build to work without Python. For the
  settings which will be removed in Sumac, I've added deprecation
  warnings.
* Change EDX_PLATFORM_THEME_DIRS env var to COMPREHENSIVE_THEME_DIRS.
  This simplifies the migration instructions, because all the new env
  vars now match their corresponding Django settings. This amends an
  ADR, but it should not be a breaking change because the  env var was
  recently added (since Quince) and nobody should be using it yet.
* Future-proof the static assets ADR with links. The linked pages will
  be kept up-to-date even if the ADR isn't.

Part of: https://github.com/openedx/edx-platform/issues/34467
2024-05-06 08:29:45 -04:00
Ahtisham Shahid
f2067ad700 fix: updated ora and pref version (#34696) 2024-05-06 14:29:24 +05:00
Syed Sajjad Hussain Shah
2ce25b3eb6 feat: autogenerate username on registration (#34562)
* feat: autogenerate username on registration

---------

Co-authored-by: Attiya Ishaque <atiya.ishaq@arbisoft.com>
Co-authored-by: Blue <ahtesham-quraish@users.noreply.github.com>
2024-05-02 08:58:37 +05:00
Ahtisham Shahid
2bd73ca96b change notification app name (#34672) 2024-05-01 01:38:30 +05:00
connorhaugh
674c3edaab Revert "Revert "Revert "temp: trace celery tasks in dd"" (#34563)" (#34578)
This reverts commit ebe36a2957.
2024-04-29 13:09:43 -04:00
Rômulo Penido
7fc6cd6755 feat: add usage_key to breadcrumbs in Studio search index (#34535) 2024-04-25 11:00:50 -07:00
Chris Chávez
a33165aaa6 feat: bump openedx-learning to support tagging with multiple taxonomies at once (#34490) 2024-04-25 10:44:47 -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
Justin Hynes
e2e014cab5 feat!: remove the clean_certificate_available_date mgmt cmd (#34596)
This PR removes the `clean_certificate_available_date` management command. Recently, a change was made to sync the end date of a course run with a display behavior of "end" as its certificate available date in the Credentials IDA. This change was made to resolve a long running issue with the Credentials IDA not displaying certificates to learners correctly on learner records when the display behavior is set to "end".

This management command, if run, would clear the certificate available date from the course certificate configurations in the Credentials IDA. This would be a regression based on the new functionality.  Other improvements have been made to ensure that updates made in the LMS properly flow to Credentials.

TL;DR -- this management command is no longer needed because of feature changes in edx-platform. Allowing this management command to run would break functionality for learners.
2024-04-25 12:02:34 -04:00
Ahtisham Shahid
e76fee1521 fix: resolved key error (#34608) 2024-04-25 02:25:00 +05:00
Usama Sadiq
e91029202e feat: update django-countries (#34603)
* feat: Upgrade Python dependency django-countries (#34602)
---------
Co-authored-by: UsamaSadiq <UsamaSadiq@users.noreply.github.com>
2024-04-24 21:34:32 +05:00
MueezKhan246
15e5631fc0 Merge pull request #34526 from openedx/MueezKhan/Remove-ENABLE_USER_ID_SCOPE-Flag-From-Platform
Removed ENABLE_USER_ID_SCOPE flag from validator
2024-04-24 15:09:06 +05: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
Diana Huang
ebe36a2957 Revert "Revert "temp: trace celery tasks in dd"" (#34563)
* Revert "Revert "temp: trace celery tasks in dd (#34537)" (#34553)"

This reverts commit a7b441690d.

* docs: Update removal date on temporary celery flag.
2024-04-22 11:05:50 -04:00
Ahtisham Shahid
4f8a99805d feat: added new ora notification (#34464) 2024-04-22 18:14:26 +05:00
Ahtisham Shahid
5b1d52d811 fix: endorsed post notification audiance updated (#34513) 2024-04-22 13:09:04 +05:00
connorhaugh
a7b441690d Revert "temp: trace celery tasks in dd (#34537)" (#34553)
This reverts commit f866545bb9.
2024-04-19 12:50:33 -07:00
Feanil Patel
6ea123db4d Merge pull request #34528 from openedx/feanil/remove_django_splash
feat!: Remove the django-splash app.
2024-04-19 10:53:46 -04:00
Feanil Patel
6ea63da969 fix: Don't use the deprecated location for Hashable
The Hashable object was moved in python 3.3 and support for the old
location is dropped in python 3.10 the new location is available in
python 3.8 so we can just update this and it should work with both
python 3.8 and 3.11

https://docs.python.org/3.8/library/collections.html
2024-04-18 13:28:30 -04:00
Feanil Patel
b20ac9c515 fix: Be able to clear the process_cache manually in Python 3.11
Given code like the following

```
class Foo:
    @process_cached
    def bar(self):
        pass
```

In Python 3.8 referencing `bar` would not call its `__get__` method.

```
x = Foo().bar
```

However in Python 3.11, making the same call would call the `__get__`
method, permanently replacing the underlying `process_cached` object
with the partial function that references it.

This meant that code to clear the cache would work in Python 3.8 but
would break in 3.11

```
Foo().bar.cache.clear()  # Works in 3.8 but not in 3.11
```

In 3.11 this results in the following error:
```
E       AttributeError: 'functools.partial' object has no attribute 'cache'
```

To make this compatible in both version, we just add the cache as an
accessible attribute on the partial we generate for our wrapped
function.
2024-04-18 13:28:30 -04:00
connorhaugh
f866545bb9 temp: trace celery tasks in dd (#34537) 2024-04-18 13:08:25 -04:00
Rômulo Penido
90b253a38a feat: update Studio search index when course content is updated (#34391) 2024-04-18 09:53:21 -07:00
Feanil Patel
9bd4474f7d test: Reduce query counts now that we dropped django-splash. 2024-04-18 12:43:33 -04: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
MueezKhan246
e187d70233 Merge branch 'master' of https://github.com/openedx/edx-platform into MueezKhan/Remove-ENABLE_USER_ID_SCOPE-Flag-From-Platform 2024-04-17 09:54:41 +00:00
MueezKhan246
86c49f7dce test: removed redundant test case 2024-04-17 09:50:31 +00:00
Saad Yousaf
6dd5157fee fix: fix cadence value for instant cadence and update version 2024-04-17 14:16:50 +05:00
MueezKhan246
726392b1fa feat: removed ENABLE_USER_ID_SCOPE flag from validator 2024-04-17 03:53:07 +00:00
Troy Sankey
f30ae71c23 feat: add more verbose logging around force_enrollment
After testing the enterprise bulk enrollment flow with
force_enrollment=True, I'm finding that the enrollment is still not
forced. This extra logging will hopefully help shed light on where this
boolean might be accidentally ignored.
2024-04-15 08:21:35 -07:00