<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Moodle.org forum posts</title>
    <link>http://moodle.org/useful/</link>
    <description>Recent or usefully rated useful forum posts from moodle.org</description>
    <generator>Moodle</generator>
    <copyright>&amp;#169; 2026 Moodle.org</copyright>
    <image>
      <url>http://moodle.org/pix/i/rsssitelogo.gif</url>
      <title>moodle</title>
      <link>http://moodle.org</link>
      <width>140</width>
      <height>35</height>
    </image><item>
<title>Set list view as default on my courses</title>
<link>https://moodle.org/mod/forum/discuss.php?d=482554#p1910913</link>
<pubDate>Tue, 15 Sep 2026 13:49:11 GMT</pubDate>
<description>by hoang ka &lt;br /&gt;&lt;br /&gt;&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;span&gt;Hi,&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;span&gt;I&#039;m using Moodle 5.2.2 with the Boost theme. &lt;/span&gt;&lt;span&gt;On the My courses page, users can switch between Card, List and Summary views.&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;isSelectedEnd&quot;&gt;&lt;span&gt;Is there a site setting to make List view the default for users who haven&#039;t selected a view yet? &lt;/span&gt;&lt;span&gt;I found the Course overview settings where the available layouts can be enabled or disabled, but I couldn&#039;t find a setting for the default layout.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Thanks.&lt;/span&gt;&lt;/p&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=482554#p1910913</guid>
</item>
<item>
<title>Bulk Deletion of Moodle Messages</title>
<link>https://moodle.org/mod/forum/discuss.php?d=482521#p1910772</link>
<pubDate>Thu, 10 Sep 2026 12:40:26 GMT</pubDate>
<description>by Ken Task &lt;br /&gt;&lt;br /&gt;&lt;p&gt;Don&#039;t think there is such a feature for users, but ... please see:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://moodle.org/mod/forum/discuss.php?d=436157#p1755452&quot; class=&quot;_blanktarget&quot;&gt;https://moodle.org/mod/forum/discuss.php?d=436157#p1755452&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;and how one user solved their similar issue.&lt;/p&gt;
&lt;p&gt;&#039;SoS&#039;, Ken&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=482521#p1910772</guid>
</item>
<item>
<title>Let me say goodbye, and thanks!</title>
<link>https://moodle.org/mod/forum/discuss.php?d=482185#p1909370</link>
<pubDate>Mon, 03 Aug 2026 10:29:04 GMT</pubDate>
<description>by Eloy Lafuente (stronk7) &lt;br /&gt;&lt;br /&gt;&lt;p&gt;After 23+ years, saying goodbye is not easy.&lt;/p&gt;

&lt;p&gt;What makes it even harder is that these have truly been the best years of my professional (and personal) life. It has been an absolute privilege (and a welcome responsibility) to share with you the &lt;strong&gt;birth and evolution of our beloved Moodle&lt;/strong&gt;, and to witness with you, and because of you, how an idea grew into a global movement that has helped so many people learn and teach in better, more open, and more empowering ways.&lt;/p&gt;

&lt;p&gt;When I look back, I do so with enormous pride, gratitude, and joy.&lt;/p&gt;

&lt;p&gt;Together, you have built something extraordinary. Not just software, not just a platform, not just a project, but a community, a culture, and a shared purpose. Over all these years, Moodle has grown thanks to your talent, your generosity, your commitment, and your vision. Every contribution you made has mattered. Every conversation you had has mattered. Every challenge you helped face has made Moodle better.&lt;/p&gt;

&lt;p&gt;And none of this happened in isolation. We have come this far by &lt;strong&gt;standing on the shoulders of giants&lt;/strong&gt;: the early dreamers, the builders, the educators, the developers, the testers, the translators, the administrators, the advocates, and the countless people like you who gave your time, your energy, and your heart to make Moodle what it is today.&lt;/p&gt;

&lt;p&gt;I feel deeply proud of all that you have achieved together, and deeply thankful that you let me be part of it.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://youtu.be/pPR-HyGj2d0?si=XXn9jTDdFm2LNFXQ&quot;&gt;[Video link: &lt;em&gt;People Have the Power&lt;/em&gt; - Patti Smith]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As for what comes next, I do not want to make this too much about me. I simply hope to keep enjoying the things that have always inspired me: hacking as a hobbyist, exploring my own research ideas, and contributing to open source projects here and there. I also want to spend more time with music — keep playing guitar, and finally learn piano properly. And, of course, read more, travel more, and simply live life fully.&lt;/p&gt;

&lt;p&gt;But before closing this chapter, I want to say the most important thing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thank you.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thank you to all of you in Moodle-land. Thank you for your trust, your brilliance, your generosity, your passion, and your companionship through all these years. It has been a pleasure, an honour, and a constant source of learning to work with you, learn from you, and build with you. I will always carry that with me.&lt;/p&gt;

&lt;p&gt;I leave with a full heart, with immense admiration for you, and with complete confidence that the best of Moodle’s story will continue to be written by you.&lt;/p&gt;

