From: skodak Date: Sat, 19 Apr 2008 16:47:35 +0000 (+0000) Subject: MDL-14018 fixed regression, proper LIKE meta quoting, fix displaying when options... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=9a36be0212cb85c46cffe5ed277d7e433f65f44d;p=moodle.git MDL-14018 fixed regression, proper LIKE meta quoting, fix displaying when options changed; merged from MOODLE_19_STABLE --- diff --git a/mod/data/field/multimenu/field.class.php b/mod/data/field/multimenu/field.class.php index ed6e830534..98ca922afa 100755 --- a/mod/data/field/multimenu/field.class.php +++ b/mod/data/field/multimenu/field.class.php @@ -61,7 +61,7 @@ class data_field_multimenu extends data_field_base { return $str; } - + function display_search_field($value = '') { global $CFG; @@ -70,15 +70,40 @@ class data_field_multimenu extends data_field_base { $allrequired = $value['allrequired'] ? 'checked = "checked"' : ''; } else { $content = array(); - $allrequired = ''; + $allrequired = ''; } static $c = 0; $str = ''; $str .= ' '; @@ -96,7 +126,7 @@ class data_field_multimenu extends data_field_base { return $str; } - + function parse_search_field() { $selected = optional_param('f_'.$this->field->id, array(), PARAM_NOTAGS); $allrequired = optional_param('f_'.$this->field->id.'_allreq', 0, PARAM_BOOL); @@ -114,7 +144,12 @@ class data_field_multimenu extends data_field_base { if ($selected) { $conditions = array(); foreach ($selected as $sel) { - $conditions[] = "({$tablealias}.fieldid = {$this->field->id} AND ({$tablealias}.content LIKE '$sel##%' OR {$tablealias}.content LIKE '%##$sel' OR {$tablealias}.content LIKE '%##$sel##%'))"; + $likesel = str_replace('%', '\%', $sel); + $likeselsel = str_replace('_', '\_', $likesel); + $conditions[] = "({$tablealias}.fieldid = {$this->field->id} AND ({$tablealias}.content = '$sel' + OR {$tablealias}.content LIKE '$likesel##%' + OR {$tablealias}.content LIKE '%##$likesel' + OR {$tablealias}.content LIKE '%##$likesel##%'))"; } if ($allrequired) { return " (".implode(" AND ", $conditions).") "; @@ -123,7 +158,7 @@ class data_field_multimenu extends data_field_base { } } else { return " "; - } + } } function update_content($recordid, $value, $name='') { @@ -168,13 +203,21 @@ class data_field_multimenu extends data_field_base { function display_browse_field($recordid, $template) { - if ($content = get_record('data_content', 'fieldid', $this->field->id, 'recordid', $recordid)){ - $contentArr = array(); - if (!empty($content->content)) { - $contentArr = explode('##', $content->content); + if ($content = get_record('data_content', 'fieldid', $this->field->id, 'recordid', $recordid)) { + if (empty($content->content)) { + return false; } + + $options = explode("\n",$this->field->param1); + $options = array_map('trim', $options); + + $contentArr = explode('##', $content->content); $str = ''; foreach ($contentArr as $line) { + if (!in_array($line, $options)) { + // hmm, looks like somebody edited the field definition + continue; + } $str .= $line . "
\n"; } return $str;