diff --git a/cohort/classes/local/entities/cohort.php b/cohort/classes/local/entities/cohort.php index f70c644dd21..a9b06720f32 100644 --- a/cohort/classes/local/entities/cohort.php +++ b/cohort/classes/local/entities/cohort.php @@ -85,6 +85,8 @@ class cohort extends base { * @return column[] */ protected function get_all_columns(): array { + global $DB; + $tablealias = $this->get_table_alias('cohort'); // Category/context column. @@ -124,14 +126,19 @@ class cohort extends base { ->set_is_sortable(true); // Description column. + $descriptionfieldsql = "{$tablealias}.description"; + if ($DB->get_dbfamily() === 'oracle') { + $descriptionfieldsql = $DB->sql_order_by_text($descriptionfieldsql, 1024); + } $columns[] = (new column( 'description', new lang_string('description'), $this->get_entity_name() )) ->add_joins($this->get_joins()) - ->set_type(column::TYPE_TEXT) - ->add_fields("{$tablealias}.description, {$tablealias}.descriptionformat, {$tablealias}.id, {$tablealias}.contextid") + ->set_type(column::TYPE_LONGTEXT) + ->add_field($descriptionfieldsql, 'description') + ->add_fields("{$tablealias}.descriptionformat, {$tablealias}.id, {$tablealias}.contextid") ->add_callback(static function(?string $description, stdClass $cohort): string { global $CFG; require_once("{$CFG->libdir}/filelib.php"); diff --git a/course/classes/local/entities/course_category.php b/course/classes/local/entities/course_category.php index a3510f081ad..e9e6dd08a53 100644 --- a/course/classes/local/entities/course_category.php +++ b/course/classes/local/entities/course_category.php @@ -85,6 +85,8 @@ class course_category extends base { * @return column[] */ protected function get_all_columns(): array { + global $DB; + $tablealias = $this->get_table_alias('course_categories'); $tablealiascontext = $this->get_table_alias('context'); @@ -131,6 +133,10 @@ class course_category extends base { ->set_is_sortable(true); // Description column (note we need to join/select from the context table in order to format the column). + $descriptionfieldsql = "{$tablealias}.description"; + if ($DB->get_dbfamily() === 'oracle') { + $descriptionfieldsql = $DB->sql_order_by_text($descriptionfieldsql, 1024); + } $columns[] = (new column( 'description', new lang_string('description'), @@ -141,8 +147,9 @@ class course_category extends base { JOIN {context} {$tablealiascontext} ON {$tablealiascontext}.instanceid = {$tablealias}.id AND {$tablealiascontext}.contextlevel = " . CONTEXT_COURSECAT) - ->set_type(column::TYPE_TEXT) - ->add_fields("{$tablealias}.description, {$tablealias}.descriptionformat, {$tablealiascontext}.id AS contextid") + ->set_type(column::TYPE_LONGTEXT) + ->add_field($descriptionfieldsql, 'description') + ->add_fields("{$tablealias}.descriptionformat, {$tablealiascontext}.id AS contextid") ->add_callback(static function(?string $description, stdClass $category): string { global $CFG; require_once("{$CFG->libdir}/filelib.php"); diff --git a/reportbuilder/classes/local/entities/course.php b/reportbuilder/classes/local/entities/course.php index 982b3a08a41..734fdd2816d 100644 --- a/reportbuilder/classes/local/entities/course.php +++ b/reportbuilder/classes/local/entities/course.php @@ -201,7 +201,8 @@ class course extends base { * @return column[] */ protected function get_all_columns(): array { - $columns = []; + global $DB; + $coursefields = $this->get_course_fields(); $tablealias = $this->get_table_alias('course'); $contexttablealias = $this->get_table_alias('context'); @@ -247,14 +248,21 @@ class course extends base { } foreach ($coursefields as $coursefield => $coursefieldlang) { + $columntype = $this->get_course_field_type($coursefield); + + $columnfieldsql = "{$tablealias}.{$coursefield}"; + if ($columntype === column::TYPE_LONGTEXT && $DB->get_dbfamily() === 'oracle') { + $columnfieldsql = $DB->sql_order_by_text($columnfieldsql, 1024); + } + $column = (new column( $coursefield, $coursefieldlang, $this->get_entity_name() )) ->add_joins($this->get_joins()) - ->set_type($this->get_course_field_type($coursefield)) - ->add_field("$tablealias.$coursefield") + ->set_type($columntype) + ->add_field($columnfieldsql, $coursefield) ->add_callback([$this, 'format'], $coursefield) ->set_is_sortable($this->is_sortable($coursefield)); diff --git a/reportbuilder/classes/local/entities/user.php b/reportbuilder/classes/local/entities/user.php index f690cc2dd1d..bd7bd483480 100644 --- a/reportbuilder/classes/local/entities/user.php +++ b/reportbuilder/classes/local/entities/user.php @@ -108,6 +108,8 @@ class user extends base { * @return column[] */ protected function get_all_columns(): array { + global $DB; + $usertablealias = $this->get_table_alias('user'); $fullnameselect = self::get_name_fields_select($usertablealias); @@ -218,14 +220,19 @@ class user extends base { foreach ($userfields as $userfield => $userfieldlang) { $columntype = $this->get_user_field_type($userfield); + $columnfieldsql = "{$usertablealias}.{$userfield}"; + if ($columntype === column::TYPE_LONGTEXT && $DB->get_dbfamily() === 'oracle') { + $columnfieldsql = $DB->sql_order_by_text($columnfieldsql, 1024); + } + $column = (new column( $userfield, $userfieldlang, $this->get_entity_name() )) ->add_joins($this->get_joins()) - ->add_field("{$usertablealias}.{$userfield}") ->set_type($columntype) + ->add_field($columnfieldsql, $userfield) ->set_is_sortable($this->is_sortable($userfield)) ->add_callback([$this, 'format'], $userfield); diff --git a/reportbuilder/classes/local/helpers/user_profile_fields.php b/reportbuilder/classes/local/helpers/user_profile_fields.php index 56c837e79ee..bb301468192 100644 --- a/reportbuilder/classes/local/helpers/user_profile_fields.php +++ b/reportbuilder/classes/local/helpers/user_profile_fields.php @@ -118,13 +118,19 @@ class user_profile_fields { * @return column[] */ public function get_columns(): array { - $columns = []; + global $DB; + $columns = []; foreach ($this->userprofilefields as $profilefield) { $userinfotablealias = database::generate_alias(); $columntype = $this->get_user_field_type($profilefield->field->datatype); + $columnfieldsql = "{$userinfotablealias}.data"; + if ($DB->get_dbfamily() === 'oracle') { + $columnfieldsql = $DB->sql_order_by_text($columnfieldsql, 1024); + } + $column = (new column( 'profilefield_' . $profilefield->field->shortname, new lang_string('customfieldcolumn', 'core_reportbuilder', @@ -136,7 +142,7 @@ class user_profile_fields { ->add_join("LEFT JOIN {user_info_data} {$userinfotablealias} " . "ON {$userinfotablealias}.userid = {$this->usertablefieldalias} " . "AND {$userinfotablealias}.fieldid = {$profilefield->fieldid}") - ->add_field("{$userinfotablealias}.data") + ->add_field($columnfieldsql, 'data') ->set_type($columntype) ->set_is_sortable($columntype !== column::TYPE_LONGTEXT) ->add_callback([$this, 'format_profile_field'], $profilefield);