Skip to content

Commit b038c1e

Browse files
author
Francis Gonzales
committed
Add plugin and re organize the code
1 parent be7459d commit b038c1e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+3948
-0
lines changed

plugin/buy_courses/config.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
/* For licensing terms, see /license.txt */
3+
4+
define('TABLE_BUY_COURSE', 'plugin_buy_course');
5+
define('TABLE_BUY_COURSE_COUNTRY', 'plugin_buy_course_country');
6+
define('TABLE_BUY_COURSE_PAYPAL', 'plugin_buy_course_paypal');
7+
define('TABLE_BUY_COURSE_TRANSFERENCE', 'plugin_buy_course_transference');
8+
define('TABLE_BUY_COURSE_TEMPORAL', 'plugin_buy_course_temporal');
9+
define('TABLE_BUY_COURSE_SALE', 'plugin_buy_course_sale');
10+
11+
require_once '../../main/inc/global.inc.php';
12+
require_once api_get_path(LIBRARY_PATH) . 'plugin.class.php';
13+
require_once 'src/buy_course_plugin.class.php';

plugin/buy_courses/database.php

Lines changed: 333 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,333 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: fgonzales
5+
* Date: 21/05/14
6+
* Time: 12:19 PM
7+
*/
8+
9+
$table = Database::get_main_table(TABLE_BUY_COURSE);
10+
$sql = "CREATE TABLE IF NOT EXISTS $table (
11+
id INT unsigned NOT NULL auto_increment PRIMARY KEY,
12+
id_course INT unsigned NOT NULL DEFAULT '0',
13+
visible CHAR(2) NOT NULL DEFAULT '',
14+
price FLOAT(11,2) NOT NULL DEFAULT '0',
15+
synchronized CHAR(2) NOT NULL DEFAULT '')";
16+
Database::query($sql);
17+
18+
$sql = "SELECT id, code, title FROM course";
19+
$res = Database::query($sql);
20+
while ($row = Database::fetch_assoc($res)) {
21+
$presql = "INSERT INTO $table (id_course, code, title, visible) VALUES ('" . $row['id'] . "','" . $row['code'] . "','" . $row['title'] . "','NO')";
22+
Database::query($presql);
23+
}
24+
25+
$table = Database::get_main_table(TABLE_BUY_COURSE_COUNTRY);
26+
$sql = "CREATE TABLE IF NOT EXISTS $table (
27+
`id_country` int(5) NOT NULL AUTO_INCREMENT,
28+
`country_code` char(2) NOT NULL DEFAULT '',
29+
`country_name` varchar(45) NOT NULL DEFAULT '',
30+
`currency_code` char(3) DEFAULT NULL,
31+
`iso_alpha3` char(3) DEFAULT NULL,
32+
`status` int(1) DEFAULT '0',
33+
PRIMARY KEY (`id_country`)
34+
) DEFAULT CHARSET=utf8 AUTO_INCREMENT=0;";
35+
Database::query($sql);
36+
37+
$sql = "CREATE UNIQUE INDEX index_country ON $table (`country_code`)";
38+
Database::query($sql);
39+
40+
$sql = "INSERT INTO $table (`country_code`, `country_name`, `currency_code`, `iso_alpha3`) VALUES
41+
('AD', 'Andorra', 'EUR', 'AND'),
42+
('AE', 'United Arab Emirates', 'AED', 'ARE'),
43+
('AF', 'Afghanistan', 'AFN', 'AFG'),
44+
('AG', 'Antigua and Barbuda', 'XCD', 'ATG'),
45+
('AI', 'Anguilla', 'XCD', 'AIA'),
46+
('AL', 'Albania', 'ALL', 'ALB'),
47+
('AM', 'Armenia', 'AMD', 'ARM'),
48+
('AO', 'Angola', 'AOA', 'AGO'),
49+
('AR', 'Argentina', 'ARS', 'ARG'),
50+
('AS', 'American Samoa', 'USD', 'ASM'),
51+
('AT', 'Austria', 'EUR', 'AUT'),
52+
('AU', 'Australia', 'AUD', 'AUS'),
53+
('AW', 'Aruba', 'AWG', 'ABW'),
54+
('AX', '&Aring;land', 'EUR', 'ALA'),
55+
('AZ', 'Azerbaijan', 'AZN', 'AZE'),
56+
('BA', 'Bosnia and Herzegovina', 'BAM', 'BIH'),
57+
('BB', 'Barbados', 'BBD', 'BRB'),
58+
('BD', 'Bangladesh', 'BDT', 'BGD'),
59+
('BE', 'Belgium', 'EUR', 'BEL'),
60+
('BF', 'Burkina Faso', 'XOF', 'BFA'),
61+
('BG', 'Bulgaria', 'BGN', 'BGR'),
62+
('BH', 'Bahrain', 'BHD', 'BHR'),
63+
('BI', 'Burundi', 'BIF', 'BDI'),
64+
('BJ', 'Benin', 'XOF', 'BEN'),
65+
('BL', 'Saint Barth&eacute;lemy', 'EUR', 'BLM'),
66+
('BM', 'Bermuda', 'BMD', 'BMU'),
67+
('BN', 'Brunei', 'BND', 'BRN'),
68+
('BO', 'Bolivia', 'BOB', 'BOL'),
69+
('BQ', 'Bonaire', 'USD', 'BES'),
70+
('BR', 'Brazil', 'BRL', 'BRA'),
71+
('BS', 'Bahamas', 'BSD', 'BHS'),
72+
('BT', 'Bhutan', 'BTN', 'BTN'),
73+
('BV', 'Bouvet Island', 'NOK', 'BVT'),
74+
('BW', 'Botswana', 'BWP', 'BWA'),
75+
('BY', 'Belarus', 'BYR', 'BLR'),
76+
('BZ', 'Belize', 'BZD', 'BLZ'),
77+
('CA', 'Canada', 'CAD', 'CAN'),
78+
('CC', 'Cocos [Keeling] Islands', 'AUD', 'CCK'),
79+
('CD', 'Congo', 'CDF', 'COD'),
80+
('CF', 'Central African Republic', 'XAF', 'CAF'),
81+
('CG', 'Republic of the Congo', 'XAF', 'COG'),
82+
('CH', 'Switzerland', 'CHF', 'CHE'),
83+
('CI', 'Ivory Coast', 'XOF', 'CIV'),
84+
('CK', 'Cook Islands', 'NZD', 'COK'),
85+
('CL', 'Chile', 'CLP', 'CHL'),
86+
('CM', 'Cameroon', 'XAF', 'CMR'),
87+
('CN', 'China', 'CNY', 'CHN'),
88+
('CO', 'Colombia', 'COP', 'COL'),
89+
('CR', 'Costa Rica', 'CRC', 'CRI'),
90+
('CU', 'Cuba', 'CUP', 'CUB'),
91+
('CV', 'Cape Verde', 'CVE', 'CPV'),
92+
('CW', 'Curacao', 'ANG', 'CUW'),
93+
('CX', 'Christmas Island', 'AUD', 'CXR'),
94+
('CY', 'Cyprus', 'EUR', 'CYP'),
95+
('CZ', 'Czechia', 'CZK', 'CZE'),
96+
('DE', 'Germany', 'EUR', 'DEU'),
97+
('DJ', 'Djibouti', 'DJF', 'DJI'),
98+
('DK', 'Denmark', 'DKK', 'DNK'),
99+
('DM', 'Dominica', 'XCD', 'DMA'),
100+
('DO', 'Dominican Republic', 'DOP', 'DOM'),
101+
('DZ', 'Algeria', 'DZD', 'DZA'),
102+
('EC', 'Ecuador', 'USD', 'ECU'),
103+
('EE', 'Estonia', 'EUR', 'EST'),
104+
('EG', 'Egypt', 'EGP', 'EGY'),
105+
('EH', 'Western Sahara', 'MAD', 'ESH'),
106+
('ER', 'Eritrea', 'ERN', 'ERI'),
107+
('ES', 'Spain', 'EUR', 'ESP'),
108+
('ET', 'Ethiopia', 'ETB', 'ETH'),
109+
('FI', 'Finland', 'EUR', 'FIN'),
110+
('FJ', 'Fiji', 'FJD', 'FJI'),
111+
('FK', 'Falkland Islands', 'FKP', 'FLK'),
112+
('FM', 'Micronesia', 'USD', 'FSM'),
113+
('FO', 'Faroe Islands', 'DKK', 'FRO'),
114+
('FR', 'France', 'EUR', 'FRA'),
115+
('GA', 'Gabon', 'XAF', 'GAB'),
116+
('GB', 'United Kingdom', 'GBP', 'GBR'),
117+
('GD', 'Grenada', 'XCD', 'GRD'),
118+
('GE', 'Georgia', 'GEL', 'GEO'),
119+
('GF', 'French Guiana', 'EUR', 'GUF'),
120+
('GG', 'Guernsey', 'GBP', 'GGY'),
121+
('GH', 'Ghana', 'GHS', 'GHA'),
122+
('GI', 'Gibraltar', 'GIP', 'GIB'),
123+
('GL', 'Greenland', 'DKK', 'GRL'),
124+
('GM', 'Gambia', 'GMD', 'GMB'),
125+
('GN', 'Guinea', 'GNF', 'GIN'),
126+
('GP', 'Guadeloupe', 'EUR', 'GLP'),
127+
('GQ', 'Equatorial Guinea', 'XAF', 'GNQ'),
128+
('GR', 'Greece', 'EUR', 'GRC'),
129+
('GS', 'South Georgia and the South Sandwich Islands', 'GBP', 'SGS'),
130+
('GT', 'Guatemala', 'GTQ', 'GTM'),
131+
('GU', 'Guam', 'USD', 'GUM'),
132+
('GW', 'Guinea-Bissau', 'XOF', 'GNB'),
133+
('GY', 'Guyana', 'GYD', 'GUY'),
134+
('HK', 'Hong Kong', 'HKD', 'HKG'),
135+
('HM', 'Heard Island and McDonald Islands', 'AUD', 'HMD'),
136+
('HN', 'Honduras', 'HNL', 'HND'),
137+
('HR', 'Croatia', 'HRK', 'HRV'),
138+
('HT', 'Haiti', 'HTG', 'HTI'),
139+
('HU', 'Hungary', 'HUF', 'HUN'),
140+
('ID', 'Indonesia', 'IDR', 'IDN'),
141+
('IE', 'Ireland', 'EUR', 'IRL'),
142+
('IL', 'Israel', 'ILS', 'ISR'),
143+
('IM', 'Isle of Man', 'GBP', 'IMN'),
144+
('IN', 'India', 'INR', 'IND'),
145+
('IO', 'British Indian Ocean Territory', 'USD', 'IOT'),
146+
('IQ', 'Iraq', 'IQD', 'IRQ'),
147+
('IR', 'Iran', 'IRR', 'IRN'),
148+
('IS', 'Iceland', 'ISK', 'ISL'),
149+
('IT', 'Italy', 'EUR', 'ITA'),
150+
('JE', 'Jersey', 'GBP', 'JEY'),
151+
('JM', 'Jamaica', 'JMD', 'JAM'),
152+
('JO', 'Jordan', 'JOD', 'JOR'),
153+
('JP', 'Japan', 'JPY', 'JPN'),
154+
('KE', 'Kenya', 'KES', 'KEN'),
155+
('KG', 'Kyrgyzstan', 'KGS', 'KGZ'),
156+
('KH', 'Cambodia', 'KHR', 'KHM'),
157+
('KI', 'Kiribati', 'AUD', 'KIR'),
158+
('KM', 'Comoros', 'KMF', 'COM'),
159+
('KN', 'Saint Kitts and Nevis', 'XCD', 'KNA'),
160+
('KP', 'North Korea', 'KPW', 'PRK'),
161+
('KR', 'South Korea', 'KRW', 'KOR'),
162+
('KW', 'Kuwait', 'KWD', 'KWT'),
163+
('KY', 'Cayman Islands', 'KYD', 'CYM'),
164+
('KZ', 'Kazakhstan', 'KZT', 'KAZ'),
165+
('LA', 'Laos', 'LAK', 'LAO'),
166+
('LB', 'Lebanon', 'LBP', 'LBN'),
167+
('LC', 'Saint Lucia', 'XCD', 'LCA'),
168+
('LI', 'Liechtenstein', 'CHF', 'LIE'),
169+
('LK', 'Sri Lanka', 'LKR', 'LKA'),
170+
('LR', 'Liberia', 'LRD', 'LBR'),
171+
('LS', 'Lesotho', 'LSL', 'LSO'),
172+
('LT', 'Lithuania', 'LTL', 'LTU'),
173+
('LU', 'Luxembourg', 'EUR', 'LUX'),
174+
('LV', 'Latvia', 'LVL', 'LVA'),
175+
('LY', 'Libya', 'LYD', 'LBY'),
176+
('MA', 'Morocco', 'MAD', 'MAR'),
177+
('MC', 'Monaco', 'EUR', 'MCO'),
178+
('MD', 'Moldova', 'MDL', 'MDA'),
179+
('ME', 'Montenegro', 'EUR', 'MNE'),
180+
('MF', 'Saint Martin', 'EUR', 'MAF'),
181+
('MG', 'Madagascar', 'MGA', 'MDG'),
182+
('MH', 'Marshall Islands', 'USD', 'MHL'),
183+
('MK', 'Macedonia', 'MKD', 'MKD'),
184+
('ML', 'Mali', 'XOF', 'MLI'),
185+
('MM', 'Myanmar [Burma]', 'MMK', 'MMR'),
186+
('MN', 'Mongolia', 'MNT', 'MNG'),
187+
('MO', 'Macao', 'MOP', 'MAC'),
188+
('MP', 'Northern Mariana Islands', 'USD', 'MNP'),
189+
('MQ', 'Martinique', 'EUR', 'MTQ'),
190+
('MR', 'Mauritania', 'MRO', 'MRT'),
191+
('MS', 'Montserrat', 'XCD', 'MSR'),
192+
('MT', 'Malta', 'EUR', 'MLT'),
193+
('MU', 'Mauritius', 'MUR', 'MUS'),
194+
('MV', 'Maldives', 'MVR', 'MDV'),
195+
('MW', 'Malawi', 'MWK', 'MWI'),
196+
('MX', 'Mexico', 'MXN', 'MEX'),
197+
('MY', 'Malaysia', 'MYR', 'MYS'),
198+
('MZ', 'Mozambique', 'MZN', 'MOZ'),
199+
('NA', 'Namibia', 'NAD', 'NAM'),
200+
('NC', 'New Caledonia', 'XPF', 'NCL'),
201+
('NE', 'Niger', 'XOF', 'NER'),
202+
('NF', 'Norfolk Island', 'AUD', 'NFK'),
203+
('NG', 'Nigeria', 'NGN', 'NGA'),
204+
('NI', 'Nicaragua', 'NIO', 'NIC'),
205+
('NL', 'Netherlands', 'EUR', 'NLD'),
206+
('NO', 'Norway', 'NOK', 'NOR'),
207+
('NP', 'Nepal', 'NPR', 'NPL'),
208+
('NR', 'Nauru', 'AUD', 'NRU'),
209+
('NU', 'Niue', 'NZD', 'NIU'),
210+
('NZ', 'New Zealand', 'NZD', 'NZL'),
211+
('OM', 'Oman', 'OMR', 'OMN'),
212+
('PA', 'Panama', 'PAB', 'PAN'),
213+
('PE', 'Peru', 'PEN', 'PER'),
214+
('PF', 'French Polynesia', 'XPF', 'PYF'),
215+
('PG', 'Papua New Guinea', 'PGK', 'PNG'),
216+
('PH', 'Philippines', 'PHP', 'PHL'),
217+
('PK', 'Pakistan', 'PKR', 'PAK'),
218+
('PL', 'Poland', 'PLN', 'POL'),
219+
('PM', 'Saint Pierre and Miquelon', 'EUR', 'SPM'),
220+
('PN', 'Pitcairn Islands', 'NZD', 'PCN'),
221+
('PR', 'Puerto Rico', 'USD', 'PRI'),
222+
('PS', 'Palestine', 'ILS', 'PSE'),
223+
('PT', 'Portugal', 'EUR', 'PRT'),
224+
('PW', 'Palau', 'USD', 'PLW'),
225+
('PY', 'Paraguay', 'PYG', 'PRY'),
226+
('QA', 'Qatar', 'QAR', 'QAT'),
227+
('RE', 'R&eacute;union', 'EUR', 'REU'),
228+
('RO', 'Romania', 'RON', 'ROU'),
229+
('RS', 'Serbia', 'RSD', 'SRB'),
230+
('RU', 'Russia', 'RUB', 'RUS'),
231+
('RW', 'Rwanda', 'RWF', 'RWA'),
232+
('SA', 'Saudi Arabia', 'SAR', 'SAU'),
233+
('SB', 'Solomon Islands', 'SBD', 'SLB'),
234+
('SC', 'Seychelles', 'SCR', 'SYC'),
235+
('SD', 'Sudan', 'SDG', 'SDN'),
236+
('SE', 'Sweden', 'SEK', 'SWE'),
237+
('SG', 'Singapore', 'SGD', 'SGP'),
238+
('SH', 'Saint Helena', 'SHP', 'SHN'),
239+
('SI', 'Slovenia', 'EUR', 'SVN'),
240+
('SJ', 'Svalbard and Jan Mayen', 'NOK', 'SJM'),
241+
('SK', 'Slovakia', 'EUR', 'SVK'),
242+
('SL', 'Sierra Leone', 'SLL', 'SLE'),
243+
('SM', 'San Marino', 'EUR', 'SMR'),
244+
('SN', 'Senegal', 'XOF', 'SEN'),
245+
('SO', 'Somalia', 'SOS', 'SOM'),
246+
('SR', 'Suriname', 'SRD', 'SUR'),
247+
('SS', 'South Sudan', 'SSP', 'SSD'),
248+
('ST', 'S&atilde;o Tom&eacute; and Pr&iacute;ncipe', 'STD', 'STP'),
249+
('SV', 'El Salvador', 'USD', 'SLV'),
250+
('SX', 'Sint Maarten', 'ANG', 'SXM'),
251+
('SY', 'Syria', 'SYP', 'SYR'),
252+
('SZ', 'Swaziland', 'SZL', 'SWZ'),
253+
('TC', 'Turks and Caicos Islands', 'USD', 'TCA'),
254+
('TD', 'Chad', 'XAF', 'TCD'),
255+
('TF', 'French Southern Territories', 'EUR', 'ATF'),
256+
('TG', 'Togo', 'XOF', 'TGO'),
257+
('TH', 'Thailand', 'THB', 'THA'),
258+
('TJ', 'Tajikistan', 'TJS', 'TJK'),
259+
('TK', 'Tokelau', 'NZD', 'TKL'),
260+
('TL', 'East Timor', 'USD', 'TLS'),
261+
('TM', 'Turkmenistan', 'TMT', 'TKM'),
262+
('TN', 'Tunisia', 'TND', 'TUN'),
263+
('TO', 'Tonga', 'TOP', 'TON'),
264+
('TR', 'Turkey', 'TRY', 'TUR'),
265+
('TT', 'Trinidad and Tobago', 'TTD', 'TTO'),
266+
('TV', 'Tuvalu', 'AUD', 'TUV'),
267+
('TW', 'Taiwan', 'TWD', 'TWN'),
268+
('TZ', 'Tanzania', 'TZS', 'TZA'),
269+
('UA', 'Ukraine', 'UAH', 'UKR'),
270+
('UG', 'Uganda', 'UGX', 'UGA'),
271+
('UM', 'U.S. Minor Outlying Islands', 'USD', 'UMI'),
272+
('US', 'United States', 'USD', 'USA'),
273+
('UY', 'Uruguay', 'UYU', 'URY'),
274+
('UZ', 'Uzbekistan', 'UZS', 'UZB'),
275+
('VA', 'Vatican City', 'EUR', 'VAT'),
276+
('VC', 'Saint Vincent and the Grenadines', 'XCD', 'VCT'),
277+
('VE', 'Venezuela', 'VEF', 'VEN'),
278+
('VG', 'British Virgin Islands', 'USD', 'VGB'),
279+
('VI', 'U.S. Virgin Islands', 'USD', 'VIR'),
280+
('VN', 'Vietnam', 'VND', 'VNM'),
281+
('VU', 'Vanuatu', 'VUV', 'VUT'),
282+
('WF', 'Wallis and Futuna', 'XPF', 'WLF'),
283+
('WS', 'Samoa', 'WST', 'WSM'),
284+
('XK', 'Kosovo', 'EUR', 'XKX'),
285+
('YE', 'Yemen', 'YER', 'YEM'),
286+
('YT', 'Mayotte', 'EUR', 'MYT'),
287+
('ZA', 'South Africa', 'ZAR', 'ZAF'),
288+
('ZM', 'Zambia', 'ZMK', 'ZMB'),
289+
('ZW', 'Zimbabwe', 'ZWL', 'ZWE')";
290+
Database::query($sql);
291+
292+
$table = Database::get_main_table(TABLE_BUY_COURSE_PAYPAL);
293+
$sql = "CREATE TABLE IF NOT EXISTS $table (
294+
id INT unsigned NOT NULL auto_increment PRIMARY KEY,
295+
sandbox VARCHAR(5) NOT NULL DEFAULT 'SI',
296+
username VARCHAR(100) NOT NULL DEFAULT '',
297+
password VARCHAR(100) NOT NULL DEFAULT '',
298+
signature VARCHAR(100) NOT NULL DEFAULT '')";
299+
Database::query($sql);
300+
301+
$sql = "INSERT INTO $table (id,username,password,signature) VALUES ('1', 'API_UserName', 'API_Password', 'API_Signature')";
302+
Database::query($sql);
303+
304+
$table = Database::get_main_table(TABLE_BUY_COURSE_TRANSFERENCE);
305+
$sql = "CREATE TABLE IF NOT EXISTS $table (
306+
id INT unsigned NOT NULL auto_increment PRIMARY KEY,
307+
name VARCHAR(100) NOT NULL DEFAULT '',
308+
account VARCHAR(100) NOT NULL DEFAULT '',
309+
swift VARCHAR(100) NOT NULL DEFAULT '')";
310+
Database::query($sql);
311+
312+
$table = Database::get_main_table(TABLE_BUY_COURSE_TEMPORAL);
313+
$sql = "CREATE TABLE IF NOT EXISTS $table (
314+
cod INT unsigned NOT NULL auto_increment PRIMARY KEY,
315+
user_id INT unsigned NOT NULL,
316+
name VARCHAR(255) NOT NULL DEFAULT '',
317+
course_code VARCHAR(200) NOT NULL DEFAULT '',
318+
title VARCHAR(200) NOT NULL DEFAULT '',
319+
reference VARCHAR(20) NOT NULL DEFAULT '',
320+
price FLOAT(11,2) NOT NULL DEFAULT '0',
321+
date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP)";
322+
Database::query($sql);
323+
324+
$table = Database::get_main_table(TABLE_BUY_COURSE_TEMPORAL);
325+
$sql = "CREATE TABLE IF NOT EXISTS $table (
326+
cod INT unsigned NOT NULL auto_increment PRIMARY KEY,
327+
user_id INT unsigned NOT NULL,
328+
course_code VARCHAR(200) NOT NULL DEFAULT '',
329+
price FLOAT(11,2) NOT NULL DEFAULT '0',
330+
payment_type VARCHAR(100) NOT NULL DEFAULT '',
331+
status VARCHAR(20) NOT NULL DEFAULT '',
332+
date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP)";
333+
Database::query($sql);

plugin/buy_courses/index.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
/**
4+
* Show form
5+
*/
6+
require_once('config.php');
7+
require_once('src/index.buycourses.php');

plugin/buy_courses/install.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
/**
3+
* This script is included by main/admin/settings.lib.php and generally
4+
* includes things to execute in the main database (settings_current table)
5+
* @package chamilo.plugin.bigbluebutton
6+
*/
7+
/**
8+
* Initialization
9+
*/
10+
11+
require_once dirname(__FILE__) . '/config.php';
12+
Buy_CoursesPlugin::create()->install();

0 commit comments

Comments
 (0)