Moodle

Backport course sortorder rewrite to 1.9.x

Details

  • Type: Bug Bug
  • Status: Open Open
  • Priority: Major Major
  • Resolution: Unresolved
  • Affects Version/s: 1.8.4, 1.8.5, 1.9
  • Fix Version/s: None
  • Component/s: Other
  • Labels:
    None
  • Environment:
    Debian Etch PHP Version 5.2.0-8+etch7
  • Database:
    MySQL
  • Affected Branches:
    MOODLE_18_STABLE, MOODLE_19_STABLE

Description

I have an installation which when using the page /course/category.php to reorder courses, when you click on the arrows to change the order of a course the page refreshes but nothing else happens. On investigation this seems to be due to the sortorder value in the mdl_course table being set to the maximum allowed for an int field, ie 4294967295.

I reset the values to 1,2,3 and 4 and then tried the arrows buttons again and the values did not change as I had expected, ie the values swapped around but 1000 was added to each value, eg they changed to 1001, 1002 etc. Use one of the arrow buttons again and 1000 was added. E.g. 2001, 2002 etc

I then tried with a set of courses on another installation which I hadn't fiddled with whose values were 13005, 13006 and 13007, I then used the reordering buttons and they changed to 14006, 14005, 14007.

I accept that a user will have to re-order courses quite a few times to reach the int field maximum, but somehow on this site they have. I don't understand why Moodle is adding 1000 to each number, surely it only has to swap the existing values around.

Thanks

Richard

  1. sortorders-moodle192.txt
    20/May/09 4:15 PM
    39 kB
    Dani Ureña
  2. sortorders-moodle192.txt
    19/May/09 9:35 PM
    39 kB
    Dani Ureña
  3. sortorders-moodle195_2.txt
    14/Oct/09 1:08 AM
    37 kB
    Tobias Marx
  4. sortorders-moodle195.txt
    20/May/09 11:03 PM
    37 kB
    Dani Ureña

Issue Links

Activity

Hide
Anthony Borrow added a comment -

Nicolas - This was initially assigned to Petr who worked on the patch for HEAD found at MDL-14580; however, it has been marked as being resolved by MDL-14718. A quick glance makes me think that rather than being resolved by MDL-14718 that perhaps this might be a duplicate of MDL-14718. I figured I would assign this to you since it was assigned to nobody simply to determine if it is in fact a duplicate. The issues (or at least something very similar) has been discussed at http://moodle.org/mod/forum/discuss.php?d=93618. If it is a duplicate, then we can resolve this issue in favor or MDL-14718. If it is not a duplicate a comment about what makes it different would be helpful as well. Peace - Anthony

Show
Anthony Borrow added a comment - Nicolas - This was initially assigned to Petr who worked on the patch for HEAD found at MDL-14580; however, it has been marked as being resolved by MDL-14718. A quick glance makes me think that rather than being resolved by MDL-14718 that perhaps this might be a duplicate of MDL-14718. I figured I would assign this to you since it was assigned to nobody simply to determine if it is in fact a duplicate. The issues (or at least something very similar) has been discussed at http://moodle.org/mod/forum/discuss.php?d=93618. If it is a duplicate, then we can resolve this issue in favor or MDL-14718. If it is not a duplicate a comment about what makes it different would be helpful as well. Peace - Anthony
Hide
Dani Ureña added a comment -

I made the backport of MDL-15265 into a 192 version (Build: 20080711) of moodle.
I hope this helps

Show
Dani Ureña added a comment - I made the backport of MDL-15265 into a 192 version (Build: 20080711) of moodle. I hope this helps
Hide
Anthony Borrow added a comment -

Thanks Dani - that helps a great deal. Hopefully Nicolas will get a moment to look at it. It is much quicker to check a proposed patch than to produce one. Peace - Anthony

Show
Anthony Borrow added a comment - Thanks Dani - that helps a great deal. Hopefully Nicolas will get a moment to look at it. It is much quicker to check a proposed patch than to produce one. Peace - Anthony
Hide
Dani Ureña added a comment -

I made a small change in the course/index.php file.

Show
Dani Ureña added a comment - I made a small change in the course/index.php file.
Hide
Dani Ureña added a comment -

I created the version 1.9.5 of the patch, that I needed.
I hope you be of help

