Moodle 1.9 Extension Development
()
About this ebook
Related to Moodle 1.9 Extension Development
Related ebooks
Microsoft Windows Server 2012 Administration Instant Reference Rating: 0 out of 5 stars0 ratingsMastering Go Network Automation: Automating Networks, Container Orchestration, Kubernetes with Puppet, Vegeta and Apache JMeter Rating: 0 out of 5 stars0 ratingsJavaScript Programming: Pushing the Limits Rating: 0 out of 5 stars0 ratingsThe Encyclopedia of Trading Strategies Rating: 2 out of 5 stars2/5The New Frontier In Web Api Programming Rating: 0 out of 5 stars0 ratingsPattern-Oriented Software Architecture, Patterns for Resource Management Rating: 3 out of 5 stars3/5The Truth About High-Frequency Trading: What Is It, How Does It Work, and Is It a Problem? Rating: 0 out of 5 stars0 ratingsApplication Support A Complete Guide - 2020 Edition Rating: 0 out of 5 stars0 ratingsPro Spring Boot 2: An Authoritative Guide to Building Microservices, Web and Enterprise Applications, and Best Practices Rating: 0 out of 5 stars0 ratingsWi-Fi mesh Standard Requirements Rating: 4 out of 5 stars4/5SAML and OpenID Connect A Complete Guide Rating: 0 out of 5 stars0 ratingsFidessa A Complete Guide Rating: 0 out of 5 stars0 ratingsSecurity Orchestration, Automation and Response SOAR Complete Self-Assessment Guide Rating: 0 out of 5 stars0 ratingsCredit-Risk Modelling: Theoretical Foundations, Diagnostic Tools, Practical Examples, and Numerical Recipes in Python Rating: 0 out of 5 stars0 ratingsQuantitative Asset Management: Factor Investing and Machine Learning for Institutional Investing Rating: 0 out of 5 stars0 ratingsGetting Started with Hazelcast - Second Edition Rating: 0 out of 5 stars0 ratingsFedora 10 and Red Hat Enterprise Linux Bible Rating: 4 out of 5 stars4/5Rootkits For Dummies Rating: 0 out of 5 stars0 ratingsMalware Analyst's Cookbook and DVD: Tools and Techniques for Fighting Malicious Code Rating: 0 out of 5 stars0 ratingsPrinciples of Quantitative Development Rating: 0 out of 5 stars0 ratingsFinancial Cybersecurity Risk Management: Leadership Perspectives and Guidance for Systems and Institutions Rating: 0 out of 5 stars0 ratingsReal-time Analytics with Storm and Cassandra Rating: 0 out of 5 stars0 ratingsCurrency Strategy: The Practitioner's Guide to Currency Investing, Hedging and Forecasting Rating: 0 out of 5 stars0 ratingsLearning Apache Thrift Rating: 0 out of 5 stars0 ratingsTika in Action Rating: 0 out of 5 stars0 ratingsMicrosoft Windows Communication Foundation 4.0 Cookbook for Developing SOA Applications Rating: 0 out of 5 stars0 ratingsDeveloping Bots with Microsoft Bots Framework: Create Intelligent Bots using MS Bot Framework and Azure Cognitive Services Rating: 0 out of 5 stars0 ratingsMarket Risk Analysis, Pricing, Hedging and Trading Financial Instruments Rating: 0 out of 5 stars0 ratingsCCNA Cisco Certified Network Associate A Practical Study Guide on Passing the Exam Rating: 0 out of 5 stars0 ratings
Information Technology For You
Summary of Super-Intelligence From Nick Bostrom Rating: 5 out of 5 stars5/5Hacking Essentials - The Beginner's Guide To Ethical Hacking And Penetration Testing Rating: 3 out of 5 stars3/5How To Use Chatgpt: Using Chatgpt To Make Money Online Has Never Been This Simple Rating: 0 out of 5 stars0 ratingsComputer Science: A Concise Introduction Rating: 4 out of 5 stars4/5Creating Online Courses with ChatGPT | A Step-by-Step Guide with Prompt Templates Rating: 4 out of 5 stars4/5Practical Ethical Hacking from Scratch Rating: 5 out of 5 stars5/5Supercommunicator: Explaining the Complicated So Anyone Can Understand Rating: 3 out of 5 stars3/5Data Analytics for Beginners: Introduction to Data Analytics Rating: 4 out of 5 stars4/5CompTIA Network+ CertMike: Prepare. Practice. Pass the Test! Get Certified!: Exam N10-008 Rating: 0 out of 5 stars0 ratingsCybersecurity for Beginners : Learn the Fundamentals of Cybersecurity in an Easy, Step-by-Step Guide: 1 Rating: 0 out of 5 stars0 ratingsHow to Write Effective Emails at Work Rating: 4 out of 5 stars4/5Linux Command Line and Shell Scripting Bible Rating: 3 out of 5 stars3/5Handbook of Digital Forensics and Investigation Rating: 4 out of 5 stars4/5CompTIA A+ CertMike: Prepare. Practice. Pass the Test! Get Certified!: Core 1 Exam 220-1101 Rating: 0 out of 5 stars0 ratingsChatGPT: The Future of Intelligent Conversation Rating: 4 out of 5 stars4/5Data Governance For Dummies Rating: 0 out of 5 stars0 ratingsAWS Certified Cloud Practitioner: Study Guide with Practice Questions and Labs Rating: 5 out of 5 stars5/5The Basics of Hacking and Penetration Testing: Ethical Hacking and Penetration Testing Made Easy Rating: 4 out of 5 stars4/5Health Informatics: Practical Guide Rating: 0 out of 5 stars0 ratings20 Windows Tools Every SysAdmin Should Know Rating: 5 out of 5 stars5/5The Programmer's Brain: What every programmer needs to know about cognition Rating: 5 out of 5 stars5/5Computer Organization and Design: The Hardware / Software Interface Rating: 4 out of 5 stars4/5Guide to Healthcare Information Protection and Privacy for Executives Rating: 0 out of 5 stars0 ratingsAn Ultimate Guide to Kali Linux for Beginners Rating: 3 out of 5 stars3/5Windows Registry Forensics: Advanced Digital Forensic Analysis of the Windows Registry Rating: 4 out of 5 stars4/5Cyber Security Consultants Playbook Rating: 0 out of 5 stars0 ratings
Reviews for Moodle 1.9 Extension Development
0 ratings0 reviews
Book preview
Moodle 1.9 Extension Development - Moore
Table of Contents
Moodle 1.9 Extension Development
Credits
About the Authors
About the Reviewer
Preface
Approach
What this book covers
Who this book is for
Conventions
Reader feedback
Customer support
Errata
Piracy
Questions
1. Moodle Architecture
Understanding the stack
Database
Operating system
Web server
Directory and system structure
Moodle code
Moodle database
Moodle data
Installing Moodle
Moodle program execution
Executing config.php
Including Moodle libraries
Getting our data
Displaying in Moodle
Configuring Moodle
Setting configuration variables
Moodle's API
Other important libraries
PEAR
ADOdb
YUI
XMLDB
Access control, logins, and roles
Moodle permission contexts
Capabilities
Moodle roles
Assigning roles
Summary
2. Creating and Modifying Blocks
Creating a block from scratch
Assigning content to our block
Adding a language file
Working with capabilities
Testing for built-in capabilities
Hiding a block based on capabilities
Adding your own capability
Checking for our new capability
Adding instance configuration
Capturing your configuration content
Displaying your content
Adding scheduled actions to our block
Reviewing a real world block
Reviewing block_instructor_contact.php
Configuring the instructor contact block
Using a block as a code container
Creating a block stub for our container
Creating capabilities for our container
Summary
3. Creating and Modifying Filters
How a filter works
Building a filter
Getting started
Creating the language file
Creating the filter code
Activating the filter
Adding configuration settings
Using our settings
Summary
4. Creating and Modifying Activity Modules
The scope of creating an activity module
Our module—activity Foo!
Getting started with the NEWMODULE template
Completing mod_form.php
Defining input values
Using common form elements
Making version.php
Setting icon.gif
Generating install.xml
Using the XMLDB editor
Defining our activity database
Defining the foo_responses table
Defining log types
Creating access.php
Updating index.php
Adding clean language strings
Looking up response data
Displaying our table of activities
Displaying course sections
Committing output
Finishing view.php
Including submit_form.php
Your code goes here
Context control
Developing a form
Cancel option
Submitted data
Setting grades
Displaying submission form
Displaying submissions
Group support
Coding lib.php
Function add_instance
Function foo_delete_instance
Function foo_user_outline
Function foo_user_complete
Function foo_get_participants
Function reset_course_form_definition
Function foo_reset_course_form_defaults
Function foo_reset_userdata
Inserting grades into the gradebook
Using grade_update
Setting the grade type
Upgrading our activity database
Using the XMLDB editor for database upgrades
Updating upgrade.php
Creating backup and restore support
Exploring backuplib.php functions
Common backup functions
Internal backup functions
Exploring restorelib.php functions
Common restore functions
Internal restore functions
Summary
5. Customizing the Look and Feel
Themes
How themes work
Headers and footers
header.html
footer.html
Project 1: Changing the navigation breadcrumbs
Creating our own theme
Adding the category link
The navigation string
Project 2: Adding a standard footer with site links
Creating the code
Running the code
Course formats
How course formats work
Creating our own course format
Creating the course format language file
Modifying our course format function
Changing the forum display
Summary
6. Developer's Guide to the Database
The database structure
Maintaining Moodle tables
install.xml
upgrade.php
Maintaining local database customization
The XMLDB editor
Using the Moodle database in your code
Retrieving data
Query by parameters
Query by where
string
Query by full SQL
Storing data
set_field and set_field_select
insert_record and update_record
Common tables and relationships
Course and module relationships
Programming best practices
Take only what you need
Limiting your returned data
Using recordsets
Optimizing carefully with joins
Testing on more than one database engine
Summary
7. Developing Pluggable Core Modules
Assignment types
What is an assignment type
Identifying assignment types
Assignment type basics
Building our own assignment type
Getting started
Planning our data
Adding custom settings
Making it do something useful
Viewing the journal
Getting the submission
Adding an entry
Viewing a submission
Reviewing students' entries
Backup and restore functions
Finishing up
Resource types
What is a resource type?
Identifying resource types
Resource type basics
Question types
What is a question type?
Identifying question types
Question type basics
The main class
The editing form
The main language file
Other important question constructs
Grading
Backup and restore functions
Import and export function support
CSS and JavaScript support
Where to get more help
Summary
8. Creating Moodle Reports
Creating course reports
Defining the non-participants report
Getting started
Updating mod.php
Controlling access
Language strings
Changes to Moodle's API
Exploring the People block
Setting $select
Setting $from
Setting $where
Making the query call
Modifying index.php
Making text substitutions
Changing the logical structure
Tracking active users using a hash array
Displaying the report
Cleaning up the final display
Using flexible_table
An exercise for you
Creating gradebook reports
Required components
Creating our report folder
Creating access.php
Assigning language strings
index.php requirements
Using version.php
Using the grade_report class
Fixing the outcomes report
Digging into the code
Reviewing our new report
Creating administrator reports
Generating the Hello World administrator report
Tweaking index.php
Viewing our administrator report
An exercise for you
Other output formats
Summary
9. Integrating Moodle with Other Systems
Built-in services and plugins
Batch upload
Built-in authentication plugins
Manual/Internal authentication
LDAP/Active directory authentication
External database authentication
E-mail account based authentication plugins
Built-in enrollment plugins
LDAP enrollment plugin
External database enrollment plugin
E-commerce based enrollment plugins
Web services
Activity plugin as an integration bridge
Creating user authentication plugins
Exploring authentication requirements
Looking at auth.php
Making the language file
Testing simple authentication
Adding optional functionality to authentication
Creating the RLLDAP authentication plugin
Coding RLLDAP
Changing LDAP string to RLLDAP
Mass change auth/ldap to auth/rlldap
Mass change 'ldap' to 'rlldap'
Mass change role assignment
Updating and renaming the auth_plugin class
Creating our language file
Modifying config.html
Storing administrator group
Implementing Single Sign On
Creating a URL-based SSO
Digging into the code
Finding the user's account
Confirming that the login criteria have been met
Completing login
Redirecting the user to the correct location
Testing the URL SSO
Creating user enrollment plugins
Reviewing plugin requirements
Creating enrol.php
Creating the setup_enrolments function
Making the language file
Other requirements
Making the 'simple' enrollment plugin
Using optional enrollment functions
Assigning enrollment plugins to courses
Grade or completion passing
Working with the built-in import/export plugins
Creating grade import/export plugins
An exercise for you
Summary
10. Writing Secure Code
User access issues
Making sure that a user has logged in
Making sure that the user's session is the current one
Making sure that the user has appropriate capabilities
SQL issues
Taking a look at vulnerable code
Quote protection
Database API
Use of addslashes
Form issues
The Moodle formslib library
Specifying a type
Validation rules
'param' functions
File system issues
Course file areas
User file areas
Other file areas
Getting a file URL
Screen output issues
The p() and s() functions
The format_text() and format_string() functions
Logging your actions
Summary
11. Sending Notifications to Users
Requirements
Setup
Using e-mail
Send e-mail API
Creating the subject text
Creating the message text
Sending the e-mail
Using Moodle messaging
Moodle messaging internals
Creating the message
Sending the message
Using RSS feeds
Setup
Creating the RSS XML file
Viewing the RSS feed
Summary
12. Constructing and Displaying Pages by Using the pagelib Library
Introduction to pagelib
Class page_base
Class page_course
Class page_generic_activity
Core modules that use pagelib
Using pagelib factory functions
page_import_types
page_create_instance
page_create_object
page_map_class
page_base member functions
page_base() and construct()
get_id()
get_body_class()
get_body_id()
edit_always()
init_quick()
init_full()
user_allowed_editing()
user_is_editing()
print_header()
get_type()
get_format_name()
url_get_path()
url_get_parameters()
blocks_get_positions()
blocks_default_position()
blocks_get_default()
blocks_move_position()
Meeting pagelib requirements
Looking at page setup
Examining requirements by reviewing quiz's view.php
Working with quiz blocks
Investigating quiz page display
Converting activity Foo! to pagelib
Creating a local pagelib.php
Updating view.php
Initializing $PAGE
Outputting blocks
Outputting the middle column
Viewing the results
Related libraries
weblib
blocklib
graphlib
Summary
13. Building Forms with formslib
Using formslib
Form definition and elements
addElement and createElement
Buttons
Button function
Submit, reset, and cancel functions
add_action_buttons function
Checkboxes
Checkbox function:
Advanced checkbox and checkbox controller
Uploading and/or choosing a file
choosecoursefile function
Date and time
date_selector function
date_time_selector function
htmleditor, textarea, and text
htmleditor function
text function
modgrade
password and passwordunmask
radio
select, multi-select, and selectyesno
hidden, html, and static text
Groups
Rules and validation
Rules
addRule
registerRule
Validation
Summary
14. Development for the Adventuresome: Web Services
Using Remote-Learner Web Services
Advantages
Disadvantages
Installation
Server-side setup
Client setup
Testing with ppdemo_trace.php
Setting up your Web Services connection
Debugging setup
Managing users
Creating users
Processing arguments
Connecting to Web Services
Using edit_user() to create a new account
Updating users
Deleting users
Creating a Web Services based Single Sign On
Creating our HTML wrapper
Web service connection setup
Processing SSO parameters
Using authenticate_user()
Closing wrapper
Enrollment management
Creating enrollstudent.php
Using enrol_students()
Creating unenrollstudent.php
Grade passing
Creating the CSV grade script
Generating the header line
Course loop
Using Moodle Networking
Advantages
Disadvantages
What is XML-RPC?
MNet XML-RPC supported service types
MNet XML-RPC security model
Using MNet in activity modules
Using MNet in auth/enrol plugins
MNet SSO model
Summary
Index
Moodle 1.9 Extension Development
Michael Churchward
Jonathan Moore
Moodle 1.9 Extension Development
Copyright © 2010 Packt Publishing
All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the authors, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.
First published: April 2010
Production Reference: 1220410
Published by Packt Publishing Ltd. 32 Lincoln Road Olton Birmingham, B27 6PA, UK.
ISBN 978-1-847194-24-4
www.packtpub.com
Cover Image by Parag Kadam (<paragvkadam@gmail.com>)
Credits
Authors
Jonathan Moore
Michael Churchward
Reviewer
Anthony Borrow
Acquisition Editor
Rashmi Phadnis
Development Editor
Ved Prakash Jha
Technical Editors
Chris Rodrigues
Hithesh Uchil
Indexer
Hemangini Bari
Editorial Team Leader
Akshara Aware
Project Team Leader
Priya Mukherji
Project Coordinator
Ashwin Shetty
Proofreader
Dirk Manuel
Graphics
Geetanjali Sawant
Production Coordinator
Aparna Bhagat
Cover Work
Aparna Bhagat
About the Authors
Michael Churchward is currently the President and CTO of Remote Learner, a Moodle partner based in the U.S. and Canada. Mike has been a developer of Moodle since 2004, and contributes both core code and add-on functions to the open source project. Mike and his development team are currently working on other extensions to Moodle, and helping to define the new Moodle 2.0 architecture.
Michael began his career building computer-based simulations of internal aircraft systems used in the training of ground and maintenance crews. Since then, he has been involved in many types of software and computer-based learning. Programming Moodle became a natural extension of that career.
Michael lives with his family in a small town in south-western Ontario, and thanks all of them for their patience while he was writing this book.
I thank the Moodle community for their energy and input; my wife, Janet; my sons, William, Cole, and Janson for their constant encouragement; and lastly my parents, Bob and Lorane for pointing me in the right direction.
Jonathan Moore is the Vice-President for Business Development at Remote Learner. Jonathan began working with Moodle in 2003. Over the past four years, Jonathan has worked with dozens of clients, delivering Moodle customizations. Jonathan has a Bachelor of Science degree in Information Technology.
Jonathan formerly served as the Director of Technology for Winfield Public Schools. He served in this capacity for almost ten years, and has developed a broad set of educational technology and project management skills over the course of his career. His student technology program, Student Technology Assistance Team (STAT), was recognized nationally by CompTIA as the best rural student technology program. Earlier in his career, Jonathan worked as a full-time developer, and studied computer science prior to pursuing Information Technology. Jonathan started working with open source technology in 1993 with an early release of Slackware Linux, and has used and supported a variety of open source technologies in educational settings.
Jonathan lives with his wife, in Lenexa, Kansas, a suburb of Kansas City.
I wish to thank my co-author, Michael Churchward, for taking on this crazy project to write a book while growing a company. Thanks for taking this leap of faith. I would also like to thank my wife for putting up with a cranky writer this past year, my parents for emphasizing the importance of literacy, Bryan Williams and the rest of our leadership team for their support, and finally the staff of Winfield Public Schools for providing a wonderful place to grow.
About the Reviewer
Anthony Borrow, S.J. is a Jesuit of the New Orleans Province, who has been active in the Moodle community for five years. Anthony has an M.A. in Counseling from Saint Louis University. Anthony has worked on the design and implementation of various database systems since 1992.
Anthony serves the Moodle community as its CONTRIB Coordinator. In that role, Anthony has presented at various MoodleMoots (conferences) across the United States, and has provided in-house training opportunities for institutions learning how to implement Moodle. Anthony has taught at Dallas Jesuit College Preparatory and provides technical advice to the Jesuit Secondary Education Association (http://jsea.org) and the Jesuit Virtual Learning Academy (http://jvla.org/).
Anthony is the co-author of the Honduras chapter of Teen Gangs: A Global View.
Preface
Moodle has evolved into one of the most widely-used Learning Management Systems in the world, with over 35,000 installed sites and 25 million users. Much of its popularity is due to its ability to be extended by developers, by using its open source architecture. Understanding how to develop on the Moodle platform provides an organization using Moodle the flexibility to expand its functions.
This book will teach you the inner workings of Moodle, and provide you with the ability to develop code the Moodle way
. You will learn to develop standard Moodle plugins, such as activities and blocks, by creating functioning code that you can execute in your own Moodle installation.
This book will expose you to all of the core code functions in Moodle in a progressive, understandable way. You will learn what libraries are available, what the API calls are, how Moodle is structured, and how it can be expanded beyond the plugin system.
Approach
This is a practical, hands-on book that will allow you to build plugins as you learn. All of the technologies that you need are freely-available in the open source world.
You will begin by gaining an understanding of the basic architecture that Moodle uses to operate in. Next, you will build your first plugin, a block. You will carry on building other Moodle plugins, gaining knowledge of the Moodle way
of coding, before plunging deeper into the API and inner libraries. Lastly, you will learn how to integrate Moodle with other systems, by using a variety of methods.
By the time you have finished this book, you will have a solid understanding of Moodle programming, and will have the knowledge to extend its functionality in whatever way you want.
What this book covers
Chapter 1, Moodle Architecture, introduces some of the important concepts of Moodle architecture: how Moodle is structured, and how Moodle works.
Chapter 2, Creating and Modifying Blocks, covers how to create a basic block in Moodle, one of the easiest and most common customizations. Moodle blocks are plugins that display content in the right-hand or left-hand side column of a Moodle site. Several basic Moodle programming concepts that are used throughout the book are introduced.
Chapter 3, Creating and Modifying Filters, covers the basic concepts of creating a Moodle filter. The Moodle filter system is a method of processing the contents of the Moodle database (typically, user-entered content) prior to display, so that it can be modified in some beneficial way.
Chapter 4, Creating and Modifying Activity Modules, covers how to create a Moodle activity that can send results to the gradebook. Moodle activities are plugins that provide instructional activities for learners. One or more activities of each type can be added to courses, and each activity typically has a graded component that sends its results to the Moodle gradebook.
Chapter 5, Customizing the Look and Feel, elaborates on the common methods of customizing the look and feel of a Moodle site. This chapter will discuss how to tell the difference between a requirement that needs programming and one that can be completed by a theme designer.
Chapter 6, Developer's Guide to the Database, covers both the overall structure of the Moodle database and the coding methods used to access and store information there. Moodle supports a variety of SQL databases to store program information.
Chapter 7, Developing Pluggable Core Modules, covers useful programming concepts and considerations for the core Moodle system and modules. Some common ways by which popular modules can be modified are explored in this chapter.
Chapter 8, Creating Moodle Reports, covers a variety of methods of adding to Moodle's built-in reports. Moodle has an excellent logging system, but often users find they need to write a custom reporting module in order to get the data in the exact format that they desire.
Chapter 9, Integrating Moodle with Other Systems, covers four common types of integrations: user authentication, user enrollment, performance results, and Single Sign On. A common customization request for Moodle is to integrate with a third-party system.
Chapter 10, Writing Secure Code, covers various security concerns and best practices when developing code for Moodle.
Chapter 11, Sending Notifications to Users, discusses methods of messaging and notifying users through e-mail, RSS, and others.
Chapter 12, Constructing and Displaying Pages by Using the pagelib Library, covers the basic concepts of using pagelib. The pagelib library is used in the construction of display pages in Moodle.
Chapter 13, Building Forms with formslib, covers how to use the formslib library for customizations. The formslib library controls Moodle forms, user input, and input sanitation.
Chapter 14, Development for the Adventuresome: Web Services, covers two separate Moodle implementations for web services: one SOAP-based and one XML-RPC-based. The SOAP library allows remote manipulation and creation of courses, users, user enrollments, and user grades. The XML-RPC library provides a secure channel and full Moodle API exposure to the trusted site. This chapter will explore basic concepts of using both libraries.
Who this book is for
This book is written for technologists who are interested in expanding Moodle's functions through programming, either for their own organizations or to contribute to the open source project.
This book is aimed at programmers already familiar with Moodle's basic technologies: PHP, MySQL, and HTML/CSS.
You will need an understanding of PHP in order to follow along with coding activities in the book.
Conventions
In this book, you will find a number of styles of text that distinguish between different kinds of information. Here are some examples of these styles, and an explanation of their meaning.
Code words in text are shown as follows: Finally, we display our table using the print_html member function
A block of code is set as follows:
function learningisfunlink_filter($courseid, $text) {
return $text;
}
?>
When we wish to draw your attention to a particular part of a code block, the relevant lines or items are set in bold:
function get_content() {
if ($this->content !== NULL) {
return $this->content;
}//if
$context = get_context_instance(CONTEXT_SYSTEM);
require_capability('moodle/site:doanything', $context);
$this->content = new stdClass;
$this->content->text = 'Hello World!';
return $this->content;
}//function get_content
New terms and important words are shown in bold. Words that you see on the screen, in menus, or dialog boxes for example, appear in the text like this: Click on the Notifications link in the Site Administration block.
Note
Warnings or important notes appear in a box like this.
Note
Tips and tricks appear like this.
Reader feedback
Feedback from our readers is always welcome. Let us know what you think about this book—what you liked or may have disliked. Reader feedback is important for us to develop titles that you really get the most out of.
To send us general feedback, simply send an e-mail to <feedback@packtpub.com>, and mention the book title in the subject of your message.
If there is a book that you need and would like to see us publish, please send us a note in the SUGGEST A TITLE form on www.packtpub.com or send an e-mail to
If there is a topic that you have expertise in and you are interested in either writing or contributing to a book on, see our author guide on www.packtpub.com/authors.
Customer support
Now that you are the proud owner of a Packt book, we have a number of things to help you to get the most from your purchase.
Note
Downloading the example code for the book
Visit https://www.packtpub.com//sites/default/files/downloads/4244_Code.zip to directly download the example code.
Errata
Although we have taken every care to ensure the accuracy of our content, mistakes do happen. If you find a mistake in one of our books—maybe a mistake in the text or the code—we would be grateful if you would report this to us. By doing so, you can save other readers from frustration and help us to improve subsequent versions of this book. If you find any errata, please report them by visiting http://www.packtpub.com/support, selecting your book, clicking on the let us know link, and entering the details of your errata. Once your errata are verified, your submission will be accepted and the errata will be uploaded on our website, or added to any list of existing errata under the Errata section of that title. Any existing errata can be viewed by selecting your title from http://www.packtpub.com/support.
Piracy
Piracy of copyright material on the Internet is an ongoing problem across all media. At Packt, we take the protection of our copyright and licenses very seriously. If you come across any illegal copies of our works, in any form, on the Internet, please provide us with the location address or website name immediately, so that we can pursue a remedy.
Please contact us at <copyright@packtpub.com>with a link to the suspected pirated material.
We appreciate your help in protecting our authors and our ability to bring you valuable content.
Questions
You can contact us at <questions@packtpub.com>if you are having a problem with any aspect of the book, and we will do our best to address it.
Chapter 1. Moodle Architecture
Moodle is an open source Learning Management System (LMS). It can be used to deliver online learning in a variety of settings. These settings include virtual schools, K12, higher education, corporate universities, charter schools, and commercial training, to name but a few. Moodle is designed to be used primarily as an asynchronous learning tool, where learners study at different times. However, it also includes synchronous tools. Moodle is used both as the primary delivery vehicle for courses as well as a supplemental tool for face-to-face learning. To put it simply, Moodle is a teacher's toolkit to help improve learning. Moodle is designed in a community with teachers interacting directly with programmers. Moodle's intuitive and simple interface is the result of this collaboration.
Moodle originally stood for Modular Object-Oriented Dynamic Learning Environment. From a programmer's perspective, the M
in Moodle is a very important concept. Modularity is designed throughout Moodle. This lets a developer make significant modifications to Moodle