moodle/mod/glossary/view.php

360 lines
14 KiB
PHP
Raw Normal View History

<?php // $Id$
/// This page prints a particular instance of glossary
require_once("../../config.php");
require_once("lib.php");
require_variable($id); // Course Module ID
optional_variable($l,""); // letter to look for
optional_variable($eid); // Entry ID
optional_variable($search, ""); // search string
optional_variable($includedefinition); // include definition in search function?
optional_variable($currentview,""); // browsing entries by categories?
optional_variable($cat); // categoryID
optional_variable($sortkey,""); // Sorted view: CREATION or UPDATE
optional_variable($sortorder,""); // it define the order of the sorting (ASC or DESC)
if (! $cm = get_record("course_modules", "id", $id)) {
error("Course Module ID was incorrect");
}
if (! $course = get_record("course", "id", $cm->course)) {
error("Course is misconfigured");
}
if (! $glossary = get_record("glossary", "id", $cm->instance)) {
error("Course module is incorrect");
}
require_login($course->id);
if (!$cm->visible and !isteacher($course->id)) {
notice(get_string("activityiscurrentlyhidden"));
}
add_to_log($course->id, "glossary", "view", "view.php?id=$cm->id", "$glossary->id");
if ( $sortorder ) {
$sortorder = strtolower($sortorder);
if ($sortorder != "asc" and $sortorder != "desc") {
$sortorder = "";
}
}
if ( $sortorder ) {
$l = "";
$search ="";
}
$search = trim(strip_tags($search));
if ($search and !$entryid) {
$l = "";
$searchterms = explode(" ", $search); // Search for words independently
foreach ($searchterms as $key => $searchterm) {
if (strlen($searchterm) < 2) {
unset($searchterms[$key]);
}
}
$search = trim(implode(" ", $searchterms));
$currentview = "";
} elseif ($eid) {
$search = "";
}
$alphabet = explode("|", get_string("alphabet","glossary"));
if ($l == "" and $search == "" and $sortkey == "" and ($eid == "" or $eid == 0)) {
$l = $alphabet[0];
} elseif ($eid) {
$l = "";
}
if ($currentview) {
$l = "";
$currentview = strtolower($currentview);
if ($currentview) {
if ($cat > 0) {
$category = get_record("glossary_categories", "id", $cat);
if (!$category) {
$cat = "";
}
}
}
}
/// Printing the page header
if ($course->category) {
$navigation = "<a href=\"../../course/view.php?id=$course->id\">$course->shortname</a> ->";
}
$strglossaries = get_string("modulenameplural", "glossary");
$strglossary = get_string("modulename", "glossary");
$strallcategories = get_string("allcategories", "glossary");
$straddentry = get_string("addentry", "glossary");
$strnoentries = get_string("noentries", "glossary");
$strsearchconcept = get_string("searchconcept", "glossary");
$strsearchindefinition = get_string("searchindefinition", "glossary");
$strsearch = get_string("search");
print_header(strip_tags("$course->shortname: $glossary->name"), "$course->fullname",
"$navigation <A HREF=index.php?id=$course->id>$strglossaries</A> -> $glossary->name",
"", "", true, update_module_button($cm->id, $course->id, $strglossary),
navmenu($course, $cm));
print_heading($glossary->name);
/// Info box
if ( $glossary->intro ) {
print_simple_box_start("center","70%");
echo '<p align="center">';
echo $glossary->intro;
echo '</p>';
print_simple_box_end();
}
/// Add button
if (isteacher($course->id) or ($glossary->studentcanpost) and !isguest($course->id)) {
$options = array ("id" => "$cm->id");
echo '<center><p>';
print_single_button("edit.php", $options, $straddentry);
echo '</p></center>';
}
/// Search box
print_simple_box_start("center", "", $THEME->cellheading);
echo '<p>';
echo '<form method="POST" action="view.php">';
echo '<input type="submit" value="'.$strsearch.'" name="searchbutton"> ';
echo '<input type="text" name="search" size="20" value=""> ';
echo '<input type="checkbox" name="includedefinition" value="1">';
echo $strsearchindefinition;
echo '<input type="hidden" name="id" value="'.$cm->id.'">';
echo '</form>';
echo '</p>';
print_simple_box_end();
/// Tabbed browsing sections
echo '<p align="center">';
$data[0]->link = "view.php?id=$id";
$data[0]->caption = get_string("standardview", "glossary");
$data[1]->link = "view.php?id=$id&currentview=categories";
$data[1]->caption = get_string("categoryview", "glossary");
if ($currentview) {
$currenttab = GLOSSARY_CATEGORY_VIEW; //1;
} else {
$currenttab = GLOSSARY_STANDARD_VIEW; //0;
}
$glossary_tCFG->TabTableBGColor = $THEME->cellheading;
$glossary_tCFG->ActiveTabColor = $THEME->cellheading;
$glossary_tCFG->InactiveTabColor = $THEME->cellcontent2;
$glossary_tCFG->InactiveFontColor= $THEME->hidden;
$glossary_tCFG->TabTableWidth = "70%";
$glossary_tCFG->TabsPerRow = 5;
$glossary_tCFG->TabSeparation = 4;
glossary_print_tabbed_table_start($data, $currenttab, $glossary_tCFG);
echo "<center>";
if ($currentview) {
glossary_print_categories_menu($course, $cm, $glossary, $cat, $category);
$currentcategory = "";
} else {
glossary_print_alphabet_menu($cm, $glossary, $l, $sortkey, $sortorder);
if ($l or $sortkey) {
$currentletter = "";
} elseif ($search) {
echo "<h3>$strsearch: $search</h3>";
}
echo "<hr>";
}
/// Printing the entries
if ($search) { // looking for a term
$allentries = glossary_search_entries($searchterms, $glossary, $includedefinition);
} elseif ($eid) { // looking for an entry
$allentries = get_records("glossary_entries", "id", $eid);
} elseif ($currentview and $cat == GLOSSARY_SHOW_ALL_CATEGORIES) { // Browsing all categories
$sql = "SELECT gec.id gecid, gc.name, gc.id CID, ge.*
FROM {$CFG->prefix}glossary_entries ge,
{$CFG->prefix}glossary_entries_categories gec,
{$CFG->prefix}glossary_categories gc
WHERE (ge.glossaryid = '$glossary->id' or ge.sourceglossaryid = '$glossary->id') AND
gec.entryid = ge.id AND
gc.id = gec.categoryid ";
if ( $glossary->displayformat == GLOSSARY_FORMAT_CONTINUOUS ) {
$sql .= "ORDER BY gc.name, ge.timecreated";
} else {
$sql .= "ORDER BY gc.name, ge.concept";
}
$allentries = get_records_sql($sql);
} else { // looking for terms that begin with a specify letter or entries with no category associated
if ( $sortkey == "CREATION" or $sortkey == "UPDATE" or $glossary->displayformat == GLOSSARY_FORMAT_CONTINUOUS) {
if ( !$sortkey and $glossary->displayformat == GLOSSARY_FORMAT_CONTINUOUS) {
$sortkey = "CREATION";
$sortorder = "asc";
}
if ( !$sortorder ) {
$sortorder = "asc";
}
if ($sortkey == "CREATION") {
$orderby = "timecreated $sortorder";
} else {
$orderby = "timemodified $sortorder";
}
} else {
$orderby = "concept ASC";
}
$ownentries = get_records("glossary_entries", "glossaryid", $glossary->id, $orderby);
$importedentries = get_records("glossary_entries", "sourceglossaryid", $glossary->id, $orderby);
if ($ownentries and $importedentries) {
$allentries = array_merge($ownentries, $importedentries);
usort($allentries, glossary_sort_entries);
} elseif ($importedentries) {
$allentries = $importedentries;
} elseif ($ownentries) {
$allentries = $ownentries;
}
}
if ($allentries) {
if ($glossary->displayformat == GLOSSARY_FORMAT_CONTINUOUS) {
echo "<table border=0 cellspacing=0 width=95% valign=top cellpadding=5><tr><td align=left bgcolor=\"#FFFFFF\">";
}
$dumpeddefinitions = 0;
foreach ($allentries as $entry) {
$dumptoscreen = 0;
$firstletter = strtoupper(substr(ltrim($entry->concept), 0, strlen($l)));
if ($l) {
if ($l == "ALL" or $sortkey == "CREATION" or $sortkey == "UPDATE" or $firstletter == $l) {
if ($currentletter != $firstletter[0]) {
$currentletter = $firstletter[0];
if ($glossary->displayformat == GLOSSARY_FORMAT_SIMPLE) {
if ($dumpeddefinitions > 0) {
echo "</table></center><p>";
}
echo "\n<center><table border=0 cellspacing=0 width=95% valign=top cellpadding=5><tr><td align=center bgcolor=\"$THEME->cellheading2\">";
}
if ($l == "ALL" and $glossary->displayformat != GLOSSARY_FORMAT_CONTINUOUS) {
echo "<b>$currentletter</b>";
}
if ($glossary->displayformat == GLOSSARY_FORMAT_SIMPLE) {
echo "\n</center></td></tr></table></center>";
if ($dumpeddefinitions > 0) {
echo "\n<center><table border=0 cellspacing=0 width=95% valign=top cellpadding=5>";
}
}
}
$dumptoscreen = 1;
} elseif ($l == "SPECIAL" and ord($firstletter) != ord("<EFBFBD>") and
(ord($firstletter) < ord("A") or ord($firstletter) > ord("Z"))) {
$dumptoscreen = 1;
}
} else {
if ($currentview) {
if ($category) { // if we are browsing a category
if (record_exists("glossary_entries_categories", "entryid", $entry->id, "categoryid", $category->id)) {
$dumptoscreen = 1;
}
} else {
if ($cat == GLOSSARY_SHOW_NOT_CATEGORISED) { // Not categorized
if (! record_exists("glossary_entries_categories", "entryid", $entry->id)) {
$dumptoscreen = 1;
}
} else { // All categories
if ($currentcategory != $entry->CID) {
$currentcategory = $entry->CID;
if ($glossary->displayformat == GLOSSARY_FORMAT_SIMPLE) {
if ($dumpeddefinitions > 0) {
echo "</table></center><p>";
}
echo "\n<center><table border=0 cellspacing=0 width=95% valign=top cellpadding=10><tr><td align=center bgcolor=\"$THEME->cellheading2\">";
}
if ( $glossary->displayformat == GLOSSARY_FORMAT_CONTINUOUS ) {
echo "<center>";
}
echo "<b>$entry->name</b>";
if ( $glossary->displayformat == GLOSSARY_FORMAT_CONTINUOUS ) {
echo "</center><p>";
}
}
if ($glossary->displayformat == GLOSSARY_FORMAT_SIMPLE) {
echo "\n</center></td></tr></table></center>";
if ($dumpeddefinitions > 0) {
echo "\n<center><table border=1 cellspacing=0 width=95% valign=top cellpadding=10>";
}
}
$dumptoscreen = 1;
}
}
} else {
$dumptoscreen = 1;
}
}
if ($dumptoscreen) {
$dumpeddefinitions++;
$concept = $entry->concept;
$definition = $entry->definition;
if ($dumpeddefinitions == 1) {
if ($glossary->displayformat == GLOSSARY_FORMAT_SIMPLE) {
echo "\n<center><table border=1 cellspacing=0 width=95% valign=top cellpadding=10>";
}
}
if ($search) {
$entry->concept = highlight($search, $concept);
$entry->definition = highlight($search, $definition);
}
glossary_print_entry($course, $cm, $glossary, $entry, $currentview, $cat);
if ($glossary->displayformat != GLOSSARY_FORMAT_SIMPLE) {
echo "<p>";
}
}
}
}
if (! $dumpeddefinitions) {
print_simple_box_start("center", "70%", "$THEME->cellheading2");
if (!$search) {
echo "<center>$strnoentries</center>";
} else {
echo "<center>";
print_string("searchhelp");
echo "</center>";
}
print_simple_box_end();
} else {
if ($glossary->displayformat == GLOSSARY_FORMAT_CONTINUOUS) {
echo "</td></tr></table>";
}
if ($glossary->displayformat == GLOSSARY_FORMAT_SIMPLE) {
echo "\n</table></center>";
}
}
echo "</center>";
glossary_print_tabbed_table_end();
/// Finish the page
print_footer($course);
?>