Show
Dani Ureña added a comment - I created the version 1.9.5 of the patch, that I needed. I hope you be of help
Hide
Anthony Borrow added a comment -

Dani - A definite help. I know the 1.9.5 /lib/accesslib.php file was giving me trouble with an older 1.9 patch so having something more recent is great. Thanks again! Peace - Anthony

Show
Anthony Borrow added a comment - Dani - A definite help. I know the 1.9.5 /lib/accesslib.php file was giving me trouble with an older 1.9 patch so having something more recent is great. Thanks again! Peace - Anthony
Hide
Tobias Marx added a comment -

I have applied the Dani's patch for 1.9.5 to our 1.9.5+ (Build: 20090909) installation (testing system). While it has correctly "compressed" the values in "sortorder" I still can't move courses by clicking on those arrows.
I have enabled debugging and get the following errors:

Duplicate entry '201-7573007' for key 2

UPDATE mdl_course SET sortorder = '7573007' WHERE id = '1176'

Show
Tobias Marx added a comment - I have applied the Dani's patch for 1.9.5 to our 1.9.5+ (Build: 20090909) installation (testing system). While it has correctly "compressed" the values in "sortorder" I still can't move courses by clicking on those arrows. I have enabled debugging and get the following errors: Duplicate entry '201-7573007' for key 2 UPDATE mdl_course SET sortorder = '7573007' WHERE id = '1176'
Hide
Tobias Marx added a comment -

added:

set_field('course', 'sortorder', $max, 'id', $swapcourse->id);

this fixes a problem where courses can't be moved up or down, due to an unique index violation.

Show
Tobias Marx added a comment - added: set_field('course', 'sortorder', $max, 'id', $swapcourse->id); this fixes a problem where courses can't be moved up or down, due to an unique index violation.
Hide
Tobias Marx added a comment -

doh!

my above comment relates to the edited patch file that i've attached to this bug. it fixes an issue that we had with Dani's patch.

Show
Tobias Marx added a comment - doh! my above comment relates to the edited patch file that i've attached to this bug. it fixes an issue that we had with Dani's patch.
Hide
Anthony Borrow added a comment -

Tobias - Is this issue resolved for your site? I would like to chat with you about this so that I can better understand what is happening. Peace - Anthony

Show
Anthony Borrow added a comment - Tobias - Is this issue resolved for your site? I would like to chat with you about this so that I can better understand what is happening. Peace - Anthony
Hide
Sean Keogh added a comment -

hey guys, I have a site that has this exact problem. The site is running 1.9.6+ (Build: 20091028)

Has this been put into CVS yet? I'm going to have to update this site to 1.9.7 very soon, and I suspect that the patches above won't work with 1.9.7.

cheers

Sean K

Show
Sean Keogh added a comment - hey guys, I have a site that has this exact problem. The site is running 1.9.6+ (Build: 20091028) Has this been put into CVS yet? I'm going to have to update this site to 1.9.7 very soon, and I suspect that the patches above won't work with 1.9.7. cheers Sean K
Hide
Tobias Marx added a comment -

Hi Sean,

I wouldn't advice using those patches. We ran into a lot of problems with them. Though you could try to use them to get rid of your problems for the time beeing.

When you apply the patches a function will "compress" the sortorder values the first time you try to move a course around. This seems to work just fine. But after that a lot of errors occured (index violations when moving courses (only with some), etc.), so I've reinstalled the standard Moodle files (just copied them over the patched ones).

This left me with a Moodle installation which will run "out of numbers" sometime in the future, but for the time beeing everything works fine.

I know this is not really a fix, but at least we have a working Moodle installation. I will cope with sortorder fix when it emerges again.

Btw.: Please don't use "sortorders-moodle195_2.txt", I might have "fixed it to be broken"...

Show
Tobias Marx added a comment - Hi Sean, I wouldn't advice using those patches. We ran into a lot of problems with them. Though you could try to use them to get rid of your problems for the time beeing. When you apply the patches a function will "compress" the sortorder values the first time you try to move a course around. This seems to work just fine. But after that a lot of errors occured (index violations when moving courses (only with some), etc.), so I've reinstalled the standard Moodle files (just copied them over the patched ones). This left me with a Moodle installation which will run "out of numbers" sometime in the future, but for the time beeing everything works fine. I know this is not really a fix, but at least we have a working Moodle installation. I will cope with sortorder fix when it emerges again. Btw.: Please don't use "sortorders-moodle195_2.txt", I might have "fixed it to be broken"...
Hide
Sean Keogh added a comment -

