Merge branch 'MDL-47576-master' of git://github.com/jethac/moodle
[moodle.git] / mod / lti / settings.php
CommitLineData
996b0fd9 1<?php
61eb12d4
CS
2// This file is part of Moodle - http://moodle.org/
3//
4// Moodle is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8//
9// Moodle is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
16//
996b0fd9
CS
17// This file is part of BasicLTI4Moodle
18//
19// BasicLTI4Moodle is an IMS BasicLTI (Basic Learning Tools for Interoperability)
20// consumer for Moodle 1.9 and Moodle 2.0. BasicLTI is a IMS Standard that allows web
21// based learning tools to be easily integrated in LMS as native ones. The IMS BasicLTI
22// specification is part of the IMS standard Common Cartridge 1.1 Sakai and other main LMS
23// are already supporting or going to support BasicLTI. This project Implements the consumer
24// for Moodle. Moodle is a Free Open source Learning Management System by Martin Dougiamas.
25// BasicLTI4Moodle is a project iniciated and leaded by Ludo(Marc Alier) and Jordi Piguillem
26// at the GESSI research group at UPC.
27// SimpleLTI consumer for Moodle is an implementation of the early specification of LTI
28// by Charles Severance (Dr Chuck) htp://dr-chuck.com , developed by Jordi Piguillem in a
29// Google Summer of Code 2008 project co-mentored by Charles Severance and Marc Alier.
30//
31// BasicLTI4Moodle is copyright 2009 by Marc Alier Forment, Jordi Piguillem and Nikolas Galanis
32// of the Universitat Politecnica de Catalunya http://www.upc.edu
33// Contact info: Marc Alier Forment granludo @ gmail.com or marc.alier @ upc.edu
996b0fd9
CS
34
35/**
61eb12d4 36 * This file defines the global lti administration form
996b0fd9 37 *
2b17ec3d 38 * @package mod_lti
61eb12d4 39 * @copyright 2009 Marc Alier, Jordi Piguillem, Nikolas Galanis
996b0fd9 40 * marc.alier@upc.edu
61eb12d4
CS
41 * @copyright 2009 Universitat Politecnica de Catalunya http://www.upc.edu
42 * @author Marc Alier
43 * @author Jordi Piguillem
44 * @author Nikolas Galanis
8f45215d 45 * @author Chris Scribner
61eb12d4 46 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
996b0fd9
CS
47 */
48
49defined('MOODLE_INTERNAL') || die;
50
e9033d11
MN
51/** @var admin_settingpage $settings */
52$modltifolder = new admin_category('modltifolder', new lang_string('pluginname', 'mod_lti'), $module->is_enabled() === false);
53$ADMIN->add('modsettings', $modltifolder);
54
55$ADMIN->add('modltifolder', $settings);
56
57foreach (core_plugin_manager::instance()->get_plugins_of_type('ltisource') as $plugin) {
58 /** @var \mod_lti\plugininfo\ltisource $plugin */
59 $plugin->load_settings($ADMIN, 'modltifolder', $hassiteconfig);
60}
61
996b0fd9 62if ($ADMIN->fulltree) {
b9fbe554
EL
63 require_once($CFG->dirroot.'/mod/lti/locallib.php');
64
996b0fd9
CS
65 $configuredtoolshtml = '';
66 $pendingtoolshtml = '';
67 $rejectedtoolshtml = '';
68
69 $active = get_string('active', 'lti');
70 $pending = get_string('pending', 'lti');
71 $rejected = get_string('rejected', 'lti');
d7f87343
MR
72
73 // Gather strings used for labels in the inline JS.
74 $PAGE->requires->strings_for_js(
75 array(
76 'typename',
77 'baseurl',
78 'action',
79 'createdon'
80 ),
81 'mod_lti'
82 );
e27cb316 83
b9fbe554 84 $types = lti_filter_get_types(get_site()->id);
e27cb316 85
d81a603e 86 $configuredtools = lti_filter_tool_types($types, LTI_TOOL_STATE_CONFIGURED);
e27cb316 87
996b0fd9
CS
88 $configuredtoolshtml = lti_get_tool_table($configuredtools, 'lti_configured');
89
d81a603e 90 $pendingtools = lti_filter_tool_types($types, LTI_TOOL_STATE_PENDING);
e27cb316 91
996b0fd9 92 $pendingtoolshtml = lti_get_tool_table($pendingtools, 'lti_pending');
e27cb316 93
d81a603e 94 $rejectedtools = lti_filter_tool_types($types, LTI_TOOL_STATE_REJECTED);
e27cb316 95
996b0fd9 96 $rejectedtoolshtml = lti_get_tool_table($rejectedtools, 'lti_rejected');
e27cb316 97
996b0fd9
CS
98 $tab = optional_param('tab', '', PARAM_ALPHAEXT);
99 $activeselected = '';
100 $pendingselected = '';
101 $rejectedselected = '';
ea04a9f9 102 switch ($tab) {
996b0fd9
CS
103 case 'lti_pending':
104 $pendingselected = 'class="selected"';
105 break;
106 case 'lti_rejected':
107 $rejectedselected = 'class="selected"';
108 break;
109 default:
110 $activeselected = 'class="selected"';
111 break;
112 }
e27cb316 113
5de15b83
CS
114 $template = "
115<div id=\"lti_tabs\" class=\"yui-navset\">
116 <ul id=\"lti_tab_heading\" class=\"yui-nav\" style=\"display:none\">
996b0fd9 117 <li {$activeselected}>
5de15b83 118 <a href=\"#tab1\">
996b0fd9
CS
119 <em>$active</em>
120 </a>
121 </li>
122 <li {$pendingselected}>
5de15b83 123 <a href=\"#tab2\">
996b0fd9
CS
124 <em>$pending</em>
125 </a>
126 </li>
127 <li {$rejectedselected}>
5de15b83 128 <a href=\"#tab3\">
996b0fd9
CS
129 <em>$rejected</em>
130 </a>
131 </li>
132 </ul>
5de15b83 133 <div class=\"yui-content\">
996b0fd9
CS
134 <div>
135 $configuredtoolshtml
136 </div>
137 <div>
138 $pendingtoolshtml
139 </div>
140 <div>
141 $rejectedtoolshtml
142 </div>
143 </div>
144</div>
145
5de15b83 146<script type=\"text/javascript\">
996b0fd9 147//<![CDATA[
426f2d5b 148 YUI().use('yui2-tabview', 'yui2-datatable', function(Y) {
996b0fd9
CS
149 //If javascript is disabled, they will just see the three tabs one after another
150 var lti_tab_heading = document.getElementById('lti_tab_heading');
151 lti_tab_heading.style.display = '';
152
426f2d5b 153 new Y.YUI2.widget.TabView('lti_tabs');
e27cb316 154
996b0fd9 155 var setupTools = function(id, sort){
426f2d5b 156 var lti_tools = Y.YUI2.util.Dom.get(id + '_tools');
e27cb316 157
996b0fd9 158 if(lti_tools){
426f2d5b 159 var dataSource = new Y.YUI2.util.DataSource(lti_tools);
e27cb316 160
996b0fd9 161 var configuredColumns = [
d7f87343
MR
162 {key:'name', label: M.util.get_string('typename', 'mod_lti'), sortable: true},
163 {key:'baseURL', label: M.util.get_string('baseurl', 'mod_lti'), sortable: true},
164 {key:'timecreated', label: M.util.get_string('createdon', 'mod_lti'), sortable: true},
165 {key:'action', label: M.util.get_string('action', 'mod_lti')}
996b0fd9
CS
166 ];
167
426f2d5b 168 dataSource.responseType = Y.YUI2.util.DataSource.TYPE_HTMLTABLE;
996b0fd9
CS
169 dataSource.responseSchema = {
170 fields: [
5de15b83
CS
171 {key:'name'},
172 {key:'baseURL'},
101ec5fd 173 {key:'timecreated'},
5de15b83 174 {key:'action'}
996b0fd9
CS
175 ]
176 };
177
426f2d5b 178 new Y.YUI2.widget.DataTable(id + '_container', configuredColumns, dataSource,
996b0fd9
CS
179 {
180 sortedBy: sort
181 }
182 );
183 }
184 };
185
5de15b83
CS
186 setupTools('lti_configured', {key:'name', dir:'asc'});
187 setupTools('lti_pending', {key:'timecreated', dir:'desc'});
188 setupTools('lti_rejected', {key:'timecreated', dir:'desc'});
426f2d5b 189 });
996b0fd9
CS
190//]]
191</script>
5de15b83 192";
e9033d11
MN
193 $settings->add(new admin_setting_heading('lti_types', new lang_string('external_tool_types', 'lti') . $OUTPUT->help_icon('main_admin', 'lti'), $template));
194}
8fa50fdd 195
e9033d11
MN
196if (count($modltifolder->children) <= 1) {
197 // No need for a folder, revert to default activity settings page.
198 $ADMIN->prune('modltifolder');
199} else {
200 // Using the folder, update settings name.
201 $settings->visiblename = new lang_string('ltisettings', 'mod_lti');
8fa50fdd 202
e9033d11
MN
203 // Tell core we already added the settings structure.
204 $settings = null;
996b0fd9 205}