Newer
Older
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Course list block.
* Original: block_course_list
*
* @package block_hshcourselist
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com), Edited by Tobias Baden, Hochschule Hannover
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
class block_hshcourselist extends block_base {
private $globalconf;
public function init() {
$this->globalconf = get_config('block_hshcourselist');
$this->title = get_string('default_blocktitle', 'block_hshcourselist');
}
// Stop it showing up on any add block lists.
public function applicable_formats() {
return (array(
'all' => false,
'site' => true,
'my' => true,
'course-index' => true
));
}
public function has_config() {
return true;
}
public function get_content() {
$this->page->requires->js('/blocks/hshcourselist/javascript/jquery-3.2.0.min.js');
$this->page->requires->css('/blocks/hshcourselist/style.css');
if ($this->content !== null) {
return $this->content;
}
$this->content = new stdClass();
$contextblock = context_block::instance($this->instance->id);
$hshcoursesubmit = optional_param('hshcoursesubmit', false, PARAM_TEXT);
// Set placeholder.
if ($this->config->placeholder) {
$placeholder = $this->config->placeholder;
} else {
$placeholder = "";
}
$anchor = html_writer::tag('a', '', array('name' => 'hshcourselistanchor'));
$ordercheckbox = html_writer::empty_tag('input',
array('type' => 'checkbox', 'name' => 'orderbysemestercheckbox', 'id' => 'orderbysemestercheckbox_id'));
$ordercheckbox .= html_writer::start_tag('label', array('for' => 'orderbysemestercheckbox_id'));
$ordercheckbox .= get_string('orderbysemester', 'block_hshcourselist');
$ordercheckbox .= html_writer::end_tag('label');
$idsearchinglabel = html_writer::empty_tag('p', array('class' => 'idSarchingLabel'));
$idsearchinglabel .= get_string('idsearchinglabel', 'block_hshcourselist');
$idsearchinglabel .= html_writer::end_tag('p');
$inputattrs = array(
'autocomplete' => 'off',
'name' => 'hshcourselistsearch',
'id' => 'hshcourselistsearch',
'class' => 'form-control',
'value' => $search,
'placeholder' => $placeholder
'class' => 'icon fa fa-question-circle text-info fa-fw',
'title' => 'Hilfe für HsH Kurssuche',
'aria-label' => 'Hilfe für HsH Kurssuche',
'aria-hidden' => 'true'
);
$atagparams = array(
'class' => 'btn btn-link p-0',
'role' => 'button',
'data-container' => 'body',
'data-toggle' => 'popover',
'data-placement' => 'right',
'data-content' => "<div class='no-overflow'><p>Die Kurssuche ist eine Volltextsuche in der Sie auch mehrere
Suchbegriffe (mit Leerzeichen getrennt) eingeben können.<br/>
Verschiedene Suchbegriffe werden einzeln in den Kursnamen gesucht und dann eine vollständige
Liste angezeigt.<br/>
Bsp: WiSe Programmieren => zeigt Ihnen alle Kurse, dessen Kursname oder Kurskurzname 'WiSe'
<i>UND</i> 'Programmieren' enthalten.</p>
<p>Kurzsuche: Möchten Sie einen Kurs schnell über die <i>'id'</i> finden, so können Sie dies
durch das Voranstellen einer Raute <i>'#'</i> erreichen.<br/>
Bsp: <i>#3303</i> zeigt Ihnen den Kurs <i>'Moodle Demo-Kurs, ELC'</i></p>",
'data-html' => 'true',
'tabindex' => '0',
'data-trigger' => 'focus',
'data-original-title' => '',
'title' => ''
$questionhsh = html_writer::start_span("helpbutton");
$questionhsh .= html_writer::start_tag('a', $atagparams);
$questionhsh .= html_writer::start_tag('i', $questionattrs);
$questionhsh .= html_writer::end_tag('i');
$questionhsh .= html_writer::end_tag('a');
'src' => $OUTPUT->image_url('i/loading_small', 'moodle'),
'class' => 'hshcourseprogress',
'id' => 'hshcourseprogress',
'alt' => get_string('loading', 'block_hshcourselist')
);
$progress = html_writer::empty_tag('img', $progressattrs);
$formattrs = array(
'id' => 'hshcourseform',
'method' => 'post',
'name' => 'hshcourselistform',
'action' => new moodle_url('/')
);
$form = html_writer::tag('form', $idsearchinglabel.$ordercheckbox.$input.$questionhsh.$progress, $formattrs);
$courses = self::get_courses($search, $contextblock, $this->globalconf->splitterms,
$this->globalconf->restrictcontext, $this->page->context,
$this->globalconf->idsearching, $this->config->orderbysemester);
if (!empty($courses)) {
foreach ($courses as $course) {
$url = new moodle_url('/course/view.php', array('id' => $course->id));
$resultstr = null;
if (!empty($this->config->displaymode)) {
$displaymode = $this->config->displaymode;
} else {
$displaymode = 2;
}
switch ($displaymode):
case 1: $resultstr = $course->shortname;
break;
case 2: $resultstr = $course->fullname;
break;
default: $resultstr = $course->shortname.': '.$course->fullname;
break;
endswitch;
$link = html_writer::tag('a', $resultstr, array('href' => $url->out()));
$li = html_writer::tag('li', $link);
if (!isset($this->config->orderbysemester)) {
$orderbysemester = false;
} else {
$orderbysemester = $this->config->orderbysemester;
}
$displaymode = 2;
} else {
$displaymode = $this->config->displaymode;
}
$list = html_writer::tag('ul', $listcontents, array('id' => 'hshcourselistul'));
$this->content->text = $anchor.$form.$list;
$jsdata = array(
'instanceid' => $this->instance->id,
'sesskey' => sesskey(),
'displaymode' => $displaymode,
'orderbysemester' => $orderbysemester,
$this->page->requires->js_call_amd('block_hshcourselist/jmodule', 'init', array($jsdata, $CFG->wwwroot));
if (!empty($this->config->footer) && $this->config->enablefooter) {
$this->content->footer = $this->config->footer;
}
if (!empty($this->config->title) && $this->config->enablecustomheader) {
$this->title = $this->config->title;
}
$this->page->requires->js_call_amd('block_hshcourselist/listselect', 'init', array($CFG->wwwroot));
public static function get_courses($search, $blockcontext, $splitterms = false,
$restrictcontext = false, $pagecontext = null, $idsearch, $orderbysemester) {
$keywordarray = explode(" ", $search);
$paramscount = count($keywordarray);
$duplicatedkeywordarray = array();
for ($x = 0; $x <= $paramscount - 1; $x++) {
$actuallength = count($duplicatedkeywordarray);
$duplicatedkeywordarray[$actuallength] = "%".$keywordarray[$x]."%";
$duplicatedkeywordarray[$actuallength + 1] = "%".$keywordarray[$x]."%";
$where = 'id != ? AND (';
if ($splitterms) {
$terms = explode(' ', $search);
$like = '%1$s LIKE';
foreach ($terms as $key => $term) {
$like .= ' ?';
$like .= ' AND %1$s LIKE';
}
$terms[$key] = '%'.$term.'%';
}
$params = array_merge($params, $terms, $terms);
$where .= sprintf($like, 'shortname').' OR '.sprintf($like, 'fullname');
} else {
$params = array_merge($params, array($search));
$where .= 'id = ?';
} else {
$params = array_merge($params, $duplicatedkeywordarray);
for ($i = 1; $i <= $paramscount - 1; $i++) {
$where .= ' AND (fullname ILIKE ? OR shortname ILIKE ?)';
}
}
$where .= ')';
if (!has_capability('moodle/course:viewhiddencourses', $blockcontext)) {
$where .= ' AND visible=1';
}
if ($restrictcontext) {
if ($pagecontext && $pagecontext->get_level_name() == get_string('category')) {
$where .= ' AND category = ?';
$params[] = $pagecontext->instanceid;
}
}
}
$fields = 'id, idnumber, shortname, fullname';
$courses = $DB->get_recordset_select('course', $where, $params, $order, $fields);