0c218c34 by logesh

added mandatory activities files

0 parents
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/*
* Handling all ajax request of mandatory activities
*
* @package local_mandatoryactivities
* @author logesh<logesh@teknoturf.com>
*/
define ( 'AJAX_SCRIPT', true );
define ( 'NO_DEBUG_DISPLAY', true );
require_once (dirname ( __FILE__ ) . '/../../config.php');
$action = optional_param ( 'action', '', PARAM_RAW );
$cmids = optional_param_array ( 'cmids', null, PARAM_RAW );
$course = optional_param ( 'course', 0, PARAM_RAW );
Global $DB, $CFG, $USER;
switch ($action) {
case 'savemandatoryids':
$madatorycmids= implode(', ', $cmids);
$sql="select * from {local_mandatory_activities} where course=?";
$mandatoryactivities = $DB->get_record_sql($sql,array($course));
if (isset($mandatoryactivities->id)){
$instance = new stdClass();
$instance->id=$mandatoryactivities->id;
$instance->course = $course;
$instance->cmid = $madatorycmids;
$instance->mandatory = $mandatoryactivities->mandatory;
$DB->update_record('local_mandatory_activities', $instance);
}else{
$instance = new stdClass();
$instance->course = $course;
$instance->cmid = $madatorycmids;
$instance->mandatory = 1;
$DB->insert_record('local_mandatory_activities', $instance);
}
echo json_encode(true);
die();
case 'getcomparision':
$checkedids = optional_param_array( 'checked', null, PARAM_RAW );
$mandatoryids = optional_param( 'mandatory', '', PARAM_RAW );
$newlyaddedids=array();
$newlyaddedactivities=array();
$removedids=array();
$removedactivities=array();
$unchangedids=array();
$unchangedactivities=array();
$sql="select mcm.id,mm.name,mcm.instance from mdl_course_modules mcm join mdl_modules mm on mm.id=mcm.module where mcm.course=$course";
$qresult=$DB->get_records_sql($sql);
$allcmids=array();
foreach ($qresult as $value){
$allcmids[]=$value->id;
}
if ($mandatoryids && $checkedids){
$previousestatus=explode(",",$mandatoryids);
foreach($checkedids as $id){
//iterate to get newly added id's
if (in_array($id, $previousestatus)){
//
}else{
$id=number_format($id);
$modaname=$qresult[$id]->name;
$instance=$qresult[$id]->instance;
$sqlactivityname="select name from mdl_$modaname where id=$instance";
$aname=$DB->get_record_sql($sqlactivityname);
$newlyaddedactivities[]=$aname;
$newlyaddedids[]=$id;
}
}
//iterate to get removed id's
foreach($previousestatus as $id){
if (in_array($id, $checkedids)){
//
}else{
$id=number_format($id);
$modaname=$qresult[$id]->name;
$instance=$qresult[$id]->instance;
$sqlactivityname="select name from mdl_$modaname where id=$instance";
$aname=$DB->get_record_sql($sqlactivityname);
$removedactivities[]=$aname;
$removedids[]=$id;
}
}
$res=array_diff($allcmids,$newlyaddedids);
$unchangedids=array_diff($res,$removedids);
foreach ($unchangedids as $data){
$id=number_format($data);
$modaname=$qresult[$data]->name;
$instance=$qresult[$data]->instance;
$sqlactivityname="select name from mdl_$modaname where id=$instance";
$aname=$DB->get_record_sql($sqlactivityname);
$unchangedactivities[]=$aname;
}
}else{
foreach ($qresult as $val){
$modaname=$val->name;
$instance=$val->instance;
$sqlactivityname="select name from mdl_$modaname where id=$instance";
$aname=$DB->get_record_sql($sqlactivityname);
$unchangedactivities[]=$aname;
}
}
$data = array();
$data['removed'] = $removedactivities;
$data['newlyadded'] = $newlyaddedactivities;
$data['unchanged'] = $unchangedactivities;
echo json_encode($data);
die();
}
\ No newline at end of file
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* @package local_mandatoryactivities
* @author 2020 Logesh <logesh@teknoturf.com>
*
*/
/*
* This file does nothing as of now. Just written some empty funcitons to prevent
* installation errors :p
*/
defined('MOODLE_INTERNAL') || die();
/**
* Post installation procedure
*
* @see upgrade_plugins_modules()
*/
function xmldb_local_mandatoryactivities_install() {
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<XMLDB PATH="local/mandatoryactivities/db" VERSION="20200824" COMMENT="XMLDB file for Moodle local/mandatoryactivities"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd">
<TABLES>
<TABLE NAME="local_mandatory_activities" COMMENT="Track list of mandatory activities">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
<FIELD NAME="course" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="cmid" TYPE="text" LENGTH="big" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="mandatory" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS>
</TABLE>
</TABLES>
</XMLDB>
\ No newline at end of file
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Plugin upgrade
*
* @package local_mandatoryactivities
* @copyright 2020 Logesh <logesh@teknoturf.com>
*
*/
defined( 'MOODLE_INTERNAL' ) || die();
function xmldb_local_mandatoryactivities_upgrade($oldversion = 0) {
global $CFG, $DB,$USER;
$dbman = $DB->get_manager();
return true;
}
\ No newline at end of file
<?php
require_once(dirname(__FILE__) . '/../../config.php');
global $USER, $CFG, $PAGE, $COURSE,$DB, $context;
$courseid = required_param('courseid', PARAM_INT);
if (!$course = $DB->get_record('course', array('id'=>$courseid))) {
print_error("invalidcourseid");
}
$PAGE->set_url('/local/mandatoryactivities/editsettings.php?courseid='.$courseid, array('id'=>$courseid));
require_login($course);
$context = context_course::instance($courseid);
$PAGE->set_pagelayout('incourse');
$pagename = "Mandatory Activities";
$PAGE->navbar->add($pagename);
$PAGE->set_title($course->fullname.': '.$pagename);
$PAGE->set_heading($course->fullname.': '.$pagename);
$PAGE->set_title ("Mandatory Activities");
//get module names
$sqlmod="select name from mdl_modules mm where id in (select distinct module from mdl_course_modules mcm where course=$courseid) order by name Asc";
$modules=$DB->get_records_sql($sqlmod);
//get mandate activities
$sqlmandate="select * from {local_mandatory_activities} where course=$courseid";
$mandateacty=$DB->get_record_sql($sqlmandate);
if ($mandateacty){
$madatorycmids= explode(',', $mandateacty->cmid);
$templatecontext['new'] = true;
}else{
$madatorycmids=array();
$templatecontext['new'] = false;
}
$tabledata="";
$comparisiontable="";
$i=0;$j=0;
foreach ($modules as $mod){
$tablenme='mdl_'.$mod->name;
$sqlactivities="select mv.*,mcm.id as cmid,mcm.availability as randomized from $tablenme mv join mdl_course_modules mcm on mcm.instance=mv.id where
mv.course=$courseid and mcm.module=(select id from mdl_modules mm where name ='$mod->name') order by mv.id asc";
$allactivities=$DB->get_records_sql($sqlactivities);
$span=count($allactivities);
$tabledata .="<tr class='modname' data-modname='$mod->name' id='modname'><td rowspan='$span'>$mod->name</td>";
foreach ($allactivities as $activity){
if (in_array($activity->cmid, $madatorycmids)){
$values='<div class="form-check ">
<label class="form-check-label" for="check1" ';
if (!empty($activity->randomized)) {
$values .='title="Randomized activity cannot be choosed as a mandatory activity"';
}
$values .='><input type="checkbox" class="form-check-input checkboxesavilable" id="checkboxactivities'.$i.'" name="'.$mod->name.'" data-cmid="'.$activity->cmid.'" checked';
if (!empty($activity->randomized)) {
$values .=' disabled';
}
$values .='>'.$activity->name.'
</label>
</div>';
}else{
$values='<div class="form-check ">
<label class="form-check-label" for="check1" ';
if (!empty($activity->randomized)) {
$values .='title="Randomized activity cannot be choosed as a mandatory activity"';
}
$values .='><input type="checkbox" class="form-check-input checkboxesavilable" id="checkboxactivities'.$i.'" name="'.$mod->name.'" data-cmid="'.$activity->cmid.'" ';
if (!empty($activity->randomized)) {
$values .='disabled ';
}
$values .='>'.$activity->name.'
</label>
</div>';
}
$tabledata .="<td>$values</td></tr>";
$i=$i+1;
}
$tabledata .="</tr>";
}
$sql="select cmid from {local_mandatory_activities} where course=?";
$mandatoryactivities = $DB->get_record_sql($sql,array($courseid));
if (isset($mandatoryactivities) && !empty($mandatoryactivities)){
$templatecontext['mandatoryids']=$mandatoryactivities->cmid;
}else{
$templatecontext['mandatoryids']=false;
}
$templatecontext['wwwroot']=$CFG->wwwroot;
// $templatecontext['comparisiontable']=$comparisiontable;
$templatecontext['tabledata']=$tabledata;
$templatecontext['courseid'] = $courseid;
echo $OUTPUT->header();
echo $OUTPUT->render_from_template("local_mandatoryactivities/index", $templatecontext);
echo $OUTPUT->footer();
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Language strings for English is defined here.
*
* @package local_mandatoryactivities
* @copyright 2020 Logesh <logesh@teknoturf.com>
*
*/
defined('MOODLE_INTERNAL') || die();
$string['pluginname'] = 'mandatoryactivities';
$string['type'] = 'mandatoryactivity status';
$string['headerconfig'] = 'Local Plugin Setting';
$string['descconfig'] = 'Configuration setting of Local mandatory activity plugin';
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
*
* @package local_mandatoryactivities
* @copyright 2020 Logesh <Logesh@teknoturf.com>
*
*/
defined('MOODLE_INTERNAL') || die();
$prefix = 'local_mandatoryactivities/';
if ($hassiteconfig) {
}
\ No newline at end of file
<style>
input[type="checkbox"][disabled] {
cursor: no-drop;
}
#loadingcomparision{
display:none;
}
th,td{
/* text-align: center !important; */
}
</style>
<div id="loadingcomparision" align="center">
<img src="{{wwwroot}}/local/mandatoryactivities/pix/loading.gif"/>
</div>
<div id="successalert">
</div>
<div id="comparisiontable" style="display:none;">
<div id="accordion2">
<div class="card">
<div class="card-header" style="background-color: rgb(255 255 255);border-bottom:none;">
<i id="cccriteria2" class="arrow down" data-toggle="collapse" href="#collapse3" style="cursor:pointer;"></i>&nbsp;&nbsp;
<a id="cccriteria2" class="card-link" data-toggle="collapse" href="#collapse3" style="color: black;font-size: medium;">
<b>confirm</b>
</a>
</div>
<div id="collapse3" class="collapse show" data-parent="#accordion2">
<div class="card-body">
<div class="row">
<div class="col text-center">
<table class="activitytable center">
<tr>
<th style="width:10%">Sl.no</th><th>Activities removed from mandatory</th>
</tr>
<tbody id="removed">
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="accordion3">
<div class="card">
<div class="card-header" style="background-color: rgb(255 255 255);border-bottom:none;">
<a id="cccriteria3" class="card-link" data-toggle="collapse" href="#collapse4" style="color: black;font-size: medium;">
</a>
</div>
<div id="collapse4" class="collapse show" data-parent="#accordion3">
<div class="card-body">
<div class="row">
<div class="col text-center">
<table class="activitytable center">
<tr>
<th style="width:10%">Sl.no</th><th>Newly Added mandatory activies</th>
</tr>
<tbody id="added">
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="accordion4">
<div class="card">
<div class="card-header" style="background-color: rgb(255 255 255);border-bottom:none;">
<a id="cccriteria4" class="card-link" data-toggle="collapse" href="#collapse5" style="color: black;font-size: medium;">
</a>
</div>
<div id="collapse5" class="collapse show" data-parent="#accordion4">
<div class="card-body">
<div class="row">
<div class="col text-center">
<table class="activitytable center">
<tr>
<th style="width:10%">Sl.no</th><th>Unchanged activies </th>
</tr>
<tbody id="unchanged">
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div
<div id="accordion5">
<div class="card">
<div class="card-header" style="background-color: rgb(255 255 255);border-bottom:none;">
<i id="cccriteria5" data-toggle="collapse" href="#collapse6" style="cursor:pointer;"></i>&nbsp;&nbsp;
<a id="cccriteria5" class="card-link" data-toggle="collapse" href="#collapse6" style="color: black;font-size: medium;"></a>
</div>
<div id="collapse6" class="collapse show" data-parent="#accordion5">
<div class="card-body">
<div class="row">
<div class="col text-center">
<button type="button" class="btn btn-info" id="previousepagem">Previous page</button>
<button type="button" class="btn btn-info" id="savemandatoryconfirm">Save Changes</button>
<button type="button" class="btn btn-info" id="cancelmandatory">Cancel</button></td></tr>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function(){
$(document).on('click', '#savemandatory', function(){
$('#madatorysection').css("display", "none");
$('#loadingcomparision').css("display", "block");
var checkedids=[];
$('input:checkbox.checkboxesavilable:checked').each(function () {
checkedids.push($(this).attr("data-cmid"));
});
var rootPath = M.cfg.wwwroot;
var arg = { action:'getcomparision',
checked:checkedids,
course : {{courseid}},
mandatory:'{{mandatoryids}}'};
$.ajax({
url: rootPath+"/local/mandatoryactivities/ajax.php",
type: "POST",
data : arg,
success: function(obj){
var removedcmids=obj.removed;
var newlyaddedcmids=obj.newlyadded;
var unchangedcmids=obj.unchanged;
$('#loadingcomparision').css("display", "none");
$('#comparisiontable').css("display", "block");
if(removedcmids.length > 0){
var tablecontent1="";var i;
for (i = 0; i < removedcmids.length; i++) {
var slno=i+1;
tablecontent1 += "<tr id='removedrows'><td>"+slno+"</td><td>"+removedcmids[i].name+"</td></tr>";
}
$('[id=removedrows]').remove();
$("#removed").append(tablecontent1);
}else{
tablecontent1 += "<tr id='removedrows'><td colspan='2'>No Activities </td></tr>";
$('[id=removedrows]').remove();
$("#removed").append(tablecontent1);
}
if(newlyaddedcmids.length > 0){
var tablecontent2="";var i;
for (i = 0; i < newlyaddedcmids.length; i++) {
var slno=i+1;
tablecontent2 += "<tr id='addedrows'><td>"+slno+"</td><td>"+newlyaddedcmids[i].name+"</td></tr>";
}
$('[id=addedrows]').remove();
$("#added").append(tablecontent2);
}else{
tablecontent2 += "<tr id='addedrows'><td colspan='2'>No Activities </td></tr>";
$('[id=addedrows]').remove();
$("#added").append(tablecontent2);
}
if(unchangedcmids.length > 0){
var tablecontent3="";var i;
for (i = 0; i < unchangedcmids.length; i++) {
var slno=i+1;
tablecontent3 += "<tr id='unchangedrows'><td>"+slno+"</td><td>"+unchangedcmids[i].name+"</td></tr>";
}
$('[id=unchangedrows]').remove();
$("#unchanged").append(tablecontent3);
}else{
tablecontent3 += "<tr id='unchangedrows'><td colspan='2'>No Activities </td></tr>";
$('[id=unchangedrows]').remove();
$("#unchanged").append(tablecontent3);
}
},
error: function(){
}
});
// $('#accordion1').css("display", "none");
});
$(document).on('click', '#cccriteria2', function(){
$('#cccriteria3').click();
$('#cccriteria4').click();
$('#cccriteria5').click();
var vals=$('#cccriteria2').hasClass('down');
if(vals){
$('#cccriteria2').removeClass('down');
$('#cccriteria2').addClass('right');
}else{
$('#cccriteria2').removeClass('right');
$('#cccriteria2').addClass('down');
}
});
$(document).on('click', '#savemandatoryconfirm', function(){
var cmids=[];
var rootPath = M.cfg.wwwroot;
$('#loadingcomparision').css("display", "block");
$('#comparisiontable').css("display", "none");
$.each($("input[type='checkbox']:checked"), function(){
cmids.push($(this).attr("data-cmid"));
});
var arg = {
action:'savemandatoryids',
cmids :cmids,
course : {{courseid}}
};
$.ajax({
url: rootPath+"/local/mandatoryactivities/ajax.php",
type: "POST",
data : arg,
success: function(obj){
$('#loadingcomparision').css("display", "none");
var alerttags='<div class="alert alert-success"><strong>Successfully Ssved</strong></div>';
$('#successalert').append(alerttags);
setTimeout(function(){
var redirecturl=rootPath+"/local/mandatoryactivities/editsettings.php?courseid="+{{courseid}};
location.replace(redirecturl);
}, 1500);
},
error: function(){
//var redirecturl=rootPath+"local/coursecompletion/index.php?courseid="+{{courseid}};
//location.replace(redirecturl);
}
});
});
$(document).on('click', '#previousepagem', function(){
$('#comparisiontable').css("display", "none");
$('#madatorysection').css("display", "block");
});
});
</script>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<style>
.activitytable {
border-collapse: collapse;
width: 100%;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 4px;
}
.arrow {
border: solid black;
border-width: 0 3px 3px 0;
display: inline-block;
padding: 3px;
}
.right {
transform: rotate(-45deg);
-webkit-transform: rotate(-45deg);
transition-duration: 0.5s;
}
.down {
transform: rotate(45deg);
-webkit-transform: rotate(45deg);
transition-duration: 0.5s;
}
</style>
</head>
<body>
<div class="container" id="madatorysection">
<div id="accordion">
<div class="card">
<div class="card-header" style="background-color: rgb(255 255 255);border-bottom:none;">
<i id="cccriteria" class="arrow down" data-toggle="collapse" href="#collapseOne" style="cursor:pointer;"></i>&nbsp;&nbsp;
<a id="cccriteria" class="card-link" data-toggle="collapse" href="#collapseOne" style="color: black;font-size: medium;">
<b>Mandatory Activity Settings</b>
</a>
</div>
<div id="collapseOne" class="collapse show" data-parent="#accordion">
<div class="card-body">
<table class="activitytable">
<tr>
<th>Activity type</th> <th>Completion criteria</th>
</tr>
{{{tabledata}}}
</table>
</div>
</div>
</div>
</div>
<div id="accordion1">
<div class="card">
<div class="card-header" style="background-color: rgb(255 255 255);border-bottom:none;">
<i id="cccriteria1" data-toggle="collapse" href="#collapse2" style="cursor:pointer;"></i>&nbsp;&nbsp;
<a id="cccriteria1" class="card-link" data-toggle="collapse" href="#collapse2" style="color: black;font-size: medium;">
<b></b>
</a>
</div>
<div id="collapse2" class="collapse show" data-parent="#accordion1">
<div class="card-body">
<div class="row">
<div class="col text-center">
<button type="button" class="btn btn-info" id="savemandatory">Continue</button>
<button type="button" class="btn btn-info" id="cancelmandatory">Cancel</button></td></tr>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
{{> local_mandatoryactivities/confirmation }}
<script>
$(document).ready(function(){
$(document).on('click', '#cccriteria', function(){
var vals=$('#cccriteria').hasClass('down');
$('#cccriteria1').click()
if(vals){
$('#cccriteria').removeClass('down');
$('#cccriteria').addClass('right');
}else{
$('#cccriteria').removeClass('right');
$('#cccriteria').addClass('down');
}
});
$(document).on('click', '#cancelmandatory', function(){
var rootPath = M.cfg.wwwroot;
var redirecturl=rootPath+"/course/view.php?id="+{{courseid}};
location.replace(redirecturl);
});
});
</script>
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
*
* @package local_mandatoryactivities
* @copyright 2020 Logesh <logesh@teknoturf.com>
*
*/
defined('MOODLE_INTERNAL') || die();
$plugin->component = 'local_mandatoryactivities';
$plugin->release = '0.0.1';
$plugin->version = 2020082400;
$plugin->requires = 2017051500;
$plugin->maturity = MATURITY_ALPHA;
\ No newline at end of file
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!