Attendance Sort by ID Number

Attendance Sort by ID Number

by Babaso Aldar -
Number of replies: 6

Dear All,

At the time of attendance taking in the class, We would like to sort the student list by their ID number, Here we can sort by First name / Last name but we want it to be sort by id number, in our case ID numbers are the Roll numbers of students which are unique.

We have moodle 3.5. 


Average of ratings: -
In reply to Babaso Aldar

Re: Attendance Sort by ID Number

by Babaso Aldar -

Anyone solved this issue

In reply to Babaso Aldar

Re: Attendance Sort by ID Number

by Babaso Aldar -

Finally Solved

In reply to Babaso Aldar

Re: Attendance Sort by ID Number

by Babaso Aldar -

Steps:

Files need to be edited

1. \moodle\mod\attendance\locallib.php

2. \moodle\mod\attendance\renderer.php

3. \moodle\mod\attendance\classes\structure.php


1.  \moodle\mod\attendance\locallib.php

Original:

       define('ATT_SORT_DEFAULT', 0);

      define('ATT_SORT_LASTNAME', 1);

      define('ATT_SORT_FIRSTNAME', 2);

Replace with:

      define('ATT_SORT_DEFAULT', 3);

     define('ATT_SORT_IDNUMBER', 3);

     define('ATT_SORT_LASTNAME', 1);

     define('ATT_SORT_FIRSTNAME', 2);


2. \moodle\mod\attendance\renderer.php

Original:

if ($data->pageparams->sort == ATT_SORT_LASTNAME) {

            $url->param('sort', ATT_SORT_FIRSTNAME);

            $firstname = html_writer::link($url, get_string('firstname'));

            $lastname = get_string('lastname');

        } else if ($data->pageparams->sort == ATT_SORT_FIRSTNAME) {

            $firstname = get_string('firstname');

            $url->param('sort', ATT_SORT_LASTNAME);

            $lastname = html_writer::link($url, get_string('lastname'));

        } else {

            $firstname = html_writer::link($data->url(array('sort' => ATT_SORT_FIRSTNAME)), get_string('firstname'));

            $lastname = html_writer::link($data->url(array('sort' => ATT_SORT_LASTNAME)), get_string('lastname'));

        }

        if ($CFG->fullnamedisplay == 'lastname firstname') {

            $fullnamehead = "$lastname / $firstname";

        } else {

            $fullnamehead = "$firstname / $lastname ";

        }


Replace with:

        if ($data->pageparams->sort == ATT_SORT_IDNUMBER) {

            $url->param('sort', ATT_SORT_FIRSTNAME);

            $firstname = html_writer::link($url, get_string('firstname'));

            $url->param('sort', ATT_SORT_LASTNAME);

            $lastname = html_writer::link($url, get_string('lastname'));

            $idnumber = get_string('idnumber');

        } else if ($data->pageparams->sort == ATT_SORT_LASTNAME) {

            $lastname = get_string('lastname');

            $url->param('sort', ATT_SORT_IDNUMBER);

            $idnumber = html_writer::link($url, get_string('idnumber'));

            $url->param('sort', ATT_SORT_FIRSTNAME);

            $firstname = html_writer::link($url, get_string('firstname'));

        } else if ($data->pageparams->sort == ATT_SORT_FIRSTNAME) {

            $firstname = get_string('firstname');

            $url->param('sort', ATT_SORT_LASTNAME);

            $lastname = html_writer::link($url, get_string('lastname'));

            $url->param('sort', ATT_SORT_IDNUMBER);

            $idnumber = html_writer::link($url, get_string('idnumber'));

        } else {

    $idnumber = html_writer::link($data->url(array('sort' => ATT_SORT_IDNUMBER)), get_string('idnumber'));

            $firstname = html_writer::link($data->url(array('sort' => ATT_SORT_FIRSTNAME)), get_string('firstname'));

            $lastname = html_writer::link($data->url(array('sort' => ATT_SORT_LASTNAME)), get_string('lastname'));

        }


        if ($CFG->fullnamedisplay == 'idnumber firstname lastname') {

            $fullnamehead = "$idnumber / $firstname / $lastname";

        } else if ($CFG->fullnamedisplay == 'firstname lastname idnumber') {

            $fullnamehead = "$firstname / $lastname / $idnumber";

        }  else {

            $fullnamehead = "$firstname / $lastname / $idnumber";

        }


3. \moodle\mod\attendance\classes\structure.php

Original:

if (empty($this->pageparams->sort)) {

            $this->pageparams->sort = ATT_SORT_DEFAULT;

        }

        if ($this->pageparams->sort == ATT_SORT_FIRSTNAME) {

            $orderby = $DB->sql_fullname('u.firstname', 'u.lastname') . ', u.id';

        } else if ($this->pageparams->sort == ATT_SORT_LASTNAME) {

            $orderby = 'u.lastname, u.firstname, u.id';

        } else {

            list($orderby, $sortparams) = users_order_by_sql('u');

        }


Replace with:

if (empty($this->pageparams->sort)) {

            $this->pageparams->sort = ATT_SORT_DEFAULT;

        }

        if ($this->pageparams->sort == ATT_SORT_IDNUMBER) {

            $orderby = $DB->sql_fullname('u.idnumber', 'u.lastname') . ', u.id';

        }else if ($this->pageparams->sort == ATT_SORT_FIRSTNAME) {

            $orderby = $DB->sql_fullname('u.firstname', 'u.idnumber') . ', u.id';

        } else if ($this->pageparams->sort == ATT_SORT_LASTNAME) {

            $orderby = 'u.lastname, u.idnumber, u.id';

        } else {

            list($orderby, $sortparams) = users_order_by_sql('u');

        }


This worked for me.

Thanks!!!

Average of ratings: Useful (1)
In reply to Babaso Aldar

Re: Attendance Sort by ID Number

by James Steerpike -

Very useful, works beautifully, can't thank you enough. This should be a feature - many schools use sorting by ID rather than names.

In reply to Babaso Aldar

Re: Attendance Sort by ID Number

by Emmanuel Oduro -

I am using Moodle 3.7.1, I followed the instructions and the "ID Sorting" is still not working for me.

Please, Can somebody help me with "Username" sorting instead of the "ID sorting".

I have been asked to do that, I need it badly...

Thank you.