<?xml version="1.0" encoding="iso-8859-1"?> 
<s:slideset xmlns:s="http://www.oscom.org/2003/SlideML/1.0/" 
    xmlns:dc="http://purl.org/dc/elements/1.1"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:dcterms="http://purl.org/dc/terms/"
    xmlns:xi="http://www.w3.org/2001/XInclude"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
  <s:metadata>
    <s:title>Midgard's Component Framework</s:title>
    <s:author>
      <s:givenname>Henri</s:givenname>
      <s:familyname>Bergius </s:familyname>
      <s:email>henri.bergius@iki.fi</s:email>
      <s:orgname href="http://www.nemein.com/">Nemein Oy</s:orgname>
    </s:author>
    <s:confgroup>
      <s:confdates>
        <s:start>2004-09-29</s:start>
        <s:end>2004-10-01</s:end>
      </s:confdates>
      <s:conftitle>OSCOM 4</s:conftitle>
      <s:address>Zurich, Switzerland</s:address>
    </s:confgroup>
    <dc:subject>Open Source Content Management, Midgard</dc:subject>
    <dc:date>2004-09-30</dc:date>
    <dc:rights>Copyright 2003 Henri Bergius &amp; Nemein Oy, Available under Creative Commons Attribution-ShareAlike</dc:rights>
    <s:abstract>
      <p>
Introduction to the MidCOM component framework for Midgard CMS
      </p>
    </s:abstract>
  </s:metadata>

  <s:slide>
    <s:title>What is Midgard?</s:title>
    <s:content>
      <img src="midgard-project.png" align="right" hspace="4" />
      <ul>
        <li>Open Source Content Management System for managing information on the web</li>
        <li>Started in 1998, released to public in May 1999</li>
        <li>Active and diverse international developer community, participating in the OSCOM process</li>
        <li>Thousands of deployments, including universities, NGOs, businesses and governmental organizations</li>
        <li>Running on the LAMP (Linux, Apache, MySQL and PHP) architecture</li>
        <li>Free software licensing: GNU GPL and LGPL</li>
        <li>PHP extension and Apache module</li>
      </ul>
    </s:content>
  </s:slide>

  <s:slide>
    <s:title>Some features in Midgard</s:title>
    <s:content>
      <ul>
        <li>All data access goes through Midgard's C library; performance and security</li>
        <li>Support for multi-organization hosting (Sitegroups)</li>
        <li>Internationalization: translation tools and non-western characters (UTF-8) support</li>
        <li>Fully web based authoring and administrative tools with WYSIWYG editing</li>
        <li>Separation of content, layout and structure. Powerful PHP based style engine</li>
        <li>Clean, file-like URLs (for search engine support and easier pronounciation)</li>
        <li>Multiple authentication methods: Midgard DB, PAM and NTLM</li>
      </ul>
    </s:content>
  </s:slide>

  <s:slide>
    <s:title>Midgard API example</s:title>
    <s:content>
<pre>
&lt;?php
// Authenticate with Midgard
mgd_auth_midgard("username","password",0);
$midgard = mgd_get_midgard();

