","Indent/outdent plugins should not usetag as inappropriate, setting a class 'indent' seems to be the best.",100 MDL-44225,"Atto: Focus lost in the Equation editor after inserting a symbol","Focus lost in the Equation editor after inserting a symbol, the cursor should remain at the same place to insert multiple symbols at once. ",5 MDL-44226,"Atto: Simplifying the 'accessibility checker' to display sensible content","Simplifying the 'accessibility checker' to display a sensible content rather than the entire node .... ",13 MDL-44227,"Atto: The screenreader helper/accessibility checker should always display something for missing images","The 'screenreader helper' should always display something for missing images. Currently images without an alt tag are reported but not identifiable.",8 MDL-44228,"Atto: Being able to see the list of plugins available in the settings UI","Being able to see the list of plugins available in the settings UI. See TinyMCE for an example. ",8 MDL-44240,"Atto: Combine plugins indent/outdent into one.","Combine plugins indent/outdent into one. ",5 MDL-44241,"Atto: Combine plugins link/unlink into one","Combine plugins link/unlink into one. ",8 MDL-44243,"Atto: Prettifying the HTML when switching to HTML view","Prettifying the HTML when switching to HTML view. We can use js-beautify (MIT License) for this purpose.",5 MDL-44298,"Add 'HTML templating' features to Atto text editor","Editing-teachers and non-editing teachers have the capacity to create HTML templates using the TinyMCE HTML templating feature (Moodle 2.4 to 2.6) Moodle 2.7 is set to have a new Atto text editor http://docs.moodle.org/dev/Editor_2.7 replace TinyMCE editor from Moodle 2.7 onwards. Is it possible to incorporate ""HTML templating"" as a feature in the Atto text editor to enable them to continue to use the HTML templating functionality. The following video demonstrates the TinyMCE ""HTML templating"" functionality Video - Moodle tinyMCE Editor 'HTML templates' and 'Font Awesome' icons (Moodle 2.4 to 2.6) http://youtu.be/5FUPRVwgKmo This video demonstrates the type of configuration features the Atto HTML templates would need to have. Video - Configuring Moodle tinyMCE Editor 'HTML templates' and 'Font Awesome' icons (Moodle 2.4 to 2.6) http://youtu.be/_gZVOlTaWUg Note: Example TinyMCE Configuration instructions to set up the feature are also included in the video summary. Note: Please refer to https://tracker.moodle.org/browse/MDL-38742 for prior discussion on the topic of HTML templating via the TinyMCE text editor.",100 MDL-44316,"Change the tag API to include the contextid and component when tagging an item.","We want to update the database table 'tag_instance' so that the contextid and component are stored. This will allow for easy deletion of tags when cleaning up particular areas of Moodle, it will also be consistent with other parts of the Moodle API - eg. the file area.",40 MDL-44338,"Show move drag handle in header for ""Add a block"" block","Issue MDL-43723 changes the block drag and drop so it only works on the drag handles and not the entire header. This is being removed because it causes issues when scrolling on mobiles, and is not consistent with drag and drop in other areas of Moodle. With this change only - it is no longer possible to move the ""Add a block"" block - because for some reason it does not show the drag icon. Make it so.",8 MDL-44340,"Replace add_to_log in mod_workshop (part 2)","Unfinished after MDL-40921: {code} $git grep add_to_log mod/workshop/locallib.php: call_user_func_array('add_to_log', $args); {code}",13 MDL-44361,"Update to YUI 3.15.0","Released this week and addressing a number of issues that we've patched in the mean-time.",5 MDL-44366,"filter_glossary has the potential to be slow on large sites","As a follow-on to MDL-43524 which removed global text caching, we need to examine the glossary filter and probably add MUC caching there to improve performance. The glossary filter is what puts links in texts to glossary entries. There is quite a lot of processing going on in the background even before the simple text replacement, and this needs to be redone every time the cache is invalidated. Petr has raised that the fully correct way would be to use new events or the as-yet-unwritten hooks to invalidate the caches, but I think that might be too much to do before 2.7, so I want to see a quick solution here even if it may mean relying on less-perfect cache invalidation. This issue requires performance comparison tests before and after the fix.",40 MDL-44368,"filter_activitynames can be improved after dropping of global text cache","As a follow-on to MDL-43524 which removed global text caching, we need to examine the activity names filter and probably add MUC caching there to improve performance. The activitynames filter is what puts links in texts to other activities in the same course. Petr has raised that the fully correct way would be to use new events or the as-yet-unwritten hooks to invalidate the caches, but I think that might be too much to do before 2.7, so I want to see a quick solution here even if it may mean relying on less-perfect cache invalidation. Tests showing performance before/after are required. ",20 MDL-44370,"Incorrect urls for calendar logs in log and loglive reports","Calendar actions such as adding and editing events generate logs. The logs link to the page in the format course/event.php?action=edit&id=12931 in reports. This link generats a 404 error as the specified path does not exist.",3 MDL-44430,"Atto triggers required when still in focus","Not sure how best to describe this one, but: * Open a form and don't enter anything yet; * Do any of the following: ** Press the *Bold* button in the toolbar ** Click into the editor area, and use a keyboard shortcut for bold, italic, underline, etc. It seems that any time the content editable loses focus, we trigger various checks rather than any time the editor as a whole loses focus.",5 MDL-44447,"Grade - Add an option to export the total in letters","In gradebook, when we try to export the grades, we want to add an option that will add an new column at the end that is the total in letter (based on the grades-letters setting of the course.",40 MDL-44475,"Atto is using deprecated features and modules","Just a quick commit to tidy these up.",3 MDL-44478,"Remove duplicates in YUI rollup","When we converted from SimpleYUI, I must have made a transposition error. We include the same module twice in slightly different rollups. The first is never used as a result. The duplicates I've removed are: * yui-base; * get; * features; * loader-base; * loader-rollup; and * loader-yui3. These contain all of the metadata for Moodle, the loader itself, and the fetching mechanism. If they were broken in some other way, we would see a very large bang and no working Javascript within Moodle. To clarify, these were already included by us using 'yui' which is a rollup of the above 6 modules. File-size savings: || || Content size || Gzipped size || || Before | 388KB | 112KB | || After | 289KB | 86.6KB |",5 MDL-44496,"buffer raw data instead of full events in log stores","The problem is that event contains references to snapshots and other large custom objects which consumes memory. Also we need to get the extra info such as origin before we put data into buffer because in theory it might change (such as possibly when doing restore in the future). Yet another problem is that we should not buffer events we do not want to store. hmm, and the patch actually reduces code duplication too...",4 MDL-44500,"validate course id is matching context in new events","Theoretically somebody might supply inconsistent course id - context combination when triggering event, we can use some developer checks to warn about this problem...",2 MDL-44512,"Custom menu submenu arrows appear on the right on RTL languages","On bootstrapbase-based themes: # Create a custom_menu that consists of multiple levels (the example custom_menu is fine). # Install and switch to an RTL language (e.g. {{he}}). # Try using the custom menu. #* Observe that the submenus and their arrows appear on the right rather than the left. #* Observe that when activated, submenus are not where they are expected to be.",3 MDL-44523,"Define and correct edulevel in events","Educational level is inconsistently used in some of the places including reports. Documentation http://docs.moodle.org/dev/Event_2#Level_property doesn't consider all cases like report_participation etc. It would be nice to review all events and fix edulevel where required.",13 MDL-44596,"Declare interfaces supported by reports and implemented by stores.","We need to provide the following information to the admins:- # Each report should declare what interfaces it supports. # Each store should declare what interfaces it implements.",20 MDL-44597,"Add support for source maps with less.php","When compiling LESS from PHP in designer mode, we should add the source maps to make it easier to debug the CSS.",5 MDL-44627,"Show/hide, edit title, group mode module buttons don't trigger course_module_updated event","If you edit course-module and change only visibility, there are \core\event\course_module_updated for this. However when module visibility changed on the course page via specical icon there is no similar event. This is inconsistence. It is creates problem for the module, trying to react on it's visibility status changes (for example we are trying to emit special event when student is able to see assignment text in our poasassignment module).",8 MDL-44637,"Tool to list all events","As events are being added and updated, it is very hard to find which events are available and what data they store. We need a tool that is useful for two main user groups: # for analysts/researchers, to understand what data may be found in our logs # for developers, to understand what events are available to use The tool should: * Generate a list of all events in core * Include high-level descriptions of the event * List as much as possible about the payload data in the event * Filter/search by verb/module etc. * List the observers that are consuming those events. ",100 MDL-44704,"The \core\event\message_sent class should be passed the system context (for now).","It was decided in SCRUM that we should be passing the system context when sending messages.",3 MDL-44717,"Incorrect urls and strings in many events","Many of the events have incorrect urls. example:- return new \moodle_url('report/loglive/index.php', array('id' => $this->courseid)); return new \moodle_url('report/log/index.php', array('id' => $this->courseid)); etc There are some other issues with some events as well such as missing/incorrect strings etc.",20 MDL-44745,"Typo in mod assign fullname() function","$userid should be $user->id (Thanks Mark) This is a master only bug introduced by MDL-28448",5 MDL-44746,"Remove incorrect use of snapshots in events","We should not be using snapshots in the events other than in the functions get_legacy_logdata() and get_legacy_eventdata().",5 MDL-44748,"Make atto the default editor during upgrade","We do this for new installs, but should do so for ugrades too.",5 MDL-44749,"Collapse plugin should handle suboptimal toolbar configuration","Collapse plugin does not fail gracefully if there are fewer than n groups. If there are fewer groups, we should either: # fail gracefully; or # not add the button at all. I go for option 2. If the show groups count <= number of groups + 1, then we should not show the plugin IMO. I've gone for the groups+1 option because there's a strong chance that the plugin will be in a group of it's own and will thus take up a whole slot. It should also not be displayed if it will not be visible by default.",5 MDL-44751,"Update showgroups string in atto_collapse","As discussed in the demo yesterday: {code} ""Show first (n) groups when collapsed."" {code}",2 MDL-44752,"Correct uses of color => colour in atto plugin language strings","{code} accessibilitychecker/lang/en/atto_accessibilitychecker.php:$string['needsmorecontrast'] = 'The colors of the foreground and background text do not have enough contrast. To fix this warning, change either foreground or background color of the text so that it is easier to read.'; backcolor/lang/en/atto_backcolor.php:$string['pluginname'] = 'Background color'; fontcolor/lang/en/atto_fontcolor.php:$string['pluginname'] = 'Font color'; {code}",3 MDL-44754,"Explain the meaning of the group names in the toolbar configuration","They have no real meaning ATM but they need to be unique. This just needs explaining in the admin setting help.",3 MDL-44755,"Atto plugins are using different icons for the plugin / toolbar","Examples are the accessibility plugins - and some of the combined plugins. ",5 MDL-44756,"Atto collapse plugin setting help update","Change description to: ""Show first (n) groups when collapsed""",2 MDL-44757,"Change TeX help link in equation editor to point to a moodle docs page","And then the moodle docs page can point to good external references.",5 MDL-44758,"Atto: Prevent new table creation when within an existing table","For now, you can create a table in another table by: # Clicking the table icon when the cursor is in the caption # Selecting more than one cell # Click the table icon This also happens when you select the caption cell (at step 2). _Expected result:_ The table editing context menu will pop-up _Actual result:_ The new table creation dialogue appears and when you click to add a new table it doesn't work.",20 MDL-44759,"Atto Undo starts highlighted on an empty field","This is because we insert behind the scenes, but it gets caught in the undo stack. I think treating as '' in the undo plugin would fix this.",5 MDL-44760,"Atto menu styles are inconsistent","Atto drop down menu styles are currently using a new invented style - they should be changed to match other drop down menus in Moodle. Other menu styles in moodle are the course editing menus and the edit pdf menus. The Edit PDF menus were designed by Barbara, and the course editing ones were done by Sam. We should aim to make all 3 the same - but that is not this issue, this issue is just to pick a winner and make Atto look like that. ",20 MDL-44761,"Display the list of keyboard short cuts somewhere (in the alt for the buttons?)","And should take into account the current browser etc.",13 MDL-44762,"Atto title plugin bugs. It is possible to choose a title from the menu and nothing happens","Notes from demo: Menu isn't closed when selecting a title (or applied) (select, choose h2, select text, open menu, press escape, open menu press h2 - stays same) This happens on Firefox, not Chrome",13 MDL-44763,"Atto image plugin - remove the word ""Preview"" from the dialogue.","It's unnecessary.",2 MDL-44764,"Change wording in Atto image plugin","This is about the alt / decorative only fields. New wording: “Describe this image for someone who cannot see it�? / “Description not necessary"" ",5 MDL-44765,"atto_image: Dialogue is not resized after the accessibility warning is displayed","Using the image plugin: * open the plugin * find an image * try to submit without setting alt or presentation Issue: The dialogue is not resized. This is fine for most users, but for users on small-height devices, the submit button may have dropped off the bottom of the page.",5 MDL-44768,"Atto: Save cursor position with undo/redo stack and restore it","This was a suggestion from Fred in the Atto demo.",40 MDL-44769,"Atto Table plugin caption field should be a text input, not a textarea",Simples.,3 MDL-44770,"Change table context menu, to open from the table button, not the table cell","Also maybe change the wording to e.g. ""Insert column after current cell"". ",8 MDL-44771,"Atto tables with long captions wrap into the table","This is a CSS bug in the table plugin styles.css - it sets a fixed height on the caption which should be a min-height.",5 MDL-44772,"Atto does not respect height of original text area field any more (it used to)","Something changed here, and now Atto is always huge. Yuk! (Seriously this is a real problem on long forms).",13 MDL-44773,"Accessibility checker does not trigger selection updated when it selects the image nodes","And so the image button in the toolbar is not highlighted. The Accessibility helper does this correctly.",5 MDL-44775,"Atto : show html view with a monospace font","what it says",2 MDL-44776,"Make Atto equation editor dialogue wider ","just a bit (keep mobile in mind too please)",5 MDL-44777,"Atto Equation Editor example toolbar should have consistently sized buttons","Set a min-width on the buttons in the examples toolbar, so they will line up better.",3 MDL-44778,"Atto equation editor, put a border around the preview","What it says",2 MDL-44779,"MathJax menus show behind dialogues","This is most noticable in the Atto equation editor",13 MDL-44780,"Enable MathJax filter by default","For new installs. Not sure about upgrades (you don't want 2 tex filters and you don't really know which other filters handle tex).",5 MDL-44781,"Reformat/rewrite the help text for MathJax (needs some line breaks) ","Reported by Andrew N",2 MDL-44782,"Fix lang string for Mathjax filter setting HTTP (Should be HTTPS)","What is says",2 MDL-44784,"Atto plugins with settings do not show settings links on manage plugins page.","Probably something to do with plugininfo.",20 MDL-44794,"get_groups(), get_groups_all() and groups_get_user_groups are not covered by unit tests","The following functions are used all over Moodle but are not currently covered by unit tests. Behat tests should cover them to a large degree but it would be nice to have additional assurance. 1) get_groups_all() and get_groups($groupingid = 0) in modinfolib.php do not appear to be covered at all in modinfolib_test.php. 2) groups_get_user_groups() in grouplib.php. groups_get_user_groups() is itself not tested at all in grouplib_test.php",8 MDL-44806,"Accessibility checker goes wide unnecessarily ","It would be better if it adapted to the content better.",5 MDL-44808,"The table creation box is huge, giving too much room to the accessibility info","The problem with this dialogue being so big, is it makes me want to see at the bottom for something important. It seems to me like this info is getting too much prominence. ",2 MDL-44810,"The bold/italics buttons don't maintain their selection when pressed","Steps to reproduce: # In atto, write ""Damo Rulez"" # Select the word ""Damo"" word and press bold button Expected result: The word ""Damo"" is formatted bold and the selection remains on ""Damo"" Actual result: The word ""Damo"" is formatted bold but the selection is not retained and the insertion point moves to the end of the word. NOTE: this is contrasting behaviour to google docs for eg. (and I guess MS Word etc)",5 MDL-44824,"Strings missing for some subplugins","Logstore subplugins are displayed on Plugins overview page as: ""Log store manager / logstore"" There is a string missing to translate internal name ""logstore"" Same with assignsubmission, assignfeedback, ltisource (I think we can ignore ""assignment 2.2"" subplugin)",2 MDL-44826,"Atto Too many image alignment options","I think superscript and subscript can be removed - probably some others too. We want to keep these interfaces simple.",5 MDL-44827,"Atto: Insert image fails on iOS 7","Buy me and iPhone and i'll fix it :)",13 MDL-44830,"Atto: Redo behaviour is a bit wonky","undo/redo can get a little confused so that there are duplicates on one of the stacks. A bit of testing multiple undo/redos shows this in action. ",8 MDL-44831,"Atto: Save to undo stack on text deletion","The undo stack save is triggered by arrow keys and clicks on the content area. This is based on testing the native undo in chrome. We could possibly improve this to save the position when someone starts deleting things (but if they hit delete 15 times we should only save for the first one). We could do this by detecting that the new text is shorter than the previous text, save the stack and set a ""deleting"" flag. We would need to test the performance of this with a really long bit of text in a sucky browser (guess which). ",8 MDL-44832,"mod_assign grading table menus do not show","Some new yui bug - the menus are positioned way off the screen. Probably easiest to move these to ""Edit"" menus like the course editing ones. The old ones could not be tested by behat anyway.",5 MDL-44844,"Custom menu broken in all non-bootstrap themes. ","The custom menu code uses the ""YUI3 menunav"" module (which is deprecated). For some reason this is broken in master (probably because of a yui update). Bootstrapbase provides it's own renderer for this which uses the yui module for bootstrap so it's not affected. I noticed this was broken in mod_assign and fixed it by converting to an action-menu - this doesn't really help with custom menu though. ",13 MDL-44846,"Atto font colors are broken in IE","This needs to be investigated, but in IE9: - Regardless of the text I have in the field, the form validation was reporting it as empty. - Switching to HTML view does not work And maybe other issues. Note: I might have played with fontcolor and backcolor during the test, mayve that is related.",8 MDL-44874,"Per-request temp directories","According to [the docs|http://docs.moodle.org/dev/Server_clustering_improvements_proposal#.24CFG-.3Etempdir]: ""If any script tries to use temp files that were not created during current request it is a bug that needs to be fixed."" Now in load balanced environment (without sticky sessions) with multiple web servers and local temp dirs defined on the web servers local file systems, there are at least two cases where files are used for more than the current request: - upload users via CSV - restoring course backups Trying to perform the above actions leads to errors and the inability to complete the actions unless the local tempidr ""$CFG->tempdir"" is removed from the configuration, losing the local tempdir functionality. This issue introduces a new function: {code} make_request_directory($exceptiononerror = true); {code} This can be used in the same way as make_temp_directory(), but it does *not* take a subdirectory as an argument. It always outputs the full path to the new directory, and ensures that it will be deleted after the request finishes.",40 MDL-44881,"The dialogue to pick a file in file picker is not nicely styled","See screenshots for the following: - The checkboxes are not well displayed - The padding on the right of the text inputs is too small, they seem to close to the edge - The info at the bottom do not have separator - When there is a separator at the bottom, it is glued to both sides - From an accessibility point of view, I'm pretty sure the file info are not properly ready as SPAN is not considered as a word separator - Margins below and above the fields seems unnecessarily high All themes are affected, so _clean_ and _base_ should be tested. To select _base_ pass ?theme=base to the URL.",20 MDL-44923,"The gradebook export xml format does not handle the settings ""Export new or updated grades only""","The setting ""Export new or updated grades only"" in the gradebook export xml format is only handled in the preview, not in the file. *To reproduce:* # Go to the gradebook in a course with some graded activity # Be sure to have an ID for each activity and for the course category in the gradebook # In the export section, select the XML format # Be sure to select ""Export new or updated grades only"" # Click Submit # The preview will only show the new or updated grades as expected # Click Download _Expected result:_ The exported file should only contain new or updated grades. _Actual result:_ The file will include all grades, not only the new or updated grades, which is wrong.",20 MDL-44927,"Atto: UX improvements for table editing.","It was discussed in Scrum and we are not yet happy with the table editing controls in Atto. We will probably move to a more comprehensive table editing dialogue in the future - but it is too late to start work on that for 2.7 - in the meantime there are 2 improvements that can be made to the context menu that will make it much nicer to use. 1. -Add an option to add/remove the caption for a table- 2. -Hide options that don't make sense when the menu opens (e.g. add caption to a table with a caption, move the left column to the left)- When I implemented this issue and tested it it still was confusing to use so I went further. I made the entries in the context menu hidden when they didn't make sense for the selected cell - and added a ""Edit table"" entry that opens a window to edit the caption and change the headers for the table.",13 MDL-44929,"Update to YUI 3.17.2","Due for release on Tuesday 8th April, during our code freeze week. Current history rollup is at https://gist.github.com/andrewnicols/9948045 but there are still a few items missing which will be integrated this week. We are currently affected by: * Drag/Drop broken for some devices in 3.15.0 whilst trying to fix Android (https://github.com/yui/yui3/pull/1721) * Calendar CSS in RTL (and non-RTL as it happens) (https://github.com/yui/yui3/issues/1685); and * Logging levels (minor and not yet in the history). Because Yahoo! are based in California, I suspect that we won't actually see this until Tuesday evening but I think that we should consider whether we allow this in anyway. From our PoV, it's only a patch release - I think it's a minor release from YUI's PoV because they're including a new Pure module in with the CSS which dictates a minor release rather than a patch. The drag/drop issue is the main consideration IMO.",8 MDL-44949,"Repository picking in Atto Image plugin broken","There is a bug in MDL-44000 that prevents picking an image from a repository.",2 MDL-45029,"Weight Defaults to Zero in Weighted Mean of Grades Aggregation Method","When adding new assignments to new courses, weight of grade in gradebook defaults to zero with the ""weighted mean of grades"" aggregation method in certain situations. If new assignment is added, and gradebook has been set to ""Simple Weighted Mean"" then switched to desired ""Weighted Mean of Grades"" aggregation, default weight will show up as 1.0 as is intended. However, once grading aggregation has been switched to ""Weighted Mean of Grades"", subsequent assignments added will have a default weight of 0 in the gradebook instead of intended 1.0. Steps to Reproduce: 1. Add new course and save. 2. Go to new course main page, click ""Turn on editing"" 3. Go to first available week, click ""Add an Activity or Resource"" 4. Click Assignment and Add 5. Name assignment, add description, click ""Save and Return to Course"" 6. Click Course Administration0, )] Error code: invaliduser Stack trace: line 1451 of /lib/dml/moodle_database.php: dml_missing_record_exception thrown line 1427 of /lib/dml/moodle_database.php: call to moodle_database->get_record_select() line 6404 of /lib/accesslib.php: call to moodle_database->get_record() line 107 of /blog/external_blog_edit.php: call to context_user::instance() Output buffer:
Notice: Undefined property: stdClass::$filtertags in /home/marina/repositories/int_master/moodle/blog/external_blog_edit.php on line 102
Notice: Undefined variable: newexternal in /home/marina/repositories/int_master/moodle/blog/external_blog_edit.php on line 107
Notice: Trying to get property of non-object in /home/marina/repositories/int_master/moodle/blog/external_blog_edit.php on line 107
{code}",8 MDL-45580,"PDF Annotations Remain After PDF is Replaced","When a student edits an assignment submission and deletes a PDF that was already annotated by the teacher and then adds a new PDF submission, the annotations given by the teacher for the old PDF remain in the new PDF. Steps to reproduce: # In any course, create an Assignment that allows file submissions. # As a student, submit a PDF file for the assignment. # As a teacher, annotate the student's PDF submission and save. # As the student, return to the assignment and click Edit Submission. # Delete the existing PDF file and upload a new PDF file. Save changes. # As the teacher, access assignment and click View/grade All Submissions. # Click Grade icon under Grade column for the same student. # Launch PDF editor and observe Expected results: Annotations from the old PDF file should not display in the new PDF submission. Actual results: Annotations from the old PDF file are retained and display in the newly submitted PDF file. ",20 MDL-45594,"Fix use of ORDER BY id in the messaging system","h5. *TO PEER REVIEWER* There are two diffs to review here, please comment on which you think is the better solution; or if you think neither of them are. Mark's: https://github.com/markn86/moodle/compare/master...MDL-45594_master Tim's: https://github.com/markn86/moodle/compare/master...MDL-45594_master_alt ----- See MDL-35453. Problem lines of code: {noformat} message lib.php (3 matches) 715: SELECT mr1.useridto AS userid, MAX(mr1.id) AS mid 721: SELECT mr2.useridfrom AS userid, MAX(mr2.id) AS mid 732: ORDER BY mr.id DESC""; 741: SELECT m1.useridto AS userid, MAX(m1.id) AS mid 747: SELECT m2.useridfrom AS userid, MAX(m2.id) AS mid 758: ORDER BY m.id DESC""; 799: ORDER BY mr.id DESC"";//ordering by id should give the same result as ordering by timecreated but will be faster {noformat}",20 MDL-45611,"Question text overlaps other parts of the UI on the edit quiz page.","On the edit quiz page, the question text for random questions overlaps the Maximum mark input box and other things. See the screen grab. To reproduce: # Add a new quiz to a course. # Add several questions to a category in the question bank. # On the edit quiz page, add a random question selecting from that category to the quiz. # Observe overlap as in the screen-grab.",13 MDL-45652,"When restoring a backup, if no category or course is selected the page reloads with no error message","If you restore a backup and at the Destination stage, you choose to create a new course but do not select a category, the page reloads upon pressing the Continue button. There needs to be an error message stating why the page reloads, as currently it's not obvious that you've forgotten to select which course. *Steps to replicate:* # Log in as admin/course creator # Click 'Restore' in Site Administration # Upload a backup # At destination stage, Click the Continue button under ""Restore as a new course"" without selecting a category. _Expected Result:_ The page would reload and generate an error telling you that you must select a category to restore to _Actual result:_ The page reloads with no indication as to why it reloaded.",8 MDL-45721,"The \core\event\course_restored event is triggered on any restore, not just courses.","# Visit a course. # Duplicate an activity. # Notice there is a 'course restored' event.",5 MDL-45754,"Backup and restore of logs in 2.7 and above","New logging API does not support backup and restore of logs",100 MDL-45772,"Some forms with passwords and usernames get populated by the browser, which is not desired","When i tried to create a new group in a course, my username and password were pre-populated in the group id and the password for the group. step 1: create group in a course step 2: look at the pre-populated fields (group id and password) they are the same as my LDAP username and password. I had a colleague log in on my machine with his credentials and my details were pre-populated. When my colleague logged in on his machine his details were pre-populated My thoughts are if they are pre-populating here then were else are they populating. I have cleared cache. logged out then back in again Regards Brendan",20 MDL-45780,"Neither formchangechecker, nor quiz autosave detects changes in Atto editors","Both quiz autosave code mod/quiz/yui/src/autosave/js/autosave.js, and lib/yui/src/formchangechecker/js/formchangechecker.js require special code to work with TinyMCE. It seems that it they will alos need special code to work with Atto, but no-one has written that. To reproduce (Quiz) # (Optional) Add $CFG->forced_plugin_settings = array('quiz' => array('autosaveperiod' => 3)); to your config.php to make thes easier to test. (Just a 3 second delay between a change and an auto-save.) # Ensure you have a default set-up using Atto, not TinyMCE or another editor. # Create a quiz containing one essay question, that uses the 'HTML editor with file picker' response type. # Attempt the quiz, and Open the console. (The autosave code outputs useful debug messages to tell you what is going on - assuming you have developer debug on.) # Type something in Atto, and verify that 3 seconds later (or whatever delay you set) an autosave ajax request happens. # Add an image to Atto using the filepicker, and verify that cause an autosave too. To reproduce (Formchangechecker) # Go to a form, and click to make a new post. # Type an X in the message box. # Click the back button. You should get a warning that you are about to leave a page with unsaved data, but you don't.",13 MDL-45827,"Specify the requirements for the element library","This should be a dev docs page describing the element library tool, and describing how a developer would add a renderable/renderer method to the tool. It should list the mandatory and optional features for this tool requires in order to meet the goals specified in: http://docs.moodle.org/dev/Render_library_specification#Element_library_and_style_guide",5 MDL-45828,"Create the element library admin tool","Implement the admin tool defined in MDL-45827",8 MDL-45829,"Define the initial list of renderables to be added to the element library","The proposed categories for renderables are: Elements Components (built of smaller elements) Layouts (structured arrangements of smaller components/elements/layouts) The names of these categories needs to be agreed on, and docs created to describe each category. An (early) list of renderables is defined here: http://docs.moodle.org/dev/Render_library_specification#Initial_thoughts_on_renderables_and_what_we_should_provide_.28Draft.29 This list needs reviewing and categorising. ",20 MDL-45830,"Define style guide for renderables","This document should go hand in hand with the element library, but will define best practices to follow when creating the default implementations of renderables. See: http://docs.moodle.org/dev/Render_library_specification#Style_guide",40 MDL-45833,"Debugging error when changing roles in category","I encountered the following message: {code} Inconsistent courseid - context combination detected. line 247 of /lib/classes/event/base.php: call to debugging() line 144 of /admin/roles/override.php: call to core\event\base::create() {code} to replicate - # open course category, # click on ""permissions"", # select any role from ""Advanced"" dropdown # Change any permission I'll create a related improvement to trigger event from inside of assign_capability()",5 MDL-45853,"Document renderer best practices","As part of the the [Render library specification|http://docs.moodle.org/dev/Render_library_specification] we agree that a best practices document was needed for the creation of renderers. It should include: * The do's and don't's of writing a render. * A best practices for output. * Any rules and recommendations in situations where elements cannot (or will not) be used. ",20 MDL-45854,"Define and document JavaScript output guide","As part of the the [Render library specification|http://docs.moodle.org/dev/Render_library_specification] we need to establish how the relationship between JavaScript and output should exist. This involves deciding if handlebars is what we want to use, how we want to use it, how it ties in with renderers and elements, and then documenting the process thoroughly. We should also consider here how to document elements and the JavaScript components that ship with them. ",40 MDL-45862,"Convert existing displays to renderers","This will make modifying the forum layout easier and clearer. We will need to create a number of renderables, and it may be necessary to break this task down further to smaller areas of focus: * posts; * discussions; * thread list; and * other areas.",100 MDL-45885,"Decide and document output components","This is an essential part of the task - unfortunately the approaches are broad and what we choose now we have to commit to and live with. It has to meet our needs now and in the future. Some of the things that need to factor into this decisions are: *Element and component re-use* Re-use is key to this approach. We want to have components containing existing elements and components, and when we want to change how an element looks we want that change reflected in all uses of the element within other components that don't require it to look different. This way you can style a button and instantly have the look updated across other components like search forms containing buttons. *Elements and components can be complex* Elements don't need to be easy to write - they should be feature full and limited in number. Developers should not write components instead they should be re-using the available elements and components. *Overriding a render to change how an element must be both easy and robust* Re-use is key as per the above point. However we need to achieve this in such a way that we don't introduce magic and keep things simple to understand and override. We have to be able to deal with state and attribute requirements of the element in relation to its parent component and do it in such as way that the state is owned by the component and attributes are owner by the render method. and keep it all understandable. ",40 MDL-45893,"Developing a User Menu","Adding a User Menu, in the bootstrapbase themes; refer to the specification to know what it should contain, and how to implement it. The general approach here is to refactor the existing navbar's capabilities, allowing it to support multiple dropdowns without adversely affecting existing DOM structure (which would necessitate every theme re-targeting its styles). Update 10/06/2014: The user menu is being rendered fine, but the current solution doesn't quite encapsulate everything that'll need to happen with the navbar; in particular, page_heading_menu() stuff isn't handled by this solution as it doesn't really make sense for that stuff to live in a dropdown. Update 24/06/2014: Okay, this turned out to be huge. - The new {{user_menu}} renderable is an extension of the {{custom_menu}} renderable, constructed with references to a user, a course, a page and an array of flags (at present, the only thing that makes sense to set _a priori_ is {{guest}}, a boolean flag). -- Basing the new renderable on the {{custom_menu}} allows for it to be easily displayed in Base-based themes as well. -- A minor bug in {{custom_menu}}'s YUI3 dropdown code was fixed: in brief, the logic was looking for a dropdown attribute on the node that was clicked (e.target) instead of the node that the event was actually wired to (e.currentTarget). - {{custom_menu}} renderables have been extended by way of MDL-46022 and have also gained the ability to assign CSS suffix flags to {{custom_menu_item}}s - which is necessary for us to avoid having to hardcode icons into the renderer PHP. - In order to support multiple collapsible menus, it was necessary to create an entire {{bootstrap_navbar}} renderable which renders the {{body > header}} element and renders out a collection of menus. Bootstrap javascript has been patched to allow for multiple navbar items. - Responsive styles have been provided.",100 MDL-45894,"For students: a single page with all their course grades on it","Create a page wherein a student will be able to see the grades for the courses currently visible to them. This should be a user-context page, not under Reports, in order to avoid sudden breadcrumb/navigation jumping. Once complete, a link to this page should be added to the *user menu*.",20 MDL-45897,"Add more blocks to the default 'my home' page","Adding more content to *my home*. Refer to [the spec|http://docs.moodle.org/dev/Navigation_overhaul_specification#Revisiting_.27My_home.27_page_2] for more information.",13 MDL-45916,"Event monitor: Finalise the basic file and database structure","Commit the basic file structure with the following:- # Directory structure # xmldb files # permissions (db/access.php)",20 MDL-45918,"Event monitor: Create a rule manager class with unit tests","Create a class report_monitor\rule_manager that lets you # Create rules # Edit rules # Delete rules # get rules # Get rule With unit tests",13 MDL-45919,"Event monitor: Create a subscription manager class","Create a class report_monitor\subscription_manager that lets you # Create subscriptions # Delete subscriptions # Get subscription # Get subscriptions for course # Get subscriptions for an event With unit tests",20 MDL-45920,"Define Report Builder API","Work in progress: http://docs.moodle.org/dev/reportbuilder/API We need to define the API that will be used to define report sources. This will determine a large section of the work that needs to be done as we integrate the report builder into core moodle.",20 MDL-45935,"Slow behat tests for backup","When we run behat backup tests, we pass a table such as: {code} When I backup ""Course 2"" course using this options: | Filename | test_backup.mbz | | setting_section_section_2_userinfo | 0 | | setting_section_section_2_included | 0 | | setting_section_section_4_userinfo | 0 | | setting_section_section_4_included | 0 | {code} We then call i_backup_course_using_this_options, passing in those options. That in turn handles the backup process looking at each page. At each page, it uses the following to fill in the form: {code} $this->fill_backup_restore_form($options); {code} Which then looks for each option in the table and fills it in. Since most of those settings are only found on one page, we then wait 12 seconds for the search for that option to fail to be found (which we ignore with a try/catch). https://github.com/moodle/moodle/blob/master/backup/util/ui/tests/behat/behat_backup.php#L351 The result is that each test involving backups takes a good minute just to fill in the each page of the backup form, for three pages making about 3 minutes of wasted time in timeouts. By fixing this, we should be able to knock a good few minutes off behat runtimes.",5 MDL-45936,"The auth/db plugin should use the core functions user_create_user and user_update_user","The auth/db is doing a bunch of it's own logic to add/update a user, which is not great. We want to keep the logic in one place for easy maintenance/updates etc.",8 MDL-45938,"Event monitor: Create a form to edit/add a new rule","We need a form to add/edit a new rule. This issue includes:- # The mform with proper validations and such # Edit.php to handel forum submissions # A yui module to update the select drop downs dynamically (consider creating a mform dependent select element instead? ) ",40 MDL-45939,"Event monitor: Create rule class","We need a class that represents a rule in the database. It might have the following methods get_module_select delete_rule copy_rule get_plugin_name get_description get_name get_filters_description get_event_name unsubscribe_user subscribe_user If it seems some of these methods can be reused by the subscription class, consider abstraction of those. ",20 MDL-46016,"Shibboleth contains misleading comment regarding user passwords","I was reading through the Shibboleth code and found this in auth/shibboleth/index.php near line 37 {code} /// If we can find the Shibboleth attribute, save it in session and return to main login page if (!empty($_SERVER[$pluginconfig->user_attribute])) { // Shibboleth auto-login $frm = new stdClass(); $frm->username = strtolower($_SERVER[$pluginconfig->user_attribute]); $frm->password = substr(base64_encode($_SERVER[$pluginconfig->user_attribute]),0,8); // The random password consists of the first 8 letters of the base 64 encoded user ID // This password is never used unless the user account is converted to manual {code} The problem is that I don't believe Base64 is random at all and for short usernames could yield extremely short passwords. For instance the first 8 characters of the username 'ted' are 'dGVk'. I am certainly no security expert but if a site for whatever reason decided to stop using Shibboleth anyone could stick a bunch of known usernames through Base64 and easily have the first 8 characters. It seems like a bunch of randomized garbage characters would be a better idea to use. I really hope I am missing something here.",13 MDL-46022,"Add ability to create dividers in custom_menu","As MDL-45893 is being developed based on custom_menu code, I think it'd be useful to have the ability to create dividers in regular custom_menus too. It is envisioned that you'd be able to specify dividers like this: {noformat} Moodle community|http://moodle.org -Moodle free support|http://moodle.org/support -#### -Moodle development|http://moodle.org/development --Moodle Tracker|http://tracker.moodle.org --Moodle Docs|http://docs.moodle.org -Moodle News|http://moodle.org/news #### Moodle company -Moodle commercial hosting|http://moodle.com/hosting -Moodle commercial support|http://moodle.com/support {noformat} ...where a menu item with text of '####' and no URL will be given the class 'divider' at render time. I'd use the '-' character, but that'd conflict with our existing use of that to denote nesting level",3 MDL-46035,"Survey activity shows wrong error message to admins","If you create a survey activity as an admin that is not enrolled in the course it says ""Guests are not allowed to submit surveys"". Admin != guest.",2 MDL-46036,"Exception is thrown if you try to download responses from a survey activity with no responses","I suspect we should be handling there being no data to download in a more graceful way. Create a survey activity, click on 'download results' and pick excel. The following is displayed. {quote} There are no answers for this survey yet. More information about this error Debug info: Error code: cannotfindanswer Stack trace: line 463 of /lib/setuplib.php: moodle_exception thrown line 138 of /mod/survey/download.php: call to print_error() {quote}",5 MDL-46058,"Include YUI -proxy modules in rollup","As raised in https://moodle.org/mod/forum/post.php?reply=1136723#mformforum, some ISPs do insane and antiquated blocking based on keyword. I suspect we'll see this in places such as Syria, Iran, China, North Korea, etc. To help the users in those locations, we can include the proxy modules in the rollup such that they are no longer blocked and more (hopefully all) of the JS works.",3 MDL-46059,"Editing LTI page invalid grade view","The LTI edit page loads the grade maximum points as a decimal number and then complains that it is not an integer when you try and save.",8 MDL-46109,"Event monitor: Create a class to generate eventlist","Create a class to find and list all events with caching",13 MDL-46110,"Event monitor: Create renderables/renderers to display the rule managment page","Write a renderer to display rule management interface.",20 MDL-46111,"Event monitor: Create renderables/renderers to display the subscription managment page","Write a renderer to display subscription management interface.",40 MDL-46118,"Problems in downloading course log files, only 30 lines are downloaded","Hi, we are using 2.7 an the Problem is, that trying to download log files only 30 rows are included in the download-file (exel, csv, xhtml ...). Talking about course-administration >> Reports >> Logs. Even without filtering anything, so that about 17 Pages of logdata are available online, a click on ""Download table Data as...excel/csv/xhtml..."" only results in 30 lines of logdata. Think this is really a bug!?",5 MDL-46129,"Event monitor: Handle creating/deleting subscriptions","Write a renderer to display subscription management interface.",13 MDL-46130,"Event monitor: Handle rule managment","Write yui modules to handle the managment of rules # Deleting a rule # copying a rule",8 MDL-46131,"Event monitor: Sort out navigation","We basically are going to provide three main entry points # Subscription management page # Rules management page Sort out where these nodes needs to be present in the navigation ",8 MDL-46132,"Event monitor: Implement the event observer","Implement an event observer that populates tool_monitor_events, as needed",40 MDL-46133,"Event monitor: Implement cron task to clean events table","Implement a cron task to clean tool_monitor_events periodically. There are three ways do this:- # Truncate the table unconditionally every x hours # Implement a smart logic that reads various rules and finds which event entries are not useful any more and dumps them only. # Implement a semi -smart logic which finds out the maximum ""timewindow"" used in rules and dumps every thing beyond that. Imho, 1 is not acceptable, 2 seems ideal, 3 is easiest to implement and more performance friendly than 2.",20 MDL-46134,"Event monitor: Implement cron task to send notifications","Implement a cron task to check if rule has happened or not and send notifications as required. This will also include creating a new message type.",13 MDL-46139,"Add extra credit, drop-low/ keep-high, accurate weights and contribution column to User report","# calculate up each container’s (category or course items) adjusted weight percentage and grademax associated with the items adjusted (need this for weighting, so could be done here or after the next step) # calculate points (must be first, you cannot calculate weights until you have the finalgrade and grademax for categories). For each gtree->levels starting with highest (items) to lowest (course) for both finalgrade and grademax ## include hidden only if hidetotalsifcontainhiddenitems is set to GRADE_REPORT_SHOW_REAL_TOTAL_IF_CONTAINS_HIDDEN ## ignore ungraded items if aggregateonlygraded is set, does not apply when calculating total points for Setup (Categories and items) screen ## include extra credit items in finalgrade calculations only, not grademax ## ignore items that have been dropped from drop low or keep high ## accumulate all other finalgrades and grademaxes into parent category finalgrade and grademaxes # calculate weights (must be done before calculating contributions). For each gtree->levels starting with highest (items) to lowest (course) ## weight is always percentage grade * weight... in this case PERCENTAGE:[item grademax / (container grademax - adjusted grademax for the container from step 1)] * WEIGHT:[(100 - adjusted weight for the container from step 1)] # Adjust weights in a container to always equal 100 # calculate contributions (needed in order to accurately drop lowest, keep highest. Also needed to provide the most percentages). For each gtree->levels starting with highest (items) to lowest (course) ## contribution is always the item’s percentage * the item’s weight * the container’s weight… so (finalgrade / grademax) * item weight * container weight # limit categories - drop lowest, keep highest (need to have contributions in order to accurately drop low and keep high) ## remove contribs ## remove finalgrades from parent finalgrade ## remove maxgrade from parent maxgrade",40 MDL-46175,"Gradebook terminology improvements","As defined by the Gradebook working group: ""en"" pack: # ""Aggregate Only Non-Empty Grades"" → ""Exclude empty grades"" # ""Categories & Items"" → ""Setup"" # ""Marks/Marking"" → ""Grades/Grading"" (whenever referring to gradebook stuff) ""en_us"" pack: # ""Marks → Points"" (for quiz) Swap string: # ""Update"" on grader report → ""Save changes"" New terms: # ""Natural weighting""",8 MDL-46181,"Usability improvements for grade export and import","Export # Have a quickdump to csv that takes no parameters and can be optionally linked to the Grader report -- Would contain a row of weights and a row of maximum points -- Would contain a blank row after each category for teacher calculations -- Add support for letter grades as well: MDL-44447 Import # Excel paste -- Can import data via copy/paste from Excel (text field entry option, instead of file) -- Saves trouble of saving file as csv and then importing # CSV file preview (UCSB) -- Not user friendly right now, but is resilient -- Gives preview of parsed file input and allows mapping of data from file to Moodle fields -- On submit, gives “preview�? and diagnosis data --- Lets user know about “potential updates�? --- Errors and tells user why (invalid student, invalid grade) --- Duplicate scores are skipped -- Then can continue with import --- Moodle.org decided to only allow full/perfect imports, because importing of half data can leave user confused/lost # Idea: Have data in a table and allow user to fix data right there. ",100 MDL-46191,"Develop new Gradebook history report","# take the netspot grade history module and integrate # extend the netspot module, and provide functionality to find editing periods, and then provide a diff report from a specific period in time with current.",100 MDL-46206,"Alt image in footer is incorrectly repeated","According to [this example|http://www.w3.org/TR/WCAG20-TECHS/H2#H2-failex5], alt attribute of footer's image should be empty instead of be repeated twice (on image's alt attribute and p tag text). But maybe this image should be displayed via css ? *Replication steps:* # Log in to a course # Inspect the HTML on the icon in the docs link at the bottom of the page",5 MDL-46218,"Disabled functionality checks occur later than necessary","While scouting around I noticed that /notes/edit.php and /notes/delete.php both include this check... {code} if (empty($CFG->enablenotes)) { print_error('notesdisabled', 'notes'); } {code} but it occurs quite a way down the file after the $PAGE is set up, the user is loaded, the course is loaded and capability checks are performed. The check could be done much earlier to save us some cycles. There are likely to be other places where this is also true so have a look around.",5 MDL-46241,"Event monitor: Create a subscription instance class","Create a class that represents a subscription instance",5 MDL-46248,"Backport of MDL-42869: HTML validation check fails on calendar add event screen","Backporting this issue would allow us to apply the fix for MDL-46197 to 2.6.",3 MDL-46253,"Add-on validation message always shows ""foundlangfile"" (Debug)","Debug message can be confusing to most users. When installing a plugin/module through Moodle interface , Add-on Package validation page display Message ""foundlangfile"" with status 'Debug'. It looks like as if something is wrong. File : /admin/tool/installaddon/classes/validator.php Line : 397 Incorrect : $this->add_message(self::DEBUG, 'foundlangfile', $this->langfilename); Correct : $this->add_message(self::OK, 'foundlangfile', $this->langfilename); I am not sure if setting it to DEBUG is done for a reason.",3 MDL-46255,"Purge all caches page did not call $PAGE->set_url(...) (Moodle 2.8)","This page did not call $PAGE->set_url(...). Using http://localhost/moodle28/admin/purgecaches.php?confirm=1&sesskey=ZjULBqAVg1 line 560 of \lib\pagelib.php: call to debugging() line 768 of \lib\pagelib.php: call to moodle_page->magic_get_url() line 3419 of \lib\navigationlib.php: call to moodle_page->__get() line 719 of \lib\pagelib.php: call to settings_navigation->initialise() line 768 of \lib\pagelib.php: call to moodle_page->magic_get_settingsnav() line 3086 of \lib\navigationlib.php: call to moodle_page->__get() line 824 of \lib\pagelib.php: call to navbar->has_items() line 26 of \theme\tiny\layout\default.php: call to moodle_page->has_navbar() line 908 of \lib\outputrenderers.php: call to include() line 838 of \lib\outputrenderers.php: call to core_renderer->render_page_layout() line 285 of \theme\tiny\renderers.php: call to core_renderer->header() line ? of unknownfile: call to theme_tiny_core_renderer->redirect_message() line 1639 of \lib\setuplib.php: call to call_user_func_array() line 2592 of \lib\weblib.php: call to bootstrap_renderer->__call() line 2592 of \lib\weblib.php: call to bootstrap_renderer->redirect_message() line 44 of \admin\purgecaches.php: call to redirect()",5 MDL-46269,"Convert http embedded content to https on https sites where available","This could be a once off thing (e.g. when someone changes from http to https and back) or a constant thing (whenever they add a link) Note that apache server can be configured to choose http or https automatically, and other servers may have similar functionality. The protocol relative url option can be considered as well. ""//www.example.com"" will link to https://www.example.com if you are on https://moodle.org or http://www.example.com if you are on http://moodle.org Finally, a filter could be made.",100 MDL-46285,"Option to hide user_picture from screen readers","There is at present no way to emit a user_picture that isn't visible to screen readers. It is envisaged that this could be achieved by adding a flag to the renderable, {{visibletoscreenreaders}}, defaulting to true; when set to false, the renderable should be rendered with appropriate attributes. Default behaviour is backwards compatible; all current user_pictures are visible to screen readers, so the {{visibletoscreenreaders}} flag defaults to *true* to emulate this. Setting the flag to *false* adds attributes to both the {{img}} and {{a}} tags to hide them from screen readers.",3 MDL-46313,"Create new icons for e-mail subscription status","The current icons for e-mail subscription state are too subtle. Go work your creative magic and bring us something beautiful and inspiring, but where you can see at a glance the differences in your subscription state.",8 MDL-46316,"Fix coding style problems in notes","code checker currently reports 50 errors and 103 warnings just in notes.",5 MDL-46346,"coding style problems in blog","Originally noted in MDL-46218. There are lots of coding style issues in blog.",5 MDL-46352,"Deprecate print_group_picture","To support ongoing forum work (MDL-45862), {{print_group_picture}} is being deprecated in favour of a helper + renderable + renderer solution in the output library.",5 MDL-46401,"Use cohorts to restrict display of course categories and set themes","Problem: some Moodle users, such as large organisations with many departments, would like to have one Moodle but set it up so that each user only sees the courses from their own department, and with a theme that matches their department. A simple solution: Use cohorts to represent the departments, and allow each cohort to be mapped to one course category and one theme. Then, once a user has logged in, we know which cohorts they are in, and this which categories they are allowed in, and then we restrict the entire course tree to just show those categories (and anything inside them). If there is just one category then we could further refine this by leaving out the name of the category and putting the contents of it at the top level. There don't have to be any further changes in enrolments, and if the user is also enrolled in any courses outside this category then these courses will simply appear in the list of My courses at the top level. Additionally, if they are in just ONE cohort (or all their cohorts have the same theme) we also set the theme to match (this cohort theme setting overrides all other theme settings). (Thanks to Andrea Bicciolo at Mediatouch for the idea - he estimated it would be suitable for 80% of his clients who want ""multi-tenancy"" in Moodle)",100 MDL-46409,"Event monitor: Consolidate and increase unit tests for the tool","A number of Behat and phpUnit tests have already been incorporated into Event Monitor. This issue is to review the existing unit tests and to add additional tests for greater coverage.",40 MDL-46410,"Event monitor: Implement a notification sent history report","Write a page to display a report of notifications sent",40 MDL-46455,"Re-introduce backup/restore functionality with new logging system","Currently the new logging stores do not support backup/restore. This is critical information, especially if we plan on using it more and more, so the functionality should exist. We are removing the usage of the legacy logs, and only have the legacy log store for BC, so new sites won't be backing up/restoring any logging information.",100 MDL-46496,"jquery ui css issue","In using Moodle 2.6's jquery ui css that comes with standard Moodle, I found a bug with the urls included in the css. The normal jquery-ui.css file contains the correct paths, but the minified version does not. It contains extra path information on all of the image urls: ../../../../../../../../Downloads/jquery-ui-1.10.3/themes/base/minified/ These should just be removed to be left with the relative path to the images folder. This problem doesn't exist in the master branch with the upgrade to jquery ui 1.10.4",3 MDL-46510,"Event monitor: Delete rules when course is deleted","We need an observer to delete rules and subscriptions when a course is deleted",8 MDL-46523,"Add body class when logged in as other role","To support work being done on MDL-45893, we need a way of telling at the DOM level when a user is viewing as another role. We already have a class added to the body telling us when we're logged in as another user; this should be fairly straightforward.",3 MDL-46546,"CSV import of grades silently fails when malformed row(s) present","If the number of columns in any data row don’t match the columns in the header row, there is no diagnostic warning, AND the ability to map from the select box in the “identify user by"" section is broken.",13 MDL-46547,"Copy and paste import from excel into the gradebook.","It would be convenient to just copy and paste rows from excel straight into the gradebook. This could be added to the csv import form.",100 MDL-46548,"Improved interface for export of grades","Add the ability to dump grade data to CSV *without* selecting parameters, optionally linked to the grader report. The solution should: * contain a row of weights and a row of maximum points * contain a blank row after each category for teacher calculations * have support for letter grades as well (see MDL-44447)",20 MDL-46549,"Robust previewing + update dry running for importing grade CSVs","Integrate UCSB's CSV file preview functionality - gives preview of parsed file input and allows mapping of data from file to Moodle fields. When submitted, it provides diagnosis data about: * ""potential updates"", i.e. when importing a CSV will change existing grades * errors and underlying reasons It should also skip duplicate scores. Further detail - these are the strings being introduced for further detail: * '{$a->name} not found in system mapped to {$a->key}' * 'student {$a->name} not found in group {$a->key}' * 'invalid grade for {$a}' * 'missing grade for {$a}' * 'invalid scale value for {$a}' * 'invalid grade value for {$a}' * 'grade exceeds item max ({$a->name}) for {$a->key}' * 'duplicate grade for {$a->name} from {$a->key} to {$a->key2}' * 'changing grade for {$a->name} from {$a->key} to {$a->key2}' * 'adding grade for {$a->name} as {$a->key}' * 'Warning: Accepted grade exceeds Item Maximum' * 'Error: Grade exceeds Item Maximum' * 'Error: Grade score bypassed - Locked grade' * 'Error: Grade score bypassed - No grade' * 'Error: Grade score bypassed - Invalid grade' * 'Error: Grade score bypassed - Invalid group' * 'Error: Grade score bypassed - Invalid student' * 'Warning: Grade score bypassed - Duplicate score skipped' Other messages * likely used the wrong delimiter * Non numeric grade value supplied, possibly mapped wrong column. ",40 MDL-46567,"Clone and integrate NetSpot's gradehistory report","- Pull the module in, keep git history - Remove README file - Add the missing copyrights and file headers - Complete the PHP docs - Fix the coding style - Make sure all terms comply with MDL-46175 https://github.com/netspotau/moodle-gradereport_history",8 MDL-46568,"Clean up the history report","- Removing unnecessary or unused methods - Removing the language strings static cache - Check the module for security issues (privacy, unauthorised access, ...)",8 MDL-46569,"Migrate the history report to use table_sql","- Migrate the table to a table_sql -- Enable and check the column sorting -- Enable and check the collapsible columns - Implement autoloading of the different classes - Use the download feature, rather than the export button - Reconsider the columns (which ones to display, what order to use) - Make the name of the grader, graded users and grade item clickable -- Grader and graded go to their profile -- Grade item could go somewhere, maybe... - Do not capitalise the source column values - Page navigation should not be displayed above the filter form",40 MDL-46570,"Convert gradebook javascript to a YUI module","- Convert the YUI code into a shifter compatible module - Move ajax.php logic into a class, or another location ",40 MDL-46571,"Write Unit Tests for the history report","Write Unit Tests to ensure that the queries are returning the expected result.",20 MDL-46572,"Write a simple behat test for the history report","Write a simple behat test for the history report. {quote} As a teacher, I can see the grade history of a grade I just gave to a student {quote} ",13 MDL-46573,"Improve the SQL queries of the history report","- Fix the query not to be based on ID, but timestamps -- With unit tests confirming - Ensure that the queries include alternate name fields - Ensure the queries are cross DB",13 MDL-46574,"Add the event grade_report_viewed for the history report","Create and use a new event \gradereport_history\event\grade_report_viewed.",13 MDL-46576,"Implement Natural aggregation","* Include upgrade code to add new database columns * May involve fixing some existing unit and behat tests. * -Must have no errors or warnings in code checker-",100 MDL-46577,"Restructure Unit tests for gradebook aggregation, include natural weight","Some tests will need to be added, based these on the [""Calculation examples"" section in the spec|http://docs.moodle.org/dev/Natural_weighting#Calculation_examples]. These should be written very early to prove the state of the code. Also the items under [""Logic changes"" should be covered|http://docs.moodle.org/dev/Natural_weighting#Logic_changes]. In particular ""Sum of Grades aggregation must be fixed to exclude hidden items and to exclude non-graded items"" and ""Determination of range (in Grader and User report) and Max grade (in Setup screen) must be fixed to exclude extra credit items"". For developers who are unclear on how this new functionality works, the new unit tests should be there to explain in detail what is going on. vendor/bin/phpunit --testsuite core_grade_testsuite Relevant tests that will need to be looked at and upgraded: * lib/grade/tests * grade/tests * grade/grading/tests",40 MDL-46578,"Make Natural aggregation the (single) default aggregation method","Currently there are a number of aggregation methods. The new ""Natural"" aggregation method can cover most of the functionality of all existing aggregation methods. On new installs, this should be set as the default aggregation method. It is also possible to hide the other aggregation methods by setting it as the single selected aggregation method at the site level. Settings for both are defined at Site admin > Grades > Grade category settings. If there is only one aggregation method available, then aggregation controls should be hidden in the gradebook setup pages and wherever aggregations are named.",8 MDL-46595,"Add behat tests","Base these on the [""Calculation examples"" section in the spec|http://docs.moodle.org/dev/Natural_weighting#Calculation_examples]. These should be written very early to prove the state of the code. Also the items under [""Logic changes"" should be covered|http://docs.moodle.org/dev/Natural_weighting#Logic_changes]. In particular ""Sum of Grades aggregation must be fixed to exclude hidden items and to exclude non-graded items"" and ""Determination of range (in Grader and User report) and Max grade (in Setup screen) must be fixed to exclude extra credit items"". Write new behat tests for the new UI.",40 MDL-46597,"Locked grade items don't update on grade import","If a score for a student for a gradeitem that is being updated via import is locked, the entire set of scores being imported do not update, yet there is no message to that effect. The only current message is a notification of “Grade is locked�?. Problem - If a score for a student for a gradeitem that is being updated via import is locked, the entire set of scores being imported do not update, yet there is no message to that effect. The only current message is a notification of “Grade is locked�?. Level - Major Fix Proposed - 1 line of code modified with better error message (or a 2nd line with additional message) Solutions Proposed (S1) - print different error message (please note, the text would go into a string) Extended solution (S2)- print at least the line that had the mismatch, possibly process entire file and list all. To reproduce: # turn editing on, in the grader report, for a manual grade item, # lock a single students score. turn editing off. # Now import data into the gradebook # for that grade item, ensure you have that one student in your list You will see that *NO* grades are updated. ",13 MDL-46598,"Robust handling of bad grade import data","If data in a column being imported has a bad value, like a letter “A�?, the import can fail in two different ways. If the instructor maps the column in the data to an existing grade item, we just need better diagnostic message. IF the instructor maps the column to a “NEW GRADE ITEM�?, the import fails with a database error.",13 MDL-46599,"Importing null grade data clears existing grades","If an instructor has a data file, that has null scores for students, and the instructor imports that file, any existing scores will be cleared with those null scores. *Example real-world scenario*: when there are large classes, with multiple graders, who only grade a subset of the students. Each grader may only enter scores for their students, and have nulls for all the others.",40 MDL-46600,"Import fails if grade import data contains nonexistent user","When matching all the data records in the file, mapping the user, if there is even one record which can’t be matched in Moodle, the entire import fails. There is adequate diagnostic, displaying the first user it couldn’t find, but doesn’t tell the instructor no data was imported.",13 MDL-46602,"Write specification for improvements to scales. ","We need to get some agreement on the solution for MDL-17258 - so we need to properly specify the proposed solution. Spec: http://docs.moodle.org/dev/Scales_Improvements_Specifications",20 MDL-46603,"Improve grade_scale class to support mapping to/from points and menu generation.","The way scales are implemented currently (Moodle 2.7) is that the activity modules each re-implement the logic of retrieving a list of scale items for a given scale and creating a menu from it. The chosen item is then pushed to the gradebook via the ""grade_update"" method where the grade_item in the gradebook identifies the scale in use. It would be much better if there was a single function responsible for creating a form element that represents a scale. There are other bits of scales logic hard coded in modules such as getting the min and max for a scale, converting a scale item to a points value, getting a list of scale items, getting a normalized grade from a scale item and getting the closest scale item to a value specified in points. We should extend grade_scale from the ""grade"" api to encapsulate all this logic. This API needs unit tests.",20 MDL-46604,"Allow custom mappings of scale items -> points","An extra column will need to the added to the scales table to (optionally) store a mapping of scale items to points. This column will need to be used when converting a raw scale item to a normalised, bounded value for the gradebook finalgrade. (see grade_item::bounded_grade). A ""nice"" ui needs to be made to edit these mappings. These custom mappings need unit tests.",20 MDL-46605,"Remove custom scales logic from modules.","Modules need to replace their manual scales logic with some calls to the scales (grade) API. Very few modules actually directly use scales. ",8 MDL-46606,"Review use of scales in workshop.","Workshop has custom scales logic for calculating the average of several scales. This should be replaces with an API call. This logic converts scale items to a 0 based index before calculating the average - the reason for this this needs to be understood before we decide how it is to be handled.",13 MDL-46607,"Update advanced grading methods to support new scales mapping.","1. New method will be added to controller to specify particular scale used in the module. 2. Function get_grade() in advanced grading plugins must be amended to correctly map the grade to an item in a scale. 3. Modules supporting Advanced grading (only mod_assign atm) should tell about the scale used to the advanced grading controller (see below)",20 MDL-46608,"Add an admin setting to make the use of a particular scale the ""default"" for all grading things (gradebook columns, activities etc).","Wherever print_grade_menu is used (or the equivalent of it). ",5 MDL-46609,"Create an easy way to configure grade letters matching an existing scale. ","This would be a convenience when you want to sometimes use scales for grading and sometimes points, but you always want the result in letters (and vice-versa?).",13 MDL-46646,"Optimise grader report","Whilst playing with some larger datasets on MDL-25544, I noticed that things were a lot slower than I would expect, so I did some profiling. The profiling pulled up some easy-to-address things which can knock off a sub off the page load. These are things like: * unnecessary use of html_writer in a loop; * repeat calls to fetch gradebook user preferences without caching * repeated calls to get_string for the same static string",8 MDL-46649,"The user selector search does not respect the parameters passed","When using the user selector and loading users (while searching, or clicking ""Next 25""), the query ignores the values: - Users per page - Page number Therefore returning more users than expected, and returning the same than the ones already present when fetching more of them. This is blocked by MDL-46569, due to the transition to table_sql, because the callbacks/structure/... are changing.",8 MDL-46658,"Prepare and integrate grader code from UCLA","UCLA have submitted some code for an updated view of the gradebook and it looks that we may accept this into core. It still needs a little bit of work as part of this issue including: * Merge existing commits where relevant * Update to meet coding style guidelines (Primarily JS) * Move hardcoded styles to css * Check SASS and produce a definitive CSS/Less set (as appropriate) and remove SASS files again There may be more...",100 MDL-46661,"Add dynamic loading of content","This will likely require: * the removal of existing pagination (JS only?) * changing the model for existing content * keeping track of the fields already loaded When writing this, we need to also consider the related functionality (but this probably needs to come first): * dynamic searching * dynamic sorting",40 MDL-46662,"Accessibility improvements for gradereport course header and aggregation controls.","Provide accessibility improvements on the gradereport for screen readers. Specifically label-hides for the course header to indicate what is currently being displayed by the gradereport and altering the alt-text for the aggregation icon to better indicate it's functionality.",20 MDL-46663,"Remove old functionality","Note, these changes relate purely to features which have been replaced or superseded by new functionality, and new ways of doing things in Moodle. * r0/r1 CSS classes should be removed - deprecation policy should not apply as the interface is largely a rewrite * fixed columns system - this new method replaces them * scrollview JS - this new method replaces this code ",20 MDL-46678,"Move sql in index.php to an api","Index.php has the following hardcoded sql {code} $sql = ""SELECT u.id, "".$DB->sql_concat('u.lastname', ""' '"", 'u.firstname')."" FROM {user} u JOIN {grade_grades_history} ggh ON ggh.usermodified = u.id JOIN {grade_items} gi ON gi.id = ggh.itemid WHERE gi.courseid = :courseid GROUP BY u.id ORDER BY u.lastname ASC, u.firstname ASC""; {code} It needs to be moved to an api.",5 MDL-46695,"Get prototype onto prototype.moodle.net, promote and request feedback","Once the UMN prototype has been checked and possibly modified to meet Moodle coding standards, the prototype should be shared publicly, with an opportunity for feedback.",8 MDL-46696,"Implement backup and restore of the grades history","The backup interface provides an option to include the grade history, but this checkbox does not do anything. Now that we are providing a user interface to view the grade history (MDL-46191), we should support backup and restore of those data.",40 MDL-46732,"Review and move AJAX grading code to YUI module","We have an AJAX interface for updating grades in the gradebook, but it's off by default and it's also pretty buggy. [~johno] has started looking at it, the issues currently surrounding it, and is trying establish whether we want to enable this by default and move it into the YUI module. This is currently exploratory work and we'll need to discuss whether this is something we want enabled by default, or whether it will lead to overridden grades too frequently. https://docs.moodle.org/dev/Grader_report_2014#Main_display",40 MDL-46736,"Handle grades associated with deleted grade items in the history report","The query getting all the grades joins on grade_item to filter on course ID. Whenever a grade item is not found, the course ID would be considered as null and thus not being used. We need to update the SQL query to handle the deleted grade items, possibly by joining on the grade_item_history table rather than the grade_item one. {code} $ git grep MDL-46736 grade/report/history/tests/report_test.php: // TODO MDL-46736 Handle deleted/non-existing grade items. {code}",20 MDL-46748,"Mathjax default SSL CDN address is down causing atto to fail to load","I just noticed on Moodle.org that atto wouldn't load on an forum post page. It was failing to load https://c328740.ssl.cf1.rackcdn.com/mathjax/2.3-latest/MathJax.js Looks like that CDN url has gone. On the plus side it looks like they've got https on their normal cdn address now so I configured moodle.org to use https://cdn.mathjax.org/mathjax/2.3-latest/MathJax.js instead. But this caused atto to completely fail to load (and the repository) - so the failure is quite dramatic h3.Steps to reproduce # Disable tex filter, enable mathjax filter # Set mathjax url to https://c328740.ssl.cf1.rackcdn.com/mathjax/2.3-latest/MathJax.js (or if that url starts working again, another broken url) # Try and add a forum post h3.Expected results * The atto editor loads and repository uploader loads * Mathjax is not available h3.Actual results * The editor doesn't load * The repo picker doesn't load",5 MDL-46772,"html_writer::table Ignore attributes for rows","Although html_table_row can take attributes, they're completely ignored by html_writer's table() function. Amongst other things, this prevents the addition of data attributes to a whole row.",5 MDL-46774,"Migrate row/column highlight code to YUI module","Reduce code duplication, improve performance reduce number of event handlers.",5 MDL-46777,"Improve behaviour of grader header, footer and sidebar on iOS 8 + IE","This issue relates to jankiness of the grader report on IE and iOS 8 Beta 4 (Safari). In iOS versions < 8, the scroll event is only fired at the end of the action, and not throughout so this is not an issue. From iOS 8 (tested with beta 4 on Safari), the scroll event is fired throughout. However, it is not fired frequently enough, resulting in a stuttering feeling. IE just sucks at tables and with a large table in the DOM, it stutters without any javascript at all. Adding the floating headers makes this more apparent for the same reason that iOS 8 appears to stutter - the scroll event is not called frequently enough, and it looks like it's stuttering as a result. We've tried several fixes for this already, and at present the code is highly optimised so that the fewest number of calculations occurs. The code also batches UI changes to reduce layout thrashing. In one sense, it would be nice to use a position of fixed, but this has it's own issues too: * iOS has a long-standing known issue where fixed items gradually disappear off the screen. As far as I can tell, there is no known fix for the iOS fixed issue, so to keep it from disappearing off screen, we would have to maintain the current solution of relative positioned elements. Maintaining two methods for this is not an ideal situation - especially just for a single ecosystem.",5 MDL-46797,"Rename ""Sum of grades"" aggregation to ""Natural""","It was considered acceptable that the Natural Weighting aggregation method would replace the Sum of grades aggregation, rather than being an additional, new aggregation method. The upgrade path to achieve this replacement is clear. A number of name suggestions were the new aggregation method, including: * Natural weighted, * Default, * Simple, * Easy, * Standard and * Natural. It was accepted by consensus that ""Natural"" concisely represented the meaning of the aggregation method and would also be consistent if it was adopted as the new default method, potentially the only default method selectable on new sites.",5 MDL-46801,"Nest weightings within categories","At the moment, on the Gradebook setup pages (Simple and Full), where weights are used, the weights are all lined up in one column. It is difficult to determine what weights belong to grade items, categories and nested grade items. The weights should be nested to indicate they are within a category.",13 MDL-46818,"Add form change checking to Gradebook setup page","Currently, if you change a weight or some other setting on the Gradebook setup page(s) and then move away from the page without clicking ""Save changes"", the changes you have made will be lost without warning. Change checking should be added to warn users of potentially losing changes before leaving the page.",8 MDL-46819,"Negative adjusted weights in the natural aggregation should not be allowed.","Entering negative weights when using the natural aggregation method should not be allowed.",13 MDL-46821,"Category colours not matching in Gradebook User report","When viewing the User report, categories are nested within a table. Each nested category has a header and footer for its section within the table. Currently, colours are used to visually identify and link those headers and footers, but at the moment, the colours are not matching or are not extended between the header and footer correctly.",13 MDL-46822,"Allow editing of weights within single category","Currently, to allow editing of weights, the cog icon at the top of the weights column needs to be clicked. The user can then edit weights all categories/items. It would be useful to be able to turn on such editing within a category. The icon for editing might need to be replaced with another icon or text to avoid confusing with the Edit icon to the right.",20 MDL-46824,"Only allow drop lowest/keep highest when items in category are equally weighted","The rule to allow the functionality to drop N lowest or keep N highest grades in a category needs to be enforced in the category settings and there needs to be help that explains when and how these options can be used. See https://tracker.moodle.org/browse/MDL-46576 for the code to branch from, unless that issue has already been integrated. See the spec at https://docs.moodle.org/dev/Natural_weighting See https://github.com/MoodleGradebookWorkingGroup/moodle/compare/master...28_natural_weights for the original prototype implementation. Weights need to take into account that some grade items will be dropped. This needs to reflected in the UI somehow. For example, maybe the weight would be ""25% or dropped"" ",40 MDL-46825,"Allow categories to be collapsed in the Gradebook setup page","The setup page(s) for the gradebook can get long and complicated when there are numerous grade items and categories. One way of potentially reducing the complexity is by allowing the categories to be collapsed on this page, much like settings pages allow sections of settings to be collapsed.",40 MDL-46827,"Allow weightings within a category to be reset","When a user manually sets a weight it becomes fixed and only other weights are changed when normalising the weights in a category. It would be good to have an option to reset the weights within a category. This would remove the flag indicating individual weights have been manually edited so they can all be normalised. This could be extended to reset the weights for the whole course.",20 MDL-46846,"Grade export does not support grade display type anymore","The format of grade is now ignored.",2 MDL-46862,"Create a mockup/prototype of the simplified, combined Gradebook Setup page","Before we can estimate the complexity of shifting and combining elements in the Gradebook Setup page, a quick prototype should be created to inform scaling.",20 MDL-46864,"Integrate Natural weighting code","This issue is to review the code ready for modification within Moodle. This will establish a working branch for collaboration in relation to this issues siblings.",40 MDL-46873,"Publish prototype and publicise","Publish prototype and publicise",8 MDL-46902,"When searching for a course that does not exist a non-sensical string is displayed.","# Search for a course from the course management page that does not exist, eg. ""NOWAYTHISCOURSEEXISTSIFITDOESWOWYOUCRAZY"". # You will get the strange string ""Showing courses -19 to 0 of 0 courses"" due to Moodle performing arithmetic with the value of 0 (($page * $perpage) + 1).",5 MDL-46907,"Refactor user_button class to remove js methods","As per the review on the parent epic the user_button class needs to be refactored as well - {quote} This user_button class is terrible. It just exposes methods to allow calling the js init functions it requires - but those functions are called from outside the class - ie the caller has to know all the functions and params that are required for the JS. Further - it builds up arrays of init functions and modules of which there is only one, and then calls them, in an inefficient way which prevents comboloading. {quote}",20 MDL-46920,"Data-target does nothing","Currently on themes based off bootstrap base have a button that expands the header and displays the users logged in status. This button has a data-target property which is meant to specify (or so I would think) what DOM elements are to be hidden or displayed at narrow screen resolutions",3 MDL-46921,"Allow sorting on additional name fields.","The sorting of tables can only be done on the users first name and surname. There should be a way to sort on the additional name fields (firstnamephonetic, lastnamephonetic, middlename, alternatename).",20 MDL-46923,"Typo in behat function name","The functions 'following_should_exit_in_the_table' and 'following_should_not_exit_in_the_table' have typos.",3 MDL-46936,"Restore AJAX editing","After the import of UCLA code, the AJAX editing has broken. In addition *Todo* * -AJAX doesn't load at all. Missing id column so incorrect variables are supplied as arguments to module.js- * -Click to edit fields- * -Clicking on another element of the page should save- * -On blur (deselect) the change should save- * -Hitting escape should cancel - non edit mode- * -Arrow keys - Ctrl+Arrow Key fine on everything except Safari (and then it's just control+command+key)- * -Headings become misaligned when you edit an entry.- * -Analysis icon being forced to second line when editing cell- *Not handling* * ""Cannot read property 'setStyle' of null"" error message - cannot reproduce * 'Error click this box to remove it' - error box is just text and not a box Occurs when invalid text is submitted to a cell * Javascript error - undefined is not a function (this._hideSpinner()) - will be handled in MDL-25544 * Totals at the bottom aren't updated when you edit a cell. - will be handled in MDL-46658 * Row not highlighted when you click in the name field - will be handled in MDL-46658, unrelated to AJAX editing * TAB'ing behaviour only works as desired on FF. (and even then it's not great, at the end of the column it tabs out) In IE, Safari and Chrome it tabs to elements outside of the table. ",20 MDL-46950,"Re-organised CSS of the grader report","- The original CSS needs to be used in conjunction with the styles.css in the most recent commit, removing the excess from the original, etc. - Move all colours to bootstrapbase + base themes -- Consider using LESS variables when relevant -- Test the result on More - The usage of table-striped needs to be considered We should also consider the style in general, as the colours are a bit off compared to the current themes. This could be deferred to another issue.",13 MDL-46951,"Make the grader report work on theme_base and derivatives","* Offsets are whacky - could be related to negative margins * Tooltips are not working ",20 MDL-46962,"Handle floating objects with RTL languages","RTL does not work so far, we have to invert the computations as everything aligned on the right should be aligned on the left, etc...",8 MDL-46966,"change the default value of grade_aggregations_visible","Changing the default value of grade_aggregations_visible to only include Natural is enough. The default for grade_aggregations_visible should be changed to only be sum of grades. If FORCE_SUM_OF_GRADES is in the code, it can be removed.",5 MDL-46967,"Remove grade/lib.php update_field()","Replace it by using Moodle's existing database methods or at least something that cannot be used to update anything in the database. Perhaps something like update_weight() in grade_items and another one for grade_grade instances.",5 MDL-46980,"Move install code into core","Right now the install code is in local/gradebookcoredb. It needs to be moved into core. Also upgrade code needs to be written. Then the local plugin can be removed.",8 MDL-46988,"Fix RTL styling of the new grader report","The CSS styles are not always very well set up for RTL languages. For instance the margin between the user picture and the full name. Or some text alignment, etc...",5 MDL-46997,"Sum of Grades still not calculating correctly with hidden items","In the following example on a vanilla instance of core 2.6.4+ with ""exclude hidden items from totals"" set on the course, I created two categories (aggregation set to Sum of Grades), each with two 100-point items, and gave the student 100 points for each item (400 total points). I then hid item 4 which should change the totals to 300/300. Gradebook Testing Category 1 Item 1 100.00 0–100 100.00 % Item 2 100.00 0–100 100.00 % Category total 200.00 0–200 100.00 % Category 2 Item 3 100.00 0–100 100.00 % Item 4 (hid) - 0–100 - Category total 100.00 0–100 200.00 % Course total 200.00 0–200 200.00 % As you can see from the results, the hidden item results in the course total of 200 points (and 200%), and Category 2 has the wrong percentage. ",8 MDL-47006,"Add weights to sum of grades / natural","Add weights from weighted mean of grades. Leave as numbers for now, will change to percentages later + Fix the display of the weight fields with natural aggregation to always display percentage (main screen, edit screen of grade item, edit screen of grade category, maybe outcome too) (was MDL-47125) + When using aggregation method 'Simple weighted mean', the extra credit field is a input field, which name is aggregationcoef2. (was MDL-47112)",40 MDL-47009,"Update reports so that they display natural weights properly","The 'user' report and the 'grader' report will need to be able to display grades with the weighting applied. Check out Damyon's patch for MDL-46139 for areas that need to be changed to implement this.",20 MDL-47011,"Apply natural weights to all grade items when setting up the gradebook.","All assessments and categories should have a natural weight applied by default. e.g. assignment one 75 points - weight = 75% assignment two 25 points - weight = 25% Total weight = 100% If one of the weights is manually altered, then the other assignments should be automatically updated to equal 100% e.g. assignment one 75 point - weight manually changed to 80% assignment two 25 point - weight automatically updated to 20% Total weight = 100% We thought that perhaps an additional field could be added to the grade_item table of weightoverride like the demo code has, to determine if a weight was manually changed or not.",20 MDL-47022,"Implement ""Export since"" filter on grade export","The current grade export feature does not have a way to filter the results by date. While working on MDL-46599 we found the necessity of create a new filter by date and time, in order to fix this bug properly. The main concept is allow users to export grades from a past date to now, and save the last export date for further reference. Another benefit of this new feature would be standardize all export formats (OpenDocument, Plain Text, Excel and XML). We're still considering about the possibility of replace the *Export new or updated grades only* by this date filter. However this could turn this issue too expensive because the XML structure is different of other export formats and is being used by OU and it rely on a config: *gradeexport*. ",40 MDL-47025,"Fix highlighting behaviour in the new grader report","It does not appear to work any more, probably due to recent changes.",5 MDL-47026,"The tooltip prevents the user from entering the feedback field","When editing is turned on, the tooltip appears over the field ""quick feedback"" which prevents the user from entering text in it.",5 MDL-47027,"Styling for the grader report when editing is turned on","Due to the changes in MDL-46950, a couple of styles are missing and the editing interface does not look very sexy any more.",8 MDL-47045,"Bring in code from UCLA","Just a stub task to bring the code from UCLA into the working branch.",20 MDL-47046,"Update code from UCLA to meet coding style guidelines","Another stub issue to get issues against the actual work body.",40 MDL-47053,"Add floating title for the footer","When scrolling right, the title for the footer needs to float hard too.",8 MDL-47055,"reimplement extra credit handling with natural weights.","See https://tracker.moodle.org/browse/MDL-46576 for the code to branch from, unless that issue has already been integrated. See the spec at https://docs.moodle.org/dev/Natural_weighting See https://github.com/MoodleGradebookWorkingGroup/moodle/compare/master...28_natural_weights for the original prototype implementation.",8 MDL-47056,"Grader report displays ""error"" for single item in new course","If you create a new course, enrol a student, create one assignment then go to the grader report it reports ""Error"" as the student's grade. Changing a setting like weight or aggregation method may resolve it.",20 MDL-47059,"Investigate/fix handling of hidden and excluded grades within natural weights","Simple description of this issue: Make natural weighting compatible with excluded grades (either excluded by exclude empty grades, or manually excluded grades). What needs to happen for this to work: The ""automatic"" weights for each grade_item natural weighting will need to be adjusted ""per user"" depending on the grades that are excluded. The max grade for the category will need to be different ""per user"" depending on the grades that are excluded. Very simple example: ||Grade item||Max grade||Natural Weight|| | Assign 1 | 10 | 10 % | | Assign 2 | 20 | 20 % | | Assign 3 | 30 | 30 % | | Assign 4 | 40 | 40 % | Total = 100 If item 2 is excluded because the student has not submitted anything and ""exclude empty grades"" is enabled - ||Grade item||Max grade||Natural Weight|| | Assign 1 | 10 | 12.5 % | | Assign 3 | 30 | 37.5 % | | Assign 4 | 40 | 50 % | Total = 80 Further more - currently we recalculate the ""view"" if show totals excluding hidden items is enabled. Depending on the performance of recalculating all of the above at page load time - we may need to add additional columns to store the ""view"" for users without view hidden grades capability. (This would be 3 extra columns on grade_grade) Older - more complicated description: At the moment, excluded and empty grades not being calculated in the final grade, is not enabled with sum of grades (the basis of natural weights). Also currently we have not introduced code to handle displaying hidden grades in the reports. To do: # Update reports to not consider empty grades. This work will be partially solved by MDL-47078. # Update reports to exclude hidden grade items. Please note that hidden grade items are items hidden to all students and doesn't cover conditional access to activities. Examples : (Please note that this is the desired outcome) *Exclude empty grades* Student 1 ||Grade item||Grade||Percent|| | Assign 1 | 10 / 20 | 50 % | | Assign 2 | 10 / 40 | 5 % | | Assign 3 | - / 80 | - | | Total | 20 / 60 | 33.33 % | Student 2 ||Grade item||Grade||Percent|| | Assign 1 | - / 20 | - | | Assign 2 | - / 40 | - | | Assign 3 | 20 / 80 | 25% | | Total | 20 / 80 | 25.00 % | Student 1 20 (33.00%) Student 2 20 (25.00 %) *Exclude hidden grade items* Student 1 ||Grade item||Grade||Percent|| | Assign 1 | 10 / 20 | 50 % | | Assign 2 - hidden | - / 40 | - | | Assign 3 | 40 / 80 | 50% | | Total | 50 / 100 | 50.00 % | Student 2 ||Grade item||Grade||Percent|| | Assign 1 | 15 / 20 | 75% | | Assign 2 - hidden | - / 40 | - | | Assign 3 | 20 / 80 | 25% | | Total | 35 / 100 | 35.00 % | Student 1 20 (50.00%) Student 2 20 (35.00 %) *Additional technical information:* https://tracker.moodle.org/browse/MDL-46139 introduced a field, grade_grade::aggregationweight that may be helpful. Currently, grade_category::auto_update_weights() adjust grade_item weights but does this trickle down to grade_grades? If an individual student cannot see an activity is zeroing grade_grade::aggregationweight and recalculating the weights in that category for that student sufficient? This code may want to living in get_hiding_affected() in grade_grade.php.",20 MDL-47062,"Create an update script for natural grading","We need an upgrade script to calculate natural weights on grade items when changing from 'sum of grades' to 'natural'. Currently all weights are set to 0.0 when upgrading to this code.",8 MDL-47063,"Classes .overridden and .ajaxoverridden are not changing the styles","The styles for .ajaxoverridden were lost in another issue, they should be restored. Though they will suffer from the same problem than the one happening for .overridden: some other rules (with nth-child()) takes precedence over it and so the background color is not updated. We should make overridden more important.",5 MDL-47064,"Add contribution column to the user report","In the user report (grade/report/user/index.php) the contribution column should display what percentage each grade item adds to the course/category total percentage Base off branch in https://tracker.moodle.org/browse/MDL-46576 ",40 MDL-47098,"If you adjust the weight of a category itself you cannot un-override it","Put a category within a natural weight category and adjust its weight. For a regular grade item if you click the cog/settings icon the resulting page has weight and weight adjusted settings that allow the user to un-override the weight adjustment. These do not exist on the category page.",8 MDL-47110,"Automatically normalise weights, and notify users","Currently the weights in the Natural weighting aggregation method are not normalised to percentages. If a user provides weights in a category that do not sum to 100, they need to be automatically proportionally adjusted. It would be helpful to add a notification, possibly within the category that has been updated, that informs the user that their figures have been normalised to become percentages.",20 MDL-47124,"Update table row/column sizes when AJAX quick editing","Update table row/column sizes when AJAX quick editing Needs to use either a global namespace, or a global event.",5 MDL-47127,"Update ""date till"" string in the grade history report","As discussed in the meeting ""date till"" should be updated to ""date to""",2 MDL-47146,"Implement the prototyped changes","See MDL-46862. The changes in the prototype were made by commenting out code and similar. They changes can serve as a guide for the final version but do not meet acceptable coding standards.",20 MDL-47147,"Review third party libraries for new versions","There are a number of third-party libraries distributed with Moodle. Before the major release, the available versions of these libraries should be reviewed. # Check the list at https://docs.moodle.org/dev/Moodle_libraries_credits, which should be up to date with lib/thirdpartylibs.xml and other thirdpartylibs.xml files distributed around Moodle. # Add any newly incorporated libraries into the list # Check the available versions of each library #* If there is a significant new version and updating is recommended, the new version should be integrated by creating a sub-task to this issue and processing it through integration independently. If there is a readme_moodle.txt file with the plugin, this describes the customisations made for Moodle.",13 MDL-47148,"Event monitor: Write behat tests for the tool","Write behat tests for the tool",20 MDL-47149,"Event monitor: Write QA tests for the tool","Write QA tests for the tool",20 MDL-47152,"Event monitor: Add help icon on subscriptions manage page","On subscriptions manage page, there should be a help icon which provide further details on each rule. This should be present in both the tables. This can possibly include information such as event name, module name, description, etc. Up to the assignee to decide the best amount of info. Since our help icon infrastructure only supports static content at this point, this might involve writing some yui code to generate custom panels for displaying the help content.",20 MDL-47153,"Event monitor: Trigger various events","When a rule critieria is met, an event should be triggered. In this issue we should create the event + unit tests",8 MDL-47171,"Event monitor: Remove dependency on MDL-46155","Either remove dependency on MDL-46155, or get MDL-46155 integrated",13 MDL-47242,"Fix nested custom_menu responsive display","Identified during MDL-45893, deeply-nested items have hover behaviour that's not consistent with root-level items. Responsive issues with dividers on 2.8 have been split off into MDL-47244.",5 MDL-47243,"Outcome items weight cannot be edited","Presently, the outcome weight is not editable when using the natural weighting aggregation method. I should be editable.",20 MDL-47244,"Dividers don't display well in responsive layouts","Identified during MDL-45893, dividers appear as horizontal lines in responsive menus when they should be vertical instead.",3 MDL-47252,"Discussion subscriptions visible (and broken) to guests","Discussion subscriptions visible (and broken) to guests # Create a new forum on the course front page # Create a discussion in the forum # Logout # View the forum as a guest #* *The envelope icons are visible, and clicking them gives an error*",8 MDL-47253,"Change default aggregation method to ""Natural""","At the moment the default visible aggregation methods is ""Natural"" only but at the same time the default aggregation method is ""weighed means"" Make sure that all behat tests pass!",8 MDL-47254,"Backup / restore aggregationcoef2 and weightoverride","The aggregationcoef2 needs to be backed up when a course using it is backed up.",5 MDL-47255,"Record aggregationcoef2 and weightoverride in grade history","When aggregationcoef2 is modified, it should store in grade history, and when something else is modified, the aggregationcoef should be stored",5 MDL-47260,"Undefined offset when using another aggregation method than Natural","# Set the aggregation method to 'Simple weighted mean of grades' # Set a weight on an item # Press 'Save changes' *Expected* - Nothing happens *Actual* - A wild notice appears",8 MDL-47280,"Include YUI gallery modules properly","As per topic.",3 MDL-47294,"Upgrade S3 library in repository_s3 to 0.5.1-dev for Moodle 2.8 release","Library S3 Current version: 0.5.0-dev Latest version: 0.5.1-dev https://github.com/tpyo/amazon-s3-php-class changes: https://github.com/tpyo/amazon-s3-php-class/compare/56770370c33a5310c5e07a9d22aef8c162f150ee...master Make sure to update files: - repository/s3/S3.php (library itself) - repository/s3/thirdpartylibs.xml (indicate the current version) - repository/s3/readme_moodle.txt (indicate the current version and/or changes made) ",5 MDL-47295,"Upgrade AdoDB library to 5.19 for Moodle 2.8 release","Library: AdoDB Current version: 5.18 Latest version: 5.19 http://adodb.sourceforge.net/ (this library used by auth plugins only) Make sure to update files: - lib/adodb/ (library itself) - lib/thirdpartylibs.xml (indicate the current version) - lib/adodb/readme_moodle.txt (indicate the current version and/or changes made) ",5 MDL-47297,"Upgrade Google APIs Client Library to 1.0.5 for Moodle 2.8 release","Library: Google APIs Client Library Current version: 0.6.0 Latest version: 1.0.5-beta https://github.com/google/google-api-php-client Make sure to update files: - lib/google/ (library itself) - lib/thirdpartylibs.xml (indicate the current version) - lib/google/readme_moodle.txt (indicate the current version and/or changes made) ",8 MDL-47298,"Upgrade Compatible password hashing library for Moodle 2.8 release","Library: Compatible password hashing There are no versions, just github branch, changes from the last pull: https://github.com/ircmaxell/password_compat/compare/2a7b6355d27c65f7e0de1fbbc0016b5b6cd8226b...master Make sure to update files: - lib/password_compat/ (library itself) - lib/thirdpartylibs.xml (indicate the current version) - lib/password_compat/readme_moodle.txt (indicate the current version and/or changes made) ",5 MDL-47299,"Upgrade PHPMailer to 5.2.9 for Moodle 2.8 release","Library: PHPMailer Current version: 5.2.7 Latest version: 5.2.9 https://github.com/PHPMailer/PHPMailer Make sure to update files: - lib/phpmailer/ (library itself) - lib/thirdpartylibs.xml (indicate the current version) - lib/phpmailer/readme_moodle.txt (indicate the current version and/or changes made) ",5 MDL-47301,"Upgrade Typo3 library to 4.7.19 for Moodle 2.8 release","Library: Typo3 Current version: 4.7.15 Latest version: 4.7.19 http://typo3.org/download/ Make sure to update files: - lib/typo3/ (library itself) - lib/thirdpartylibs.xml (indicate the current version) - lib/typo3/readme_moodle.txt (indicate the current version and/or changes made) ",5 MDL-47307,"Upgrade Markdown to 1.4.1 for Moodle 2.8 release","Library: Markdown original+extra Current version: 1.4.0 Latest version: 1.4.1 http://michelf.ca/projects/php-markdown/ Make sure to update files: - lib/markdown/ (library itself) - lib/thirdpartylibs.xml (indicate the current version) - lib/markdown/readme_moodle.txt (indicate the current version and/or changes made) ",5 MDL-47345,"Category max grade is not properly updated when using extra credit","# Set up a gradebook with a sub category #- 2 items in the sub category (leave defaults) #- 2 items in the top category (leave defaults) # Set all categories to use 'Natural weighting' #- All the weights should have been set automatically #- Notice the sub category max grade is 200, and both items are weighted as 50 # Tick the extra credit checkbox of one of the items in the sub category # Click ""Save changes"" *Expected* - The category max grade is 100 - The category weight is equal to other items in the parent category *Actual* - The category max grade is 200 - The category weight is not equal to the other items in the parent category",8 MDL-47346,"Record aggregationstatus and aggregationweight in the history tables","The grade_grades table defines: - aggregationstatus - aggregationweight but those fields are not recorded in the history report. We have to decide whether or not this information is valuable enough to be saved. Implementing those fields after release might lead to inconsistent history as it will be very tricky (read impossible) to recompute the values of those columns during an upgrade. This issue should also answer the question ""Should these fields be displayed in the history report"" and if yes, add them.",20 MDL-47353,"Test the Grader report on a number of third-party themes","To ensure that the changes made to base and bootstrapbase themes are correctly affecting derivative themes, a number of third-party themes (including Standard) should be tested.",8 MDL-47358,"Ensure changes to categories and effects on grade items are recorded in Grade history","Changes made to and within categories in the Setup page should be recorded in the Grade history. These include changes to aggregation method, weight, max grade and other category settings. Where these changes affect grade items (through recalculation) these changes should also be recorded and shown in the Grade history report.",8 MDL-47373,"Fix bug where categories do not show Adjusted when they are","h4. Reproduction # Create three categories: A - Natural > B - Simple weighted >> C - Simple weighted # Adjust category B # B does not display ""Adjusted"" even though it is",8 MDL-47377,"Do not include items with a weight of 0 in the max grade.","This allows items to be graded, but have no effect on the final grade. E.g. a practice quiz.",8 MDL-47417,"grademax should be reset to 100 when switching from natural agg method to different one","if category with any other than natural agg method is created the grademax is set to 100. When we change the agg method to natural the grademax is adjusted. When we change the agg method from natural to anything else the grademax is NOT set to 100. P.S. I don't know atm if 100 is hardcoded or is a setting",5 MDL-47418,"Missing table header in behat step causes debugging.","This doesn't cause the test to fail - but I see this in the output: PHP Warning: array_shift() expects parameter 1 to be array, boolean given in /home/damyonw/Documents/Moodle/instances/im_demo1/moodle/lib/tests/behat/behat_general.php on line 1085 PHP Stack trace: PHP 1. {main}() /home/damyonw/Documents/Moodle/instances/im_demo1/moodle/vendor/behat/behat/bin/behat:0 PHP 2. Symfony\Component\Console\Application->run() /home/damyonw/Documents/Moodle/instances/im_demo1/moodle/vendor/behat/behat/bin/behat:32 PHP 3. Behat\Behat\Console\BehatApplication->doRun() /home/damyonw/Documents/Moodle/instances/im_demo1/moodle/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:121 PHP 4. Symfony\Component\Console\Application->doRun() /home/damyonw/Documents/Moodle/instances/im_demo1/moodle/vendor/behat/behat/src/Behat/Behat/Console/BehatApplication.php:68 PHP 5. Symfony\Component\Console\Application->doRunCommand() /home/damyonw/Documents/Moodle/instances/im_demo1/moodle/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:191 PHP 6. Symfony\Component\Console\Command\Command->run() /home/damyonw/Documents/Moodle/instances/im_demo1/moodle/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:895 PHP 7. Behat\Behat\Console\Command\BehatCommand->execute() /home/damyonw/Documents/Moodle/instances/im_demo1/moodle/vendor/symfony/symfony/src/Symfony/Component/Console/Command/Command.php:241 PHP 8. Behat\Behat\Console\Command\BehatCommand->runFeatures() /home/damyonw/Documents/Moodle/instances/im_demo1/moodle/vendor/behat/behat/src/Behat/Behat/Console/Command/B",5 MDL-47420,"Fix unit tests broken in the dev branch.","Currently they are failing: PHP Fatal error: Call to a member function get_aggregation_hint() on a non-object in /home/damyonw/Documents/Moodle/instances/im_demo1/moodle/grade/report/lib.php on line 436 ",8 MDL-47430,"Natural aggregation normalizes values to the range mingrade -> maxgrade - it should use 0 -> maxgrade","While this behaviour is logical - it is different to the old behaviour - and since nothing in the spec says to change it - we need to update the code to work like ""sum of grades"" used to and write a behat test to lock it in. Quick explanation of what should happen: Manual grade item with a min grade of 10 and a max grade of 20 If I get 15 for this item - 20 should be added to the category grademax and 15 added to the total (Assuming automatic weights). Manual grade item with a min grade of -10 and a max grade of 20 If I get 15 for this item - 20 should be added to the category grademax and 15 added to the total (Assuming automatic weights). A Scale should use the values 0 - number items in the scale. The first item in the scale gets a grade of 1, 0 is for items set to ""No grade""",13 MDL-47457,"We need a log in icon for the user menu.","We need a log in icon for the user menu. There is a todo in code for this issue (around user/lib.php line 688). The user menu usually shows an icon for each item, however if you log in as guest there is no icon for logging in as a valid user.",3 MDL-47460,"Event monitor: Fix missing alt on icons","The delete, edit and copy icons don't have an alt message, this is necessary to behat tests.",3 MDL-47490,"Finish VERP work in current sprint","Rather than pulling in work which was largely created in other sprints, this issue is a placeholder for the VERP-related work remaining in this sprint.",40 MDL-47492,"Add behat tests for displaying scales in gradebook","Some behat tests that ensure that scales are treated correctly in the Gradebook and we did not break it in the natural weighting branch. This also includes improvement to the table-reading behat steps that allows to specify column indexes instead of column headers",13 MDL-47520,"Styling changes for gradebook design improvements","Barbara needs more CSS classes for her work on MDL-47363 Seems reasonable to add those classes inside natural aggregation branch so she will (hopefully) only need to work with .less and .css 1. Add classes 'levelodd' and 'leveleven' (or 'depthodd' and 'deptheven') for cells in user report and setup page, and also make sure that 'level1', 'level2', etc. are added to each cell. This classes will be used for swapping background color for netsted categories and adding indentation to some fields. Add missing classes specifying which column cell belongs to, the table itself, the empty row, etc -2. Remove ""Category total"" row from setup page and move it's contents into the category header row. This will involve changing some behat tests checking the contents of the table.-",8 MDL-48145,"Decide Moodle 2.9 requirements and push them to environment.xml","We need to decide ASAP about all the PHP/DB/Moodle versions requirements and put all them into the environmental tests (adding them to all supported branches). At the same time, if there is any change in the PHP version... some changes have to be populated to various installers and replace them by the new one when corresponding. To get a list of candidates: grep -r '5\.x\.y' * | grep '\.php' (and look for MDL-39007 status, about to unify all those duplicated checks) (and don't forget about the MyISAM thing @ MDL-46064) Ciao :-)",13 MDL-49461,"Mark competencies complete when the course is completed","Completing the course will complete any assigned competencies by assigning the default value from the competency scale. Note that depending on the course competency rule we could set the competency as ""Recommended"", or do nothing.",5 MDL-49463,"A user can upload evidence or prior learning","This issue is about creating a model and interface for a user to add evidence. User evidences are stored using the persistent _user_evidence_. They may contain a title, description, one URL and files. Only one URL can be linked, others should be added to the description, this can be clarified in the help popup for the URL. At this stage the evidence will not be linked to a competency. ",13 MDL-49464,"Course competency links should be included in course backup/restore","The course competency should be restored, if the competency exists in the site (match of idnumber of both the competency and the framework).",2 MDL-49516,"Upgrade S3 library in repository_s3 to 0.5.1-dev for Moodle 2.9 release","Library S3 Current version: 0.5.1-dev 8413f6f70ad3bb79ae756958d4ba2238514b00af Latest version: 0.5.1-dev 2cf80b2 https://github.com/tpyo/amazon-s3-php-class changes: https://github.com/tpyo/amazon-s3-php-class/compare/8413f6f70ad3bb79ae756958d4ba2238514b00af...2cf80b2 Make sure to update files: - repository/s3/S3.php (library itself) - repository/s3/thirdpartylibs.xml (indicate the current version) - repository/s3/readme_moodle.txt (indicate the current version and/or changes made) ",5 MDL-49517,"Upgrade AdoDB library to 5.19 for Moodle 2.9 release","Library: AdoDB Current version: 5.18 Latest version: 5.19 http://adodb.sourceforge.net/ (this library used by auth plugins only) Make sure to update files: - lib/adodb/ (library itself) - lib/thirdpartylibs.xml (indicate the current version) - lib/adodb/readme_moodle.txt (indicate the current version and/or changes made) ",5 MDL-49519,"Upgrade Google APIs Client Library to 1.1.2 for Moodle 2.9 release","Library: Google APIs Client Library Current version: 1.0.5-beta Latest version: 1.1.2 https://github.com/google/google-api-php-client Make sure to update files: - lib/google/ (library itself) - lib/thirdpartylibs.xml (indicate the current version) - lib/google/readme_moodle.txt (indicate the current version and/or changes made) ",8 MDL-49520,"Upgrade Compatible password hashing library for Moodle 2.9 release","Library: Compatible password hashing There are no versions, just github branch, changes from the last pull: https://github.com/ircmaxell/password_compat/compare/c91b1168bc53c26f56fc65f16958b5be45ca5dc9...master Make sure to update files: - lib/password_compat/ (library itself) - lib/thirdpartylibs.xml (indicate the current version) - lib/password_compat/readme_moodle.txt (indicate the current version and/or changes made) ",5 MDL-49521,"Upgrade PHPMailer to 5.2.9 for Moodle 2.9 release","Library: PHPMailer Current version: 5.2.7 Latest version: 5.2.9 https://github.com/PHPMailer/PHPMailer Make sure to update files: - lib/phpmailer/ (library itself) - lib/thirdpartylibs.xml (indicate the current version) - lib/phpmailer/readme_moodle.txt (indicate the current version and/or changes made) ",5 MDL-49523,"Upgrade Typo3 library to ??? for Moodle 2.9 release","Library: Typo3 Current version: 4.7.15 Latest version: ??? http://typo3.org/download/ Make sure to update files: - lib/typo3/ (library itself) - lib/thirdpartylibs.xml (indicate the current version) - lib/typo3/readme_moodle.txt (indicate the current version and/or changes made) Sorry - I can't actually tell which branch we pulled the code from. The readme_moodle.txt is not detailed enough.",5 MDL-49528,"Upgrade Markdown to 1.5.0 for Moodle 2.9 release","Library: Markdown original+extra Current version: 1.4.1 Latest version: 1.5.0 http://michelf.ca/projects/php-markdown/ Make sure to update files: - lib/markdown/ (library itself) - lib/thirdpartylibs.xml (indicate the current version) - lib/markdown/readme_moodle.txt (indicate the current version and/or changes made) ",5 MDL-49533,"Move alfresco repository to plugins DB","It relies on a no longer maintained php library that does not work against current versions of alfresco. http://code.google.com/p/alfresco-php-sdk/",2 MDL-49599,"Deprecate old boxnet v1 API","Just noticed this in a TODO from MDL-42666 [~fred], any chance we can do this for 2.9? Cheers {code} /** * Migrate the references to local files. * * As the APIv1 is reaching its end of life on the 14th of Dec 2013, and we cannot * convert the existing references to new references, we need to convert them * to real files. * * @todo Deprecate/remove this function after the 14th of December 2013. * @return void */ {code}",1 MDL-50051,"Make sure all functions in lib/deprecatedlib.php have debugging message","Go through all functions in lib/deprecatedlib.php and make sure they all: * display developer debugging message * have {{@deprecated since X.X}} phpdocs token If some functions do not do any of that, add {{@deprecated since 3.0}} and debugging message. AFAIK some of functions are still used in Moodle. *Make sure to grep* !",3 MDL-50182,"Decide Moodle 3.0 requirements and push them to environment.xml","We need to decide ASAP about all the PHP/DB/Moodle versions requirements and put all them into the environmental tests (adding them to all supported branches). At the same time, if there is any change in the PHP version... some changes have to be populated to various installers and replace them by the new one when corresponding. To get a list of candidates: grep -r '5\.x\.y' * | grep '\.php' (and look for MDL-39007 status, about to unify all those duplicated checks) Ciao :-)",13 MDL-50253,"Competencies can be related to other competencies","You need to be able to link competencies to each other. This has no effect on the code logic, only display. Where we show the details we should also show the related competencies. In order for the migration from one framework to another to work we will only permit linking to competencies within the same framework at this stage. Note: duplicating frameworks should support this as well. Please consider this and raise another or report it to the related issue MDL-51602 if it's not finished yet.",8 MDL-50267,"Remove strings deprecated in 2.9","Remove strings from language files under the heading ""Deprecated in Moodle 2.9"" and the respective lines in deprecated.txt files See also https://docs.moodle.org/dev/String_Deprecation",1 MDL-50328,"Allow competencies to be assigned to a user learning plan","Followup from MDL-49460. This issue assumes that there already is a competency picker, or existing code, to select a competency using Javascript. Also, this issue should allow for a user to remove a competency from a plan. Implement reordering if you wish to, otherwise please raise a follow-up.",5 MDL-50439,"Create a universal block to display CBE related information","We will create a universal block for CBE related content and information, typically used on the dashboard it will not be limited to there. The block will display: # Plans #- Current active learning plans #- Progression of current plans #- Link to all learning plans # User competencies to review # Plans to review Maybe at a later stage this block could also link to the ""mentees"" of the current user, as in the users in which the current user has a specific capability. The block will define its own pages listing the elements cited above. For example, the user competencies will be reviewed directly from a block page, extending tool_lp templates to avoid code duplication. In theory the block will only rely on the API methods provided by tool_lp and not include any logic of its own.",13 MDL-50482,"Add ability to duplicate a learning plan template","The docs say ""Learning plan templates should allow ""duplication"" to create a new template for a new year (for example)"" but currently this behaviour does not exist.",1 MDL-51024,"Create a new page that can migrate a set of courses from one competency framework to another","The use case is for updating to a newer curriculum, but leaving already completed competencies un-modified. The workflow would be to either duplicate the old framework and make changes to it, or create a new one and import from file, then choose which courses should be moved to the new framework and trigger a script that will look for competencies that exist in both frameworks (matched on idnumber) and update the course / activity competencies to point to the new framework. This process should produce a report of competencies that were mapped, competencies that could not be mapped, as well as new competencies that did not exist in the old framework. From the spec: ""A competency framework can be duplicated, and there is an admin tool for migrating courses from one framework to another (as long as the idnumbers between the competencies in the frameworks can be matched)."" ",13 MDL-51026,"A competency framework can customise the terms for up to 4 competency levels","We will restrict the depth of the competency frameworks so that we can allow customisable language to describe each level of a competency. From the spec: ""The taxonomy refers to the naming for each level in the framework. Up to 4 levels are supported, and the name for each level can be set from the following list: Domain, Competency, Behaviour, Indicator, Outcome, Level, Concept, Value, Practice, Skill, Proficiency"" These will be provided by language strings, so they can be displayed in different languages (not taken from user input). All other screens should replace the word ""Competency"" and ""Competencies"" with the correct term depending on the depth of the competency. The number of terms will be fetched from a method in the framework class, just to ensure that later on we can change this number, or make it match a configuration variable. The term levels can either be saved in 4 columns, or in 1 column (_taxonomies_) with serialised data. The serialised data is less flexible but it seems unlikely that we will need to fetch just 1 term, or filter per term without loading the framework object. The terms are using constants and will be mapped to language strings, e.g.: {noformat} const TAXONOMY_DOMAIN = 'domain'; const TAXONOMY_COMPETENCY = 'competency';public function get_taxonomy($level); public static function get_taxonomy_for_term($constant); {noformat}",3 MDL-51029,"Add ""completion rules"" for all competencies in a framework that are branches","If a competency framework is configured to use 3 levels - levels 1 and 2 will allow completion rules to be configured so that when the ""leaves"" are marked complete - the ""branches"" can be marked as complete (or recommended) by the rule. https://docs.moodle.org/dev/images_dev/c/c9/cbe_spec06_v2.jpg One last option would be to leave the competency unchanged regardless of the status of its children.",8 MDL-51033,"Create User Learning Plans from a Learning Plan Template","See screenshot and description from spec: https://docs.moodle.org/dev/Competency_Based_Education#User_learning_plans The data in easy user plan will be exactly the same as the template, but also include the template ID as a reference to the original template. The user plan will be updated so that it gets its competencies from the template competencies when a link is present, this in order make it more efficient to update a template and related plans. The most complex part of this issue will probably be about creating the user interface which allows to pick users and cohorts. We can raise another issue to resolve this if need be. Note: Perhaps we can use the newly introduced auto complete field (MDL-51247?).",8 MDL-51034,"Add page to list competencies in a user learning plan","This page is linked in the menu, but doesn't exist currently. https://docs.moodle.org/dev/images_dev/b/ba/cbe_spec12.jpg -Also, this issue should allow for a user to remove a competency from a plan. Implement reordering if you wish to, otherwise please raise a follow-up.- Moved to MDL-50328",3 MDL-51035,"Create workflow for requesting approval, and approving draft learning plans.",https://docs.moodle.org/dev/Competency_Based_Education#User_learning_plans,1 MDL-51036,"Create a workflow for requesting a competency be reviewed, and reviewing outstanding requests","See Spec: https://docs.moodle.org/dev/Competency_Based_Education#User_learning_plans",1 MDL-51039,"Add completion rules to course - competency links","For competencies linked to a course - the link should be able to be configured to allow either: The competency should be ""Completed/Recommended"" when the course is completed. There should also be an option to do nothing. The screen should explain that in any case when the course is completed an evidence attached to the user's evidence for that competency. ",3 MDL-51042,"Create a statistics report for a learning plan template",https://docs.moodle.org/dev/images_dev/2/2a/cbe_spec13.jpg,5 MDL-51045,"Create a way to import a competency framework from a set of Moodle ""Outcomes"".","A simple way to create a competency framework from an existing set of outcomes. ",5 MDL-51130,"Deleting frameworks should delete associated data","Currently deleting a framework leaves orphan competencies behind.",3 MDL-51233,"Remove unused ID number from learning plan templates","See discussion in MDL-51027.",1 MDL-51442,"Framework scales configuration must be mandatory","Currently it is possible for scales to be set without a default or proficiency value set. The form needs to throw a validation error when the scale was not properly defined when creating a competency framework. We consider the scale properly configured when: - It defines a default value - It defines at least one proficiency value Search for TODOs in the existing code.",2 MDL-51460,"List frameworks' API function does not support order","This is a recent regression, the parameters $sort and $order need to be combined because passed to _get_records_select_ otherwise the $order is not respected. Unit tests should be added to confirm this behaviour.",1 MDL-51504,"Template due date must not be set in the past","We need to validate the due date so that it cannot be set in the past: - For new templates. - For existing templates updating their due date. No need to bother about user plans for now.",1 MDL-51506,"Implement validation mechanisms in persistent derived classes","We need the models (persistent classes) to be able to validate themselves. The main reason behind this is that we cannot trust the data that is coming from other sources than web services or forms, for instance data manipulated by a developer, data from other sources such as CSV files, etc... The API methods are not the right place to put this validation because the persistent classes can be used directly and enforcing the API use will be very difficult. Defining validation within the model is the first step, later on we could re-use the validation definitions in forms, or even in external functions parameters/return definitions. When working on this, grep for TODOs related to MDL-51506.",2 MDL-51507,"External functions to create/update competency frameworks lack scale information","Frameworks must have a scale and the scale configured when they are created, and/or updated. The external functions associated with the frameworks lack the parameters to set those. It is understand that those parameters cannot be extensively validated until we fix MDL-51506, however this issue could still be worked on, and a ""TODO MDL-51506"" comment can be added to the code to notify of the missing bits.",1 MDL-51513,"Properly delete a competency","When doing task MDL-51130, we realized that we had to first properly complete the deletion of competency before working on deleting the entire framework. The tech spec are, at the moment, not completed and must be before starting the development. See some possible spec scenarios in the comments of MDL-51130. To be determined: can we allow the deletion of competencies when some students are already marked as proficient in those? We could ask a user to confirm, or create a special permission for deletion of such competencies. Note: competency::delete() removes the course competencies, that shouldn't be done there.",3 MDL-51557,"Add learning plans to the administration block in categories","Now that MDL-51107 is resolved we need to add links to the learning plans in the setting navigation of the categories. For now, let's start with the same nodes than the ones defined under _Site administration_. Note that those should not be displayed if the user does not have the required permissions. To find the category administration, go to /course/index.php?categoryid=2",1 MDL-51580,"Decide Moodle 3.1 requirements and push them to environment.xml (due date: 30/11/2015)","We need to decide ASAP about all the PHP/DB/Moodle versions requirements and put all them into the environmental tests (adding them to all supported branches). At the same time, if there is any change in the PHP version... some changes have to be populated to various installers and replace them by the new one when corresponding. To get a list of candidates: grep -r '5\.x\.y' * | grep '\.php' (and look for MDL-39007 status, about to unify all those duplicated checks) Ciao :-)",13 MDL-51598,"Wrong number of competencies displayed in the list of competency frameworks","In the list of competency frameworks all frameworks have the same number of competencies. The number displayed looks to be the number of records in table tool_lp_competency.",2 MDL-51602,"Add ability to duplicate a competency framework","The docs say ""A competency framework can be duplicated,"" but currently this behaviour does not exist. A framework can be duplicated. When duplicating a framework all the competencies linked must be duplicated as well. However, the new framework and competencies must not be linked to any course or template. The idnumber of the new framework will be updated following the same process than the one used for updating course shortnames upon restore, basically adding n where n is the first unique number found. See restore_dbops::calculate_course_names().",5 MDL-51638,"Use taxonomy terms in competency names everywhere","Once MDL-51026 is done, we need to use the taxonomy terms wherever we used to display ""Competency"", unless the taxonomy level is not defined.",1 MDL-51644,"Create persistent model for user_competency","This issue is about creating the basic API create CRUD user competencies. User competencies are links between the user and a competency, often they will be transparently created from a user plan. This issue should not be creating any external function or API yet as we will not even have a view, and also because the capability checks are tricky in this case as the model is only used to store information at this stage. Later on when we add competency reviews then we will have API and external functions. The _persistent_ model is the only thing we need. Non-exhaustive list of columns needed: * int id * int userid * int competencyid * int status (idle, in review, etc, will be defined later) (use constants) * int reviewerid * bool proficiency * int grade (from a scale) At this stage we will consider that the linked competency cannot be deleted without deleting the user_competency, therefore we do not need to duplicate the competency information like scale, etc...",3 MDL-51645,"Rename the plan capabilities","In order to improve the consistency we should assume that all capabilities mean _all_, except when they mention _own_, in which case they are only used when we are in a user context, and the context belongs to the logged in user. Rename: * planmanageall to planmanage * plancreatedraft to plancreateown * planviewall to planview ",1 MDL-51646,"Implement plan status","When a user is lacking permissions, their plan will automatically be created with the status ""Draft"". When a user has permissions, they can choose whether the plan is ""Draft"" or ""Active"". A user that only has the permission to _create_ their own plan cannot change the plan (including linked competencies) once it was set ""Active"" or ""Completed"", more will come with MDL-51035. Users with the permission to manage a plan can. The page listing the plans should contain tabs to display the list of Draft/Active/Completed plans. We can look at MDL-50976, if it does not seem to be closed to finish we can ignore that fact and raise a follow-up issue to implement the tabs. Note, in MDL-51805 we will freeze the result of the competencies of a user when the plan becomes complete. Also note that there will be more status added in the future when the plans will be reviewed, etc... The actions to be taken when the plan is marked as completed will be set in MDL-51805.",3 MDL-51647,"Create a schedule task to close the plans that reached their due date","The summary says it all. If you have any concern about timezones, let's talk about it. When a plan is completed, all the _user_competency_ associated with that plan will be copied over to _user_competency_plan_.",2 MDL-51682,"Fix all persistent sortorder handling to prevent ""holes""","There are a few problems with the handling of sortorder in the models. Those points are all related to each other: # New sortorders are created based on the number of rows in a table # When an entry is deleted, the sortorder is left untouched perhaps causing holes #- E.g. sortorders 1, 2, 3, 4 and 3 is deleted leads to 1, 2, 4 # Reordering is substracting/adding 1 to the sortorder, which is the problem when holes already exist.",2 MDL-51735,"Veiwing a lesson before questions / pages are added results in an exception","When a student attempts to view a lesson activity prior to content / question pages being added, the lesson displays an exception to the student Steps to reproduce: 1. As a teacher create a new lesson activity but do not add any pages to it 2. As a student view the newly created lesson activity Expected result: Student should get a message indicating that the lesson is not ready to be attempted. Actual Result: Debug info: Error code: cannotfindfirstpage Stack trace: line 481 of /lib/setuplib.php: moodle_exception thrown line 284 of /mod/lesson/view.php: call to print_error()",1 MDL-51758,"Remove password_compat library","Once we have increased our minimum version to PHP 5.5.0, we can drop use of this library in Moodle.",1 MDL-51791,"Some improvements to persistent validation","I noticed that: # We should check that the validate_* methods are protected # That an ID is NOT set when we call _create()_, that messes up with the validation # We should apply the basic validation to all properties before applying the custom one",1 MDL-51805,"Freeze a learning plan when it is marked as completed","When a learning plan is marked as completed we will archive the status of its competencies into an archive table or equivalent. Any further change to the competencies by users who have the permissions will be stored in the archived table, but an evidence will be added to the competency.",3 MDL-51862,"Create a persistent model user_competency_plan","This model will archive the _user_competency_ records for a specific plan when the plan is frozen. It should contain the same information than the user_competency with the addition of the plan ID. This issue is just about creating the model.",3 MDL-51866,"Framework's scale cannot be changed once used","Once a user_competency framework is set on a competency that belongs to that framework the scale cannot be changed. The scale configuration (Proficiency and default values) can still be changed but it will not affect any of the existing user_competency objects.",1 MDL-51869,"Users can link evidence of prior learning to their competencies","Users can link evidence to their competencies if they have the capability _tool/lp:planaddevidence_. When they link an evidence to their competency, an _evidence_ is attached to the competency indicating that the user has linked evidence or prior learning, providing the link to the user's evidence page. Note: discuss the capability name, perhaps it's better to have _tool/lp:addevidence_ which would control both the upload of evidence and the linking of evidence. Confusion with the persistent _evidence_ need to be addressed as they are different.",3 MDL-51870,"Use new ""ajax"" definition of external functions","Looking at the logs we can notice a log of debugging messages because we are using _is_allowed_from_ajax_. We need to update all the functions definition to support ajax and remove these definitions. Example: {noformat} 'core_output_load_template' => array( ... 'ajax' => true, ), {noformat}",1 MDL-51942,"Ensure that constant MOODLE_INTERNAL is used everywhere","I noticed that some of the files in tool_lp do not have: {noformat} defined('MOODLE_INTERNAL') || die(); {noformat} We should add it to any file that is not directly accessed.",1 MDL-51953,"Missing four services definitions","When working on MDL-51870, I realized that 4 services definition were missing from db/services.php : * count_templates_using_competency * list_templates_using_competency * count_competencies_in_template * list_competencies_in_template These services are not currently used in the plugin, that's why we never had any problems.",1 MDL-51962,"Validate that the grade set in user_competency is valid","The grade in a user_competency should be validated against the scale.",1 MDL-51963,"Support custom scales per competency","It may be useful for each competency to declare a different scale, though we won't exactly implement support for it just yet. This issue is about creating a getter in competency persistent to retrieve the scale and scale config. For now it will only be retrieving the scale from its framework but it will be useful in the future if we want to add support for scale competencies.",1 MDL-51967,"Create a dialogue to view all the information about a competency","There will be many places where being able to view the full details of a competency will be very useful. For example when a student is viewing their plan they should be able to view the information about a competency without having to leave the page. Or when a teacher is linking competencies to a course. Or when a teacher is grading a bunch of competencies.",1 MDL-51968,"Remove the ability to change the userid of a plan","Remove the user ID parameter from the external functions that allow a change of ownership in a plan. And ensure that the API methods prevent the change as well.",1 MDL-52051,"Migrate to Dropbox API v2","Dropbox have release a new API increment, we probably should update to v2 before we get caught out when they drop v1: https://blogs.dropbox.com/developers/2015/11/dropbox-api-v2-launches-today/ {quote} At some point we'll likely deprecate the previous API v1, but we don't have specific plans to share now. We'll be sure to give developers plenty of warning. {quote} ",5 MDL-52062,"User's learning plan pages do not have a breadcrumb","When viewing a user's plans page, or a plan itself, there is not breadcrumb which makes it hard to navigate back and forth.",1 MDL-52104,"Improve UI for the change of states in plan","It was said in MDL-51805 that change of states in plan should work as follow : Always prevent a plan to be marked as completed from the plan editing form. Instead we will add an option ""Complete this plan""/""Reopen this plan"" in the plans page which will warn the user that reopening the plan will delete any customization done to the competencies. Note : A good implementation in api would be to prevent switching status (from/to complete) in api::update_plan and create a new specific method for that. This issue should also ensure that a plan cannot be modified when it is complete, only its user_competency_plan in some occasions (plan.php). ",3 MDL-52106,"Remove competency rules on parent when children are being moved or deleted","When used in rules, especially with the rule based on points, if a competency is moved then the validation for the parent will fail when edited. But more importantly the rule of the parent it is coming from and the rules of the parent where it is going to will be affected in a random way. Also our UI will not display rules that have been moved, or deleted. In order to prevent managers from messing up a framework we will prevent _move_, _delete_ and perhaps _add_ when the competency is being used in a rule.",3 MDL-52122,"Create an API to register evidence to competencies","We need to create an API that can be used to attach evidence to competencies, or more precisely user competencies. Perhaps api::create_evidence is all we need. At present I do not think we need to create an external function for an evidence as it's unlikely that an evidence will be added manually. Most of the time the evidence will be added following an event (course completion, manual grading, evidence of prior learning linked, ...). Evidences should never be removed or updated therefore we will not need other API functions for now. Note that a user_competency record must exist before an evidence can be attached to it therefore this issue will have to ensure that the record exists.",2 MDL-52229,"Handle hidden templates/frameworks when linking competencies","When a user is building a framework they can set their framework as hidden, in which case it will not show up in the different areas where a framework can be picked to then select some of its competencies. The same applies to templates, when the template is hidden it can not be selected to create a plan from that template. There is no security risks attached to this issue, which means that the functions listing the frameworks and templates use an optional argument to filter out the invisible template/frameworks. Everyone can list hidden frameworks/templates but the UI will only display the relevant ones (visible). Crafting a request will report the hidden frameworks/templates, and that's fine. However, the methods that are linking competencies to a framework/template should first check that the competency is not part of a hidden framework, in which case it cannot be linked. The method creating a plan from a template will perform the same check to ensure that the template is visible. Note that if a framework/template is hidden after the competency/plan was created nothing happens. The hidden option is just there to act as a draft/archived flag to only display the relevant options in the UI. If the competency/plan was already created then it remains visible regardless of the status of its origin. At a later stage we may decide to rename _visible_ to something more relevant. Or to have a _status_ on the framework/template (draft, active, archived). In that case a framework/template would have to be made ""Active"" to be visible in the relevant UI, and it could not be sent back as draft when used. Later maybe.",3 MDL-52233,"Show the idnumber of the competency in the user learning plan (and template)","Very small improvement I think should be made to make visible the idnumber of the competencies in a user learning plan for the following reasons : * Makes it standard with the way it is displayed in the competency frameworks. * Makes it easier for the user to know that a competency is a parent of another when the plan is containing multi-levels competencies. For example : ** Photograph S1 ** Compose S1.1 ** Expose S1.2 Note : Maybe having a method in persistent that returns the right output would be a good idea, since it would be used at many places.",1 MDL-52235,"Button ""Add new learning plan"" should not be displayed when permissions are missing ","I found out this small bug in the user list of learning plans (plans.php) : * Users with only ""tool/lp:planviewown"" or ""tool/lp:planview"", see the ""Add new learning plan"" button when they should not. ",1 MDL-52242,"Competencies listed in a completed plan must never change","When we get the competencies of a _completed_ learning plan, we need to get the list of competencies from the archived we created when the plan was marked as complete. The reason for this is because while a plan cannot be changed once it's complete, a template could change and those changes would be reflected in the plan. Once a plan is complete it should be frozen. There are a few ways to fix this: # Unlink the plan from its template upon completion (not recommended, heavy, relationship lost) # Copy the template_competencies to plan_competencies (almost acts unlink, heavy, adds weird conditional getters in $plan->get_competencies() # Add an additional condition to $plan->get_competencies() to generate the list of competencies from the archived competencies (sortorder of competencies is hard to figure out) I have started a patch for this, but tests failed because it broke the archiving mechanism. {noformat} diff --git a/admin/tool/lp/classes/plan.php b/admin/tool/lp/classes/plan.php index f55d4a7..3d84889 100644 --- a/admin/tool/lp/classes/plan.php +++ b/admin/tool/lp/classes/plan.php @@ -121,13 +121,19 @@ class plan extends persistent { */ public function get_competencies() { $competencies = array(); - if ($this->get_templateid()) { + if ($this->get_status() == self::STATUS_COMPLETE) { + // Get the competencies from the archive of the plan. + $competencies = user_competency_plan::list_competencies($this->get_id(), $this->get_userid()); + + } else if ($this->is_based_on_template()) { // Get the competencies from the template. $competencies = template_competency::list_competencies($this->get_templateid(), true); + } else { // Get the competencies from the plan. $competencies = plan_competency::list_competencies($this->get_id()); } + return $competencies; } diff --git a/admin/tool/lp/classes/user_competency_plan.php b/admin/tool/lp/classes/user_competency_plan.php index f89ed1d..8315a69 100644 --- a/admin/tool/lp/classes/user_competency_plan.php +++ b/admin/tool/lp/classes/user_competency_plan.php @@ -143,6 +143,38 @@ class user_competency_plan extends persistent { } /** + * List the competencies in this plan. + * + * @param int $planid The plan ID + * @param int $userid The user ID + * @return competency[] + */ + public static function list_competencies($planid, $userid) { + global $DB; + + // TODO Fix ordering. The order set in template_competency, or plan_competency is not applied here. + // Perhaps we should have copied the sortorder here as well. + $sql = 'SELECT c.* + FROM {' . competency::TABLE . '} c + JOIN {' . self::TABLE . '} ucp + ON ucp.competencyid = c.id + AND ucp.userid = :userid + WHERE ucp.planid = :planid'; + $params = array('userid' => $userid, 'planid' => $planid); + + // TODO MDL-52229 Handle hidden competencies. + $results = $DB->get_recordset_sql($sql, $params); + + $instances = array(); + foreach ($results as $key => $result) { + $instances[$key] = new competency(0, $result); + } + $results->close(); + + return $instances; + } + + /** * Get multiple user_competency_plan for a user. * * @param int $userid The user ID. {noformat} Along with this, this issue should also ensure that a user can not: - Remove a competency from a completed plan - Add a new competency from a completed plan ",2 MDL-52272,"Rename ""Status"" and ""State"" on plan page","The _Status_ column currently described the grade of a scale, we'll rename it to ""Grade"". The _State_ column showing the ""status"" of the competency (idle, in review, ...) should be changed to ""Status"".",1 MDL-52282,"Create a scheduled task to sync plans from template cohorts","The task will observe check if new users were added to a cohort and create the required plans. Note that when a plan is unlinked from a template the original template ID is stored. The cohort sync should not re-create plans that were unlinked.",3 MDL-52408,"api::list_related_competencies should not require manage capability","Everyone who can view the competency should be able to view the related competencies.",1 MDL-52418,"Invalid responses in learning plan templates and course competencies pages","Invalid responses javascript pop-ups in learning plan templates and course competencies pages when adding or deleting competencies. See attachments for more details.",1 MDL-52423,"Create a plan summary screen","We will recycle the page listing the competencies in a plan and add more information to it. The page currently does not display information about the plan itself, it should contain: - Due date - Status (Draft, Active, Complete) (Later we'll add review) - Option to change the status from here (just like on the plans page) - Reviewer (Added later when reviews are supported) - The template the plan is based on, and a link to if the user can view the template. - A button to unlink the plan from its template (warning required) (MDL-52423) - A button to edit the plan (cancelling the edit, or saving should return to the plan) The button to add competencies stays there. Note that a plan based on a template cannot be modified, it can only be unlinked. Also note that relevant capability checks must be made.",3 MDL-52424,"Plans page should show the template the plan is based on","On the page listing all the plans for a user we must show the template the plan is based on when there is one. ""Unlinking"" the plan from its template is done within the plan page, not from the list.",1 MDL-52426,"Template competencies page should not require manage permissions","This page should be accessible when the user can read the template, of course in that case they should not be able to change anything.",2 MDL-52432,"Add ability to unlink a plan from its template","On the page that shows the details of a plan we need to add an option to unlink the plan from its template. This should show a warning explaining that this not a reversible action.",2 MDL-52463,"Learning plan templates: Cannot sync cohorts at category level","I just found out that you cannot sync a learning plan template with a cohorts created at category level. Steps to reproduce : * In a category administration: ** Create a template and a cohort ** Go to the learning plan templates page and click on cohorts link ** *The cohort is not displayed in the selection list*",1 MDL-52485,"Validate the duedate of a plan","The plan persistent does not validate the due date field. This issue should also ensure that updating a plan from a template will not cause problems because of this new validation. E.g. Can dates on templates be set in the past, or can latency in updating the plan be slow enough to fail due date validation?",1 MDL-52561,"Plan created from cohort and deleted are recreated by sync task","When we delete a user plan created from a template and a cohort all information associated to the plan is deleted from the database. So when the scheduled task to sync plans runs, it recreates the plan because there is no way to know that the plan was there before.",1 MDL-52675,"When deleting a template delete or unlink derived plans","When a user delete a template, we have to ask: # Whether the derived plans should be deleted # Whether the derived plans should be unlinked _No need to ask them when there are no derived plans._ Deleting relations/dependencies should be delayed to other issues.",3 MDL-52676,"When deleting a template delete associated template_cohorts","Deleting a template should not leave template_cohorts behind.",1 MDL-52690,"Do not automatically create plans for big cohort","We should not create the plans automatically when template_cohorts are created if there are too many plans.",1 MDL-52696,"Better handling of template due date when creating plans","When creating plans from a template we should: # Handle due date validation errors during in the scheduled task for template cohorts # Hide the option to create plans from the UI when the validation of the due date will fail # Hide the option to add cohorts to templates when the validation of the due date will fail",1 MDL-52709,"Create C(R)UD events for competency frameworks","This issue will create 3 events: - \tool_lp\event\framework_created - \tool_lp\event\framework_updated - \tool_lp\event\framework_deleted From the top of my head I don't see any information to place in _other_. Those events should be triggered anywhere where a framework is created, updated, or deleted, if the code is well structured this should be 3 API methods. Tests are required for each event. See _events_test.php_ files. Documentation: https://docs.moodle.org/dev/Event_2#Properties",3 MDL-52710,"Create event for framework viewed","This issue will create 1 event: - \tool_lp\event\framework_viewed This event needs to be triggered in the views that display the framework. As Ajax, and WS, do not access the page directly a new WS function needs to be created to trigger the event remotely. See _mod_book_view_book_ for example. I would say that the only view we have displaying the framework so far is _competencies.php_. The event needs to be tested.",2 MDL-52711,"Create C(R)UD events for templates","This issue will create 3 events: - \tool_lp\event\template_created - \tool_lp\event\template_updated - \tool_lp\event\template_deleted From the top of my head I don't see any information to place in _other_. Those events should be triggered anywhere where a template is created, updated, or deleted, if the code is well structured this should be limited to API methods. Tests are required for each event. See _events_test.php_ files.",3 MDL-52712,"Create event for template viewed","This issue will create 1 event: - \tool_lp\event\template_viewed This event needs to be triggered in the views that display the template. As Ajax, and WS, do not access the page directly a new WS function needs to be created to trigger the event remotely. See _mod_book_view_book_ for example. I would say that the only view we have displaying the template so far is _templatecompetencies.php_. The event needs to be tested.",2 MDL-52713,"Add behat tests for CRUD operations on frameworks","The tests will assert the well functioning of the competency frameworks CRUD operations. This issue is not about CRUD on competencies.",2 MDL-52714,"Behat tests for templates CRUD operations","Those tests will assert the well functioning of the CRUD operations on templates. This will not cover the creation of plans from template, nor linking cohorts with templates.",2 MDL-52741,"Show the taxonomy level for a competency in the competency summary template","IE - everywhere the competency summary is shown it should include the term from the taxonomy (Level, Skill etc). The generic term is still competency - ie when you are displaying a list or generating a notification.",2 MDL-52743,"Add a statistics report to the course (competencies)","Show the percentage completed, Top X users Bottom X users Top X competencies Bottom X competencies",5 MDL-52744,"grade_competency_in_course missing security check","This function needs to check that the user has the tool/lp:coursecompetencygradable capability in the course.",2 MDL-52745,"Only show evidence for a completency in a completed plan up to the timestamp the plan was completed.","When viewing a completed plan, we do not want to see evidences created after the plan was completed. ",3 MDL-52747,"Show the courses a competency is linked to from the competency summary in plan page. ","This allows students to discover courses that could teach them a skill or competency.",3 MDL-52754,"Dropdown list of scales is not displayed when there's single quotes in values","When preparing a demo of the tool_lp plugin, I noticed that the dropdown list of scales is not displayed in the user competency screen when there's one or more single quotes (') in the scale values (See attachments). It seems that this character (and possibly other special characters) is not escaped properly.",2 MDL-52755,"Competencies sort order is not preserved when plan is completed","The sort order is changing when a plan status is set to completed and it should not (See attachments). To reproduce : * Create a new plan with status active * Add two competencies in the plan in the following order, name and idnumber : ** Competency 1.2 _cpt12_ ** Competency 1.1 _cpt11_ * Complete the plan * *You should see the competencies in the same sort order but it changed (now sorted by idnumber ASC)*",2 MDL-52757,"Course competencies: Problem when selecting users in the manual marking page","The first time you try, it is not possible to select another user in the list of the course competencies manual marking page. To reproduce: * *You can only reproduce with all the cache systems ON -> ""mdk run undev""* * Go in the course competencies section of a course and add a competency * Click on the competency to display the user competency screen (manual marking) * Try to show another user by selecting someone else in the list (See attachment) * *You should see that you are not redirected to this user and that the user is not in the list anymore* * *If you try again with another user, it works* * You can do this over and over again by refreshing the page and selecting someone else in the list.",2 MDL-52775,"api::get_course_competency is identical to api::list_course_competencies","It's missing the param for the competency id. Merge both.",1 MDL-52803,"Provide a way to hide/disable comments on competencies and plans","In a situation where competencies, or plans, can not be sent for review, it is unlikely that comments will be used at all. In this scenario we need to provide a way to disable the comments altogether. So far we thought of this: # Adding a capability to _cancomment_, and # Hiding the ""Comments"" area when the user can not comment and there are no comments. ",3 MDL-52847,"Error when duplicating framework whitout competencies","When we duplicate a framework without competency we get the following error: error/Error while duplicating the competency framework. File: ...l/lp/classes/api.php Line: 487",1 MDL-52860,"Add confirmation dialogue when removing a competency from a course","As the summary says.",1 MDL-52861,"The grading dialogue should show who is being graded","Noticed on the prototype site, after the dialogue opens there is no reference to the user that we're grading. (From the competency breakdown).",1 MDL-52959,"Create C(R)UD events for competencies","This issue will add, trigger and test the following events: - Competency created - Competency deleted - Competency updated",3 MDL-52960,"Created event for competency viewed","This event needs to be triggered when a single competency is being viewed. Mainly when the core of the information is the competency itself (not a template competency, not a plan competency, not a user competency, ...), just the competency is being displayed we will trigger the event. I can think of two places where we would do so: - When viewing all the competencies in a framework and selecting a competency - When opening the competency dialogue The event will be compatible via Ajax and triggered, not via templates, but from the ""Controllers"" which are responsible for displaying the information (e.g. view.php, AMD module rendering the template). Note that Ajax refresh of a portion of a page should re-trigger the event, in other words if you were to edit the title of a competency ""in-line"", and the code would then refresh the whole competency region, that should not retrigger a ""viewed"" event.",2 MDL-52979,"Only show course ratings / proficiency when viewing a competency in a course","Currently, when a rating is suggested for a competency, it is only displayed in the list of evidences - and so becomes lost in the long list of evidence. We should provide a hint of the suggested rating based on the aggregate of all the suggestions. E.g. Suggested ratings: Met (4), Not met (1) (possibly with hyper links to scroll to the most recent suggestion for each scale value). When rating in a course - we should also limit the evidence list to only the evidence provided in that course.",3 MDL-53019,"Decide Moodle 3.2 requirements and push them to environment.xml (due date: 13/06/2016)","We need to decide ASAP about all the PHP/DB/Moodle versions requirements and put all them into the environmental tests (adding them to all supported branches). All the still open linked issues have been cloned here from the 3.1 sister issue (MDL-51580). Usual discussions: - PHP min. version. - database versions. - Linked issues. - ... Feel free to propose areas to be discussed here. A numbered list with all them will be created to vote and decide the final outcomes of this issue. TIA and ciao :-)",13 MDL-53070,"Non-editing teachers missing view user competency capability","Not high priority but just mentioning that you cannot suggest grade as a non-editing teacher because you cannot view the user competency page in course (lacking teacher archetype for tool/lp:usercompetencyview). It is also not possible to display the ""Competency breakdown"" report. See attachments.",1 MDL-53084,"Unclear what we are viewing when in a user competency in a plan","When viewing a user competency from a plan, especially when the plan is completed, it is very unclear what we are viewing and why we can not rate a user any more. When the plan is not completed, I think we should display the plan as part of the content. When the plan is completed, we should also display a link to the plan, but emphasise that the plan is completed and that the competency being viewed is in the state it was when the plan was marked as complete. I don't know how to achieve this visually.",2 MDL-53152,"lessc Less compilation computes variable mathematics at a different time","I use a moodle theme which is based on bootstrapbase. After upgraded the moodle from 2.9 to 3.0-latest, the dropdown menu cannot be shown correctly. Compared with 2.9, I found the 3.0 missed one css style which is defined in theme/bootstrapbase/style/moodle.css: @media (min-width:{color:red}980px{color}){.nav-collapse.collapse{height:auto !important;overflow:visible !important}} In 3.0 it changed to : @media (min-width:{color:red}979px + 1{color}){.nav-collapse.collapse{height:auto !important;overflow:visible !important}} It is generated from theme/bootstrapbase/less/bootstrap/responsive-navbar.less, in which the variable @navbarCollapseDesktopWidth is refered. And the @navbarCollapseDesktopWidth is defined in theme/bootstrapbase/less/bootstrap/variables.less, like: @navbarCollapseWidth: 979px; @navbarCollapseDesktopWidth: @navbarCollapseWidth + 1; The solution is adding parentheses for @navbarCollapseDesktopWidth in theme/bootstrapbase/less/bootstrap/responsive-navbar.less, like: @media (min-width: (@navbarCollapseDesktopWidth)) { then generating the moodle.css file again by using: grunt css.",1 MDL-53160,"Create C(R)UD events for evidence of prior learning","This issue will add, trigger and test the following events: Evidence of prior learning created Evidence of prior learning deleted Evidence of prior learning updated ",1 MDL-53162,"Behat tests for plans CRUD operations","Test behat for: - create plan (form, template, et template cohort) - update plan - delete plan - view plan",1 MDL-53163,"Behat tests for plans workflow","- request review - cancel review - start review - finish review - make active - move to draft - complete plan - ....",3 MDL-53182,"Create events for plan workflow","All the workflow actions associated with a plan should trigger a specific event. Here is a non exhaustive list: - Plan approved - Plan reopened - Plan review requested - Plan review request cancelled - Plan review started - Plan review stopped - ... You may find _update_ events in the relevant API methods, the new events should replace those.",2 MDL-53185,"Big button to turn CBE on/off.","One setting to rule them all",3 MDL-53186,"Sending competencies for review from the evidence of prior learning interface","I realised that when I attach competencies to an evidence of prior learning I don't have a way to send them for review. That means that I should manually visit every single competency to then request the review. In order to improve this, I suggest that we: # Add an option to bulk ""Send linked competencies for review"" in #- As a checkbox, in the dialogue when picking competencies #- In the page of a specific evidence of prior learning - in a new menu along with the delete option # Display the current status of all the linked competencies, and name of the reviewer when there is one # Make the competencies a link to the user competency (outside the plan) ",3 MDL-53187,"Create events for user competency workflow","Create the events associated with the changes in status of a user competency: # \tool_lp\event\user_competency_review_requested # \tool_lp\event\user_competency_review_started # ...",2 MDL-53188,"Add event for when an evidence is attached to a user competency","This issue is about a single event, which is triggered when an evidence is added (api::add_evidence): - \tool_lp\event\evidence_created The event should include information in other such as: - usercompetencyid - competencyid - the action constant - the recommend flag I'm suggesting these because they are integers and may be useful for observers. Also the evidence ->to_record() data should be attached as a _record snapshot_. Same goes with the user_competency if we have it. Note that the _actionuserid_ will be the _userid_ in the event, whereas the user the user competency belongs to will be the _relateduserid_.",1 MDL-53189,"Create event for user competency viewed","This event will be trigger when a _user competency_ is viewed, whether in a course, a plan or by itself. - When it is viewed in a plan (or completed plan), the _other_ field will contain the plan ID. - When it is viewed in a course, the context will be the course context. - Else, it is viewed by itself. Don't forget to add the _record snapshot_.",2 MDL-53190,"Create event for evidence of prior learning viewed","Just an event for when a specific evidence of prior learning is viewed, triggered from the user_evidence.php file.",1 MDL-53192,"Rebase CBE to latest Moodle core","Fred needs to rebase CBE...",2 MDL-53193,"Add behat tests for CRUD of evidence of prior learning","Add some tests for when the evidence of prior learning are: - Created - Deleted - Edited - Viewed - Listed",2 MDL-53194,"Add behat tests for linking evidence of prior learning with competencies","This behat test will ensure that user can link evidence of prior learning with their competencies. There are mutiple places where linking can occur, at this stage there is the list of evidence of prior learning, or the evidence of prior learning page itself.",1 MDL-53195,"Undefined variable: coursecompetency warning in \tool_lp\api::get_user_competency_in_course()","There is an undefined variable $coursecompetency in \tool_lp\api::get_user_competency_in_course() (see [here|https://github.com/FMCorz/moodle/blob/cbe/admin/tool/lp/classes/api.php#L1129]. I think that it should be {{$competency}} I am not sure how to trigger the issue but, by setting {{$found}} to false, the following will be shown in the user course competency page. {code} Notice: Undefined variable: coursecompetency in /home/jun/moodles/cbe/moodle/admin/tool/lp/classes/api.php on line 1130 {code} ",1 MDL-53196,"Add relevant record snapshot to existing events","I failed to notice and explain what _record snapshots_ were and therefore most of the events in _tool_lp_ do not include any snapshot. This issue is about checking the existing events and where they are triggered from and add relevant snapshots where they are missing. I think this means: # Adding self to the _create_from_*()_ methods: {noformat} $event->add_record_snapshot(self::TABLE, $this->to_record()); {noformat} # Add extra snapshots where they are triggered #- For instance when a user competency is updated, adding the snapshot of the competency if we have it, etc...",1 MDL-53211,"Create a user_competency_course model and populate it on suggest","It has occurred that we need to store the suggestions that were applied in a course. Simply relying on the _evidence_ will make it hard to compute data for that course only, join, etc... so we will introduce a new model _user_competency_course_ which stores the proficiency and rating of a user in the context of a course. So, when a teacher is suggesting a rate from a course we will populate the table _user_competency_course_ and attach an evidence as we are currently doing. When a suggestion happens within an activity (e.g. triggered by auto completion) we will also record that at the course level. When the suggestion is in a context parent to a course we proceed as normal. MDL-52979 will take care of displaying the information in the views. At a later stage we may decide to rephrase ""Suggest"" if another word works better.",3 MDL-54751,"Recycle Bin - deleting large complex objects forces user to wait","With the recycle bin enabled, deleting large, complex objects forces the user to wait until the backup process has completed before they can do anything else. When you delete small objects (e.g., labels, simple pages), the deletion occurs quickly. By ""deletion,"" I mean this workflow: 1. Turn editing on 2. Delete item 3. Turn editing off But when you delete a larger, complex object, step 3 above -- turning editing off -- can take a long time ( up to > 2 minutes), and there is no indication (other than what the browser provides) that something is happening. You basically have to wait for it to finish. Something that used to happen immediately -- turning editing off after deleting something (regardless of its complexity) -- can take minutes with the Recycle Bin enabled. An example of a ""large, complex object"" is a quiz with 95 questions and 155 student responses. Obviously, Moodle is working on backing up the quiz, and since it's rather complex (lots of responses), it takes time. The same thing happens on restore. Restoring this kind of quiz can take some time, but there isn't any kind of progress indicator to let the user know that something is happening and that it may take some time. The concern here is that with the recycle bin enabled, a fundamental aspect of the Moodle experience has changed; i.e., deleting some objects no longer happens quickly if they are complex. How long it takes for Moodle to return control when turning editing back off after deleting an object depends on how large/complex that object is. And Moodle provides no progress indicator that something is happening. We also saw this behavior when testing the recycle bin plugin our Moodle 2.7 site (we also saw session lock errors for large object deletions). We also see this issue on a test Moodle 3.1 server with the recycle bin enabled. While this quiz example may represent an outlier, users delete all sort of things... small and large objects.",5 MDL-54770,"PayPal enrolment plugin to support required SSLVERSION TLS v1.2 if possible","PayPal enrolment plugin to support required SSLVERSION TLS v1.2 if possible. As of June 17, 2016 PayPal will require HTTP 1.1 and SSL version TLS v1.2 see: https://devblog.paypal.com/upcoming-security-changes-notice/",1 MDL-54796,"Cannot switch between students in assignment grading interface","_Reproduced with Firefox, not with Chrome._ # Set Atto autosave frequency to 10 seconds # Go to an assignment with participants # Open the grader # Type some text in the feedback and wait for Atto to save the draft # Try to switch to another user # You are warned of unsaved changes, do not save # Click _Reset_ at the bottom of the page # Try to switch to another user *Expected* - Respect the same behaviour as Chrome, the view switches to the new user *Actual* - The same message as earlier warns you about unsaved changes, you cannot leave the page.",4 MDL-54847,"HTML audio tag removed from forum post","A user wishes to embed a .wav file into a forum post. Adding the .wav file via the text editor's media button only inserts a hyperlink to the file (see MDL-54846). Using the text editor's source mode, the user attempts to embed the uploaded .wav file using the HTML 5 audio tag. However, upon saving, the audio tag is automatically removed so the file is not embedded. Using the same code in a page resource, the audio tag is not removed. *STEPS TO REPLICATE* 1. Create a forum activity. 2. Add a new post to the forum. 3. Click the Media button on the text editor. 4. Upload a .wav file and then click the insert media button. The .wav file is added to the page as a hyperlink. 5. Click the HTML button on the text editor to switch into source mode. 6. Update the HTML using the HTML 5 audio tag to embed the .wav file into the page. Same code: {noformat} The wav file should be embedded.
{noformat} 7. Submit the post. 8. Read the post. Also edit the post and click the HTML button on the text editor. OBSERVED BEHAVIOR: The .wav file is not embedded in the HTML. The audio tag has been removed. The resulting HTML: {noformat}The wav file should be embedded.
Your browser does not support the audio element. {noformat} EXPECTED BEHAVIOR: The audio tag is retained in the HTML. The .wav file is embedded into the forum post allowing the audio file to be played directly from the post. *REPLICATION LOCATIONS* Behavior has been replicated in 3.0.4 and 2.9.3. *ADDITIONAL INVESTIGATION NOTES* 1. The audio tag is removed from the forum post HTML regardless of the file type being embedded. For example, attempting to embed an .mp3 file with the audio tag also results in the audio tag being removed. 2. Behavior was replicated with both the Atto and TinyMCE text editors. *USER IMPACT* An instructor teaching a sound design course would like for students to be able to share their .wav files within forums. The .wav file format is not among the file formats currently handled by Moodle's media embedding features (see MDL-54846). A potential work-around would be manually entered the necessary HTML to embed the file, but this cannot be done when the audio tag is automatically removed.",3 MDL-54915,"Rendering concurrent Mustache templates with strings loses javascript","Using client-side rendering of multiple templates at once can cause any {{#js}} blocks in those templates to be lost, if the template needs to fetch language strings from the server. This is because there is a single shared templates module with global state containing the required javascript additions, and it is reset on every call to render(). *To reproduce:* * Create a plugin in {{local}} called mustacheproblems. * Create a template called {{problem.mustache}} {code:html} {{! @template local_mustacheproblems/problem Example context (json): {} }}This is a template whose {{#str}} javascript, local_mustacheproblems {{/str}} has not been run{{#js}} require(['jquery'], function($) { $('#some-span-{{uniqid}}').html('has been run'); }) {{/js}} {code} * Create a second template called {{problems.mustache}} {code:html} {{! @template local_mustacheproblems/problems Example context (json): {} }}{{#js}} require(['jquery', 'core/templates'], function($, Templates) { for(var i = 0; i < 5; i++) { var promise = Templates.render('local_mustacheproblems/problem', {}); promise.done(function(html, js) { $('#problems-{{uniqid}}').append(html); Templates.runTemplateJS(js); }); } }); {{/js}} {code} * Add the following strings to the {{lang/en/local_mustacheproblems.php}} {code:php} $string['pluginname'] = 'Mustache problems'; $string['javascript'] = 'Javascript'; {code} * View local_mustacheproblems/problems in the Template Library *Expected result:* All five divs should read ""Javascript has been run"" *Actual result:* Only the last div reads ""Javascript has been run"". If you select the template again, then with the required language string cached, all five divs read ""Javascript has been run"". *Notes:* I have marked this as 2.9.6 because that's the only system I've tested it on, however looking at the code for master shows that the bug is still present. ",4 MDL-54984,"Final deprecation / removal of MUC stuff deprecated in 2.6","From [~mr-russ], in devs chat: {quote} As a current example, the MUC is_persist set of functions was deprecated in 2.6, and is still there. At what point is it possible to remove it? {quote} It seems that we missed those (have not found them in this epic list), and there are a number of them: {code} $ ag 'deprecated since 2.' classes/definition.php 251: * @deprecated since 2.9 848: * @deprecated since 2.6 878: * @deprecated since 2.6 classes/store.php 269: * @deprecated since 2.5 classes/loaders.php 954: * @deprecated since 2.6 976: * @deprecated since 2.6 1003: * @deprecated since 2.6 1058: * @deprecated since 2.6 1109: * @deprecated since 2.6 tests/fixtures/lib.php 299: * @deprecated since 2.9 {quote} Ciao :-)",1 MDL-54988,"Final deprecation of methods from lib/modinfolib.php","I found is_user_access_restricted_by_group(), get_deprecated_group_members_only() and build_section_cache() deprecated in 2.8 Also $standardmethods also refer to deprecated methods (from 2.6) ",1 MDL-55066,"Create a script to compare all grades for a 57% letter boundary problem.","Currently the upgrade step for checking if a course should be frozen with a 57%letter boundary problem only checks if the course has the potential that grades will be affected. It does not check individual grades to see if they are affected. It's quite possible that courses will be flagged as frozen when they do not need to be. This task is to create a script that can be used to check each grade and ensure that the course will only be frozen if there will definitely be a grade change.",2 MDL-55126,"Deprecated get_records_csv() and put_records_csv()","While searching for php 7.1 incompatible code I found methods get_record_csv() and put_records_csv() that are never used, have some debug echo and also use \r\n as the line separator.... We need to deprecate them",1 MDL-55173,"Forum final deprecations to 2.8","Perform final deprecations for all forum functions deprecated up to, and including, Moodle 2.8.",1