&lt;p&gt;So let me say goodbye with a smile, with gratitude, and with hope.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://youtu.be/hE6CsyWv8Zs?si=pnwktnqMAoFKHcFb&quot;&gt;[Video link: &lt;em&gt;Eso que tú me das&lt;/em&gt; - Jarabe de Palo (Spanish)]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stay Hungry, Stay Foolish.&lt;/strong&gt;&lt;br /&gt;
Or, if you prefer: &lt;strong&gt;Stay Thirsty, Stay Crazy.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thank you for everything. Final ciao from this shy hacker 🙂&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;P.S.&lt;/strong&gt; For full transparency: Qwen 3.6 gave me a hand polishing the words for this farewell.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=482185#p1909370</guid>
</item>
<item>
<title>Re: Deleting a course takes so long time </title>
<link>https://moodle.org/mod/forum/discuss.php?d=462221#p1856029</link>
<pubDate>Mon, 23 Sep 2024 09:20:42 GMT</pubDate>
<description>by Immanuel Pasanec &lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;text_to_html&quot;&gt;One solution might be to use the cli script admin/cli/delete_course.php to delete the course via commandline.&lt;br /&gt;
sudo -u www-data /usr/bin/php admin/cli/delete_course.php --courseid=&lt;/div&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=462221#p1856029</guid>
</item>
<item>
<title>Conditional access based on Quiz Question Categories/Grade Items instead of separate quizzes? (Moodle 5.0.7)</title>
<link>https://moodle.org/mod/forum/discuss.php?d=474308#p1910908</link>
<pubDate>Tue, 15 Sep 2026 12:04:48 GMT</pubDate>
<description>by Aurelie Soulier &lt;br /&gt;&lt;br /&gt;&lt;p&gt;Hi everyone,&lt;/p&gt;
&lt;p&gt;I know it&#039;s been a few months but I just wanted to say a massive thank you to everyone who shared ideas, recommended plugins, or offered JavaScript workarounds on this thread and at the Moodle Leeds event earlier in the year.&lt;/p&gt;
&lt;p&gt;Since I wasn&#039;t able to install new third-party plugins on the client&#039;s platform (or run scripts), I stuck strictly to native Moodle features. In the end, I split the diagnostics into targeted section tests. Based on the results, learners either pass (&amp;gt;=70%) and skip ahead access the specific module content (if they get &amp;lt;70%) and take the summative assessments&lt;br /&gt;&lt;br /&gt;To build the diagnostic quizzes, I mapped them to questions pulled from eight different question banks. In each bank, questions are tagged by learning point. The quizzes are set up to fetch one or two random questions (depending on the learning point) from these specific tagged series within each bank, so learners are all tested on the same learning point but get different questions / question types.&lt;/p&gt;
&lt;p&gt;It took some basic tinkering with passing grade conditional access (but nothing exceptional), but it runs smoothly. Our first learner actually completed the whole track two days ago, got their certificate  and is moving on to the face-to-face course as expected. &lt;span style=&quot;text-align:initial;&quot;&gt;(and custom report is automated to send weekly to summarised who completed so we don&#039;t have to always check completion reports)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Thanks again for all the brainpower and support from this amazing community! it really helped me get this across the finish line!&lt;br /&gt;&lt;br /&gt;Best wishes,&lt;br /&gt;Aurélie&lt;/p&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=474308#p1910908</guid>
</item>
<item>
<title>Re: Moodle 4.5 error with embed object</title>
<link>https://moodle.org/mod/forum/discuss.php?d=463362#p1860791</link>
<pubDate>Wed, 06 Nov 2024 01:00:07 GMT</pubDate>
<description>by Brett Dalton &lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;text_to_html&quot;&gt;have you checked the HTML view of  the content?  are there any tags being stripped out after it is saved?  Is possible that when the text is being sanatised something is being removed that shouldn&#039;t be.  For reference TinyMCE is fully open source, the only paid parts are some premium plug ins. Atto was wholy written by Moodle and was taking considerable resources to maintain, streamlining this will mean we can concentrate on a better user experience across the board on core LMS functionality&lt;/div&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=463362#p1860791</guid>
</item>
<item>
<title>Tiles format is no longer maintained - what replacement?</title>
<link>https://moodle.org/mod/forum/discuss.php?d=482550#p1910900</link>
<pubDate>Tue, 15 Sep 2026 08:42:44 GMT</pubDate>
<description>by Philipp Memmel &lt;br /&gt;&lt;br /&gt;&lt;p&gt;Hi David,&lt;/p&gt;
&lt;p&gt;I believe a lot of people that are using format_tiles are having this issue. For now there are multiple forks that are being maintained, we as well are maintaining a fork (&lt;a href=&quot;https://github.com/bycs-lp/moodle-format_tiles&quot; class=&quot;_blanktarget&quot;&gt;https://github.com/bycs-lp/moodle-format_tiles&lt;/a&gt;) that includes some bug fixes, some small features and - most importantly right now - compatibility with moodle 5.2. There are also other forks like this that just includes fixes to make it run under moodle 5.2: &lt;a href=&quot;https://github.com/leonstr/moodle-format_tiles&quot; class=&quot;_blanktarget&quot;&gt;https://github.com/leonstr/moodle-format_tiles&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As long as we don&#039;t receive any information from the maintainer, we still need to wait or use these workarounds by (hopefully temporarily) maintain forks.&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;Philipp&lt;/p&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=482550#p1910900</guid>
</item>
<item>
<title>Course structure and Sections as Subjects</title>
<link>https://moodle.org/mod/forum/discuss.php?d=482385#p1910205</link>
<pubDate>Thu, 27 Aug 2026 14:42:29 GMT</pubDate>
<description>by Emma Richardson &lt;br /&gt;&lt;br /&gt;&lt;p&gt;You need to implement separate groups, restrict the section by group and then remove the permission to View All Groups from the teacher role..I would actually suggest duplicating the built in teacher role, renaming it to Section Teacher or something similar and then removing the permission from that role rather than the stock teacher role.&lt;/p&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=482385#p1910205</guid>
</item>
<item>
<title>mdl-demo for Microsoft WSL containers</title>
<link>https://moodle.org/mod/forum/discuss.php?d=482479#p1910615</link>
<pubDate>Mon, 07 Sep 2026 18:49:58 GMT</pubDate>
<description>by Petr Skoda &lt;br /&gt;&lt;br /&gt;&lt;p&gt;A few months ago Microsoft announced support for containers in &lt;a href=&quot;https://github.com/microsoft/WSL&quot;&gt;WSL&lt;/a&gt;,
it is still in early access.&lt;/p&gt;

&lt;p&gt;You create your own personal Moodle demo site by installing container support and configuring NOTHING — no public
directory hassle, no misconfigured router, no composer headaches.&lt;/p&gt;

&lt;p&gt;That is what my &lt;a href=&quot;https://github.com/mutms/mdl-demo&quot;&gt;mdl-demo OCI image&lt;/a&gt; does.
Moodle 5.3dev is already in it, and any of the 6000+ plugins from the
&lt;a href=&quot;https://camp-registry.org&quot;&gt;CAMP registry&lt;/a&gt; is a few clicks away.&lt;/p&gt;

&lt;p&gt;Using Mac? No problem, macOS has its own container support too, via &lt;a href=&quot;https://github.com/apple/container&quot;&gt;Apple container&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It looks like Microsoft and Apple both think containers belong in everyday operating systems,
so why not spend the evening playing with some new interesting &lt;a title=&quot;Auto-link&quot; href=&quot;https://moodle.org/plugins&quot;&gt;Moodle plugins&lt;/a&gt; instead of installing
Apache yourself, or asking somebody else to do it for you?&lt;/p&gt;
</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=482479#p1910615</guid>
</item>
<item>
<title>mdl-demo for Microsoft WSL containers</title>
<link>https://moodle.org/mod/forum/discuss.php?d=482479#p1910646</link>
<pubDate>Tue, 08 Sep 2026 11:57:08 GMT</pubDate>
<description>by Petr Skoda &lt;br /&gt;&lt;br /&gt;&lt;p&gt;I have upated the docs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;added a Linux section (just don&#039;t run it straight on your workstation)&lt;/li&gt;
&lt;li&gt;noted you may have to reopen the terminal after wsl --update&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks everybody for the feedback!&lt;/p&gt;
</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=482479#p1910646</guid>
</item>
<item>
<title>Activity and Resource Icons Turn Black</title>
<link>https://moodle.org/mod/forum/discuss.php?d=473231#p1910930</link>
<pubDate>Wed, 16 Sep 2026 03:11:38 GMT</pubDate>
<description>by Simey Lameze &lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;text_to_html&quot;&gt;Hi everyone, thanks for reporting this.&lt;br /&gt;
&lt;br /&gt;
This issue is going to be investigated and fixed on this MDL ticket: &lt;a href=&quot;https://moodle.atlassian.net/browse/MDL-89814&quot; class=&quot;_blanktarget&quot;&gt;https://moodle.atlassian.net/browse/MDL-89814&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
Thank you&lt;/div&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=473231#p1910930</guid>
</item>
<item>
<title>Detecting failed requests for files inside a SCORM package — what shows up in nginx / PHP-FPM logs?</title>
<link>https://moodle.org/mod/forum/discuss.php?d=482420#p1910469</link>
<pubDate>Thu, 03 Sep 2026 14:20:29 GMT</pubDate>
<description>by Eduardo Kraus &lt;br /&gt;&lt;br /&gt;&lt;p&gt;1. Since the cache is marked as private, CloudFront will not keep this content in a shared cache. The interruption can happen either between Apache and CloudFront or between CloudFront and the learner. Because of that, I would start with the CloudFront logs and analyze each file separately, especially the number of bytes delivered in each request. Using the timestamps you already have, you can check whether a particular file tends to stop around the same point or whether the interruptions are random.&lt;br /&gt;&lt;br /&gt;2. In Apache, %X helps identify when a connection was closed before the response was completed. For the byte count, I would rather use mod_logio and log %O. It is more appropriate for determining how much data was actually transmitted. This is also useful with X-Sendfile, since Apache is the component actually delivering the file.&lt;br /&gt;&lt;br /&gt;3. With gzip, I would not compare against the physical size of the file on disk. I would compare each URL against other normal transfers of that same URL, also taking the encoding into account.&lt;br /&gt;&lt;br /&gt;You can even take the logs and give them to ChatGPT or Claude and ask it to separate the requests by file, determine the normal size for each one, and highlight transfers that were smaller than expected.&lt;br /&gt;&lt;br /&gt;If the log volume is large, I would do something even simpler. Ask ChatGPT or Claude to generate a small Python or PHP script that you can run locally. The script can read the logs and generate a CSV containing only the relevant information, such as date, time, IP, file, HTTP status, bytes sent, user-agent, and any other useful fields available in the logs.&lt;br /&gt;&lt;br /&gt;It is much easier to analyze that CSV than to work directly with thousands or millions of log lines.&lt;br /&gt;&lt;br /&gt;You can also cross-reference the IP addresses with the lastip field in the mdl_user table and try to identify which learners were involved. The IP cannot be treated as an absolute identifier because an entire company may be behind the same NAT, and a learner can also change IP addresses, but combining IP, timestamp, and the other access information can usually narrow the investigation considerably.&lt;br /&gt;&lt;br /&gt;Since you still have 16 incidents within the log retention period, I would start with those and generate a separate CSV containing only a few minutes before and after each incident.&lt;br /&gt;&lt;br /&gt;4. When I mentioned caching JS and CSS files, I was referring to static files. Those files are not personalized by Moodle. If someone who is not logged in can download that JS or CSS file, that alone does not create a security issue.&lt;br /&gt;&lt;br /&gt;The requests that really depend on the session, enrolment, permissions, or any other validation performed by Moodle are the ones that need to remain protected. Those cannot simply receive a shared public cache without taking authorization into account.&lt;br /&gt;&lt;br /&gt;So it is not a matter of putting all mod_scorm content into cache. You need to separate what is genuinely static from what still needs to be protected by Moodle.&lt;br /&gt;&lt;br /&gt;5. The learner also does not necessarily download the same file from Moodle every time they navigate inside that SCORM package. On the first access, the browser downloads it and keeps it in the local cache. During that learner&#039;s navigation, the file will normally be reused locally while the cache remains valid.&lt;br /&gt;&lt;br /&gt;The problem is different learners.&lt;br /&gt;&lt;br /&gt;Learner A accesses the course and fetches the file from Moodle. Learner B later accesses the same SCORM and fetches the same file from Moodle again. Learner C does the same thing.&lt;br /&gt;&lt;br /&gt;In this scenario, CloudFront is basically acting as another game of telephone between the learner and Moodle. You added another connection in the path, but you are not taking advantage of one of the main benefits of a CDN, which is serving the same file to multiple learners without having to go back to Moodle.&lt;br /&gt;&lt;br /&gt;And that additional connection also becomes another place where the transfer can be interrupted.&lt;br /&gt;&lt;br /&gt;6. Regarding MP4, I have worked with video and CloudFront for many years. I was actually a co-founder of Videofront. The name came from combining Video with CloudFront. I have also worked with other CDNs such as Bunny and Cloudflare, and personally I consider Cloudflare very poor for this kind of video workload.&lt;br /&gt;&lt;br /&gt;CloudFront can store the complete MP4 and then respond to visitors using the required byte ranges. The more delicate point is the first access, while that file is not yet present in that CloudFront cache.&lt;br /&gt;&lt;br /&gt;If you make the origin ignore the Range request, that first learner may end up receiving the entire file. Once CloudFront has the complete object cached, subsequent requests can be served by the CDN using the required ranges.&lt;br /&gt;&lt;br /&gt;So there is that side effect for the first uncached request.&lt;br /&gt;&lt;br /&gt;For that reason, I would not remove Range support indiscriminately. I would test that behavior first, especially because Safari and video players rely heavily on byte-range support for playback and seeking.&lt;/p&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=482420#p1910469</guid>
</item>
<item>
<title>Certificate not generated until student accesses it – Moodle 4.5.13</title>
<link>https://moodle.org/mod/forum/discuss.php?d=482333#p1910910</link>
<pubDate>Tue, 15 Sep 2026 13:06:31 GMT</pubDate>
<description>by Mark Nelson &lt;br /&gt;&lt;br /&gt;&lt;p class=&quot;translationhash&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Hi Bastián and anyone wondering why the behaviour changed, please see further discussion in &lt;a href=&quot;https://github.com/mdjnelson/moodle-mod_customcert/issues/904&quot; class=&quot;_blanktarget&quot;&gt;https://github.com/mdjnelson/moodle-mod_customcert/issues/904&lt;/a&gt;.&lt;/p&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=482333#p1910910</guid>
</item>
<item>
<title>Problem with deleting directories on NFS in FreeBSD: new idea</title>
<link>https://moodle.org/mod/forum/discuss.php?d=482552#p1910906</link>
<pubDate>Tue, 15 Sep 2026 11:11:01 GMT</pubDate>
<description>by Marcin K. &lt;br /&gt;&lt;br /&gt;&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;The topic I&#039;ve started five years ago was locked, so I&#039;m starting the new one. The original one can be found here: &lt;a href=&quot;https://moodle.org/mod/forum/discuss.php?d=426781&quot;&gt;https://moodle.org/mod/forum/discuss.php?d=426781&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;white-space:pre-wrap;&quot;&gt;I returned to this topic after five years because the issue of deleting directories on an NFS-mounted resource kept bothering me when removing them from within Midnight Commander. The cause of the problem is the same: during the deletion of a directory’s contents, the handle changes, which causes &lt;code style=&quot;white-space:pre-wrap;&quot;&gt;readdir&lt;/code&gt; to stop returning results, and the items inside the directory are no longer removed. As a result, the directory cannot be deleted because “it is not empty”.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;white-space:pre-wrap;&quot;&gt;How did I deal with this in MC? I simply pressed F8 again and again until the directory was successfully removed. So I figured that such a mechanism could be implemented in PHP as well, and I modified the &lt;code style=&quot;white-space:pre-wrap;&quot;&gt;remove_dir()&lt;/code&gt; function in &lt;code style=&quot;white-space:pre-wrap;&quot;&gt;moodlelib.php&lt;/code&gt; into the following form (the additional code in bold):&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/**&lt;/code&gt;&lt;br /&gt;&lt;code&gt; * Delete directory or only its
    content&lt;/code&gt;&lt;br /&gt;&lt;code&gt; *&lt;/code&gt;&lt;br /&gt;&lt;code&gt; * @param string $dir directory
    path&lt;/code&gt;&lt;br /&gt;&lt;code&gt; * @param bool $contentonly&lt;/code&gt;&lt;br /&gt;&lt;code&gt; * @return
    bool success, true also if dir does not
    exist&lt;/code&gt;&lt;br /&gt;&lt;code&gt; */&lt;/code&gt;&lt;br /&gt;&lt;code&gt;function remove_dir($dir,
    $contentonly=false&lt;strong&gt;, $attempt=1&lt;/strong&gt;) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    if (!is_dir($dir))
    {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        // Nothing to do.&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        return
    true;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    }&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;    if (!$contentonly) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        // Start by renaming
    the directory; this will guarantee that other processes don&#039;t write to
    it&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        // while it is in the process of being
    deleted.&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        $tempdir =
    rename_to_unused_name($dir);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        if ($tempdir)
    {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;            // If the rename was successful then delete
    the $tempdir instead.&lt;/code&gt;&lt;br /&gt;&lt;code&gt;            $dir =
    $tempdir;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        // If the rename
    fails, we will continue through and attempt to delete the
    directory&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        // without renaming it since that is
    likely to at least delete most of the files.&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    }&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;    if (!$handle = opendir($dir)) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        return
    false;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    $result =
    true;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    while (false!==($item = readdir($handle)))
    {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        if ($item != &#039;.&#039; &amp;amp;&amp;amp; $item != &#039;..&#039;)
    {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;            if (is_dir($dir.&#039;/&#039;.$item))
    {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;                $result = remove_dir($dir.&#039;/&#039;.$item)
    &amp;amp;&amp;amp; $result;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;            } else {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;   
                $result = unlink($dir.&#039;/&#039;.$item) &amp;amp;&amp;amp;
    $result;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;            }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;       
    }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;   
    closedir($handle);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    if ($contentonly) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; 
          clearstatcache(); // Make sure file stat cache is properly
    invalidated.&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        return $result;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;   
    }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    $result = rmdir($dir); // If anything left the result
    will be false, no need for &amp;amp;&amp;amp; $result.&lt;/code&gt;&lt;br /&gt;&lt;code&gt;   
    clearstatcache(); // Make sure file stat cache is properly
    invalidated.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;    if (!$result &amp;amp;&amp;amp; is_dir($dir) &amp;amp;&amp;amp; $attempt &amp;lt; 10)
    {&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;code&gt;        // The directory still exists despite the rmdir()
    attempt – most likely&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;code&gt;        // readdir() did not return a
    complete list (see: known issue with the&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;code&gt;        // NFS
    client on FreeBSD). Try again from scratch.&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;code&gt;        return
    remove_dir($dir, false, $attempt + 1);&lt;/code&gt;&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;&lt;strong&gt;    }&lt;/strong&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;    return $result;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;white-space:pre-wrap;&quot;&gt;So if the &lt;code style=&quot;white-space:pre-wrap;&quot;&gt;$result&lt;/code&gt; of &lt;code style=&quot;white-space:pre-wrap;&quot;&gt;rmdir($dir)&lt;/code&gt; is false, another attempt to remove the directory is made. The &lt;code style=&quot;white-space:pre-wrap;&quot;&gt;$attempt&lt;/code&gt; parameter limits the number of recursive iterations so that the function doesn’t keep trying indefinitely. A value of 10 is probably too high, but if &lt;code style=&quot;white-space:pre-wrap;&quot;&gt;rmdir()&lt;/code&gt; succeeds, no further attempts will be made anyway. One could also check the reason why &lt;code style=&quot;white-space:pre-wrap;&quot;&gt;rmdir()&lt;/code&gt; failed, but that would only slow the function down.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;white-space:pre-wrap;&quot;&gt;To the best of my knowledge, the function in this form does not cause any issues, apart from increasing execution time in the specific situation it was modified for — that is, when deleting a directory fails. When everything goes according to plan, no additional attempts are made.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;white-space:pre-wrap;&quot;&gt;I’m not a specialist, so I’d appreciate any comments regarding the modified function. Is there a chance it could appear in this form, or in a similar form following the same idea, in the official Moodle code?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;white-space:pre-wrap;&quot;&gt;With Regards,&lt;br /&gt;Marcin&lt;/span&gt;&lt;span style=&quot;white-space:pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;white-space:pre-wrap;&quot;&gt;PS. I&#039;ve tested the modified function in Moodle, but I also wrote some scripts to test it outside the Moodle environment.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Script 1 [creates a directory structure that triggers errors when deleting it using the original function or in MC]:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;#!/bin/sh&lt;/code&gt;&lt;br /&gt;&lt;code&gt;set -eu&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;BASE_DIR=&quot;/mnt/nfs/nas_delete/katalog_testowy&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;# Generowanie 48 | 96 alfanumerycznych znaków bezpieczne pod FreeBSD&lt;/code&gt;&lt;br /&gt;&lt;code&gt;gen_name() {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    LC_ALL=C tr -dc &#039;a-zA-Z0-9&#039; &amp;lt; /dev/urandom | dd bs=96 count=1 2&amp;gt;/dev/null&lt;/code&gt;&lt;br /&gt;&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;populate_dir() {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    target_dir=&quot;$1&quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    create_subdirs=&quot;$2&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;    mkdir -p &quot;$target_dir&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;    # Tworzenie 24 plików po 4kB / 1MB / 32MB / 4MB / ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    i=1&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    while [ &quot;$i&quot; -le 24 ]; do&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        fname=$(gen_name)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        if [ -n &quot;$fname&quot; ]; then&lt;/code&gt;&lt;br /&gt;&lt;code&gt;            dd if=/dev/urandom of=&quot;$target_dir/$fname&quot; bs=1m count=4 status=none&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        fi&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        i=$((i + 1))&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    done&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;    # Tworzenie 8 podkatalogów (jeśli parametr wynosi 1)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    if [ &quot;$create_subdirs&quot; -eq 1 ]; then&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        j=1&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        while [ &quot;$j&quot; -le 8 ]; do&lt;/code&gt;&lt;br /&gt;&lt;code&gt;            dname=$(gen_name)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;            if [ -n &quot;$dname&quot; ]; then&lt;/code&gt;&lt;br /&gt;&lt;code&gt;                subdir=&quot;$target_dir/$dname&quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;                mkdir -p &quot;$subdir&quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;                echo &quot;$subdir&quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;            fi&lt;/code&gt;&lt;br /&gt;&lt;code&gt;            j=$((j + 1))&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        done&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    fi&lt;/code&gt;&lt;br /&gt;&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mkdir -p &quot;$BASE_DIR&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;# Poziom 1&lt;/code&gt;&lt;br /&gt;&lt;code&gt;level1_dirs=$(populate_dir &quot;$BASE_DIR&quot; 1)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;# Poziom 2&lt;/code&gt;&lt;br /&gt;&lt;code&gt;level2_dirs=&quot;&quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;for d1 in $level1_dirs; do&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    sub_dirs=$(populate_dir &quot;$d1&quot; 1)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    level2_dirs=&quot;$level2_dirs $sub_dirs&quot;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;done&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;# Poziom 3&lt;/code&gt;&lt;br /&gt;&lt;code&gt;for d2 in $level2_dirs; do&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    populate_dir &quot;$d2&quot; 0&lt;/code&gt;&lt;br /&gt;&lt;code&gt;done&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;echo &quot;Struktura została pomyślnie utworzona w $BASE_DIR.&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Script 2 [functions copied from &lt;em&gt;moodlelib.php&lt;/em&gt; to test the deletion procedure outside the Moodle codebase]:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;#!/usr/local/bin/php&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;?php&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$BASE_DIR=&quot;/mnt/nfs/nas_delete/katalog_testowy&quot;;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/**&lt;/code&gt;&lt;br /&gt;&lt;code&gt; * Renames a file or directory to a unique name within the same directory.&lt;/code&gt;&lt;br /&gt;&lt;code&gt; *&lt;/code&gt;&lt;br /&gt;&lt;code&gt; * This function is designed to avoid any potential race conditions, and select an unused name.&lt;/code&gt;&lt;br /&gt;&lt;code&gt; *&lt;/code&gt;&lt;br /&gt;&lt;code&gt; * @param string $filepath Original filepath&lt;/code&gt;&lt;br /&gt;&lt;code&gt; * @param string $prefix Prefix to use for the temporary name&lt;/code&gt;&lt;br /&gt;&lt;code&gt; * @return string|bool New file path or false if failed&lt;/code&gt;&lt;br /&gt;&lt;code&gt; * @since Moodle 3.10&lt;/code&gt;&lt;br /&gt;&lt;code&gt; */&lt;/code&gt;&lt;br /&gt;&lt;code&gt;function rename_to_unused_name(string $filepath, string $prefix = &#039;_temp_&#039;) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    $dir = dirname($filepath);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    $basename = $dir . &#039;/&#039; . $prefix;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    $limit = 0;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    while ($limit &amp;lt; 100) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        // Select a new name based on a random number.&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        $newfilepath = $basename . md5(mt_rand());&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;        // Attempt a rename to that new name.&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        if (@rename($filepath, $newfilepath)) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;            return $newfilepath;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        }&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;        // The first time, do some sanity checks, maybe it is failing for a good reason and there&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        // is no point trying 100 times if so.&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        if ($limit === 0 &amp;amp;&amp;amp; (!file_exists($filepath) || !is_writable($dir))) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;            return false;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        $limit++;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    return false;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/**&lt;/code&gt;&lt;br /&gt;&lt;code&gt; * Delete directory or only its content&lt;/code&gt;&lt;br /&gt;&lt;code&gt; *&lt;/code&gt;&lt;br /&gt;&lt;code&gt; * @param string $dir directory path&lt;/code&gt;&lt;br /&gt;&lt;code&gt; * @param bool $contentonly&lt;/code&gt;&lt;br /&gt;&lt;code&gt; * @return bool success, true also if dir does not exist&lt;/code&gt;&lt;br /&gt;&lt;code&gt; */&lt;/code&gt;&lt;br /&gt;&lt;code&gt;function remove_dir($dir, $contentonly=false, $attempt=1) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    if (!is_dir($dir)) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        // Nothing to do.&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        return true;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    }&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;    if (!$contentonly) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        // Start by renaming the directory; this will guarantee that other processes don&#039;t write to it&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        // while it is in the process of being deleted.&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        $tempdir = rename_to_unused_name($dir);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        if ($tempdir) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;            // If the rename was successful then delete the $tempdir instead.&lt;/code&gt;&lt;br /&gt;&lt;code&gt;            $dir = $tempdir;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        echo &quot;tmp dir: $dir&quot;,&quot;\n&quot;;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        // If the rename fails, we will continue through and attempt to delete the directory&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        // without renaming it since that is likely to at least delete most of the files.&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    }&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;    if (!$handle = opendir($dir)) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        return false;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    $result = true;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    while (false!==($item = readdir($handle))) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        if ($item != &#039;.&#039; &amp;amp;&amp;amp; $item != &#039;..&#039;) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;            if (is_dir($dir.&#039;/&#039;.$item)) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;                $result = remove_dir($dir.&#039;/&#039;.$item) &amp;amp;&amp;amp; $result;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;            } else {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;                $result = unlink($dir.&#039;/&#039;.$item) &amp;amp;&amp;amp; $result;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;            }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    closedir($handle);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    if ($contentonly) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        clearstatcache(); // Make sure file stat cache is properly invalidated.&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        return $result;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    $result = rmdir($dir); // If anything left the result will be false, no need for &amp;amp;&amp;amp; $result.&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    clearstatcache(); // Make sure file stat cache is properly invalidated.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;    if (!$result &amp;amp;&amp;amp; is_dir($dir) &amp;amp;&amp;amp; $attempt &amp;lt; 10) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        // The directory still exists despite the rmdir() attempt – most likely&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        // readdir() did not return a complete list (see: known issue with the&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        // NFS client on FreeBSD). Try again from scratch.&lt;/code&gt;&lt;br /&gt;&lt;code&gt;        return remove_dir($dir, false, $attempt + 1);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;    }&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;    return $result;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;remove_dir($BASE_DIR);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;?&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;white-space:pre-wrap;&quot;&gt;Output of script 2:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style=&quot;white-space:pre-wrap;&quot;&gt;tmp dir: /mnt/nfs/nas_delete/_temp_b53102476e9d8c4492fae934cfa2cd9f&lt;br /&gt;PHP Warning:  rmdir(/mnt/nfs/nas_delete/_temp_b53102476e9d8c4492fae934cfa2cd9f): Directory not empty in /home/marcinkk/skrypt_testowy_nfs_delete.sh on line 84&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_cd58fd232cc2f011e28bbf217fd48c43&lt;br /&gt;PHP Warning:  rmdir(/mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_cd58fd232cc2f011e28bbf217fd48c43): Directory not empty in /home/marcinkk/skrypt_testowy_nfs_delete.sh on line 84&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_bad3c94f6dfbc576138dd69f4855fabb&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_bad3c94f6dfbc576138dd69f4855fabb/_temp_683bc9582a298da27ced5210d11b70c2&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_bad3c94f6dfbc576138dd69f4855fabb/_temp_266eb34c11423b4676907ee57277413c&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_bad3c94f6dfbc576138dd69f4855fabb/_temp_66b559d4b39cf57e86697d4d17a1264a&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_bad3c94f6dfbc576138dd69f4855fabb/_temp_eb42429d8c4313c5b36d52ba80cb7477&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_bad3c94f6dfbc576138dd69f4855fabb/_temp_2a0ac1f68841a9d557dd59fbbc40a67b&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_bad3c94f6dfbc576138dd69f4855fabb/_temp_7f194022f3eceae169c7c04a17df1d2a&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_bad3c94f6dfbc576138dd69f4855fabb/_temp_4b5cef3764fd95cb5df68013ab40a934&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_bad3c94f6dfbc576138dd69f4855fabb/_temp_37a35888cc8b602e10d32f8134910e1b&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_cc03cbb818b797531c7f85f98cf4303e&lt;br /&gt;PHP Warning:  rmdir(/mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_cc03cbb818b797531c7f85f98cf4303e): Directory not empty in /home/marcinkk/skrypt_testowy_nfs_delete.sh on line 84&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_b46a31acc1f8bcd5b3f7b37227dd27f2&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_b46a31acc1f8bcd5b3f7b37227dd27f2/_temp_d74430a0f913965ad0c11015743951c9&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_b46a31acc1f8bcd5b3f7b37227dd27f2/_temp_89b821797ee93390b4e253d8b030f80a&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_b46a31acc1f8bcd5b3f7b37227dd27f2/_temp_c9eb6b24eddfa29ec2fa6c33428ea4f3&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_b46a31acc1f8bcd5b3f7b37227dd27f2/_temp_031194de4dfe57a242c184bf6b9b1cad&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_b46a31acc1f8bcd5b3f7b37227dd27f2/_temp_01689fff44bacd051ab2281e41d06408&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_b46a31acc1f8bcd5b3f7b37227dd27f2/_temp_9f14d007b3e9f805bfee27f1414c8b05&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_b46a31acc1f8bcd5b3f7b37227dd27f2/_temp_48f2d58e09dbc41d444d457589d71bfe&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_b46a31acc1f8bcd5b3f7b37227dd27f2/_temp_88b9328f69ebadaafa48e3695abcea40&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_9552ceb0fe8690c2018d044b8a5aee56&lt;br /&gt;PHP Warning:  rmdir(/mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_9552ceb0fe8690c2018d044b8a5aee56): Directory not empty in /home/marcinkk/skrypt_testowy_nfs_delete.sh on line 84&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_450445c36bf881cc1cbd93e986841efa&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_450445c36bf881cc1cbd93e986841efa/_temp_e97edb20ff96a5fce08d21686d813fa1&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_450445c36bf881cc1cbd93e986841efa/_temp_6817f74c5c3fd628c6320caee516b51a&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_450445c36bf881cc1cbd93e986841efa/_temp_b0648f5e58bc561ae20ae144efffa712&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_450445c36bf881cc1cbd93e986841efa/_temp_9e613bbbc70203469fecab8fe155615c&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_450445c36bf881cc1cbd93e986841efa/_temp_15f4e2b90153a68a2206f2a162f91c19&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_450445c36bf881cc1cbd93e986841efa/_temp_b8eddb39bef2e557403792b7595ad674&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_450445c36bf881cc1cbd93e986841efa/_temp_69dcde8c9069a71205a3ffdd159c2de9&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_450445c36bf881cc1cbd93e986841efa/_temp_df909c93ee09909f730e42722466dfeb&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_5d4a914c887e5792280518418ea70778&lt;br /&gt;PHP Warning:  rmdir(/mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_5d4a914c887e5792280518418ea70778): Directory not empty in /home/marcinkk/skrypt_testowy_nfs_delete.sh on line 84&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_64d8919edd5b5a10e11d2e0f1a4d8bd1&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_64d8919edd5b5a10e11d2e0f1a4d8bd1/_temp_32f7700e1b50865788e5744f01e8ce22&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_64d8919edd5b5a10e11d2e0f1a4d8bd1/_temp_74142fe642d7722fa293d0980ee131f8&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_64d8919edd5b5a10e11d2e0f1a4d8bd1/_temp_de6c4911fea6f0997bdba72863f0ba4d&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_64d8919edd5b5a10e11d2e0f1a4d8bd1/_temp_d7f68df844a6ae5b2ec209aa64aa68b8&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_64d8919edd5b5a10e11d2e0f1a4d8bd1/_temp_4daecb876f8c8e3670376fb87e64a7d3&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_64d8919edd5b5a10e11d2e0f1a4d8bd1/_temp_a541f92b27daabfdbd7ebdf62af6db08&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_64d8919edd5b5a10e11d2e0f1a4d8bd1/_temp_00ec27566d49b21305015089457490f5&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_64d8919edd5b5a10e11d2e0f1a4d8bd1/_temp_2d1d6ebcaac974d51223e854f803fac3&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_e6870cedb8b8c10a249c4976bd1619d5&lt;br /&gt;PHP Warning:  rmdir(/mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_e6870cedb8b8c10a249c4976bd1619d5): Directory not empty in /home/marcinkk/skrypt_testowy_nfs_delete.sh on line 84&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_6e3995d9fb92318a03922ea95789e9aa&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_6e3995d9fb92318a03922ea95789e9aa/_temp_79b598fa8256b1fec5a1181aca297421&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_6e3995d9fb92318a03922ea95789e9aa/_temp_d1e083318347181aec8c15790c8f97f6&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_6e3995d9fb92318a03922ea95789e9aa/_temp_54cdadc5c69aca631f2d93bd59047622&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_6e3995d9fb92318a03922ea95789e9aa/_temp_02c21c7545873ad47e792b8bf17c2e29&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_6e3995d9fb92318a03922ea95789e9aa/_temp_38e5c2a54701518212383d37caa67cdc&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_6e3995d9fb92318a03922ea95789e9aa/_temp_ab8c9c3f2d580e46cf9f3433a68a4ac9&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_6e3995d9fb92318a03922ea95789e9aa/_temp_0577482fb41003056615fea22a9c48be&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_6e3995d9fb92318a03922ea95789e9aa/_temp_5a66f8fae1fb29a57286413e3ebfbae3&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_37ace85886108b66bfa735dd44fdea00&lt;br /&gt;PHP Warning:  rmdir(/mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_37ace85886108b66bfa735dd44fdea00): Directory not empty in /home/marcinkk/skrypt_testowy_nfs_delete.sh on line 84&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_462d50fd24ebf429566485043cecb3cb&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_462d50fd24ebf429566485043cecb3cb/_temp_81fb655982b5d8db091ac56f4e62e45d&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_462d50fd24ebf429566485043cecb3cb/_temp_af566c30092516fb75a55d534c072898&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_462d50fd24ebf429566485043cecb3cb/_temp_72a8dc4f741e3d00b64ca4b681a656d0&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_462d50fd24ebf429566485043cecb3cb/_temp_bae8d51fa1f829de6462638303ce868c&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_462d50fd24ebf429566485043cecb3cb/_temp_35af330a38fe88b29397b24e074a2d20&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_462d50fd24ebf429566485043cecb3cb/_temp_8aaebf50c53224576e9e40c0ffa85356&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_462d50fd24ebf429566485043cecb3cb/_temp_c99884c7d2087f58c3350b856ea678db&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_462d50fd24ebf429566485043cecb3cb/_temp_4c8d68eb7f7ee2351615ef91f64fd0e6&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_70f07bc7fac7b29d97d65d4c2f97741e&lt;br /&gt;PHP Warning:  rmdir(/mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_70f07bc7fac7b29d97d65d4c2f97741e): Directory not empty in /home/marcinkk/skrypt_testowy_nfs_delete.sh on line 84&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_3face4f9b8830c537e5644abfdb8361f&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_3face4f9b8830c537e5644abfdb8361f/_temp_d4cf55c55be7265441ea9220e794314a&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_3face4f9b8830c537e5644abfdb8361f/_temp_a5ef57215e744d3382d5ca0e733961db&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_3face4f9b8830c537e5644abfdb8361f/_temp_2de94b9aa50c2e3390f98cd6726ad7b1&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_3face4f9b8830c537e5644abfdb8361f/_temp_320c00741d6c8d25af84989f380d36f0&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_3face4f9b8830c537e5644abfdb8361f/_temp_3fb97a0d9322b063a770b205c05dd654&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_3face4f9b8830c537e5644abfdb8361f/_temp_8d3a7d4a0a0ae6a86fdc1d4afa01e3cf&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_3face4f9b8830c537e5644abfdb8361f/_temp_4c5d7e39ab6ffa2322828c7f0eb4bbc0&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_3face4f9b8830c537e5644abfdb8361f/_temp_ea62f2c2c69b2bde012f5941955cb50b&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_739654658fec35f2c18641cb140cd7c7&lt;br /&gt;PHP Warning:  rmdir(/mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_739654658fec35f2c18641cb140cd7c7): Directory not empty in /home/marcinkk/skrypt_testowy_nfs_delete.sh on line 84&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_48500998037fa01958a9b72abf6f8605&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_48500998037fa01958a9b72abf6f8605/_temp_cfe134e86c41ee6b2ee10cc4594f3c10&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_48500998037fa01958a9b72abf6f8605/_temp_a02cdeb9906da0d76b07e5c6df09f515&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_48500998037fa01958a9b72abf6f8605/_temp_19d1b6ef67e97152db1f13ea4355ff40&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_48500998037fa01958a9b72abf6f8605/_temp_63d8d6bf2ba39ec9464726e28651688f&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_48500998037fa01958a9b72abf6f8605/_temp_cba43efe16ca473be722682e469bc2c2&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_48500998037fa01958a9b72abf6f8605/_temp_8725a76b22fdd59baaff596b7935a58f&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_48500998037fa01958a9b72abf6f8605/_temp_d1022fbd207631032e366f9568e8488e&lt;br /&gt;tmp dir: /mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_48500998037fa01958a9b72abf6f8605/_temp_a1e5a0835826e97b409b9750af1988fb&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;white-space:pre-wrap;&quot;&gt;As you can see, PHP reports the problem several times:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;white-space:pre-wrap;&quot;&gt;&lt;code style=&quot;white-space:pre-wrap;&quot;&gt;PHP Warning: rmdir(/mnt/nfs/nas_delete/_temp_384cfbf87014b5dbeb5f09bff88e2f2b/_temp_739654658fec35f2c18641cb140cd7c7): Directory not empty in /home/marcinkk/skrypt_testowy_nfs_delete.sh on line 84&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;white-space:pre-wrap;&quot;&gt;but in the end the directory, along with its contents, is successfully removed from disk.&lt;/span&gt;&lt;/p&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=482552#p1910906</guid>
</item>
<item>
<title>Critical 	The default user role &quot;Authenticated user&quot; is incorrectly defined!</title>
<link>https://moodle.org/mod/forum/discuss.php?d=482266#p1910889</link>
<pubDate>Mon, 14 Sep 2026 20:43:06 GMT</pubDate>
<description>by Daniel Thies &lt;br /&gt;&lt;br /&gt;&lt;p&gt;To clarify why this is reported this way. It is not necessarily wrong to not have green checks on the security report. The report is showing potential risks that are associated with the standard user role. Whether those risks are real depends what privileges your users need and your data policy. The capability dataprivacy:requestdelete gives the user the ability to request the deletion of their data which is ok if that is the site policy (is required potentially by GDPR a for commercial site). However, if there is a reason not to allow a user to delete records (most school systems), then it risks deleting data that violates the policy. You should review capabilities to see if they are appropriate, but do not have to change them to make the report happy.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=482266#p1910889</guid>
</item>
<item>
<title>Generico Two (G2) - the next generation widget system for Moodle</title>
<link>https://moodle.org/mod/forum/discuss.php?d=482517#p1910761</link>
<pubDate>Thu, 10 Sep 2026 10:30:06 GMT</pubDate>
<description>by Séverin TERRIER &lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;text_to_html&quot;&gt;Hi Justin,&lt;br /&gt;
&lt;br /&gt;
Thank you for this new plugin, that seems very nice &lt;img class=&quot;icon emoticon&quot; alt=&quot;smile&quot; title=&quot;smile&quot; src=&quot;https://moodle.org/theme/image.php/moodleorg/core/1789465999/s/smiley&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
A question (to speed translations) : do you know if some strings are the same (identifier and content) between Generico and Generico Two, and could be directly reused (and imported in AMOS) ?&lt;br /&gt;
&lt;br /&gt;
Séverin&lt;/div&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=482517#p1910761</guid>
</item>
<item>
<title>Tenth Moodle Community Meeting on Collaborative Development in the France and Japan Moodle Communities</title>
<link>https://moodle.org/mod/forum/discuss.php?d=482537#p1910845</link>
<pubDate>Mon, 14 Sep 2026 07:30:19 GMT</pubDate>
<description>by Harald Schnurbusch &lt;br /&gt;&lt;br /&gt;&lt;p&gt;Dear Community, &lt;/p&gt;
&lt;p&gt;On 29 September, 2026, the 10th Moodle Community Meeting will take place on moodle.org. Don Hinkelman and Nicolas Martignoni will talk about Collaborative Development in the France and Japan Moodle Communities. Here is all the information:&lt;/p&gt;
&lt;p&gt;Date: Tuesday, 29 September 2026&lt;br /&gt;Time: 1-2p.m. UTC&lt;br /&gt;Meeting room: &lt;a href=&quot;https://moodle.org/mod/bigbluebuttonbn/view.php?id=8821&quot;&gt;BigBlueButton on moodle.org&lt;/a&gt;&lt;br /&gt;Guests: Don Hinkelman (&lt;a href=&quot;https://moodlejapan.org/?lang=en&quot;&gt;Moodle Association of Japan&lt;/a&gt;), Nicolas Martignoni (&lt;a href=&quot;https://moodlebox.net/en/&quot;&gt;MoodleBox&lt;/a&gt;)&lt;br /&gt;Note: The meeting wil be recorded and is available through the BBB activity linked above.&lt;/p&gt;
&lt;p&gt;Topic: Collaborative Development in the France and Japan Moodle Communities&lt;/p&gt;
&lt;p&gt;One of the largest MoodleMoots this year, was held this July in Tours, France, and featured two projects that educators in the Japanese and French communities will collaborate on. Developers of the Video Assessment Module from Sapporo Gakuin University in Japan were invited to Tours to present their innovations in performance-based rubric assessment. From this, funding by both the Japanese and French educational ministries will push video assessment into the AI era. In addition, the President of MoodleMoot France and key developer of &lt;a href=&quot;https://moodlebox.net/en/&quot;&gt;MoodleBox&lt;/a&gt;, Nicholas Martignoni, will highlight a key needed feature: MoodleBox-to-MoodleBox course synchronization that both the Moodle Association of Japan and the Moodle Association Francophone will build together. &lt;/p&gt;
&lt;p&gt;See you on the 29th!&lt;/p&gt;
&lt;p&gt;Best&lt;br /&gt;Harald&lt;br /&gt;(Moodle Community Meetings orga team)&lt;/p&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=482537#p1910845</guid>
</item>
<item>
<title>I can&#039;t download the adaptable theme from the marketplace (403 message)</title>
<link>https://moodle.org/mod/forum/discuss.php?d=482290#p1909750</link>
<pubDate>Mon, 17 Aug 2026 12:14:02 GMT</pubDate>
<description>by Gareth Barnard &lt;br /&gt;&lt;br /&gt;&lt;p class=&quot;translationhash&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Dear Mimi,&lt;/p&gt;
&lt;p&gt;I&#039;ve not listed the Adaptable theme on Moodle Marketplace (please see &lt;a href=&quot;https://moodle.atlassian.net/wiki/external/ZTZjOTcwNmFmZmE3NDJjNmE3NzM4NWY1ZjU0YmJiNGY&quot; class=&quot;_blanktarget&quot;&gt;https://moodle.atlassian.net/wiki/external/ZTZjOTcwNmFmZmE3NDJjNmE3NzM4NWY1ZjU0YmJiNGY&lt;/a&gt;), however it is still available from GitHub, &lt;a href=&quot;https://github.com/gjbarnard/moodle-theme_adaptable&quot; class=&quot;_blanktarget&quot;&gt;https://github.com/gjbarnard/moodle-theme_adaptable&lt;/a&gt; and listed on &lt;a href=&quot;https://camp-registry.org/plugin/theme_adaptable.html&quot; class=&quot;_blanktarget&quot;&gt;https://camp-registry.org/plugin/theme_adaptable.html&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Kind regards,&lt;/p&gt;
&lt;p&gt;Gareth&lt;/p&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=482290#p1909750</guid>
</item>
<item>
<title>Unenrol inactive after&quot; - Moodle Brasil</title>
<link>https://moodle.org/mod/forum/discuss.php?d=482470#p1910862</link>
<pubDate>Mon, 14 Sep 2026 12:43:04 GMT</pubDate>
<description>by Eduardo Kraus &lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;https://moodle.org/user/index.php?id=5&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;https://moodle.org/user/index.php?id=5&lt;/a&gt; I checked pages 7, 8, and 9, and all users have a last login from a looong time ago... So the last site access is also the last course access.&lt;/p&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=482470#p1910862</guid>
</item>
<item>
<title>Moodle 4.5.14 Shadow Release</title>
<link>https://moodle.org/mod/forum/discuss.php?d=482540#p1910860</link>
<pubDate>Mon, 14 Sep 2026 12:08:42 GMT</pubDate>
<description>by Ken Task &lt;br /&gt;&lt;br /&gt;&lt;p&gt;There was an announcement in Developers forum about an unscheduled minor release&lt;br /&gt;coming 14 September.&lt;/p&gt;
&lt;p&gt;&quot;General developer forum -&amp;gt; HEADS UP: Unscheduled minor release coming 14 September&lt;br /&gt;I am writing to inform you that an unscheduled release will be taking place on Monday, 14 September, which will include Moodle LMS versions 5.2.3, 5.1.7, 5.0.10 and 4.5.13.&quot;&lt;/p&gt;
&lt;p&gt;Just did a git pull on a 4.5 code directory.&lt;/p&gt;
&lt;p&gt;Did acquire quite a few things:&lt;br /&gt;Fast-forward&lt;br /&gt; .upgradenotes/&lt;a title=&quot;Auto-link to Moodle Tracker&quot; href=&quot;https://moodle.atlassian.net/browse/MDL-88833&quot;&gt;MDL-88833&lt;/a&gt;-2026052708560431.yml       |   9 -&lt;br /&gt; &lt;a title=&quot;Auto-link to Moodle Tracker&quot; href=&quot;https://moodle.atlassian.net/browse/MDL-89384&quot;&gt;MDL-89384&lt;/a&gt;-2026080511520494.yml                     |   8 +&lt;br /&gt; &lt;a title=&quot;Auto-link to Moodle Tracker&quot; href=&quot;https://moodle.atlassian.net/browse/MDL-89384&quot;&gt;MDL-89384&lt;/a&gt;-2026080511591999.yml                     |   8 +&lt;br /&gt; UPGRADING.md                                       |  38 +++-&lt;br /&gt; admin/environment.xml                              | 205 +++++++++++++++++++++&lt;br /&gt; .../tests/behat/apply_presets.feature              |   6 +-&lt;br /&gt; .../tests/behat/revert_changes.feature             |   2 +-&lt;br /&gt; .../dataprivacy/templates/request_details.mustache |   4 +-&lt;br /&gt; .../tests/behat/manage_data_requests.feature       |  15 ++&lt;br /&gt; admin/tool/usertours/templates/tourstep.mustache   |   2 +-&lt;br /&gt; .../editor/classes/external/generate_image.php     |   7 +-&lt;br /&gt; .../condition/profile/classes/condition.php        |   4 +&lt;br /&gt; .../condition/profile/tests/condition_test.php     |   5 +&lt;br /&gt; ...block_recentlyaccessedcourses_dashboard.feature |  40 +++-&lt;br /&gt; comment/comment.js                                 |  51 ++---&lt;br /&gt; comment/lib.php                                    |   8 +-&lt;br /&gt; comment/tests/behat/accessibility.feature          |  41 +++++&lt;br /&gt; course/classes/management_renderer.php             |   5 +-&lt;br /&gt; course/format/UPGRADING.md                         |  16 ++&lt;br /&gt; .../amd/build/local/courseeditor/mutations.min.js  | Bin 15416 -&amp;gt; 16472 bytes&lt;br /&gt; .../build/local/courseeditor/mutations.min.js.map  | Bin 45951 -&amp;gt; 49657 bytes&lt;br /&gt; .../amd/build/local/courseindex/section.min.js     | Bin 4764 -&amp;gt; 5715 bytes&lt;br /&gt; .../amd/build/local/courseindex/section.min.js.map | Bin 11544 -&amp;gt; 14170 bytes&lt;br /&gt; .../format/amd/src/local/courseeditor/mutations.js |  52 ++++++&lt;br /&gt; course/format/amd/src/local/courseindex/section.js |  41 +++++&lt;br /&gt; .../format/templates/local/courseindex/cm.mustache |   8 +-&lt;br /&gt; .../templates/local/courseindex/section.mustache   |  10 +-&lt;br /&gt; course/renderer.php                                |  10 +-&lt;br /&gt; .../templates/local/activitychooser/error.mustache |   4 +-&lt;br /&gt; .../templates/local/activitychooser/help.mustache  |   4 +-&lt;br /&gt; course/tests/behat/activity_chooser.feature        |  14 ++&lt;br /&gt; customfield/amd/build/form.min.js                  | Bin 8220 -&amp;gt; 8340 bytes&lt;br /&gt; customfield/amd/build/form.min.js.map              | Bin 17419 -&amp;gt; 17611 bytes&lt;br /&gt; customfield/amd/src/form.js                        |   2 +&lt;br /&gt; customfield/externallib.php                        |   2 +&lt;br /&gt; customfield/templates/list.mustache                |   2 +-&lt;br /&gt; customfield/tests/behat/edit_categories.feature    |  19 ++&lt;br /&gt; enrol/manual/manage.php                            |   2 +&lt;br /&gt; grade/classes/external/get_gradable_users.php      |   2 +-&lt;br /&gt; .../tests/behat/incomplete_marking_guide.feature   |  57 ++++++&lt;br /&gt; grade/import/xml/import.php                        |  47 +----&lt;br /&gt; grade/import/xml/index.php                         |  12 +-&lt;br /&gt; grade/import/xml/lib.php                           |  41 +++++&lt;br /&gt; grade/import/xml/tests/lib_test.php                |  72 ++++++++&lt;br /&gt; grade/tests/external/get_gradable_users_test.php   |  49 +++++&lt;br /&gt; install/lang/es_mx/install.php                     |   2 +-&lt;br /&gt; install/lang/gd/install.php                        |   2 +-&lt;br /&gt; install/lang/he/install.php                        |   4 +&lt;br /&gt; install/lang/sq/admin.php                          |  44 +++++&lt;br /&gt; install/lang/sq/error.php                          |  52 ++++++&lt;br /&gt; install/lang/sq/install.php                        |  78 ++++++++&lt;br /&gt; install/lang/sq/moodle.php                         |   6 +-&lt;br /&gt; lang/en/course.php                                 |   1 +&lt;br /&gt; lang/en/courseformat.php                           |   8 +&lt;br /&gt; lang/en/customfield.php                            |   1 +&lt;br /&gt; lang/en/reportbuilder.php                          |   1 +&lt;br /&gt; lib/UPGRADING.md                                   |  20 +-&lt;br /&gt; lib/amd/build/sortable_list.min.js                 | Bin 14357 -&amp;gt; 14396 bytes&lt;br /&gt; lib/amd/build/sortable_list.min.js.map             | Bin 42729 -&amp;gt; 43320 bytes&lt;br /&gt; lib/amd/src/sortable_list.js                       |   6 +&lt;br /&gt; lib/authlib.php                                    |   8 +-&lt;br /&gt; lib/behat/classes/partial_named_selector.php       |   4 +-&lt;br /&gt; lib/classes/output/core_renderer.php               |   4 +-&lt;br /&gt; lib/classes/task/scheduled_task.php                |   2 +-&lt;br /&gt; lib/editor/tiny/amd/build/editor.min.js            | Bin 10423 -&amp;gt; 11437 bytes&lt;br /&gt; lib/editor/tiny/amd/build/editor.min.js.map        | Bin 32576 -&amp;gt; 36214 bytes&lt;br /&gt; lib/editor/tiny/amd/src/editor.js                  |  98 +++++++---&lt;br /&gt; .../tests/behat/modal_help_dialogue_focus.feature  |  77 ++++++++&lt;br /&gt; lib/form/tests/behat/collapsible_sections.feature  |  66 +++++++&lt;br /&gt; lib/form/tests/behat/dates.feature                 |  20 ++&lt;br /&gt; .../moodle-form-dateselector-debug.js              | Bin 15467 -&amp;gt; 19605 bytes&lt;br /&gt; .../moodle-form-dateselector-min.js                | Bin 7502 -&amp;gt; 8238 bytes&lt;br /&gt; .../moodle-form-dateselector.js                    | Bin 15467 -&amp;gt; 19605 bytes&lt;br /&gt; .../moodle-form-shortforms-debug.js                | Bin 4053 -&amp;gt; 5978 bytes&lt;br /&gt; .../moodle-form-shortforms-min.js                  | Bin 1174 -&amp;gt; 1329 bytes&lt;br /&gt; .../moodle-form-shortforms.js                      | Bin 3787 -&amp;gt; 5715 bytes&lt;br /&gt; lib/form/yui/src/dateselector/js/calendar.js       |  12 +-&lt;br /&gt; lib/form/yui/src/dateselector/js/dateselector.js   |  83 +++++++++&lt;br /&gt; lib/form/yui/src/shortforms/js/shortforms.js       | 117 +++++++-----&lt;br /&gt; lib/form/yui/src/shortforms/meta/shortforms.json   |   3 +-&lt;br /&gt; lib/moodlelib.php                                  |  30 ++-&lt;br /&gt; lib/table/classes/flexible_table.php               |  30 ++-&lt;br /&gt; lib/templates/activity_header.mustache             |   2 +-&lt;br /&gt; lib/templates/block.mustache                       |   2 +-&lt;br /&gt; lib/templates/modal.mustache                       |   2 +-&lt;br /&gt; lib/tests/authlib_test.php                         |  48 +++++&lt;br /&gt; lib/tests/behat/behat_general.php                  |  16 ++&lt;br /&gt; .../fakeplugins/auth/passwordpolicyprobe/lib.php   |  44 +++++&lt;br /&gt; .../auth/passwordpolicyprobe/version.php           |  29 +++&lt;br /&gt; lib/tests/moodlelib_test.php                       |  14 +-&lt;br /&gt; lib/tests/task/scheduled_task_test.php             |  42 ++++-&lt;br /&gt; lib/tests/task/send_login_notifications_test.php   |  19 +-&lt;br /&gt; login/lib.php                                      |   2 +-&lt;br /&gt; mod/assign/tests/behat/submission_comments.feature |   2 +-&lt;br /&gt; mod/book/tests/behat/toc_skiplink_keyboard.feature |  35 ++++&lt;br /&gt; mod/forum/classes/local/exporters/post.php         |   4 +&lt;br /&gt; .../forum_discussion_nested_v2_first_post.mustache |   2 +-&lt;br /&gt; mod/forum/templates/forum_discussion_post.mustache |   4 +-&lt;br /&gt; .../templates/local/grades/view_grade.mustache     |  10 +-&lt;br /&gt; mod/forum/tests/behat/grade_forum.feature          |  16 ++&lt;br /&gt; mod/forum/tests/exporters_post_test.php            |   3 +&lt;br /&gt; mod/forum/tests/externallib_test.php               |  26 ++-&lt;br /&gt; mod/lesson/tests/behat/lesson_course_reset.feature |  12 +-&lt;br /&gt; .../tests/behat/lesson_group_override.feature      |  24 +--&lt;br /&gt; mod/lesson/tests/behat/lesson_practice.feature     |  23 ++-&lt;br /&gt; mod/lesson/tests/behat/lesson_retake.feature       |  21 +--&lt;br /&gt; .../tests/generator/behat_mod_lesson_generator.php |  42 +++++&lt;br /&gt; mod/lesson/tests/generator/lib.php                 | 112 +++++++++++&lt;br /&gt; mod/lesson/tests/generator_test.php                |  52 ++++++&lt;br /&gt; .../statistics/tests/quiz_attempt_deleted_test.php |   1 +&lt;br /&gt; .../tests/quiz_attempt_submitted_test.php          |   1 +&lt;br /&gt; .../tests/behat/subsection_courseindex.feature     |  88 +++++++++&lt;br /&gt; .../tests/behat/subsection_coursepage.feature      |  13 +-&lt;br /&gt; .../bank/history/classes/question_history_view.php |   8 +-&lt;br /&gt; question/type/multichoice/renderer.php             |   9 +-&lt;br /&gt; .../type/multichoice/tests/walkthrough_test.php    |  27 +++&lt;br /&gt; reportbuilder/classes/form/audience.php            |   8 +-&lt;br /&gt; reportbuilder/classes/local/audiences/base.php     |   2 +-&lt;br /&gt; .../classes/local/helpers/user_profile_fields.php  |   8 +-&lt;br /&gt; reportbuilder/classes/local/report/column.php      |  35 +++-&lt;br /&gt; .../local/systemreports/report_schedules.php       |   3 +-&lt;br /&gt; .../classes/table/custom_report_table.php          |   8 +-&lt;br /&gt; .../classes/table/system_report_table.php          |   8 +-&lt;br /&gt; reportbuilder/lib.php                              |   8 +-&lt;br /&gt; reportbuilder/tests/behat/columneditor.feature     |  13 ++&lt;br /&gt; reportbuilder/tests/behat/schedules.feature        |   2 +&lt;br /&gt; .../googledocs/templates/upload_dialogue.mustache  |   4 +-&lt;br /&gt; theme/boost/scss/moodle/blocks.scss                |   4 +&lt;br /&gt; theme/boost/scss/moodle/courseindex.scss           |  15 ++&lt;br /&gt; theme/boost/scss/moodle/modules.scss               |  10 +&lt;br /&gt; theme/boost/style/moodle.css                       |  23 +++&lt;br /&gt; theme/classic/style/moodle.css                     |  23 +++&lt;br /&gt; theme/classic/tests/behat/blacklist.json           |   3 +-&lt;br /&gt; user/tests/behat/edit_user_enrolment.feature       |  87 +++++++++&lt;br /&gt; version.php                                        |   4 +-&lt;br /&gt; 135 files changed, 2398 insertions(+), 328 deletions(-)&lt;br /&gt; delete mode 100644 .upgradenotes/&lt;a title=&quot;Auto-link to Moodle Tracker&quot; href=&quot;https://moodle.atlassian.net/browse/MDL-88833&quot;&gt;MDL-88833&lt;/a&gt;-2026052708560431.yml&lt;br /&gt; create mode 100644 &lt;a title=&quot;Auto-link to Moodle Tracker&quot; href=&quot;https://moodle.atlassian.net/browse/MDL-89384&quot;&gt;MDL-89384&lt;/a&gt;-2026080511520494.yml&lt;br /&gt; create mode 100644 &lt;a title=&quot;Auto-link to Moodle Tracker&quot; href=&quot;https://moodle.atlassian.net/browse/MDL-89384&quot;&gt;MDL-89384&lt;/a&gt;-2026080511591999.yml&lt;br /&gt; create mode 100644 comment/tests/behat/accessibility.feature&lt;br /&gt; create mode 100644 grade/grading/form/guide/tests/behat/incomplete_marking_guide.feature&lt;br /&gt; create mode 100644 grade/import/xml/tests/lib_test.php&lt;br /&gt; create mode 100644 install/lang/sq/admin.php&lt;br /&gt; create mode 100644 install/lang/sq/error.php&lt;br /&gt; create mode 100644 install/lang/sq/install.php&lt;br /&gt; create mode 100644 lib/editor/tiny/tests/behat/modal_help_dialogue_focus.feature&lt;br /&gt; create mode 100644 lib/form/tests/behat/collapsible_sections.feature&lt;br /&gt; create mode 100644 lib/tests/fixtures/fakeplugins/auth/passwordpolicyprobe/lib.php&lt;br /&gt; create mode 100644 lib/tests/fixtures/fakeplugins/auth/passwordpolicyprobe/version.php&lt;br /&gt; create mode 100644 mod/book/tests/behat/toc_skiplink_keyboard.feature&lt;br /&gt; create mode 100644 mod/subsection/tests/behat/subsection_courseindex.feature&lt;/p&gt;
&lt;p&gt;fgrep &#039;$release&#039; version.php&lt;br /&gt;$release  = &#039;4.5.14 (Build: 20260914)&#039;;    // Human-friendly version name&lt;/p&gt;
&lt;p&gt;&#039;SoS&#039;, Ken&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=482540#p1910860</guid>
</item>
<item>
<title>Unenrol inactive after&quot; - Moodle Brasil</title>
<link>https://moodle.org/mod/forum/discuss.php?d=482470#p1910847</link>
<pubDate>Mon, 14 Sep 2026 07:55:32 GMT</pubDate>
<description>by Séverin TERRIER &lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;text_to_html&quot;&gt;I suppose that some people could be enrolled to some courses, subscribed to some forums, receive email of messages without connecting, and it was ok for them.&lt;br /&gt;
&lt;br /&gt;
Of course, one can argue that having send two mails explaining they needed to connect before having they account suspended (and deleted ?) is enough. And it&#039;s perhaps true for most people.&lt;/div&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=482470#p1910847</guid>
</item>
<item>
<title>HEADS UP: Unscheduled minor release coming 14 September</title>
<link>https://moodle.org/mod/forum/discuss.php?d=482529#p1910809</link>
<pubDate>Fri, 11 Sep 2026 07:51:49 GMT</pubDate>
<description>by Matt Porritt &lt;br /&gt;&lt;br /&gt;&lt;div&gt;Hi everyone,&lt;/div&gt;
&lt;div&gt;I am writing to inform you that an unscheduled release will be taking place on &lt;strong&gt;Monday, 14 September&lt;/strong&gt;, which will include Moodle LMS versions &lt;strong&gt;5.2.3, 5.1.7, 5.0.10 and 4.5.13&lt;/strong&gt;.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;The most recent 5.2.2 and 5.1.6 releases contained an issue where a grade penalty calculation fix was carried out, but did not &lt;a href=&quot;https://moodledev.io/general/development/process/gradebook-calculation-changes&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;freeze&lt;/a&gt; affected grades to prevent them changing to the corrected values if a re-calculation was triggered (&lt;a href=&quot;https://moodle.org/mod/forum/discuss.php?d=482393&quot; target=&quot;_blank&quot; rel=&quot;noreferrer noopener&quot;&gt;please see this post for more details&lt;/a&gt;). Since then, we have prioritised fixing this issue, so that affected assignment grades can be successfully frozen and the grades can be repaired. We have now completed the fix, as well as thorough testing to ensure the solution is sound and does not introduce any further side effects.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Given the importance of grades, we are undertaking this unscheduled release to ensure the fix is available as soon as possible. This is to minimise the impact on sites either waiting for the fix before upgrading, or for those directly affected (having already upgraded).&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Due to the nature of our release process, all bug and security fixes that have been completed since the last minor release must also be included in the release. This is why all security supported versions are included in this release and not just the two versions affected by the original issue, as two security issues have been fixed during this period and will also be included. &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Thank you to all of our community members that contributed to these releases.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Matt Porritt&lt;br /&gt;Product Director, Platform Solutions&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;img class=&quot;img-fluid&quot; src=&quot;https://moodle.org/pluginfile.php/55/mod_forum/post/1910809/5023_release_graph.png&quot; alt=&quot;Release support timelines for supported LMS releases&quot; width=&quot;1200&quot; height=&quot;312&quot; /&gt;&lt;/div&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr style=&quot;border:1px solid #a2a9b1;&quot;&gt;
&lt;th style=&quot;padding:3px;background-color:rgba(0,0,0,0.05);border:1px solid #dee2e6;&quot; scope=&quot;col&quot;&gt;Version&lt;/th&gt;
&lt;th style=&quot;padding:3px;background-color:rgba(0,0,0,0.05);border:1px solid #dee2e6;&quot; scope=&quot;col&quot;&gt;Release status&lt;/th&gt;
&lt;th style=&quot;padding:3px;background-color:rgba(0,0,0,0.05);border:1px solid #dee2e6;&quot; scope=&quot;col&quot;&gt;Initial release&lt;/th&gt;
&lt;th style=&quot;padding:3px;background-color:rgba(0,0,0,0.05);border:1px solid #dee2e6;&quot; scope=&quot;col&quot;&gt;General support ends&lt;/th&gt;
&lt;th style=&quot;padding:3px;background-color:rgba(0,0,0,0.05);border:1px solid #dee2e6;&quot; scope=&quot;col&quot;&gt;Security support ends&lt;/th&gt;
&lt;/tr&gt;
&lt;tr style=&quot;border:1px solid #a2a9b1;&quot;&gt;
&lt;td style=&quot;padding:3px;border:1px solid #dee2e6;&quot;&gt;4.5 (LTS)&lt;/td&gt;
&lt;td style=&quot;padding:3px;background-color:#239cae;border:1px solid #dee2e6;&quot;&gt;Current security&lt;/td&gt;
&lt;td style=&quot;padding:3px;border:1px solid #dee2e6;&quot;&gt;7 Oct 2024&lt;/td&gt;
&lt;td style=&quot;padding:3px;border:1px solid #dee2e6;&quot;&gt;6 Oct 2025&lt;/td&gt;
&lt;td style=&quot;padding:3px;border:1px solid #dee2e6;&quot;&gt;4 Oct 2027&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;border:1px solid #a2a9b1;&quot;&gt;
&lt;td style=&quot;padding:3px;border:1px solid #dee2e6;&quot;&gt;5.0&lt;/td&gt;
&lt;td style=&quot;padding:3px;background-color:#239cae;border:1px solid #dee2e6;&quot;&gt;Current security&lt;/td&gt;
&lt;td style=&quot;padding:3px;border:1px solid #dee2e6;&quot;&gt;14 Apr 2025&lt;/td&gt;
&lt;td style=&quot;padding:3px;border:1px solid #dee2e6;&quot;&gt;20 Apr 2026&lt;/td&gt;
&lt;td style=&quot;padding:3px;border:1px solid #dee2e6;&quot;&gt;5 Oct 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;border:1px solid #a2a9b1;&quot;&gt;
&lt;td style=&quot;padding:3px;border:1px solid #dee2e6;&quot;&gt;5.1&lt;/td&gt;
&lt;td style=&quot;padding:3px;background-color:#f98012;border:1px solid #dee2e6;&quot;&gt;Current stable&lt;/td&gt;
&lt;td style=&quot;padding:3px;border:1px solid #dee2e6;&quot;&gt;6 Oct 2025&lt;/td&gt;
&lt;td style=&quot;padding:3px;border:1px solid #dee2e6;&quot;&gt;5 Oct 2026&lt;/td&gt;
&lt;td style=&quot;padding:3px;border:1px solid #dee2e6;&quot;&gt;19 Apr 2027&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;border:1px solid #a2a9b1;&quot;&gt;
&lt;td style=&quot;padding:3px;border:1px solid #dee2e6;&quot;&gt;5.2&lt;/td&gt;
&lt;td style=&quot;padding:3px;background-color:#f98012;border:1px solid #dee2e6;&quot;&gt;Current stable&lt;/td&gt;
&lt;td style=&quot;padding:3px;border:1px solid #dee2e6;&quot;&gt;20 Apr 2026&lt;/td&gt;
&lt;td style=&quot;padding:3px;border:1px solid #dee2e6;&quot;&gt;19 Apr 2027&lt;/td&gt;
&lt;td style=&quot;padding:3px;border:1px solid #dee2e6;&quot;&gt;4 Oct 2027&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;border:1px solid #a2a9b1;&quot;&gt;
&lt;td style=&quot;padding:3px;border:1px solid #dee2e6;&quot;&gt;5.3 (LTS)&lt;/td&gt;
&lt;td style=&quot;padding:3px;background-color:#9cbd50;border:1px solid #dee2e6;&quot;&gt;Future stable&lt;/td&gt;
&lt;td style=&quot;padding:3px;border:1px solid #dee2e6;&quot;&gt;5 Oct 2026&lt;/td&gt;
&lt;td style=&quot;padding:3px;border:1px solid #dee2e6;&quot;&gt;4 Oct 2027&lt;/td&gt;
&lt;td style=&quot;padding:3px;border:1px solid #dee2e6;&quot;&gt;1 Oct 2029&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=482529#p1910809</guid>
</item>
<item>
<title>Download Whole Forum</title>
<link>https://moodle.org/mod/forum/discuss.php?d=469716#p1885742</link>
<pubDate>Fri, 05 Sep 2025 03:28:15 GMT</pubDate>
<description>by Al Charl &lt;br /&gt;&lt;br /&gt;&lt;p&gt;Students have created their own post in a forum with text and files. I’m trying to download everything from the forum, both the text of posts and the files students uploaded. I&#039;m not sure if is possible. I’ve seen the “Export” option, which gives me all the text, but I can’t find a “Download all submissions” or “Download all attachments” option.&lt;/p&gt;
&lt;p&gt;Is there a way to get all files at once, or do I need to do it manually for each post and file? Any tips, plugins, or workarounds would be appreciated.&lt;/p&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=469716#p1885742</guid>
</item>
<item>
<title>Seven Major Challenges with Moodle Assignments</title>
<link>https://moodle.org/mod/forum/discuss.php?d=471217#p1891863</link>
<pubDate>Tue, 09 Dec 2025 19:07:42 GMT</pubDate>
<description>by Richard van Iwaarden &lt;br /&gt;&lt;br /&gt;&lt;p class=&quot;MsoNormal&quot;&gt;After administrating Moodle for two decades, I present this overview as a Christmas gift to Moodle.org. This compilation distills twenty years of experience viewed through a strictly educational lens. It is my firm belief that if Moodle succeeds in resolving these issues, it will elevate the platform from its current standing into a truly superior product.&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;The following points outline the most significant friction points encountered when utilizing the Moodle assignment interface within a university setting.&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;1. The Invisibility of Grades in Previous Attempts (&lt;a title=&quot;Auto-link to Moodle Tracker&quot; href=&quot;https://moodle.atlassian.net/browse/MDL-87214&quot;&gt;MDL-87214&lt;/a&gt;, &lt;a title=&quot;Auto-link to Moodle Tracker&quot; href=&quot;https://moodle.atlassian.net/browse/MDL-87211&quot;&gt;MDL-87211&lt;/a&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;Tracking a student&#039;s academic trajectory is notoriously difficult when utilizing rubrics across multiple attempts. The interface obscures the grade of a specific prior attempt, rendering it invisible to the instructor. Furthermore, the user interface terminology is misleading; it claims an instructor is &quot;editing&quot; a previous attempt when they are merely viewing it, and displays &quot;Not Graded&quot; even when a grade has, in fact, been assigned. &lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;2. Inability to Configure Deadlines per Attempt&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;Moodle lacks the functionality to pre-configure distinct deadlines for separate attempts within a single assignment structure.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;margin-top:0cm;&quot; type=&quot;disc&quot;&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;The Dilemma:&lt;/span&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt; If an instructor wishes to set a deadline of April 1st for the first attempt and April 7th for the second, the system offers no native solution.&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;The Workarounds:&lt;/span&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt; Instructors must either clutter their gradebook by creating two separate assignments or manually edit the assignment settings between dates.&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;The Consequence:&lt;/span&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt; Editing the deadline retroactively extends the time for the first attempt, forcing teachers to manually close that attempt for all students, resulting in significant administrative overhead.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;3. Irreversibility of Accidental Attempt Creation&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;There is currently no mechanism to delete an attempt once it has been opened, regardless of whether it was created in error. Even system administrators are unable to undo this action. This is particularly problematic in academic environments where students are strictly limited to a specific number of attempts per year; an accidental click by a teacher effectively consumes a student&#039;s valid opportunity without their request.&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;4. Disregard for Marking Workflow Protocols (&lt;a title=&quot;Auto-link to Moodle Tracker&quot; href=&quot;https://moodle.atlassian.net/browse/MDL-87064&quot;&gt;MDL-87064&lt;/a&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;The system fails to respect the status of the marking workflow when a new attempt is initiated.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;margin-top:0cm;&quot; type=&quot;disc&quot;&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;The Scenario:&lt;/span&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt; In collaborative grading environments, an instructor may determine a student has failed and decide to grant a new attempt immediately, even if they are not yet ready to finalize the grade release.&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;The Failure:&lt;/span&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt; Granting the new attempt inadvertently releases the partial grade to the student immediately, overriding the marking workflow setting that indicates the grade should not yet be released. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;5. Absence of Rich Text Formatting in Rubrics (&lt;a title=&quot;Auto-link to Moodle Tracker&quot; href=&quot;https://moodle.atlassian.net/browse/MDL-77404&quot;&gt;MDL-77404&lt;/a&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;While comprehensive feedback is paramount for student learning, the rubric grading method lacks basic text formatting capabilities. The interface prevents the insertion of line breaks or paragraphs within criteria fields or feedback text. Consequently, extensive feedback is compressed into a single, dense sentence. This lack of visual structure makes the feedback difficult to digest and diminishes its ability to motivate student improvement. &lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;6. Lack of Knock-Out Criteria Functionality (&lt;a title=&quot;Auto-link to Moodle Tracker&quot; href=&quot;https://moodle.atlassian.net/browse/MDL-87065&quot;&gt;MDL-87065&lt;/a&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;The rubric system does not support &quot;knock-out criteria&quot;—mandatory requirements that a student must pass to succeed in the assignment.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;margin-top:0cm;&quot; type=&quot;disc&quot;&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;The Issue:&lt;/span&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt; It is impossible to configure the system so that failure in specific criteria results in an overall failure; instead, high scores in other areas automatically compensate for these deficits.&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;The Workaround:&lt;/span&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt; While instructors can attempt to manipulate scores using negative points, this is merely a makeshift patch for a fundamental structural flaw. &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;7. Loss of Student Access to Submissions Post-Course (&lt;a title=&quot;Auto-link to Moodle Tracker&quot; href=&quot;https://moodle.atlassian.net/browse/MDL-86530&quot;&gt;MDL-86530&lt;/a&gt;, &lt;a title=&quot;Auto-link to Moodle Tracker&quot; href=&quot;https://moodle.atlassian.net/browse/MDL-86642&quot;&gt;MDL-86642&lt;/a&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;In a typical four-year academic trajectory, students engage with numerous courses sequentially. While a course is in session, students maintain an active enrolment. However, once a course concludes, maintaining this active status is undesirable; it results in obsolete deadlines cluttering the calendar and subjects the student to irrelevant notifications regarding group enrolments or questionnaires.&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;To maintain hygiene in the system, students are typically transitioned out of the active state—either by being unenrolled entirely or by having their enrolment status changed to suspended or not current.&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;The Issue:&lt;/span&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt; Regardless of the method chosen to deactivate the student, the result is the same: the student loses the ability to access their own submitted work.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;margin-top:0cm;&quot; type=&quot;disc&quot;&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;Role-Structure Failure:&lt;/span&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt; We have attempted to solve this by configuring guest access and explicitly enabling the capability within the role-structure for users to view their own submissions. Despite the setting existing within the Moodle architecture, the functionality is non-operational.&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;Status Limitations:&lt;/span&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt; Similarly, students who remain in the course with a suspended or not current status are inexplicably blocked from viewing their past assignment submissions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;Thanks for everything and merry Christmas to you all!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;Richard.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span lang=&quot;en-us&quot; xml:lang=&quot;en-us&quot;&gt;&lt;img class=&quot;img-fluid&quot; style=&quot;margin-left:auto;margin-right:auto;&quot; src=&quot;https://moodle.org/pluginfile.php/41/mod_forum/post/1891863/3692220.png&quot; alt=&quot;3692220.png&quot; width=&quot;136&quot; height=&quot;136&quot; /&gt;&lt;/span&gt;&lt;/p&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=471217#p1891863</guid>
</item>
<item>
<title>Seven Major Challenges with Moodle Assignments</title>
<link>https://moodle.org/mod/forum/discuss.php?d=471217#p1892242</link>
<pubDate>Mon, 15 Dec 2025 18:54:26 GMT</pubDate>
<description>by Richard van Iwaarden &lt;br /&gt;&lt;br /&gt;&lt;p&gt;That is quite a list of questions, Rick &lt;img class=&quot;icon emoticon&quot; alt=&quot;smile&quot; title=&quot;smile&quot; src=&quot;https://moodle.org/theme/image.php/moodleorg/core/1789465999/s/smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;To provide some context, I spent 12.5 years as a Moodle administrator in secondary education (ages 12–18). I won&#039;t digress into the complexities of the Dutch educational system, but suffice it to say, it is intricate.&lt;/p&gt;
&lt;p&gt;I have now been working in a university setting for nearly a decade. In my experience, the higher the level of education, the stricter the regulations become. While I may not always agree with them from a pedagogical standpoint, these rules are mandatory and must be adhered to.&lt;/p&gt;
&lt;p&gt;As I mentioned in my initial post, we are dealing with specific constraints regarding due dates and attempts—for example, a deadline of April 1st for the first attempt and April 7th for the resit. By national law, students must know exactly when assignments are due and are entitled to two separate attempts. Furthermore, lecturers have a ten-day grading window, with the strict stipulation that students must receive their grades at least five days before their second attempt. Students also have a legal right to review their graded work to learn from previous errors. In some universities, students are even required to pay a fee for a second attempt.&lt;/p&gt;
&lt;p&gt;This combination of national legislation and institutional rights necessitates a strictly tailored process. This is why I maintain that using multiple assignment instances for different attempts is untenable; it isn&#039;t just about cluttering the gradebook.&lt;/p&gt;
&lt;p&gt;Consider a scenario where a student gains access to a video only after passing a specific assignment. With a single assignment instance, you simply set the restricted access to &#039;available if a passing grade is received for Assignment X.&#039; However, if you copy this assignment four times to cover four attempts over two years, you have to reconfigure the conditional access into a labyrinth of logic. It would look something like: &lt;i&gt;&#039;Access if Assignment 1 passed OR Assignment 2 passed (Year 1) OR Assignment 3 passed...&#039;&lt;/i&gt; and so on.&lt;/p&gt;
&lt;p&gt;The same issue applies to course progress. With four unique assignments, progress is easily tracked in 25% increments. If you set up 16 instances (4 assignments × 4 attempts), accurate tracking becomes a massive administrative burden. If one assignment changes, you must edit four instances and repair complex AND/OR statements for resource access.&lt;/p&gt;
&lt;p&gt;Moodle’s built-in &#039;multiple attempts&#039; feature exists for a reason. I often feel Moodle focuses too heavily on smaller schools or lower education levels where regulations are looser, and duplicating assignments is a viable workaround. In my environment, however, the regulations are far too strict for that approach.&lt;/p&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=471217#p1892242</guid>
</item>
<item>
<title>Documentation of new features - Please create french screenshots each 6 months</title>
<link>https://moodle.org/mod/forum/discuss.php?d=482489#p1910652</link>
<pubDate>Tue, 08 Sep 2026 14:29:44 GMT</pubDate>
<description>by Séverin TERRIER &lt;br /&gt;&lt;br /&gt;&lt;p&gt;Hi,&lt;/p&gt;
&lt;div class=&quot;css-1vhan7i&quot;&gt;
&lt;div class=&quot;ak-renderer-document&quot;&gt;
&lt;p&gt;On each new Moodle version, a new documentation is created, with pages documenting new features, with screenshosts.&lt;br /&gt;To help french speaking / reading people understand the new features, translation of theses pages are made in french.&lt;/p&gt;
&lt;p&gt;Since years, Mary Cooch (and Helen Foster) made french screenshots juste after making screenshots in english (just switching language), and put them in the french version of the documentation. It helps a lots, and ensure same information is captured, with same dimensions… I could then create the rest of the documentation pages.&lt;/p&gt;
&lt;p&gt;Now that they don’t work on this anymore, could this be included in the work done when creating new documentation, each 6 months, by the person doing these screenshots ?&lt;/p&gt;
&lt;p&gt;It would be really helpful for french community.&lt;/p&gt;
&lt;p&gt;I&#039;ve created &lt;a title=&quot;Auto-link to Moodle Tracker&quot; href=&quot;https://moodle.atlassian.net/browse/MDLSITE-8500&quot;&gt;MDLSITE-8500&lt;/a&gt; for that.&lt;/p&gt;
&lt;p&gt;Thanks a lot,&lt;br /&gt;Séverin&lt;/p&gt;
&lt;p&gt;PS : for french people, the &lt;a href=&quot;https://moodle.org/mod/forum/discuss.php?d=482488&quot;&gt;same message is here&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=482489#p1910652</guid>
</item>
<item>
<title>Critical 	The default user role &quot;Authenticated user&quot; is incorrectly defined!</title>
<link>https://moodle.org/mod/forum/discuss.php?d=482266#p1910814</link>
<pubDate>Fri, 11 Sep 2026 13:46:44 GMT</pubDate>
<description>by Richard van Iwaarden &lt;br /&gt;&lt;br /&gt;&lt;p&gt;Hi Daniel,&lt;/p&gt;
&lt;p&gt;Can you post a screenshot? I can&#039;t find anything that looks like what you are describing.&lt;/p&gt;
&lt;p&gt;Or if you mean this:&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;img-fluid&quot; src=&quot;https://moodle.org/pluginfile.php/7301/mod_forum/post/1910814/image.png&quot; alt=&quot;image.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;That link just sends you to a general page describing risks: &lt;a href=&quot;https://docs.moodle.org/502/en/Risks&quot; class=&quot;_blanktarget&quot;&gt;https://docs.moodle.org/502/en/Risks&lt;/a&gt;&lt;/p&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=482266#p1910814</guid>
</item>
<item>
<title>Re: How to delete messages?</title>
<link>https://moodle.org/mod/forum/discuss.php?d=436157#p1800155</link>
<pubDate>Thu, 22 Jun 2023 07:04:17 GMT</pubDate>
<description>by Helen Foster &lt;br /&gt;&lt;br /&gt;&lt;p&gt;Thanks Esdras for sharing your plugin tool for deleting messaging conversations.&lt;/p&gt;

&lt;p&gt;For anyone having problems with lots of old messages, you may wish to vote for adding a feature to delete messages older than a specified date, &lt;a title=&quot;Auto-link to Moodle Tracker&quot; href=&quot;https://moodle.atlassian.net/browse/MDL-18749&quot;&gt;MDL-18749&lt;/a&gt;, or a feature enabling users to delete all messages in one action, &lt;a title=&quot;Auto-link to Moodle Tracker&quot; href=&quot;https://moodle.atlassian.net/browse/MDL-66998&quot;&gt;MDL-66998&lt;/a&gt;.&lt;/p&gt;
</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=436157#p1800155</guid>
</item>
<item>
<title>Re: How to delete messages?</title>
<link>https://moodle.org/mod/forum/discuss.php?d=436157#p1800870</link>
<pubDate>Wed, 28 Jun 2023 00:10:35 GMT</pubDate>
<description>by Esdras Caleb Oliveira Silva &lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;text_to_html&quot;&gt;In the next time you can use this&lt;br /&gt;
&lt;a href=&quot;https://moodle.org/plugins/tool_deletemessage&quot; class=&quot;_blanktarget&quot;&gt;https://moodle.org/plugins/tool_deletemessage&lt;/a&gt;&lt;/div&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=436157#p1800870</guid>
</item>
<item>
<title>Re: How to delete messages?</title>
<link>https://moodle.org/mod/forum/discuss.php?d=436157#p1755452</link>
<pubDate>Sun, 10 Jul 2022 15:03:57 GMT</pubDate>
<description>by Ian L &lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;text_to_html&quot;&gt;For anyone else who has the message problem. I finally got the message drawer to open up by deleting &lt;em&gt;bulk user messages&lt;/em&gt; in phpmyadmin. I went from 3454 in the private messages to 1784. And it now works. I can see the messages I&#039;ve sent from my profile and I can message users by clicking on their profile.&lt;/div&gt;&lt;div class=&quot;text_to_html&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;text_to_html&quot;&gt;I did something like:&lt;/div&gt;&lt;div class=&quot;text_to_html&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;text_to_html&quot;&gt;&lt;div class=&quot;text_to_html&quot;&gt;SELECT * FROM `mdl_messages` WHERE useridfrom = 2 ORDER BY `mdl_messages`.`fullmessagehtml` DESC&lt;/div&gt;&lt;div class=&quot;text_to_html&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;text_to_html&quot;&gt;And then scrolled down and deleted 100-250 at a time. I was thinking of deleting older personal messages too but it&#039;s working now.&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://moodle.org/pluginfile.php/50/mod_forum/post/1755452/image.png&quot; alt=&quot;&quot; class=&quot;img-fluid&quot; /&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;</description>
<guid isPermaLink="true">https://moodle.org/mod/forum/discuss.php?d=436157#p1755452</guid>
</item>
</channel>
</rss>