From 2b7c28a0b7622cc82ad4d5fb65c25578bb7183c4 Mon Sep 17 00:00:00 2001 From: Sam Suresh Date: Fri, 29 Jan 2021 09:40:15 +0800 Subject: [PATCH] intial commit --- .DS_Store | Bin 0 -> 8196 bytes .travis.yaml | 63 +++++ README.md | 24 ++ classes/.DS_Store | Bin 0 -> 6148 bytes classes/privacy/provider.php | 47 ++++ img/.DS_Store | Bin 0 -> 6148 bytes img/new.png | Bin 0 -> 14554 bytes index.php | 500 +++++++++++++++++++++++++++++++++++ js/style3.css | 45 ++++ lang/.DS_Store | Bin 0 -> 6148 bytes lang/en/report_mycourses.php | 40 +++ settings.php | 32 +++ version.php | 30 +++ 13 files changed, 781 insertions(+) create mode 100644 .DS_Store create mode 100644 .travis.yaml create mode 100644 README.md create mode 100644 classes/.DS_Store create mode 100644 classes/privacy/provider.php create mode 100644 img/.DS_Store create mode 100644 img/new.png create mode 100644 index.php create mode 100644 js/style3.css create mode 100644 lang/.DS_Store create mode 100644 lang/en/report_mycourses.php create mode 100644 settings.php create mode 100644 version.php diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..736b098c8aff953d22bafe39f197057039d63be7 GIT binary patch literal 8196 zcmeI1&yUhT6vyB2!z~yi2eWdVi#HM}uFHBbsfY(}CN+9cv)e8NYD$MtkgSO5zoCDO z2R->0c=R9eLo zW#4E8GqaD%FdiU=KE(b!9{b^jH%$-$B0vO)01+SpyFdV+*|J$V&wXvBkq8ih|B`?_ zA2@cYj?qM`Iy!JrB>-v(r&YsitOHaGH|iKow5m|Nr>-8D31z0lU^*P_T)Lw=MiZ?% z9GDIVW>#jVLSbrkjN{53n4^_OB0vN-3CP-g4^ANj53BdJ`d#>F`RI?sAf7gxpID(- zDqq;Mtg2PLRDI?S#oV2G(^=f{CQsz22i|n(o9l-{gsW@Me-!lR$F(bWMKtw-s6SD` zL9dT4Pag+SPs}@F7WHCvA6FYJt727-YxTv#whtQIK5Q);e9>+<8~otL;c{8Au3ocm z-#;0hy#%b85yZl)OyZ1+@*#@e&|Wz%CMx?Mk1Amr)t;oIl;ceZ); ze!*)zTwhHcQW@+o+({IQXn-roEQ%1o2nPCP%Fb*?>!{t}ty?#LdoxUW=}l;V{gHSM zd=obkTcI0k8n%NsJ;#}WT!7~gr@uqt9eS(zoNr)kTh~{%^y+G>OX~L(?c8?$vESAz z!8FYBb%eRHRLh69FRd z4-sIcuG{TkLg#-yXLFOaHphN~T{h{LXjLINsB#=tmE)+Ze;DF5M^_o+7)`X|3^sZZ MpfJ!t1pX?4@7>BnasU7T literal 0 HcmV?d00001 diff --git a/.travis.yaml b/.travis.yaml new file mode 100644 index 0000000..0d725ae --- /dev/null +++ b/.travis.yaml @@ -0,0 +1,63 @@ +language: php +dist: bionic +sudo: required +services: + - mysql +addons: + firefox: "47.0.1" + postgresql: "9.6" + chrome: stable + apt: + packages: + - openjdk-8-jre-headless + - chromium-chromedriver +cache: + directories: + - $HOME/.composer/cache + - $HOME/.npm +php: + - 7.2 +env: + - DB=pgsql MOODLE_BRANCH=master + - DB=mysqli MOODLE_BRANCH=master + - DB=mariadb MOODLE_BRANCH=master +matrix: + include: + - php: 7.1 + env: DB=pgsql MOODLE_BRANCH=MOODLE_35_STABLE + - php: 7.2 + env: DB=pgsql MOODLE_BRANCH=MOODLE_36_STABLE + - php: 7.2 + env: DB=pgsql MOODLE_BRANCH=MOODLE_37_STABLE + - php: 7.2 + env: DB=pgsql MOODLE_BRANCH=MOODLE_38_STABLE + - php: 7.2 + env: DB=pgsql MOODLE_BRANCH=MOODLE_39_STABLE + - php: 7.3 + env: DB=pgsql MOODLE_BRANCH=master +before_install: + - phpenv config-rm xdebug.ini + - nvm install 8.9 + - nvm use 8.9 + - cd ../.. + - composer create-project -n --no-dev --prefer-dist blackboard-open-source/moodle-plugin-ci ci ^2 + - export PATH="$(cd ci/bin; pwd):$(cd ci/vendor/bin; pwd):$PATH" + - google-chrome-stable --headless --disable-gpu --remote-debugging-port=9222 http://127.0.0.1 & +install: + - moodle-plugin-ci add-plugin --clone https://github.com/ewallah/moodle-local_aws.git + - moodle-plugin-ci install +script: + - /home/travis/build/moodle/vendor/bin/phpunit "provider_testcase" /home/travis/build/moodle/privacy/tests/provider_test.php + - /home/travis/build/moodle/vendor/bin/phpunit "tool_dataprivacy_expired_contexts_testcase" /home/travis/build/moodle/admin/tool/dataprivacy/tests/expired_contexts_test.php + - moodle-plugin-ci phplint + - moodle-plugin-ci phpcpd + - moodle-plugin-ci phpmd + - moodle-plugin-ci phpdoc + - moodle-plugin-ci codechecker + - moodle-plugin-ci validate + - moodle-plugin-ci savepoints + - moodle-plugin-ci mustache + - moodle-plugin-ci grunt + - moodle-plugin-ci phpunit --coverage-text + - moodle-plugin-ci behat + - moodle-plugin-ci behat --profile chrome \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..47ee0db --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# My Courses Moodle Plugin + +This plugin provide a page with all enrolled courses and progress which can be added to Moodle navigation + +## Usage + +Install the plugin from your Moodle Administration page +Add a navigation link to your Moodle to view the page: +https://yourmoodlelms.com/report/mycourse/index.php + +## Description + +One of the great benefit of using this plugin is it show all courses a user enrolled in one page along with the course category and current completion progress. + +## Settings +There is no setting available for this plugin + +## Contributing +Feel free to contribute by: +* Submitting translations to the [Moodle AMOS translator](https://lang.moodle.org/local/amos/view.php) +* Testing and creating issues. But remember to check if the issues is already +reported before creating a new one. Perhaps you can contribute to an already +existing issue? +* Solving issues and submitting code through Pull Requests to the 'master' branch or on a separate feature branch. diff --git a/classes/.DS_Store b/classes/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..059561c6ab8c0d09eb39849ed4c28f0c973adcf5 GIT binary patch literal 6148 zcmeHK%}xR_5S{{R!5BH1$gvl199SiKGTERWyqT=ggBsWsBAehYfklFd+1JoF@(Fw$ zXWBwU^x(x9GLuZd>HM_mx10U|fT#_c4nPqABr0JhkIgqianc3JSP!AlWB70jqhQ$Y z2Azd$cKk;M=-aJ97kUuF1AO{^ae$GxpxX)iNu}~GGTGe9>Y9`VS=cDtcVre{foN8G)`@55}8Xp`~%Bs4zKbhp^_KtIS+PEJ*j-MvaFNRxzzoC{*i&J<- z_mLOCXU5lwfjGzcpifBrOePRexj(%nHT#KneQw~DUjN{mug?*t2Jv;i9 zP6y!{vBA{vDh8g%%20j28g;MhX literal 0 HcmV?d00001 diff --git a/classes/privacy/provider.php b/classes/privacy/provider.php new file mode 100644 index 0000000..f6b17de --- /dev/null +++ b/classes/privacy/provider.php @@ -0,0 +1,47 @@ +. + +/** + * Privacy Subsystem implementation for report_mycourses. + * + * @package report + * @subpackage mycourses + * @copyright 2021 onwards Sam Suresh {@link https://modernlms.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace report_mycourses\privacy; + +defined('MOODLE_INTERNAL') || die(); + +/** + * Privacy Subsystem for report_mycourses implementing null_provider. + * + * @copyright 2018 Zig Tan + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class provider implements \core_privacy\local\metadata\null_provider { + + /** + * Get the language string identifier with the component's language + * file to explain why this plugin stores no data. + * + * @return string + */ + public static function get_reason() : string { + return 'privacy:metadata'; + } +} \ No newline at end of file diff --git a/img/.DS_Store b/img/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 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 literal 0 HcmV?d00001 diff --git a/index.php b/index.php new file mode 100644 index 0000000..7f53b94 --- /dev/null +++ b/index.php @@ -0,0 +1,500 @@ +set_context(get_system_context()); +$PAGE->set_pagelayout('admin'); +$PAGE->set_title("My Courses"); +$PAGE->set_heading("My Courses"); + + +echo $OUTPUT->header(); + +Global $CFG, $USER, $DB; + +$url = new moodle_url('/course/view.php?id'); + +//css circle round +echo ''; + + +//get current user login +$currentuser = $USER->id; + + +// get course have date end +$sqlgetenrol = "SELECT * + FROM {user_enrolments} as A + JOIN {enrol} as B + ON A.enrolid LIKE B.id + JOIN {course} as C + ON B.courseid LIKE C.id + -- JOIN {course_completions} as D + -- ON C.id LIKE D.course + WHERE A.userid LIKE '$currentuser' + AND C.enddate > 0 + -- AND D.userid LIKE '$currentuser' + -- AND D.timecompleted LIKE '' + ORDER BY C.enddate ASC"; + +$datasqlgetenrol = $DB->get_records_sql($sqlgetenrol); +$bilcount = 1; +$percentage = 0; +$dpercentage = 0; +foreach ($datasqlgetenrol as $datadatasqlgetenrol) +{ + //get category + $categoryname = ''; + $sqlcategory = "SELECT * + FROM {course_categories} + WHERE id LIKE '$datadatasqlgetenrol->category'"; + $resultsqlcategory = $DB->get_records_sql($sqlcategory); + foreach ($resultsqlcategory as $dataresultsqlcategory) + { + $categoryname = $dataresultsqlcategory->name; + } + + // get total course need taken + $totalcount = 0; + $totalpercentage = 0; + $sqlcountcourse = "SELECT COUNT(course) as totalcount + FROM {course_modules} + WHERE course LIKE '$datadatasqlgetenrol->courseid' + AND deletioninprogress != 1"; + $rescountcourse = $DB->get_records_sql($sqlcountcourse); + foreach ($rescountcourse as $lcountcourse => $resdatacountcourse) { + //all module + $totalcount = $resdatacountcourse->totalcount; + } + + $sqlcountcompletedcourse = "SELECT COUNT(*) as totalcountcompleted + FROM {course_modules} as A + JOIN {course_modules_completion} as B + ON A.id LIKE B.coursemoduleid + WHERE A.course LIKE '$datadatasqlgetenrol->courseid' + AND A.deletioninprogress != 1 + AND B.userid LIKE '$currentuser' + AND A.completion > 0"; + $rescountcompletedcourse = $DB->get_records_sql($sqlcountcompletedcourse); + foreach ($rescountcompletedcourse as $lcountcompletedcourse => $resdatacountcompletedcourse) { + //amount complete + $totalcountcompleted = $resdatacountcompletedcourse->totalcountcompleted; + } + + + if($totalcount==0){ + $totalcount =1; + } + + $totalpercentage = number_format(($totalcountcompleted / $totalcount) * 100,2); + + if($totalpercentage>100){ + $totalpercentage = 100; + $totalpercentage = 100; + } + if($totalpercentage==NAN){ + $totalpercentage = 0; + $totalpercentage = 0; + } + + + + //get course compoletion + $sqlgetcompleted = "SELECT E.timecompleted + FROM {course_completions} as E + WHERE E.course LIKE '$datadatasqlgetenrol->courseid' + AND E.userid LIKE '$currentuser'"; + $ressqlgetcompleted = $DB->get_records_sql($sqlgetcompleted); + foreach ($ressqlgetcompleted as $resdataressqlgetcompleted) { + + //amount complete + if($resdataressqlgetcompleted->timecompleted!='') + { + $totalpercentage = '100'; + } + + } + + + + + $dpercentage = 100-$totalpercentage; + + + //get user score + //get grade from history + $sqlmarkq = "SELECT A.finalgrade as tfinalgrade + FROM {grade_grades_history} as A + JOIN {grade_items} as B + ON A.itemid LIKE B.id + WHERE A.userid LIKE '$currentuser' + AND A.finalgrade != '' + AND B.itemname != '' + AND B.courseid LIKE '$datadatasqlgetenrol->courseid'"; + $resmarkq = $DB->get_records_sql($sqlmarkq); + $markquizt = 0; + foreach ($resmarkq as $lmarkq => $resdatamarkq) { + + $markquizt = $markquizt + $resdatamarkq->tfinalgrade; + + } + + $currentdatenow = time(); + + $imgnew = ''; + if(7257600>=($currentdatenow-$datadatasqlgetenrol->startdate)) + { + $imgnew = 'New'; + } + + if($totalpercentage!=100) + { + $markdisplay .= ' + + '.$bilcount.' + + '.$datadatasqlgetenrol->fullname.' + '.$imgnew.' + + '.round($markquizt).' + '.$categoryname.' + '.date("d-M-Y",$datadatasqlgetenrol->enddate).' + +
+ + + + + + + + '.(int)$totalpercentage.'% + + + +
+ + '; + + $bilcount++; + + } +} + + + + +// get course not set date end +$sqlgetenrol = "SELECT * + FROM {user_enrolments} as A + JOIN {enrol} as B + ON A.enrolid LIKE B.id + JOIN {course} as C + ON B.courseid LIKE C.id + WHERE A.userid LIKE '$currentuser' + AND C.enddate LIKE 0 + ORDER BY C.startdate DESC"; + +$datasqlgetenrol = $DB->get_records_sql($sqlgetenrol); +$percentage = 0; +$dpercentage = 0; +foreach ($datasqlgetenrol as $datadatasqlgetenrol) +{ + //get category + $categoryname = ''; + $sqlcategory = "SELECT * + FROM {course_categories} + WHERE id LIKE '$datadatasqlgetenrol->category'"; + $resultsqlcategory = $DB->get_records_sql($sqlcategory); + foreach ($resultsqlcategory as $dataresultsqlcategory) + { + $categoryname = $dataresultsqlcategory->name; + } + + // get total course need taken + $totalcount = 0; + $totalpercentage = 0; + $sqlcountcourse = "SELECT COUNT(course) as totalcount + FROM {course_modules} + WHERE course LIKE '$datadatasqlgetenrol->courseid' + AND deletioninprogress != 1"; + $rescountcourse = $DB->get_records_sql($sqlcountcourse); + foreach ($rescountcourse as $lcountcourse => $resdatacountcourse) { + //all module + $totalcount = $resdatacountcourse->totalcount; + } + + $sqlcountcompletedcourse = "SELECT COUNT(*) as totalcountcompleted + FROM {course_modules} as A + JOIN {course_modules_completion} as B + ON A.id LIKE B.coursemoduleid + WHERE A.course LIKE '$datadatasqlgetenrol->courseid' + AND A.deletioninprogress != 1 + AND B.userid LIKE '$currentuser' + AND A.completion > 0"; + $rescountcompletedcourse = $DB->get_records_sql($sqlcountcompletedcourse); + foreach ($rescountcompletedcourse as $lcountcompletedcourse => $resdatacountcompletedcourse) { + //amount complete + $totalcountcompleted = $resdatacountcompletedcourse->totalcountcompleted; + } + + + if($totalcount==0){ + $totalcount =1; + } + + $totalpercentage = number_format(($totalcountcompleted / $totalcount) * 100,2); + + if($totalpercentage>100){ + $totalpercentage = 100; + $totalpercentage = 100; + } + if($totalpercentage==NAN){ + $totalpercentage = 0; + $totalpercentage = 0; + } + + $dpercentage = 100-$totalpercentage; + + + //get user score + //get grade from history + $sqlmarkq = "SELECT A.finalgrade as tfinalgrade + FROM {grade_grades_history} as A + JOIN {grade_items} as B + ON A.itemid LIKE B.id + WHERE A.userid LIKE '$currentuser' + AND A.finalgrade != '' + AND B.itemname != '' + AND B.courseid LIKE '$datadatasqlgetenrol->courseid'"; + $resmarkq = $DB->get_records_sql($sqlmarkq); + $markquizt = 0; + foreach ($resmarkq as $lmarkq => $resdatamarkq) { + + $markquizt = $markquizt + $resdatamarkq->tfinalgrade; + + } + + $currentdatenow = time(); + $imgnew = ''; + if(7257600>=($currentdatenow-$datadatasqlgetenrol->startdate)) + { + $imgnew = 'New'; + } + + + $markdisplay .= ' + + '.$bilcount.' + + '.$datadatasqlgetenrol->fullname.' + '.$imgnew.' + + '.round($markquizt).' + '.$categoryname.' + NOT SET + +
+ + + + + + + + '.(int)$totalpercentage.'% + + + +
+ + '; + $bilcount++; +} + + +// get course complete +// get course have date end +$sqlgetenrol = "SELECT * + FROM {user_enrolments} as A + JOIN {enrol} as B + ON A.enrolid LIKE B.id + JOIN {course} as C + ON B.courseid LIKE C.id + -- JOIN {course_completions} as D + -- ON C.id LIKE D.course + WHERE A.userid LIKE '$currentuser' + AND C.enddate > 0 + -- AND D.userid LIKE '$currentuser' + -- AND D.timecompleted LIKE '' + ORDER BY C.enddate ASC"; + +$datasqlgetenrol = $DB->get_records_sql($sqlgetenrol); +$percentage = 0; +$dpercentage = 0; +foreach ($datasqlgetenrol as $datadatasqlgetenrol) +{ + //get category + $categoryname = ''; + $sqlcategory = "SELECT * + FROM {course_categories} + WHERE id LIKE '$datadatasqlgetenrol->category'"; + $resultsqlcategory = $DB->get_records_sql($sqlcategory); + foreach ($resultsqlcategory as $dataresultsqlcategory) + { + $categoryname = $dataresultsqlcategory->name; + } + + // get total course need taken + $totalcount = 0; + $totalpercentage = 0; + $sqlcountcourse = "SELECT COUNT(course) as totalcount + FROM {course_modules} + WHERE course LIKE '$datadatasqlgetenrol->courseid' + AND deletioninprogress != 1"; + $rescountcourse = $DB->get_records_sql($sqlcountcourse); + foreach ($rescountcourse as $lcountcourse => $resdatacountcourse) { + //all module + $totalcount = $resdatacountcourse->totalcount; + } + + $sqlcountcompletedcourse = "SELECT COUNT(*) as totalcountcompleted + FROM {course_modules} as A + JOIN {course_modules_completion} as B + ON A.id LIKE B.coursemoduleid + WHERE A.course LIKE '$datadatasqlgetenrol->courseid' + AND A.deletioninprogress != 1 + AND B.userid LIKE '$currentuser' + AND A.completion > 0"; + $rescountcompletedcourse = $DB->get_records_sql($sqlcountcompletedcourse); + foreach ($rescountcompletedcourse as $lcountcompletedcourse => $resdatacountcompletedcourse) { + //amount complete + $totalcountcompleted = $resdatacountcompletedcourse->totalcountcompleted; + } + + + if($totalcount==0){ + $totalcount =1; + } + + $totalpercentage = number_format(($totalcountcompleted / $totalcount) * 100,2); + + if($totalpercentage>100){ + $totalpercentage = 100; + $totalpercentage = 100; + } + if($totalpercentage==NAN){ + $totalpercentage = 0; + $totalpercentage = 0; + } + + + + //get course compoletion + $sqlgetcompleted = "SELECT E.timecompleted + FROM {course_completions} as E + WHERE E.course LIKE '$datadatasqlgetenrol->courseid' + AND E.userid LIKE '$currentuser'"; + $ressqlgetcompleted = $DB->get_records_sql($sqlgetcompleted); + foreach ($ressqlgetcompleted as $resdataressqlgetcompleted) { + + //amount complete + if($resdataressqlgetcompleted->timecompleted!='') + { + $totalpercentage = '100'; + } + + } + + + + + $dpercentage = 100-$totalpercentage; + + + //get user score + //get grade from history + $sqlmarkq = "SELECT A.finalgrade as tfinalgrade + FROM {grade_grades_history} as A + JOIN {grade_items} as B + ON A.itemid LIKE B.id + WHERE A.userid LIKE '$currentuser' + AND A.finalgrade != '' + AND B.itemname != '' + AND B.courseid LIKE '$datadatasqlgetenrol->courseid'"; + $resmarkq = $DB->get_records_sql($sqlmarkq); + $markquizt = 0; + foreach ($resmarkq as $lmarkq => $resdatamarkq) { + + $markquizt = $markquizt + $resdatamarkq->tfinalgrade; + + } + + $currentdatenow = time(); + + $imgnew = ''; + if(7257600>=($currentdatenow-$datadatasqlgetenrol->startdate)) + { + $imgnew = 'New'; + } + + if($totalpercentage==100) + { + $markdisplay .= ' + + '.$bilcount.' + + '.$datadatasqlgetenrol->fullname.' + '.$imgnew.' + + '.round($markquizt).' + '.$categoryname.' + '.date("d-M-Y",$datadatasqlgetenrol->enddate).' + +
+ + + + + + + + '.$totalpercentage.'% + + + +
+ + '; + + $bilcount++; + + } +} + +echo '
+
+ + + + + + + + + + + + + '.$markdisplay.' + +
'.get_string('no', 'report_mycourses').''.get_string('course', 'report_mycourses').''.get_string('currentscore', 'report_mycourses').''.get_string('type', 'report_mycourses').''.get_string('dateend', 'report_mycourses').''.get_string('completion', 'report_mycourses').'
+
+
'; + + + + +echo $OUTPUT->footer(); \ No newline at end of file diff --git a/js/style3.css b/js/style3.css new file mode 100644 index 0000000..e7de8f9 --- /dev/null +++ b/js/style3.css @@ -0,0 +1,45 @@ +@keyframes donut-chart-fill { + to { stroke-dasharray: 0 100; } +} +body { + font-size: 16px; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #333; +} + +.svg-item { + width: 100px; + height: 100px; + font-size: 16px; +} +.donut-ring { + stroke: #EBEBEB; +} + +.donut-segment { + animation: donut-chart-fill 1s reverse ease-in; + transform-origin: center; + stroke: #28a745; +} + +.donut-text { + font-family: Arial, Helvetica, sans-serif; + fill: #28a745; +} + +.donut-label { + font-size: 0.28em; + font-weight: 700; + line-height: 1; + fill: #000; + transform: translateY(0.25em); +} + +.donut-percent { + font-size: 0.5em; + fill: #28a745; + line-height: 1; + transform: translateY(0.5em); +} \ No newline at end of file diff --git a/lang/.DS_Store b/lang/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..10424cdfff069d6a769d918c41592e04023184dd GIT binary patch literal 6148 zcmeHK%}T>S5Z-O8ZYyFBf<5lVTMvzvdJ;md2X8_|4=Qa!f(_K9G^s&rB(I@w?wbK(d=>{U&*$?IlO|Rio16v(I}2?!Jfy? zV+e@>Vt^PR23C#%a}J)&U(}pV41IL;)S&5{S~E zZLrV?9uTfm0d*=jPYkZpVO*Lx+hCzlr!%frhI!1&^T!KUtHZcd;f&iFsV4@Afkg(& z+N|UGe*(YE(ntPc3R%PeG4RhA;FX@!>q1fHZ2eXqp0yI%02&I$6{vuKzHkWu1NV`J ea%#Us9pY?*g+`nO$5lEYT?7;%)DZ)}z`zHuPfpkX literal 0 HcmV?d00001 diff --git a/lang/en/report_mycourses.php b/lang/en/report_mycourses.php new file mode 100644 index 0000000..ed2effb --- /dev/null +++ b/lang/en/report_mycourses.php @@ -0,0 +1,40 @@ +. + +/** + * Strings for component 'report_mycourses' + * + * @package report + * @subpackage mycourses + * @copyright 2021 onwards Sam Suresh {@link https://modernlms.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +$string['pluginname'] = 'My Courses'; +$string['admin'] = 'My Courses'; +$string['privacy:metadata'] = 'The My Course reports plugin does not store any personal data.'; + + +$string['no'] = 'No'; +$string['course'] = 'Course Name'; +$string['currentscore'] = 'Current Score'; +$string['type'] = 'Course Category'; +$string['completion'] = 'Completion'; +$string['dateend'] = 'Course Due Date'; + + + + diff --git a/settings.php b/settings.php new file mode 100644 index 0000000..092f759 --- /dev/null +++ b/settings.php @@ -0,0 +1,32 @@ +. + +/** + * Settings for the backups report + * + * @package report + * @subpackage mycourses + * @copyright 2021 onwards Sam Suresh {@link https://modernlms.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die; + +// if need link url from report site +// $ADMIN->add('reports', new admin_externalpage('reportbackups', get_string('admin', 'report_mycourses'), "$CFG->wwwroot/report/mycourse/index.php",'moodle/backup:backupcourse')); + +// no report settings +$settings = null; \ No newline at end of file diff --git a/version.php b/version.php new file mode 100644 index 0000000..852eb50 --- /dev/null +++ b/version.php @@ -0,0 +1,30 @@ +. + +/** + * Version details. + * + * @package report + * @subpackage mycourses + * @copyright 2021 onwards Sam Suresh {@link https://modernlms.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die; + +$plugin->version = 2021012803; // The current plugin version (Date: YYYYMMDDXX) +$plugin->requires = 2015111610; // Requires this Moodle version +$plugin->component = 'report_mycourses'; // Full name of the plugin (used for diagnostics)