<?xml version="1.0" encoding="utf-8"?>
<!-- generator="FeedCreator 1.7.2-ppt DokuWiki" -->
<?xml-stylesheet href="https://tech.solin.eu/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://tech.solin.eu/feed.php">
        <title>Solin Expertise Center moodle</title>
        <description></description>
        <link>https://tech.solin.eu/</link>
        <image rdf:resource="https://tech.solin.eu/lib/tpl/monobook/images/favicon.ico" />
       <dc:date>2026-04-16T04:00:02+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:authentication&amp;rev=1455022603&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:aws_-_moodle_on_amazon_web_services_aws&amp;rev=1442590845&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:backup_and_restore_modules&amp;rev=1429519778&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:blocks&amp;rev=1421932349&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:cache&amp;rev=1431026393&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:coding_conventions&amp;rev=1457708534&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:colorbox_in_course_format&amp;rev=1462270054&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:competion&amp;rev=1358923999&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:completion&amp;rev=1453538784&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:course_construction&amp;rev=1716387786&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:database_access&amp;rev=1326292331&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:email&amp;rev=1452785998&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:enrollment&amp;rev=1448543840&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:file_handling&amp;rev=1381066885&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:forms&amp;rev=1452692170&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:grades&amp;rev=1384955366&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:installation_and_configuration_issues&amp;rev=1464600486&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:moodle&amp;rev=1461933539&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:multimedia&amp;rev=1433769869&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:navigation&amp;rev=1450863457&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:new_modules&amp;rev=1426345556&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:poodll_-_multimedia_recording_plugins&amp;rev=1428589607&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:quiz&amp;rev=1429021751&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:roles_and_capabilities&amp;rev=1394736937&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:scheduled_tasks_or_cron_jobs&amp;rev=1438245450&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:strings_and_translations&amp;rev=1441889747&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:testing_with_behat_and_selenium&amp;rev=1452766426&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:themes&amp;rev=1372511946&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:using_soda_to_create_new_moodle_modules&amp;rev=1386707791&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:using_the_file_api_in_modules&amp;rev=1448291769&amp;do=diff"/>
                <rdf:li rdf:resource="https://tech.solin.eu/doku.php?id=moodle:web_services_in_plugins&amp;rev=1423737128&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://tech.solin.eu/lib/tpl/monobook/images/favicon.ico">
        <title>Solin Expertise Center</title>
        <link>https://tech.solin.eu/</link>
        <url>https://tech.solin.eu/lib/tpl/monobook/images/favicon.ico</url>
    </image>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:authentication&amp;rev=1455022603&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2016-02-09T12:56:43+00:00</dc:date>
        <title>moodle:authentication</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:authentication&amp;rev=1455022603&amp;do=diff</link>
        <description>How To Remove Non-Default Authentication Plugins

If you can't login to a copied Moodle because the authentication plugin does not match your local situation, go to the database. Execute this sql statement:


UPDATE mdl_config SET value = 'manual' WHERE name LIKE 'auth';</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:aws_-_moodle_on_amazon_web_services_aws&amp;rev=1442590845&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2015-09-18T15:40:45+00:00</dc:date>
        <title>moodle:aws_-_moodle_on_amazon_web_services_aws</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:aws_-_moodle_on_amazon_web_services_aws&amp;rev=1442590845&amp;do=diff</link>
        <description>AWS (Amazon Web Services) promises high scalability, globally distributable web applications. There are some examples of Moodle installations on AWS. Here are a few resources:

	*  Webinar recording: Building a scalable moodle-based LMS in the cloud
	*  Reference Architecture – Auto-scaling Moodle deployment on AWS
	*  Moving course images to S3
	*  Moodle architecture - AWS
	*  Installation Guide for Installing on Amazon EC2
	*  Installing Moodle 2.5 in Spectrum Training’s TSTS environment usin…</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:backup_and_restore_modules&amp;rev=1429519778&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2015-04-20T08:49:38+00:00</dc:date>
        <title>moodle:backup_and_restore_modules</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:backup_and_restore_modules&amp;rev=1429519778&amp;do=diff</link>
        <description>The backup and restore process for modules is actually pretty well documented:

	*  Backup
	*  Restore

