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
(separate out projects that are valid for GSOC 2014)
(This page will not be migrated to new devdocs)
 
(120 intermediate revisions by 23 users not shown)
Line 1: Line 1:
<!--
{{Template:WillNotMigrate}}
[[File:GSoC2012 logo.png|right]]


<p class="note">'''Latest news:''' ''Moodle will be taking part in the [http://socghop.appspot.com/ Google Summer of Code] for our sixth year in 2012!''</p>
{{GSOC}}
==Getting started==


If you're thinking of applying to work with Moodle for GSOC 2012, please check the information on [[Applying to work with Moodle for GSOC]] and join our gsoc2012@conference.moodle.org jabber chat!
* 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 go through the [[Tutorial]].
* If you are looking for projects suggested in the tracker, look for issues with the [https://tracker.moodle.org/issues/?jql=Difficulty%20%3D%20Easy%20AND%20resolution%20%3D%20Unresolved%20 'addon_candidate' label].
* If you are looking to make a quick contribution, look for tracker issues with marked as [https://tracker.moodle.org/issues/?jql=Difficulty%20%3D%20Easy easy].
* As you become more involved in Moodle development, you might like to learn more about the [[Coding|coding conventions]] used and how changes to Moodle core code are [[Process|processed]]. Once you become confident enough, please consider adopting a [https://moodle.org/plugins/browse.php?list=set&id=61 plugin seeking a new maintainer].


=Getting Started=
==Potential projects==


Moodle uses PHP, JavaScript and a number of other Web languages, so learning those is a good place to start.
This evolving page lists possible Moodle projects for new developers derived from community suggestions and lists projects together with experienced core developers willing to mentor new developers.
 
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.
 
''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 to make a quick contribution, look for tracker issues with marked as [https://tracker.moodle.org/issues/?jql=Difficulty%20%3D%20Easy easy].
 
As you become more involved in Moodle development, you might like to learn more about the [[Coding|coding conventions]] used and how changes to Moodle core code are [[Process|processed]].
 
= Google Summer of Code 2014 =
 
This is a list of projects with confirmed mentors that may be considered for Google Summer of Code 2014.
== SCORM ==
 
There are various SCORM related projects I'd be interested in mentoring for GSOC in 2014.
* Fix/Improve built in SCORM navigation (MDL-25642 MDL-29193 MDL-39551)
* Improve SCORM performance, PHPDocs, compliance with coding guidelines. - There are a number of known areas of SCORM code that need a clean-up/re-structure - It would be good to audit all the scorm code and make it comply with Moodle's coding guidelines and improve the performance of the code - it would be good to implement MUC in areas that can make use of it - Ideally we would also rewrite the datamodels/scorm_*_.js.php files to separate the php from the js and make the JavaScript cache-able - (work started on this in MDL-35870) Other related bugs: MDL-41216 MDL-41665 MDL-42314
* SCORM reports - there are currently 3 SCORM reports - ideas on new report plugins would be considered as possible projects.
 
:'''Skills required''': PHP, JavaScript
:'''Difficulty level''': Medium -> Hard
:'''Possible mentor''': [http://moodle.org/user/view.php?id=21591&course=5 Dan Marsden]
 
==HTML maths editor==
 
Traditional written mathematical notation takes advantage of a rich set of special symbols, together with their relative size and
position on a two dimensional page.  Underlying mathematical expressions is a well-defined semantic tree structure.  When typing a mathematical expression into a computer keyboard the ability to take advantage of the features of traditional mathematical notation is severely limited. Essentially one has only a one-dimensional string of symbols taken from the limited alphabet found on computer keyboards and a strict syntax. Syntax is often problematic for users.  For example, they differ between applications and they do not correspond to traditional notation.
 
DragMath (http://www.dragmath.bham.ac.uk) is a nice "drag and drop" equation editor that has been integrated with the Moodle editor for some time. However, it is implemented in Java, and that is becoming increasingly problematic, with increasing security warnings on the desktop, and limited support on mobile devices. We would like a new editor, keeping all the good parts of DragMath, but written in JavaScript. This could then be integrated with Moodle and other web applications.
 
Goal: to create a useful and usable "mathematics entry system" for Moodle, using a combination of JavaScript and HTML5.
 
This should
* parse typed expressions into an internal tree representation
* provide useful feedback to users, e.g. "missing bracket", on ill-formed expressions.
* have flexible options for providing a "context" to mediate between the requirements of a strict syntax, and users' expectations based on traditional written mathematics.  E.g. is "x(t+1)" a multiplication of x and (t+1) or application of the function "x" to the argument "(t+1)"?
* have "drag and drop" components (in HTML5)
* have a modular and flexible output mechanism, this includes
** on-screen display "as you type/edit"
** output in a variety of formats, LaTeX, Maxima syntax, MathML etc. which can be embedded into web applications, specifically Moodle.  It is not a goal to provide multiple outputs, but it is a goal to develop a framework in which other users can contribute such formats.
** show users the internal tree representation on request
* potentially enable manipulation (computer algebra) of internal expressions by pre-defined rules.
* have a well documented and simple API.
 
Much of the basic design has been done in for example
* DragMath  http://www.dragmath.bham.ac.uk/
* Numbas    http://www.ncl.ac.uk/maths/numbas/
* CanvasMath https://code.google.com/p/canvasmath/
We will draw from this previous design experience to guide the development.
 
See this forum thread: https://moodle.org/mod/forum/discuss.php?d=251627 for more.
 
:'''Skills required''': JavaScript, HTML 5
:'''Difficulty level''': Hard
:'''Possible mentors''': Chris Sangwin
 
==New question types==
 
This is not really a specific project idea, but I would like to point one an important general area:
 
With HTML5 the range of what can be done in a web browser keeps expanding. Can we use these possibilities to make new, much more interactive, question types for Moodle?
 
There are some ideas in this forum thread: https://moodle.org/mod/forum/discuss.php?d=222439
* a question type where students have to join things up correctly by adding lines to a diagram (for example to complete an electric circuit).
* a question type where students can change the colour of certain parts of a diagram, and they have to get it correct.
* ... I am sure there are more possible ideas. Use your imagination!
 
There are also some ideas which don't require complex HTML5 things:
* A 'Give 3 examples of ...' Question type. For example "Give three ways to speed up a chemical reaction:". Answer 'heat', 'increase concentration', 'catalyst' (in any order). However, 'warm it' might be an acceptable alternative, but 'heat', 'catalyst', 'warm it' should only score 2/3.
* An ordering question type. Probably based on the OU's qtype_ddwtos. The think that cannot do is give good credit for partially correct answer. For example 'F', 'A', 'B', 'C', 'D', 'E' might be considered close to the right order, but if you do that with ddwtos it will score 0.
* A question type where students must highlight certain words in some text. E.g. "Find all the verbs in this paragraph."
 
There is also scope to make significant enhancements to existing question types. For example
* in [https://moodle.org/plugins/view.php?plugin=qtype_ddmarker Drag and drop markers] allow teachers to define the drop zones by dragging with the mouse, rather than typing co-ordinates.
* in [https://moodle.org/plugins/view.php?plugin=qtype_pmatch the pattern-match question type] a tool like STACK question tests to help teachers verify that their answer matching works correctly (upload example responses, indicate what grade they should receive, show what grade they actually receive, and highlight the differences.
 
Before proposing anything, please make sure you are familiar with the [https://docs.moodle.org/22/en/Questions standard question types] already available in Moodle, and the [http://moodle.org/plugins/browse.php?list=category&id=29 contributed question types] that other people have already created.
 
:'''Skills required''': PHP & JavaScript
:'''Difficulty level''': Medium - Hard
:'''Possible mentors''': Tim Hunt
 
 
=Future Potential Projects=
 
This evolving page lists possible Moodle projects for new developers derived from community suggestions. These projects will not be part of Google Summer of Code at this stage.


''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]].''


==Bulk enrolment assigning enhancements==
=== Acceptance tests for the Moodle app ===


Currently enrolling/unenrolling users in multiple courses can only be done manually through the relevant courses. It would be great to be able to do this in bulk.  
Since Moodle 3.7 it will be possible to write and run acceptance tests for the Moodle app.


This project will extend the bulk user actions page (site admin > Users > Accounts) to allow assigning a role to a user in many courses easily; for example, enrolling one or more students in several courses. This bulk enrolling tool should be available for all roles within the site.
Tasks:
* Write new acceptance tests for the Moodle app


Other additional functionality should include:
Requirement for GSOC prospective students:
* a new filter for courses,
* a bulk action to view a list of users with their course enrolments,
* export the list of user enrolments to a file, and
* other enhancements suggested by the community.


:'''Skills required''': PHP
* We require prospective students to set-up and run in a local environment the existing tests hosted [https://github.com/moodlehq/moodle-local_moodlemobileapp here] following this documentation: [[Acceptance testing for the mobile app]]. Students must record and submit a video of the tests running on a local machine as part of the GSOC application process.
:'''Difficulty level''': Medium
* We also require students to create an additional simple test based [https://github.com/moodlehq/moodle-local_moodlemobileapp on the existing ones]
:'''Mentor''': [http://moodle.org/user/view.php?id=955449&course=5 Rossiani Wijaya]


For further details see:
:'''Skills required:''' Behat (PHP)
* Tracker issues MDL-10002, MDL-15449, MDL-17011 and
:'''Difficulty level:''' Medium
* forum post [https://moodle.org/mod/forum/discuss.php?d=106961 Bulk user actions improvement]
:'''Possible mentor:''' [https://moodle.org/user/profile.php?id=49568 Juan Leyva]


==Form text autosave==
=== Front-end editor for the plugin skeleton generator ===


Moodle is a web based application which makes heavy use of text input from the web browser, a common annoyance from our users is loosing that text input into the browser. A common request is for input to be automatically saved or manually saved as a draft in order that input is not lost or can be worked on between sessions. Similar functions to this exist in web applications like wordpress or Gmail.  
This is a follow-up project for a [[GSOC/2016#Plugin skeleton generator|successful GSOC 2016 project]] that resulted in a new tool allowing developers to quickly generate a skeleton (scaffolding, template) for a new Moodle plugin. The tool proved to be a helpful helper with significant impact on the quality of Moodle plugins code. This follow-up project aims at further improvements of the skeleton generator. The primary goal is to implement a developer-friendly user interface / front-end editor allowing to configure the plugin's properties (recipe file) easily. The UI should guide the developer through the process of designing and defining the plugin properties and facilitate the whole process.


Your task would be to implement this feature in Moodle. It is important that you make consideration of the fact that unlike other applications like blogging engines - Moodle has a wide variety of places where text would need to be stored as draft (examples: a forum post, a quiz essay question, an online text assignment) and this solution should be universal across all long text entry fields.  
* 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.


If you are interested in this project it is important that you research the various attempts which have been made to implement this feature in Moodle, posts on the Moodle forums and demonstrate awareness in your application.
:'''Skills required''': PHP + JS
 
:'''Skills required''': PHP & JavaScript [YUI]
:'''Difficulty level''': Medium
:'''Difficulty level''': Medium
:'''Possible mentors''':
:'''Possible mentor''': [http://moodle.org/user/view.php?id=1601&course=5 David Mudrák]
 
For further details see:
* Tracker issue MDL-18014
* Related discussions: [http://moodle.org/mod/forum/discuss.php?d=191050 Usability idea for 2.3: Autosave] [[User_Data_Always_Safe]]
* See also MDL-14963 and sub-tasks, where this functionality has been implemented specifically for the quiz. Is this the basis for a generic solution?
 
==Implement HTML5 support as the default mode for mforms (moodleform)==
 
We have an [[Form_API|API]] to define and use forms in Moodle. This needs to be updated to support [http://www.html5rocks.com/en/tutorials/forms/html5forms/ new HTML5 form attributes and elements] for a better user experience.
 
The outcome should make the many forms defined in Moodle use HTML5 by default. (See MDL-35565)
 
It would be an added bonus to have the new elements incorporated into some of the more often used mforms (module settings forms, course settings forms, user forms ...).
 
:'''Skills required''': HTML5, PHP, JavaScript
:'''Difficulty level''': Hard
:'''Possible mentors''': [https://moodle.org/user/view.php?id=1146834&course=5 Aparup Banerjee], [https://moodle.org/user/profile.php?id=1451616 Frédéric Massart]
 
For further details see:
* Tracker issues MDL-35565, MDL-38181, MDL-38114, and
* [http://www.wufoo.com/html5/elements/2-progress.html Progress and Meter], a related article.


==Enrolment UI improvements==
=== Make badges criteria a subplugin ===


The [[:en:Enrolled_users#Enrolling_users|Enrolment user interface]] could do with an overhaul to improve its usability and accessibility. At present the key issues are:
Moodle is an acronym for "Modular Object-Oriented Dynamic Learning Environment" so it allows for extending and tailoring learning environments using community sourced plugins.


* pagination of enrolled displayed;
Moodle let users create badges, which are a validated indicator of accomplishment, skill, quality or interest that can be earned. However, for now, the criteria for earning them are a closed list (https://docs.moodle.org/en/Using_badges#Criteria).
* searching for users - currently not implemented; and
* JS popups - broken and inefficient in places, modal + focus issues.


It would be good to write a new interface offering improvements to the existing interface. This may include features and improvements such as:
* We require to prepare a mechanism to create custom create to Moodle as a third-party plugin. More information about that can be found here: https://tracker.moodle.org/browse/MDL-39864
 
* dynamic filtering (using JS);
* pagination;
* filter by letter (similar to mod_assign grading page); and
* improved/rewritten JS popups.
 
Things to consider for this project include:
 
* identifying the issues with the current interface, paying particular reference to:
** courses with a small number of user enrolments;
** courses with many user enrolments;
** finding specific users; and
** finding types of user.
* and also considering:
** how usability and user experience can be improved;
** creating reusable components that can be used elsewhere in moodle;
** ensuring accessibility; and
** maintaining a basic non-javascript version of the interface.
 
Another pending task is to refactor the code doing manual enrolment of cohort users - MDL-35618.
 
:'''Skills required''': PHP & JavaScript [YUI]
:'''Difficulty level''': Medium -> Hard
:'''Possible mentors''': [https://moodle.org/user/profile.php?id=268794&course=5 Andrew Nicols]
 
== Plagiarism plugin ==
 
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 that could be used for testing the Plagiarism API, providing simple useful functionality. All Plagiarism API functions for all Modules that support the API should be implemented and used. It could check the file contenthash against all other files uploaded in the Moodle files table and if a matching record is found it should display information about the duplicate submission including if the same student has submitted the file in a different course/activity or if a different user has uploaded the file with the same contenthash.


:'''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''': [https://moodle.org/user/profile.php?id=119927&course=5 Sara Arjona]
 
== Improve automated functional test writing interface ==
 
[[File:GSOC_2013_acceptance_test_new_ui_proposal.png|thumb|Mockup of the new interface]]
 
Automated functional testing is a huge step into the future of software development. In addition to unit testing, it allows software to be continuously tested for regressions as developers make changes to the system. This allows greater software quality, and in turn, greater confidence.
 
We automatically test Moodle's features by automating actions a real user would perform. This "tests" are written in a human-friendly language being made up of sentences like '''I follow "Edit settings"''' or '''I press on "Save changes"'''. Currently we provide an interface to list sentences that can be used to form these "tests", called feature files. This project's aim is to improve this interface to assist developers creating new automated functional tests for Moodle.
 
The current user interface on the latest Moodle 2.5 development version looks like [https://docs.moodle.org/dev/Acceptance_testing#Available_steps this]. Sentences can be listed and filtered, but there is no further support from the page. It would be helpful to allow feature test files to be created and edited directly on this page. Users would be able to select and insert steps and add expected arguments to form sentences. Templates could be provided and tests could be syntax-checked within the interface, all with the goal of reducing human error.
 
A mockup of how the interface could appear is shown to the right.
 
:'''Skills required''': JavaScript & PHP (also Git)
:'''Difficulty level''': Easy - Medium
:'''Possible mentors''': [https://moodle.org/user/profile.php?id=122326 David Monllaó], [https://moodle.org/user/profile.php?id=381842 Michael de Raadt]
 
Before applying, please be sure to read about [[Acceptance_testing|Moodle's automated testing integration]] and understand it.
 
== Assignment submission type URL submission ==
 
This is an idea for a new [[Assignment_Subtypes_Combined|submission plugin]] for the assignment module. It will allow students to provide the URL to a webpage and the plugin will download the webpage and its embedded content to form a snapshot at the time of submission, collected together in a PDF file. The plugin will allow snapshots of multiple pages to be added to form a single submission. Optionally students could also provide correct bibliographic fields to identify the webpage author etc.
 
There is a skeleton of this plugin available as a starting point so the parts that would need to be implemented have less to do with the Moodle API and more to do with general php/curl development.
 
:'''Skills required''': PHP (also Git or others source version control systems)
:'''Difficulty level''': Medium
:'''Possible mentor''': [https://moodle.org/user/profile.php?id=1337843 Damyon Wiese]
 
==Iconic table of contents resource==
 
[[File:Iconic_Table_of_Contents_Resouce.png|thumb|Iconic table of contents resource mockup]]
 
A common practice employed by teachers is to create a label containing icons that are linked to activities or sections within the course.
 
This project would be to create a resource module that would allow teachers to create such iconic representations easily.
 
The resource would have an understanding of the sections and activities in a course, presenting them as options to the teacher, with the potential to use standard or custom icons. Icons should be easily arrangeable. Text labels below icons could be optionally visible, with text based on the titles of activities/resources being linked to.
 
The icons should be presented in a responsive CSS layout that wraps icons to the screen width. The resource should work with the multi-lang filter, hidden sections and paged course formats. The resource should be accessible to users of non-visual browsers and screen readers.
 
:'''Skills required''': PHP (and potentially YUI)
:'''Difficulty level''': Easy - Medium
:'''Possible mentors''': [https://moodle.org/user/profile.php?id=381842, Michael de Raadt]
 
==Parent access==
 
At present there is no official support for parent or mentor access in Moodle.
 
This project includes multiple stages: documenting use cases, suitable storage of parent-user relationship, new admin tools, reports and support in existing activities.
 
:'''Skills required''': PHP, Moodle access control and enrolments
:'''Difficulty level''': Medium
:'''Possible mentors''': [[User:Petr Škoda (škoďák)|Petr Škoda (škoďák)]]
 
==Role definition export and import UI==
 
This project includes defining of XML structure describing role permissions and settings, roles admin UI usability study, implementation of role export, new UI for creation of roles and resetting.
 
:'''Skills required''': PHP
:'''Difficulty level''': Easy
:'''Possible mentors''': [[User:Petr Škoda (škoďák)|Petr Škoda (škoďák)]]
 
==LRS (Learning Record Store) plugin==
 
A Learning Record Store (LRS) = a place to store learning records.
With new event and logging framework it will be easy to integrate LRS with moodle.
 
Open source LRS which can be integrated:
* [http://learninglocker.net/, Learning locker]
* [http://www.adlnet.gov/tla/lrs/, ADL LRS]
 
:'''Skills required''': PHP (and potentially YUI)
:'''Difficulty level''': Easy - Medium
:'''Possible mentors''': [https://moodle.org/user/profile.php?id=1328988, Rajesh Taneja]
 
==Event subscription plugin==
This project includes creating a plugin that provides users with an interface to subscribe to various events in Moodle. When an event occurs in Moodle, a notification(via selected messaging plugin) should be sent to all the subscribers with relevant information.
 
[https://docs.moodle.org/dev/Event_2, Event Specs]
 
:'''Skills required''': PHP (and potentially YUI)
:'''Difficulty level''': Easy
:'''Possible mentors''': [https://moodle.org/user/profile.php?id=1310725, Ankit Agarwal]


==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]
 
[[Category:GSOC]]

Latest revision as of 14:09, 20 May 2022


Warning: This page is no longer in use. The information contained on the page should NOT be seen as relevant or reliable.



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 go through the Tutorial.
  • 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.
  • 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. Once you become confident enough, please consider adopting a plugin seeking a new maintainer.

Potential projects

This evolving page lists possible Moodle projects for new developers derived from community suggestions and lists projects together with experienced core developers willing to mentor new developers.

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

Acceptance tests for the Moodle app

Since Moodle 3.7 it will be possible to write and run acceptance tests for the Moodle app.

Tasks:

  • Write new acceptance tests for the Moodle app

Requirement for GSOC prospective students:

  • We require prospective students to set-up and run in a local environment the existing tests hosted here following this documentation: Acceptance testing for the mobile app. Students must record and submit a video of the tests running on a local machine as part of the GSOC application process.
  • We also require students to create an additional simple test based on the existing ones
Skills required: Behat (PHP)
Difficulty level: Medium
Possible mentor: Juan Leyva

Front-end editor for the plugin skeleton generator

This is a follow-up project for a successful GSOC 2016 project that resulted in a new tool allowing developers to quickly generate a skeleton (scaffolding, template) for a new Moodle plugin. The tool proved to be a helpful helper with significant impact on the quality of Moodle plugins code. This follow-up project aims at further improvements of the skeleton generator. The primary goal is to implement a developer-friendly user interface / front-end editor allowing to configure the plugin's properties (recipe file) easily. The UI should guide the developer through the process of designing and defining the plugin properties and facilitate the whole process.

  • 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 + JS
Difficulty level: Medium
Possible mentor: David Mudrák

Make badges criteria a subplugin

Moodle is an acronym for "Modular Object-Oriented Dynamic Learning Environment" so it allows for extending and tailoring learning environments using community sourced plugins.

Moodle let users create badges, which are a validated indicator of accomplishment, skill, quality or interest that can be earned. However, for now, the criteria for earning them are a closed list (https://docs.moodle.org/en/Using_badges#Criteria).

Skills required: PHP
Difficulty level: Medium
Possible mentor: Sara Arjona

See also