// Instantiate a new article
$article = new MidgardArticle();
$article-&gt;title = "My new article";
$article-&gt;name = "my_article";      // Usually used in URLs
$article-&gt;author = $midgard-&gt;user;  // Reference to MidgardPerson
$article-&gt;topic = $mytopic;         // Reference to MidgardTopic
// Save it
if ($article-&gt;create()) {
  echo "Successfully created article";
} else {
  echo "Article creation failed, reason ".mgd_errstr();
}
?&gt;
</pre>
    </s:content>
  </s:slide>

  <s:slide>
    <s:title>Introduction to MidCOM</s:title>
    <s:content>
      <img src="midcom.gif" align="right" hspace="4" />
      <ul>
        <li>Components are applications that provide a specific site feature, like news listings, event calendars or static content display</li>
        <li>A component is specified for each folder (topic) of the site</li>
        <li>MidCOM provides a standardized ways for configuration, layout templating and content structure definition (datamanager schemas)</li>
        <li>The midcom-template package is the fastest way to set up a MidCOM based website</li>
        <li>MidCOM is the default way of building websites with Midgard in version 1.6.0</li>
        <li>Strict namespacing (Java-like) and coding standard (PEAR)</li>
      </ul>
    </s:content>
  </s:slide>

  <s:slide>
    <s:title>MidCOM usage example</s:title>
    <s:content>
      <ul>
        <li>Browse the web site</li>
        <li>Log in</li>
        <li>Find a page that needs updating</li>
        <li>Click "Edit page", make changes, save, view</li>
        <li>Create new documents</li>
        <li>Create new subfolders</li>
      </ul>
    </s:content>
  </s:slide>

  <s:slide>
    <s:title>MidCOM templating engine</s:title>
    <s:content>
      <ul>
        <li>Extension of the standard Midgard templating engine</li>
        <li>Style is split into elements</li>
        <li>Simple syntax
          <ul>
            <li>&amp;(object.property); = Echo property value</li>
            <li>&amp;(object.property:h); = Echo property value with HTML allowed</li>
            <li>&lt;(element)&gt; = Include a style element</li>
          </ul></li>
        <li>Embedded PHP is also allowed but discouraged</li>
        <li>Style templates can be overridden on per-folder or per-folder tree basis (selection dialogue in "Edit folder")</li>
      </ul>
    </s:content>
  </s:slide>

  <s:slide>
    <s:title>MidCOM configuration engine</s:title>
    <s:content>
      <ul>
        <li>Configuration is defined in PHP array syntax, key =&gt; value</li>
        <li>Components provide a default configuration in _config snippetdir</li>
        <li>Configuration can be overridden on per-key basis either for:
           <ul>
             <li>Per-organization basis (stored in sitegroup-config snippetdir)</li>
             <li>Per-folder basis (stored as topic parameters)</li>
           </ul></li>
        <li>Most components provide a datamanager-driven UI for changing per-folder configuration</li>
      </ul>
    </s:content>
  </s:slide>

  <s:slide>
    <s:title>MidCOM datamanager</s:title>
    <s:content>
       <ul>
         <li>Data structure abstraction layer</li>
         <li>Fields defined in a schema snippet (PHP array syntax)</li>
         <li>Enables extension of MidgardObjects</li>
         <li>Document creation, locking, saving and error handling</li>
         <li>Version control (serialized to external RCS files)</li>
         <li>Document editing form generation and handling:
           <ul>
             <li>Different widgets: text entry, WYSIWYG HTML, selection, image upload etc.</li>
             <li>Field validation support</li>
             <li>Structuring forms with fieldsets</li>
           </ul>
         </li> 
       </ul>
    </s:content>
  </s:slide>

  <s:slide>
    <s:title>MidCOM datamanager schemas</s:title>
    <s:content>
<pre>
"default" =&gt; array (
    "name"        =&gt; "default",
    "description" =&gt; "News article",
    "fields"      =&gt; array ( // Define the form fields
        "name" =&gt; midcom_helper_datamanager_urlname_field(),
        "title" =&gt; array (
            "description" =&gt; "Title",
            "datatype"    =&gt; "text",
            "location"    =&gt; "title", 
            "required" =&gt; true,
        ),
        "content" =&gt; array (
            "description" =&gt; "Text",
            "datatype"    =&gt; "text",
            "location"    =&gt; "content",
            "widget"      =&gt; "html" // Use HTMLAREA
        ),
   ),
),
</pre>
    </s:content>
  </s:slide>

  <s:slide>
    <s:title>Future plans for MidCOM</s:title>
    <s:content>
      <ul>
        <li>MidCOM development is governed by the mRFC process</li>
        <li>Moving the code from database to file system, PEAR packaging</li>
        <li>Integrated indexing support (PLucene?)</li>
        <li>Centralized workflow support (now handled by components)</li>
        <li>Migration to PHP5</li>
        <li>Midgard Site Wizard for quicker setting up of MidCOM sites</li>
      </ul>
    </s:content>
  </s:slide>

  <s:slide>
    <s:title>Midgard resources</s:title>
    <s:content>
      <ul>
        <li>OSCOM, international association for Open Source Content Management - <a href="http://www.oscom.org/">www.oscom.org</a></li>
        <li>Midgard Project - <a href="http://www.midgard-project.org/">www.midgard-project.org</a></li>
        <li>NGO geeks - <a href="http://www.ngogeeks.org/">www.ngogeeks.org</a></li>
        <li>Some site examples:</li>
        <ul>
          <li><a href="http://www.wilderness.org.au/">www.wilderness.org.au</a></li>
          <li><a href="http://www.govt.nz/">www.govt.nz</a></li>
          <li><a href="http://www.puv.fi/">www.puv.fi</a></li>
          <li><a href="http://www.sentera.fi/">www.sentera.fi</a></li>
        </ul>
      </ul>
    </s:content>
  </s:slide>
</s:slideset>
