From 3751c84008fccfa2dc2f7d14e205d1159fe06de7 Mon Sep 17 00:00:00 2001 From: "Eloy Lafuente (stronk7)" Date: Thu, 16 Dec 2010 01:07:16 +0100 Subject: [PATCH] MDL-25692 search working for mssql + oracle --- mod/data/field/checkbox/field.class.php | 6 +++--- mod/data/field/latlong/field.class.php | 4 +++- mod/data/field/menu/field.class.php | 3 ++- mod/data/field/multimenu/field.class.php | 3 ++- mod/data/field/number/field.class.php | 6 +++--- mod/data/field/radiobutton/field.class.php | 3 ++- mod/data/field/text/field.class.php | 12 ++++++------ mod/data/field/textarea/field.class.php | 14 +++++++------- 8 files changed, 28 insertions(+), 23 deletions(-) diff --git a/mod/data/field/checkbox/field.class.php b/mod/data/field/checkbox/field.class.php index b70bd4e6175..17b98b1c3f3 100755 --- a/mod/data/field/checkbox/field.class.php +++ b/mod/data/field/checkbox/field.class.php @@ -113,17 +113,18 @@ class data_field_checkbox extends data_field_base { } return array('checked'=>$selected, 'allrequired'=>$allrequired); } - + function generate_sql($tablealias, $value) { $allrequired = $value['allrequired']; $selected = $value['checked']; + $varcharcontent = sql_compare_text("{$tablealias}.content", 255); if ($selected) { $conditions = array(); foreach ($selected as $sel) { $likesel = str_replace('%', '\%', $sel); $likeselsel = str_replace('_', '\_', $likesel); - $conditions[] = "({$tablealias}.fieldid = {$this->field->id} AND ({$tablealias}.content = '$sel' + $conditions[] = "({$tablealias}.fieldid = {$this->field->id} AND ($varcharcontent = '$sel' OR {$tablealias}.content LIKE '$likesel##%' OR {$tablealias}.content LIKE '%##$likesel' OR {$tablealias}.content LIKE '%##$likesel##%'))"; @@ -138,7 +139,6 @@ class data_field_checkbox extends data_field_base { } } - function update_content($recordid, $value, $name='') { $content = new object(); $content->fieldid = $this->field->id; diff --git a/mod/data/field/latlong/field.class.php b/mod/data/field/latlong/field.class.php index 6da21ee09be..5cbe4e59035 100755 --- a/mod/data/field/latlong/field.class.php +++ b/mod/data/field/latlong/field.class.php @@ -93,7 +93,9 @@ class data_field_latlong extends data_field_base { $latlong[0] = ''; $latlong[1] = ''; $latlong = explode (',', $value, 2); - return " ({$tablealias}.fieldid = {$this->field->id} AND {$tablealias}.content = '$latlong[0]' AND {$tablealias}.content1 = '$latlong[1]') "; + $varcharlat = sql_compare_text("{$tablealias}.content"); + $varcharlong= sql_compare_text("{$tablealias}.content1"); + return " ({$tablealias}.fieldid = {$this->field->id} AND $varcharlat = '$latlong[0]' AND $varcharlong = '$latlong[1]') "; } function display_browse_field($recordid, $template) { diff --git a/mod/data/field/menu/field.class.php b/mod/data/field/menu/field.class.php index e2b367e6b9c..7b374e8cdc8 100755 --- a/mod/data/field/menu/field.class.php +++ b/mod/data/field/menu/field.class.php @@ -97,7 +97,8 @@ class data_field_menu extends data_field_base { } function generate_sql($tablealias, $value) { - return " ({$tablealias}.fieldid = {$this->field->id} AND {$tablealias}.content = '$value') "; + $varcharcontent = sql_compare_text("{$tablealias}.content", 255); + return " ({$tablealias}.fieldid = {$this->field->id} AND $varcharcontent = '$value') "; } } diff --git a/mod/data/field/multimenu/field.class.php b/mod/data/field/multimenu/field.class.php index d6fcbb26edb..a51a674cd42 100755 --- a/mod/data/field/multimenu/field.class.php +++ b/mod/data/field/multimenu/field.class.php @@ -140,13 +140,14 @@ class data_field_multimenu extends data_field_base { function generate_sql($tablealias, $value) { $allrequired = $value['allrequired']; $selected = $value['selected']; + $varcharcontent = sql_compare_text("{$tablealias}.content", 255); if ($selected) { $conditions = array(); foreach ($selected as $sel) { $likesel = str_replace('%', '\%', $sel); $likeselsel = str_replace('_', '\_', $likesel); - $conditions[] = "({$tablealias}.fieldid = {$this->field->id} AND ({$tablealias}.content = '$sel' + $conditions[] = "({$tablealias}.fieldid = {$this->field->id} AND ($varcharcontent = '$sel' OR {$tablealias}.content LIKE '$likesel##%' OR {$tablealias}.content LIKE '%##$likesel' OR {$tablealias}.content LIKE '%##$likesel##%'))"; diff --git a/mod/data/field/number/field.class.php b/mod/data/field/number/field.class.php index 371d725ca5a..eb165048dd8 100755 --- a/mod/data/field/number/field.class.php +++ b/mod/data/field/number/field.class.php @@ -76,10 +76,10 @@ class data_field_number extends data_field_base { function parse_search_field() { return optional_param('f_'.$this->field->id, '', PARAM_NOTAGS); } - - // need to cast? + function generate_sql($tablealias, $value) { - return " ({$tablealias}.fieldid = {$this->field->id} AND {$tablealias}.content = '$value') "; + $varcharcontent = sql_compare_text("{$tablealias}.content"); + return " ({$tablealias}.fieldid = {$this->field->id} AND $varcharcontent = '$value') "; } function get_sort_sql($fieldname) { diff --git a/mod/data/field/radiobutton/field.class.php b/mod/data/field/radiobutton/field.class.php index 04b685233e3..6cfda5e57c8 100755 --- a/mod/data/field/radiobutton/field.class.php +++ b/mod/data/field/radiobutton/field.class.php @@ -91,7 +91,8 @@ class data_field_radiobutton extends data_field_base { } function generate_sql($tablealias, $value) { - return " ({$tablealias}.fieldid = {$this->field->id} AND {$tablealias}.content = '$value') "; + $varcharcontent = sql_compare_text("{$tablealias}.content", 255); + return " ({$tablealias}.fieldid = {$this->field->id} AND $varcharcontent = '$value') "; } } diff --git a/mod/data/field/text/field.class.php b/mod/data/field/text/field.class.php index ba13558a5f5..248d2b4791c 100755 --- a/mod/data/field/text/field.class.php +++ b/mod/data/field/text/field.class.php @@ -29,19 +29,19 @@ class data_field_text extends data_field_base { function data_field_text($field=0, $data=0) { parent::data_field_base($field, $data); } - + function display_search_field($value = '') { - return ''; + return ''; } - + function parse_search_field() { return optional_param('f_'.$this->field->id, '', PARAM_NOTAGS); } - + function generate_sql($tablealias, $value) { - return " ({$tablealias}.fieldid = {$this->field->id} AND {$tablealias}.content LIKE '%{$value}%') "; + return " ({$tablealias}.fieldid = {$this->field->id} AND {$tablealias}.content LIKE '%{$value}%') "; } - + } ?> diff --git a/mod/data/field/textarea/field.class.php b/mod/data/field/textarea/field.class.php index 9d22247a4f7..7ebf19c06ba 100755 --- a/mod/data/field/textarea/field.class.php +++ b/mod/data/field/textarea/field.class.php @@ -68,20 +68,20 @@ class data_field_textarea extends data_field_base { $str .= ''; return $str; } - - + + function display_search_field($value = '') { - return ''; + return ''; } - + function parse_search_field() { return optional_param('f_'.$this->field->id, '', PARAM_NOTAGS); } - + function generate_sql($tablealias, $value) { - return " ({$tablealias}.fieldid = {$this->field->id} AND {$tablealias}.content LIKE '%{$value}%') "; + return " ({$tablealias}.fieldid = {$this->field->id} AND {$tablealias}.content LIKE '%{$value}%') "; } - + function gen_textarea($usehtmleditor, $text='') { // MDL-16018: Don't print htmlarea with < 7 lines height, causes visualization problem $text = clean_text($text);