Attendance Sort by ID Number

Attendance Sort by ID Number

napisao/la Babaso Aldar -
Broj odgovora: 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. 


Odgovor na Babaso Aldar

Re: Attendance Sort by ID Number

napisao/la Babaso Aldar -

Anyone solved this issue

Odgovor na Babaso Aldar

Re: Attendance Sort by ID Number

napisao/la Babaso Aldar -
Odgovor na Babaso Aldar

Re: Attendance Sort by ID Number

napisao/la 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!!!

Odgovor na Babaso Aldar

Re: Attendance Sort by ID Number

napisao/la 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.