Community block MDL-19314 better error messages when an communication error occurs...
[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');
34 require_login();
36 $PAGE->set_context(get_context_instance(CONTEXT_SYSTEM));
37 $PAGE->set_url('/blocks/community/communitycourse.php');
38 $PAGE->set_heading($SITE->fullname);
39 $PAGE->set_pagelayout('course');
40 $PAGE->set_title(get_string('searchcourse', 'block_community'));
41 $PAGE->navbar->ignore_active(true);
42 $PAGE->navbar->add(get_string('searchcourse', 'block_community'));
44 $search = optional_param('search', null, PARAM_TEXT);
46 //if no capability to search course, display an error message
47 $usercansearch = has_capability('moodle/community:add', get_context_instance(CONTEXT_USER, $USER->id));
48 $usercandownload = has_capability('moodle/community:download', get_context_instance(CONTEXT_USER, $USER->id));
49 if (empty($usercansearch)) {
50     echo $OUTPUT->header();
51     echo $OUTPUT->heading(get_string('searchcommunitycourse', 'block_community'), 3, 'main');
52     echo $OUTPUT->notification(get_string('cannotsearchcommunity', 'hub'));
53     echo $OUTPUT->footer();
54     die();
55 }
57 $communitymanager = new block_community_manager();
59 /// Check if the page has been called with trust argument
60 $add = optional_param('add', -1, PARAM_INTEGER);
61 $confirm = optional_param('confirmed', false, PARAM_INTEGER);
62 if ($add != -1 and $confirm and confirm_sesskey()) {
63     $course = new stdClass();
64     $course->name = optional_param('coursefullname', '', PARAM_TEXT);
65     $course->description = optional_param('coursedescription', '', PARAM_TEXT);
66     $course->url = optional_param('courseurl', '', PARAM_URL);
67     $course->imageurl = optional_param('courseimageurl', '', PARAM_URL);
68     $communitymanager->block_community_add_course($course, $USER->id);
69     $notificationmessage = $OUTPUT->notification(get_string('addedtoblock', 'hub'),
70                     'notifysuccess');
71 }
73 /// Download
74 $huburl = optional_param('huburl', false, PARAM_URL);
75 $download = optional_param('download', -1, PARAM_INTEGER);
76 $courseid = optional_param('courseid', '', PARAM_INTEGER);
77 $coursefullname = optional_param('coursefullname', '', PARAM_ALPHANUMEXT);
78 if ($usercandownload and $download != -1 and !empty($courseid) and confirm_sesskey()) {
79     $course = new stdClass();
80     $course->fullname = $coursefullname;
81     $course->id = $courseid;
82     $course->huburl = $huburl;
83     $communitymanager->block_community_download_course_backup($course);
84     $filename = 'backup_' . $course->fullname . "_" . $course->id . ".zip";
85     $notificationmessage = $OUTPUT->notification(get_string('downloadconfirmed', 'hub', $filename),
86                     'notifysuccess');
87 }
89 /// Remove community
90 $remove = optional_param('remove', '', PARAM_INTEGER);
91 $communityid = optional_param('communityid', '', PARAM_INTEGER);
92 if ($remove != -1 and !empty($communityid) and confirm_sesskey()) {
93     $communitymanager->block_community_remove_course($communityid, $USER->id);
94     $notificationmessage = $OUTPUT->notification(get_string('communityremoved', 'hub'),
95                     'notifysuccess');
96 }
99 $renderer = $PAGE->get_renderer('block_community');
101 //forms
102 $hubselectorform = new community_hub_search_form('', array('search' => $search));
103 $fromform = $hubselectorform->get_data();
104 $courses = null;
105 //Retrieve courses by web service
106 if (!empty($fromform)) {
107     $downloadable = optional_param('downloadable', false, PARAM_INTEGER);
109     $options = new stdClass();
110     if (!empty($fromform->coverage)) {
111         $options->coverage = $fromform->coverage;
112     }
113     if ($fromform->licence != 'all') {
114         $options->licenceshortname = $fromform->licence;
115     }
116     if ($fromform->subject != 'all') {
117         $options->subject = $fromform->subject;
118     }
119     if ($fromform->audience != 'all') {
120         $options->audience = $fromform->audience;
121     }
122     if ($fromform->educationallevel != 'all') {
123         $options->educationallevel = $fromform->educationallevel;
124     }
125     if ($fromform->language != 'all') {
126         $options->language = $fromform->language;
127     }
129     $function = 'hub_get_courses';
130     $params = array($search, $downloadable, !$downloadable, $options);
131     $serverurl = $huburl . "/local/hub/webservice/webservices.php";
132     require_once($CFG->dirroot . "/webservice/xmlrpc/lib.php");
133     $xmlrpcclient = new webservice_xmlrpc_client();
134     try {
135         $courses = $xmlrpcclient->call($serverurl, 'publichub', $function, $params);
136     } catch (Exception $e) {
137         $hubs = array();
138         $errormessage = $OUTPUT->notification(get_string('errorcourselisting', 'block_community', $e->getMessage()));
139     }
142 // OUTPUT
143 echo $OUTPUT->header();
144 echo $OUTPUT->heading(get_string('searchcommunitycourse', 'block_community'), 3, 'main');
145 if (!empty($notificationmessage)) {
146     echo $notificationmessage;
148 $hubselectorform->display();
149 if (!empty($errormessage)) {
150     echo $errormessage;
152 echo $renderer->course_list($courses, $huburl);
153 echo $OUTPUT->footer();