There are a few potential pitfalls however.

Backup

If you want to backup the files associated with the module instance, you have to use the annotate_files function. For instance:</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:blocks&amp;rev=1421932349&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2015-01-22T13:12:29+00:00</dc:date>
        <title>moodle:blocks</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:blocks&amp;rev=1421932349&amp;do=diff</link>
        <description>Default Blocks

Use the block configuration in config.php to determine which blocks should be added automatically, e.g. upon course creation.

If you do not want any blocks to appear, you cannot use an empty string, but you can just fill in a colon. E.g.:</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:cache&amp;rev=1431026393&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2015-05-07T19:19:53+00:00</dc:date>
        <title>moodle:cache</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:cache&amp;rev=1431026393&amp;do=diff</link>
        <description>Moodle 2.4 saw the introduction of the MUC: Moodle Universal Cache. The cache is actually comprised of a number of smaller caches, defined in /lib/db/caches.php and the caches.php files of the various plugins (e.g. mod/yourmod/db/caches.php).

See the Cache API and the Quick reference. The most succinct overview is in Moodle's github repo.</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:coding_conventions&amp;rev=1457708534&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2016-03-11T15:02:14+00:00</dc:date>
        <title>moodle:coding_conventions</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:coding_conventions&amp;rev=1457708534&amp;do=diff</link>
        <description>Autoloading Classes

See /lib/classes/component.php, line 73:


     * Class loader for Frankenstyle named classes in standard locations.
     * Frankenstyle namespaces are supported.
     *
     * The expected location for core classes is:
     *    1/ core_xx_yy_zz ---&gt; lib/classes/xx_yy_zz.php
     *    2/ \core\xx_yy_zz ---&gt; lib/classes/xx_yy_zz.php
     *    3/ \core\xx\yy_zz ---&gt; lib/classes/xx/yy_zz.php
     *
     * The expected location for plugin classes is:
     *    1/ mod_name_xx_yy…</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:colorbox_in_course_format&amp;rev=1462270054&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2016-05-03T10:07:34+00:00</dc:date>
        <title>moodle:colorbox_in_course_format</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:colorbox_in_course_format&amp;rev=1462270054&amp;do=diff</link>
        <description>Using the colorbox pop-up

The colorbox pop-up is used in different course formats. 

The colorbox creates a 'pop-up' and can display content. It will display based on a class and it uses the href element for the content of the pop-up.

Colorbox js code:</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:competion&amp;rev=1358923999&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2013-01-23T06:53:19+00:00</dc:date>
        <title>moodle:competion</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:competion&amp;rev=1358923999&amp;do=diff</link>
        <description>There are several states of completion of the course

	*  Completion is turned off
	*  Completion is turned on
	*  Without any criteria
	*  With one or more criteria(s)
	*  Course is completed

1. Completion is turned off

Settings-&gt;Course administration-&gt;Edit settings
Completion tracking -&gt; 'Disabled, not shown in activity settings'</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:completion&amp;rev=1453538784&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2016-01-23T08:46:24+00:00</dc:date>
        <title>moodle:completion</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:completion&amp;rev=1453538784&amp;do=diff</link>
        <description>States of Course Completion

There are several states of completion of the course

	*  Completion is turned off
	*  Completion is turned on
	*  Without any criteria
	*  With one or more criteria
	*  Course is completed

In the following, we explain each state in more detail.</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:course_construction&amp;rev=1716387786&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-05-22T14:23:06+00:00</dc:date>
        <title>moodle:course_construction</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:course_construction&amp;rev=1716387786&amp;do=diff</link>
        <description>A Moodle course consists of sections (topics) and modules (activities or resources).

Information about the course structure is stored in a cache (which is read into memory from mdl_course.modinfo). This information can be accessed as an object of class course_modinfo by calling get_fast_modinfo($course_object).</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:database_access&amp;rev=1326292331&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2012-01-11T14:32:11+00:00</dc:date>
        <title>moodle:database_access</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:database_access&amp;rev=1326292331&amp;do=diff</link>
        <description>Moodle 2 stores a handle to its database object in the global var $DB. Use $DB to perform all database related activities.

