Note:

If you want to create a new page for developers, you should create it on the Moodle Developer Resource site.

Projects for new developers: Difference between revisions

From MoodleDocs
(→‎Advanced Grading in Forums: add task to update code.)
(48 intermediate revisions by 14 users not shown)
Line 1: Line 1:
{{GSOC}}
{{GSOC}}
==Getting started==
==Getting started==


Moodle uses PHP, JavaScript, SQL and a number of other Web languages, so learning those is a good place to start.
Moodle uses PHP, JavaScript, SQL and a number of other Web languages, so learning those is a good place to start.


When you have some basic PHP programming skills, you may wish to start learning about how to Moodle code is organised. It is recommended that you complete the [http://dev.moodle.org/course/view.php?id=2 Introduction to Moodle Programming] course on [http://dev.moodle.org/ dev.moodle.org]. To access this you will need to have an account on moodle.org first.
When you have some basic PHP programming skills, you may wish to start learning about how the Moodle code is organised. It is recommended that you complete the [http://dev.moodle.org/course/view.php?id=2 Introduction to Moodle Programming] course on [http://dev.moodle.org/ dev.moodle.org]. To access this you will need to have an account on moodle.org first.


''If you are looking for projects suggested in the tracker, look for issues with the [https://tracker.moodle.org/issues/?jql=labels%20in%20%28addon_candidate%29 'addon_candidate' label].
''If you are looking for projects suggested in the tracker, look for issues with the [https://tracker.moodle.org/issues/?jql=labels%20in%20%28addon_candidate%29 'addon_candidate' label].
Line 21: Line 20:
''If you have any ideas for new features in Moodle which might be suitable as projects for new developers, please see [[New feature ideas]].''
''If you have any ideas for new features in Moodle which might be suitable as projects for new developers, please see [[New feature ideas]].''


=== Plagiarism plugin (Moorsp) ===
=== Pusher integration for HTML5 push notifications ===
Moodle supports message output plugins. By adding a plugin for pusher.com and a Javascript service worker to listen for push notifications, we can have realtime HTML5 notifications on all platforms.
:'''Skills required''': Javascript (JQuery, AMD), PHP
:'''Difficulty level''': Medium
:'''Possible mentor''': [https://moodle.org/user/profile.php?id=1337843 Damyon Wiese]


There are various commercial plugins available that use the Plagiarism API in Moodle, but because these plagiarism systems can require paid subscriptions, testing them can be difficult. I'd like to see a basic plugin developed (called Moorsp) that could be used for testing the Plagiarism API and provides a structure that can be built on in future to add further functionality.
=== Improve SCORM plugin ===
There are a number of areas of SCORM that could be improved as part of a GSOC project, some of these are bigger projects and others could be combined to form a single project.


The initial aim of this project is not to develop a new Plagiarism checking tool but to develop a tool that provides complete Behat and unit tests for the Moodle Plagiarism API.
These are just some examples, take a look at the open SCORM issues in the Moodle tracker for a list of other issues.
* Improve Grading (MDL-51086, MDL-52871, MDL-55004, MDL-37421)
* Add Support for Safe Exam Browser (MDL-41054)
* Add new option to force new attempts (MDL-32585)
* Improve validation of SCORM packages (MDL-38060, MDL-24057)
* Migrate scorm_cron into new tasks API (MDL-53343)
* Convert YUI Treeview to use Jquery (Moodle is moving away from YUI and the existing Treeview has a few issues)


All files uploaded to Moodle are stored on disk using the contenthash of the file as the filename - this means that if a user uploads the exact file multiple times in different locations only one file is stored on disk. The plugin should implement a check to see if the exact file has been submitted to any other courses/activities and display related information if another match has been found.
Requirement for prospective students:
* We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered. This MUST be completed before your application can be considered valid.
:'''Skills required''': PHP
:'''Difficulty level''': Medium
:'''Possible mentor''': [http://moodle.org/user/view.php?id=21591&course=5 Dan Marsden]


Existing Plagiarism plugins (turnitin, urkund, compilatio etc) make use of the legacy log feature of the events api - the new plugin should use the new api and not rely on legacy logs.
=== Advanced Grading in Forums ===
Finish the work required to add the advanced grading feature to the Moodle forum activity. This builds on some existing work available at MDL-31860


Deliverables:
Deliverables:
* All Plagiarism API functions should be implemented.
* Update existing patch to work on latest master branch (existing patch based on an early release of 2.9)
* Support for Assign, forum and Workshop modules should be implemented.
* Modify the forum grading so that it pushes 2 grade areas (or 3 including ratings) into the gradebook instead of a single grade.
* Full Unit test coverage of all plugin functions.
* Improve interface that allows overall forum participation grading.
* Full Behat tests for Assign, forum and workshop modules should be implemented to ensure that all Plagiarism API functions are working as expected.
* Behat tests for all new functionality.
* The code should pass 100% of the Moodle codechecking tools to ensure the code meets with Moodle Guidelines.
* The code should pass 100% of the Moodle codechecking tools to ensure the code meets with Moodle Guidelines.
* The code should perform well with appropriate use of the Moodle caching tools.


Future Improvements (outside scope of initial project)
Extra requirement for prospective students:
* Add Plagiarism API to the Moodle Glossary plugin.
* We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered - on top of this you must also attempt to convert one existing QA test into a Behat test. This MUST be completed before your application can be considered valid.
* Implement functions that allow the plugin to post content to an external source - a future open source moorsp server that will receive content and generate a similarity report - we may be able to re-purpose some of the code from the old plagiarism_crot plugin to do this.
 
:'''Skills required''': PHP
:'''Skills required''': PHP
:'''Difficulty level''': Medium
:'''Difficulty level''': Medium
:'''Possible mentor''': [http://moodle.org/user/view.php?id=21591&course=5 Dan Marsden]
:'''Possible mentor''': [http://moodle.org/user/view.php?id=21591&course=5 Dan Marsden]
:'''Discussion''': [http://dev.moodle.org/mod/forum/discuss.php?d=1822]
:'''Initial code structure''': [https://github.com/danmarsden/moodle-plagiarism_moorsp]
=== Javascript basic SCORM 1.2 player for the Mobile app ===
Currently there are several Javascript SCORM players with basic support for SCORM 1.2:
* http://www.scormpool.com/
* https://github.com/skfriese/simple-scorm-api
* https://bitbucket.org/jugger0/tsp
The aim of this project is to fix and package inside an Angular module one of those players to be included in the official Moodle Mobile app.
This will allow the app to play SCORM files in online and offline mode.
The player should be able to:
* Parse the imsmanifest.xml file in order to display the available Organizations and structures inside the package.
* Display a basic SCORM player with a basic menu tree.
* Implement a basic runtime support in order to be able to retrieve the SCOs tracking from the Moodle site.
* Store in the app local storage the user interactions (API runtime) to be synchronized when the user is online again.
:'''Skills required''': HTML5, Javascript, AngularJS
:'''Difficulty level''': Medium-High
:'''Possible mentor''': [https://moodle.org/user/profile.php?id=49568 Juan Leyva]
=== Javascript basic IMS CP player for the Mobile app ===
This is a minor project related to the previous one, it can be described as an initial step for implementing the SCORM player.
Detailed information about the IMS CP format can be found here: [http://edutechwiki.unige.ch/en/IMS_Content_Packaging]


The Mobile app should be able to download the package, extract it and open the contents in a basic player similar to the Moodle one. The manifest XML file should be parsed in order to obtain a navigation TOC:
=== Improve end-to-end testing in the Mobile app ===


[[File:IMSCP Sample.png]]
[https://angular.github.io/protractor/#/ Protractor] is an end-to-end test framework for AngularJS applications. Protractor runs tests against your application running in a real browser, interacting with it as a user would.


Contents will be opened in an iframe, the TOC links will target the iframe.
There are almost 40 e2e tests in the Mobile app, right now tests only works in old versions of Node and Protractor.  


:'''Skills required''': HTML5, Javascript, AngularJS
The aim of this project is to upgrade the Node, Protractor, Selenium and the rest of dependencies to be able to run tests in both a browser and in real devices via external systems like Saucelabs.  
:'''Difficulty level''': Low
:'''Possible mentor''': [https://moodle.org/user/profile.php?id=49568 Juan Leyva]


=== Improved enrol_meta plugin ===
Tasks:
* Upgrade the Node, Protractor and dependencies versions to be able to run tests in modern environments.
* Configure the app to be able to be launched in Saucelabs via Travis (if possible).
* Fix existing tests that are failing
* Update Moodle Mobile documentation with new instructions for setting up both environments.


Current enrol_meta plugin provides functionality to automatically synchronise enrolments between two courses. See [https://docs.moodle.org/en/Course_meta_link Course meta link]. Teacher creates an instance of enroment method in the meta course and links it to one child course. Later cron job ensures that any enrolment change in the child course is pushed to the parent.
:'''Skills required:''' Javascript (AngularJS)
:'''Difficulty level:''' Medium
:'''Possible mentor:''' [https://moodle.org/user/profile.php?id=49568 Juan Leyva]


Unfortunately user interface is very inconvenient. The main problem is inability to bulk select courses and/or order courses on the Enrolment methods page. Plus it lacks important functionality to synchronise suspended/expired enrolments. See the number of highly voted issues MDL-27628, MDL-17929, MDL-32161, MDL-31451
=== Migrate Moodle Mobile publishing scripts to Gulp tasks ===


The proposal is to re-write this enrolment plugin completely. One instance of the plugin should allow to link multiple child courses and additionally synchronise each of them with a group in the meta course. Ideally it should also allow to synchronise all courses in the category.  
Right now the Mobile app uses several scripts ([see here https://github.com/moodlehq/moodlemobile-scripts]) for common tasks related to publishing.


This project requires development of both user interface (JS) and backend (PHP).
Those scripts should be migrated to Gulp tasks so they are available among the other tasks already implemented.


:'''Skills required''': PHP, Javascript (YUI)
Tasks:
:'''Difficulty level''': Medium
* Migrate the prepare-release-version.sh script to gulp task
:'''Possible mentor''': [https://moodle.org/user/profile.php?id=1334243 Marina Glancy]
* Migrate the prepare-release-integration.sh script to gulp task
* Improve previous scripts to compile the resulting app via Phonegap Build API
* Migrate the rest of scripts that synchronizes language translations


=== Allow to crop/resize/rotate images when inserting them ===
:'''Skills required:''' Javascript  
 
:'''Difficulty level:''' Medium
This project is inspired by MDL-32183. There are two options on how to implement this functionality - as a repository plugin or as an atto plugin.
:'''Possible mentor:''' [https://moodle.org/user/profile.php?id=49568 Juan Leyva]
 
:'''Skills required''': Javascript (YUI), PHP
:'''Difficulty level''': Medium
:'''Possible mentor''': [https://moodle.org/user/profile.php?id=1334243 Marina Glancy]


==See also==
==See also==


* [[GSOC]] - describing Moodle's involvement with Google in their Summer of Code program
* [[GSOC]] - describing Moodle's involvement with Google in their Summer of Code program
* [http://tracker.moodle.org/secure/IssueNavigator!executeAdvanced.jspa?jqlQuery=type+in+%28%22New+Feature%22%2C+Improvement%29+AND+resolution+%3D+unresolved+ORDER+BY+votes+DESC&runQuery=true&clear=true Popular new feature and improvement requests in Tracker]
* [https://tracker.moodle.org/issues/?jql=type%20in%20%28%22New%20Feature%22%2C%20Improvement%29%20AND%20resolution%20%3D%20unresolved%20and%20labels%20in%20%28addon_candidate%29%20ORDER%20BY%20votes%20DESC Popular new feature and improvement requests in Tracker that can be implemented as plugins]
* [[Projects for new developers/Archive|Archive]] of outdated and/or inactive calls for projects
* [[Projects for new developers/Archive|Archive]] of outdated and/or inactive calls for projects
* [https://docs.moodle.org/dev/Moodle_Wishlist a Wishlist] by some Moodle users. Some of the good ideas here may be adopted.

Revision as of 20:16, 21 March 2017


Getting started

Moodle uses PHP, JavaScript, SQL and a number of other Web languages, so learning those is a good place to start.

When you have some basic PHP programming skills, you may wish to start learning about how the Moodle code is organised. It is recommended that you complete the Introduction to Moodle Programming course on dev.moodle.org. To access this you will need to have an account on moodle.org first.

If you are looking for projects suggested in the tracker, look for issues with the 'addon_candidate' label.

If you are looking to make a quick contribution, look for tracker issues with marked as easy.

Please consider adopting a plugin seeking a new maintainer. See the Plugins adoption programme.

As you become more involved in Moodle development, you might like to learn more about the coding conventions used and how changes to Moodle core code are processed.

Potential projects

This evolving page lists possible Moodle projects for new developers derived from community suggestions.

If you have any ideas for new features in Moodle which might be suitable as projects for new developers, please see New feature ideas.

Pusher integration for HTML5 push notifications

Moodle supports message output plugins. By adding a plugin for pusher.com and a Javascript service worker to listen for push notifications, we can have realtime HTML5 notifications on all platforms.

Skills required: Javascript (JQuery, AMD), PHP
Difficulty level: Medium
Possible mentor: Damyon Wiese

Improve SCORM plugin

There are a number of areas of SCORM that could be improved as part of a GSOC project, some of these are bigger projects and others could be combined to form a single project.

These are just some examples, take a look at the open SCORM issues in the Moodle tracker for a list of other issues.

Requirement for prospective students:

  • We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered. This MUST be completed before your application can be considered valid.
Skills required: PHP
Difficulty level: Medium
Possible mentor: Dan Marsden

Advanced Grading in Forums

Finish the work required to add the advanced grading feature to the Moodle forum activity. This builds on some existing work available at MDL-31860

Deliverables:

  • Update existing patch to work on latest master branch (existing patch based on an early release of 2.9)
  • Modify the forum grading so that it pushes 2 grade areas (or 3 including ratings) into the gradebook instead of a single grade.
  • Improve interface that allows overall forum participation grading.
  • Behat tests for all new functionality.
  • The code should pass 100% of the Moodle codechecking tools to ensure the code meets with Moodle Guidelines.

Extra requirement for prospective students:

  • We require prospective students to make an attempt at fixing at least 1 issue in the Moodle tracker before their proposal can be considered - on top of this you must also attempt to convert one existing QA test into a Behat test. This MUST be completed before your application can be considered valid.
Skills required: PHP
Difficulty level: Medium
Possible mentor: Dan Marsden

Improve end-to-end testing in the Mobile app

Protractor is an end-to-end test framework for AngularJS applications. Protractor runs tests against your application running in a real browser, interacting with it as a user would.

There are almost 40 e2e tests in the Mobile app, right now tests only works in old versions of Node and Protractor.

The aim of this project is to upgrade the Node, Protractor, Selenium and the rest of dependencies to be able to run tests in both a browser and in real devices via external systems like Saucelabs.

Tasks:

  • Upgrade the Node, Protractor and dependencies versions to be able to run tests in modern environments.
  • Configure the app to be able to be launched in Saucelabs via Travis (if possible).
  • Fix existing tests that are failing
  • Update Moodle Mobile documentation with new instructions for setting up both environments.
Skills required: Javascript (AngularJS)
Difficulty level: Medium
Possible mentor: Juan Leyva

Migrate Moodle Mobile publishing scripts to Gulp tasks

Right now the Mobile app uses several scripts ([see here https://github.com/moodlehq/moodlemobile-scripts]) for common tasks related to publishing.

Those scripts should be migrated to Gulp tasks so they are available among the other tasks already implemented.

Tasks:

  • Migrate the prepare-release-version.sh script to gulp task
  • Migrate the prepare-release-integration.sh script to gulp task
  • Improve previous scripts to compile the resulting app via Phonegap Build API
  • Migrate the rest of scripts that synchronizes language translations
Skills required: Javascript
Difficulty level: Medium
Possible mentor: Juan Leyva

See also