 So, I guess we are recording now, hello world and welcome to the Moodle Community Developer Meeting. It is right now February 17 year 2016 and if you are watching us from recordings, we hope the future is bright and we have good time ahead. Looking at the meeting agenda, at least the following hour or two looks really, really promising. We have guys from Moodle HQ in Perth present as well as other Moodle developers going to talk about interesting things tonight. Time flies really quickly. Many things happen daily in the Moodle development world. So let me remind you just a couple of events that happened since the last meeting in October. So, we had a couple of Moodle releases. We released Moodle 3 as a new major version as well as multiple stable updates like minor versions. Currently supported versions are Moodle 3 and Moodle 2.9 with security updates and data loss fixes like data loss bugs are being supported for both 2.8 and 2.7 long term supported version. Moodle started to support PHP 7 officially with the recent Moodle 301. We, the Moodle user association is now open for membership as a new event from past three months. We will hear a bit more about the association from Martin later as well as Moodle also Moodle mobile app. So several regular updates from 2.4 up to 2.8 and big thanks to our Moodle mobile team and Juan and others working on our app which is seeing a lot of new great features with every release and we will again hear more about it today. We finally, we also saw some progress with Travis continuous integration support. We Moodle now supports both Moodle now supports Travis integration for both core patches as well as plugin development and we have a nice documentation that describes the steps. It's pretty easy and every Moodle developer is truly encouraged to try and set up this integration. It helps both with both core patches and with Moodle plugins. We have some upcoming development related events the most upcoming one is the Hackfest which is going to happen in London during the Moodle Mood, Moodle Mood UK, Ireland UK there on March 22nd. So everybody who is able to come you will be very welcome, welcome there. Moodle applied for being Google Summer of Code hosting organization again this year. We should have results available by the end of February and we will inform you as needed. So what's up for today's meeting? We will hear some short information about Moodle users association and Moodle developer course coming. We will see a first prototypes and background information about a new feature coming with Moodle 3.1 which is called competency based education. We will hear some information about improvements with reusable element for inline name editing just to be aware that this API is now available as well as forms library improvements, text API and other small things that we should be aware of with recent Moodle versions. Tim Hunt will present some recent changes to the quiz module that theme designers should be aware of and Juan will present us with plans for supporting Moodle plugins in the mobile app. Let me pass the microphone to Perth in Australia where Martin the gamer should be prepared to continue with his first talk. I'm going to make a presenter now Martin. Hello Perth can you hear us? Here we go now I'm unmuted can you hear me okay? I can hear you okay as well as others. Should I try sharing a webcam as well I don't have any slides. Sure you can yeah please do so. Here we go. Hi. Thank you David I am loving how you're running these meetings and thank you for the introduction and putting it together. So look I just wanted to speak for a minute or two about a couple of things. So the first one is the Moodle user association like David said finally launched. It's really been a year in the making there's been a lot of planning about it a lot of details worked on the the whole structure of it and so on and to see it finally launched and functioning as it is it's really amazing there's nearly a hundred members now and they there's probably quite a few more who are still going through the invoicing process to come that these the members are already engaged and already starting to do the thing they're meant to be doing which is proposing projects for Moodle core and working on those requirements and then after this first six month period and around June the the process will have worked its way through and some chosen projects get passed to Moodle HQ to develop it's it's a new thing I've not seen any model quite like it in the other project so it's new but I have full faith that it's going to work I really have a really good feeling about how it's going so far the committee be doing a great job that we put that we we selected was Nick Thompson at the head but the first voting will happen later this year and from then on the association will choose its own committee so there were some questions about how that works with developers and development in general so the the core development in the the rules of the association does go to Moodle HQ if you're not at Moodle HQ you may be wondering where I where do I fit in here I want to point out a couple of things firstly this is additional stuff to everything else that is already happening so everything that was already happening in the tracker and the forums and everywhere else and here continues to and will do so the association are paying for extra developers basically to do extra work secondly you can still take part in this because it is quite exciting if you want to get involved you can become a member and get involved actually in the association and with a developer background you'll have a good perspective on helping to shape the requirements and make sure they're realistic and so on so that's one way another way you can actually help there is by producing prototypes or mock-ups or you know ideally if we at the end get code that is reasonably that is good code hopefully excellent code that really helps us it'll make it a much easier and cheaper job to get that into Moodle Core so the association we're paying less the actual location of the requirements and the discussion of what's being worked on doesn't have to be inside the Moodle Association website it's a privilege of the members to be able to do it there they can choose to put it out and be more transparent and be anywhere they want to anybody starting a project can can do that you know there's no rule saying everyone must keep it secret or anything like that it's definitely open and once the projects actually get submitted to Moodle HQ once they decided on they get put into the Moodle tracker in a public place so if you look on the Moodle tracker under the MUA project you'll see there is one issue there right now that was the very first issue from the association that was chosen which was to integrate the recycled bin plug-in which is from the community sorry I've forgotten the developer's name but pretty high quality coding a good plug-in and we're integrating it into core there's a few core things to do as well and obviously a lot of integration and testing but that's the first example and there'll be many more of it so I see Nick Thompson's here so I guess Nick you won't mind me saying they can always contact you if they have any more questions yeah no more information about the Moodle Association please feel free to contact me and I can help out with whatever questions you have or anything of that nature put my email in the chat cool the that's it is there any other I'm gonna get I'm gonna get out of here so you can listen to everyone else the other thing I wanted to say was that I just wanted to let everyone know that we are planning on updating our Moodle development support if you look at this the site where we're in now we were in dev.moodle.org there is a course there to learn how to start Moodle programming it's based on Moodle 1.8 and it just takes you through a block mostly it's very outdated Moodle has evolved a lot since then and it's time we address that so I'm just letting you know that we are planning to get some time for Moodle HQ to get a lot of people together to develop something a lot better than that so no details yet but just so you know that that's in the wings and something we hope to have happening within the next month or two so hopefully by the next meeting there will be something to talk about there cool all right thanks back to David cheers all thank you very much Martin for this great news and updates as well as as well as Nick for contact details for the Moodle U association yeah I agree that there's some some sort of tutorial courses for Moodle development it would be a great enhancement to have and to offer to our community developers as it is something that we are often asked for and yep there will be great improvements Jim Hunt is asking who is going to ride the dev course as far as I know there will be a there will be basically core core developers from HQ working on it initially with I suppose I suppose that the community will be then again involved somehow in further improvements of the course and everything yeah so HQ will do a sprint on it to get started and we will see how it goes great so that was there was some news from from Martin if anybody else is going to curious about things or details behind please see all the resources and links let's move on to Damon who is going to present us with this competency-based education feature of framework or API that is going to land in Moodle Moodle 3.1 so Damon you are now presenter hello everyone I can hear me fine yep it's good so what I wanted to talk about is firstly the talk a little bit about the competency-based education feature that we've been working on and then I wanted to sort of only briefly touch on the features of it and then jump into some kind of developer notes of things that we've done when we were writing the code and things that we found because we used a lot of new JavaScript systems and templates and all sorts of things when we were building this feature and I thought it would be useful to sort of just give you a note of some things that we thought were good and and also just a background on how that new block of code is structured because there are a lot of things in there which are a bit different to how things have been done in the past now I'm just looking for the screen share button if anybody can help me out it should be in the left top corner once you are presented okay how did that go did that end up working I just accepted some Java yeah it takes sound in the blue button to actually make it make it happening but it works now thank okay okay so I'll quickly do is just quickly show on the dev sites so what we've set up if anybody's interested in looking at the CBE so we have the prototype sites set up on this prototype model and from a couple of example in an education environment and an example in a workplace environment so the differences between those are the frameworks that have been set up and just some of the information about the users and the course example content but I'll log into this I've already logged into this one so I'm an admin I'll just give you a very quick walk-through over the features in CBE so the first thing is that at that level you set up these conferences which is like a long list of companies standard and they're organized as a truidencies so each node in the tree has parents and you can drill down to different levels in the tree and right down to the leaves which we'll show you has a code and that's sort of saying you do these things to achieve the the competency so you start with the framework which is this structure tree and then you create a learning plan template and the tree just a list of a specific set of competencies that you want a group of users to achieve so I've got this year one template which will have some competencies in the list and so the learning plan template is so that I can assign the same template to lots of different and then if I play all of the users in plans will get automatically updated so they get kept in sync just by managing everything from a template you also have the option of creating plans for individual users don't have a template and they won't be automatically updated so once you've got these structures set up site-wide and outside of a course then a teacher decide a course all of the company belong to that so they can choose those competencies from any frameworks on the site they can also set these automatics to the course completion or activity completion so when something gets completed it will either attach an evidence or will actually complete the competency or send it for review so that way lots of different people have different use cases for using competency based education some of them want to mark everything manually and have certain people do the and some people want to have it as automated and hands off as possible so it's sort of flexible in the way that you set it up and then when you are in a course you can see for each user impedances and you can all them for that Damon can interrupt for a while yes we are losing sound a bit and I have an idea maybe you could try to make the window that you are sharing a bit smaller because every time you know the page needs to be redrawn we are getting we are losing the audio probably due to bandwidth problem so maybe the less changes we can that can be sure the better I guess sure I'll just switch that now I'm not sure how that sharing tool works yeah I remember yeah you can share just the just the whole screen or desktop or just an a region on it of it something like that there was an option for it if it doesn't doesn't work I'm pretty sure we can continue just trying you know to to click as not that often so that the actual screen is not redrawn that often and Tim reports there should be an option to share just one window yep so I think it's just sharing a small region at the moment yeah I think it looks better come on okay so I'm almost finished showing the competency features now anyway so the idea is that you you set up these competencies and they're separate from the grades and grade book which is an important distinction so you can you can be graded for activities and receive a score but whether you've actually achieved the competencies that will link to that activity or a separate and completely different thing and the other thing is that the competencies exist outside of a course so if you achieve a competency in a course you've achieved that competency even if that course is reset or the course is deleted as you no longer have access to it all of the evidence that you ever achieve against a competency just keeps building up and building up and then a student has a record of all of the competencies that they've achieved and all of the evidence that they gathered to achieve those competencies now that is a very very brief overview of the the systems involved and if you want more details there's a very detailed spec for the competency work and you can have a look at the tracker issue what I wanted to show now is just to talk a little bit about some of the design things that we looked at when we were building this competency based education so let me double check so that slide show on the screen chair fairly well there's a lot of text in there so you might need to screen but this is sort of an overview of how we designed all of the code behind the competency the CDE feature so we have the first thing is that we built this new base class for persistent objects which takes care of a lot of the tedious work about so basically you just define a list of the properties which map to the columns in the database table and you give tell them about the types and then you can put custom validation on any of the types and you have basically a base class for that particular model object and that means that you get full create read update and delete support for that object and it will make sure that all the proper validations are run every time that you call update or create and you don't need to manually code all of those things so on top of that layer we built another API layer which is a class with a set of static functions and this is where a lot of the logic and the permission checks are done but this basically gives you a class that you can call from anywhere and know that you're using the API in a safe way you're not bypassing permission checks or going to be using the object in the wrong way and alongside that API is a model for having x for each of our persistent objects when we want to export them for a web service we want to do it in consistent way and all of the additional properties that we want to add into mustache templates or into web service functions they always get added in the same way by the same exporter the exporters are also useful because they can generate the definitions for the web service functions automatically based on the persistent objects so this save does a lot of work initially we didn't have the expert supporters and we found that we were making a lot of simple typos and mistakes when we were trying to write the correct web service definitions that's one of the things that as we use web services in Moodle more and more we find that the current way to set up the web services very tedious and there's a lot of boilerplate code that you need to write every time so if we can automate that and make it easier to build web services and that will be really good so all of those things together create the model which is your API that you're exposing to the rest of Moodle and to web services and Ajax functions and it's a nice consistent model you can put unit tests on all of the layers which we've done and it and it's worked really well so then we take that API class and we just make external functions for all of the functions in our API class so again can you scroll down a bit as the region you are displaying or sharing just the top of the page with Google Docs to bar and these things so maybe if you scroll a bit down we'll just try the region yeah sorry for this it's okay Michael report that you should be able to drag the region you sure there is a there are really good comments in the in the chat area back on what's what we are seeing so far I think I'm just waiting for the Java screen share it always works out or maybe and you suggest that if it is a Google Doc you might be able to export it to PDF and just upload it as a presentation which might be the other option might be quicker yeah maybe meanwhile you you might be able to do two things in parallel which I am so I got it right that basically it's a framework that activity modules will be will be able to easily plugged in so if I am a developer of a contributed activity module I can upgrade it my my module my plugin to support this competency based education and it would become the part of the whole whole scheme right you don't actually have to make any changes to your plugin and it will work so we've tied it into the mod form and it uses activity completion so there's no changes that are needed and it works with all modules yep that's great cool I'm just going through the chat if there was some other other question or no okay so we slides are uploaded yeah I can see nicely that looks a lot better okay so so yeah so we've built the whole thing using web services so we have this nice API underneath and then we have a nice set of web services on top of that and then really to build the whole UI the whole thing is built with mustache templates and AMD modules and all of the logic about the views and the controllers is all done in the JavaScript AMD modules so basically yeah we just have this API all everything that you can do in the interface you can do through a web service and the front user interface is just 100% built with templates and AMD and just making Ajax calls to the web services so that means that it's great for the mobile app and things like that because they can they can just reuse all those functions can I have a question can we can we look at the code that is going to land with in 3.1 and use it as sort of a template or a good you know pattern to use for implementing our own new features like all these you know AMD moustache and these things is it like a recommended way to do features now there's heaps of good examples particularly of AMD modules in this CVE branch I've got to link it on the last slide to the code but one thing that we do have to do before it gets integrated is that we wrote the whole thing as an admin tool so it's completely contained within an admin tool but some of these should be in a core subsystem so we have a bit of we're going to be sort of going through the code and deciding what we need to move into core and what we need to leave a plug-in before it actually gets integrated but there but still there's lots of great examples of AMD modules which we basically we got better at writing those as we went along especially me and Fred kept reviewing each other's code and telling each other we should do things better and making it better and better which is great yeah yeah and I must say that having some examples working examples available is a great or necessary thing to to actually use this new API so well done and thanks for it yep so just quickly answer a couple of those questions you can import competency frameworks there's no export yet but you could write a simple tool to do that I've got some plugins on my github for importing from a couple of different formats of competency frameworks and those plugins are basically examples of how you could write a custom importer as well based on any particular framework format yep the code free date is just after the end of March if I remember and so moving on so some of the challenging things that we had when we were building all this code is that we're using a lot of new systems in Moodle so we had a lot of learning to do about the best way and to use these things which is great a lot of another challenge was that the fact that a lot of these learning plans and competent user competencies exist outside of a course and Moodle a lot of Moodle is sort of built around your doing things inside a course so particularly things like when we're doing queries across user context and things like that very very difficult and also just general we need to handle thousands and tens of thousands of competencies and tens of thousands of users and make sure that everything scales properly and design the UI so that it's fast and responsive and works works well for teachers without lots and lots of clicks great great and this is a good thank you list I can see some of the people on this list in the in the meeting here thanks to everyone who's helped we've had particularly University of Montreal has been giving us developer time and they've been helping out because they're really interested in this competency based education feature and it's great to have their help and it's also great to have their feedback on the design and make sure that it's actually meets their needs and this is the links to the code and the demos and quick summary of the progress and I think I'll leave it at that because I took quite a while but yeah this should be coming to integration in the next few weeks and thanks again to everyone who's helped work on it thank you very much Damon for for this update I really had a great news for for community developers both from both points like there is no need to update our plugins or rewrite our plugins to make use of these new features and the second news is that this feature comes with a nice examples of actually how to use AMD moustache web services and all these new frameworks and you know ways to implement things in Moodle so we can we can look at them study them and make use of them in our own code excellent thank you very much guys are given given links to to follow up on on this so let us see now let us see now what's on agenda next I will ask Marina to give us a short overview of two others great features in Moodle which is a reusable element for inline name editing and text API changes in 3.1 so I'm going to pass the microphone to Marina now and here we go can you hear us hello hello Marina hello hello yes we can hear you now wonderful I'm trying to figure out how to share your screen now you should be able to in you are now presenters so in the left top corner of the big blue button there should be a blue rectangle icon to share your screen yeah and then it takes a while before Java must run and these things so it might take a while all right I just have to screen to monitor so I'm wondering if I share full screen for a little bit too much it makes things definitely more easier okay while it's loading I'll post some links here this is the issue when the in-place editable was implemented and this is the documentation I'm sorry I don't see how to share the screen or if it if it's something you could maybe just you know talk about clear provide some information so we could study and study later if it doesn't work and it's a great old job yeah Damon just shared in the chat that your new features both these reusable element for inline editing and text APR API are other examples of the new AMD and moustache and templates and these things development so it's again one area that we can use as a resource for our own for learning how to use these techniques in our own development and thanks for them yeah can you see my screen now yes we can a wonderful I only needed to agree to about five dollars okay so this I came from that the new tag management interface that wasn't produced in 3.0 that probably nobody noticed because nobody used a tag but if you can see there is a possibility to change the types names very quick and somebody asked me after that if they can reuse this code in other areas and I realized that I made it completely localized for tags so this issue 61 it's kind of to is about moving this editing in API like the mini API from tag the area into the core that now consists of template JavaScript module web service and implantable element for elements and every plugin or core that wants to implement it doesn't need to do it all over again all they need to do is implement a little callback in the plug-in so the first the first function in this example is the call back that actually does update and the second for the example it looks like it's cropped on the left is it cropped for you for whom once again is it cropped on the left is it cut then that part a bit yes but it still looks readable it's okay yeah it's better now okay okay so this is pretty much and all that plug-in needs to implement or for companies in order to make any any I don't know this of tech editable in place one callback and making sure that when you display it the template because there is some code duplication here you probably would need another function that actually creates the template of elements so would you say sorry yes yes you say that it is intended for like short text like one line you know titles and these things at the moment yes but well it cannot work with rich text editor and sure there should there should be another another module to do that because it means much more parameters and return values like there is files and edit files and stuff like that so this it's probably will not happen very soon because I don't even know how to start and I don't have enough but this one can be can be improved to also support drop-downs for example or how to complete right sorry you're okay so this this text that actually shared at the moment is in the second thing that I sent you the documentation at the moment I only implemented it for the section name so when you inside the course you can edit the section name very quickly no that's good okay but link to five one eight or two other couple of other issues where I try to edit you know them yes activity names and please editing use different similar looking but different code so they will need to be converted to this one I can see a real big potential for a lot of places around that you normally you would open the whole form to edit one just one field whereas this new element can really improve you know the whole usability of many information there where a teacher just wants to quickly edit just one little place here and there and yeah this is great to have such a such an option yeah so it was integrated today will be available from Friday you can master so everybody's welcome to use it in core on plugins and everything I wanted to if I can move on there are any questions about this one this is really a small element so not very much about there's a lot of code that you don't need to write if you want to yeah that's good that's good you made all the hard work for us yeah and it was a very big discussion we started talking about hooks again because the web service uses callbacks so it calls the function from the plugin or from core component to actually update them elements so it's sort of like a hook and we started talking about all this looks again and I don't know if you follow the forum discussions or the issues maybe maybe it will finally facilitate us to do something in the direction of they could evolve into some you know even more general or something like that so would you like to talk about the text API as well yes yes sure it's not really related but this was also inspired by CBE because they wanted to have tagging of them competencies that are not mixed with any other tags in the system so they just have a separate let's call it collection of tags that it's used only by competencies so this issue 50851 was integrated I think about months ago introduces tag collections so they are in the interface for admin if you go to the manage tags page first of all you can see that you can enable or disable each first of all you can see all areas that can be tagged in model or currently then you can disable or enable each one separate it and also you can add tag collections and separate for example user interest from course tag or make them completely independent so when you click on tag in user interest you only see other users who don't see other courses that are not like this tag but another suggestion that came from Helen is to rename official tags what we used to call them 3.0 and before to be standard tags so this is the second no this is mostly you are no it's it's UI and database change the official takes an alcohol standard page and and since I had to change like two-thirds of the tags related functions there was another suggestion by Andrew to just deprecate all the remaining old API functions so if you use tags before you will definitely have to rewrite like lots of code because we deprecated all the tag functions yeah they still work but with deprecation well done Marina these are great improvements and once again I can I can see a lot of places where this can maybe use yeah I only I want to show you how the new page looks so you have everything it looks similar courses blog post user interest and if you want to call courses they're loaded by Ajax and more courses or more users they just call by jack and the most important thing that each plugin or another company wants to implement new their own tag area they can implement callback that will display items like that this is something that was not present before so it was always our school at all intact indexed which I hope that we will add searching of the wiki pages and question tags on this screen before 3.1 release and I will make sure to write better the communication bother no develop the communication bother yet great looking good and we will hopefully use it for plug-ins directory in model zero yep it's a secret oh sorry not really no right there is a real there's a long long term plan to start using to start using similar features like tagging or labeling for plugins and making making use of it to organize plugins in various ways so yes we've been looking forward looking for and looking for this these changes in the core thank you very much yeah and another last thing that everything is now in templates that cloud that speed guide list they are all mustache template yep can be customized I think great okay thank you how did you find these these new API's you know how is it from for you as a developer to work with these AMD moustache templates and everything just personal feelings well I have them and sitting in the next room for me so I can ask it any moment it makes it easier yes and and also if I report the box while I'm developing she fixes them very quickly yeah this is also good I must say you know my first impressions were that it's pretty complex and huge but at the end when once you realize all the possibilities that are then presented by by using these like you know implicit support for Moodle app and for other apps and external systems and everything that comes as a side product actually of this of these techniques or API's is awesome it's like it's really great and also we I now make JavaScript modules written in jQuery instead of you and I love it so much and and it's like everything I don't know how to do in jQuery I just Google it and somebody had asked exactly the same question and hundreds of people answered it and it's on stack overflow I'm sorry and you but making JavaScript code in jQuery is about like five times faster than you great to hear great to hear thanks Marina for feedback and for this update we will not actually jump that far with with the topic as I'm going to ask Adrian for for some short information and update on how how to use or how handling with Moodle forms library can be was is compatible with this new API's and new approaches to user interface development so can you hear us at the end hello can you hear me hello we can okay just need to find where my slide is I guess if you click on that the same icon you use to upload it in the left bottom corner of the presentation window there should be a yeah that's it great okay so at HQ we've been very busy trying to figure out how we can make forms work with Ajax and so the most recent development has been with creating an AMD module to load fragments so this means that you can create your forms using the old M forms library and then using a fragment and creating a callback you can fetch your HTML and then move it into whatever page or node or wherever you want to put it so this makes creating forms fairly simple if you're used to creating forms with an M form so at the moment part of this has landed a couple of improvements to the actual API soon to follow so what we have at the moment is this fragment.js it's an AMD module what you do is you point to the component that you want to get your callback form the callback name you need to provide a context ID and all the parameters for the callback go in there as well so here we've got a simple example of the minus sign and getting the information for the grading page and then that goes off and then call like goes to the callback that you create and then you send back HTML preferably through a ringer and then you get back both HTML and JavaScript and then it's a the developers responsibility to put that in the page where they want to put it. Yeah the fragment.js itself is using core Ajax. Yeah it's called the web service but you wouldn't actually have to worry about that all you have to do is call the fragment.js and then it will handle the Ajax request there so the callback at the moment you have your location for the component and then in the library you put your function name there and it needs to have the output fragment in that sort of format they have this on the screen there and then you have to have your callback return your HTML or some sort so this works with M forms, text editors, filters and other fancy URI modules such as editpedia. Here I've got an example I can't actually really read this myself so my apologies if you can't read this but we'll we'll put this up on the on this document up so you can have a look. That's not great. Yeah just a very simple diagram as to how it works. You have your form and you click the button, this one gets fired, it calls the load fragment with all the information, it goes off to the callback, returns all the information about the HTML and the JavaScript. We suggest that you use the template.replace node content which does a bit of tidying up and make sure that all of the filters are ready to go and then you insert the form and the JavaScript into the page. Pretty simple diagram. Obviously this is just one example of what you do. Another one you can have a pop-up when doing the loader information into it that way. Yeah possibilities are almost limitless. So if you want more information we have these MDL issues, the first one is integrated and at the moment it's being used by the assignment grading interface improvements. This is something that Damian has been very busy working on. I can actually give you a demonstration of that working using the fragment so I might try to go to full screen and see if I can show that to you. So if I get it correctly, meanwhile this could be used for things like, let's say, when I'm again looking at some screen and I would like to modify something or let's say load standard model form without the full page load like to fetch just the visibility editor or something like I could use this new framework and it would make sure of all the HTML and JavaScript be included and executed. Yeah that's correct. It does a lot of stuff in the background that captures all of the JavaScript that goes with the information on the M form and that allows stuff such as editors to work properly when they're inserted on to the page. Can you see this screen? We can, yes. Okay, so this is an assignment, I think, well it's this one. Okay, everybody should be fairly familiar with this screen and this that's slowly rendering in is the concept for the new assignment grader. So we have the PDF on the left, the user at the top and the grading on the side. So this file submission is actually a Word document which is being invented to a PDF. This allows you to annotate the PDF on the left-hand side for feedback. As you can see here we are using a rubric and this is baking, that's fine. And we have an editor here. This is also baking. I'll just save this and move to the next user. Right. So yeah, this is what can be done with the new fragment. Really good. Again, I can see a lot of potential to extend our existing user interfaces to make them more immediate, more instant for editing changes and improvements. Thanks a lot for your work on this, Adrienne. It's great that we were still able to keep this old legacy these days, forms API and still being able to use it for new user interfaces design. It would be probably best to start from scratch, but that's not how things are done and we could spend ages just on it. So it's great to have this option now. Well done. Thank you. Thank you. Okay, so what we have now last, not least, is Tim Hunt from the Open University in Great Britain. Tim offered or Tim is going to join us to present some recent changes in the quiz module that he's maintained off. I just made you a presenter, Tim. Hello. Yep. So I need to find my presentation. Sure. Show that one. Yes, we have. I should say when I added this to the list of what to talk about when the list was looking very, very short and I was worried David might be scared. He had to talk for 90 minutes himself. So this is barely worth saying, but I'll go through it quite quickly. No worries. The reason we've changed a bit of user interface in the quiz, which I hope everyone thinks is better. And the reason to mention it actually is some of these changes we put into the stable branch because it seemed it probably wouldn't break anyone's themes. So this first one is going into Moodle 3.1 only. It's when a student starts a quiz. In the past, there used to be a separate pop up if the quiz had a time limit or there were a limited number of attempts to warn them before they started. And then if the quiz had a password or if they were using one of the other quiz access rules like got one at the Open University where it pops up a statement for the student to tick a box to say they're not going to cheat, that would load in a separate page and only then would you get to the quiz attempt. So now all this stuff is on a single pop up, so it's just easier to start a quiz. That, as I say, is Moodle 3.1 only. This renderer change, I am pretty sure is Moodle 3.1 only, as it is. So just for consistency now, there always used to be a next button which used to be on the left. Now we have a previous and the next button, so it's a bit more like the links you get in forum posts. So again, just be aware that's changed and this is the major one and we did put this into the stable branches if I remember correctly. Did we? Oh, I can't remember. Check the tracker. I've got a list of tracker issues at the end. In Moodle 2.9, we added this optional redo question feature and the button, for some reason, we put it in a stupid place. And who's the French translator? Pointed out, if you translate redo questions too long, it doesn't fit. So we moved it to a more sensible place. So basically, there are a few minor renderer changes that they are documented in upgrade.txt. So usual way. Shouldn't be a big problem for anyone. I just thought I'd mention it in case it did cause problems for anyone. So that's me. Next person. Hello. Hi. I'm done. You need the next person. It was pretty quick. I was shocked. I'm still expecting something. Sorry, I shouldn't have given you slightly longer to your map. I just lost it for a while. So the feedback looks great. We like these improvements. And is there some particular actions needed to be done by theme designers on their side? I think just if you have overridden the quiz renderer, make sure you read upgrade.txt. And I'm sure we'll put anything important in the release notes. Yeah. So, Martin, back to my first slide. If you want to know why we made these UI changes, come and hear about the work we've been doing on our OU Moodle site at the UK Moodle Meet. Yeah, great. So it was an outcome of some user group or something like that? We've been doing a big Moodle usability review and creating a new theme. Yeah. And there's just a few small changes in the quiz we've done. But these are the ones that got into Moodle Core. That reminds me when you mentioned this move of the button, you know, previous to the left and next to the right, these are exactly the usability or user interface pattern that we should somehow agree on and make them consistently across the whole Moodle. When I was looking at this, I did notice in the book module, you've got previous and next links that are done in a completely different way. Yeah. So again, maybe some sort of reusable elements, you know, for navigation, max prep and these things, or maybe just I don't think we need to go that far, actually, to have some, you know, shared elements, but just sort of policy or, you know, I mean, recommendations on how to do certain parts of the UI might be might be good. So this is a great contribution to such such a discussion or or a project. Great. I'm just checking the comments if there is some some question yet. Oh, I don't think so. Thank you very much, Tim, for keeping us updated or up to date with quiz development. Thank you very much for your work on it, by the way. It's great to have it have it maintained by by you and the whole Open University team. Actually, some of those changes we talked about at the MoodleMood in Dublin about two years ago, and I've only just got around for writing the code for these good ideas. Just in time before before going to London then. Okay, so let me ask Juan Ligavano for for his for his talk about Here we go about the plans for supporting Moodle plugins in the mobile app, which should again, which should again open open the mobile app for more contributions and more extending. So Juan, you are now presenter and you can upload your presentation and thank you. You're welcome. So I suppose you can hear me well, right? Yes, we can. Okay. So today I'm going to talk about our plans for supporting mobile plugins in the mobile application. That this is something that we've been thinking about recently. Well, not recently. It was planned for Moodle 3.0. But we didn't have time to implement this because it's quite complex in some areas that requires changes in Moodle Core. So first of all, we need a bit of nomenclature here. Because, you know, we are going to be talking about Moodle plugins and mobile atoms. So I think that this this is necessary to don't get confused. So when in my presentation, I'm going to talk about Moodle plugins, but I'm referring to additional contributed plugins, okay, like the certificate, questionnaire, progress bar, etc. So if the mobile add-on, when we're talking about mobile atoms, I'm referring to Angular modules that enhances the app functionality. Okay. So we don't have different types of atoms. We just have one type, that's mobile mobile add-on. And it can register itself in another component in the mobile app, like the site menu, the user profile page, or course. So the Moodle mobile architecture, we have core components that are required by the app to work, like a course, course, user settings. And we have also add-ons. That is something that is like a component, but it can be removed from the application. And the application is going to still work without that add-on. Okay. Like the forum, calendar, or great. So a Moodle mobile add-on can be a Moodle core plugin or a Moodle subsystem. Okay. So new Moodle subsystem like CBE will be added as an add-on in Moodle mobile. So I know that this may sound not quite confusing, but it's how it is. And the add-ons require services to communicate with Moodle. That's how the application mostly works. We use a lot of work services to communicate with Moodle. So we can send and receive data from Moodle. So the big question now. So how are you going to support additional Moodle plugins? Well, the plugin itself will contain a Moodle mobile add-on. So for the certificate, for example, a random sample, it will contain a deep file or a folder with a mobile add-on. And maybe we can use a new mobile.pitch file where we will declare all the patches that this Moodle plugin is exporting to the mobile application. Okay. So in this case, the Moodle certificate will require an additional web service, well, a set of web services, because if we want to be able to talk with Moodle from the mobile application, we need this. This is the only way we can interchange data. And these new web services that are published by this plugin, this Moodle plugin, will be injected in the mobile official service. Okay. So basically our plan is that Moodle plugin will contain everything that needs the mobile application to deploy this plugin as an add-on in the mobile application. So it's quite confusing, but that's the idea. So how this will work in the mobile application? The mobile application will detect with which Moodle plugins exports mobile add-ons, and will download and download them into the app at runtime. So this means that when a user adds a new site, we will be able to know which Moodle plugins, extra additional Moodle plugins are supported, and we will download it if they weren't previously loaded, and we will lazy load it in the mobile application. So Damian is doing a very good question. But you're wrong, sorry. This was already approved, and it's in this section in the Apple Developer Program agreement. It wasn't some, sorry. So we have a couple of products already used in this. So we have Ionic Framework Depot Service that it allows you to upgrade a new version of your app without having to publish it in the store. This is quite interesting, because if you want to deliver a quick fix, you don't have to wait the seven days that usually Apple needs to do the review. So we have also IBM who are like doing this. But with Android it's not going to be a problem, because Android, they don't review the app, so you can find everything in there. So they have some automatic processes, but it's okay with them. And as I said before, it's something that your framework is doing right now. So what type of mobile applications will be supported? It could be any type, including applications. As I said before, mobile add-ons can register themselves in any area of the app with handlers, like the site menu, user profile, course content, et cetera. For example, your blog that you know in Google is just a blog, will be able to create a new menu option in the site menu or on the user profile or the course menu in everywhere, because we have handlers for almost everything. And what happens with blinds like, well, this question type, squeeze access rules, assignment to admission, you know, this type of sub-blinds that may have some effect on how you display the activity. Well, we'll have special handlers for that. And it will be the same. They will be able to inject some special code via a hooks or whatever, so they can render the additional options required in the mobile interface. So this will require some modal code changes. You have the user master. So first of all, it's the most important, is that we need to allow blinds and sub-blinds to inject web services in core and other services. Really, you cannot just do that, because the mobile service is built in. It means that every time you upgrade a modal, it's intellects and adds only the web services that are listed in the db-services.php file. So you can insert new web services directly in the database, but they are going to be removed every time you upgrade a modal. So we need to find a way to allow third-party, well, additional blinds or sub-blinds to inject new web services in the official mobile service. Well, the mobile service is like a set of web services that are available for the mobile application. Okay, so they have to be listed there. And second, well, we have to implement what they say. This mobile.php new file and batch uploading and everything. So that's all. Thank you. If you have any questions, please. Thank you very much, Juan. There was a question, some questions in the comments. Basically, what would be the process of, if I am a developer or maintainer of a contributed plugin, like question practice, like Timer mentions, where should I start with converting the plugin so that it can be used by the mobile app, as you know. Just a hint or first steps or something. Well, that's a good question because we was today discussing that in the tracker. For example, we are in the mobile application, we are going to support the questions like core component or something like that. So this type activities can be supported in the mobile application. I don't think it's not converting what you have to do. You have to create a new mobile admin that is basically create an Angular GA model with templates, models and everything. So that's the point. It's a lot of work for, I must say this is work for additional appliance developers. But in some cases, it will be very good to have this certificate for example. It can be quite simple, just allow to download the certificate in the mobile application. So I think it's going to be more complex, but sometimes it can be really easy. We will create documentation, we will support this in the forums and maybe we can create a couple of examples of the most unloved plugins or something like that. Great. I won't review them all. There was some other discussions and questions about the combinations or versions of these plugins, mobile plugins, whether they will be stored in the mobile app per site or globally for our site. It's per site. We will try to use Hust value so we can, if the line with the same Hust version is already stored, we can reuse it, but it will be per site. Content addressable storage. I had this idea, wanted to, I'm going to use, make use this so that we have our mobile app expert here. My feeling, when I was experimenting with these AMD moustache templates, web services and these things for plugin development, I had this feeling that if I'm using these intensively for UI, for functionality, for everything, then actually supporting my plugin from the mobile app should be much easier because the interface will be already there so it should be there just a matter of some communication and these things. Can you confirm this? Yes, if you are getting new plugins using this approach, this new approach with web services, templates and everything, it should be easier to migrate because you can reuse the templates code mostly in some areas. Well, it will need some Ionic specific styles but you can reuse some parts of the code. So with this new approach, for example, it should be very easy for us to add to display the CBE new feature in your mobile application. But that's what I realized, as these APIs actually force you to think in terms of data structure and how they are passed to client at a bank then it doesn't matter that much whether the client is actually a web browser or the mobile app. So the plugin itself exposes its functionality via a web service and then it doesn't matter what client is used to actually use them so it should be better. Thank you very much Juan for this update and thank you very much for your ongoing work with Moodle mobile app development. It's great to see and we also got a great feedback from our learn Moodle participants Learn Moodle MOOC who found their mobile app actually very useful for the course, so well done and thanks. Okay then that's all from the agenda. If there is anything somebody would like to mention or said or something like that please shout now in the comments. Yes I guess this will be the end of the meeting then. Thank you very much everybody for coming. See you in very least in three months again in the next community meeting or anytime before in London for the Hackfest or anywhere. Thank you very much for coming and see you next time. Bye.