mirror of
https://github.com/moodle/moodle.git
synced 2025-01-19 06:18:28 +01:00
194 lines
6.5 KiB
PHP
194 lines
6.5 KiB
PHP
<?php
|
|
|
|
define('BGR_RANDOMLY', '0');
|
|
define('BGR_LASTMODIFIED', '1');
|
|
define('BGR_NEXTONE', '2');
|
|
|
|
class block_glossary_random extends block_base {
|
|
function init() {
|
|
|
|
$this->title = get_string('pluginname','block_glossary_random');
|
|
$this->version = 2007101509;
|
|
|
|
}
|
|
|
|
function specialization() {
|
|
global $CFG, $DB;
|
|
$this->course = $this->page->course;
|
|
|
|
// load userdefined title and make sure it's never empty
|
|
if (empty($this->config->title)) {
|
|
$this->title = get_string('pluginname','block_glossary_random');
|
|
} else {
|
|
$this->title = $this->config->title;
|
|
}
|
|
|
|
if (empty($this->config->glossary)) {
|
|
return false;
|
|
}
|
|
|
|
if (!isset($this->config->nexttime)) {
|
|
$this->config->nexttime = 0;
|
|
}
|
|
|
|
//check if it's time to put a new entry in cache
|
|
if (time() > $this->config->nexttime) {
|
|
|
|
// place glossary concept and definition in $pref->cache
|
|
if (!$numberofentries = $DB->count_records('glossary_entries',
|
|
array('glossaryid'=>$this->config->glossary, 'approved'=>1))) {
|
|
$this->config->cache = get_string('noentriesyet','block_glossary_random');
|
|
$this->instance_config_commit();
|
|
}
|
|
|
|
$limitfrom = 0;
|
|
$limitnum = 1;
|
|
|
|
switch ($this->config->type) {
|
|
|
|
case BGR_RANDOMLY:
|
|
$i = rand(1,$numberofentries);
|
|
$limitfrom = $i-1;
|
|
$SORT = 'ASC';
|
|
break;
|
|
|
|
case BGR_NEXTONE:
|
|
if (isset($this->config->previous)) {
|
|
$i = $this->config->previous + 1;
|
|
} else {
|
|
$i = 1;
|
|
}
|
|
if ($i > $numberofentries) { // Loop back to beginning
|
|
$i = 1;
|
|
}
|
|
$limitfrom = $i-1;
|
|
$SORT = 'ASC';
|
|
break;
|
|
|
|
default: // BGR_LASTMODIFIED
|
|
$i = $numberofentries;
|
|
$limitfrom = 0;
|
|
$SORT = 'DESC';
|
|
break;
|
|
}
|
|
|
|
if ($entry = $DB->get_records_sql("SELECT concept, definition, definitionformat, definitiontrust
|
|
FROM {glossary_entries}
|
|
WHERE glossaryid = ? AND approved = 1
|
|
ORDER BY timemodified $SORT", array($this->config->glossary), $limitfrom, $limitnum)) {
|
|
|
|
$entry = reset($entry);
|
|
|
|
if (empty($this->config->showconcept)) {
|
|
$text = '';
|
|
} else {
|
|
$text = "<h3>".format_string($entry->concept,true)."</h3>";
|
|
}
|
|
|
|
$options = new object;
|
|
$options->trusted = $entry->definitiontrust;
|
|
$text .= format_text($entry->definition, $entry->definitionformat, $options);
|
|
|
|
$this->config->nexttime = usergetmidnight(time()) + DAYSECS * $this->config->refresh;
|
|
$this->config->previous = $i;
|
|
|
|
} else {
|
|
$text = get_string('noentriesyet','block_glossary_random');
|
|
}
|
|
// store the text
|
|
$this->config->cache = $text;
|
|
$this->instance_config_commit();
|
|
}
|
|
}
|
|
|
|
function instance_allow_multiple() {
|
|
// Are you going to allow multiple instances of each block?
|
|
// If yes, then it is assumed that the block WILL USE per-instance configuration
|
|
return true;
|
|
}
|
|
|
|
function get_content() {
|
|
global $USER, $CFG, $DB;
|
|
|
|
if (empty($this->config->glossary)) {
|
|
$this->content->text = get_string('notyetconfigured','block_glossary_random');
|
|
$this->content->footer = '';
|
|
return $this->content;
|
|
}
|
|
|
|
$glossaryid = $this->config->glossary;
|
|
|
|
$course = $this->page->course;
|
|
|
|
require_once($CFG->dirroot.'/course/lib.php');
|
|
$modinfo = get_fast_modinfo($course);
|
|
|
|
if (!isset($modinfo->instances['glossary'][$glossaryid])) {
|
|
// we can get here if the glossary has been deleted, so
|
|
// unconfigure the glossary from the block..
|
|
$this->config->glossary = 0;
|
|
$this->config->cache = '';
|
|
$this->instance_config_commit();
|
|
|
|
$this->content->text = get_string('notyetconfigured','block_glossary_random');
|
|
$this->content->footer = '';
|
|
return $this->content;
|
|
}
|
|
|
|
$cm = $modinfo->instances['glossary'][$glossaryid];
|
|
|
|
if (empty($this->config->cache)) {
|
|
$this->config->cache = '';
|
|
}
|
|
|
|
if ($this->content !== NULL) {
|
|
return $this->content;
|
|
}
|
|
|
|
$this->content = new stdClass;
|
|
$this->content->text = $this->config->cache;
|
|
|
|
// place link to glossary in the footer if the glossary is visible
|
|
|
|
//Obtain the visible property from the instance
|
|
if ($cm->uservisible) {
|
|
if (has_capability('mod/glossary:write', get_context_instance(CONTEXT_MODULE, $cm->id))) {
|
|
$this->content->footer = '<a href="'.$CFG->wwwroot.'/mod/glossary/edit.php?id='.$cm->id
|
|
.'" title="'.$this->config->addentry.'">'.$this->config->addentry.'</a><br />';
|
|
} else {
|
|
$this->content->footer = '';
|
|
}
|
|
|
|
$this->content->footer .= '<a href="'.$CFG->wwwroot.'/mod/glossary/view.php?id='.$cm->id
|
|
.'" title="'.$this->config->viewglossary.'">'.$this->config->viewglossary.'</a>';
|
|
|
|
// otherwise just place some text, no link
|
|
} else {
|
|
$this->content->footer = $this->config->invisible;
|
|
}
|
|
|
|
return $this->content;
|
|
}
|
|
|
|
function hide_header() {
|
|
if (empty($this->config->title)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Executed after block instance has been created, we use it to recode
|
|
* the glossary config setting to point to the new (restored) one
|
|
*/
|
|
function after_restore($restore) {
|
|
/// We need to transform the glossary->id from the original one to the restored one
|
|
if ($rec = backup_getid($restore->backup_unique_code, 'glossary', $this->config->glossary)) {
|
|
$this->config->glossary = $rec->new_id;
|
|
$this->instance_config_commit();
|
|
}
|
|
}
|
|
|
|
}
|
|
|