mirror of
https://github.com/moodle/moodle.git
synced 2025-04-21 16:32:18 +02:00
MDL-57920 mod_data: Refactor search array creation
This commit is contained in:
parent
4f164a3e2d
commit
c8a804ff68
@ -114,9 +114,17 @@ class data_field_checkbox extends data_field_base {
|
||||
return $str;
|
||||
}
|
||||
|
||||
function parse_search_field() {
|
||||
$selected = optional_param_array('f_'.$this->field->id, array(), PARAM_NOTAGS);
|
||||
$allrequired = optional_param('f_'.$this->field->id.'_allreq', 0, PARAM_BOOL);
|
||||
public function parse_search_field($defaults = null) {
|
||||
$paramselected = 'f_'.$this->field->id;
|
||||
$paramallrequired = 'f_'.$this->field->id.'_allreq';
|
||||
|
||||
if (empty($defaults[$paramselected])) { // One empty means the other ones are empty too.
|
||||
$defaults = array($paramselected => array(), $paramallrequired => 0);
|
||||
}
|
||||
|
||||
$selected = optional_param_array($paramselected, $defaults[$paramselected], PARAM_NOTAGS);
|
||||
$allrequired = optional_param($paramallrequired, $defaults[$paramallrequired], PARAM_BOOL);
|
||||
|
||||
if (empty($selected)) {
|
||||
// no searching
|
||||
return '';
|
||||
|
@ -93,11 +93,20 @@ class data_field_date extends data_field_base {
|
||||
return array(" ({$tablealias}.fieldid = {$this->field->id} AND $varcharcontent = :$name) ", array($name => $value['timestamp']));
|
||||
}
|
||||
|
||||
function parse_search_field() {
|
||||
$day = optional_param('f_'.$this->field->id.'_d', 0, PARAM_INT);
|
||||
$month = optional_param('f_'.$this->field->id.'_m', 0, PARAM_INT);
|
||||
$year = optional_param('f_'.$this->field->id.'_y', 0, PARAM_INT);
|
||||
$usedate = optional_param('f_'.$this->field->id.'_z', 0, PARAM_INT);
|
||||
public function parse_search_field($defaults = null) {
|
||||
$paramday = 'f_'.$this->field->id.'_d';
|
||||
$parammonth = 'f_'.$this->field->id.'_m';
|
||||
$paramyear = 'f_'.$this->field->id.'_y';
|
||||
$paramusedate = 'f_'.$this->field->id.'_z';
|
||||
if (empty($defaults[$paramday])) { // One empty means the other ones are empty too.
|
||||
$defaults = array($paramday => 0, $parammonth => 0, $paramyear => 0, $paramusedate => 0);
|
||||
}
|
||||
|
||||
$day = optional_param($paramday, $defaults[$paramday], PARAM_INT);
|
||||
$month = optional_param($parammonth, $defaults[$parammonth], PARAM_INT);
|
||||
$year = optional_param($paramyear, $defaults[$paramyear], PARAM_INT);
|
||||
$usedate = optional_param($paramusedate, $defaults[$paramusedate], PARAM_INT);
|
||||
|
||||
$data = array();
|
||||
if (!empty($day) && !empty($month) && !empty($year) && $usedate == 1) {
|
||||
$calendartype = \core_calendar\type_factory::get_calendar_instance();
|
||||
|
@ -116,8 +116,12 @@ class data_field_file extends data_field_base {
|
||||
return array(" ({$tablealias}.fieldid = {$this->field->id} AND ".$DB->sql_like("{$tablealias}.content", ":$name", false).") ", array($name=>"%$value%"));
|
||||
}
|
||||
|
||||
function parse_search_field() {
|
||||
return optional_param('f_'.$this->field->id, '', PARAM_NOTAGS);
|
||||
public function parse_search_field($defaults = null) {
|
||||
$param = 'f_'.$this->field->id;
|
||||
if (empty($defaults[$param])) {
|
||||
$defaults = array($param => '');
|
||||
}
|
||||
return optional_param($param, $defaults[$param], PARAM_NOTAGS);
|
||||
}
|
||||
|
||||
function get_file($recordid, $content=null) {
|
||||
|
@ -115,8 +115,12 @@ class data_field_latlong extends data_field_base {
|
||||
return $return;
|
||||
}
|
||||
|
||||
function parse_search_field() {
|
||||
return optional_param('f_'.$this->field->id, '', PARAM_NOTAGS);
|
||||
public function parse_search_field($defaults = null) {
|
||||
$param = 'f_'.$this->field->id;
|
||||
if (empty($defaults[$param])) {
|
||||
$defaults = array($param => '');
|
||||
}
|
||||
return optional_param($param, $defaults[$param], PARAM_NOTAGS);
|
||||
}
|
||||
|
||||
function generate_sql($tablealias, $value) {
|
||||
|
@ -108,9 +108,13 @@ class data_field_menu extends data_field_base {
|
||||
return $return;
|
||||
}
|
||||
|
||||
function parse_search_field() {
|
||||
return optional_param('f_'.$this->field->id, '', PARAM_NOTAGS);
|
||||
}
|
||||
public function parse_search_field($defaults = null) {
|
||||
$param = 'f_'.$this->field->id;
|
||||
if (empty($defaults[$param])) {
|
||||
$defaults = array($param => '');
|
||||
}
|
||||
return optional_param($param, $defaults[$param], PARAM_NOTAGS);
|
||||
}
|
||||
|
||||
function generate_sql($tablealias, $value) {
|
||||
global $DB;
|
||||
|
@ -146,9 +146,17 @@ class data_field_multimenu extends data_field_base {
|
||||
|
||||
}
|
||||
|
||||
function parse_search_field() {
|
||||
$selected = optional_param_array('f_'.$this->field->id, array(), PARAM_NOTAGS);
|
||||
$allrequired = optional_param('f_'.$this->field->id.'_allreq', 0, PARAM_BOOL);
|
||||
public function parse_search_field($defaults = null) {
|
||||
$paramselected = 'f_'.$this->field->id;
|
||||
$paramallrequired = 'f_'.$this->field->id.'_allreq';
|
||||
|
||||
if (empty($defaults[$paramselected])) { // One empty means the other ones are empty too.
|
||||
$defaults = array($paramselected => array(), $paramallrequired => 0);
|
||||
}
|
||||
|
||||
$selected = optional_param_array($paramselected, $defaults[$paramselected], PARAM_NOTAGS);
|
||||
$allrequired = optional_param($paramallrequired, $defaults[$paramallrequired], PARAM_BOOL);
|
||||
|
||||
if (empty($selected)) {
|
||||
// no searching
|
||||
return '';
|
||||
|
@ -75,8 +75,12 @@ class data_field_number extends data_field_base {
|
||||
'value="'.s($value).'" class="form-control d-inline"/>';
|
||||
}
|
||||
|
||||
function parse_search_field() {
|
||||
return optional_param('f_'.$this->field->id, '', PARAM_NOTAGS);
|
||||
public function parse_search_field($defaults = null) {
|
||||
$param = 'f_'.$this->field->id;
|
||||
if (empty($defaults[$param])) {
|
||||
$defaults = array($param => '');
|
||||
}
|
||||
return optional_param($param, $defaults[$param], PARAM_NOTAGS);
|
||||
}
|
||||
|
||||
// need to cast?
|
||||
|
@ -145,8 +145,12 @@ class data_field_picture extends data_field_base {
|
||||
'value="' . s($value) . '" class="form-control"/>';
|
||||
}
|
||||
|
||||
function parse_search_field() {
|
||||
return optional_param('f_'.$this->field->id, '', PARAM_NOTAGS);
|
||||
public function parse_search_field($defaults = null) {
|
||||
$param = 'f_'.$this->field->id;
|
||||
if (empty($defaults[$param])) {
|
||||
$defaults = array($param => '');
|
||||
}
|
||||
return optional_param($param, $defaults[$param], PARAM_NOTAGS);
|
||||
}
|
||||
|
||||
function generate_sql($tablealias, $value) {
|
||||
|
@ -85,7 +85,7 @@ class data_field_radiobutton extends data_field_base {
|
||||
return $str;
|
||||
}
|
||||
|
||||
function display_search_field($value = '') {
|
||||
function display_search_field($value = '') {
|
||||
global $CFG, $DB;
|
||||
|
||||
$varcharcontent = $DB->sql_compare_text('content', 255);
|
||||
@ -107,8 +107,12 @@ class data_field_radiobutton extends data_field_base {
|
||||
return $return;
|
||||
}
|
||||
|
||||
function parse_search_field() {
|
||||
return optional_param('f_'.$this->field->id, '', PARAM_NOTAGS);
|
||||
public function parse_search_field($defaults = null) {
|
||||
$param = 'f_'.$this->field->id;
|
||||
if (empty($defaults[$param])) {
|
||||
$defaults = array($param => '');
|
||||
}
|
||||
return optional_param($param, $defaults[$param], PARAM_NOTAGS);
|
||||
}
|
||||
|
||||
function generate_sql($tablealias, $value) {
|
||||
|
@ -38,8 +38,12 @@ class data_field_text extends data_field_base {
|
||||
'name="f_' . $this->field->id . '" value="' . s($value) . '" />';
|
||||
}
|
||||
|
||||
function parse_search_field() {
|
||||
return optional_param('f_'.$this->field->id, '', PARAM_NOTAGS);
|
||||
public function parse_search_field($defaults = null) {
|
||||
$param = 'f_'.$this->field->id;
|
||||
if (empty($defaults[$param])) {
|
||||
$defaults = array($param => '');
|
||||
}
|
||||
return optional_param($param, $defaults[$param], PARAM_NOTAGS);
|
||||
}
|
||||
|
||||
function generate_sql($tablealias, $value) {
|
||||
|
@ -175,8 +175,12 @@ class data_field_textarea extends data_field_base {
|
||||
'value="' . s($value) . '" class="form-control"/>';
|
||||
}
|
||||
|
||||
function parse_search_field() {
|
||||
return optional_param('f_'.$this->field->id, '', PARAM_NOTAGS);
|
||||
public function parse_search_field($defaults = null) {
|
||||
$param = 'f_'.$this->field->id;
|
||||
if (empty($defaults[$param])) {
|
||||
$defaults = array($param => '');
|
||||
}
|
||||
return optional_param($param, $defaults[$param], PARAM_NOTAGS);
|
||||
}
|
||||
|
||||
function generate_sql($tablealias, $value) {
|
||||
|
@ -120,8 +120,12 @@ class data_field_url extends data_field_base {
|
||||
' name="f_' . $this->field->id . '" value="' . s($value) . '" class="form-control d-inline"/>';
|
||||
}
|
||||
|
||||
function parse_search_field() {
|
||||
return optional_param('f_'.$this->field->id, '', PARAM_NOTAGS);
|
||||
public function parse_search_field($defaults = null) {
|
||||
$param = 'f_'.$this->field->id;
|
||||
if (empty($defaults[$param])) {
|
||||
$defaults = array($param => '');
|
||||
}
|
||||
return optional_param($param, $defaults[$param], PARAM_NOTAGS);
|
||||
}
|
||||
|
||||
function generate_sql($tablealias, $value) {
|
||||
|
@ -798,6 +798,10 @@ function data_search_entries($data, $cm, $context, $mode, $currentgroup, $search
|
||||
$searcharray = array();
|
||||
}
|
||||
|
||||
if (core_text::strlen($search) < 2) {
|
||||
$search = '';
|
||||
}
|
||||
|
||||
$approvecap = has_capability('mod/data:approve', $context);
|
||||
$canmanageentries = has_capability('mod/data:manageentries', $context);
|
||||
|
||||
@ -1077,3 +1081,88 @@ function data_get_field_instances($data) {
|
||||
}
|
||||
return $instances;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the search array.
|
||||
*
|
||||
* @param stdClass $data the database object
|
||||
* @param bool $paging if paging is being used
|
||||
* @param array $searcharray the current search array (saved by session)
|
||||
* @param array $defaults default values for the searchable fields
|
||||
* @param str $fn the first name to search (optional)
|
||||
* @param str $ln the last name to search (optional)
|
||||
* @return array the search array and plain search build based on the different elements
|
||||
* @since Moodle 3.3
|
||||
*/
|
||||
function data_build_search_array($data, $paging, $searcharray, $defaults = null, $fn = '', $ln = '') {
|
||||
global $DB;
|
||||
|
||||
$search = '';
|
||||
$vals = array();
|
||||
$fields = $DB->get_records('data_fields', array('dataid' => $data->id));
|
||||
|
||||
if (!empty($fields)) {
|
||||
foreach ($fields as $field) {
|
||||
$searchfield = data_get_field_from_id($field->id, $data);
|
||||
// Get field data to build search sql with. If paging is false, get from user.
|
||||
// If paging is true, get data from $searcharray which is obtained from the $SESSION (see line 116).
|
||||
if (!$paging) {
|
||||
$val = $searchfield->parse_search_field($defaults);
|
||||
} else {
|
||||
// Set value from session if there is a value @ the required index.
|
||||
if (isset($searcharray[$field->id])) {
|
||||
$val = $searcharray[$field->id]->data;
|
||||
} else { // If there is not an entry @ the required index, set value to blank.
|
||||
$val = '';
|
||||
}
|
||||
}
|
||||
if (!empty($val)) {
|
||||
$searcharray[$field->id] = new stdClass();
|
||||
list($searcharray[$field->id]->sql, $searcharray[$field->id]->params) = $searchfield->generate_sql('c'.$field->id, $val);
|
||||
$searcharray[$field->id]->data = $val;
|
||||
$vals[] = $val;
|
||||
} else {
|
||||
// Clear it out.
|
||||
unset($searcharray[$field->id]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$paging) {
|
||||
// Name searching.
|
||||
$fn = optional_param('u_fn', $fn, PARAM_NOTAGS);
|
||||
$ln = optional_param('u_ln', $ln, PARAM_NOTAGS);
|
||||
} else {
|
||||
$fn = isset($searcharray[DATA_FIRSTNAME]) ? $searcharray[DATA_FIRSTNAME]->data : '';
|
||||
$ln = isset($searcharray[DATA_LASTNAME]) ? $searcharray[DATA_LASTNAME]->data : '';
|
||||
}
|
||||
if (!empty($fn)) {
|
||||
$searcharray[DATA_FIRSTNAME] = new stdClass();
|
||||
$searcharray[DATA_FIRSTNAME]->sql = '';
|
||||
$searcharray[DATA_FIRSTNAME]->params = array();
|
||||
$searcharray[DATA_FIRSTNAME]->field = 'u.firstname';
|
||||
$searcharray[DATA_FIRSTNAME]->data = $fn;
|
||||
$vals[] = $fn;
|
||||
} else {
|
||||
unset($searcharray[DATA_FIRSTNAME]);
|
||||
}
|
||||
if (!empty($ln)) {
|
||||
$searcharray[DATA_LASTNAME] = new stdClass();
|
||||
$searcharray[DATA_LASTNAME]->sql = '';
|
||||
$searcharray[DATA_LASTNAME]->params = array();
|
||||
$searcharray[DATA_LASTNAME]->field = 'u.lastname';
|
||||
$searcharray[DATA_LASTNAME]->data = $ln;
|
||||
$vals[] = $ln;
|
||||
} else {
|
||||
unset($searcharray[DATA_LASTNAME]);
|
||||
}
|
||||
|
||||
// In case we want to switch to simple search later - there might be multiple values there ;-).
|
||||
if ($vals) {
|
||||
$val = reset($vals);
|
||||
if (is_string($val)) {
|
||||
$search = $val;
|
||||
}
|
||||
}
|
||||
return [$searcharray, $search];
|
||||
}
|
||||
|
@ -23,7 +23,7 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
require_once(__DIR__ . '/../../config.php');
|
||||
require_once($CFG->dirroot . '/mod/data/lib.php');
|
||||
require_once($CFG->dirroot . '/mod/data/locallib.php');
|
||||
require_once($CFG->libdir . '/rsslib.php');
|
||||
|
||||
/// One of these is necessary!
|
||||
@ -132,8 +132,6 @@
|
||||
|
||||
if (!empty($advanced)) {
|
||||
$search = '';
|
||||
$vals = array();
|
||||
$fields = $DB->get_records('data_fields', array('dataid'=>$data->id));
|
||||
|
||||
//Added to ammend paging error. This error would occur when attempting to go from one page of advanced
|
||||
//search results to another. All fields were reset in the page transfer, and there was no way of determining
|
||||
@ -155,71 +153,10 @@
|
||||
else {
|
||||
$paging = true;
|
||||
}
|
||||
if (!empty($fields)) {
|
||||
foreach($fields as $field) {
|
||||
$searchfield = data_get_field_from_id($field->id, $data);
|
||||
//Get field data to build search sql with. If paging is false, get from user.
|
||||
//If paging is true, get data from $search_array which is obtained from the $SESSION (see line 116).
|
||||
if(!$paging) {
|
||||
$val = $searchfield->parse_search_field();
|
||||
} else {
|
||||
//Set value from session if there is a value @ the required index.
|
||||
if (isset($search_array[$field->id])) {
|
||||
$val = $search_array[$field->id]->data;
|
||||
} else { //If there is not an entry @ the required index, set value to blank.
|
||||
$val = '';
|
||||
}
|
||||
}
|
||||
if (!empty($val)) {
|
||||
$search_array[$field->id] = new stdClass();
|
||||
list($search_array[$field->id]->sql, $search_array[$field->id]->params) = $searchfield->generate_sql('c'.$field->id, $val);
|
||||
$search_array[$field->id]->data = $val;
|
||||
$vals[] = $val;
|
||||
} else {
|
||||
// clear it out
|
||||
unset($search_array[$field->id]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$paging) {
|
||||
// name searching
|
||||
$fn = optional_param('u_fn', '', PARAM_NOTAGS);
|
||||
$ln = optional_param('u_ln', '', PARAM_NOTAGS);
|
||||
} else {
|
||||
$fn = isset($search_array[DATA_FIRSTNAME]) ? $search_array[DATA_FIRSTNAME]->data : '';
|
||||
$ln = isset($search_array[DATA_LASTNAME]) ? $search_array[DATA_LASTNAME]->data : '';
|
||||
}
|
||||
if (!empty($fn)) {
|
||||
$search_array[DATA_FIRSTNAME] = new stdClass();
|
||||
$search_array[DATA_FIRSTNAME]->sql = '';
|
||||
$search_array[DATA_FIRSTNAME]->params = array();
|
||||
$search_array[DATA_FIRSTNAME]->field = 'u.firstname';
|
||||
$search_array[DATA_FIRSTNAME]->data = $fn;
|
||||
$vals[] = $fn;
|
||||
} else {
|
||||
unset($search_array[DATA_FIRSTNAME]);
|
||||
}
|
||||
if (!empty($ln)) {
|
||||
$search_array[DATA_LASTNAME] = new stdClass();
|
||||
$search_array[DATA_LASTNAME]->sql = '';
|
||||
$search_array[DATA_LASTNAME]->params = array();
|
||||
$search_array[DATA_LASTNAME]->field = 'u.lastname';
|
||||
$search_array[DATA_LASTNAME]->data = $ln;
|
||||
$vals[] = $ln;
|
||||
} else {
|
||||
unset($search_array[DATA_LASTNAME]);
|
||||
}
|
||||
|
||||
$SESSION->dataprefs[$data->id]['search_array'] = $search_array; // Make it sticky
|
||||
|
||||
// in case we want to switch to simple search later - there might be multiple values there ;-)
|
||||
if ($vals) {
|
||||
$val = reset($vals);
|
||||
if (is_string($val)) {
|
||||
$search = $val;
|
||||
}
|
||||
}
|
||||
// Now build the advanced search array.
|
||||
list($search_array, $search) = data_build_search_array($data, $paging, $search_array);
|
||||
$SESSION->dataprefs[$data->id]['search_array'] = $search_array; // Make it sticky.
|
||||
|
||||
} else {
|
||||
$search = optional_param('search', $SESSION->dataprefs[$data->id]['search'], PARAM_NOTAGS);
|
||||
@ -232,9 +169,6 @@
|
||||
$search = '';
|
||||
}
|
||||
|
||||
if (core_text::strlen($search) < 2) {
|
||||
$search = '';
|
||||
}
|
||||
$SESSION->dataprefs[$data->id]['search'] = $search; // Make it sticky
|
||||
|
||||
$sort = optional_param('sort', $SESSION->dataprefs[$data->id]['sort'], PARAM_INT);
|
||||
|
Loading…
x
Reference in New Issue
Block a user