Index: openacs-4/packages/dotlrn/www/doc/architecture-overview.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/doc/architecture-overview.adp,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/www/doc/architecture-overview.adp	22 Jan 2003 14:23:38 -0000	1.1
@@ -0,0 +1,186 @@
+<master src="master">
+<property name="title">dotLRN Architecture</property>
+<h2>dotLRN Architecture</h2>
+by <a href=mailto:ben@openforce.net>Ben Adida</a> and <a href=arjun@openforce.net>Arjun Sanyal</a>, part of <a href=./>dotLRN Documentation</a>.
+<hr><p>
+
+
+dotLRN is built on OpenACS 4.x, a modular architecture for
+community-oriented web applications. dotLRN is also
+<strong>modular</strong> in that new course management functionality
+can be added as desired. Since dotLRN modules must function within the
+dotLRN architecture, dotLRN modularity must be built on top of OpenACS
+modularity.
+
+<p>
+
+The dotLRN architecture attempts to define a framework within which
+learning communities develop. A learning community may take many
+different forms but remains the crux of the architecture.
+
+
+<h2>dotLRN Community</h2>
+
+A <strong>dotLRN Community</strong> is architected as a series of
+OpenACS components, with a heavy use of the <strong>subsite</strong>
+concept. One community is represented by:
+
+<ul>
+<li> <strong>an OpenACS group</strong>: this serves to define membership
+and roles within the learning community.
+<li> <strong>a site node</strong>: this serves to define a
+consistent URL for the learning community, and to segment away each
+communities from one another. An example is <tt>/dotlrn/alumni-1998</tt>.
+<li> <strong>an instance of the dotLRN Community Manager
+package</strong>: this serves to display community-specific data
+in a way that is clearly segmented away from the other learning
+communities using the <i>acs-subsite</i> constructs.
+</ul>
+
+<h3>OpenACS Group</h3>
+
+The core dotLRN group type is <tt>dotlrn_community</tt>. This group
+type defines some basic attributes that all communities have:
+<ul>
+<li> <b>a short name</b>: a simple name with no spaces, no special
+characters, usually all lowercase. e.g. finance-101
+<li> <b>a pretty name</b>: a name that is used in pretty
+presentation. e.g. Finance 101
+<li> <b>start and end dates</b>: for communities that have certain
+validity periods, a start date and end date.
+</ul>
+
+There are two different types of learning communities in the basic
+dotLRN release: <strong>class instances</strong> and
+<strong>clubs</strong>. While Clubs need no additional attributes,
+Class Instances require information concerning the Term and Year of
+the Class Instance.
+
+<h3>Site Node</h3>
+
+In dotLRN, a community is mounted only at one particular node. In the
+future, if communities end up being multi-mounted, there will have to
+remain a canonical location for the community in order to ensure
+maximal modularity - specifically the ability to point to a
+community's URL using only the <tt>community_id</tt> as a starting
+point.
+
+<h3>Instance of dotLRN Community Manager</h3>
+
+The core dotLRN OpenACS package is called <tt>dotlrn</tt>
+(surprisingly enough). This package is meant to be remounted to handle
+community types and specific communities. A <tt>package_id</tt>
+corresponds to each community.
+
+<p>
+
+The group types for these two dotLRN Community Types are
+<tt>dotlrn_class_instance</tt> and <tt>dotlrn_club</tt>.
+
+<h2>Use of NPA</h2>
+
+dotLRN makes heavy use of the <b>New Portal Architecture</b>.
+
+<p>
+
+Each full-access user has a personal portal where all data from all
+communities is centralized in one place. This is called the <b>dotLRN
+User Portal</b>.
+
+<p>
+
+Each community has a non-member portal which displays information
+to those browsing the system and wanting to find out more about a
+community before joining it. This is called the <b>dotLRN Community
+Non-Member Portal</b>.
+
+<p>
+
+Each community also has an administrative portal which centralizes all
+administrative functionality for that community. This is called the
+<b>dotLRN Community Admin Portal</b>.
+
+<p>
+
+Finally, each community member has her own <b>dotlrn Community Member
+Portal</b>. The important distinction here is that there is a
+different portal for each member of this community. Thus, if a
+community has 100 members, there are 100 individually managed
+portals. These portals are initially created from the <b>dotLRN
+Community Portal Template</b> that administrators of the community control.
+
+<h2>dotLRN Applets</h2>
+
+dotLRN Communities have various packages of functionality. These
+packages (<b>dotLRN applets</b>) are much like existing OpenACS 4
+packages, but with added specifications, special callback interfaces,
+and predictable APIs that not every OpenACS 4 package will have.
+
+<p>
+
+Thus, a <strong>dotLRN Applet</strong> is composed of <b>three</b>
+pieces that may each be a separate OpenACS package:
+
+<ul>
+<li> <b>OpenACS raw functionality</b>, to provide discussion
+forum functionality. As much as possible, this shouldn't depend on
+other dotLRN components. (e.g. bboard)
+
+<li> <b>OpenACS portlet</b>, using the New Portal Architecture (NPA),
+to provide the ability to display the raw functionality in a portal
+interface. This obviously depends on the the NPA, but should otherwise
+be as independent as possible from dotLRN. (e.g. bboard-portlet)
+
+<li> <b>dotLRN functionality hooks</b>, to link the raw functionality
+into the appropriate dotLRN structure. This obviously depends on
+dotLRN, but should be as thin a layer as possible on top of the the
+previous two components. (e.g. dotlrn-bboard).
+</ul>
+
+<p>
+
+<h3>NPA Interactions</h3>
+
+The relationship between the NPA and the portlet functionality is
+explored in the <a href=npa-architecture.adp>NPA Architecture Manual</a>.
+
+<p>
+
+<h3>dotLRN Applet API</h3>
+
+The relationship between dotLRN and the specific dotLRN-dependent
+packages (dotlrn-bboard, dotlrn-faq, etc...) is defined using
+<b>ACS Service Contract</b>. ACS Service Contract defines a standard
+provider/consumer interface with special contract APIs. The dotLRN
+system defines the <b>dotLRN Applet Contract</b>, which includes the
+following operations:
+<ul>
+<li> <b>GetPrettyName</b>: Obtain a pretty, presentable name for the
+applet in question.
+<li> <b>AddAppletToCommunity</b>: Add the applet to a
+new community. This will most probably entail instantiating a new package for
+this functionality, mounted below the community's main mount point. It
+will also involve setting up applet-specific data structures (e.g. a
+new forum inside bboard).
+<li> <b>RemoveAppletFromCommunity</b>: Remove the applet from the
+community. This will entail cleaning up any applet-specific data
+structures, removing the mount point and package instance.
+<li> <b>AddUser</b>: add a user to dotLRN in general. This user has
+not yet joined any community, but may need user-specific functionality
+enabled (a private folder for files, a personal calendar, etc..)
+<li> <b>RemoveUser</b>: remove a user from dotLRN in general. This
+cleans up the AddUser operation.
+<li> <b>AddUserToCommunity</b>: add a user to the community, and perform any
+applet-specific related actions. For applets that are represented via
+a portlet (which is often, but not always, the case), this will add
+the right portlet to the user's portal page for that community. It
+will also add the generic portlet to the user's main, cross-community
+workspace.
+<li> <b>RemoveUserFromCommunity</b>: remove a user from a community,
+and thus clean up the actions of AddUserToCommunity.
+</ul>
+
+<p>
+
+The specifics of creating a dotLRN package are described in the <a
+href=writing-a-dotlrn-package.adp>dotLRN Package Creation Guide</a>.
Index: openacs-4/packages/dotlrn/www/doc/dotlrn-faq.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/doc/dotlrn-faq.adp,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/www/doc/dotlrn-faq.adp	22 Jan 2003 14:23:38 -0000	1.1
@@ -0,0 +1,209 @@
+<master src="master">
+<property name="title">dotLRN FAQ</property>
+<div class="indent">
+
+    <h2>The dotLRN FAQ</h2>
+
+    <p class="indent">part of <a href=../>dotLRN</a>
+
+    <p class="indent"><small>Last updated: $Date: 2003/01/22 14:23:38 $</small>
+
+    <p class="heading">Contents
+    
+    <ul>
+        <li><a href=dotlrn-faq.adp#basics>Basics</a>
+        <li><a href=dotlrn-faq.adp#development>State of dotLRN Development</a>
+        <li><a href=dotlrn-faq.adp#openforce>The OpenForce Role in dotLRN</a>
+        <li><a href=dotlrn-faq.adp#openacs>dotLRN and OpenACS</a>
+        <li><a href=dotlrn-faq.adp#licensing>Licensing</a>
+        <li><a href=dotlrn-faq.adp#misc>Miscellaneous</a>
+    </ul>
+
+  
+    <p class="heading"><a class="plain" name="basics">Basics</a>
+  
+    <p class="question">Q: What is dotLRN?
+    <p class="answer">
+
+        dotLRN is a full-featured application for rapidly developing
+        web-based learning communities, specifically in the context of
+        Course Management. The dotLRN software relies on a development
+	version of <a
+        href=http://openacs.org>OpenACS v4.5</a> and includes data model,
+        application logic, and templates to get you up and running very
+        quickly.
+    
+    <p class="question">Q: Is dotLRN usable?
+    <p class="answer">
+
+        dotLRN is currently in <strong>alpha</strong> state. The
+        target audience at this time is mostly early
+        adopters. <strong>No backwards-compatibility will be ensured
+        until a beta version</strong>. That said, dotLRN is quite
+        stable as is and can most certainly be used to determine
+        near-term usability in a production environment.
+    
+    <p class="question">Q: When will dotLRN ship?
+    <p class="answer">
+
+        dotLRN beta is planned for May 1st, 2002. dotLRN v1.0 is
+        planned for August 1st, 2002.
+    
+    <p class="question">Q: How can I contribute?
+    <p class="answer">
+
+        We are currently developing our contribution mechanisms.
+        <p class="answer">If you are actively interested in helping us
+        develop these mechanisms, please contact us at <a
+        href=mailto:dotlrn@openforce.net>dotlrn@openforce.net</a>.
+    
+    <p class="question">Q: What about this dotLRN Governance discussion?
+    <p class="answer">
+
+        The discussion is still under way. MIT Sloan will be providing
+        the framework for this in the very near future.
+
+
+    <p class="heading"><a class="plain" name="development">State of dotLRN 
+    Development</a>
+  
+    <p class="question">Q: So what version of OpenACS do I need to use? 
+    <p class="answer">
+
+        dotLRN will work with:
+	
+	<ul>
+	  <li>The latest development CVS sources
+	  (i.e. HEAD). Instructions to check out the latest
+	  development CVS sources are on the <a
+	  href="dotlrn-install.adp">dotLRN installation</a> page. 
+	</ul>
+	
+    <p class="answer">
+        dotLRN will probably work with:
+
+	<ul>
+	  <li>A recent OpenACS <a
+          href="http://openacs.org/sdm/nightly-tarballs.tcl?package_id=9">nightly
+          tarball</a> But we don't test this, and all the warnings on
+          the page apply
+	</ul>
+
+    <p class="answer">
+        dotLRN will <strong>NOT</strong> work with:
+
+	<ul>
+	  <li>The OACS v4.5 beta CVS branch
+	  <li>Any OACS v4.5 beta tarballs
+	</ul>
+
+    <p class="note"> 
+
+        When dotLRN is released as a complete tarball, we will specify
+        exactly which OpenACS tarball or other package you'll
+        be able to use.
+
+    <p class="question">Q: When will dotLRN be compatible with PostgreSQL?   
+    <p class="answer">
+
+        PostgreSQL compatibility porting continues rapidly and will be
+	completed in the coming weeks. A partial port is in the CVS
+	tree, with more progress daily.
+    
+    <p class="question">Q: Can I use ACS Classic 4.2/4.3? 
+    <p class="answer">
+    
+        Due to numerous fixes and enhancements made by the OpenACS
+	developers, dotLRN will <strong>not</strong> work with ACS
+	Classic. However, ACS Classic and OpenACS are similar enough
+	so that code and skills based on one are very transferable
+	to the other.
+	    
+    <p class="question">Q: Can I get a tarball of the dotLRN CVS?
+    <p class="answer">
+    
+       Contact us at <a
+       href=mailto:dotlrn@openforce.net>dotlrn@openforce.net</a> if 
+       you are interested in a tarball.
+       
+
+    <p class=heading><a class=plain name=openforce> The OpenForce Role
+    in dotLRN</a>
+  
+    <p class="question">
+    Q: What's the relationship between MIT Sloan and OpenForce? 
+    <p class="answer">
+    
+    MIT Sloan hired OpenForce to develop dotLRN to replace the aging
+    SloanSpace v1, which itself was built on ACS v3.
+  
+    <p class="question">Q: How will OpenForce work with other OpenACS
+    developers? 
+    <p class="answer">
+
+    OpenForce will continually provide anonymous CVS access to the
+    dotLRN development tree. OpenForce will continue to provide
+    architectural direction and goals for dotLRN. Over time, OpenForce
+    will qualify and include new developers in the core development
+    process. OpenForce expects to lead - but not monopolize - the dotLRN
+    process. OpenForce will also provide a repository of dotLRN
+    applications available for all to obtain existing dotLRN extensions
+    and provide new ones to the community.
+  
+    <p class="question">Q: Will OpenForce develop, support, and/or host
+    dotLRN commercially? 
+    <p class="answer"> Absolutely.
+
+    <p class="question">Q: Will OpenForce preclude me from providing
+    my own services surrounding dotLRN? 
+    <p class="answer"> Absolutely not.
+
+    <p class="question">Q: But Why? Aren't you crazy to throw away
+    such clear business opportunity? 
+    <p class="answer"> 
+
+    We are not in the business of selling packaged closed-source
+    software. We believe that open-source software and a strong
+    developer community provides plenty of opportunity for numerous
+    commercial services. We intend to stick to the Open-Source track
+    100%. No tricks here.
+  
+
+    <p class=heading><a class=plain name=openacs>dotLRN and OpenACS</a>
+  
+    <p class="question">Q: Is dotLRN a part of the OpenACS project? 
+    <p class="answer">
+    
+    dotLRN is not part of the OpenACS project, but it is an OpenACS
+    application. This means that dotLRN will install on a vanilla
+    OpenACS without additional modifications and through the regular,
+    accepted OpenACS API. While dotLRN developers happen to also be
+    core OpenACS developers, the dotLRN team is taking all possible
+    measures to ensure that any modification suggested to the OpenACS
+    core is approved by other OpenACS developers that do not have a
+    direct stake in dotLRN.
+  
+    <p class="question">Q: Will dotLRN be merged into OpenACS? 
+    <p class="answer">
+    This is a question to be answered by the OpenACS community.
+  
+
+    <p class=heading><a class=plain name=licensing>Licensing</a>
+
+    <p class="question">Q: What are the terms of use for dotLRN? 
+    <p class="answer">
+    dotLRN is distributed under the GNU General Public License version 2.
+
+
+    <p class=heading><a class=plain name=misc>Miscellaneous</a>
+    
+    <p class="question">Q: How is dotLRN spelled and pronounced?
+    <p class="answer">
+
+    It's sometimes written as <tt>.LRN</tt>, but the spelling and
+    capitalization <tt>dotLRN</tt> is preferred. hackers who type a
+    lot usually write <tt>dotlrn</tt>. <tt>dotLRN</tt> is pronounced
+    &quot;daught-learn&quot; We are currently accepting voice
+    applications for the dotLRN MP3 pronounciation file.
+
+</div>
Index: openacs-4/packages/dotlrn/www/doc/dotlrn-install.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/doc/dotlrn-install.adp,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/www/doc/dotlrn-install.adp	22 Jan 2003 14:23:38 -0000	1.1
@@ -0,0 +1,381 @@
+<master src="master">
+<property name="title">Installing dotLRN - OpenForce</property>
+
+<div class="indent">
+
+    <h2>Installing dotLRN</h2>
+
+    <p class="indent">part of <a href="../">dotLRN</a></p>
+
+    <p class="indent"><small>Last updated: $Date: 2003/01/22 14:23:38 $</small>
+
+    <p class="heading">Contents</p>
+
+    <ul>
+        <li>Read the dotLRN FAQ
+        <li>Get and Install OpenACS from development CVS
+        <li>Get dotLRN from CVS
+        <li>Install dotLRN on your system
+        <li>Explore dotLRN
+        <li>Reinstalling dotLRN
+    </ul>
+
+
+    <p class="heading">Read the <a href="/faq">dotLRN FAQs</a></p>
+
+    <p class="heading">Get and Install OpenACS from development CVS</p>
+
+    <p class="note">
+       If you have a working OpenACS installation from the latest
+       development CVS, make sure that you have all the packages required
+       below then skip to the next section.
+    </p>
+
+    <p class="indent">
+       
+       If you are installing OpenACS, follow the extensive
+       installation <a
+       href="http://openacs.org/doc/openacs-4">documentation</a>.
+       <strong>Stop</strong> at the <a
+       href="http://openacs.org/doc/openacs-4/openacs.html">point</a>
+       where the OpenACS installation instructions tell you to
+       &quot;download OpenACS&quot;. Don't use the &quot;Quick
+       Downloads&quot;! Continue on with this document.
+
+    <p class="indent">
+
+      <pre>      
+      cvs -d :pserver:anonymous@openacs.org:/cvsroot login
+      (just hit return for the password)
+      cvs -z3 -d :pserver:anonymous@openacs.org:/cvsroot checkout acs-core
+      </pre>
+      
+    <p class="note">
+      CVS commandlines are given in terms of anonymous users, if you have an
+      account on openacs.org, use your login where appropriate. Don't forget to
+      set the CVS_RSH variable in your shell envrioment to &quot;ssh&quot;.
+
+    <p class="indent">
+
+      dotLRN requires some more modules that are not in
+      <tt>acs-core</tt>, but not all of the packages in the OpenACS
+      source tree. Next are the commands to get these modules.
+
+    <p class="indent">
+      Here's the current list of non-core packages needed for dotlrn:
+
+    <p class="indent">
+      <pre>
+      acs-datetime
+      acs-developer-support (optional)
+      acs-events
+      acs-mail-lite
+      attachments
+      bulk-mail
+      calendar
+      faq
+      file-storage
+      forums
+      general-comments
+      news
+      notifications
+      ref-timezones
+      user-preferences
+      </pre>      
+    </p>
+
+    <p class="note">
+      <strong>Do not install</strong> or, if installed, <strong>remove</strong> these
+        packages since they conflict with dotlrn packages: <tt>portal</tt>
+        (conflicts with new-portal) and <tt>spam</tt>
+        (conflicts with bulk-mail)
+    </p>
+
+    <p class="indent">
+      <tt>cd</tt> to the newly created <tt>/openacs-4/packages</tt>
+      directory before the next command.
+
+    <p class="indent">
+      <pre> 
+      cvs -z3 -d :pserver:anonymous@openacs.org:/cvsroot co \
+      acs-datetime acs-developer-support acs-events acs-mail-lite \
+      attachments bulk-mail calendar faq file-storage forums general-comments \
+      news notifications ref-timezones user-preferences
+      </pre>
+
+    <p class="note">
+       Installation timesaver: In the <tt>/packages/ref-timezones/sql/common/</tt>
+       directory, cut down the files to a few <tt>insert</tt> statements apiece.
+       This is fine for test system, and will save you a lot of time in the
+       installation process.
+
+    <p class="indent">
+      You will now have an <tt>/openacs-4</tt> directory with all of
+      OpenACS required by dotLRN. To double check, your
+      <tt>/openacs-4/packages</tt> directory should look similar to this:
+
+    <pre>
+      $ ls
+      acs-admin                acs-kernel            acs-templating  forums
+      acs-api-browser          acs-mail              acs-util        general-comments
+      acs-bootstrap-installer  acs-mail-lite         acs-workflow    news
+      acs-content              acs-messaging         attachments     notifications
+      acs-content-repository   acs-notification      bulk-mail       page
+      acs-core-docs            acs-reference         calendar        ref-timezones
+      acs-datetime             acs-service-contract  CVS             search
+      acs-developer-support    acs-subsite           faq             skin
+      acs-events               acs-tcl               file-storage    user-preferences
+    </pre>
+
+    <p class="heading">Get dotLRN from CVS</p>
+
+    <p class="indent">
+       Getting dotLRN from CVS is just like getting OpenACS from CVS
+       with a different CVSROOT.
+
+    <p class="indent">
+
+      Change to your <tt>/openacs-4/packages</tt> directory issue the
+      following commands:
+       
+      <pre>
+      cvs -d :pserver:anonymous@dotlrn.openforce.net:/dotlrn-cvsroot login
+      (hit return for prompted for password)
+      cvs -z3 -d :pserver:anonymous@dotlrn.openforce.net:/dotlrn-cvsroot co dotlrn-core       
+      </pre>
+
+    <p class="indent">
+      This will fetch the following packages to your
+      <tt>/openacs-4/packages</tt> directory<BR>
+      <font color=red>(Updated August 29: removed research-portlet and dotlrn-research)</font>:
+
+    <p class="indent">
+
+      <pre>
+        dotlrn
+        dotlrn-syllabus
+        new-portal
+        profile-provider
+        user-profile
+        bm-portlet 
+        dotlrn-bm
+        calendar-portlet
+        dotlrn-calendar
+        dotlrn-portlet
+        dotlrn-dotlrn
+        faq-portlet
+        dotlrn-faq
+        forums-portlet
+        dotlrn-forums
+        fs-portlet
+        dotlrn-fs
+        news-portlet
+        dotlrn-news
+        static-portlet
+        dotlrn-static
+      </pre>
+
+    <p class="indent">
+
+      A few minor
+      modifications of the OpenACS code needs to be done here. First,
+      in the <tt>/openacs-4</tt> directory (where you see the <tt>bin,
+      CVS, packages ...</tt> directories), make sure a directory named
+      <tt>content-repository-content-files</tt> exists. If not, create
+      it with the same permissions as the other dirs. Second, create a
+      <tt>graphics</tt> directory inside the <tt>www</tt>
+      directory. Third, copy all the files in
+      <tt>/packages/dotlrn/www/graphics</tt> into the
+      <tt>graphics</tt> directory you just created.
+
+    <p class="indent">
+      Next, copy the <tt>/openacs-4</tt> directory to where ever you
+      prefer your webserver root to be, traditionally
+      <tt>/web</tt>. Now you can continue with the OACS <a
+      href="http://openacs.org/doc/openacs-4/openacs.html">installation
+      document</a> at the third bullet point. Continue with the
+      standard OACS installation process until your reach the
+      &quot;Congratulations!&quot; front page, then return here.
+
+  <p class="heading">Install dotLRN on your system</p>
+  <p class="indent">
+
+     Go the the &quot;ACS Package Manager&quot; (APM) on your system
+     at <tt>http://yourserver/acs-admin/apm</tt> and hit the
+     &quot;Install packages&quot; link. After the installer loads, you
+     will see a list of the packages you just got from CVS. Click the
+     button at the bottom of the page to Install them. You do not
+     have to restart your server at ths point.
+  </p>
+
+  <p class="indent">
+  
+     Next go to the &quot;Site Map&quot; on your system at
+     <tt>http://yourserver/admin/site-map</tt>. Click the &quot;new
+     sub folder&quot; link to the right of the &quot;Main Site&quot;
+     link at the top of the table. Enter <tt>dotlrn</tt> in the
+     textbox, and hit the button.
+  
+  </p>     
+
+  <p class="indent">
+     
+     There will be a new entry in the URL column for
+     &quot;dotlrn&quot; with &quot;(none)&quot; in the application
+     column, to the right of this, click the &quot;New
+     Application&quot; link.  Enter <tt>dotlrn</tt> into the textbox
+     and select &quot;dotLRN&quot; from the drop-down list and hit the
+     button.
+  
+  </p>   
+  
+  <p class="indent">
+
+     There will now be &quot;dotlrn&quot; in the application column to
+     the right of the &quot;dotlrn/&quot; URL.
+  
+  </p>
+
+  <p class="indent">
+
+     Install the
+     &quot;notifications&quot; and &quot;attachments&quot; packages at
+     the URL &quot;/notifications&quot; and
+     &quot;/attachments&quot;the same way you installed
+     &quot;dotlrn&quot;
+     
+  </p>
+
+  <!-- Add note about developer-support here -->
+  
+  <p class="indent">
+
+     Next you must set some parameters from the <tt>Site Map</tt>
+     page. 
+
+     <ul>
+     
+     For the &quot;Main
+     site&quot; (the first row of the table at
+     the top of the page), set the &quot;DefaultMaster&quot; parameter
+     from <tt>/www/default-master</tt> to
+     <tt>/packages/dotlrn/www/dotlrn-master</tt>.
+
+     <li>For the <tt>ACS Kernel</tt> (the first item in the list below
+     the table) in the <tt>system-information</tt> section, set the
+     <tt>CommunityMemberURL</tt> from <tt>/shared/community-member</tt> to
+     <tt>/dotlrn/community-member</tt>
+
+     <li>In the same <tt>system-information</tt> section, set the
+     <tt>CommunityMemberAdminURL</tt> from <tt>/acs-admin/users/one</tt> to
+     <tt>/dotlrn/admin/user</tt>
+
+     </ul>
+  </p>
+
+  <p class="indent">
+  
+     <b>You must now restart your server, wait a few minutes, and
+     reload the &quot;Site Map&quot; page in your browser</b> After
+     the server restarts, refresh the &quot;Site Map&quot;. You will
+     see a &quot;(+)&quot; to the left of the dotlrn/ URL and a new
+     URL: &quot;portal/&quot; with application &quot;new-portal&quot;.
+
+  </p>
+
+  <p class="note">
+
+     Aren't seeing the &quot(+)&quot; beside <tt>dotlrn/</tt>?
+     Something went wrong. Did you restart your server? Restart again
+     while doing a <tt>tail -f</tt> of the error log with debug turned
+     on in your AOLServer configuration. Please report all errors you
+     encounter to <a href="/bugs">the Bug Tracker</a>.
+  </p>
+
+  <!-- TODO: re-vamp this section -->
+
+  <p class="heading">Explore dotLRN</p>
+
+  <p class="indent">
+
+      Go to dotLRN Administration at
+      <tt>http://yourserver/dotlrn/admin</tt>.  Make some dotLRN
+      users, terms, departments, classes. 
+  
+  </p>
+
+  <p class="indent">
+
+      Here are some suggestions for things to check out in dotlrn:
+
+  </p>
+
+  <p class="indent">
+  
+      Goto /dotlrn your "workspace". Click the "Control Panel" link at
+      the top and try the "Customize this portal" link there.  Goto
+      the admin pages for a class or community and try the "Manage
+      Membership" link. Create a new sugroup for a class or community. 
+      Edit or create new "Custom Portlets". 
+
+  </p>
+
+      
+  <p class="indent">
+
+     Enjoy!
+
+  </p>
+
+  <p class="heading">Automatated Installation</p>
+
+  <p class="indent">
+
+
+  <font color=red>(new Oct 11)</font>
+  As an alternative to the manual installation above. Peter Marklund
+  (peter_marklund@fastmail.fm) has developed scripts to automate installation.
+  If you are just starting out with dotlrn, it would be a good idea to 
+  go through the manual installation a few times before trying to use
+  the automated scripts.
+    
+  To get the scripts, use the following commandline:
+
+  <pre>cvs -d :pserver:anonymous:@dotlrn.collaboraid.biz:/cvsroot checkout dotlrn-install</pre>
+
+  </p>
+
+
+  <p class="heading">Manual Re-installation</p>
+
+  <p class="indent">
+     
+     Sometimes you have to dump your DB. Here's the dotLRN reinstall
+     process.
+
+    <p class="indent">
+        <strong>Important note:</strong>If you have the dotlrn-survey,
+        and/or survey-portlet directories on your system, please delete them as
+        they are no longer part of the <tt>dotlrn-core</tt> packages. If you    
+        are not using simple-survey aside from dotlrn, you can delete that too.
+
+     <ol>
+       <li>Stop <tt>aolserver</tt> and any open <tt>sqlplus</tt>
+       sessions <li>Create a drop/create user script. Lars has a swift
+       <a href="http://pinds.com/acs-tips/oracle-statements">tool</a>
+       to help you create one.  <li>In a shell, type:
+         <pre class="code">
+           % sqlplus internal < my-drop-create-script.sql
+         </pre>
+        
+          Verify that your database user was droped and created
+          successfully.  If you get an error saying: <tt>Cannot drop a
+          user that is currently connected</tt>, close all open
+          <tt>sqlplus</tt> sessions and repeat the command above.
+       <li>Now would be a good time to <tt>cvs update</tt> OpenACS and dotLRN
+       <li>Re-start <tt>aolserver</tt>, wait 20 seconds or so, and
+           do the standard OpenACS installation.
+       <li>Go to the <strong>Install dotLRN on your system</strong>
+           section of this document and continue from there.
+
+</div>
Index: openacs-4/packages/dotlrn/www/doc/index.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/doc/index.adp,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/www/doc/index.adp	22 Jan 2003 14:23:38 -0000	1.1
@@ -0,0 +1,15 @@
+<master src="master">
+<property name="title">dotLRN Documentation</property>
+<h2>dotLRN Documentation</h2>
+part of <a href=../>dotLRN</a>
+<hr><p>
+
+<ul>
+<li> <a href="dotlrn-install">Installation</a>
+<li> <a href="dotlrn-faq">FAQ</a>
+<li> <a href="nomenclature">Nomenclature</a>
+<li> <a href="permission-api">Permissions API</a>
+<li> <a href="permission-overview">Permissions Overview</a>
+<li> <a href="permission-portals">Permissions Portals</a>
+<li> <a href="writing-a-dotlrn-package">Writing a dotLRN Package</a>
+</ul>
Index: openacs-4/packages/dotlrn/www/doc/master.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/doc/master.adp,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/www/doc/master.adp	22 Jan 2003 14:23:38 -0000	1.1
@@ -0,0 +1,2 @@
+<master>
+<slave>
\ No newline at end of file
Index: openacs-4/packages/dotlrn/www/doc/nomenclature.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/doc/nomenclature.adp,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/www/doc/nomenclature.adp	22 Jan 2003 14:23:38 -0000	1.1
@@ -0,0 +1,286 @@
+<master src="master">
+<property name="title">dotLRN Nomenclature</property>
+
+<h1>dotLRN Nomenclature: a dotLRN Primer</h1>
+by <a href=mailto:ben@openforce.net>Ben Adida</a>, part of <a
+href=./>dotLRN Documentation</a>. (last updated: <i>28 February 2002</i>)
+<hr><P>
+
+dotLRN is a <strong>Learning Community Management System</strong>
+which means it helps manage communities of users and the exchange of
+information therein. This document defines the
+<strong>nomenclature</strong> in the dotLRN project, with specific
+examples of how this nomenclature can be used in the context of
+dotLRN's primary use: that of a Course Management System.
+
+<p>
+<h2>1. dotLRN Communities</h2>
+The core concept within dotLRN is the <b>dotLRN User Community</b>.
+
+<h3>Community</h3> 
+
+A community is a group of users that work together and exchange
+various types of information. There may be different types of
+communities, but all have basic properties, such as a community name
+and community ID.
+
+<p>
+
+<h3>Class</h3>
+
+A <b>class</b> is a topic of instruction, such as "Finance 101." A
+class is <b><i>not</i></b> a community (this will become clearer
+soon).
+
+<p>
+
+<h3>Class Instances and Clubs</h3>
+
+Two basic types of communities implemented in core dotLRN are
+<b>Class Instances</b> and <b>Clubs</b>. Class Instances are
+for structured groups of students, while Clubs are for unstructured
+student activities. A Class Instance, as its name indicates, is a
+specific instance of a Class. "Finance 101 - Spring 2002" is an
+instance of "Finance 101." It doesn't make sense for "Finance 101,"
+the topic of instruction, to be itself a community, since Finance 101
+Fall 2000 and Finance 101 Spring 2005 will probably have nothing to do
+with on another apart from teaching approximately the same material.
+
+<p>
+
+<h3>Open, Wait, Closed Communities</h3>
+
+Communities can have one of three <b>Join Policies</b>. A join policy
+defines the process by which a dotLRN User can become a member of the
+community. For now, we will consider only <b>dotLRN Full Access
+Users</b> (see below for more information on other types of dotLRN
+users).
+
+<p>
+
+A  community with <b>open join policy</b> is visible in read-only
+state to non-members. Any full-access user can join the community at
+will, without the intervention of any other user.
+
+<p>
+
+A community with <b>wait join policy</b> is visible in read-only state
+to non-members. A full-access user can apply to join the
+community. The application must be approved by an administrator of the
+community.
+
+<p>
+
+A communty with <b>closed join policy</b> is not visible to
+non-members. Users become members only when explicitly added by the
+community administrator.
+
+<p>
+
+<h3><i>in MIT SloanSpace</i>: Class Instances and Communities</h3>
+
+In MIT SloanSpace, dotLRN Communities are referred to as <b>SloanSpace
+Groups</b>, while dotLRN Clubs are referred to as <b>SloanSpace
+Communities</b>.
+
+<p>
+
+The reason for this potential nomenclature confusion is historical:
+SloanSpace v1.0 used a certain terminology. It would be unacceptable
+to change it for SloanSpace v2.0. Similarly, it would be unacceptable
+to stick to the SloanSpace nomenclature and impose it to all users of
+dotLRN.
+
+<p>
+
+Thus, dotLRN nomenclature, although internally self-consistent, is
+entirely configurable by the user using global parameters.
+
+<h2>2. dotLRN Users</h2>
+
+A <b>dotLRN User</b> is an individual with an email address username and a
+password to the dotLRN system. Each user is uniquely identified by
+email address.
+
+<h3>Access Level: Limited or Full</h3>
+
+dotLRN users can have either <b>Limited Access</b> or <b>Full
+Access</b>.
+
+<p>
+
+A <b>limited-access user</b> is one who has access only to class instances
+and communities she is registered for and has no ability to
+browse any other section of the dotLRN application. This applies even
+to open communities: if a limited-access user is not a member of a
+given open community, she will not be able to browse any page that may
+enable her to become a member.
+
+<p>
+
+A <b>full-access user</b> is one who has access to all browsing
+sections of the dotLRN application. A full-access user can surf around
+and register for open communities, apply to be accepted into wait
+communities, etc... A full-access user also has the ability to store
+user-specific information, like personal files and personal calendar events.
+
+<p>
+
+<h3>Access to Private Information</h3>
+
+Certain users of the system may be <b>dotLRN Guests</b>, meaning that
+they do not belong to the parent organization that runs the dotLRN
+instance. These guests may participate in the community as
+full-fledged members but, for certain legal or privacy reasons, may
+not be allowed to view other users' private information.
+
+Any dotLRN user can be a guest or a non-guest. Full-access members can
+be guests. The only difference between a guest and non-guest is
+whether private user information (email address, address, phone #,
+etc...) can be read by these guests.
+
+<h3>System-Wide Roles</h3>
+
+dotLRN users have system-wide profile information. For example, in the
+context of a Course Management System like MIT SloanSpace, they may be
+<b>Professors</b>, <b>Students</b>, or <b>Administrative Staff</b>.
+These system-wide roles define the user's specific profile in the
+system as a whole, without regards to community-specific roles.
+
+<p>
+
+<h3>Community-Specific Roles</h3>
+
+dotLRN users have specific roles within the communities they belong
+to. These roles are classified in two main categories: <b>dotLRN
+Community Members</b> and <b>dotLRN Community Admins</b>.
+
+<p>
+
+<b>dotLRN Community Members</b> of a given community have normal
+read/write access to a community. They cannot perform administrative
+functions, like create a new forum, add group calendar events, create
+a new survey, etc... However, they can contribute to existing
+discussion forums, view calendar events, and respond to surveys.
+
+<p>
+
+<b>dotLRN Community Admins</b> have all the privileges of normal
+community members <i>plus</i> complete administrative rights over all
+components of the community. dotLRN Community Admins completely
+control a community: they need no further help from any other users to
+add data, applications, or users to their workspace.
+
+
+<h2>3. dotLRN Applets</h2>
+
+A dotLRN community is mostly a container of users and applets. A
+<b>dotLRN Applet</b> (nothing to do with a Java applet) is a small
+application that can be added to the community to enable new
+functionality.
+
+<p>
+
+Examples of existing applets include: Discussion Forums, Surveys,
+FAQs, News, Calendaring. These applets are <b>scoped</b> in order to
+correctly segment communities from one another. Data that belongs to
+one community is not viewable by another: it is as if it doesn't exist
+unless you are in the appropriate community.
+
+<p>
+
+Certain applets are <b>community-centric</b> in that they offer
+functionality that makes sense only in the context of a given
+community. Discussion Forums is one solid example of this: a
+discussion forum must pertain to a given community.
+
+<p>
+
+Other applets are <b>user-centric</b> in that they also manage data
+that is user-related, not linked to any given community. Calendaring
+is one such applet: although there are community events, there are
+also personal events.
+
+<p>
+
+<h2>4. Portals</h2>
+
+The entire dotLRN architecture is based on the <b>New Portal
+Architecture</b>. The design and specifics of this architecture are
+described in another document, but the basic terminology and concepts
+are as follows.
+
+<p>
+
+<h3>Portal Page</h3>
+
+A <b>Portal Page</b> is a single page display of portal boxes. A
+portal page has a <b>Portal Layout</b> that defines how the boxes are
+arranged on the page. Common layout schemes include 2-column,
+3-column, 3-column-with-header. New portal layouts can be implemented
+at will.
+
+<p>
+
+A portal page can be configured so that the portal boxes can be moved
+around the page by someone with appropriate permissions.
+
+<h3>Portal</h3>
+
+A <b>Portal</b> is a set of portal pages that are tied together so
+that a browser may navigate easily between the various portal
+pages. This is particularly useful when portal boxes need to be
+organized by functionality theme.
+
+<h3>Portlet or Portal Datasource</h3>
+
+A <b>Portlet</b> or <b>Portal Datasource</b> is a set of functionality
+that is presented in the form of a portal box. A bboard portlet, for
+example, is functionality that displays discussion forums inside a
+portal box.
+
+<h3>Portal Element</h3>
+
+A <b>Portal Element</b> is a single box on a given portal page. A box
+that display discussion forum information on Jane Doe's personal
+portal page #2 is <b><i>one</i></b> portal element that corresponds to
+the instantiation of portlet within a portal page.
+
+<p>
+
+A portal element can be moved, shaded, or hidden altogether, given the
+appropriate permissions. It can be moved to a different page of the
+same portal. While a portlet can be instantiated multiple times within
+a given portal, a portal element is unique per portal as it represents
+a single instance of the portlet: thus, a portal element can appear on
+only one page of the portal in one location. To appear in more than
+one place, a new instance of the portlet would have to be instantiated.
+
+<h3>Portal Themes</h3>
+
+A portal page can be rendered in a given <b>Portal Theme</b> that
+determines the look-and-feel of each box. The layout is <b>NOT</b>
+determined here, only the specific look-and-feel of portal element
+borders, buttons, and internals.
+
+<h3>Portlet Parameters; Portal Element Parameter Values</h3>
+
+For each portlet, there is a set of <b>Portlet Parameters</b>. For
+example, the calendar portlet has a <tt>calendar_view</tt> parameter
+that indicates whether the portlet should display data in the form of
+a list, day-, week-, or month- view.
+
+<p>
+
+Each Portal Element has <b>Portal Element Parameter Values</b> for
+each parameter of the portlet it instantiates. For example, the
+calendar portal element on Jane Doe's personal portal may have a value
+of "day" for the <tt>calendar_view</tt> parameter.
+
+<p>
+
+<h3>Portal Template</h3>
+
+A portal template is much like any other portal, except that it is
+used as a template for creating other portals.
+
Index: openacs-4/packages/dotlrn/www/doc/permission-api.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/doc/permission-api.adp,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/www/doc/permission-api.adp	22 Jan 2003 14:23:38 -0000	1.1
@@ -0,0 +1,89 @@
+<master src="master">
+<property name="title">dotLRN Roles, Sections, and Permissions</property>
+
+<h2>dotLRN Permission API</h2>
+by <a href=mailto:ben@openforce.net>Ben Adida</a>.
+<hr><P>
+
+The dotLRN access control mechanism will rely on OpenACS's permissions
+system, but will be completely layered. This means the underlying
+permission scheme can change.
+
+<p>
+
+<h3>Relational Segments & Context IDs</h3>
+
+In order to make things much cleaner with respect to permissions, we
+use relational segments and context IDs. The goal of relational
+segments will be to determine groups of users to whom permissions
+are granted. The goal of context IDs will be to create a hierarchy of
+objects so that as new components are added to subcommunities,
+permissions are naturally extended in appropriate ways.
+
+<p>
+
+For this to work, the actual privileges used throughout dotLRN and all
+of its modules must be <b>consistent</b>. Since permissions follow an
+inheritance path, we must make sure everything bootstraps off the
+basic read, write, create, delete, admin privileges.
+
+<p>
+
+To better explain the situation, we want the following to happen:
+<ul>
+<li> Hal is a member of "Intro to Computer Science Spring 2002" group, with relationship
+type <tt>dotlrn_instructor_rel</tt> to that group.
+<li> An FAQ about the Computer Science Program is created for "Intro
+to Computer Science Spring 2002", with <tt>context_id</tt> pointing to
+the course.
+<li> A relational segment "Intro to CS Spring 2002 Instructors" is
+created on the "Intro to CS Spring 2002" group and
+<tt>dotlrn_instructor_rel</tt> relationship type.
+<li> The privilege <tt>faq_admin</tt> exists, inheriting from
+the core OpenACS <tt>admin</tt> privilege.
+<li> A permission is granted: "Intro to CS Spring 2002 Instructors"
+are given the <tt>admin</tt> privilege on the course "Intro to
+CS Spring 2002".
+<li> <b>Thus</b>, automatically, Hal has the right to admin the FAQ,
+because the admin privilege translates to the faq_admin privilege by
+inheritance, Hal is part of the relational segment in question, and
+the FAQ in question has a context_id pointing to the course. It's BEAUTIFUL!
+</ul>
+
+<h3>General Roles API</h3>
+
+These are fairly straight-forward:
+<ul>
+<li> <tt>dotlrn::user_add user_id</tt>
+<li> <tt>dotlrn::user_remove user_id</tt>
+<p>
+<li> <tt>dotlrn::guest_add community_id user_id</tt>
+<li> <tt>dotlrn::guest_remove community_id user_id</tt>
+</ul>
+
+<h3>Access Control API</h3>
+
+<ul>
+<li> <tt>dotlrn::user_can_browse_p ?user_id?</tt>
+<li> <tt>dotlrn::require_user_browse ?user_id?</tt>
+<p>
+<li> <tt>dotlrn::user_can_read_sensitive_data ?user_id?</tt>
+<li> <tt>dotlrn::require_user_read_sensitive_data ?user_id?</tt>
+<p>
+<li> <tt>dotlrn::user_can_read_community_type_p community_type ?user_id?</tt>
+<li> <tt>dotlrn::require_user_read_community_type community_type
+?user_id?</tt>
+<p>
+<li> <tt>dotlrn::user_can_read_community_p community_id ?user_id?</tt>
+<li> <tt>dotlrn::require_user_read_community community_id
+?user_id?</tt>
+<p>
+<li> <tt>dotlrn::user_community_member_p community_id ?user_id?</tt>
+<li> <tt>dotlrn::require_user_community_member community_id
+?user_id?</tt>
+<p>
+<li> <tt>dotlrn::user_can_admin_community_p community_id
+?user_id?</tt>
+<li> <tt>dotlrn::require_user_admin_community community_id ?user_id?</tt>
+
+</ul>
Index: openacs-4/packages/dotlrn/www/doc/permission-overview.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/doc/permission-overview.adp,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/www/doc/permission-overview.adp	22 Jan 2003 14:23:38 -0000	1.1
@@ -0,0 +1,248 @@
+<master src="master">
+<property name="title">dotLRN Roles, Sections, and Permissions</property>
+
+<h2>dotLRN Roles, Sections, and Permissions</h2>
+by <a href=mailto:ben@openforce.net>Ben Adida</a>, part of <a href=./>dotLRN Documentation</a>.
+<hr><P>
+
+dotLRN includes significant components of functionality and an
+architecture for integrating these components. Around these
+components, there must be a coherent and consistent model for roles
+and permissions throughout the system. This document defines the
+necessary roles, application sections, and rules for access in the
+dotLRN application.
+
+<h2>Roles</h2>
+
+Roles in the dotLRN system are considered from a logical
+standpoint. It is perfectly conceivable that an actual user take on
+more than one role. It is also conceivable that a logical role is
+represented by multiple physical underlying roles and permissions.
+<p>
+
+<h3>Unregistered Visitor</h3>
+An unregistered visitor is simply a user who browses the dotLRN
+application without login information. An installation of dotLRN may
+disallow unregistered visitors, if it so chooses.
+
+<h3>Registered dotLRN Guest</h3>
+A registered dotLRN guest is a registered user (first name, last name,
+email, password are entered) who has logged in and is using those
+credentials. This user is enabled only for a particular class or club,
+and does not have access to the generic dotLRN workspace.
+
+<h3>Registered dotLRN User</h3>
+A registered dotLRN user is a registered user how has logged in using
+those credentials. A dotLRN user can browse all available public
+classes and clubs.
+
+<h3>Registered Student of an Instance of a Class</h3>
+A registered student of a class is one who has requested association
+with a particular instance of a class (e.g. Micro-Economics, Spring
+2002 Section A), and who has been approved (usually by a professor, a
+TA, or an administrator). 
+
+<h3>TA of a Class Instance</h3> 
+A TA of an instance of a class is a registered user who serves as a
+Teaching Assistant for the class, having some administrative
+responsibilities. TAs are usually designated by professors or
+administrators of a class's instance.
+
+<h3>Administrator of a Class Instance</h3>
+An administrator of an instance of a class is a registered user who
+serves to perform organizational/administrative duties for the class,
+including registration, schedule and venue arrangements, etc...
+
+<h3>Instructor of a Class Instance</h3>
+An instructor of an instance of a class is a registered user who
+teaches the actual class instance in question. Instructors are often
+professors, but may not be (thus the use of the more functional term
+"Instructor" rather than the status term "Professor").
+
+<h3>Member of a Graduating Year</h3>
+A member of a graduating year is a registered user who is a student of
+a particular graduating year. This grouping may be needed for mass
+mailings, alumni clubs, etc...
+
+<h3>Member of a Community</h3>
+A member of a community is a registered user who has signed up (and
+been approved) to be part of one of the dotLRN communities. A
+community functions much like a class instance, but without the
+association to the teaching of a particular subject.
+
+<h3>Administrator of a Community</h3>
+An administrator of a community is a registered user assigned to
+coordinate a particular community.
+
+
+<h2>Sections of the Application</h2>
+
+The dotLRN Application is composed of a number of sections which
+serve various roles. These sections can be described with a varying
+level of granularity. The following description matches the necessary
+level of granularity for matching permissions and roles.
+
+<h3>Main Public Site</h3>
+
+Every dotLRN site will have a completely public section that describes
+the general purpose of the application. This will be mostly
+information material, with very little interactivity of any kind.
+<p>
+<h4>Permissions</h4>
+<ul>
+<li> All registered dotLRN users can access this section
+<li> Guests or unregistered visitors cannot access this section
+</ul>
+
+
+<h3>Per-Class Main Page</h3>
+
+Each class (e.g. Micro-Economics) will have a section in the dotLRN
+application. This section will describe the goals of the class,
+general information about it, and will remain unrelated to any
+specific instance of the class.
+<p>
+A registered student of an instance of that class will be presented
+with links to the proper instance-specific sections.
+
+<p>
+<h4>Permissions</h4>
+<ul>
+<li> All registered dotLRN users can access this section
+<li> All guests of <b>that</b> class can access this section
+<li> Registered users associated with a class instance of this class
+will see specific links to the proper class instances
+</ul>
+
+
+<h3>Per-Class Admin Page</h3>
+
+Each class will have an administrative section in the dotLRN
+application which will enable users to:
+<ul>
+<li> create new instances of the class
+<li> assign instructors, TAs, and administrators to existing instances
+of classes
+<li> edit standard class information (description blurb, etc...)
+</ul>
+
+<p>
+<h4>Permissions</h4>
+<ul>
+<li> Only dotLRN system administrators can access this section
+</ul>
+
+<h3>Per-Class-Instance Main Page</h3>
+
+Each class instance (e.g. Micro-Economics, Spring 2002 Section A) will
+have a section in the dotLRN application. This section will look very
+different depending on the state of the visitor.
+<p>
+For a <strong>registered student, TA, or Instructor</strong> of the
+class instance, the section will present all available options for the
+particular instance, including discussion forums, file storage, FAQ,
+surveys,etc...
+<p>
+For a <strong>user not registered with this class instance</strong>,
+the section will present general information about the class instance,
+possibly some public files (like a syllabus), and the ability to
+request registration for the class.
+
+<p>
+<h4>Permissions</h4>
+<ul>
+<li> All registered dotLRN users can access this section
+<li> Guests for this class instance can see this section
+<li> Only registered users and guests associated with this class instance can
+access the full functionality
+<li> Certain functionality (like class rosters) are only accessible to
+full users, not to guests
+</ul>
+
+<h3>Per-Class-Instance Admin Page</h3>
+
+Each class instance will have an administrative section which will
+allow for:
+<ul>
+<li> membership management (approval, rejections, etc...)
+<li> access to various subpackage administration (bboard, FAQ, news, etc..)
+<li> general information updates (class instance blurbs)
+</ul>
+
+<p>
+<h4>Permissions</h4>
+<ul>
+<li> Only class instance administrators, TAs, and instructors can
+access this section
+</ul>
+
+<h3>Per-Class-Instance-Package Main Page</h3>
+
+Each package within a class instance defines a section of the dotLRN
+application (e.g. bboards for Micro-Economics, Spring 2002 Section
+A). The functionality for these sections will be specific to the
+subpackages involved.
+
+<p>
+<h4>Permissions</h4>
+<ul>
+<li> Only registered users associated with this class instance can
+access this section
+</ul>
+
+<h3>Per-Class-Instance-Package Admin Page</h3>
+
+By the same token, each package within a class instance defines a
+section of the dotLRN application for administration. The
+functionality is subpackage-specific.
+
+<p>
+<h4>Permissions</h4>
+<ul>
+<li> Only instructors, TAs, and administrators of the class instance
+in question can access this section
+</ul>
+
+
+<h3>Per-Community Main Page</h3>
+
+dotLRN will also support communities, each of which will have its own
+section, much like a class instance. This section will lead to all
+subpackages supported by this community. Users who are members of the
+community will access all functionality, while other users will only
+see basic community information.
+
+<p>
+<h4>Permissions</h4>
+<ul>
+<li> All registered dotLRN users can access this section
+<li> Guests of this specific community can access this section
+<li> Only members of the community at hand can access
+community-specific chunks/links
+</ul>
+
+
+<h3>Per-Community Admin Page</h3>
+
+By the same token, each community will have an admin section that
+allows community administrators to manage community membership,
+general information and subpackages.
+
+<p>
+<h4>Permissions</h4>
+<ul>
+<li> Only community administrators can access this section
+</ul>
+ 
+
+<h3>Per-User Main Page</h3>
+
+Each user will have a main page that centralizes access to all of that
+user's class instances, communities, and all the data within these
+sections. This is a personal view on every piece of user-relevant data.
+
+<p>
+<h4>Permissions</h4>
+<ul>
+<li> Only the user in question can access her main page.
+</ul>
Index: openacs-4/packages/dotlrn/www/doc/permission-portals.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/doc/permission-portals.adp,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/www/doc/permission-portals.adp	22 Jan 2003 14:23:38 -0000	1.1
@@ -0,0 +1,98 @@
+<master src="master">
+<property name="title">dotLRN Portal Permissions</property>
+
+<h2>dotLRN Portal Permissions</h2>
+by <a href=mailto:arjun@openforce.net>Arjun Sanyal</a> and <a href=mailto:ben@openforce.net>Ben Adida</a>, part of <a href=./>dotLRN Documentation</a>.
+<hr><P>
+
+dotLRN presents itself to users by way of portals, i.e. pages that
+aggregate data from disparate sources, shown as "boxes" on the page,
+and allow these sources to be added, removed, and altered in various
+ways. Permissioning issues arise frequently: "Is a student allowed to
+remove the "Class Announcements" element of her portal?" is an example
+of a permissioning issue. 
+<P>
+In general the system of permissions should be simple enough for the
+users to understand, but flexible enought to support all of the
+required features. 
+<P>
+Also, the scope of this document is the permissions system related to
+the portal-based parts of dotLRN, for more documentation on the
+general permission scheme of dotLRN, see <a href=permission-overview.adp>dotLRN Roles, Sections, and Permissions</a>
+
+<h2>Some General Portal Ideas</h2>
+
+Students will have the ability to alter their personal portal, but up
+to the point specified by a class administrator. In the example given
+above, a class administrator could "lock" the "Class Announcements"
+element in student's personal portals so they would not have the power
+to remove it or alter its position. In this case, the administrator
+would have contol over <strong>more than one</strong> portal, i.e. her
+own personal portal and a "default" portal that is "cloned", including
+the "lock", to create each student's portal when she registers for the
+class.
+
+<P>
+
+Non-administrative users cannot grant any permission to anyone. Thus,
+an "Student X lets student Y read her portal" scenarios are avoided.
+
+<h2>Administrative Permissions</h2>
+
+The administrative permissions CREATE and DELETE are only given to
+those users whose roles are such that they would need to create and
+destroy portals for scenarios such as the one given above.  
+
+<h3>CREATE</h3>
+<ul>
+<li>User can create a new portal. Used for creating default class portals
+<li>Granted to: Administrator role <strong>only</strong>, by default
+<li>Implies: DELETE, and READ, EDIT, ADMIN on newly created portals
+</ul>
+
+<h3>DELETE</h3>
+<ul>
+<li>User can destory this portal. Not granted to non-admin users.
+<li>Granted to: Admin users who have CREATE
+</ul>
+
+<h2>Portal-level Permissons for Non-Admin Users</h2>
+
+These permissions are at the level of individual portals for users
+such as students.
+
+<h3>READ</h3>
+<ul>
+<li>Grantee can read (view) this portal. 
+<li>Granted to: A User for her individual portal.
+</ul>
+
+<h3>EDIT</h3>
+<ul>
+<li>Grantee can:
+	<ul>
+	<li>Add "Available" datasources 
+	<li>Remove "unlocked" elements 
+	<li>Move (shuffle) "unlocked" elements
+	<li>Edit user-editable element parameters
+	</ul>
+<li>Granted to: A User for her individual portal. Aggregates the
+permissions that a non-admin user will have, other than "READ". 
+</ul>
+
+<h2>Portal-level Permissons for Admin Users</h2>
+
+Admin users with the CREATE permission will be granted the following
+permisson on the newly created portal.
+
+<h3>ADMIN</h3>
+<ul>
+<li>Grantee can:
+	<ul>
+	<li>Toggle "lock" on a portal element
+	<li>Set this portal page to be "cloned" from
+	<li>Set "non-user" parameters for elements
+	<li>Toggle portal element "availability"
+	</ul> 
+<li>Granted to: A portal created with the CREATE permisson.
+</ul>
Index: openacs-4/packages/dotlrn/www/doc/writing-a-dotlrn-package.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/doc/writing-a-dotlrn-package.adp,v
diff -u
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ openacs-4/packages/dotlrn/www/doc/writing-a-dotlrn-package.adp	22 Jan 2003 14:23:38 -0000	1.1
@@ -0,0 +1,109 @@
+<master src="master">
+<property name="title">Writing a dotLRN Package</property>
+
+<h2>Writing a dotLRN Package</h2>
+by <a href=mailto:ben@openforce.net>Ben Adida</a>.
+<hr><P>
+
+Writing a dotLRN package is a task that is meant to hook generic
+OpenACS 4 functionality into the framework of dotLRN communities. As
+much as possible, one should worry solely about that core
+functionality. As long as this functionality is made scopable as per
+the subsite approach in OpenACS 4, hooking into dotLRN is fairly
+straight-forward.
+
+<p>
+
+<h3>The Structure of a dotLRN Package/Applet</h3>
+
+As far as dotLRN is concerned, a dotLRN package is an
+<strong>applet</strong> (literally a "small application," nothing to
+do with Java applets) that must provide a simple
+API under the <tt>acs-service-contract</tt> mechanism. This API allows
+the dotLRN core to generically dispatch calls to each dotLRN applet
+when certain events happen.
+
+<p>
+
+Thus, a dotLRN applet must be able to respond to the following events:
+<ul>
+<li> the applet is added to a community
+<li> the applet is removed from a community
+<li> a user is added to a community for which the applet in question
+is enabled
+<li> a user is removed from a community for which the applet in
+question is enabled
+</ul>
+
+Additional events may be added in the future to further enhance
+generalized applet functionality.
+
+<p>
+
+Most dotLRN applets will want to offer an interface to their users (although
+it's very possible that some won't). To do so, the dotLRN core will
+use the New Portal Architecture of OpenACS 4. A dotLRN applet can
+simply add itself to the appropriate portal pages by providing an
+<strong>NPA portlet</strong>. <i>Note that the architecture of this
+portlet is dotLRN-independent!</i> The contents of the portlet may
+rely on dotLRN functionality, but the means by which the portlet is
+added to portal pages does not!
+
+<p>
+
+Also, it is highly recommended that functionality be added to dotLRN
+by first thinking of generic OpenACS 4 functionality, and eventually
+hooking it into the dotLRN core. Thus, a dotLRN package will be
+usually composed of <strong>three OpenACS 4 packages</strong>:
+
+<ul>
+<li> a core functionality package (e.g. bboard), independent of dotLRN functionality
+<li> a portlet package (e.g. bboard-portlet), whose interface to NPA
+is independent of dotLRN functionality, but whose content may be
+dotLRN-enhanced.
+<li> a dotLRN applet (e.g. dotlrn-bboard), dependent on dotLRN
+functionality and basically the glue between the dotLRN core and the
+core functionality of this new applet.
+</ul>
+
+<h3>Core Functionality</h3>
+
+There is only one guideline in writing core functionality for a dotLRN
+applet: <strong>make sure the package can be correctly scoped across
+multiple subsites</strong>. This means that any data should be scoped
+correctly to a particular package_id. Take a look at the standard
+bboard package for a clear way to do this.
+
+<h3>Portlet</h3>
+
+The portlet should be created in line with the New Portal
+Architecture. We want to strongly discourage developers from making
+this portlet package dependent on dotLRN functionality: portlets will
+be able to query parameter information from the NPA (such as the
+<tt>package_id</tt>), independently of any dotLRN functionality.
+
+<p>
+
+For more details on creating a portlet package, check the <a
+href=npa/>New Portals Architecture</a>
+
+<h3>dotLRN Applet</h3>
+
+A dotLRN applet is simply the glue that responds to specific
+requests. Let's take the example of the bboard applet to better
+understand what's going on.
+
+<p>
+
+First, we will write the actual procs that we expect to eventually
+hook into the dotLRN system.
+
+<p>
+
+The first proc is called when the bboard applet is added to a community
+
+<pre>
+ad_proc -public dotlrn_bboard::applet_add {community_id} {} {
+	# Instantiate bboard and mount it
+}
+</pre>