I tried the 195 set of patches, and it failed on the category.php bit. Could this be because the 1.9.6 version of this file is too different for the patch program to recognise it?

Show
Sean Keogh added a comment - I tried the 195 set of patches, and it failed on the category.php bit. Could this be because the 1.9.6 version of this file is too different for the patch program to recognise it?
Hide
Michael Blake added a comment -

Can we get a fix ported to 1.9x for this please?

Show
Michael Blake added a comment - Can we get a fix ported to 1.9x for this please?
Hide
Sean McKay added a comment -

We are running 1.9.9 and are experiencing similar problems. We have not been able to sort our courses for some time (since 1.9.3, at least). An example error is:

PHP Notice: Duplicate entry '12-4294967295' for key 2<br /><br />UPDATE mdl_course SET sortorder = '4294968296' WHERE id = '2557'<ul style="text-align: left"><li>line 1328 of lib/dmllib.php: call to debugging()</li><li>line 1254 of lib/dmllib.php: call to set_field_select()</li><li>line 1385 of lib/datalib.php: call to set_field()</li><li>line 1411 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 195 of enrol/database/enrol.php: call to fix_course_sortorder()</li><li>line 34 of enrol/database/enrol_database_sync.php: call to enrolment_plugin_database->sync_enrolments()</li></ul> in /path/to/moodle/lib/weblib.php on line 7005
PHP Notice: Duplicate entry '12-4294967295' for key 2<br /><br />UPDATE mdl_course
SET sortorder=sortorder+8589937600
WHERE category=12<ul style="text-align: left"><li>line 103 of lib/dmllib.php: call to debugging()</li><li>line 1376 of lib/datalib.php: call to execute_sql()</li><li>line 1396 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 1411 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 195 of enrol/database/enrol.php: call to fix_course_sortorder()</li><li>line 34 of enrol/database/enrol_database_sync.php: call to enrolment_plugin_database->sync_enrolments()</li></ul> in /path/to/moodle/lib/weblib.php on line 7005
PHP Notice: Duplicate entry '12-4294967295' for key 2<br /><br />UPDATE mdl_course SET sortorder = '4294969305' WHERE id = '2557'<ul style="text-align: left"><li>line 1328 of lib/dmllib.php: call to debugging()</li><li>line 1254 of lib/dmllib.php: call to set_field_select()</li><li>line 1385 of lib/datalib.php: call to set_field()</li><li>line 1396 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 1411 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 195 of enrol/database/enrol.php: call to fix_course_sortorder()</li><li>line 34 of enrol/database/enrol_database_sync.php: call to enrolment_plugin_database->sync_enrolments()</li></ul> in /path/to/moodle/lib/weblib.php on line 7005
PHP Notice: Duplicate entry '22-4294967295' for key 2<br /><br />UPDATE mdl_course
SET sortorder=sortorder+8589938609
WHERE category=22<ul style="text-align: left"><li>line 103 of lib/dmllib.php: call to debugging()</li><li>line 1376 of lib/datalib.php: call to execute_sql()</li><li>line 1411 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 1396 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 1411 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 195 of enrol/database/enrol.php: call to fix_course_sortorder()</li><li>line 34 of enrol/database/enrol_database_sync.php: call to enrolment_plugin_database->sync_enrolments()</li></ul> in /path/to/moodle/lib/weblib.php on line 7005
PHP Notice: Duplicate entry '22-4294967295' for key 2<br /><br />UPDATE mdl_course SET sortorder = '4294970314' WHERE id = '2746'<ul style="text-align: left"><li>line 1328 of lib/dmllib.php: call to debugging()</li><li>line 1254 of lib/dmllib.php: call to set_field_select()</li><li>line 1385 of lib/datalib.php: call to set_field()</li><li>line 1411 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 1396 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 1411 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 195 of enrol/database/enrol.php: call to fix_course_sortorder()</li><li>line 34 of enrol/database/enrol_database_sync.php: call to enrolment_plugin_database->sync_enrolments()</li></ul> in /path/to/moodle/lib/weblib.php on line 7005