Take a look at lib/dml/moodle_database.php and lib/dml/mysqli_native_moodle_database.php to see what functions are available.

In the background, Moodle uses the ADOdb Database Abstraction Library, which is documented here. Please note that they also mention an extension which “provides up to 100% speedup by replacing parts of ADOdb with C code”.</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:email&amp;rev=1452785998&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2016-01-14T15:39:58+00:00</dc:date>
        <title>moodle:email</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:email&amp;rev=1452785998&amp;do=diff</link>
        <description>Use the standard email_to_user function and hack its arguments to do more advanced stuff. ATTENTION: adding cc and bcc headers in this way only works if you're not using smtp.

Here's how you add a Bcc header:


        $from = generate_email_supportuser();
        $from-&gt;customheaders = &quot;Bcc: mysecret.address@solin.eu&quot;;
        email_to_user($user, $from, $subject, $messagetext);</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:enrollment&amp;rev=1448543840&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2015-11-26T13:17:20+00:00</dc:date>
        <title>moodle:enrollment</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:enrollment&amp;rev=1448543840&amp;do=diff</link>
        <description>Here's the official story.

Users take up one or more specific roles in a 'context', e.g. they are student (role) in a course (context). Contexts are divided into levels:

From lib/accesslib.php:


define(‘CONTEXT_SYSTEM’, 10);
define(‘CONTEXT_PERSONAL’, 20);
define(‘CONTEXT_USER’, 30);
define(‘CONTEXT_COURSECAT’, 40);
define(‘CONTEXT_COURSE’, 50);
define(‘CONTEXT_GROUP’, 60);
define(‘CONTEXT_MODULE’, 70);
define(‘CONTEXT_BLOCK’, 80);</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:file_handling&amp;rev=1381066885&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2013-10-06T13:41:25+00:00</dc:date>
        <title>moodle:file_handling</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:file_handling&amp;rev=1381066885&amp;do=diff</link>
        <description>The moodle.org site has a reasonably good intro to the Moodle 2.0 file system: &lt;http://docs.moodle.org/en/Development:Using_the_file_API&gt;.

Here is a database schema for all Moodle tables relevant for the Moodle file system:



Please note that a given context record points to a file only if its contextlevel is 70 (i.e. a module).</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:forms&amp;rev=1452692170&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2016-01-13T13:36:10+00:00</dc:date>
        <title>moodle:forms</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:forms&amp;rev=1452692170&amp;do=diff</link>
        <description>It is an unfortunate fact of life that Moodle uses an archaic, procedural style forms library. In your own plugins you can ignore it to a large extent. However, sometimes it's necessary to add a configuration option, for instance in the course settings form or in your own plugin's settings form. Let's see how to deal with that requirement here.</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:grades&amp;rev=1384955366&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2013-11-20T13:49:26+00:00</dc:date>
        <title>moodle:grades</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:grades&amp;rev=1384955366&amp;do=diff</link>
        <description>An overview of all relevant tables:



Please note: course_modules.instance = grade_items.iteminstance.

The id in the URL of a course module is the course_module.id. This can be used to acquire a grade for a specific user. The following query is an example. All you need is the course_module id and the student's user id.</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:installation_and_configuration_issues&amp;rev=1464600486&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2016-05-30T09:28:06+00:00</dc:date>
        <title>moodle:installation_and_configuration_issues</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:installation_and_configuration_issues&amp;rev=1464600486&amp;do=diff</link>
        <description>Date Not Translated

Moodle supports many languages out of the box. If you install an additional language besides the default English, everything is peachy. Except that the date is not translated, if your server does not support the locale.

Here's how to install additional locales on your Debian or Ubuntu server (tested under Debian).</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:moodle&amp;rev=1461933539&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2016-04-29T12:38:59+00:00</dc:date>
        <title>moodle:moodle</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:moodle&amp;rev=1461933539&amp;do=diff</link>
        <description>Table of Contents

	*  Database Access
	*  Course Construction
	*  File Handling
	*  Using the File API in Modules
	*  New Modules
	*  Using Soda to Create New Moodle Modules
	*  Enrollment
	*  Email
	*  Grades
	*  Roles and Capabilities
	*  Blocks
	*  Installation and Configuration Issues
	*  Course completion
	*  Authentication
	*  Themes
	*  Backup And Restore Modules
	*  Navigation
	*  Forms
	*  Cache
	*  Strings And Translations
	*  Poodll - multimedia recording plugins
	*  AWS - Moodle on …</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:multimedia&amp;rev=1433769869&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2015-06-08T13:24:29+00:00</dc:date>
        <title>moodle:multimedia</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:multimedia&amp;rev=1433769869&amp;do=diff</link>
        <description>Change Dimensions of Video Player

The dimensions of the embedded video player are defined here: /lib/medialib.php. Code:


if (!defined('CORE_MEDIA_VIDEO_WIDTH')) {
    // Default video width if no width is specified; some players may do something
    // more intelligent such as use real video width.
    // May be defined in config.php if required.
    define('CORE_MEDIA_VIDEO_WIDTH', 600);
}
if (!defined('CORE_MEDIA_VIDEO_HEIGHT')) {
    // Default video height. May be defined in config.php if…</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:navigation&amp;rev=1450863457&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2015-12-23T09:37:37+00:00</dc:date>
        <title>moodle:navigation</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:navigation&amp;rev=1450863457&amp;do=diff</link>
        <description>Navigation Bar: Breadcrumbs Menu

The navbar is not really a breadcrumbs menu (doesn't keep track of where you have been, just shows you where you are now in relation to the course).

The navigation bar's composition is determined through the $PAGE object (stored in a global Moodle variable).</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:new_modules&amp;rev=1426345556&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2015-03-14T15:05:56+00:00</dc:date>
        <title>moodle:new_modules</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:new_modules&amp;rev=1426345556&amp;do=diff</link>
        <description>In one word: use the template “newmodule”. Okay, that was four words. Anyway, here's the url: &lt;http://moodle.org/mod/data/view.php?d=13&amp;rid=715&gt;. Simply replace all appearances of string “newmodule” by the name of your own module.

Hint: prepare all your tables in MySQL (or whatever DB you're using) and then use the xmldbeditor to extract the right xml for the newmodule/db/install.xml file.</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:poodll_-_multimedia_recording_plugins&amp;rev=1428589607&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2015-04-09T14:26:47+00:00</dc:date>
        <title>moodle:poodll_-_multimedia_recording_plugins</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:poodll_-_multimedia_recording_plugins&amp;rev=1428589607&amp;do=diff</link>
        <description>Relevant links:

	*  poodle.com
	*  Poodll plugins

Please note after installing the filter:

It is not essential but advised to turn the Text Cache lifetime off, or to 30 seconds in:
“Site Administration-&gt;Plugins-&gt;Filters-&gt;Common Filter Settings”</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:quiz&amp;rev=1429021751&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2015-04-14T14:29:11+00:00</dc:date>
        <title>moodle:quiz</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:quiz&amp;rev=1429021751&amp;do=diff</link>
        <description>Navigation

To remove the navigation panel, comment the lines starting on 133:


// Arrange for the navigation to be displayed in the first region on the page.
/*
$navbc = $attemptobj-&gt;get_navigation_panel($output, 'quiz_attempt_nav_panel', $page);
$regions = $PAGE-&gt;blocks-&gt;get_regions();
$PAGE-&gt;blocks-&gt;add_fake_block($navbc, reset($regions));
*/</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:roles_and_capabilities&amp;rev=1394736937&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2014-03-13T18:55:37+00:00</dc:date>
        <title>moodle:roles_and_capabilities</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:roles_and_capabilities&amp;rev=1394736937&amp;do=diff</link>
        <description>CAP_PROHIBIT vs 'not set'

In Moodle, a role is actually a bundle of capabilities. Plugins can have there own capabilities. That way, whenever you install a new plugin, you can set the capabilities of the plugin for each of the role definitions. A lot of plugins come with preconfigured capability settings for 'legacy' roles, such as 'teacher' and 'student'.</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:scheduled_tasks_or_cron_jobs&amp;rev=1438245450&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2015-07-30T08:37:30+00:00</dc:date>
        <title>moodle:scheduled_tasks_or_cron_jobs</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:scheduled_tasks_or_cron_jobs&amp;rev=1438245450&amp;do=diff</link>
        <description>Moodle 2.7 saw the introduction of a new Task API. It's pretty straightforward, see the official documentation.

There's one catch, however. The tasks array entry pointing to your classname assumes that your class is in the following path: /[yourplugin]/classes.</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:strings_and_translations&amp;rev=1441889747&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2015-09-10T12:55:47+00:00</dc:date>
        <title>moodle:strings_and_translations</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:strings_and_translations&amp;rev=1441889747&amp;do=diff</link>
        <description>Moodle supports localization out of the box. Your own plugins should provide at least an English language file, for example /mod/yourmod/lang/en/yourmod.php.

WARNING: After adding or changing language strings, don't forget to:

	*  Purge the cache
	*  Restart Apache (if you're using php caching)</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:testing_with_behat_and_selenium&amp;rev=1452766426&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2016-01-14T10:13:46+00:00</dc:date>
        <title>moodle:testing_with_behat_and_selenium</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:testing_with_behat_and_selenium&amp;rev=1452766426&amp;do=diff</link>
        <description>Start with &lt;https://docs.moodle.org/dev/Acceptance_testing#Installation&gt;. Follow the steps, but pay attention to running the next step “php composer.phar update --dev”. I had to do this before I could continue.

After completing all the steps, download &lt;http://selenium-release.storage.googleapis.com/2.48/selenium-server-standalone-2.48.2.jar&gt; and install the jar file through java (minimum java version 1.7).</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:themes&amp;rev=1372511946&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2013-06-29T13:19:06+00:00</dc:date>
        <title>moodle:themes</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:themes&amp;rev=1372511946&amp;do=diff</link>
        <description>It's usually easiest to just copy an existing theme first:

Inside /theme dir:
cp -R oldtheme newtheme

Inside new theme dir:


find . -iname '*valid*' -exec rename 's/old_theme_name/new_theme_name/i' {} +
find . -name '*' -exec sed -i -e 's/old_theme_name/new_theme_name/g' -e 's/Old_theme_name/New_theme_name/g' {} \;</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:using_soda_to_create_new_moodle_modules&amp;rev=1386707791&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2013-12-10T20:36:31+00:00</dc:date>
        <title>moodle:using_soda_to_create_new_moodle_modules</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:using_soda_to_create_new_moodle_modules&amp;rev=1386707791&amp;do=diff</link>
        <description>Overview

 Soda is a Moodle plugin to develop new modules. Soda does two things:

	*  It constructs all your standard module functions dynamically: you don't have to set up a complete lib.php file anymore for each new module.
	*  Soda provides you with a Model-View-Controller (MVC) framework for your module, eliminating a lot of complexity.</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:using_the_file_api_in_modules&amp;rev=1448291769&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2015-11-23T15:16:09+00:00</dc:date>
        <title>moodle:using_the_file_api_in_modules</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:using_the_file_api_in_modules&amp;rev=1448291769&amp;do=diff</link>
        <description>Moodle uses a virtual file system on top of the 'physical' directory structure located in moodledata. Each file is stored only once in a physical location, which is referenced in the database. The file is identified using a unique hash (based, of course, on the content of the file).</description>
    </item>
    <item rdf:about="https://tech.solin.eu/doku.php?id=moodle:web_services_in_plugins&amp;rev=1423737128&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2015-02-12T10:32:08+00:00</dc:date>
        <title>moodle:web_services_in_plugins</title>
        <link>https://tech.solin.eu/doku.php?id=moodle:web_services_in_plugins&amp;rev=1423737128&amp;do=diff</link>
        <description>A Web Service is conceptually easy, but surprisingly hard to develop and especially test. Here's a quick primer for the development side of things. Moodle also offers a very incomplete 'Web service test client' as well as an embedded version of the 'AMF test client'. The AMF test client didn't work for me: it kept spewing errors where other test methods yielded perfectly fine results.</description>
    </item>
</rdf:RDF>
