diff --git a/mod/resource/type/repository/hive/makelink.php b/mod/resource/type/repository/hive/makelink.php
new file mode 100644
index 00000000000..0dbc1a136a5
--- /dev/null
+++ b/mod/resource/type/repository/hive/makelink.php
@@ -0,0 +1,25 @@
+
+
+
+
diff --git a/mod/resource/type/repository/hive/openhive.php b/mod/resource/type/repository/hive/openhive.php
new file mode 100644
index 00000000000..d23dfeaaa81
--- /dev/null
+++ b/mod/resource/type/repository/hive/openhive.php
@@ -0,0 +1,39 @@
+hivehost) or empty($CFG->hivehost) or empty($CFG->hivehost) or empty($CFG->hivehost)) {
+ notify('A Hive repository is not yet configured in Moodle. Please see Resource settings.');
+ die;
+ }
+
+ notify('Opening HarvestRoad Hive. Please wait. Contacting '. $CFG->hivehost );
+
+ echo '
';
+ echo '';
+ echo 'document.OPEN_HIVE_FORM.submit();';
+ echo 'history.go(-1);';
+ echo '';
+
+?>
diff --git a/mod/resource/type/repository/repository.html b/mod/resource/type/repository/repository.html
new file mode 100644
index 00000000000..f4a01d1b15d
--- /dev/null
+++ b/mod/resource/type/repository/repository.html
@@ -0,0 +1,194 @@
+
+
+
+
+
+
+
+
+ :
+
+
+ reference\" alt=\"reference\" /> ";
+ button_to_popup_window ('/mod/resource/type/repository/hive/openhive.php', 'Hive', 'Hive', 500, 750, $strchooseafile);
+ ?>
+
+
+
+
+
+
+ :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ onclick="lockoptions('form', 'windowpopup[0]', frameitem);
+ return lockoptions('form', 'windowpopup[1]', popupitems);" />
+ ">
+
+
+ options == "frame") ? "checked=\"checked\"" : "" ?> alt="" />
+
+
+
+
+
+
+
+
+
+ onclick="lockoptions('form', 'windowpopup[0]', frameitem);
+ return lockoptions('form', 'windowpopup[1]', popupitems);" />
+
+
+ $value) {
+ if ($name == "height" or $name == "width") {
+ continue;
+ }
+ echo " ";
+ echo " $name." alt=\"$name\" />";
+ $stringname = "str$name";
+ echo $$stringname." ";
+ }
+ ?>
+
+
+
+
+
+
+
+
+ ";
+ echo "lockoptions('form','windowpopup[1]', popupitems);";
+ echo "";
+ } else {
+ echo "";
+ }
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+ :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mod/resource/type/repository/resource.class.php b/mod/resource/type/repository/resource.class.php
new file mode 100644
index 00000000000..052e6a74ebf
--- /dev/null
+++ b/mod/resource/type/repository/resource.class.php
@@ -0,0 +1,597 @@
+course->lang)) {
+ $CFG->courselang = $this->course->lang;
+ }
+
+ if (empty($USER->id)) { // No need to set up parameters
+ $this->parameters = array();
+ return;
+ }
+
+ $site = get_site();
+
+ $this->parameters = array(
+
+ 'label1' => array('langstr' => get_string('user'),
+ 'value' => 'optgroup'),
+
+ 'userid' => array('langstr' => 'id',
+ 'value' => $USER->id),
+ 'userusername' => array('langstr' => get_string('username'),
+ 'value' => $USER->username),
+ 'userpassword' => array('langstr' => get_string('password'),
+ 'value' => $USER->password),
+ 'useridnumber' => array('langstr' => get_string('idnumber'),
+ 'value' => $USER->idnumber),
+ 'userfirstname' => array('langstr' => get_string('firstname'),
+ 'value' => $USER->firstname),
+ 'userlastname' => array('langstr' => get_string('lastname'),
+ 'value' => $USER->lastname),
+ 'userfullname' => array('langstr' => get_string('fullname'),
+ 'value' => fullname($USER)),
+ 'useremail' => array('langstr' => get_string('email'),
+ 'value' => $USER->email),
+ 'usericq' => array('langstr' => get_string('icqnumber'),
+ 'value' => $USER->icq),
+ 'userphone1' => array('langstr' => get_string('phone').' 1',
+ 'value' => $USER->phone1),
+ 'userphone2' => array('langstr' => get_string('phone').' 2',
+ 'value' => $USER->phone2),
+ 'userinstitution' => array('langstr' => get_string('institution'),
+ 'value' => $USER->institution),
+ 'userdepartment' => array('langstr' => get_string('department'),
+ 'value' => $USER->department),
+ 'useraddress' => array('langstr' => get_string('address'),
+ 'value' => $USER->address),
+ 'usercity' => array('langstr' => get_string('city'),
+ 'value' => $USER->city),
+ 'usertimezone' => array('langstr' => get_string('timezone'),
+ 'value' => get_user_timezone_offset()),
+ 'userurl' => array('langstr' => get_string('webpage'),
+ 'value' => $USER->url),
+
+ 'label2' => array('langstr' => "",
+ 'value' =>'/optgroup'),
+ 'label3' => array('langstr' => get_string('course'),
+ 'value' => 'optgroup'),
+
+ 'courseid' => array('langstr' => 'id',
+ 'value' => $this->course->id),
+ 'coursefullname' => array('langstr' => get_string('fullname'),
+ 'value' => $this->course->fullname),
+ 'courseshortname' => array('langstr' => get_string('shortname'),
+ 'value' => $this->course->shortname),
+ 'courseidnumber' => array('langstr' => get_string('idnumber'),
+ 'value' => $this->course->idnumber),
+ 'coursesummary' => array('langstr' => get_string('summary'),
+ 'value' => $this->course->summary),
+ 'courseformat' => array('langstr' => get_string('format'),
+ 'value' => $this->course->format),
+ 'courseteacher' => array('langstr' => get_string('wordforteacher'),
+ 'value' => $this->course->teacher),
+ 'courseteachers' => array('langstr' => get_string('wordforteachers'),
+ 'value' => $this->course->teachers),
+ 'coursestudent' => array('langstr' => get_string('wordforstudent'),
+ 'value' => $this->course->student),
+ 'coursestudents' => array('langstr' => get_string('wordforstudents'),
+ 'value' => $this->course->students),
+
+ 'label4' => array('langstr' => "",
+ 'value' =>'/optgroup'),
+ 'label5' => array('langstr' => get_string('miscellaneous'),
+ 'value' => 'optgroup'),
+
+ 'lang' => array('langstr' => get_string('preferredlanguage'),
+ 'value' => current_language()),
+ 'sitename' => array('langstr' => get_string('fullsitename'),
+ 'value' => $site->fullname),
+ 'serverurl' => array('langstr' => get_string('serverurl', 'resource', $CFG),
+ 'value' => $CFG->wwwroot),
+ 'currenttime' => array('langstr' => get_string('time'),
+ 'value' => time()),
+ 'encryptedcode' => array('langstr' => get_string('encryptedcode'),
+ 'value' => $this->set_encrypted_parameter()),
+
+ 'label6' => array('langstr' => "",
+ 'value' =>'/optgroup')
+ );
+
+}
+
+
+/**
+* Add new instance of repository resource
+*
+* Create alltext field before calling base class function.
+*
+* @param resource object
+*/
+function add_instance($resource) {
+ $optionlist = array();
+
+ for ($i = 0; $i < $this->maxparameters; $i++) {
+ $parametername = "parameter$i";
+ $parsename = "parse$i";
+ if (!empty($resource->$parsename) and $resource->$parametername != "-") {
+ $optionlist[] = $resource->$parametername."=".$resource->$parsename;
+ }
+ }
+
+ $resource->alltext = implode(',', $optionlist);
+
+ return parent::add_instance($resource);
+}
+
+
+/**
+* Update instance of repository resource
+*
+* Create alltext field before calling base class function.
+*
+* @param resource object
+*/
+function update_instance($resource) {
+ $optionlist = array();
+
+ for ($i = 0; $i < $this->maxparameters; $i++) {
+ $parametername = "parameter$i";
+ $parsename = "parse$i";
+ if (!empty($resource->$parsename) and $resource->$parametername != "-") {
+ $optionlist[] = $resource->$parametername."=".$resource->$parsename;
+ }
+ }
+
+ $resource->alltext = implode(',', $optionlist);
+
+ return parent::update_instance($resource);
+}
+
+
+/**
+* Display the repository resource
+*
+* Displays a repository resource embedded, in a frame, or in a popup.
+* Output depends on type of file resource.
+*
+* @param CFG global object
+*/
+function display() {
+ global $CFG, $THEME, $SESSION;
+
+/// Set up generic stuff first, including checking for access
+ parent::display();
+
+/// Set up some shorthand variables
+ $cm = $this->cm;
+ $course = $this->course;
+ $resource = $this->resource;
+
+
+ $this->set_parameters(); // set the parameters array
+
+///////////////////////////////////////////////
+
+ /// Possible display modes are:
+ /// File displayed in a frame in a normal window
+ /// File displayed embedded in a normal page
+ /// File displayed in a popup window
+ /// File displayed emebedded in a popup window
+
+
+ /// First, find out what sort of file we are dealing with.
+ require_once($CFG->libdir.'/filelib.php');
+
+ $querystring = '';
+ $resourcetype = '';
+ $embedded = false;
+ $mimetype = mimeinfo("type", $resource->reference);
+ $pagetitle = strip_tags($course->shortname.': '.format_string($resource->name));
+
+ if ($resource->options != "frame") {
+ if (in_array($mimetype, array('image/gif','image/jpeg','image/png'))) { // It's an image
+ $resourcetype = "image";
+ $embedded = true;
+
+ } else if ($mimetype == "audio/mp3") { // It's an MP3 audio file
+ $resourcetype = "mp3";
+ $embedded = true;
+
+ } else if (substr($mimetype, 0, 10) == "video/x-ms") { // It's a Media Player file
+ $resourcetype = "mediaplayer";
+ $embedded = true;
+
+ } else if ($mimetype == "video/quicktime") { // It's a Quicktime file
+ $resourcetype = "quicktime";
+ $embedded = true;
+
+ } else if ($mimetype == "text/html") { // It's a web page
+ $resourcetype = "html";
+ }
+ }
+
+
+
+/// Form the parse string
+ if (!empty($resource->alltext)) {
+ $querys = array();
+ $parray = explode(',', $resource->alltext);
+ foreach ($parray as $fieldstring) {
+ $field = explode('=', $fieldstring);
+ $querys[] = urlencode($field[1]).'='.urlencode($this->parameters[$field[0]]['value']);
+ }
+ $querystring = implode('&', $querys);
+ }
+
+
+ /// Set up some variables
+
+ $inpopup = !empty($_GET["inpopup"]);
+
+
+ $fullurl = $CFG->hiveprot .'://'. $CFG->hivehost .':'. $CFG->hiveport .''. $CFG->hivepath . '?'. $resource->reference . '&HIVE_SESSION='.$SESSION->HIVE_SESSION;
+
+ if (!empty($querystring)) {
+ $urlpieces = parse_url($resource->reference);
+ if (empty($urlpieces['query'])) {
+ $fullurl .= '?'.$querystring;
+ } else {
+ $fullurl .= '&'.$querystring;
+ }
+ }
+
+ /// Print a notice and redirect if we are trying to access a file on a local file system
+ /// and the config setting has been disabled
+ if (!$CFG->resource_allowlocalfiles and (strpos($resource->reference, RESOURCE_LOCALPATH) === 0)) {
+ if ($inpopup) {
+ print_header($pagetitle, $course->fullname);
+ } else {
+ print_header($pagetitle, $course->fullname, "$this->navigation ".format_string($resource->name), "", "", true, update_module_button($cm->id, $course->id, $this->strresource), navmenu($course, $cm));
+ }
+ notify(get_string('notallowedlocalfileaccess', 'resource', ''));
+ if ($inpopup) {
+ close_window_button();
+ }
+ print_footer('none');
+ die;
+ }
+
+
+ /// Check whether this is supposed to be a popup, but was called directly
+
+ if ($resource->popup and !$inpopup) { /// Make a page and a pop-up window
+
+ print_header($pagetitle, $course->fullname, "$this->navigation ".format_string($resource->name), "", "", true, update_module_button($cm->id, $course->id, $this->strresource), navmenu($course, $cm));
+
+
+ echo "\n';
+
+ if (trim(strip_tags($resource->summary))) {
+ $formatoptions->noclean = true;
+ print_simple_box(format_text($resource->summary, FORMAT_MOODLE, $formatoptions), "center");
+ }
+
+ $link = "wwwroot/mod/resource/view.php?inpopup=true&id={$cm->id}\" target=\"resource{$resource->id}\" onclick=\"return openpopup('/mod/resource/view.php?inpopup=true&id={$cm->id}', 'resource{$resource->id}','{$resource->popup}');\">".format_string($resource->name,true)." ";
+
+ echo "
";
+ echo '';
+ print_string('popupresource', 'resource');
+ echo ' ';
+ print_string('popupresourcelink', 'resource', $link);
+ echo "
";
+
+ print_footer($course);
+ exit;
+ }
+
+
+ /// Now check whether we need to display a frameset
+
+ if (empty($_GET['frameset']) and !$embedded and !$inpopup and $resource->options == "frame") {
+ echo "\n";
+ echo "\n";
+ echo '';
+ echo ' ';
+ echo "{$course->shortname}: ".strip_tags(format_string($resource->name,true))." \n";
+ echo "resource_framesize,*\">";
+ echo " id}&type={$resource->type}&frameset=top\" />";
+ if (!empty($localpath)) { // Show it like this so we interpose some HTML
+ echo " id}&type={$resource->type}&inpopup=true\" />";
+ } else {
+ echo " ";
+ }
+ echo " ";
+ echo "";
+ exit;
+ }
+
+
+ /// We can only get here once per resource, so add an entry to the log
+
+ add_to_log($course->id, "resource", "view", "view.php?id={$cm->id}", $resource->id, $cm->id);
+
+
+ /// If we are in a frameset, just print the top of it
+
+ if (!empty($_GET['frameset']) and $_GET['frameset'] == "top") {
+ print_header($pagetitle, $course->fullname, "$this->navigation ".format_string($resource->name), "", "", true, update_module_button($cm->id, $course->id, $this->strresource), navmenu($course, $cm, "parent"));
+
+ $options->para = false;
+ echo ''.format_text($resource->summary, FORMAT_HTML, $options).'
';
+ if (!empty($localpath)) { // Show some help
+ echo '';
+ link_to_popup_window ('/mod/resource/type/file/localpath.php', get_string('localfile', 'resource'), get_string('localfilehelp','resource'), 400, 500, get_string('localfilehelp', 'resource'));
+ echo '
';
+ }
+ echo '