Show
Sean McKay added a comment - We are running 1.9.9 and are experiencing similar problems. We have not been able to sort our courses for some time (since 1.9.3, at least). An example error is: PHP Notice: Duplicate entry '12-4294967295' for key 2<br /><br />UPDATE mdl_course SET sortorder = '4294968296' WHERE id = '2557'<ul style="text-align: left"><li>line 1328 of lib/dmllib.php: call to debugging()</li><li>line 1254 of lib/dmllib.php: call to set_field_select()</li><li>line 1385 of lib/datalib.php: call to set_field()</li><li>line 1411 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 195 of enrol/database/enrol.php: call to fix_course_sortorder()</li><li>line 34 of enrol/database/enrol_database_sync.php: call to enrolment_plugin_database->sync_enrolments()</li></ul> in /path/to/moodle/lib/weblib.php on line 7005 PHP Notice: Duplicate entry '12-4294967295' for key 2<br /><br />UPDATE mdl_course SET sortorder=sortorder+8589937600 WHERE category=12<ul style="text-align: left"><li>line 103 of lib/dmllib.php: call to debugging()</li><li>line 1376 of lib/datalib.php: call to execute_sql()</li><li>line 1396 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 1411 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 195 of enrol/database/enrol.php: call to fix_course_sortorder()</li><li>line 34 of enrol/database/enrol_database_sync.php: call to enrolment_plugin_database->sync_enrolments()</li></ul> in /path/to/moodle/lib/weblib.php on line 7005 PHP Notice: Duplicate entry '12-4294967295' for key 2<br /><br />UPDATE mdl_course SET sortorder = '4294969305' WHERE id = '2557'<ul style="text-align: left"><li>line 1328 of lib/dmllib.php: call to debugging()</li><li>line 1254 of lib/dmllib.php: call to set_field_select()</li><li>line 1385 of lib/datalib.php: call to set_field()</li><li>line 1396 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 1411 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 195 of enrol/database/enrol.php: call to fix_course_sortorder()</li><li>line 34 of enrol/database/enrol_database_sync.php: call to enrolment_plugin_database->sync_enrolments()</li></ul> in /path/to/moodle/lib/weblib.php on line 7005 PHP Notice: Duplicate entry '22-4294967295' for key 2<br /><br />UPDATE mdl_course SET sortorder=sortorder+8589938609 WHERE category=22<ul style="text-align: left"><li>line 103 of lib/dmllib.php: call to debugging()</li><li>line 1376 of lib/datalib.php: call to execute_sql()</li><li>line 1411 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 1396 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 1411 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 195 of enrol/database/enrol.php: call to fix_course_sortorder()</li><li>line 34 of enrol/database/enrol_database_sync.php: call to enrolment_plugin_database->sync_enrolments()</li></ul> in /path/to/moodle/lib/weblib.php on line 7005 PHP Notice: Duplicate entry '22-4294967295' for key 2<br /><br />UPDATE mdl_course SET sortorder = '4294970314' WHERE id = '2746'<ul style="text-align: left"><li>line 1328 of lib/dmllib.php: call to debugging()</li><li>line 1254 of lib/dmllib.php: call to set_field_select()</li><li>line 1385 of lib/datalib.php: call to set_field()</li><li>line 1411 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 1396 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 1411 of lib/datalib.php: call to fix_course_sortorder()</li><li>line 195 of enrol/database/enrol.php: call to fix_course_sortorder()</li><li>line 34 of enrol/database/enrol_database_sync.php: call to enrolment_plugin_database->sync_enrolments()</li></ul> in /path/to/moodle/lib/weblib.php on line 7005
Hide
Lu Pa added a comment -

Here similar problem. We couldn't sort courses any more.. anda sort order of al courses in category x is: 35201964276705000

we are running moodle 1.9.9

Show
Lu Pa added a comment - Here similar problem. We couldn't sort courses any more.. anda sort order of al courses in category x is: 35201964276705000 we are running moodle 1.9.9
Hide
Rosario Carcò added a comment -

I reported the same issue months/years ago in a post and in another tracker issue where the same bug is discussed.

Show
Rosario Carcò added a comment - I reported the same issue months/years ago in a post and in another tracker issue where the same bug is discussed.
Hide
Lu Pa added a comment -

What post? Could you paste the link?

Show
Lu Pa added a comment - What post? Could you paste the link?

Dates

  • Created:
    Updated: