Index: openacs-4/packages/acs-core-docs/www/acs-admin.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/acs-admin.html,v diff -u -r1.8.2.3 -r1.8.2.4 --- openacs-4/packages/acs-core-docs/www/acs-admin.html 30 Mar 2003 06:04:04 -0000 1.8.2.3 +++ openacs-4/packages/acs-core-docs/www/acs-admin.html 15 Apr 2003 17:03:01 -0000 1.8.2.4 @@ -1,2 +1,2 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Part II. Administrator's Guide</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="index.html" title="OpenACS Documentation"><link rel="previous" href="release-notes.html" title="OpenACS 4.6.2 Release Notes"><link rel="next" href="software-versions.html" title="Chapter 2. Prerequisite Software"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="release-notes.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="software-versions.html">Next</a></td></tr></table><hr></div><div class="part"><div class="titlepage"><div><h1 class="title"><a name="acs-admin"></a>Administrator's Guide</h1></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt>2. <a href="software-versions.html">Prerequisite Software</a></dt><dd><dl><dt><a href="individual-programs.html">Individual Programs</a></dt></dl></dd><dt>3. <a href="unix-install.html">Installing on Unix/Linux</a></dt><dd><dl><dt><a href="install-overview.html">Overview</a></dt><dt><a href="linux-installation.html">Install Linux and supporting software</a></dt><dt><a href="oracle.html">Install Oracle 8.1.7</a></dt><dt><a href="postgres.html">Install PostgreSQL 7.2.3</a></dt><dt><a href="aolserver.html">Install AOLserver 3.3+ad13</a></dt><dt><a href="openacs.html">Install OpenACS 4.6.2</a></dt><dt><a href="credits.html">Credits</a></dt></dl></dd><dt>4. <a href="win-install.html">Installing on Windows</a></dt><dd><dl><dt><a href="win2k-installation.html">OpenACS Installation Guide for Windows2000</a></dt></dl></dd><dt>5. <a href="mac-install.html">Installing on a Macintosh</a></dt><dd><dl><dt><a href="mac-installation.html">OpenACS Installation Guide for Mac OS X</a></dt></dl></dd><dt>6. <a href="upgrade.html">Upgrading</a></dt><dd><dl><dt><a href="upgrade-detail.html">Support for upgrades.</a></dt><dt><a href="upgrade-4.5-to-4.6.html">Upgrading OpenACS 4.5 to 4.6</a></dt></dl></dd><dt>7. <a href="maintenance.html">Maintenance</a></dt><dd><dl><dt><a href="maintenance-web.html">Hosting Web Sites</a></dt><dt><a href="database-management.html">Database Management</a></dt><dt><a href="backup-recovery.html">Backup and Recovery</a></dt></dl></dd><dt>A. <a href="install-redhat.html">Install Red Hat 8.0</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="release-notes.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="software-versions.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4.6.2 Release Notes </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> Chapter 2. Prerequisite Software</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/acs-admin.html#comments">View comments on this page at openacs.org</a></center></body></html> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part�II.�Administrator's Guide</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="index.html" title="OpenACS Documentation"><link rel="previous" href="release-notes.html" title="OpenACS 4.6.2 Release Notes"><link rel="next" href="software-versions.html" title="Chapter�2.�Prerequisite Software"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="release-notes.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="software-versions.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><h1 class="title"><a name="acs-admin"></a>Administrator's Guide</h1></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt>2. <a href="software-versions.html">Prerequisite Software</a></dt><dd><dl><dt><a href="individual-programs.html">Individual Programs</a></dt></dl></dd><dt>3. <a href="unix-install.html">Installing on Unix/Linux</a></dt><dd><dl><dt><a href="install-overview.html">Overview</a></dt><dt><a href="linux-installation.html">Install Linux and supporting software</a></dt><dt><a href="oracle.html">Install Oracle 8.1.7</a></dt><dt><a href="postgres.html">Install PostgreSQL 7.2.3</a></dt><dt><a href="aolserver.html">Install AOLserver 3.3+ad13</a></dt><dt><a href="openacs.html">Install OpenACS 4.6.2</a></dt><dt><a href="credits.html">Credits</a></dt></dl></dd><dt>4. <a href="win-install.html">Installing on Windows</a></dt><dd><dl><dt><a href="win2k-installation.html">OpenACS Installation Guide for Windows2000</a></dt></dl></dd><dt>5. <a href="mac-install.html">Installing on a Macintosh</a></dt><dt>6. <a href="upgrade.html">Upgrading</a></dt><dd><dl><dt><a href="upgrade-detail.html">Support for upgrades.</a></dt><dt><a href="upgrade-4.5-to-4.6.html">Upgrading OpenACS 4.5 to 4.6</a></dt></dl></dd><dt>7. <a href="maintenance.html">Maintenance</a></dt><dd><dl><dt><a href="database-management.html">Database Management</a></dt><dt><a href="backup-recovery.html">Backup and Recovery</a></dt></dl></dd><dt>A. <a href="install-redhat.html">Install Red Hat 8.0</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="release-notes.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="software-versions.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4.6.2 Release Notes&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right">&nbsp;Chapter�2.�Prerequisite Software</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/acs-admin.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/acs-dev.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/Attic/acs-dev.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/acs-dev.html 30 Mar 2003 20:33:12 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/acs-dev.html 15 Apr 2003 17:03:01 -0000 1.8.2.5 @@ -1,6 +1,6 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Part III. For OpenACS Developers</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="index.html" title="OpenACS Documentation"><link rel="previous" href="install-redhat.html" title="Appendix A. Install Red Hat 8.0"><link rel="next" href="tutorial.html" title="Chapter 8. Development Tutorial"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="install-redhat.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="tutorial.html">Next</a></td></tr></table><hr></div><div class="part"><div class="titlepage"><div><h1 class="title"><a name="acs-dev"></a>For OpenACS Developers</h1></div></div><div class="partintro"><div></div><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part�III.�For OpenACS Developers</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="index.html" title="OpenACS Documentation"><link rel="previous" href="install-redhat.html" title="Appendix�A.�Install Red Hat 8.0"><link rel="next" href="tutorial.html" title="Chapter�8.�Development Tutorial"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="install-redhat.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="tutorial.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><h1 class="title"><a name="acs-dev"></a>For OpenACS Developers</h1></div></div><div class="partintro" lang="en"><div></div><p> This is the place to look if you want to extend OpenACS and build on top of what's already here. Here you can find out about the guts of the system. - </p><div class="toc"><p><b>Table of Contents</b></p><dl><dt>8. <a href="tutorial.html">Development Tutorial</a></dt><dd><dl><dt><a href="tutorial-newpackage.html">Creating a Package</a></dt><dt><a href="tutorial-database.html">Setting Up Database Objects</a></dt><dt><a href="tutorial-pages.html">Creating Web Pages</a></dt><dt><a href="tutorial-debug.html">Debugging and Automated Testing</a></dt><dt><a href="tutorial-advanced.html">Advanced Topics</a></dt></dl></dd><dt>9. <a href="dev-guide.html">Development Reference</a></dt><dd><dl><dt><a href="packages.html">OpenACS 4.6.2 Packages</a></dt><dt><a href="objects.html">OpenACS 4.6.2 Data Models and the Object System</a></dt><dt><a href="request-processor.html">The Request Processor</a></dt><dt><a href="db-api.html">The OpenACS Database Access API</a></dt><dt><a href="templates.html">Using Templates in OpenACS 4.6.2</a></dt><dt><a href="permissions.html">Groups, Context, Permissions</a></dt><dt><a href="subsites.html">Writing OpenACS 4.6.2 Application Pages</a></dt><dt><a href="parties.html">Parties in OpenACS 4.6.2</a></dt><dt><a href="permissions-tediously-explained.html">OpenACS 4.x Permissions Tediously Explained</a></dt><dt><a href="object-identity.html">Object Identity</a></dt><dt><a href="programming-with-aolserver.html">Programming with AOLserver</a></dt></dl></dd><dt>10. <a href="eng-standards.html">Engineering Standards</a></dt><dd><dl><dt><a href="docbook-primer.html">OpenACS Documentation Guide</a></dt><dt><a href="psgml-mode.html">Using PSGML mode in Emacs</a></dt><dt><a href="filename.html">Detailed Design Documentation Template</a></dt><dt><a href="requirements-template.html">System/Application Requirements Template</a></dt><dt><a href="eng-standards-versioning.html">Release Version Numbering</a></dt><dt><a href="eng-standards-constraint-naming.html">Constraint naming standard</a></dt><dt><a href="eng-standards-filenaming.html">ACS File Naming and Formatting Standards</a></dt><dt><a href="eng-standards-plsql.html">PL/SQL Standards</a></dt></dl></dd><dt>11. <a href="kernel-doc.html">Kernel Documentation</a></dt><dd><dl><dt><a href="kernel-overview.html">Overview</a></dt><dt><a href="object-system-requirements.html">OpenACS 4 Object Model Requirements</a></dt><dt><a href="object-system-design.html">OpenACS 4 Object Model Design</a></dt><dt><a href="permissions-requirements.html">OpenACS 4 Permissions Requirements</a></dt><dt><a href="permissions-design.html">OpenACS 4 Permissions Design</a></dt><dt><a href="groups-requirements.html">OpenACS 4 Groups Requirements</a></dt><dt><a href="groups-design.html">OpenACS 4 Groups Design</a></dt><dt><a href="subsites-requirements.html">OpenACS 4 Subsites Requirements</a></dt><dt><a href="subsites-design.html">OpenACS 4 Subsites Design Document</a></dt><dt><a href="apm-requirements.html">OpenACS 4.6.2 Package Manager Requirements</a></dt><dt><a href="apm-design.html">OpenACS 4.6.2 Package Manager Design</a></dt><dt><a href="db-api-detailed.html">Database Access API</a></dt><dt><a href="security-requirements.html">OpenACS 4 Security Requirements</a></dt><dt><a href="security-design.html">OpenACS 4 Security Design</a></dt><dt><a href="security-notes.html">OpenACS 4 Security Notes</a></dt><dt><a href="rp-requirements.html">OpenACS 4 Request Processor Requirements</a></dt><dt><a href="rp-design.html">OpenACS 4 Request Processor Design</a></dt><dt><a href="tcl-doc.html">Documenting Tcl Files: Page Contracts and Libraries</a></dt><dt><a href="bootstrap-acs.html">Bootstrapping OpenACS</a></dt></dl></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="install-redhat.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="tutorial.html">Next</a></td></tr><tr><td width="40%" align="left">Appendix A. Install Red Hat 8.0 </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> Chapter 8. Development Tutorial</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/acs-dev.html#comments">View comments on this page at openacs.org</a></center></body></html> + </p><div class="toc"><p><b>Table of Contents</b></p><dl><dt>8. <a href="tutorial.html">Development Tutorial</a></dt><dd><dl><dt><a href="tutorial-database.html">Setting Up Database Objects</a></dt><dt><a href="tutorial-pages.html">Creating Web Pages</a></dt><dt><a href="tutorial-debug.html">Debugging and Automated Testing</a></dt><dt><a href="tutorial-advanced.html">Advanced Topics</a></dt></dl></dd><dt>9. <a href="dev-guide.html">Development Reference</a></dt><dd><dl><dt><a href="packages.html">OpenACS 4.6.2 Packages</a></dt><dt><a href="objects.html">OpenACS 4.6.2 Data Models and the Object System</a></dt><dt><a href="request-processor.html">The Request Processor</a></dt><dt><a href="db-api.html">The OpenACS Database Access API</a></dt><dt><a href="templates.html">Using Templates in OpenACS 4.6.2</a></dt><dt><a href="permissions.html">Groups, Context, Permissions</a></dt><dt><a href="subsites.html">Writing OpenACS 4.6.2 Application Pages</a></dt><dt><a href="parties.html">Parties in OpenACS 4.6.2</a></dt><dt><a href="permissions-tediously-explained.html">OpenACS 4.x Permissions Tediously Explained</a></dt><dt><a href="object-identity.html">Object Identity</a></dt><dt><a href="programming-with-aolserver.html">Programming with AOLserver</a></dt></dl></dd><dt>10. <a href="eng-standards.html">Engineering Standards</a></dt><dd><dl><dt><a href="docbook-primer.html">OpenACS Documentation Guide</a></dt><dt><a href="psgml-mode.html">Using PSGML mode in Emacs</a></dt><dt><a href="filename.html">Detailed Design Documentation Template</a></dt><dt><a href="requirements-template.html">System/Application Requirements Template</a></dt><dt><a href="eng-standards-versioning.html">Release Version Numbering</a></dt><dt><a href="eng-standards-constraint-naming.html">Constraint naming standard</a></dt><dt><a href="eng-standards-filenaming.html">ACS File Naming and Formatting Standards</a></dt><dt><a href="eng-standards-plsql.html">PL/SQL Standards</a></dt></dl></dd><dt>11. <a href="kernel-doc.html">Kernel Documentation</a></dt><dd><dl><dt><a href="kernel-overview.html">Overview</a></dt><dt><a href="object-system-requirements.html">OpenACS 4 Object Model Requirements</a></dt><dt><a href="object-system-design.html">OpenACS 4 Object Model Design</a></dt><dt><a href="permissions-requirements.html">OpenACS 4 Permissions Requirements</a></dt><dt><a href="permissions-design.html">OpenACS 4 Permissions Design</a></dt><dt><a href="groups-requirements.html">OpenACS 4 Groups Requirements</a></dt><dt><a href="groups-design.html">OpenACS 4 Groups Design</a></dt><dt><a href="subsites-requirements.html">OpenACS 4 Subsites Requirements</a></dt><dt><a href="subsites-design.html">OpenACS 4 Subsites Design Document</a></dt><dt><a href="apm-requirements.html">OpenACS 4.6.2 Package Manager Requirements</a></dt><dt><a href="apm-design.html">OpenACS 4.6.2 Package Manager Design</a></dt><dt><a href="db-api-detailed.html">Database Access API</a></dt><dt><a href="security-requirements.html">OpenACS 4 Security Requirements</a></dt><dt><a href="security-design.html">OpenACS 4 Security Design</a></dt><dt><a href="security-notes.html">OpenACS 4 Security Notes</a></dt><dt><a href="rp-requirements.html">OpenACS 4 Request Processor Requirements</a></dt><dt><a href="rp-design.html">OpenACS 4 Request Processor Design</a></dt><dt><a href="tcl-doc.html">Documenting Tcl Files: Page Contracts and Libraries</a></dt><dt><a href="bootstrap-acs.html">Bootstrapping OpenACS</a></dt></dl></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="install-redhat.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="tutorial.html">Next</a></td></tr><tr><td width="40%" align="left">Appendix�A.�Install Red Hat 8.0&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right">&nbsp;Chapter�8.�Development Tutorial</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/acs-dev.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/aolserver.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/aolserver.html,v diff -u -r1.8.2.5 -r1.8.2.6 --- openacs-4/packages/acs-core-docs/www/aolserver.html 7 Apr 2003 16:59:25 -0000 1.8.2.5 +++ openacs-4/packages/acs-core-docs/www/aolserver.html 15 Apr 2003 17:03:01 -0000 1.8.2.6 @@ -1,5 +1,5 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Install AOLserver 3.3+ad13</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="unix-install.html" title="Chapter 3. Installing on Unix/Linux"><link rel="previous" href="postgres.html" title="Install PostgreSQL 7.2.3"><link rel="next" href="openacs.html" title="Install OpenACS 4.6.2"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="postgres.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Installing on Unix/Linux</th><td width="20%" align="right"> <a accesskey="n" href="openacs.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="aolserver"></a>Install AOLserver 3.3+ad13</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Install AOLserver 3.3+ad13</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="unix-install.html" title="Chapter�3.�Installing on Unix/Linux"><link rel="previous" href="postgres.html" title="Install PostgreSQL 7.2.3"><link rel="next" href="openacs.html" title="Install OpenACS 4.6.2"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="postgres.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�3.�Installing on Unix/Linux</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="openacs.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="aolserver"></a>Install AOLserver 3.3+ad13</h2></div></div><div class="authorblurb"><p> by <a href="mailto:vinod@kurup.com" target="_top">Vinod Kurup</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. @@ -291,4 +291,4 @@ cd analog-5.31 make cd .. -mv analog-5.31 /usr/share/</pre></pre></li></ol></div><p><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="postgres.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="openacs.html">Next</a></td></tr><tr><td width="40%" align="left">Install PostgreSQL 7.2.3 </td><td width="20%" align="center"><a accesskey="u" href="unix-install.html">Up</a></td><td width="40%" align="right"> Install OpenACS 4.6.2</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/aolserver.html#comments">View comments on this page at openacs.org</a></center></body></html> +mv analog-5.31 /usr/share/</pre></pre></li></ol></div><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="postgres.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="openacs.html">Next</a></td></tr><tr><td width="40%" align="left">Install PostgreSQL 7.2.3&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="unix-install.html">Up</a></td><td width="40%" align="right">&nbsp;Install OpenACS 4.6.2</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/aolserver.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/apm-design.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/apm-design.html,v diff -u -r1.6.2.4 -r1.6.2.5 --- openacs-4/packages/acs-core-docs/www/apm-design.html 7 Apr 2003 16:59:25 -0000 1.6.2.4 +++ openacs-4/packages/acs-core-docs/www/apm-design.html 15 Apr 2003 17:03:01 -0000 1.6.2.5 @@ -1,31 +1,31 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS 4.6.2 Package Manager Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="previous" href="apm-requirements.html" title="OpenACS 4.6.2 Package Manager Requirements"><link rel="next" href="db-api-detailed.html" title="Database Access API"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="apm-requirements.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Kernel Documentation</th><td width="20%" align="right"> <a accesskey="n" href="db-api-detailed.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="apm-design"></a>OpenACS 4.6.2 Package Manager Design</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS 4.6.2 Package Manager Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="previous" href="apm-requirements.html" title="OpenACS 4.6.2 Package Manager Requirements"><link rel="next" href="db-api-detailed.html" title="Database Access API"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="apm-requirements.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�11.�Kernel Documentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="db-api-detailed.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="apm-design"></a>OpenACS 4.6.2 Package Manager Design</h2></div></div><div class="authorblurb"><p> by <a href="mailto:bquinn@arsdigita.com" target="_top">Bryan Quinn</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-design-essentials"></a>Essentials</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="/acs-admin/apm" target="_top">OpenACS Administrator directory</a></p></li><li><p><a href="apm-requirements.html">OpenACS 4.6.2 Package Manager Requirements</a></p></li><li><p><a href="packages.html">Packages</a></p></li><li><p><a href="images/apm.pdf" target="_top">ER diagram</a></p></li><li><p>Tcl API </p><div class="itemizedlist"><ul type="round"><li><p><a href="/api-doc/procs-file-view?path=packages%2facs%2dkernel%2ftcl%2fapm%2dprocs%2etcl" target="_top"> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-design-essentials"></a>Essentials</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="/acs-admin/apm" target="_top">OpenACS Administrator directory</a></p></li><li><p><a href="apm-requirements.html">OpenACS 4.6.2 Package Manager Requirements</a></p></li><li><p><a href="packages.html">Packages</a></p></li><li><p><a href="images/apm.pdf" target="_top">ER diagram</a></p></li><li><p>Tcl API </p><div class="itemizedlist"><ul type="circle"><li><p><a href="/api-doc/procs-file-view?path=packages%2facs%2dkernel%2ftcl%2fapm%2dprocs%2etcl" target="_top"> apm-procs.tcl</a></p></li><li><p><a href="/api-doc/procs-file-view?path=packages%2facs%2dkernel%2ftcl%2fapm%2dinstall%2dprocs%2etcl" target="_top"> apm-install-procs.tcl</a> (Supports installation of packages)</p></li><li><p><a href="/api-doc/procs-file-view?path=packages%2facs%2dkernel%2ftcl%2f20%2dapm%2dload%2dprocs%2etcl" target="_top"> 20-apm-load-procs.tcl</a> (Bootstraps APM for server startup)</p></li><li><p><a href="/api-doc/procs-file-view?path=packages%2facs%2dkernel%2ftcl%2fapm%2dadmin%2dprocs%2etcl" target="_top"> -apm-admin-procs.tcl</a> (Supports APM UI)</p></li></ul></div></li><li><p>PL/SQL file </p><div class="itemizedlist"><ul type="round"><li><p><a href="/doc/sql/display-sql?url=apm-create.sql&package_key=acs-kernel" target="_top">apm-create.sql</a></p></li></ul></div></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-design-intro"></a>Introduction</h3></div></div><p> -In general terms, a <span class="strong"><em>package</em></span> is a unit of software that +apm-admin-procs.tcl</a> (Supports APM UI)</p></li></ul></div></li><li><p>PL/SQL file </p><div class="itemizedlist"><ul type="circle"><li><p><a href="/doc/sql/display-sql?url=apm-create.sql&package_key=acs-kernel" target="_top">apm-create.sql</a></p></li></ul></div></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-design-intro"></a>Introduction</h3></div></div><p> +In general terms, a <span class="strong">package</span> is a unit of software that serves a single well-defined purpose. That purpose may be to provide a service directly to one or more classes of end-user, (e.g., discussion forums and file storage for community members, user profiling tools for the site publisher), or it may be to act as a building block for other packages (e.g., an application programming interface (API) for storing and querying access control rules, or an API for scheduling email alerts). Thus, packages fall into one of two categories: -</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em>OpenACS Applications:</em></span> a "program or group of programs +</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong">OpenACS Applications:</span> a "program or group of programs designed for end users" (the <a href="http://www.pcwebopaedia.com/TERM/a/application.html" target="_top">Webopedia definition</a>); also known as <span class="emphasis"><em>modules</em></span>, for historical reasons. Examples of applications include <a href="/doc/bboard" target="_top">Bboard</a> and <a href="/doc/news" target="_top">News</a>. -</p></li><li><p><span class="strong"><em>OpenACS Services:</em></span> the aforementioned building blocks. +</p></li><li><p><span class="strong">OpenACS Services:</span> the aforementioned building blocks. Examples of services include the <a href="/doc/acs-content-repository" target="_top">OpenACS Content Repository</a>, the <a href="/doc/acs-templating" target="_top">OpenACS Templating -System</a>, and the <a href="kernel-doc.html" title="Chapter 11. Kernel Documentation">OpenACS Kernel</a>, which includes +System</a>, and the <a href="kernel-doc.html" title="Chapter�11.�Kernel Documentation">OpenACS Kernel</a>, which includes APM.</p></li></ul></div><p>An installation of the OpenACS includes the OpenACS Kernel, some services that extend the kernel's functionality, and some applications intended for end-users. Packages function as individual pieces of <a href="subsites-design.html" title="OpenACS 4 Subsites Design Document">subsites</a>. A subsite can contain multiple @@ -44,7 +44,7 @@ installation through APM is another potential package instance that can become part of Jane's View Camera subsite.</p><p>The APM provides an architecture for packaging software, making instances of that software available to subsites, specifying configuration parameters -for each instance, and managing the creation and release of new packages.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-design-hist-considerations"></a>Historical Considerations</h3></div></div><p> +for each instance, and managing the creation and release of new packages.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-design-hist-considerations"></a>Historical Considerations</h3></div></div><p> Prior to ACS 3.3, all packages were lumped together into one monolithic distribution without explicit boundaries; the only way to ascertain what comprised a given package was to look at the top of the corresponding @@ -89,21 +89,21 @@ packages for other ACS users to download and install.</p><p>For a simple illustration of the difference between ACS without APM (pre-3.3) and ACS with APM (3.3 and beyond), consider a hypothetical ACS installation that uses only two of the thirty-odd modules available circa ACS -3.2 (say, bboard and e-commerce):</p><div class="mediaobject"><img src="images/acs-without-apm-vs-with-apm.png" align="center" longdesc="ld-id2893849.html"><div class="longdesc-link" align="right"><br clear="all"><span style="font-size: 8pt;">[<a href="ld-id2893849.html" target="longdesc">D</a>]</span></div></div><p>APM itself is part of a package, the <span class="strong"><em>OpenACS Kernel</em></span>, an OpenACS -service that is the only mandatory component of an OpenACS installation.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-design-competitors"></a>Competitive Analysis</h3></div></div><p>The OpenACS is a platform for web-based application software, and any software +3.2 (say, bboard and e-commerce):</p><div class="mediaobject"><img src="images/acs-without-apm-vs-with-apm.png" align="center" longdesc="ld-id2993293.html"><div class="longdesc-link" align="right"><br clear="all"><span class="longdesc-link">[<a href="ld-id2993293.html" target="longdesc">D</a>]</span></div></div><p>APM itself is part of a package, the <span class="strong">OpenACS Kernel</span>, an OpenACS +service that is the only mandatory component of an OpenACS installation.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-design-competitors"></a>Competitive Analysis</h3></div></div><p>The OpenACS is a platform for web-based application software, and any software platform has the potential to develop problems like those described above. Fortunately, there are many precedents for systematic solutions, including:</p><div class="itemizedlist"><ul type="disc"><li><p><a href="http://www.debian.org/" target="_top">Debian GNU/Linux</a> and the <a href="http://www.debian.org/doc/packaging-manuals/packaging.html/" target="_top">Debian Packaging manual</a></p></li><li><p><a href="http://www.freebsd.org/" target="_top">FreeBSD</a> has <a href="http://www.freebsd.org/handbook/ports.html" target="_top">the Ports collection</a></p></li><li><p><a href="http://www.redhat.com/" target="_top">Red Hat Linux</a> has <a href="http://rpm.redhat.com/" target="_top">the Red Hat Package Manager (RPM)</a></p></li></ul></div><p>Borrowing from all of the above, OpenACS 3.3 introduces its own package -management system, the OpenACS Package Manager (APM), which consists of:</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em>a standard format for APM packages</em></span> (also called -"OpenACS packages"), including: </p><div class="itemizedlist"><ul type="round"><li><p>version numbering, independent of any other package and the OpenACS as a -whole</p></li><li><p>specification of the package interface</p></li><li><p>specification of dependencies on other packages (if any)</p></li><li><p>attribution (who wrote it) and ownership (who maintains it)</p></li></ul></div></li><li><p><span class="strong"><em>web-based tools for package management:</em></span> </p><div class="itemizedlist"><ul type="round"><li><p>obtaining packages from a remote distribution point</p></li><li><p>installing packages, if and only if: </p><div class="orderedlist"><ol type="1"><li><p>all prerequisite packages are installed</p></li><li><p>no conflicts will be created by the installation</p></li></ol></div></li><li><p>configuring packages (obsoleting the monolithic OpenACS configuration -file)</p></li><li><p>upgrading packages, without clobbering local modifications</p></li><li><p>uninstalling unwanted packages</p></li></ul></div></li><li><p><span class="strong"><em>a registry of installed packages</em></span>, database-backed and +management system, the OpenACS Package Manager (APM), which consists of:</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong">a standard format for APM packages</span> (also called +"OpenACS packages"), including: </p><div class="itemizedlist"><ul type="circle"><li><p>version numbering, independent of any other package and the OpenACS as a +whole</p></li><li><p>specification of the package interface</p></li><li><p>specification of dependencies on other packages (if any)</p></li><li><p>attribution (who wrote it) and ownership (who maintains it)</p></li></ul></div></li><li><p><span class="strong">web-based tools for package management:</span> </p><div class="itemizedlist"><ul type="circle"><li><p>obtaining packages from a remote distribution point</p></li><li><p>installing packages, if and only if: </p><div class="orderedlist"><ol type="1"><li><p>all prerequisite packages are installed</p></li><li><p>no conflicts will be created by the installation</p></li></ol></div></li><li><p>configuring packages (obsoleting the monolithic OpenACS configuration +file)</p></li><li><p>upgrading packages, without clobbering local modifications</p></li><li><p>uninstalling unwanted packages</p></li></ul></div></li><li><p><span class="strong">a registry of installed packages</span>, database-backed and integrated with filesystem-based version control -</p></li><li><p><span class="strong"><em>web-based tools for package development:</em></span> </p><div class="itemizedlist"><ul type="round"><li><p>creating new packages locally</p></li><li><p>releasing new versions of locally-created packages</p></li></ul></div></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-design-design-tradeoffs"></a>Design Tradeoffs</h3></div></div><p> +</p></li><li><p><span class="strong">web-based tools for package development:</span> </p><div class="itemizedlist"><ul type="circle"><li><p>creating new packages locally</p></li><li><p>releasing new versions of locally-created packages</p></li></ul></div></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-design-design-tradeoffs"></a>Design Tradeoffs</h3></div></div><p> The design chosen for APM was meant to satisfy the following constraints: </p><div class="itemizedlist"><ul type="disc"><li><p>The process of authoring a package must be as simple as possible.</p></li><li><p>Strict conventions must be established that provide a set of canonical locations and names for files and patterns, for OpenACS application @@ -122,9 +122,9 @@ documentation walks the developer through each of these steps. Moreover, from following these steps, the package can be subsite specific, available to subsites across the system, and be available for distribution to other OpenACS -installations without doing a monolithic upgrade or reinstall.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-design-api"></a>API</h3></div></div><p>The APM is composed of systems for accomplishing a set of package-related +installations without doing a monolithic upgrade or reinstall.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-design-api"></a>API</h3></div></div><p>The APM is composed of systems for accomplishing a set of package-related tasks. Each of these tasks comprise a feature area that has an API, data -model, and a UI:</p><div class="itemizedlist"><ul type="disc"><li><p>Authoring a Package</p></li><li><p>Maintaining Multiple Versions of a Package</p></li><li><p>Creating Instances of the Package</p></li><li><p>Specifying Configuration Parameters for each Instance</p></li></ul></div><p><span class="strong"><em>Authoring a Package</em></span></p><p>Full instructions on how to prepare an OpenACS package are available in <a href="packages.html">Packages</a>. The API here can be invoked manually by a package's data model +model, and a UI:</p><div class="itemizedlist"><ul type="disc"><li><p>Authoring a Package</p></li><li><p>Maintaining Multiple Versions of a Package</p></li><li><p>Creating Instances of the Package</p></li><li><p>Specifying Configuration Parameters for each Instance</p></li></ul></div><p><span class="strong">Authoring a Package</span></p><p>Full instructions on how to prepare an OpenACS package are available in <a href="packages.html">Packages</a>. The API here can be invoked manually by a package's data model creation script, but need not to be used. This API is part of the <a href="/api-doc/plsql-subprogram-one?type=PACKAGE&name=APM" target="_top">APM PL/SQL package</a>.</p><pre class="programlisting"> @@ -165,7 +165,7 @@ package_key in apm_package_types.package_key%TYPE ) return integer; -</pre><p><span class="strong"><em>Maintaining Multiple Versions of a Package</em></span></p><p>While the package authoring API provides a means for registering a +</pre><p><span class="strong">Maintaining Multiple Versions of a Package</span></p><p>While the package authoring API provides a means for registering a package, some information about a package is version dependent. For example, between versions, the owner of a package, its vendor, its URI, and its dependency information may change. The API for package versions allows this @@ -202,8 +202,8 @@ version_number := ^[0-9]+((\.[0-9]+)+((d|a|b|)[0-9]?)?)$ -</pre><p>So the following is a valid progression for version numbers:</p><blockquote class="blockquote"><p><tt>0.9d, 0.9d1, 0.9a1, 0.9b1, 0.9b2, 0.9, 1.0, 1.0.1, 1.1b1, -1.1</tt></p></blockquote><p>To delete a given version of a package, use the +</pre><p>So the following is a valid progression for version numbers:</p><div class="blockquote"><blockquote class="blockquote"><p><tt>0.9d, 0.9d1, 0.9a1, 0.9b1, 0.9b2, 0.9, 1.0, 1.0.1, 1.1b1, +1.1</tt></p></blockquote></div><p>To delete a given version of a package, use the <tt>apm_package_version.delete</tt> procedure:</p><pre class="programlisting"> procedure delete ( @@ -245,7 +245,7 @@ ); </pre><p>Files associated with a version can be added and removed. The path is -relative to the <span class="strong"><em>package-root</em></span> which is +relative to the <span class="strong">package-root</span> which is <tt>acs-server-root/packages/package-key</tt>.</p><pre class="programlisting"> -- Add a file to the indicated version. function add_file( @@ -327,7 +327,7 @@ version_name_two in apm_package_versions.version_name%TYPE ) return integer; -</pre><p><span class="strong"><em>Creating Instances of a Package</em></span></p><p>Once a package is registered in the system, it is possible to create +</pre><p><span class="strong">Creating Instances of a Package</span></p><p>Once a package is registered in the system, it is possible to create instances of it. Each instance can maintain its own content and parameters.</p><pre class="programlisting"> @@ -382,7 +382,7 @@ show errors -</pre><p><span class="strong"><em>Specifying Configuration Parameters for each Instance</em></span></p><p>A parameter is a setting that can be changed on a package instance basis. +</pre><p><span class="strong">Specifying Configuration Parameters for each Instance</span></p><p>A parameter is a setting that can be changed on a package instance basis. Parameters are registered on each <tt>package_key</tt>, and the values are associated with each instance. Parameters can have default values and can be of type 'string' or 'number.' There is support with this @@ -464,7 +464,7 @@ attr_value in apm_parameter_values.attr_value%TYPE ); -</pre></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-design-data-model"></a>Data Model Discussion</h3></div></div><p>The central piece of the data model is the <tt>apm_package_types</tt> +</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-design-data-model"></a>Data Model Discussion</h3></div></div><p>The central piece of the data model is the <tt>apm_package_types</tt> table where each package is registered. When a new application or service is installed on an OpenACS instance, a corresponding row in this table is inserted with information about the type of package, e.g. if the <a href="/doc/bboard" target="_top">bboard package</a> is installed on your OpenACS server, a row @@ -505,24 +505,24 @@ </p></li><li><p><tt>apm_file_info</tt> - Provides a public interface for querying file information.</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-design-ui"></a>User Interface</h3></div></div><p>The <a href="/acs-admin/apm" target="_top">APM's user interface</a> is part of the + Provides a public interface for querying file information.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-design-ui"></a>User Interface</h3></div></div><p>The <a href="/acs-admin/apm" target="_top">APM's user interface</a> is part of the <a href="/acs-admin" target="_top">OpenACS Administration Service</a>. The UI is the primary point of contact with APM by developers and administrators. It is part of OpenACS Administration, because only the site-wide administrator should be able to access it. Thus in order to develop a package, the developer must be granted -site-wide administration.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-design-config"></a>Configuration/Parameters</h3></div></div><p>APM has two parameters for configuring how it interacts with the UNIX +site-wide administration.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-design-config"></a>Configuration/Parameters</h3></div></div><p>APM has two parameters for configuring how it interacts with the UNIX filesystem, accessible via the <a href="/admin/site-map/" target="_top">Site Map admin</a> page. These parameters need not be changed under most circumstances, but may -need to be tweaked for Windows compatibility.</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em>GzipExecutableDirectory</em></span> +need to be tweaked for Windows compatibility.</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong">GzipExecutableDirectory</span> This directory points to where the <tt>gunzip</tt> program can be found for uncompressing <tt>gzip</tt> archives. This is needed for the installation of <tt>.apm</tt> files which are simply <tt>gzip</tt>ed tarballs. Default is <tt>/usr/local/bin</tt> -</p></li><li><p><span class="strong"><em>InfoFilePermissionsMode</em></span> +</p></li><li><p><span class="strong">InfoFilePermissionsMode</span> This sets the default UNIX permissions used when creating files using the -APM. Default is 775.</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-design-future"></a>Future Improvements/Areas of Likely Change</h3></div></div><p>APM has been in production since OpenACS 3.3, and as of version 4.0 offers a +APM. Default is 775.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-design-future"></a>Future Improvements/Areas of Likely Change</h3></div></div><p>APM has been in production since OpenACS 3.3, and as of version 4.0 offers a stable set of features. One major feature planned is integration with the OpenACS Package Repository for automatic dependency satisfaction. When a user tries to install a package that depends on other packages, the APM will contact the @@ -540,6 +540,6 @@ repositories worldwide.</p><p>Another anticipated change is to split the APM UI into separate systems for authoring, maintaining, and installing packages. The current UI presents all of this functionality in one interface and it can be confusing from a -usability perspective.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-design-authors"></a>Authors</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p>System creator: Bryan Quinn, Jon Salz, Michael Yoon, Lars Pind, Todd +usability perspective.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-design-authors"></a>Authors</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p>System creator: Bryan Quinn, Jon Salz, Michael Yoon, Lars Pind, Todd Nightingale.</p></li><li><p>System owner: Bryan Quinn</p></li><li><p>Documentation author: Bryan Quinn, building from earlier versions by Jon -Salz, Michael Yoon, and Lars Pind.</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-design-rev-history"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong"><em>Document Revision #</em></span></td><td><span class="strong"><em>Action Taken, Notes</em></span></td><td><span class="strong"><em>When?</em></span></td><td><span class="strong"><em>By Whom?</em></span></td></tr><tr><td>0.1</td><td>Creation</td><td>9/25/2000</td><td>Bryan Quinn</td></tr><tr><td>0.8</td><td>Ready for QA</td><td>9/29/2000</td><td>Bryan Quinn</td></tr><tr><td>0.9</td><td>Edited for ACS 4 Beta release</td><td>10/02/2000</td><td>Kai Wu</td></tr><tr><td>1.0</td><td>Edited for OpenACS 4.6.2 Beta release</td><td>03/02/2002</td><td>Roberto Mello</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="apm-requirements.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="db-api-detailed.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4.6.2 Package Manager Requirements </td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right"> Database Access API</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/apm-design.html#comments">View comments on this page at openacs.org</a></center></body></html> +Salz, Michael Yoon, and Lars Pind.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-design-rev-history"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong">Document Revision #</span></td><td><span class="strong">Action Taken, Notes</span></td><td><span class="strong">When?</span></td><td><span class="strong">By Whom?</span></td></tr><tr><td>0.1</td><td>Creation</td><td>9/25/2000</td><td>Bryan Quinn</td></tr><tr><td>0.8</td><td>Ready for QA</td><td>9/29/2000</td><td>Bryan Quinn</td></tr><tr><td>0.9</td><td>Edited for ACS 4 Beta release</td><td>10/02/2000</td><td>Kai Wu</td></tr><tr><td>1.0</td><td>Edited for OpenACS 4.6.2 Beta release</td><td>03/02/2002</td><td>Roberto Mello</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="apm-requirements.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="db-api-detailed.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4.6.2 Package Manager Requirements&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right">&nbsp;Database Access API</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/apm-design.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/apm-requirements.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/apm-requirements.html,v diff -u -r1.6.2.4 -r1.6.2.5 --- openacs-4/packages/acs-core-docs/www/apm-requirements.html 7 Apr 2003 16:59:25 -0000 1.6.2.4 +++ openacs-4/packages/acs-core-docs/www/apm-requirements.html 15 Apr 2003 17:03:01 -0000 1.6.2.5 @@ -1,19 +1,19 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS 4.6.2 Package Manager Requirements</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="previous" href="subsites-design.html" title="OpenACS 4 Subsites Design Document"><link rel="next" href="apm-design.html" title="OpenACS 4.6.2 Package Manager Design"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="subsites-design.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Kernel Documentation</th><td width="20%" align="right"> <a accesskey="n" href="apm-design.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="apm-requirements"></a>OpenACS 4.6.2 Package Manager Requirements</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS 4.6.2 Package Manager Requirements</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="previous" href="subsites-design.html" title="OpenACS 4 Subsites Design Document"><link rel="next" href="apm-design.html" title="OpenACS 4.6.2 Package Manager Design"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="subsites-design.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�11.�Kernel Documentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="apm-design.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="apm-requirements"></a>OpenACS 4.6.2 Package Manager Requirements</h2></div></div><div class="authorblurb"><p> by <a href="mailto:bquinn@arsdigita.com" target="_top">Bryan Quinn</a> and <a href="mailto:tnight@arsdigita.com" target="_top">Todd Nightingale</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-intro"></a>Introduction</h3></div></div><p>The following is a requirements document for the OpenACS Package Manager + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-intro"></a>Introduction</h3></div></div><p>The following is a requirements document for the OpenACS Package Manager (APM), version 4.0 (APM4). APM4 offers a superset of APM v3.3 functionality with the following specific enhancements:</p><div class="itemizedlist"><ul type="disc"><li><p>A public procedural API. (v 3.3 only has web-based UI)</p></li><li><p>Support for dependency checking.</p></li><li><p>Support for compound packages (to support installation chaining).</p></li><li><p>Support for on-line parameter setting.</p></li><li><p>Support for sub-site level configuration (requires revised ad_parameter and /admin pages at sub-site level; deprecation of site-wide parameter file).</p></li></ul></div><p>To differentiate these new requirements from the requirements of version 3.3, all requirements new in v4 are prefaced with the number -<span class="strong"><em>4</em></span>.</p><p>We gratefully acknowledge the authors of APM 3 for their original design +<span class="strong">4</span>.</p><p>We gratefully acknowledge the authors of APM 3 for their original design documentation which suggested these features, as well as the influence of the design and open-source implementation of the Red Hat Package manager, the Debian packaging system, and PERL's CPAN in the development of the ideas -behind this document.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-vision"></a>Vision Statement</h3></div></div><p>A typical website will tend to offer its users a number of web-based +behind this document.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-vision"></a>Vision Statement</h3></div></div><p>A typical website will tend to offer its users a number of web-based services or applications, e.g. a bulletin board, calendaring, classified ads, etc. A website may also have underlying subsystems, such as a permissions system, content management system, etc. For such applications and subsystem @@ -27,38 +27,38 @@ OpenACS sites.</p><p>In general terms, a package is a unit of software that serves a single well-defined purpose. The OpenACS Package Manager (APM) provides a mechanism for packaging, installing, and configuring OpenACS software in a consistent, -user-friendly, and subsite-aware manner.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-system-overview"></a>System Overview</h3></div></div><p> +user-friendly, and subsite-aware manner.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-system-overview"></a>System Overview</h3></div></div><p> The OpenACS Package Manager (APM) consists of: -</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em>A standard format for APM packages</em></span> including: </p><div class="itemizedlist"><ul type="round"><li><p>Version numbering, independent of any other package and the OpenACS as a -whole</p></li><li><p>Specification of the package interface</p></li><li><p>Specification of dependencies on other packages (if any)</p></li><li><p>Attribution (who wrote it) and ownership (who maintains it)</p></li></ul></div></li><li><p><span class="strong"><em>Web-based tools for package management:</em></span> </p><div class="itemizedlist"><ul type="round"><li><p>Obtaining packages from a remote distribution point</p></li><li><p>Installing packages, if and only if: </p><div class="orderedlist"><ol type="1"><li><p>All prerequisite packages are installed</p></li><li><p>No conflicts will be created by the installation</p></li></ol></div></li><li><p>Configuring packages (obsoleting the monolithic OpenACS configuration -file)</p></li><li><p>Upgrading packages, without clobbering local modifications</p></li><li><p>Uninstalling unwanted packages</p></li></ul></div></li><li><p><span class="strong"><em>A registry of installed packages</em></span>, database-backed and +</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong">A standard format for APM packages</span> including: </p><div class="itemizedlist"><ul type="circle"><li><p>Version numbering, independent of any other package and the OpenACS as a +whole</p></li><li><p>Specification of the package interface</p></li><li><p>Specification of dependencies on other packages (if any)</p></li><li><p>Attribution (who wrote it) and ownership (who maintains it)</p></li></ul></div></li><li><p><span class="strong">Web-based tools for package management:</span> </p><div class="itemizedlist"><ul type="circle"><li><p>Obtaining packages from a remote distribution point</p></li><li><p>Installing packages, if and only if: </p><div class="orderedlist"><ol type="1"><li><p>All prerequisite packages are installed</p></li><li><p>No conflicts will be created by the installation</p></li></ol></div></li><li><p>Configuring packages (obsoleting the monolithic OpenACS configuration +file)</p></li><li><p>Upgrading packages, without clobbering local modifications</p></li><li><p>Uninstalling unwanted packages</p></li></ul></div></li><li><p><span class="strong">A registry of installed packages</span>, database-backed and integrated with file system-based version control -</p></li><li><p><span class="strong"><em>Web-based tools for package development:</em></span> </p><div class="itemizedlist"><ul type="round"><li><p>Creating new packages locally</p></li><li><p>Releasing new versions of locally-created packages</p></li><li><p>Uploading packages to a global package repository on the web</p></li><li><p>Use of these tools should be safe, i.e. installing or removing a package -should never break an OpenACS installation</p></li></ul></div></li><li><p><span class="strong"><em>Web-based tools for package configuration:</em></span> </p><div class="itemizedlist"><ul type="round"><li><p>The ability to change package parameter values on-line through a simple +</p></li><li><p><span class="strong">Web-based tools for package development:</span> </p><div class="itemizedlist"><ul type="circle"><li><p>Creating new packages locally</p></li><li><p>Releasing new versions of locally-created packages</p></li><li><p>Uploading packages to a global package repository on the web</p></li><li><p>Use of these tools should be safe, i.e. installing or removing a package +should never break an OpenACS installation</p></li></ul></div></li><li><p><span class="strong">Web-based tools for package configuration:</span> </p><div class="itemizedlist"><ul type="circle"><li><p>The ability to change package parameter values on-line through a simple web interface.</p></li><li><p>A new ad_parameter which does not require a monolithic site-wide parameter's file or server restarts for changes to take effect.</p></li><li><p>The ability to manage multiple package instances at the sub-site -level.</p></li></ul></div></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-use-cases"></a>Use-cases and User-scenarios</h3></div></div><p> +level.</p></li></ul></div></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-use-cases"></a>Use-cases and User-scenarios</h3></div></div><p> The APM is intended for the following classes of users, which may or may not -overlap: </p><div class="orderedlist"><ol type="1"><li><p><span class="strong"><em>Developers</em></span> (referred to as 'the developer') use +overlap: </p><div class="orderedlist"><ol type="1"><li><p><span class="strong">Developers</span> (referred to as 'the developer') use the APM to create a software package for distribution and use the procedural -API for direct control of the APM system.</p></li><li><p><span class="strong"><em>Site-wide administrators</em></span> (referred to as 'the +API for direct control of the APM system.</p></li><li><p><span class="strong">Site-wide administrators</span> (referred to as 'the administrator') use the APM to install packages for their OpenACS instance, -and optionally make them available to sub-sites.</p></li><li><p><span class="strong"><em>Sub-site administrators</em></span> (referred to as 'the +and optionally make them available to sub-sites.</p></li><li><p><span class="strong">Sub-site administrators</span> (referred to as 'the sub-admin') use an administration interface to configure and enable -packages for their sub-site.</p></li></ol></div><p><span class="strong"><em>Initial Package Development</em></span></p><p><span class="strong"><em>David Developer</em></span> writes a piece of software used to do +packages for their sub-site.</p></li></ol></div><p><span class="strong">Initial Package Development</span></p><p><span class="strong">David Developer</span> writes a piece of software used to do knowledge management (km) for the OpenACS. He distributes his data model, procedure code, UI pages, and his documentation according to the APM specification. He splits the documentation and the code into sub-packages, and creates a KM installation-chain to install both with the APM developer -UI. Noting that his software was built with <span class="strong"><em>Patricia -Programmer</em></span>'s Super Widget toolkit, he specifies that as a +UI. Noting that his software was built with <span class="strong">Patricia +Programmer</span>'s Super Widget toolkit, he specifies that as a dependency. Moreover, since this package is capable of being used at the sub-site level, David configures this option in the package. When the package development is complete, David uses the APM developer UI to construct a distribution file. He assigns it a version number, 1.0, and makes the package -available for download at the OpenACS package repository.</p><p><span class="strong"><em>Initial Package Installation</em></span></p><p><span class="strong"><em>Annie Admin</em></span> learns of David's KM system by browsing +available for download at the OpenACS package repository.</p><p><span class="strong">Initial Package Installation</span></p><p><span class="strong">Annie Admin</span> learns of David's KM system by browsing the OpenACS package repository. Annie Admin uses the APM administrator UI on her system. She selects to install a package from a URL and types the URL displayed on the system. The APM automatically downloads the package. The @@ -72,16 +72,16 @@ installation was successful, the package is available for use.</p><p>Since the package is available for use, its initialization routines are set to run automatically on server startup. Annie is warned that since there are initialization routines, she must restart the server for the package to -be ready for use. Annie restarts the server.</p><p><span class="strong"><em>Initial Subsite Use of Package</em></span></p><p>Annie Admin decides to make the KM module available only to a particular +be ready for use. Annie restarts the server.</p><p><span class="strong">Initial Subsite Use of Package</span></p><p>Annie Admin decides to make the KM module available only to a particular sub-site type on her OpenACS system, and not others. She specifies this option -using the Sub-site type UI (not part of APM).</p><p>Annie Admin notifies <span class="strong"><em>Sally SubAdmin</em></span> by e-mail that a new +using the Sub-site type UI (not part of APM).</p><p>Annie Admin notifies <span class="strong">Sally SubAdmin</span> by e-mail that a new package is now available for use. Sally goes to her sub-site /admin page and sees that a new entry, KM, is available. Sally clicks on it and finds links to the installed KM documentation and to the web based configuration utility. Then, Sally configures the package using an automatically generated web interface and enables KM for use on her sub-site. After some initial use of the package, Sally decides to change some parameters using the SubAdmin UI. -These changes take effect immediately, without any server restarts.</p><p><span class="strong"><em>Upgrade Process</em></span></p><p>Sally SubAdmin finds a bug in the KM system and sends a report to David +These changes take effect immediately, without any server restarts.</p><p><span class="strong">Upgrade Process</span></p><p>Sally SubAdmin finds a bug in the KM system and sends a report to David Developer. David reads the bug report and verifies that the bugs are present in the current version. Because the bugs are present in the shared procedure file, David assigns a watch to the file. David makes the necessary @@ -92,199 +92,199 @@ repository.</p><p>Sally SubAdmin asks Annie Administrator to upgrade the package using the APM UI. This upgrade supersedes the old version of KM at the site-wide level. Once Annie upgrades the package, the new version starts working immediately -in Sally's sub-site.</p><p><span class="strong"><em>Procedural API</em></span></p><p><span class="strong"><em>Danielle Developer</em></span> wants her software to perform +in Sally's sub-site.</p><p><span class="strong">Procedural API</span></p><p><span class="strong">Danielle Developer</span> wants her software to perform different actions depending on what version of another package is installed. She uses the APM procedural API to check if KM version 1.0 is installed or version 1.1. Based on the results of this procedural call, the software -exhibits different behavior.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-links"></a>Related Links</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="/doc/core-arch-guide/apm" target="_top">APM 3.3 Design document</a></p></li><li><p><a href="/doc/packaging" target="_top">Five minute guide to packaging a module</a></p></li><li><p><a href="/doc/core-arch-guide/subcommunities" target="_top">Sub-communities</a></p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-data-model"></a>Requirements: Data Model</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em>4.500.0 Package Identification</em></span> -(All of these items are entered by the developer using the developer UI.) </p><p><span class="strong"><em>4.500.1</em></span> A human readable package key that is guaranteed +exhibits different behavior.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-links"></a>Related Links</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="/doc/core-arch-guide/apm" target="_top">APM 3.3 Design document</a></p></li><li><p><a href="/doc/packaging" target="_top">Five minute guide to packaging a module</a></p></li><li><p><a href="/doc/core-arch-guide/subcommunities" target="_top">Sub-communities</a></p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-data-model"></a>Requirements: Data Model</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><span class="strong">4.500.0 Package Identification</span> +(All of these items are entered by the developer using the developer UI.) </p><p><span class="strong">4.500.1</span> A human readable package key that is guaranteed to be unique to the local OpenACS site must be maintained by the APM. For -example, "apm."</p><p><span class="strong"><em>4.500.5</em></span> A package id (primary key) that is guaranteed to +example, "apm."</p><p><span class="strong">4.500.5</span> A package id (primary key) that is guaranteed to be unique to the local site must be maintained by the APM. For example, -"25."</p><p><span class="strong"><em>4.500.10</em></span> A package URL that is guaranteed to be unique +"25."</p><p><span class="strong">4.500.10</span> A package URL that is guaranteed to be unique across all sites must be maintained by the APM. The package URL should point to a server that allows download of the latest version of the package. For example, "http://openacs.org/software." -</p></li><li><p><span class="strong"><em>4.505.0 Version Identification</em></span> - (All of these items are entered by the developer using the developer UI.) </p><p><span class="strong"><em>4.505.1</em></span> A version id (primary key) that is guaranteed to -be unique to the local site must be maintained by the APM.</p><p><span class="strong"><em>4.505.5</em></span> A version URL that is guaranteed to be unique +</p></li><li><p><span class="strong">4.505.0 Version Identification</span> + (All of these items are entered by the developer using the developer UI.) </p><p><span class="strong">4.505.1</span> A version id (primary key) that is guaranteed to +be unique to the local site must be maintained by the APM.</p><p><span class="strong">4.505.5</span> A version URL that is guaranteed to be unique across all sites must be maintained by the APM. The version URL should point to a server that allows download of a specific version of the package. -</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-api"></a>Requirements: API</h3></div></div><p>The API for APM v3 is explicitly a private API. However, it would be +</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-api"></a>Requirements: API</h3></div></div><p>The API for APM v3 is explicitly a private API. However, it would be useful to obtain information from the APM through a procedural API. Implementing the API specified below is quite easy given that there are pages -that already do all of the below in raw SQL.</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em>4.400.0 Packages Status Predicates</em></span> </p><p><span class="strong"><em>4.400.1</em></span> Given defining information such as a package URL, +that already do all of the below in raw SQL.</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong">4.400.0 Packages Status Predicates</span> </p><p><span class="strong">4.400.1</span> Given defining information such as a package URL, the APM API can return the status of the package on the local OpenACS -instance.</p></li><li><p><span class="strong"><em>4.405.0 Package Information Procedures</em></span> </p><p><span class="strong"><em>4.405.1</em></span> The APM API can return information for any +instance.</p></li><li><p><span class="strong">4.405.0 Package Information Procedures</span> </p><p><span class="strong">4.405.1</span> The APM API can return information for any locally installed packages, including the version number, paths and files, -and package key.</p></li><li><p><span class="strong"><em>4.410.0 Sub-site Procedures</em></span> </p><p><span class="strong"><em>4.410.1</em></span> After a package has been installed at the +and package key.</p></li><li><p><span class="strong">4.410.0 Sub-site Procedures</span> </p><p><span class="strong">4.410.1</span> After a package has been installed at the site-wide level, the system API will provide means to check for package -presence, creation, enabling, disabling, and destruction on a subsite.</p></li><li><p><span class="strong"><em>4.415.0 Parameter Values (replaces ad_parameter)</em></span> </p><p><span class="strong"><em>4.415.1</em></span> The system API shall allow subsite parameters for +presence, creation, enabling, disabling, and destruction on a subsite.</p></li><li><p><span class="strong">4.415.0 Parameter Values (replaces ad_parameter)</span> </p><p><span class="strong">4.415.1</span> The system API shall allow subsite parameters for an installed package to be set by either site-wide administrators or sub-site admins. The subsite parameter can be set to be non-persistent (but default is to survive server restarts). The subsite parameter can also be set to only -take effect after a server restart (default is immediate).</p><p><span class="strong"><em>4.415.5</em></span> Parameters for a given subsite and package can be -returned by the system API.</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-security"></a>Requirements: Security</h3></div></div><p> +take effect after a server restart (default is immediate).</p><p><span class="strong">4.415.5</span> Parameters for a given subsite and package can be +returned by the system API.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-security"></a>Requirements: Security</h3></div></div><p> Provisions will be made to assure that packages are securely -identified.</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em>4.600.1</em></span> Each package will have a PGP signature and there +identified.</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong">4.600.1</span> Each package will have a PGP signature and there will be MD5 time stamps for each file within the package. -</p></li><li><p><span class="strong"><em>4.600.5</em></span> The APM will provide a facility to validate both -the PGP signature and MD5 stamps information before a package install.</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-ui"></a>Requirements: The User Interface</h3></div></div><p>The user interface is a set of HTML pages that are used to drive the +</p></li><li><p><span class="strong">4.600.5</span> The APM will provide a facility to validate both +the PGP signature and MD5 stamps information before a package install.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-ui"></a>Requirements: The User Interface</h3></div></div><p>The user interface is a set of HTML pages that are used to drive the underlying API. It is restricted to site-wide administrators because the -actions taken here can dramatically affect the state of the running OpenACS.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-dev-interface"></a>Requirements: The Developer's Interface</h3></div></div><p>The intent of the developer's interface is to enable the developer to +actions taken here can dramatically affect the state of the running OpenACS.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-dev-interface"></a>Requirements: The Developer's Interface</h3></div></div><p>The intent of the developer's interface is to enable the developer to construct and maintain APM packages. It will be possible to disable the developer's interface for production sites to help reduce the chance of site failure; much of the functionality here can have cascading effects -throughout the OpenACS and should not be used on a production site.</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em>10.0 Define a package.</em></span></p><p>The developer must be able to create a new package by specifying some +throughout the OpenACS and should not be used on a production site.</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong">10.0 Define a package.</span></p><p>The developer must be able to create a new package by specifying some identifying information for the package. This includes a package name, a -package key, version information, owner information, and a canonical URL.</p><p><span class="strong"><em>10.1</em></span> The APM must maintain the state of all locally -generated packages.</p><p><span class="strong"><em>10.50</em></span> If the developer fails to provide the required -information, the package cannot be created.</p><p><span class="strong"><em>10.55</em></span> All of the package information should be editable -after creation, except for the package key.</p><p><span class="strong"><em>4.10.60</em></span> The package creator must specify whether the +package key, version information, owner information, and a canonical URL.</p><p><span class="strong">10.1</span> The APM must maintain the state of all locally +generated packages.</p><p><span class="strong">10.50</span> If the developer fails to provide the required +information, the package cannot be created.</p><p><span class="strong">10.55</span> All of the package information should be editable +after creation, except for the package key.</p><p><span class="strong">4.10.60</span> The package creator must specify whether the package is capable of being used in sub-sites, or if only a single, global -instance of the package is permitted.</p><p><span class="strong"><em>4.10.65</em></span> If the developer fails to provide unique +instance of the package is permitted.</p><p><span class="strong">4.10.65</span> If the developer fails to provide unique information for unique fields specified in the data model requirements, the -package cannot be created.</p></li><li><p><span class="strong"><em>20.0 Add files to a package</em></span> </p><p><span class="strong"><em>20.1</em></span> The developer must be able to add files to the +package cannot be created.</p></li><li><p><span class="strong">20.0 Add files to a package</span> </p><p><span class="strong">20.1</span> The developer must be able to add files to the package. This is done by copying the files into the package directory in the host OS's file system. Files can be added at any point after package -creation.</p><p><span class="strong"><em>20.3</em></span> Once a package has been versioned and distributed, +creation.</p><p><span class="strong">20.3</span> Once a package has been versioned and distributed, no new files should be added to the package without incrementing the version -number.</p><p><span class="strong"><em>20.5</em></span> The APM's UI should facilitate the process of +number.</p><p><span class="strong">20.5</span> The APM's UI should facilitate the process of adding new files, by scanning the file system for new files automatically, -and allowing the developer to confirm adding them.</p><p><span class="strong"><em>20.10</em></span> The developer cannot add files to a given package -via the UI that do not exist in the file system already.</p><p><span class="strong"><em>20.15</em></span> Package file structure must follow a specified +and allowing the developer to confirm adding them.</p><p><span class="strong">20.10</span> The developer cannot add files to a given package +via the UI that do not exist in the file system already.</p><p><span class="strong">20.15</span> Package file structure must follow a specified convention. Please see the <a href="apm-design.html" title="OpenACS 4.6.2 Package Manager Design">design -document</a> for what we do currently.</p></li><li><p><span class="strong"><em>30.0 Remove files from a package</em></span></p><p>The developer must be able to remove files from a package. This can be -done in two ways.</p><div class="itemizedlist"><ul type="round"><li><p><span class="strong"><em>30.1</em></span> Access the APM UI, browse the file list, and remove -files.</p><p><span class="strong"><em>30.1.1</em></span>If a file is removed from the package list, but not -from the file system, an error should be generated at package load time.</p></li><li><p><span class="strong"><em>30.5</em></span> Remove the file from file system. </p><p><span class="strong"><em>30.5.1</em></span> The APM UI should take note of the fact that the +document</a> for what we do currently.</p></li><li><p><span class="strong">30.0 Remove files from a package</span></p><p>The developer must be able to remove files from a package. This can be +done in two ways.</p><div class="itemizedlist"><ul type="circle"><li><p><span class="strong">30.1</span> Access the APM UI, browse the file list, and remove +files.</p><p><span class="strong">30.1.1</span>If a file is removed from the package list, but not +from the file system, an error should be generated at package load time.</p></li><li><p><span class="strong">30.5</span> Remove the file from file system. </p><p><span class="strong">30.5.1</span> The APM UI should take note of the fact that the file is gone and offer the developer an option to confirm the file's deletion. -</p></li></ul></div></li><li><p><span class="strong"><em>40.0 Modify files in a package</em></span>. </p><p><span class="strong"><em>40.1</em></span> The developer should be able to modify files in the -file system. The APM UI should not interfere with this.</p><p><span class="strong"><em>40.5</em></span> However, if the developer modifies files containing -procedural definitions, APM UI should allow a means to <span class="strong"><em>watch</em></span> +</p></li></ul></div></li><li><p><span class="strong">40.0 Modify files in a package</span>. </p><p><span class="strong">40.1</span> The developer should be able to modify files in the +file system. The APM UI should not interfere with this.</p><p><span class="strong">40.5</span> However, if the developer modifies files containing +procedural definitions, APM UI should allow a means to <span class="strong">watch</span> those files and automatically reload them if changed. See requirement 50.0 -for more detail.</p><p><span class="strong"><em>40.10</em></span> Also, although a change in files implies that the +for more detail.</p><p><span class="strong">40.10</span> Also, although a change in files implies that the package distribution file is out of date, it is the developer's -responsibility to update it.</p></li><li><p><span class="strong"><em>4.45.0 Manage Package Dependency Information</em></span>. </p><p><span class="strong"><em>4.45.1</em></span> The developer should be able to specify which -interfaces the package requires.</p><p><span class="strong"><em>4.45.5</em></span> The developer should be able to specify which -interfaces the package provides.</p><p><span class="strong"><em>4.45.10</em></span> Circular dependencies are not allowed.</p></li><li><p><span class="strong"><em>50.0 Watch a file</em></span> </p><p><span class="strong"><em>4.50.1</em></span> The developer should be able to assign a watch to -any Tcl procedure file, whether in /packages or /tcl.</p><p><span class="strong"><em>50.5</em></span> If a watched file is locally modified, then it will +responsibility to update it.</p></li><li><p><span class="strong">4.45.0 Manage Package Dependency Information</span>. </p><p><span class="strong">4.45.1</span> The developer should be able to specify which +interfaces the package requires.</p><p><span class="strong">4.45.5</span> The developer should be able to specify which +interfaces the package provides.</p><p><span class="strong">4.45.10</span> Circular dependencies are not allowed.</p></li><li><p><span class="strong">50.0 Watch a file</span> </p><p><span class="strong">4.50.1</span> The developer should be able to assign a watch to +any Tcl procedure file, whether in /packages or /tcl.</p><p><span class="strong">50.5</span> If a watched file is locally modified, then it will be automatically reloaded, thus allowing for any changes made to take affect -immediately.</p><p><span class="strong"><em>4.50.10</em></span> The setting of a watch should be persistent +immediately.</p><p><span class="strong">4.50.10</span> The setting of a watch should be persistent across server restarts. -</p></li><li><p><span class="strong"><em>60.0 Display an XML package specification</em></span> </p><p><span class="strong"><em>60.1</em></span> The developer should be able to view the XML package +</p></li><li><p><span class="strong">60.0 Display an XML package specification</span> </p><p><span class="strong">60.1</span> The developer should be able to view the XML package specification that encodes all package information. -</p></li><li><p><span class="strong"><em>70.0 Write an XML package specification to the file -system</em></span> </p><p><span class="strong"><em>70.1</em></span> The developer should be able to write an up-to-date -XML specification to disk.</p><p><span class="strong"><em>70.5</em></span> The developer should be able to request the current -XML specification for all installed, locally generated packages.</p></li><li><p><span class="strong"><em>130.0 Distribution file generation</em></span> </p><p><span class="strong"><em>130.1</em></span> The developer should be able to generate a .APM -distribution file for the package with just one click.</p><p><span class="strong"><em>130.5</em></span> Generating a distribution file implies doing an +</p></li><li><p><span class="strong">70.0 Write an XML package specification to the file +system</span> </p><p><span class="strong">70.1</span> The developer should be able to write an up-to-date +XML specification to disk.</p><p><span class="strong">70.5</span> The developer should be able to request the current +XML specification for all installed, locally generated packages.</p></li><li><p><span class="strong">130.0 Distribution file generation</span> </p><p><span class="strong">130.1</span> The developer should be able to generate a .APM +distribution file for the package with just one click.</p><p><span class="strong">130.5</span> Generating a distribution file implies doing an "up-to-date" check on all of the files. If any of the files have changed since package installation, then a new version of the package is created. -</p></li><li><p><span class="strong"><em>140.0 Access CVS information</em></span> </p><p><span class="strong"><em>140.1</em></span> The developer should be able to determine the CVS +</p></li><li><p><span class="strong">140.0 Access CVS information</span> </p><p><span class="strong">140.1</span> The developer should be able to determine the CVS status of a package, or all packages, with a single click. -</p></li><li><p><span class="strong"><em>4.200.0 Compound Package Construction</em></span> </p><p><span class="strong"><em>4.200.1</em></span> The developer can include .APM packages +</p></li><li><p><span class="strong">4.200.0 Compound Package Construction</span> </p><p><span class="strong">4.200.1</span> The developer can include .APM packages (sub-packages) within a package (the compound package) like any other -file.</p><p><span class="strong"><em>4.200.5</em></span> The recommended usage for this feature is to +file.</p><p><span class="strong">4.200.5</span> The recommended usage for this feature is to allow for separation of optional and required components from the installation as well as better organization of files once installed. For example, all documentation for the community-core can be packages as <tt>community-core-doc.apm</tt>. It is legal to include sub-packages with dependencies that are not satisfied by the packages in the compound package, but this is discouraged. In such a case, the sub-package should really be a -separate package that is required by the compound package.</p><p><span class="strong"><em>4.200.10</em></span> If a sub-package is required for the +separate package that is required by the compound package.</p><p><span class="strong">4.200.10</span> If a sub-package is required for the installation of the compound package, the compound package should have a -registered dependency on the sub-package.</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-admin-interface"></a>Requirements: The Site-Wide Administrator's Interface</h3></div></div><p>The requirement of the administrator's interface is to enable the +registered dependency on the sub-package.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-admin-interface"></a>Requirements: The Site-Wide Administrator's Interface</h3></div></div><p>The requirement of the administrator's interface is to enable the administrator to install, enable, upgrade, disable, deinstall, and delete -packages.</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em>80.0 Package Enable/Disable</em></span> </p><p><span class="strong"><em>4.80.1</em></span> The administrator should be able mark an installed +packages.</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong">80.0 Package Enable/Disable</span> </p><p><span class="strong">4.80.1</span> The administrator should be able mark an installed package as enabled. This means that the package is activated and its functionality is delivered through the Request Processor. As of OpenACS 4, this -is done through the sub-site system.</p><p><span class="strong"><em>4.80.5</em></span> Moreover, the administrator must be able to +is done through the sub-site system.</p><p><span class="strong">4.80.5</span> Moreover, the administrator must be able to disable a package, thereby removing the functionality provided to a sub-site. As of OpenACS 4, this is done through the sub-site system. -</p></li><li><p><span class="strong"><em>90.0 Package Install</em></span> </p><p><span class="strong"><em>90.1</em></span> The administrator must be able to install new -packages either from locally maintained .APM files or from URLs.</p><p><span class="strong"><em>90.5</em></span> In the case of an URL, the APM transparently +</p></li><li><p><span class="strong">90.0 Package Install</span> </p><p><span class="strong">90.1</span> The administrator must be able to install new +packages either from locally maintained .APM files or from URLs.</p><p><span class="strong">90.5</span> In the case of an URL, the APM transparently downloads the APM file off the web, proceeds with a file based installation, -and then optionally removes the .APM file just downloaded.</p><p><span class="strong"><em>90.10.1</em></span> If .APM files are present in a package, then it -is considered a compound package (use 4.210.0).</p><p><span class="strong"><em>90.15.0</em></span> Installation requires these steps:</p><div class="orderedlist"><ol type="1"><li><p><span class="strong"><em>90.15.1</em></span>The package dependencies are scanned. If some +and then optionally removes the .APM file just downloaded.</p><p><span class="strong">90.10.1</span> If .APM files are present in a package, then it +is considered a compound package (use 4.210.0).</p><p><span class="strong">90.15.0</span> Installation requires these steps:</p><div class="orderedlist"><ol type="1"><li><p><span class="strong">90.15.1</span>The package dependencies are scanned. If some dependencies are not present, the system warns the administrator that -installation cannot proceed until those packages are installed.</p></li><li><p><span class="strong"><em>90.15.2</em></span> Assuming all dependencies are present, APM -extracts the contents of the APM file into the /packages directory.</p></li><li><p><span class="strong"><em>90.15.3</em></span> The administrator is offered the option of -importing directly into CVS.</p></li><li><p><span class="strong"><em>90.15.4</em></span> The administrator is given a list of data model -scripts found in the package and can select which ones to be executed.</p></li><li><p><span class="strong"><em>90.15.5</em></span> If no errors are recorded during this process, -the package is enabled.</p></li></ol></div></li><li><p><span class="strong"><em>4.210.0 Compound package Install</em></span> </p><p><span class="strong"><em>4.210.1</em></span> If .APM files are present in a package, then it -is considered a compound package.</p><p><span class="strong"><em>4.210.5.0</em></span> Installation of a compound package proceeds -according to the following sequence:</p><div class="orderedlist"><ol type="1"><li><p><span class="strong"><em>4.210.5.1</em></span> Identify the set of all sub-packages within -the compound package by scanning for all files with .APM.</p></li><li><p><span class="strong"><em>4.210.5.2</em></span> Identify which sub-packages are required by +installation cannot proceed until those packages are installed.</p></li><li><p><span class="strong">90.15.2</span> Assuming all dependencies are present, APM +extracts the contents of the APM file into the /packages directory.</p></li><li><p><span class="strong">90.15.3</span> The administrator is offered the option of +importing directly into CVS.</p></li><li><p><span class="strong">90.15.4</span> The administrator is given a list of data model +scripts found in the package and can select which ones to be executed.</p></li><li><p><span class="strong">90.15.5</span> If no errors are recorded during this process, +the package is enabled.</p></li></ol></div></li><li><p><span class="strong">4.210.0 Compound package Install</span> </p><p><span class="strong">4.210.1</span> If .APM files are present in a package, then it +is considered a compound package.</p><p><span class="strong">4.210.5.0</span> Installation of a compound package proceeds +according to the following sequence:</p><div class="orderedlist"><ol type="1"><li><p><span class="strong">4.210.5.1</span> Identify the set of all sub-packages within +the compound package by scanning for all files with .APM.</p></li><li><p><span class="strong">4.210.5.2</span> Identify which sub-packages are required by checking the dependencies of the compound package. If there dependencies not satisfied by the current system or the packages included with the compound package, halt installation and inform user to install these packages -first.</p></li><li><p><span class="strong"><em>4.210.5.3</em></span> Present Administrator with the ability to +first.</p></li><li><p><span class="strong">4.210.5.3</span> Present Administrator with the ability to choose which sub-packages to install. Required sub-packages must be -installed.</p></li><li><p><span class="strong"><em>4.210.5.4</em></span> Proceed with the installation of each +installed.</p></li><li><p><span class="strong">4.210.5.4</span> Proceed with the installation of each sub-package, starting with required packages. If the sub-package is already installed, then do nothing. Else, If the sub-package is a normal package, -proceed according to <span class="strong"><em>90.15.0</em></span>, otherwise if it is a compound -package, proceed according to <span class="strong"><em>4.210.5.0</em></span>.</p></li><li><p><span class="strong"><em>4.210.5.5</em></span> If all required sub-packages are installed, +proceed according to <span class="strong">90.15.0</span>, otherwise if it is a compound +package, proceed according to <span class="strong">4.210.5.0</span>.</p></li><li><p><span class="strong">4.210.5.5</span> If all required sub-packages are installed, proceed to install non-required sub-packages. If there was a failure during the installation of a required sub-package, then the installation of the -compound package is also a failure.</p></li><li><p><span class="strong"><em>4.210.5.6</em></span> Any attempt to install a compound package in +compound package is also a failure.</p></li><li><p><span class="strong">4.210.5.6</span> Any attempt to install a compound package in the future involves a choice presented to the admin of installing any -uninstalled sub-packages.</p></li></ol></div></li><li><p><span class="strong"><em>4.220.0 Recovering from failed package installation</em></span></p><p><span class="strong"><em>4.220.1</em></span> If any error is generated during package +uninstalled sub-packages.</p></li></ol></div></li><li><p><span class="strong">4.220.0 Recovering from failed package installation</span></p><p><span class="strong">4.220.1</span> If any error is generated during package installation, the package is not considered installed. To recover from this -failure, the package should be selected for installation again.</p></li><li><p><span class="strong"><em>100.0 Version Upgrade</em></span> </p><p><span class="strong"><em>100.1</em></span> The administrator can upgrade to a new version of a -package. This entails</p><div class="orderedlist"><ol type="1"><li><p><span class="strong"><em>100.1.1</em></span> Running any necessary and included upgrade -scripts.</p></li><li><p><span class="strong"><em>100.1.5</em></span> Replacing any old files with new versions.</p></li><li><p><span class="strong"><em>100.1.10</em></span> Marking the old version of the package as -'superseded' and disabling it.</p></li><li><p><span class="strong"><em>100.1.15</em></span> Assuming no errors from above, the new package -is enabled.</p></li></ol></div></li><li><p><span class="strong"><em>110.0 Package Deinstall</em></span> </p><p><span class="strong"><em>110.1</em></span> The administrator must be able to deinstall a -package that has already been installed. Deinstallation entails:</p><div class="orderedlist"><ol type="1"><li><p><span class="strong"><em>110.1.1</em></span> Running any data model scripts necessary to drop -the package.</p></li><li><p><span class="strong"><em>110.1.5</em></span> Moving all of the files into a separate location -in the file system from the installed packages.</p></li><li><p><span class="strong"><em>4.110.1.10</em></span> If the package is a compound package, then +failure, the package should be selected for installation again.</p></li><li><p><span class="strong">100.0 Version Upgrade</span> </p><p><span class="strong">100.1</span> The administrator can upgrade to a new version of a +package. This entails</p><div class="orderedlist"><ol type="1"><li><p><span class="strong">100.1.1</span> Running any necessary and included upgrade +scripts.</p></li><li><p><span class="strong">100.1.5</span> Replacing any old files with new versions.</p></li><li><p><span class="strong">100.1.10</span> Marking the old version of the package as +'superseded' and disabling it.</p></li><li><p><span class="strong">100.1.15</span> Assuming no errors from above, the new package +is enabled.</p></li></ol></div></li><li><p><span class="strong">110.0 Package Deinstall</span> </p><p><span class="strong">110.1</span> The administrator must be able to deinstall a +package that has already been installed. Deinstallation entails:</p><div class="orderedlist"><ol type="1"><li><p><span class="strong">110.1.1</span> Running any data model scripts necessary to drop +the package.</p></li><li><p><span class="strong">110.1.5</span> Moving all of the files into a separate location +in the file system from the installed packages.</p></li><li><p><span class="strong">4.110.1.10</span> If the package is a compound package, then the administrator must confirm removing all sub-packages. Optionally, some -sub-packages can be kept.</p></li></ol></div><p><span class="strong"><em>110.5</em></span> Deinstalled packages can be re-installed at a later -date.</p><p><span class="strong"><em>4.110.10</em></span> If deinstalling a package or any of its +sub-packages can be kept.</p></li></ol></div><p><span class="strong">110.5</span> Deinstalled packages can be re-installed at a later +date.</p><p><span class="strong">4.110.10</span> If deinstalling a package or any of its sub-packages breaks a dependency, then deinstallation cannot proceed until -the package registering the dependency is removed.</p></li><li><p><span class="strong"><em>120.0 Package Deletion</em></span> </p><p><span class="strong"><em>120.1</em></span> The administrator should be able to completely +the package registering the dependency is removed.</p></li><li><p><span class="strong">120.0 Package Deletion</span> </p><p><span class="strong">120.1</span> The administrator should be able to completely erase all records of the package. This involves removing all instances of the -package, all related database tables and content.</p><p><span class="strong"><em>120.5</em></span> This option can only be used if all package +package, all related database tables and content.</p><p><span class="strong">120.5</span> This option can only be used if all package instances are deleted or marked as disabled. This is purposefully cumbersome because deleting all instances of a package can have far-sweeping -consequences throughout a site and should almost never be done.</p></li><li><p><span class="strong"><em>150.0 Scan for new or modified packages</em></span> </p><p><span class="strong"><em>150.1</em></span> The administrator should be able to scan the file -system for any changes made in any of the installed package files.</p><p><span class="strong"><em>150.5</em></span> The administrator should be able to scan the file +consequences throughout a site and should almost never be done.</p></li><li><p><span class="strong">150.0 Scan for new or modified packages</span> </p><p><span class="strong">150.1</span> The administrator should be able to scan the file +system for any changes made in any of the installed package files.</p><p><span class="strong">150.5</span> The administrator should be able to scan the file system for any newly installed packages. -</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-sub-admin-intf"></a>Requirements: The Sub-Site Administrator's Interface</h3></div></div><p> +</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-sub-admin-intf"></a>Requirements: The Sub-Site Administrator's Interface</h3></div></div><p> If the developer is in charge of creating packages and the administrator for installing them, then the sub-site administrator is responsible for configuring and enabling packages. In order for a package to be available for a sub-site it must be associated with the sub-site's type specification. This interface is part of the sub-site /admin interface. -</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em>4.300</em></span> Creating a package instance. </p><p><span class="strong"><em>4.300.1</em></span> From the sub-site /admin interface, there should +</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong">4.300</span> Creating a package instance. </p><p><span class="strong">4.300.1</span> From the sub-site /admin interface, there should be an option to view all packages available in the system as well as an -option to add a package to the subsite.</p><p><span class="strong"><em>4.300.5</em></span> From the "add" option, the sub-admin +option to add a package to the subsite.</p><p><span class="strong">4.300.5</span> From the "add" option, the sub-admin can select from a list of packages registered as available in the sub-site -type to which the sub-site belongs.</p><p><span class="strong"><em>4.300.19</em></span> Once a package instance is added, it is -available on the list of the subsite's available packages.</p></li><li><p><span class="strong"><em>4.305</em></span> Configuring a package instance. </p><p><span class="strong"><em>4.305.1</em></span> An automatic web interface that lists all -parameters with current values must be available.</p><p><span class="strong"><em>4.305.5</em></span> Changing the values for the parameters is -accomplished simply by submitting an HTML form.</p></li><li><p><span class="strong"><em>4.310</em></span> Enabling a package instance. </p><p><span class="strong"><em>4.310.1</em></span> The sub-admin should be able to enable a package +type to which the sub-site belongs.</p><p><span class="strong">4.300.19</span> Once a package instance is added, it is +available on the list of the subsite's available packages.</p></li><li><p><span class="strong">4.305</span> Configuring a package instance. </p><p><span class="strong">4.305.1</span> An automatic web interface that lists all +parameters with current values must be available.</p><p><span class="strong">4.305.5</span> Changing the values for the parameters is +accomplished simply by submitting an HTML form.</p></li><li><p><span class="strong">4.310</span> Enabling a package instance. </p><p><span class="strong">4.310.1</span> The sub-admin should be able to enable a package with a single click. Enabling a package means that the OpenACS will serve its URLs properly. -</p></li><li><p><span class="strong"><em>4.315</em></span> Disabling a package instance. </p><p><span class="strong"><em>4.315.1</em></span> The sub-admin should be able to disable a package +</p></li><li><p><span class="strong">4.315</span> Disabling a package instance. </p><p><span class="strong">4.315.1</span> The sub-admin should be able to disable a package with a single click. Disabling a package means that the OpenACS will no longer -serve those URLs.</p></li><li><p><span class="strong"><em>4.320</em></span> Deleting a package instance. </p><p><span class="strong"><em>4.320.1</em></span> Deleting a package instance involves deleting not +serve those URLs.</p></li><li><p><span class="strong">4.320</span> Deleting a package instance. </p><p><span class="strong">4.320.1</span> Deleting a package instance involves deleting not only the package instance, but any and all content associated with it. It is questionable whether this option should even be available due to its drastic consequences. Reviewer comments appreciated. -</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-implementation"></a>Implementation notes</h3></div></div><p>Despite the fact that requirements are meant to be design/implementation +</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-implementation"></a>Implementation notes</h3></div></div><p>Despite the fact that requirements are meant to be design/implementation neutral, the following thoughts were in our head when specifying these requirements. You must be familiar with the new object design for this to be comprehensible.</p><p>When a package is installed system-wide, a corresponding acs_object_type @@ -293,4 +293,4 @@ are set using the acs_attribute_values table. The automatic web interface for setting package parameters should be one and the same with the interface for setting acs object attribute values. Consequently, the implementation of -these features should be quite straightforward.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-rev-history"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong"><em>Document Revision #</em></span></td><td><span class="strong"><em>Action Taken, Notes</em></span></td><td><span class="strong"><em>When?</em></span></td><td><span class="strong"><em>By Whom?</em></span></td></tr><tr><td>0.1</td><td>Creation</td><td>8/10/2000</td><td>Bryan Quinn, Todd Nightingale</td></tr><tr><td>�</td><td>Reviewed</td><td>8/11/2000</td><td>John Prevost, Mark Thomas, and Pete Su</td></tr><tr><td>0.2</td><td>Revised and updated</td><td>8/12/2000</td><td>Bryan Quinn</td></tr><tr><td>0.3</td><td>Reviewed, revised, and updated - conforms to requirements template.</td><td>8/18/2000</td><td>Kai Wu</td></tr><tr><td>0.4</td><td>Minor edits before ACS 4 Beta.</td><td>9/30/2000</td><td>Kai Wu</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="subsites-design.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="apm-design.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Subsites Design Document </td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right"> OpenACS 4.6.2 Package Manager Design</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/apm-requirements.html#comments">View comments on this page at openacs.org</a></center></body></html> +these features should be quite straightforward.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="apm-requirements-rev-history"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong">Document Revision #</span></td><td><span class="strong">Action Taken, Notes</span></td><td><span class="strong">When?</span></td><td><span class="strong">By Whom?</span></td></tr><tr><td>0.1</td><td>Creation</td><td>8/10/2000</td><td>Bryan Quinn, Todd Nightingale</td></tr><tr><td>�</td><td>Reviewed</td><td>8/11/2000</td><td>John Prevost, Mark Thomas, and Pete Su</td></tr><tr><td>0.2</td><td>Revised and updated</td><td>8/12/2000</td><td>Bryan Quinn</td></tr><tr><td>0.3</td><td>Reviewed, revised, and updated - conforms to requirements template.</td><td>8/18/2000</td><td>Kai Wu</td></tr><tr><td>0.4</td><td>Minor edits before ACS 4 Beta.</td><td>9/30/2000</td><td>Kai Wu</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="subsites-design.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="apm-design.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Subsites Design Document&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS 4.6.2 Package Manager Design</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/apm-requirements.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/backup-recovery.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/backup-recovery.html,v diff -u -r1.1.2.3 -r1.1.2.4 --- openacs-4/packages/acs-core-docs/www/backup-recovery.html 7 Apr 2003 16:59:25 -0000 1.1.2.3 +++ openacs-4/packages/acs-core-docs/www/backup-recovery.html 15 Apr 2003 17:03:01 -0000 1.1.2.4 @@ -1,10 +1,10 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Backup and Recovery</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="maintenance.html" title="Chapter 7. Maintenance"><link rel="previous" href="database-management.html" title="Database Management"><link rel="next" href="install-redhat.html" title="Appendix A. Install Red Hat 8.0"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="database-management.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Maintenance</th><td width="20%" align="right"> <a accesskey="n" href="install-redhat.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="backup-recovery"></a>Backup and Recovery</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Backup and Recovery</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="maintenance.html" title="Chapter�7.�Maintenance"><link rel="previous" href="database-management.html" title="Database Management"><link rel="next" href="install-redhat.html" title="Appendix�A.�Install Red Hat 8.0"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="database-management.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�7.�Maintenance</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="install-redhat.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="backup-recovery"></a>Backup and Recovery</h2></div></div><div class="authorblurb"><p> by <a href="mailto:dhogaza@pacifier.com" target="_top">Don Baccus</a> with additions by <a href="mailto:joel@aufrecht.org" target="_top">Joel Aufrecht</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-next-backups"></a>Backup Strategy</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-next-backups"></a>Backup Strategy</h3></div></div><p> The purpose of backup is to enable recovery. Backup and recovery are always risky; here are some steps that minimize the chance recovery is necessary: @@ -38,16 +38,16 @@ <tt>/web/<span class="replaceable">servicename</span>/database-backup</tt>, then you can apply standard file-based backup strategies to the root directory. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="postgres-quick-backup"></a>Set up Nightly Postgres Exports</h3></div></div><p>A quick way to automate database backup is a cron job. +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="postgres-quick-backup"></a>Set up Nightly Postgres Exports</h3></div></div><p>A quick way to automate database backup is a cron job. (This should moved into OpenACS's scheduled task project so that - it's integrated with OpenACS's alerts and such.)</p><pre class="screen">[service0@yourserver service0]$ export EDITOR=emacs;crontab -e</pre><p>Add this line to the file. The numbers and stars at the beginning are cron columns that specify when the program should be run - in this case, whenever the minute is 0 and the hour is 1, i.e., 1:00 am every day.</p><pre class="programlisting">0 1 * * * /usr/local/pgsql/bin/pg_dump -f /web/<span class="replaceable">service0</span>/database-backup/<span class="replaceable">service0</span>_$(date +%Y-%m-%d).dmp <span class="replaceable">service0</span></pre></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="backup-file-system"></a>Back up the file system</h3></div></div><p>Here's a quick manual way to back up a reference install - + it's integrated with OpenACS's alerts and such.)</p><pre class="screen">[service0@yourserver service0]$ export EDITOR=emacs;crontab -e</pre><p>Add this line to the file. The numbers and stars at the beginning are cron columns that specify when the program should be run - in this case, whenever the minute is 0 and the hour is 1, i.e., 1:00 am every day.</p><pre class="programlisting">0 1 * * * /usr/local/pgsql/bin/pg_dump -f /web/<span class="replaceable">service0</span>/database-backup/<span class="replaceable">service0</span>_$(date +%Y-%m-%d).dmp <span class="replaceable">service0</span></pre></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="backup-file-system"></a>Back up the file system</h3></div></div><p>Here's a quick manual way to back up a reference install - it should be replaced by an automated script within OpenACS. The command excludes the auto-generated <tt>supervise</tt> directory, which is unneccesary and has complicated permissions. Make sure that you are using the cron job to back up the database to a file in <tt>/web/<span class="replaceable">service0</span>/database-backup</tt> so that the tar command will include the database.</p><pre class="screen">[root@yourserver root]# <b><tt>su - <span class="replaceable">service0</span></tt></b> [service0@yourserver service0]$ <b><tt>tar -cpsj --exclude /web/<span class="replaceable">service0</span>/etc/daemontools/supervise --file /tmp/<span class="replaceable">service0</span>-backup.tar.bz2 /web/<span class="replaceable">service0</span>/ </tt></b> tar: Removing leading `/' from member names -[service0@yourserver service0]$</pre></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2850467"></a>Testing</h3></div></div><p><span class="emphasis"><em>On a test service</em></span>, make sure that your backup-recovery process work. After backing up the database and file system, delete the service as detailed below and then recover it.</p><pre class="screen">[root@yourserver root]# <b><tt>svc -d /service/service0</tt></b> +[service0@yourserver service0]$</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2906720"></a>Testing</h3></div></div><p><span class="emphasis"><em>On a test service</em></span>, make sure that your backup-recovery process work. After backing up the database and file system, delete the service as detailed below and then recover it.</p><pre class="screen">[root@yourserver root]# <b><tt>svc -d /service/service0</tt></b> [root@yourserver root]# <b><tt>mv /web/service0/ /web/service0.lost</tt></b> [root@yourserver root]#<b><tt> rm /service/service0</tt></b> rm: remove symbolic link `/service/service0'? y @@ -62,7 +62,7 @@ DROP USER [postgres@yourserver pgsql]$ <b><tt>exit</tt></b> logout -[root@yourserver root]#</pre></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="Recovery"></a>Recovery</h3></div></div><div class="orderedlist"><ol type="1"><li><p>Restore the operating system and required software. +[root@yourserver root]#</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="Recovery"></a>Recovery</h3></div></div><div class="orderedlist"><ol type="1"><li><p>Restore the operating system and required software. You can do this with standard backup processes or by keeping copies of the install material (OS CDs, OpenACS tarball and supporting software) and repeating the install guide.</p></li><li><p>Restore the OpenACS service. Assuming the user already exists, restore the database and files from backup and restore the daemontools link. (Because of a bug in Postgres backup-recovery, not all database objects are created in the correct order. To compensate, pre-creating some objects usually work.)</p><pre class="screen">[root@yourserver root]# <b><tt>su - postgres</tt></b> @@ -87,8 +87,8 @@ [root@yourserver root]# <b><tt>ln -s /web/<span class="replaceable">service0</span>/etc/daemontools /service/<span class="replaceable">service0</span></tt></b> [root@yourserver root]# <b><tt>sleep 10</tt></b> [root@yourserver root]# <b><tt>svgroup web /service/<span class="replaceable">service0</span></tt></b> -[root@yourserver root]#</pre></li></ol></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="other-backup-strategies"></a>Other Backup Strategies</h3></div></div><p>Earlier strategies, included here because this section - hasn't been fully updated yet.</p><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="install-export-oracle"></a>Set Up Nightly Oracle Exports</h4></div></div><p> +[root@yourserver root]#</pre></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="other-backup-strategies"></a>Other Backup Strategies</h3></div></div><p>Earlier strategies, included here because this section + hasn't been fully updated yet.</p><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="install-export-oracle"></a>Set Up Nightly Oracle Exports</h4></div></div><p> (This has not yet been updated to fit with the Reference install. To do so, edit the backup script to save the backup file in <tt>/web/<span class="replaceable">servicename</span>/database-backup</tt>). @@ -179,7 +179,7 @@ root:~# crontab -l | grep export-oracle 0 23 * * * /usr/sbin/export-oracle root:~# exit -; Logout</pre><p>If you see the line, go ahead and log out.</p></li></ul></div></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="install-export-postgres"></a>Set up nightly Postgres exports</h4></div></div><p> +; Logout</pre><p>If you see the line, go ahead and log out.</p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="install-export-postgres"></a>Set up nightly Postgres exports</h4></div></div><p> (This is not required for the Reference install.) Dowload <a href="files/acs-pgbackup-init.txt" target="_top">this script</a> to <tt>/tmp</tt>. At the top of the script @@ -213,4 +213,4 @@ joeuser:~$ restart-aolserver birdnotes</pre><p> That's it! The script will email you with each successful backup (or if it fails, it will send you an email with the reason) - </p></div></div><p><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="database-management.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="install-redhat.html">Next</a></td></tr><tr><td width="40%" align="left">Database Management </td><td width="20%" align="center"><a accesskey="u" href="maintenance.html">Up</a></td><td width="40%" align="right"> Appendix A. Install Red Hat 8.0</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/backup-recovery.html#comments">View comments on this page at openacs.org</a></center></body></html> + </p></div></div><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="database-management.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="install-redhat.html">Next</a></td></tr><tr><td width="40%" align="left">Database Management&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="maintenance.html">Up</a></td><td width="40%" align="right">&nbsp;Appendix�A.�Install Red Hat 8.0</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/backup-recovery.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/bootstrap-acs.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/bootstrap-acs.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/bootstrap-acs.html 7 Apr 2003 16:59:25 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/bootstrap-acs.html 15 Apr 2003 17:03:01 -0000 1.8.2.5 @@ -1,11 +1,11 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Bootstrapping OpenACS</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="previous" href="tcl-doc.html" title="Documenting Tcl Files: Page Contracts and Libraries"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="tcl-doc.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Kernel Documentation</th><td width="20%" align="right"> </td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="bootstrap-acs"></a>Bootstrapping OpenACS</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Bootstrapping OpenACS</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="previous" href="tcl-doc.html" title="Documenting Tcl Files: Page Contracts and Libraries"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="tcl-doc.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�11.�Kernel Documentation</th><td width="20%" align="right">&nbsp;</td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="bootstrap-acs"></a>Bootstrapping OpenACS</h2></div></div><div class="authorblurb"><p> by <a href="mailto:jsalz@mit.edu" target="_top">Jon Salz</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. </p></div><div class="itemizedlist"><ul type="disc"><li><p>Tcl code: /tcl/0-acs-init.tcl and /packages/acs-kernel/bootstrap.tcl</p></li></ul></div><p>This document describes the startup (bootstrapping) process for an AOLserver running OpenACS. -</p><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="bootstrap-acs-bigpicture"></a>The Big Picture</h3></div></div><p> +</p><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="bootstrap-acs-bigpicture"></a>The Big Picture</h3></div></div><p> Before OpenACS 3.3, the OpenACS startup process was extremely simple: after AOLserver performed its internal initialization (reading the configuration file, loading shared libraries and module code, etc.) it scanned through the Tcl @@ -19,7 +19,7 @@ and <tt>*-init.tcl</tt> files.</p></li></ul></div><p> This document examines in detail each of the steps involved in AOLserver/OpenACS startup. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="bootstrap-acs-startup-process"></a>The Startup Process</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="bootstrap-acs-startup-process"></a>The Startup Process</h3></div></div><p> As soon as the <tt>nsd</tt> daemon is executed by the <tt>init</tt> process (or otherwise), AOLserver reads its configuration file and <tt>chroot</tt>s itself if necessary. It then loads shared libraries @@ -34,11 +34,11 @@ by trimming the final component from the path to the Tcl library directory (<tt>/web/</tt><span class="emphasis"><em><tt>yourservername</tt></em></span><tt>/tcl</tt>). But <tt>0-acs-init.tcl</tt>'s has an important function, namely sourcing -<tt>/packages/acs-core/bootstrap.tcl</tt>, which does the following:</p><div class="orderedlist"><ol type="1"><li><p><span class="strong"><em>Initialize some NSVs used by the core</em></span>. These NSVs are +<tt>/packages/acs-core/bootstrap.tcl</tt>, which does the following:</p><div class="orderedlist"><ol type="1"><li><p><span class="strong">Initialize some NSVs used by the core</span>. These NSVs are documented in <tt>/packages/acs-core/apm-procs.tcl</tt> - no need to worry about them unless you're an OpenACS core hacker. -</p></li><li><p><span class="strong"><em>Verify the deletion of obsolete OpenACS files</em></span>. The +</p></li><li><p><span class="strong">Verify the deletion of obsolete OpenACS files</span>. The <tt>/tcl</tt> directory has evolved quite a bit over the months and years, and a few files have come and gone. The <tt>/www/doc/removed-files.txt</tt> file contains a list of files which @@ -47,18 +47,18 @@ <tt>bootstrap.tcl</tt> scans through this list, logging error messages to the log if any of these files exist. -</p></li><li><p><span class="strong"><em>Source <tt>*-procs.tcl</tt> files in the OpenACS core</em></span>. +</p></li><li><p><span class="strong">Source <tt>*-procs.tcl</tt> files in the OpenACS core</span>. We source each file matching the <tt>*-procs.tcl</tt> glob in the <tt>/packages/acs-kernel</tt> directory, in lexicographical order. These procedure are needed to perform any of the following steps. -</p></li><li><p><span class="strong"><em>Ensure that the database is available</em></span> by grabbing and +</p></li><li><p><span class="strong">Ensure that the database is available</span> by grabbing and releasing a handle. If we can't obtain a handle, we terminate initialization (since OpenACS couldn't possibly start up the server without access to the database). -</p></li><li><p><span class="strong"><em>Register any new packages in the <tt>/packages</tt> -directory</em></span>. In each directory inside <tt>/packages</tt>, we look +</p></li><li><p><span class="strong">Register any new packages in the <tt>/packages</tt> +directory</span>. In each directory inside <tt>/packages</tt>, we look for a <tt>.info</tt> file; if we find a package that hasn't yet been registered with the package manager (i.e., it's been copied there manually), we insert information about it into the database. (The first time @@ -68,23 +68,23 @@ initially disabled; they must be manually enabled in the package manager before they can be used. -</p></li><li><p><span class="strong"><em>Ensure that the <tt>acs-kernel</tt> package is -enabled</em></span>. If the OpenACS core isn't initialized, the server +</p></li><li><p><span class="strong">Ensure that the <tt>acs-kernel</tt> package is +enabled</span>. If the OpenACS core isn't initialized, the server couldn't possibly be operational, so if there's no enabled version of the OpenACS core we simply mark the latest installed one as enabled. -</p></li><li><p><span class="strong"><em>Load <tt>*-procs.tcl</tt> files for enabled -packages</em></span>, activating their APIs. +</p></li><li><p><span class="strong">Load <tt>*-procs.tcl</tt> files for enabled +packages</span>, activating their APIs. -</p></li><li><p><span class="strong"><em>Load <tt>*-init.tcl</tt> files for enabled packages</em></span>, +</p></li><li><p><span class="strong">Load <tt>*-init.tcl</tt> files for enabled packages</span>, giving packages a chance to register filters and procedures, initialize data structures, etc. -</p></li><li><p><span class="strong"><em>Verify that the core has been properly initialized</em></span> by +</p></li><li><p><span class="strong">Verify that the core has been properly initialized</span> by checking for the existence of an NSV created by the request processor initialization code. If it's not present, the server won't be operational, so we log an error.</p></li></ol></div><p> At this point, <tt>bootstrap.tcl</tt> is done executing. AOLserver proceeds to source the remaining files in the <tt>/tcl</tt> directory (i.e., unpackaged libraries) and begins listening for connections. -</p><p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tcl-doc.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left">Documenting Tcl Files: Page Contracts and Libraries </td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right"> </td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/bootstrap-acs.html#comments">View comments on this page at openacs.org</a></center></body></html> +</p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tcl-doc.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;</td></tr><tr><td width="40%" align="left">Documenting Tcl Files: Page Contracts and Libraries&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right">&nbsp;</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/bootstrap-acs.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/credits.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/credits.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/credits.html 7 Apr 2003 16:59:25 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/credits.html 15 Apr 2003 17:03:01 -0000 1.8.2.5 @@ -1,5 +1,5 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Credits</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="unix-install.html" title="Chapter 3. Installing on Unix/Linux"><link rel="previous" href="openacs.html" title="Install OpenACS 4.6.2"><link rel="next" href="win-install.html" title="Chapter 4. Installing on Windows"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="openacs.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Installing on Unix/Linux</th><td width="20%" align="right"> <a accesskey="n" href="win-install.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="credits"></a>Credits</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Credits</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="unix-install.html" title="Chapter�3.�Installing on Unix/Linux"><link rel="previous" href="openacs.html" title="Install OpenACS 4.6.2"><link rel="next" href="win-install.html" title="Chapter�4.�Installing on Windows"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="openacs.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�3.�Installing on Unix/Linux</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="win-install.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="credits"></a>Credits</h2></div></div><div class="authorblurb"><p> by <a href="mailto:vinod@kurup.com" target="_top">Vinod Kurup</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. @@ -32,6 +32,6 @@ Fred Yankowski, Dan Chak, Sebastiano Pilla, Reuven Lerner, Malte Sussdorff, Stan Kaufman and Pascal Scheffers. </p><p> - <span class="strong"><em>All questions and comments</em></span> regarding + <span class="strong">All questions and comments</span> regarding this guide should be posted on the <a href="http://openacs.org/bboard" target="_top">OpenACS bboards</a>. - </p><p><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="openacs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="win-install.html">Next</a></td></tr><tr><td width="40%" align="left">Install OpenACS 4.6.2 </td><td width="20%" align="center"><a accesskey="u" href="unix-install.html">Up</a></td><td width="40%" align="right"> Chapter 4. Installing on Windows</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/credits.html#comments">View comments on this page at openacs.org</a></center></body></html> + </p><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="openacs.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="win-install.html">Next</a></td></tr><tr><td width="40%" align="left">Install OpenACS 4.6.2&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="unix-install.html">Up</a></td><td width="40%" align="right">&nbsp;Chapter�4.�Installing on Windows</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/credits.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/database-management.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/database-management.html,v diff -u -r1.1.2.3 -r1.1.2.4 --- openacs-4/packages/acs-core-docs/www/database-management.html 7 Apr 2003 16:59:25 -0000 1.1.2.3 +++ openacs-4/packages/acs-core-docs/www/database-management.html 15 Apr 2003 17:03:01 -0000 1.1.2.4 @@ -1,10 +1,10 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Database Management</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="maintenance.html" title="Chapter 7. Maintenance"><link rel="previous" href="maintenance-web.html" title="Hosting Web Sites"><link rel="next" href="backup-recovery.html" title="Backup and Recovery"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="maintenance-web.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Maintenance</th><td width="20%" align="right"> <a accesskey="n" href="backup-recovery.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="database-management"></a>Database Management</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Database Management</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="maintenance.html" title="Chapter�7.�Maintenance"><link rel="previous" href="maintenance.html" title="Chapter�7.�Maintenance"><link rel="next" href="backup-recovery.html" title="Backup and Recovery"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="maintenance.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�7.�Maintenance</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="backup-recovery.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="database-management"></a>Database Management</h2></div></div><div class="authorblurb"><p> by <a href="mailto:joel@aufrecht.org" target="_top">Joel Aufrecht</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-openacs-delete-tablespace"></a>Deleting a tablespace</h3></div></div><p>Skip down for instructions on <a href="database-management.html#install-openacs-delete-postgres-tablespace">Deleting a PostgreSQL tablespace</a>. - </p><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="install-openacs-delete-oracle-tablespace"></a>Deleting an Oracle tablespace</h4></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-openacs-delete-tablespace"></a>Deleting a tablespace</h3></div></div><p>Skip down for instructions on <a href="database-management.html#install-openacs-delete-postgres-tablespace">Deleting a PostgreSQL tablespace</a>. + </p><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="install-openacs-delete-oracle-tablespace"></a>Deleting an Oracle tablespace</h4></div></div><p> Should it become necessary to rebuild a tablespace from scratch, you can use the <tt>drop user</tt> command in SVRMGRL with the <tt>cascade</tt> @@ -17,10 +17,10 @@ SVRMGR> select username, sid, serial# from v$session where lower(username)='<span class="emphasis"><em>server0</em></span>';</pre><p>and then</p><pre class="programlisting"> SVRMGR> alter system kill session '<span class="emphasis"><em>sid</em></span>,<span class="emphasis"><em>serial#</em></span>';</pre><p> where <span class="emphasis"><em>sid</em></span> and <span class="emphasis"><em>serial#</em></span> are - replaced with the corresponding values for the open session.</p><p><span class="strong"><em>Use with caution!</em></span></p><p> + replaced with the corresponding values for the open session.</p><p><span class="strong">Use with caution!</span></p><p> If you feel the need to delete <span class="emphasis"><em>everything</em></span> related to the service, you can also issue the following:</p><pre class="programlisting"> -SVRMGR> drop tablespace <span class="emphasis"><em>server0</em></span> including contents cascade constraints;</pre></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="install-openacs-delete-postgres-tablespace"></a>Deleting a PostgreSQL tablespace</h4></div></div><p> +SVRMGR> drop tablespace <span class="emphasis"><em>server0</em></span> including contents cascade constraints;</pre></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="install-openacs-delete-postgres-tablespace"></a>Deleting a PostgreSQL tablespace</h4></div></div><p> Dropping a PostgreSQL tablespace is easy. You have to stop any AOLserver instances that are using the database that you wish to drop. If you're using daemontools, this is simple, just use the @@ -30,7 +30,7 @@ q</tt>, and then <tt>restart-aolserver <span class="emphasis"><em>server0</em></span></tt>.</p><p>Then, to drop the db, just do:</p><pre class="programlisting"> server0:~$ dropdb <span class="emphasis"><em>server0</em></span> -DROP DATABASE</pre></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-next-nightly-vacuum"></a>Vacuum Postgres nightly</h3></div></div><p> +DROP DATABASE</pre></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-next-nightly-vacuum"></a>Vacuum Postgres nightly</h3></div></div><p> The "vacuum" command must be run periodically to reclaim space. The "vacuum analyze" form additionally collects statistics on the disbursion of columns in the database, which the optimizer uses when @@ -46,4 +46,4 @@ </p><p>Edit your crontab:</p><pre class="programlisting"> joeuser:~$ crontab -e</pre><p>We'll set vacuum up to run nightly at 1 AM. Add the following line:</p><pre class="programlisting"> -0 1 * * * /usr/local/pgsql/bin/vacuumdb birdnotes</pre></div><p><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="maintenance-web.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="backup-recovery.html">Next</a></td></tr><tr><td width="40%" align="left">Hosting Web Sites </td><td width="20%" align="center"><a accesskey="u" href="maintenance.html">Up</a></td><td width="40%" align="right"> Backup and Recovery</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/database-management.html#comments">View comments on this page at openacs.org</a></center></body></html> +0 1 * * * /usr/local/pgsql/bin/vacuumdb birdnotes</pre></div><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="maintenance.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="backup-recovery.html">Next</a></td></tr><tr><td width="40%" align="left">Chapter�7.�Maintenance&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="maintenance.html">Up</a></td><td width="40%" align="right">&nbsp;Backup and Recovery</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/database-management.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/db-api-detailed.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/db-api-detailed.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/db-api-detailed.html 7 Apr 2003 16:59:25 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/db-api-detailed.html 15 Apr 2003 17:03:01 -0000 1.8.2.5 @@ -1,24 +1,24 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Database Access API</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="previous" href="apm-design.html" title="OpenACS 4.6.2 Package Manager Design"><link rel="next" href="security-requirements.html" title="OpenACS 4 Security Requirements"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="apm-design.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Kernel Documentation</th><td width="20%" align="right"> <a accesskey="n" href="security-requirements.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="db-api-detailed"></a>Database Access API</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Database Access API</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="previous" href="apm-design.html" title="OpenACS 4.6.2 Package Manager Design"><link rel="next" href="security-requirements.html" title="OpenACS 4 Security Requirements"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="apm-design.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�11.�Kernel Documentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="security-requirements.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="db-api-detailed"></a>Database Access API</h2></div></div><div class="authorblurb"><p> by <a href="mailto:jsalz@mit.edu" target="_top">Jon Salz</a>. Revised and expanded by Roberto Mello (rmello at fslc dot usu dot edu), July 2002. <br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="itemizedlist"><ul type="disc"><li><p>Tcl procedures: /packages/acs-kernel/10-database-procs.tcl</p></li><li><p>Tcl initialization: /packages/acs-kernel/database-init.tcl</p></li></ul></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="db-api-detailed-bigpicture"></a>The Big Picture</h3></div></div><p> + </p></div><div class="itemizedlist"><ul type="disc"><li><p>Tcl procedures: /packages/acs-kernel/10-database-procs.tcl</p></li><li><p>Tcl initialization: /packages/acs-kernel/database-init.tcl</p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="db-api-detailed-bigpicture"></a>The Big Picture</h3></div></div><p> One of OpenACS's great strengths is that code written for it is very close to the database. It is very easy to interact with the database from anywhere within OpenACS. Our goal is to develop a coherent API for database access which makes this even easier. </p><p>There were four significant problems with the way OpenACS previously used the -database (i.e., directly through the <tt>ns_db</tt> interface):</p><div class="orderedlist"><ol type="1"><li><p><span class="strong"><em>Handle management</em></span>. We required code to pass database +database (i.e., directly through the <tt>ns_db</tt> interface):</p><div class="orderedlist"><ol type="1"><li><p><span class="strong">Handle management</span>. We required code to pass database handles around, and for routines which needed to perform database access but didn't receive a database handle as input, it was difficult to know from which of the three "magic pools" (main, subquery, and log) to allocate a new handle. -</p></li><li><p><span class="strong"><em>Nested transactions</em></span>. In our Oracle driver, <tt>begin +</p></li><li><p><span class="strong">Nested transactions</span>. In our Oracle driver, <tt>begin transaction</tt> really means "turn auto-commit mode off" and <tt>end transaction</tt> means "commit the current transaction and turn auto-commit mode on." Thus if transactional code needed to call a @@ -46,14 +46,14 @@ already have been committed!. This is not a good thing. -</p></li><li><p><span class="strong"><em>Unorthodox use of variables</em></span>. The standard mechanism for +</p></li><li><p><span class="strong">Unorthodox use of variables</span>. The standard mechanism for mapping column values into variables involved the use of the <tt>set_variables_after_query</tt> routine, which relies on an uplevel variable named <tt>selection</tt> (likewise for <tt>set_variables_after_subquery</tt> and <tt>subselection</tt>). -</p></li><li><p><span class="strong"><em>Hard-coded reliance on Oracle</em></span>. It's difficult to +</p></li><li><p><span class="strong">Hard-coded reliance on Oracle</span>. It's difficult to write code supporting various different databases (dynamically using the appropriate dialect based on the type of database being used, e.g., using <tt>DECODE</tt> on Oracle and <tt>CASE ... WHEN</tt> on @@ -81,7 +81,7 @@ design. Therefore, we know that the effort will not be wasted, and taking advantage of the new support for bind variables will already require code that uses 3.3.0 version of the API to be updated. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="db-api-detailed-set-var-aft-query"></a>The Bell Tolls for <tt>set_variables_after_query</tt></h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="db-api-detailed-set-var-aft-query"></a>The Bell Tolls for <tt>set_variables_after_query</tt></h3></div></div><p> <tt>set_variables_after_query</tt> is gone! (Well, it's still there, but you'll never need to use it.) The new API routines set local variables automatically. For instance: @@ -126,7 +126,7 @@ doc_body_append "There aren't any users with last names beginnings with S!" } -</pre></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="db-api-detailed-handles"></a>Handle Management</h3></div></div><p> +</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="db-api-detailed-handles"></a>Handle Management</h3></div></div><p> The new API keeps track of which handles are in use, and automatically allocates new handles when they are necessary (e.g., to perform subqueries while a select is active). For example: @@ -155,7 +155,7 @@ until <tt>db_release_unused_handles</tt> is invoked (or the script terminates). </p><p>Note that there is no analogue to <tt>ns_db gethandle</tt> - the -handle is always automatically allocated the first time it's needed.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="db-api-detailed-bindvars"></a>Bind Variables</h3></div></div><p><span class="strong"><em>Introduction</em></span></p><p> +handle is always automatically allocated the first time it's needed.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="db-api-detailed-bindvars"></a>Bind Variables</h3></div></div><p><span class="strong">Introduction</span></p><p> Most SQL statements require that the code invoking the statement pass along data associated with that statement, usually obtained from the user. For instance, in order to delete a WimpyPoint presentation, a Tcl script might @@ -168,7 +168,7 @@ where <span class="emphasis"><em><tt>some_presentation_id</tt></em></span> is a number which is a valid presentation ID of the presentation I want to delete. It's easy to write code handling situations like this since SQL statements can include -<span class="strong"><em>bind variables</em></span>, which represent placeholders for actual +<span class="strong">bind variables</span>, which represent placeholders for actual data. A bind variable is specified as a colon followed by an identifier, so the statement above can be coded as: </p><pre class="programlisting"> @@ -201,7 +201,7 @@ select * from :table_name -</pre><p><span class="strong"><em>Why Bind Variables Are Useful</em></span></p><p> +</pre><p><span class="strong">Why Bind Variables Are Useful</span></p><p> Why bother with bind variables at all - why not just write the Tcl statement above like this: </p><pre class="programlisting"> @@ -231,7 +231,7 @@ always considers the values of bind variables to be literals, it becomes more difficult for users to perform URL surgery to trick scripts into running dangerous queries and DML. -</p><p><span class="strong"><em>Usage</em></span></p><p>Every <tt>db_*</tt> command accepting a SQL command as an argument +</p><p><span class="strong">Usage</span></p><p>Every <tt>db_*</tt> command accepting a SQL command as an argument supports bind variables. You can either</p><div class="itemizedlist"><ul type="disc"><li><p>specify the <tt>-bind</tt> switch to provide a set with bind variable values, or</p></li><li><p>specify the <tt>-bind</tt> switch to explicitly provide a list of bind variable names and values, or</p></li><li><p>not specify a bind variable list at all, in which case Tcl variables are @@ -292,7 +292,7 @@ # of "administrator" } -</pre><p><span class="strong"><em><a name="kernel.dbapi_nulls_and_bind_vars"></a>Nulls and Bind Variables</em></span></p><p> +</pre><p><span class="strong"><a name="kernel.dbapi_nulls_and_bind_vars"></a>Nulls and Bind Variables</span></p><p> When processing a DML statement, Oracle coerces empty strings into <tt>null</tt>. (This coercion does <span class="emphasis"><em>not</em></span> occur in the <tt>WHERE</tt> clause of a query, i.e. @@ -330,7 +330,7 @@ its column values), which defeats the purpose of SQL abstraction. </p><p>Therefore, the Database Access API provides a database-independent way to represent <tt>null</tt> (instead of the Oracle-specific idiom of the -empty string): <span class="strong"><em><tt>db_null</tt></em></span>.</p><p>Use it instead of the empty string whenever you want to set a column value +empty string): <span class="strong"><tt>db_null</tt></span>.</p><p>Use it instead of the empty string whenever you want to set a column value explicitly to <tt>null</tt>, e.g.:</p><pre class="programlisting"> set bar [db_null] @@ -340,13 +340,13 @@ # # sets the values for both the "bar" and "baz" columns to null -</pre></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="db-api-detailed-sql-abstraction"></a>SQL Abstraction</h3></div></div><p> +</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="db-api-detailed-sql-abstraction"></a>SQL Abstraction</h3></div></div><p> We now require that each SQL statement be assigned a logical name for the statement that is unique to the procedure or page in which it is defined. This is so that (eventually) we can implement logically named statements with alternative SQL for non-Oracle databases (e.g., Postgres). More on this later. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="db-api-detailed-placing-values"></a>Placing Column Values in Arrays and Sets</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="db-api-detailed-placing-values"></a>Placing Column Values in Arrays and Sets</h3></div></div><p> Normally, <tt>db_foreach</tt>, <tt>db_0or1row</tt>, and <tt>db_1row</tt> places the results of queries in Tcl variables, so you can say: @@ -377,21 +377,21 @@ </pre><p> will write something like: -</p><div class="itemizedlist"><ul type="disc"><li><p>first_names is Jon. last_name is Salz.</p></li><li><p>first_names is Lars. last_name is Pind.</p></li><li><p>first_names is Michael. last_name is Yoon.</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="dp-api-detailed-api"></a>API</h3></div></div><p> +</p><div class="itemizedlist"><ul type="disc"><li><p>first_names is Jon. last_name is Salz.</p></li><li><p>first_names is Lars. last_name is Pind.</p></li><li><p>first_names is Michael. last_name is Yoon.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="dp-api-detailed-api"></a>API</h3></div></div><p> Note that you never have to use <tt>ns_db</tt> anymore (including <tt>ns_db gethandle</tt>)! Just start doing stuff, and (if you want) call <tt>db_release_unused_handles</tt> when you're done as a hint to release the database handle. -</p><div class="variablelist"><dl><dt><span class="term"><span class="strong"><em><tt><a name="kernel.dbapi_db_null"></a>db_null</tt></em></span> +</p><div class="variablelist"><dl><dt><span class="term"><span class="strong"><tt><a name="kernel.dbapi_db_null"></a>db_null</tt></span> </span></dt><dd><pre class="programlisting"> -<span class="strong"><em><tt>db_null</tt></em></span> +<span class="strong"><tt>db_null</tt></span> </pre><p>Returns a value which can be used in a bind variable to represent the SQL value <tt>null</tt>. See <a href="db-api.html#dbapi_nulls_and_bind_vars" title="Nulls and Bind Variables">Nulls and Bind Variables</a> above.</p></dd><dt><span class="term"> -<span class="strong"><em><tt><a name="kernel.dbapi_db_foreach"></a>db_foreach</tt></em></span> +<span class="strong"><tt><a name="kernel.dbapi_db_foreach"></a>db_foreach</tt></span> </span></dt><dd><pre class="programlisting"> -<span class="strong"><em>db_foreach</em></span> <span class="emphasis"><em>statement-name sql</em></span> [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] \ +<span class="strong">db_foreach</span> <span class="emphasis"><em>statement-name sql</em></span> [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] \ [ -column_array <span class="emphasis"><em>array_name</em></span> | -column_set <span class="emphasis"><em>set_name</em></span> ] \ <span class="emphasis"><em>code_block</em></span> [ if_no_rows <span class="emphasis"><em>if_no_rows_block ]</em></span> </pre><p>Performs the SQL query <span class="emphasis"><em><tt>sql</tt></em></span>, executing @@ -409,8 +409,8 @@ </pre><p> The code block may contain <tt>break</tt> statements (which terminate the loop and flush the database handle) and <tt>continue</tt> statements -(which continue to the next row of the loop). </p></dd><dt><span class="term"><span class="strong"><em><tt><a name="kernel.dbapi_db_1row"></a>db_1row</tt></em></span></span></dt><dd><pre class="programlisting"> -<span class="strong"><em>db_1row</em></span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] \ +(which continue to the next row of the loop). </p></dd><dt><span class="term"><span class="strong"><tt><a name="kernel.dbapi_db_1row"></a>db_1row</tt></span></span></dt><dd><pre class="programlisting"> +<span class="strong">db_1row</span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] \ [ -column_array <span class="emphasis"><em>array_name</em></span> | -column_set <span class="emphasis"><em>set_name</em></span> ] </pre><p>Performs the SQL query <span class="emphasis"><em><tt>sql</tt></em></span>, setting variables to column values. Raises an error if the query does not return exactly 1 row. </p><p>Example:</p><pre class="programlisting"> @@ -419,48 +419,48 @@ # Bombs if there's no such greeble! # Now $foo and $bar are set. -</pre></dd><dt><span class="term"><span class="strong"><em><tt><a name="kernel.dbapi_db_0or1row"></a>db_0or1row</tt></em></span> </span></dt><dd><pre class="programlisting"> -<span class="strong"><em>db_0or1row</em></span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] \ +</pre></dd><dt><span class="term"><span class="strong"><tt><a name="kernel.dbapi_db_0or1row"></a>db_0or1row</tt></span> </span></dt><dd><pre class="programlisting"> +<span class="strong">db_0or1row</span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] \ [ -column_array <span class="emphasis"><em>array_name</em></span> | -column_set <span class="emphasis"><em>set_name</em></span> ] </pre><p>Performs the SQL query <span class="emphasis"><em><tt>sql</tt></em></span>. If a row is returned, sets variables to column values and returns 1. If no rows are returned, -returns 0. If more than one row is returned, throws an error. </p></dd><dt><span class="term"><span class="strong"><em><tt><a name="kernel.dbapi_db_string"></a>db_string</tt></em></span> </span></dt><dd><pre class="programlisting"> -<span class="strong"><em>db_string</em></span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> [ -default <span class="emphasis"><em>default</em></span> ] [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] +returns 0. If more than one row is returned, throws an error. </p></dd><dt><span class="term"><span class="strong"><tt><a name="kernel.dbapi_db_string"></a>db_string</tt></span> </span></dt><dd><pre class="programlisting"> +<span class="strong">db_string</span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> [ -default <span class="emphasis"><em>default</em></span> ] [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] </pre><p>Returns the first column of the result of SQL query <span class="emphasis"><em><tt>sql</tt></em></span>. If <span class="emphasis"><em><tt>sql</tt></em></span> doesn't return a row, returns <span class="emphasis"><em><tt>default</tt></em></span> (or throws an error if <span class="emphasis"><em><tt>default</tt></em></span> is unspecified). Analogous to <tt>database_to_tcl_string</tt> and <tt>database_to_tcl_string_or_null</tt>. -</p></dd><dt><span class="term"><span class="strong"><em><tt><a name="kernel.dbapi_db_nextval"></a>db_nextval</tt></em></span> </span></dt><dd><pre class="programlisting"> -<span class="strong"><em>db_nextval</em></span> <span class="emphasis"><em>sequence-name</em></span> +</p></dd><dt><span class="term"><span class="strong"><tt><a name="kernel.dbapi_db_nextval"></a>db_nextval</tt></span> </span></dt><dd><pre class="programlisting"> +<span class="strong">db_nextval</span> <span class="emphasis"><em>sequence-name</em></span> </pre><p>Returns the next value for the sequence <span class="emphasis"><em>sequence-name</em></span> (using a SQL statement like <tt>SELECT</tt> <span class="emphasis"><em><tt>sequence-name</tt></em></span><tt>.nextval FROM DUAL</tt>). If sequence pooling is enabled for the sequence, transparently uses a value from the pool if available to save a round-trip to the database. -</p></dd><dt><span class="term"><span class="strong"><em><tt><a name="kernel.dbapi_db_list"></a>db_list</tt></em></span></span></dt><dd><pre class="programlisting"> -<span class="strong"><em>db_list</em></span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] +</p></dd><dt><span class="term"><span class="strong"><tt><a name="kernel.dbapi_db_list"></a>db_list</tt></span></span></dt><dd><pre class="programlisting"> +<span class="strong">db_list</span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] </pre><p>Returns a Tcl list of the values in the first column of the result of SQL query <span class="emphasis"><em><tt>sql</tt></em></span>. If <span class="emphasis"><em><tt>sql</tt></em></span> doesn't return any rows, returns an empty list. Analogous to <tt>database_to_tcl_list</tt>. -</p></dd><dt><span class="term"><span class="strong"><em><tt><a name="kernel.dbapi_db_list_of_lists"></a>db_list_of_lists</tt></em></span></span></dt><dd><pre class="programlisting"> -<span class="strong"><em>db_list_of_lists</em></span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] +</p></dd><dt><span class="term"><span class="strong"><tt><a name="kernel.dbapi_db_list_of_lists"></a>db_list_of_lists</tt></span></span></dt><dd><pre class="programlisting"> +<span class="strong">db_list_of_lists</span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] </pre><p>Returns a Tcl list, each element of which is a list of all column values in a row of the result of SQL query <span class="emphasis"><em><tt>sql</tt></em></span>. If <span class="emphasis"><em><tt>sql</tt></em></span> doesn't return any rows, returns an empty list. (Analogous to <tt>database_to_tcl_list_list</tt>.) -</p></dd><dt><span class="term"><span class="strong"><em><tt><a name="kernel.dbapi_db_list_of_ns_sets"></a>db_list_of_ns_sets</tt></em></span></span></dt><dd><pre class="programlisting"> -<span class="strong"><em>db_list_of_ns_sets</em></span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] +</p></dd><dt><span class="term"><span class="strong"><tt><a name="kernel.dbapi_db_list_of_ns_sets"></a>db_list_of_ns_sets</tt></span></span></dt><dd><pre class="programlisting"> +<span class="strong">db_list_of_ns_sets</span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] </pre><p> Returns a list of ns_sets with the values of each column of each row returned by the <tt>sql</tt> query specified. - </p></dd><dt><span class="term"><span class="strong"><em><tt><a name="kernel.dbapi_db_dml"></a>db_dml</tt></em></span></span></dt><dd><pre class="programlisting"> -<span class="strong"><em>db_dml</em></span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> \ + </p></dd><dt><span class="term"><span class="strong"><tt><a name="kernel.dbapi_db_dml"></a>db_dml</tt></span></span></dt><dd><pre class="programlisting"> +<span class="strong">db_dml</span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> \ [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] \ [ -blobs <span class="emphasis"><em>blob_list</em></span> | -clobs <span class="emphasis"><em>clob_list</em></span> | -blob_files <span class="emphasis"><em>blob_file_list</em></span> | -clob_files <span class="emphasis"><em>clob_file_list</em></span> ] @@ -488,22 +488,22 @@ </p></dd><dt><span class="term"> -<span class="strong"><em><tt><a name="kernel.dbapi_db_write_clob"></a>db_write_clob</tt></em></span>, -<span class="strong"><em><tt><a name="kernel.dbapi_db_write_blob"></a>db_write_blob</tt></em></span>, -<span class="strong"><em><tt><a name="kernel.dbapi_db_blob_get_file"></a>db_blob_get_file</tt></em></span> +<span class="strong"><tt><a name="kernel.dbapi_db_write_clob"></a>db_write_clob</tt></span>, +<span class="strong"><tt><a name="kernel.dbapi_db_write_blob"></a>db_write_blob</tt></span>, +<span class="strong"><tt><a name="kernel.dbapi_db_blob_get_file"></a>db_blob_get_file</tt></span> </span></dt><dd><pre class="programlisting"> -<span class="strong"><em>db_write_clob</em></span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] +<span class="strong">db_write_clob</span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] -<span class="strong"><em>db_write_blob</em></span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] +<span class="strong">db_write_blob</span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] -<span class="strong"><em>db_blob_get_file</em></span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] +<span class="strong">db_blob_get_file</span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] </pre><p>Analagous to <tt>ns_ora write_clob/write_blob/blob_get_file</tt>. -</p></dd><dt><span class="term"><span class="strong"><em><tt><a name="kernel.dbapi_db_release_unused_handles"></a>db_release_unused_handles</tt></em></span></span></dt><dd><pre class="programlisting"> -<span class="strong"><em>db_release_unused_handles</em></span> -</pre><p>Releases any allocated, unused database handles. </p></dd><dt><span class="term"><span class="strong"><em><tt><a name="kernel.dbapi_db_transaction"></a>db_transaction</tt></em></span></span></dt><dd><pre class="programlisting"> -<span class="strong"><em>db_transaction</em></span> <span class="emphasis"><em>code_block</em></span> [ on_error { <span class="emphasis"><em>code_block</em></span> } ] +</p></dd><dt><span class="term"><span class="strong"><tt><a name="kernel.dbapi_db_release_unused_handles"></a>db_release_unused_handles</tt></span></span></dt><dd><pre class="programlisting"> +<span class="strong">db_release_unused_handles</span> +</pre><p>Releases any allocated, unused database handles. </p></dd><dt><span class="term"><span class="strong"><tt><a name="kernel.dbapi_db_transaction"></a>db_transaction</tt></span></span></dt><dd><pre class="programlisting"> +<span class="strong">db_transaction</span> <span class="emphasis"><em>code_block</em></span> [ on_error { <span class="emphasis"><em>code_block</em></span> } ] </pre><p>Executes <span class="emphasis"><em><tt>code_block</tt></em></span> transactionally. Nested transactions are supported (<tt>end transaction</tt> is transparently <tt>ns_db dml</tt>'ed when the outermost transaction completes). The @@ -540,16 +540,16 @@ print_the_foo ; # Writes out "foo is 8" -</pre></dd><dt><span class="term"><span class="strong"><em><tt><a name="kernel.dbapi_db_abort_transaction"></a>db_abort_transaction</tt></em></span> +</pre></dd><dt><span class="term"><span class="strong"><tt><a name="kernel.dbapi_db_abort_transaction"></a>db_abort_transaction</tt></span> </span></dt><dd><pre class="programlisting"> -<span class="strong"><em>db_abort_transaction</em></span> +<span class="strong">db_abort_transaction</span> </pre><p>Aborts all levels of a transaction. That is if this is called within several nested transactions, all of them are terminated. Use this insetead of <tt>db_dml "abort" "abort transaction"</tt>. -</p></dd><dt><span class="term"><span class="strong"><em><tt><a name="kernel.dbapi_db_multirow"></a>db_multirow</tt></em></span></span></dt><dd><pre class="programlisting"> -<span class="strong"><em>db_multirow</em></span> [ -local ] [ -append ] [ -extend <span class="emphasis"><em>column_list</em></span> ] \ +</p></dd><dt><span class="term"><span class="strong"><tt><a name="kernel.dbapi_db_multirow"></a>db_multirow</tt></span></span></dt><dd><pre class="programlisting"> +<span class="strong">db_multirow</span> [ -local ] [ -append ] [ -extend <span class="emphasis"><em>column_list</em></span> ] \ <span class="emphasis"><em>var-name</em></span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> \ [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] \ <span class="emphasis"><em>code_block</em></span> [ if_no_rows <span class="emphasis"><em>if_no_rows_block ]</em></span> @@ -606,14 +606,14 @@ } { set user_url [acs_community_member_url -user_id $user_id] } - </pre></dd><dt><span class="term"><span class="strong"><em><tt><a name="kernel.dbapi_db_resultrows"></a>db_resultrows</tt></em></span></span></dt><dd><pre class="programlisting"> -<span class="strong"><em>db_resultrows</em></span> + </pre></dd><dt><span class="term"><span class="strong"><tt><a name="kernel.dbapi_db_resultrows"></a>db_resultrows</tt></span></span></dt><dd><pre class="programlisting"> +<span class="strong">db_resultrows</span> </pre><p>Returns the number of rows affected or returned by the previous statement. -</p></dd><dt><span class="term"><span class="strong"><em><tt><a name="kernel.dbapi_db_with_handle"></a>db_with_handle</tt></em></span></span></dt><dd><pre class="programlisting"> -<span class="strong"><em>db_with_handle</em></span> <span class="emphasis"><em>var</em></span> <span class="emphasis"><em>code_block</em></span> +</p></dd><dt><span class="term"><span class="strong"><tt><a name="kernel.dbapi_db_with_handle"></a>db_with_handle</tt></span></span></dt><dd><pre class="programlisting"> +<span class="strong">db_with_handle</span> <span class="emphasis"><em>var</em></span> <span class="emphasis"><em>code_block</em></span> </pre><p>Places a database handle into the variable <span class="emphasis"><em><tt>var</tt></em></span> and executes <span class="emphasis"><em><tt>code_block</tt></em></span>. This is useful when you don't want to have to use the new API (<tt>db_foreach</tt>, @@ -636,92 +636,92 @@ } </pre></dd><dt><span class="term"> - <span class="strong"><em> + <span class="strong"> <tt> <a name="kernel.dbapi_db_name"></a>db_name </tt> - </em></span> + </span> </span></dt><dd><pre class="programlisting"> - <span class="strong"><em> + <span class="strong"> <tt>db_name</tt> - </em></span> + </span> </pre><p> Returns the name of the database, as returned by the driver. </p></dd><dt><span class="term"> - <span class="strong"><em> + <span class="strong"> <tt> <a name="kernel.dbapi_db_type"></a>db_type </tt> - </em></span> + </span> </span></dt><dd><pre class="programlisting"> - <span class="strong"><em> + <span class="strong"> <tt>db_type</tt> - </em></span> + </span> </pre><p> Returns the RDBMS type (i.e. oracle, postgresql) this OpenACS installation is using. The nsv ad_database_type is set up during the bootstrap process. </p></dd><dt><span class="term"> - <span class="strong"><em> + <span class="strong"> <tt> <a name="kernel.dbapi_db_compatible_rdbms_p"></a>db_compatible_rdbms_p </tt> - </em></span> + </span> </span></dt><dd><pre class="programlisting"> - <span class="strong"><em>db_compatible_rdbms_p</em></span> db_type + <span class="strong">db_compatible_rdbms_p</span> db_type </pre><p> Returns 1 if the given db_type is compatible with the current RDBMS. </p></dd><dt><span class="term"> - <span class="strong"><em> + <span class="strong"> <tt> <a name="kernel.dbapi_db_package_supports_rdbms_p"></a>db_package_supports_rdbms_p </tt> - </em></span> + </span> </span></dt><dd><pre class="programlisting"> - <span class="strong"><em>db_package_supports_rdbms_p</em></span> db_type_list + <span class="strong">db_package_supports_rdbms_p</span> db_type_list </pre><p> Returns 1 if db_type_list contains the current RDMBS type. A package intended to run with a given RDBMS must note this in it's package info file regardless of whether or not it actually uses the database. </p></dd><dt><span class="term"> - <span class="strong"><em> + <span class="strong"> <tt> <a name="kernel.dbapi_db_legacy_package_p"></a>db_legacy_package_p </tt> - </em></span> + </span> </span></dt><dd><pre class="programlisting"> - <span class="strong"><em>db_legacy_package_p</em></span> db_type_list + <span class="strong">db_legacy_package_p</span> db_type_list </pre><p> Returns 1 if the package is a legacy package. We can only tell for certain if it explicitly supports Oracle 8.1.6 rather than the OpenACS more general oracle. </p></dd><dt><span class="term"> - <span class="strong"><em> + <span class="strong"> <tt> <a name="kernel.dbapi_db_version"></a>db_version </tt> - </em></span> + </span> </span></dt><dd><pre class="programlisting"> - <span class="strong"><em>db_version</em></span> + <span class="strong">db_version</span> </pre><p> Returns the RDBMS version (i.e. 8.1.6 is a recent Oracle version; 7.1 a recent PostgreSQL version. </p></dd><dt><span class="term"> - <span class="strong"><em> + <span class="strong"> <tt> <a name="kernel.dbapi_db_current_rdbms"></a>db_current_rdbms </tt> - </em></span> + </span> </span></dt><dd><pre class="programlisting"> - <span class="strong"><em>db_current_rdbms</em></span> + <span class="strong">db_current_rdbms</span> </pre><p> Returns the current rdbms type and version. </p></dd><dt><span class="term"> - <span class="strong"><em> + <span class="strong"> <tt> <a name="kernel.dbapi_db_known_database_types"></a>db_known_database_types </tt> - </em></span> + </span> </span></dt><dd><pre class="programlisting"> - <span class="strong"><em>db_known_database_types</em></span> + <span class="strong">db_known_database_types</span> </pre><p> Returns a list of three-element lists describing the database engines known to OpenACS. Each sublist contains the internal database name (used in file @@ -731,4 +731,4 @@ The nsv containing the list is initialized by the bootstrap script and should never be referenced directly by user code. Returns the current rdbms type and version. - </p></dd></dl></div><p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="apm-design.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="security-requirements.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4.6.2 Package Manager Design </td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right"> OpenACS 4 Security Requirements</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/db-api-detailed.html#comments">View comments on this page at openacs.org</a></center></body></html> + </p></dd></dl></div><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="apm-design.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="security-requirements.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4.6.2 Package Manager Design&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS 4 Security Requirements</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/db-api-detailed.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/db-api.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/db-api.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/db-api.html 7 Apr 2003 16:59:25 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/db-api.html 15 Apr 2003 17:03:01 -0000 1.8.2.5 @@ -1,17 +1,17 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>The OpenACS Database Access API</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter 9. Development Reference"><link rel="previous" href="request-processor.html" title="The Request Processor"><link rel="next" href="templates.html" title="Using Templates in OpenACS 4.6.2"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="request-processor.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Development Reference</th><td width="20%" align="right"> <a accesskey="n" href="templates.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="db-api"></a>The OpenACS Database Access API</h2></div></div><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>The OpenACS Database Access API</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter�9.�Development Reference"><link rel="previous" href="request-processor.html" title="The Request Processor"><link rel="next" href="templates.html" title="Using Templates in OpenACS 4.6.2"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="request-processor.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�9.�Development Reference</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="templates.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="db-api"></a>The OpenACS Database Access API</h2></div></div><p> By <a href="mailto:psu@arsdigita.com" target="_top">Pete Su</a> and <a href="mailto:jsalz@mit.edu" target="_top">Jon Salz</a>. Modified by Roberto Mello. - </p><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="db-api-overview"></a>Overview</h3></div></div><p> + </p><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="db-api-overview"></a>Overview</h3></div></div><p> One of OpenACS's great strengths is that code written for it is very close to the database. It is very easy to interact with the database from anywhere within OpenACS. Our goal is to develop a coherent API for database access which makes this even easier. </p><p> More detailed information about the DB api is available at <a href="db-api-detailed.html">Database Access API</a>. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="db-api-theoldway"></a>The Old Way</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="db-api-theoldway"></a>The Old Way</h3></div></div><p> Here's a typical block of code from an OpenACS 3.x dynamic page: </p><pre class="programlisting"> set tcl_var "foo" @@ -45,18 +45,18 @@ </pre><p> Writing code like this had the following annoyances: - </p><div class="itemizedlist"><ul type="opencircle"><li style="list-style-type: opencircle"><p> + </p><div class="itemizedlist"><ul type="opencircle"><li style="list-style-type: circle"><p> It was repetitive, tedious and error prone to write the same type of loops over and over again. - </p></li><li style="list-style-type: opencircle"><p> + </p></li><li style="list-style-type: circle"><p> Using Tcl variable interpolation in a literal string, to pass values from the page to the database, is error prone, relatively inefficient, and a good way to compromise the security of a web site. - </p></li><li style="list-style-type: opencircle"><p> + </p></li><li style="list-style-type: circle"><p> Magic like <tt>set_variables_after_query</tt> made code confusing. - </p></li><li style="list-style-type: opencircle"><p> + </p></li><li style="list-style-type: circle"><p> The scope of transactions is not clear from reading the code. - </p></li><li style="list-style-type: opencircle"><p> + </p></li><li style="list-style-type: circle"><p> Passing handles around explicitly made it easy to use them in bad ways, like holding a handle for too long while returning data to a user's browser. @@ -66,7 +66,7 @@ Introduced in ACS 3.4, the new Database API is meant to save developers from the above tedium and provide a more structured syntax for specifying database operations, including transactions. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="db-api-thenewway"></a>The New Way</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="db-api-thenewway"></a>The New Way</h3></div></div><p> Here is how you would code up the example above using the new API. </p><pre class="programlisting"> set count 0 @@ -113,7 +113,7 @@ from a Tcl variable to the database, which we'll cover next. </p></li></ol></div><p> - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="db-api-bindvariables"></a>Bind Variables</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="db-api-bindvariables"></a>Bind Variables</h3></div></div><p> Bind variables are placeholders for literal values in an SQL query being sent to the server. Take the example query above: in the old way, data was generally passed to Oracle directly, via Tcl string @@ -235,7 +235,7 @@ Finally, the DB API has several different styles for passing bind variable values to queries. In general, use the style presented here because it is the most convenient. - </p><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="db-api-bind-vars-usage"></a>Usage</h4></div></div><p>Every <tt>db_*</tt> command accepting a SQL command as an argument + </p><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="db-api-bind-vars-usage"></a>Usage</h4></div></div><p>Every <tt>db_*</tt> command accepting a SQL command as an argument supports bind variables. You can either</p><div class="itemizedlist"><ul type="disc"><li><p> Specify the <tt>-bind</tt> switch to provide a set with bind variable values, or @@ -302,7 +302,7 @@ # of "administrator" } - </pre></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="dbapi_nulls_and_bind_vars"></a>Nulls and Bind Variables</h4></div></div><p> + </pre></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="dbapi_nulls_and_bind_vars"></a>Nulls and Bind Variables</h4></div></div><p> When processing a DML statement, Oracle coerces empty strings into <tt>null</tt>. (This coercion does <span class="emphasis"><em>not</em></span> occur in the <tt>WHERE</tt> clause of a query, i.e. @@ -350,7 +350,7 @@ # # sets the values for both the "bar" and "baz" columns to null - </pre></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="db-api-pooling"></a>Sequence Pooling</h3></div></div><p> + </pre></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="db-api-pooling"></a>Sequence Pooling</h3></div></div><p> The database library can transparently maintain pools of sequence values, so that each request for a new sequence value (using <tt>db_nextval</tt>) does not incur a roundtrip to the server. For instance, this functionality is @@ -381,7 +381,7 @@ <span class="emphasis"><em><tt>yourservername</tt></em></span> <tt>/acs/database]</tt> configuration section.) - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="db-api-basicapi"></a>Basic API</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="db-api-basicapi"></a>Basic API</h3></div></div><p> The Database API has several functions that wrap familiar parts of the AOLserver database API. </p><p> @@ -400,8 +400,8 @@ <tt>db_dml "abort" "abort transaction"</tt>. - </p></dd><dt><span class="term"><span class="strong"><em><tt><a name="devguide.dbapi_db_multirow"></a>db_multirow</tt></em></span></span></dt><dd><pre class="programlisting"> -<span class="strong"><em>db_multirow</em></span> [ -local ] [ -append ] [ -extend <span class="emphasis"><em>column_list</em></span> ] \ + </p></dd><dt><span class="term"><span class="strong"><tt><a name="devguide.dbapi_db_multirow"></a>db_multirow</tt></span></span></dt><dd><pre class="programlisting"> +<span class="strong">db_multirow</span> [ -local ] [ -append ] [ -extend <span class="emphasis"><em>column_list</em></span> ] \ <span class="emphasis"><em>var-name</em></span> <span class="emphasis"><em>statement-name</em></span> <span class="emphasis"><em>sql</em></span> \ [ -bind <span class="emphasis"><em>bind_set_id</em></span> | -bind <span class="emphasis"><em>bind_value_list</em></span> ] \ <span class="emphasis"><em>code_block</em></span> [ if_no_rows <span class="emphasis"><em>if_no_rows_block ]</em></span> @@ -737,4 +737,4 @@ </pre></dd></dl></div><p> </p><div class="cvstag">($Id$)</div><p> - </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="request-processor.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="templates.html">Next</a></td></tr><tr><td width="40%" align="left">The Request Processor </td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right"> Using Templates in OpenACS 4.6.2</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/db-api.html#comments">View comments on this page at openacs.org</a></center></body></html> + </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="request-processor.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="templates.html">Next</a></td></tr><tr><td width="40%" align="left">The Request Processor&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right">&nbsp;Using Templates in OpenACS 4.6.2</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/db-api.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/dev-guide.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/dev-guide.html,v diff -u -r1.7.2.4 -r1.7.2.5 --- openacs-4/packages/acs-core-docs/www/dev-guide.html 30 Mar 2003 20:33:12 -0000 1.7.2.4 +++ openacs-4/packages/acs-core-docs/www/dev-guide.html 15 Apr 2003 17:03:01 -0000 1.7.2.5 @@ -1,2 +1,2 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Chapter 9. Development Reference</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="acs-dev.html" title="Part III. For OpenACS Developers"><link rel="previous" href="tutorial-advanced.html" title="Advanced Topics"><link rel="next" href="packages.html" title="OpenACS 4.6.2 Packages"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="tutorial-advanced.html">Prev</a> </td><th width="60%" align="center">Part III. For OpenACS Developers</th><td width="20%" align="right"> <a accesskey="n" href="packages.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><h2 class="title"><a name="dev-guide"></a>Chapter 9. Development Reference</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="packages.html">OpenACS 4.6.2 Packages</a></dt><dt><a href="objects.html">OpenACS 4.6.2 Data Models and the Object System</a></dt><dt><a href="request-processor.html">The Request Processor</a></dt><dt><a href="db-api.html">The OpenACS Database Access API</a></dt><dt><a href="templates.html">Using Templates in OpenACS 4.6.2</a></dt><dt><a href="permissions.html">Groups, Context, Permissions</a></dt><dt><a href="subsites.html">Writing OpenACS 4.6.2 Application Pages</a></dt><dt><a href="parties.html">Parties in OpenACS 4.6.2</a></dt><dt><a href="permissions-tediously-explained.html">OpenACS 4.x Permissions Tediously Explained</a></dt><dt><a href="object-identity.html">Object Identity</a></dt><dt><a href="programming-with-aolserver.html">Programming with AOLserver</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tutorial-advanced.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="packages.html">Next</a></td></tr><tr><td width="40%" align="left">Advanced Topics </td><td width="20%" align="center"><a accesskey="u" href="acs-dev.html">Up</a></td><td width="40%" align="right"> OpenACS 4.6.2 Packages</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/dev-guide.html#comments">View comments on this page at openacs.org</a></center></body></html> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter�9.�Development Reference</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="acs-dev.html" title="Part�III.�For OpenACS Developers"><link rel="previous" href="tutorial-advanced.html" title="Advanced Topics"><link rel="next" href="packages.html" title="OpenACS 4.6.2 Packages"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="tutorial-advanced.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part�III.�For OpenACS Developers</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="packages.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><h2 class="title"><a name="dev-guide"></a>Chapter�9.�Development Reference</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="packages.html">OpenACS 4.6.2 Packages</a></dt><dt><a href="objects.html">OpenACS 4.6.2 Data Models and the Object System</a></dt><dt><a href="request-processor.html">The Request Processor</a></dt><dt><a href="db-api.html">The OpenACS Database Access API</a></dt><dt><a href="templates.html">Using Templates in OpenACS 4.6.2</a></dt><dt><a href="permissions.html">Groups, Context, Permissions</a></dt><dt><a href="subsites.html">Writing OpenACS 4.6.2 Application Pages</a></dt><dt><a href="parties.html">Parties in OpenACS 4.6.2</a></dt><dt><a href="permissions-tediously-explained.html">OpenACS 4.x Permissions Tediously Explained</a></dt><dt><a href="object-identity.html">Object Identity</a></dt><dt><a href="programming-with-aolserver.html">Programming with AOLserver</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tutorial-advanced.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="packages.html">Next</a></td></tr><tr><td width="40%" align="left">Advanced Topics&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="acs-dev.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS 4.6.2 Packages</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/dev-guide.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/docbook-primer.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/docbook-primer.html,v diff -u -r1.8.2.5 -r1.8.2.6 --- openacs-4/packages/acs-core-docs/www/docbook-primer.html 7 Apr 2003 16:59:25 -0000 1.8.2.5 +++ openacs-4/packages/acs-core-docs/www/docbook-primer.html 15 Apr 2003 17:03:01 -0000 1.8.2.6 @@ -1,9 +1,9 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS Documentation Guide</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="eng-standards.html" title="Chapter 10. Engineering Standards"><link rel="previous" href="eng-standards.html" title="Chapter 10. Engineering Standards"><link rel="next" href="psgml-mode.html" title="Using PSGML mode in Emacs"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="eng-standards.html">Prev</a> </td><th width="60%" align="center">Chapter 10. Engineering Standards</th><td width="20%" align="right"> <a accesskey="n" href="psgml-mode.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="docbook-primer"></a>OpenACS Documentation Guide</h2></div></div><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS Documentation Guide</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="eng-standards.html" title="Chapter�10.�Engineering Standards"><link rel="previous" href="eng-standards.html" title="Chapter�10.�Engineering Standards"><link rel="next" href="psgml-mode.html" title="Using PSGML mode in Emacs"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="eng-standards.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�10.�Engineering Standards</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="psgml-mode.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="docbook-primer"></a>OpenACS Documentation Guide</h2></div></div><p> By <a href="mailto:claus@arsdigita.com" target="_top">claus@arsdigita.com</a>, with additions by <a href="mailto:rmello@fslc.usu.edu" target="_top">Roberto Mello</a> and the OpenACS Community - </p><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-overview"></a>Overview of OpenACS 4.6.2 Documentation</h3></div></div><p> + </p><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-overview"></a>Overview of OpenACS 4.6.2 Documentation</h3></div></div><p> ArsDigita created a good documentation ground for us to build upon. Some sections of the documentation, however, lack details and examples; others are simply nonexistant. Our goal is to give @@ -28,11 +28,11 @@ SGML, with a couple extra rules. More details in the <a href="http://en.tldp.org/LDP/LDP-Author-Guide/docbookxml.html" target="_top">LDP Author Guide</a>. - </li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-why"></a>Why DocBook?</h3></div></div><p> + </li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-why"></a>Why DocBook?</h3></div></div><p> In order to separate content and presentation, all OpenACS documentation will be marked up to conform to the <a href="http://docbook.org/xml/index.html" target="_top">DocBook XML DTD</a> - <a class="indexterm" name="id2871807"></a> + <a class="indexterm" name="id2945009"></a> This enables us to publish in a variety of formats and relieves each contributor of the burden of presentation, freeing him to focus on content and sharing knowledge. @@ -52,16 +52,16 @@ <a href="http://docbook.org/tdg/en/html/part2.html" target="_top"> list of elements</a> and use more exotic features in your documents. The list is made up of SGML-elements but basically - the same elements are valid in the XML DTD <span class="strong"><em>as long as you remember to</em></span>: - <a class="indexterm" name="id2871882"></a> + the same elements are valid in the XML DTD <span class="strong">as long as you remember to</span>: + <a class="indexterm" name="id2945083"></a> </p><div class="itemizedlist"><ul type="disc"><li><p> Always close your tags with corresponding end-tags and to - <span class="strong"><em>not use other tag minimization</em></span> + <span class="strong">not use other tag minimization</span> </p></li><li><p> Write all elements and attributes in lowercase </p></li><li><p> Quote all attributes - </p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-validation"></a>Tools</h3></div></div><p> + </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-validation"></a>Tools</h3></div></div><p> You are going to need the following to work with the OpenACS Docbook XML documentation: </p><div class="itemizedlist"><ul type="disc"><li><a href="http://docbook.org/xml/index.html" target="_top">Docbook XML @@ -81,7 +81,7 @@ mode. We have a <a href="psgml-mode.html" title="Using PSGML mode in Emacs">intro to the PSGML Mode in Emacs</a> as part of our documentation. You can read about other editing tools in the <a href="http://en.tldp.org/LDP/LDP-Author-Guide/" target="_top">LDP Author Guide</a>. - </li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-new-doc"></a>Writing New Docs</h3></div></div><p> + </li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-new-doc"></a>Writing New Docs</h3></div></div><p> After you have the tools mentioned above, you need to define a title for your document. Then start thinking about the possible sections and subsections you will have in your document. Make @@ -95,48 +95,48 @@ for acs-core-docs</a>, especially the <span class="emphasis"><em> Detailed Design Documentation Template</em></span> and the <span class="emphasis"><em>System/Application Requirements Template</em></span>. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-structure"></a>Document Structure</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-structure"></a>Document Structure</h3></div></div><p> The documentation for each package will make up a little "book" that is structured like this - examples are <span class="emphasis"><em>emphasized</em></span>: - <a class="indexterm" name="id2872101"></a> + <a class="indexterm" name="id2944750"></a> </p><pre class="programlisting"> - book : <span class="strong"><em>Docs for one package</em></span> - <span class="emphasis"><em>templating</em></span> + book : <span class="strong">Docs for one package</span> - <span class="emphasis"><em>templating</em></span> | - +--chapter : <span class="strong"><em>One section</em></span> - <span class="emphasis"><em>for developers</em></span> + +--chapter : <span class="strong">One section</span> - <span class="emphasis"><em>for developers</em></span> | ---------+------------------------------------------------------ | - +--sect1 : <span class="strong"><em>Single document</em></span> - <span class="emphasis"><em>requirements</em></span> + +--sect1 : <span class="strong">Single document</span> - <span class="emphasis"><em>requirements</em></span> | - +--sect2 : <span class="strong"><em>Sections</em></span> - <span class="emphasis"><em>functional requirements</em></span> + +--sect2 : <span class="strong">Sections</span> - <span class="emphasis"><em>functional requirements</em></span> | - +--sect3 : <span class="strong"><em>Subsections</em></span> - <span class="emphasis"><em>Programmer's API</em></span> + +--sect3 : <span class="strong">Subsections</span> - <span class="emphasis"><em>Programmer's API</em></span> | - ... : <span class="strong"><em>...</em></span> + ... : <span class="strong">...</span> </pre><p> The actual content is split up into documents that start at a <tt>sect1</tt>-level. These are then tied together in a top-level document that contains all the information above the line. This will be explained in more detail in a later document, and we will provide a set of templates for documenting an entire package. </p><p>For now you can take a look at the <a href="http://openacs.org/cvs/openacs-4/packages/acs-core-docs/www/xml/engineering-standards" target="_top">sources of these DocBook documents</a> to get an idea of how they are tied together. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-sections"></a>Headlines, Sections</h3></div></div><p> - <a class="indexterm" name="id2872234"></a> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-sections"></a>Headlines, Sections</h3></div></div><p> + <a class="indexterm" name="id2946440"></a> Given that your job starts at the <tt>sect1</tt>-level, all your documents should open with a <a href="http://docbook.org/tdg/html/sect1.html" target="_top"><tt><sect1></tt></a>-tag and end with the corresponding <tt></sect1></tt>. </p><p> - <a class="indexterm" name="id2872276"></a> + <a class="indexterm" name="id2946482"></a> You need to feed every <tt><sect1></tt> two attributes. The first attribute, <tt>id</tt>, is standard and can be used with all elements. It comes in very handy when interlinking between documents (more about this when talking about links in <a href="docbook-primer.html#dbprimer-links" title="Links">the section called “Links”</a>). The value of <tt>id</tt> has to be unique throughout the book you're making since the <tt>id</tt>'s in your <tt>sect1</tt>'s will turn into filenames when the book is parsed into HTML. </p><p> - <a class="indexterm" name="id2872338"></a> + <a class="indexterm" name="id2946542"></a> The other attribute is <tt>xreflabel</tt>. The value of this is the text that will appear as the link when referring to this <tt>sect1</tt>. </p><p> @@ -151,16 +151,16 @@ </sect1> </pre><p> - <a class="indexterm" name="id2872391"></a> + <a class="indexterm" name="id2946594"></a> Inside this container your document will be split up into <a href="http://docbook.org/tdg/html/sect2.html" target="_top"><tt><sect2></tt></a>'s, each with the same requirements - <tt>id</tt> and <tt>xreflabel</tt> attributes, and a <tt><title></tt>-tag inside. Actually, the <tt>xreflabel</tt> is never required in sections, but it makes linking to that section a lot easier. </p><p> When it comes to naming your <tt>sect2</tt>'s and below, prefix them with some abbreviation of the <tt>id</tt> in the <tt>sect1</tt> such as <tt>requirements-overview</tt>. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-code"></a>Code</h3></div></div><p> - <a class="indexterm" name="id2872495"></a> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-code"></a>Code</h3></div></div><p> + <a class="indexterm" name="id2946695"></a> For displaying a snippet of code, a filename or anything else you just want to appear as a part of a sentence, we will use the tag <a href="http://docbook.org/tdg/html/computeroutput.html" target="_top"><tt><computeroutput></tt></a>. @@ -169,13 +169,13 @@ For bigger chunks of code such as SQL-blocks, the tag <a href="http://docbook.org/tdg/html/programlisting.html" target="_top"><tt><programlisting></tt></a> is used. Just wrap your code block in it; mono-spacing, indents and all that stuff is taken care of automatically. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-links"></a>Links</h3></div></div><p> - <a class="indexterm" name="id2872563"></a> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-links"></a>Links</h3></div></div><p> + <a class="indexterm" name="id2946763"></a> Linking falls into two different categories: inside the book you're making and outside: - </p><div class="variablelist"><dl><dt><span class="term"><span class="strong"><em>1. Inside linking, cross-referencing other parts of your book</em></span></span></dt><dd><p> + </p><div class="variablelist"><dl><dt><span class="term"><span class="strong">1. Inside linking, cross-referencing other parts of your book</span></span></dt><dd><p> By having unique <tt>id</tt>'s you can cross-reference any part of your book with a simple tag, regardless of where that part is. - </p><p><a class="indexterm" name="id2872607"></a>Check out how I link to a subsection of the Developer's Guide:</p><pre class="programlisting"> + </p><p><a class="indexterm" name="id2946806"></a>Check out how I link to a subsection of the Developer's Guide:</p><pre class="programlisting"> Put this in your XML: @@ -212,8 +212,8 @@ Note that since I haven't provided an <tt>xreflabel</tt> for the subsection, <tt>packages-looks</tt>, the parser will try its best to explain where the link takes you. - </p></dd><dt><span class="term"><span class="strong"><em>2. Linking outside the documentation</em></span></span></dt><dd><p> - <a class="indexterm" name="id2872756"></a> + </p></dd><dt><span class="term"><span class="strong">2. Linking outside the documentation</span></span></dt><dd><p> + <a class="indexterm" name="id2946952"></a> If you're hyper-linking out of the documentation, it works almost the same way as HTML - the tag is just a little different @@ -222,19 +222,19 @@ </p><pre class="programlisting"><ulink url="http://www.oracle.com/">Oracle Corporation</ulink></pre><p> ....will create a hyper-link to Oracle in the HTML-version of the documentation. - </p><p><span class="strong"><em>NOTE:</em></span> Do NOT use ampersands in your hyper links. These are reserved for referencing + </p><p><span class="strong">NOTE:</span> Do NOT use ampersands in your hyper links. These are reserved for referencing entities, which is exactly how you'll make an ampersand: <tt>&amp;</tt> - </p></dd></dl></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-graphics"></a>Graphics</h3></div></div><p> - <span class="emphasis"><em><span class="strong"><em>NOTE:</em></span> Currently this section currently only takes HTML-output into consideration - + </p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-graphics"></a>Graphics</h3></div></div><p> + <span class="emphasis"><em><span class="strong">NOTE:</span> Currently this section currently only takes HTML-output into consideration - not a printed version</em></span> </p><p> <span class="emphasis"><em> - <span class="strong"><em>Another Note:</em></span> Also, it's still not a 100 percent sure that this is how we are going to + <span class="strong">Another Note:</span> Also, it's still not a 100 percent sure that this is how we are going to do it, so if you want to start converting your documents right away, start out with the ones without graphics ;) </em></span> </p><p> - <a class="indexterm" name="id2872866"></a> + <a class="indexterm" name="id2947060"></a> To insert a graphic we use the elements <a href="http://docbook.org/tdg/html/mediaobject.html" target="_top"><tt><mediaobject></tt></a>, <a href="http://docbook.org/tdg/html/imageobject.html" target="_top"><tt><imageobject></tt></a>, @@ -259,10 +259,10 @@ </pre><p> Put your graphics in a separate directory ("images") and link to them only with relative paths. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-lists"></a>Lists</h3></div></div><p> - <a class="indexterm" name="id2872969"></a> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-lists"></a>Lists</h3></div></div><p> + <a class="indexterm" name="id2947160"></a> Here's how you make the DocBook equivalent of the three usual HTML-lists: - </p><div class="variablelist"><dl><dt><span class="term"><span class="strong"><em>1. How to make an <ul></em></span></span></dt><dd><p> + </p><div class="variablelist"><dl><dt><span class="term"><span class="strong">1. How to make an <ul></span></span></dt><dd><p> Making an unordered list is pretty much like doing the same thing in HTML - if you close your <tt><li></tt>, that is. The only differences are that each list item has to be wrapped in something more, such as <tt><para></tt>, and that the tags are called <a href="http://docbook.org/tdg/html/itemizedlist.html" target="_top"><tt><itemizedlist></tt></a> @@ -275,7 +275,7 @@ <listitem><para>More stuff goes here</para></listitem> </itemizedlist> - </pre></dd><dt><span class="term"><span class="strong"><em>2. How to make an <ol></em></span></span></dt><dd><p> + </pre></dd><dt><span class="term"><span class="strong">2. How to make an <ol></span></span></dt><dd><p> The ordered list is like the preceding, except that you use <a href="http://docbook.org/tdg/html/orderedlist.html" target="_top"><tt><orderedlist></tt></a> instead:</p><pre class="programlisting"> <orderedlist> @@ -284,7 +284,7 @@ <listitem><para>More stuff goes here</para></listitem> </orderedlist> - </pre></dd><dt><span class="term"><span class="strong"><em>3. How to make a <dl></em></span></span></dt><dd><p> + </pre></dd><dt><span class="term"><span class="strong">3. How to make a <dl></span></span></dt><dd><p> This kind of list is called a <tt>variablelist</tt> and these are the tags you'll need to make it happen: <a href="http://docbook.org/tdg/html/variablelist.html" target="_top"><tt><variablelist></tt></a>, @@ -304,8 +304,8 @@ </varlistentry> </variablelist> - </pre></dd></dl></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-tables"></a>Tables</h3></div></div><p> - <a class="indexterm" name="id2873204"></a> + </pre></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-tables"></a>Tables</h3></div></div><p> + <a class="indexterm" name="id2949632"></a> DocBook supports several types of tables, but in most cases, the <a href="http://docbook.org/tdg/html/informaltable.html" target="_top"><tt><informaltable></tt></a> is enough: @@ -337,18 +337,18 @@ </informaltable> </pre><p> With our current XSL-style-sheet, the output of the markup above will be a simple HTML-table: - </p><blockquote class="blockquote"><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><tbody><tr><td>a1</td><td>b1</td><td>c1</td></tr><tr><td>a2</td><td>b2</td><td>c2</td></tr><tr><td>a3</td><td>b3</td><td>c3</td></tr></tbody></table></div></blockquote><p> + </p><div class="blockquote"><blockquote class="blockquote"><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><tbody><tr><td>a1</td><td>b1</td><td>c1</td></tr><tr><td>a2</td><td>b2</td><td>c2</td></tr><tr><td>a3</td><td>b3</td><td>c3</td></tr></tbody></table></div></blockquote></div><p> If you want cells to span more than one row or column, it gets a bit more complicated - check out <a href="http://docbook.org/tdg/html/table.html" target="_top"><tt><table></tt></a> for an example. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-emphasis"></a>Emphasis</h3></div></div><p> - <a class="indexterm" name="id2873355"></a> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-emphasis"></a>Emphasis</h3></div></div><p> + <a class="indexterm" name="id2949783"></a> Our documentation uses two flavors of emphasis - italics and bold type. DocBook uses one - <a href="http://docbook.org/tdg/html/emphasis.html" target="_top"><tt><emphasis></tt></a>. </p><p> The <tt><emphasis></tt> tag defaults to italics when parsed. If you're looking for emphasizing with bold type, use <tt><emphasis role="strong"></tt>. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-indexing"></a>Indexing Your DocBook Documents</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-indexing"></a>Indexing Your DocBook Documents</h3></div></div><p> Marking up index-words may not have any importance for the HTML-output, but in order to make it easier to make a nice print-version of the documentation, you should mark up words in your documents that you would like to see show up in an index one day. @@ -358,7 +358,7 @@ <a href="http://docbook.org/tdg/html/primary.html" target="_top"><tt><primary></tt></a> and <a href="http://docbook.org/tdg/html/secondary.html" target="_top"><tt><secondary></tt></a> for this. See these links for an explanation. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-converting"></a>Converting to HTML</h3></div></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-converting"></a>Converting to HTML</h3></div></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3> This section is quoted almost verbatim from the LDP Author Guide. </div><p> Once you have the <a href="docbook-primer.html#dbprimer-validation">Docbook Tools</a> @@ -376,7 +376,7 @@ </p><pre class="programlisting"> bash$ xsltproc -o outputfilename.xml /usr/share/sgml/docbook/stylesheet/xsl/nwalsh/html/html.xsl filename.xml </pre><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3> - This example uses Daniel Veillard's <span class="strong"><em>xsltproc</em></span> command available + This example uses Daniel Veillard's <span class="strong">xsltproc</span> command available as part of libxslt from <a href="http://www.xmlsoft.org/XSLT/" target="_top">http://www.xmlsoft.org/XSLT/</a>. If you are using other XML processors such as Xalan or Saxon, you will need to change the command line appropriately. @@ -386,7 +386,7 @@ following command: </p><pre class="programlisting"> bash$ xsltproc /usr/share/sgml/docbook/stylesheet/xsl/nwalsh/html/chunk.xsl filename.xml - </pre></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="db-primer-further-reading"></a>Further Reading</h3></div></div><div class="itemizedlist"><ul type="disc"><li> + </pre></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="db-primer-further-reading"></a>Further Reading</h3></div></div><div class="itemizedlist"><ul type="disc"><li> The <a href="http://en.tldp.org/LDP/LDP-Author-Guide/" target="_top">LDP Author Guide</a> has a lot of good information, a table of docbook elements and their "look" in HTML and lots of good links @@ -416,9 +416,9 @@ <a href="http://developer.arsdigita.com/working-papers/bcalef/html-to-docbook.html#html2docbook" target="_top">Perl script</a> that gets you most of the way. - </p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-rev-history"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><thead><tr><th>Document Revision #</th><th>Action Taken, Notes</th><th>When?</th><th>By Whom?</th></tr></thead><tbody><tr><td>0.4</td><td> + </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="dbprimer-rev-history"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><thead><tr><th>Document Revision #</th><th>Action Taken, Notes</th><th>When?</th><th>By Whom?</th></tr></thead><tbody><tr><td>0.4</td><td> Fixed some typos. </td><td>8/3/2002</td><td>Vinod Kurup</td></tr><tr><td>0.3</td><td> Added OpenACS information, updated tools, added extra links and added info to the Publishing section. - </td><td>12/24/2001</td><td>Roberto Mello</td></tr><tr><td>0.2</td><td>Changed recommendation from <phrase> to <emphasis role="strong"></td><td>01/19/2000</td><td>Claus Rasmussen</td></tr><tr><td>0.1</td><td>Creation</td><td>12/2000</td><td>Claus Rasmussen</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="eng-standards.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="psgml-mode.html">Next</a></td></tr><tr><td width="40%" align="left">Chapter 10. Engineering Standards </td><td width="20%" align="center"><a accesskey="u" href="eng-standards.html">Up</a></td><td width="40%" align="right"> Using PSGML mode in Emacs</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/docbook-primer.html#comments">View comments on this page at openacs.org</a></center></body></html> + </td><td>12/24/2001</td><td>Roberto Mello</td></tr><tr><td>0.2</td><td>Changed recommendation from <phrase> to <emphasis role="strong"></td><td>01/19/2000</td><td>Claus Rasmussen</td></tr><tr><td>0.1</td><td>Creation</td><td>12/2000</td><td>Claus Rasmussen</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="eng-standards.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="psgml-mode.html">Next</a></td></tr><tr><td width="40%" align="left">Chapter�10.�Engineering Standards&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="eng-standards.html">Up</a></td><td width="40%" align="right">&nbsp;Using PSGML mode in Emacs</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/docbook-primer.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/eng-standards-constraint-naming.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/eng-standards-constraint-naming.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/eng-standards-constraint-naming.html 7 Apr 2003 16:59:25 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/eng-standards-constraint-naming.html 15 Apr 2003 17:03:01 -0000 1.8.2.5 @@ -1,8 +1,8 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Constraint naming standard</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="eng-standards.html" title="Chapter 10. Engineering Standards"><link rel="previous" href="eng-standards-versioning.html" title="Release Version Numbering"><link rel="next" href="eng-standards-filenaming.html" title="ACS File Naming and Formatting Standards"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="eng-standards-versioning.html">Prev</a> </td><th width="60%" align="center">Chapter 10. Engineering Standards</th><td width="20%" align="right"> <a accesskey="n" href="eng-standards-filenaming.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="eng-standards-constraint-naming"></a>Constraint naming standard</h2></div></div><div class="authorblurb"><p><p>By <a href="mailto:mbryzek@arsdigita.com" target="_top">mbryzek@arsdigita.com</a></p><br> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Constraint naming standard</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="eng-standards.html" title="Chapter�10.�Engineering Standards"><link rel="previous" href="eng-standards-versioning.html" title="Release Version Numbering"><link rel="next" href="eng-standards-filenaming.html" title="ACS File Naming and Formatting Standards"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="eng-standards-versioning.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�10.�Engineering Standards</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="eng-standards-filenaming.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="eng-standards-constraint-naming"></a>Constraint naming standard</h2></div></div><div class="authorblurb"><p><p>By <a href="mailto:mbryzek@arsdigita.com" target="_top">mbryzek@arsdigita.com</a></p><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-constraint-naming-big-picture"></a>The Big Picture</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-constraint-naming-big-picture"></a>The Big Picture</h3></div></div><p> Constraint naming standard is important for one reason: The SYS_* name oracle assigns to unnamed constraints is not very understandable. By correctly naming all contraints, we can quickly associate a particular constraint @@ -11,14 +11,14 @@ </p><div>Why do we need a naming convention? </div><p> <a href="http://oradoc.photo.net/ora8doc/DOC/server803/A54647_01/ch2.htm#2956" target="_top">Oracle limits names</a>, in general, to 30 characters, which is hardly enough for a human readable constraint name. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-constraint-naming-abbr"></a>Abbreviations</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-constraint-naming-abbr"></a>Abbreviations</h3></div></div><p> We propose the following naming convention for all constraints, with the following abbreviations taken from Oracle Docs at <a href="http://oradoc.photo.net/ora81/DOC/server.815/a67779/ch4e.htm#8953" target="_top"> http://oradoc.photo.net/ora81/DOC/server.815/a67779/ch4e.htm#8953</a>. Note that we shortened all of the constraint abbrevations to two characters to save room. -</p><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Constraint type</th><th>Abbreviation</th></tr></thead><tbody><tr><td>references (foreign key)</td><td>fk</td></tr><tr><td>unique</td><td>un</td></tr><tr><td>primary key</td><td>pk</td></tr><tr><td>check</td><td>ck</td></tr><tr><td>not null</td><td>nn</td></tr></tbody></table></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-constraint-naming-format"></a>Format of constraint name</h3></div></div><p> +</p><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Constraint type</th><th>Abbreviation</th></tr></thead><tbody><tr><td>references (foreign key)</td><td>fk</td></tr><tr><td>unique</td><td>un</td></tr><tr><td>primary key</td><td>pk</td></tr><tr><td>check</td><td>ck</td></tr><tr><td>not null</td><td>nn</td></tr></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-constraint-naming-format"></a>Format of constraint name</h3></div></div><p> <table name>_<column_name>_<constraint abbreviation> </p><p> In reality, this won't be possible because of the character limitation on @@ -28,7 +28,7 @@ </p></li><li><p> Truncate the column name until it fits.</p></li></ol></div><p> If the constraint name is still too long, you should consider rewriting your entire data model :) -</p><p><span class="strong"><em>Notes:</em></span></p><div class="itemizedlist"><ul type="disc"><li><p> If you have to abbreviate the table name for one of the constraints, abbreviate it for all the constraints</p></li><li><p> If you are defining a multi column constraint, try to truncate the two column names evenly </p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-constraint-naming-example"></a>Example</h3></div></div><pre class="programlisting"> +</p><p><span class="strong">Notes:</span></p><div class="itemizedlist"><ul type="disc"><li><p> If you have to abbreviate the table name for one of the constraints, abbreviate it for all the constraints</p></li><li><p> If you are defining a multi column constraint, try to truncate the two column names evenly </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-constraint-naming-example"></a>Example</h3></div></div><pre class="programlisting"> create table example_topics ( topic_id integer constraint example_topics_topic_id_pk @@ -52,7 +52,7 @@ constraint cne_example_id_one_line_unq unique(example_id, one_line_description) ); -</pre></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-constraint-naming-pk"></a>Why it's good to name primary keys</h3></div></div><p> +</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-constraint-naming-pk"></a>Why it's good to name primary keys</h3></div></div><p> Naming primary keys might not have any obvious advantages. However, here's an example where naming the primary key really helps (and this is by no means a rare case! @@ -73,7 +73,7 @@ </pre><p> Isn't it nice to see "EXAMPLE_TOPICS_TOPIC_ID_PK" in the trace and know exactly which table oracle is using at each step? -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-constraint-naming-nn"></a>Naming not null constraints is optional...</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-constraint-naming-nn"></a>Naming not null constraints is optional...</h3></div></div><p> ArsDigita is split on whether or not we should be naming not null constraints... So, if you want to name them, please do so and follow the above naming standard. But, naming not null constraints is not a requirement at ArsDigita. </p><p> </p><div>About Naming the not null constraints</div><p> @@ -82,4 +82,4 @@ debugging (e.g. the error will say something like "Cannot insert null value into column"), we recommend naming not null constraints to be consistent in our naming of all constraints. -</p><p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="eng-standards-versioning.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="eng-standards-filenaming.html">Next</a></td></tr><tr><td width="40%" align="left">Release Version Numbering </td><td width="20%" align="center"><a accesskey="u" href="eng-standards.html">Up</a></td><td width="40%" align="right"> ACS File Naming and Formatting Standards</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/eng-standards-constraint-naming.html#comments">View comments on this page at openacs.org</a></center></body></html> +</p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="eng-standards-versioning.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="eng-standards-filenaming.html">Next</a></td></tr><tr><td width="40%" align="left">Release Version Numbering&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="eng-standards.html">Up</a></td><td width="40%" align="right">&nbsp;ACS File Naming and Formatting Standards</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/eng-standards-constraint-naming.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/eng-standards-filenaming.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/eng-standards-filenaming.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/eng-standards-filenaming.html 7 Apr 2003 16:59:25 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/eng-standards-filenaming.html 15 Apr 2003 17:03:01 -0000 1.8.2.5 @@ -1,60 +1,60 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>ACS File Naming and Formatting Standards</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="eng-standards.html" title="Chapter 10. Engineering Standards"><link rel="previous" href="eng-standards-constraint-naming.html" title="Constraint naming standard"><link rel="next" href="eng-standards-plsql.html" title="PL/SQL Standards"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="eng-standards-constraint-naming.html">Prev</a> </td><th width="60%" align="center">Chapter 10. Engineering Standards</th><td width="20%" align="right"> <a accesskey="n" href="eng-standards-plsql.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="eng-standards-filenaming"></a>ACS File Naming and Formatting Standards</h2></div></div><div class="authorblurb"><p><p>By <a href="mailto:michael@arsdigita.com" target="_top">michael@arsdigita.com</a> and +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ACS File Naming and Formatting Standards</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="eng-standards.html" title="Chapter�10.�Engineering Standards"><link rel="previous" href="eng-standards-constraint-naming.html" title="Constraint naming standard"><link rel="next" href="eng-standards-plsql.html" title="PL/SQL Standards"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="eng-standards-constraint-naming.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�10.�Engineering Standards</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="eng-standards-plsql.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="eng-standards-filenaming"></a>ACS File Naming and Formatting Standards</h2></div></div><div class="authorblurb"><p><p>By <a href="mailto:michael@arsdigita.com" target="_top">michael@arsdigita.com</a> and <a href="mailto:aure@arsdigita.com" target="_top">aure@arsdigita.com</a></p><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. </p></div><p> To ensure consistency (and its collateral benefit, maintainability), we define and adhere to standards in the following areas: -</p><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-filenaming-nomenclature"></a>File Nomenclature</h3></div></div><p> +</p><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-filenaming-nomenclature"></a>File Nomenclature</h3></div></div><p> Usually we organize our files so that they mainly serve one of the following three purposes: </p><div class="itemizedlist"><ul type="disc"><li><p> displaying objects and their properties</p></li><li><p> manipulating or acting on objects in some way (by creating, editing, linking, etc)</p></li><li><p> housing procedures, packages, data models and other prerequisite code Essentially, we want our files named in a fashion that reflects their purpose.</p></li></ul></div><p> Under the page root (and the template root if using the <a href="style" target="_top">Style package</a>): -</p><div class="itemizedlist"><ul type="disc"><li><p>For naming files that enable a specific action on an object, use this format:</p><blockquote class="blockquote"><p> +</p><div class="itemizedlist"><ul type="disc"><li><p>For naming files that enable a specific action on an object, use this format:</p><div class="blockquote"><blockquote class="blockquote"><p> <span class="emphasis"><em><tt>object-verb.extension</tt></em></span> -</p></blockquote><p> +</p></blockquote></div><p> For example, the page to erase a user's portrait from the database is <tt>/admin/users/portrait-erase.tcl</tt>. </p></li><li><p>However, modules typically deal with only one primary type of object - e.g., the Bookmarks module deals mainly with bookmarks - and so action-type files in modules don't need to be specified by the object they act on. Example: the user pages for the Bookmarks module live in the <tt>/bookmarks/</tt> directory, and so there is no need to name the bookmark editing page with a redundant url: <tt>/bookmarks/bookmark-edit.tcl</tt>. Instead, we omit the object type, and use this convention: -</p><blockquote class="blockquote"><p> +</p><div class="blockquote"><blockquote class="blockquote"><p> <span class="emphasis"><em><tt>verb.extension</tt></em></span> -</p></blockquote><p> +</p></blockquote></div><p> Thus, the page to edit a bookmark is <tt>/bookmarks/edit.tcl</tt>. -</p></li><li><p>For naming files that display the properties of a primary object - such as the bookmark object within the bookmark module - use this convention:</p><blockquote class="blockquote"><p> +</p></li><li><p>For naming files that display the properties of a primary object - such as the bookmark object within the bookmark module - use this convention:</p><div class="blockquote"><blockquote class="blockquote"><p> <tt>one.</tt><span class="emphasis"><em><tt>extension</tt></em></span> -</p></blockquote><p> +</p></blockquote></div><p> For example, the page to view one bookmark is <tt>/bookmarks/one.tcl</tt>. Note that no verb is necessary for display-type files. -</p></li><li><p>Otherwise, if the object to be displayed is not the primary feature of a module, simply omit the verb and use the object name:</p><blockquote class="blockquote"><p> +</p></li><li><p>Otherwise, if the object to be displayed is not the primary feature of a module, simply omit the verb and use the object name:</p><div class="blockquote"><blockquote class="blockquote"><p> <span class="emphasis"><em><tt>object.extension</tt></em></span> -</p></blockquote><p> +</p></blockquote></div><p> For example, the page to view the properties of an ecommerce product is <tt>/ecommerce/product.tcl</tt>. -</p></li><li><p>For naming files in a page flow, use the convention:</p><div class="itemizedlist"><ul type="round"><li><p><span class="emphasis"><em><tt>foobar.extension</tt></em></span> (Step 1)</p></li><li><p><span class="emphasis"><em><tt>foobar-2.extension</tt></em></span> (Step 2)</p></li><li><p>...</p></li><li><p><span class="emphasis"><em><tt>foobar-N.extension</tt></em></span> (Step N)</p></li></ul></div><p> +</p></li><li><p>For naming files in a page flow, use the convention:</p><div class="itemizedlist"><ul type="circle"><li><p><span class="emphasis"><em><tt>foobar.extension</tt></em></span> (Step 1)</p></li><li><p><span class="emphasis"><em><tt>foobar-2.extension</tt></em></span> (Step 2)</p></li><li><p>...</p></li><li><p><span class="emphasis"><em><tt>foobar-N.extension</tt></em></span> (Step N)</p></li></ul></div><p> where <span class="emphasis"><em><tt>foobar</tt></em></span> is determined by the above rules. </p><p> Typically, we use a three-step page flow when taking user information: </p><div class="orderedlist"><ol type="1"><li><p>Present a form to the user</p></li><li><p>Present a confirmation page to the user</p></li><li><p>Perform the database transaction, then redirect</p></li></ol></div></li><li><p>Put data model files in <tt>/www/doc/sql</tt>, and name them for the modules towards which they are used: -</p><blockquote class="blockquote"><p> +</p><div class="blockquote"><blockquote class="blockquote"><p> <span class="emphasis"><em><tt>module</tt></em></span><tt>.sql</tt> -</p></blockquote></li></ul></div><p> +</p></blockquote></div></li></ul></div><p> In the Tcl library directory: </p><div class="itemizedlist"><ul type="disc"><li><p>For files that contain module-specific procedures, use the -convention:</p><blockquote class="blockquote"><p> +convention:</p><div class="blockquote"><blockquote class="blockquote"><p> <span class="emphasis"><em><tt>module</tt></em></span><tt>-procs.tcl</tt> -</p></blockquote></li><li><p>For files that contain procedures that are part of the core ACS, -use the convention:</p><blockquote class="blockquote"><p> +</p></blockquote></div></li><li><p>For files that contain procedures that are part of the core ACS, +use the convention:</p><div class="blockquote"><blockquote class="blockquote"><p> <tt>ad-</tt><span class="emphasis"><em>description</em></span><tt>-procs.tcl</tt> -</p></blockquote></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-filenaming-urls"></a>URLs</h3></div></div><p> +</p></blockquote></div></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-filenaming-urls"></a>URLs</h3></div></div><p> File names also appear <span class="emphasis"><em>within</em></span> pages, as linked URLs and form targets. When they do, always use <a href="abstract-url" target="_top">abstract URLs</a> (e.g., <tt>user-delete</tt> instead of @@ -68,17 +68,17 @@ (<tt>/top-level-dir/</tt>). If linking to the directory in which the page is located, use the empty string (<tt>""</tt>), which browsers will resolve correctly. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-filenaming-headers"></a>File Headers and Page Input</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-filenaming-headers"></a>File Headers and Page Input</h3></div></div><p> Include the appropriate standard header in all scripts. The first line should be a comment specifying the file path relative to the ACS root directory. e.g. -</p><blockquote class="blockquote"><p><tt> +</p><div class="blockquote"><blockquote class="blockquote"><p><tt> # /www/index.tcl -</tt></p></blockquote><p> +</tt></p></blockquote></div><p> or -</p><blockquote class="blockquote"><p><tt> +</p><div class="blockquote"><blockquote class="blockquote"><p><tt> # /tcl/module-defs.tcl -</tt></p></blockquote><p> +</tt></p></blockquote></div><p> For static content files (html or adp), include a CVS identification tag as a comment at the top of the file, e.g. </p><pre class="programlisting"> @@ -94,7 +94,7 @@ </p> </pre><p> This can be at the top or bottom of the file. -</p><p><div>Using ad_page_contract</div><p> +</p><div>Using ad_page_contract</div><p> For non-library Tcl files (those not in the private Tcl directory), use <a href="tcl-doc.html#tcl-doc-ad-page-contract" title="ad_page_contract"><tt>ad_page_contract</tt></a> after the file path comment (this supersedes set_the_usual_form_variables and @@ -141,7 +141,7 @@ QQvariables, which were automatically created by ad_page_variables and set_the_usual_form_variables. The use of bind variables makes such previous variable syntax obsolete. -</p></li></ul></div><p><div>Using ad_library</div><p> +</p></li></ul></div><div>Using ad_library</div><p> For shared Tcl library files, use <a href="tcl-doc.html#tcl-doc-ad-library" title="ad_library"><tt>ad_library</tt></a> after the file path comment. Its only argument is a doc_string in the standard (javadoc-style) format, like @@ -156,7 +156,7 @@ @author John Doe (jdoe@arsdigita.com) @cvs-id file-standards.html,v 1.2 2000/09/19 07:22:45 ron Exp } -</pre><p><div>Non-Tcl Files</div><p> +</pre><div>Non-Tcl Files</div><p> For SQL and other non-Tcl source files, the following file header structure is recommended: </p><pre class="programlisting"> -- <span class="emphasis"><em>path relative to the ACS root directory</em></span> @@ -170,7 +170,7 @@ </pre><p> Of course, replace "<tt>--</tt>" with the comment delimiter appropriate for the language in which you are programming. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-filenaming-pages"></a>Page Construction</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-filenaming-pages"></a>Page Construction</h3></div></div><p> Construct the page as one Tcl variable (name it <tt>page_content</tt>), and then send it back to the browser with one call to <tt>doc_return</tt>, which will call @@ -226,7 +226,7 @@ edit ad_header (which quite possibly can start a <table>) and ad_footer (which may need to end the table started in ad_footer) to customize the look and feel of the entire site. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-filenaming-tcllib"></a>Tcl Library Files</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-filenaming-tcllib"></a>Tcl Library Files</h3></div></div><p> Further standards for Tcl library files are under discussion; we plan to include naming conventions for procs. -</p><p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="eng-standards-constraint-naming.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="eng-standards-plsql.html">Next</a></td></tr><tr><td width="40%" align="left">Constraint naming standard </td><td width="20%" align="center"><a accesskey="u" href="eng-standards.html">Up</a></td><td width="40%" align="right"> PL/SQL Standards</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/eng-standards-filenaming.html#comments">View comments on this page at openacs.org</a></center></body></html> +</p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="eng-standards-constraint-naming.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="eng-standards-plsql.html">Next</a></td></tr><tr><td width="40%" align="left">Constraint naming standard&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="eng-standards.html">Up</a></td><td width="40%" align="right">&nbsp;PL/SQL Standards</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/eng-standards-filenaming.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/eng-standards-plsql.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/eng-standards-plsql.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/eng-standards-plsql.html 7 Apr 2003 16:59:25 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/eng-standards-plsql.html 15 Apr 2003 17:03:01 -0000 1.8.2.5 @@ -1,5 +1,5 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>PL/SQL Standards</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="eng-standards.html" title="Chapter 10. Engineering Standards"><link rel="previous" href="eng-standards-filenaming.html" title="ACS File Naming and Formatting Standards"><link rel="next" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="eng-standards-filenaming.html">Prev</a> </td><th width="60%" align="center">Chapter 10. Engineering Standards</th><td width="20%" align="right"> <a accesskey="n" href="kernel-doc.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="eng-standards-plsql"></a>PL/SQL Standards</h2></div></div><div class="authorblurb"><p><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>PL/SQL Standards</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="eng-standards.html" title="Chapter�10.�Engineering Standards"><link rel="previous" href="eng-standards-filenaming.html" title="ACS File Naming and Formatting Standards"><link rel="next" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="eng-standards-filenaming.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�10.�Engineering Standards</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="kernel-doc.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="eng-standards-plsql"></a>PL/SQL Standards</h2></div></div><div class="authorblurb"><p><p> By <a href="mailto:richardl@arsdigita.com" target="_top">richardl@arsdigita.com</a> and <a href="mailto:yon@arsdigita.com" target="_top">yon@arsdigita.com</a> </p><br> @@ -12,7 +12,7 @@ our product will be useful long after the current people building and maintaining it are around. Following are some standards and guidelines that will help us achieve this goal: -</p><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-plsql-general"></a>General</h3></div></div><div class="orderedlist"><ol type="1"><li><p> +</p><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-plsql-general"></a>General</h3></div></div><div class="orderedlist"><ol type="1"><li><p> All PL/SQL code must be well documented. We must write code that is maintainable by others, this is especially true in our case because we are building an open source toolkit than anyone can @@ -24,7 +24,7 @@ as is possible given the nature of team development. This means carrying style and other conventions suchs as naming within an application, not just within one file. - </p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-plsql-code"></a>Code</h3></div></div><div class="orderedlist"><ol type="1"><li><p> + </p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-plsql-code"></a>Code</h3></div></div><div class="orderedlist"><ol type="1"><li><p> Encapsulation of related fuctionality is key to maintainability and upgradeability of our software. Try to bundle your code into <a href="http://oradoc.photo.net/ora816/appdev.816/a77069/08_packs.htm#4376" target="_top">packages</a> @@ -143,7 +143,7 @@ click protection, that is, tehy have already gotten an <tt>object_id</tt> and now they want to create the object with that <tt>object_id</tt>. - </p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-style"></a>Style</h3></div></div><p> + </p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-style"></a>Style</h3></div></div><p> Some general style guidelines to follow for the purpose of consistency across applications. </p><div class="orderedlist"><ol type="1"><li><p> @@ -153,4 +153,4 @@ as possible to all source code readers. </p></li><li><p> Lowercase everything, with the exception of %TYPE and %ROWTYPE. - </p></li></ol></div><p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="eng-standards-filenaming.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="kernel-doc.html">Next</a></td></tr><tr><td width="40%" align="left">ACS File Naming and Formatting Standards </td><td width="20%" align="center"><a accesskey="u" href="eng-standards.html">Up</a></td><td width="40%" align="right"> Chapter 11. Kernel Documentation</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/eng-standards-plsql.html#comments">View comments on this page at openacs.org</a></center></body></html> + </p></li></ol></div><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="eng-standards-filenaming.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="kernel-doc.html">Next</a></td></tr><tr><td width="40%" align="left">ACS File Naming and Formatting Standards&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="eng-standards.html">Up</a></td><td width="40%" align="right">&nbsp;Chapter�11.�Kernel Documentation</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/eng-standards-plsql.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/eng-standards-versioning.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/eng-standards-versioning.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/eng-standards-versioning.html 7 Apr 2003 16:59:25 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/eng-standards-versioning.html 15 Apr 2003 17:03:02 -0000 1.8.2.5 @@ -1,12 +1,12 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Release Version Numbering</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="eng-standards.html" title="Chapter 10. Engineering Standards"><link rel="previous" href="requirements-template.html" title="System/Application Requirements Template"><link rel="next" href="eng-standards-constraint-naming.html" title="Constraint naming standard"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="requirements-template.html">Prev</a> </td><th width="60%" align="center">Chapter 10. Engineering Standards</th><td width="20%" align="right"> <a accesskey="n" href="eng-standards-constraint-naming.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="eng-standards-versioning"></a>Release Version Numbering</h2></div></div><div class="authorblurb"><p><p>By <a href="mailto:ron@arsdigita.com" target="_top">Ron Henderson</a></p><br> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Release Version Numbering</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="eng-standards.html" title="Chapter�10.�Engineering Standards"><link rel="previous" href="requirements-template.html" title="System/Application Requirements Template"><link rel="next" href="eng-standards-constraint-naming.html" title="Constraint naming standard"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="requirements-template.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�10.�Engineering Standards</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="eng-standards-constraint-naming.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="eng-standards-versioning"></a>Release Version Numbering</h2></div></div><div class="authorblurb"><p><p>By <a href="mailto:ron@arsdigita.com" target="_top">Ron Henderson</a></p><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. </p></div><p> OpenACS version numbers help identify at a high-level what is in a particular release and what has changed since the last release. A "version number" is really just a string of the form: -</p><blockquote class="blockquote"><p><span class="emphasis"><em>major</em></span>-<span class="emphasis"><em>minor</em></span>-<span class="emphasis"><em>release</em></span></p></blockquote><p> +</p><div class="blockquote"><blockquote class="blockquote"><p><span class="emphasis"><em>major</em></span>-<span class="emphasis"><em>minor</em></span>-<span class="emphasis"><em>release</em></span></p></blockquote></div><p> A change in the <span class="emphasis"><em>major</em></span> version number indicates a fundamental change in the architecture of the system, e.g. OpenACS 3 to ACS 4. A change in the <span class="emphasis"><em>minor</em></span> version number signifies the addition of @@ -72,12 +72,12 @@ </pre><p> In the future, OpenACS packages should follow this same convention on version numbers. -</p><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-transition-rules"></a>Transition Rules</h3></div></div><p>So what distinguishes an <span class="emphasis"><em>alpha</em></span> release from a <span class="emphasis"><em>beta</em></span> +</p><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="eng-standards-transition-rules"></a>Transition Rules</h3></div></div><p>So what distinguishes an <span class="emphasis"><em>alpha</em></span> release from a <span class="emphasis"><em>beta</em></span> release? Or from a production release? We follow a specific set of rules for how OpenACS makes the transition from one state of maturity to the next.</p><p> Every release must pass the minimum requirements that it cleanly installs and cleanly upgrades from the previous version of OpenACS. In -addition to this the <span class="emphasis"><em>release</em></span> label implies:</p><blockquote class="blockquote"><div class="variablelist"><dl><dt><span class="term"><span class="emphasis"><em>development</em></span> +addition to this the <span class="emphasis"><em>release</em></span> label implies:</p><div class="blockquote"><blockquote class="blockquote"><div class="variablelist"><dl><dt><span class="term"><span class="emphasis"><em>development</em></span> </span></dt><dd><p>This is the default state for the head of the current release branch. We make no guarantees about this code.</p></dd><dt><span class="term"><span class="emphasis"><em>alpha</em></span> </span></dt><dd><p>All tickets of severity <span class="emphasis"><em>critical</em></span> have been closed and the @@ -86,9 +86,9 @@ and all documentation is up to date (version history, release notes, new module docs, etc.).</p></dd><dt><span class="term"><span class="emphasis"><em>production</em></span> [0, 1, ...] </span></dt><dd><p>All tickets of severity <span class="emphasis"><em>medium</em></span> or greater have been closed, -including issues reported from outside users.</p></dd></dl></div></blockquote><p> In the future we will guarantee that more mature releases +including issues reported from outside users.</p></dd></dl></div></blockquote></div><p> In the future we will guarantee that more mature releases incorporate all the fixes for earlier problems by developing a detailed set of regression tests. For now we try to enforce this by restricting work on the release branch to fixing reported problem in the current release, e.g. no new features or big changes to -fundamental behavior.</p><p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="requirements-template.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="eng-standards-constraint-naming.html">Next</a></td></tr><tr><td width="40%" align="left">System/Application Requirements Template </td><td width="20%" align="center"><a accesskey="u" href="eng-standards.html">Up</a></td><td width="40%" align="right"> Constraint naming standard</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/eng-standards-versioning.html#comments">View comments on this page at openacs.org</a></center></body></html> +fundamental behavior.</p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="requirements-template.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="eng-standards-constraint-naming.html">Next</a></td></tr><tr><td width="40%" align="left">System/Application Requirements Template&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="eng-standards.html">Up</a></td><td width="40%" align="right">&nbsp;Constraint naming standard</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/eng-standards-versioning.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/eng-standards.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/eng-standards.html,v diff -u -r1.6.2.4 -r1.6.2.5 --- openacs-4/packages/acs-core-docs/www/eng-standards.html 7 Apr 2003 16:59:25 -0000 1.6.2.4 +++ openacs-4/packages/acs-core-docs/www/eng-standards.html 15 Apr 2003 17:03:02 -0000 1.6.2.5 @@ -1,2 +1,2 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Chapter 10. Engineering Standards</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="acs-dev.html" title="Part III. For OpenACS Developers"><link rel="previous" href="programming-with-aolserver.html" title="Programming with AOLserver"><link rel="next" href="docbook-primer.html" title="OpenACS Documentation Guide"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="programming-with-aolserver.html">Prev</a> </td><th width="60%" align="center">Part III. For OpenACS Developers</th><td width="20%" align="right"> <a accesskey="n" href="docbook-primer.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><h2 class="title"><a name="eng-standards"></a>Chapter 10. Engineering Standards</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="docbook-primer.html">OpenACS Documentation Guide</a></dt><dt><a href="psgml-mode.html">Using PSGML mode in Emacs</a></dt><dt><a href="filename.html">Detailed Design Documentation Template</a></dt><dt><a href="requirements-template.html">System/Application Requirements Template</a></dt><dt><a href="eng-standards-versioning.html">Release Version Numbering</a></dt><dt><a href="eng-standards-constraint-naming.html">Constraint naming standard</a></dt><dt><a href="eng-standards-filenaming.html">ACS File Naming and Formatting Standards</a></dt><dt><a href="eng-standards-plsql.html">PL/SQL Standards</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="programming-with-aolserver.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="docbook-primer.html">Next</a></td></tr><tr><td width="40%" align="left">Programming with AOLserver </td><td width="20%" align="center"><a accesskey="u" href="acs-dev.html">Up</a></td><td width="40%" align="right"> OpenACS Documentation Guide</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/eng-standards.html#comments">View comments on this page at openacs.org</a></center></body></html> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter�10.�Engineering Standards</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="acs-dev.html" title="Part�III.�For OpenACS Developers"><link rel="previous" href="programming-with-aolserver.html" title="Programming with AOLserver"><link rel="next" href="docbook-primer.html" title="OpenACS Documentation Guide"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="programming-with-aolserver.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part�III.�For OpenACS Developers</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="docbook-primer.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><h2 class="title"><a name="eng-standards"></a>Chapter�10.�Engineering Standards</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="docbook-primer.html">OpenACS Documentation Guide</a></dt><dt><a href="psgml-mode.html">Using PSGML mode in Emacs</a></dt><dt><a href="filename.html">Detailed Design Documentation Template</a></dt><dt><a href="requirements-template.html">System/Application Requirements Template</a></dt><dt><a href="eng-standards-versioning.html">Release Version Numbering</a></dt><dt><a href="eng-standards-constraint-naming.html">Constraint naming standard</a></dt><dt><a href="eng-standards-filenaming.html">ACS File Naming and Formatting Standards</a></dt><dt><a href="eng-standards-plsql.html">PL/SQL Standards</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="programming-with-aolserver.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="docbook-primer.html">Next</a></td></tr><tr><td width="40%" align="left">Programming with AOLserver&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="acs-dev.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS Documentation Guide</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/eng-standards.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/filename.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/filename.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/filename.html 7 Apr 2003 16:59:25 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/filename.html 15 Apr 2003 17:03:02 -0000 1.8.2.5 @@ -1,5 +1,5 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Detailed Design Documentation Template</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="eng-standards.html" title="Chapter 10. Engineering Standards"><link rel="previous" href="psgml-mode.html" title="Using PSGML mode in Emacs"><link rel="next" href="requirements-template.html" title="System/Application Requirements Template"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="psgml-mode.html">Prev</a> </td><th width="60%" align="center">Chapter 10. Engineering Standards</th><td width="20%" align="right"> <a accesskey="n" href="requirements-template.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="filename"></a>Detailed Design Documentation Template</h2></div></div><p>By <a href="mailto:youremail@arsdigita.com" target="_top">You</a></p><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-start-note"></a>Start Note</h3></div></div><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Detailed Design Documentation Template</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="eng-standards.html" title="Chapter�10.�Engineering Standards"><link rel="previous" href="psgml-mode.html" title="Using PSGML mode in Emacs"><link rel="next" href="requirements-template.html" title="System/Application Requirements Template"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="psgml-mode.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�10.�Engineering Standards</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="requirements-template.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="filename"></a>Detailed Design Documentation Template</h2></div></div><p>By <a href="mailto:youremail@arsdigita.com" target="_top">You</a></p><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-start-note"></a>Start Note</h3></div></div><p> <span class="emphasis"><em>NOTE: Some of the sections of this template may not apply to your package, e.g. there may be no user-visible UI elements for a component of the OpenACS Core. Furthermore, it may be easier in some circumstances @@ -11,12 +11,12 @@ your own judgment, consult with peers when possible, and adapt intelligently.</em></span> </p><p> - <span class="emphasis"><em>Also, bear in mind <span class="strong"><em>the audience</em></span> for detailed design: fellow + <span class="emphasis"><em>Also, bear in mind <span class="strong">the audience</span> for detailed design: fellow programmers who want to maintain/extend the software, AND parties interested in evaluating software quality. </em></span> - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-essentials"></a>Essentials</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-essentials"></a>Essentials</h3></div></div><p> When applicable, each of the following items should receive its own link: - </p><div class="itemizedlist"><ul type="disc"><li><p> User directory </p></li><li><p> OpenACS administrator directory </p></li><li><p> Subsite administrator directory </p></li><li><p> Tcl script directory (link to the API browser page for the package) </p></li><li><p> PL/SQL file (link to the API browser page for the package) </p></li><li><p> Data model </p></li><li><p> Requirements document </p></li><li><p> ER diagram </p></li><li><p> Transaction flow diagram </p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-introduction"></a>Introduction</h3></div></div><p> + </p><div class="itemizedlist"><ul type="disc"><li><p> User directory </p></li><li><p> OpenACS administrator directory </p></li><li><p> Subsite administrator directory </p></li><li><p> Tcl script directory (link to the API browser page for the package) </p></li><li><p> PL/SQL file (link to the API browser page for the package) </p></li><li><p> Data model </p></li><li><p> Requirements document </p></li><li><p> ER diagram </p></li><li><p> Transaction flow diagram </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-introduction"></a>Introduction</h3></div></div><p> This section should provide an overview of the package and address at least the following issues: </p><div class="itemizedlist"><ul type="disc"><li><p> What this package is intended to allow the user (or different @@ -33,15 +33,15 @@ Note: it's entirely possible that a discussion of what a package is not intended to do differs from a discussion of future improvements for the package. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-historical-consid"></a>Historical Considerations</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-historical-consid"></a>Historical Considerations</h3></div></div><p> For a given set of requirements, typically many possible implementations and solutions exist. Although eventually only one solution is implemented, a discussion of the alternative solutions canvassed - noting why they were rejected - proves helpful to both current and future developers. All readers would be reminded as to why and how the particular solution developed over time, avoiding re-analysis of problems already solved. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-competitive-analysis"></a>Competitive Analysis</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-competitive-analysis"></a>Competitive Analysis</h3></div></div><p> Although currently only a few package documentation pages contain a discussion of competing software, (e.g. chat, portals), this section should be present whenever such competition exists. @@ -52,7 +52,7 @@ lacks. </p></li></ul></div><p> Note that such a discussion may differ from a discussion of a package's potential future improvements. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-design-tradeoffs"></a>Design Tradeoffs</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-design-tradeoffs"></a>Design Tradeoffs</h3></div></div><p> No single design solution can optimize every desirable software attribute. For example, an increase in the security of a system will likely entail a decrease in its ease-of-use, and an increase in the @@ -62,7 +62,7 @@ should include a discussion of the tradeoffs involved with the design chosen, and the reasons for your choices. Some areas of importance to keep in mind are: - </p><p>Areas of interest to users:</p><div class="itemizedlist"><ul type="disc"><li><p> Performance: availability and efficiency </p></li><li><p> Flexibility </p></li><li><p> Interoperability </p></li><li><p> Reliability and robustness </p></li><li><p> Usability </p></li></ul></div><p>Areas of interest to developers:</p><div class="itemizedlist"><ul type="disc"><li><p> Maintainability </p></li><li><p> Portability </p></li><li><p> Reusability </p></li><li><p> Testability </p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-api"></a>API</h3></div></div><p> + </p><p>Areas of interest to users:</p><div class="itemizedlist"><ul type="disc"><li><p> Performance: availability and efficiency </p></li><li><p> Flexibility </p></li><li><p> Interoperability </p></li><li><p> Reliability and robustness </p></li><li><p> Usability </p></li></ul></div><p>Areas of interest to developers:</p><div class="itemizedlist"><ul type="disc"><li><p> Maintainability </p></li><li><p> Portability </p></li><li><p> Reusability </p></li><li><p> Testability </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-api"></a>API</h3></div></div><p> Here's where you discuss the abstractions used by your package, such as the procedures encapsulating the legal transactions on the data model. Explain the organization of procedures and their @@ -80,7 +80,7 @@ handle transactions, instead of encapsulating them via procedures). Experience has taught us that we need to focus on the API for maintainability of our systems in the face of constant change. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-data-model"></a>Data Model Discussion</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-data-model"></a>Data Model Discussion</h3></div></div><p> The data model discussion should do more than merely display the SQL code, since this information is already be available via a link in the "essentials" section above. Instead, there should be a high-level @@ -94,10 +94,10 @@ itself. </p></li><li><p> If a core service or other subsystem is being used (e.g., the new parties and groups, permissions, etc.) this should also be mentioned. </p></li><li><p> Any default permissions should be identified herein. </p></li><li><p> Discuss any data model extensions which tie into other - packages. </p></li><li><p><span class="strong"><em>Transactions</em></span></p><p> Discuss modifications which the database may undergo from + packages. </p></li><li><p><span class="strong">Transactions</span></p><p> Discuss modifications which the database may undergo from your package. Consider grouping legal transactions according to the invoking user class, i.e. transactions by an OpenACS-admin, by - subsite-admin, by a user, by a developer, etc. </p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-ui"></a>User Interface</h3></div></div><p> + subsite-admin, by a user, by a developer, etc. </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-ui"></a>User Interface</h3></div></div><p> In this section, discuss user interface issues and pages to be built; you can organize by the expected classes of users. These may include: </p><div class="itemizedlist"><ul type="disc"><li><p> Developers</p></li><li><p> OpenACS administrators (previously known as site-wide administrators)</p></li><li><p> Subsite administrators</p></li><li><p> End users</p></li></ul></div><p> @@ -114,26 +114,26 @@ Finally, note that as our templating system becomes more entrenched within the OpenACS, this section's details are likely to shift from UI specifics to template interface specifics. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-config"></a>Configuration/Parameters</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-config"></a>Configuration/Parameters</h3></div></div><p> Under OpenACS 4.6.2, parameters are set at two levels: at the global level by the OpenACS-admin, and at the subsite level by a sub-admin. In this section, list and discuss both levels of parameters. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-future"></a>Future Improvements/Areas of Likely Change</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-future"></a>Future Improvements/Areas of Likely Change</h3></div></div><p> If the system presently lacks useful/desirable features, note details here. You could also comment on non-functional improvements to the package, such as usability. </p><p> Note that a careful treatment of the earlier "competitive analysis" section can greatly facilitate the documenting of this section. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-authors"></a>Authors</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-authors"></a>Authors</h3></div></div><p> Although a system's data model file often contains this information, this isn't always the case. Furthermore, data model files often undergo substantial revision, making it difficult to track down the system creator. An additional complication: package documentation may be authored by people not directly involved in coding. Thus to avoid unnecessary confusion, include email links to the following roles as they may apply: - </p><div class="itemizedlist"><ul type="disc"><li><p> System creator</p></li><li><p> System owner</p></li><li><p> Documentation author</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-revision-history"></a>Revision History</h3></div></div><p> + </p><div class="itemizedlist"><ul type="disc"><li><p> System creator</p></li><li><p> System owner</p></li><li><p> Documentation author</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-design-revision-history"></a>Revision History</h3></div></div><p> <span class="emphasis"><em>The revision history table below is for this template - modify it as needed for your actual design document. </em></span> - </p><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><thead><tr><th>Document Revision #</th><th>Action Taken, Notes</th><th>When?</th><th>By Whom?</th></tr></thead><tbody><tr><td>0.3</td><td>Edited further, incorporated feedback from Michael Yoon</td><td>9/05/2000</td><td>Kai Wu</td></tr><tr><td>0.2</td><td>Edited</td><td>8/22/2000</td><td>Kai Wu</td></tr><tr><td>0.1</td><td>Creation</td><td>8/21/2000</td><td>Josh Finkler, Audrey McLoghlin</td></tr></tbody></table></div><p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="psgml-mode.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="requirements-template.html">Next</a></td></tr><tr><td width="40%" align="left">Using PSGML mode in Emacs </td><td width="20%" align="center"><a accesskey="u" href="eng-standards.html">Up</a></td><td width="40%" align="right"> System/Application Requirements Template</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/filename.html#comments">View comments on this page at openacs.org</a></center></body></html> + </p><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><thead><tr><th>Document Revision #</th><th>Action Taken, Notes</th><th>When?</th><th>By Whom?</th></tr></thead><tbody><tr><td>0.3</td><td>Edited further, incorporated feedback from Michael Yoon</td><td>9/05/2000</td><td>Kai Wu</td></tr><tr><td>0.2</td><td>Edited</td><td>8/22/2000</td><td>Kai Wu</td></tr><tr><td>0.1</td><td>Creation</td><td>8/21/2000</td><td>Josh Finkler, Audrey McLoghlin</td></tr></tbody></table></div><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="psgml-mode.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="requirements-template.html">Next</a></td></tr><tr><td width="40%" align="left">Using PSGML mode in Emacs&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="eng-standards.html">Up</a></td><td width="40%" align="right">&nbsp;System/Application Requirements Template</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/filename.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/for-everyone.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/for-everyone.html,v diff -u -r1.7.2.3 -r1.7.2.4 --- openacs-4/packages/acs-core-docs/www/for-everyone.html 30 Mar 2003 06:04:04 -0000 1.7.2.3 +++ openacs-4/packages/acs-core-docs/www/for-everyone.html 15 Apr 2003 17:03:02 -0000 1.7.2.4 @@ -1,2 +1,2 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Part I. OpenACS For Everyone</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="index.html" title="OpenACS Documentation"><link rel="previous" href="index.html" title="OpenACS Documentation"><link rel="next" href="general-documents.html" title="Chapter 1. High level information: What is OpenACS?"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="general-documents.html">Next</a></td></tr></table><hr></div><div class="part"><div class="titlepage"><div><h1 class="title"><a name="for-everyone"></a>OpenACS For Everyone</h1></div></div><div class="partintro"><div></div><p>High level information: What is OpenACS?</p><div class="toc"><p><b>Table of Contents</b></p><dl><dt>1. <a href="general-documents.html">High level information: What is OpenACS?</a></dt><dd><dl><dt><a href="openacs-overview.html">Overview</a></dt><dt><a href="release-notes.html">OpenACS 4.6.2 Release Notes</a></dt></dl></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="general-documents.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS Documentation </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> Chapter 1. High level information: What is OpenACS?</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/for-everyone.html#comments">View comments on this page at openacs.org</a></center></body></html> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part�I.�OpenACS For Everyone</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="index.html" title="OpenACS Documentation"><link rel="previous" href="index.html" title="OpenACS Documentation"><link rel="next" href="general-documents.html" title="Chapter�1.�High level information: What is OpenACS?"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="general-documents.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><h1 class="title"><a name="for-everyone"></a>OpenACS For Everyone</h1></div></div><div class="partintro" lang="en"><div></div><p>High level information: What is OpenACS?</p><div class="toc"><p><b>Table of Contents</b></p><dl><dt>1. <a href="general-documents.html">High level information: What is OpenACS?</a></dt><dd><dl><dt><a href="openacs-overview.html">Overview</a></dt><dt><a href="release-notes.html">OpenACS 4.6.2 Release Notes</a></dt></dl></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="general-documents.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS Documentation&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right">&nbsp;Chapter�1.�High level information: What is OpenACS?</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/for-everyone.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/general-documents.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/general-documents.html,v diff -u -r1.7.2.3 -r1.7.2.4 --- openacs-4/packages/acs-core-docs/www/general-documents.html 30 Mar 2003 06:04:04 -0000 1.7.2.3 +++ openacs-4/packages/acs-core-docs/www/general-documents.html 15 Apr 2003 17:03:02 -0000 1.7.2.4 @@ -1,2 +1,2 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Chapter 1. High level information: What is OpenACS?</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="for-everyone.html" title="Part I. OpenACS For Everyone"><link rel="previous" href="for-everyone.html" title="Part I. OpenACS For Everyone"><link rel="next" href="openacs-overview.html" title="Overview"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="for-everyone.html">Prev</a> </td><th width="60%" align="center">Part I. OpenACS For Everyone</th><td width="20%" align="right"> <a accesskey="n" href="openacs-overview.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><h2 class="title"><a name="general-documents"></a>Chapter 1. High level information: What is OpenACS?</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="openacs-overview.html">Overview</a></dt><dt><a href="release-notes.html">OpenACS 4.6.2 Release Notes</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="for-everyone.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="openacs-overview.html">Next</a></td></tr><tr><td width="40%" align="left">Part I. OpenACS For Everyone </td><td width="20%" align="center"><a accesskey="u" href="for-everyone.html">Up</a></td><td width="40%" align="right"> Overview</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/general-documents.html#comments">View comments on this page at openacs.org</a></center></body></html> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter�1.�High level information: What is OpenACS?</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="for-everyone.html" title="Part�I.�OpenACS For Everyone"><link rel="previous" href="for-everyone.html" title="Part�I.�OpenACS For Everyone"><link rel="next" href="openacs-overview.html" title="Overview"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="for-everyone.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part�I.�OpenACS For Everyone</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="openacs-overview.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><h2 class="title"><a name="general-documents"></a>Chapter�1.�High level information: What is OpenACS?</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="openacs-overview.html">Overview</a></dt><dt><a href="release-notes.html">OpenACS 4.6.2 Release Notes</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="for-everyone.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="openacs-overview.html">Next</a></td></tr><tr><td width="40%" align="left">Part�I.�OpenACS For Everyone&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="for-everyone.html">Up</a></td><td width="40%" align="right">&nbsp;Overview</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/general-documents.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/groups-design.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/groups-design.html,v diff -u -r1.6.2.4 -r1.6.2.5 --- openacs-4/packages/acs-core-docs/www/groups-design.html 7 Apr 2003 16:59:25 -0000 1.6.2.4 +++ openacs-4/packages/acs-core-docs/www/groups-design.html 15 Apr 2003 17:03:02 -0000 1.6.2.5 @@ -1,15 +1,15 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS 4 Groups Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="previous" href="groups-requirements.html" title="OpenACS 4 Groups Requirements"><link rel="next" href="subsites-requirements.html" title="OpenACS 4 Subsites Requirements"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="groups-requirements.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Kernel Documentation</th><td width="20%" align="right"> <a accesskey="n" href="subsites-requirements.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="groups-design"></a>OpenACS 4 Groups Design</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS 4 Groups Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="previous" href="groups-requirements.html" title="OpenACS 4 Groups Requirements"><link rel="next" href="subsites-requirements.html" title="OpenACS 4 Subsites Requirements"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="groups-requirements.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�11.�Kernel Documentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="subsites-requirements.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="groups-design"></a>OpenACS 4 Groups Design</h2></div></div><div class="authorblurb"><p> by <a href="http://planitia.org" target="_top">Rafael H. Schloming</a> and <a href="mailto:mthomas@arsdigita.com" target="_top">Mark Thomas</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-design-essentials"></a>Essentials</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p>User directory</p></li><li><p>Sitewide administrator directory</p></li><li><p>Subsite administrator directory</p></li><li><p>TCL script directory</p></li><li><p><a href="groups-requirements.html">OpenACS 4 Groups Requirements</a></p></li><li><p>Data model</p></li><li><p>PL/SQL file </p><div class="itemizedlist"><ul type="round"><li><p><a href="/doc/sql/display-sql?url=community-core-create.sql&package_key=acs-kernel" target="_top"> -community-core-create.sql</a></p></li><li><p><a href="/doc/sql/display-sql?url=groups-create.sql&package_key=acs-kernel" target="_top">groups-create.sql</a></p></li></ul></div></li><li><p>ER diagram</p></li><li><p>Transaction flow diagram</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-design-intro"></a>Introduction</h3></div></div><p>Almost all database-backed websites have users, and need to model the + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-design-essentials"></a>Essentials</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p>User directory</p></li><li><p>Sitewide administrator directory</p></li><li><p>Subsite administrator directory</p></li><li><p>TCL script directory</p></li><li><p><a href="groups-requirements.html">OpenACS 4 Groups Requirements</a></p></li><li><p>Data model</p></li><li><p>PL/SQL file </p><div class="itemizedlist"><ul type="circle"><li><p><a href="/doc/sql/display-sql?url=community-core-create.sql&package_key=acs-kernel" target="_top"> +community-core-create.sql</a></p></li><li><p><a href="/doc/sql/display-sql?url=groups-create.sql&package_key=acs-kernel" target="_top">groups-create.sql</a></p></li></ul></div></li><li><p>ER diagram</p></li><li><p>Transaction flow diagram</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-design-intro"></a>Introduction</h3></div></div><p>Almost all database-backed websites have users, and need to model the grouping of users. The OpenACS 4 Parties and Groups system is intended to provide the flexibility needed to model complex real-world organizational structures, particularly to support powerful subsite services; that is, where one OpenACS installation can support what appears to the user as distinct web services -for different user communities.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-design-hist-considerations"></a>Historical Considerations</h3></div></div><p>The primary limitation of the OpenACS 3.x user group system is that it +for different user communities.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-design-hist-considerations"></a>Historical Considerations</h3></div></div><p>The primary limitation of the OpenACS 3.x user group system is that it restricts the application developer to representing a "flat group" that contains only users: The <tt>user_groups</tt> table may contain the <tt>group_id</tt> of a parent group, but parent-child relationship @@ -26,7 +26,7 @@ (e.g., a row with a <tt>scope</tt> value of "group" but a null <tt>group_id</tt>)</p></li><li><p>perform extra checks in <tt>Tcl</tt> and <tt>PL/SQL</tt> functions and procedures to check both the <tt>user_id</tt> and -<tt>group_id</tt> values</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-design-competitors"></a>Competitive Analysis</h3></div></div><p>...</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-design-design-tradeoffs"></a>Design Tradeoffs</h3></div></div><p>The core of the Group Systems data model is quite simple, but it was +<tt>group_id</tt> values</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-design-competitors"></a>Competitive Analysis</h3></div></div><p>...</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-design-design-tradeoffs"></a>Design Tradeoffs</h3></div></div><p>The core of the Group Systems data model is quite simple, but it was designed in the hopes of modeling "real world" organizations which can be complex graph structures. The Groups System only considers groups that can be modeled using directed acyclic graphs, but queries over these @@ -39,7 +39,7 @@ without making the system too complex or too slow. The added triggers, views, and tables and will increase storage requirements and the insert and delete times in an effort to speed access time. The limited flexibility (no updates -on membership) trades against the complexity of the code.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-design-data-model"></a>Data Model Discussion</h3></div></div><p>The Group System data model consists of the following tables:</p><div class="variablelist"><dl><dt><span class="term"><tt>parties</tt> +on membership) trades against the complexity of the code.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-design-data-model"></a>Data Model Discussion</h3></div></div><p>The Group System data model consists of the following tables:</p><div class="variablelist"><dl><dt><span class="term"><tt>parties</tt> </span></dt><dd><p>The set of all defined parties: any <span class="emphasis"><em>person</em></span>, <span class="emphasis"><em>user</em></span>, or <span class="emphasis"><em>group</em></span> must have a corresponding row in this table.</p></dd><dt><span class="term"><tt>persons</tt> @@ -62,16 +62,16 @@ </span></dt><dd><p>The set of direct membership relationships between a group and a party.</p></dd><dt><span class="term"><tt>group_member_index</tt> -</span></dt><dd><p>A mapping of a party <span class="strong"><em>P</em></span> to the groups -{<span class="strong"><em>G<sub>i</sub></em></span>}the party is a member of; this mapping +</span></dt><dd><p>A mapping of a party <span class="strong">P</span> to the groups +{<span class="strong">G<sub>i</sub></span>}the party is a member of; this mapping includes the type of relationship by including the appropriate<tt>rel_id</tt> from the <tt>membership_rels</tt> table.</p></dd><dt><span class="term"><tt>composition_rels</tt> </span></dt><dd><p>The set of direct component relationships between a group and another group.</p></dd><dt><span class="term"><tt>group_component_index</tt> -</span></dt><dd><p>A mapping of a group <span class="strong"><em>G</em></span>to the set of groups -{<span class="strong"><em>G<sub>i</sub></em></span>} that <span class="strong"><em>G</em></span> is a component of; +</span></dt><dd><p>A mapping of a group <span class="strong">G</span>to the set of groups +{<span class="strong">G<sub>i</sub></span>} that <span class="strong">G</span> is a component of; this mapping includes the type of relationship by including the appropriate<tt>rel_id</tt> from the <tt>composition_rels</tt> table.</p></dd></dl></div><p>New groups are created through the <tt>group.new</tt> constructor. When a specialized type of group is required, the group type can be extended @@ -116,26 +116,26 @@ </span></dt><dd><p>A person may appear in the group member map multiple times, for example, by being a member of two different groups that are both components of a third -group. This view is strictly a mapping of <span class="strong"><em>approved</em></span> members +group. This view is strictly a mapping of <span class="strong">approved</span> members to groups.</p></dd><dt><span class="term"><tt>group_component_map</tt> -</span></dt><dd><p>A mapping of a group <span class="strong"><em>G</em></span>to the set of groups -{<span class="strong"><em>G<sub>i</sub></em></span>} group <span class="strong"><em>G</em></span> is a component of; +</span></dt><dd><p>A mapping of a group <span class="strong">G</span>to the set of groups +{<span class="strong">G<sub>i</sub></span>} group <span class="strong">G</span> is a component of; this mapping includes the type of relationship by including the appropriate<tt>rel_id</tt> from the <tt>composition_rels</tt> table.</p></dd><dt><span class="term"><tt>party_member_map</tt> -</span></dt><dd><p>A mapping of a party <span class="strong"><em>P</em></span> to the set of parties -{<span class="strong"><em>P<sub>i</sub></em></span>} party <span class="strong"><em>P</em></span> is a member +</span></dt><dd><p>A mapping of a party <span class="strong">P</span> to the set of parties +{<span class="strong">P<sub>i</sub></span>} party <span class="strong">P</span> is a member of.</p></dd><dt><span class="term"><tt>party_approved_member_map</tt> -</span></dt><dd><p>A mapping of a party <span class="strong"><em>P</em></span> to the set of parties -{<span class="strong"><em>P<sub>i</sub></em></span>} party <span class="strong"><em>P</em></span> is an -<span class="strong"><em>approved</em></span> member of.</p></dd></dl></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-design-api"></a>API</h3></div></div><p> +</span></dt><dd><p>A mapping of a party <span class="strong">P</span> to the set of parties +{<span class="strong">P<sub>i</sub></span>} party <span class="strong">P</span> is an +<span class="strong">approved</span> member of.</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-design-api"></a>API</h3></div></div><p> The API consists of tables and views and PL/SQL functions. -</p><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="groups-design-tables-views"></a>Tables and Views</h4></div></div><p>The <tt>group_types</tt> table is used to create new types of groups.</p><p>The <tt>group_member_map</tt>, <tt>group_approved_member_map</tt>, +</p><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="groups-design-tables-views"></a>Tables and Views</h4></div></div><p>The <tt>group_types</tt> table is used to create new types of groups.</p><p>The <tt>group_member_map</tt>, <tt>group_approved_member_map</tt>, <tt>group_distinct_member_map</tt>, <tt>group_component_map</tt>, <tt>party_member_map</tt>, and <tt>party_approved_member_map</tt> views are -used to query group membership and composition.</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="groups-design-pl-sql-api"></a>PL/SQL API</h4></div></div><p><span class="strong"><em>Person</em></span></p><p><tt>person.new</tt> creates a new person and returns the +used to query group membership and composition.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="groups-design-pl-sql-api"></a>PL/SQL API</h4></div></div><p><span class="strong">Person</span></p><p><tt>person.new</tt> creates a new person and returns the <tt>person_id</tt>. The function must be given the full name of the person in two pieces: <tt>first_names</tt> and <tt>last_name</tt>. All other fields are optional and default to null except for <tt>object_type</tt> which defaults @@ -162,7 +162,7 @@ function person.name ( person_id persons.person_id%TYPE ) return varchar; -</pre><p><span class="strong"><em>User</em></span></p><p><tt>acs_user.new</tt> creates a new user and returns the <tt>user_id</tt>. +</pre><p><span class="strong">User</span></p><p><tt>acs_user.new</tt> creates a new user and returns the <tt>user_id</tt>. The function must be given the user's email address and the full name of the user in two pieces: <tt>first_names</tt> and <tt>last_name</tt>. All other fields are optional. The interface for this function is:</p><pre class="programlisting"> @@ -204,7 +204,7 @@ procedure acs_user.unapprove_email ( user_id users.user_id%TYPE ); -</pre><p><span class="strong"><em>Group</em></span></p><p><tt>acs_group.new</tt> creates a new group and returns the +</pre><p><span class="strong">Group</span></p><p><tt>acs_group.new</tt> creates a new group and returns the <tt>group_id</tt>. All fields are optional and default to null except for <tt>object_type</tt> which defaults to 'group', <tt>creation_date</tt> which defaults to <tt>sysdate</tt>, and @@ -232,7 +232,7 @@ group_id groups.group_id%TYPE, party_id parties.party_id%TYPE, ) return char; -</pre><p><span class="strong"><em>Membership Relationship</em></span></p><p><tt>membership_rel.new</tt> creates a new membership relationship type +</pre><p><span class="strong">Membership Relationship</span></p><p><tt>membership_rel.new</tt> creates a new membership relationship type between two parties and returns the relationship type's <tt>rel_id</tt>. All fields are optional and default to null except for <tt>rel_type</tt> which defaults to membership_rel. The interface for this function is:</p><pre class="programlisting"> @@ -278,7 +278,7 @@ procedure membership_rel.delete ( rel_id membership_rels.rel_id%TYPE ); -</pre><p><span class="strong"><em>Composition Relationship</em></span></p><p><tt>composition_rel.new</tt> creates a new composition relationship type +</pre><p><span class="strong">Composition Relationship</span></p><p><tt>composition_rel.new</tt> creates a new composition relationship type and returns the relationship's <tt>rel_id</tt>. All fields are optional and default to null except for <tt>rel_type</tt> which defaults to composition_rel. The interface for this function is:</p><pre class="programlisting"> @@ -295,10 +295,10 @@ procedure membership_rel.delete ( rel_id composition_rels.rel_id%TYPE ); -</pre></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-design-ui"></a>User Interface</h3></div></div><p>Describe the admin pages.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-design-config"></a>Configuration/Parameters</h3></div></div><p>...</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-design-acc-tests"></a>Acceptance Tests</h3></div></div><p>...</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-design-future"></a>Future Improvements/Areas of Likely Change</h3></div></div><p>...</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-design-authors"></a>Authors</h3></div></div><div class="variablelist"><dl><dt><span class="term">System creator +</pre></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-design-ui"></a>User Interface</h3></div></div><p>Describe the admin pages.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-design-config"></a>Configuration/Parameters</h3></div></div><p>...</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-design-acc-tests"></a>Acceptance Tests</h3></div></div><p>...</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-design-future"></a>Future Improvements/Areas of Likely Change</h3></div></div><p>...</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-design-authors"></a>Authors</h3></div></div><div class="variablelist"><dl><dt><span class="term">System creator </span></dt><dd><p><a href="mailto:rhs@mit.edu" target="_top">Rafael H. Schloming</a></p></dd><dt><span class="term">System owner </span></dt><dd><p><a href="mailto:rhs@mit.edu" target="_top">Rafael H. Schloming</a></p></dd><dt><span class="term">Documentation author -</span></dt><dd><p><a href="mailto:mthomas@arsdigita.com" target="_top">Mark Thomas</a></p></dd></dl></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-design-rev-history"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong"><em>Document Revision #</em></span></td><td><span class="strong"><em>Action Taken, Notes</em></span></td><td><span class="strong"><em>When?</em></span></td><td><span class="strong"><em>By Whom?</em></span></td></tr><tr><td>0.1</td><td>Creation</td><td>08/22/2000</td><td><a href="mailto:rhs@mit.edu" target="_top">Rafael H. Schloming</a></td></tr><tr><td>0.2</td><td>Initial Revision</td><td>08/30/2000</td><td><a href="mailto:mthomas@arsdigita.com" target="_top">Mark Thomas</a></td></tr><tr><td>0.3</td><td>Additional revisions; tried to clarify membership/compostion</td><td>09/08/2000</td><td><a href="mailto:mthomas@arsdigita.com" target="_top">Mark Thomas</a></td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="groups-requirements.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="subsites-requirements.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Groups Requirements </td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right"> OpenACS 4 Subsites Requirements</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/groups-design.html#comments">View comments on this page at openacs.org</a></center></body></html> +</span></dt><dd><p><a href="mailto:mthomas@arsdigita.com" target="_top">Mark Thomas</a></p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-design-rev-history"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong">Document Revision #</span></td><td><span class="strong">Action Taken, Notes</span></td><td><span class="strong">When?</span></td><td><span class="strong">By Whom?</span></td></tr><tr><td>0.1</td><td>Creation</td><td>08/22/2000</td><td><a href="mailto:rhs@mit.edu" target="_top">Rafael H. Schloming</a></td></tr><tr><td>0.2</td><td>Initial Revision</td><td>08/30/2000</td><td><a href="mailto:mthomas@arsdigita.com" target="_top">Mark Thomas</a></td></tr><tr><td>0.3</td><td>Additional revisions; tried to clarify membership/compostion</td><td>09/08/2000</td><td><a href="mailto:mthomas@arsdigita.com" target="_top">Mark Thomas</a></td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="groups-requirements.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="subsites-requirements.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Groups Requirements&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS 4 Subsites Requirements</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/groups-design.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/groups-requirements.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/groups-requirements.html,v diff -u -r1.6.2.4 -r1.6.2.5 --- openacs-4/packages/acs-core-docs/www/groups-requirements.html 7 Apr 2003 16:59:25 -0000 1.6.2.4 +++ openacs-4/packages/acs-core-docs/www/groups-requirements.html 15 Apr 2003 17:03:02 -0000 1.6.2.5 @@ -1,22 +1,22 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS 4 Groups Requirements</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="previous" href="permissions-design.html" title="OpenACS 4 Permissions Design"><link rel="next" href="groups-design.html" title="OpenACS 4 Groups Design"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="permissions-design.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Kernel Documentation</th><td width="20%" align="right"> <a accesskey="n" href="groups-design.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="groups-requirements"></a>OpenACS 4 Groups Requirements</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS 4 Groups Requirements</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="previous" href="permissions-design.html" title="OpenACS 4 Permissions Design"><link rel="next" href="groups-design.html" title="OpenACS 4 Groups Design"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="permissions-design.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�11.�Kernel Documentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="groups-design.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="groups-requirements"></a>OpenACS 4 Groups Requirements</h2></div></div><div class="authorblurb"><p> by <a href="http://planitia.org" target="_top">Rafael H. Schloming</a>, <a href="mailto:mthomas@arsdigita.com" target="_top">Mark Thomas</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-requirements-intro"></a>Introduction</h3></div></div><p>Almost all database-backed websites have users, and need to model the + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-requirements-intro"></a>Introduction</h3></div></div><p>Almost all database-backed websites have users, and need to model the grouping of users. The OpenACS 4 Parties and Groups system is intended to provide the flexibility needed to model complex real-world organizational structures, particularly to support powerful subsite services; that is, where one OpenACS installation can support what appears to the user as distinct web services -for different user communities.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-requirements-vision"></a>Vision Statement</h3></div></div><p>A powerful web service that can meet the needs of large enterprises must +for different user communities.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-requirements-vision"></a>Vision Statement</h3></div></div><p>A powerful web service that can meet the needs of large enterprises must be able to model the the real world's very rich organizational structures and many ways of decomposing the same organization. For example, a corporation can be broken into structures (the corporation, its divisions, and their departments) or regions (the Boston office, the LA office); a person who is employed by (is a member of) a specific department is also a member of the division and the corporation, and works at (is a member of, but in a different sense) a particular office. OpenACS 4's Parties and Groups -system will support such complex relations faithfully.</p><p><span class="strong"><em>Historical Motivations</em></span></p><p>The primary limitation of the OpenACS 3.x user group system is that it +system will support such complex relations faithfully.</p><p><span class="strong">Historical Motivations</span></p><p>The primary limitation of the OpenACS 3.x user group system is that it restricts the application developer to representing a "flat group" that contains only users: The <tt>user_groups</tt> table may contain the <tt>group_id</tt> of a parent group, but parent-child relationship @@ -33,29 +33,29 @@ (e.g., a row with a <tt>scope</tt> value of "group" but a null <tt>group_id</tt>)</p></li><li><p>perform extra checks in <tt>Tcl</tt> and <tt>PL/SQL</tt> functions and procedures to check both the <tt>user_id</tt> and -<tt>group_id</tt> values</p></li></ul></div><p>In sum, the goal of the <span class="strong"><em>Parties and Groups</em></span> system is to +<tt>group_id</tt> values</p></li></ul></div><p>In sum, the goal of the <span class="strong">Parties and Groups</span> system is to provide OpenACS programmers and site administrators with simple tools that fully describe the complex relationships that exist among groups in the real -world.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-requirements-user-scenarios"></a>User Scenarios</h3></div></div><p>Pat Developer has a client project and wants to model the company, its +world.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-requirements-user-scenarios"></a>User Scenarios</h3></div></div><p>Pat Developer has a client project and wants to model the company, its offices, its divisions, and its departments as groups and the employees as -users.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-requirements-system-overview"></a>System Overview</h3></div></div><p>We start with <span class="strong"><em>Groups</em></span>, which contain members; the -<span class="strong"><em>member can be either a person or another group</em></span> (i.e. a +users.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-requirements-system-overview"></a>System Overview</h3></div></div><p>We start with <span class="strong">Groups</span>, which contain members; the +<span class="strong">member can be either a person or another group</span> (i.e. a member is a party).</p><p>In addition to membership, the party and groups system defines a -<span class="strong"><em>composition</em></span> relationship that may exist between groups: A -group can be a <span class="strong"><em>component</em></span> of another group. The child group +<span class="strong">composition</span> relationship that may exist between groups: A +group can be a <span class="strong">component</span> of another group. The child group is called a <span class="emphasis"><em>component group</em></span>; the parent group is called a -<span class="emphasis"><em>composite group</em></span>.</p><p>A group <span class="strong"><em>G<sub>c</sub></em></span> can be a member and/or a component -of another group <span class="strong"><em>G<sub>p</sub></em></span>; the difference is in the way -the members of <span class="strong"><em>G<sub>c</sub></em></span> are related to -<span class="strong"><em>G<sub>p</sub></em></span>:</p><div class="itemizedlist"><ul type="disc"><li><p>If a party <span class="strong"><em>P</em></span> is a member (or a component) of -<span class="strong"><em>G<sub>c</sub></em></span> and if <span class="strong"><em>G<sub>c</sub></em></span> is a -component of <span class="strong"><em>G<sub>p</sub></em></span>, then <span class="strong"><em>P</em></span> is also -a member (or a component) of <span class="strong"><em>G<sub>p</sub></em></span></p></li><li><p>If a party <span class="strong"><em>P</em></span> is a member (or a component) of -<span class="strong"><em>G<sub>c</sub></em></span> and if <span class="strong"><em>G<sub>c</sub></em></span> is a -member of <span class="strong"><em>G<sub>p</sub></em></span>, then <span class="strong"><em>no -relationship</em></span> between <span class="strong"><em>P</em></span> and -<span class="strong"><em>G<sub>p</sub></em></span> exists as a result of the relationship between -<span class="strong"><em>G<sub>p</sub></em></span> and <span class="strong"><em>G<sub>p</sub></em></span>.</p></li></ul></div><p>Consider an example to make this less abstract: Pretend that the Sierra +<span class="emphasis"><em>composite group</em></span>.</p><p>A group <span class="strong">G<sub>c</sub></span> can be a member and/or a component +of another group <span class="strong">G<sub>p</sub></span>; the difference is in the way +the members of <span class="strong">G<sub>c</sub></span> are related to +<span class="strong">G<sub>p</sub></span>:</p><div class="itemizedlist"><ul type="disc"><li><p>If a party <span class="strong">P</span> is a member (or a component) of +<span class="strong">G<sub>c</sub></span> and if <span class="strong">G<sub>c</sub></span> is a +component of <span class="strong">G<sub>p</sub></span>, then <span class="strong">P</span> is also +a member (or a component) of <span class="strong">G<sub>p</sub></span></p></li><li><p>If a party <span class="strong">P</span> is a member (or a component) of +<span class="strong">G<sub>c</sub></span> and if <span class="strong">G<sub>c</sub></span> is a +member of <span class="strong">G<sub>p</sub></span>, then <span class="strong">no +relationship</span> between <span class="strong">P</span> and +<span class="strong">G<sub>p</sub></span> exists as a result of the relationship between +<span class="strong">G<sub>p</sub></span> and <span class="strong">G<sub>p</sub></span>.</p></li></ul></div><p>Consider an example to make this less abstract: Pretend that the Sierra Club is a <span class="emphasis"><em>member</em></span> of Greenpeace. The Sierra Club has chapters; each chapter is a <span class="emphasis"><em>component</em></span> of the Sierra Club. If Eddie Environmentalist is a member of the Massachusetts Chapter of the Sierra Club, Eddie is @@ -68,158 +68,158 @@ Massachusetts chapter), and between the Sierra Club and Greenpeace.</p><p>Membership requirements can vary from group to group. The parties and groups system must provide a base type that specifies the bare minimum necessary to join a group.</p><p>The parties and groups system must support constraints between a composite -group <span class="strong"><em>G<sub>P</sub></em></span> and any of its component groups, -<span class="strong"><em>G<sub>C</sub></em></span>. For example, the system should be able to -enforce a rule like: Do not allow a party <span class="strong"><em>P</em></span> to become a -member of <span class="strong"><em>G<sub>C</sub></em></span> unless <span class="strong"><em>P</em></span> is already -a member of <span class="strong"><em>G<sub>P</sub></em></span>.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-requirements-links"></a>Related Links</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="groups-design.html">OpenACS 4 Groups Design</a></p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-requirements-data-model"></a>Requirements: Data Model</h3></div></div><p>The data model for the parties and groups system must provide support for -the following types of entities:</p><div class="variablelist"><dl><dt><span class="term"><span class="strong"><em>10.0 Parties</em></span> +group <span class="strong">G<sub>P</sub></span> and any of its component groups, +<span class="strong">G<sub>C</sub></span>. For example, the system should be able to +enforce a rule like: Do not allow a party <span class="strong">P</span> to become a +member of <span class="strong">G<sub>C</sub></span> unless <span class="strong">P</span> is already +a member of <span class="strong">G<sub>P</sub></span>.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-requirements-links"></a>Related Links</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="groups-design.html">OpenACS 4 Groups Design</a></p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-requirements-data-model"></a>Requirements: Data Model</h3></div></div><p>The data model for the parties and groups system must provide support for +the following types of entities:</p><div class="variablelist"><dl><dt><span class="term"><span class="strong">10.0 Parties</span> -</span></dt><dd><p>A <span class="strong"><em>party</em></span> is an entity used to represent either a -<span class="emphasis"><em>group</em></span> or a <span class="emphasis"><em>person</em></span>.</p><p>The data model should enforce these constraints:</p><p><span class="strong"><em>10.10</em></span> A party has an email address, which can be -empty.</p><p><span class="strong"><em>10.20</em></span> A party may have multiple email addresses -associated with it.</p><p><span class="strong"><em>10.30</em></span> The email address of a party must be unique within -an OpenACS system.</p></dd><dt><span class="term"><span class="strong"><em>20.0 Groups</em></span> +</span></dt><dd><p>A <span class="strong">party</span> is an entity used to represent either a +<span class="emphasis"><em>group</em></span> or a <span class="emphasis"><em>person</em></span>.</p><p>The data model should enforce these constraints:</p><p><span class="strong">10.10</span> A party has an email address, which can be +empty.</p><p><span class="strong">10.20</span> A party may have multiple email addresses +associated with it.</p><p><span class="strong">10.30</span> The email address of a party must be unique within +an OpenACS system.</p></dd><dt><span class="term"><span class="strong">20.0 Groups</span> -</span></dt><dd><p>A <span class="strong"><em>group</em></span> is a collection of zero or more parties.</p><p><span class="strong"><em>20.10</em></span> The data model should support the subclassing of -groups via OpenACS Objects.</p></dd><dt><span class="term"><span class="strong"><em>30.0 Persons</em></span> +</span></dt><dd><p>A <span class="strong">group</span> is a collection of zero or more parties.</p><p><span class="strong">20.10</span> The data model should support the subclassing of +groups via OpenACS Objects.</p></dd><dt><span class="term"><span class="strong">30.0 Persons</span> -</span></dt><dd><p>A <span class="strong"><em>person</em></span> represents an actual human being, past or -present.</p><p><a name="groups-requirements-30-10"></a><span class="strong"><em>30.10.</em></span> A person must have -an associated name.</p></dd><dt><span class="term"><span class="strong"><em>40.0 Users</em></span> +</span></dt><dd><p>A <span class="strong">person</span> represents an actual human being, past or +present.</p><p><a name="groups-requirements-30-10"></a><span class="strong">30.10.</span> A person must have +an associated name.</p></dd><dt><span class="term"><span class="strong">40.0 Users</span> -</span></dt><dd><p>A <span class="strong"><em>user</em></span> is a person who has registered with an OpenACS site. A -user may have additional attributes, such as a screen name.</p><p>The data model should enforce these constraints:</p><p><span class="strong"><em>40.10</em></span> A user must have a non-empty email address.</p><p><span class="strong"><em>40.20</em></span> Two different users may not have the same email +</span></dt><dd><p>A <span class="strong">user</span> is a person who has registered with an OpenACS site. A +user may have additional attributes, such as a screen name.</p><p>The data model should enforce these constraints:</p><p><span class="strong">40.10</span> A user must have a non-empty email address.</p><p><span class="strong">40.20</span> Two different users may not have the same email address on a single OpenACS installation; i.e., an email address identifies a -single user on the system.</p><p><span class="strong"><em>40.30</em></span> A user may have multiple email addresses; for -example, two or more email addresses may identify a single user.</p><p><span class="strong"><em>40.40</em></span> A user must have password field which can be +single user on the system.</p><p><span class="strong">40.30</span> A user may have multiple email addresses; for +example, two or more email addresses may identify a single user.</p><p><span class="strong">40.40</span> A user must have password field which can be empty.</p></dd></dl></div><p>The data model for the parties and groups system must provide support for -the following types of relationships between entities:</p><div class="variablelist"><dl><dt><span class="term"><span class="strong"><em>50.0 Membership</em></span> +the following types of relationships between entities:</p><div class="variablelist"><dl><dt><span class="term"><span class="strong">50.0 Membership</span> </span></dt><dd><p> -A party <span class="strong"><em>P</em></span> is considered a <span class="strong"><em>member</em></span> of a -group <span class="strong"><em>G</em></span></p><div class="itemizedlist"><ul type="disc"><li><p>when a direct membership relationship exists between <span class="strong"><em>P</em></span> -and <span class="strong"><em>G</em></span></p></li><li><p>or when there exists a direct membership relationship between -<span class="strong"><em>P</em></span> and some group <span class="strong"><em>G<sub>C</sub></em></span> and -<span class="strong"><em>G<sub>C</sub></em></span> has a composition relationship (c.f., <a href="groups-requirements.html#groups-requirements-60-0">60.0</a>) with <span class="strong"><em>G</em></span>.</p></li></ul></div><p><span class="strong"><em>50.10</em></span> A party may be a member of multiple groups.</p><p><span class="strong"><em>50.20</em></span> A party may be a member of the same group multiple +A party <span class="strong">P</span> is considered a <span class="strong">member</span> of a +group <span class="strong">G</span></p><div class="itemizedlist"><ul type="disc"><li><p>when a direct membership relationship exists between <span class="strong">P</span> +and <span class="strong">G</span></p></li><li><p>or when there exists a direct membership relationship between +<span class="strong">P</span> and some group <span class="strong">G<sub>C</sub></span> and +<span class="strong">G<sub>C</sub></span> has a composition relationship (c.f., <a href="groups-requirements.html#groups-requirements-60-0">60.0</a>) with <span class="strong">G</span>.</p></li></ul></div><p><span class="strong">50.10</span> A party may be a member of multiple groups.</p><p><span class="strong">50.20</span> A party may be a member of the same group multiple times only when all the memberships have different types; for example, Jane may be a member of The Company by being both an Employee and an -Executive.</p><p><span class="strong"><em>50.30</em></span> A party as a member of itself is not supported.</p><p><span class="strong"><em>50.40</em></span> The data model must support membership -constraints.</p><p><span class="strong"><em>50.50</em></span>The data model should support the subclassing of +Executive.</p><p><span class="strong">50.30</span> A party as a member of itself is not supported.</p><p><span class="strong">50.40</span> The data model must support membership +constraints.</p><p><span class="strong">50.50</span>The data model should support the subclassing of membership via OpenACS Relationships.</p></dd></dl></div><div class="variablelist"><dl><dt><span class="term"> <a name="groups-requirements-60-0"></a> -<span class="strong"><em>60.0 Composition</em></span> -</span></dt><dd><p>A group <span class="strong"><em>G<sub>C</sub></em></span> is considered a -<span class="strong"><em>component</em></span> of a second group -<span class="strong"><em>G<sub>P</sub></em></span></p><div class="itemizedlist"><ul type="disc"><li><p>when a direct composition relationship exists between -<span class="strong"><em>G<sub>C</sub></em></span> and <span class="strong"><em>G<sub>P</sub></em></span></p></li><li><p>or when there exists a direct composition relationship between -<span class="strong"><em>G<sub>C</sub></em></span> and some group <span class="strong"><em>G<sub>i</sub></em></span> -and <span class="strong"><em>G<sub>i</sub></em></span> has a composition relationship with -<span class="strong"><em>G<sub>P</sub></em></span>.</p></li></ul></div><p><span class="strong"><em>60.10</em></span>A group may be a component of multiple groups.</p><p><span class="strong"><em>60.20</em></span>A group as a component of itself is not -supported.</p><p><span class="strong"><em>60.30</em></span>The data model must support component -constraints.</p><p><span class="strong"><em>60.40</em></span>The data model should support the subclassing of -composition via OpenACS Relationships.</p></dd></dl></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-requirements-api"></a>Requirements: API</h3></div></div><p>The API should let programmers accomplish the following tasks:</p><div class="variablelist"><dl><dt><span class="term"><span class="strong"><em>70.10 Create a group</em></span> +<span class="strong">60.0 Composition</span> +</span></dt><dd><p>A group <span class="strong">G<sub>C</sub></span> is considered a +<span class="strong">component</span> of a second group +<span class="strong">G<sub>P</sub></span></p><div class="itemizedlist"><ul type="disc"><li><p>when a direct composition relationship exists between +<span class="strong">G<sub>C</sub></span> and <span class="strong">G<sub>P</sub></span></p></li><li><p>or when there exists a direct composition relationship between +<span class="strong">G<sub>C</sub></span> and some group <span class="strong">G<sub>i</sub></span> +and <span class="strong">G<sub>i</sub></span> has a composition relationship with +<span class="strong">G<sub>P</sub></span>.</p></li></ul></div><p><span class="strong">60.10</span>A group may be a component of multiple groups.</p><p><span class="strong">60.20</span>A group as a component of itself is not +supported.</p><p><span class="strong">60.30</span>The data model must support component +constraints.</p><p><span class="strong">60.40</span>The data model should support the subclassing of +composition via OpenACS Relationships.</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-requirements-api"></a>Requirements: API</h3></div></div><p>The API should let programmers accomplish the following tasks:</p><div class="variablelist"><dl><dt><span class="term"><span class="strong">70.10 Create a group</span> </span></dt><dd><p>The parties and groups system provides a well defined API call that creates a new group by running the appropriate transactions on the parties and groups system data model. This API is subject to the constraints laid out -in the data model.</p></dd><dt><span class="term"><span class="strong"><em>70.20 Create a person</em></span> +in the data model.</p></dd><dt><span class="term"><span class="strong">70.20 Create a person</span> </span></dt><dd><p>The parties and groups system provides a well defined API call that creates a new person by running the appropriate transactions on the parties and groups system data model. This API is subject to the constraints laid out -in the data model.</p></dd><dt><span class="term"><span class="strong"><em>70.30 Create a user</em></span> +in the data model.</p></dd><dt><span class="term"><span class="strong">70.30 Create a user</span> </span></dt><dd><p>The parties and groups system provides a well defined API call that creates a new user by running the appropriate transactions on the parties and groups system data model. This API is subject to the constraints laid out in -the data model.</p></dd><dt><span class="term"><span class="strong"><em>80.10 Refine a person to a user</em></span> +the data model.</p></dd><dt><span class="term"><span class="strong">80.10 Refine a person to a user</span> </span></dt><dd><p>The parties and groups system provides a well defined API call that creates a new user by running the appropriate transactions on an existing person entity. This API is subject to the constraints laid out in the data -model.</p></dd><dt><span class="term"><span class="strong"><em>80.30 Demote a user to a person</em></span> +model.</p></dd><dt><span class="term"><span class="strong">80.30 Demote a user to a person</span> </span></dt><dd><p>The parties and groups system provides a well defined API call that demotes an existing user entity to a person entity by running the appropriate transactions on the existing user. This API is subject to the constraints -laid out in the data model.</p></dd><dt><span class="term"><span class="strong"><em>90.10 Update a party</em></span> +laid out in the data model.</p></dd><dt><span class="term"><span class="strong">90.10 Update a party</span> </span></dt><dd><p>The programmer should be able to modify, add, and delete attributes on any -party. This API is subject to the constraints laid out in the data model.</p></dd><dt><span class="term"><span class="strong"><em>95.10 Get the attributes of a party</em></span> +party. This API is subject to the constraints laid out in the data model.</p></dd><dt><span class="term"><span class="strong">95.10 Get the attributes of a party</span> </span></dt><dd><p>The programmer should be able to view the attributes on any party. This -API is subject to the constraints laid out in the data model.</p></dd><dt><span class="term"><span class="strong"><em>100.10 Delete a party</em></span> +API is subject to the constraints laid out in the data model.</p></dd><dt><span class="term"><span class="strong">100.10 Delete a party</span> </span></dt><dd><p>The system provides an API for deleting a party. This API is subject to -the constraints laid out in the data model.</p><p><span class="strong"><em>100.30</em></span> The system may provide a single API call to remove -the party from all groups and then delete the party.</p><p><span class="strong"><em>100.40</em></span> In the case of a group, the system may provide a +the constraints laid out in the data model.</p><p><span class="strong">100.30</span> The system may provide a single API call to remove +the party from all groups and then delete the party.</p><p><span class="strong">100.40</span> In the case of a group, the system may provide a single API call to remove all parties from a group and then delete the -group.</p></dd><dt><span class="term"><span class="strong"><em>110.0 Add a party as a member of a group</em></span> +group.</p></dd><dt><span class="term"><span class="strong">110.0 Add a party as a member of a group</span> </span></dt><dd><p>The parties and groups system provides an API for adding a party as a member of a group. This API is subject to the constraints laid out in the -data model.</p></dd><dt><span class="term"><span class="strong"><em>115.0 Add a group as a component of a second group</em></span> +data model.</p></dd><dt><span class="term"><span class="strong">115.0 Add a group as a component of a second group</span> </span></dt><dd><p>The parties and groups system provides an API for adding a group as a component of a second group. This API is subject to the constraints laid out -in the data model.</p></dd><dt><span class="term"><span class="strong"><em>120.0 Remove a party as a member of a group</em></span> +in the data model.</p></dd><dt><span class="term"><span class="strong">120.0 Remove a party as a member of a group</span> </span></dt><dd><p>The parties and groups system provides an API for deleting a party's membership in a group. This API is subject to the constraints laid out in the -data model.</p></dd><dt><span class="term"><span class="strong"><em>125.0 Remove a group as a component of a second -group</em></span> +data model.</p></dd><dt><span class="term"><span class="strong">125.0 Remove a group as a component of a second +group</span> </span></dt><dd><p>The parties and groups system provides an API for deleting a group's composition in a second group. This API is subject to the constraints laid -out in the data model.</p></dd><dt><span class="term"><span class="strong"><em>130.0 Membership check</em></span> +out in the data model.</p></dd><dt><span class="term"><span class="strong">130.0 Membership check</span> </span></dt><dd><p>The parties and groups system provides an API for answering the question: -"Is party <span class="strong"><em>P</em></span> a member of group -<span class="strong"><em>G</em></span>?"</p></dd><dt><span class="term"><span class="strong"><em>135.0 Composition check</em></span> +"Is party <span class="strong">P</span> a member of group +<span class="strong">G</span>?"</p></dd><dt><span class="term"><span class="strong">135.0 Composition check</span> </span></dt><dd><p>The parties and groups system provides an API for answering the question: -"Is group <span class="strong"><em>G<sub>C</sub></em></span> a component of group -<span class="strong"><em>G<sub>P</sub></em></span>?"</p></dd><dt><span class="term"><span class="strong"><em>140.0 Get members query</em></span> +"Is group <span class="strong">G<sub>C</sub></span> a component of group +<span class="strong">G<sub>P</sub></span>?"</p></dd><dt><span class="term"><span class="strong">140.0 Get members query</span> </span></dt><dd><p>The parties and groups system provides an API for answering the question: -"Which parties are members of group <span class="strong"><em>G</em></span>?"</p></dd><dt><span class="term"><span class="strong"><em>145.0 Get components query</em></span> +"Which parties are members of group <span class="strong">G</span>?"</p></dd><dt><span class="term"><span class="strong">145.0 Get components query</span> </span></dt><dd><p>The parties and groups system provides an API for answering the question: -"Which groups are components of group <span class="strong"><em>G</em></span>?"</p></dd><dt><span class="term"><span class="strong"><em>150.0 Member-of-groups query</em></span> +"Which groups are components of group <span class="strong">G</span>?"</p></dd><dt><span class="term"><span class="strong">150.0 Member-of-groups query</span> </span></dt><dd><p>The parties and groups system provides an API for answering the question: -"Of which groups is party <span class="strong"><em>P</em></span> a member?"</p></dd><dt><span class="term"><span class="strong"><em>155.0 Component-of-groups query</em></span> +"Of which groups is party <span class="strong">P</span> a member?"</p></dd><dt><span class="term"><span class="strong">155.0 Component-of-groups query</span> </span></dt><dd><p>The parties and groups system provides an API for answering the question: -"Of which groups is group <span class="strong"><em>G</em></span> a component?"</p></dd><dt><span class="term"><span class="strong"><em>160.0 Allowed membership check</em></span> +"Of which groups is group <span class="strong">G</span> a component?"</p></dd><dt><span class="term"><span class="strong">160.0 Allowed membership check</span> </span></dt><dd><p>The parties and groups system provides an API for answering the question: -"Is party <span class="strong"><em>P</em></span> allowed to become a member of group -<span class="strong"><em>G</em></span>?"</p></dd><dt><span class="term"><span class="strong"><em>165.0 Allowed composition check</em></span> +"Is party <span class="strong">P</span> allowed to become a member of group +<span class="strong">G</span>?"</p></dd><dt><span class="term"><span class="strong">165.0 Allowed composition check</span> </span></dt><dd><p>The parties and groups system provides an API for answering the question: -"Is group <span class="strong"><em>G<sub>C</sub></em></span> allowed to become a component -of group <span class="strong"><em>G<sub>P</sub></em></span>?"</p></dd><dt><span class="term"><span class="strong"><em>170.0 Efficiency</em></span> +"Is group <span class="strong">G<sub>C</sub></span> allowed to become a component +of group <span class="strong">G<sub>P</sub></span>?"</p></dd><dt><span class="term"><span class="strong">170.0 Efficiency</span> </span></dt><dd><p>Since many pages at a site may check membership in a group before serving a page (e.g., as part of a general permissions check), the data model must support the efficient storage and retrieval of party attributes and -membership.</p></dd><dt><span class="term"><span class="strong"><em>180.0 Ease of Use</em></span> +membership.</p></dd><dt><span class="term"><span class="strong">180.0 Ease of Use</span> </span></dt><dd><p>Since many SQL queries will check membership in a group as part of the <tt>where</tt> clause, whatever mechanism is used to check membership in SQL -should be fairly small and simple.</p></dd></dl></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-requirements-ui"></a>Requirements: User Interface</h3></div></div><p>The user interface is a set of HTML pages that are used to drive the -underlying API. The user interface may provide the following functions:</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em>200.0</em></span> Create a party</p></li><li><p><span class="strong"><em>210.0</em></span> View the attributes of a party</p></li><li><p><span class="strong"><em>220.0</em></span> Update the attributes of a party</p></li><li><p><span class="strong"><em>240.0</em></span> Delete a party</p></li><li><p><span class="strong"><em>250.0</em></span> Add a party to a group</p></li><li><p><span class="strong"><em>260.0</em></span> Remove a party from a group</p></li><li><p><span class="strong"><em>270.0</em></span> Perform the membership and composition checks -outlined in 130.x to 165.x</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="groups-requirements-rev-history"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong"><em>Document Revision #</em></span></td><td><span class="strong"><em>Action Taken, Notes</em></span></td><td><span class="strong"><em>When?</em></span></td><td><span class="strong"><em>By Whom?</em></span></td></tr><tr><td>0.1</td><td>Creation</td><td>08/16/2000</td><td>Rafael Schloming</td></tr><tr><td>0.2</td><td>Initial revision</td><td>08/19/2000</td><td>Mark Thomas</td></tr><tr><td>0.3</td><td>Edited and reviewed, conforms to requirements template</td><td>08/23/2000</td><td>Kai Wu</td></tr><tr><td>0.4</td><td>Further revised, added UI requirements</td><td>08/24/2000</td><td>Mark Thomas</td></tr><tr><td>0.5</td><td>Final edits, pending freeze</td><td>08/24/2000</td><td>Kai Wu</td></tr><tr><td>0.6</td><td>More revisions, added composition requirements</td><td>08/30/2000</td><td>Mark Thomas</td></tr><tr><td>0.7</td><td>More revisions, added composition requirements</td><td>09/08/2000</td><td>Mark Thomas</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="permissions-design.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="groups-design.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Permissions Design </td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right"> OpenACS 4 Groups Design</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/groups-requirements.html#comments">View comments on this page at openacs.org</a></center></body></html> +should be fairly small and simple.</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-requirements-ui"></a>Requirements: User Interface</h3></div></div><p>The user interface is a set of HTML pages that are used to drive the +underlying API. The user interface may provide the following functions:</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong">200.0</span> Create a party</p></li><li><p><span class="strong">210.0</span> View the attributes of a party</p></li><li><p><span class="strong">220.0</span> Update the attributes of a party</p></li><li><p><span class="strong">240.0</span> Delete a party</p></li><li><p><span class="strong">250.0</span> Add a party to a group</p></li><li><p><span class="strong">260.0</span> Remove a party from a group</p></li><li><p><span class="strong">270.0</span> Perform the membership and composition checks +outlined in 130.x to 165.x</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="groups-requirements-rev-history"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong">Document Revision #</span></td><td><span class="strong">Action Taken, Notes</span></td><td><span class="strong">When?</span></td><td><span class="strong">By Whom?</span></td></tr><tr><td>0.1</td><td>Creation</td><td>08/16/2000</td><td>Rafael Schloming</td></tr><tr><td>0.2</td><td>Initial revision</td><td>08/19/2000</td><td>Mark Thomas</td></tr><tr><td>0.3</td><td>Edited and reviewed, conforms to requirements template</td><td>08/23/2000</td><td>Kai Wu</td></tr><tr><td>0.4</td><td>Further revised, added UI requirements</td><td>08/24/2000</td><td>Mark Thomas</td></tr><tr><td>0.5</td><td>Final edits, pending freeze</td><td>08/24/2000</td><td>Kai Wu</td></tr><tr><td>0.6</td><td>More revisions, added composition requirements</td><td>08/30/2000</td><td>Mark Thomas</td></tr><tr><td>0.7</td><td>More revisions, added composition requirements</td><td>09/08/2000</td><td>Mark Thomas</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="permissions-design.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="groups-design.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Permissions Design&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS 4 Groups Design</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/groups-requirements.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/index.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/index.html,v diff -u -r1.6.2.5 -r1.6.2.6 --- openacs-4/packages/acs-core-docs/www/index.html 7 Apr 2003 16:59:25 -0000 1.6.2.5 +++ openacs-4/packages/acs-core-docs/www/index.html 15 Apr 2003 17:03:02 -0000 1.6.2.6 @@ -1,2 +1,2 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS Documentation</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="next" href="for-everyone.html" title="Part I. OpenACS For Everyone"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="for-everyone.html">Next</a></td></tr></table><hr></div><div class="book"><div class="titlepage"><div><h1 class="title"><a name="id2768853"></a>OpenACS Documentation</h1></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt>I. <a href="for-everyone.html">OpenACS For Everyone</a></dt><dd><dl><dt>1. <a href="general-documents.html">High level information: What is OpenACS?</a></dt><dd><dl><dt><a href="openacs-overview.html">Overview</a></dt><dt><a href="release-notes.html">OpenACS 4.6.2 Release Notes</a></dt></dl></dd></dl></dd><dt>II. <a href="acs-admin.html">Administrator's Guide</a></dt><dd><dl><dt>2. <a href="software-versions.html">Prerequisite Software</a></dt><dd><dl><dt><a href="individual-programs.html">Individual Programs</a></dt></dl></dd><dt>3. <a href="unix-install.html">Installing on Unix/Linux</a></dt><dd><dl><dt><a href="install-overview.html">Overview</a></dt><dt><a href="linux-installation.html">Install Linux and supporting software</a></dt><dt><a href="oracle.html">Install Oracle 8.1.7</a></dt><dt><a href="postgres.html">Install PostgreSQL 7.2.3</a></dt><dt><a href="aolserver.html">Install AOLserver 3.3+ad13</a></dt><dt><a href="openacs.html">Install OpenACS 4.6.2</a></dt><dt><a href="credits.html">Credits</a></dt></dl></dd><dt>4. <a href="win-install.html">Installing on Windows</a></dt><dd><dl><dt><a href="win2k-installation.html">OpenACS Installation Guide for Windows2000</a></dt></dl></dd><dt>5. <a href="mac-install.html">Installing on a Macintosh</a></dt><dd><dl><dt><a href="mac-installation.html">OpenACS Installation Guide for Mac OS X</a></dt></dl></dd><dt>6. <a href="upgrade.html">Upgrading</a></dt><dd><dl><dt><a href="upgrade-detail.html">Support for upgrades.</a></dt><dt><a href="upgrade-4.5-to-4.6.html">Upgrading OpenACS 4.5 to 4.6</a></dt></dl></dd><dt>7. <a href="maintenance.html">Maintenance</a></dt><dd><dl><dt><a href="maintenance-web.html">Hosting Web Sites</a></dt><dt><a href="database-management.html">Database Management</a></dt><dt><a href="backup-recovery.html">Backup and Recovery</a></dt></dl></dd><dt>A. <a href="install-redhat.html">Install Red Hat 8.0</a></dt></dl></dd><dt>III. <a href="acs-dev.html">For OpenACS Developers</a></dt><dd><dl><dt>8. <a href="tutorial.html">Development Tutorial</a></dt><dd><dl><dt><a href="tutorial-newpackage.html">Creating a Package</a></dt><dt><a href="tutorial-database.html">Setting Up Database Objects</a></dt><dt><a href="tutorial-pages.html">Creating Web Pages</a></dt><dt><a href="tutorial-debug.html">Debugging and Automated Testing</a></dt><dt><a href="tutorial-advanced.html">Advanced Topics</a></dt></dl></dd><dt>9. <a href="dev-guide.html">Development Reference</a></dt><dd><dl><dt><a href="packages.html">OpenACS 4.6.2 Packages</a></dt><dt><a href="objects.html">OpenACS 4.6.2 Data Models and the Object System</a></dt><dt><a href="request-processor.html">The Request Processor</a></dt><dt><a href="db-api.html">The OpenACS Database Access API</a></dt><dt><a href="templates.html">Using Templates in OpenACS 4.6.2</a></dt><dt><a href="permissions.html">Groups, Context, Permissions</a></dt><dt><a href="subsites.html">Writing OpenACS 4.6.2 Application Pages</a></dt><dt><a href="parties.html">Parties in OpenACS 4.6.2</a></dt><dt><a href="permissions-tediously-explained.html">OpenACS 4.x Permissions Tediously Explained</a></dt><dt><a href="object-identity.html">Object Identity</a></dt><dt><a href="programming-with-aolserver.html">Programming with AOLserver</a></dt></dl></dd><dt>10. <a href="eng-standards.html">Engineering Standards</a></dt><dd><dl><dt><a href="docbook-primer.html">OpenACS Documentation Guide</a></dt><dt><a href="psgml-mode.html">Using PSGML mode in Emacs</a></dt><dt><a href="filename.html">Detailed Design Documentation Template</a></dt><dt><a href="requirements-template.html">System/Application Requirements Template</a></dt><dt><a href="eng-standards-versioning.html">Release Version Numbering</a></dt><dt><a href="eng-standards-constraint-naming.html">Constraint naming standard</a></dt><dt><a href="eng-standards-filenaming.html">ACS File Naming and Formatting Standards</a></dt><dt><a href="eng-standards-plsql.html">PL/SQL Standards</a></dt></dl></dd><dt>11. <a href="kernel-doc.html">Kernel Documentation</a></dt><dd><dl><dt><a href="kernel-overview.html">Overview</a></dt><dt><a href="object-system-requirements.html">OpenACS 4 Object Model Requirements</a></dt><dt><a href="object-system-design.html">OpenACS 4 Object Model Design</a></dt><dt><a href="permissions-requirements.html">OpenACS 4 Permissions Requirements</a></dt><dt><a href="permissions-design.html">OpenACS 4 Permissions Design</a></dt><dt><a href="groups-requirements.html">OpenACS 4 Groups Requirements</a></dt><dt><a href="groups-design.html">OpenACS 4 Groups Design</a></dt><dt><a href="subsites-requirements.html">OpenACS 4 Subsites Requirements</a></dt><dt><a href="subsites-design.html">OpenACS 4 Subsites Design Document</a></dt><dt><a href="apm-requirements.html">OpenACS 4.6.2 Package Manager Requirements</a></dt><dt><a href="apm-design.html">OpenACS 4.6.2 Package Manager Design</a></dt><dt><a href="db-api-detailed.html">Database Access API</a></dt><dt><a href="security-requirements.html">OpenACS 4 Security Requirements</a></dt><dt><a href="security-design.html">OpenACS 4 Security Design</a></dt><dt><a href="security-notes.html">OpenACS 4 Security Notes</a></dt><dt><a href="rp-requirements.html">OpenACS 4 Request Processor Requirements</a></dt><dt><a href="rp-design.html">OpenACS 4 Request Processor Design</a></dt><dt><a href="tcl-doc.html">Documenting Tcl Files: Page Contracts and Libraries</a></dt><dt><a href="bootstrap-acs.html">Bootstrapping OpenACS</a></dt></dl></dd></dl></dd></dl></div><div class="list-of-figures"><p><b>List of Figures</b></p><dl><dt>3.1. <a href="linux-installation.html#id2833804">Assumptions in this section</a></dt><dt>6.1. <a href="upgrade-4.5-to-4.6.html#id2847523">Assumptions in this section</a></dt><dt>8.1. <a href="tutorial-newpackage.html#id2853008">Assumptions in this section</a></dt><dt>8.2. <a href="tutorial-database.html#id2854164">Database Creation Script - master create file</a></dt><dt>8.3. <a href="tutorial-database.html#id2854210">Database Creation Script - table</a></dt><dt>8.4. <a href="tutorial-database.html#id2854291">Database Creation Script - functions</a></dt><dt>8.5. <a href="tutorial-database.html#id2853991">Database deletion script</a></dt></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>9.1. <a href="permissions-tediously-explained.html#id2866529"></a></dt><dt>9.2. <a href="permissions-tediously-explained.html#id2866900"></a></dt><dt>9.3. <a href="permissions-tediously-explained.html#id2867120"></a></dt><dt>9.4. <a href="permissions-tediously-explained.html#id2867283"></a></dt><dt>9.5. <a href="permissions-tediously-explained.html#id2867406"></a></dt><dt>9.6. <a href="permissions-tediously-explained.html#id2868065"></a></dt><dt>9.7. <a href="permissions-tediously-explained.html#id2868340"></a></dt><dt>9.8. <a href="permissions-tediously-explained.html#id2868524"></a></dt><dt>9.9. <a href="permissions-tediously-explained.html#id2868894"></a></dt><dt>9.10. <a href="permissions-tediously-explained.html#id2869334"></a></dt><dt>9.11. <a href="permissions-tediously-explained.html#id2869577"></a></dt><dt>9.12. <a href="permissions-tediously-explained.html#id2870323"></a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="for-everyone.html">Next</a></td></tr><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> Part I. OpenACS For Everyone</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/index.html#comments">View comments on this page at openacs.org</a></center></body></html> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS Documentation</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="next" href="for-everyone.html" title="Part�I.�OpenACS For Everyone"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left">&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="for-everyone.html">Next</a></td></tr></table><hr></div><div class="book" lang="en"><div class="titlepage"><div><h1 class="title"><a name="id2809270"></a>OpenACS Documentation</h1></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt>I. <a href="for-everyone.html">OpenACS For Everyone</a></dt><dd><dl><dt>1. <a href="general-documents.html">High level information: What is OpenACS?</a></dt><dd><dl><dt><a href="openacs-overview.html">Overview</a></dt><dt><a href="release-notes.html">OpenACS 4.6.2 Release Notes</a></dt></dl></dd></dl></dd><dt>II. <a href="acs-admin.html">Administrator's Guide</a></dt><dd><dl><dt>2. <a href="software-versions.html">Prerequisite Software</a></dt><dd><dl><dt><a href="individual-programs.html">Individual Programs</a></dt></dl></dd><dt>3. <a href="unix-install.html">Installing on Unix/Linux</a></dt><dd><dl><dt><a href="install-overview.html">Overview</a></dt><dt><a href="linux-installation.html">Install Linux and supporting software</a></dt><dt><a href="oracle.html">Install Oracle 8.1.7</a></dt><dt><a href="postgres.html">Install PostgreSQL 7.2.3</a></dt><dt><a href="aolserver.html">Install AOLserver 3.3+ad13</a></dt><dt><a href="openacs.html">Install OpenACS 4.6.2</a></dt><dt><a href="credits.html">Credits</a></dt></dl></dd><dt>4. <a href="win-install.html">Installing on Windows</a></dt><dd><dl><dt><a href="win2k-installation.html">OpenACS Installation Guide for Windows2000</a></dt></dl></dd><dt>5. <a href="mac-install.html">Installing on a Macintosh</a></dt><dt>6. <a href="upgrade.html">Upgrading</a></dt><dd><dl><dt><a href="upgrade-detail.html">Support for upgrades.</a></dt><dt><a href="upgrade-4.5-to-4.6.html">Upgrading OpenACS 4.5 to 4.6</a></dt></dl></dd><dt>7. <a href="maintenance.html">Maintenance</a></dt><dd><dl><dt><a href="database-management.html">Database Management</a></dt><dt><a href="backup-recovery.html">Backup and Recovery</a></dt></dl></dd><dt>A. <a href="install-redhat.html">Install Red Hat 8.0</a></dt></dl></dd><dt>III. <a href="acs-dev.html">For OpenACS Developers</a></dt><dd><dl><dt>8. <a href="tutorial.html">Development Tutorial</a></dt><dd><dl><dt><a href="tutorial-database.html">Setting Up Database Objects</a></dt><dt><a href="tutorial-pages.html">Creating Web Pages</a></dt><dt><a href="tutorial-debug.html">Debugging and Automated Testing</a></dt><dt><a href="tutorial-advanced.html">Advanced Topics</a></dt></dl></dd><dt>9. <a href="dev-guide.html">Development Reference</a></dt><dd><dl><dt><a href="packages.html">OpenACS 4.6.2 Packages</a></dt><dt><a href="objects.html">OpenACS 4.6.2 Data Models and the Object System</a></dt><dt><a href="request-processor.html">The Request Processor</a></dt><dt><a href="db-api.html">The OpenACS Database Access API</a></dt><dt><a href="templates.html">Using Templates in OpenACS 4.6.2</a></dt><dt><a href="permissions.html">Groups, Context, Permissions</a></dt><dt><a href="subsites.html">Writing OpenACS 4.6.2 Application Pages</a></dt><dt><a href="parties.html">Parties in OpenACS 4.6.2</a></dt><dt><a href="permissions-tediously-explained.html">OpenACS 4.x Permissions Tediously Explained</a></dt><dt><a href="object-identity.html">Object Identity</a></dt><dt><a href="programming-with-aolserver.html">Programming with AOLserver</a></dt></dl></dd><dt>10. <a href="eng-standards.html">Engineering Standards</a></dt><dd><dl><dt><a href="docbook-primer.html">OpenACS Documentation Guide</a></dt><dt><a href="psgml-mode.html">Using PSGML mode in Emacs</a></dt><dt><a href="filename.html">Detailed Design Documentation Template</a></dt><dt><a href="requirements-template.html">System/Application Requirements Template</a></dt><dt><a href="eng-standards-versioning.html">Release Version Numbering</a></dt><dt><a href="eng-standards-constraint-naming.html">Constraint naming standard</a></dt><dt><a href="eng-standards-filenaming.html">ACS File Naming and Formatting Standards</a></dt><dt><a href="eng-standards-plsql.html">PL/SQL Standards</a></dt></dl></dd><dt>11. <a href="kernel-doc.html">Kernel Documentation</a></dt><dd><dl><dt><a href="kernel-overview.html">Overview</a></dt><dt><a href="object-system-requirements.html">OpenACS 4 Object Model Requirements</a></dt><dt><a href="object-system-design.html">OpenACS 4 Object Model Design</a></dt><dt><a href="permissions-requirements.html">OpenACS 4 Permissions Requirements</a></dt><dt><a href="permissions-design.html">OpenACS 4 Permissions Design</a></dt><dt><a href="groups-requirements.html">OpenACS 4 Groups Requirements</a></dt><dt><a href="groups-design.html">OpenACS 4 Groups Design</a></dt><dt><a href="subsites-requirements.html">OpenACS 4 Subsites Requirements</a></dt><dt><a href="subsites-design.html">OpenACS 4 Subsites Design Document</a></dt><dt><a href="apm-requirements.html">OpenACS 4.6.2 Package Manager Requirements</a></dt><dt><a href="apm-design.html">OpenACS 4.6.2 Package Manager Design</a></dt><dt><a href="db-api-detailed.html">Database Access API</a></dt><dt><a href="security-requirements.html">OpenACS 4 Security Requirements</a></dt><dt><a href="security-design.html">OpenACS 4 Security Design</a></dt><dt><a href="security-notes.html">OpenACS 4 Security Notes</a></dt><dt><a href="rp-requirements.html">OpenACS 4 Request Processor Requirements</a></dt><dt><a href="rp-design.html">OpenACS 4 Request Processor Design</a></dt><dt><a href="tcl-doc.html">Documenting Tcl Files: Page Contracts and Libraries</a></dt><dt><a href="bootstrap-acs.html">Bootstrapping OpenACS</a></dt></dl></dd></dl></dd></dl></div><div class="list-of-figures"><p><b>List of Figures</b></p><dl><dt>3.1. <a href="linux-installation.html#id2873572">Assumptions in this section</a></dt><dt>6.1. <a href="upgrade-4.5-to-4.6.html#id2900916">Assumptions in this section</a></dt><dt>8.1. <a href="tutorial-database.html#id2912816">Database Creation Script - master create file</a></dt><dt>8.2. <a href="tutorial-database.html#id2912863">Database Creation Script - table</a></dt><dt>8.3. <a href="tutorial-database.html#id2910891">Database Creation Script - functions</a></dt><dt>8.4. <a href="tutorial-database.html#id2910997">Database deletion script</a></dt></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>9.1. <a href="permissions-tediously-explained.html#id2934367"></a></dt><dt>9.2. <a href="permissions-tediously-explained.html#id2935896"></a></dt><dt>9.3. <a href="permissions-tediously-explained.html#id2936114"></a></dt><dt>9.4. <a href="permissions-tediously-explained.html#id2936274"></a></dt><dt>9.5. <a href="permissions-tediously-explained.html#id2936398"></a></dt><dt>9.6. <a href="permissions-tediously-explained.html#id2941469"></a></dt><dt>9.7. <a href="permissions-tediously-explained.html#id2941740"></a></dt><dt>9.8. <a href="permissions-tediously-explained.html#id2941925"></a></dt><dt>9.9. <a href="permissions-tediously-explained.html#id2942279"></a></dt><dt>9.10. <a href="permissions-tediously-explained.html#id2942697"></a></dt><dt>9.11. <a href="permissions-tediously-explained.html#id2942936"></a></dt><dt>9.12. <a href="permissions-tediously-explained.html#id2943645"></a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left">&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="for-everyone.html">Next</a></td></tr><tr><td width="40%" align="left">&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;Part�I.�OpenACS For Everyone</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/index.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/individual-programs.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/individual-programs.html,v diff -u -r1.1.2.3 -r1.1.2.4 --- openacs-4/packages/acs-core-docs/www/individual-programs.html 7 Apr 2003 16:59:25 -0000 1.1.2.3 +++ openacs-4/packages/acs-core-docs/www/individual-programs.html 15 Apr 2003 17:03:02 -0000 1.1.2.4 @@ -1,19 +1,19 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Individual Programs</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="software-versions.html" title="Chapter 2. Prerequisite Software"><link rel="previous" href="software-versions.html" title="Chapter 2. Prerequisite Software"><link rel="next" href="unix-install.html" title="Chapter 3. Installing on Unix/Linux"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="software-versions.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Prerequisite Software</th><td width="20%" align="right"> <a accesskey="n" href="unix-install.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="individual-programs"></a>Individual Programs</h2></div></div><div class="itemizedlist"><ul type="disc"><li><a name="openacs-download"></a><p><b><a href="http://openacs.org/projects/openacs/download/one-revision?revision_id=69738" target="_top">OpenACS 4.6.2</a>.�</b>The OpenACS tarball comprises the core packages and +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Individual Programs</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="software-versions.html" title="Chapter�2.�Prerequisite Software"><link rel="previous" href="software-versions.html" title="Chapter�2.�Prerequisite Software"><link rel="next" href="unix-install.html" title="Chapter�3.�Installing on Unix/Linux"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="software-versions.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�2.�Prerequisite Software</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="unix-install.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="individual-programs"></a>Individual Programs</h2></div></div><div class="itemizedlist"><ul type="disc"><li><a name="openacs-download"></a><p><b><a href="http://openacs.org/projects/openacs/download/one-revision?revision_id=69738" target="_top">OpenACS 4.6.2</a>.�</b>The OpenACS tarball comprises the core packages and many useful additional packages. This includes a full set of documentation. The tarball works with both PostGreSQL and Oracle.</p></li><li><p><b>Operating System.�</b>OpenACS is designed for a Unix-like system. It is developed primarily in Linux. It can be run on Mac OS X, - and in Windows within VMWare.</p><div class="itemizedlist"><ul type="round"><li><p><b>Linux.�</b><a href="linux-installation.html" title="Install Linux and supporting software">the section called “Install Linux and supporting software”</a>. The installation assumes a linux kernel of 2.2.22 or newer, or 2.4.14 or newer.</p></li><li><p><b>FreeBSD.�</b><a href="http://www.orchardlabs.com/freebsd/" target="_top">FreeBSD + and in Windows within VMWare.</p><div class="itemizedlist"><ul type="circle"><li><p><b>Linux.�</b><a href="linux-installation.html" title="Install Linux and supporting software">the section called “Install Linux and supporting software”</a>. The installation assumes a linux kernel of 2.2.22 or newer, or 2.4.14 or newer.</p></li><li><p><b>FreeBSD.�</b><a href="http://www.orchardlabs.com/freebsd/" target="_top">FreeBSD guide</a>. The Reference Platform uses bash, which is the standard Linux shell. If you are using a different shell, you will need to substitute your shell's conventions for setting environment variables when - appropriate.</p></li><li><p><b>Mac OS X.�</b><a href="mac-installation.html" title="OpenACS Installation Guide for Mac OS X">the section called “OpenACS Installation Guide for Mac OS X”</a></p></li><li><p><b>Windows/VMWare.�</b><a href="win2k-installation.html">OpenACS Installation Guide for Windows 2000</a> The only + appropriate.</p></li><li><p><b>Mac OS X.�</b>???</p></li><li><p><b>Windows/VMWare.�</b><a href="win2k-installation.html">OpenACS Installation Guide for Windows 2000</a> The only way to run OpenACS on Windows is through the VMWare emulator. (Please let me know if you have OpenACS running directly in Windows.)</p></li></ul></div></li><li><p><b>Build Environment.�</b>The Reference Platform installation compiles most programs from - source code.</p><div class="itemizedlist"><ul type="round"><li><p><b>glibc 2.1 or newer, REQUIRED.�</b>You need recent versions of these libraries for + source code.</p><div class="itemizedlist"><ul type="circle"><li><p><b>glibc 2.1 or newer, REQUIRED.�</b>You need recent versions of these libraries for Oracle to work properly. If you want Unicode support, you'll need glibc 2.2. This should be included in your operating system distribution.</p></li><li><p><b>GNU Make 3.76.1 or newer, REQUIRED.�</b>PostgreSQL and AOLserver require gmake to @@ -25,7 +25,7 @@ whereas on BSD distributions, <tt>make</tt> and <tt>gmake</tt> are - different.</p></li></ul></div></li><li><p><b>TCL 8.3.�</b></p><div class="itemizedlist"><ul type="round"><li><p><b>TCL 8.3 development headers and libraries, OPTIONAL.�</b> The site-wide-search service, OpenFTS, requires these to + different.</p></li></ul></div></li><li><p><b>TCL 8.3.�</b></p><div class="itemizedlist"><ul type="circle"><li><p><b>TCL 8.3 development headers and libraries, OPTIONAL.�</b> The site-wide-search service, OpenFTS, requires these to compile. (Debian users: <tt>apt-get install tcl8.3-dev</tt>). You need this to install OpenFTS.</p></li></ul></div></li><li><p><b>libxml2 and libxml2-devel, REQUIRED.�</b> OpenACS 4.6.2 stores @@ -39,15 +39,15 @@ database, sends out HTTP responses, and logs requests and errors. OpenACS uses AOLserver; some people have had success running Apache with mod_nsd - see <a href="http://openacs.org/forums/message-view?message_id=21461" target="_top">this - post.</a></p><div class="itemizedlist"><ul type="round"><li><a name="source-aolserver"></a><p><b><a href="http://uptime.openacs.org/aolserver-openacs/aolserver3.3oacs1.tar.gz" target="_top">AOLserver 3.3oacs1</a>, REQUIRED.�</b>Mat Kovach's source distribution of AOLserver, including all of the patches listed below.</p><p> + post.</a></p><div class="itemizedlist"><ul type="circle"><li><a name="source-aolserver"></a><p><b><a href="http://uptime.openacs.org/aolserver-openacs/aolserver3.3oacs1.tar.gz" target="_top">AOLserver 3.3oacs1</a>, REQUIRED.�</b>Mat Kovach's source distribution of AOLserver, including all of the patches listed below.</p><p> Mat Kovach is graciously maintaining an AOLserver distribution that includes all the patches and modules needed to run OpenACS 4.6.2. These instructions will describe how to install using his source distribution. He also has binaries for SuSE 7.3 and OpenBSD 2.8 (and perhaps more to come), currently located at <a href="http://uptime.openacs.org/aolserver-openacs/" target="_top">uptime.openacs.org</a>. </p><p> It's also possible to download all the pieces and patches yourself: - </p><div class="itemizedlist"><ul type="square"><li><p> + </p><div class="itemizedlist"><ul type="disc"><li><p> AOLserver is available at <a href="http://aolserver.com" target="_top">aolserver.com</a> </p></li><li><p> ArsDigita's AOLserver distribution (including @@ -90,7 +90,7 @@ identically. Currently OpenACS supports PostGreSQL 7.2 and Oracle 8.1.7. While you can run the core OpenACS on any supported database, not all contributed packages support all - databases.</p><div class="itemizedlist"><ul type="round"><li><p><b>Oracle 8.1.7 (Either this or PostGreSQL is REQUIRED).�</b>You can register and download Oracle from <a href="http://otn.oracle.com/software/content.html" target="_top">Oracle + databases.</p><div class="itemizedlist"><ul type="circle"><li><p><b>Oracle 8.1.7 (Either this or PostGreSQL is REQUIRED).�</b>You can register and download Oracle from <a href="http://otn.oracle.com/software/content.html" target="_top">Oracle TechNet</a>. You need this if you want to use an Oracle database.</p></li><li><p><a name="source-postgresql"></a><b><a href="http://www.ca.postgresql.org/ftpsite/source/v7.2.3/postgresql-7.2.3.tar.gz" target="_top">PostGreSQL 7.2.3</a> (Either this or Oracle is REQUIRED).�</b>You need this if you want to use a PostGreSQL database. PostGreSQL 7.3 is not backwards-compatible, and OpenACS @@ -102,15 +102,15 @@ this if you are running Linux and PostGreSQL and want it to run automatically.</p></li></ul></div></li><li><p><b>Process Controller.�</b>This is software that initiates other software, and restarts that software if it fails. On Linux, we recommend - using Daemontools to control AOLserver and qmail.</p><div class="itemizedlist"><ul type="round"><li><a name="daemontools-download"></a><p><b><a href="http://cr.yp.to/daemontools/daemontools-0.76.tar.gz" target="_top">Daemontools 0.76</a>, OPTIONAL.�</b>You need this if you want AOLserver and qmail to run + using Daemontools to control AOLserver and qmail.</p><div class="itemizedlist"><ul type="circle"><li><a name="daemontools-download"></a><p><b><a href="http://cr.yp.to/daemontools/daemontools-0.76.tar.gz" target="_top">Daemontools 0.76</a>, OPTIONAL.�</b>You need this if you want AOLserver and qmail to run "supervised," meaning that they are monitored and automatically restarted if they fail.</p></li><li><p><b><a href="files/svgroup.txt" target="_top">AolServer restart permissions script version 1</a>, OPTIONAL.�</b>If you are running daemontools, you need this file to set the permissions of the control files for new OpenACS instances.</p></li></ul></div></li><li><p><b>Mail Transport Agent.�</b>A Mail Transport Agent is a program that handles all incoming and outgoing mail. The Reference Platform uses Qmail; any MTA that provides a sendmail wrapper (that is, that can be invoked by calling the sendmail program with the - same variables that sendmail expects) can be used.</p><div class="itemizedlist"><ul type="round"><li><p><b><a href="http://cr.yp.to/software/qmail-1.03.tar.gz" target="_top">Qmail 1.03</a>, OPTIONAL.�</b>You need this if you want your webserver to send or + same variables that sendmail expects) can be used.</p><div class="itemizedlist"><ul type="circle"><li><p><b><a href="http://cr.yp.to/software/qmail-1.03.tar.gz" target="_top">Qmail 1.03</a>, OPTIONAL.�</b>You need this if you want your webserver to send or receive email.</p></li><li><p><b><a href="files/qmail.rc.txt" target="_top">qmail startup script version 1</a>, OPTIONAL.�</b>This file is used to start qmail. You need this if you are running qmail.</p></li><li><p><b><a href="files/tcp.smtp.txt" target="_top">Qmail relay filter version 1</a>, OPTIONAL.�</b>This file is used to tell ucspi that SMTP connections from programs on the same computer (such as AOLserver) are @@ -124,7 +124,7 @@ compare versions of file, and identify specific versions of files. You can use any source control system; the Reference Platform and the OpenACS.org repository (where you can - get patched and development code in between releases) use cvs.</p><div class="itemizedlist"><ul type="round"><li><p><b>cvs 1.11.2, OPTIONAL.�</b>cvs is included in most unix distributions. You + get patched and development code in between releases) use cvs.</p><div class="itemizedlist"><ul type="circle"><li><p><b>cvs 1.11.2, OPTIONAL.�</b>cvs is included in most unix distributions. You need this if you want to track old versions of your files, do controlled deployment of code from development - to production, or get or contribute development code from openacs.org.</p></li></ul></div></li></ul></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="software-versions.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="unix-install.html">Next</a></td></tr><tr><td width="40%" align="left">Chapter 2. Prerequisite Software </td><td width="20%" align="center"><a accesskey="u" href="software-versions.html">Up</a></td><td width="40%" align="right"> Chapter 3. Installing on Unix/Linux</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/individual-programs.html#comments">View comments on this page at openacs.org</a></center></body></html> + to production, or get or contribute development code from openacs.org.</p></li></ul></div></li></ul></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="software-versions.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="unix-install.html">Next</a></td></tr><tr><td width="40%" align="left">Chapter�2.�Prerequisite Software&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="software-versions.html">Up</a></td><td width="40%" align="right">&nbsp;Chapter�3.�Installing on Unix/Linux</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/individual-programs.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/install-overview.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/install-overview.html,v diff -u -r1.7.2.4 -r1.7.2.5 --- openacs-4/packages/acs-core-docs/www/install-overview.html 7 Apr 2003 16:59:25 -0000 1.7.2.4 +++ openacs-4/packages/acs-core-docs/www/install-overview.html 15 Apr 2003 17:03:02 -0000 1.7.2.5 @@ -1,9 +1,9 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Overview</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="unix-install.html" title="Chapter 3. Installing on Unix/Linux"><link rel="previous" href="unix-install.html" title="Chapter 3. Installing on Unix/Linux"><link rel="next" href="linux-installation.html" title="Install Linux and supporting software"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="unix-install.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Installing on Unix/Linux</th><td width="20%" align="right"> <a accesskey="n" href="linux-installation.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="install-overview"></a>Overview</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Overview</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="unix-install.html" title="Chapter�3.�Installing on Unix/Linux"><link rel="previous" href="unix-install.html" title="Chapter�3.�Installing on Unix/Linux"><link rel="next" href="linux-installation.html" title="Install Linux and supporting software"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="unix-install.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�3.�Installing on Unix/Linux</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="linux-installation.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="install-overview"></a>Overview</h2></div></div><div class="authorblurb"><p> by <a href="mailto:vinod@kurup.com" target="_top">Vinod Kurup</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-description"></a>What is OpenACS?</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-description"></a>What is OpenACS?</h3></div></div><p> According to Philip Greenspun: </p><p> “The ArsDigita Community System (ACS) is a toolkit of software @@ -25,7 +25,7 @@ the word) to extend it to other databases. Don Baccus leads the development and numerous developers (and non-developers) contribute from around the world. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-purpose"></a>Purpose of this document</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-purpose"></a>Purpose of this document</h3></div></div><p> This document will describe how to install, configure, and maintain an installation of OpenACS 4.6.2 on a Unix-like @@ -34,11 +34,11 @@ OpenACS 4.6.2-O Reference Platform, which use Red Hat 8.0. Differences between the Reference Platform and common alternate platforms are noted where known. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-requirements"></a>Requirements</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-requirements"></a>Requirements</h3></div></div><p> You will need a PC (or equivalent) with at least these minimum requirements: </p><div class="itemizedlist"><ul type="disc"><li><p>Pentium processor</p></li><li><p>128 MB RAM - (much more if you want Oracle)</p></li><li><p>4 GB hard drive</p></li></ul></div><p>You will need all of the required <a href="software-versions.html" title="Chapter 2. Prerequisite Software">Chapter 2</a>.</p><p> + (much more if you want Oracle)</p></li><li><p>4 GB hard drive</p></li></ul></div><p>You will need all of the required <a href="software-versions.html" title="Chapter�2.�Prerequisite Software">Chapter�2</a>.</p><p> If you want to serve pages to people outside of your machine, you'll need a network connection of some type. </p><p> @@ -70,11 +70,11 @@ All of the software that you will need is free and open-source, except for Oracle. You can obtain a free copy of Oracle for development purposes. This is described in the <a href="oracle.html#install-oracle-getit">Acquire Oracle</a> section. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-steps"></a>Steps involved</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-steps"></a>Steps involved</h3></div></div><p> The basic steps to getting OpenACS up and running are: </p><div class="orderedlist"><ol type="1"><li><p>Install an OS</p></li><li><p>Install a webserver (AOLServer)</p></li><li><p>Install a database (Oracle or PostgreSQL)</p></li><li><p> Install a database driver (allows the webserver to talk to the database) - </p></li><li><p>Start the OpenACS installer, which will configure a database instance..</p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2769690"></a>How to use this guide</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><tt>This</tt> is text you will see on + </p></li><li><p>Start the OpenACS installer, which will configure a database instance..</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2874716"></a>How to use this guide</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><tt>This</tt> is text you will see on screen, such as a <tt><span class="guibutton"><u>B</u>utton</span></tt> or <tt><span class="guilabel"><u>link</u></span></tt> in a radio button list or menu.</p></li><li><p><b><tt>This is text that you will type.</tt></b></p></li><li><p>This is text from a program or file which you may need to examine or edit:</p><pre class="programlisting">if {$database == "oracle"} { @@ -91,7 +91,7 @@ <pre class="action">su - nsadmin svc -d /service/<span class="replaceable">server1</span> dropdb <span class="replaceable">server1</span> -createdb <span class="replaceable">server1</span></pre></pre></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-stuck"></a>What if I get stuck?</h3></div></div><p> +createdb <span class="replaceable">server1</span></pre></pre></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-stuck"></a>What if I get stuck?</h3></div></div><p> We'll do our best to assure that following our instructions will get you to the promised land. If something goes wrong, don't panic. There are plenty of ways to get help. Here are some tips: @@ -132,7 +132,7 @@ If you find errors in this document or if you have ideas about making it better, please post them in our <a href="http://openacs.org/bugtracker/openacs/" target="_top">BugTracker</a>. - </p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-rpms"></a>Is there an easier way?</h3></div></div><p> + </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-rpms"></a>Is there an easier way?</h3></div></div><p> After reading through this tome, you may ask yourself if there is a better way. Well, not quite. Jonathan Marsden has created RPMs (at @@ -141,7 +141,7 @@ 4.6.2. There has been talk about automating the install process, but that hasn't happened yet. Stay tuned! - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-origins"></a>Where did this document come from?</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-origins"></a>Where did this document come from?</h3></div></div><p> This document was created by <a href="mailto:vinod@kurup.com" target="_top">Vinod Kurup</a>, but it's really just plagiarism from a number of documents that came before it. If I've used something that you've written without proper credit, let me @@ -162,7 +162,7 @@ Aufrecht's OpenACS 4.5 Quick Guide.</a> </p></li></ul></div><p> Please also see the <a href="credits.html">Credits</a> section for more acknowledgements. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="os-install"></a>Linux Install Guides</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="os-install"></a>Linux Install Guides</h3></div></div><p> Here's a list of some helpful documentation for various OS's </p><div class="itemizedlist"><ul type="disc"><li><p> <a href="http://tinyplanet.ca/pubs/debian/" target="_top">Painless Debian @@ -184,7 +184,7 @@ <a href="http://sdb.suse.de/sdb/en/html/" target="_top">SuSE</a> - </p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="os-security"></a>Security Information</h3></div></div><p> + </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="os-security"></a>Security Information</h3></div></div><p> Once you get your OS installed, it's imperative that you secure your installation. As Jon Griffin repeatedly warns us, "No distribution is secure out of the box." The Reference Platform implements @@ -208,9 +208,9 @@ </p></li><li><p> <a href="http://www.counterpane.com/crypto-gram.html" target="_top">Bruce Schneier's Crypto-Gram</a>, especially <a href="http://www.counterpane.com/crypto-gram-0103.html#1" target="_top">The - security patch treadmill</a> and <a href="http://www.counterpane.com/crypto-gram-0107.html#5" target="_top">Monitoring First</a>.</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-resources"></a>Resources</h3></div></div><p> + security patch treadmill</a> and <a href="http://www.counterpane.com/crypto-gram-0107.html#5" target="_top">Monitoring First</a>.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-resources"></a>Resources</h3></div></div><p> Here are some resources that OpenACS users have found useful. - </p><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="install-resources-books"></a>Books</h4></div></div><div class="itemizedlist"><ul type="disc"><li><p> + </p><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="install-resources-books"></a>Books</h4></div></div><div class="itemizedlist"><ul type="disc"><li><p> <a href="http://www.amazon.com/exec/obidos/ASIN/1558605347/photonetA" target="_top">Philip and Alex's Guide to Web Publishing</a> - A very readable @@ -243,7 +243,7 @@ <a href="http://www.amazon.com/exec/obidos/ASIN/1565925858/photonetA" target="_top">Linux in a Nutshell</a> - </p></li></ul></div></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="install-resources-web"></a>Web Sites</h4></div></div><div class="itemizedlist"><ul type="disc"><li><p> + </p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="install-resources-web"></a>Web Sites</h4></div></div><div class="itemizedlist"><ul type="disc"><li><p> <a href="http://www.geek-girl.com/unix.html" target="_top">The UNIX Reference Desk</a> @@ -260,4 +260,4 @@ IBM developerworks on basic and intermediate Linux skills (requires registration) - </p></li></ul></div></div></div><p><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="unix-install.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="linux-installation.html">Next</a></td></tr><tr><td width="40%" align="left">Chapter 3. Installing on Unix/Linux </td><td width="20%" align="center"><a accesskey="u" href="unix-install.html">Up</a></td><td width="40%" align="right"> Install Linux and supporting software</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/install-overview.html#comments">View comments on this page at openacs.org</a></center></body></html> + </p></li></ul></div></div></div><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="unix-install.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="linux-installation.html">Next</a></td></tr><tr><td width="40%" align="left">Chapter�3.�Installing on Unix/Linux&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="unix-install.html">Up</a></td><td width="40%" align="right">&nbsp;Install Linux and supporting software</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/install-overview.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/install-redhat.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/install-redhat.html,v diff -u -r1.1.2.3 -r1.1.2.4 --- openacs-4/packages/acs-core-docs/www/install-redhat.html 7 Apr 2003 16:59:25 -0000 1.1.2.3 +++ openacs-4/packages/acs-core-docs/www/install-redhat.html 15 Apr 2003 17:03:02 -0000 1.1.2.4 @@ -1,5 +1,5 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Appendix A. Install Red Hat 8.0</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="acs-admin.html" title="Part II. Administrator's Guide"><link rel="previous" href="backup-recovery.html" title="Backup and Recovery"><link rel="next" href="acs-dev.html" title="Part III. For OpenACS Developers"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="backup-recovery.html">Prev</a> </td><th width="60%" align="center">Part II. Administrator's Guide</th><td width="20%" align="right"> <a accesskey="n" href="acs-dev.html">Next</a></td></tr></table><hr></div><div class="appendix"><div class="titlepage"><div><h2 class="title"><a name="install-redhat"></a>Appendix A. Install Red Hat 8.0</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Appendix�A.�Install Red Hat 8.0</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="acs-admin.html" title="Part�II.�Administrator's Guide"><link rel="previous" href="backup-recovery.html" title="Backup and Recovery"><link rel="next" href="acs-dev.html" title="Part�III.�For OpenACS Developers"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="backup-recovery.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part�II.�Administrator's Guide</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="acs-dev.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><h2 class="title"><a name="install-redhat"></a>Appendix�A.�Install Red Hat 8.0</h2></div></div><div class="authorblurb"><p> by <a href="mailto:joel@aufrecht.org" target="_top">Joel Aufrecht</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. @@ -11,7 +11,7 @@ software (see <a href="individual-programs.html" title="Individual Programs">the section called “Individual Programs”</a> for details):</p><div class="itemizedlist"><ul type="disc"><li><p>libxml2</p></li><li><p>tcl</p></li><li><p>gmake and the compile and build environment.</p></li></ul></div><p>and these optional items</p><div class="itemizedlist"><ul type="disc"><li><p>emacs</p></li><li><p>cvs</p></li><li><p>ImageMagick</p></li><li><p>DocBook and supporting software</p></li></ul></div><p>(In my experience, it's almost always a net time savings of several hours to install a new machine from scratch compared to installing each of these packages installed independently.)</p><div class="orderedlist"><ol type="1"><li><p><a name="install-first-step"></a>Unplug the network cable from your computer. We don't want to connect to the network until we're sure the computer is secure. -<a class="indexterm" name="id2850257"></a> +<a class="indexterm" name="id2905650"></a> (Wherever you see the word secure, you should always read it as, "secure enough for our purposes, given the amount of work we're @@ -39,7 +39,7 @@ <tt><span class="guilabel">Re<u>v</u>iew (and modify if needed) the partitions created</span></tt> and click <tt><span class="guibutton"><u>N</u>ext</span></tt></p></li><li><p>On the pop-up window asking "Are you sure you want to do this?" click <tt><span class="guibutton"><u>Y</u>es</span></tt> - IF YOU ARE WIPING YOUR HARD DRIVE.</p></li><li><p>Click <tt><span class="guibutton"><u>N</u>ext</span></tt> on the boot loader screen</p></li></ol></div></li><li><p>Configure Networking. <a class="indexterm" name="id2851746"></a> + IF YOU ARE WIPING YOUR HARD DRIVE.</p></li><li><p>Click <tt><span class="guibutton"><u>N</u>ext</span></tt> on the boot loader screen</p></li></ol></div></li><li><p>Configure Networking. <a class="indexterm" name="id2908099"></a> Again, if you know what you're doing, do this step yourself, being sure to note the firewall holes. Otherwise, follow the instructions in this step to set up a computer directly connected to the internet with a dedicated IP address.</p><div class="orderedlist"><ol type="a"><li><p>DHCP is a system by which a computer that @@ -60,7 +60,7 @@ <tt><span class="guilabel">Mail (SMTP)</span></tt>. In the <tt><span class="guilabel">Other <u>p</u>orts</span></tt> box, enter <b><tt>443, 8000, 8443</tt></b>. Click <tt><span class="guibutton"><u>N</u>ext</span></tt>. -Port 443 is for https (http over ssl), and 8000 and 8443 are http and https access to the development server we'll be setting up.</p></li></ol></div></li><li><p><a class="indexterm" name="id2851954"></a>Select any additional languages you want the +Port 443 is for https (http over ssl), and 8000 and 8443 are http and https access to the development server we'll be setting up.</p></li></ol></div></li><li><p><a class="indexterm" name="id2908305"></a>Select any additional languages you want the computer to support and then click <tt><span class="guibutton"><u>N</u>ext</span></tt></p></li><li><p>Choose your time zone and click <tt><span class="guibutton"><u>N</u>ext</span></tt>.</p></li><li><p>Type in a root password, twice. To @@ -81,9 +81,9 @@ risk that's still screened by the firewall, or a resource hog. Just don't install a database or web server, because that would conflict with the database and web server we'll install later. -</p><div class="literallayout"><p>check�<tt><span class="guilabel">Editors</span></tt>�(this�installs�emacs<a class="indexterm" name="id2852108"></a>),<br> +</p><div class="literallayout"><p>check�<tt><span class="guilabel">Editors</span></tt>�(this�installs�emacs<a class="indexterm" name="id2908458"></a>),<br> click�<tt><span class="guilabel">Details</span></tt>�next�to�<tt><span class="guilabel">Text-based�Internet</span></tt>,�check�<tt><span class="guilabel">lynx</span></tt>,�and�click�<tt><span class="guibutton"><u>O</u>K</span></tt>;<br> -check�<tt><span class="guilabel">Authoring�and�Publishing</span></tt>�(<a class="indexterm" name="id2852177"></a>this�installs�docbook),<br> +check�<tt><span class="guilabel">Authoring�and�Publishing</span></tt>�(<a class="indexterm" name="id2908527"></a>this�installs�docbook),<br> uncheck�<tt><span class="guilabel">Server�Configuration�Tools</span></tt>,<br> uncheck�<tt><span class="guilabel">Web�Server</span></tt>,<br> uncheck�<tt><span class="guilabel">Windows�File�Server</span></tt>,<br> @@ -96,7 +96,7 @@ <tt><span class="guilabel"><u>F</u>lat View</span></tt> and wait. In a minute, a list of packages will appear.</p><div class="literallayout"><p>uncheck�<tt><span class="guilabel">apmd</span></tt>�(monitors�power,�not�very�useful�for�servers),�<br> -check�<tt><span class="guilabel">ImageMagick</span></tt>�(required�for�the�<a class="indexterm" name="id2852345"></a>photo-album�packages,�<br> +check�<tt><span class="guilabel">ImageMagick</span></tt>�(required�for�the�<a class="indexterm" name="id2908696"></a>photo-album�packages,�<br> uncheck<tt><span class="guilabel">isdn4k-utils</span></tt>�(unless�you�are�using�isdn,�this�installs�a�useless�daemon),�<br> check�<tt><span class="guilabel">mutt</span></tt>�(a�mail�program�that�reads�Maildir),<br> uncheck�<tt><span class="guilabel">nfs-utils</span></tt>�(nfs�is�a�major�security�risk),�<br> @@ -124,14 +124,14 @@ </p></li><li><p>After it finishes rebooting and shows the login prompt, log in:</p><pre class="screen">yourserver login: <b><tt>root</tt></b> Password: -[root@yourserver root]#</pre></li><li><p>Lock down SSH</p><div class="orderedlist"><ol type="a"><li><p><a class="indexterm" name="id2852665"></a> +[root@yourserver root]#</pre></li><li><p>Lock down SSH</p><div class="orderedlist"><ol type="a"><li><p><a class="indexterm" name="id2910599"></a> SSH is the protocol we use to connect securely to the computer (replacing telnet, which is insecure). sshd is the daemon that listens for incoming ssh connections. As a security precaution, we are now going to tell ssh not to allow anyone to connect directly to this computer as root. Type this into the shell: - <pre class="screen"><b><tt>emacs /etc/ssh/sshd_config</tt></b></pre></p></li><li><div class="literallayout"><p>Search�for�the�word�"root"�by�typing�C-s�(that's�emacs-speak�for�control-s)�and�then�<b><tt>root</tt></b>.���<br> + </p><pre class="screen"><b><tt>emacs /etc/ssh/sshd_config</tt></b></pre></li><li><div class="literallayout"><p>Search�for�the�word�"root"�by�typing�C-s�(that's�emacs-speak�for�control-s)�and�then�<b><tt>root</tt></b>.���<br> Change�the�line�<pre class="programlisting">#PermitRootLogin�yes</pre>�to�<pre class="programlisting">PermitRootLogin�no</pre>�and�save�and�exit�by�typing�C-x�C-s�C-x�C-c</p></div></li><li>Restart sshd so that the change takes effect.<pre class="screen"><b><tt>service sshd restart</tt></b></pre></li></ol></div></li><li><p>Red Hat still installed a few services we don't need, and which can be security holes. Use the service command to turn them off, and then use chkconfig to automatically edit the System V init directories to permanently (The System V init directories are the ones in /etc/rc.d. They consist of a bunch of scripts for starting and stopping programs, and directories of symlinks for each system level indicating which services should be up and down at any given service level. We'll use this system for PostGreSQL, but we'll use daemontools to perform a similar function for AOLServer. (The reason for this discrepencies is that, while daemontools is better, it's a pain in the ass to deal with and nobody's had any trouble leaving PostGreSQL the way it is.)</p><pre class="screen">[root@yourserver root]# <b><tt>service pcmcia stop</tt></b> [root@yourserver root]# <b><tt>service netfs stop</tt></b> @@ -153,4 +153,4 @@ Last login: Mon Mar 3 21:15:27 2003 from host-12-01.dsl-sea.seanet.com [remadmin@yourserver remadmin]$ <b><tt>su -</tt></b> Password: -[root@yourserver root]#</pre></li></ol></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="backup-recovery.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="acs-dev.html">Next</a></td></tr><tr><td width="40%" align="left">Backup and Recovery </td><td width="20%" align="center"><a accesskey="u" href="acs-admin.html">Up</a></td><td width="40%" align="right"> Part III. For OpenACS Developers</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/install-redhat.html#comments">View comments on this page at openacs.org</a></center></body></html> +[root@yourserver root]#</pre></li></ol></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="backup-recovery.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="acs-dev.html">Next</a></td></tr><tr><td width="40%" align="left">Backup and Recovery&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="acs-admin.html">Up</a></td><td width="40%" align="right">&nbsp;Part�III.�For OpenACS Developers</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/install-redhat.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/kernel-doc.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/kernel-doc.html,v diff -u -r1.6.2.4 -r1.6.2.5 --- openacs-4/packages/acs-core-docs/www/kernel-doc.html 7 Apr 2003 16:59:25 -0000 1.6.2.4 +++ openacs-4/packages/acs-core-docs/www/kernel-doc.html 15 Apr 2003 17:03:02 -0000 1.6.2.5 @@ -1,2 +1,2 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Chapter 11. Kernel Documentation</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="acs-dev.html" title="Part III. For OpenACS Developers"><link rel="previous" href="eng-standards-plsql.html" title="PL/SQL Standards"><link rel="next" href="kernel-overview.html" title="Overview"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="eng-standards-plsql.html">Prev</a> </td><th width="60%" align="center">Part III. For OpenACS Developers</th><td width="20%" align="right"> <a accesskey="n" href="kernel-overview.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><h2 class="title"><a name="kernel-doc"></a>Chapter 11. Kernel Documentation</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="kernel-overview.html">Overview</a></dt><dt><a href="object-system-requirements.html">OpenACS 4 Object Model Requirements</a></dt><dt><a href="object-system-design.html">OpenACS 4 Object Model Design</a></dt><dt><a href="permissions-requirements.html">OpenACS 4 Permissions Requirements</a></dt><dt><a href="permissions-design.html">OpenACS 4 Permissions Design</a></dt><dt><a href="groups-requirements.html">OpenACS 4 Groups Requirements</a></dt><dt><a href="groups-design.html">OpenACS 4 Groups Design</a></dt><dt><a href="subsites-requirements.html">OpenACS 4 Subsites Requirements</a></dt><dt><a href="subsites-design.html">OpenACS 4 Subsites Design Document</a></dt><dt><a href="apm-requirements.html">OpenACS 4.6.2 Package Manager Requirements</a></dt><dt><a href="apm-design.html">OpenACS 4.6.2 Package Manager Design</a></dt><dt><a href="db-api-detailed.html">Database Access API</a></dt><dt><a href="security-requirements.html">OpenACS 4 Security Requirements</a></dt><dt><a href="security-design.html">OpenACS 4 Security Design</a></dt><dt><a href="security-notes.html">OpenACS 4 Security Notes</a></dt><dt><a href="rp-requirements.html">OpenACS 4 Request Processor Requirements</a></dt><dt><a href="rp-design.html">OpenACS 4 Request Processor Design</a></dt><dt><a href="tcl-doc.html">Documenting Tcl Files: Page Contracts and Libraries</a></dt><dt><a href="bootstrap-acs.html">Bootstrapping OpenACS</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="eng-standards-plsql.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="kernel-overview.html">Next</a></td></tr><tr><td width="40%" align="left">PL/SQL Standards </td><td width="20%" align="center"><a accesskey="u" href="acs-dev.html">Up</a></td><td width="40%" align="right"> Overview</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/kernel-doc.html#comments">View comments on this page at openacs.org</a></center></body></html> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter�11.�Kernel Documentation</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="acs-dev.html" title="Part�III.�For OpenACS Developers"><link rel="previous" href="eng-standards-plsql.html" title="PL/SQL Standards"><link rel="next" href="kernel-overview.html" title="Overview"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="eng-standards-plsql.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part�III.�For OpenACS Developers</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="kernel-overview.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><h2 class="title"><a name="kernel-doc"></a>Chapter�11.�Kernel Documentation</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="kernel-overview.html">Overview</a></dt><dt><a href="object-system-requirements.html">OpenACS 4 Object Model Requirements</a></dt><dt><a href="object-system-design.html">OpenACS 4 Object Model Design</a></dt><dt><a href="permissions-requirements.html">OpenACS 4 Permissions Requirements</a></dt><dt><a href="permissions-design.html">OpenACS 4 Permissions Design</a></dt><dt><a href="groups-requirements.html">OpenACS 4 Groups Requirements</a></dt><dt><a href="groups-design.html">OpenACS 4 Groups Design</a></dt><dt><a href="subsites-requirements.html">OpenACS 4 Subsites Requirements</a></dt><dt><a href="subsites-design.html">OpenACS 4 Subsites Design Document</a></dt><dt><a href="apm-requirements.html">OpenACS 4.6.2 Package Manager Requirements</a></dt><dt><a href="apm-design.html">OpenACS 4.6.2 Package Manager Design</a></dt><dt><a href="db-api-detailed.html">Database Access API</a></dt><dt><a href="security-requirements.html">OpenACS 4 Security Requirements</a></dt><dt><a href="security-design.html">OpenACS 4 Security Design</a></dt><dt><a href="security-notes.html">OpenACS 4 Security Notes</a></dt><dt><a href="rp-requirements.html">OpenACS 4 Request Processor Requirements</a></dt><dt><a href="rp-design.html">OpenACS 4 Request Processor Design</a></dt><dt><a href="tcl-doc.html">Documenting Tcl Files: Page Contracts and Libraries</a></dt><dt><a href="bootstrap-acs.html">Bootstrapping OpenACS</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="eng-standards-plsql.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="kernel-overview.html">Next</a></td></tr><tr><td width="40%" align="left">PL/SQL Standards&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="acs-dev.html">Up</a></td><td width="40%" align="right">&nbsp;Overview</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/kernel-doc.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/kernel-overview.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/kernel-overview.html,v diff -u -r1.3.2.4 -r1.3.2.5 --- openacs-4/packages/acs-core-docs/www/kernel-overview.html 7 Apr 2003 16:59:25 -0000 1.3.2.4 +++ openacs-4/packages/acs-core-docs/www/kernel-overview.html 15 Apr 2003 17:03:02 -0000 1.3.2.5 @@ -1,5 +1,5 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Overview</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="previous" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="next" href="object-system-requirements.html" title="OpenACS 4 Object Model Requirements"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="kernel-doc.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Kernel Documentation</th><td width="20%" align="right"> <a accesskey="n" href="object-system-requirements.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="kernel-overview"></a>Overview</h2></div></div><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Overview</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="previous" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="next" href="object-system-requirements.html" title="OpenACS 4 Object Model Requirements"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="kernel-doc.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�11.�Kernel Documentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="object-system-requirements.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="kernel-overview"></a>Overview</h2></div></div><p> Compared to its predecessors, version 4.6.2 of OpenACS has a much more structured organization, i.e. the most significant change is found at the system architecture level, @@ -28,4 +28,4 @@ This document provides a high level overview of the kernel package. Documentation for the other packages can be found <a href="index.html" target="_top">elsewhere</a>. - </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="kernel-doc.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="object-system-requirements.html">Next</a></td></tr><tr><td width="40%" align="left">Chapter 11. Kernel Documentation </td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right"> OpenACS 4 Object Model Requirements</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/kernel-overview.html#comments">View comments on this page at openacs.org</a></center></body></html> + </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="kernel-doc.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="object-system-requirements.html">Next</a></td></tr><tr><td width="40%" align="left">Chapter�11.�Kernel Documentation&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS 4 Object Model Requirements</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/kernel-overview.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/linux-installation.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/Attic/linux-installation.html,v diff -u -r1.1.2.3 -r1.1.2.4 --- openacs-4/packages/acs-core-docs/www/linux-installation.html 7 Apr 2003 16:59:25 -0000 1.1.2.3 +++ openacs-4/packages/acs-core-docs/www/linux-installation.html 15 Apr 2003 17:03:02 -0000 1.1.2.4 @@ -1,9 +1,9 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Install Linux and supporting software</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="unix-install.html" title="Chapter 3. Installing on Unix/Linux"><link rel="previous" href="install-overview.html" title="Overview"><link rel="next" href="oracle.html" title="Install Oracle 8.1.7"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="install-overview.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Installing on Unix/Linux</th><td width="20%" align="right"> <a accesskey="n" href="oracle.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="linux-installation"></a>Install Linux and supporting software</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Install Linux and supporting software</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="unix-install.html" title="Chapter�3.�Installing on Unix/Linux"><link rel="previous" href="install-overview.html" title="Overview"><link rel="next" href="oracle.html" title="Install Oracle 8.1.7"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="install-overview.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�3.�Installing on Unix/Linux</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="oracle.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="linux-installation"></a>Install Linux and supporting software</h2></div></div><div class="authorblurb"><p> by <a href="mailto:joel@aufrecht.org" target="_top">Joel Aufrecht</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2833798"></a>Paths and Users</h3></div></div><div class="figure"><p class="title"><b>Figure 3.1. Assumptions in this section</b></p><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><tbody><tr><td>Fully qualified domain name of your server</td><td><span class="replaceable">yourserver.test</span></td></tr><tr><td>name of administrative access account</td><td>remadmin</td></tr><tr><td>OpenACS service</td><td><a class="indexterm" name="id2833557"></a><span class="replaceable">service0</span></td></tr><tr><td>OpenACS service account</td><td><span class="replaceable">service0</span></td></tr><tr><td>OpenACS database name</td><td><span class="replaceable">service0</span></td></tr><tr><td>Root of OpenACS service file tree</td><td><span class="replaceable">/web/service0</span></td></tr><tr><td>Location of source code tarballs for new software</td><td>/tmp</td></tr><tr><td>The OpenACS tarball contains some files which + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2873565"></a>Paths and Users</h3></div></div><div class="figure"><a name="id2873572"></a><p class="title"><b>Figure�3.1.�Assumptions in this section</b></p><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><tbody><tr><td>Fully qualified domain name of your server</td><td><span class="replaceable">yourserver.test</span></td></tr><tr><td>name of administrative access account</td><td>remadmin</td></tr><tr><td>OpenACS service</td><td><a class="indexterm" name="id2873629"></a><span class="replaceable">service0</span></td></tr><tr><td>OpenACS service account</td><td><span class="replaceable">service0</span></td></tr><tr><td>OpenACS database name</td><td><span class="replaceable">service0</span></td></tr><tr><td>Root of OpenACS service file tree</td><td><span class="replaceable">/web/service0</span></td></tr><tr><td>Location of source code tarballs for new software</td><td>/tmp</td></tr><tr><td>The OpenACS tarball contains some files which are useful while setting up other software. Those files are located at:</td><td>/tmp/openacs-4-6/packages/acs-core-docs/www/files</td></tr><tr><td>Database backup directory</td><td><span class="replaceable">/web/service0/database-backup</span></td></tr><tr><td>Service config files</td><td><span class="replaceable">/web/service0/etc</span></td></tr><tr><td>Service log files</td><td><span class="replaceable">/web/service0/log</span></td></tr><tr><td>Compile directory</td><td>/usr/local/src</td></tr><tr><td>PostGreSQL directory</td><td>/usr/local/pgsql</td></tr><tr><td>AOLServer directory</td><td>/usr/local/aolserver</td></tr></tbody></table></div></div><p> None of these locations are set in stone - they're simply @@ -16,33 +16,33 @@ those recommended in previous versions of this document to improve security and maintainability. See <a href="http://openacs.org/forums/message-view?message_id=82934" target="_top">this thread</a> for discussion. -</p></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-linux"></a>Install Linux</h3></div></div><p>You will need a PC running linux with the following software installed:</p><div class="itemizedlist"><ul type="disc"><li><p>libxml2</p></li><li><p>tcl</p></li><li><p>gmake and the compile and build environment.</p></li></ul></div><p>and optionally this software:</p><div class="itemizedlist"><ul type="disc"><li><p>emacs</p></li><li><p>cvs</p></li><li><p>ImageMagick</p></li><li><p>DocBook and supporting software</p></li></ul></div><p>You can follow the <a href="install-redhat.html" title="Appendix A. Install Red Hat 8.0">walkthrough of the - Red Hat 8.0 Install for OpenACS</a>.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-more-software"></a>Install additional supporting software</h3></div></div><p>This section assumes that the source tarballs for supporting +</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-linux"></a>Install Linux</h3></div></div><p>You will need a PC running linux with the following software installed:</p><div class="itemizedlist"><ul type="disc"><li><p>libxml2</p></li><li><p>tcl</p></li><li><p>gmake and the compile and build environment.</p></li></ul></div><p>and optionally this software:</p><div class="itemizedlist"><ul type="disc"><li><p>emacs</p></li><li><p>cvs</p></li><li><p>ImageMagick</p></li><li><p>DocBook and supporting software</p></li></ul></div><p>You can follow the <a href="install-redhat.html" title="Appendix�A.�Install Red Hat 8.0">walkthrough of the + Red Hat 8.0 Install for OpenACS</a>.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-more-software"></a>Install additional supporting software</h3></div></div><p>This section assumes that the source tarballs for supporting software are in <tt>/tmp</tt>. It assumes that you begin each continuous block of commands as root, and you should end each block as root. It doesn't care which directory - you start in. Text instructions always precede the commands they refer to.</p><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="openacs-unpack"></a>Unpack the OpenACS tarball</h4></div></div><p>The OpenACS tarball contains sample configuration files + you start in. Text instructions always precede the commands they refer to.</p><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="openacs-unpack"></a>Unpack the OpenACS tarball</h4></div></div><p>The OpenACS tarball contains sample configuration files for some of the packages listed below. In order to access those files, unpack the tarball now.</p><pre class="screen">[root@yourserver root]# <b><tt>cd /tmp</tt></b> [root@yourserver tmp]# <b><tt>tar xzf openacs-4-6.tgz</tt></b> <pre class="action">cd /tmp -tar xzf openacs-4-6.tgz</pre></pre></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="install-cvs"></a>Initialize CVS (OPTIONAL)</h4></div></div><a class="indexterm" name="id2834675"></a><p>CVS is a source control system. Create and prepare a +tar xzf openacs-4-6.tgz</pre></pre></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="install-cvs"></a>Initialize CVS (OPTIONAL)</h4></div></div><a class="indexterm" name="id2875487"></a><p>CVS is a source control system. Create and prepare a directory for a local cvs repository.</p><pre class="screen">[root@yourserver tmp]# <b><tt>mkdir /cvsroot</tt></b> [root@yourserver tmp]#<b><tt> cvs -d /cvsroot init</tt></b> [root@yourserver tmp]# <pre class="action">mkdir /cvsroot -cvs -d /cvsroot init</pre></pre></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="id2834724"></a>Add PSGML commands to emacs init file (OPTIONAL)</h4></div></div><p><a class="indexterm" name="id2834733"></a> +cvs -d /cvsroot init</pre></pre></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="id2875537"></a>Add PSGML commands to emacs init file (OPTIONAL)</h4></div></div><p><a class="indexterm" name="id2875546"></a> If you plan to write or edit any documentation with emacs, install a customized emacs configuration file with DocBook commands in the skeleton directory, so it will be used for all new users. The file also fixes the backspace -> help mis-mapping that often occurs in terminals.</p><pre class="screen">[root@yourserver tmp]# <b><tt>cp /tmp/openacs-4-6/packages/acs-core-docs/www/files/emacs.txt /etc/skel/.emacs</tt></b> -[root@yourserver tmp]# </pre></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="install-daemontools"></a>Install Daemontools (OPTIONAL)</h4></div></div><p>Daemontools is a collection of programs for controlling +[root@yourserver tmp]# </pre></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="install-daemontools"></a>Install Daemontools (OPTIONAL)</h4></div></div><p>Daemontools is a collection of programs for controlling other processes. We use daemontools to run and monitor AOLServer. It is installed in /package. These commands install daemontools and svgroup. svgroup is a script for granting permissions, to allow users other than root to use daemontools for specific - services.</p><div class="orderedlist"><ol type="1"><li><p>Install Daemontools</p><a class="indexterm" name="id2834811"></a><div class="itemizedlist"><ul type="disc"><li><p>Red Hat</p><p>Make sure you have the source tarball in + services.</p><div class="orderedlist"><ol type="1"><li><p>Install Daemontools</p><a class="indexterm" name="id2875622"></a><div class="itemizedlist"><ul type="disc"><li><p>Red Hat</p><p>Make sure you have the source tarball in <tt>/tmp</tt>, or <a href="individual-programs.html#daemontools-download">download it</a>. (The -p flag in mkdir causes all implied directories in the path to be made as well.)</p><pre class="screen">[root@yourserver root]# <b><tt>mkdir -p /package</tt></b> @@ -71,7 +71,7 @@ control daemontools services.</p><pre class="screen">[root@yourserver root]# <b><tt>cp /tmp/openacs-4-6/packages/acs-core-docs/www/files/svgroup.txt /usr/local/bin/svgroup</tt></b> [root@yourserver root]# <b><tt>chmod 755 /usr/local/bin/svgroup</tt></b> <pre class="action">cp /tmp/openacs-4-6/packages/acs-core-docs/www/files/svgroup.txt /usr/local/bin/svgroup -chmod 755 /usr/local/bin/svgroup</pre></pre></li></ol></div></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="id2835017"></a>Install qmail (OPTIONAL)</h4></div></div><p>Qmail is a Mail Transfer Agent. It handles incoming and outgoing mail. Install qmail if you want your OpenACS server to send and receive mail, and you don't want to use an alternate MTA.</p><div class="orderedlist"><ol type="1"><li><p><b>Install ucspi.�</b>This program handles incoming tcp connections.</p><pre class="screen">[root@yourserver root]# <b><tt>cd /usr/local/src</tt></b> +chmod 755 /usr/local/bin/svgroup</pre></pre></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="id2875825"></a>Install qmail (OPTIONAL)</h4></div></div><p>Qmail is a Mail Transfer Agent. It handles incoming and outgoing mail. Install qmail if you want your OpenACS server to send and receive mail, and you don't want to use an alternate MTA.</p><div class="orderedlist"><ol type="1"><li><p><b>Install ucspi.�</b>This program handles incoming tcp connections.</p><pre class="screen">[root@yourserver root]# <b><tt>cd /usr/local/src</tt></b> [root@yourserver src]# <b><tt>tar xzf /tmp/ucspi-tcp-0.88.tar.gz</tt></b> [root@yourserver src]# <b><tt>cd ucspi-tcp-0.88</tt></b> [root@yourserver ucspi-tcp-0.88]#<b><tt> make</tt></b> @@ -93,7 +93,7 @@ tcpserver: usage: tcpserver [ -1UXpPhHrRoOdDqQv ] [ -c limit ] [ -x rules.cdb ] [ -B banner ] [ -g gid ] [ -u uid ] [ -b backlog ] [ -l localname ] [ -t timeout ] host port program [root@yourserver ucspi-tcp-0.88]# -</pre><p><a class="indexterm" name="id2835137"></a> +</pre><p><a class="indexterm" name="id2875944"></a> (I'm not sure if this next step is 100% necessary, but when I skip it I get problems. If you get the error <tt>553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)</tt> then you need to do this.) AOLServer sends outgoing mail via the ns_sendmail command, which pipes a command to the sendmail executable. Or, in our @@ -107,7 +107,7 @@ send outgoing mail.</p><pre class="screen">[root@yourserver ucspi-tcp-0.88]# <b><tt>cp /tmp/openacs-4-6/packages/acs-core-docs/www/files/tcp.smtp.txt /etc/tcp.smtp</tt></b> [root@yourserver ucspi-tcp-0.88]# <b><tt>tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp</tt></b> <pre class="action">cp /tmp/openacs-4-6/packages/acs-core-docs/www/files/tcp.smtp.txt /etc/tcp.smtp -tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp </pre></pre></li><li><p><b>Install Qmail.�</b><a class="indexterm" name="id2835233"></a></p><p>First, set up the standard supporting users and build the binaries:</p><pre class="screen">[root@yourserver root]# <b><tt>cd /usr/local/src</tt></b> +tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp </pre></pre></li><li><p><b>Install Qmail.�</b><a class="indexterm" name="id2876026"></a></p><p>First, set up the standard supporting users and build the binaries:</p><pre class="screen">[root@yourserver root]# <b><tt>cd /usr/local/src</tt></b> [root@yourserver src]# <b><tt>tar xzf /tmp/qmail-1.03.tar.gz</tt></b> [root@yourserver src]# <b><tt>mkdir /var/qmail</tt></b> [root@yourserver src]#<b><tt> groupadd nofiles</tt></b> @@ -140,7 +140,7 @@ useradd -g qmail -d /var/qmail qmailr useradd -g qmail -d /var/qmail qmails cd qmail-1.03 -make setup check</pre></pre><p>Replace sendmail with qmail's wrapper.</p><a class="indexterm" name="id2835390"></a><pre class="screen">[root@yourserver qmail-1.03]# <b><tt>rm -f /usr/bin/sendmail</tt></b> +make setup check</pre></pre><p>Replace sendmail with qmail's wrapper.</p><a class="indexterm" name="id2876185"></a><pre class="screen">[root@yourserver qmail-1.03]# <b><tt>rm -f /usr/bin/sendmail</tt></b> [root@yourserver qmail-1.03]# <b><tt>ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail</tt></b> [root@yourserver qmail-1.03]# <pre class="action">rm -f /usr/bin/sendmail @@ -162,7 +162,7 @@ <pre class="action">cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root chmod 644 ~alias/.qmail* /var/qmail/bin/maildirmake ~alias/Maildir/ -chown -R alias.nofiles /var/qmail/alias/Maildir</pre></pre><a class="indexterm" name="id2835557"></a><p>Configure qmail to use the Maildir delivery format +chown -R alias.nofiles /var/qmail/alias/Maildir</pre></pre><a class="indexterm" name="id2876350"></a><p>Configure qmail to use the Maildir delivery format (instead of mbox), and install a version of the qmail startup script modified to use Maildir.</p><pre class="screen">[root@yourserver alias]# <b><tt>echo "./Maildir" > /var/qmail/bin/.qmail</tt></b> [root@yourserver alias]# <b><tt>cp /tmp/openacs-4-6/packages/acs-core-docs/www/files/qmail.rc.txt /var/qmail/rc</tt></b> [root@yourserver alias]# <b><tt>chmod 755 /var/qmail/rc</tt></b> @@ -197,4 +197,4 @@ [root@yourserver alias]# <pre class="action">echo "/usr/local/bin/tcpserver -x /etc/tcp.smtp.cdb -v -u <span class="replaceable">502</span> -g <span class="replaceable">501</span> 0 smtp /var/qmail/bin/qmail-smtpd \ " >> /etc/rc.local echo "2>&1 | /var/qmail/bin/splogger smtpd 3 & " >> /etc/rc.local -echo "csh -cf '/var/qmail/rc &' " >> /etc/rc.local</pre></pre></li></ol></div></div></div><p><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="install-overview.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="oracle.html">Next</a></td></tr><tr><td width="40%" align="left">Overview </td><td width="20%" align="center"><a accesskey="u" href="unix-install.html">Up</a></td><td width="40%" align="right"> Install Oracle 8.1.7</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/linux-installation.html#comments">View comments on this page at openacs.org</a></center></body></html> +echo "csh -cf '/var/qmail/rc &' " >> /etc/rc.local</pre></pre></li></ol></div></div></div><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="install-overview.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="oracle.html">Next</a></td></tr><tr><td width="40%" align="left">Overview&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="unix-install.html">Up</a></td><td width="40%" align="right">&nbsp;Install Oracle 8.1.7</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/linux-installation.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/maintenance.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/Attic/maintenance.html,v diff -u -r1.1.2.2 -r1.1.2.3 --- openacs-4/packages/acs-core-docs/www/maintenance.html 30 Mar 2003 06:04:04 -0000 1.1.2.2 +++ openacs-4/packages/acs-core-docs/www/maintenance.html 15 Apr 2003 17:03:02 -0000 1.1.2.3 @@ -1,2 +1,2 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Chapter 7. Maintenance</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="acs-admin.html" title="Part II. Administrator's Guide"><link rel="previous" href="upgrade-4.5-to-4.6.html" title="Upgrading OpenACS 4.5 to 4.6"><link rel="next" href="maintenance-web.html" title="Hosting Web Sites"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="upgrade-4.5-to-4.6.html">Prev</a> </td><th width="60%" align="center">Part II. Administrator's Guide</th><td width="20%" align="right"> <a accesskey="n" href="maintenance-web.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><h2 class="title"><a name="maintenance"></a>Chapter 7. Maintenance</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="maintenance-web.html">Hosting Web Sites</a></dt><dt><a href="database-management.html">Database Management</a></dt><dt><a href="backup-recovery.html">Backup and Recovery</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="upgrade-4.5-to-4.6.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="maintenance-web.html">Next</a></td></tr><tr><td width="40%" align="left">Upgrading OpenACS 4.5 to 4.6 </td><td width="20%" align="center"><a accesskey="u" href="acs-admin.html">Up</a></td><td width="40%" align="right"> Hosting Web Sites</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/maintenance.html#comments">View comments on this page at openacs.org</a></center></body></html> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter�7.�Maintenance</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="acs-admin.html" title="Part�II.�Administrator's Guide"><link rel="previous" href="upgrade-4.5-to-4.6.html" title="Upgrading OpenACS 4.5 to 4.6"><link rel="next" href="database-management.html" title="Database Management"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="upgrade-4.5-to-4.6.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part�II.�Administrator's Guide</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="database-management.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><h2 class="title"><a name="maintenance"></a>Chapter�7.�Maintenance</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="database-management.html">Database Management</a></dt><dt><a href="backup-recovery.html">Backup and Recovery</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="upgrade-4.5-to-4.6.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="database-management.html">Next</a></td></tr><tr><td width="40%" align="left">Upgrading OpenACS 4.5 to 4.6&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="acs-admin.html">Up</a></td><td width="40%" align="right">&nbsp;Database Management</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/maintenance.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/object-identity.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/object-identity.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/object-identity.html 7 Apr 2003 16:59:25 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/object-identity.html 15 Apr 2003 17:03:02 -0000 1.8.2.5 @@ -1,5 +1,5 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Object Identity</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter 9. Development Reference"><link rel="previous" href="permissions-tediously-explained.html" title="OpenACS 4.x Permissions Tediously Explained"><link rel="next" href="programming-with-aolserver.html" title="Programming with AOLserver"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="permissions-tediously-explained.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Development Reference</th><td width="20%" align="right"> <a accesskey="n" href="programming-with-aolserver.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="object-identity"></a>Object Identity</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Object Identity</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter�9.�Development Reference"><link rel="previous" href="permissions-tediously-explained.html" title="OpenACS 4.x Permissions Tediously Explained"><link rel="next" href="programming-with-aolserver.html" title="Programming with AOLserver"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="permissions-tediously-explained.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�9.�Development Reference</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="programming-with-aolserver.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="object-identity"></a>Object Identity</h2></div></div><div class="authorblurb"><p> by <a href="http://planitia.org" target="_top">Rafael H. Schloming</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. @@ -33,4 +33,4 @@ even capable of fully tracking the history of membership state.</p><p>The design choice of explicitly representing object identity with an integer primary key that is derived from a globally unique sequence is the key to eliminating redundant code and replacing it with generic <span class="emphasis"><em>object -level services</em></span>.</p><p><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="permissions-tediously-explained.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="programming-with-aolserver.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4.x Permissions Tediously Explained </td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right"> Programming with AOLserver</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/object-identity.html#comments">View comments on this page at openacs.org</a></center></body></html> +level services</em></span>.</p><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="permissions-tediously-explained.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="programming-with-aolserver.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4.x Permissions Tediously Explained&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right">&nbsp;Programming with AOLserver</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/object-identity.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/object-system-design.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/object-system-design.html,v diff -u -r1.6.2.4 -r1.6.2.5 --- openacs-4/packages/acs-core-docs/www/object-system-design.html 7 Apr 2003 16:59:25 -0000 1.6.2.4 +++ openacs-4/packages/acs-core-docs/www/object-system-design.html 15 Apr 2003 17:03:02 -0000 1.6.2.5 @@ -1,18 +1,18 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS 4 Object Model Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="previous" href="object-system-requirements.html" title="OpenACS 4 Object Model Requirements"><link rel="next" href="permissions-requirements.html" title="OpenACS 4 Permissions Requirements"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="object-system-requirements.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Kernel Documentation</th><td width="20%" align="right"> <a accesskey="n" href="permissions-requirements.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="object-system-design"></a>OpenACS 4 Object Model Design</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS 4 Object Model Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="previous" href="object-system-requirements.html" title="OpenACS 4 Object Model Requirements"><link rel="next" href="permissions-requirements.html" title="OpenACS 4 Permissions Requirements"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="object-system-requirements.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�11.�Kernel Documentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="permissions-requirements.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="object-system-design"></a>OpenACS 4 Object Model Design</h2></div></div><div class="authorblurb"><p> by <a href="mailto:psu@arsdigita.com" target="_top">Pete Su</a>, <a href="mailto:mcyoon@arsdigita.com" target="_top">Michael Yoon</a>, <a href="mailto:richardl@arsdigita.com" target="_top">Richard Li</a> and <a href="mailto:rhs@arsdigita.com" target="_top">Rafael Schloming</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="object-system-design-essentials"></a>Essentials</h3></div></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="objects-design-data-model"></a>Data Model</h4></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="/doc/sql/display-sql?url=acs-metadata-create.sql&package_key=acs-kernel" target="_top"> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="object-system-design-essentials"></a>Essentials</h3></div></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="objects-design-data-model"></a>Data Model</h4></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="/doc/sql/display-sql?url=acs-metadata-create.sql&package_key=acs-kernel" target="_top"> acs-metadata-create.sql</a></p></li><li><p><a href="/doc/sql/display-sql?url=acs-objects-create.sql&package_key=acs-kernel" target="_top"> acs-objects-create.sql</a></p></li><li><p><a href="/doc/sql/display-sql?url=acs-relationships-create.sql&package_key=acs-kernel" target="_top"> -acs-relationships-create.sql</a></p></li></ul></div></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="objects-design-tcl-files"></a>Tcl Files</h4></div></div><p><span class="emphasis"><em>Not yet linked.</em></span></p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="objects-design-requirements"></a>Requirements</h4></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="object-system-requirements.html" title="OpenACS 4 Object Model Requirements">Object Model +acs-relationships-create.sql</a></p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="objects-design-tcl-files"></a>Tcl Files</h4></div></div><p><span class="emphasis"><em>Not yet linked.</em></span></p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="objects-design-requirements"></a>Requirements</h4></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="object-system-requirements.html" title="OpenACS 4 Object Model Requirements">Object Model Requirements</a></p></li><li><p><a href="groups-requirements.html" title="OpenACS 4 Groups Requirements">Groups Requirements</a></p></li><li><p><a href="permissions-requirements.html" title="OpenACS 4 Permissions Requirements">Permissions -Requirements</a></p></li></ul></div></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="object-system-design-introduction"></a>Introduction</h3></div></div><p>Before OpenACS 4, software developers writing OpenACS applications or modules +Requirements</a></p></li></ul></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="object-system-design-introduction"></a>Introduction</h3></div></div><p>Before OpenACS 4, software developers writing OpenACS applications or modules would develop each data model separately. However, many applications built on OpenACS share certain characteristics or require certain common services. Examples of such services include:</p><div class="itemizedlist"><ul type="disc"><li><p>User comments</p></li><li><p>Storage of user-defined or extensible sets of attributes</p></li><li><p>Access control</p></li><li><p>General auditing and bookkeeping (e.g. creation date, IP addresses, and @@ -37,9 +37,9 @@ object type (e.g. users) to instances of another object type (e.g. groups). </p></li></ul></div><p>The next section will explore these facilities in the context of the the -particular programming idioms that we wish to generalize.</p><p><span class="strong"><em>Related Links</em></span></p><p>This design document should be read along with the design documents for <a href="groups-design.html" title="OpenACS 4 Groups Design">the new groups system</a>, <a href="subsites-design.html" title="OpenACS 4 Subsites Design Document">subsites</a> and <a href="permissions-design.html" title="OpenACS 4 Permissions Design">the permissions system</a></p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="object-system-design-history"></a>History</h3></div></div><p>The motivation for most of the facilities in the OpenACS 4 Object Model can be +particular programming idioms that we wish to generalize.</p><p><span class="strong">Related Links</span></p><p>This design document should be read along with the design documents for <a href="groups-design.html" title="OpenACS 4 Groups Design">the new groups system</a>, <a href="subsites-design.html" title="OpenACS 4 Subsites Design Document">subsites</a> and <a href="permissions-design.html" title="OpenACS 4 Permissions Design">the permissions system</a></p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="object-system-design-history"></a>History</h3></div></div><p>The motivation for most of the facilities in the OpenACS 4 Object Model can be understood in the context of the 3.x code base and the kinds of programming -idioms that evolved there. These are listed and discussed below.</p><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="objects-design-object-ident"></a>Object Identification</h4></div></div><p>Object identification is a central mechanism in OpenACS 4. Every application +idioms that evolved there. These are listed and discussed below.</p><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="objects-design-object-ident"></a>Object Identification</h4></div></div><p>Object identification is a central mechanism in OpenACS 4. Every application object in OpenACS 4 has a unique ID which is mapped to a row in a central table called <tt>acs_objects</tt>. Developers that wish to use OpenACS 4 services need only take a few simple steps to make sure that their application objects @@ -77,14 +77,14 @@ make sure every object the system is to manage is associated with a row in <tt>acs_objects</tt>. More importantly, if they do this, new services like general comments can be created without requiring existing applications -to "hook into" them via new metadata.</p><p><span class="strong"><em>Note:</em></span> Object identifiers are a good example of metadata +to "hook into" them via new metadata.</p><p><span class="strong">Note:</span> Object identifiers are a good example of metadata in the new system. Each row in <tt>acs_objects</tt> stores information <span class="emphasis"><em>about</em></span> the application object, but not the application object itself. This becomes more clear if you skip ahead and look at the SQL schema code -that defines this table.</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="objects-design-obj-context"></a>Object Context and Access Control</h4></div></div><p>Until the implementation of the general permissions system, every OpenACS +that defines this table.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="objects-design-obj-context"></a>Object Context and Access Control</h4></div></div><p>Until the implementation of the general permissions system, every OpenACS application had to manage access control to its data separately. Later on, a notion of "scoping" was introduced into the core data model.</p><p>"Scope" is a term best explained by example. Consider some -hypothetical rows in the <tt>address_book</tt> table:</p><blockquote class="blockquote"><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><tbody><tr><td><span class="strong"><em>...</em></span></td><td><span class="strong"><em><tt>scope</tt></em></span></td><td><span class="strong"><em><tt>user_id</tt></em></span></td><td><span class="strong"><em><tt>group_id</tt></em></span></td><td><span class="strong"><em>...</em></span></td></tr><tr><td>...</td><td><tt>user</tt></td><td><tt>123</tt></td><td>�</td><td>...</td></tr><tr><td>...</td><td><tt>group</tt></td><td>�</td><td><tt>456</tt></td><td>...</td></tr><tr><td>...</td><td><tt>public</tt></td><td>�</td><td>�</td><td>...</td></tr></tbody></table></div></blockquote><p>The first row represents an entry in User 123's personal address book, +hypothetical rows in the <tt>address_book</tt> table:</p><div class="blockquote"><blockquote class="blockquote"><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><tbody><tr><td><span class="strong">...</span></td><td><span class="strong"><tt>scope</tt></span></td><td><span class="strong"><tt>user_id</tt></span></td><td><span class="strong"><tt>group_id</tt></span></td><td><span class="strong">...</span></td></tr><tr><td>...</td><td><tt>user</tt></td><td><tt>123</tt></td><td>�</td><td>...</td></tr><tr><td>...</td><td><tt>group</tt></td><td>�</td><td><tt>456</tt></td><td>...</td></tr><tr><td>...</td><td><tt>public</tt></td><td>�</td><td>�</td><td>...</td></tr></tbody></table></div></blockquote></div><p>The first row represents an entry in User 123's personal address book, the second row represents an entry in User Group 456's shared address book, and the third row represents an entry in the site's public address book.</p><p>In this way, the scoping columns identify the security context in which a @@ -106,7 +106,7 @@ permission to perform action Y on object Z.</p><p>The context system forms the basis for the rest of the OpenACS access control system, which is described in in two separate documents: one for the <a href="permissions-design.html" title="OpenACS 4 Permissions Design">permissions system</a> and another for the <a href="groups-design.html" title="OpenACS 4 Groups Design">party groups</a> system. The context system -is also used to implement <a href="subsites-design.html" title="OpenACS 4 Subsites Design Document">subsites</a>.</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="objects-design-obj-types"></a>Object Types</h4></div></div><p>As mentioned above, many OpenACS modules provide extensible data models, and +is also used to implement <a href="subsites-design.html" title="OpenACS 4 Subsites Design Document">subsites</a>.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="objects-design-obj-types"></a>Object Types</h4></div></div><p>As mentioned above, many OpenACS modules provide extensible data models, and need to use application specific mechanisms to keep track of user defined attributes and to map application data to these attributes. In the past, modules either used user/groups or their own ad hoc data model to provide @@ -146,7 +146,7 @@ corresponding row in the parent type table). Therefore, applications an use this mechanism without worrying about this bookkeeping themselves, and we avoid having applications pollute the core data model with their specific -information.</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="objects-design-attributes"></a>Object Attributes, Skinny Tables</h4></div></div><p>As we described above, the OpenACS 3.x user/groups system stored object +information.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="objects-design-attributes"></a>Object Attributes, Skinny Tables</h4></div></div><p>As we described above, the OpenACS 3.x user/groups system stored object attributes in two ways. The first was to use columns in the helper table. The second consisted of two tables, one describing attributes and one storing values, to provide a flexible means for attaching attributes to metadata @@ -177,7 +177,7 @@ skinny tables because doing so allows developers and users to dynamically update the set of attributes stored on an object without updating the data model at the code level. The bottom line: Helper tables are more functional -and more efficient, skinny tables are more flexible but limited.</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="objects-design-relation-types"></a>Relation Types</h4></div></div><p>Many OpenACS 3.x modules use <span class="emphasis"><em>mapping tables</em></span> to model relationships +and more efficient, skinny tables are more flexible but limited.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="objects-design-relation-types"></a>Relation Types</h4></div></div><p>Many OpenACS 3.x modules use <span class="emphasis"><em>mapping tables</em></span> to model relationships between application objects. Again, the 3.x user/groups system provides the canonical example of this design style. In that system, there was a single table called <tt>user_group_map</tt> that kept track of which users @@ -208,9 +208,9 @@ object system could use the meta data in the types table to do useful things in a generic way on all relation types. But this mechanism doesn't really exist yet.</p><p>Relation types are a somewhat abstract idea. To get a better feel for -them, you should just skip to the <a href="object-system-design.html#object-system-design-relsmodel">data model</a>.</p></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="object-system-design-summary"></a>Summary and Design Considerations</h3></div></div><p>The OpenACS 4 Object Model is designed to generalize and unify the following +them, you should just skip to the <a href="object-system-design.html#object-system-design-relsmodel">data model</a>.</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="object-system-design-summary"></a>Summary and Design Considerations</h3></div></div><p>The OpenACS 4 Object Model is designed to generalize and unify the following mechanisms that are repeatedly implemented in OpenACS-based systems to manage -generic and application specific metadata:</p><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="objects-design-why-not-objdb"></a>Why not Object Databases?</h4></div></div><p>The presence of a framework for subtyping and inheritance always brings up +generic and application specific metadata:</p><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="objects-design-why-not-objdb"></a>Why not Object Databases?</h4></div></div><p>The presence of a framework for subtyping and inheritance always brings up the question of why we don't just use an object database. The main reason is that all of the major object database vendors ship products that are effectively tied to some set of object oriented programming languages. Their @@ -234,7 +234,7 @@ practice. Finally, object databases are not as widely used as traditional relational systems. They have not been tested as extensively and their scalability to very large databases is not proven (though some will disagree -with this statement).</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="objects-design-oracle"></a>Oracle</h4></div></div><p>The conclusion: the best design is to add a limited notion of subtyping to +with this statement).</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="objects-design-oracle"></a>Oracle</h4></div></div><p>The conclusion: the best design is to add a limited notion of subtyping to our existing relational data model. By doing this, we retain all the power of the relational data model while gaining the object oriented features we need most.</p><p>In the context of OpenACS 4, this means using the object model to make our @@ -245,9 +245,9 @@ the more limited domain of the metadata model, this is acceptable since the type hierarchy is fairly small. But the object system data model is not designed to support, for example, a huge type tree like the Java runtime -libraries might define.</p><p>This last point cannot be over-stressed: <span class="strong"><em>the object model is not -meant to be used for large scale application data storage</em></span>. It is -meant to represent and store metadata, not application data.</p></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="object-system-design-datamodel"></a>Data Model</h3></div></div><p>Like most data models, the OpenACS Core data model has two levels:</p><div class="orderedlist"><ol type="1"><li><p>The <span class="emphasis"><em>knowledge level</em></span> (i.e. the metadata model)</p></li><li><p>The <span class="emphasis"><em>operational level</em></span> (i.e. the concrete data model)</p></li></ol></div><p> +libraries might define.</p><p>This last point cannot be over-stressed: <span class="strong">the object model is not +meant to be used for large scale application data storage</span>. It is +meant to represent and store metadata, not application data.</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="object-system-design-datamodel"></a>Data Model</h3></div></div><p>Like most data models, the OpenACS Core data model has two levels:</p><div class="orderedlist"><ol type="1"><li><p>The <span class="emphasis"><em>knowledge level</em></span> (i.e. the metadata model)</p></li><li><p>The <span class="emphasis"><em>operational level</em></span> (i.e. the concrete data model)</p></li></ol></div><p> You can browse the data models themselves from here: </p><div class="itemizedlist"><ul type="disc"><li><p><a href="/doc/sql/display-sql?url=acs-metadata-create.sql&package_key=acs-kernel" target="_top"> acs-metadata-create.sql</a></p></li><li><p><a href="/doc/sql/display-sql?url=acs-objects-create.sql&package_key=acs-kernel" target="_top"> @@ -258,7 +258,7 @@ the SQL definitions of many tables. Generally, these match the actual definitions in the existing data model but they are meant to reflect design information, not implementation. Some less relevant columns may be left out, -and things like constraint names are not included.</p><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="objects-design-knowledge-level"></a>Knowledge-Level Model</h4></div></div><p>The knowledge level data model for OpenACS objects centers around three tables +and things like constraint names are not included.</p><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="objects-design-knowledge-level"></a>Knowledge-Level Model</h4></div></div><p>The knowledge level data model for OpenACS objects centers around three tables that keep track of object types, attributes, and relation types. The first table is <tt>acs_object_types</tt>, shown here in an abbreviated form:</p><pre class="programlisting"> @@ -371,7 +371,7 @@ information about relation types.</p><p>This part of the data model is somewhat analogous to the data dictionary in Oracle. The information stored here is primarily metadata that describes the data stored in the <a href="object-system-design.html#objects-design-op-level" title="Operational-level Data Model">operational level</a> of the data -model, which is discussed next.</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="objects-design-op-level"></a>Operational-level Data Model</h4></div></div><p>The operational level data model centers around the +model, which is discussed next.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="objects-design-op-level"></a>Operational-level Data Model</h4></div></div><p>The operational level data model centers around the <tt>acs_objects</tt> table. This table contains a single row for every instance of the type <tt>acs_object</tt>. The table contains the object's unique identifier, a reference to its type, security @@ -442,16 +442,16 @@ generic skinny tables.</p><p>This table, along with <tt>acs_attributes</tt> and <tt>acs_attribute_values</tt> generalize the old user/group tables <tt>user_group_map</tt>, <tt>user_group_member_fields_map</tt> and -<tt>user_group_member_fields</tt>.</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="objects-design-discussion"></a>Summary and Discussion</h4></div></div><p>The core tables in the OpenACS 4 data model store information about instances +<tt>user_group_member_fields</tt>.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="objects-design-discussion"></a>Summary and Discussion</h4></div></div><p>The core tables in the OpenACS 4 data model store information about instances of object types and relation types. The <tt>acs_object</tt> table provides the central location that contains a single row for every object in the system. Services can use this table along with the metadata in stored in the knowledge level data model to create, manage, query and manipulate objects in a uniform manner. The <tt>acs_rels</tt> table has an analogous role in storing information on relations.</p><p>These are all the tables that we'll discuss in this document. The rest of the Kernel data model is described in the documents for <a href="subsites-design.html" title="OpenACS 4 Subsites Design Document">subsites</a>, the <a href="permissions-design.html" title="OpenACS 4 Permissions Design">permissions</a> system and for the <a href="groups-design.html" title="OpenACS 4 Groups Design">groups</a> system.</p><p>Some examples of how these tables are used in the system can be found in -the discussion of the API, which comes next.</p></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="object-system-design-api"></a>API</h3></div></div><p>Now we'll examine each piece of the API in detail. Bear in mind that -the Object Model API is defined primarily through PL/SQL packages.</p><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="objects-design-object-types"></a>Object Types and Attributes</h4></div></div><p>The object system provides an API for creating new object types and then +the discussion of the API, which comes next.</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="object-system-design-api"></a>API</h3></div></div><p>Now we'll examine each piece of the API in detail. Bear in mind that +the Object Model API is defined primarily through PL/SQL packages.</p><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="objects-design-object-types"></a>Object Types and Attributes</h4></div></div><p>The object system provides an API for creating new object types and then attaching attributes to them. The procedures <tt>create_type</tt> and <tt>drop_type</tt> are used to create and delete type definitions.</p><p>The two calls show up in the package <tt>acs_object_type</tt>.</p><pre class="programlisting"> @@ -572,7 +572,7 @@ automatically be hooked into every generic object service that exists. Better still, this code need not be changed as new services are added. As an aside, the most important service that requires you to subtype -<tt>acs_object</tt> is <a href="permissions-design.html" title="OpenACS 4 Permissions Design">permissions</a>.</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="objects-design-objects"></a>Objects</h4></div></div><p>The next important piece of the API is defined in the +<tt>acs_object</tt> is <a href="permissions-design.html" title="OpenACS 4 Permissions Design">permissions</a>.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="objects-design-objects"></a>Objects</h4></div></div><p>The next important piece of the API is defined in the <tt>acs_object</tt> package, and is concerned with creating and managing objects. This part of the API is designed to take care of the mundane bookkeeping needed to create objects and query their attributes. @@ -684,7 +684,7 @@ the general services in OpenACS 4 (i.e. permissions, general comments, and so on) are written to work with any object that appears in <tt>acs_objects</tt>. Therefore, in general these three steps are sufficient to make OpenACS 4 services -available to your application.</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="objects-design-relat-types"></a>Relation Types</h4></div></div><p>The relations system defines two packages: <tt>acs_rel_type</tt> for +available to your application.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="objects-design-relat-types"></a>Relation Types</h4></div></div><p>The relations system defines two packages: <tt>acs_rel_type</tt> for creating and managing relation types, and <tt>acs_rel</tt> for relating objects.</p><p>These two procedures just insert and remove roles from the <tt>acs_rel_roles</tt> table. This table stores the legal relationship @@ -855,11 +855,11 @@ end; </tt> -</pre></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="objects-design-discuss"></a>Summary and Discussion</h4></div></div><p>The Object Model's API and data model provides a small set of simple +</pre></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="objects-design-discuss"></a>Summary and Discussion</h4></div></div><p>The Object Model's API and data model provides a small set of simple procedures that allow applications to create object types, object instances, and object relations. Most of the data model is straightforward; the relation type mechanism is a bit more complex, but in return it provides functionality -on par with the old user/groups system in a more general way.</p></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="object-system-design-future"></a>Future Improvements/Areas of Likely Change</h3></div></div><p>Nothing here yet.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="object-system-design-authors"></a>Authors</h3></div></div><p><a href="mailto:psu@arsdigita.com" target="_top">Pete Su</a> generated this document +on par with the old user/groups system in a more general way.</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="object-system-design-future"></a>Future Improvements/Areas of Likely Change</h3></div></div><p>Nothing here yet.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="object-system-design-authors"></a>Authors</h3></div></div><p><a href="mailto:psu@arsdigita.com" target="_top">Pete Su</a> generated this document from material culled from other documents by <a href="mailto:mcyoon@arsdigita.com" target="_top">Michael Yoon</a>, <a href="mailto:richardl@arsdigita.com" target="_top">Richard Li</a> and <a href="mailto:rhs@arsdigita.com" target="_top">Rafael Schloming</a>. But, any remaining lies -are his and his alone.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="object-system-design-revision-hist"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong"><em>Document Revision #</em></span></td><td><span class="strong"><em>Action Taken, Notes</em></span></td><td><span class="strong"><em>When?</em></span></td><td><span class="strong"><em>By Whom?</em></span></td></tr><tr><td>0.1</td><td>Creation</td><td>9/09/2000</td><td>Pete Su</td></tr><tr><td>0.2</td><td>Edited for ACS 4 Beta</td><td>9/30/2000</td><td>Kai Wu</td></tr><tr><td>0.3</td><td>Edited for ACS 4.0.1, fixed some mistakes, removed use of term -"OM"</td><td>11/07/2000</td><td>Pete Su</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="object-system-requirements.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="permissions-requirements.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Object Model Requirements </td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right"> OpenACS 4 Permissions Requirements</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/object-system-design.html#comments">View comments on this page at openacs.org</a></center></body></html> +are his and his alone.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="object-system-design-revision-hist"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong">Document Revision #</span></td><td><span class="strong">Action Taken, Notes</span></td><td><span class="strong">When?</span></td><td><span class="strong">By Whom?</span></td></tr><tr><td>0.1</td><td>Creation</td><td>9/09/2000</td><td>Pete Su</td></tr><tr><td>0.2</td><td>Edited for ACS 4 Beta</td><td>9/30/2000</td><td>Kai Wu</td></tr><tr><td>0.3</td><td>Edited for ACS 4.0.1, fixed some mistakes, removed use of term +"OM"</td><td>11/07/2000</td><td>Pete Su</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="object-system-requirements.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="permissions-requirements.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Object Model Requirements&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS 4 Permissions Requirements</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/object-system-design.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/object-system-requirements.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/object-system-requirements.html,v diff -u -r1.6.2.4 -r1.6.2.5 --- openacs-4/packages/acs-core-docs/www/object-system-requirements.html 7 Apr 2003 16:59:25 -0000 1.6.2.4 +++ openacs-4/packages/acs-core-docs/www/object-system-requirements.html 15 Apr 2003 17:03:02 -0000 1.6.2.5 @@ -1,9 +1,9 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS 4 Object Model Requirements</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="previous" href="kernel-overview.html" title="Overview"><link rel="next" href="object-system-design.html" title="OpenACS 4 Object Model Design"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="kernel-overview.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Kernel Documentation</th><td width="20%" align="right"> <a accesskey="n" href="object-system-design.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="object-system-requirements"></a>OpenACS 4 Object Model Requirements</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS 4 Object Model Requirements</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="previous" href="kernel-overview.html" title="Overview"><link rel="next" href="object-system-design.html" title="OpenACS 4 Object Model Design"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="kernel-overview.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�11.�Kernel Documentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="object-system-design.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="object-system-requirements"></a>OpenACS 4 Object Model Requirements</h2></div></div><div class="authorblurb"><p> By <a href="mailto:psu@arsdigita.com" target="_top">Pete Su</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="object-system-requirements-"></a>I. Introduction</h3></div></div><p>A major goal in OpenACS 4 is to unify and normalize many of the core services + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="object-system-requirements-"></a>I. Introduction</h3></div></div><p>A major goal in OpenACS 4 is to unify and normalize many of the core services of the system into a coherent common data model and API. In the past, these services were provided to applications in an ad-hoc and irregular fashion. Examples of such services include:</p><div class="itemizedlist"><ul type="disc"><li><p>General Comments</p></li><li><p>User/groups</p></li><li><p>Attribute storage in user/groups</p></li><li><p>General Permissions</p></li><li><p>Site wide search</p></li><li><p>General Auditing</p></li></ul></div><p>All of these services involve relating extra information and services to @@ -22,9 +22,9 @@ of the application's data model - in order to enable certain generic services. The term "object" refers to any entity being represented within the OpenACS, and typically corresponds to a single row within the -relational database.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="object-system-requirements-vision"></a>Vision Statement</h3></div></div><p>The OpenACS 4 Object Model must address five high-level requirements that +relational database.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="object-system-requirements-vision"></a>Vision Statement</h3></div></div><p>The OpenACS 4 Object Model must address five high-level requirements that repeatedly exhibit themselves in the context of existing services in OpenACS 3.x, -as described below.</p><p><span class="strong"><em>Object Identifiers for General Services</em></span></p><p>Generic services require a single unambiguous way of identifying +as described below.</p><p><span class="strong">Object Identifiers for General Services</span></p><p>Generic services require a single unambiguous way of identifying application objects that they manage or manipulate. In OpenACS 3.x, there are several different idioms that construct object identifiers from other data. Many modules use a <tt>(user_id, group_id, scope)</tt> triple combination @@ -46,12 +46,12 @@ that their definition and use is ad-hoc and inconsistent. This makes the construction of generic application-independent services difficult. Therefore, the OpenACS 4 Object Model should provide a centralized and uniform -mechanism for tagging application objects with unique identifiers.</p><p><span class="strong"><em>Support for Unified Access Control</em></span></p><p>Access control should be as transparent as possible to the application +mechanism for tagging application objects with unique identifiers.</p><p><span class="strong">Support for Unified Access Control</span></p><p>Access control should be as transparent as possible to the application developer. Until the implementation of the general permissions system, every OpenACS application had to manage access control to its data separately. Later on, a notion of "scoping" was introduced into the core data model.</p><p>"Scope" is a term best explained by example. Consider some -hypothetical rows in the <tt>address_book</tt> table:</p><blockquote class="blockquote"><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong"><em>...</em></span></td><td><span class="strong"><em><tt>scope</tt></em></span></td><td><span class="strong"><em><tt>user_id</tt></em></span></td><td><span class="strong"><em><tt>group_id</tt></em></span></td><td><span class="strong"><em>...</em></span></td></tr><tr><td>...</td><td><tt>user</tt></td><td><tt>123</tt></td><td>�</td><td>...</td></tr><tr><td>...</td><td><tt>group</tt></td><td>�</td><td><tt>456</tt></td><td>...</td></tr><tr><td>...</td><td><tt>public</tt></td><td>�</td><td>�</td><td>...</td></tr></tbody></table></div></blockquote><p>The first row represents an entry in User 123's personal address book, +hypothetical rows in the <tt>address_book</tt> table:</p><div class="blockquote"><blockquote class="blockquote"><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong">...</span></td><td><span class="strong"><tt>scope</tt></span></td><td><span class="strong"><tt>user_id</tt></span></td><td><span class="strong"><tt>group_id</tt></span></td><td><span class="strong">...</span></td></tr><tr><td>...</td><td><tt>user</tt></td><td><tt>123</tt></td><td>�</td><td>...</td></tr><tr><td>...</td><td><tt>group</tt></td><td>�</td><td><tt>456</tt></td><td>...</td></tr><tr><td>...</td><td><tt>public</tt></td><td>�</td><td>�</td><td>...</td></tr></tbody></table></div></blockquote></div><p>The first row represents an entry in User 123's personal address book, the second row represents an entry in User Group 456's shared address book, and the third row represents an entry in the site's public address book.</p><p>In this way, the scoping columns identify the security context in which a @@ -65,7 +65,7 @@ page, a security problem could result.</p><p>Thus the OpenACS 4 Object Model must support a more general access control system that allows access control domains to be hierarchical, and specifiable with a single piece of data, instead of the old composite keys described -above.</p><p><span class="strong"><em>Extensible Data Models</em></span></p><p>Another problem with previous OpenACS data models is that many of the central +above.</p><p><span class="strong">Extensible Data Models</span></p><p>Another problem with previous OpenACS data models is that many of the central tables in the system became bloated as they were extended to support an increasing number of modules. The <tt>users</tt> table is the best case in point: it became full of columns that exist for various special @@ -83,10 +83,10 @@ custom extensions to the existing data models, and the OM does the bookkeeping necessary to make this easier, providing a generic API for object creation that automatically keeps track of the location and relationships -between data.</p><p><span class="strong"><em>Design Note:</em></span> While this doesn't really belong in a +between data.</p><p><span class="strong">Design Note:</span> While this doesn't really belong in a requirements document, the fact that we are constrained to using relational databases means that certain constraints on the overall design of the object -data model exist, which you can read about in <a href="object-system-design.html#object-system-design-summary">Summary and Design Considerations</a>.</p><p><span class="strong"><em>Modifiable Data Models</em></span></p><p>Another recurring applications problem is how to store a modifiable data +data model exist, which you can read about in <a href="object-system-design.html#object-system-design-summary">Summary and Design Considerations</a>.</p><p><span class="strong">Modifiable Data Models</span></p><p>Another recurring applications problem is how to store a modifiable data model, or how to store information that may change extensively between releases or in different client installations. Furthermore, we want to avoid changes to an application's database queries in the face of any custom @@ -103,7 +103,7 @@ store values for those attributes.</p></li></ul></div><p>Thus the Object Model must provide a general mechanism for applications and developers to modify or extend data models, without requiring changes to the SQL schema of the system. This ensures that all applications use the same -base schema, resulting in a uniform and more maintainable system.</p><p><span class="strong"><em>Generic Relations</em></span></p><p>Many OpenACS applications define simple relationships between application +base schema, resulting in a uniform and more maintainable system.</p><p><span class="strong">Generic Relations</span></p><p>Many OpenACS applications define simple relationships between application objects, and tag those relationships with extra data. In OpenACS 3.x, this was done using <span class="emphasis"><em>mapping tables</em></span>. The user/groups module has the most highly developed data model for this purpose, using a single table called @@ -121,14 +121,14 @@ Relation types are themselves object types that do nothing but represent relations. They can be used by applications that previously used user/groups for the same purpose, but without the extraneous, artificial -dependencies.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="object-system-requirements-system-overview"></a>System Overview</h3></div></div><p>The Object Model package is a combination of data model and a procedural +dependencies.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="object-system-requirements-system-overview"></a>System Overview</h3></div></div><p>The Object Model package is a combination of data model and a procedural API for manipulating application objects within an OpenACS instance. The OM allows developers to describe a hierarchical system of <span class="emphasis"><em>object types</em></span> that store metadata on application objects. The object type system supports subtyping with inheritance, so new object types can be defined in terms of existing object types.</p><p>The OM data model forms the main part of the OpenACS 4 Kernel data model. The -other parts of the Kernel data model include:</p><div class="itemizedlist"><ul type="disc"><li><p>Parties and Groups</p></li><li><p>Permissions</p></li></ul></div><p>Each of these is documented elsewhere at length.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="object-system-requirements-use-cases"></a>Use-cases and User-scenarios</h3></div></div><p>(Pending as of 8/27/00)</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="object-system-requirements-links"></a>Related Links</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="object-system-design.html">OpenACS 4 Object Model Design</a></p></li><li><p><a href="objects.html">OpenACS 4.6.2 Data Models and the Object System</a></p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="object-system-requirements-data-model"></a>Requirements: Data Model</h3></div></div><p>The data model for the object system provides support for the following -kinds of schema patterns that are used by many existing OpenACS modules:</p><div class="variablelist"><dl><dt><span class="term"><span class="strong"><em>10.0 Object Identification and Storage</em></span></span></dt><dd><p>Object identification is a central mechanism in the new metadata system. +other parts of the Kernel data model include:</p><div class="itemizedlist"><ul type="disc"><li><p>Parties and Groups</p></li><li><p>Permissions</p></li></ul></div><p>Each of these is documented elsewhere at length.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="object-system-requirements-use-cases"></a>Use-cases and User-scenarios</h3></div></div><p>(Pending as of 8/27/00)</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="object-system-requirements-links"></a>Related Links</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="object-system-design.html">OpenACS 4 Object Model Design</a></p></li><li><p><a href="objects.html">OpenACS 4.6.2 Data Models and the Object System</a></p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="object-system-requirements-data-model"></a>Requirements: Data Model</h3></div></div><p>The data model for the object system provides support for the following +kinds of schema patterns that are used by many existing OpenACS modules:</p><div class="variablelist"><dl><dt><span class="term"><span class="strong">10.0 Object Identification and Storage</span></span></dt><dd><p>Object identification is a central mechanism in the new metadata system. The fact that every object has a known unique identifier means that the core can deal with all objects in a generic way. Thus the only action required of an application to obtain any general service is to "hook into" the @@ -149,15 +149,15 @@ application data. More importantly, object identifiers will enable developers to readily build and use generic services that work globally across a system.</p><p>The object identifiers should be subject to the following -requirements:</p><p><span class="strong"><em>10.10 Uniqueness</em></span></p><p>The object ID should be unique among all the IDs in the entire OpenACS system -in which the object lives.</p><p><span class="strong"><em>10.20 Useful as a Reference</em></span></p><p>Applications should be able to use the unique object ID as a reference, -with which they can fetch any or all of the object's attributes.</p><p><span class="strong"><em>10.30 Storable</em></span></p><p>Object IDs should be storable in tables. e.g. you should be able to use +requirements:</p><p><span class="strong">10.10 Uniqueness</span></p><p>The object ID should be unique among all the IDs in the entire OpenACS system +in which the object lives.</p><p><span class="strong">10.20 Useful as a Reference</span></p><p>Applications should be able to use the unique object ID as a reference, +with which they can fetch any or all of the object's attributes.</p><p><span class="strong">10.30 Storable</span></p><p>Object IDs should be storable in tables. e.g. you should be able to use them to implement mapping tables between objects, to represent -relationships.</p><p><span class="strong"><em>10.40 Moveable</em></span></p><p>Objects should be mobile between databases. That is, information will +relationships.</p><p><span class="strong">10.40 Moveable</span></p><p>Objects should be mobile between databases. That is, information will often need to be moved between multiple servers (development, staging, and production), so a mechanism for moving this data is necessary. In addition, a mechanism for tagging these objects in a way similar to CVS would be useful -in determining which objects need to be synchronized.</p></dd><dt><span class="term"><span class="strong"><em>20.0 Object Types</em></span></span></dt><dd><p>An <span class="emphasis"><em>object type</em></span> refers to a specification of one or more +in determining which objects need to be synchronized.</p></dd><dt><span class="term"><span class="strong">20.0 Object Types</span></span></dt><dd><p>An <span class="emphasis"><em>object type</em></span> refers to a specification of one or more attributes to be managed along with a piece of application data.</p><p>The object system should provide a data model for describing and representing object types. This data model is somewhat analogous to the Oracle data dictionary, which stores information about all user defined @@ -170,33 +170,33 @@ is meant to be a generalization of this mechanism. The data model should allow developers to at least do everything they used to with user/groups, but without its administrative hassles.</p><p>Therefore, the data model must be able to represent object types that have -the following characteristics:</p><p><span class="strong"><em>20.10 Type Name</em></span></p><p>A human readable name for the object type.</p><p><span class="strong"><em>20.20 Type Attributes</em></span></p><p>Attributes whose values are shared by all instances of the object -type.</p><p><span class="strong"><em>20.30 Object Attributes</em></span></p><p>Attributes that are specific to each particular object belonging to a -given type.</p><p>The data model must also enforce certain constraints on object types:</p><p><span class="strong"><em>20.40 Type Uniqueness</em></span></p><p>Object type names must be unique.</p><p><span class="strong"><em>20.50 Attribute Name Uniqueness</em></span></p><p>Attribute names must be unique in the scope of a single object type and -any of its parent types.</p></dd><dt><span class="term"><span class="strong"><em>30.0 Type Extension</em></span></span></dt><dd><p>The Object Model must support the definition of object types that are +the following characteristics:</p><p><span class="strong">20.10 Type Name</span></p><p>A human readable name for the object type.</p><p><span class="strong">20.20 Type Attributes</span></p><p>Attributes whose values are shared by all instances of the object +type.</p><p><span class="strong">20.30 Object Attributes</span></p><p>Attributes that are specific to each particular object belonging to a +given type.</p><p>The data model must also enforce certain constraints on object types:</p><p><span class="strong">20.40 Type Uniqueness</span></p><p>Object type names must be unique.</p><p><span class="strong">20.50 Attribute Name Uniqueness</span></p><p>Attribute names must be unique in the scope of a single object type and +any of its parent types.</p></dd><dt><span class="term"><span class="strong">30.0 Type Extension</span></span></dt><dd><p>The Object Model must support the definition of object types that are subtypes of existing types. A subtype inherits all the attributes of its parent type, and defines some attributes of its own. A critical aspect of the OM is parent types may be altered, and any such change must propagate to child subtypes.</p><p>The OM data model must enforce constraints on subtypes that are similar to -the ones on general object types.</p><p><span class="strong"><em>30.10 Subtype Uniqueness</em></span></p><p>Subtype names must be unique (this parallels requirement 10.40).</p><p><span class="strong"><em>30.20 Subtype Attribute Name Uniqueness</em></span></p><p>Attribute names must be unique in the scope of a single object -subtype.</p><p><span class="strong"><em>30.30 Parent Type Prerequisite</em></span></p><p>Subtypes must be defined in terms of parent types that, in fact, already -exist.</p><p><span class="strong"><em>30.40</em></span></p><p>The extended attribute names in a subtype must not be the same as those in -its parent type.</p></dd><dt><span class="term"><span class="strong"><em>35.0 Methods</em></span></span></dt><dd><p><span class="strong"><em>35.10 Method and Type Association</em></span></p><p>The OM data model should define a mechanism for associating procedural +the ones on general object types.</p><p><span class="strong">30.10 Subtype Uniqueness</span></p><p>Subtype names must be unique (this parallels requirement 10.40).</p><p><span class="strong">30.20 Subtype Attribute Name Uniqueness</span></p><p>Attribute names must be unique in the scope of a single object +subtype.</p><p><span class="strong">30.30 Parent Type Prerequisite</span></p><p>Subtypes must be defined in terms of parent types that, in fact, already +exist.</p><p><span class="strong">30.40</span></p><p>The extended attribute names in a subtype must not be the same as those in +its parent type.</p></dd><dt><span class="term"><span class="strong">35.0 Methods</span></span></dt><dd><p><span class="strong">35.10 Method and Type Association</span></p><p>The OM data model should define a mechanism for associating procedural code, called <span class="emphasis"><em>methods</em></span>, with objects of a given type. Methods are associated with the each object <span class="emphasis"><em>type</em></span> - not each object -<span class="emphasis"><em>instance</em></span>.</p><p><span class="strong"><em>35.20 Method Sharing</em></span></p><p>All instances of a given object type should share the same set of defined -methods for that type.</p></dd><dt><span class="term"><span class="strong"><em>40.0 Object Attribute Value Storage</em></span></span></dt><dd><p>In addition to information on types, the OM data model provides for the +<span class="emphasis"><em>instance</em></span>.</p><p><span class="strong">35.20 Method Sharing</span></p><p>All instances of a given object type should share the same set of defined +methods for that type.</p></dd><dt><span class="term"><span class="strong">40.0 Object Attribute Value Storage</span></span></dt><dd><p>In addition to information on types, the OM data model provides for the centralized storage of object attribute values. This facility unifies the many ad-hoc attribute/value tables that exist in various OpenACS 3.x data models, such as:</p><div class="itemizedlist"><ul type="disc"><li><p>User groups: Each instance of a group type can have custom data.</p></li><li><p>Photo DB: Users can define their own custom metadata to attach to photograph objects.</p></li><li><p>Ecommerce: Vendors can attach custom fields to the data model describing -their products.</p></li></ul></div><p><span class="strong"><em>40.10 Generic Retrieval</em></span></p><p>Attributes should be stored so that they are retrievable in a way that is +their products.</p></li></ul></div><p><span class="strong">40.10 Generic Retrieval</span></p><p>Attributes should be stored so that they are retrievable in a way that is independent of the type of the object that they belong to. That is, the only data needed to retrieve an attribute should be the system-wide ID of an -object (see requirement 10.20 above) and the attribute name.</p><p><span class="strong"><em>40.20 Inherited Attributes</em></span></p><p>The system should allow for the automatic retrieval of inherited attribute -values, for an object belonging to a subtype.</p><p><span class="strong"><em>40.30. Constraints on Attributes</em></span></p><p>The system should allow the developer to put down constraints on the +object (see requirement 10.20 above) and the attribute name.</p><p><span class="strong">40.20 Inherited Attributes</span></p><p>The system should allow for the automatic retrieval of inherited attribute +values, for an object belonging to a subtype.</p><p><span class="strong">40.30. Constraints on Attributes</span></p><p>The system should allow the developer to put down constraints on the values that an attribute may hold, for the purposes of maintaining -application specific integrity rules.</p></dd><dt><span class="term"><span class="strong"><em>50.0 Object Contexts</em></span></span></dt><dd><p>In OpenACS 3.x, there was a notion of "scope" for application +application specific integrity rules.</p></dd><dt><span class="term"><span class="strong">50.0 Object Contexts</span></span></dt><dd><p>In OpenACS 3.x, there was a notion of "scope" for application objects. An object could be belong to one of three scopes: public, group or user. This provided a crude way to associate objects with particular scopes in the system, but it was awkward to use and limited in flexibility.</p><p>The OpenACS 4 Object Model provides a generalized notion of scope that allows @@ -205,64 +205,64 @@ object has no explicit permissions attached to it, then it inherits permissions from its context.</p><p>The context data model also forms the basis of the <a href="subsites-requirements.html" title="OpenACS 4 Subsites Requirements">subsites system</a>, and is a basic part of the <a href="permissions-requirements.html" title="OpenACS 4 Permissions Requirements">permissions system</a>, -described in separate documents.</p><p>The context data model should provide the following facilities:</p><p><span class="strong"><em>50.10 Unique ID</em></span></p><p>Every context should have a unique ID in the system.</p><p><span class="strong"><em>50.20 Tree Structure</em></span></p><p>The data model should support a tree structured organization of contexts. +described in separate documents.</p><p>The context data model should provide the following facilities:</p><p><span class="strong">50.10 Unique ID</span></p><p>Every context should have a unique ID in the system.</p><p><span class="strong">50.20 Tree Structure</span></p><p>The data model should support a tree structured organization of contexts. That is, contexts can be logically "contained" within other contexts (i.e. contexts have parents) and contexts can contain other contexts -(i.e. contexts can have children).</p><p><span class="strong"><em>50.30 Data Model Constraints</em></span></p><p>All objects must have a context ID. This ID must refer to an existing +(i.e. contexts can have children).</p><p><span class="strong">50.30 Data Model Constraints</span></p><p>All objects must have a context ID. This ID must refer to an existing context or be NULL. The meaning of a NULL context is determined by the -implementation.</p><p><span class="strong"><em>Note:</em></span></p><p>The current system interprets the NULL context as meaning the default +implementation.</p><p><span class="strong">Note:</span></p><p>The current system interprets the NULL context as meaning the default "site-wide" context in some sense. I wanted to note this fact for others, but there is no need to make this a requirement of the system. I think it would be reasonable to have a NULL context be an error (psu -8/24/2000).</p></dd><dt><span class="term"><span class="strong"><em>55.0 Object Relations</em></span></span></dt><dd><p>The data model should include a notion of pair-wise relations between +8/24/2000).</p></dd><dt><span class="term"><span class="strong">55.0 Object Relations</span></span></dt><dd><p>The data model should include a notion of pair-wise relations between objects. Relations should be able to record simple facts of the form "object X is related to object Y by relationship R," and also be -able to attach attributes to these facts.</p></dd></dl></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="object-system-requirements-api"></a>Requirements: API</h3></div></div><p>The API should let programmers accomplish the following actions:</p><div class="variablelist"><dl><dt><span class="term"><span class="strong"><em>60.0 Object Type Creation</em></span></span></dt><dd><p><span class="strong"><em>60.10 Create a New Object Type</em></span></p><p>The object system API should provide a procedure call that creates a new +able to attach attributes to these facts.</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="object-system-requirements-api"></a>Requirements: API</h3></div></div><p>The API should let programmers accomplish the following actions:</p><div class="variablelist"><dl><dt><span class="term"><span class="strong">60.0 Object Type Creation</span></span></dt><dd><p><span class="strong">60.10 Create a New Object Type</span></p><p>The object system API should provide a procedure call that creates a new object type by running the appropriate transactions on the object system data model. This API call is subject to the constraints laid out in the data -model. We call this operation "instantiating" an object.</p><p><span class="strong"><em>60.20 Create a New Object Subtype</em></span></p><p>The object system API should provide a procedure call for creating +model. We call this operation "instantiating" an object.</p><p><span class="strong">60.20 Create a New Object Subtype</span></p><p>The object system API should provide a procedure call for creating subtypes of a given type. Operationally, this API is the same as requirement 60.10. Instances of subtypes automatically contain all attributes of the parent type in addition to all attributes of the subtype. This API is subject -to the constraints laid out in the data model.</p><p><span class="strong"><em>60.30 Create a New Relation Type</em></span></p><p>There should be an API call to create a new type of object relation. +to the constraints laid out in the data model.</p><p><span class="strong">60.30 Create a New Relation Type</span></p><p>There should be an API call to create a new type of object relation. Relation types can be modeled as object types. The API below for manipulating -attributes can then be used to add attributes to relation types.</p></dd><dt><span class="term"><span class="strong"><em>70.0 Update an Object Type</em></span></span></dt><dd><p>The object system API must allow the programmer to modify, add, and delete +attributes can then be used to add attributes to relation types.</p></dd><dt><span class="term"><span class="strong">70.0 Update an Object Type</span></span></dt><dd><p>The object system API must allow the programmer to modify, add, and delete attributes from any object type. Updates should be propagated to any child subtypes. This API is subject to the constraints laid out in the data -model.</p></dd><dt><span class="term"><span class="strong"><em>80.0 Delete an Object Type</em></span></span></dt><dd><p>The system provides an API call for deleting an object type.</p><p><span class="strong"><em>80.10</em></span></p><p>Deleting an object type destroys all instances of the type. It should be +model.</p></dd><dt><span class="term"><span class="strong">80.0 Delete an Object Type</span></span></dt><dd><p>The system provides an API call for deleting an object type.</p><p><span class="strong">80.10</span></p><p>Deleting an object type destroys all instances of the type. It should be an error to delete types that have dependent subtypes. This API is subject to -the constraints laid out in the data model.</p><p><span class="strong"><em>80.10.10</em></span></p><p>However, the programmer should also be able to specify that all the +the constraints laid out in the data model.</p><p><span class="strong">80.10.10</span></p><p>However, the programmer should also be able to specify that all the subtypes and instances of those subtypes be destroyed before destroying the object type. This is similar to a "delete cascade" constraint in -SQL.</p></dd><dt><span class="term"><span class="strong"><em>90.0 Object Instance Creation and Destruction</em></span></span></dt><dd><p>The system must provide API calls to manage the creation and destruction -of object instances.</p><p><span class="strong"><em>90.10 Create an Instance of an Object Type</em></span></p><p>The system should provide an API call for creating a new instance of a +SQL.</p></dd><dt><span class="term"><span class="strong">90.0 Object Instance Creation and Destruction</span></span></dt><dd><p>The system must provide API calls to manage the creation and destruction +of object instances.</p><p><span class="strong">90.10 Create an Instance of an Object Type</span></p><p>The system should provide an API call for creating a new instance of a given object type. The new instance should be populated with values for each of the attributes specified in the definition of the type. In addition, it should be possible to create the new instance with an optional context ID -that refers to the default context that the object will live in.</p><p><span class="strong"><em>90.20 Delete an Object Instance</em></span></p><p>The OM should provide an API call for object deletion. Objects can be +that refers to the default context that the object will live in.</p><p><span class="strong">90.20 Delete an Object Instance</span></p><p>The OM should provide an API call for object deletion. Objects can be deleted only when no other objects in the system refer to them. Since it might not be practical to provide a mechanism like "delete cascade" here in a reliable way, providing such a facility in the system is -optional.</p></dd><dt><span class="term"><span class="strong"><em>94.0 Object Relation Creation and Destruction</em></span></span></dt><dd><p>The system must provide API calls to manage the creation and destruction -of object relations.</p></dd><dt><span class="term"><span class="strong"><em>94.10 Create an Object Relation</em></span></span></dt><dd><p>The OM must provide an API call to declare that two objects are related to +optional.</p></dd><dt><span class="term"><span class="strong">94.0 Object Relation Creation and Destruction</span></span></dt><dd><p>The system must provide API calls to manage the creation and destruction +of object relations.</p></dd><dt><span class="term"><span class="strong">94.10 Create an Object Relation</span></span></dt><dd><p>The OM must provide an API call to declare that two objects are related to each other by a given relation type. This API call should also allow -programmers to attach attributes to this object relation.</p></dd><dt><span class="term"><span class="strong"><em>94.20 Destroy an Object Relation</em></span></span></dt><dd><p>There should be an API call for destroying object relations and their -attributes.</p></dd><dt><span class="term"><span class="strong"><em>95.10 Create and Destroy Contexts</em></span></span></dt><dd><p>The system should provide an API to create and destroy object -contexts.</p></dd><dt><span class="term"><span class="strong"><em>100.10 Set Attribute Values for an Object</em></span></span></dt><dd><p>The system should provide an API for updating the attribute values of a -particular instance of an object type.</p></dd><dt><span class="term"><span class="strong"><em>110.10 Get Attribute Values for an Object</em></span></span></dt><dd><p>The system should provide an API for retrieving attribute values from a -particular instance of an object type.</p></dd><dt><span class="term"><span class="strong"><em>120.10 Efficiency</em></span></span></dt><dd><p>The Object Model must support the efficient storage and retrieval of +programmers to attach attributes to this object relation.</p></dd><dt><span class="term"><span class="strong">94.20 Destroy an Object Relation</span></span></dt><dd><p>There should be an API call for destroying object relations and their +attributes.</p></dd><dt><span class="term"><span class="strong">95.10 Create and Destroy Contexts</span></span></dt><dd><p>The system should provide an API to create and destroy object +contexts.</p></dd><dt><span class="term"><span class="strong">100.10 Set Attribute Values for an Object</span></span></dt><dd><p>The system should provide an API for updating the attribute values of a +particular instance of an object type.</p></dd><dt><span class="term"><span class="strong">110.10 Get Attribute Values for an Object</span></span></dt><dd><p>The system should provide an API for retrieving attribute values from a +particular instance of an object type.</p></dd><dt><span class="term"><span class="strong">120.10 Efficiency</span></span></dt><dd><p>The Object Model must support the efficient storage and retrieval of object attributes. Since the OM is intended to form the core of many general services in the OpenACS, and these services will likely make extensive use of the OM tables, queries on these tables must be fast. The major problem here seems to be supporting subtyping and inheritance in a way that does not severely -impact query performance.</p></dd><dt><span class="term"><span class="strong"><em>130.10 Ease of Use</em></span></span></dt><dd><p>Most OpenACS packages will be expected to use the Object Model in one way or +impact query performance.</p></dd><dt><span class="term"><span class="strong">130.10 Ease of Use</span></span></dt><dd><p>Most OpenACS packages will be expected to use the Object Model in one way or another. Since it is important that the largest audience of developers possible adopts and uses the OM, it must be easy to incorporate into applications, and it must not impose undue requirements on an application's data model. In other words, it should be easy to "hook into" the object model, and that ability should not have a major impact -on the application data model.</p><p><span class="strong"><em>Note:</em></span> Is the API the only way to obtain values? How does -this integrate with application level SQL queries?</p></dd></dl></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="object-system-requirements-history"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong"><em>Document Revision #</em></span></td><td><span class="strong"><em>Action Taken, Notes</em></span></td><td><span class="strong"><em>When?</em></span></td><td><span class="strong"><em>By Whom?</em></span></td></tr><tr><td>0.1</td><td>Creation</td><td>08/10/2000</td><td>Bryan Quinn</td></tr><tr><td>0.2</td><td>Major re-write</td><td>08/11/2000</td><td>Pete Su</td></tr><tr><td>0.3</td><td>Draft completed after initial reviews</td><td>08/22/2000</td><td>Pete Su</td></tr><tr><td>0.4</td><td>Edited, updated to conform to requirements template, pending freeze</td><td>08/23/2000</td><td>Kai Wu</td></tr><tr><td>�</td><td>Final edits before freeze</td><td>08/24/2000</td><td>Pete Su</td></tr><tr><td>0.5</td><td>Edited for consistency</td><td>08/27/2000</td><td>Kai Wu</td></tr><tr><td>0.6</td><td>Put Object ID stuff first, because it makes more sense</td><td>08/28/2000</td><td>Pete Su</td></tr><tr><td>0.7</td><td>Added requirement that knowledge-level objects must be moveable between +on the application data model.</p><p><span class="strong">Note:</span> Is the API the only way to obtain values? How does +this integrate with application level SQL queries?</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="object-system-requirements-history"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong">Document Revision #</span></td><td><span class="strong">Action Taken, Notes</span></td><td><span class="strong">When?</span></td><td><span class="strong">By Whom?</span></td></tr><tr><td>0.1</td><td>Creation</td><td>08/10/2000</td><td>Bryan Quinn</td></tr><tr><td>0.2</td><td>Major re-write</td><td>08/11/2000</td><td>Pete Su</td></tr><tr><td>0.3</td><td>Draft completed after initial reviews</td><td>08/22/2000</td><td>Pete Su</td></tr><tr><td>0.4</td><td>Edited, updated to conform to requirements template, pending freeze</td><td>08/23/2000</td><td>Kai Wu</td></tr><tr><td>�</td><td>Final edits before freeze</td><td>08/24/2000</td><td>Pete Su</td></tr><tr><td>0.5</td><td>Edited for consistency</td><td>08/27/2000</td><td>Kai Wu</td></tr><tr><td>0.6</td><td>Put Object ID stuff first, because it makes more sense</td><td>08/28/2000</td><td>Pete Su</td></tr><tr><td>0.7</td><td>Added requirement that knowledge-level objects must be moveable between databases.</td><td>08/29/2000</td><td>Richard Li</td></tr><tr><td>0.8</td><td>Rewrote intro to match language and concepts in the design document. Also cleaned up usage a bit in the requirements section. Added short vague -requirements on relation types.</td><td>09/06/2000</td><td>Pete Su</td></tr><tr><td>0.9</td><td>Edited for ACS 4 Beta release.</td><td>09/30/2000</td><td>Kai Wu</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="kernel-overview.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="object-system-design.html">Next</a></td></tr><tr><td width="40%" align="left">Overview </td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right"> OpenACS 4 Object Model Design</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/object-system-requirements.html#comments">View comments on this page at openacs.org</a></center></body></html> +requirements on relation types.</td><td>09/06/2000</td><td>Pete Su</td></tr><tr><td>0.9</td><td>Edited for ACS 4 Beta release.</td><td>09/30/2000</td><td>Kai Wu</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="kernel-overview.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="object-system-design.html">Next</a></td></tr><tr><td width="40%" align="left">Overview&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS 4 Object Model Design</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/object-system-requirements.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/objects.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/objects.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/objects.html 7 Apr 2003 16:59:25 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/objects.html 15 Apr 2003 17:03:02 -0000 1.8.2.5 @@ -1,10 +1,10 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS 4.6.2 Data Models and the Object System</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter 9. Development Reference"><link rel="previous" href="packages.html" title="OpenACS 4.6.2 Packages"><link rel="next" href="request-processor.html" title="The Request Processor"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="packages.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Development Reference</th><td width="20%" align="right"> <a accesskey="n" href="request-processor.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="objects"></a>OpenACS 4.6.2 Data Models and the Object System</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS 4.6.2 Data Models and the Object System</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter�9.�Development Reference"><link rel="previous" href="packages.html" title="OpenACS 4.6.2 Packages"><link rel="next" href="request-processor.html" title="The Request Processor"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="packages.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�9.�Development Reference</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="request-processor.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="objects"></a>OpenACS 4.6.2 Data Models and the Object System</h2></div></div><div class="authorblurb"><p> By Pete Su <br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="objects-overview"></a>Overview</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="objects-overview"></a>Overview</h3></div></div><p> Developing data models in OpenACS 4.6.2 is much like developing data models for OpenACS 3, save for the implementation. As usual, you need to examine how to model the information that the application must store and @@ -27,7 +27,7 @@ </p><p> Thinking further ahead, we can imagine doing any of the following things with Notes as well: -</p><div class="itemizedlist"><ul type="opencircle"><li style="list-style-type: opencircle"><p>Define access control policies on notes.</p></li><li style="list-style-type: opencircle"><p>Attach user comments on notes.</p></li><li style="list-style-type: opencircle"><p>Allow users to define custom fields to store on their notes.</p></li><li style="list-style-type: opencircle"><p>Automatically generate input forms or output displays for notes.</p></li><li style="list-style-type: opencircle"><p>Allow other applications to use notes in ways we don't know of yet.</p></li></ul></div><p> +</p><div class="itemizedlist"><ul type="opencircle"><li style="list-style-type: circle"><p>Define access control policies on notes.</p></li><li style="list-style-type: circle"><p>Attach user comments on notes.</p></li><li style="list-style-type: circle"><p>Allow users to define custom fields to store on their notes.</p></li><li style="list-style-type: circle"><p>Automatically generate input forms or output displays for notes.</p></li><li style="list-style-type: circle"><p>Allow other applications to use notes in ways we don't know of yet.</p></li></ul></div><p> In OpenACS 4.6.2, the key to enabling these types of services on your application data is to take advantage of the Object System. The first question, then, is "Just what are objects, and what do @@ -54,7 +54,7 @@ object and forget about it.</p></li><li><p>And most importantly, any future object-level service - from a general-comments replacement to personalized ranking - will become available to your application "for free."</p></li></ul></div><p> -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="objects-how-to-use"></a>How to Use Objects</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="objects-how-to-use"></a>How to Use Objects</h3></div></div><p> Using ACS objects is straightforward: all that's required are a few extra steps in the design of your application data model. </p><p> @@ -81,7 +81,7 @@ Fire up your text editor and open the <tt>ROOT/packages/notes/sql/oracle/notes-create.sql</tt> (<tt>ROOT/packages/notes/sql/postgresql/notes-create.sql</tt> for the PG version) file created when we <a href="packages.html" title="OpenACS 4.6.2 Packages">created the package</a>. Then, do the following: -</p><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="id2858529"></a>Describe the new type to the type system</h4></div></div><p> +</p><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="id2921911"></a>Describe the new type to the type system</h4></div></div><p> First, add an entry to the <tt>acs_object_types</tt> table with the following PL/SQL call: </p><pre class="programlisting"> begin @@ -141,7 +141,7 @@ because the new type <tt>note</tt> is a subtype of <tt>acs_object</tt>, it will inherit these attributes, so there is no need for us to define them. -</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="id2858691"></a>Define a table in which to store your objects</h4></div></div><p> +</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="id2919543"></a>Define a table in which to store your objects</h4></div></div><p> The next thing we do is make a small modification to the data model to reflect the fact that each row in the <tt>notes</tt> table represents something that is not only an object of type @@ -166,7 +166,7 @@ use the <tt>acs_objects</tt> table to find objects will transparently find any objects that are instances of any subtype of <tt>acs_objects</tt>. -</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="id2858814"></a>Define a package for type specific procedures</h4></div></div><p> +</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="id2919666"></a>Define a package for type specific procedures</h4></div></div><p> The next step is to define a PL/SQL package for your new type, and write some basic procedures to create and delete objects. Here is a package definition for our new type: @@ -214,7 +214,7 @@ object OBJ was "read only", then any other object that used OBJ as its context would also be "read only" by default. We'll talk about this more later. -</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="id2858919"></a>Define a package body for type specific procedures</h4></div></div><p> +</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="id2919771"></a>Define a package body for type specific procedures</h4></div></div><p> The PL/SQL package body contains the implementations of the procedures defined above. The only subtle thing going on here is that we must use <tt>acs_object.new</tt> to insert a row into @@ -292,7 +292,7 @@ drop package note; drop table notes; -</pre></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="objects-when-to-use-objects"></a>When to Use Objects</h3></div></div><p> +</pre></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="objects-when-to-use-objects"></a>When to Use Objects</h3></div></div><p> While it is hard to give general design advice without knowing anything about a particular application, you should follow the following rule of thumb when deciding when to hook part of your data @@ -312,7 +312,7 @@ kind of design decision is mostly made on an application-by-application basis, but this is a good baseline from which to start. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="objects-design-guidance"></a>Design Guidance</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="objects-design-guidance"></a>Design Guidance</h3></div></div><p> In this section we cover some overall guidelines for designing data models that are meant to be integrated with the OpenACS object system. @@ -371,29 +371,29 @@ when to use inherited attributes is fairly straightforward, but requires a good amount of thought at design time even for simple applications. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="objects-summary"></a>Summary</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="objects-summary"></a>Summary</h3></div></div><p> Hooking into the OpenACS 4.6.2 object system brings the application developer numerous benefits, and doing it involves only four easy steps: -</p><div class="itemizedlist"><ul type="opencircle"><li style="list-style-type: opencircle"><p> +</p><div class="itemizedlist"><ul type="opencircle"><li style="list-style-type: circle"><p> Describe the a new object type to the system. Most new application types will be subtypes of the built-in type <tt>acs_object</tt>. -</p></li><li style="list-style-type: opencircle"><p> +</p></li><li style="list-style-type: circle"><p> Define a table to store application object data. -</p></li><li style="list-style-type: opencircle"><p> +</p></li><li style="list-style-type: circle"><p> Define a PL/SQL package to store procedures related to the new type. You have to define at least a function called <tt>new</tt> to create new application objects and a procedure called <tt>delete</tt> to delete them. -</p></li><li style="list-style-type: opencircle"><p> +</p></li><li style="list-style-type: circle"><p> Define a package body that contains the implementations of the PL/SQL procedures defined above. -</p></li><li style="list-style-type: opencircle"><p> +</p></li><li style="list-style-type: circle"><p> Try not to write queries in your application that join against <tt>acs_objects</tt>. This means you should never use the fields in <tt>acs_objects</tt> for application-specific purposes. This is especially true for the <tt>context_id</tt> field. </p></li></ul></div><p> -</p><p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="packages.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="request-processor.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4.6.2 Packages </td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right"> The Request Processor</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/objects.html#comments">View comments on this page at openacs.org</a></center></body></html> +</p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="packages.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="request-processor.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4.6.2 Packages&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right">&nbsp;The Request Processor</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/objects.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/openacs-overview.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/openacs-overview.html,v diff -u -r1.3.2.3 -r1.3.2.4 --- openacs-4/packages/acs-core-docs/www/openacs-overview.html 30 Mar 2003 06:04:04 -0000 1.3.2.3 +++ openacs-4/packages/acs-core-docs/www/openacs-overview.html 15 Apr 2003 17:03:02 -0000 1.3.2.4 @@ -1,5 +1,5 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Overview</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="general-documents.html" title="Chapter 1. High level information: What is OpenACS?"><link rel="previous" href="general-documents.html" title="Chapter 1. High level information: What is OpenACS?"><link rel="next" href="release-notes.html" title="OpenACS 4.6.2 Release Notes"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="general-documents.html">Prev</a> </td><th width="60%" align="center">Chapter 1. High level information: What is OpenACS?</th><td width="20%" align="right"> <a accesskey="n" href="release-notes.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="openacs-overview"></a>Overview</h2></div></div><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Overview</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="general-documents.html" title="Chapter�1.�High level information: What is OpenACS?"><link rel="previous" href="general-documents.html" title="Chapter�1.�High level information: What is OpenACS?"><link rel="next" href="release-notes.html" title="OpenACS 4.6.2 Release Notes"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="general-documents.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�1.�High level information: What is OpenACS?</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="release-notes.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="openacs-overview"></a>Overview</h2></div></div><p> OpenACS (Open Architecture Community System) is an advanced toolkit for building scalable, community-oriented web applications. If you're thinking of building an @@ -33,4 +33,4 @@ help you in your endeavors with the system. Stop by our <a href="http://openacs.org" target="_top">web site</a> and feel free to ask a question, post ideas or whatever. - </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="general-documents.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="release-notes.html">Next</a></td></tr><tr><td width="40%" align="left">Chapter 1. High level information: What is OpenACS? </td><td width="20%" align="center"><a accesskey="u" href="general-documents.html">Up</a></td><td width="40%" align="right"> OpenACS 4.6.2 Release Notes</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/openacs-overview.html#comments">View comments on this page at openacs.org</a></center></body></html> + </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="general-documents.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="release-notes.html">Next</a></td></tr><tr><td width="40%" align="left">Chapter�1.�High level information: What is OpenACS?&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="general-documents.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS 4.6.2 Release Notes</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/openacs-overview.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/openacs.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/openacs.html,v diff -u -r1.6.2.5 -r1.6.2.6 --- openacs-4/packages/acs-core-docs/www/openacs.html 7 Apr 2003 16:59:25 -0000 1.6.2.5 +++ openacs-4/packages/acs-core-docs/www/openacs.html 15 Apr 2003 17:03:02 -0000 1.6.2.6 @@ -1,9 +1,9 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Install OpenACS 4.6.2</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="unix-install.html" title="Chapter 3. Installing on Unix/Linux"><link rel="previous" href="aolserver.html" title="Install AOLserver 3.3+ad13"><link rel="next" href="credits.html" title="Credits"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="aolserver.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Installing on Unix/Linux</th><td width="20%" align="right"> <a accesskey="n" href="credits.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="openacs"></a>Install OpenACS 4.6.2</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Install OpenACS 4.6.2</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="unix-install.html" title="Chapter�3.�Installing on Unix/Linux"><link rel="previous" href="aolserver.html" title="Install AOLserver 3.3+ad13"><link rel="next" href="credits.html" title="Credits"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="aolserver.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�3.�Installing on Unix/Linux</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="credits.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="openacs"></a>Install OpenACS 4.6.2</h2></div></div><div class="authorblurb"><p> by <a href="mailto:vinod@kurup.com" target="_top">Vinod Kurup</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2842424"></a>Set up the file system for an OpenACS Service</h3></div></div><div class="orderedlist"><ol type="1"><li><p>The reference install stores all OpenACS services in + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2890259"></a>Set up the file system for an OpenACS Service</h3></div></div><div class="orderedlist"><ol type="1"><li><p>The reference install stores all OpenACS services in <tt>/web</tt>, with one subdirectory per service. The first time you install a service, you must create that directory and set its permissions:</p><pre class="screen">[root@yourserver root]# <b><tt>mkdir /web</tt></b> @@ -90,7 +90,7 @@ mv openacs-4-6 service0 chmod -R 700 service0/ ls -al -exit</pre></pre></li><li><p><a name="cvs-service-import"></a><b>Add the Service to CVS - OPTIONAL.�</b><a class="indexterm" name="id2843108"></a>If this is a development server, you may want to add it to your local CVS repository.</p><div class="orderedlist"><ol type="a"><li><p>Create and set permissions on a subdirectory in the local cvs repository.</p><pre class="screen">[root@yourserver root]# <b><tt>mkdir /cvsroot/<span class="replaceable">service0</span></tt></b> +exit</pre></pre></li><li><p><a name="cvs-service-import"></a><b>Add the Service to CVS - OPTIONAL.�</b><a class="indexterm" name="id2892437"></a>If this is a development server, you may want to add it to your local CVS repository.</p><div class="orderedlist"><ol type="a"><li><p>Create and set permissions on a subdirectory in the local cvs repository.</p><pre class="screen">[root@yourserver root]# <b><tt>mkdir /cvsroot/<span class="replaceable">service0</span></tt></b> [root@yourserver root]#<b><tt> chown <span class="replaceable">service0</span>.web /cvsroot/<span class="replaceable">service0</span></tt></b> [root@yourserver root]# <pre class="action">mkdir /cvsroot/<span class="replaceable">service0</span> @@ -146,31 +146,31 @@ [root@yourserver web]# <pre class="action">su - service0 mkdir /web/<span class="replaceable">service0</span>/etc /web/<span class="replaceable">service0</span>/log /web/<span class="replaceable">service0</span>/database-backup -exit</pre></pre></li></ol></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-openacs-prepare-oracle"></a>Prepare Oracle for OpenACS</h3></div></div><p>OPTIONAL - if you won't be using Oracle, skip to <a href="openacs.html#install-openacs-prepare-postgres">Prepare PostgreSQL for OpenACS</a></p><p> +exit</pre></pre></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-openacs-prepare-oracle"></a>Prepare Oracle for OpenACS</h3></div></div><p>OPTIONAL - if you won't be using Oracle, skip to <a href="openacs.html#install-openacs-prepare-postgres">Prepare PostgreSQL for OpenACS</a></p><p> You should be sure that your user account (e.g. <tt><span class="replaceable">service0</span></tt>) is in the <tt>dba</tt> group. </p><div class="orderedlist"><ol type="1"><li><p> Verify membership by typing <tt>groups</tt> when you login: - <pre class="programlisting"> + </p><pre class="programlisting"> <span class="replaceable">service0</span>:~$ groups -dba web</pre> +dba web</pre><p> If you do not see these groups, take the following action: - <pre class="programlisting"> + </p><pre class="programlisting"> <span class="replaceable">service0</span>:~$ su - Password: ************ -root:~# adduser <span class="emphasis"><em><span class="replaceable">service0</span></em></span> dba</pre> +root:~# adduser <span class="emphasis"><em><span class="replaceable">service0</span></em></span> dba</pre><p> If you get an error about an undefined group, then add that group manually: -<pre class="programlisting"> +</p><pre class="programlisting"> root:~# groupadd dba -root:~# groupadd web</pre> +root:~# groupadd web</pre><p> Make sure to logout as <tt>root</tt> when you are finished with this step and log back in as @@ -179,26 +179,26 @@ Connect to Oracle using <tt>svrmgrl</tt> and login: - <pre class="programlisting"> + </p><pre class="programlisting"> <span class="replaceable">service0</span>:~$ svrmgrl SVRMGR> connect internal -Connected.</pre> +Connected.</pre><p> </p></li><li><p> Determine where the system tablespaces are stored: - <pre class="programlisting"> -SVRMGR> select file_name from dba_data_files;</pre> + </p><pre class="programlisting"> +SVRMGR> select file_name from dba_data_files;</pre><p> Example results: - <pre class="programlisting"> + </p><pre class="programlisting"> /ora8/m01/app/oracle/oradata/ora8/system01.dbf /ora8/m01/app/oracle/oradata/ora8/tools01.dbf /ora8/m01/app/oracle/oradata/ora8/rbs01.dbf /ora8/m01/app/oracle/oradata/ora8/temp01.dbf /ora8/m01/app/oracle/oradata/ora8/users01.dbf /ora8/m01/app/oracle/oradata/ora8/indx01.dbf -/ora8/m01/app/oracle/oradata/ora8/drsys01.dbf</pre> +/ora8/m01/app/oracle/oradata/ora8/drsys01.dbf</pre><p> </p></li><li><p> Using the above output, you should determine where to store your tablespace. As a general rule, you'll want to @@ -280,7 +280,7 @@ If you can't login, try redoing step 1 again. If the date is in the wrong format, make sure you followed the steps outlined in <a href="oracle.html#install-oracle-troubleshooting" title="Troubleshooting Oracle Dates">the section called “Troubleshooting Oracle Dates”</a> - </p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-openacs-prepare-postgres"></a>Prepare PostgreSQL for an OpenACS Service</h3></div></div><div class="orderedlist"><ol type="1"><li><p>Create a user in the database matching the service name.</p><pre class="screen">[root@yourserver root]# <b><tt>su - postgres</tt></b> + </p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-openacs-prepare-postgres"></a>Prepare PostgreSQL for an OpenACS Service</h3></div></div><div class="orderedlist"><ol type="1"><li><p>Create a user in the database matching the service name.</p><pre class="screen">[root@yourserver root]# <b><tt>su - postgres</tt></b> [postgres@yourserver pgsql]$ <b><tt>createuser <span class="replaceable">service0</span></tt></b> Shall the new user be allowed to create databases? (y/n) <b><tt>y</tt></b> Shall the new user be allowed to create more new users? (y/n) <b><tt>y</tt></b> @@ -293,7 +293,7 @@ CREATE DATABASE [service0@yourserver service0]$ <pre class="action">su - <span class="replaceable">service0</span> -createdb <span class="replaceable">service0</span></pre></pre></li><li><p>Automate daily database Vacuuming. This is a process which cleans out discarded data from the database. A quick way to automate vacuuming is to edit the cron file for the database user.</p><a class="indexterm" name="id2844238"></a><pre class="screen">[service0@yourserver service0]$ <b><tt>export EDITOR=emacs;crontab -e</tt></b></pre><p>Add this line to the file. The numbers and stars at the beginning are cron columns that specify when the program should be run - in this case, whenever the minute is 0 and the hour is 1, i.e., 1:00 am every day.</p><pre class="programlisting">0 1 * * * /usr/local/pgsql/bin/vacuumdb <span class="replaceable">service0</span></pre></li><li><p><a name="install-next-openfts"></a>Add Full Text Search Support - OPTIONAL</p><a class="indexterm" name="id2844301"></a><p>If you are installing Full Text Search, add required packages to the new database.</p><pre class="screen">[service0@yourserver service0]$ <b><tt>/usr/local/pgsql/bin/psql <span class="replaceable">service0</span> -f /usr/local/src/postgresql-7.2.3/contrib/tsearch/tsearch.sql</tt></b> +createdb <span class="replaceable">service0</span></pre></pre></li><li><p>Automate daily database Vacuuming. This is a process which cleans out discarded data from the database. A quick way to automate vacuuming is to edit the cron file for the database user.</p><a class="indexterm" name="id2897946"></a><pre class="screen">[service0@yourserver service0]$ <b><tt>export EDITOR=emacs;crontab -e</tt></b></pre><p>Add this line to the file. The numbers and stars at the beginning are cron columns that specify when the program should be run - in this case, whenever the minute is 0 and the hour is 1, i.e., 1:00 am every day.</p><pre class="programlisting">0 1 * * * /usr/local/pgsql/bin/vacuumdb <span class="replaceable">service0</span></pre></li><li><p><a name="install-next-openfts"></a>Add Full Text Search Support - OPTIONAL</p><a class="indexterm" name="id2898005"></a><p>If you are installing Full Text Search, add required packages to the new database.</p><pre class="screen">[service0@yourserver service0]$ <b><tt>/usr/local/pgsql/bin/psql <span class="replaceable">service0</span> -f /usr/local/src/postgresql-7.2.3/contrib/tsearch/tsearch.sql</tt></b> BEGIN CREATE <span class="emphasis"><em>(many lines omitted)</em></span> @@ -307,11 +307,11 @@ /usr/local/pgsql/bin/psql <span class="replaceable">service0</span> -f /usr/local/src/postgresql-7.2.3/contrib/pgsql_contrib_openfts/openfts.sql</pre></pre></li><li><pre class="screen">[service0@yourserver service0]$ <b><tt>exit</tt></b> logout -[root@yourserver root]# </pre></li></ol></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-openacs-configure-aol"></a>Configure an AOLserver Service for OpenACS</h3></div></div><div class="orderedlist"><ol type="1"><li><p> +[root@yourserver root]# </pre></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-openacs-configure-aol"></a>Configure an AOLserver Service for OpenACS</h3></div></div><div class="orderedlist"><ol type="1"><li><p> The AOLserver architecture lets you run an arbitrary number of virtual servers. A virtual server is an HTTP service running on a specific port, e.g. port 80. In order for OpenACS to work, you - need to configure a virtual server. The Reference Platform uses a configuration file included in the OpenACS tarball. Copy it to the <tt>/web/<span class="replaceable">service0</span>/etc</tt> directory and open it in an editor to adjust the parameters.</p><a class="indexterm" name="id2844446"></a><pre class="screen">[root@yourserver root]# <b><tt>su - <span class="replaceable">service0</span></tt></b> + need to configure a virtual server. The Reference Platform uses a configuration file included in the OpenACS tarball. Copy it to the <tt>/web/<span class="replaceable">service0</span>/etc</tt> directory and open it in an editor to adjust the parameters.</p><a class="indexterm" name="id2898149"></a><pre class="screen">[root@yourserver root]# <b><tt>su - <span class="replaceable">service0</span></tt></b> [service0@yourserver service0]$ <b><tt>cd /web/<span class="replaceable">service0</span>/etc</tt></b> [service0@yourserver etc]# <b><tt>cp /web/<span class="replaceable">service0</span>/packages/acs-core-docs/www/files/config.tcl.txt config.tcl</tt></b> [service0@yourserver etc]# <b><tt>emacs config.tcl</tt></b> @@ -360,7 +360,7 @@ S/Sd2MYA0JVmQuIt5bYowXR1KYKDka1d3DUgtoVTiFepIRUrMkZlCli08mWVjE6T <span class="emphasis"><em>(11 lines omitted)</em></span> 1MU24SHLgdTfDJprEdxZOnxajnbxL420xNVc5RRXlJA8Xxhx/HBKTw== ------END RSA PRIVATE KEY-----</pre></li></ol></div></li></ol></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2844948"></a>Verify AOLserver startup</h3></div></div><div class="orderedlist"><ol type="1"><li><p> +-----END RSA PRIVATE KEY-----</pre></li></ol></div></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2898651"></a>Verify AOLserver startup</h3></div></div><div class="orderedlist"><ol type="1"><li><p> Kill any current running AOLserver processes and start a new one. (Note, if you are using Oracle, rather than PostgreSQL, replace <tt>nsd-postgres</tt> with @@ -382,7 +382,7 @@ to make sure the service is starting without any problems. If you need to make changes, don't forget to kill any running servers with <b><tt>killall nsd</tt></b>. - </p></li><li><p><a name="install-openacs-keepalive"></a>OPTIONAL - Automate AOLserver keepalive</p><p>Assuming AOLserver started cleanly in the previous step, we'll set it up so that it's always running, and automatically restarts whenever it dies or is stopped. This step is strongly recommended, even for development sites, because it makes install and maintenance much simpler. </p><p>The Reference Platform uses Daemontools to control AOLserver. An earlier method using <tt>init</tt>, less flexible and reliable, is <a href="maintenance-web.html#install-openacs-inittab" title="AOLserver keepalive with inittab">here</a>.</p><div class="orderedlist"><ol type="a"><li><p>Daemontools must already be installed. If not, <a href="linux-installation.html#install-daemontools" title="Install Daemontools (OPTIONAL)">install it</a>.</p></li><li><p>Each service controlled by daemontools must have a directory in <tt>/service</tt>. That directory must have a file called <tt>run</tt>. Daemontools then creates additional files and directories to track status and log. Create the appropriate directory as <tt>/web/<span class="replaceable">service0</span>/etc/daemontools</tt>, copy the prepared <tt>run</tt> file, and set permissions. If your server is not called <span class="replaceable">service0</span>, edit <tt>/web/<span class="replaceable">service0</span>/etc/run accordingly.</tt></p><pre class="screen">[service0@yourserver log]$ <b><tt>cd /web/<span class="replaceable">service0</span>/etc</tt></b> + </p></li><li><p><a name="install-openacs-keepalive"></a>OPTIONAL - Automate AOLserver keepalive</p><p>Assuming AOLserver started cleanly in the previous step, we'll set it up so that it's always running, and automatically restarts whenever it dies or is stopped. This step is strongly recommended, even for development sites, because it makes install and maintenance much simpler. </p><p>The Reference Platform uses Daemontools to control AOLserver. An earlier method using <tt>init</tt>, less flexible and reliable, is <a href="">here</a>.</p><div class="orderedlist"><ol type="a"><li><p>Daemontools must already be installed. If not, <a href="linux-installation.html#install-daemontools" title="Install Daemontools (OPTIONAL)">install it</a>.</p></li><li><p>Each service controlled by daemontools must have a directory in <tt>/service</tt>. That directory must have a file called <tt>run</tt>. Daemontools then creates additional files and directories to track status and log. Create the appropriate directory as <tt>/web/<span class="replaceable">service0</span>/etc/daemontools</tt>, copy the prepared <tt>run</tt> file, and set permissions. If your server is not called <span class="replaceable">service0</span>, edit <tt>/web/<span class="replaceable">service0</span>/etc/run accordingly.</tt></p><pre class="screen">[service0@yourserver log]$ <b><tt>cd /web/<span class="replaceable">service0</span>/etc</tt></b> [service0@yourserver etc]$ <b><tt>mkdir daemontools</tt></b> [service0@yourserver etc]$ <b><tt>cp /web/<span class="replaceable">service0</span>/packages/acs-core-docs/www/files/run.txt daemontools/run</tt></b> [service0@yourserver etc]$ <b><tt>chmod 700 daemontools/run</tt></b> @@ -431,7 +431,7 @@ Most of this information comes from Tom Jackson's <a href="http://zmbh.com/daemontools-aolserver/aolserver%2Bdaemontools.html" target="_top">AOLServer+Daemontools Mini-HOWTO</a>. -</p></li></ol></div></li></ol></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-openacs-using-installer"></a>Configure a Service with the OpenACS Installer</h3></div></div><p> +</p></li></ol></div></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-openacs-using-installer"></a>Configure a Service with the OpenACS Installer</h3></div></div><p> Now that you've got AOLserver up and running, let's install OpenACS 4.6.2. </p><div class="itemizedlist"><ul type="disc"><li><p> @@ -515,7 +515,7 @@ line, click <tt><span class="guilabel">Install</span></tt>. </p></li></ol></div></li><li><p>Restart the service.</p><pre class="screen">[service0@yourserver service0]$ <b><tt>svc -t /service/<span class="replaceable">service0</span></tt></b> -[service0@yourserver service0]$</pre></li><li><p>Test FTS. (INCOMPLETE). Add a package that supports search,like "note," add some content, and search for it.</p></li></ol></div></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2846503"></a>Back up the New Service - OPTIONAL</h3></div></div><p>This is a very good time to back the service, even if it's not a production service. Making a backup now lets you roll back to this initial, clean setup at any point in the future, without repeating the install process. A full OpenACS service backup includes everything in the <tt>/web/<span class="replaceable">service0</span>/</tt> directory. At this point it's probably sufficient to back up just the database, because you can recover the files from a tarball.</p><p>Note that, if you did the CVS options in this document, the <tt>/web/service0/etc</tt> directory is not included in cvs and you may want to add it.</p><div class="itemizedlist"><ul type="disc"><li><p><b>PostGreSQL.�</b>Create a backup file and verify that it was created and has a reasonable size (several megabytes).</p><pre class="screen">[service0@yourserver service0]$ <b><tt>mkdir /web/<span class="replaceable">service0</span>/database-backup</tt></b> +[service0@yourserver service0]$</pre></li><li><p>Test FTS. (INCOMPLETE). Add a package that supports search,like "note," add some content, and search for it.</p></li></ol></div></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2900178"></a>Back up the New Service - OPTIONAL</h3></div></div><p>This is a very good time to back the service, even if it's not a production service. Making a backup now lets you roll back to this initial, clean setup at any point in the future, without repeating the install process. A full OpenACS service backup includes everything in the <tt>/web/<span class="replaceable">service0</span>/</tt> directory. At this point it's probably sufficient to back up just the database, because you can recover the files from a tarball.</p><p>Note that, if you did the CVS options in this document, the <tt>/web/service0/etc</tt> directory is not included in cvs and you may want to add it.</p><div class="itemizedlist"><ul type="disc"><li><p><b>PostGreSQL.�</b>Create a backup file and verify that it was created and has a reasonable size (several megabytes).</p><pre class="screen">[service0@yourserver service0]$ <b><tt>mkdir /web/<span class="replaceable">service0</span>/database-backup</tt></b> [service0@yourserver service0]$ <b><tt>pg_dump -f /web/<span class="replaceable">service0</span>/database-backup/initial_backup.dmp <span class="replaceable">service0</span></tt></b> [service0@yourserver service0]$ <b><tt>ls -al /web/<span class="replaceable">service0</span>/database-backup</tt></b> total 1425 @@ -525,7 +525,7 @@ [service0@yourserver service0]$ <pre class="action">mkdir /web/<span class="replaceable">service0</span>/database-backup pg_dump -f /web/<span class="replaceable">service0</span>/database-backup/initial_backup.dmp <span class="replaceable">service0</span> -ls -al /web/<span class="replaceable">service0</span>/database-backup</pre></pre></li><li><p><b>Oracle - INCOMPLETE.�</b></p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2846670"></a>Set up Automated Backup - OPTIONAL</h3></div></div><p>Backup can encompass all files in <tt>/web/service0</tt>. For a development server, putting the files in cvs is sufficient. (It's important then to back up the cvs repository!)</p><p>A quick way to automate database backup is a cron job. This is not recommended for production and is not part of the Reference Platform, because it is not cross-platform and can fail silently. More thorough methods are documented in <a href="backup-recovery.html#install-next-backups" title="Backup Strategy">the section called “Backup Strategy”</a></p><pre class="screen">[service0@yourserver service0]$ <b><tt>export EDITOR=emacs;crontab -e</tt></b></pre><p>Add this line to the file. The numbers and stars at the beginning are cron columns that specify when the program should be run - in this case, whenever the minute is 0 and the hour is 1, i.e., 1:00 am every day.</p><pre class="programlisting">0 1 * * * /usr/local/pgsql/bin/pg_dump -f /web/service0/database-backup/service0_$(date +%Y-%m-%d).dmp service0</pre><p>If you plan to back up the whole <tt>/web/<span class="replaceable">service0</span></tt> directory, then it would be redundant to keep a history of database backups. In that case, set up the cron job to overwrite the previous backup each time:</p><pre class="programlisting">0 1 * * * /usr/local/pgsql/bin/pg_dump -f /web/service0/database-backup/service0_nightly.dmp service0</pre></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2846765"></a>Set up Log Analysis Reports - OPTIONAL</h3></div></div><p>Analog is a program with processes webserver access logs, +ls -al /web/<span class="replaceable">service0</span>/database-backup</pre></pre></li><li><p><b>Oracle - INCOMPLETE.�</b></p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2900345"></a>Set up Automated Backup - OPTIONAL</h3></div></div><p>Backup can encompass all files in <tt>/web/service0</tt>. For a development server, putting the files in cvs is sufficient. (It's important then to back up the cvs repository!)</p><p>A quick way to automate database backup is a cron job. This is not recommended for production and is not part of the Reference Platform, because it is not cross-platform and can fail silently. More thorough methods are documented in <a href="backup-recovery.html#install-next-backups" title="Backup Strategy">the section called “Backup Strategy”</a></p><pre class="screen">[service0@yourserver service0]$ <b><tt>export EDITOR=emacs;crontab -e</tt></b></pre><p>Add this line to the file. The numbers and stars at the beginning are cron columns that specify when the program should be run - in this case, whenever the minute is 0 and the hour is 1, i.e., 1:00 am every day.</p><pre class="programlisting">0 1 * * * /usr/local/pgsql/bin/pg_dump -f /web/service0/database-backup/service0_$(date +%Y-%m-%d).dmp service0</pre><p>If you plan to back up the whole <tt>/web/<span class="replaceable">service0</span></tt> directory, then it would be redundant to keep a history of database backups. In that case, set up the cron job to overwrite the previous backup each time:</p><pre class="programlisting">0 1 * * * /usr/local/pgsql/bin/pg_dump -f /web/service0/database-backup/service0_nightly.dmp service0</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2900437"></a>Set up Log Analysis Reports - OPTIONAL</h3></div></div><p>Analog is a program with processes webserver access logs, performs DNS lookup, and outputs HTML reports. Analog should <a href="aolserver.html#analog-install">already be installed.</a> A modified configuration file is included in @@ -556,4 +556,4 @@ [root@yourserver root]# <b><tt>emacs /etc/cron.daily/analog</tt></b></pre><p>Put this into the file:</p><pre class="programlisting">#!/bin/sh -/usr/share/analog-5.31/analog -G -g/web/<span class="replaceable">service0</span>/etc/analog.cfg</pre><pre class="screen">[root@yourserver root]# <b><tt>chmod 755 /etc/cron.daily/analog</tt></b></pre><p>Test it by running the script.</p><pre class="screen">[root@yourserver root]# <b><tt>sh /etc/cron.daily/analog</tt></b></pre><p>Browse to <tt>http://<span class="replaceable">yourserver.test</span>/log/traffic.html</tt></p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2847027"></a>Next Steps</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p>Test your <a href="backup-recovery.html" title="Backup and Recovery">backup and recovery</a> procedure.</p></li><li><p>Follow the instruction on the home page to change the appearance of your service or add more packages.</p></li><li><p>Proceed to the <a href="tutorial.html" title="Chapter 8. Development Tutorial">tutorial</a> to learn how to develop your own packages.</p></li></ul></div></div><p><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="aolserver.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="credits.html">Next</a></td></tr><tr><td width="40%" align="left">Install AOLserver 3.3+ad13 </td><td width="20%" align="center"><a accesskey="u" href="unix-install.html">Up</a></td><td width="40%" align="right"> Credits</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/openacs.html#comments">View comments on this page at openacs.org</a></center></body></html> +/usr/share/analog-5.31/analog -G -g/web/<span class="replaceable">service0</span>/etc/analog.cfg</pre><pre class="screen">[root@yourserver root]# <b><tt>chmod 755 /etc/cron.daily/analog</tt></b></pre><p>Test it by running the script.</p><pre class="screen">[root@yourserver root]# <b><tt>sh /etc/cron.daily/analog</tt></b></pre><p>Browse to <tt>http://<span class="replaceable">yourserver.test</span>/log/traffic.html</tt></p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2900697"></a>Next Steps</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p>Test your <a href="backup-recovery.html" title="Backup and Recovery">backup and recovery</a> procedure.</p></li><li><p>Follow the instruction on the home page to change the appearance of your service or add more packages.</p></li><li><p>Proceed to the <a href="tutorial.html" title="Chapter�8.�Development Tutorial">tutorial</a> to learn how to develop your own packages.</p></li></ul></div></div><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="aolserver.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="credits.html">Next</a></td></tr><tr><td width="40%" align="left">Install AOLserver 3.3+ad13&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="unix-install.html">Up</a></td><td width="40%" align="right">&nbsp;Credits</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/openacs.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/oracle.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/oracle.html,v diff -u -r1.8.2.6 -r1.8.2.7 --- openacs-4/packages/acs-core-docs/www/oracle.html 7 Apr 2003 16:59:25 -0000 1.8.2.6 +++ openacs-4/packages/acs-core-docs/www/oracle.html 15 Apr 2003 17:03:02 -0000 1.8.2.7 @@ -1,5 +1,5 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Install Oracle 8.1.7</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="unix-install.html" title="Chapter 3. Installing on Unix/Linux"><link rel="previous" href="linux-installation.html" title="Install Linux and supporting software"><link rel="next" href="postgres.html" title="Install PostgreSQL 7.2.3"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="linux-installation.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Installing on Unix/Linux</th><td width="20%" align="right"> <a accesskey="n" href="postgres.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="oracle"></a>Install Oracle 8.1.7</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Install Oracle 8.1.7</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="unix-install.html" title="Chapter�3.�Installing on Unix/Linux"><link rel="previous" href="linux-installation.html" title="Install Linux and supporting software"><link rel="next" href="postgres.html" title="Install PostgreSQL 7.2.3"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="linux-installation.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�3.�Installing on Unix/Linux</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="postgres.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="oracle"></a>Install Oracle 8.1.7</h2></div></div><div class="authorblurb"><p> by <a href="mailto:vinod@kurup.com" target="_top">Vinod Kurup</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. @@ -17,7 +17,7 @@ box as AOLServer. For more details on a remote Oracle installation, see Daryl Biberdorf's <a href="http://openacs.org/new-file-storage/one-file?file_id=273" target="_top">document</a>. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-oracle-getit"></a>Acquire Oracle 8.1.7 Enterprise Edition</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-oracle-getit"></a>Acquire Oracle 8.1.7 Enterprise Edition</h3></div></div><p> You can obtain the software through a variety of methods (You'll need to become a member of <a href="http://technet.oracle.com" target="_top">technet.oracle.com</a>, which is @@ -61,7 +61,7 @@ It used to be possible to get a free CD by mail, but I can no longer find the link for that option. - </p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-oracle-keepinmind"></a>Things to Keep in Mind</h3></div></div><p> + </p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-oracle-keepinmind"></a>Things to Keep in Mind</h3></div></div><p> Throughout these instructions, we will refer to a number of configurable settings and advise certain defaults. With the exception @@ -76,7 +76,7 @@ and <a href="http://openacs.org/forums/message-view?message_id=67108" target="_top">Andrew Piskorski's mini-guide</a>.. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-oracle-preinstall"></a>Pre-Installation Tasks</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-oracle-preinstall"></a>Pre-Installation Tasks</h3></div></div><p> Though Oracle 8.1.7 has an automated installer, we still need to perform several manual, administrative tasks before we can launch @@ -90,17 +90,17 @@ Login as a non-root user and start X by typing <tt>startx</tt> - <pre class="programlisting"> -joeuser:~$ startx</pre> + </p><pre class="programlisting"> +joeuser:~$ startx</pre><p> </p></li><li><p> Open a terminal window type and login as root - <pre class="programlisting"> + </p><pre class="programlisting"> joeuser:~$ su - Password: *********** -root:~#</pre> +root:~#</pre><p> </p></li><li><p> @@ -132,7 +132,7 @@ </p><p> - <span class="strong"><em>Note:</em></span> the Oracle install needs + <span class="strong">Note:</span> the Oracle install needs about 1 GB free on <tt>/ora8</tt> to install successfully. @@ -146,7 +146,7 @@ Set up the <tt>oracle</tt> user's environment - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Log in as the user <tt>oracle</tt> by typing the @@ -212,7 +212,7 @@ </p></li></ul></div><p> - Make sure that you do <span class="strong"><em>not</em></span> add + Make sure that you do <span class="strong">not</span> add any lines like the following </p><pre class="programlisting"> @@ -277,7 +277,7 @@ PATH statement above to <tt>PATH=$PATH:/usr/local/bin:$ORACLE_HOME/bin</tt> - </p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-oracle-install"></a>Installing Oracle 8.1.7 Server</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p> + </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-oracle-install"></a>Installing Oracle 8.1.7 Server</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p> Log in as <tt>oracle</tt> and start X if not already running. Start a new terminal: </p><pre class="programlisting"> @@ -288,7 +288,7 @@ Find the <tt>runInstaller</tt> script - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> If you are installing Oracle from a CD-ROM, it is located in the <tt>install/linux</tt> path from @@ -346,7 +346,7 @@ The "File Locations" screen in the OUI: - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> "Source" path should have been prefilled with "(wherever you mounted the @@ -375,8 +375,17 @@ The "Unix Group Name" screen in the OUI: - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><div class="itemizedlist"><ul type="disc"><li><p> + Debian users need to link + <tt>/bin/awk</tt> to + <tt>/usr/bin/awk</tt> before + running the script below + + </p><pre class="programlisting"> +joueser:~$ su - +root:~# ln -s /usr/bin/awk /bin/awk</pre></li></ul></div><ul type="circle"><li><p> + The Unix Group name needs to be set to '<tt>oinstall</tt>' ( we made this Unix group earlier ). @@ -411,7 +420,7 @@ The "Available Products" screen in the OUI: - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Select "Oracle 8i Enterprise Edition 8.1.7.1.0" @@ -423,7 +432,7 @@ The "Installation Types" screen - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Select the "Custom" installation type. @@ -435,7 +444,7 @@ The "Available Product Components" screen - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> In addition to the defaults, make sure that "Oracle SQLJ 8.1.7.0," "Oracle Protocol Support 8.1.7.0.0," and @@ -453,7 +462,7 @@ The "Component Locations" screen in the OUI - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Click on the "Java Runtime Environment 1.1.8" It should have the path @@ -472,7 +481,7 @@ The "Privileged Operation System Groups" screen in the OUI - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Enter "dba" for "Database Administrator (OSDBA) Group" @@ -494,15 +503,15 @@ The "Authentication Methods" screen - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Click "Next" </p></li></ul></div></li><li><p> The next screen is "Choose JDK home directory" - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Keep the default path: <tt>/usr/local/java</tt> @@ -514,7 +523,7 @@ The "Create a Database" screen in the OUI - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Select "No" as we will do this later, after some important configuration changes. @@ -527,7 +536,7 @@ The next screen is "Oracle Product Support" - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> TCP should be checked with "Status" listed as Required @@ -540,7 +549,7 @@ The "Summary" screen in the OUI - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Check the "Space Requirements" section to verify you have enough disk space for the install. @@ -602,15 +611,15 @@ Go back to the pop-up window and click "OK" </p></li><li><p> The "Configuration Tools" screen in the OUI - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> This window displays the config tools that will automatically be launched. </p></li></ul></div></li><li><p> The "Welcome" screen in the "net 8 Configuration Assistant" - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Make sure the "Perform Typical installation" is - <span class="strong"><em>not</em></span> selected. + <span class="strong">not</span> selected. </p></li><li><p> Click "Next" </p></li><li><p> @@ -623,53 +632,53 @@ </p></li></ul></div></li><li><p> The "Listener Configuration, Listener Name" screen in the "Net 8 Configuration Assistant" - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Accept the default listener name of "LISTENER" </p></li><li><p> Click "Next" </p></li></ul></div></li><li><p> The "Listener Configuration, Select Protocols" screen in the "Net 8 Configuration Assistant" - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> The only choice in "Select protocols:" should be "TCP/IP" </p></li><li><p> Click "Next" </p></li></ul></div></li><li><p> The "Listener Configuration TCP/IP Protocol" screen in the "Net 8 Configuration Assistant" - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Default Port should be 1521 and selected. </p></li><li><p> Click "Next" </p></li></ul></div></li><li><p> The "Listener Configuration, More Listeners" screen in the "Net 8 Configuration Assistant" - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Select "No" </p></li><li><p> Click "Next" </p></li></ul></div></li><li><p> The "Listener Configuration Done" screen in the "Net 8 Configuration Assistant" - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Click "Next" </p></li></ul></div></li><li><p> The "Naming Methods Configuration" screen in the "Net 8 Configuration Assistant" - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Select "No" </p></li><li><p> Click "Next" </p></li></ul></div></li><li><p> The "Done" screen in the "Net 8 Configuration Assistant" - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Click "Finish" </p></li></ul></div></li><li><p> The "End of Installation" screen in the OUI - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Click "Exit" </p></li><li><p> Click "Yes" on the confirmation pop up window. @@ -679,7 +688,7 @@ Congratulations, you have just installed Oracle 8.1.7 Server! However, you still need to create a database which can take about an hour of non-interactive time, so don't quit yet. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-oracle-create"></a>Creating the First Database</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-oracle-create"></a>Creating the First Database</h3></div></div><p> This step will take you through the steps of creating a customized database. Be warned that this process takes about an hour on a Pentium II with 128 MB of RAM. @@ -704,25 +713,25 @@ oracle:~$ dbassist</pre></li><li><p> The "Welcome" screen in the Oracle Database Configuration Agent (ODCA) - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Select "Create a database" </p></li><li><p> Click "Next" </p></li></ul></div></li><li><p> The "Select database type" screen in the ODCA - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Select "Custom" </p></li><li><p> Click "Next" </p></li></ul></div></li><li><p> The "Primary Database Type" window in ODCA - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Select "Multipurpose" </p></li><li><p> Click "Next" </p></li></ul></div></li><li><p> The "concurrent users" screen of the ODCA - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Select "60" concurrent users. </p></li><li><p> Click "Next" @@ -842,7 +851,7 @@ </p><p> Eventually, you'll be returned to your shell prompt. In the meantime, relax, you've earned it. - </p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="istall-oracle-test"></a>Acceptance Test</h3></div></div><p> + </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="istall-oracle-test"></a>Acceptance Test</h3></div></div><p> For this step, open up a terminal and <tt>su</tt> to <tt>oracle</tt> as usual. You should be @@ -910,7 +919,7 @@ </p><p> If there were no errors, then consider yourself fortunate. Your Oracle installation is working. - </p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-oracle-automating"></a>Automating Startup & Shutdown</h3></div></div><p> + </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-oracle-automating"></a>Automating Startup & Shutdown</h3></div></div><p> You will want to automate the database startup and shutdown process. It's probably best to have Oracle spring to life when you boot up your machine. @@ -932,7 +941,7 @@ <tt>oratab</tt> file to load your database at start. Edit the file <tt>/etc/oratab</tt>: - </p><div class="itemizedlist"><ul type="round"><li><p>You will see this line. </p><pre class="programlisting"> + </p><div class="itemizedlist"><ul type="circle"><li><p>You will see this line. </p><pre class="programlisting"> ora8:/ora8/m01/app/oracle/product/8.1.7:N</pre><p> By the way, if you changed the service name or have multiple databases, the format of this file is: @@ -1008,7 +1017,7 @@ Database "ora8" warm started.</pre></li><li><p> If it worked, then run these commands to make the startup and shutdown automatic. - </p><div class="itemizedlist"><ul type="round"><li><p>Red Hat users:</p><pre class="programlisting"> + </p><div class="itemizedlist"><ul type="circle"><li><p>Red Hat users:</p><pre class="programlisting"> root:~# cd /etc/rc.d/init.d/ root:~# chkconfig --add oracle8i root:~# chkconfig --list oracle8i @@ -1071,7 +1080,7 @@ </p><p> Download these three scripts into <tt>/tmp</tt> - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> <a href="files/startlsnr.txt" target="_top">startlsnr.txt</a> </p></li><li><p> <a href="files/stoplsnr.txt" target="_top">stoplsnr.txt</a> @@ -1153,7 +1162,7 @@ SQL> exit oracle:~$ exit -root:~#</pre><div class="itemizedlist"><ul type="round"><li><p>RedHat users:</p><p> +root:~#</pre><div class="itemizedlist"><ul type="circle"><li><p>RedHat users:</p><p> Now run <tt>chkconfig</tt> on the <tt>listener8i</tt> script. </p><pre class="programlisting"> @@ -1187,7 +1196,7 @@ SQL> exit</pre></li></ul></div><p> Congratulations, your installation of Oracle 8.1.7 is complete. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-oracle-troubleshooting"></a>Troubleshooting Oracle Dates</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-oracle-troubleshooting"></a>Troubleshooting Oracle Dates</h3></div></div><p> Oracle has an internal representation for storing the data based on the number of seconds elapsed since some date. However, for the purposes of inputing dates into Oracle and getting them back out, @@ -1243,9 +1252,9 @@ Log back in again. If adding the <tt>nls_date_format</tt> line doesn't help, you can ask for advice in our <a href="http://www.openacs.org/bboard/" target="_top">OpenACS forum</a>. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-oracle-procs"></a>Useful Procedures</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-oracle-procs"></a>Useful Procedures</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p> Dropping a tablespace - </p><div class="itemizedlist"><ul type="round"><li><p> + </p><div class="itemizedlist"><ul type="circle"><li><p> Run sqlplus as the dba: </p><pre class="programlisting"> oracle:~$ sqlplus system/changeme</pre></li><li><p> @@ -1260,9 +1269,9 @@ </p><pre class="programlisting"> SQL> drop tablespace <span class="emphasis"><em>table_space_name</em></span> including contents cascade constraints;</pre></li></ul></div></li></ul></div><p> For more information on Oracle, please consult the <a href="http://oradoc.photo.net/" target="_top">documentation</a>. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-oracle-defaults"></a>Defaults</h3></div></div><p>We used the following defaults while installing Oracle.</p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Variable</th><th>Value</th><th>Reason</th></tr></thead><tbody><tr><td>ORACLE_HOME</td><td>/ora8/m01/app/oracle/product/8.1.7</td><td>This is the default Oracle installation directory.</td></tr><tr><td>ORACLE_SERVICE</td><td>ora8</td><td>The service name is a domain-qualified identifier for + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-oracle-defaults"></a>Defaults</h3></div></div><p>We used the following defaults while installing Oracle.</p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Variable</th><th>Value</th><th>Reason</th></tr></thead><tbody><tr><td>ORACLE_HOME</td><td>/ora8/m01/app/oracle/product/8.1.7</td><td>This is the default Oracle installation directory.</td></tr><tr><td>ORACLE_SERVICE</td><td>ora8</td><td>The service name is a domain-qualified identifier for your Oracle server.</td></tr><tr><td>ORACLE_SID</td><td>ora8</td><td>This is an identifier for your Oracle server.</td></tr><tr><td>ORACLE_OWNER</td><td>oracle</td><td>The user who owns all of the oracle files.</td></tr><tr><td>ORACLE_GROUP</td><td>dba</td><td>The special oracle group. Users in the dba group are authorized to do a <tt>connect internal</tt> within <tt>svrmgrl</tt> to gain full system - access to the Oracle system.</td></tr></tbody></table></div></div><p><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="linux-installation.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="postgres.html">Next</a></td></tr><tr><td width="40%" align="left">Install Linux and supporting software </td><td width="20%" align="center"><a accesskey="u" href="unix-install.html">Up</a></td><td width="40%" align="right"> Install PostgreSQL 7.2.3</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/oracle.html#comments">View comments on this page at openacs.org</a></center></body></html> + access to the Oracle system.</td></tr></tbody></table></div></div><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="linux-installation.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="postgres.html">Next</a></td></tr><tr><td width="40%" align="left">Install Linux and supporting software&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="unix-install.html">Up</a></td><td width="40%" align="right">&nbsp;Install PostgreSQL 7.2.3</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/oracle.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/packages.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/packages.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/packages.html 7 Apr 2003 16:59:25 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/packages.html 15 Apr 2003 17:03:02 -0000 1.8.2.5 @@ -1,17 +1,17 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS 4.6.2 Packages</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter 9. Development Reference"><link rel="previous" href="dev-guide.html" title="Chapter 9. Development Reference"><link rel="next" href="objects.html" title="OpenACS 4.6.2 Data Models and the Object System"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="dev-guide.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Development Reference</th><td width="20%" align="right"> <a accesskey="n" href="objects.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="packages"></a>OpenACS 4.6.2 Packages</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS 4.6.2 Packages</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter�9.�Development Reference"><link rel="previous" href="dev-guide.html" title="Chapter�9.�Development Reference"><link rel="next" href="objects.html" title="OpenACS 4.6.2 Data Models and the Object System"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="dev-guide.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�9.�Development Reference</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="objects.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="packages"></a>OpenACS 4.6.2 Packages</h2></div></div><div class="authorblurb"><p> By Pete Su and Bryan Quinn <br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="packages-overview"></a>Overview</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="packages-overview"></a>Overview</h3></div></div><p> This document is a guide on how to write a software package for OpenACS. OpenACS packages are installed and maintained with the OpenACS Package Manager (APM). This document presents reasons for packaging software, conventions for the file system and naming that must be followed, and step by step instructions for creating a new package for the "Notes" example package. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="packages-why-package"></a>Why package your software?</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="packages-why-package"></a>Why package your software?</h3></div></div><p> To answer this question, we should examine how OpenACS servers were organized in the past. We will assume throughout this document that the page root for your server is called <tt>ROOT</tt>. In OpenACS @@ -126,7 +126,7 @@ package. While we're at it, this tool should also automate package installation, dependency checking, upgrades, and package removal. In OpenACS 4.6.2, this tool is called the APM. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="packages-apm"></a>The APM</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="packages-apm"></a>The APM</h3></div></div><p> The APM is used to create, maintain, and install packages. It takes care of copying all of the files and registering the package in the system. The APM is responsible for: @@ -154,7 +154,7 @@ </p><p> We will also discuss how to organize your files and queries so they work with the OpenACS Query Dispatcher. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="packages-looks"></a>What a Package Looks Like</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="packages-looks"></a>What a Package Looks Like</h3></div></div><p> <a class="indexterm" name="baby"></a> To illustrate the general structure of a package, let's see what the package for the "notes" application should look like. This is shown in @@ -303,7 +303,7 @@ <tt>index.adp</tt>.</td><td><tt>/www/index.tcl</tt></td></tr><tr><td>Package Specification File</td><td>The package specification file is an XML file generated and maintained by the OpenACS Package Manager (APM). It specifies information about the package including its parameters and its - files.</td><td><tt>notes.info</tt></td></tr></tbody></table></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="packages-making-a-package"></a>Making a Package</h3></div></div><p> + files.</td><td><tt>notes.info</tt></td></tr></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="packages-making-a-package"></a>Making a Package</h3></div></div><p> Here is how you make a package. </p><div class="orderedlist"><ol type="1"><li><p>Login as a site-wide administrator on your web service. </p></li><li><p>Go to the package manager on your server. The URL is <a href="/acs-admin/apm" target="_top">/acs-admin/apm</a>. @@ -414,7 +414,7 @@ </pre></li><li><p> Now you can start developing the package. In addition to writing code, you should also consider the tasks outlined in the <a href="http://acs40.arsdigita.com/acs40-project-central/package-submission.html" target="_top">package submission guidelines</a>. - </p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="packages-subsites"></a>The Site Map and Package Instances</h3></div></div><p> + </p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="packages-subsites"></a>The Site Map and Package Instances</h3></div></div><p> At this point, you are probably excited to see your new package in action. But, we haven't added any user visible pages yet. By convention, user visible pages go in the @@ -478,7 +478,7 @@ later document, we'll see how to write your application so that the code can detect from what URL it was invoked. This is the key to supporting <a href="subsites.html" title="Writing OpenACS 4.6.2 Application Pages">subsites</a>. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="packages-summary"></a>Summary</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="packages-summary"></a>Summary</h3></div></div><p> The APM performs the following tasks in an OpenACS site: </p><div class="itemizedlist"><ul type="disc"><li><p> Manages creation, installation, and removal of packages from the @@ -493,4 +493,4 @@ </p></li><li><p> Writes out package distribution files for other people to download and install. We'll cover this later. - </p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="packages-add-reading"></a>Additional Reading</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="apm-design.html">OpenACS 4.6.2 Package Manager Design</a></p></li><li><p><a href="apm-requirements.html">OpenACS 4.6.2 Package Manager Requirements</a></p></li><li><p><a href="http://acs40.arsdigita.com/acs40-project-central/package-submission.html" target="_top">Package submission guidelines</a></p></li></ul></div><p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="dev-guide.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="objects.html">Next</a></td></tr><tr><td width="40%" align="left">Chapter 9. Development Reference </td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right"> OpenACS 4.6.2 Data Models and the Object System</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/packages.html#comments">View comments on this page at openacs.org</a></center></body></html> + </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="packages-add-reading"></a>Additional Reading</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="apm-design.html">OpenACS 4.6.2 Package Manager Design</a></p></li><li><p><a href="apm-requirements.html">OpenACS 4.6.2 Package Manager Requirements</a></p></li><li><p><a href="http://acs40.arsdigita.com/acs40-project-central/package-submission.html" target="_top">Package submission guidelines</a></p></li></ul></div><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="dev-guide.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="objects.html">Next</a></td></tr><tr><td width="40%" align="left">Chapter�9.�Development Reference&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS 4.6.2 Data Models and the Object System</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/packages.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/parties.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/parties.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/parties.html 7 Apr 2003 16:59:25 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/parties.html 15 Apr 2003 17:03:02 -0000 1.8.2.5 @@ -1,9 +1,9 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Parties in OpenACS 4.6.2</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter 9. Development Reference"><link rel="previous" href="subsites.html" title="Writing OpenACS 4.6.2 Application Pages"><link rel="next" href="permissions-tediously-explained.html" title="OpenACS 4.x Permissions Tediously Explained"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="subsites.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Development Reference</th><td width="20%" align="right"> <a accesskey="n" href="permissions-tediously-explained.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="parties"></a>Parties in OpenACS 4.6.2</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Parties in OpenACS 4.6.2</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter�9.�Development Reference"><link rel="previous" href="subsites.html" title="Writing OpenACS 4.6.2 Application Pages"><link rel="next" href="permissions-tediously-explained.html" title="OpenACS 4.x Permissions Tediously Explained"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="subsites.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�9.�Development Reference</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="permissions-tediously-explained.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="parties"></a>Parties in OpenACS 4.6.2</h2></div></div><div class="authorblurb"><p> by <a href="http://planitia.org" target="_top">Rafael H. Schloming</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="parties-intro"></a>Introduction</h3></div></div><p>While many applications must deal with individuals and many applications + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="parties-intro"></a>Introduction</h3></div></div><p>While many applications must deal with individuals and many applications must deal with groups, most applications must deal with individuals <span class="emphasis"><em>or</em></span> groups. It is often the case with such applications that in many respects both individuals and groups are treated in an identical manner. It @@ -15,10 +15,10 @@ in a common address book. A typical person's address book might contain the address of his doctor, and his cable company. So what do we label the first field in an entry in his address book? It isn't a person, and it -isn't a company. It is a "party".</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="parties-data-model"></a>The Data Model</h3></div></div><p>Most developers who do significant work with the OpenACS will become +isn't a company. It is a "party".</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="parties-data-model"></a>The Data Model</h3></div></div><p>Most developers who do significant work with the OpenACS will become intimately familiar with the parties data model, and probably extend it on many occasions. For this reason the parties developer guide will begin with -an introduction to the data model.</p><p><span class="strong"><em>Parties</em></span></p><p>The central table in the parties data model is the parties table itself. +an introduction to the data model.</p><p><span class="strong">Parties</span></p><p>The central table in the parties data model is the parties table itself. Every party has exactly one row in this table. Every party has an optional unique email address and an optional url. A party is an acs object, so permissions may granted and revoked on parties and auditing information is @@ -39,7 +39,7 @@ table and one is the groups table. A row in the persons table represents the most basic form of individual that is modeled by the parties data model. A row in the groups table represents the most basic form of an aggregation of -individuals that is represented.</p><p><span class="strong"><em>Persons</em></span></p><p>If a party is an individual then there will be a row in the persons table +individuals that is represented.</p><p><span class="strong">Persons</span></p><p>If a party is an individual then there will be a row in the persons table containing first_names and last_name for that individual. Note that the primary key of the persons table (person_id) references the primary key of the parties table (party_id). This guarantees that if there is a row in the @@ -57,7 +57,7 @@ ); </tt> -</pre><p><span class="strong"><em>Users</em></span></p><p>The users table is an even more specialized form of an individual. A row +</pre><p><span class="strong">Users</span></p><p>The users table is an even more specialized form of an individual. A row in the users table represents an individual that has login access to the system. Note that the primary key of the users table references the primary key of the persons table. Once again this guarantees that if there is a row @@ -68,7 +68,7 @@ system by removing his entry from the users table, but leaving the rest of his information present (i.e. turning him from a user into a person). This is because wherever possible the OpenACS 4.6.2 data model references the persons or -parties table, <span class="strong"><em>not</em></span> the users table. If this feature is +parties table, <span class="strong">not</span> the users table. If this feature is desired when extending the system, then the developers should be careful to only references the users table in situations where it is clear that the references is to a user and not to an individual.</p><pre class="programlisting"> @@ -100,7 +100,7 @@ ); </tt> -</pre><p><span class="strong"><em>Groups</em></span></p><p>The final piece of the parties data model is the groups data model. A +</pre><p><span class="strong">Groups</span></p><p>The final piece of the parties data model is the groups data model. A group is a specialization of a party that represents an aggregation of other parties. The only extra information directly associated with a group (beyond that in the parties table) is the name of the group. As you might guess there @@ -116,7 +116,7 @@ ); </tt> -</pre><p><span class="strong"><em>Group Relations</em></span></p><p>One surprise here is that there are actually two relations involved. One +</pre><p><span class="strong">Group Relations</span></p><p>One surprise here is that there are actually two relations involved. One is the normal membership relation between parties and groups. A party may be a "member" of a group. The other relation is a composition relation between two groups. To fully understand why two relations are @@ -134,7 +134,7 @@ composition. Having a membership relation between groups and parties, and having a composition relation between groups and groups allows us to easily model the full range of sophisticated group structures that exist in the real -world.</p><p><span class="strong"><em>Group Membership</em></span></p><p>Group memberships can be created and manipulated using the membership_rel +world.</p><p><span class="strong">Group Membership</span></p><p>Group memberships can be created and manipulated using the membership_rel package. Note that you can only create one membership object for a given group, party pair. Because of composition, it is possible in some circumstances to make someone a member of a group of which they are already a @@ -183,7 +183,7 @@ show errors </tt> -</pre><p><span class="strong"><em>Group Composition</em></span></p><p>Composition relations can be created or destroyed using the +</pre><p><span class="strong">Group Composition</span></p><p>Composition relations can be created or destroyed using the composition_rel package. The only restriction on compositions is that there cannot be a cycle, i.e., a group cannot be a component of itself either directly or indirectly. This constraint is maintained for you by the API, but @@ -212,7 +212,7 @@ show errors </tt> -</pre></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="parties-views"></a>Views</h3></div></div><p>The data model described above does a reasonable job of representing many +</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="parties-views"></a>Views</h3></div></div><p>The data model described above does a reasonable job of representing many of the situations one is likely to encounter when modeling organizational structures, but we still need to be able to efficiently answer questions like "what members are in this group and all of its components?", and @@ -284,12 +284,12 @@ ... </tt> -</pre></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="parties-extending-data-model"></a>Extending The Parties Data Model</h3></div></div><p>As is, the parties data model can represent some fairly sophisticated real +</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="parties-extending-data-model"></a>Extending The Parties Data Model</h3></div></div><p>As is, the parties data model can represent some fairly sophisticated real world situations, and a lot of work has been put into making this efficient, but it is foolish to assume that this data model is sufficient for every application. It therefore seems likely that developers will want to extend the parties data model in a number of ways. This section will describe some -of the more common ways.</p><p><span class="strong"><em>Specializing Users</em></span></p><p>It is conceivable that some applications will want to collect more +of the more common ways.</p><p><span class="strong">Specializing Users</span></p><p>It is conceivable that some applications will want to collect more detailed information for people using the system. If it is the case that there can be only one such piece of information per user, then it might make sense to create another type of individual that is a further specialization @@ -299,12 +299,12 @@ have a primary key that references the users table, thereby guaranteeing that each row in the mensa_users table has a corresponding row in each of the users, persons, parties, and acs_objects tables. This child table could then -store any extra information relevant to the MENSA community.</p><p><span class="strong"><em>Specializing Groups</em></span></p><p>If one were to build an intranet application on top of the 4.6.2 party +store any extra information relevant to the MENSA community.</p><p><span class="strong">Specializing Groups</span></p><p>If one were to build an intranet application on top of the 4.6.2 party system, it is likely that one would want to take advantage of the systems efficient representation of sophisticated organizational structures, but there would be much more specialized information associated with each group. In this case it would make sense to specialize the group party type into a -company party type in the same manner as above.</p><p><span class="strong"><em>Specializing Membership Relations</em></span></p><p>The final portion of the parties data model that is designed to be +company party type in the same manner as above.</p><p><span class="strong">Specializing Membership Relations</span></p><p>The final portion of the parties data model that is designed to be extended is the membership relationship. Consider the intranet example again. It is likely that a membership in a company would have more information associated with it than a membership in an ordinary group. An obvious example @@ -313,4 +313,4 @@ single integer primary key in what could be thought of as a pure relation. Because a membership relation is an ordinary acs object with <a href="object-identity.html" target="_top">object identity</a>, it is as easy to extend the membership relation to store extra information as it is to extend the users -table or the groups table.</p><p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="subsites.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="permissions-tediously-explained.html">Next</a></td></tr><tr><td width="40%" align="left">Writing OpenACS 4.6.2 Application Pages </td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right"> OpenACS 4.x Permissions Tediously Explained</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/parties.html#comments">View comments on this page at openacs.org</a></center></body></html> +table or the groups table.</p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="subsites.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="permissions-tediously-explained.html">Next</a></td></tr><tr><td width="40%" align="left">Writing OpenACS 4.6.2 Application Pages&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS 4.x Permissions Tediously Explained</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/parties.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/permissions-design.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/permissions-design.html,v diff -u -r1.6.2.4 -r1.6.2.5 --- openacs-4/packages/acs-core-docs/www/permissions-design.html 7 Apr 2003 16:59:26 -0000 1.6.2.4 +++ openacs-4/packages/acs-core-docs/www/permissions-design.html 15 Apr 2003 17:03:03 -0000 1.6.2.5 @@ -1,12 +1,12 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS 4 Permissions Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="previous" href="permissions-requirements.html" title="OpenACS 4 Permissions Requirements"><link rel="next" href="groups-requirements.html" title="OpenACS 4 Groups Requirements"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="permissions-requirements.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Kernel Documentation</th><td width="20%" align="right"> <a accesskey="n" href="groups-requirements.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="permissions-design"></a>OpenACS 4 Permissions Design</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS 4 Permissions Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="previous" href="permissions-requirements.html" title="OpenACS 4 Permissions Requirements"><link rel="next" href="groups-requirements.html" title="OpenACS 4 Groups Requirements"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="permissions-requirements.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�11.�Kernel Documentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="groups-requirements.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="permissions-design"></a>OpenACS 4 Permissions Design</h2></div></div><div class="authorblurb"><p> by <a href="mailto:jmp@arsdigita.com" target="_top">John Prevost</a> and <a href="http://planitia.org" target="_top">Rafael H. Schloming</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-essentials"></a>Essentials</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p>Tcl in <tt>packages/acs-kernel</tt></p></li><li><p><a href="permissions-requirements.html">OpenACS 4 Permissions Requirements</a></p></li><li><p><a href="/doc/sql/display-sql?url=acs-permissions-create.sql&package_key=acs-kernel" target="_top"> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-essentials"></a>Essentials</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p>Tcl in <tt>packages/acs-kernel</tt></p></li><li><p><a href="permissions-requirements.html">OpenACS 4 Permissions Requirements</a></p></li><li><p><a href="/doc/sql/display-sql?url=acs-permissions-create.sql&package_key=acs-kernel" target="_top"> SQL file</a></p></li><li><p><a href="images/permissions-er.png" target="_top">ER diagram</a> -</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-intro"></a>Introduction</h3></div></div><p>The goal of the Permissions system is to provide generic means to both +</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-intro"></a>Introduction</h3></div></div><p>The goal of the Permissions system is to provide generic means to both programmers and site administrators to designate operations (methods) as requiring permissions, and then to check, grant, or revoke permissions via a consistent interface. For example, we might decide that the transaction that @@ -23,7 +23,7 @@ those package objects on which a user has certain permissions.</p><p>For site administrators and other authorized users, the Permissions UI provides a means to aggregate the primitive operations (methods) made available by the programmer into logical privileges (like read, write, and -admin) that can be granted and revoked.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-history"></a>Historical Considerations</h3></div></div><p>In earlier versions of the OpenACS, permissions and access control was handled +admin) that can be granted and revoked.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-history"></a>Historical Considerations</h3></div></div><p>In earlier versions of the OpenACS, permissions and access control was handled on a module-by-module basis, often even on a page-by-page basis. For example, a typical module might allow any registered user to access its pages read-only, but only allow members of a certain group to make changes. The way @@ -34,28 +34,28 @@ control were many, the two major ones being inconsistency, and repeated/redundant code. Thus the drive in OpenACS 4 to provide a unified, consistent permissions system that both programmers and administrators can -readily use.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-competitors"></a>Competitive Analysis</h3></div></div><p><span class="emphasis"><em>None available as of 10/2000.</em></span></p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-design-tradeoffs"></a>Design Tradeoffs</h3></div></div><p>The core of the permissions data model is quite simple. Unfortunately, the +readily use.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-competitors"></a>Competitive Analysis</h3></div></div><p><span class="emphasis"><em>None available as of 10/2000.</em></span></p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-design-tradeoffs"></a>Design Tradeoffs</h3></div></div><p>The core of the permissions data model is quite simple. Unfortunately, the hierarchical nature of default permissions entails quite a number of tree queries which could slow the system down. Since every page will have at least one permissions check, a number of views and auxiliary tables (de-normalizations of the data model) have been created to speed up access queries. As a consequence, speed of updates are decreased and requirements -for additional storage space increase.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-data-model"></a>Data Model Discussion</h3></div></div><p>As described in section V., the core of the permissions data model is +for additional storage space increase.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-data-model"></a>Data Model Discussion</h3></div></div><p>As described in section V., the core of the permissions data model is simple, though a number of views and auxiliary tables exist to ensure adequate performance. The core model consists of five tables:</p><div class="variablelist"><dl><dt><span class="term"><tt>acs_methods</tt> </span></dt><dd><p>The set of all defined methods.</p></dd><dt><span class="term"><tt>acs_privileges</tt> </span></dt><dd><p>The set of all defined privileges.</p></dd><dt><span class="term"><tt>acs_privilege_method_rules</tt> -</span></dt><dd><p>A relation describing the set of methods <span class="strong"><em>directly</em></span> +</span></dt><dd><p>A relation describing the set of methods <span class="strong">directly</span> associated with each privilege.</p></dd><dt><span class="term"><tt>acs_privilege_hierarchy</tt> -</span></dt><dd><p>A relation describing which privileges <span class="strong"><em>directly</em></span> +</span></dt><dd><p>A relation describing which privileges <span class="strong">directly</span> "contain" other privileges.</p></dd><dt><span class="term"><tt>acs_permissions</tt> </span></dt><dd><p>A table with one (<span class="emphasis"><em>party</em></span>, <span class="emphasis"><em>object</em></span>, <span class="emphasis"><em>privilege</em></span>) -row for every privilege <span class="strong"><em>directly</em></span> granted on any object in +row for every privilege <span class="strong">directly</span> granted on any object in the system - this is a denormalization of <tt>acs_privilege_method_rules</tt> and <tt>acs_privilege_hierarchy</tt></p></dd></dl></div><p>There are also a number of views to make it easier to ask specific @@ -78,7 +78,7 @@ a party is a member of a group (at any depth).</p></dd><dt><span class="term"><tt>acs_object_party_method_map</tt> </span></dt><dd><p>Relation with every (<span class="emphasis"><em>object</em></span>, <span class="emphasis"><em>party</em></span>, <span class="emphasis"><em>method</em></span>) -tuple implied by the above trees.</p></dd></dl></div><p>In general, <span class="strong"><em>only <tt>acs_object_party_method_map</tt></em></span> +tuple implied by the above trees.</p></dd></dl></div><p>In general, <span class="strong">only <tt>acs_object_party_method_map</tt></span> should be used for queries from other modules. The other views are intermediate steps in building that query.</p><p>The data model also includes two simple PL/SQL procedures (<tt>acs_permission.grant_permission</tt> and @@ -94,16 +94,16 @@ have taken methods from (at any level) (see <tt>acs_privilege_hierarchy</tt>)</p></li><li><p>objects get access control from direct grants, or inherit permissions from their context (unless the "don't inherit" flag is -set)</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-transactions"></a>Legal Transactions</h3></div></div><p>There are three essential areas in which all transactions in the -permissions system fall:</p><div class="itemizedlist"><ul type="disc"><li><p>Modification of methods and privileges</p></li><li><p>Modification of permissions</p></li><li><p>Queries on permissions</p></li></ul></div><p><span class="strong"><em>"Modification of methods and privileges."</em></span> This +set)</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-transactions"></a>Legal Transactions</h3></div></div><p>There are three essential areas in which all transactions in the +permissions system fall:</p><div class="itemizedlist"><ul type="disc"><li><p>Modification of methods and privileges</p></li><li><p>Modification of permissions</p></li><li><p>Queries on permissions</p></li></ul></div><p><span class="strong">"Modification of methods and privileges."</span> This refers to actions that happen mainly at package installation time - a package will create a number of methods for its own use, then associate them with the system's standard privileges, or new privileges which the package has created. The association step might also happen later, if the site-wide administrator chooses to change permissions policy.</p><p>These steps involve directly manipulating the <tt>acs_methods</tt>, <tt>acs_privileges</tt>, and <tt>acs_privilege_method_rules</tt> tables. A web page for manipulating these features should be limited to site-wide -administrators.</p><p><span class="strong"><em>"Modification of permissions"</em></span> - involves fairly +administrators.</p><p><span class="strong">"Modification of permissions"</span> - involves fairly common operations. Users are typically able to administer permissions for objects they themselves create. The two basic operations here are "grant" and "revoke". Granting permissions is done via @@ -112,7 +112,7 @@ <tt>acs_permissions</tt> table.</p><p>Web pages for making these changes are available to all users, so they should not be in an admin area. In order to grant and revoke permissions on an object, the user must have the <tt>administer_privileges</tt> method -permission on that object.</p><p><span class="strong"><em>"Queries on permissions"</em></span> - by far the most +permission on that object.</p><p><span class="strong">"Queries on permissions"</span> - by far the most common operation is querying the permissions database. Several kinds of questions are commonly asked: First, and most commonly, "Can this party perform this method on this object?" Two Tcl functions are provided to @@ -126,16 +126,16 @@ against <tt>acs_object_party_method_map</tt>, or by calling the Tcl functions for appropriate methods.</p><p>Finally, when administering the permissions for an object, a web page needs to know all permissions directly granted on that object. This is done -by querying against <tt>acs_permissions</tt>.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-api"></a>API</h3></div></div><p>The API to the permissions system consists of a few well-known tables, -plus a pair of PL/SQL procedures and a pair of Tcl functions.</p><p><span class="strong"><em>Tables</em></span></p><p><tt>acs_methods</tt>, <tt>acs_privileges</tt>, and +by querying against <tt>acs_permissions</tt>.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-api"></a>API</h3></div></div><p>The API to the permissions system consists of a few well-known tables, +plus a pair of PL/SQL procedures and a pair of Tcl functions.</p><p><span class="strong">Tables</span></p><p><tt>acs_methods</tt>, <tt>acs_privileges</tt>, and <tt>acs_privilege_method_rules</tt> manage the set of permissions in the system. At installation time, a package will add to these three tables to introduce new permissions into the system.</p><p>The main table for queries is <tt>acs_object_party_method_map</tt>, which contains (<span class="emphasis"><em>object</em></span>, <span class="emphasis"><em>party</em></span>, <span class="emphasis"><em>method</em></span>) triples for all allowed operations in the system.</p><p>Also of interest for queries is <tt>acs_permissions</tt>, which lists directly granted privileges. Neither <tt>acs_object_party_method_map</tt> (which is a view) nor <tt>acs_permissions</tt> should be updated -directly.</p><p><span class="strong"><em>PL/SQL Procedures</em></span></p><p><tt>acs_permissions.grant_permission</tt> introduces new permissions for +directly.</p><p><span class="strong">PL/SQL Procedures</span></p><p><tt>acs_permissions.grant_permission</tt> introduces new permissions for an object. It should be given an (<span class="emphasis"><em>object</em></span>, <span class="emphasis"><em>party</em></span>, <span class="emphasis"><em>privilege</em></span>) triple, and will always succeed. If the permission is already in the system, no change occurs. The interface for this procedure @@ -154,14 +154,14 @@ privilege acs_permissions.privilege%TYPE ); </pre><p>These procedures are defined in <a href="http://acs40.arsdigita.com/doc/sql/display-sql?url=acs-permissions-create.sql&package_key=acs-kernel" target="_top"> -<tt>permissions-create.sql</tt></a></p><p><span class="strong"><em>Tcl Procedures</em></span></p><p>Two tcl procedures provide a simple call for the query, "Can this +<tt>permissions-create.sql</tt></a></p><p><span class="strong">Tcl Procedures</span></p><p>Two tcl procedures provide a simple call for the query, "Can this user perform this method on this object?" One returns true or false, the other presents an error page.</p><p>To receive a true or false value, Tcl code should call:</p><pre class="programlisting"> ad_permission_p $object_id $object_type $method -user_id $user_id </pre><p>If the <tt>user_id</tt> argument is left out, then the currently logged in user is checked. To create an error page, Tcl code should call:</p><pre class="programlisting"> ad_require_permission $object_id $object_type $method -</pre><p>These procedures are defined in <tt>acs-permissions-procs.tcl</tt>.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-ui"></a>User Interface</h3></div></div><p>All users of the permissions system are the same at the user-interface +</pre><p>These procedures are defined in <tt>acs-permissions-procs.tcl</tt>.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-ui"></a>User Interface</h3></div></div><p>All users of the permissions system are the same at the user-interface level. If you have the <tt>administer_privileges</tt> method permission on an object, then you may edit privileges for that object with the UI.</p><p>The UI currently provides a list of all granted permissions on the object. If the user wishes to revoke privileges, she may select a set of grants, @@ -173,15 +173,15 @@ one object" screen.</p><p>If it makes sense, the system will also display a checkbox which the user may select to toggle whether permissions are inherited from the object's context.</p><p>There are a number of potential future enhancements for the permissions -UI, outlined below.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-configure"></a>Configuration/Parameters</h3></div></div><p>There are no configuration options for the permissions system.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-future"></a>Future Improvements/Areas of Likely Change</h3></div></div><p>The most important future changes to the Permissions system are likely to +UI, outlined below.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-configure"></a>Configuration/Parameters</h3></div></div><p>There are no configuration options for the permissions system.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-future"></a>Future Improvements/Areas of Likely Change</h3></div></div><p>The most important future changes to the Permissions system are likely to be in the UI:</p><div class="itemizedlist"><ul type="disc"><li><p>There should be a page displaying a list of all objects for which the current user is allowed to administer privileges.</p></li><li><p>Users should be able to view the permissions on any object, or perhaps on objects which they have the "read_permissions" method. This would allow them to see what grants are affecting their objects through -inheritance.</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-authors"></a>Authors</h3></div></div><div class="variablelist"><dl><dt><span class="term">System creator +inheritance.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-authors"></a>Authors</h3></div></div><div class="variablelist"><dl><dt><span class="term">System creator </span></dt><dd><p><a href="mailto:rhs@mit.edu" target="_top">Rafael H. Schloming</a></p></dd><dt><span class="term">System owner </span></dt><dd><p><a href="mailto:rhs@mit.edu" target="_top">Rafael H. Schloming</a></p></dd><dt><span class="term">Documentation author -</span></dt><dd><p><a href="mailto:jmp@arsdigita.com" target="_top">John Prevost</a></p></dd></dl></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-rev-history"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong"><em>Document Revision #</em></span></td><td><span class="strong"><em>Action Taken, Notes</em></span></td><td><span class="strong"><em>When?</em></span></td><td><span class="strong"><em>By Whom?</em></span></td></tr><tr><td>0.1</td><td>Creation</td><td>9/11/2000</td><td>John Prevost</td></tr><tr><td>0.2</td><td>Edited for ACS 4 Beta release</td><td>10/04/2000</td><td>Kai Wu</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="permissions-requirements.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="groups-requirements.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Permissions Requirements </td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right"> OpenACS 4 Groups Requirements</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/permissions-design.html#comments">View comments on this page at openacs.org</a></center></body></html> +</span></dt><dd><p><a href="mailto:jmp@arsdigita.com" target="_top">John Prevost</a></p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-design-rev-history"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong">Document Revision #</span></td><td><span class="strong">Action Taken, Notes</span></td><td><span class="strong">When?</span></td><td><span class="strong">By Whom?</span></td></tr><tr><td>0.1</td><td>Creation</td><td>9/11/2000</td><td>John Prevost</td></tr><tr><td>0.2</td><td>Edited for ACS 4 Beta release</td><td>10/04/2000</td><td>Kai Wu</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="permissions-requirements.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="groups-requirements.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Permissions Requirements&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS 4 Groups Requirements</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/permissions-design.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/permissions-requirements.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/permissions-requirements.html,v diff -u -r1.6.2.4 -r1.6.2.5 --- openacs-4/packages/acs-core-docs/www/permissions-requirements.html 7 Apr 2003 16:59:26 -0000 1.6.2.4 +++ openacs-4/packages/acs-core-docs/www/permissions-requirements.html 15 Apr 2003 17:03:03 -0000 1.6.2.5 @@ -1,11 +1,11 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS 4 Permissions Requirements</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="previous" href="object-system-design.html" title="OpenACS 4 Object Model Design"><link rel="next" href="permissions-design.html" title="OpenACS 4 Permissions Design"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="object-system-design.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Kernel Documentation</th><td width="20%" align="right"> <a accesskey="n" href="permissions-design.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="permissions-requirements"></a>OpenACS 4 Permissions Requirements</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS 4 Permissions Requirements</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="previous" href="object-system-design.html" title="OpenACS 4 Object Model Design"><link rel="next" href="permissions-design.html" title="OpenACS 4 Permissions Design"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="object-system-design.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�11.�Kernel Documentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="permissions-design.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="permissions-requirements"></a>OpenACS 4 Permissions Requirements</h2></div></div><div class="authorblurb"><p> by <a href="mailto:jmp@arsdigita.com" target="_top">John McClary Prevost</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-requirements-intro"></a>Introduction</h3></div></div><p>This document records requirements for the OpenACS 4 Permissions system, a + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-requirements-intro"></a>Introduction</h3></div></div><p>This document records requirements for the OpenACS 4 Permissions system, a component of the OpenACS 4 Kernel. The Permissions system is meant to unify and -centralize the handling of access and control on a given OpenACS 4 system.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-requirements-vision"></a>Vision Statement</h3></div></div><p>Any multi-user software system must address the general problem of +centralize the handling of access and control on a given OpenACS 4 system.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-requirements-vision"></a>Vision Statement</h3></div></div><p>Any multi-user software system must address the general problem of permissions, or "who can do what, on what." On web services, which typically involve large numbers of users belonging to different groups, permissions handling is a critical need: access to content, services, and @@ -15,7 +15,7 @@ manner reduces both cost and risk: cost, in that less code has to be written and maintained for dealing with recurring permissions situations; risk, in that we need not rely on any single programmer's diligence to ensure -access control is implemented and enforced correctly.</p><p><span class="strong"><em>Historical Motivations</em></span></p><p>In earlier versions of the OpenACS, permissions and access control was handled +access control is implemented and enforced correctly.</p><p><span class="strong">Historical Motivations</span></p><p>In earlier versions of the OpenACS, permissions and access control was handled on a module-by-module basis, often even on a page-by-page basis. For example, a typical module might allow any registered user to access its pages read-only, but only allow members of a certain group to make changes. The way @@ -26,21 +26,21 @@ control were many, the two major ones being inconsistency, and repeated/redundant code. Thus the drive in OpenACS 4 to provide a unified, consistent permissions system that both programmers and administrators can -readily use.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-requirements-system-overview"></a>System Overview</h3></div></div><p>The OpenACS 4 Permissions system has two main pieces: first, an API for +readily use.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-requirements-system-overview"></a>System Overview</h3></div></div><p>The OpenACS 4 Permissions system has two main pieces: first, an API for developers to readily handle access control in their applications. The second piece of the system is a UI meant primarily for (subsite) administrators to grant and revoke permissions to system entities under their control.</p><p>Consistency is a key characteristic of the Permissions system - both for a common administrative interface, and easily deployed and maintained access control. The system must be flexible enough to support every access model required in OpenACS applications, but not so flexible that pieces will go unused -or fall outside the common administrative interfaces.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-requirements-"></a>Use Cases and User Scenarios</h3></div></div><p><span class="strong"><em>Terminology</em></span></p><p>The primary question an access control system must answer is a three-way +or fall outside the common administrative interfaces.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-requirements-"></a>Use Cases and User Scenarios</h3></div></div><p><span class="strong">Terminology</span></p><p>The primary question an access control system must answer is a three-way relation, like that between the parts of most simple sentences. A simple sentence generally has three parts, a subject, an object, and a verb - in the context of OpenACS Permissions, our simple sentence is, "Can this party -perform this operation on this target?" Definitions:</p><p>The subject of the sentence is "<span class="strong"><em>party</em></span>" - a +perform this operation on this target?" Definitions:</p><p>The subject of the sentence is "<span class="strong">party</span>" - a distinguishable actor whose access may be controlled, this special word is used because one person may be represented by several parties, and one party -may represent many users (or no users at all).</p><p>The object of the sentence is "<span class="strong"><em>target</em></span>" - this +may represent many users (or no users at all).</p><p>The object of the sentence is "<span class="strong">target</span>" - this is an entity, or object, that the party wishes to perform some action on. An entity/object here is anything that can be put under access control.</p><p>The verb of the sentence is "operation" - a behavior on the OpenACS system subject to control, this word is used to represent the fact that a @@ -50,43 +50,43 @@ that operation.</p><p>Examples of the essential question addressed by the Permissions system: Can jane@attacker.com delete the web security bboard? Can the Boston office (a party) within the VirtuaCorp intranet/website create its own news -instance?</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-requirements-links"></a>Related Links</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="permissions-design.html">OpenACS 4 Permissions Design</a></p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-requirements-func-req"></a>Functional Requirements</h3></div></div><p><span class="strong"><em>10.0 Granularity</em></span></p><p>The system must support access control down to the level of a single +instance?</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-requirements-links"></a>Related Links</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="permissions-design.html">OpenACS 4 Permissions Design</a></p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-requirements-func-req"></a>Functional Requirements</h3></div></div><p><span class="strong">10.0 Granularity</span></p><p>The system must support access control down to the level of a single entity (this would imply down to the level of a row in the OpenACS Objects data -model).</p><p><span class="strong"><em>20.0 Operations</em></span></p><p>The system itself must be able to answer the essential permissions -question as well as several derived questions.</p><blockquote class="blockquote"><p><span class="strong"><em>20.10 Basic Access Check</em></span></p><p>The system must be able to answer the question, "May party P perform -operation O on target T?"</p></blockquote><blockquote class="blockquote"><p><span class="strong"><em>20.20 Allowed Parties Check</em></span></p><p>The system must be able to answer the question, "Which parties may -perform operation O on target T?"</p></blockquote><blockquote class="blockquote"><p><span class="strong"><em>20.30 Allowed Operations Check</em></span></p><p>The system must be able to answer the question, "Which operations may -party P perform on target T?"</p></blockquote><blockquote class="blockquote"><p><span class="strong"><em>20.40 Allowed Targets Check</em></span></p><p>The system must be able to answer the question, "Upon which targets -may party P perform operation O?"</p></blockquote></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-requirements-behave-req"></a>Behavioral Requirements</h3></div></div><p><span class="strong"><em>40.0 Scale of Privileges</em></span></p><p>Privileges must be designed with appropriate scope for a given OpenACS +model).</p><p><span class="strong">20.0 Operations</span></p><p>The system itself must be able to answer the essential permissions +question as well as several derived questions.</p><div class="blockquote"><blockquote class="blockquote"><p><span class="strong">20.10 Basic Access Check</span></p><p>The system must be able to answer the question, "May party P perform +operation O on target T?"</p></blockquote></div><div class="blockquote"><blockquote class="blockquote"><p><span class="strong">20.20 Allowed Parties Check</span></p><p>The system must be able to answer the question, "Which parties may +perform operation O on target T?"</p></blockquote></div><div class="blockquote"><blockquote class="blockquote"><p><span class="strong">20.30 Allowed Operations Check</span></p><p>The system must be able to answer the question, "Which operations may +party P perform on target T?"</p></blockquote></div><div class="blockquote"><blockquote class="blockquote"><p><span class="strong">20.40 Allowed Targets Check</span></p><p>The system must be able to answer the question, "Upon which targets +may party P perform operation O?"</p></blockquote></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-requirements-behave-req"></a>Behavioral Requirements</h3></div></div><p><span class="strong">40.0 Scale of Privileges</span></p><p>Privileges must be designed with appropriate scope for a given OpenACS package. Some privileges are of general utility (e.g. "read" and "write"). Others are of more limited use (e.g. "moderate" - applies mainly to a package like bboard, where many users are contributing content simultaneously). A package defining its own privileges should do so with moderation, being careful not to overload a privilege like -"read" to mean too many things.</p><p><span class="strong"><em>50.0 Aggregation of Operations (Privileges)</em></span></p><p>For user interface purposes, it can be appropriate to group certain +"read" to mean too many things.</p><p><span class="strong">50.0 Aggregation of Operations (Privileges)</span></p><p>For user interface purposes, it can be appropriate to group certain privileges under others. For example, anyone with the "admin" privilege may also automatically receive "read", "write", -"delete", etc. privileges.</p><p><span class="strong"><em>60.0 Aggregation of Parties (Groups)</em></span></p><p>The system must allow aggregation of parties. The exact method used for +"delete", etc. privileges.</p><p><span class="strong">60.0 Aggregation of Parties (Groups)</span></p><p>The system must allow aggregation of parties. The exact method used for aggregation will probably be addressed by the OpenACS 4 "Groups" system. Regardless of the exact behavior of aggregate parties, if an aggregate party exists, then access which is granted to the aggregate party -should be available to all members of that aggregate.</p><p><span class="strong"><em>70.0 Scope of Access Control</em></span></p><blockquote class="blockquote"><p><span class="strong"><em>70.10 Context</em></span></p><p>There must be a method for objects to receive default access control from +should be available to all members of that aggregate.</p><p><span class="strong">70.0 Scope of Access Control</span></p><div class="blockquote"><blockquote class="blockquote"><p><span class="strong">70.10 Context</span></p><p>There must be a method for objects to receive default access control from some context. For example, if you do not have read access to a bboard, you -should not have read access to a message in that bboard.</p></blockquote><blockquote class="blockquote"><p><span class="strong"><em>70.20 Overriding</em></span></p><p>It must be possible to override defaults provided by the context of an -object (as in 70.10), in both a positive and negative manner.</p></blockquote><blockquote class="blockquote"><p><span class="strong"><em>70.20.10 Positive Overriding</em></span></p><p>It must be possible to allow a party more access to some target than they +should not have read access to a message in that bboard.</p></blockquote></div><div class="blockquote"><blockquote class="blockquote"><p><span class="strong">70.20 Overriding</span></p><p>It must be possible to override defaults provided by the context of an +object (as in 70.10), in both a positive and negative manner.</p></blockquote></div><div class="blockquote"><blockquote class="blockquote"><p><span class="strong">70.20.10 Positive Overriding</span></p><p>It must be possible to allow a party more access to some target than they would get by default. (For example, a user does not have the right to edit any message on a bboard. But a user does possibly have the right to edit -their own messages.)</p></blockquote><blockquote class="blockquote"><p><span class="strong"><em>70.20.20 Negative Overriding</em></span></p><p>It must be possible to deny a party access to some target that their +their own messages.)</p></blockquote></div><div class="blockquote"><blockquote class="blockquote"><p><span class="strong">70.20.20 Negative Overriding</span></p><p>It must be possible to deny a party access to some target that their inherited privileges would have allowed. (For example, a subdirectory in the file-storage might normally have its parent directory as context. It should -be possible, however, to make a subdirectory private to some group.)</p></blockquote><p><span class="strong"><em>100.0 Efficiency</em></span></p><p>At least the basic access check (20.10) and the allowed targets check +be possible, however, to make a subdirectory private to some group.)</p></blockquote></div><p><span class="strong">100.0 Efficiency</span></p><p>At least the basic access check (20.10) and the allowed targets check (20.40) must be efficient enough for general use, i.e. scalable under fairly heavy website traffic. It can be expected that almost every page will contain at least one basic access check, and most pages will contain an allowed targets check (20.40).</p><p>In particular, constraining a <tt>SELECT</tt> to return only rows the current user has access to should not be much slower than the <tt>SELECT</tt> -on its own.</p><p><span class="strong"><em>120.0 Ease of Use</em></span></p><p>Since most SQL queries will contain an allowed target check in the where +on its own.</p><p><span class="strong">120.0 Ease of Use</span></p><p>Since most SQL queries will contain an allowed target check in the where clause, whatever mechanism is used to make checks in SQL should be fairly small and simple.</p><p>In particular, constraining a <tt>SELECT</tt> to return only rows the -current user has access to should not add more than one line to a query.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-requirements-history"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong"><em>Document Revision #</em></span></td><td><span class="strong"><em>Action Taken, Notes</em></span></td><td><span class="strong"><em>When?</em></span></td><td><span class="strong"><em>By Whom?</em></span></td></tr><tr><td>0.1</td><td>Creation</td><td>8/17/2000</td><td>John Prevost</td></tr><tr><td>0.2</td><td>Revised, updated with new terminology</td><td>8/25/2000</td><td>John Prevost</td></tr><tr><td>0.3</td><td>Edited, reformatted to conform to requirements template, pending -freeze.</td><td>8/26/2000</td><td>Kai Wu</td></tr><tr><td>0.4</td><td>Edited for ACS 4 Beta release.</td><td>10/03/2000</td><td>Kai Wu</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="object-system-design.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="permissions-design.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Object Model Design </td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right"> OpenACS 4 Permissions Design</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/permissions-requirements.html#comments">View comments on this page at openacs.org</a></center></body></html> +current user has access to should not add more than one line to a query.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-requirements-history"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong">Document Revision #</span></td><td><span class="strong">Action Taken, Notes</span></td><td><span class="strong">When?</span></td><td><span class="strong">By Whom?</span></td></tr><tr><td>0.1</td><td>Creation</td><td>8/17/2000</td><td>John Prevost</td></tr><tr><td>0.2</td><td>Revised, updated with new terminology</td><td>8/25/2000</td><td>John Prevost</td></tr><tr><td>0.3</td><td>Edited, reformatted to conform to requirements template, pending +freeze.</td><td>8/26/2000</td><td>Kai Wu</td></tr><tr><td>0.4</td><td>Edited for ACS 4 Beta release.</td><td>10/03/2000</td><td>Kai Wu</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="object-system-design.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="permissions-design.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Object Model Design&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS 4 Permissions Design</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/permissions-requirements.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/permissions-tediously-explained.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/permissions-tediously-explained.html,v diff -u -r1.1.2.5 -r1.1.2.6 --- openacs-4/packages/acs-core-docs/www/permissions-tediously-explained.html 7 Apr 2003 16:59:26 -0000 1.1.2.5 +++ openacs-4/packages/acs-core-docs/www/permissions-tediously-explained.html 15 Apr 2003 17:03:03 -0000 1.1.2.6 @@ -1,7 +1,7 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS 4.x Permissions Tediously Explained</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter 9. Development Reference"><link rel="previous" href="parties.html" title="Parties in OpenACS 4.6.2"><link rel="next" href="object-identity.html" title="Object Identity"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="parties.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Development Reference</th><td width="20%" align="right"> <a accesskey="n" href="object-identity.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="permissions-tediously-explained"></a>OpenACS 4.x Permissions Tediously Explained</h2></div></div><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS 4.x Permissions Tediously Explained</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter�9.�Development Reference"><link rel="previous" href="parties.html" title="Parties in OpenACS 4.6.2"><link rel="next" href="object-identity.html" title="Object Identity"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="parties.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�9.�Development Reference</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="object-identity.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="permissions-tediously-explained"></a>OpenACS 4.x Permissions Tediously Explained</h2></div></div><p> by Vadim Nasardinov. Modified and converted to Docbook XML by Roberto Mello - </p><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-tedious-overview"></a>Overview</h3></div></div><p> + </p><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-tedious-overview"></a>Overview</h3></div></div><p> The general permissions system has a relatively complex data model in OpenACS 4.x. Developers who haven't had the time to learn the internals of the data model may end up writing seemingly correct code that crashes their system in @@ -86,7 +86,7 @@ to store permission information explicitly about every object, i.e. if the system has 100,000 and 1,000 users who have the <span class="emphasis"><em>read</em></span> privilege on all objects, then we would need to store 100,000,000 entries of the form: - </p><div class="table"><p class="title"><b>Table 9.1. </b></p><table border="1"><colgroup><col align="center"><col align="center"><col align="center"></colgroup><thead><tr><th align="center">object_id</th><th align="center">grantee_id</th><th align="center">privilege</th></tr></thead><tbody><tr><td align="center">object_id_1</td><td align="center">user_id_1</td><td align="center">'read'</td></tr><tr><td align="center">object_id_1</td><td align="center">user_id_2</td><td align="center">'read'</td></tr><tr><td colspan="3" align="center">...</td></tr><tr><td align="center">object_id_1</td><td align="center">user_id_n</td><td align="center">'read'</td></tr><tr><td align="center">object_id_2</td><td align="center">user_id_1</td><td align="center">'read'</td></tr><tr><td align="center">object_id_2</td><td align="center">user_id_2</td><td align="center">'read'</td></tr><tr><td colspan="3" align="center">...</td></tr><tr><td align="center">object_id_2</td><td align="center">user_id_n</td><td align="center">'read'</td></tr><tr><td colspan="3" align="center">...</td></tr><tr><td colspan="3" align="center">...</td></tr><tr><td align="center">object_id_m</td><td align="center">user_id_1</td><td align="center">'read'</td></tr><tr><td align="center">object_id_m</td><td align="center">user_id_2</td><td align="center">'read'</td></tr><tr><td colspan="3" align="center">...</td></tr><tr><td align="center">object_id_m</td><td align="center">user_id_n</td><td align="center">'read'</td></tr></tbody></table></div><p> + </p><div class="table"><a name="id2934367"></a><p class="title"><b>Table�9.1.�</b></p><table border="1"><colgroup><col align="center"><col align="center"><col align="center"></colgroup><thead><tr><th align="center">object_id</th><th align="center">grantee_id</th><th align="center">privilege</th></tr></thead><tbody><tr><td align="center">object_id_1</td><td align="center">user_id_1</td><td align="center">'read'</td></tr><tr><td align="center">object_id_1</td><td align="center">user_id_2</td><td align="center">'read'</td></tr><tr><td colspan="3" align="center">...</td></tr><tr><td align="center">object_id_1</td><td align="center">user_id_n</td><td align="center">'read'</td></tr><tr><td align="center">object_id_2</td><td align="center">user_id_1</td><td align="center">'read'</td></tr><tr><td align="center">object_id_2</td><td align="center">user_id_2</td><td align="center">'read'</td></tr><tr><td colspan="3" align="center">...</td></tr><tr><td align="center">object_id_2</td><td align="center">user_id_n</td><td align="center">'read'</td></tr><tr><td colspan="3" align="center">...</td></tr><tr><td colspan="3" align="center">...</td></tr><tr><td align="center">object_id_m</td><td align="center">user_id_1</td><td align="center">'read'</td></tr><tr><td align="center">object_id_m</td><td align="center">user_id_2</td><td align="center">'read'</td></tr><tr><td colspan="3" align="center">...</td></tr><tr><td align="center">object_id_m</td><td align="center">user_id_n</td><td align="center">'read'</td></tr></tbody></table></div><p> Although quite feasible, this approach fails to take advantage of the fact that objects in the system are commonly organized hierarchally, and permissions usually follow the hierarchical structure, so that if user @@ -98,10 +98,10 @@ necessity to explicitly maintain security information for every single object. There are three kinds of hierarchies involved. These are discussed in the following sections. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-tedious-context-hierarchy"></a>Context Hierarchy</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-tedious-context-hierarchy"></a>Context Hierarchy</h3></div></div><p> Suppose objects <span class="emphasis"><em>A</em></span>, <span class="emphasis"><em>B</em></span>, ..., and <span class="emphasis"><em>F</em></span> form the following hierarchy. - </p><div class="table"><p class="title"><b>Table 9.2. </b></p><table border="1"><colgroup><col align="center"><col align="center"><col align="center"></colgroup><tbody><tr><td colspan="3" align="center"><span class="bold"><b>A</b></span><p> + </p><div class="table"><a name="id2935896"></a><p class="title"><b>Table�9.2.�</b></p><table border="1"><colgroup><col align="center"><col align="center"><col align="center"></colgroup><tbody><tr><td colspan="3" align="center"><span class="bold"><b>A</b></span><p> <tt>object_id=10</tt> </p></td></tr><tr><td colspan="2" align="center"><span class="bold"><b>B</b></span><p> <tt>object_id=20</tt> @@ -117,23 +117,23 @@ This can be represented in the <tt> <a href="permissions-tediously-explained.html#acs_objects">acs_objects</a></tt> table by the following entries: - </p><div class="table"><p class="title"><b>Table 9.3. </b></p><table border="1"><colgroup><col align="center"><col align="center"></colgroup><thead><tr><th align="center">object_id</th><th align="center">context_id</th></tr></thead><tbody><tr><td align="center">20</td><td align="center">10</td></tr><tr><td align="center">30</td><td align="center">10</td></tr><tr><td align="center">40</td><td align="center">20</td></tr><tr><td align="center">50</td><td align="center">20</td></tr><tr><td align="center">60</td><td align="center">30</td></tr></tbody></table></div><p> + </p><div class="table"><a name="id2936114"></a><p class="title"><b>Table�9.3.�</b></p><table border="1"><colgroup><col align="center"><col align="center"></colgroup><thead><tr><th align="center">object_id</th><th align="center">context_id</th></tr></thead><tbody><tr><td align="center">20</td><td align="center">10</td></tr><tr><td align="center">30</td><td align="center">10</td></tr><tr><td align="center">40</td><td align="center">20</td></tr><tr><td align="center">50</td><td align="center">20</td></tr><tr><td align="center">60</td><td align="center">30</td></tr></tbody></table></div><p> The first entry tells us that object 20 is the descendant of object 10, and the third entry shows that object 40 is the descendant of object 20. By running a <a href="http://www.oradoc.com/ora817/server.817/a85397/expressi.htm#1023748" target="_top">CONNECT BY</a> query, we can compute that object 40 is the second-generation descendant of object 10. With this in mind, if we want to record the fact that user Joe has the <span class="emphasis"><em>read</em></span> privilege on objects <span class="emphasis"><em>A</em></span>, ..., <span class="emphasis"><em>F</em></span>, we only need to record one entry in the <tt><a href="permissions-tediously-explained.html#acs_permissions">acs_permissions</a></tt> table. - </p><div class="table"><p class="title"><b>Table 9.4. </b></p><table border="1"><colgroup><col align="center"><col align="center"><col align="center"></colgroup><thead><tr><th align="center">object</th><th align="center">grantee</th><th align="center">privilege</th></tr></thead><tbody><tr><td align="center">A</td><td align="center">Joe</td><td align="center">read</td></tr></tbody></table></div><p> + </p><div class="table"><a name="id2936274"></a><p class="title"><b>Table�9.4.�</b></p><table border="1"><colgroup><col align="center"><col align="center"><col align="center"></colgroup><thead><tr><th align="center">object</th><th align="center">grantee</th><th align="center">privilege</th></tr></thead><tbody><tr><td align="center">A</td><td align="center">Joe</td><td align="center">read</td></tr></tbody></table></div><p> The fact that Joe can also read <span class="emphasis"><em>B</em></span>, <span class="emphasis"><em>C</em></span>, ..., and <span class="emphasis"><em>F</em></span> can be derived by ascertaining that these objects are children of <span class="emphasis"><em>A</em></span> by traversing the context hierarchy. As it turns out, hierarchical queries are expensive. As Rafael Schloming put it so aptly, <span class="emphasis"><em>Oracle can't deal with hierarchies for shit.</em></span> </p><p> One way to solve this problem is to cache a flattened view of the context tree like so: - </p><div class="table"><p class="title"><b>Table 9.5. </b></p><table border="1"><colgroup><col align="center"><col align="center"><col align="center"></colgroup><thead><tr><th align="center">object</th><th align="center">ancestor</th><th align="center">n_generations</th></tr></thead><tbody><tr><td align="center">A</td><td align="center">A</td><td align="center">0</td></tr><tr><td align="center">B</td><td align="center">B</td><td align="center">0</td></tr><tr><td align="center">B</td><td align="center">A</td><td align="center">1</td></tr><tr><td align="center">C</td><td align="center">C</td><td align="center">0</td></tr><tr><td align="center">C</td><td align="center">A</td><td align="center">1</td></tr><tr><td align="center">D</td><td align="center">D</td><td align="center">0</td></tr><tr><td align="center">D</td><td align="center">B</td><td align="center">1</td></tr><tr><td align="center">D</td><td align="center">A</td><td align="center">2</td></tr><tr><td align="center">E</td><td align="center">E</td><td align="center">0</td></tr><tr><td align="center">E</td><td align="center">B</td><td align="center">1</td></tr><tr><td align="center">E</td><td align="center">A</td><td align="center">2</td></tr><tr><td align="center">F</td><td align="center">F</td><td align="center">0</td></tr><tr><td align="center">F</td><td align="center">C</td><td align="center">1</td></tr><tr><td align="center">F</td><td align="center">A</td><td align="center">2</td></tr></tbody></table></div><p> + </p><div class="table"><a name="id2936398"></a><p class="title"><b>Table�9.5.�</b></p><table border="1"><colgroup><col align="center"><col align="center"><col align="center"></colgroup><thead><tr><th align="center">object</th><th align="center">ancestor</th><th align="center">n_generations</th></tr></thead><tbody><tr><td align="center">A</td><td align="center">A</td><td align="center">0</td></tr><tr><td align="center">B</td><td align="center">B</td><td align="center">0</td></tr><tr><td align="center">B</td><td align="center">A</td><td align="center">1</td></tr><tr><td align="center">C</td><td align="center">C</td><td align="center">0</td></tr><tr><td align="center">C</td><td align="center">A</td><td align="center">1</td></tr><tr><td align="center">D</td><td align="center">D</td><td align="center">0</td></tr><tr><td align="center">D</td><td align="center">B</td><td align="center">1</td></tr><tr><td align="center">D</td><td align="center">A</td><td align="center">2</td></tr><tr><td align="center">E</td><td align="center">E</td><td align="center">0</td></tr><tr><td align="center">E</td><td align="center">B</td><td align="center">1</td></tr><tr><td align="center">E</td><td align="center">A</td><td align="center">2</td></tr><tr><td align="center">F</td><td align="center">F</td><td align="center">0</td></tr><tr><td align="center">F</td><td align="center">C</td><td align="center">1</td></tr><tr><td align="center">F</td><td align="center">A</td><td align="center">2</td></tr></tbody></table></div><p> Note that the number of entries in the flattened view grows exponentially with respect to the depth of the context tree. For instance, if you have a fully populated binary tree with a depth of <span class="emphasis"><em>n</em></span>, then the number of entries @@ -163,9 +163,9 @@ an <a href="http://www.oradoc.com/ora817/server.817/a85397/statem3e.htm#2061922" target="_top">index-organized table</a>, which means it is substantially optimized for access by primary key. Number two, as the above computations suggest, the size of the table - grows <span class="strong"><em>polynomially</em></span> + grows <span class="strong">polynomially</span> with respect to the average number of descendants that an object - has, and <span class="strong"><em>exponentially</em></span> + has, and <span class="strong">exponentially</span> with respect to the depth of the context tree. </p><p> The <tt>acs_object_context_index</tt> is kept in sync with the @@ -204,7 +204,7 @@ an object's <tt>security_inherit_p</tt> column to 'f', you can stop permissions from cascading down the context tree. In the following example, Joe does not have the read permissions on <span class="emphasis"><em>C</em></span> and <span class="emphasis"><em>F</em></span>. - </p><div class="table"><p class="title"><b>Table 9.6. </b></p><table border="1"><colgroup><col align="center"><col align="center"><col align="center"></colgroup><tbody><tr><td colspan="3" align="center"><div class="literallayout"><p><br> + </p><div class="table"><a name="id2941469"></a><p class="title"><b>Table�9.6.�</b></p><table border="1"><colgroup><col align="center"><col align="center"><col align="center"></colgroup><tbody><tr><td colspan="3" align="center"><div class="literallayout"><p><br> <span class="bold"><b>A</b></span><br> <tt>object_id=10</tt><br> <span class="emphasis"><em>readable�by�Joe</em></span><br> @@ -228,11 +228,11 @@ <tt>object_id=60</tt><br> security_inherit_p�=�'f'<br> <span class="emphasis"><em>not�readable�by�Joe</em></span><br> - ������</p></div></td></tr></tbody></table></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-tedious-privilege-hierarchy"></a>Privilege Hierarchy</h3></div></div><p> + ������</p></div></td></tr></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-tedious-privilege-hierarchy"></a>Privilege Hierarchy</h3></div></div><p> Privileges are also organized hierarchically. In addition to the five main system privileges defined in the ACS Kernel data model, application developers may define their own. For instance, the Bboard package defines the following privileges: - </p><div class="table"><p class="title"><b>Table 9.7. </b></p><table border="1"><colgroup><col align="center"></colgroup><thead><tr><th align="center">privilege</th></tr></thead><tbody><tr><td align="center">create_category</td></tr><tr><td align="center">create_forum</td></tr><tr><td align="center">create_message</td></tr><tr><td align="center">delete_category</td></tr><tr><td align="center">delete_forum</td></tr><tr><td align="center">delete_message</td></tr><tr><td align="center">moderate_forum</td></tr><tr><td align="center">read_category</td></tr><tr><td align="center">read_forum</td></tr><tr><td align="center">read_message</td></tr><tr><td align="center">write_category</td></tr><tr><td align="center">write_forum</td></tr><tr><td align="center">write_message</td></tr></tbody></table></div><p> + </p><div class="table"><a name="id2941740"></a><p class="title"><b>Table�9.7.�</b></p><table border="1"><colgroup><col align="center"></colgroup><thead><tr><th align="center">privilege</th></tr></thead><tbody><tr><td align="center">create_category</td></tr><tr><td align="center">create_forum</td></tr><tr><td align="center">create_message</td></tr><tr><td align="center">delete_category</td></tr><tr><td align="center">delete_forum</td></tr><tr><td align="center">delete_message</td></tr><tr><td align="center">moderate_forum</td></tr><tr><td align="center">read_category</td></tr><tr><td align="center">read_forum</td></tr><tr><td align="center">read_message</td></tr><tr><td align="center">write_category</td></tr><tr><td align="center">write_forum</td></tr><tr><td align="center">write_message</td></tr></tbody></table></div><p> By defining parent-child relationship between privileges, the OpenACS data model makes it easier for developers to manage permissions. Instead of granting a user explicit <span class="emphasis"><em>read</em></span>, <span class="emphasis"><em>write</em></span>, <span class="emphasis"><em>delete</em></span>, @@ -241,7 +241,7 @@ privilege to which the first four privileges are tied. To give a more detailed example, the Bboard privileges are structured as follows. - </p><div class="table"><p class="title"><b>Table 9.8. </b></p><table border="1"><colgroup><col align="center"><col align="center"><col align="center"><col align="center"><col align="center"><col align="center"><col align="center"><col align="center"><col align="center"><col align="center"><col align="center"><col align="center"><col align="center"></colgroup><tbody><tr><td colspan="13" align="center">admin</td></tr><tr><td colspan="3" align="center">create</td><td colspan="3" align="center">delete</td><td colspan="3" align="center">read</td><td colspan="3" align="center">write</td><td rowspan="2" align="center" valign="middle">moderate forum</td></tr><tr><td align="center">create category</td><td align="center">create forum</td><td align="center">create message</td><td align="center">delete category</td><td align="center">delete forum</td><td align="center">delete message</td><td align="center">read category</td><td align="center">read forum</td><td align="center">read message</td><td align="center">write category</td><td align="center">write forum</td><td align="center">write message</td></tr></tbody></table></div><p> + </p><div class="table"><a name="id2941925"></a><p class="title"><b>Table�9.8.�</b></p><table border="1"><colgroup><col align="center"><col align="center"><col align="center"><col align="center"><col align="center"><col align="center"><col align="center"><col align="center"><col align="center"><col align="center"><col align="center"><col align="center"><col align="center"></colgroup><tbody><tr><td colspan="13" align="center">admin</td></tr><tr><td colspan="3" align="center">create</td><td colspan="3" align="center">delete</td><td colspan="3" align="center">read</td><td colspan="3" align="center">write</td><td rowspan="2" align="center" valign="middle">moderate forum</td></tr><tr><td align="center">create category</td><td align="center">create forum</td><td align="center">create message</td><td align="center">delete category</td><td align="center">delete forum</td><td align="center">delete message</td><td align="center">read category</td><td align="center">read forum</td><td align="center">read message</td><td align="center">write category</td><td align="center">write forum</td><td align="center">write message</td></tr></tbody></table></div><p> The parent-child relationship between privileges is represented in the <tt>acs_privilege_hierarchy</tt> table: </p><a name="acs_privilege_hierarchy"></a><pre class="programlisting"> @@ -284,10 +284,10 @@ reasonably small, there is no pressing need to cache the flattened ansector-descendant view of the privilege hierarchy in a specially maintained table like it is done in the case of the context hierarchy. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-tedious-party-hierarchy"></a>Party Hierarchy</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-tedious-party-hierarchy"></a>Party Hierarchy</h3></div></div><p> Now for the third hierarchy playing a promiment role in the permission system. The party data model is set up as follows. - </p><div class="table"><p class="title"><b>Table 9.9. </b></p><table border="1"><colgroup><col align="center"><col align="center"></colgroup><tbody><tr><td colspan="2" align="center"><a href="permissions-tediously-explained.html#tedious-parties">parties</a></td></tr><tr><td align="center"><a href="permissions-tediously-explained.html#persons">persons</a></td><td rowspan="2" align="center" valign="top"><a href="permissions-tediously-explained.html#groups">groups</a></td></tr><tr><td align="center"><a href="permissions-tediously-explained.html#users">users</a></td></tr></tbody></table></div><a name="tedious-parties"></a><pre class="programlisting"> + </p><div class="table"><a name="id2942279"></a><p class="title"><b>Table�9.9.�</b></p><table border="1"><colgroup><col align="center"><col align="center"></colgroup><tbody><tr><td colspan="2" align="center"><a href="permissions-tediously-explained.html#tedious-parties">parties</a></td></tr><tr><td align="center"><a href="permissions-tediously-explained.html#persons">persons</a></td><td rowspan="2" align="center" valign="top"><a href="permissions-tediously-explained.html#groups">groups</a></td></tr><tr><td align="center"><a href="permissions-tediously-explained.html#users">users</a></td></tr></tbody></table></div><a name="tedious-parties"></a><pre class="programlisting"> create table <span class="bold"><b>parties</b></span> ( party_id not null @@ -371,7 +371,7 @@ </pre><p> The <tt><a href="permissions-tediously-explained.html#acs_rels">acs_rels</a></tt> table entries would look like so: - </p><div class="table"><p class="title"><b>Table 9.10. </b></p><table border="1"><colgroup><col align="center"><col align="center"><col align="center"></colgroup><thead><tr><th align="center"><tt>rel_type</tt></th><th align="center"><tt>object_one</tt></th><th align="center"><tt>object_two</tt></th></tr></thead><tbody><tr><td align="center"> + </p><div class="table"><a name="id2942697"></a><p class="title"><b>Table�9.10.�</b></p><table border="1"><colgroup><col align="center"><col align="center"><col align="center"></colgroup><thead><tr><th align="center"><tt>rel_type</tt></th><th align="center"><tt>object_one</tt></th><th align="center"><tt>object_two</tt></th></tr></thead><tbody><tr><td align="center"> membership_rel </td><td align="center"> Pranksters @@ -393,7 +393,7 @@ Another way of building up groups is by adding subgroups. Suppose we define <span class="emphasis"><em>Merry Pranksters</em></span> and <span class="emphasis"><em>Sad Pranksters</em></span> as subgroups of <span class="emphasis"><em>Pranksters</em></span>. We say that the <span class="emphasis"><em>Pranksters</em></span> group - is <span class="strong"><em>composed</em></span> of + is <span class="strong">composed</span> of groups <span class="emphasis"><em>Merry Pranksters</em></span> and <span class="emphasis"><em>Sad Pranksters</em></span>. This information is stored in the <tt><a href="permissions-tediously-explained.html#acs_rels">acs_rels</a></tt> and <tt>composition_rels</tt> tables. @@ -406,7 +406,7 @@ </pre><p> The relevant entries in the <tt><a href="permissions-tediously-explained.html#acs_rels">acs_rels</a></tt> look like so. - </p><div class="table"><p class="title"><b>Table 9.11. </b></p><table border="1"><colgroup><col align="center"><col align="center"><col align="center"></colgroup><thead><tr><th align="center"><tt>rel_type</tt></th><th align="center"><tt>object_one</tt></th><th align="center"><tt>object_two</tt></th></tr></thead><tbody><tr><td align="center"> + </p><div class="table"><a name="id2942936"></a><p class="title"><b>Table�9.11.�</b></p><table border="1"><colgroup><col align="center"><col align="center"><col align="center"></colgroup><thead><tr><th align="center"><tt>rel_type</tt></th><th align="center"><tt>object_one</tt></th><th align="center"><tt>object_two</tt></th></tr></thead><tbody><tr><td align="center"> composition_rel </td><td align="center"> Pranksters @@ -535,7 +535,7 @@ membership relationship resolution can be computed trivially with no hierarchical queries involved. There is no need to keep the view in a denormalized table, unless doing so results in substantial performance gains. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-tedious-putting-all-together"></a>Putting It All Together</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-tedious-putting-all-together"></a>Putting It All Together</h3></div></div><p> Security information is queried by calling the <tt>acs_permission.permission_p</tt> function in OpenACS 4.x. </p><pre class="programlisting"> @@ -617,7 +617,7 @@ </pre><p> Note that in the above example, <tt>acs_permissions</tt> had only one entry that needed to be deleted: - </p><div class="table"><p class="title"><b>Table 9.12. </b></p><table border="1"><colgroup><col align="center"><col align="center"><col align="center"></colgroup><thead><tr><th align="center"><tt>object_id</tt></th><th align="center"><tt>grantee_id</tt></th><th align="center"><tt>privilege</tt></th></tr></thead><tbody><tr><td align="center"> + </p><div class="table"><a name="id2943645"></a><p class="title"><b>Table�9.12.�</b></p><table border="1"><colgroup><col align="center"><col align="center"><col align="center"></colgroup><thead><tr><th align="center"><tt>object_id</tt></th><th align="center"><tt>grantee_id</tt></th><th align="center"><tt>privilege</tt></th></tr></thead><tbody><tr><td align="center"> default_context </td><td align="center"> registered_users @@ -627,7 +627,7 @@ The above script would never get around to deleting this entry because it had to loop through a gazillion rows in the humongous <tt>acs_object_party_privilege_map</tt> view. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-tedious-appendix"></a>Appendix: Various View Definitions</h3></div></div><a name="acs_object_party_privilege_map"></a><pre class="programlisting"> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-tedious-appendix"></a>Appendix: Various View Definitions</h3></div></div><a name="acs_object_party_privilege_map"></a><pre class="programlisting"> create or replace view <span class="bold"><b>acs_object_party_privilege_map</b></span> as select @@ -690,4 +690,4 @@ container_id from <a href="permissions-tediously-explained.html#group_member_index">group_member_index</a>; - </pre></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parties.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="object-identity.html">Next</a></td></tr><tr><td width="40%" align="left">Parties in OpenACS 4.6.2 </td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right"> Object Identity</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/permissions-tediously-explained.html#comments">View comments on this page at openacs.org</a></center></body></html> + </pre></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parties.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="object-identity.html">Next</a></td></tr><tr><td width="40%" align="left">Parties in OpenACS 4.6.2&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right">&nbsp;Object Identity</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/permissions-tediously-explained.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/permissions.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/permissions.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/permissions.html 7 Apr 2003 16:59:26 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/permissions.html 15 Apr 2003 17:03:03 -0000 1.8.2.5 @@ -1,8 +1,8 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Groups, Context, Permissions</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter 9. Development Reference"><link rel="previous" href="templates.html" title="Using Templates in OpenACS 4.6.2"><link rel="next" href="subsites.html" title="Writing OpenACS 4.6.2 Application Pages"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="templates.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Development Reference</th><td width="20%" align="right"> <a accesskey="n" href="subsites.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="permissions"></a>Groups, Context, Permissions</h2></div></div><div class="authorblurb"><p><p>By <a href="mailto:psu@arsdigita.com" target="_top">Pete Su</a></p><br> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Groups, Context, Permissions</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter�9.�Development Reference"><link rel="previous" href="templates.html" title="Using Templates in OpenACS 4.6.2"><link rel="next" href="subsites.html" title="Writing OpenACS 4.6.2 Application Pages"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="templates.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�9.�Development Reference</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="subsites.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="permissions"></a>Groups, Context, Permissions</h2></div></div><div class="authorblurb"><p><p>By <a href="mailto:psu@arsdigita.com" target="_top">Pete Su</a></p><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-overview"></a>Overview</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-overview"></a>Overview</h3></div></div><p> The OpenACS 4.6.2 Permissions system allows developers and administrators to set access control policies at the object level, that is, any application or system object represented by a row in the @@ -21,7 +21,7 @@ together into larger security domains. The rest of this document will talk about each of these parts, and how they fit together with the permissions system. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-groups"></a>Groups</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-groups"></a>Groups</h3></div></div><p> In OpenACS 3.x, the groups system allowed developers and administrators to define simple groupings of users. Each group had a human readable name and unique ID, and there was a single mapping table that mapped users @@ -104,7 +104,7 @@ The full details of the groups data model is beyond the scope of this tutorial - I've just given you what you need to understand how permissions work. For further detail, you can look at <a href="parties.html">Parties in OpenACS 4</a> or <a href="groups-design.html">OpenACS 4 Groups Design</a>. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-permissions"></a>Permissions</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-permissions"></a>Permissions</h3></div></div><p> NOTE: Much more detailed information about the permissions system and how to use it is available in the <a href="permissions-tediously-explained.html">OpenACS Permissions Tediously Explained</a> document. @@ -164,12 +164,12 @@ to every object individually: in many cases, we'd prefer controlling permissions to large groups of objects in the site, all at once. We use contexts to achieve this goal. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-object-context"></a>Object Context</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-object-context"></a>Object Context</h3></div></div><p> In OpenACS 4.6.2, an object context is a generalization of the scoping mechanism introduced in OpenACS 3.x. "Scoping" and "scope" are terms best explained by example: consider some hypothetical rows in the <tt>address_book</tt> table: -</p><blockquote class="blockquote"><div class="informaltable"><table border="1"><colgroup><col><col><col><col><col></colgroup><thead><tr><th>...</th><th><tt>scope</tt></th><th><tt>user_id</tt></th><th><tt>group_id</tt></th><th>...</th></tr></thead><tbody><tr><td>...</td><td><tt>user</tt></td><td><tt>123</tt></td><td>�</td><td>...</td></tr><tr><td>...</td><td><tt>group</tt></td><td>�</td><td><tt>456</tt></td><td>...</td></tr><tr><td>...</td><td><tt>public</tt></td><td>�</td><td>�</td><td>...</td></tr></tbody></table></div></blockquote><p> +</p><div class="blockquote"><blockquote class="blockquote"><div class="informaltable"><table border="1"><colgroup><col><col><col><col><col></colgroup><thead><tr><th>...</th><th><tt>scope</tt></th><th><tt>user_id</tt></th><th><tt>group_id</tt></th><th>...</th></tr></thead><tbody><tr><td>...</td><td><tt>user</tt></td><td><tt>123</tt></td><td>�</td><td>...</td></tr><tr><td>...</td><td><tt>group</tt></td><td>�</td><td><tt>456</tt></td><td>...</td></tr><tr><td>...</td><td><tt>public</tt></td><td>�</td><td>�</td><td>...</td></tr></tbody></table></div></blockquote></div><p> The first row represents an entry in User 123's personal address book, the second row represents an entry in User Group 456's shared address book, and the third row represents an entry in the site's public @@ -211,7 +211,7 @@ hierarchy that matches the structure they need for access control in their application. The following picture shows a typical context hierarchy for a hypothetical site: -</p><blockquote class="blockquote"><p><img src="images/context-hierarchy.gif"></p></blockquote><p> +</p><div class="blockquote"><blockquote class="blockquote"><div><img src="images/context-hierarchy.gif"></div></blockquote></div><p> A few things to note here. First, the top two contexts in the picture are "magic" in some sense because they are created by default by OpenACS for a specific purpose. The object <tt>default_context</tt> @@ -224,7 +224,7 @@ some object has no permissions attached to it, and its value for <tt>security_inherit_p</tt> is <tt>'f'</tt>, or <tt>context_id</tt> is null, then we use this context by default. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-example"></a>Example</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-example"></a>Example</h3></div></div><p> At this point, you should either go and download the Notes example code from the package repository, or check it out of the ArsDigita CVS @@ -344,7 +344,7 @@ implement a user interface that allowed the user to explicitly attach permissions to notes that she wanted to make public or whatever. But that's beyond the scope of this example. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="permissions-summary"></a>Summary</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="permissions-summary"></a>Summary</h3></div></div><p> OpenACS 4.6.2 defines three separate mechanisms for specifying access control in applications. The Groups data model allows you to define hierarchical organizations of users and groups of users. The Permissions @@ -355,4 +355,4 @@ </p><p> In the next section, we'll look at a more complex page for adding and editing notes, and discuss these issues further. -</p><p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="templates.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="subsites.html">Next</a></td></tr><tr><td width="40%" align="left">Using Templates in OpenACS 4.6.2 </td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right"> Writing OpenACS 4.6.2 Application Pages</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/permissions.html#comments">View comments on this page at openacs.org</a></center></body></html> +</p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="templates.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="subsites.html">Next</a></td></tr><tr><td width="40%" align="left">Using Templates in OpenACS 4.6.2&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right">&nbsp;Writing OpenACS 4.6.2 Application Pages</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/permissions.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/postgres.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/postgres.html,v diff -u -r1.6.2.4 -r1.6.2.5 --- openacs-4/packages/acs-core-docs/www/postgres.html 7 Apr 2003 16:59:26 -0000 1.6.2.4 +++ openacs-4/packages/acs-core-docs/www/postgres.html 15 Apr 2003 17:03:03 -0000 1.6.2.5 @@ -1,5 +1,5 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Install PostgreSQL 7.2.3</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="unix-install.html" title="Chapter 3. Installing on Unix/Linux"><link rel="previous" href="oracle.html" title="Install Oracle 8.1.7"><link rel="next" href="aolserver.html" title="Install AOLserver 3.3+ad13"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="oracle.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Installing on Unix/Linux</th><td width="20%" align="right"> <a accesskey="n" href="aolserver.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="postgres"></a>Install PostgreSQL 7.2.3</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Install PostgreSQL 7.2.3</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="unix-install.html" title="Chapter�3.�Installing on Unix/Linux"><link rel="previous" href="oracle.html" title="Install Oracle 8.1.7"><link rel="next" href="aolserver.html" title="Install AOLserver 3.3+ad13"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="oracle.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�3.�Installing on Unix/Linux</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="aolserver.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="postgres"></a>Install PostgreSQL 7.2.3</h2></div></div><div class="authorblurb"><p> by <a href="mailto:vinod@kurup.com" target="_top">Vinod Kurup</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. @@ -42,7 +42,7 @@ Change to the postgres user and run <tt>./configure</tt> to set the compilation options automatically. This is the point at which you can configure PostgreSQL in various ways. For example, if you want to enable - Unicode<a class="indexterm" name="id2840312"></a> support, add the flags <tt>--enable-locale</tt> and <tt>--enable-multibyte</tt>. If you want to see what the other possibilities are, run <tt>./configure --help</tt>. + Unicode<a class="indexterm" name="id2886815"></a> support, add the flags <tt>--enable-locale</tt> and <tt>--enable-multibyte</tt>. If you want to see what the other possibilities are, run <tt>./configure --help</tt>. </p><pre class="screen">[root@yourserver src]# <b><tt>su - postgres</tt></b> [postgres@yourserver pgsql]$<b><tt> cd /usr/local/src/postgresql-7.2.3</tt></b> [postgres@yourserver postgresql-7.2.3]$ <b><tt>./configure</tt></b> @@ -233,7 +233,7 @@ start on runlevel 2 unless you alter the above commands a little. This usually isn't a problem as Red Hat defaults to runlevel 3) - </p></li></ol></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="install-postgres-moreinfo"></a>Learn more about PostgreSQL</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p> + </p></li></ol></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="install-postgres-moreinfo"></a>Learn more about PostgreSQL</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p> <a href="http://www.postgresql.org/idocs/" target="_top">Official PostgreSQL Docs</a> @@ -252,4 +252,4 @@ <a href="http://www.linuxjournal.com/article.php?sid=4791" target="_top">PostgreSQL Performance Tuning</a> - </p></li></ul></div></div><p><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="oracle.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="aolserver.html">Next</a></td></tr><tr><td width="40%" align="left">Install Oracle 8.1.7 </td><td width="20%" align="center"><a accesskey="u" href="unix-install.html">Up</a></td><td width="40%" align="right"> Install AOLserver 3.3+ad13</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/postgres.html#comments">View comments on this page at openacs.org</a></center></body></html> + </p></li></ul></div></div><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="oracle.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="aolserver.html">Next</a></td></tr><tr><td width="40%" align="left">Install Oracle 8.1.7&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="unix-install.html">Up</a></td><td width="40%" align="right">&nbsp;Install AOLserver 3.3+ad13</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/postgres.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/programming-with-aolserver.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/programming-with-aolserver.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/programming-with-aolserver.html 7 Apr 2003 16:59:26 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/programming-with-aolserver.html 15 Apr 2003 17:03:03 -0000 1.8.2.5 @@ -1,10 +1,10 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Programming with AOLserver</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter 9. Development Reference"><link rel="previous" href="object-identity.html" title="Object Identity"><link rel="next" href="eng-standards.html" title="Chapter 10. Engineering Standards"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="object-identity.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Development Reference</th><td width="20%" align="right"> <a accesskey="n" href="eng-standards.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="programming-with-aolserver"></a>Programming with AOLserver</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Programming with AOLserver</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter�9.�Development Reference"><link rel="previous" href="object-identity.html" title="Object Identity"><link rel="next" href="eng-standards.html" title="Chapter�10.�Engineering Standards"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="object-identity.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�9.�Development Reference</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="eng-standards.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="programming-with-aolserver"></a>Programming with AOLserver</h2></div></div><div class="authorblurb"><p> by <a href="mailto:michael@arsdigita.com" target="_top">Michael Yoon</a>, <a href="mailto:jsalz@mit.edu" target="_top">Jon Salz</a> and <a href="http://www.pinds.com/lars" target="_top">Lars Pind</a>. <br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="programming-aolserver-global"></a>The <tt>global</tt> command</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="programming-aolserver-global"></a>The <tt>global</tt> command</h3></div></div><p> When using AOLserver, remember that there are effectively <span class="emphasis"><em>two</em></span> types of global namespace, not one: </p><div class="orderedlist"><ol type="1"><li><p><span class="emphasis"><em>Server</em></span>-global: As you'd expect, there is @@ -27,7 +27,7 @@ complicate) our use of script-global variables dramatically, which would then be better described as <span class="emphasis"><em>thread</em></span>-global variables. Given AOLserver's behaviour, however, "script-global" is a more -appropriate term.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="programming-aolserver-sched-procs"></a>Threads and Scheduled Procedures</h3></div></div><p> +appropriate term.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="programming-aolserver-sched-procs"></a>Threads and Scheduled Procedures</h3></div></div><p> <tt>ns_schedule_proc</tt> and <tt>ad_schedule_proc</tt> each take a <tt>-thread</tt> flag to cause a scheduled procedure to run asychronously, in its own thread. It almost always seems like a good idea to @@ -40,11 +40,11 @@ time</em></span> the task is executed - and it is a very expensive process that should not be taken lightly!</p><p>The moral: if you have a lightweight scheduled procedure which runs frequently, don't use the <tt>-thread</tt> -switch.</p><blockquote class="blockquote"><p><span class="emphasis"><em>Note also that thread is initialized with a copy of what was +switch.</p><div class="blockquote"><blockquote class="blockquote"><p><span class="emphasis"><em>Note also that thread is initialized with a copy of what was installed during server startup, so if the procedure table have changed since startup (e.g. using the <a href="apm-design.html" title="OpenACS 4.6.2 Package Manager Design">APM</a> watch facility), that will not be reflected in the scheduled -thread.</em></span></p></blockquote></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="programming-aolserver-return"></a>Using <tt>return</tt></h3></div></div><p> +thread.</em></span></p></blockquote></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="programming-aolserver-return"></a>Using <tt>return</tt></h3></div></div><p> The <tt>return</tt> command in Tcl returns control to the caller procedure. This definition allows nested procedures to work properly. However, this definition also means that nested procedures cannot use <tt>return</tt> to @@ -61,7 +61,7 @@ executed because the thread was not stopped. Note that <tt>return -code return</tt> can be used in circumstances where the procedure will only be called from two levels deep. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="programming-aolserver-more-values"></a>Returning More Than One Value From a Function</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="programming-aolserver-more-values"></a>Returning More Than One Value From a Function</h3></div></div><p> Many functions have a single return value. For instance, <a href="/api-doc/proc-view?proc=empty%5fstring%5fp" target="_top"><tt>empty_string_p</tt></a> returns a number: 1 or 0. Other functions need to return a composite value. For instance, consider a function that looks up a user's name and email @@ -113,11 +113,11 @@ arrays internally to build up some value, there are many entries in the array, and you're planning on iterating over the proc many times. In this case, pass-by-value is expensive, and you'd use pass-by-reference. -</p><blockquote class="blockquote"><p><span class="emphasis"><em>The transformation of the array into a list and back to an +</p><div class="blockquote"><blockquote class="blockquote"><p><span class="emphasis"><em>The transformation of the array into a list and back to an array takes, in our test environment, approximately 10 microseconds per entry of 100 character's length. Thus you can process about 100 entries per milisecond. The time depends almost completely on the number of entries, and -almost not at all on the size of the entries.</em></span></p></blockquote><p> +almost not at all on the size of the entries.</em></span></p></blockquote></div><p> You implement pass-by-reference in Tcl by taking the name of an array as an argument and <tt>upvar</tt> it. </p><pre class="programlisting"> @@ -212,4 +212,4 @@ perform lookup by name, they perform a linear lookup, whereas arrays use a hash table, so <tt>ns_set</tt>s are slower than arrays when the number of entries is large. -</p><p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="object-identity.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="eng-standards.html">Next</a></td></tr><tr><td width="40%" align="left">Object Identity </td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right"> Chapter 10. Engineering Standards</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/programming-with-aolserver.html#comments">View comments on this page at openacs.org</a></center></body></html> +</p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="object-identity.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="eng-standards.html">Next</a></td></tr><tr><td width="40%" align="left">Object Identity&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right">&nbsp;Chapter�10.�Engineering Standards</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/programming-with-aolserver.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/psgml-mode.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/psgml-mode.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/psgml-mode.html 7 Apr 2003 16:59:26 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/psgml-mode.html 15 Apr 2003 17:03:03 -0000 1.8.2.5 @@ -1,21 +1,21 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Using PSGML mode in Emacs</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="eng-standards.html" title="Chapter 10. Engineering Standards"><link rel="previous" href="docbook-primer.html" title="OpenACS Documentation Guide"><link rel="next" href="filename.html" title="Detailed Design Documentation Template"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="docbook-primer.html">Prev</a> </td><th width="60%" align="center">Chapter 10. Engineering Standards</th><td width="20%" align="right"> <a accesskey="n" href="filename.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="psgml-mode"></a>Using PSGML mode in Emacs</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Using PSGML mode in Emacs</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="eng-standards.html" title="Chapter�10.�Engineering Standards"><link rel="previous" href="docbook-primer.html" title="OpenACS Documentation Guide"><link rel="next" href="filename.html" title="Detailed Design Documentation Template"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="docbook-primer.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�10.�Engineering Standards</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="filename.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="psgml-mode"></a>Using PSGML mode in Emacs</h2></div></div><div class="authorblurb"><p> By <a href="mailto:lutter@arsdigita.com" target="_top">David Lutterkort</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="psgml-mode-whatisit"></a>What it is</h3></div></div><p>PSGML Mode is a mode for editing, umm, SGML and XML documents in emacs. It + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="psgml-mode-whatisit"></a>What it is</h3></div></div><p>PSGML Mode is a mode for editing, umm, SGML and XML documents in emacs. It can parse a DTD and help you insert the right tags in the right place, knows about tags' attributes and can tell you in which contexts a tag can be used. <span class="emphasis"><em>If</em></span> you give it the right DTD, that is. But even without a DTD, it can save you some typing since pressing <tt>C-c/</tt> will close an open -tag automatically.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="psgml-mode-getit"></a>Where to get it</h3></div></div><p>Most newer emacsen come with PSGML mode preinstalled. You can find out +tag automatically.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="psgml-mode-getit"></a>Where to get it</h3></div></div><p>Most newer emacsen come with PSGML mode preinstalled. You can find out whether your emacs has it with the <tt>locate-library</tt> command. In Emacs, type <tt>M-x locate-library</tt> and enter <tt>psgml</tt>. Emacs will tell you if it found it or not.</p><p>If you don't have PSGML preinstalled in your Emacs, there are two things you can do:</p><div class="orderedlist"><ol type="1"><li><p>On Linux: Get the <a href="ftp://sourceware.cygnus.com:/pub/docbook-tools/docware/RPMS/noarch/psgml-1.2.1-1.noarch.rpm" target="_top"> psgml rpm</a> from <a href="http://sources.redhat.com/docbook-tools/" target="_top">RedHat's docbook-tools</a> and install it as usual.</p></li><li><p>On other systems: Get the tarball from the <a href="http://www.lysator.liu.se/~lenst/about_psgml/" target="_top">PSGML Website.</a> -Unpack it and follow the install instructions.</p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="psgml-mode-catalogs"></a>Using <tt>CATALOG</tt> files</h3></div></div><p>The easiest way to teach PSGML mode about a DTD is by adding it to your +Unpack it and follow the install instructions.</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="psgml-mode-catalogs"></a>Using <tt>CATALOG</tt> files</h3></div></div><p>The easiest way to teach PSGML mode about a DTD is by adding it to your own <tt>CATALOG</tt>. Here is an example of how you can set that up for the Docbook XML DTD.</p><div class="orderedlist"><ol type="1"><li><p>Get the <a href="http://docbook.org/xml/index.html" target="_top">Docbook XML DTD</a> zip archive from <a href="http://docbook.org/" target="_top">docbook.org</a></p></li><li><p>Go somewhere in your working directory and do </p><pre class="programlisting"> @@ -31,7 +31,7 @@ DTD's without changing your emacs settings. (<span class="emphasis"><em>How about that HTML 4.01 DTD you always wanted to get from <a href="http://www.w3.org/TR/html4/" target="_top">W3C</a> ? The DTD is in the zip archives and tarballs available on the site.</em></span></p></li></ol></div><p>That's it. Now you are ready to tell emacs all about PSGML mode and -that funky <tt>CATALOG</tt></p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="psgml-mode-tell-emacs"></a>What to tell emacs</h3></div></div><p>If you installed PSGML mode in a non-standard location, e.g., somewhere in +that funky <tt>CATALOG</tt></p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="psgml-mode-tell-emacs"></a>What to tell emacs</h3></div></div><p>If you installed PSGML mode in a non-standard location, e.g., somewhere in your home directory, you need to add this to the <tt>load-path</tt> by adding this line to your <tt>.emacs</tt> file:</p><pre class="programlisting"> (add-to-list 'load-path "/some/dir/that/contains/psgml.elc") @@ -64,7 +64,7 @@ (define-key sgml-mode-map "\C-c\C-x\C-i" 'sgml-general-dtd-info) (define-key sgml-mode-map "\C-c\C-x\C-t" 'sgml-describe-entity)))) -</pre></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="psgml-mode-doctype"></a>What is a <tt>DOCTYPE</tt> ?</h3></div></div><p>All SGML and XML documents that should conform to a DTD have to declare a +</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="psgml-mode-doctype"></a>What is a <tt>DOCTYPE</tt> ?</h3></div></div><p>All SGML and XML documents that should conform to a DTD have to declare a doctype. For the docbook XML, all your <tt>.xml</tt> files whould start with the line</p><pre class="programlisting"> <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "docbookx.dtd"> @@ -81,7 +81,7 @@ </pre><p>Which says that the parent of this document can be found in the file <tt>top.xml</tt>, that the element in the parent that will enclose the current document is a <tt>book</tt> and that the current file's topmost -element is a <tt>sect1</tt>.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="psgml-mode-usage"></a>How to use it</h3></div></div><p>Of course, you should read the emacs texinfo pages that come with PSGML +element is a <tt>sect1</tt>.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="psgml-mode-usage"></a>How to use it</h3></div></div><p>Of course, you should read the emacs texinfo pages that come with PSGML mode from start to finish. Barring that, here are some handy commands:</p><div class="informaltable"><table border="0"><colgroup><col><col></colgroup><thead><tr><th>Key</th><th>Command</th></tr></thead><tbody><tr><td><tt>C-c C-e</tt></td><td>Insert an element. Uses completion and only lets you insert elements that are valid</td></tr><tr><td><tt>C-c C-a</tt></td><td>Edit attributes of enclosing element.</td></tr><tr><td><tt>C-c C-x C-i</tt></td><td>Show information about the document's DTD.</td></tr><tr><td><tt>C-c C-x C-e</tt></td><td>Describe element. Shows for one element which elements can be parents, -what its contents can be and lists its attributes.</td></tr></tbody></table></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="psgml-mode-reading"></a>Further reading</h3></div></div><p>Start with the <a href="docbook-primer.html">OpenACS Documentation Guide</a></p><p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="docbook-primer.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="filename.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS Documentation Guide </td><td width="20%" align="center"><a accesskey="u" href="eng-standards.html">Up</a></td><td width="40%" align="right"> Detailed Design Documentation Template</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/psgml-mode.html#comments">View comments on this page at openacs.org</a></center></body></html> +what its contents can be and lists its attributes.</td></tr></tbody></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="psgml-mode-reading"></a>Further reading</h3></div></div><p>Start with the <a href="docbook-primer.html">OpenACS Documentation Guide</a></p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="docbook-primer.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="filename.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS Documentation Guide&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="eng-standards.html">Up</a></td><td width="40%" align="right">&nbsp;Detailed Design Documentation Template</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/psgml-mode.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/release-notes.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/release-notes.html,v diff -u -r1.9.2.5 -r1.9.2.6 --- openacs-4/packages/acs-core-docs/www/release-notes.html 3 Apr 2003 19:30:56 -0000 1.9.2.5 +++ openacs-4/packages/acs-core-docs/www/release-notes.html 15 Apr 2003 17:03:03 -0000 1.9.2.6 @@ -1,5 +1,5 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS 4.6.2 Release Notes</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="general-documents.html" title="Chapter 1. High level information: What is OpenACS?"><link rel="previous" href="openacs-overview.html" title="Overview"><link rel="next" href="acs-admin.html" title="Part II. Administrator's Guide"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="openacs-overview.html">Prev</a> </td><th width="60%" align="center">Chapter 1. High level information: What is OpenACS?</th><td width="20%" align="right"> <a accesskey="n" href="acs-admin.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="release-notes"></a>OpenACS 4.6.2 Release Notes</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS 4.6.2 Release Notes</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="general-documents.html" title="Chapter�1.�High level information: What is OpenACS?"><link rel="previous" href="openacs-overview.html" title="Overview"><link rel="next" href="acs-admin.html" title="Part�II.�Administrator's Guide"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="openacs-overview.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�1.�High level information: What is OpenACS?</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="acs-admin.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="release-notes"></a>OpenACS 4.6.2 Release Notes</h2></div></div><div class="authorblurb"><p> by <a href="mailto:dhogaza@pacifier.com" target="_top">Don Baccus</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. @@ -30,15 +30,15 @@ problems. </p><p> You may want to begin by reading our installation documentation for - <a href="unix-install.html" title="Chapter 3. Installing on Unix/Linux">Chapter 3</a>. Note that the Windows documentation is + <a href="unix-install.html" title="Chapter�3.�Installing on Unix/Linux">Chapter�3</a>. Note that the Windows documentation is not current for OpenACS 4.6.2, but an alternative is to use John Sequeira's <a href="http://www.pobox.com/~johnseq/projects/oasisvm/" target="_top">Oasis VM project</a>. </p><p> After installation, the full documentation set can be found by visiting http://[your-host]/doc. Not all pieces are updated for OpenACS 4.6.2 at this moment. - </p><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="release-notes-sws"></a>Site Wide Searching</h3></div></div><p> + </p><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="release-notes-sws"></a>Site Wide Searching</h3></div></div><p> If you're using Oracle 8.1.6 or 8.1.7 Enterprise Edition you may want to uncomment the SQL that causes InterMedia to keep online searching online while indexing. The feature doesn't exist in Standard Edition @@ -53,9 +53,15 @@ If you're using PostgreSQL be sure to read the documentation on installing the Open FTS driver for OpenACS. It's included in the package as a text file and is also summarized at the end of the - installation documentation in the section, <a href="openacs.html#install-next-openfts" title="">4</a>. As with the Oracle version, there + installation documentation in the section, <a href="openacs.html#install-next-openfts">4</a>. As with the Oracle version, there are steps you must take manually in order to get this feature working. - </p></div> - - <p><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="openacs-overview.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="acs-admin.html">Next</a></td></tr><tr><td width="40%" align="left">Overview </td><td width="20%" align="center"><a accesskey="u" href="general-documents.html">Up</a></td><td width="40%" align="right"> Part II. Administrator's Guide</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/release-notes.html#comments">View comments on this page at openacs.org</a></center></body></html> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="release-notes-testing"></a>Testing Notes</h3></div></div><p> + dotLRN 1.0 is an e-learning solution + from MIT based on OpenACS 4.6.2 + The <a href="http://openacs.org/projects/dotlrn/testing/" target="_top">dotLRN 1.0 + testing effort</a> was organized by Bart + Teeuwisse and made use of <a href="http://openacs.org/bugtracker/openacs/" target="_top">the OpenACS Bug + Tracker</a> and <a href="http://dotlrn.collaboraid.net/test" target="_top">OpenACS test + servers</a> hosted by <a href="http://www.collaboraid.biz" target="_top">Collaboraid</a>. + </p></div><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="openacs-overview.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="acs-admin.html">Next</a></td></tr><tr><td width="40%" align="left">Overview&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="general-documents.html">Up</a></td><td width="40%" align="right">&nbsp;Part�II.�Administrator's Guide</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/release-notes.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/request-processor.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/request-processor.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/request-processor.html 7 Apr 2003 16:59:26 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/request-processor.html 15 Apr 2003 17:03:03 -0000 1.8.2.5 @@ -1,14 +1,14 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>The Request Processor</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter 9. Development Reference"><link rel="previous" href="objects.html" title="OpenACS 4.6.2 Data Models and the Object System"><link rel="next" href="db-api.html" title="The OpenACS Database Access API"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="objects.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Development Reference</th><td width="20%" align="right"> <a accesskey="n" href="db-api.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="request-processor"></a>The Request Processor</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>The Request Processor</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter�9.�Development Reference"><link rel="previous" href="objects.html" title="OpenACS 4.6.2 Data Models and the Object System"><link rel="next" href="db-api.html" title="The OpenACS Database Access API"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="objects.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�9.�Development Reference</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="db-api.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="request-processor"></a>The Request Processor</h2></div></div><div class="authorblurb"><p> By Pete Su <br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="rp-overview"></a>Overview</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="rp-overview"></a>Overview</h3></div></div><p> This document is a brief introduction to the OpenACS 4.6.2 Request Processor; more details can be found in the <a href="rp-design.html">OpenACS 4 Request Processor Design</a>. Here we cover the high level concepts behind the system, and implications and usage for the application developer. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="rp-theoldway"></a>The Old Way</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="rp-theoldway"></a>The Old Way</h3></div></div><p> In older versions of the OpenACS, the mapping between URLs and pages was simple. AOLserver, the usual webserver for the OpenACS, would find the appropriate file by appending the server's page-root to the path in @@ -20,9 +20,9 @@ mechanism for the following requirements of larger web services: -</p><div class="itemizedlist"><ul type="opencircle"><li style="list-style-type: opencircle"><p>Support for more flexible mappings from URLs to content - </p></li><li style="list-style-type: opencircle"><p>Robust user authentication - </p></li><li style="list-style-type: opencircle"><p>Page level access control +</p><div class="itemizedlist"><ul type="opencircle"><li style="list-style-type: circle"><p>Support for more flexible mappings from URLs to content + </p></li><li style="list-style-type: circle"><p>Robust user authentication + </p></li><li style="list-style-type: circle"><p>Page level access control </p></li></ul></div><p> @@ -32,13 +32,13 @@ Request Processor, along with the OpenACS Package Manager, centralizes and unifies this functionality, making it more transparent and readily available to developers. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="rp-thenewway"></a>The New Way</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="rp-thenewway"></a>The New Way</h3></div></div><p> The 4.6.2 Request Processor is a global filter and set of Tcl procs that respond to every incoming URL reaching the server. The following diagram summarizes the stages of the request processor assuming a URL request like <tt>http://someserver.com/notes/somepage.adp</tt>. -</p><div class="mediaobject"><img src="images/rp-flow.gif" align="center" longdesc="ld-id2859411.html"><div class="longdesc-link" align="right"><br clear="all"><span style="font-size: 8pt;">[<a href="ld-id2859411.html" target="longdesc">D</a>]</span></div></div><p> +</p><div class="mediaobject"><img src="images/rp-flow.gif" align="center" longdesc="ld-id2920390.html"><div class="longdesc-link" align="right"><br clear="all"><span class="longdesc-link">[<a href="ld-id2920390.html" target="longdesc">D</a>]</span></div></div><p> </p><div class="variablelist"><dl><dt><span class="term">Stage 1: Search Site Map</span></dt><dd><p> The first thing the RP does is to map the given URL to the appropriate @@ -91,7 +91,7 @@ Once the appropriate file is found, it is either served directly if it's static content, or sent to the template system or the standard Tcl interpreter if it's a dynamic page. -</p></dd></dl></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="rp-basicapi"></a>Basic API</h3></div></div><p> +</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="rp-basicapi"></a>Basic API</h3></div></div><p> Once the flow of control reaches a dynamic page, the Request Processor has populated the environment of the request with several pieces of useful information. The RP's environment is accessible through the @@ -153,4 +153,4 @@ </span></dt><dd><p> In a .vuh file, path_info is the trailing part of the URL not matched by the .vuh file. -</p></dd></dl></div><p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="objects.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="db-api.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4.6.2 Data Models and the Object System </td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right"> The OpenACS Database Access API</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/request-processor.html#comments">View comments on this page at openacs.org</a></center></body></html> +</p></dd></dl></div><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="objects.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="db-api.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4.6.2 Data Models and the Object System&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right">&nbsp;The OpenACS Database Access API</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/request-processor.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/requirements-template.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/requirements-template.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/requirements-template.html 7 Apr 2003 16:59:26 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/requirements-template.html 15 Apr 2003 17:03:03 -0000 1.8.2.5 @@ -1,8 +1,8 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>System/Application Requirements Template</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="eng-standards.html" title="Chapter 10. Engineering Standards"><link rel="previous" href="filename.html" title="Detailed Design Documentation Template"><link rel="next" href="eng-standards-versioning.html" title="Release Version Numbering"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="filename.html">Prev</a> </td><th width="60%" align="center">Chapter 10. Engineering Standards</th><td width="20%" align="right"> <a accesskey="n" href="eng-standards-versioning.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="requirements-template"></a>System/Application Requirements Template</h2></div></div><div class="authorblurb"><p><p>By <a href="mailto:youremail@arsdigita.com" target="_top">You</a></p><br> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>System/Application Requirements Template</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="eng-standards.html" title="Chapter�10.�Engineering Standards"><link rel="previous" href="filename.html" title="Detailed Design Documentation Template"><link rel="next" href="eng-standards-versioning.html" title="Release Version Numbering"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="filename.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�10.�Engineering Standards</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="eng-standards-versioning.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="requirements-template"></a>System/Application Requirements Template</h2></div></div><div class="authorblurb"><p><p>By <a href="mailto:youremail@arsdigita.com" target="_top">You</a></p><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-requirements-introduction"></a>Introduction</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-requirements-introduction"></a>Introduction</h3></div></div><p> <span class="emphasis"><em>Briefly explain to the reader what this document is for, whether it records the requirements for a new system, a client application, a toolkit subsystem, etc. Remember your audience: fellow programmers, @@ -11,54 +11,54 @@ everywhere, write clearly and precisely; for requirements documentation, write at a level that any intelligent layperson can understand.</em></span> - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-requirements-vision"></a>Vision Statement</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-requirements-vision"></a>Vision Statement</h3></div></div><p> <span class="emphasis"><em>Very broadly, describe how the system meets a need of a business, group, the OpenACS as a whole, etc. Make sure that technical and non-technical readers alike would understand what the system would do and why it's useful. Whenever applicable, you should explicitly state what the business value of the system is. </em></span> - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-requirements-system-app-overview"></a>System/Application Overview</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-requirements-system-app-overview"></a>System/Application Overview</h3></div></div><p> <span class="emphasis"><em>Discuss the high-level breakdown of the components that make up the system. You can go by functional areas, by the main transactions the system allows, etc. </em></span> </p><p> <span class="emphasis"><em>You should also state the context and dependencies of the system here, e.g. if it's an application-level package for OpenACS 4, briefly describe how it uses kernel services, like permissions or subsites. </em></span> - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-requirements-cases"></a>Use-cases and User-scenarios</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-requirements-cases"></a>Use-cases and User-scenarios</h3></div></div><p> <span class="emphasis"><em>Determine the types or classes of users who would use the system, and what their experience would be like at a high-level. Sketch what their experience would be like and what actions they would take, and how the system would support them.</em></span> - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-requirements-competitive-analysis"></a>Optional: Competitive Analysis</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-requirements-competitive-analysis"></a>Optional: Competitive Analysis</h3></div></div><p> <span class="emphasis"><em>Describe other systems or services that are comparable to what you're building. If applicable, say why your implementation will be superior, where it will match the competition, and where/why it will lack existing best-of-breed capabilities. This section is also in the Design doc, so write about it where you deem most appropriate.</em></span> - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-requirements-links"></a>Related Links</h3></div></div><p>Include all pertinent links to supporting and related material, - such as: </p><div class="itemizedlist"><ul type="disc"><li><p> System/Package "coversheet" - where all documentation for this software is linked off of</p></li><li><p> Design document</p></li><li><p> Developer's guide</p></li><li><p> User's guide</p></li><li><p> Other-cool-system-related-to-this-one document</p></li><li><p> Test plan </p></li><li><p> Competitive system(s)</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-requirements-requirements"></a>Requirements</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-requirements-links"></a>Related Links</h3></div></div><p>Include all pertinent links to supporting and related material, + such as: </p><div class="itemizedlist"><ul type="disc"><li><p> System/Package "coversheet" - where all documentation for this software is linked off of</p></li><li><p> Design document</p></li><li><p> Developer's guide</p></li><li><p> User's guide</p></li><li><p> Other-cool-system-related-to-this-one document</p></li><li><p> Test plan </p></li><li><p> Competitive system(s)</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-requirements-requirements"></a>Requirements</h3></div></div><p> <span class="emphasis"><em>The main course of the document, requirements. Break up the requirements sections (A, B, C, etc.) as needed. Within each section, create a list denominated with unique identifiers that reflect any functional hierarchy present, e.g. 20.5.13. - for the first number, leave generous gaps on the first writing of requirements (e.g. 1, 10, 20, 30, 40, etc.) because you'll want to leave room for any missing key requirements that may arise. </em></span> - </p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em>10.0 A Common Solution</em></span></p><p> + </p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong">10.0 A Common Solution</span></p><p> Programmers and designers should only have to learn a single system that serves as a UI substrate for all the functionally specific modules in the toolkit. - </p><blockquote class="blockquote"><p><span class="strong"><em>10.0.1</em></span></p><p> + </p><div class="blockquote"><blockquote class="blockquote"><p><span class="strong">10.0.1</span></p><p> The system should not make any assumptions about how pages should look or function. - </p><p><span class="strong"><em>10.0.5</em></span></p><p> + </p><p><span class="strong">10.0.5</span></p><p> Publishers should be able to change the default presentation of any module using a single methodology with minimal exposure to code. - </p></blockquote></li></ul></div><p> + </p></blockquote></div></li></ul></div><p> For guidelines writing requirements, take a <a href="http://www.arsdigita.com/ad-sepg/process/requirements-quality.html" target="_top">look at the quality standards</a>, along with a good example, such as <a href="apm-requirements.html">OpenACS 4.6.2 Package Manager Requirements</a>. @@ -74,11 +74,11 @@ suited to handle combinations of inputs. </p></li><li><p> Flowcharts - easy to draw and understand, suited for event and decision driven systems. UML is the industry standard here.</p></li><li><p> Entity-Relationship diagrams - a necessary part of Design documents, sometimes a high-level ER diagram is useful for - requirements as well.</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-requirements-implementation"></a>Optional: Implementation Notes</h3></div></div><p> + requirements as well.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-requirements-implementation"></a>Optional: Implementation Notes</h3></div></div><p> <span class="emphasis"><em>Although in theory coding comes after design, which comes after requirements, we do not, and perhaps should not, always follow such a rigid process (a.k.a. the waterfall lifecyle). Often, there is a pre-existing system or prototype first, and thus you may want to write some thoughts on implementation, for aiding and guiding yourself or other programmers. </em></span> - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-revision-history"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><thead><tr><th>Document Revision #</th><th>Action Taken, Notes</th><th>When?</th><th>By Whom?</th></tr></thead><tbody><tr><td>0.3</td><td>Edited further, incorporated feedback from Michael Yoon</td><td>9/05/2000</td><td>Kai Wu</td></tr><tr><td>0.2</td><td>Edited</td><td>8/22/2000</td><td>Kai Wu</td></tr><tr><td>0.1</td><td>Created</td><td>8/21/2000</td><td>Josh Finkler, Audrey McLoghlin</td></tr></tbody></table></div><p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="filename.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="eng-standards-versioning.html">Next</a></td></tr><tr><td width="40%" align="left">Detailed Design Documentation Template </td><td width="20%" align="center"><a accesskey="u" href="eng-standards.html">Up</a></td><td width="40%" align="right"> Release Version Numbering</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/requirements-template.html#comments">View comments on this page at openacs.org</a></center></body></html> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="yourpackage-revision-history"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><thead><tr><th>Document Revision #</th><th>Action Taken, Notes</th><th>When?</th><th>By Whom?</th></tr></thead><tbody><tr><td>0.3</td><td>Edited further, incorporated feedback from Michael Yoon</td><td>9/05/2000</td><td>Kai Wu</td></tr><tr><td>0.2</td><td>Edited</td><td>8/22/2000</td><td>Kai Wu</td></tr><tr><td>0.1</td><td>Created</td><td>8/21/2000</td><td>Josh Finkler, Audrey McLoghlin</td></tr></tbody></table></div><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="filename.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="eng-standards-versioning.html">Next</a></td></tr><tr><td width="40%" align="left">Detailed Design Documentation Template&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="eng-standards.html">Up</a></td><td width="40%" align="right">&nbsp;Release Version Numbering</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/requirements-template.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/rp-design.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/rp-design.html,v diff -u -r1.6.2.4 -r1.6.2.5 --- openacs-4/packages/acs-core-docs/www/rp-design.html 7 Apr 2003 16:59:26 -0000 1.6.2.4 +++ openacs-4/packages/acs-core-docs/www/rp-design.html 15 Apr 2003 17:03:03 -0000 1.6.2.5 @@ -1,55 +1,55 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS 4 Request Processor Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="previous" href="rp-requirements.html" title="OpenACS 4 Request Processor Requirements"><link rel="next" href="tcl-doc.html" title="Documenting Tcl Files: Page Contracts and Libraries"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="rp-requirements.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Kernel Documentation</th><td width="20%" align="right"> <a accesskey="n" href="tcl-doc.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="rp-design"></a>OpenACS 4 Request Processor Design</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS 4 Request Processor Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="previous" href="rp-requirements.html" title="OpenACS 4 Request Processor Requirements"><link rel="next" href="tcl-doc.html" title="Documenting Tcl Files: Page Contracts and Libraries"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="rp-requirements.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�11.�Kernel Documentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="tcl-doc.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="rp-design"></a>OpenACS 4 Request Processor Design</h2></div></div><div class="authorblurb"><p> by <a href="http://planitia.org" target="_top">Rafael H. Schloming</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="rp-design-essentials"></a>Essentials</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="rp-requirements.html">OpenACS 4 Request Processor Requirements</a></p></li><li><p><a href="/api-doc/procs-file-view?path=packages/acs-kernel/tcl/request-processor-procs.tcl" target="_top"> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="rp-design-essentials"></a>Essentials</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="rp-requirements.html">OpenACS 4 Request Processor Requirements</a></p></li><li><p><a href="/api-doc/procs-file-view?path=packages/acs-kernel/tcl/request-processor-procs.tcl" target="_top"> /packages/acs-kernel/tcl/request-processor-procs.tcl</a></p></li><li><p><a href="/api-doc/procs-file-view?path=packages/acs-kernel/tcl/request-processor-init.tcl" target="_top"> /packages/acs-kernel/tcl/request-processor-init.tcl</a></p></li><li><p><a href="/api-doc/procs-file-view?path=packages/acs-kernel/tcl/site-nodes-procs.tcl" target="_top"> /packages/acs-kernel/tcl/site-nodes-procs.tcl</a></p></li><li><p><a href="/api-doc/procs-file-view?path=packages/acs-kernel/tcl/site-nodes-init.tcl" target="_top"> /packages/acs-kernel/tcl/site-nodes-init.tcl</a></p></li><li><p><a href="/doc/sql/display-sql?package_key=acs-kernel&url=site-nodes-create.sql" target="_top"> -/packages/acs-kernel/sql/site-nodes-create.sql</a></p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="rp-design-intro"></a>Introduction</h3></div></div><p>The request processor is the set of procs that responds to every HTTP +/packages/acs-kernel/sql/site-nodes-create.sql</a></p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="rp-design-intro"></a>Introduction</h3></div></div><p>The request processor is the set of procs that responds to every HTTP request made to the OpenACS. The request processor must authenticate the connecting user, and make sure that he is authorized to perform the given request. If these steps succeed, then the request processor must locate the file that is associated with the specified URL, and serve the content it -provides to the browser.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="rp-design-related-systems"></a>Related Systems</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="apm-design.html">OpenACS 4.6.2 Package Manager Design</a></p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="rp-design-terminology"></a>Terminology</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p> -<span class="strong"><em>pageroot</em></span> -- Any directory that contains scripts and/or +provides to the browser.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="rp-design-related-systems"></a>Related Systems</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="apm-design.html">OpenACS 4.6.2 Package Manager Design</a></p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="rp-design-terminology"></a>Terminology</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p> +<span class="strong">pageroot</span> -- Any directory that contains scripts and/or static files intended to be served in response to HTTP requests. A typical -OpenACS installation is required to serve files from multiple pageroots.</p></li><li><p><span class="strong"><em>global pageroot</em></span> -(<span class="strong"><em>/web/<span class="emphasis"><em>servicename</em></span>/www</em></span>) -- Files appearing under +OpenACS installation is required to serve files from multiple pageroots.</p></li><li><p><span class="strong">global pageroot</span> +(<span class="strong">/web/<span class="emphasis"><em>servicename</em></span>/www</span>) -- Files appearing under this pageroot will be served directly off the base url -http://www.<span class="emphasis"><em>servicename</em></span>.com/</p></li><li><p><span class="strong"><em>package root</em></span> -(<span class="strong"><em>/web/<span class="emphasis"><em>servicename</em></span>/packages</em></span>) -- Each subdirectory of +http://www.<span class="emphasis"><em>servicename</em></span>.com/</p></li><li><p><span class="strong">package root</span> +(<span class="strong">/web/<span class="emphasis"><em>servicename</em></span>/packages</span>) -- Each subdirectory of the package root is a package. A typical OpenACS installation will have several -packages.</p></li><li><p><span class="strong"><em>package pageroot</em></span> -(<span class="strong"><em>/web/<span class="emphasis"><em>servicename</em></span>/packages/<span class="emphasis"><em>package_key</em></span>/www</em></span>) --- This is the pageroot for the <span class="emphasis"><em>package_key</em></span> package.</p></li><li><p><span class="strong"><em>request environment</em></span> (<span class="strong"><em>ad_conn</em></span>) -- This is +packages.</p></li><li><p><span class="strong">package pageroot</span> +(<span class="strong">/web/<span class="emphasis"><em>servicename</em></span>/packages/<span class="emphasis"><em>package_key</em></span>/www</span>) +-- This is the pageroot for the <span class="emphasis"><em>package_key</em></span> package.</p></li><li><p><span class="strong">request environment</span> (<span class="strong">ad_conn</span>) -- This is a global namespace containing variables associated with the current -request.</p></li><li><p><span class="strong"><em>abstract URL</em></span> -- A URL with no extension that doesn't -directly correspond to a file in the filesystem.</p></li><li><p><span class="strong"><em>abstract file</em></span> or <span class="strong"><em>abstract path</em></span> -- A URL +request.</p></li><li><p><span class="strong">abstract URL</span> -- A URL with no extension that doesn't +directly correspond to a file in the filesystem.</p></li><li><p><span class="strong">abstract file</span> or <span class="strong">abstract path</span> -- A URL that has been translated into a file system path (probably by prepending the appropriate pageroot), but still doesn't have any extension and so does -not directly correspond to a file in the filesystem.</p></li><li><p><span class="strong"><em>concrete file</em></span> or <span class="strong"><em>concrete path</em></span> -- A file -or path that actually references something in the filesystem.</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="rp-design-system-overview"></a>System Overview</h3></div></div><p><span class="strong"><em>Package Lookup</em></span></p><p>One of the first things the request processor must do is to determine +not directly correspond to a file in the filesystem.</p></li><li><p><span class="strong">concrete file</span> or <span class="strong">concrete path</span> -- A file +or path that actually references something in the filesystem.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="rp-design-system-overview"></a>System Overview</h3></div></div><p><span class="strong">Package Lookup</span></p><p>One of the first things the request processor must do is to determine which package instance a given request references, and based on this information, which pageroot to use when searching for a file to serve. During this process the request processor divides the URL into two pieces. The first portion identifies the package instance. The rest identifies the path into the package pageroot. For example if the news package is mounted on /offices/boston/announcements/, then a request for /offices/boston/announcements/index would be split into the -<span class="strong"><em>package_url</em></span> (/offices/boston/announcements/), and the +<span class="strong">package_url</span> (/offices/boston/announcements/), and the abstract (no extension info) file path (index). The request processor must be -able to figure out which <span class="strong"><em>package_id</em></span> is associated with a +able to figure out which <span class="strong">package_id</span> is associated with a given package_url, and package mountings must be persistent across server restarts and users must be able to manipulate the mountings on a live site, -therefore this mapping is stored in the database.</p><p><span class="strong"><em>Authentication and Authorization</em></span></p><p>Once the request processor has located both the package_id and concrete +therefore this mapping is stored in the database.</p><p><span class="strong">Authentication and Authorization</span></p><p>Once the request processor has located both the package_id and concrete file associated with the request, authentication is performed by the <a href="../sessions.html" target="_top">session</a> security system. After authentication has been performed the user is authorized to have read access for the given package by the <a href="permissions-design.html">OpenACS 4 Permissions Design</a>. If authorization succeeds then the request is served, otherwise it is -aborted.</p><p><span class="strong"><em>Concrete File Search</em></span></p><p>To actually serve a file, the request processor generates an ordered list +aborted.</p><p><span class="strong">Concrete File Search</span></p><p>To actually serve a file, the request processor generates an ordered list of abstract paths and searches each path for a concrete file. The first path searched is composed of the package pageroot with the extra portion of the URL appended. The second abstract path consists of the global pageroot with @@ -60,22 +60,22 @@ directory. Files take precedence over directory listings, so an index file in the global pageroot will be served instead of a directory listing in the package pageroot, even though the global pageroot is searched later. If a -file is found at any of the searched locations then it is served.</p><p><span class="strong"><em>Virtual URL Handlers</em></span></p><p>If no file is found during the concrete file search, then the request -processor searches the filesystem for a <span class="strong"><em>virtual url handler</em></span> -(<span class="strong"><em>.vuh</em></span>) file. This file contains normal tcl code, and is in +file is found at any of the searched locations then it is served.</p><p><span class="strong">Virtual URL Handlers</span></p><p>If no file is found during the concrete file search, then the request +processor searches the filesystem for a <span class="strong">virtual url handler</span> +(<span class="strong">.vuh</span>) file. This file contains normal tcl code, and is in fact handled by the same extension handling procedure that handles .tcl files. The only way this file is treated differently is in how the request processor searches for it. When a lookup fails, the request processor generates each valid prefix of all the abstract paths considered in the concrete file search, and searches these prefixes in order from most specific to least specific for a matching .vuh file. If a file is found then the -ad_conn variable <span class="strong"><em>path_info</em></span> is set to the portion of the url +ad_conn variable <span class="strong">path_info</span> is set to the portion of the url <span class="emphasis"><em>not</em></span> matched by the .vuh script, and the script is sourced. This facility is intended to replace the concept of registered procs, since no special distinction is required between sitewide procs and package specific procs when using this facility. It is also much less prone to overlap and confusion than the use of registered procs, especially in an environment with -many packages installed.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="rp-design-site-nodes"></a>Site Nodes</h3></div></div><p>The request processor manages the mappings from URL patterns to package +many packages installed.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="rp-design-site-nodes"></a>Site Nodes</h3></div></div><p>The request processor manages the mappings from URL patterns to package instances with the site_nodes data model. Every row in the site_nodes table represents a fully qualified URL. A package can be mounted on any node in this data model. When the request processor performs a URL lookup, it @@ -88,14 +88,14 @@ performed by starting with the full request URI and successively stripping off the rightmost path components until a match is reached. This way the time required to lookup a URL is proportional to the length of the URL, not to the -number of entries in the mapping.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="rp-design-req-env"></a>Request Environment</h3></div></div><p>The request environment is managed by the procedure -<span class="strong"><em>ad_conn</em></span>. Variables can be set and retrieved through use of +number of entries in the mapping.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="rp-design-req-env"></a>Request Environment</h3></div></div><p>The request environment is managed by the procedure +<span class="strong">ad_conn</span>. Variables can be set and retrieved through use of the ad_conn procedure. The following variables are available for public use. If the ad_conn procedure doesn't recognize a variable being passed to it for a lookup, it tries to get a value using ns_conn. This guarantees that -ad_conn subsumes the functionality of ns_conn.</p><div class="informaltable"><table border="0"><colgroup><col><col></colgroup><tbody><tr><td colspan="2"><span class="strong"><em>Request processor</em></span></td></tr><tr><td valign="top"><tt>[ad_conn urlv]</tt></td><td valign="top">A list containing each element of the URL</td></tr><tr><td valign="top"><tt>[ad_conn url]</tt></td><td valign="top">The URL associated with the request.</td></tr><tr><td valign="top"><tt>[ad_conn file]</tt></td><td valign="top">The filepath including filename of the file being served</td></tr><tr><td valign="top"><tt>[ad_conn request]</tt></td><td valign="top">The number of requests since the server was last started</td></tr><tr><td valign="top"><tt>[ad_conn start_clicks]</tt></td><td valign="top">The system time when the RP starts handling the request</td></tr><tr><td colspan="2">�</td></tr><tr><td colspan="2"><span class="strong"><em>Session System Variables</em></span>: set in +ad_conn subsumes the functionality of ns_conn.</p><div class="informaltable"><table border="0"><colgroup><col><col></colgroup><tbody><tr><td colspan="2"><span class="strong">Request processor</span></td></tr><tr><td valign="top"><tt>[ad_conn urlv]</tt></td><td valign="top">A list containing each element of the URL</td></tr><tr><td valign="top"><tt>[ad_conn url]</tt></td><td valign="top">The URL associated with the request.</td></tr><tr><td valign="top"><tt>[ad_conn file]</tt></td><td valign="top">The filepath including filename of the file being served</td></tr><tr><td valign="top"><tt>[ad_conn request]</tt></td><td valign="top">The number of requests since the server was last started</td></tr><tr><td valign="top"><tt>[ad_conn start_clicks]</tt></td><td valign="top">The system time when the RP starts handling the request</td></tr><tr><td colspan="2">�</td></tr><tr><td colspan="2"><span class="strong">Session System Variables</span>: set in sec_handler, check security with ad_validate_security_info</td></tr><tr><td valign="top"><tt>[ad_conn session_id]</tt></td><td valign="top">The unique session_id coming from the sequence <tt>sec_id_seq</tt></td></tr><tr><td valign="top"><tt>[ad_conn user_id]</tt></td><td valign="top">User_id of a person if the person is logged in. Otherwise, it is -blank</td></tr><tr><td valign="top"><tt>[ad_conn sec_validated]</tt></td><td valign="top">This becomes "secure" when the connection uses SSL</td></tr><tr><td colspan="2">�</td></tr><tr><td colspan="2"><span class="strong"><em>Database API</em></span></td></tr><tr><td valign="top"><tt>[ad_conn db,handles]</tt></td><td valign="top">What are the list of handles available to AOL?</td></tr><tr><td valign="top"><tt>[ad_conn db,n_handles_used]</tt></td><td valign="top">How many database handles are currently used?</td></tr><tr><td valign="top"><tt>[ad_conn db,last_used]</tt></td><td valign="top">Which database handle did we use last?</td></tr><tr><td valign="top"><tt>[ad_conn db,transaction_level,$db]</tt></td><td valign="top">Specifies what transaction level we are in</td></tr><tr><td valign="top"><tt>[ad_conn db,db_abort_p,$dbh]</tt></td><td valign="top">Whether the transaction is aborted</td></tr><tr><td colspan="2">�</td></tr><tr><td colspan="2"><span class="strong"><em>APM</em></span></td></tr><tr><td colspan="2">�</td></tr><tr><td colspan="2"><span class="strong"><em>Packages</em></span></td></tr><tr><td valign="top"><tt>[ad_conn package_id]</tt></td><td valign="top">The package_id of the package associated with the URL.</td></tr><tr><td valign="top"><tt>[ad_conn package_url]</tt></td><td valign="top">The URL on which the package is mounted.</td></tr><tr><td colspan="2">�</td></tr><tr><td colspan="2"><span class="strong"><em>Miscellaneous</em></span></td></tr><tr><td valign="top"><tt>[ad_conn system_p]</tt></td><td valign="top">If true then the request has been made to one of the special directories +blank</td></tr><tr><td valign="top"><tt>[ad_conn sec_validated]</tt></td><td valign="top">This becomes "secure" when the connection uses SSL</td></tr><tr><td colspan="2">�</td></tr><tr><td colspan="2"><span class="strong">Database API</span></td></tr><tr><td valign="top"><tt>[ad_conn db,handles]</tt></td><td valign="top">What are the list of handles available to AOL?</td></tr><tr><td valign="top"><tt>[ad_conn db,n_handles_used]</tt></td><td valign="top">How many database handles are currently used?</td></tr><tr><td valign="top"><tt>[ad_conn db,last_used]</tt></td><td valign="top">Which database handle did we use last?</td></tr><tr><td valign="top"><tt>[ad_conn db,transaction_level,$db]</tt></td><td valign="top">Specifies what transaction level we are in</td></tr><tr><td valign="top"><tt>[ad_conn db,db_abort_p,$dbh]</tt></td><td valign="top">Whether the transaction is aborted</td></tr><tr><td colspan="2">�</td></tr><tr><td colspan="2"><span class="strong">APM</span></td></tr><tr><td colspan="2">�</td></tr><tr><td colspan="2"><span class="strong">Packages</span></td></tr><tr><td valign="top"><tt>[ad_conn package_id]</tt></td><td valign="top">The package_id of the package associated with the URL.</td></tr><tr><td valign="top"><tt>[ad_conn package_url]</tt></td><td valign="top">The URL on which the package is mounted.</td></tr><tr><td colspan="2">�</td></tr><tr><td colspan="2"><span class="strong">Miscellaneous</span></td></tr><tr><td valign="top"><tt>[ad_conn system_p]</tt></td><td valign="top">If true then the request has been made to one of the special directories specified in the config file (somewhere), and no authentication or -authorization has been performed.</td></tr><tr><td colspan="2">�</td></tr><tr><td colspan="2"><span class="strong"><em>Documentation</em></span></td></tr><tr><td valign="top"><tt>[ad_conn api_page_documentation_mode_p]</tt></td><td valign="top">�</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="rp-requirements.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="tcl-doc.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Request Processor Requirements </td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right"> Documenting Tcl Files: Page Contracts and Libraries</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/rp-design.html#comments">View comments on this page at openacs.org</a></center></body></html> +authorization has been performed.</td></tr><tr><td colspan="2">�</td></tr><tr><td colspan="2"><span class="strong">Documentation</span></td></tr><tr><td valign="top"><tt>[ad_conn api_page_documentation_mode_p]</tt></td><td valign="top">�</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="rp-requirements.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="tcl-doc.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Request Processor Requirements&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right">&nbsp;Documenting Tcl Files: Page Contracts and Libraries</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/rp-design.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/rp-requirements.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/rp-requirements.html,v diff -u -r1.6.2.4 -r1.6.2.5 --- openacs-4/packages/acs-core-docs/www/rp-requirements.html 7 Apr 2003 16:59:26 -0000 1.6.2.4 +++ openacs-4/packages/acs-core-docs/www/rp-requirements.html 15 Apr 2003 17:03:03 -0000 1.6.2.5 @@ -1,15 +1,15 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS 4 Request Processor Requirements</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="previous" href="security-notes.html" title="OpenACS 4 Security Notes"><link rel="next" href="rp-design.html" title="OpenACS 4 Request Processor Design"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="security-notes.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Kernel Documentation</th><td width="20%" align="right"> <a accesskey="n" href="rp-design.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="rp-requirements"></a>OpenACS 4 Request Processor Requirements</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS 4 Request Processor Requirements</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="previous" href="security-notes.html" title="OpenACS 4 Security Notes"><link rel="next" href="rp-design.html" title="OpenACS 4 Request Processor Design"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="security-notes.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�11.�Kernel Documentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="rp-design.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="rp-requirements"></a>OpenACS 4 Request Processor Requirements</h2></div></div><div class="authorblurb"><p> by <a href="http://planitia.org" target="_top">Rafael H. Schloming</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="rp-requirements-intro"></a>Introduction</h3></div></div><p>The following is a requirements document for the OpenACS 4.0 request + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="rp-requirements-intro"></a>Introduction</h3></div></div><p>The following is a requirements document for the OpenACS 4.0 request processor. The major enhancements in the 4.0 version include a more sophisticated directory mapping system that allows package pageroots to be mounted at arbitrary urls, and tighter integration with the database to allow -for flexible user controlled url structures, and subsites.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="rp-requirements-vision"></a>Vision Statement</h3></div></div><p>Most web servers are designed to serve pages from exactly one static +for flexible user controlled url structures, and subsites.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="rp-requirements-vision"></a>Vision Statement</h3></div></div><p>Most web servers are designed to serve pages from exactly one static pageroot. This restriction can become cumbersome when trying to build a web -toolkit full of reusable and reconfigurable components.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="rp-requirements-system-overview"></a>System Overview</h3></div></div><p>The request processor's functionality can be split into two main +toolkit full of reusable and reconfigurable components.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="rp-requirements-system-overview"></a>System Overview</h3></div></div><p>The request processor's functionality can be split into two main pieces.</p><div class="orderedlist"><ol type="1"><li><p>Set up the environment in which a server side script expects to run. This includes things like:</p><div class="itemizedlist"><ul type="disc"><li><p>Initialize common variables associated with a request.</p></li><li><p>Authenticate the connecting party.</p></li><li><p>Check that the connecting party is authorized to proceed with the request.</p></li><li><p>Invoke any filters associated with the request URI.</p></li></ul></div></li><li><p>Determine to which entity the request URI maps, and deliver the content @@ -19,9 +19,9 @@ for the connecting party. Eventually this may also require determining the capabilities of the connecting browser and choosing the most appropriate form for the delivered content.</p></li></ol></div><p>It is essential that any errors that occur during the above steps be -reported to developers in an easily decipherable manner.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="rp-requirements-links"></a>Related Links</h3></div></div><p><a href="rp-design.html">OpenACS 4 Request Processor Design</a></p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="rp-requirements-req"></a>Requirements</h3></div></div><p><span class="strong"><em>10.0 Multiple Pageroots</em></span></p><blockquote class="blockquote"><p><span class="strong"><em>10.10</em></span> Pageroots may be combined into one URL space.</p><p><span class="strong"><em>10.20</em></span> Pageroots may be mounted at more than one location in the URL -space.</p></blockquote><p><span class="strong"><em>20.0 Application Context</em></span></p><blockquote class="blockquote"><p><span class="strong"><em>20.10</em></span> The request processor must be able to determine a primary context +reported to developers in an easily decipherable manner.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="rp-requirements-links"></a>Related Links</h3></div></div><p><a href="rp-design.html">OpenACS 4 Request Processor Design</a></p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="rp-requirements-req"></a>Requirements</h3></div></div><p><span class="strong">10.0 Multiple Pageroots</span></p><div class="blockquote"><blockquote class="blockquote"><p><span class="strong">10.10</span> Pageroots may be combined into one URL space.</p><p><span class="strong">10.20</span> Pageroots may be mounted at more than one location in the URL +space.</p></blockquote></div><p><span class="strong">20.0 Application Context</span></p><div class="blockquote"><blockquote class="blockquote"><p><span class="strong">20.10</span> The request processor must be able to determine a primary context or state associated with a pageroot based on it's location within the URL -space.</p></blockquote><p><span class="strong"><em>30.0 Authentication</em></span></p><blockquote class="blockquote"><p><span class="strong"><em>30.10</em></span> The request processor must be able to verify that the connecting -browser actually represents the party it claims to represent.</p></blockquote><p><span class="strong"><em>40.0 Authorization</em></span></p><blockquote class="blockquote"><p><span class="strong"><em>40.10</em></span> The request processor must be able to verify that the party the -connecting browser represents is allowed to make the request.</p></blockquote><p><span class="strong"><em>50.0 Scalability</em></span></p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="security-notes.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="rp-design.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Security Notes </td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right"> OpenACS 4 Request Processor Design</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/rp-requirements.html#comments">View comments on this page at openacs.org</a></center></body></html> +space.</p></blockquote></div><p><span class="strong">30.0 Authentication</span></p><div class="blockquote"><blockquote class="blockquote"><p><span class="strong">30.10</span> The request processor must be able to verify that the connecting +browser actually represents the party it claims to represent.</p></blockquote></div><p><span class="strong">40.0 Authorization</span></p><div class="blockquote"><blockquote class="blockquote"><p><span class="strong">40.10</span> The request processor must be able to verify that the party the +connecting browser represents is allowed to make the request.</p></blockquote></div><p><span class="strong">50.0 Scalability</span></p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="security-notes.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="rp-design.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Security Notes&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS 4 Request Processor Design</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/rp-requirements.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/security-design.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/security-design.html,v diff -u -r1.7.2.4 -r1.7.2.5 --- openacs-4/packages/acs-core-docs/www/security-design.html 7 Apr 2003 16:59:26 -0000 1.7.2.4 +++ openacs-4/packages/acs-core-docs/www/security-design.html 15 Apr 2003 17:03:03 -0000 1.7.2.5 @@ -1,10 +1,10 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS 4 Security Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="previous" href="security-requirements.html" title="OpenACS 4 Security Requirements"><link rel="next" href="security-notes.html" title="OpenACS 4 Security Notes"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="security-requirements.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Kernel Documentation</th><td width="20%" align="right"> <a accesskey="n" href="security-notes.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="security-design"></a>OpenACS 4 Security Design</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS 4 Security Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="previous" href="security-requirements.html" title="OpenACS 4 Security Requirements"><link rel="next" href="security-notes.html" title="OpenACS 4 Security Notes"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="security-requirements.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�11.�Kernel Documentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="security-notes.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="security-design"></a>OpenACS 4 Security Design</h2></div></div><div class="authorblurb"><p> by <a href="mailto:richardl@arsdigita.com" target="_top">Richard Li</a>, <a href="mailto:ashah@arsdigita.com" target="_top">Archit Shah</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="security-design-essentials"></a>Essentials</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="security-requirements.html">OpenACS 4 Security Requirements</a></p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="security-design-intro"></a>Introduction</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="security-design-essentials"></a>Essentials</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="security-requirements.html">OpenACS 4 Security Requirements</a></p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="security-design-intro"></a>Introduction</h3></div></div><p> This document explains security model design for OpenACS 4. The security system with the OpenACS core must authenticate users in both secure and insecure environments. In addition, this subsystem provides sessions on top of the @@ -20,15 +20,15 @@ </p></li><li><p>SSL with server authentication: <a href="http://home.netscape.com/eng/ssl3/ssl-toc.html" target="_top">SSL v3</a> </p><p>SSL provides the client with a guarantee that the server is actually the server it is advertised as being. It also provides a secure transport. -</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="security-design-design"></a>Design</h3></div></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="sessions"></a>Sessions</h4></div></div><p> +</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="security-design-design"></a>Design</h3></div></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="sessions"></a>Sessions</h4></div></div><p> A session is defined as a series of clicks in which no two clicks are separated by more than some constant. This constant is the parameter SessionTimeout. Using the expiration time on the signatures of the signed cookies, we can verify when the cookie was issued and determine if two requests are part of the same session. It is important to note that the expiration time set in the cookie protocol is not trusted. Only the time inserted by the signed cookie mechanism is trusted. -</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="authentication"></a>Authentication</h4></div></div><p> +</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="authentication"></a>Authentication</h4></div></div><p> Two levels of access can be granted: insecure and secure. This grant lasts for the remainder of the particular session. Secure authentication tokens are only issued over secured connections. @@ -42,12 +42,12 @@ password can be sniffed from the system, after which the sniffer can apply for a secure authentication token. However, the basic architecture here lays the foundation for a secure system and can be easily adapted to a more secure -authentication system by forcing all logins to occur over HTTPS.</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="authentication-details"></a>Details</h4></div></div><p>The authentication system issues up to four signed cookies (see below), -with each cookie serving a different purpose. These cookies are:</p><blockquote class="blockquote"><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong"><em>name</em></span></td><td><span class="strong"><em>value</em></span></td><td><span class="strong"><em>max-age</em></span></td><td><span class="strong"><em>secure?</em></span></td></tr><tr><td>ad_session_id</td><td>session_id,user_id</td><td>SessionTimeout</td><td>no</td></tr><tr><td>ad_user_login</td><td>user_id</td><td>Infinity</td><td>no</td></tr><tr><td>ad_user_login_secure</td><td>user_id,random</td><td>Infinity</td><td>yes</td></tr><tr><td>ad_secure_token</td><td>session_id,user_id,random</td><td>SessionLifetime</td><td>yes</td></tr></tbody></table></div></blockquote><div class="itemizedlist"><ul type="disc"><li><p>ad_session_id</p><div class="itemizedlist"><ul type="round"><li><p>reissued on any hit separated by more than SessionRenew seconds from the -previous hit that received a cookie</p></li><li><p>is valid only for SessionTimeout seconds</p></li><li><p>is the canonical source for the session ID in ad_conn</p></li></ul></div></li><li><p>ad_user_login</p><div class="itemizedlist"><ul type="round"><li><p>is used for permanent logins</p></li></ul></div></li><li><p>ad_user_login_secure</p><div class="itemizedlist"><ul type="round"><li><p>is used for permanent secure logins</p></li><li><p>contains random garbage (ns_time) to prevent attack against the secure +authentication system by forcing all logins to occur over HTTPS.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="authentication-details"></a>Details</h4></div></div><p>The authentication system issues up to four signed cookies (see below), +with each cookie serving a different purpose. These cookies are:</p><div class="blockquote"><blockquote class="blockquote"><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong">name</span></td><td><span class="strong">value</span></td><td><span class="strong">max-age</span></td><td><span class="strong">secure?</span></td></tr><tr><td>ad_session_id</td><td>session_id,user_id</td><td>SessionTimeout</td><td>no</td></tr><tr><td>ad_user_login</td><td>user_id</td><td>Infinity</td><td>no</td></tr><tr><td>ad_user_login_secure</td><td>user_id,random</td><td>Infinity</td><td>yes</td></tr><tr><td>ad_secure_token</td><td>session_id,user_id,random</td><td>SessionLifetime</td><td>yes</td></tr></tbody></table></div></blockquote></div><div class="itemizedlist"><ul type="disc"><li><p>ad_session_id</p><div class="itemizedlist"><ul type="circle"><li><p>reissued on any hit separated by more than SessionRenew seconds from the +previous hit that received a cookie</p></li><li><p>is valid only for SessionTimeout seconds</p></li><li><p>is the canonical source for the session ID in ad_conn</p></li></ul></div></li><li><p>ad_user_login</p><div class="itemizedlist"><ul type="circle"><li><p>is used for permanent logins</p></li></ul></div></li><li><p>ad_user_login_secure</p><div class="itemizedlist"><ul type="circle"><li><p>is used for permanent secure logins</p></li><li><p>contains random garbage (ns_time) to prevent attack against the secure hash</p></li></ul></div></li><li><p>ad_secure_token -</p><div class="itemizedlist"><ul type="round"><li><p>is a session-level cookie from the browser's standpoint</p></li><li><p>its signature expires in SessionLifetime seconds</p></li><li><p>contains random garbage (ns_time) to prevent attack against the secure -hash</p></li><li><p>user_id is extraneous</p></li></ul></div></li></ul></div></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="authentication-process"></a>Authentication Process</h4></div></div><p>The Tcl function (<tt>sec_handler</tt>) is called by the request +</p><div class="itemizedlist"><ul type="circle"><li><p>is a session-level cookie from the browser's standpoint</p></li><li><p>its signature expires in SessionLifetime seconds</p></li><li><p>contains random garbage (ns_time) to prevent attack against the secure +hash</p></li><li><p>user_id is extraneous</p></li></ul></div></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="authentication-process"></a>Authentication Process</h4></div></div><p>The Tcl function (<tt>sec_handler</tt>) is called by the request processor to authenticate the user. It first checks the <tt>ad_session_id</tt> cookie. If there is no valid session in progress, a new session is created with <tt>sec_setup_session</tt>. If the user @@ -57,7 +57,7 @@ determined by whether or not the request is on a secure connection. If neither cookie is present, then a session is created without any authentication. If the <tt>ad_session_id</tt> cookie is valid, the -user_id and session_id are pulled from it and put into ad_conn.</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="secure-connections"></a>Authenticating Secure Connections</h4></div></div><p>Secure connections are authenticated slightly differently. The function +user_id and session_id are pulled from it and put into ad_conn.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="secure-connections"></a>Authenticating Secure Connections</h4></div></div><p>Secure connections are authenticated slightly differently. The function <tt>ad_secure_conn_p</tt> is used to determine whether or not the URL being accessed is requires a secure login. The function simply checks if the location begins with "https". (This is safe because the location is @@ -76,7 +76,7 @@ on the two Tcl function <tt>ad_secure_conn_p</tt> and <tt>ad_login_page</tt>. If <tt>ad_secure_conn_p</tt> is false, secure authentication is not required. If <tt>ad_login_page</tt> is false, -secure authentication is not required.</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="login-process"></a>Login Process</h4></div></div><p>The Tcl function <tt>ad_user_login</tt> does two things. First it +secure authentication is not required.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="login-process"></a>Login Process</h4></div></div><p>The Tcl function <tt>ad_user_login</tt> does two things. First it performs the appropriate manipulation of the permanent login cookies, and then it updates the current session to reflect the new user_id. The manipulation of the permanent login cookies is based on 3 factors:</p><div class="itemizedlist"><ul type="disc"><li><p>previous login: other user, same user</p></li><li><p>permanent: was a permanent login requested?</p></li><li><p>secure: is this a secure connection?</p></li></ul></div><p> @@ -86,7 +86,7 @@ immediately</p></li><li><p>nothing: if the cookie is present, it remains</p></li></ul></div><p> The current state of the permanent login cookies is not taken into account when determining the appropriate action. -</p><blockquote class="blockquote"><div class="informaltable"><table border="1"><colgroup><col><col><col><col><col></colgroup><tbody><tr><td><span class="strong"><em>previous login state</em></span></td><td><span class="strong"><em>permanent login requested</em></span></td><td><span class="strong"><em>secure connection</em></span></td><td><span class="strong"><em>action on insecure</em></span></td><td><span class="strong"><em>action on secure</em></span></td></tr><tr><td>other</td><td>y</td><td>y</td><td>set</td><td>set</td></tr><tr><td>same</td><td>y</td><td>y</td><td>set</td><td>set</td></tr><tr><td>other</td><td>y</td><td>n</td><td>set</td><td>delete</td></tr><tr><td>same</td><td>y</td><td>n</td><td>set</td><td>nothing</td></tr><tr><td>same</td><td>n</td><td>y</td><td>nothing</td><td>delete</td></tr><tr><td>other</td><td>n</td><td>y</td><td>delete</td><td>delete</td></tr><tr><td>other</td><td>n</td><td>n</td><td>delete</td><td>delete</td></tr><tr><td>same</td><td>n</td><td>n</td><td>delete</td><td>delete</td></tr></tbody></table></div></blockquote><p><tt>ad_user_login</tt> +</p><div class="blockquote"><blockquote class="blockquote"><div class="informaltable"><table border="1"><colgroup><col><col><col><col><col></colgroup><tbody><tr><td><span class="strong">previous login state</span></td><td><span class="strong">permanent login requested</span></td><td><span class="strong">secure connection</span></td><td><span class="strong">action on insecure</span></td><td><span class="strong">action on secure</span></td></tr><tr><td>other</td><td>y</td><td>y</td><td>set</td><td>set</td></tr><tr><td>same</td><td>y</td><td>y</td><td>set</td><td>set</td></tr><tr><td>other</td><td>y</td><td>n</td><td>set</td><td>delete</td></tr><tr><td>same</td><td>y</td><td>n</td><td>set</td><td>nothing</td></tr><tr><td>same</td><td>n</td><td>y</td><td>nothing</td><td>delete</td></tr><tr><td>other</td><td>n</td><td>y</td><td>delete</td><td>delete</td></tr><tr><td>other</td><td>n</td><td>n</td><td>delete</td><td>delete</td></tr><tr><td>same</td><td>n</td><td>n</td><td>delete</td><td>delete</td></tr></tbody></table></div></blockquote></div><p><tt>ad_user_login</tt> calls<tt>sec_setup_session</tt> which actually calls <tt>sec_generate_session_id_cookie</tt> to generate the new cookie with refer to the appropriate user_id. If the connection is secure @@ -99,7 +99,7 @@ <tt>sec_generate_session_id_cookie</tt>. </p><p><tt>ad_user_logout</tt> logs the user out by deleting all 4 cookies -that are used by the authentication system.</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="session-creation"></a>Session Creation</h4></div></div><p>The creation and setup of sessions is handled in +that are used by the authentication system.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="session-creation"></a>Session Creation</h4></div></div><p>The creation and setup of sessions is handled in <tt>sec_setup_session</tt>, which is called either to create a new session from <tt>sec_handler</tt> or from <tt>ad_user_login</tt> when there is a change in @@ -115,13 +115,13 @@ associated with a session to be carried over when a user logs in.</p><p>The users table is updated by <tt>sec_update_user_session_info</tt> which is called when an existing session is assigned a non-zero user_id, or when a session is -created with a non-zero user_id.</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="passwords"></a>Passwords</h4></div></div><p><tt>ad_user_login</tt> assumes a password check has already been +created with a non-zero user_id.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="passwords"></a>Passwords</h4></div></div><p><tt>ad_user_login</tt> assumes a password check has already been performed (this will change in the future). The actual check is done by <tt>ad_check_password</tt>. The database stores a salt and a hash of the password concatenated with the salt. Updating the password (<tt>ad_change_password</tt>) simply requires getting a new salt (ns_time) concatenating and rehashing. Both the salt and the hashed password -field are updated.</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="performance-enhancements"></a>Performance Enhancements</h4></div></div><p>A session is labeled by a session_id sequence. Creating a session merely +field are updated.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="performance-enhancements"></a>Performance Enhancements</h4></div></div><p>A session is labeled by a session_id sequence. Creating a session merely requires incrementing the session_id sequence. We do two things to improve the performance of this process. First, sequence values are precomputed and cached in the Oracle SGA. In addition, sequence values are incremented by 100 with each @@ -144,7 +144,7 @@ constant. This approach avoids (relatively) expensive calls to <tt>ad_parameter</tt> in <tt>sec_handler</tt>. The impact of this approach is that these parameters cannot be dynamically changed at runtime -and require a server restart.</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="session-properties"></a>Session Properties</h4></div></div><p> +and require a server restart.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="session-properties"></a>Session Properties</h4></div></div><p> Session properties are stored in a single table that maps session IDs to named session properties and values. This table is periodically purged. For maximum performance, the table is created with nologging turned on and new @@ -153,10 +153,10 @@ sessions whose first hit was more than SessionLifetime seconds (1 week by default) ago. Session properties are removed through that same process with cascading delete. -</p></div><div class="sect4"><div class="titlepage"><div><h5 class="title"><a name="secure-session-properties"></a>Secure Session Properties</h5></div></div><p>Session properties can be set as secure. In this case, +</p></div><div class="sect4" lang="en"><div class="titlepage"><div><h5 class="title"><a name="secure-session-properties"></a>Secure Session Properties</h5></div></div><p>Session properties can be set as secure. In this case, <tt>ad_set_client_property</tt> will fail if the connection is not secure. <tt>ad_get_client_property</tt> will behave as if the property -had not been set if the property was not set securely.</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="digital-signatures"></a>Digital Signatures & Signed Cookies</h4></div></div><p> +had not been set if the property was not set securely.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="digital-signatures"></a>Digital Signatures & Signed Cookies</h4></div></div><p> Signed cookies are implemented using the generic secure digital signature mechanism. This mechanism guarantees that the user can not tamper with (or construct a value of his choice) without detection. In addition, it provides @@ -196,7 +196,7 @@ mandates that the user-agent use "secure means" to contact the server when transmitting the cookie. If a secure cookie is returned to the client over https, then the cookie will never be transmitted over insecure -means.</p><div class="sect4"><div class="titlepage"><div><h5 class="title"><a name="signature-performance"></a>Performance</h5></div></div><p>Performance is a key goal of this implementation of signed cookies. To +means.</p><div class="sect4" lang="en"><div class="titlepage"><div><h5 class="title"><a name="signature-performance"></a>Performance</h5></div></div><p>Performance is a key goal of this implementation of signed cookies. To maximize performance, we will use the following architecture. At the lowest level, we will use the <tt>secret_tokens</tt> table as the canonical set of secret tokens. This table is necessary for multiple servers to maintain @@ -206,93 +206,93 @@ token_id is returned out of the entire set of cached token_ids. In addition, a thread-persistent cache called tcl_secret_tokens is maintained on a per-thread basis.</p><p>Thus, the L2 ns_cache functions as a server-wide LRU cache that has a -minimum of 100 tokens in it. The cache has a dual purpose:</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em>LRU cache</em></span> Note that cache misses will only occur in the +minimum of 100 tokens in it. The cache has a dual purpose:</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong">LRU cache</span> Note that cache misses will only occur in the multiple server case, where a user agent may have a signature guaranteed by a -secret token issued by another server in the cluster.</p></li><li><p><span class="strong"><em>signature cache</em></span> Since the cache always maintains a +secret token issued by another server in the cluster.</p></li><li><p><span class="strong">signature cache</span> Since the cache always maintains a minimum of 100 (set by a parameter) tokens populated at startup, it can be used to provide a random token for signature purposes.</p></li></ul></div><p> The per-thread cache functions as an L1 cache that indiscriminately caches -all secret tokens. Note that this is <span class="strong"><em>not</em></span> an LRU cache +all secret tokens. Note that this is <span class="strong">not</span> an LRU cache because there is no cache eviction policy per se -- the cache is cleared when the thread is destroyed by AOLserver. -</p></div><div class="sect4"><div class="titlepage"><div><h5 class="title"><a name="signature-security"></a>Security</h5></div></div><p>Storing information on a client always presents an additional security +</p></div><div class="sect4" lang="en"><div class="titlepage"><div><h5 class="title"><a name="signature-security"></a>Security</h5></div></div><p>Storing information on a client always presents an additional security risk.</p><p>Since we are only validating the information and not trying to protect it as a secret, we don't use salt. Cryptographic salt is useful if you are -trying to protect information from being read (e.g., hashing passwords).</p></div></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="external-ssl"></a>External SSL</h4></div></div><p> +trying to protect information from being read (e.g., hashing passwords).</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="external-ssl"></a>External SSL</h4></div></div><p> External SSL mechanisms (firewall, dedicated hardware, etc.) can be used by creating two pools of AOLservers. In one pool the servers should be configured with the location parameter of nssock module set to "https://yourservername". The servers in the other pool are configured as normal. The external SSL agent should direct SSL queries to the pool of secure servers, and it should direct non-SSL queries to the insecure servers. -</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="PRNG"></a>PRNG</h4></div></div><p> +</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="PRNG"></a>PRNG</h4></div></div><p> The pseudorandom number generator depends primarily on ns_rand, but is also seeded with ns_time and the number of page requests served since the server was started. The PRNG takes the SHA1(seed,ns_rand,ns_time,requests,clicks), and saves the first 40 bits as the seed for the next call to the PRNG in a thread-persistent global variable. The remaining 120 bits are rehashed to produce 160 bits of output. -</p></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="security-design-api"></a>API</h3></div></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="login-password-api"></a>Login/Password</h4></div></div><p> -<span class="strong"><em>ad_user_login <span class="emphasis"><em>user_id</em></span></em></span> Logs the user in as user +</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="security-design-api"></a>API</h3></div></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="login-password-api"></a>Login/Password</h4></div></div><p> +<span class="strong">ad_user_login <span class="emphasis"><em>user_id</em></span></span> Logs the user in as user <span class="emphasis"><em>user_id</em></span>. Optional forever flag determines whether or not permanent cookies are issued. -</p><p><span class="strong"><em>ad_user_logout</em></span> Logs the user out.</p><p><span class="strong"><em>ad_check_password <span class="emphasis"><em>user_id</em></span> <span class="emphasis"><em>password</em></span></em></span> -returns 0 or 1.</p><p><span class="strong"><em>ad_change_password <span class="emphasis"><em>user_id</em></span> <span class="emphasis"><em>new -password</em></span></em></span></p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="signature-api"></a>Digital Signatures and Signed Cookies</h4></div></div><p> -<span class="strong"><em>ad_sign <span class="emphasis"><em>value</em></span></em></span> Returns the digital signature of this +</p><p><span class="strong">ad_user_logout</span> Logs the user out.</p><p><span class="strong">ad_check_password <span class="emphasis"><em>user_id</em></span> <span class="emphasis"><em>password</em></span></span> +returns 0 or 1.</p><p><span class="strong">ad_change_password <span class="emphasis"><em>user_id</em></span> <span class="emphasis"><em>new +password</em></span></span></p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="signature-api"></a>Digital Signatures and Signed Cookies</h4></div></div><p> +<span class="strong">ad_sign <span class="emphasis"><em>value</em></span></span> Returns the digital signature of this value. Optional parameters allow for the specification of the <span class="emphasis"><em>secret</em></span> used, the <span class="emphasis"><em>token_id</em></span> used and the <span class="emphasis"><em>max_age</em></span> for the signature. -<span class="strong"><em>ad_verify_signature <span class="emphasis"><em>value</em></span> <span class="emphasis"><em>signature</em></span></em></span>Returns +<span class="strong">ad_verify_signature <span class="emphasis"><em>value</em></span> <span class="emphasis"><em>signature</em></span></span>Returns 1 or 0 indicating whether or not the signature matches the value specified. The <span class="emphasis"><em>secret</em></span> parameter allows for specification of a different secret token to be used. </p><p> -<span class="strong"><em>ad_set_signed_cookie <span class="emphasis"><em>name</em></span> <span class="emphasis"><em>data</em></span></em></span> Sets a -signed cookie <span class="emphasis"><em>name</em></span> with value <span class="emphasis"><em>data</em></span>. </p><p><span class="strong"><em>ad_get_signed_cookie <span class="emphasis"><em>name</em></span></em></span> Gets the signed cookie +<span class="strong">ad_set_signed_cookie <span class="emphasis"><em>name</em></span> <span class="emphasis"><em>data</em></span></span> Sets a +signed cookie <span class="emphasis"><em>name</em></span> with value <span class="emphasis"><em>data</em></span>. </p><p><span class="strong">ad_get_signed_cookie <span class="emphasis"><em>name</em></span></span> Gets the signed cookie <span class="emphasis"><em>name</em></span>. It raises an error if the cookie has been tampered with, or if -its expiration time has passed.</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="session-property-api"></a>Session Properties</h4></div></div><p><span class="strong"><em>ad_set_client_property <span class="emphasis"><em>module</em></span> <span class="emphasis"><em>name</em></span> -<span class="emphasis"><em>data</em></span></em></span> Sets a session property with <span class="emphasis"><em>name</em></span> to value +its expiration time has passed.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="session-property-api"></a>Session Properties</h4></div></div><p><span class="strong">ad_set_client_property <span class="emphasis"><em>module</em></span> <span class="emphasis"><em>name</em></span> +<span class="emphasis"><em>data</em></span></span> Sets a session property with <span class="emphasis"><em>name</em></span> to value <span class="emphasis"><em>data</em></span> for the module <span class="emphasis"><em>module</em></span>. The optional secure flag specifies the property should only be set if the client is authorized for secure access (<tt>ad_secure_conn_p</tt> is true). There is also an optional -<span class="emphasis"><em>session_id</em></span> flag to access data from sessions other than the current one.</p><p><span class="strong"><em>ad_get_client_property <span class="emphasis"><em>module</em></span> <span class="emphasis"><em>name</em></span> -<span class="emphasis"><em>data</em></span></em></span> Gets a session property with <span class="emphasis"><em>name</em></span> to for the +<span class="emphasis"><em>session_id</em></span> flag to access data from sessions other than the current one.</p><p><span class="strong">ad_get_client_property <span class="emphasis"><em>module</em></span> <span class="emphasis"><em>name</em></span> +<span class="emphasis"><em>data</em></span></span> Gets a session property with <span class="emphasis"><em>name</em></span> to for the module <span class="emphasis"><em>module</em></span>. The optional secure flag specifies the property should only be retrieved if the client is authorized for secure access (<tt>ad_secure_conn_p</tt> is true). There is also an optional -<span class="emphasis"><em>session_id</em></span> flag to access data from sessions other than the current one.</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="parameters"></a>Parameters</h4></div></div><p> -<span class="strong"><em>SessionTimeout</em></span> the maximum time in seconds (default 1200) -between requests that are part of the same session </p><p><span class="strong"><em>SessionRenew</em></span> the time in seconds (default 300) between +<span class="emphasis"><em>session_id</em></span> flag to access data from sessions other than the current one.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="parameters"></a>Parameters</h4></div></div><p> +<span class="strong">SessionTimeout</span> the maximum time in seconds (default 1200) +between requests that are part of the same session </p><p><span class="strong">SessionRenew</span> the time in seconds (default 300) between reissue of the session cookie. The minimum time that can pass after a session cookie is issued and before it is rejected is (SessionTimeout - SessionRenew). This parameter is used so that only one session_id cookie is set on a single page even if there are multiple images that are being -downloaded.</p><p><span class="strong"><em>SessionLifetime</em></span> the maximum possible lifetime of a -session in seconds (default 604800 = 7 days)</p><p><span class="strong"><em>NumberOfCachedSecretTokens</em></span> the number of secret tokens to -cache. (default 100)</p></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="security-design-future"></a>Future Improvements</h3></div></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="PRNG-impl"></a>PRNG implementation</h4></div></div><p> +downloaded.</p><p><span class="strong">SessionLifetime</span> the maximum possible lifetime of a +session in seconds (default 604800 = 7 days)</p><p><span class="strong">NumberOfCachedSecretTokens</span> the number of secret tokens to +cache. (default 100)</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="security-design-future"></a>Future Improvements</h3></div></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="PRNG-impl"></a>PRNG implementation</h4></div></div><p> The pseudorandom number generator used in the OpenACS is cryptographically weak, and depends primarily on the randomness of the <tt>ns_rand</tt> function for its randomness. The implementation of the PRNG could be substantially improved. -</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="ad_user_login"></a><tt>ad_user_login</tt></h4></div></div><p> +</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="ad_user_login"></a><tt>ad_user_login</tt></h4></div></div><p> Add a password argument. It is non-optimal to make the default behavior to assume that the password was provided. -</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="secret-tokens"></a>Secret Tokens</h4></div></div><p> +</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="secret-tokens"></a>Secret Tokens</h4></div></div><p> The secret tokens pool is currently static. Ideally, this pool should be changed on a random but regular basis, and the number of secret_tokens increased as the number of users come to the web site. </p><p>Since the security of the entire system depends on the secret tokens pool, access to the secret tokens table should be restricted and accessible via a strict PL/SQL API. This can be done by revoking standard SQL permissions on the table for the AOLserver user and giving those permissions to a PL/SQL -package.</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="robots"></a>Robots</h4></div></div><p> +package.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="robots"></a>Robots</h4></div></div><p> Deferring session to creation until the second hit from a browser seems to be a good way of preventing a lot of overhead processing for robots. If we do this, send cookie on first hit to test if cookies are accepted, then actually allocate on second hit. To preserve a record of the first hit of the session, just include any info about that first hit in the probe cookie sent. Look at how usca_p (user session cookie attempted) is used in OpenACS 3.x ecommerce. -</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="client-property-future"></a>Client properties</h4></div></div><p> +</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="client-property-future"></a>Client properties</h4></div></div><p> Currently there are only session properties. Because sessions have a maximum life, properties have a maximum life. It would be nice to expand the interface to allow for more persistent properties. In the past, there was a @@ -305,7 +305,7 @@ can be shared between concurrent sessions). The applications should have control over the deletion patterns, but should not be able to ignore the amount of data stored. -</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="session-information"></a>Session information</h4></div></div><p> +</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="session-information"></a>Session information</h4></div></div><p> It would be nice to keep some info about sessions: first hit, last hit, and URLs visited come to mind. Both logging and API for accessing this info would be nice. WimpyPoint is an application that already wants to use this @@ -314,7 +314,7 @@ analyzers (leaving it in server memory for applications to access). Putting it into the database at all is probably too big a hammer. Certainly putting it into the database on every hit is too big a hammer. -</p></div><div class="sect3"><div class="titlepage"><div><h4 class="title"><a name="cookieless-sessions"></a>Cookieless Sessions</h4></div></div><p>Two trends drive the requirement for removing cookie dependence. WAP +</p></div><div class="sect3" lang="en"><div class="titlepage"><div><h4 class="title"><a name="cookieless-sessions"></a>Cookieless Sessions</h4></div></div><p>Two trends drive the requirement for removing cookie dependence. WAP browsers that do not have cookies, and publc perceptions of cookies as an invasion of privacy. The rely on the cookies mechanism in HTTP to distinguish one request from the next, and we trust it to force requests from the same @@ -333,21 +333,21 @@ Both of these problems can be mitigated by doing detection of cookie support (see the section on robot detection). To help deal with the first problem, One could also make the restriction that secure sessions are only allowed over -cookied HTTP.</p></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="security-design-vulnerability"></a>Vulnerability Analysis</h3></div></div><p> +cookied HTTP.</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="security-design-vulnerability"></a>Vulnerability Analysis</h3></div></div><p> This section is not meant to be a comprehensive analysis of the vulnerabilities of the security system. Listed below are possible attack points for the system; these vulnerabilities are currently theoretical in nature. The major cryptographic vulnerability of the system stems from the pseudorandom nature of the random number generators used in the system. -</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em>Cryptographically weak PRNG</em></span> see -above.</p></li><li><p><span class="strong"><em>Dependence on <tt>sample</tt> -SQL command</em></span> The list of random token that are placed in the secret +</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong">Cryptographically weak PRNG</span> see +above.</p></li><li><p><span class="strong">Dependence on <tt>sample</tt> +SQL command</span> The list of random token that are placed in the secret tokens cache is randomly chosen by the Oracle <tt>sample</tt> command. This command may not be entirely random, so predicting the contents of the secret tokens cache may not -be as difficult as someone may anticipate.</p></li><li><p><span class="strong"><em>Dependence on -<tt>ns_rand</tt></em></span> The actual token that is +be as difficult as someone may anticipate.</p></li><li><p><span class="strong">Dependence on +<tt>ns_rand</tt></span> The actual token that is chosen from the cache to be used is chosen by a call to -<tt>ns_rand</tt>.</p></li><li><p><span class="strong"><em><tt>ad_secure_conn_p</tt></em></span> +<tt>ns_rand</tt>.</p></li><li><p><span class="strong"><tt>ad_secure_conn_p</tt></span> As discussed above, the security of the secure sessions authentication system is -dependent upon this function.</p></li></ul></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="security-requirements.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="security-notes.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Security Requirements </td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right"> OpenACS 4 Security Notes</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/security-design.html#comments">View comments on this page at openacs.org</a></center></body></html> +dependent upon this function.</p></li></ul></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="security-requirements.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="security-notes.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Security Requirements&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS 4 Security Notes</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/security-design.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/security-notes.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/security-notes.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/security-notes.html 7 Apr 2003 16:59:26 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/security-notes.html 15 Apr 2003 17:03:03 -0000 1.8.2.5 @@ -1,13 +1,13 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS 4 Security Notes</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="previous" href="security-design.html" title="OpenACS 4 Security Design"><link rel="next" href="rp-requirements.html" title="OpenACS 4 Request Processor Requirements"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="security-design.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Kernel Documentation</th><td width="20%" align="right"> <a accesskey="n" href="rp-requirements.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="security-notes"></a>OpenACS 4 Security Notes</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS 4 Security Notes</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="previous" href="security-design.html" title="OpenACS 4 Security Design"><link rel="next" href="rp-requirements.html" title="OpenACS 4 Request Processor Requirements"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="security-design.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�11.�Kernel Documentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="rp-requirements.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="security-notes"></a>OpenACS 4 Security Notes</h2></div></div><div class="authorblurb"><p> by <a href="mailto:richardl@arsdigita.com" target="_top">Richard Li</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. </p></div><p> The security system was designed for security. Thus, decisions requiring trade-offs between ease-of-use and security tend to result in a system that may not be as easy to use but is more secure. -</p><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="security-notes-https-sessions"></a>HTTPS and the sessions system</h3></div></div><p> +</p><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="security-notes-https-sessions"></a>HTTPS and the sessions system</h3></div></div><p> If a user switches to HTTPS after logging into the system via HTTP, the user must obtain a secure token. To insure security, the <span class="emphasis"><em>only way</em></span> to @@ -56,4 +56,4 @@ The set of string match expressions in the procedure above should be extended appropriately for other registration pages. This procedure does not use <tt>ad_parameter</tt> or regular expressions for performance reasons, as -it is called by the request processor. </p><p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="security-design.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="rp-requirements.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Security Design </td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right"> OpenACS 4 Request Processor Requirements</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/security-notes.html#comments">View comments on this page at openacs.org</a></center></body></html> +it is called by the request processor. </p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="security-design.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="rp-requirements.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Security Design&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS 4 Request Processor Requirements</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/security-notes.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/security-requirements.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/security-requirements.html,v diff -u -r1.6.2.4 -r1.6.2.5 --- openacs-4/packages/acs-core-docs/www/security-requirements.html 7 Apr 2003 16:59:26 -0000 1.6.2.4 +++ openacs-4/packages/acs-core-docs/www/security-requirements.html 15 Apr 2003 17:03:03 -0000 1.6.2.5 @@ -1,48 +1,48 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS 4 Security Requirements</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="previous" href="db-api-detailed.html" title="Database Access API"><link rel="next" href="security-design.html" title="OpenACS 4 Security Design"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="db-api-detailed.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Kernel Documentation</th><td width="20%" align="right"> <a accesskey="n" href="security-design.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="security-requirements"></a>OpenACS 4 Security Requirements</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS 4 Security Requirements</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="previous" href="db-api-detailed.html" title="Database Access API"><link rel="next" href="security-design.html" title="OpenACS 4 Security Design"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="db-api-detailed.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�11.�Kernel Documentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="security-design.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="security-requirements"></a>OpenACS 4 Security Requirements</h2></div></div><div class="authorblurb"><p> by <a href="mailto:richardl@arsdigita.com" target="_top">Richard Li</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="security-requirements-intro"></a>Introduction</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="security-requirements-intro"></a>Introduction</h3></div></div><p> This document lists the requirements for the security system for the OpenACS. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="security-requirements-vision"></a>Vision Statement</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="security-requirements-vision"></a>Vision Statement</h3></div></div><p> Virtually all web sites support personalized content based on user identity. The level of personalization may be as simple as displaying the name of the user on certain pages or can be as sophisticated as dynamically recommending sections of site that the user may be interested in based on prior browsing history. In any case, the user's identity must be validated and made available to the rest of the system. In addition, sites such as ecommerce vendors require that the user identity be securely validated. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="security-requirements-system-overview"></a>Security System Overview</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="security-requirements-system-overview"></a>Security System Overview</h3></div></div><p> The security system consists of a number of subsystems. -</p><p><span class="strong"><em>Signed Cookies</em></span></p><p> +</p><p><span class="strong">Signed Cookies</span></p><p> Cookies play a key role in storing user information. However, since they are stored in plaintext on a user's system, the validity of cookies is an important issue in trusting cookie information. Thus, we want to be able to validate a cookie, but we also want to validate the cookie without a database hit. -</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em>10.0 Guaranteed Tamper Detection</em></span> Any tampering of cookie -data should be easily detectable by the web server.</p></li><li><p><span class="strong"><em>10.1 Performance and Scalability</em></span> Validation and +</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong">10.0 Guaranteed Tamper Detection</span> Any tampering of cookie +data should be easily detectable by the web server.</p></li><li><p><span class="strong">10.1 Performance and Scalability</span> Validation and verification of the cookie should be easily scalable and should not require a -database query on every hit.</p></li></ul></div><p><span class="strong"><em>Session Properties</em></span></p><p> +database query on every hit.</p></li></ul></div><p><span class="strong">Session Properties</span></p><p> Applications should be able to store session-level properties in a database table. -</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em>11.0 Storage API</em></span> Session-level data should be accessible -via an API.</p></li><li><p><span class="strong"><em>11.1 Purge Mechanism</em></span> An efficient pruning mechanism +</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong">11.0 Storage API</span> Session-level data should be accessible +via an API.</p></li><li><p><span class="strong">11.1 Purge Mechanism</span> An efficient pruning mechanism should be used to prevent old session level properties from filling up the -table.</p></li></ul></div><p><span class="strong"><em>Login</em></span></p><p> +table.</p></li></ul></div><p><span class="strong">Login</span></p><p> The security system should support the concept of persistent user logins. This persistence takes several forms. -</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em>12.0 Permanent Login</em></span> Users should be able to maintain a -permanent user login so that they never need to type their password.</p></li><li><p><span class="strong"><em>12.1 Session Login</em></span> The security system should support +</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong">12.0 Permanent Login</span> Users should be able to maintain a +permanent user login so that they never need to type their password.</p></li><li><p><span class="strong">12.1 Session Login</span> The security system should support the concept of a session, with authentication tokens that become invalid -after a certain period of time.</p></li><li><p><span class="strong"><em>12.2 Session Definition</em></span> A session is a sequence of +after a certain period of time.</p></li><li><p><span class="strong">12.2 Session Definition</span> A session is a sequence of clicks by one user from one browser in which no two clicks are separated by -more than some constant (the session timeout).</p></li><li><p><span class="strong"><em>12.3 Stateless</em></span> The security system should not require +more than some constant (the session timeout).</p></li><li><p><span class="strong">12.3 Stateless</span> The security system should not require state that is stored in the server. Required state may reside only in the user request (including cookies), and in the database. A single user should be able to log in to the system even if the user is sent to a different -AOLserver for each step of the login process (e.g., by a load balancer).</p></li><li><p><span class="strong"><em>12.4 Secure</em></span> The security system should not store -passwords in clear text in the database.</p></li></ul></div><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em>13.0 SSL Hardware</em></span> The system must work when the SSL +AOLserver for each step of the login process (e.g., by a load balancer).</p></li><li><p><span class="strong">12.4 Secure</span> The security system should not store +passwords in clear text in the database.</p></li></ul></div><div class="itemizedlist"><ul type="disc"><li><p><span class="strong">13.0 SSL Hardware</span> The system must work when the SSL processing occurs outside of the web server (in specialized hardware, in a -firewall, etc.).</p></li></ul></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="db-api-detailed.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="security-design.html">Next</a></td></tr><tr><td width="40%" align="left">Database Access API </td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right"> OpenACS 4 Security Design</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/security-requirements.html#comments">View comments on this page at openacs.org</a></center></body></html> +firewall, etc.).</p></li></ul></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="db-api-detailed.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="security-design.html">Next</a></td></tr><tr><td width="40%" align="left">Database Access API&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS 4 Security Design</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/security-requirements.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/software-versions.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/Attic/software-versions.html,v diff -u -r1.1.2.3 -r1.1.2.4 --- openacs-4/packages/acs-core-docs/www/software-versions.html 7 Apr 2003 16:59:26 -0000 1.1.2.3 +++ openacs-4/packages/acs-core-docs/www/software-versions.html 15 Apr 2003 17:03:03 -0000 1.1.2.4 @@ -1,5 +1,5 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Chapter 2. Prerequisite Software</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="acs-admin.html" title="Part II. Administrator's Guide"><link rel="previous" href="acs-admin.html" title="Part II. Administrator's Guide"><link rel="next" href="individual-programs.html" title="Individual Programs"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="acs-admin.html">Prev</a> </td><th width="60%" align="center">Part II. Administrator's Guide</th><td width="20%" align="right"> <a accesskey="n" href="individual-programs.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><h2 class="title"><a name="software-versions"></a>Chapter 2. Prerequisite Software</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="individual-programs.html">Individual Programs</a></dt></dl></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter�2.�Prerequisite Software</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="acs-admin.html" title="Part�II.�Administrator's Guide"><link rel="previous" href="acs-admin.html" title="Part�II.�Administrator's Guide"><link rel="next" href="individual-programs.html" title="Individual Programs"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="acs-admin.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part�II.�Administrator's Guide</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="individual-programs.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><h2 class="title"><a name="software-versions"></a>Chapter�2.�Prerequisite Software</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="individual-programs.html">Individual Programs</a></dt></dl></div><div class="authorblurb"><p> by <a href="mailto:joel@aufrecht.org" target="_top">Joel Aufrecht</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. @@ -9,4 +9,4 @@ in turn require and operating system. Many additional programs, such as a Mail Transport Agent and source control system, are also needed for a fully effective instance. - </p><p><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="acs-admin.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="individual-programs.html">Next</a></td></tr><tr><td width="40%" align="left">Part II. Administrator's Guide </td><td width="20%" align="center"><a accesskey="u" href="acs-admin.html">Up</a></td><td width="40%" align="right"> Individual Programs</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/software-versions.html#comments">View comments on this page at openacs.org</a></center></body></html> + </p><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="acs-admin.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="individual-programs.html">Next</a></td></tr><tr><td width="40%" align="left">Part�II.�Administrator's Guide&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="acs-admin.html">Up</a></td><td width="40%" align="right">&nbsp;Individual Programs</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/software-versions.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/subsites-design.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/subsites-design.html,v diff -u -r1.6.2.4 -r1.6.2.5 --- openacs-4/packages/acs-core-docs/www/subsites-design.html 7 Apr 2003 16:59:26 -0000 1.6.2.4 +++ openacs-4/packages/acs-core-docs/www/subsites-design.html 15 Apr 2003 17:03:03 -0000 1.6.2.5 @@ -1,11 +1,11 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS 4 Subsites Design Document</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="previous" href="subsites-requirements.html" title="OpenACS 4 Subsites Requirements"><link rel="next" href="apm-requirements.html" title="OpenACS 4.6.2 Package Manager Requirements"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="subsites-requirements.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Kernel Documentation</th><td width="20%" align="right"> <a accesskey="n" href="apm-requirements.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="subsites-design"></a>OpenACS 4 Subsites Design Document</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS 4 Subsites Design Document</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="previous" href="subsites-requirements.html" title="OpenACS 4 Subsites Requirements"><link rel="next" href="apm-requirements.html" title="OpenACS 4.6.2 Package Manager Requirements"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="subsites-requirements.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�11.�Kernel Documentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="apm-requirements.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="subsites-design"></a>OpenACS 4 Subsites Design Document</h2></div></div><div class="authorblurb"><p> by <a href="http://planitia.org" target="_top">Rafael H. Schloming</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. </p></div><p><span class="emphasis"><em>*Note* This document has not gone through the any of the required QA process yet. It is being tagged as stable due to high -demand.</em></span></p><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-essentials"></a>Essentials</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="subsites-requirements.html">OpenACS 4 Subsites Requirements</a></p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-intro"></a>Introduction</h3></div></div><p>An OpenACS 4 subsite is a managed suite of applications that work together for +demand.</em></span></p><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-essentials"></a>Essentials</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="subsites-requirements.html">OpenACS 4 Subsites Requirements</a></p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-intro"></a>Introduction</h3></div></div><p>An OpenACS 4 subsite is a managed suite of applications that work together for a particular user community. This definition covers a very broad range of requirements: from a Geocities style homepage where a user can install whatever available application he wants (e.g. a single user could have their @@ -18,7 +18,7 @@ the Request Processor. Since the design and implementation directly associated with subsites is actually minimal, a discussion of subsites design is, in fact, a discussion of how core OpenACS 4 components implicitly support -subsites as a whole.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-hist-considerations"></a>Historical Considerations</h3></div></div><p>The subsites problem actually has several quite diverse origins. It was +subsites as a whole.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-hist-considerations"></a>Historical Considerations</h3></div></div><p>The subsites problem actually has several quite diverse origins. It was originally recognized as a toolkit feature in the form of "scoping". The basic concept behind scoping was to allow one scoped OpenACS installation to behave as multiple unscoped OpenACS installations so that one @@ -33,15 +33,15 @@ consistent theme among all of them is the concept that various areas of the web site have their own private version of a module. Because this theme is so dominant, this is the primary problem that the OpenACS4 implementation of -subsites addresses.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-competitors"></a>Competitive Analysis</h3></div></div><p>...</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-design-tradeoffs"></a>Design Tradeoffs</h3></div></div><p>The current implementation of package instances and subsites allows +subsites addresses.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-competitors"></a>Competitive Analysis</h3></div></div><p>...</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-design-tradeoffs"></a>Design Tradeoffs</h3></div></div><p>The current implementation of package instances and subsites allows extremely flexible URL configurations. This has the benefit of allowing multiple instances of the same package to be installed in one subsite, but can potentially complicate the process of integrating packages with each other since it is likely people will want packages that live at non standard URLs to operate together. This requirement would cause some packages to have more configuration options than normal since hard-coding the URLs would not -be feasible anymore.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-api"></a>API</h3></div></div><p>This section will cover all the APIs relevant to subsites, and so will -consist of portions of the APIs of several systems.</p><p><span class="strong"><em>Packages</em></span></p><p>The following package is provided for instantiation of packages. The +be feasible anymore.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-api"></a>API</h3></div></div><p>This section will cover all the APIs relevant to subsites, and so will +consist of portions of the APIs of several systems.</p><p><span class="strong">Packages</span></p><p>The following package is provided for instantiation of packages. The apm_package.new function can be used to create a package of any type known to the system. The apm_package_types table can be queried for a list of installed packages. (See APM docs for more detail XXX: insert link here)</p><pre class="programlisting"> @@ -101,7 +101,7 @@ show errors </tt> -</pre><p><span class="strong"><em>Site Nodes</em></span></p><p>This data model keeps track of what packages are being served from what +</pre><p><span class="strong">Site Nodes</span></p><p>This data model keeps track of what packages are being served from what URLs. You can think of this as a kind of rp_register_directory_map on drugs. This table represents a fully hierarchical site map. The directory_p column indicates whether or not the node is a leaf node. The pattern_p column @@ -182,7 +182,7 @@ show errors </tt> -</pre><p><span class="strong"><em>Request Processor</em></span></p><p>Once the above APIs are used to create packages and mount them on a +</pre><p><span class="strong">Request Processor</span></p><p>Once the above APIs are used to create packages and mount them on a specific site node, the following request processor APIs can be used to allow the package to serve content appropriate to the package instance.</p><pre class="programlisting"> @@ -191,15 +191,15 @@ [ad_conn package_url] </tt> -</pre></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-data-model"></a>Data Model Discussion</h3></div></div><p>The subsites implementation doesn't really have it's own data +</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-data-model"></a>Data Model Discussion</h3></div></div><p>The subsites implementation doesn't really have it's own data model, although it depends heavily on the site-nodes data model, and the APM -data model.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-ui"></a>User Interface</h3></div></div><p>The primary elements of the subsite user interface consist of the subsite +data model.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-ui"></a>User Interface</h3></div></div><p>The primary elements of the subsite user interface consist of the subsite admin pages. These pages are divided up into two areas: Group administration, and the site map. The group administration pages allow a subsite administrator to create and modify groups. The site map pages allow a subsite administrator to install, remove, configure, and control access to packages. The site map interface is the primary point of entry for most of the things a -subsite administrator would want to do.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-config"></a>Configuration/Parameters</h3></div></div><p>...</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-future"></a>Future Improvements/Areas of Likely Change</h3></div></div><p>The current subsites implementation addresses the most basic functionality +subsite administrator would want to do.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-config"></a>Configuration/Parameters</h3></div></div><p>...</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-future"></a>Future Improvements/Areas of Likely Change</h3></div></div><p>The current subsites implementation addresses the most basic functionality required for subsites. It is likely that as developers begin to use the subsites system for more sophisticated projects, it will become necessary to develop tools to help build tightly integrated packages. The general area @@ -210,4 +210,4 @@ a particular configuration of site nodes/packages. As we build more fundamental applications that can be applied in more general areas, this feature will become more and more in demand since more problems will be -solvable by configuration instead of coding.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-authors"></a>Authors</h3></div></div><p><a href="mailto:rhs@mit.edu" target="_top">rhs@mit.edu</a></p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="subsites-requirements.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="apm-requirements.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Subsites Requirements </td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right"> OpenACS 4.6.2 Package Manager Requirements</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/subsites-design.html#comments">View comments on this page at openacs.org</a></center></body></html> +solvable by configuration instead of coding.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-design-authors"></a>Authors</h3></div></div><p><a href="mailto:rhs@mit.edu" target="_top">rhs@mit.edu</a></p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="subsites-requirements.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="apm-requirements.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Subsites Requirements&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS 4.6.2 Package Manager Requirements</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/subsites-design.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/subsites-requirements.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/subsites-requirements.html,v diff -u -r1.6.2.4 -r1.6.2.5 --- openacs-4/packages/acs-core-docs/www/subsites-requirements.html 7 Apr 2003 16:59:26 -0000 1.6.2.4 +++ openacs-4/packages/acs-core-docs/www/subsites-requirements.html 15 Apr 2003 17:03:03 -0000 1.6.2.5 @@ -1,19 +1,19 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS 4 Subsites Requirements</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="previous" href="groups-design.html" title="OpenACS 4 Groups Design"><link rel="next" href="subsites-design.html" title="OpenACS 4 Subsites Design Document"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="groups-design.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Kernel Documentation</th><td width="20%" align="right"> <a accesskey="n" href="subsites-design.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="subsites-requirements"></a>OpenACS 4 Subsites Requirements</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS 4 Subsites Requirements</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="previous" href="groups-design.html" title="OpenACS 4 Groups Design"><link rel="next" href="subsites-design.html" title="OpenACS 4 Subsites Design Document"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="groups-design.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�11.�Kernel Documentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="subsites-design.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="subsites-requirements"></a>OpenACS 4 Subsites Requirements</h2></div></div><div class="authorblurb"><p> by <a href="http://planitia.org" target="_top">Rafael H. Schloming</a> and <a href="mailto:dennis@arsdigita.com" target="_top">Dennis Gregorovic</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-requirements-intro"></a>Introduction</h3></div></div><p>The following is a requirements document for OpenACS 4 Subsites, part of the + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-requirements-intro"></a>Introduction</h3></div></div><p>The following is a requirements document for OpenACS 4 Subsites, part of the OpenACS 4 Kernel. The Subsites system allows one OpenACS server instance to serve multiple user communities, by enabling the suite of available OpenACS -applications to be customized for defined user communities.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-requirements-vision"></a>Vision Statement</h3></div></div><p>Many online communities are also collections of discrete subcommunities, +applications to be customized for defined user communities.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-requirements-vision"></a>Vision Statement</h3></div></div><p>Many online communities are also collections of discrete subcommunities, reflecting real-world relationships. For example, a corporate intranet/extranet website serves both units within the company (e.g., offices, departments, teams, projects) and external parties (e.g., customers, partners, vendors). Subsites enable a single OpenACS instance to provide each subcommunity with its own "virtual website," by assembling OpenACS packages that together deliver a feature set tailored to the needs of the -subcommunity.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-requirements-system-overview"></a>System Overview</h3></div></div><p>The OpenACS subsite system allows a single OpenACS installation to serve multiple +subcommunity.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-requirements-system-overview"></a>System Overview</h3></div></div><p>The OpenACS subsite system allows a single OpenACS installation to serve multiple communities. At an implementation level this is primarily accomplished by having an application "scope" its content to a particular package instance. The <a href="rp-design.html" title="OpenACS 4 Request Processor Design">request @@ -23,7 +23,7 @@ subsite admins a "control panel" for administering their subsite. This is the same package used to provide all the community core functionality available at the "main" site which is in fact simply another -subsite.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-requirements-use-cases"></a>Use-cases and User-scenarios</h3></div></div><p>The Subsites functionality is intended for use by two different classes of +subsite.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-requirements-use-cases"></a>Use-cases and User-scenarios</h3></div></div><p>The Subsites functionality is intended for use by two different classes of users:</p><div class="orderedlist"><ol type="1"><li><p>Package programmers (referred to as 'the programmer') must develop subcommunity-aware applications.</p></li><li><p>Site administrators (referred to as 'the administrator') use subsites to provide tailored "virtual websites" to different @@ -41,18 +41,18 @@ http://www.company.com/offices/boston/bboard, and similarly for the Austin office. At this point, the Boston and Austin office admins can customize the configurations for each of their bboards, or they can just use the -defaults.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-requirements-links"></a>Related Links</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="subsites-design.html">OpenACS 4 Subsites Design Document</a></p></li><li><p>Test plan (Not available yet)</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-requirements-api"></a>Requirements: Programmer's API</h3></div></div><p>A subsite API is required for programmers to ensure their packages are -subsite-aware. The following functions should be sufficient for this:</p><p><span class="strong"><em>10.10.0 Package creation</em></span></p><p>The system must provide an API call to create a package, and it must be -possible for the context (to which the package belongs) to be specified.</p><p><span class="strong"><em>10.20.0 Package deletion</em></span></p><p>The system must provide an API call to delete a package and all related -objects in the subsite's context.</p><p><span class="strong"><em>10.30.0 Object's package information</em></span></p><p>Given an object ID, the system must provide an API call to determine the -package (ID) to which the object belongs.</p><p><span class="strong"><em>10.40.0 URL from package</em></span></p><p>Given a package (ID), the system must provide an API call to return the -canonical URL for that package.</p><p><span class="strong"><em>10.50.0 Main subsite's package_id</em></span></p><p>The system must provide an API call to return a package ID corresponding -to the main subsite's package ID (the degenerate subsite).</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-requirements-ui"></a>Requirements: The User Interface</h3></div></div><p><span class="strong"><em>The Programmer's User Interface</em></span></p><p>There is no programmer's UI, other than the API described above.</p><p><span class="strong"><em>The Administrator's User Interface</em></span></p><p>The UI for administrators is a set of HTML pages that are used to drive +defaults.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-requirements-links"></a>Related Links</h3></div></div><div class="itemizedlist"><ul type="disc"><li><p><a href="subsites-design.html">OpenACS 4 Subsites Design Document</a></p></li><li><p>Test plan (Not available yet)</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-requirements-api"></a>Requirements: Programmer's API</h3></div></div><p>A subsite API is required for programmers to ensure their packages are +subsite-aware. The following functions should be sufficient for this:</p><p><span class="strong">10.10.0 Package creation</span></p><p>The system must provide an API call to create a package, and it must be +possible for the context (to which the package belongs) to be specified.</p><p><span class="strong">10.20.0 Package deletion</span></p><p>The system must provide an API call to delete a package and all related +objects in the subsite's context.</p><p><span class="strong">10.30.0 Object's package information</span></p><p>Given an object ID, the system must provide an API call to determine the +package (ID) to which the object belongs.</p><p><span class="strong">10.40.0 URL from package</span></p><p>Given a package (ID), the system must provide an API call to return the +canonical URL for that package.</p><p><span class="strong">10.50.0 Main subsite's package_id</span></p><p>The system must provide an API call to return a package ID corresponding +to the main subsite's package ID (the degenerate subsite).</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-requirements-ui"></a>Requirements: The User Interface</h3></div></div><p><span class="strong">The Programmer's User Interface</span></p><p>There is no programmer's UI, other than the API described above.</p><p><span class="strong">The Administrator's User Interface</span></p><p>The UI for administrators is a set of HTML pages that are used to drive the underlying API for package instance management (i.e. adding, removing, or altering packages). It is restricted to administrators of the current subsite such that administrators can only manage their own subsites. Of course, -Site-Wide Administrators can manage all subsites.</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em>20.10.0 Package creation</em></span></p><p><span class="strong"><em>20.10.1</em></span> The administrator should be able to create a -package and make it available at a URL underneath the subsite.</p></li><li><p><span class="strong"><em>20.20.0 Package deactivation</em></span></p><p><span class="strong"><em>20.20.1</em></span> The administrator should be able to deactivate -any package, causing it to be inaccessible to users.</p><p><span class="strong"><em>20.20.5</em></span> Deactivating a package makes the package no +Site-Wide Administrators can manage all subsites.</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong">20.10.0 Package creation</span></p><p><span class="strong">20.10.1</span> The administrator should be able to create a +package and make it available at a URL underneath the subsite.</p></li><li><p><span class="strong">20.20.0 Package deactivation</span></p><p><span class="strong">20.20.1</span> The administrator should be able to deactivate +any package, causing it to be inaccessible to users.</p><p><span class="strong">20.20.5</span> Deactivating a package makes the package no longer accessible, but it does not remove data created within the context of -that package.</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-requirements-rev-history"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong"><em>Document Revision #</em></span></td><td><span class="strong"><em>Action Taken, Notes</em></span></td><td><span class="strong"><em>When?</em></span></td><td><span class="strong"><em>By Whom?</em></span></td></tr><tr><td>0.1</td><td>Creation</td><td>08/18/2000</td><td>Dennis Gregorovic</td></tr><tr><td>0.2</td><td>Edited, reviewed</td><td>08/29/2000</td><td>Kai Wu</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="groups-design.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="subsites-design.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Groups Design </td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right"> OpenACS 4 Subsites Design Document</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/subsites-requirements.html#comments">View comments on this page at openacs.org</a></center></body></html> +that package.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-requirements-rev-history"></a>Revision History</h3></div></div><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><tbody><tr><td><span class="strong">Document Revision #</span></td><td><span class="strong">Action Taken, Notes</span></td><td><span class="strong">When?</span></td><td><span class="strong">By Whom?</span></td></tr><tr><td>0.1</td><td>Creation</td><td>08/18/2000</td><td>Dennis Gregorovic</td></tr><tr><td>0.2</td><td>Edited, reviewed</td><td>08/29/2000</td><td>Kai Wu</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="groups-design.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="subsites-design.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Groups Design&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS 4 Subsites Design Document</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/subsites-requirements.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/subsites.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/subsites.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/subsites.html 7 Apr 2003 16:59:26 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/subsites.html 15 Apr 2003 17:03:03 -0000 1.8.2.5 @@ -1,11 +1,11 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Writing OpenACS 4.6.2 Application Pages</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter 9. Development Reference"><link rel="previous" href="permissions.html" title="Groups, Context, Permissions"><link rel="next" href="parties.html" title="Parties in OpenACS 4.6.2"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="permissions.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Development Reference</th><td width="20%" align="right"> <a accesskey="n" href="parties.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="subsites"></a>Writing OpenACS 4.6.2 Application Pages</h2></div></div><div class="authorblurb"><p><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Writing OpenACS 4.6.2 Application Pages</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter�9.�Development Reference"><link rel="previous" href="permissions.html" title="Groups, Context, Permissions"><link rel="next" href="parties.html" title="Parties in OpenACS 4.6.2"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="permissions.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�9.�Development Reference</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="parties.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="subsites"></a>Writing OpenACS 4.6.2 Application Pages</h2></div></div><div class="authorblurb"><p><p> By <a href="http://planitia.org/" target="_top">Rafael H. Schloming</a> and <a href="mailto:psu@arsdigita.com" target="_top">Pete Su</a> </p><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-overview"></a>Overview</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-overview"></a>Overview</h3></div></div><p> In this document, we'll examine the user interface pages of the Notes application in more detail, covering two separate aspects of page development in OpenACS 4.6.2. First, we'll talk about the code needed to make @@ -14,7 +14,7 @@ form-based user interfaces in OpenACS 4.6.2. While these seem like unrelated topics, they both come up in the example page that we are going to look at, so it makes sense to address them at the same time. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-instances"></a>Application Instances and Subsites</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-instances"></a>Application Instances and Subsites</h3></div></div><p> As you will recall from the <a href="packages.html" title="OpenACS 4.6.2 Packages">packages</a> tutorial, the Request Processor (RP) and Package Manager (APM) in OpenACS 4.6.2 allow site administrators to define an arbitrary mapping from URLs in the site to @@ -127,7 +127,7 @@ without generating a lot of duplicated HTML in your pages. It also encapsulates most of the common logic that we use in dealing with forms, which we'll discuss next. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-using-forms"></a>Using Forms</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-using-forms"></a>Using Forms</h3></div></div><p> The forms API is pretty simple: You use calls in the <tt>template::form</tt> namespace in your Tcl script to create form elements. The final template page then picks this stuff up and @@ -246,7 +246,7 @@ the HTML rendering, input validation and database transaction logic on your behalf. This means that you can write pages without duplicating all of that code in every set of pages that uses forms. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-how-it-all-fits"></a>How it All Fits</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-how-it-all-fits"></a>How it All Fits</h3></div></div><p> To watch all of this work, use the installer to update the Notes package with the new code that you grabbed out of CVS or the package repository, mount an instance of Notes somewhere in your server and @@ -264,7 +264,7 @@ simple, and special purpose application to something that has the potential to be a very useful, general-purpose tool, complete with multi-user features, access control, and centralized administration. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="subsites-summary"></a>Summary</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="subsites-summary"></a>Summary</h3></div></div><p> In OpenACS 4.6.2, application pages and scripts can be aware of the package instance, or subsite in which they are executing. This is a powerful general purpose mechanism that can be used to structure web services @@ -277,4 +277,4 @@ </p><p> We also saw how to use the templating system's forms API in a simple way, to create forms based pages with minimal duplication of code. -</p><p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="permissions.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="parties.html">Next</a></td></tr><tr><td width="40%" align="left">Groups, Context, Permissions </td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right"> Parties in OpenACS 4.6.2</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/subsites.html#comments">View comments on this page at openacs.org</a></center></body></html> +</p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="permissions.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="parties.html">Next</a></td></tr><tr><td width="40%" align="left">Groups, Context, Permissions&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right">&nbsp;Parties in OpenACS 4.6.2</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/subsites.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/tcl-doc.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/tcl-doc.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/tcl-doc.html 7 Apr 2003 16:59:26 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/tcl-doc.html 15 Apr 2003 17:03:03 -0000 1.8.2.5 @@ -1,16 +1,16 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Documenting Tcl Files: Page Contracts and Libraries</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter 11. Kernel Documentation"><link rel="previous" href="rp-design.html" title="OpenACS 4 Request Processor Design"><link rel="next" href="bootstrap-acs.html" title="Bootstrapping OpenACS"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="rp-design.html">Prev</a> </td><th width="60%" align="center">Chapter 11. Kernel Documentation</th><td width="20%" align="right"> <a accesskey="n" href="bootstrap-acs.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="tcl-doc"></a>Documenting Tcl Files: Page Contracts and Libraries</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Documenting Tcl Files: Page Contracts and Libraries</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="kernel-doc.html" title="Chapter�11.�Kernel Documentation"><link rel="previous" href="rp-design.html" title="OpenACS 4 Request Processor Design"><link rel="next" href="bootstrap-acs.html" title="Bootstrapping OpenACS"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="rp-design.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�11.�Kernel Documentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="bootstrap-acs.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="tcl-doc"></a>Documenting Tcl Files: Page Contracts and Libraries</h2></div></div><div class="authorblurb"><p> by <a href="mailto:jsalz@mit.edu" target="_top">Jon Salz</a> on 3 July 2000 <br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="itemizedlist"><ul type="disc"><li><p>Tcl procedures: /packages/acs-kernel/tcl-documentation-procs.tcl</p></li></ul></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="tcl-doc-bigpicture"></a>The Big Picture</h3></div></div><p>We use functions to document Tcl files and a web-based user -interface for browsing the documentation:</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em><tt><a href="tcl-doc.html#tcl-doc-ad-page-contract" title="ad_page_contract">ad_page_contract</a></tt></em></span>: Every Tcl page -has a <span class="strong"><em>contract</em></span> that explicitly defines what inputs the page + </p></div><div class="itemizedlist"><ul type="disc"><li><p>Tcl procedures: /packages/acs-kernel/tcl-documentation-procs.tcl</p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="tcl-doc-bigpicture"></a>The Big Picture</h3></div></div><p>We use functions to document Tcl files and a web-based user +interface for browsing the documentation:</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><tt><a href="tcl-doc.html#tcl-doc-ad-page-contract" title="ad_page_contract">ad_page_contract</a></tt></span>: Every Tcl page +has a <span class="strong">contract</span> that explicitly defines what inputs the page expects (with more precision than <tt>ad_page_variables</tt>) and incorporates metadata about the page (what used to live in the top-of-page comment). Like <tt>ad_page_variables</tt>, <tt>ad_page_contract</tt> -also sets the specified variables in the context of the Tcl page.</p></li><li><p><span class="strong"><em><tt><a href="tcl-doc.html#tcl-doc-ad-library" title="ad_library">ad_library</a></tt></em></span>: To be +also sets the specified variables in the context of the Tcl page.</p></li><li><p><span class="strong"><tt><a href="tcl-doc.html#tcl-doc-ad-library" title="ad_library">ad_library</a></tt></span>: To be called at the top of every library file (i.e., all files in the <tt>/tcl/</tt> directory under the server root and <tt>*-procs.tcl</tt> files under <tt>/packages/</tt>).</p></li></ul></div><p> @@ -21,7 +21,7 @@ its contract which type of abstract document it returns, and the request processor can transform it automatically into something useful to a particular user agent. (Don't worry about this for -now - it's not complete for ACS 3.4.)</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="tcl-doc-ad-page-contract"></a>ad_page_contract</h3></div></div><p> +now - it's not complete for ACS 3.4.)</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="tcl-doc-ad-page-contract"></a>ad_page_contract</h3></div></div><p> Currently <tt>ad_page_contract</tt> serves mostly as a replacement for <tt>ad_page_variables</tt>. Eventually, it will be integrated closely with the documents API so that each script's contract will document @@ -55,38 +55,38 @@ </pre><p> Note that: -</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong"><em>By convention, <tt>ad_page_contract</tt> should be preceded -by a comment line containing the file's path</em></span>. The comment is on +</p><div class="itemizedlist"><ul type="disc"><li><p><span class="strong">By convention, <tt>ad_page_contract</tt> should be preceded +by a comment line containing the file's path</span>. The comment is on line 1, and the contract starts on line 2. -</p></li><li><p><span class="strong"><em><tt>ad_page_contract</tt></em></span>'s first argument is +</p></li><li><p><span class="strong"><tt>ad_page_contract</tt></span>'s first argument is the list of expected arguments from the HTTP query (<tt>version_id</tt>, <tt>public_p</tt>, <tt>kind</tt>, and <tt>format</tt>). Like <tt>ad_page_variables</tt>, <tt>ad_page_contract</tt> sets the corresponding Tcl variables when the page is executed. -</p></li><li><p><span class="strong"><em>Arguments can have defaults</em></span>, specified using the same +</p></li><li><p><span class="strong">Arguments can have defaults</span>, specified using the same syntax as in the Tcl <tt>proc</tt> (a two-element list where the first element is the parameter name and the second argument is the default value). -</p></li><li><p><span class="strong"><em>Arguments can have flags</em></span>, specified by following the +</p></li><li><p><span class="strong">Arguments can have flags</span>, specified by following the name of the query argument with a colon and one or more of the following -strings (separated by commas): </p><div class="itemizedlist"><ul type="round"><li><p><span class="strong"><em><tt>optional</tt></em></span>: the query argument doesn't +strings (separated by commas): </p><div class="itemizedlist"><ul type="circle"><li><p><span class="strong"><tt>optional</tt></span>: the query argument doesn't need to be provided; if it's not, the variable for that argument simply won't be set. For instance, if I call the script above without a <tt>public_p</tt> in the query, then in the page body <tt>[info exists public_p]</tt> will return 0. -</p></li><li><p><span class="strong"><em><tt>integer</tt></em></span>: the argument must be an integer +</p></li><li><p><span class="strong"><tt>integer</tt></span>: the argument must be an integer (<tt>ad_page_contract</tt> will fail and display and error if not). This flag, like the next, is intended to prevent clients from fudging query arguments to trick scripts into executing arbitrary SQL. -</p></li><li><p><span class="strong"><em><tt>sql_identifier</tt></em></span>: the argument must be a SQL +</p></li><li><p><span class="strong"><tt>sql_identifier</tt></span>: the argument must be a SQL identifier (i.e., <tt>[string is wordchar $the_query_var]</tt> must return true). -</p></li><li><p><span class="strong"><em><tt>trim</tt></em></span>: the argument will be [string +</p></li><li><p><span class="strong"><tt>trim</tt></span>: the argument will be [string trim]'ed. -</p></li><li><p><span class="strong"><em><tt>multiple</tt></em></span>: the argument may be specified +</p></li><li><p><span class="strong"><tt>multiple</tt></span>: the argument may be specified arbitrarily many times in the query string, and the variable will be set to a list of all those values (or an empty list if it's unspecified). This is analogous to the <tt>-multiple-list</tt> flag to @@ -100,7 +100,7 @@ then <tt>$dest_user_id</tt> is set to <tt>[list 913 891 9]</tt>. -</p></li><li><p><span class="strong"><em><tt>array</tt></em></span>: the argument may be specified +</p></li><li><p><span class="strong"><tt>array</tt></span>: the argument may be specified arbitrarily many times in the query string, with parameter names with suffixes like <tt>_1</tt>, <tt>_2</tt>, <tt>_3</tt>, etc. The variable is set to a list of all those values (or an empty list if none are @@ -110,27 +110,27 @@ ?dest_user_id_0=913&dest_user_id_1=891&dest_user_id_2=9 </pre><p> -then <tt>$dest_user_id</tt> is set to <tt>[list 913 891 9]</tt>.</p></li></ul></div></li><li><p><span class="strong"><em>You can provide structured, HTML-formatted documentation for your -contract</em></span>. Note that format is derived heavily from Javadoc: a +then <tt>$dest_user_id</tt> is set to <tt>[list 913 891 9]</tt>.</p></li></ul></div></li><li><p><span class="strong">You can provide structured, HTML-formatted documentation for your +contract</span>. Note that format is derived heavily from Javadoc: a general description of the script's functionality, followed optionally by a series of named attributes tagged by at symbols (<tt>@</tt>). You are encouraged to provide: -</p><div class="itemizedlist"><ul type="round"><li><p>A description of the functionality of the page. If the description +</p><div class="itemizedlist"><ul type="circle"><li><p>A description of the functionality of the page. If the description contains more than one sentence, the first sentence should be a brief summary. -</p></li><li><p>A <span class="strong"><em><tt>@param</tt></em></span> tag for each allowable query +</p></li><li><p>A <span class="strong"><tt>@param</tt></span> tag for each allowable query argument. The format is </p><pre class="programlisting"> @param <span class="emphasis"><em>parameter-name</em></span> <span class="emphasis"><em>description...</em></span> -</pre></li><li><p>An <span class="strong"><em><tt>@author</tt></em></span> tag for each author. Specify the -author's name, followed his or her email address in parentheses.</p></li><li><p>A <span class="strong"><em><tt>@creation-date</tt></em></span> tag indicating when the -script was first created.</p></li><li><p>A <span class="strong"><em><tt>@cvs-id</tt></em></span> tag containing the page's CVS +</pre></li><li><p>An <span class="strong"><tt>@author</tt></span> tag for each author. Specify the +author's name, followed his or her email address in parentheses.</p></li><li><p>A <span class="strong"><tt>@creation-date</tt></span> tag indicating when the +script was first created.</p></li><li><p>A <span class="strong"><tt>@cvs-id</tt></span> tag containing the page's CVS identification string. Just use <tt>$Id: tcl-documentation.html,v 1.2 2000/09/19 07:22:35 ron Exp $</tt> when creating the file, and CVS will substitute an appropriate string when you check the file in.</p></li></ul></div><p> - These <tt>@</tt> tags are optional, but highly recommended!</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="tcl-doc-ad-library"></a>ad_library</h3></div></div><p> + These <tt>@</tt> tags are optional, but highly recommended!</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="tcl-doc-ad-library"></a>ad_library</h3></div></div><p> <tt>ad_library</tt> provides a replacement for the informal documentation (described above) found at the beginning of every Tcl page. Instead of: </p><pre class="programlisting"> @@ -164,9 +164,9 @@ the script's functionality, followed optionally by a series of named attributes tagged by at symbols (<tt>@</tt>). HTML formatting is allowed. You are encouraged to provide: -</p><div class="itemizedlist"><ul type="disc"><li><p>An <span class="strong"><em><tt>@author</tt></em></span> tag for each author. Specify the -author's name, followed his or her email address in parentheses.</p></li><li><p>A <span class="strong"><em><tt>@creation-date</tt></em></span> tag indicating when the -script was first created.</p></li><li><p>A <span class="strong"><em><tt>@cvs-id</tt></em></span> tag containing the page's CVS +</p><div class="itemizedlist"><ul type="disc"><li><p>An <span class="strong"><tt>@author</tt></span> tag for each author. Specify the +author's name, followed his or her email address in parentheses.</p></li><li><p>A <span class="strong"><tt>@creation-date</tt></span> tag indicating when the +script was first created.</p></li><li><p>A <span class="strong"><tt>@cvs-id</tt></span> tag containing the page's CVS identification string. Just use <tt>$Id: tcl-documentation.html,v 1.2 2000/09/19 07:22:35 ron Exp $</tt> when creating the file, and CVS will -substitute an appropriate string when you check the file in.</p></li></ul></div><p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="rp-design.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="bootstrap-acs.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Request Processor Design </td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right"> Bootstrapping OpenACS</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/tcl-doc.html#comments">View comments on this page at openacs.org</a></center></body></html> +substitute an appropriate string when you check the file in.</p></li></ul></div><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="rp-design.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="bootstrap-acs.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS 4 Request Processor Design&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="kernel-doc.html">Up</a></td><td width="40%" align="right">&nbsp;Bootstrapping OpenACS</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/tcl-doc.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/templates.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/templates.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/templates.html 7 Apr 2003 16:59:26 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/templates.html 15 Apr 2003 17:03:03 -0000 1.8.2.5 @@ -1,8 +1,8 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Using Templates in OpenACS 4.6.2</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter 9. Development Reference"><link rel="previous" href="db-api.html" title="The OpenACS Database Access API"><link rel="next" href="permissions.html" title="Groups, Context, Permissions"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="db-api.html">Prev</a> </td><th width="60%" align="center">Chapter 9. Development Reference</th><td width="20%" align="right"> <a accesskey="n" href="permissions.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="templates"></a>Using Templates in OpenACS 4.6.2</h2></div></div><div class="authorblurb"><p><p>By <a href="mailto:psu@arsdigita.com" target="_top">Pete Su</a></p><br> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Using Templates in OpenACS 4.6.2</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="dev-guide.html" title="Chapter�9.�Development Reference"><link rel="previous" href="db-api.html" title="The OpenACS Database Access API"><link rel="next" href="permissions.html" title="Groups, Context, Permissions"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="db-api.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�9.�Development Reference</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="permissions.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="templates"></a>Using Templates in OpenACS 4.6.2</h2></div></div><div class="authorblurb"><p><p>By <a href="mailto:psu@arsdigita.com" target="_top">Pete Su</a></p><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="templates-overview"></a>Overview</h3></div></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="templates-overview"></a>Overview</h3></div></div><p> The OpenACS 4.6.2 Template System (ATS) is designed to allow developers to cleanly separate <span class="emphasis"><em>application logic</em></span> from <span class="emphasis"><em>display logic</em></span>. The intent is to have all of the logic related to @@ -29,7 +29,7 @@ actually add notes to the database, how to provide a separate instance of the Notes application to every user and how to design appropriate access control policies for the system. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="templates-entering-notes"></a>Entering Notes</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="templates-entering-notes"></a>Entering Notes</h3></div></div><p> In order for the Notes application to be useful, we have to allow users to enter data into the database. Typically, this takes two pages: one that displays a form for data entry, and another page that @@ -157,7 +157,7 @@ After putting all these files into <tt>ROOT/packages/notes/www</tt>, you should be able to go to <tt>/notes/</tt> URL for your server and see the input form. -</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="templates-summary"></a>Summary</h3></div></div><p> +</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="templates-summary"></a>Summary</h3></div></div><p> Templates separate application logic from display logic by requiring the developer to write pages in two stages, one file for database queries and application logic, and another for display. In OpenACS 4.6.2, the @@ -168,4 +168,4 @@ inserting properties into the text of the page. Later on we'll get into templates more deeply, and show how to use database queries as data sources. -</p><p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="db-api.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="permissions.html">Next</a></td></tr><tr><td width="40%" align="left">The OpenACS Database Access API </td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right"> Groups, Context, Permissions</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/templates.html#comments">View comments on this page at openacs.org</a></center></body></html> +</p><div class="cvstag">($Id$)</div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="db-api.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="permissions.html">Next</a></td></tr><tr><td width="40%" align="left">The OpenACS Database Access API&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="dev-guide.html">Up</a></td><td width="40%" align="right">&nbsp;Groups, Context, Permissions</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/templates.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/tutorial-advanced.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/tutorial-advanced.html,v diff -u -r1.1.2.2 -r1.1.2.3 --- openacs-4/packages/acs-core-docs/www/tutorial-advanced.html 7 Apr 2003 16:59:26 -0000 1.1.2.2 +++ openacs-4/packages/acs-core-docs/www/tutorial-advanced.html 15 Apr 2003 17:03:03 -0000 1.1.2.3 @@ -1,17 +1,17 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Advanced Topics</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="tutorial.html" title="Chapter 8. Development Tutorial"><link rel="previous" href="tutorial-debug.html" title="Debugging and Automated Testing"><link rel="next" href="dev-guide.html" title="Chapter 9. Development Reference"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="tutorial-debug.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Development Tutorial</th><td width="20%" align="right"> <a accesskey="n" href="dev-guide.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="tutorial-advanced"></a>Advanced Topics</h2></div></div><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Important</h3><p>This section is a work in progress.</p></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Advanced Topics</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="tutorial.html" title="Chapter�8.�Development Tutorial"><link rel="previous" href="tutorial-debug.html" title="Debugging and Automated Testing"><link rel="next" href="dev-guide.html" title="Chapter�9.�Development Reference"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="tutorial-debug.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�8.�Development Tutorial</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="dev-guide.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="tutorial-advanced"></a>Advanced Topics</h2></div></div><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Important</h3><p>This section is a work in progress.</p></div><div class="authorblurb"><p> by <a href="mailto:joel@aufrecht.org" target="_top">Joel Aufrecht</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2855810"></a>Overview</h3></div></div><p>This tutorial covers topics which are not essential to + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2915665"></a>Overview</h3></div></div><p>This tutorial covers topics which are not essential to creating a minimal working package. Each section can be used independently of all of the others; all sections assume that you've completed the basic tutorial.</p><div class="itemizedlist"><ul type="disc"><li><p>How to enforce security so that users can't change other users records</p></li><li><p>How to use the content management tables so that ... what?</p></li><li><p>How to change the default stylesheets for Form Builder HTML forms.</p></li><li><p>How to make your package searchable with OpenFTS/Oracle</p></li><li><p>How to make your package send email notifications</p></li><li><p>How to prepare pagelets for inclusion in other pages</p></li><li><p>How and when to put procedures in a tcl procedure library</p></li><li><p>How to add general_comments to your pages</p></li><li><p>More on ad_form - data validation, other stuff. (plan to draw from Jon Griffin's doc)</p></li><li><p>How and when to implement caching</p></li><li><p>partialquery in xql</p></li><li><p>How to use the html/text entry widget to get the - "does this look right" confirm page </p></li><li><p>APM package dependencies</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2855915"></a>Delete with confirmation</h3></div></div><p>We need a way to delete records. We'll create a + "does this look right" confirm page </p></li><li><p>APM package dependencies</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2915766"></a>Delete with confirmation</h3></div></div><p>We need a way to delete records. We'll create a recursive confirmation page.</p><p>Add this column to the table_def in index.tcl</p><pre class="programlisting">{delete "" {} {<td><a href="note-delete?note_id=$note_id">Delete</a></td>}}</pre><p>Create the delete confirmation/execution page.</p><pre class="screen">[service0@yourserver www]$ <b><tt>emacs note-delete.tcl</tt></b></pre><pre class="programlisting">ad_page_contract { A page that gets confirmation and then delete notes. @@ -71,7 +71,7 @@ <formtemplate id="note-del-confirm"></formtemplate> </form></pre><p>The ADP is very simple. The <tt>formtemplate</tt> tag outputs the HTML -form generated by the ad_form command with the matching name. Test it by adding the new files in the APM and then deleting a few samplenotes.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2856106"></a>General_comments</h3></div></div><p>You can track comments for any ACS Object. Here we'll track +form generated by the ad_form command with the matching name. Test it by adding the new files in the APM and then deleting a few samplenotes.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2915954"></a>General_comments</h3></div></div><p>You can track comments for any ACS Object. Here we'll track comments for notes. On the notes.tcl/adp pair, which is used to display individual notes, we want to put a link to add comments at the bottom of the screen. If there are any comments, we want to @@ -92,13 +92,13 @@ there are comments. Then you pass the note id, which is also the acs_object id.</p><p>We put our two new variables in the notes.adp page.</p><pre class="programlisting"><a href="@comment_add_url@">Add a comment</a> -@comments_html@</pre></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2856186"></a>Prepare the package for distribution.</h3></div></div><p>Browse to the package manager. Click on +@comments_html@</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2916033"></a>Prepare the package for distribution.</h3></div></div><p>Browse to the package manager. Click on <tt><span class="guilabel">tutorialapp</span></tt>.</p><p>Click on <tt><span class="guilabel">Generate a distribution file for this package from the filesystem</span></tt>. </p><p>Click on the file size (<tt><span class="guilabel">37.1KB</span></tt>) after the label <tt><span class="guilabel">Distribution File:</span></tt> and save the file to - /tmp.</p><p><a class="indexterm" name="id2856254"></a> -</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tutorial-debug.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="dev-guide.html">Next</a></td></tr><tr><td width="40%" align="left">Debugging and Automated Testing </td><td width="20%" align="center"><a accesskey="u" href="tutorial.html">Up</a></td><td width="40%" align="right"> Chapter 9. Development Reference</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/tutorial-advanced.html#comments">View comments on this page at openacs.org</a></center></body></html> + /tmp.</p><p><a class="indexterm" name="id2916102"></a> +</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tutorial-debug.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="dev-guide.html">Next</a></td></tr><tr><td width="40%" align="left">Debugging and Automated Testing&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="tutorial.html">Up</a></td><td width="40%" align="right">&nbsp;Chapter�9.�Development Reference</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/tutorial-advanced.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/tutorial-database.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/tutorial-database.html,v diff -u -r1.1.2.2 -r1.1.2.3 --- openacs-4/packages/acs-core-docs/www/tutorial-database.html 7 Apr 2003 16:59:26 -0000 1.1.2.2 +++ openacs-4/packages/acs-core-docs/www/tutorial-database.html 15 Apr 2003 17:03:03 -0000 1.1.2.3 @@ -1,9 +1,9 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Setting Up Database Objects</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="tutorial.html" title="Chapter 8. Development Tutorial"><link rel="previous" href="tutorial-newpackage.html" title="Creating a Package"><link rel="next" href="tutorial-pages.html" title="Creating Web Pages"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="tutorial-newpackage.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Development Tutorial</th><td width="20%" align="right"> <a accesskey="n" href="tutorial-pages.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="tutorial-database"></a>Setting Up Database Objects</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Setting Up Database Objects</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="tutorial.html" title="Chapter�8.�Development Tutorial"><link rel="previous" href="tutorial.html" title="Chapter�8.�Development Tutorial"><link rel="next" href="tutorial-pages.html" title="Creating Web Pages"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="tutorial.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�8.�Development Tutorial</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="tutorial-pages.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="tutorial-database"></a>Setting Up Database Objects</h2></div></div><div class="authorblurb"><p> by <a href="mailto:joel@aufrecht.org" target="_top">Joel Aufrecht</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2852796"></a>Code the data model</h3></div></div><p>We create all database objects with scripts in the + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2912623"></a>Code the data model</h3></div></div><p>We create all database objects with scripts in the <tt>samplenote/sql/</tt> directory. All database scripts are database-specific and are thus in either the <tt>samplenote/sql/oracle</tt> or @@ -40,7 +40,7 @@ <tt>@author</tt> which will be picked up by the API browser. The string <tt>$Id$</tt> will automatically be - expanded when the file is checked in to cvs.</p><pre class="screen">[service0@yourserver postgresql]$ <b><tt>emacs samplenote-create.sql</tt></b></pre><p>Paste this into the file and save and close.</p><div class="figure"><p class="title"><b>Figure 8.2. Database Creation Script - master create file</b></p><pre class="programlisting">-- + expanded when the file is checked in to cvs.</p><pre class="screen">[service0@yourserver postgresql]$ <b><tt>emacs samplenote-create.sql</tt></b></pre><p>Paste this into the file and save and close.</p><div class="figure"><a name="id2912816"></a><p class="title"><b>Figure�8.1.�Database Creation Script - master create file</b></p><pre class="programlisting">-- -- packages/samplenote/sql/postgresql/samplenote-create.sql -- -- @author rhs@mit.edu @@ -50,7 +50,7 @@ -- \i samplenote-table-create.sql -\i samplenote-functions-create.sql</pre></div><p>Create the file to create the database table.</p><pre class="screen">[service0@yourserver postgresql]$ <b><tt>emacs samplenote-table-create.sql</tt></b></pre><p>Paste this into the file and save and close.</p><div class="figure"><p class="title"><b>Figure 8.3. Database Creation Script - table</b></p><pre class="programlisting">-- +\i samplenote-functions-create.sql</pre></div><p>Create the file to create the database table.</p><pre class="screen">[service0@yourserver postgresql]$ <b><tt>emacs samplenote-table-create.sql</tt></b></pre><p>Paste this into the file and save and close.</p><div class="figure"><a name="id2912863"></a><p class="title"><b>Figure�8.2.�Database Creation Script - table</b></p><pre class="programlisting">-- -- packages/samplenote/sql/postgresql/samplenote-table-create.sql -- -- @author rhs@mit.edu @@ -101,7 +101,7 @@ end;' language 'plpgsql'; select inline_0 (); drop function inline_0 (); -</pre></div><p>Create the file to create the functions used to manipulate records.</p><pre class="screen">[service0@yourserver postgresql]$ <b><tt>emacs samplenote-functions-create.sql</tt></b></pre><p>Paste this into the file and save and close.</p><div class="figure"><p class="title"><b>Figure 8.4. Database Creation Script - functions</b></p><pre class="programlisting">-- +</pre></div><p>Create the file to create the functions used to manipulate records.</p><pre class="screen">[service0@yourserver postgresql]$ <b><tt>emacs samplenote-functions-create.sql</tt></b></pre><p>Paste this into the file and save and close.</p><div class="figure"><a name="id2910891"></a><p class="title"><b>Figure�8.3.�Database Creation Script - functions</b></p><pre class="programlisting">-- -- packages/samplenote/sql/postgresql/samplenote-functions-create.sql -- -- @author rhs@mit.edu @@ -196,7 +196,7 @@ end; ' language 'plpgsql'; </pre></div><p>Create a database file to drop everything if the package - is uninstalled.</p><pre class="screen">[service0@yourserver postgresql]$ <b><tt>emacs samplenote-drop.sql</tt></b></pre><div class="figure"><p class="title"><b>Figure 8.5. Database deletion script</b></p><pre class="programlisting">-- packages/samplenote/sql/samplenote-drop.sql + is uninstalled.</p><pre class="screen">[service0@yourserver postgresql]$ <b><tt>emacs samplenote-drop.sql</tt></b></pre><div class="figure"><a name="id2910997"></a><p class="title"><b>Figure�8.4.�Database deletion script</b></p><pre class="programlisting">-- packages/samplenote/sql/samplenote-drop.sql -- drop script -- -- @author rhs@mit.edu @@ -310,4 +310,4 @@ 0 (1 row) -[service0@yourserver postgresql]$</pre><p>Once both scripts are working without errors, run the create script one last time and proceed.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tutorial-newpackage.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="tutorial-pages.html">Next</a></td></tr><tr><td width="40%" align="left">Creating a Package </td><td width="20%" align="center"><a accesskey="u" href="tutorial.html">Up</a></td><td width="40%" align="right"> Creating Web Pages</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/tutorial-database.html#comments">View comments on this page at openacs.org</a></center></body></html> +[service0@yourserver postgresql]$</pre><p>Once both scripts are working without errors, run the create script one last time and proceed.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tutorial.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="tutorial-pages.html">Next</a></td></tr><tr><td width="40%" align="left">Chapter�8.�Development Tutorial&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="tutorial.html">Up</a></td><td width="40%" align="right">&nbsp;Creating Web Pages</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/tutorial-database.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/tutorial-debug.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/tutorial-debug.html,v diff -u -r1.1.2.2 -r1.1.2.3 --- openacs-4/packages/acs-core-docs/www/tutorial-debug.html 7 Apr 2003 16:59:26 -0000 1.1.2.2 +++ openacs-4/packages/acs-core-docs/www/tutorial-debug.html 15 Apr 2003 17:03:03 -0000 1.1.2.3 @@ -1,9 +1,9 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Debugging and Automated Testing</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="tutorial.html" title="Chapter 8. Development Tutorial"><link rel="previous" href="tutorial-pages.html" title="Creating Web Pages"><link rel="next" href="tutorial-advanced.html" title="Advanced Topics"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="tutorial-pages.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Development Tutorial</th><td width="20%" align="right"> <a accesskey="n" href="tutorial-advanced.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="tutorial-debug"></a>Debugging and Automated Testing</h2></div></div><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Important</h3><p>This section is a work in progress.</p></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Debugging and Automated Testing</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="tutorial.html" title="Chapter�8.�Development Tutorial"><link rel="previous" href="tutorial-pages.html" title="Creating Web Pages"><link rel="next" href="tutorial-advanced.html" title="Advanced Topics"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="tutorial-pages.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�8.�Development Tutorial</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="tutorial-advanced.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="tutorial-debug"></a>Debugging and Automated Testing</h2></div></div><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Important</h3><p>This section is a work in progress.</p></div><div class="authorblurb"><p> by <a href="mailto:joel@aufrecht.org" target="_top">Joel Aufrecht</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2855572"></a>Debugging</h3></div></div><p><b>PostgreSQL.�</b>You can work directly with the database to do debugging + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2913249"></a>Debugging</h3></div></div><p><b>PostgreSQL.�</b>You can work directly with the database to do debugging steps like looking directly at tables and testing stored procedures. <span class="bold"><b>Start emacs. Type <b><tt>M-x sql-postgres</tt></b>. Press enter for @@ -13,16 +13,16 @@ wasn't recognized, because the tcl file is choking on the *SQL* placeholder that it falls back on.</p><p><b>Watching the server log.�</b>NOTE: explain how to add tcl to directly write your own log outputTo set up real-time monitoring of the Aolserver error log, <span class="bold"><b>type <pre class="screen">less /usr/local/aolserver/log/openacs-dev-error.log</pre></b></span> - <div class="literallayout"><p>F�to�show�new�log�entries�in�real�time�(like�tail�-f)<br> + </p><div class="literallayout"><p>F�to�show�new�log�entries�in�real�time�(like�tail�-f)<br> C-c�to�stop�and�F�to�start�it�up�again.�<br> G�goes�to�the�end.<br> ?�searches�backward�<br> /�searches�forward.�<br> -����������</p></div> - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2855667"></a>Manual testing</h3></div></div><p>Make a list of basic tests to make sure it works</p><div class="segmentedlist"><table border="0"><thead><tr><th>Test Num</th><th>Action</th><th>Expected Result</th></tr></thead><tbody><tr><td>001</td><td>Browse to the index page while not logged in and +����������</p></div><p> + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2913338"></a>Manual testing</h3></div></div><p>Make a list of basic tests to make sure it works</p><div class="segmentedlist"><table border="0"><thead><tr><th>Test Num</th><th>Action</th><th>Expected Result</th></tr></thead><tbody><tr><td>001</td><td>Browse to the index page while not logged in and while one or more notes exist.</td><td>No edit or delete or add links should appear.</td></tr><tr><td>002</td><td>Browse to the index page while logged in. An Edit link should appear. Click on it. Fill out the form and click Submit.</td><td>The text added in the form should be visible on the index page.</td></tr></tbody></table></div><p>Other things to test: try to delete someone else's note. Try to delete your own note. Edit your own note. - Search for a note.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2855747"></a>Write automated tests</h3></div></div><p><a class="indexterm" name="id2855756"></a>(Forthcoming.)</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tutorial-pages.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="tutorial-advanced.html">Next</a></td></tr><tr><td width="40%" align="left">Creating Web Pages </td><td width="20%" align="center"><a accesskey="u" href="tutorial.html">Up</a></td><td width="40%" align="right"> Advanced Topics</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/tutorial-debug.html#comments">View comments on this page at openacs.org</a></center></body></html> + Search for a note.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2913419"></a>Write automated tests</h3></div></div><p><a class="indexterm" name="id2913427"></a>(Forthcoming.)</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tutorial-pages.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="tutorial-advanced.html">Next</a></td></tr><tr><td width="40%" align="left">Creating Web Pages&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="tutorial.html">Up</a></td><td width="40%" align="right">&nbsp;Advanced Topics</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/tutorial-debug.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/tutorial-pages.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/tutorial-pages.html,v diff -u -r1.1.2.2 -r1.1.2.3 --- openacs-4/packages/acs-core-docs/www/tutorial-pages.html 7 Apr 2003 16:59:26 -0000 1.1.2.2 +++ openacs-4/packages/acs-core-docs/www/tutorial-pages.html 15 Apr 2003 17:03:03 -0000 1.1.2.3 @@ -1,9 +1,9 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Creating Web Pages</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="tutorial.html" title="Chapter 8. Development Tutorial"><link rel="previous" href="tutorial-database.html" title="Setting Up Database Objects"><link rel="next" href="tutorial-debug.html" title="Debugging and Automated Testing"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="tutorial-database.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Development Tutorial</th><td width="20%" align="right"> <a accesskey="n" href="tutorial-debug.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="tutorial-pages"></a>Creating Web Pages</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Creating Web Pages</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="tutorial.html" title="Chapter�8.�Development Tutorial"><link rel="previous" href="tutorial-database.html" title="Setting Up Database Objects"><link rel="next" href="tutorial-debug.html" title="Debugging and Automated Testing"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="tutorial-database.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�8.�Development Tutorial</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="tutorial-debug.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="tutorial-pages"></a>Creating Web Pages</h2></div></div><div class="authorblurb"><p> by <a href="mailto:joel@aufrecht.org" target="_top">Joel Aufrecht</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. - </p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2854525"></a>Build the "Index" page</h3></div></div><p>Each user-visible page in your package has, typically, + </p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2911844"></a>Build the "Index" page</h3></div></div><p>Each user-visible page in your package has, typically, three parts. The <tt>xql</tt> file contains any database queries, the <tt>tcl</tt> file holds the procedural logic for the page and does things like check permissions, invoke the database queries, and modify @@ -69,7 +69,7 @@ </queryset></pre><p>Create the user-visible page.</p><pre class="screen">[service0@yourserver www]$ <b><tt>emacs index.adp</tt></b></pre><p>The first line indicates that this page should be rendered within the the master template, which defaults to <tt>/web/service0/www/default-master</tt>. The second line passes a <tt>title</tt> variable to the master template. The third line inserts the contents of the variable <tt>table_html</tt>. The last line is a link to a page we haven't created yet.</p><pre class="programlisting"><master> <property name="title">Sample Notes</property> @table_html@ -<p><a href="note-edit">Add a note</a></p></pre></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2855042"></a>Add files to APM</h3></div></div><p>Before we can test these files, we have to notify the +<p><a href="note-edit">Add a note</a></p></pre></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2911245"></a>Add files to APM</h3></div></div><p>Before we can test these files, we have to notify the package manager that they exist. (More precisely, the tcl and adp will work fine as-is, but the xql file will not be recognized until we tell the APM about it.).</p><div class="itemizedlist"><ul type="disc"><li><p> Go to <tt>http://yourserver.test:8000/acs-admin/apm</tt></p></li><li><p>Click on the <tt>samplenote</tt> link</p></li><li><p>Click <tt>Manage file information</tt></p></li><li><p>Click <tt>Scan the packages/samplenote directory for additional files in thispackage </tt></p></li><li><p>Click <tt>add checked files</tt></p></li><li><p>On the list of files, on the @@ -79,7 +79,7 @@ loaded when they're added.) Watching an xql file causes the APM to load the contents of the XQL into memory so that it can be used, and to reload it whenever the file is changed. The - watch will last until the server is restarted.</p></li></ul></div><p>Now that the pages are in the APM, check to make sure that the self-documenting code is working.</p><div class="itemizedlist"><ul type="disc"><li><p>Browse to <tt>http://yourserver.test:8000/api-doc/</tt></p></li><li><p>Click <tt>Notes 0.1d</tt></p></li><li><p>Click <tt>Content Pages</tt></p></li><li><p>Click <tt>index.tcl</tt> and examine the results.</p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2855228"></a>Test the index page</h3></div></div><p>Go to <tt>http://<span class="replaceable">yourserver.test:8000</span>/note/</tt>. You should see this:</p><pre class="screen"> + watch will last until the server is restarted.</p></li></ul></div><p>Now that the pages are in the APM, check to make sure that the self-documenting code is working.</p><div class="itemizedlist"><ul type="disc"><li><p>Browse to <tt>http://yourserver.test:8000/api-doc/</tt></p></li><li><p>Click <tt>Notes 0.1d</tt></p></li><li><p>Click <tt>Content Pages</tt></p></li><li><p>Click <tt>index.tcl</tt> and examine the results.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2911425"></a>Test the index page</h3></div></div><p>Go to <tt>http://<span class="replaceable">yourserver.test:8000</span>/note/</tt>. You should see this:</p><pre class="screen"> Sample Notes Your Workspace : Main Site : Sample Note @@ -88,7 +88,7 @@ Add a note. foo@yourserver.test -</pre><p>Since our table is empty, it's a pretty boring page. So next we'll make it possible to add records. </p><p>If you get any other output, such as an error message, skip to <a href="tutorial-debug.html" title="Debugging and Automated Testing">the section called “Debugging and Automated Testing”</a>.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2855282"></a>Add the add/edit page</h3></div></div><p>We'll create a single page to handle both adding and +</pre><p>Since our table is empty, it's a pretty boring page. So next we'll make it possible to add records. </p><p>If you get any other output, such as an error message, skip to <a href="tutorial-debug.html" title="Debugging and Automated Testing">the section called “Debugging and Automated Testing”</a>.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2911475"></a>Add the add/edit page</h3></div></div><p>We'll create a single page to handle both adding and editing records. In this recursive approach, the same tcl function can present a blank HTML form, present the same form pre-loaded with an existing record, and handle the resulting @@ -167,7 +167,7 @@ <tt>title</tt>, for both variables but wrap it in curly brackets for context so that the spaces aren't interpreted separators. The formtemplate tag outputs the form - html with the matching name.</p><p>Go to the APM as before and scan for new files and add your new work. Then test all this by going to the package home page and adding and editing a few records.</p></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2855479"></a>Adding files to cvs</h3></div></div><p>Put your new work into source control.</p><pre class="screen">[service0@yourserver www]$ <b><tt>cvs add *.adp *.tcl *.xql</tt></b> + html with the matching name.</p><p>Go to the APM as before and scan for new files and add your new work. Then test all this by going to the package home page and adding and editing a few records.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2913169"></a>Adding files to cvs</h3></div></div><p>Put your new work into source control.</p><pre class="screen">[service0@yourserver www]$ <b><tt>cvs add *.adp *.tcl *.xql</tt></b> cvs add: cannot add special file `CVS'; skipping cvs add: doc/CVS already exists cvs add: scheduling file `index.adp' for addition @@ -182,4 +182,4 @@ <span class="emphasis"><em>(many lines omitted)</em></span> initial revision: 1.1 done -[service0@yourserver www]$</pre></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tutorial-database.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="tutorial-debug.html">Next</a></td></tr><tr><td width="40%" align="left">Setting Up Database Objects </td><td width="20%" align="center"><a accesskey="u" href="tutorial.html">Up</a></td><td width="40%" align="right"> Debugging and Automated Testing</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/tutorial-pages.html#comments">View comments on this page at openacs.org</a></center></body></html> +[service0@yourserver www]$</pre></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tutorial-database.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="tutorial-debug.html">Next</a></td></tr><tr><td width="40%" align="left">Setting Up Database Objects&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="tutorial.html">Up</a></td><td width="40%" align="right">&nbsp;Debugging and Automated Testing</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/tutorial-pages.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/tutorial.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/tutorial.html,v diff -u -r1.1.2.1 -r1.1.2.2 --- openacs-4/packages/acs-core-docs/www/tutorial.html 30 Mar 2003 20:33:12 -0000 1.1.2.1 +++ openacs-4/packages/acs-core-docs/www/tutorial.html 15 Apr 2003 17:03:03 -0000 1.1.2.2 @@ -1,2 +1,2 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Chapter 8. Development Tutorial</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="acs-dev.html" title="Part III. For OpenACS Developers"><link rel="previous" href="acs-dev.html" title="Part III. For OpenACS Developers"><link rel="next" href="tutorial-newpackage.html" title="Creating a Package"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="acs-dev.html">Prev</a> </td><th width="60%" align="center">Part III. For OpenACS Developers</th><td width="20%" align="right"> <a accesskey="n" href="tutorial-newpackage.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><h2 class="title"><a name="tutorial"></a>Chapter 8. Development Tutorial</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="tutorial-newpackage.html">Creating a Package</a></dt><dt><a href="tutorial-database.html">Setting Up Database Objects</a></dt><dt><a href="tutorial-pages.html">Creating Web Pages</a></dt><dt><a href="tutorial-debug.html">Debugging and Automated Testing</a></dt><dt><a href="tutorial-advanced.html">Advanced Topics</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="acs-dev.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="tutorial-newpackage.html">Next</a></td></tr><tr><td width="40%" align="left">Part III. For OpenACS Developers </td><td width="20%" align="center"><a accesskey="u" href="acs-dev.html">Up</a></td><td width="40%" align="right"> Creating a Package</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/tutorial.html#comments">View comments on this page at openacs.org</a></center></body></html> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter�8.�Development Tutorial</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="acs-dev.html" title="Part�III.�For OpenACS Developers"><link rel="previous" href="acs-dev.html" title="Part�III.�For OpenACS Developers"><link rel="next" href="tutorial-database.html" title="Setting Up Database Objects"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="acs-dev.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part�III.�For OpenACS Developers</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="tutorial-database.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><h2 class="title"><a name="tutorial"></a>Chapter�8.�Development Tutorial</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="tutorial-database.html">Setting Up Database Objects</a></dt><dt><a href="tutorial-pages.html">Creating Web Pages</a></dt><dt><a href="tutorial-debug.html">Debugging and Automated Testing</a></dt><dt><a href="tutorial-advanced.html">Advanced Topics</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="acs-dev.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="tutorial-database.html">Next</a></td></tr><tr><td width="40%" align="left">Part�III.�For OpenACS Developers&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="acs-dev.html">Up</a></td><td width="40%" align="right">&nbsp;Setting Up Database Objects</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/tutorial.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/unix-install.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/Attic/unix-install.html,v diff -u -r1.6.2.3 -r1.6.2.4 --- openacs-4/packages/acs-core-docs/www/unix-install.html 30 Mar 2003 06:04:04 -0000 1.6.2.3 +++ openacs-4/packages/acs-core-docs/www/unix-install.html 15 Apr 2003 17:03:03 -0000 1.6.2.4 @@ -1,2 +1,2 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Chapter 3. Installing on Unix/Linux</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="acs-admin.html" title="Part II. Administrator's Guide"><link rel="previous" href="individual-programs.html" title="Individual Programs"><link rel="next" href="install-overview.html" title="Overview"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="individual-programs.html">Prev</a> </td><th width="60%" align="center">Part II. Administrator's Guide</th><td width="20%" align="right"> <a accesskey="n" href="install-overview.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><h2 class="title"><a name="unix-install"></a>Chapter 3. Installing on Unix/Linux</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="install-overview.html">Overview</a></dt><dt><a href="linux-installation.html">Install Linux and supporting software</a></dt><dt><a href="oracle.html">Install Oracle 8.1.7</a></dt><dt><a href="postgres.html">Install PostgreSQL 7.2.3</a></dt><dt><a href="aolserver.html">Install AOLserver 3.3+ad13</a></dt><dt><a href="openacs.html">Install OpenACS 4.6.2</a></dt><dt><a href="credits.html">Credits</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="individual-programs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="install-overview.html">Next</a></td></tr><tr><td width="40%" align="left">Individual Programs </td><td width="20%" align="center"><a accesskey="u" href="acs-admin.html">Up</a></td><td width="40%" align="right"> Overview</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/unix-install.html#comments">View comments on this page at openacs.org</a></center></body></html> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter�3.�Installing on Unix/Linux</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="acs-admin.html" title="Part�II.�Administrator's Guide"><link rel="previous" href="individual-programs.html" title="Individual Programs"><link rel="next" href="install-overview.html" title="Overview"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="individual-programs.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part�II.�Administrator's Guide</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="install-overview.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><h2 class="title"><a name="unix-install"></a>Chapter�3.�Installing on Unix/Linux</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="install-overview.html">Overview</a></dt><dt><a href="linux-installation.html">Install Linux and supporting software</a></dt><dt><a href="oracle.html">Install Oracle 8.1.7</a></dt><dt><a href="postgres.html">Install PostgreSQL 7.2.3</a></dt><dt><a href="aolserver.html">Install AOLserver 3.3+ad13</a></dt><dt><a href="openacs.html">Install OpenACS 4.6.2</a></dt><dt><a href="credits.html">Credits</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="individual-programs.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="install-overview.html">Next</a></td></tr><tr><td width="40%" align="left">Individual Programs&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="acs-admin.html">Up</a></td><td width="40%" align="right">&nbsp;Overview</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/unix-install.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/upgrade-4.5-to-4.6.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/upgrade-4.5-to-4.6.html,v diff -u -r1.4 -r1.4.2.1 --- openacs-4/packages/acs-core-docs/www/upgrade-4.5-to-4.6.html 7 Apr 2003 16:59:26 -0000 1.4 +++ openacs-4/packages/acs-core-docs/www/upgrade-4.5-to-4.6.html 15 Apr 2003 17:03:03 -0000 1.4.2.1 @@ -1,13 +1,13 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Upgrading OpenACS 4.5 to 4.6</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="upgrade.html" title="Chapter 6. Upgrading"><link rel="previous" href="upgrade-detail.html" title="Support for upgrades."><link rel="next" href="maintenance.html" title="Chapter 7. Maintenance"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="upgrade-detail.html">Prev</a> </td><th width="60%" align="center">Chapter 6. Upgrading</th><td width="20%" align="right"> <a accesskey="n" href="maintenance.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="upgrade-4.5-to-4.6"></a>Upgrading OpenACS 4.5 to 4.6</h2></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2847451"></a>Checklist</h3></div></div><p>The required platform for OpenACS 4.6 is the same as +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Upgrading OpenACS 4.5 to 4.6</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="upgrade.html" title="Chapter�6.�Upgrading"><link rel="previous" href="upgrade-detail.html" title="Support for upgrades."><link rel="next" href="maintenance.html" title="Chapter�7.�Maintenance"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="upgrade-detail.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�6.�Upgrading</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="maintenance.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="upgrade-4.5-to-4.6"></a>Upgrading OpenACS 4.5 to 4.6</h2></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2900844"></a>Checklist</h3></div></div><p>The required platform for OpenACS 4.6 is the same as 4.5, with the excepion of OpenFTS. You now need OpenFTS 0.3.2, not 0.2. - OpenACS 4.6 does not support PostGreSQL 7.3.</p><div class="itemizedlist"><ul type="circle"><li style="list-style-type: circle"><p>A computer with OpenACS 4.5.</p></li><li style="list-style-type: circle"><p><a href="http://openacs.org/projects/openacs/download/" target="_top">OpenACS 4.6 tarball</a></p></li><li style="list-style-type: circle"><p>Required for Full Text Search on PostGreSQL: <a href="http://openfts.sourceforge.net" target="_top">OpenFTS 0.3.2</a></p></li></ul></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2847506"></a>Overview</h3></div></div><p>OpenACS consists of files and a database schema. The files + OpenACS 4.6 does not support PostGreSQL 7.3.</p><div class="itemizedlist"><ul type="circle"><li style="list-style-type: circle"><p>A computer with OpenACS 4.5.</p></li><li style="list-style-type: circle"><p><a href="http://openacs.org/projects/openacs/download/" target="_top">OpenACS 4.6 tarball</a></p></li><li style="list-style-type: circle"><p>Required for Full Text Search on PostGreSQL: <a href="http://openfts.sourceforge.net" target="_top">OpenFTS 0.3.2</a></p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2900897"></a>Overview</h3></div></div><p>OpenACS consists of files and a database schema. The files in the OpenACS 4.6 tarball include database upgrade scripts. To start the upgrade, replace your existing files with the new files and then restart the server. Then, browse to the APM, which will detect the new packages and offer to run the appropriate database upgrade scripts. After restarting the server again, the upgrade is - complete.</p><div class="figure"><p class="title"><b>Figure 6.1. Assumptions in this section</b></p><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><tbody><tr><td>name of OpenACS user</td><td><span class="replaceable">nsadmin</span></td></tr><tr><td>OpenACS server name</td><td><span class="replaceable">openacs-dev</span></td></tr><tr><td>Root of OpenACS file tree</td><td><span class="replaceable">/web/openacs-dev</span></td></tr><tr><td>Database backup directory</td><td><span class="replaceable">/backup/openacs/</span></td></tr></tbody></table></div></div></div><div class="sect2"><div class="titlepage"><div><h3 class="title"><a name="id2847610"></a><a class="indexterm" name="id2847614"></a>Upgrading on Linux/Unix</h3></div></div><div class="orderedlist"><ol type="1"><li><p><b>Make a Backup.�</b>Back up the database and file system.</p><div class="itemizedlist"><ul type="disc"><li><p><b>PostGreSQL.�</b>Create a backup file and verify that it was created and has a reasonable size (several megabytes).</p><pre class="screen">[root@localhost root]# <b><tt>su - nsadmin</tt></b> + complete.</p><div class="figure"><a name="id2900916"></a><p class="title"><b>Figure�6.1.�Assumptions in this section</b></p><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><tbody><tr><td>name of OpenACS user</td><td><span class="replaceable">nsadmin</span></td></tr><tr><td>OpenACS server name</td><td><span class="replaceable">openacs-dev</span></td></tr><tr><td>Root of OpenACS file tree</td><td><span class="replaceable">/web/openacs-dev</span></td></tr><tr><td>Database backup directory</td><td><span class="replaceable">/backup/openacs/</span></td></tr></tbody></table></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><h3 class="title"><a name="id2901001"></a><a class="indexterm" name="id2901004"></a>Upgrading on Linux/Unix</h3></div></div><div class="orderedlist"><ol type="1"><li><p><b>Make a Backup.�</b>Back up the database and file system.</p><div class="itemizedlist"><ul type="disc"><li><p><b>PostGreSQL.�</b>Create a backup file and verify that it was created and has a reasonable size (several megabytes).</p><pre class="screen">[root@localhost root]# <b><tt>su - nsadmin</tt></b> [nsadmin@localhost aolserver]$ <b><tt>pg_dump -f /backup/openacs/openacs_dev_before_upgrade_to_4.6.dmp <span class="replaceable">openacs-dev</span></tt></b> [nsadmin@localhost aolserver]$ <b><tt>ls -al /backup/openacs/openacs_dev_before_upgrade_to_4.6.dmp </tt></b> -rw-rw-r-- 1 nsadmin nsadmin 4005995 Feb 21 18:28 /backup/openacs/openacs_dev_before_upgrade_to_4.6.dmp @@ -152,4 +152,4 @@ svc -u /service/<span class="replaceable">openacs-dev</span> cd /web/<span class="replaceable">openacs-dev</span> cvs up -r current -exit</pre></pre></li></ol></div></div><p><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="upgrade-detail.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="maintenance.html">Next</a></td></tr><tr><td width="40%" align="left">Support for upgrades. </td><td width="20%" align="center"><a accesskey="u" href="upgrade.html">Up</a></td><td width="40%" align="right"> Chapter 7. Maintenance</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/upgrade-4.5-to-4.6.html#comments">View comments on this page at openacs.org</a></center></body></html> +exit</pre></pre></li></ol></div></div><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="upgrade-detail.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="maintenance.html">Next</a></td></tr><tr><td width="40%" align="left">Support for upgrades.&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="upgrade.html">Up</a></td><td width="40%" align="right">&nbsp;Chapter�7.�Maintenance</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/upgrade-4.5-to-4.6.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/upgrade-detail.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/Attic/upgrade-detail.html,v diff -u -r1.3 -r1.3.2.1 --- openacs-4/packages/acs-core-docs/www/upgrade-detail.html 30 Mar 2003 06:04:04 -0000 1.3 +++ openacs-4/packages/acs-core-docs/www/upgrade-detail.html 15 Apr 2003 17:03:03 -0000 1.3.2.1 @@ -1,5 +1,5 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Support for upgrades.</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="upgrade.html" title="Chapter 6. Upgrading"><link rel="previous" href="upgrade.html" title="Chapter 6. Upgrading"><link rel="next" href="upgrade-4.5-to-4.6.html" title="Upgrading OpenACS 4.5 to 4.6"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="upgrade.html">Prev</a> </td><th width="60%" align="center">Chapter 6. Upgrading</th><td width="20%" align="right"> <a accesskey="n" href="upgrade-4.5-to-4.6.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="upgrade-detail"></a>Support for upgrades.</h2></div></div><div class="authorblurb"><p> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Support for upgrades.</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="upgrade.html" title="Chapter�6.�Upgrading"><link rel="previous" href="upgrade.html" title="Chapter�6.�Upgrading"><link rel="next" href="upgrade-4.5-to-4.6.html" title="Upgrading OpenACS 4.5 to 4.6"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="upgrade.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�6.�Upgrading</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="upgrade-4.5-to-4.6.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="upgrade-detail"></a>Support for upgrades.</h2></div></div><div class="authorblurb"><p> by <a href="mailto:joel@aufrecht.org" target="_top">Joel Aufrecht</a><br> OpenACS docs are written by the named authors, but may be edited by OpenACS documentation staff. @@ -8,4 +8,4 @@ or better, you should always be able to upgrade all of your core packages automatically. If you haven't changed anything, no manual intervention should be required. If you are running - OpenACS prior to 4.5, upgrading will require manual effort.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="upgrade.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="upgrade-4.5-to-4.6.html">Next</a></td></tr><tr><td width="40%" align="left">Chapter 6. Upgrading </td><td width="20%" align="center"><a accesskey="u" href="upgrade.html">Up</a></td><td width="40%" align="right"> Upgrading OpenACS 4.5 to 4.6</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/upgrade-detail.html#comments">View comments on this page at openacs.org</a></center></body></html> + OpenACS prior to 4.5, upgrading will require manual effort.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="upgrade.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="upgrade-4.5-to-4.6.html">Next</a></td></tr><tr><td width="40%" align="left">Chapter�6.�Upgrading&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="upgrade.html">Up</a></td><td width="40%" align="right">&nbsp;Upgrading OpenACS 4.5 to 4.6</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/upgrade-detail.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/upgrade.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/upgrade.html,v diff -u -r1.3 -r1.3.2.1 --- openacs-4/packages/acs-core-docs/www/upgrade.html 30 Mar 2003 06:04:04 -0000 1.3 +++ openacs-4/packages/acs-core-docs/www/upgrade.html 15 Apr 2003 17:03:03 -0000 1.3.2.1 @@ -1,2 +1,2 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Chapter 6. Upgrading</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="acs-admin.html" title="Part II. Administrator's Guide"><link rel="previous" href="mac-installation.html" title="OpenACS Installation Guide for Mac OS X"><link rel="next" href="upgrade-detail.html" title="Support for upgrades."><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="mac-installation.html">Prev</a> </td><th width="60%" align="center">Part II. Administrator's Guide</th><td width="20%" align="right"> <a accesskey="n" href="upgrade-detail.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><h2 class="title"><a name="upgrade"></a>Chapter 6. Upgrading</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="upgrade-detail.html">Support for upgrades.</a></dt><dt><a href="upgrade-4.5-to-4.6.html">Upgrading OpenACS 4.5 to 4.6</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="mac-installation.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="upgrade-detail.html">Next</a></td></tr><tr><td width="40%" align="left">OpenACS Installation Guide for Mac OS X </td><td width="20%" align="center"><a accesskey="u" href="acs-admin.html">Up</a></td><td width="40%" align="right"> Support for upgrades.</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/upgrade.html#comments">View comments on this page at openacs.org</a></center></body></html> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter�6.�Upgrading</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="acs-admin.html" title="Part�II.�Administrator's Guide"><link rel="previous" href="mac-install.html" title="Chapter�5.�Installing on a Macintosh"><link rel="next" href="upgrade-detail.html" title="Support for upgrades."><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="mac-install.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part�II.�Administrator's Guide</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="upgrade-detail.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><h2 class="title"><a name="upgrade"></a>Chapter�6.�Upgrading</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="upgrade-detail.html">Support for upgrades.</a></dt><dt><a href="upgrade-4.5-to-4.6.html">Upgrading OpenACS 4.5 to 4.6</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="mac-install.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="upgrade-detail.html">Next</a></td></tr><tr><td width="40%" align="left">Chapter�5.�Installing on a Macintosh&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="acs-admin.html">Up</a></td><td width="40%" align="right">&nbsp;Support for upgrades.</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/upgrade.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/win-install.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/Attic/win-install.html,v diff -u -r1.8.2.3 -r1.8.2.4 --- openacs-4/packages/acs-core-docs/www/win-install.html 30 Mar 2003 06:04:04 -0000 1.8.2.3 +++ openacs-4/packages/acs-core-docs/www/win-install.html 15 Apr 2003 17:03:03 -0000 1.8.2.4 @@ -1,2 +1,2 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>Chapter 4. Installing on Windows</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="acs-admin.html" title="Part II. Administrator's Guide"><link rel="previous" href="credits.html" title="Credits"><link rel="next" href="win2k-installation.html" title="OpenACS Installation Guide for Windows2000"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="credits.html">Prev</a> </td><th width="60%" align="center">Part II. Administrator's Guide</th><td width="20%" align="right"> <a accesskey="n" href="win2k-installation.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><h2 class="title"><a name="win-install"></a>Chapter 4. Installing on Windows</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="win2k-installation.html">OpenACS Installation Guide for Windows2000</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="credits.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="win2k-installation.html">Next</a></td></tr><tr><td width="40%" align="left">Credits </td><td width="20%" align="center"><a accesskey="u" href="acs-admin.html">Up</a></td><td width="40%" align="right"> OpenACS Installation Guide for Windows2000</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/win-install.html#comments">View comments on this page at openacs.org</a></center></body></html> +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter�4.�Installing on Windows</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="acs-admin.html" title="Part�II.�Administrator's Guide"><link rel="previous" href="credits.html" title="Credits"><link rel="next" href="win2k-installation.html" title="OpenACS Installation Guide for Windows2000"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="credits.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part�II.�Administrator's Guide</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="win2k-installation.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><h2 class="title"><a name="win-install"></a>Chapter�4.�Installing on Windows</h2></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><a href="win2k-installation.html">OpenACS Installation Guide for Windows2000</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="credits.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="win2k-installation.html">Next</a></td></tr><tr><td width="40%" align="left">Credits&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="acs-admin.html">Up</a></td><td width="40%" align="right">&nbsp;OpenACS Installation Guide for Windows2000</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/win-install.html#comments">View comments on this page at openacs.org</a></center></body></html> Index: openacs-4/packages/acs-core-docs/www/win2k-installation.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/win2k-installation.html,v diff -u -r1.8.2.4 -r1.8.2.5 --- openacs-4/packages/acs-core-docs/www/win2k-installation.html 7 Apr 2003 16:59:26 -0000 1.8.2.4 +++ openacs-4/packages/acs-core-docs/www/win2k-installation.html 15 Apr 2003 17:03:03 -0000 1.8.2.5 @@ -1,6 +1,6 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"><title>OpenACS Installation Guide for Windows2000</title><meta name="generator" content="DocBook XSL Stylesheets V1.50.0"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="win-install.html" title="Chapter 4. Installing on Windows"><link rel="previous" href="win-install.html" title="Chapter 4. Installing on Windows"><link rel="next" href="mac-install.html" title="Chapter 5. Installing on a Macintosh"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="win-install.html">Prev</a> </td><th width="60%" align="center">Chapter 4. Installing on Windows</th><td width="20%" align="right"> <a accesskey="n" href="mac-install.html">Next</a></td></tr></table><hr></div><div class="sect1"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="win2k-installation"></a>OpenACS Installation Guide for Windows2000</h2></div></div><p>Currently the best option to get OpenACS 4.6.2 running on Windows +<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>OpenACS Installation Guide for Windows2000</title><meta name="generator" content="DocBook XSL Stylesheets V1.58.1"><link rel="home" href="index.html" title="OpenACS Documentation"><link rel="up" href="win-install.html" title="Chapter�4.�Installing on Windows"><link rel="previous" href="win-install.html" title="Chapter�4.�Installing on Windows"><link rel="next" href="mac-install.html" title="Chapter�5.�Installing on a Macintosh"><link rel="stylesheet" href="openacs.css" type="text/css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><a href="http://openacs.org"><img src="images/alex.jpg" border="0"></a><table width="100%" summary="Navigation header" border="0"><tr><td width="20%" align="left"><a accesskey="p" href="win-install.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter�4.�Installing on Windows</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="mac-install.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><h2 class="title" style="clear: both"><a name="win2k-installation"></a>OpenACS Installation Guide for Windows2000</h2></div></div><p>Currently the best option to get OpenACS 4.6.2 running on Windows is to use <a href="http://vmware.com" target="_top">VMware</a> and John Sequeira's <a href="http://www.pobox.com/~johnseq/projects/oasisvm/" target="_top">Oasis VM distribution</a> - </p><p><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="win-install.html">Prev</a> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="mac-install.html">Next</a></td></tr><tr><td width="40%" align="left">Chapter 4. Installing on Windows </td><td width="20%" align="center"><a accesskey="u" href="win-install.html">Up</a></td><td width="40%" align="right"> Chapter 5. Installing on a Macintosh</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/win2k-installation.html#comments">View comments on this page at openacs.org</a></center></body></html> + </p><div class="cvstag">($Id$)</div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="win-install.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="mac-install.html">Next</a></td></tr><tr><td width="40%" align="left">Chapter�4.�Installing on Windows&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="win-install.html">Up</a></td><td width="40%" align="right">&nbsp;Chapter�5.�Installing on a Macintosh</td></tr></table><hr><address>rmello at fslc.usu.edu</address><address><a href="mailto:vinod@kurup.com">vinod@kurup.com</a></address></div><a name="comments"></a><center><a href="http://openacs.org/doc/openacs-4/win2k-installation.html#comments">View comments on this page at openacs.org</a></center></body></html> Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/acs-core-docs/www/files/qmail.rc.txt'. Fisheye: No comparison available. Pass `N' to diff? Index: openacs-4/packages/acs-core-docs/www/xml/openacs.xsl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/xml/openacs.xsl,v diff -u -r1.4.2.2 -r1.4.2.3 --- openacs-4/packages/acs-core-docs/www/xml/openacs.xsl 30 Mar 2003 01:56:11 -0000 1.4.2.2 +++ openacs-4/packages/acs-core-docs/www/xml/openacs.xsl 15 Apr 2003 17:04:47 -0000 1.4.2.3 @@ -5,8 +5,13 @@ <!-- vinodk: Imports chunk.xsl --> +<!-- Red Hat 8/xsl-stylesheets 1.50.0-3 <xsl:import href="/usr/share/sgml/docbook/xsl-stylesheets-1.50.0-3/html/chunk.xsl"/> +--> +<!-- Red Hat 9/xsl-stylesheets 1.58.1-2 --> + <xsl:import href="/usr/share/sgml/docbook/xsl-stylesheets-1.58.1-2/html/chunk.xsl"/> + <!-- vinodk: Not sure if this is needed --> <xsl:output media-type="text/html" encoding="iso-8859-1"/> Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/acs-core-docs/www/xml/files/qmail.rc.txt'. Fisheye: No comparison available. Pass `N' to diff?