community hub MDL-24097 change backup zip extension to mbz extension
[moodle.git] / blocks / community / communitycourse.php
1 <?php
3 // This file is part of Moodle - http://moodle.org/
4 //
5 // Moodle is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // Moodle is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
18 /*
19  * @package    blocks
20  * @subpackage community
21  * @author     Jerome Mouneyrac <jerome@mouneyrac.com>
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL
23  * @copyright  (C) 1999 onwards Martin Dougiamas  http://dougiamas.com
24  *
25  * This page display the community course search form.
26  * It also handles adding a course to the community block.
27  * It also handles downloading a course template.
28  */
30 require('../../config.php');
31 require_once($CFG->dirroot . '/blocks/community/locallib.php');
32 require_once($CFG->dirroot . '/blocks/community/forms.php');
33 require_once($CFG->dirroot . '/admin/registration/lib.php');
35 require_login();
37 $courseid = optional_param('courseid', 0, PARAM_INT);
38 $context = get_context_instance(CONTEXT_COURSE, $courseid);
40 $PAGE->set_context($context);
41 $PAGE->set_url('/blocks/community/communitycourse.php');
42 $PAGE->set_heading($SITE->fullname);
43 $PAGE->set_pagelayout('course');
44 $PAGE->set_title(get_string('searchcourse', 'block_community'));
45 $PAGE->navbar->ignore_active(true);
46 $PAGE->navbar->add(get_string('searchcourse', 'block_community'));
48 $search = optional_param('search', null, PARAM_TEXT);
50 //if no capability to search course, display an error message
51 $usercansearch = has_capability('moodle/community:add', $context);
52 $usercandownload = has_capability('moodle/community:download', $context);
53 if (empty($usercansearch)) {
54     $notificationerror = get_string('cannotsearchcommunity', 'hub');
55 } else if (!extension_loaded('xmlrpc')) {
56     $notificationerror = $OUTPUT->doc_link('admin/environment/php_extension/xmlrpc', '');
57     $notificationerror .= get_string('xmlrpcdisabledcommunity', 'hub');
58 }
59 if (!empty($notificationerror)) {
60     echo $OUTPUT->header();
61     echo $OUTPUT->heading(get_string('searchcommunitycourse', 'block_community'), 3, 'main');
62     echo $OUTPUT->notification($notificationerror);
63     echo $OUTPUT->footer();
64     die();
65 }
67 $communitymanager = new block_community_manager();
68 $renderer = $PAGE->get_renderer('block_community');
70 /// Check if the page has been called with trust argument
71 $add = optional_param('add', -1, PARAM_INTEGER);
72 $confirm = optional_param('confirmed', false, PARAM_INTEGER);
73 if ($add != -1 and $confirm and confirm_sesskey()) {
74     $course = new stdClass();
75     $course->name = optional_param('coursefullname', '', PARAM_TEXT);
76     $course->description = optional_param('coursedescription', '', PARAM_TEXT);
77     $course->url = optional_param('courseurl', '', PARAM_URL);
78     $course->imageurl = optional_param('courseimageurl', '', PARAM_URL);
79     $communitymanager->block_community_add_course($course, $USER->id);
80     $notificationmessage = $OUTPUT->notification(get_string('addedtoblock', 'hub'),
81                     'notifysuccess');
82 }
84 /// Delete temp file when cancel restore
85 $cancelrestore = optional_param('cancelrestore', false, PARAM_INT);
86 if ($usercandownload and $cancelrestore and confirm_sesskey()) {
87     $filename = optional_param('filename', '', PARAM_ALPHANUMEXT);
88     //delete temp file
89     unlink($CFG->dataroot . '/temp/backup/' . $filename . ".mbz");
90 }
92 /// Download
93 $huburl = optional_param('huburl', false, PARAM_URL);
94 $download = optional_param('download', -1, PARAM_INTEGER);
95 $downloadcourseid = optional_param('downloadcourseid', '', PARAM_INTEGER);
96 $coursefullname = optional_param('coursefullname', '', PARAM_ALPHANUMEXT);
97 if ($usercandownload and $download != -1 and !empty($downloadcourseid) and confirm_sesskey()) {
98     $course = new stdClass();
99     $course->fullname = $coursefullname;
100     $course->id = $downloadcourseid;
101     $course->huburl = $huburl;
102     $filenames = $communitymanager->block_community_download_course_backup($course);
104     //OUTPUT: display restore choice page
105     echo $OUTPUT->header();
106     echo $OUTPUT->heading(get_string('restorecourse', 'block_community'), 3, 'main');
107     echo $OUTPUT->notification(get_string('downloadconfirmed', 'block_community',
108                     '/downloaded_backup/' . $filenames['privatefile']), 'notifysuccess');
109     echo $renderer->restore_confirmation_box($filenames['tmpfile'], $context);
110     echo $OUTPUT->footer();
111     die();
114 /// Remove community
115 $remove = optional_param('remove', '', PARAM_INTEGER);
116 $communityid = optional_param('communityid', '', PARAM_INTEGER);
117 if ($remove != -1 and !empty($communityid) and confirm_sesskey()) {
118     $communitymanager->block_community_remove_course($communityid, $USER->id);
119     $notificationmessage = $OUTPUT->notification(get_string('communityremoved', 'hub'),
120                     'notifysuccess');
123 //forms
124 $hubselectorform = new community_hub_search_form('',
125                 array('search' => $search, 'courseid' => $courseid));
126 $fromform = $hubselectorform->get_data();
127 $courses = null;
128 //Retrieve courses by web service
129 if (!empty($fromform)) {
130     $downloadable = optional_param('downloadable', false, PARAM_INTEGER);
132     $options = new stdClass();
133     if (!empty($fromform->coverage)) {
134         $options->coverage = $fromform->coverage;
135     }
136     if ($fromform->licence != 'all') {
137         $options->licenceshortname = $fromform->licence;
138     }
139     if ($fromform->subject != 'all') {
140         $options->subject = $fromform->subject;
141     }
142     if ($fromform->audience != 'all') {
143         $options->audience = $fromform->audience;
144     }
145     if ($fromform->educationallevel != 'all') {
146         $options->educationallevel = $fromform->educationallevel;
147     }
148     if ($fromform->language != 'all') {
149         $options->language = $fromform->language;
150     }
152     //check if the selected hub is from the registered list (in this case we use the private token)
153     $token = 'publichub';
154     $registrationmanager = new registration_manager();
155     $registeredhubs = $registrationmanager->get_registered_on_hubs();
156     foreach ($registeredhubs as $registeredhub) {
157         if ($huburl == $registeredhub->huburl) {
158             $token = $registeredhub->token;
159         }
160     }
162     $function = 'hub_get_courses';
163     $params = array('search' => $search, 'downloadable' => $downloadable,
164         'enrollable' => !$downloadable, 'options' => $options);
165     $serverurl = $huburl . "/local/hub/webservice/webservices.php";
166     require_once($CFG->dirroot . "/webservice/xmlrpc/lib.php");
167     $xmlrpcclient = new webservice_xmlrpc_client($serverurl, $token);
168     try {
169         $courses = $xmlrpcclient->call($function, $params);
170     } catch (Exception $e) {
171         $errormessage = $OUTPUT->notification(
172                         get_string('errorcourselisting', 'block_community', $e->getMessage()));
173     }
176 // OUTPUT
177 echo $OUTPUT->header();
178 echo $OUTPUT->heading(get_string('searchcommunitycourse', 'block_community'), 3, 'main');
179 if (!empty($notificationmessage)) {
180     echo $notificationmessage;
182 $hubselectorform->display();
183 if (!empty($errormessage)) {
184     echo $errormessage;
187 //load javascript
188 $courseids = array();
189 if (!empty($courses)) {
190     foreach ($courses as $course) {
191         if (!empty($course['comments'])) {
192             $courseids[] = $course['id'];
193         }
194     }
196 $PAGE->requires->yui_module('moodle-block_community-comments', 'M.blocks_community.init_comments',
197         array(array('commentids' => $courseids)));
199 echo highlight($search, $renderer->course_list($courses, $huburl, $courseid));
200 echo $OUTPUT->footer();