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 '';
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();
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) {
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) {
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;
}
- 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 '';
'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?
'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) {
return $str;
}
- function display_search_field($value = '') {
+ function display_search_field($value = '') {
global $CFG, $DB;
$varcharcontent = $DB->sql_compare_text('content', 255);
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) {
'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) {
'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) {
' 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) {
$searcharray = array();
}
+ if (core_text::strlen($search) < 2) {
+ $search = '';
+ }
+
$approvecap = has_capability('mod/data:approve', $context);
$canmanageentries = has_capability('mod/data:manageentries', $context);
}
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];
+}
///////////////////////////////////////////////////////////////////////////
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!
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
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);
$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);