2a439ba7f6
THIS IS A BIG CHANGE! I've renamed the "reading" module to "resource". This meant changing quite a few references throughout Moodle. The automatic upgrade process should work OK (it worked OK on my development server) and there shouldn't be any problems. BUT PLEASE PROCEED WITH CAUTION AND KEEP BACKUPS OF EVERYTHING UNTIL I HAVE A FEW MORE TESTS! If you upgrade please let me know. One thing that will break are any hard-coded links within forum messages. What I will be doing to fix this on my apache server is to add this to httpd.conf: Redirect /mod/reading/ http://moodle.com/mod/resource/ Sorry about any inconvenience, but it's better this is done sooner than later.
237 lines
12 KiB
HTML
Executable File
237 lines
12 KiB
HTML
Executable File
<HEAD>
|
|
<TITLE>Moodle Docs: Developers Manual</TITLE>
|
|
<LINK REL="stylesheet" HREF="../theme/standard/styles.css" TYPE="TEXT/CSS">
|
|
</HEAD>
|
|
|
|
<BODY BGCOLOR="#FFFFFF">
|
|
<H2>Developers Manual</H2>
|
|
<P>This document describes some of Moodle's design and how you can contribute.</P>
|
|
<P>Sections in this document:</P>
|
|
<OL>
|
|
<LI><A HREF="#architecture">Moodle architecture</A></LI>
|
|
<LI><A HREF="#contribute">How you can contribute</A>
|
|
<ul>
|
|
<li><A HREF="#activities">Learning activities</A></li>
|
|
<li><A HREF="#themes">Themes</A></li>
|
|
<li><A HREF="#languages">Languages</A></li>
|
|
<li><A HREF="#database">Database Schemas</A></li>
|
|
<li><a href="#courseformats">Course formats</a></li>
|
|
<li><a href="#doc">Documentation and articles</a></li>
|
|
<li><a href="#bugs">Participating in the bug tracker</a></li>
|
|
</ul>
|
|
</LI>
|
|
</OL>
|
|
<P> </P>
|
|
<H3><a name="architecture"></a>1. Moodle architecture</H3>
|
|
<P>From a system administrator's perspective, Moodle has been designed according
|
|
to the following criteria:</P>
|
|
<ol>
|
|
<li><strong>Moodle should run on the widest variety of platforms</strong><br>
|
|
<br>
|
|
The web application platform that runs on most platforms is PHP combined with
|
|
MySQL, and this is the environment that Moodle has been developed in (on Linux,
|
|
Windows, and Mac OS X). Moodle also uses the ADOdb library for database abstraction,
|
|
which means Moodle can use <a href="http://php.weblogs.com/ADOdb_manual#drivers">more
|
|
than ten different brands of database</a> (unfortunately, though, it can not
|
|
yet <em><strong>set up tables</strong></em> in all these databases - more
|
|
on this later). <br><br>
|
|
</li>
|
|
<li><strong>Moodle should be easy to install, learn and modify</strong><br>
|
|
<br>
|
|
Early prototypes of Moodle (1999) were built using <a href="http://www.zope.org/">Zope</a>
|
|
- an advanced object-oriented web application server. Unfortunately I found
|
|
that although the technology was pretty cool, it had a very steep learning
|
|
curve and was not very flexible in terms of system administration. The PHP
|
|
scripting language, on the other hand, is very easy to get into (especially
|
|
if you've done any programming using any other scripting language). Early
|
|
on I made the decision to avoid using a class-oriented design - again, to
|
|
keep it simple to understand for novices. Code reuse is instead achieved by
|
|
libraries of clearly-named functions and consistent layout of script files.
|
|
PHP is also easy to install (binaries are available for every platform) and
|
|
is widely available to the point that most web hosting services provide it
|
|
as standard.<br><br>
|
|
</li>
|
|
<li><strong>It should be easy to upgrade from one version to the next</strong><br>
|
|
<br>
|
|
Moodle knows what version it is (as well as the versions of all plug-in modules)
|
|
and a mechanism has been built-in so that Moodle can properly upgrade itself
|
|
to new versions (for example it can rename database tables or add new fields).
|
|
If using CVS in Unix for example, one can just do a "cvs update -d"
|
|
and then visit the site home page to complete an upgrade.<br><br>
|
|
</li>
|
|
<li><strong>It should be modular to allow for growth</strong><br>
|
|
<br>
|
|
Moodle has a number of features that are modular, including themes, activities,
|
|
interface languages, database schemas and course formats. This allows anyone
|
|
to add features to the main codebase or to even distribute them separately.
|
|
More on this below in the next section.<br><br>
|
|
</li>
|
|
<li><strong>It should be able to be used in conjunction with other systems</strong><br>
|
|
<br>
|
|
One thing Moodle does is keep all files for one course within a single, normal
|
|
directory on the server. This would allow a system administrator to provide
|
|
seamless forms of file-level access for each teacher, such as Appletalk, SMB,
|
|
NFS, FTP, WebDAV and so on. Otherwise, there is work yet to do. Features planned
|
|
for Moodle in future versions include: flexible connection to existing databases
|
|
of user details and grades; import and export of Moodle data using XML-based
|
|
formats; and increased use of style sheets for interface formatting (so that
|
|
it can be integrated visually into other web sites).</li>
|
|
</ol>
|
|
<p> </p>
|
|
<H3><a name="contribute" id="contribute"></a>2. How you can contribute</H3>
|
|
<P>As mentioned above, Moodle has a number of features that are modular. Even
|
|
if you are not a programmer there are things you can change or help with.</P>
|
|
<P><strong><a name="activities" id="activities"></a>Learning Activities</strong></P>
|
|
<blockquote>
|
|
<p>These are by far the most important modules, and reside in the 'mod' directory.
|
|
There are seven default modules: assignment, choice, forum, journal, quiz, resource,
|
|
and survey. Each module is in a separate subdirectory and consists of the
|
|
following mandatory elements (plus extra scripts unique to each module):</p>
|
|
<ul>
|
|
<li>mod.html: a form to set up or update an instance of this module</li>
|
|
<li>version.php: defines some meta-info and provides upgrading code</li>
|
|
<li>icon.gif: a 16x16 icon for the module</li>
|
|
<li>db/: SQL dumps of all the required db tables and data (for each database
|
|
type) </li>
|
|
<li>index.php: a page to list all instances in a course</li>
|
|
<li>view.php: a page to view a particular instance</li>
|
|
<li>lib.php: any/all functions defined by the module should be in here. If
|
|
the modulename if called widget, then the required functions include:
|
|
<ul>
|
|
<li>widget_add_instance() - code to add a new instance of widget</li>
|
|
<li>widget_update_instance() - code to update an existing instance</li>
|
|
<li>widget_delete_instance() - code to delete an instance</li>
|
|
<li>widget_user_outline() - given an instance, return a summary of a user's
|
|
contribution</li>
|
|
<li>widget_user_complete() - given an instance, print details of a user's
|
|
contribution<br>
|
|
</li>
|
|
<li>To avoid possible conflict, any module functions should be named starting
|
|
with widget_ and any constants you define should start with WIDGET_
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>Lastly, each module will have some language files that contain strings
|
|
for that module. See below.<br>
|
|
</li>
|
|
</ul>
|
|
</blockquote>
|
|
<p> <strong><a name="themes" id="themes"></a>Themes</strong></p>
|
|
<blockquote>
|
|
<p>Themes (or skins) define the look of a site. A number of simple themes are
|
|
provided in the main distribution, but you may want to copy one of these and
|
|
customise it to suit your own needs (eg local logo, colours, styles, graphics
|
|
etc)</p>
|
|
<p>Each theme is in a subdirectory of the "theme" directory. You can
|
|
copy the "standard" theme as a template.<br>
|
|
</p>
|
|
</blockquote>
|
|
<p><strong><a name="languages" id="languages"></a>Languages</strong></p>
|
|
<blockquote>
|
|
<p>Moodle has been designed for internationalisation. Each 'string' or 'page'
|
|
of text that is displayed as part of the interface is drawn from a set of
|
|
language files. Each language is a subdirectory of the directory 'lang'. The
|
|
structure of the lang directory is as follows:</p>
|
|
<p><strong>lang/en</strong> - directory containing all files for one language
|
|
(eg English)</p>
|
|
<ul>
|
|
<li>moodle.php - strings for main interface</li>
|
|
<li>assignment.php - strings for assignment module</li>
|
|
<li>choice.php - strings for choice module</li>
|
|
<li>forum.php - strings for forum module</li>
|
|
<li>journal.php - strings for journal module </li>
|
|
<li>quiz.php - strings for quiz module</li>
|
|
<li>resource.php - strings for resource module</li>
|
|
<li>survey.php - strings for survey module</li>
|
|
<li>.... plus other modules if any.<br>
|
|
<br>
|
|
A string is called from these files using the <strong><em>get_string()</em></strong><em>
|
|
</em>or<em> <strong>print_string()</strong> </em>functions. Each string
|
|
supports variable substitution, to support variable ordering in different
|
|
languages.<em><br>
|
|
<br>
|
|
</em>eg $strdueby = get_string("assignmentdueby", "assignment",
|
|
userdate($date)); <br>
|
|
<br>
|
|
If a string doesn't exist in a particular language, then the equivalent
|
|
in English will automatically be used instead.</li>
|
|
</ul>
|
|
<p><strong>lang/en/help</strong> - contains whole help pages (for popup context-sensitive
|
|
help)</p>
|
|
<blockquote>
|
|
<p>Main help pages are situated here, while help pages specific to each module
|
|
are located in subdirectories with the module's name.</p>
|
|
<p>You can insert a helpbutton in a page with the helpbutton function.</p>
|
|
<p>eg helpbutton("text", "Click here for help about text");</p>
|
|
<p>and for modules:</p>
|
|
<p>helpbutton("forumtypes", "Forum types", "forum");</p>
|
|
</blockquote>
|
|
</blockquote>
|
|
<p><br>
|
|
<strong><a name="database" id="database"></a>Database Schemas</strong></p>
|
|
<blockquote>
|
|
<p>Given a working database with defined tables, the intentionally simple SQL
|
|
used in Moodle should work fine with a wide variety of database brands.</p>
|
|
<p>A problem exists with <strong>automatically creating</strong> new tables
|
|
in a database, which is what Moodle tries to do upon initial installation.
|
|
Because every database is very different, there doesn't yet exist any way
|
|
to do this in a platform-independent way. To support this automation in each
|
|
database, schemas can be created that list the required SQL to create Moodle
|
|
tables in a particular database. These are files in <strong>lib/db</strong>
|
|
and inside the <strong>db</strong> subdirectory of each module.</p>
|
|
<p>Currently, only MySQL is supported because that's what I know. If you are
|
|
familiar with another database (especially open source databases) and are
|
|
willing to help port the MySQL schema, please get in contact with me (<a href="mailto:martin@moodle.com">martin@moodle.com</a>).</p>
|
|
</blockquote>
|
|
<p> </p>
|
|
<p><strong><a name="courseformats" id="courseformats"></a>Course Formats</strong></p>
|
|
<blockquote>
|
|
<p>Moodle 1.0 supports three different course formats: weekly, topics and social.
|
|
</p>
|
|
<p>These are a little more connected to the rest of the code (and hence, less
|
|
"pluggable") but it is still quite easy to add new ones.</p>
|
|
<p>If you have any ideas for different formats that you need or would like to
|
|
see, get in touch with me and I'll do my absolute best to have them available
|
|
in future releases.</p>
|
|
</blockquote>
|
|
<p> </p>
|
|
<p><strong><a name="doc" id="doc"></a>Documentation and articles</strong></p>
|
|
<blockquote>
|
|
<p>If you feel like writing a tutorial, an article, an academic paper or anything
|
|
else about Moodle, please do! Put it on the web and make sure you include
|
|
links to <a href="http://moodle.com/">http://moodle.com/</a></p>
|
|
</blockquote>
|
|
<p> </p>
|
|
<p><strong><a name="bugs" id="bugs"></a>Participating in the bug tracker</strong></p>
|
|
<blockquote>
|
|
<p>Finally, I would like to invite you to register on the "bug tracker"
|
|
at <a href="http://bugs.moodle.org">bugs.moodle.org</a> so you can file any
|
|
bugs that you find and perhaps participate in discussing and fixing them.
|
|
</p>
|
|
<p>"Bugs" not only includes software bugs with current versions of
|
|
Moodle, but also new ideas, feature requests and even constructive criticism
|
|
of existing features. The beauty of open source is that anyone can participate
|
|
in some way and help to create a better product for all of us to enjoy. In
|
|
this project, your input is very welcome!</p>
|
|
</blockquote>
|
|
<p> </p>
|
|
<blockquote>
|
|
<blockquote>
|
|
<blockquote>
|
|
<p align="center">Thanks for using Moodle!</p>
|
|
<p align="center">Cheers,<br>
|
|
<a href="http://dougiamas.com/" target="_top">Martin Dougiamas</a></p>
|
|
</blockquote>
|
|
</blockquote>
|
|
</blockquote>
|
|
<p> </p>
|
|
<p> </p>
|
|
<blockquote>
|
|
<p> </p>
|
|
</blockquote>
|
|
<P ALIGN="CENTER"><FONT SIZE="1"><A HREF="index.html" TARGET="_top">Moodle Documentation</A></FONT></P>
|
|
<P ALIGN="CENTER"><FONT SIZE="1">Version: $Id: developer.html,v 1.2 2001/12/09
|
|
10:34:19 martin Exp $</FONT></P>
|
|
|
|
</BODY>
|