Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

1505 lines (1276 sloc) 56.505 kB
<?PHP // $Id$
/// Library of functions and constants for module glossary
/// (replace glossary with the name of your module and delete this line)
require_once("$CFG->dirroot/files/mimetypes.php");
define("GLOSSARY_SHOW_ALL_CATEGORIES", 0);
define("GLOSSARY_SHOW_NOT_CATEGORISED", -1);
define("GLOSSARY_NO_VIEW", -1);
define("GLOSSARY_STANDARD_VIEW", 0);
define("GLOSSARY_CATEGORY_VIEW", 1);
define("GLOSSARY_DATE_VIEW", 2);
define("GLOSSARY_AUTHOR_VIEW", 3);
define("GLOSSARY_ADDENTRY_VIEW", 4);
define("GLOSSARY_IMPORT_VIEW", 5);
define("GLOSSARY_EXPORT_VIEW", 6);
define("GLOSSARY_APPROVAL_VIEW", 7);
define("GLOSSARY_FORMAT_SIMPLE", 0);
define("GLOSSARY_FORMAT_CONTINUOUS", 1);
function glossary_add_instance($glossary) {
/// Given an object containing all the necessary data,
/// (defined by the form in mod.html) this function
/// will create a new instance and return the id number
/// of the new instance.
if ( !isset($glossary->globalglossary) ) {
$glossary->globalglossary = 0;
} elseif ( !isadmin() ) {
$glossary->globalglossary = 0;
}
$glossary->timecreated = time();
$glossary->timemodified = $glossary->timecreated;
# May have to add extra stuff in here #
return insert_record("glossary", $glossary);
}
function glossary_update_instance($glossary) {
/// Given an object containing all the necessary data,
/// (defined by the form in mod.html) this function
/// will update an existing instance with new data.
global $CFG;
if ( !isadmin() ) {
unset($glossary->globalglossary);
}
$glossary->timemodified = time();
$glossary->id = $glossary->instance;
$return = update_record("glossary", $glossary);
if ($return and $glossary->defaultapproval) {
execute_sql("update {$CFG->prefix}glossary_entries SET approved = 1 where approved != 1 and glossaryid = " . $glossary->id,false);
}
return $return;
}
function glossary_delete_instance($id) {
/// Given an ID of an instance of this module,
/// this function will permanently delete the instance
/// and any data that depends on it.
if (! $glossary = get_record("glossary", "id", "$id")) {
return false;
}
$result = true;
# Delete any dependent records here #
if (! delete_records("glossary", "id", "$glossary->id")) {
$result = false;
} else {
if ($categories = get_records("glossary_categories","glossaryid",$glossary->id)) {
$cats = "";
foreach ( $categories as $hook ) {
$cats .= "$cat->id,";
}
$cats = substr($cats,0,-1);
if ($cats) {
delete_records_select("glossary_entries_categories", "categoryid in ($cats)");
delete_records("glossary_categories", "glossaryid", $glossary->id);
}
}
if ( $entries = get_records("glossary_entries", "glossaryid", $glossary->id) ) {
$ents = "";
foreach ( $entries as $entry ) {
$ents .= "$entry->id,";
}
$ents = substr($ents,0,-1);
if ($ents) {
delete_records_select("glossary_comments", "entryid in ($ents)");
delete_records_select("glossary_alias", "entryid in ($ents)");
}
}
delete_records("glossary_entries", "glossaryid", "$glossary->id");
}
return $result;
}
function glossary_user_outline($course, $user, $mod, $glossary) {
/// Return a small object with summary information about what a
/// user has done with a given particular instance of this module
/// Used for user activity reports.
/// $return->time = the time they did it
/// $return->info = a short text description
if ($entries = glossary_get_user_entries($glossary->id, $user->id)) {
$result->info = count($entries) . ' ' . get_string("entries", "glossary");
$lastpost = array_pop($entries);
$result->time = $lastpost->timemodified;
return $result;
}
return NULL;
}
function glossary_get_user_entries($glossaryid, $userid) {
/// Get all the entries for a user in a glossary
global $CFG;
return get_records_sql("SELECT e.*, u.firstname, u.lastname, u.email, u.picture
FROM {$CFG->prefix}glossary g,
{$CFG->prefix}glossary_entries e,
{$CFG->prefix}user u
WHERE g.id = '$glossaryid'
AND e.glossaryid = g.id
AND e.userid = '$userid'
AND e.userid = u.id
ORDER BY e.timemodified ASC");
}
function glossary_user_complete($course, $user, $mod, $glossary) {
/// Print a detailed representation of what a user has done with
/// a given particular instance of this module, for user activity reports.
global $CFG;
if ($entries = glossary_get_user_entries($glossary->id, $user->id)) {
if ( $glossary->displayformat == GLOSSARY_FORMAT_SIMPLE or
$glossary->displayformat == GLOSSARY_FORMAT_CONTINUOUS ) {
print_simple_box_start("center","70%");
} else {
echo '<table width="95%" boder="0"><tr><td>';
}
foreach ($entries as $entry) {
$cm = get_coursemodule_from_instance("glossary", $glossary->id, $course->id);
glossary_print_entry($course, $cm, $glossary, $entry,"","",0);
echo '<p>';
}
if ( $glossary->displayformat == GLOSSARY_FORMAT_SIMPLE or
$glossary->displayformat == GLOSSARY_FORMAT_CONTINUOUS ) {
print_simple_box_end();
} else {
echo '</td></tr></table>';
}
}
}
function glossary_print_recent_activity($course, $isteacher, $timestart) {
/// Given a course and a time, this module should find recent activity
/// that has occurred in glossary activities and print it out.
/// Return true if there was output, or false is there was none.
global $CFG, $THEME;
if (!$logs = get_records_select("log", "time > '$timestart' AND ".
"course = '$course->id' AND ".
"module = 'glossary' AND ".
"(action = 'add entry' OR ".
" action = 'approve entry')", "time ASC")) {
return false;
}
foreach ($logs as $log) {
//Create a temp valid module structure (course,id)
$tempmod->course = $log->course;
$entry = get_record("glossary_entries","id",$log->info);
$tempmod->id = $entry->glossaryid;
//Obtain the visible property from the instance
$modvisible = instance_is_visible($log->module,$tempmod);
//Only if the mod is visible
if ($modvisible and $entry->approved) {
$entries[$log->info] = glossary_log_info($log);
$entries[$log->info]->time = $log->time;
$entries[$log->info]->url = $log->url;
}
}
$content = false;
if ($entries) {
$strftimerecent = get_string("strftimerecent");
$content = true;
print_headline(get_string("newentries", "glossary").":");
foreach ($entries as $entry) {
$date = userdate($entry->timemodified, $strftimerecent);
echo "<p><font size=1>$date - $entry->firstname $entry->lastname<br>";
echo "\"<a href=\"$CFG->wwwroot/mod/glossary/$entry->url\">";
echo "$entry->concept";
echo "</a>\"</font></p>";
}
}
return $content;
}
function glossary_log_info($log) {
global $CFG;
return get_record_sql("SELECT e.*, u.firstname, u.lastname
FROM {$CFG->prefix}glossary_entries e,
{$CFG->prefix}user u
WHERE e.id = '$log->info'
AND u.id = '$log->userid'");
}
function glossary_cron () {
/// Function to be run periodically according to the moodle cron
/// This function searches for things that need to be done, such
/// as sending out mail, toggling flags etc ...
global $CFG;
return true;
}
function glossary_grades($glossaryid) {
/// Must return an array of grades for a given instance of this module,
/// indexed by user. It also returns a maximum allowed grade.
$return->grades = NULL;
$return->maxgrade = NULL;
return $return;
}
function glossary_get_participants($glossaryid) {
//Returns the users with data in one glossary
//(users with records in glossary_entries, students)
global $CFG;
//Get students
$students = get_records_sql("SELECT DISTINCT u.*
FROM {$CFG->prefix}user u,
{$CFG->prefix}glossary_entries g
WHERE g.glossaryid = '$glossaryid' and
u.id = g.userid");
//Return students array (it contains an array of unique users)
return ($students);
}
//////////////////////////////////////////////////////////////////////////////////////
/// Any other glossary functions go here. Each of them must have a name that
/// starts with glossary_
function glossary_debug($debug,$text,$br=1) {
if ( $debug ) {
echo '<font color=red>' . $text . '</font>';
if ( $br ) {
echo '<br>';
}
}
}
function glossary_get_entries($glossaryid, $entrylist, $pivot = "") {
global $CFG;
if ($pivot) {
$pivot .= ",";
}
return get_records_sql("SELECT $pivot id,userid,concept,definition,format
FROM {$CFG->prefix}glossary_entries
WHERE glossaryid = '$glossaryid'
AND id IN ($entrylist)");
}
function glossary_get_entries_sorted($glossary, $where="", $orderby="", $pivot = "") {
global $CFG;
if ($where) {
$where = " and $where";
}
if ($orderby) {
$orderby = " ORDER BY $orderby";
}
if ($pivot) {
$pivot .= ",";
}
return get_records_sql("SELECT $pivot *
FROM {$CFG->prefix}glossary_entries
WHERE (glossaryid = $glossary->id or sourceglossaryid = $glossary->id) $where $orderby");
}
function glossary_get_entries_by_category($glossary, $hook, $where="", $orderby="", $pivot = "") {
global $CFG;
if ($where) {
$where = " and $where";
}
if ($orderby) {
$orderby = " ORDER BY $orderby";
}
if ($pivot) {
$pivot .= ",";
}
return get_records_sql("SELECT $pivot ge.*
FROM {$CFG->prefix}glossary_entries ge, {$CFG->prefix}glossary_entries_categories c
WHERE (ge.id = c.entryid and c.categoryid = $hook) and
(ge.glossaryid = $glossary->id or ge.sourceglossaryid = $glossary->id) $where $orderby");
}
function glossary_print_entry($course, $cm, $glossary, $entry, $mode="",$hook="",$printicons = 1, $displayformat = -1) {
global $THEME, $USER, $CFG;
if ( $displayformat < 0 ) {
$displayformat = $glossary->displayformat;
}
if ($entry->approved or ($USER->id == $entry->userid and !isteacher($course->id)) or $mode == 'approval') {
$permissiongranted = 0;
$formatfile = "$CFG->dirroot/mod/glossary/formats/$displayformat.php";
$functionname = "glossary_print_entry_by_format";
$basicformat = ($displayformat == GLOSSARY_FORMAT_SIMPLE or
$displayformat == GLOSSARY_FORMAT_CONTINUOUS);
if ( !$basicformat ) {
if ( file_exists($formatfile) ) {
include_once($formatfile);
if (function_exists($functionname) ) {
$permissiongranted = 1;
}
}
} else {
$permissiongranted = 1;
}
if ( !$basicformat and $permissiongranted or $displayformat >= 2) {
glossary_print_entry_by_format($course, $cm, $glossary, $entry,$mode,$hook,$printicons);
} else {
switch ( $displayformat ) {
case GLOSSARY_FORMAT_SIMPLE:
glossary_print_entry_by_default($course, $cm, $glossary, $entry,$mode,$hook,$printicons);
break;
case GLOSSARY_FORMAT_CONTINUOUS:
glossary_print_entry_continuous($course, $cm, $glossary, $entry,$mode,$hook,$printicons);
break;
}
}
}
}
function glossary_print_entry_concept($entry) {
echo $entry->concept;
}
function glossary_print_entry_definition($entry) {
$definition = $entry->definition;
//getting ride of A tags
$links = array();
preg_match_all('/<img (.+?)>/is',$definition,$list_of_links);
foreach (array_unique($list_of_links[0]) as $key=>$value) {
$links['<@'.$key.'@>'] = $value;
}
if ( $links ) {
$definition = str_replace($links,array_keys($links),$definition);
}
//getting ride of IMG tags
$images = array();
preg_match_all('/<A (.+?)>/is',$definition,$list_of_images);
foreach (array_unique($list_of_images[0]) as $key=>$value) {
$images['<@'.$key.'@>'] = $value;
}
if ( $images ) {
$definition = str_replace($images,array_keys($images),$definition);
}
$definition = str_ireplace($entry->concept,"<nolink>$entry->concept</nolink>",$definition);
//restoring A tags
if ( $links ) {
$definition = str_replace(array_keys($links),$links,$definition);
}
//restoring IMG tags
if ( $images ) {
$definition = str_replace(array_keys($images),$images,$definition);
}
/* if ( $aliases = get_records("glossary_alias","entryid",$entry->id) ) {
foreach ($aliases as $alias) {
echo "<small><font color=red>$alias->alias: ";
$definition = str_ireplace($alias->alias,"<nolink>$alias->alias</nolink>",$definition);
echo "<b>" . format_text($definition,2) . "</b>";
echo "</font></small><br>";
}
}
*/
echo format_text($definition, $entry->format);
}
function glossary_print_entry_aliases($course, $cm, $glossary, $entry,$mode="",$hook="", $type = 'print') {
$return = '';
if ( $aliases = get_records("glossary_alias","entryid",$entry->id) ) {
foreach ($aliases as $alias) {
if ($alias->alias) {
if ($return == '') {
$return = '<select style="font-size:8pt">';
}
$return .= "<option>$alias->alias</option>";
}
}
if ($return != '') {
$return .= '</select>';
// $return = "<table border=0 align=$align><tr><td>$return</td></tr></table>";
}
}
if ($type == 'print') {
echo $return;
} else {
return $return;
}
}
function glossary_print_entry_icons($course, $cm, $glossary, $entry,$mode="",$hook="", $type = 'print') {
global $THEME, $USER;
$importedentry = ($entry->sourceglossaryid == $glossary->id);
$isteacher = isteacher($course->id);
$ismainglossary = $glossary->mainglossary;
$return = "<font size=1>";
if (!$entry->approved) {
$return .= get_string("entryishidden","glossary");
}
$return .= glossary_print_entry_commentslink($course, $cm, $glossary, $entry,$mode,$hook,'html');
$return .= "</font> ";
if ( $glossary->allowcomments and !isguest()) {
$return .= " <a title=\"" . get_string("addcomment","glossary") . "\" href=\"comment.php?id=$cm->id&eid=$entry->id\"><img src=\"comment.gif\" height=16 width=16 border=0></a> ";
}
if ($isteacher or $glossary->studentcanpost and $entry->userid == $USER->id) {
// only teachers can export entries so check it out
if ($isteacher and !$ismainglossary and !$importedentry) {
$mainglossary = get_record("glossary","mainglossary",1,"course",$course->id);
if ( $mainglossary ) { // if there is a main glossary defined, allow to export the current entry
$return .= " <a title=\"" . get_string("exporttomainglossary","glossary") . "\" href=\"exportentry.php?id=$cm->id&entry=$entry->id&mode=$mode&hook=$hook\"><img src=\"export.gif\" height=11 width=11 border=0></a> ";
}
}
if ( $entry->sourceglossaryid ) {
$icon = "minus.gif"; // graphical metaphor (minus) for deleting an imported entry
} else {
$icon = "../../pix/t/delete.gif";
}
// Exported entries can be updated/deleted only by teachers in the main glossary
if ( !$importedentry and ($isteacher or !$ismainglossary) ) {
$return .= " <a title=\"" . get_string("delete") . "\" href=\"deleteentry.php?id=$cm->id&mode=delete&entry=$entry->id&prevmode=$mode&hook=$hook\"><img src=\"";
$return .= $icon;
$return .= "\" height=11 width=11 border=0></a> ";
$return .= " <a title=\"" . get_string("edit") . "\" href=\"edit.php?id=$cm->id&e=$entry->id&mode=$mode&hook=$hook\"><img src=\"../../pix/t/edit.gif\" height=11 width=11 border=0></a>";
} elseif ( $importedentry ) {
$return .= " <font size=-1>" . get_string("exportedentry","glossary") . "</font>";
}
}
$return .= "&nbsp;&nbsp;"; // just to make up a little the output in Mozilla ;)
if ($type == 'print') {
echo $return;
} else {
return $return;
}
}
function glossary_print_entry_commentslink($course, $cm, $glossary, $entry,$mode,$hook, $type = 'print') {
$return = '';
$count = count_records("glossary_comments","entryid",$entry->id);
if ($count) {
$return = "<font size=1>";
$return .= "<a href=\"comments.php?id=$cm->id&eid=$entry->id\">$count ";
if ($count == 1) {
$return .= get_string("comment", "glossary");
} else {
$return .= get_string("comments", "glossary");
}
$return .= "</a>";
$return .= "</font>";
}
if ($type == 'print') {
echo $return;
} else {
return $return;
}
}
function glossary_print_entry_lower_section($course, $cm, $glossary, $entry, $mode, $hook,$printicons) {
$aliases = glossary_print_entry_aliases($course, $cm, $glossary, $entry, $mode, $hook,"html");
$icons = "";
if ( $printicons ) {
$icons = glossary_print_entry_icons($course, $cm, $glossary, $entry, $mode, $hook,"html");
}
if ( $aliases ) {
echo '<table border="0" width="100%" align="center"><tr>' .
'<td align="right" width="50%" valign=top><font size=1>' .
get_string("aliases","glossary") . ': ' . $aliases . '</td>' .
'<td align=right width="50%" valign=top>'.
$icons .
'</td></tr></table>';
} else {
echo "<p align=right>$icons";
}
}
function glossary_print_entry_attachment($entry,$format=NULL,$align="right") {
/// valid format values: html : Return the HTML link for the attachment as an icon
/// text : Return the HTML link for tha attachment as text
/// blank : Print the output to the screen
if ($entry->attachment) {
$glossary = get_record("glossary","id",$entry->glossaryid);
$entry->course = $glossary->course; //used inside print_attachment
echo "<table border=0 align=$align><tr><td>";
echo glossary_print_attachments($entry,$format,$align);
echo "</td></tr></table>";
}
}
function glossary_print_entry_approval($cm, $entry, $mode) {
if ( $mode == 'approval' and !$entry->approved ) {
echo "<a title=\"" . get_string("approve","glossary"). "\" href=\"approve.php?id=$cm->id&eid=$entry->id&mode=$mode\"><IMG align=\"right\" src=\"check.gif\" border=0 width=\"34\" height=\"34\"></a>";
}
}
function glossary_print_entry_by_default($course, $cm, $glossary, $entry,$mode="",$hook="",$printicons=1) {
global $THEME, $USER;
$colour = $THEME->cellheading2;
echo "\n<TR>";
echo "<TD WIDTH=100% class=\"generalbox\" valign=\"top\" BGCOLOR=\"#FFFFFF\">";
glossary_print_entry_approval($cm, $entry, $mode);
glossary_print_entry_attachment($entry,"html","right");
echo "<b>";
glossary_print_entry_concept($entry);
echo ":</b> ";
glossary_print_entry_definition($entry);
glossary_print_entry_lower_section($course, $cm, $glossary, $entry,$mode,$hook,$printicons);
echo "</td>";
echo "</TR>";
}
function glossary_print_entry_continuous($course, $cm, $glossary, $entry,$mode="",$hook="",$printicons=1) {
global $THEME, $USER;
if ($entry) {
glossary_print_entry_approval($cm, $entry, $mode);
glossary_print_entry_attachment($entry,"html","right");
glossary_print_entry_concept($entry);
echo " ";
glossary_print_entry_definition($entry);
if ( $printicons ) {
$icons = glossary_print_entry_icons($course, $cm, $glossary, $entry, $mode, $hook,"html");
echo "($icons)";
}
}
}
function glossary_search_entries($searchterms, $glossary, $includedefinition) {
/// Returns a list of entries found using an array of search terms
/// eg word +word -word
///
global $CFG;
if (!isteacher($glossary->course)) {
$glossarymodule = get_record("modules", "name", "glossary");
$onlyvisible = " AND g.id = cm.instance AND cm.visible = 1 AND cm.module = $glossarymodule->id";
$onlyvisibletable = ", {$CFG->prefix}course_modules cm";
} else {
$onlyvisible = "";
$onlyvisibletable = "";
}
/// Some differences in syntax for PostgreSQL
if ($CFG->dbtype == "postgres7") {
$LIKE = "ILIKE"; // case-insensitive
$NOTLIKE = "NOT ILIKE"; // case-insensitive
$REGEXP = "~*";
$NOTREGEXP = "!~*";
} else {
$LIKE = "LIKE";
$NOTLIKE = "NOT LIKE";
$REGEXP = "REGEXP";
$NOTREGEXP = "NOT REGEXP";
}
$conceptsearch = "";
$definitionsearch = "";
foreach ($searchterms as $searchterm) {
if ($conceptsearch) {
$conceptsearch.= " OR ";
}
if ($definitionsearch) {
$definitionsearch.= " OR ";
}
if (substr($searchterm,0,1) == "+") {
$searchterm = substr($searchterm,1);
$conceptsearch.= " e.concept $REGEXP '(^|[^a-zA-Z0-9])$searchterm([^a-zA-Z0-9]|$)' ";
$definitionsearch .= " e.definition $REGEXP '(^|[^a-zA-Z0-9])$searchterm([^a-zA-Z0-9]|$)' ";
} else if (substr($searchterm,0,1) == "-") {
$searchterm = substr($searchterm,1);
$conceptsearch .= " e.concept $NOTREGEXP '(^|[^a-zA-Z0-9])$searchterm([^a-zA-Z0-9]|$)' ";
$definitionsearch .= " e.definition $NOTREGEXP '(^|[^a-zA-Z0-9])$searchterm([^a-zA-Z0-9]|$)' ";
} else {
$conceptsearch .= " e.concept $LIKE '%$searchterm%' ";
$definitionsearch .= " e.definition $LIKE '%$searchterm%' ";
}
}
if ( !$includedefinition ) {
$definitionsearch = "0";
}
$selectsql = "{$CFG->prefix}glossary_entries e,
{$CFG->prefix}glossary g $onlyvisibletable
WHERE ($conceptsearch OR $definitionsearch)
AND (e.glossaryid = g.id or e.sourceglossaryid = g.id) $onlyvisible
AND g.id = $glossary->id AND e.approved != 0";
return get_records_sql("SELECT e.*
FROM $selectsql ORDER BY e.concept ASC");
}
function glossary_file_area_name($entry) {
// Creates a directory file name, suitable for make_upload_directory()
global $CFG;
return "$entry->course/$CFG->moddata/glossary/$entry->glossaryid/$entry->id";
}
function glossary_file_area($entry) {
return make_upload_directory( glossary_file_area_name($entry) );
}
function glossary_delete_old_attachments($entry, $exception="") {
// Deletes all the user files in the attachments area for a entry
// EXCEPT for any file named $exception
if ($basedir = glossary_file_area($entry)) {
if ($files = get_directory_list($basedir)) {
foreach ($files as $file) {
if ($file != $exception) {
unlink("$basedir/$file");
// notify("Existing file '$file' has been deleted!");
}
}
}
if (!$exception) { // Delete directory as well, if empty
rmdir("$basedir");
}
}
}
function glossary_copy_attachments($entry, $newentry) {
/// Given a entry object that is being copied to glossaryid,
/// this function checks that entry
/// for attachments, and if any are found, these are
/// copied to the new glossary directory.
global $CFG;
$return = true;
if ($entries = get_records_select("glossary_entries", "id = '$entry->id' AND attachment <> ''")) {
foreach ($entries as $curentry) {
$oldentry->id = $entry->id;
$oldentry->course = $entry->course;
$oldentry->glossaryid = $curentry->glossaryid;
$oldentrydir = "$CFG->dataroot/".glossary_file_area_name($oldentry);
if (is_dir($oldentrydir)) {
$newentrydir = glossary_file_area($newentry);
if (! copy("$oldentrydir/$newentry->attachment", "$newentrydir/$newentry->attachment")) {
$return = false;
}
}
}
}
return $return;
}
function glossary_move_attachments($entry, $glossaryid) {
/// Given a entry object that is being moved to glossaryid,
/// this function checks that entry
/// for attachments, and if any are found, these are
/// moved to the new glossary directory.
global $CFG;
$return = true;
if ($entries = get_records_select("glossary_entries", "glossaryid = '$entry->id' AND attachment <> ''")) {
foreach ($entries as $entry) {
$oldentry->course = $entry->course;
$oldentry->glossaryid = $entry->glossaryid;
$oldentrydir = "$CFG->dataroot/".glossary_file_area_name($oldentry);
if (is_dir($oldentrydir)) {
$newentry = $oldentry;
$newentry->glossaryid = $glossaryid;
$newentrydir = "$CFG->dataroot/".glossary_file_area_name($newentry);
if (! @rename($oldentrydir, $newentrydir)) {
$return = false;
}
}
}
}
return $return;
}
function glossary_add_attachment($entry, $newfile) {
// $entry is a full entry record, including course and glossary
// $newfile is a full upload array from $_FILES
// If successful, this function returns the name of the file
global $CFG;
if (empty($newfile['name'])) {
return "";
}
$newfile_name = clean_filename($newfile['name']);
if (valid_uploaded_file($newfile)) {
if (! $newfile_name) {
notify("This file had a wierd filename and couldn't be uploaded");
} else if (! $dir = glossary_file_area($entry)) {
notify("Attachment could not be stored");
$newfile_name = "";
} else {
if (move_uploaded_file($newfile['tmp_name'], "$dir/$newfile_name")) {
chmod("$dir/$newfile_name", $CFG->directorypermissions);
glossary_delete_old_attachments($entry, $newfile_name);
} else {
notify("An error happened while saving the file on the server");
$newfile_name = "";
}
}
} else {
$newfile_name = "";
}
return $newfile_name;
}
function glossary_print_attachments($entry, $return=NULL, $align="left") {
// if return=html, then return a html string.
// if return=text, then return a text-only string.
// otherwise, print HTML for non-images, and return image HTML
// if attachment is an image, $align set its aligment.
global $CFG;
$newentry = $entry;
if ( $newentry->sourceglossaryid ) {
$newentry->glossaryid = $newentry->sourceglossaryid;
}
$filearea = glossary_file_area_name($newentry);
$imagereturn = "";
$output = "";
if ($basedir = glossary_file_area($newentry)) {
if ($files = get_directory_list($basedir)) {
$strattachment = get_string("attachment", "glossary");
$strpopupwindow = get_string("popupwindow");
foreach ($files as $file) {
$icon = mimeinfo("icon", $file);
if ($CFG->slasharguments) {
$ffurl = "file.php/$filearea/$file";
} else {
$ffurl = "file.php?file=/$filearea/$file";
}
$image = "<img border=0 src=\"$CFG->wwwroot/files/pix/$icon\" height=16 width=16 alt=\"$strpopupwindow\">";
if ($return == "html") {
$output .= "<a target=_image href=\"$CFG->wwwroot/$ffurl\">$image</a> ";
$output .= "<a target=_image href=\"$CFG->wwwroot/$ffurl\">$file</a><br />";
} else if ($return == "text") {
$output .= "$strattachment $file:\n$CFG->wwwroot/$ffurl\n";
} else {
if ($icon == "image.gif") { // Image attachments don't get printed as links
$imagereturn .= "<br /><img src=\"$CFG->wwwroot/$ffurl\" align=$align>";
} else {
link_to_popup_window("/$ffurl", "attachment", $image, 500, 500, $strattachment);
echo "<a target=_image href=\"$CFG->wwwroot/$ffurl\">$file</a>";
echo "<br />";
}
}
}
}
}
if ($return) {
return $output;
}
return $imagereturn;
}
function glossary_print_tabbed_table_start($data, $currenttab, $tTHEME = NULL) {
if ( !$tTHEME ) {
global $THEME;
$tTHEME = $THEME;
}
$tablecolor = $tTHEME->TabTableBGColor;
$currenttabcolor = $tTHEME->ActiveTabColor;
$tabcolor = $tTHEME->InactiveTabColor;
$inactivefontcolor = $tTHEME->InactiveFontColor;
$tablewidth = $tTHEME->TabTableWidth;
$tabsperrow = $tTHEME->TabsPerRow;
$tabseparation = $tTHEME->TabSeparation;
$tabs = count($data);
$tabwidth = (int) (100 / $tabsperrow);
$currentrow = ( $currenttab - ( $currenttab % $tabsperrow) ) / $tabsperrow;
$numrows = (int) ( $tabs / $tabsperrow ) + 1;
?>
<center>
<table border="0" cellpadding="0" cellspacing="0" width="<?php p($tablewidth) ?>">
<tr>
<td width="100%">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<?php
$tabproccessed = 0;
for ($row = 0; $row < $numrows; $row++) {
echo "<tr>\n";
if ( $row != $currentrow ) {
for ($col = 0; $col < $tabsperrow; $col++) {
if ( $tabproccessed < $tabs ) {
if ( $col == 0 ) {
echo "<td width=\"$tabseparation\" align=\"center\">&nbsp;</td>";
}
if ($tabproccessed == $currenttab) {
$currentcolor = $currenttabcolor;
$currentstyle = 'generaltabselected';
} else {
$currentcolor = $tabcolor;
$currentstyle = 'generaltab';
}
echo "<td class=\"$currentstyle\" width=\"$tabwidth%\" bgcolor=\"$currentcolor\" align=\"center\" style=\"border-color: #000000; border-style: solid; border-width: 1px;\"><b>";
if ($tabproccessed != $currenttab and $data[$tabproccessed]->link) {
echo "<a href=\"" . $data[$tabproccessed]->link . "\">";
}
if ( !$data[$tabproccessed]->link ) {
echo "<font color=\"$inactivefontcolor\">";
}
echo $data[$tabproccessed]->caption;
if ( !$data[$tabproccessed]->link ) {
echo "</font>";
}
if ($tabproccessed != $currenttab and $data[$tabproccessed]->link) {
echo "</a>";
}
echo "</b></td>";
if ( $col < $tabsperrow ) {
echo "<td width=\"$tabseparation\" align=\"center\">&nbsp;</td>";
}
} else {
$currentcolor = "";
}
$tabproccessed++;
}
} else {
$firsttabincurrentrow = $tabproccessed;
$tabproccessed += $tabsperrow;
}
echo "</tr><tr><td colspan=" . (2* $tabsperrow) . " ></td></tr>\n";
}
echo "<tr>\n";
$tabproccessed = $firsttabincurrentrow;
for ($col = 0; $col < $tabsperrow; $col++) {
if ( $tabproccessed < $tabs ) {
if ( $col == 0 ) {
echo "<td width=\"$tabseparation\" align=\"center\">&nbsp;</td>";
}
if ($tabproccessed == $currenttab) {
$currentcolor = $currenttabcolor;
$currentstyle = 'generaltabselected';
} else {
$currentcolor = $tabcolor;
$currentstyle = 'generaltab';
}
echo "<td class=\"$currentstyle\" width=\"$tabwidth%\" bgcolor=\"$currentcolor\" align=\"center\" style=\"border-color: #000000; border-style: solid; border-width: 1px;\"><b>";
if ($tabproccessed != $currenttab and $data[$tabproccessed]->link) {
echo "<a href=\"" . $data[$tabproccessed]->link . "\">";
}
if ( !$data[$tabproccessed]->link ) {
echo "<font color=\"$inactivefontcolor\">";
}
echo $data[$tabproccessed]->caption;
if ( !$data[$tabproccessed]->link ) {
echo "</font>";
}
if ($tabproccessed != $currenttab and $data[$tabproccessed]->link) {
echo "</a>";
}
echo "</b></td>";
if ($col < $tabsperrow) {
echo "<td width=\"$tabseparation\" align=\"center\">&nbsp;</td>";
}
} else {
if ($numrows > 1) {
$currentcolor = $tabcolor;
} else {
$currentcolor = "";
}
echo "<td colspan = " . (2 * ($tabsperrow - $col)) . " bgcolor=\"$currentcolor\" align=\"center\">";
echo "</td>";
$col = $tabsperrow;
}
$tabproccessed++;
}
echo "</tr>\n";
?>
</table>
</td>
</tr>
<tr>
<td width="100%" bgcolor="<?php p($tablecolor) ?>"><hr></td>
</tr>
<tr>
<td width="100%" bgcolor="<?php p($tablecolor) ?>">
<center>
<?php
}
function glossary_print_tabbed_table_end() {
echo "</center><p></td></tr></table></center>";
}
function glossary_print_approval_menu($cm, $glossary,$mode, $hook, $sortkey = '', $sortorder = '') {
if ($glossary->showalphabet and $glossary->displayformat != GLOSSARY_FORMAT_CONTINUOUS) {
echo '<center>' . get_string("explainalphabet","glossary") . '<p>';
}
glossary_print_special_links($cm, $glossary, $mode, $hook);
glossary_print_alphabet_links($cm, $glossary, $mode, $hook,$sortkey, $sortorder);
glossary_print_all_links($cm, $glossary, $mode, $hook);
glossary_print_sorting_links($cm, $mode, 'CREATION', 'asc');
}
function glossary_print_addentry_menu($cm, $glossary, $mode, $hook, $sortkey='', $sortorder = '') {
echo '<center>' . get_string("explainaddentry","glossary") . '<p>';
}
function glossary_print_import_menu($cm, $glossary, $mode, $hook, $sortkey='', $sortorder = '') {
echo '<center>' . get_string("explainimport","glossary") . '<p>';
}
function glossary_print_export_menu($cm, $glossary, $mode, $hook, $sortkey='', $sortorder = '') {
echo '<center>' . get_string("explainexport","glossary") . '<p>';
}
function glossary_print_alphabet_menu($cm, $glossary, $mode, $hook, $sortkey='', $sortorder = '') {
if ( $mode != 'date' ) {
if ($glossary->showalphabet and $glossary->displayformat != GLOSSARY_FORMAT_CONTINUOUS) {
echo '<center>' . get_string("explainalphabet","glossary") . '<p>';
}
glossary_print_special_links($cm, $glossary, $mode, $hook);
glossary_print_alphabet_links($cm, $glossary, $mode, $hook, $sortkey, $sortorder);
glossary_print_all_links($cm, $glossary, $mode, $hook);
} else {
glossary_print_sorting_links($cm, $mode, $sortkey,$sortorder);
}
}
function glossary_print_author_menu($cm, $glossary,$mode, $hook, $sortkey = '', $sortorder = '') {
if ($glossary->showalphabet and $glossary->displayformat != GLOSSARY_FORMAT_CONTINUOUS) {
echo '<center>' . get_string("explainalphabet","glossary") . '<br \>';
}
glossary_print_sorting_links($cm, $mode, $sortkey,$sortorder);
glossary_print_alphabet_links($cm, $glossary, $mode, $hook, $sortkey, $sortorder);
glossary_print_all_links($cm, $glossary, $mode, $hook);
// echo "<br />";
}
function glossary_print_categories_menu($cm, $glossary, $hook, $category) {
global $CFG, $THEME;
echo '<table border=0 width=100%>';
echo '<tr>';
echo '<td align=center width=20%>';
if ( isteacher($course->id) ) {
$options['id'] = $cm->id;
$options['mode'] = 'cat';
$options['hook'] = $hook;
echo print_single_button("editcategories.php", $options, get_string("editcategories","glossary"), "get");
}
echo '</td>';
echo '<td align=center width=60%>';
echo '<b>';
$menu[GLOSSARY_SHOW_ALL_CATEGORIES] = get_string("allcategories","glossary");
$menu[GLOSSARY_SHOW_NOT_CATEGORISED] = get_string("notcategorised","glossary");
$categories = get_records("glossary_categories", "glossaryid", $glossary->id, "name ASC");
$selected = '';
if ( $categories ) {
foreach ($categories as $currentcategory) {
$url = $currentcategory->id;
if ( $category ) {
if ($currentcategory->id == $category->id) {
$selected = $url;
}
}
$menu[$url] = $currentcategory->name;
}
}
if ( !$selected ) {
$selected = GLOSSARY_SHOW_NOT_CATEGORISED;
}
if ( $category ) {
echo $category->name;
} else {
if ( $hook == GLOSSARY_SHOW_NOT_CATEGORISED ) {
echo get_string("entrieswithoutcategory","glossary");
$selected = GLOSSARY_SHOW_NOT_CATEGORISED;
} elseif ( $hook == GLOSSARY_SHOW_ALL_CATEGORIES ) {
echo get_string("allcategories","glossary");
$selected = GLOSSARY_SHOW_ALL_CATEGORIES;
}
}
echo '</b></td>';
echo '<td align=center width=20%>';
echo popup_form("$CFG->wwwroot/mod/glossary/view.php?id=$cm->id&mode=cat&hook=", $menu, "catmenu", $selected, "",
"", "", false);
echo '</td>';
echo '</tr>';
echo '</table>';
}
function glossary_print_all_links($cm, $glossary, $mode, $hook) {
global $CFG;
if ( $glossary->showall and $glossary->displayformat != GLOSSARY_FORMAT_CONTINUOUS) {
$strallentries = get_string("allentries", "glossary");
if ( $hook == 'ALL' ) {
echo "<b>$strallentries</b>";
} else {
$strexplainall = strip_tags(get_string("explainall","glossary"));
echo "<a title=\"$strexplainall\" href=\"$CFG->wwwroot/mod/glossary/view.php?id=$cm->id&mode=$mode&hook=ALL\">$strallentries</a>";
}
}
}
function glossary_print_special_links($cm, $glossary, $mode, $hook) {
global $CFG;
if ( $glossary->showspecial and $glossary->displayformat != GLOSSARY_FORMAT_CONTINUOUS ) {
$strspecial = get_string("special", "glossary");
if ( $hook == 'SPECIAL' ) {
echo "<b>$strspecial</b> | ";
} else {
$strexplainspecial = strip_tags(get_string("explainspecial","glossary"));
echo "<a title=\"$strexplainspecial\" href=\"$CFG->wwwroot/mod/glossary/view.php?id=$cm->id&mode=$mode&hook=SPECIAL\">$strspecial</a> | ";
}
}
}
function glossary_print_alphabet_links($cm, $glossary, $mode, $hook, $sortkey, $sortorder) {
global $CFG;
if ( $glossary->showalphabet and $glossary->displayformat != GLOSSARY_FORMAT_CONTINUOUS ) {
$alphabet = explode(",", get_string("alphabet"));
$letters_by_line = 14;
for ($i = 0; $i < count($alphabet); $i++) {
if ( $hook == $alphabet[$i] and $hook) {
echo "<b>$alphabet[$i]</b>";
} else {
echo "<a href=\"$CFG->wwwroot/mod/glossary/view.php?id=$cm->id&mode=$mode&hook=$alphabet[$i]&sortkey=$sortkey&sortorder=$sortorder\">$alphabet[$i]</a>";
}
if ((int) ($i % $letters_by_line) != 0 or $i == 0) {
echo ' | ';
} else {
echo '<br>';
}
}
}
}
function glossary_print_sorting_links($cm, $mode, $sortkey = '',$sortorder = '') {
global $CFG;
$asc = get_string("ascending","glossary");
$desc = get_string("descending","glossary");
$bopen = '<b>';
$bclose = '</b>';
$neworder = '';
if ( $sortorder ) {
if ( $sortorder == 'asc' ) {
$neworder = '&sortorder=desc';
$newordertitle = $desc;
} else {
$neworder = '&sortorder=asc';
$newordertitle = $asc;
}
$icon = " <img src=\"$sortorder.gif\" border=0 width=16 height=16>";
} else {
if ( $sortkey != 'CREATION' and $sortkey != 'UPDATE' and
$sortkey != 'FIRSTNAME' and $sortkey != 'LASTNAME' ) {
$icon = "";
$newordertitle = $asc;
} else {
$newordertitle = $desc;
$neworder = '&sortorder=desc';
$icon = ' <img src="asc.gif" border=0 width=16 height=16>';
}
}
$ficon = '';
$fneworder = '';
$fbtag = '';
$fendbtag = '';
$sicon = '';
$sneworder = '';
$stag = '';
$sendbtag = '';
if ( $sortkey == 'CREATION' or $sortkey == 'FIRSTNAME' ) {
$ficon = $icon;
$fneworder = $neworder;
$fordertitle = $newordertitle;
$sordertitle = $asc;
$fbtag = $bopen;
$fendbtag = $bclose;
} elseif ($sortkey == 'UPDATE' or $sortkey == 'LASTNAME') {
$sicon = $icon;
$sneworder = $neworder;
$fordertitle = $asc;
$sordertitle = $newordertitle;
$sbtag = $bopen;
$sendbtag = $bclose;
} else {
$fordertitle = $asc;
$sordertitle = $asc;
}
if ( $sortkey == 'CREATION' or $sortkey == 'UPDATE' ) {
$forder = 'CREATION';
$sorder = 'UPDATE';
$fsort = get_string("sortbycreation", "glossary");
$ssort = get_string("sortbylastupdate", "glossary");
$sort = get_string("sortchronogically", "glossary");
} elseif ( $sortkey == 'FIRSTNAME' or $sortkey == 'LASTNAME') {
$forder = 'FIRSTNAME';
$sorder = 'LASTNAME';
$fsort = get_string("firstname");
$ssort = get_string("lastname");
$sort = get_string("sortby", "glossary");
}
echo "<br>$sort: $sbtag<a title=\"$ssort $sordertitle\" href=\"$CFG->wwwroot/mod/glossary/view.php?id=$cm->id&sortkey=$sorder$sneworder&mode=$mode\">$ssort$sicon</a>$sendbtag | ".
"$fbtag<a title=\"$fsort $fordertitle\" href=\"$CFG->wwwroot/mod/glossary/view.php?id=$cm->id&sortkey=$forder$fneworder&mode=$mode\">$fsort$ficon</a>$fendbtag<br \>";
}
function glossary_sort_entries ( $entry0, $entry1 ) {
if ( strtolower(ltrim($entry0->concept)) < strtolower(ltrim($entry1->concept)) ) {
return -1;
} elseif ( strtolower(ltrim($entry0->concept)) > strtolower(ltrim($entry1->concept)) ) {
return 1;
} else {
return 0;
}
}
function glossary_print_comment($course, $cm, $glossary, $entry, $comment) {
global $THEME, $CFG, $USER;
$colour = $THEME->cellheading2;
$user = get_record("user", "id", $comment->userid);
$strby = get_string("writtenby","glossary");
echo "<table class=\"generalbox\" BORDER=1 CELLSPACING=0 valign=top cellpadding=0 width=70% border=0><tr><td>";
echo "\n<TABLE width=\"100%\" BORDER=0 CELLSPACING=0 valign=top cellpadding=5><tr>";
echo "\n<TD BGCOLOR=\"$THEME->cellheading\" WIDTH=25% VALIGN=TOP align=right >";
print_user_picture($user->id, $course->id, $user->picture);
echo "<br><FONT SIZE=2>$strby $user->firstname $user->lastname</font>";
echo "<br><FONT SIZE=1>(".get_string("lastedited").": ".userdate($comment->timemodified).")</FONT></small><br>";
echo "</TD>";
echo "<TD valign=top WIDTH=75% BGCOLOR=\"$THEME->cellcontent\">";
if ($comment) {
echo format_text($comment->comment, $comment->format);
} else {
echo "<center>";
print_string("nocomment", "glossary");
echo "</center>";
}
echo "<p align=right>";
if ( (time() - $comment->timemodified < $CFG->maxeditingtime and $USER->id == $comment->userid) or isteacher($course->id) ) {
echo "<a href=\"comment.php?id=$cm->id&eid=$entry->id&cid=$comment->id&action=edit\"><img alt=\"" . get_string("edit") . "\" src=\"../../pix/t/edit.gif\" height=11 width=11 border=0></a> ";
}
if ( $USER->id == $comment->userid or isteacher($course->id) ) {
echo "<a href=\"comment.php?id=$cm->id&eid=$entry->id&cid=$comment->id&action=delete\"><img alt=\"" . get_string("delete") . "\" src=\"../../pix/t/delete.gif\" height=11 width=11 border=0></a>";
}
echo "</td>";
echo "</tr></TABLE>\n";
echo "</td></tr></table>";
}
function glossary_print_dynaentry($courseid, $entries, $displayformat = -1) {
global $THEME, $USER;
$colour = $THEME->cellheading2;
echo "\n<center><table width=95% border=0><tr>";
echo "<td width=100%\">";
if ( $entries ) {
foreach ( $entries as $entry ) {
if (! $glossary = get_record("glossary", "id", $entry->glossaryid)) {
error("Glossary ID was incorrect or no longer exists");
}
if (! $course = get_record("course", "id", $glossary->course)) {
error("Glossary is misconfigured - don't know what course it's from");
}
if (!$cm = get_coursemodule_from_instance("glossary", $entry->glossaryid, $glossary->course) ) {
error("Glossary is misconfigured - don't know what course module it is ");
}
$dp = $displayformat;
// Hard-coded until the Display formats manager is done.
if ( $dprecord = get_record("glossary_displayformats","fid", $glossary->displayformat) ) {
if ( $dprecord->relatedview >= 0 ) {
$dp = $dprecord->relatedview;
}
}
glossary_print_entry($course, $cm, $glossary, $entry, "","",0,$dp);
}
}
echo "</td>";
echo "</tr></table></center>";
}
function glossary_generate_export_file($glossary, $hook = "", $hook = 0) {
global $CFG;
glossary_check_moddata_dir($glossary);
$h = glossary_open_xml($glossary);
$status = fwrite ($h,glossary_start_tag("INFO",1,true));
fwrite ($h,glossary_full_tag("NAME",2,false,$glossary->name));
fwrite ($h,glossary_full_tag("INTRO",2,false,$glossary->intro));
fwrite ($h,glossary_full_tag("STUDENTCANPOST",2,false,$glossary->studentcanpost));
fwrite ($h,glossary_full_tag("ALLOWDUPLICATEDENTRIES",2,false,$glossary->allowduplicatedentries));
fwrite ($h,glossary_full_tag("SHOWSPECIAL",2,false,$glossary->showspecial));
fwrite ($h,glossary_full_tag("SHOWALPHABET",2,false,$glossary->showalphabet));
fwrite ($h,glossary_full_tag("SHOWALL",2,false,$glossary->showall));
fwrite ($h,glossary_full_tag("ALLOWCOMMENTS",2,false,$glossary->allowcomments));
fwrite ($h,glossary_full_tag("USEDYNALINK",2,false,$glossary->usedynalink));
fwrite ($h,glossary_full_tag("DEFAULTAPPROVAL",2,false,$glossary->defaultapproval));
fwrite ($h,glossary_full_tag("GLOBALGLOSSARY",2,false,$glossary->globalglossary));
fwrite ($h,glossary_full_tag("ENTBYPAGE",2,false,$glossary->entbypage));
if ( $entries = get_records("glossary_entries","glossaryid",$glossary->id) ) {
$status = fwrite ($h,glossary_start_tag("ENTRIES",2,true));
foreach ($entries as $entry) {
$permissiongranted = 1;
if ( $hook ) {
switch ( $hook ) {
case "ALL":
case "SPECIAL":
break;
default:
$permissiongranted = ($entry->concept[ strlen($hook)-1 ] == $hook);
break;
}
}
if ( $hook ) {
switch ( $hook ) {
case GLOSSARY_SHOW_ALL_CATEGORIES:
break;
case GLOSSARY_SHOW_NOT_CATEGORISED:
$permissiongranted = !record_exists("glossary_entries_categories","entryid",$entry->id);
break;
default:
$permissiongranted = record_exists("glossary_entries_categories","entryid",$entry->id, "categoryid",$hook);
break;
}
}
if ( $entry->approved and $permissiongranted ) {
$status = fwrite($h,glossary_start_tag("ENTRY",3,true));
fwrite($h,glossary_full_tag("CONCEPT",4,false,$entry->concept));
fwrite($h,glossary_full_tag("DEFINITION",4,false,$entry->definition));
fwrite($h,glossary_full_tag("FORMAT",4,false,$entry->format));
fwrite($h,glossary_full_tag("USEDYNALINK",4,false,$entry->usedynalink));
fwrite($h,glossary_full_tag("CASESENSITIVE",4,false,$entry->casesensitive));
fwrite($h,glossary_full_tag("FULLMATCH",4,false,$entry->fullmatch));
fwrite($h,glossary_full_tag("TEACHERENTRY",4,false,$entry->teacherentry));
if ( $aliases = get_records("glossary_alias","entryid",$entry->id) ) {
$status = fwrite ($h,glossary_start_tag("ALIASES",4,true));
foreach ($aliases as $alias) {
$status = fwrite ($h,glossary_start_tag("ALIAS",5,true));
fwrite($h,glossary_full_tag("NAME",6,false,$alias->alias));
$status = fwrite($h,glossary_end_tag("ALIAS",5,true));
}
$status = fwrite($h,glossary_end_tag("ALIASES",4,true));
}
if ( $catentries = get_records("glossary_entries_categories","entryid",$entry->id) ) {
$status = fwrite ($h,glossary_start_tag("CATEGORIES",4,true));
foreach ($catentries as $catentry) {
$category = get_record("glossary_categories","id",$catentry->categoryid);
$status = fwrite ($h,glossary_start_tag("CATEGORY",5,true));
fwrite($h,glossary_full_tag("NAME",6,false,$category->name));
fwrite($h,glossary_full_tag("USEDYNALINK",6,false,$category->usedynalink));
$status = fwrite($h,glossary_end_tag("CATEGORY",5,true));
}
$status = fwrite($h,glossary_end_tag("CATEGORIES",4,true));
}
$status =fwrite($h,glossary_end_tag("ENTRY",3,true));
}
}
$status =fwrite ($h,glossary_end_tag("ENTRIES",2,true));
}
$status =fwrite ($h,glossary_end_tag("INFO",1,true));
$h = glossary_close_xml($h);
}
// Functions designed by Eloy Lafuente
//
//Function to create, open and write header of the xml file
function glossary_open_xml($glossary) {
global $CFG;
$status = true;
//Open for writing
$file = $CFG->dataroot."/$glossary->course/glossary/". clean_filename($glossary->name) ."/glossary.xml";
$h = fopen($file,"w");
//Writes the header
$status = fwrite ($h,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
if ($status) {
$status = fwrite ($h,glossary_start_tag("GLOSSARY",0,true));
}
if ($status) {
return $h;
} else {
return false;
}
}
function glossary_read_imported_file($file) {
require_once "../../lib/xmlize.php";
$h = fopen($file,"r");
$line = '';
if ($h) {
while ( !feof($h) ) {
$char = fread($h,1024);
$line .= $char;
}
fclose($h);
}
return xmlize($line);
}
//Close the file
function glossary_close_xml($h) {
$status = fwrite ($h,glossary_end_tag("GLOSSARY",0,true));
return fclose($h);
}
//Return the xml start tag
function glossary_start_tag($tag,$level=0,$endline=false) {
if ($endline) {
$endchar = "\n";
} else {
$endchar = "";
}
return str_repeat(" ",$level*2)."<".strtoupper($tag).">".$endchar;
}
//Return the xml end tag
function glossary_end_tag($tag,$level=0,$endline=true) {
if ($endline) {
$endchar = "\n";
} else {
$endchar = "";
}
return str_repeat(" ",$level*2)."</".strtoupper($tag).">".$endchar;
}
//Return the start tag, the contents and the end tag
function glossary_full_tag($tag,$level=0,$endline=true,$content,$to_utf=true) {
$st = glossary_start_tag($tag,$level,$endline);
$co="";
if ($to_utf) {
$co = preg_replace("/\r\n|\r/", "\n", utf8_encode(htmlspecialchars($content)));
} else {
$co = preg_replace("/\r\n|\r/", "\n", htmlspecialchars($content));
}
$et = glossary_end_tag($tag,0,true);
return $st.$co.$et;
}
//Function to check and create the needed moddata dir to
//save all the mod backup files. We always name it moddata
//to be able to restore it, but in restore we check for
//$CFG->moddata !!
function glossary_check_moddata_dir($glossary) {
global $CFG;
$status = glossary_check_dir_exists($CFG->dataroot."/$glossary->course",true);
if ( $status ) {
$status = glossary_check_dir_exists($CFG->dataroot."/$glossary->course/glossary",true);
if ( $status ) {
$status = glossary_check_dir_exists($CFG->dataroot."/$glossary->course/glossary/". clean_filename($glossary->name),true);
}
}
return $status;
}
//Function to check if a directory exists
//and, optionally, create it
function glossary_check_dir_exists($dir,$create=false) {
global $CFG;
$status = true;
if(!is_dir($dir)) {
if (!$create) {
$status = false;
} else {
umask(0000);
$status = mkdir ($dir,$CFG->directorypermissions);
}
}
return $status;
}
?>
Jump to Line
Something went wrong with that request. Please try again.