From 25d1c2400e9508ee49af874be2be1cf77ef05fc3 Mon Sep 17 00:00:00 2001 From: F TEMPEZ Date: Thu, 8 Feb 2024 16:56:39 +0100 Subject: [PATCH] TEST datetime sort --- core/module/course/course.php | 3 +- core/module/course/view/users/users.js.php | 4 + core/vendor/datatables/datetime.js | 133 +++++++++++++++++++++ core/vendor/datatables/inc.json | 1 + 4 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 core/vendor/datatables/datetime.js diff --git a/core/module/course/course.php b/core/module/course/course.php index 222a28f..0c9af76 100644 --- a/core/module/course/course.php +++ b/core/module/course/course.php @@ -674,7 +674,8 @@ class course extends common ? $pages[$this->getData(['enrolment', $courseId, $userId, 'lastPageView'])]['title'] : '', $this->getData(['enrolment', $courseId, $userId, 'datePageView']) - ? helper::dateUTF8('%d %B %Y - %H:%M', $this->getData(['enrolment', $courseId, $userId, 'datePageView'])) + ? $this->getData(['enrolment', $courseId, $userId, 'datePageView']) + //? helper::dateUTF8('%d %B %Y - %H:%M', $this->getData(['enrolment', $courseId, $userId, 'datePageView'])) : '', $this->getData(['user', $userId, 'tags']), template::button('userHistory' . $userId, [ diff --git a/core/module/course/view/users/users.js.php b/core/module/course/view/users/users.js.php index 6bcd148..128ae98 100644 --- a/core/module/course/view/users/users.js.php +++ b/core/module/course/view/users/users.js.php @@ -28,6 +28,10 @@ $(document).ready((function () { }, locale: 'fr', "columnDefs": [ + { + target: 3, + render: DataTable.render.moment( 'YYYY/MM/DD', 'Do MMM YY', 'fr' ) + }, { target: 6, orderable: false, diff --git a/core/vendor/datatables/datetime.js b/core/vendor/datatables/datetime.js new file mode 100644 index 0000000..6643863 --- /dev/null +++ b/core/vendor/datatables/datetime.js @@ -0,0 +1,133 @@ +/*! © SpryMedia Ltd - datatables.net/license */ + +(function( factory ){ + if ( typeof define === 'function' && define.amd ) { + // AMD + define( ['jquery', 'datatables.net'], function ( $ ) { + return factory( $, window, document ); + } ); + } + else if ( typeof exports === 'object' ) { + // CommonJS + var jq = require('jquery'); + var cjsRequires = function (root, $) { + if ( ! $.fn.dataTable ) { + require('datatables.net')(root, $); + } + }; + + if (typeof window === 'undefined') { + module.exports = function (root, $) { + if ( ! root ) { + // CommonJS environments without a window global must pass a + // root. This will give an error otherwise + root = window; + } + + if ( ! $ ) { + $ = jq( root ); + } + + cjsRequires( root, $ ); + return factory( $, root, root.document ); + }; + } + else { + cjsRequires( window, jq ); + module.exports = factory( jq, window, window.document ); + } + } + else { + // Browser + factory( jQuery, window, document ); + } +}(function( $, window, document, undefined ) { +'use strict'; +var DataTable = $.fn.dataTable; + + +/** + * NOTE - As of DataTables 1.12, DataTables has a built in date / time renderer + * which should be used in place of this renderer. See + * [the manual](https://datatables.net/manual/data/renderers#Date-and-time-helpers) + * for details. + * + * Date / time formats often from back from server APIs in a format that you + * don't wish to display to your end users (ISO8601 for example). This rendering + * helper can be used to transform any source date / time format into something + * which can be easily understood by your users when reading the table, and also + * by DataTables for sorting the table. + * + * The [MomentJS library](http://momentjs.com/) is used to accomplish this and + * you simply need to tell it which format to transfer from, to and specify a + * locale if required. + * + * This function should be used with the `dt-init columns.render` configuration + * option of DataTables. + * + * It accepts one, two or three parameters: + * + * * `DataTable.render.moment( to );` + * * `DataTable.render.moment( from, to );` + * * `DataTable.render.moment( from, to, locale );` + * + * Where: + * + * * `to` - the format that will be displayed to the end user + * * `from` - the format that is supplied in the data (the default is ISO8601 - + * `YYYY-MM-DD`) + * * `locale` - the locale which MomentJS should use - the default is `en` + * (English). + * + * @name datetime + * @summary Convert date / time source data into one suitable for display + * @author [Allan Jardine](http://datatables.net) + * @requires DataTables 1.10+, Moment.js 1.7+ + * + * @example + * // Convert ISO8601 dates into a simple human readable format + * $('#example').DataTable( { + * columnDefs: [ { + * targets: 1, + * render: DataTable.render.moment( 'Do MMM YYYY' ) + * } ] + * } ); + * + * @example + * // Specify a source format - in this case a unix timestamp + * $('#example').DataTable( { + * columnDefs: [ { + * targets: 2, + * render: DataTable.render.moment( 'X', 'Do MMM YY' ) + * } ] + * } ); + * + * @example + * // Specify a source format and locale + * $('#example').DataTable( { + * columnDefs: [ { + * targets: 2, + * render: DataTable.render.moment( 'YYYY/MM/DD', 'Do MMM YY', 'fr' ) + * } ] + * } ); + */ +DataTable.render.moment = function (from, to, locale) { + // Argument shifting + if (arguments.length === 1) { + to = from; + from = 'YYYY-MM-DD'; + } + return function (d, type, row) { + if (!d) { + return type === 'sort' || type === 'type' ? 0 : d; + } + var m = window.moment(d, from, locale, true); + // Order and type get a number value from Moment, everything else + // sees the rendered value + return m.format(type === 'sort' || type === 'type' ? 'x' : to); + }; +}; + + +return DateTime; +})); \ No newline at end of file diff --git a/core/vendor/datatables/inc.json b/core/vendor/datatables/inc.json index 007920f..5957fa1 100644 --- a/core/vendor/datatables/inc.json +++ b/core/vendor/datatables/inc.json @@ -1,4 +1,5 @@ [ "datatables.min.js", + "datatime.js", "datatables.min.css" ] \ No newline at end of file