0.00%
Search · Index

Weblog Page

Filtered by category developer, 11 - 20 of 22 Postings (all, summary)

Triggers

Created by Anett Szabo, last modified by Malte Sussdorff 25 Jul 2007, at 05:56 PM

A trigger is a fragment of code that you tell Oracle to run before or after a table is modified. A trigger has the power to

  • make sure that a column is filled in with default information
  • make sure that an audit row is inserted into another table
  • after finding that the new information is inconsistent with other stuff in the database, raise an error that will cause the entire transaction to be rolled back

Remember the mailing lists example from the beginning?

 

Suppose that you've been using the above data model to collect the names of Web site readers who'd like to be alerted when you add new articles. You haven't sent any notices for two months. You want to send everyone who signed up in the last two months a "Welcome to my Web service; thanks for signing up; here's what's new" message. You want to send the older subscribers a simple "here's what's new" message. But you can't do this because you didn't store a registration date. It is easy enough to fix the table:

alter table mailing_list add (registration_date date);
But what if you have 15 different Web scripts that use this table? The ones that query it aren't a problem. If they don't ask for the new column, they won't get it and won't realize that the table has been changed (this is one of the big selling features of the RDBMS). But the scripts that update the table will all need to be changed. If you miss a script, you're potentially stuck with a table where various random rows are missing critical information.

Oracle has a solution to your problem: triggers. A trigger is a way of telling Oracle "any time anyone touches this table, I want you to execute the following little fragment of code". Here's how we define the trigger mailing_list_registration_date:


create trigger mailing_list_registration_date
before insert on mailing_list
for each row
when (new.registration_date is null)
begin
:new.registration_date := sysdate;
end;
Note that the trigger only runs when someone is trying to insert a row with a NULL registration date. If for some reason you need to copy over records from another database and they have a registration date, you don't want this trigger overwriting it with the date of the copy.

A second point to note about this trigger is that it runs for each row. This is called a "row-level trigger" rather than a "statement-level trigger", which runs once per transaction, and is usually not what you want.

A third point is that we're using the magic Oracle procedure sysdate, which will return the current time. The Oracle date type is precise to the second even though the default is to display only the day.

A fourth point is that, starting with Oracle 8, we could have done this more cleanly by adding a default sysdate instruction to the column's definition.

The final point worth noting is the :new. syntax. This lets you refer to the new values being inserted. There is an analogous :old. feature, which is useful for update triggers:


create or replace trigger mailing_list_update
before update on mailing_list
for each row
when (new.name <> old.name)
begin
-- user is changing his or her name
-- record the fact in an audit table
insert into mailing_list_name_changes
(old_name, new_name)
values
(:old.name, :new.name);
end;
/
show errors
This time we used the create or replace syntax. This keeps us from having to drop trigger mailing_list_update if we want to change the trigger definition. We added a comment using the SQL comment shortcut "--". The syntax new. and old. is used in the trigger definition, limiting the conditions under which the trigger runs. Between the begin and end, we're in a PL/SQL block. This is Oracle's procedural language, described later, in which new.name would mean "the name element from the record in new". So you have to use :new instead. It is obscurities like this that lead to competent Oracle consultants being paid $200+ per hour.

The "/" and show errors at the end are instructions to Oracle's SQL*Plus program. The slash says "I'm done typing this piece of PL/SQL, please evaluate what I've typed." The "show errors" says "if you found anything to object to in what I just typed, please tell me".

Also consider the general_comments table:


create table general_comments (
comment_id integer primary key,
on_what_id integer not null,
on_which_table varchar(50),
user_id not null references users,
comment_date date not null,
ip_address varchar(50) not null,
modified_date date not null,
content clob,
-- is the content in HTML or plain text (the default)
html_p char(1) default 'f' check(html_p in ('t','f')),
approved_p char(1) default 't' check(approved_p in ('t','f'))
);
Users and administrators are both able to edit comments. We want to make sure that we know when a comment was last modified so that we can offer the administrator a "recently modified comments page". Rather than painstakingly go through all of our Web scripts that insert or update comments, we can specify an invariant in Oracle that "after every time someone touches the general_comments table, make sure that the modified_date column is set equal to the current date-time." Here's the trigger definition:

create trigger general_comments_modified
before insert or update on general_comments
for each row
begin
:new.modified_date := sysdate;
end;
/
show errors
We're using the PL/SQL programming language, discussed in the procedural language chapter. In this case, it is a simple begin-end block that sets the :new value of modified_date to the result of calling the sysdate function.

When using SQL*Plus, you have to provide a / character to get the program to evaluate a trigger or PL/SQL function definition. You then have to say "show errors" if you want SQL*Plus to print out what went wrong. Unless you expect to write perfect code all the time, it can be convenient to leave these SQL*Plus incantations in your .sql files.

An Audit Table Example

  The canonical trigger example is the stuffing of an audit table. For example, in the data warehouse section of the ArsDigita Community System, we keep a table of user queries. Normally the SQL code for a query is kept in a query_columns table. However, sometimes a user might hand edit the generated SQL code, in which case we simply store that in the query_sqlqueries table. The SQL code for a query might be very important to a business and might have taken years to evolve. Even if we have good RDBMS backups, we don't want it getting erased because of a careless mouse click. So we add a queries_audit table to keep historical values of the query_sql column:

create table queries (
query_id integer primary key,
query_name varchar(100) not null,
query_owner not null references users,
definition_time date not null,
-- if this is non-null, we just forget about all the query_columns
-- stuff; the user has hand edited the SQL
query_sql varchar(4000)
);

create table queries_audit (
query_id integer not null,
audit_time date not null,
query_sql varchar(4000)
);
Note first that queries_audit has no primary key. If we were to make query_id the primary key, we'd only be able to store one history item per query, which is not our intent.

How to keep this table filled? We could do it by making sure that every Web script that might update the query_sql column inserts a row in queries_audit when appropriate. But how to enforce this after we've handed off our code to other programmers? Much better to let the RDBMS enforce the auditing:


create or replace trigger queries_audit_sql
before update on queries
for each row
when (old.query_sql is not null and (new.query_sql is null or old.query_sql <> new.query_sql))
begin
insert into queries_audit (query_id, audit_time, query_sql)
values
(:old.query_id, sysdate, :old.query_sql);
end;
The structure of a row-level trigger is the following:

CREATE OR REPLACE TRIGGER ***trigger name***
***when*** ON ***which table***
FOR EACH ROW
***conditions for firing***
begin
***stuff to do***
end;
Let's go back and look at our trigger:
  • It is named queries_audit_sql; this is really of no consequence so long as it doesn't conflict with the names of other triggers.
  • It will be run before update, i.e., only when someone is executing an SQL UPDATE statement.
  • It will be run only when someone is updating the table queries.
  • It will be run only when the old value of query_sql is not null; we don't want to fill our audit table with NULLs.
  • It will be run only when the new value of query_sql is different from the old value; we don't want to fill our audit table with rows because someone happens to be updating another column in queries. Note that SQL's three-valued logic forces us to put in an extra test for new.query_sql is null because old.query_sql <> new.query_sql will not evaluate to true when new.query_sql is NULL (a user wiping out the custom SQL altogether; a very important case to audit).

Creating More Elaborate Constraints with Triggers

The default Oracle mechanisms for constraining data are not always adequate. For example, the ArsDigita Community System auction module has a table called au_categories. The category_keyword column is a unique shorthand way of referring to a category in a URL. However, this column may be NULL because it is not the primary key to the table. The shorthand method of referring to the category is optional.

create table au_categories (
category_id integer primary key,
-- shorthand for referring to this category,
-- e.g. "bridges", for use in URLs
category_keyword varchar(30),
-- human-readable name of this category,
-- e.g. "All types of bridges"
category_name varchar(128) not null
);
We can't add a UNIQUE constraint to the category_keyword column. That would allow the table to only have one row where category_keyword was NULL. So we add a trigger that can execute an arbitrary PL/SQL expression and raise an error to prevent an INSERT if necessary:

create or replace trigger au_category_unique_tr
before insert
on au_categories
for each row
declare
existing_count integer;
begin
select count(*) into existing_count from au_categories
where category_keyword = :new.category_keyword;
if existing_count > 0
then
raise_application_error(-20010, 'Category keywords must be unique if used');
end if;
end;

This trigger queries the table to find out if there are any matching keywords already inserted. If there are, it calls the built-in Oracle procedure raise_application_error to abort the transaction.
 

Reference

 

 

---

based on  SQL for Web Nerds

Constraints

Created by Malte Sussdorff, last modified by Malte Sussdorff 25 Jul 2007, at 05:55 PM

Constraints

When you're defining a table, you can constrain single rows by adding some magic words after the data type:
  • not null; requires a value for this column
  • unique; two rows can't have the same value in this column (side effect in Oracle: creates an index)
  • primary key; same as unique except that no row can have a null value for this column and other tables can refer to this column
  • check; limit the range of values for column, e.g., rating integer check(rating > 0 and rating <= 10)
  • references; this column can only contain values present in another table's primary key column, e.g., user_id not null references users in the bboard table forces the user_id column to only point to valid users. An interesting twist is that you don't have to give a data type for user_id; Oracle assigns this column to whatever data type the foreign key has (in this case integer).
Constraints can apply to multiple columns:

create table static_page_authors (
page_id integer not null references static_pages,
user_id integer not null references users,
notify_p char(1) default 't' check (notify_p in ('t','f')),
unique(page_id,user_id)
);
Oracle will let us keep rows that have the same page_id and rows that have the same user_id but not rows that have the same value in both columns (which would not make sense; a person can't be the author of a document more than once). Suppose that you run a university distinguished lecture series. You want speakers who are professors at other universities or at least PhDs. On the other hand, if someone controls enough money, be it his own or his company's, he's in. Oracle stands ready:

create table distinguished_lecturers (
lecturer_id integer primary key,
name_and_title varchar(100),
personal_wealth number,
corporate_wealth number,
check (instr(upper(name_and_title),'PHD') <> 0
or instr(upper(name_and_title),'PROFESSOR') <> 0
or (personal_wealth + corporate_wealth) > 1000000000)
);

insert into distinguished_lecturers
values
(1,'Professor Ellen Egghead',-10000,200000);

1 row created.

insert into distinguished_lecturers
values
(2,'Bill Gates, innovator',75000000000,18000000000);

1 row created.

insert into distinguished_lecturers
values
(3,'Joe Average',20000,0);

ORA-02290: check constraint (PHOTONET.SYS_C001819) violated
As desired, Oracle prevented us from inserting some random average loser into the distinguished_lecturers table, but the error message was confusing in that it refers to a constraint given the name of "SYS_C001819" and owned by the PHOTONET user. We can give our constraint a name at definition time:

create table distinguished_lecturers (
lecturer_id integer primary key,
name_and_title varchar(100),
personal_wealth number,
corporate_wealth number,
constraint ensure_truly_distinguished
check (instr(upper(name_and_title),'PHD') <> 0
or instr(upper(name_and_title),'PROFESSOR') <> 0
or (personal_wealth + corporate_wealth) > 1000000000)
);

insert into distinguished_lecturers
values
(3,'Joe Average',20000,0);

ORA-02290: check constraint (PHOTONET.ENSURE_TRULY_DISTINGUISHED) violated
Now the error message is easier to understand by application programmers.

Tables

Created by Malte Sussdorff, last modified by Malte Sussdorff 25 Jul 2007, at 05:54 PM

THIS NEEDS TO BE AMMENDED FOR POSTGRESQL
 

The basics:


CREATE TABLE your_table_name (
the_key_column key_data_type PRIMARY KEY,
a_regular_column a_data_type,
an_important_column a_data_type NOT NULL,
... up to 996 intervening columns in Oracle8 ...
the_last_column a_data_type
);
Even in a simple example such as the one above, there are few items worth noting. First, I like to define the key column(s) at the very top. Second, the primary key constraint has some powerful effects. It forces the_key_column to be non-null. It causes the creation of an index on the_key_column, which will slow down updates to your_table_name but improve the speed of access when someone queries for a row with a particular value of the_key_column. Oracle checks this index when inserting any new row and aborts the transaction if there is already a row with the same value for the_key_column. Third, note that there is no comma following the definition of the last row. If you are careless and leave the comma in, Oracle will give you a very confusing error message.

If you didn't get it right the first time, you'll probably want to


alter table your_table_name add (new_column_name a_data_type any_constraints);
or

alter table your_table_name modify (existing_column_name new_data_type new_constraints);
In Oracle 8i you can drop a column:

alter table your_table_name drop column existing_column_name;
(see http://www.oradoc.com/keyword/drop_column).

If you're still in the prototype stage, you'll probably find it easier to simply


drop table your_table_name;
and recreate it. At any time, you can see what you've got defined in the database by querying Oracle's Data Dictionary:

SQL> select table_name from user_tables order by table_name;

TABLE_NAME
------------------------------
ADVS
ADV_CATEGORIES
ADV_GROUPS
ADV_GROUP_MAP
ADV_LOG
ADV_USER_MAP
AD_AUTHORIZED_MAINTAINERS
AD_CATEGORIES
AD_DOMAINS
AD_INTEGRITY_CHECKS
BBOARD
...
STATIC_CATEGORIES
STATIC_PAGES
STATIC_PAGE_AUTHORS
USERS
...
after which you will typically type describe table_name_of_interest in SQL*Plus:

SQL> describe users;
Name Null? Type
------------------------------- -------- ----
USER_ID NOT NULL NUMBER(38)
FIRST_NAMES NOT NULL VARCHAR2(100)
LAST_NAME NOT NULL VARCHAR2(100)
PRIV_NAME NUMBER(38)
EMAIL NOT NULL VARCHAR2(100)
PRIV_EMAIL NUMBER(38)
EMAIL_BOUNCING_P CHAR(1)
PASSWORD NOT NULL VARCHAR2(30)
URL VARCHAR2(200)
ON_VACATION_UNTIL DATE
LAST_VISIT DATE
SECOND_TO_LAST_VISIT DATE
REGISTRATION_DATE DATE
REGISTRATION_IP VARCHAR2(50)
ADMINISTRATOR_P CHAR(1)
DELETED_P CHAR(1)
BANNED_P CHAR(1)
BANNING_USER NUMBER(38)
BANNING_NOTE VARCHAR2(4000)
Note that Oracle displays its internal data types rather than the ones you've given, e.g., number(38) rather than integer and varchar2 instead of the specified varchar.

Data Types (Oracle)

Created by Malte Sussdorff, last modified by Malte Sussdorff 25 Jul 2007, at 05:51 PM

Data Types

For each column that you define for a table, you must specify the data type of that column. Here are your options:
Character Data
char(n) A fixed-length character string, e.g., char(200) will take up 200 bytes regardless of how long the string actually is. This works well when the data truly are of fixed size, e.g., when you are recording a user's sex as "m" or "f". This works badly when the data are of variable length. Not only does it waste space on the disk and in the memory cache, but it makes comparisons fail. For example, suppose you insert "rating" into a comment_type column of type char(30) and then your Tcl program queries the database. Oracle sends this column value back to procedural language clients padded with enough spaces to make up 30 total characters. Thus if you have a comparison within Tcl of whether $comment_type == "rating", the comparison will fail because $comment_type is actually "rating" followed by 24 spaces.

The maximum length char in Oracle8 is 2000 bytes.
varchar(n) A variable-length character string, up to 4000 bytes long in Oracle8. These are stored in such a way as to minimize disk space usage, i.e., if you only put one character into a column of type varchar(4000), Oracle only consumes two bytes on disk. The reason that you don't just make all the columns varchar(4000) is that the Oracle indexing system is limited to indexing keys of about 700 bytes.
clob A variable-length character string, up to 4 gigabytes long in Oracle8. The CLOB data type is useful for accepting user input from such applications as discussion forums. Sadly, Oracle8 has tremendous limitations on how CLOB data may be inserted, modified, and queried. Use varchar(4000) if you can and prepare to suffer if you can't.

In a spectacular demonstration of what happens when companies don't follow the lessons of The Mythical Man Month, the regular string functions don't work on CLOBs. You need to call identically named functions in the DBMS_LOB package. These functions take the same arguments but in different orders. You'll never be able to write a working line of code without first reading the DBMS_LOB section of the Oracle8 Server Application Developer's Guide.

nchar, nvarchar, nclob The n prefix stands for "national character set". These work like char, varchar, and clob but for multi-byte characters (e.g., Unicode; see http://www.unicode.org).
Numeric Data
number Oracle actually only has one internal data type that is used for storing numbers. It can handle 38 digits of precision and exponents from -130 to +126. If you want to get fancy, you can specify precision and scale limits. For example, number(3,0) says "round everything to an integer [scale 0] and accept numbers than range from -999 to +999". If you're American and commercially minded, number(9,2) will probably work well for storing prices in dollars and cents (unless you're selling stuff to Bill Gates, in which case the billion dollar limit imposed by the precision of 9 might prove constraining). If you are Bill Gates, you might not want to get distracted by insignificant numbers: Tell Oracle to round everything to the nearest million with number(38,-6).
integer In terms of storage consumed and behavior, this is not any different from number(38) but I think it reads better and it is more in line with ANSI SQL (which would be a standard if anyone actually implemented it).
Dates and Date/Time Intervals (Version 9i and newer)
timestamp A point in time, recorded with sub-second precision. When creating a column you specify the number of digits of precision beyond one second from 0 (single second precision) to 9 (nanosecond precision). Oracle's calendar can handle dates between between January 1, 4712 BC and December 31, 9999 AD. You can put in values with the to_timestamp function and query them out using the to_char function. Oracle offers several variants of this datatype for coping with data aggregated across multiple timezones.
interval year to month An amount of time, expressed in years and months.
interval day to second An amount of time, expressed in days, hours, minutes, and seconds. Can be precise down to the nanosecond if desired.
Dates and Date/Time Intervals (Versions 8i and earlier)
date Obsolete as of version 9i. A point in time, recorded with one-second precision, between January 1, 4712 BC and December 31, 4712 AD. You can put in values with the to_date function and query them out using the to_char function. If you don't use these functions, you're limited to specifying the date with the default system format mask, usually 'DD-MON-YY'. This is a good recipe for a Year 2000 bug since January 23, 2000 would be '23-JAN-00'. On better-maintained systems, this is often the ANSI default: 'YYYY-MM-DD', e.g., '2000-01-23' for January 23, 2000.
number Hey, isn't this a typo? What's number doing in the date section? It is here because this is how Oracle versions prior to 9i represented date-time intervals, though their docs never say this explicitly. If you add numbers to dates, you get new dates. For example, tomorrow at exactly this time is sysdate+1. To query for stuff submitted in the last hour, you limit to submitted_date > sysdate - 1/24.
Binary Data
blob BLOB stands for "Binary Large OBject". It doesn't really have to be all that large, though Oracle will let you store up to 4 GB. The BLOB data type was set up to permit the storage of images, sound recordings, and other inherently binary data. In practice, it also gets used by fraudulent application software vendors. They spend a few years kludging together some nasty format of their own. Their MBA executive customers demand that the whole thing be RDBMS-based. The software vendor learns enough about Oracle to "stuff everything into a BLOB". Then all the marketing and sales folks are happy because the application is now running from Oracle instead of from the file system. Sadly, the programmers and users don't get much because you can't use SQL very effectively to query or update what's inside a BLOB.
bfile A binary file, stored by the operating system (typically Unix) and kept track of by Oracle. These would be useful when you need to get to information both from SQL (which is kept purposefully ignorant about what goes on in the wider world) and from an application that can only read from standard files (e.g., a typical Web server). The bfile data type is pretty new but to my mind it is already obsolete: Oracle 8.1 (8i) lets external applications view content in the database as though it were a file on a Windows NT server. So why not keep everything as a BLOB and enable Oracle's Internet File System?
Despite this plethora of data types, Oracle has some glaring holes that torture developers. For example, there is no Boolean data type. A developer who needs an approved_p column is forced to use char(1) check(this_column in ('t','f')) and then, instead of the clean query where approved_p is forced into where approved_p = 't'.

Oracle8 includes a limited ability to create your own data types. Covering these is beyond the scope of this book. See Oracle8 Server Concepts, User-Defined Datatypes.

The Discussion Forum -- philg's personal odyssey

Created by Malte Sussdorff, last modified by Malte Sussdorff 25 Jul 2007, at 05:50 PM

Back in 1995, I built a threaded discussion forum, described ad nauseum in http://philip.greenspun.com/wtr/dead-trees/53013.htm. Here's how I stored the postings:

create table bboard (
msg_id char(6) not null primary key,
refers_to char(6),
email varchar(200),
name varchar(200),
one_line varchar(700),
message clob,
notify char(1) default 'f' check (notify in ('t','f')),
posting_time date,
sort_key varchar(600)
);
German order reigns inside the system itself: messages are uniquely keyed with msg_id, refer to each other (i.e., say "I'm a response to msg X") with refers_to, and a thread can be displayed conveniently by using the sort_key column.

Italian chaos is permitted in the email and name columns; users could remain anonymous, masquerade as "president@whitehouse.gov" or give any name.

This seemed like a good idea when I built the system. I was concerned that it work reliably. I didn't care whether or not users put in bogus content; the admin pages made it really easy to remove such postings and, in any case, if someone had something interesting to say but needed to remain anonymous, why should the system reject their posting?

One hundred thousand postings later, as the moderator of the photo.net Q&A forum, I began to see the dimensions of my data modeling mistakes.

First, anonymous postings and fake email addresses didn't come from Microsoft employees revealing the dark truth about their evil bosses. They came from complete losers trying and failing to be funny or wishing to humiliate other readers. Some fake addresses came from people scared by the rising tide of spam email (not a serious problem back in 1995).

Second, I didn't realize how the combination of my email alert systems, fake email addresses, and Unix mailers would result in my personal mailbox filling up with messages that couldn't be delivered to "asdf@asdf.com" or "duh@duh.net".

Although the solution involved changing some Web scripts, fundamentally the fix was add a column to store the IP address from which a post was made:


alter table bboard add (originating_ip varchar(16));
Keeping these data enabled me to see that most of the anonymous posters were people who'd been using the forum for some time, typically from the same IP address. I just sent them mail and asked them to stop, explaining the problem with bounced email.

After four years of operating the photo.net community, it became apparent that we needed ways to

  • display site history for users who had changed their email addresses
  • discourage problem users from burdening the moderators and the community
  • carefully tie together user-contributed content in the various subsystems of photo.net
The solution was obvious to any experienced database nerd: a canonical users table and then content tables that reference it. Here's a simplified version of the data model, taken from a toolkit for building online communities, describe in http://philip.greenspun.com/panda/community:

create table users (
user_id integer not null primary key,
first_names varchar(100) not null,
last_name varchar(100) not null,
email varchar(100) not null unique,
..
);

create table bboard (
msg_id char(6) not null primary key,
refers_to char(6),
topic varchar(100) not null references bboard_topics,
category varchar(200), -- only used for categorized Q&A forums
originating_ip varchar(16), -- stored as string, separated by periods
user_id integer not null references users,
one_line varchar(700),
message clob,
-- html_p - is the message in html or not
html_p char(1) default 'f' check (html_p in ('t','f')),
...
);

create table classified_ads (
classified_ad_id integer not null primary key,
user_id integer not null references users,
...
);
Note that a contributor's name and email address no longer appear in the bboard table. That doesn't mean we don't know who posted a message. In fact, this data model can't even represent an anonymous posting: user_id integer not null references users requires that each posting be associated with a user ID and that there actually be a row in the users table with that ID.

First, let's talk about how much fun it is to move a live-on-the-Web 600,000 hit/day service from one data model to another. In this case, note that the original bboard data model had a single name column. The community system has separate columns for first and last names. A conversion script can easily split up "Joe Smith" but what is it to do with William Henry Gates III?

How do we copy over anonymous postings? Remember that Oracle is not flexible or intelligent. We said that we wanted every row in the bboard table to reference a row in the users table. Oracle will abort any transaction that would result in a violation of this integrity constraint. So we either have to drop all those anonymous postings (and any non-anonymous postings that refer to them) or we have to create a user called "Anonymous" and assign all the anonymous postings to that person. The technical term for this kind of solution is kludge.

A more difficult problem than anonymous postings is presented by long-time users who have difficulty typing and or keeping a job. Consider a user who has identified himself as

  1. Joe Smith; jsmith@ibm.com
  2. Jo Smith; jsmith@ibm.com (typo in name)
  3. Joseph Smith; jsmth@ibm.com (typo in email)
  4. Joe Smith; cantuseworkaddr@hotmail.com (new IBM policy)
  5. Joe Smith-Jones; joe_smithjones@hp.com (got married, changed name, changed jobs)
  6. Joe Smith-Jones; jsmith@somedivision.hp.com (valid but not canonical corporate email address)
  7. Josephina Smith; jsmith@somedivision.hp.com (sex change; divorce)
  8. Josephina Smith; josephina_smith@hp.com (new corporate address)
  9. Siddhartha Bodhisattva; josephina_smith@hp.com (change of philosophy)
  10. Siddhartha Bodhisattva; thinkwaitfast@hotmail.com (traveling for awhile to find enlightenment)
Contemporary community members all recognize these postings as coming from the same person but it would be very challenging even to build a good semi-automated means of merging postings from this person into one user record.

Once we've copied everything into this new normalized data model, notice that we can't dig ourselves into the same hole again. If a user has contributed 1000 postings, we don't have 1000 different records of that person's name and email address. If a user changes jobs, we need only update one column in one row in one table.

The html_p column in the new data model is worth mentioning. In 1995, I didn't understand the problems of user-submitted data. Some users will submit plain text, which seems simple, but in fact you can't just spit this out as HTML. If user A typed < or > characters, they might get swallowed by user B's Web browser. Does this matter? Consider that "<g>" is interpreted in various online circles as an abbreviation for "grin" but by Netscape Navigator as an unrecognized (and therefore ignore) HTML tag. Compare the meaning of

"We shouldn't think it unfair that Bill Gates has more wealth than the 100 million poorest Americans combined. After all, he invented the personal computer, the graphical user interface, and the Internet."
with
"We shouldn't think it unfair that Bill Gates has more wealth than the 100 million poorest Americans combined. After all, he invented the personal computer, the graphical user interface, and the Internet. <g>"

It would have been easy enough for me to make sure that such characters never got interpreted as markup. In fact, with AOLserver one can do it with a single call to the built-in procedure ns_quotehtml. However, consider the case where a nerd posts some HTML. Other users would then see

"For more examples of my brilliant thinking and modesty, check out <a href="http://philip.greenspun.com/">my home page</a>."
I discovered that the only real solution is to ask the user whether the submission is an HTML fragment or plain text, show the user an approval page where the content may be previewed, and then remember what the user told us in an html_p column in the database.

Is this data model perfect? Permanent? Absolutely. It will last for at least... Whoa! Wait a minute. I didn't know that Dave Clark was replacing his original Internet Protocol, which the world has been running since around 1980, with IPv6 (http://www.faqs.org/rfcs/rfc2460.html). In the near future, we'll have IP addresses that are 128 bits long. That's 16 bytes, each of which takes two hex characters to represent. So we need 32 characters plus at least 7 more for periods that separate the hex digits. We might also need a couple of characters in front to say "this is a hex representation". Thus our brand new data model in fact has a crippling deficiency. How easy is it to fix? In Oracle:


alter table bboard modify (originating_ip varchar(50));
You won't always get off this easy. Oracle won't let you shrink a column from a maximum of 50 characters to 16, even if no row has a value longer than 16 characters. Oracle also makes it tough to add a column that is constrained not null.


OpenACS Release Notes

Created by Gustaf Neumann, last modified by Gustaf Neumann 22 Jan 2007, at 01:19 AM

The ChangeLogs include an annotated list of changes (the section called “Changelog (most recent release only)”) since the last release and in the entire 5.2 release sequence the section called “Changelog for oacs-5-2”.

  • Bug fixes.

    New TIPs implemented.

    This release does not include new translations.

  • Bug fixes.

    The missing CR TCL API has been filled in, thanks to Rocael and his team and Dave Bauer.

    This release does not include new translations.

  • Bug fixes, primarily for .LRN compatibility in support of upcoming .LRN 2.1.0 releases. This release does not include new translations since 5.1.2.

  • This is the first release using the newest adjustment to the versioning convention. The OpenACS 5.1.1 tag will apply to OpenACS core as well as to the most recent released version of every package, including .LRN.

  • Translations syncronized with the translation server.

  • Bug 1519 fixed. This involved renaming all catalog files for ch_ZH, TH_TH, AR_EG, AR_LB, ms_my, RO_RO, FA_IR, and HR_HR. If you work with any of those locales, you should do a full catalog export and then import (via /acs-lang/admin) after upgrading acs-lang. (And, of course, make a backup of both the files and database before upgrading.)

  • Other bug fixes since 5.1.0: 1785, 1793, and over a dozen additional bug fixes.

  • For a complete change list, see the Change list since 5.0.0 in the section called “Changelog for oacs-5-2”.

  • Lots of little tweaks and fixes

  • Complete Change list since 5.0.0 in Changelog

  • Many Bug fixes

  • New translations, including for .LRN 2.0.2.

  • All work on the translation server from 7 Nov 2003 to 7 Feb 2004 is now included in catalogs.

  • One new function in acs-tcl, util::age_pretty

  • Complete Change list since 5.0.0 in Changelog

  • Many documentation updates and doc bug fixes

This is OpenACS 5.0.0. This version contains no known security, data loss, or crashing bugs, nor any bugs judged release blockers. This version has received manual testing. It has passed current automated testing, which is not comprehensive. This release contains work done on the translation server http://translate.openacs.org through 7 Nov 2003.

Please report bugs using our Bug Tracker at the OpenACS website.

You may want to begin by reading our installation documentation for the section called “a Unix-like system”. Note that the Windows documentation is not current for OpenACS 5.2.3rc1, but an alternative is to use John Sequeira's Oasis VM project.

After installation, the full documentation set can be found by visiting http://yourserver/doc.

New features in this release:

  • Internationalization support. A message catalog to store translated text, localization of dates, number formatting, timezone conversion, etc. Allows you to serve your users in their language.

  • External authenticaiton. Integrate with outside user databases through e.g. LDAP, RADIUS, Kerberos, MS Active Directory. Imports user information through IMS Enterprise 1.1 format. Easily extended to support other authentication, password management, account creation, and account import mechanisms. This includes improvements to the basic cookie handling, so logins can be expired without the user's identity being completely lost. You can set login to expire after a certain period (e.g. 8 hours, then password must be refreshed), or you can have all issues login cookies expired at once, e.g. if you have left a permanent login cookie on a public machine somewhere.

  • User interface enhancements. All pages, including site-wide and subsite admin pages, will be templated, so they can be styled using master template and site-wide stylesheets. We have a new default-master template, which includes links to administration, your workspace, and login/logout, and is rendered using CSS. And there's a new community template (/packages/acs-subsite/www/group-master), which provides useful navigation to the applications and administrative UI in a subsite. In addition, there's new, simpler UI for managing members of a subsite, instantiating and mounting applications, setting permissions, parameters, etc. Site-wide admin as also seen the addition of a new simpler software install UI to replace the APM for non-developer users, and improved access to parameters, internationalization, automated testing, service contracts, etc. The list builder has been added for easily generating templated tables and lists, with features such as filtering, sorting, actions on multiple rows with checkboxes, etc. Most of all, it's fast to use, and results in consistently-looking, consistently-behaving, templated tables.

  • Automated testing. The automated testing framework has been improved significantly, and there are automated tests for a number of packages.

  • Security enhancements. HTML quoting now happens in the templating system, greatly minimizing the chance that users can sneak malicious HTML into the pages of other users.

  • Oracle 9i support.

  • Who's online feature.

  • Spell checking.

Potential incompatibilities:

  • With the release of OpenACS 5, PostgreSQL 7.2 is no longer supported. Upgrades are supported from OpenACS 4.6.3 under Oracle or PostgreSQL 7.3.

  • The undocumented special handling of ~ and +variable+ in formtemplates, found in packages/acs-templating/resources/*, has been removed in favor of using <noparse> and @variable@ (the standard templating mechanisms). Locally provided formtemplate styles still using these mechanisms will break.

  • Serving backup files and files from the CVS directories is turned off by default via the acs-kernel parameter ExcludedFiles in section request-processor (The variable provides a string match glob list of files and is defaulted to "*/CVS/* *~")

2004-11-24 23:16  torbenb

	* packages/acs-core-docs/www/xml/install-guide/aolserver.xml:
	  adding test page for aolserver4, suggested by Aldert Nooitgedagt

2004-11-24 04:01  torbenb

	*
	  packages/acs-core-docs/www/xml/engineering-standards/docbook-primer.xml:
	  added documentation strategy section

2004-11-24 02:13  torbenb

	*
	  packages/acs-core-docs/www/xml/engineering-standards/docbook-primer.xml:
	  added marketing perspective to end-users docs, corrected spelling
	  mistakes

2004-11-23 23:53  torbenb

	*
	  packages/acs-core-docs/www/xml/engineering-standards/docbook-primer.xml:
	  added developer documentation requirements

2004-11-23 20:28  joel

	* packages/acs-core-docs/www/: xml/releasing-openacs.xml,
	  releasing-openacs-core.html: fixed typo

2004-11-23 12:41  andrewg

	* www/site-master.adp: Adding a span around the Site Wide Admin
	  link so that .LRN can hide it via dotlrn-master.css.

2004-11-23 12:09  vivianh

	*
	  packages/acs-subsite/sql/postgresql/upgrade/upgrade-5.1.2-5.1.3.sql:
	  add support for upgrade

2004-11-23 12:07  vivianh

	* packages/acs-subsite/sql/postgresql/: acs-subsite-create.sql,
	  acs-subsite-drop.sql, site-node-selection-drop.sql,
	  site-node-selection.sql: add suppor table for site-map creation

2004-11-23 12:05  vivianh

	* packages/acs-subsite/sql/oracle/upgrade/upgrade-5.1.2-5.1.3.sql:
	  upgrade support

2004-11-23 12:04  vivianh

	* packages/acs-subsite/sql/oracle/: acs-subsite-drop.sql,
	  site-node-selection-drop.sql: drop support

2004-11-23 12:01  vivianh

	* packages/acs-subsite/sql/oracle/: acs-subsite-create.sql,
	  site-node-selection.sql: add table to support site-map creation

2004-11-23 10:49  vivianh

	* packages/acs-subsite/www/admin/site-map/: allow-for-view.tcl,
	  allow-for-view.xql, site-map-oracle.xql, site-map-postgresql.xql,
	  site-map.adp, site-map.tcl: add files to support site-map
	  creation

2004-11-23 10:46  vivianh

	* packages/acs-subsite/www/admin/site-map/index.adp: add link for
	  build site-map

2004-11-23 10:28  vivianh

	* packages/acs-subsite/www/resources/default-master.css: add css
	  for new calendar widget

2004-11-23 10:28  vivianh

	* packages/acs-subsite/www/resources/core.js: add Javascript for
	  new calendar widget

2004-11-22 16:29  enriquec

	* www/blank-master.tcl: Adding the option Hide/Show toolbar in
	  /dotlrn/admin. Fixing the "Error include" message when the
	  installation of .lrn is done.

2004-11-22 14:14  enriquec

	* www/: blank-master.adp, blank-master.tcl: Adding include and link
	  html tags if dotlrn is installed and if the dotlrn toolbar is
	  enabled. I followed the same way as acs developper support
	  toolbar.

2004-11-21 11:32  torbenb

	*
	  packages/acs-core-docs/www/xml/engineering-standards/docbook-primer.xml:
	  added developer tutorial documentation requirements

2004-11-20 12:07  torbenb

	*
	  packages/acs-core-docs/www/xml/engineering-standards/docbook-primer.xml:
	  added installation documenation requirements

2004-11-19 21:08  torbenb

	*
	  packages/acs-core-docs/www/xml/engineering-standards/docbook-primer.xml:
	  added administration documenation requirements

2004-11-19 13:46  jader

	* packages/acs-subsite/www/user/portrait/upload-2.tcl: Applying
	  patch 617 for bug 2161, courtesy of Carsten Clasohm.

2004-11-18 13:48  jader

	* packages/acs-admin/www/server-restart.adp: Fix link to APM

2004-11-18 13:46  jader

	* packages/acs-admin/www/server-restart.adp: Add link to APM

2004-11-18 12:27  torbenb

	*
	  packages/acs-core-docs/www/xml/engineering-standards/docbook-primer.xml:
	  changing package status url to most recent version

2004-11-18 11:01  torbenb

	*
	  packages/acs-core-docs/www/xml/engineering-standards/docbook-primer.xml:
	  fixing typos

2004-11-18 10:53  torbenb

	*
	  packages/acs-core-docs/www/xml/engineering-standards/docbook-primer.xml:
	  adding end-user requirements section

2004-11-18 08:17  gerardom

	* packages/acs-tcl/tcl/security-procs.tcl: fixing bugs in procs to
	  redirect to insecure url

2004-11-18 01:00  torbenb

	*
	  packages/acs-core-docs/www/xml/engineering-standards/docbook-primer.xml:
	  corrected error, converted lt,gt signs to entities within
	  programlisting tag

2004-11-17 12:32  torbenb

	*
	  packages/acs-core-docs/www/xml/engineering-standards/docbook-primer.xml:
	  adding some docs about documentation development into existing
	  meta docs

2004-11-16 09:09  jader

	* packages/acs-core-docs/www/xml/:
	  developers-guide/permissions.xml,
	  developers-guide/submissions.xml, engineering-standards/cvs.xml,
	  install-guide/openacs.xml, install-guide/other-software.xml,
	  install-guide/upgrade.xml: Updating the CVS references from
	  openacs.org to cvs.openacs.org

2004-11-15 10:29  jader

	* packages/acs-api-browser/lib/search.adp: Add link to core and
	  package documentation.

2004-11-15 05:25  torbenb

	* packages/acs-core-docs/www/xml/install-guide/other-software.xml:
	  added FreeBSD variant notes for daemontools and nsopenssl

2004-11-15 04:55  torbenb

	* packages/acs-core-docs/www/xml/install-guide/openacs.xml: added
	  FreeBSD variant notes.  changed a typo chgrp in action tag to
	  match chown in userinput section

2004-11-15 04:21  torbenb

	* packages/acs-core-docs/www/xml/install-guide/: os.xml,
	  software.xml: Added note to use fetch instead of wget when
	  installing on freebsd

2004-11-15 04:19  torbenb

	* packages/acs-core-docs/www/xml/install-guide/aolserver4.xml:
	  Added FreeBSD variant, and a brief section on howto check if an
	  existing tcl meets requirements

2004-11-15 03:06  torbenb

	* packages/acs-core-docs/www/xml/install-guide/postgres.xml:
	  correcting my earlier use of computeroutput tags to userinput
	  tags in tuning section

2004-11-15 01:50  torbenb

	* packages/acs-core-docs/www/xml/install-guide/postgres.xml:
	  Freebsd variant additions

2004-11-15 00:00  torbenb

	* packages/acs-core-docs/www/xml/install-guide/os.xml: clarifying
	  statements

2004-11-14 22:04  torbenb

	* packages/acs-core-docs/www/xml/install-guide/overview.xml: added
	  FreeBSD variant for copy paste convenience

2004-11-14 13:48  torbenb

	* packages/acs-core-docs/www/xml/install-guide/software.xml:
	  clarifications to page info

2004-11-14 12:55  torbenb

	* packages/acs-core-docs/www/xml/install-guide/overview.xml:
	  language clarifications

2004-11-11 14:40  jader

	* packages/acs-templating/tcl/date-procs.tcl: Improve robustness of
	  template::util::date::set_property proc for dealing with hours
	  that begin with a zero.

2004-11-11 14:06  jader

	* packages/acs-subsite/: lib/login.adp, lib/login.tcl,
	  www/register/recover-password.tcl: The registration/login pages
	  were not honoring the EmailForgottenPasswordP parameter. This
	  enforces that parameter, allowing admins to disable emailing out
	  passwords.

2004-11-08 11:58  joel

	* packages/acs-core-docs/www/: acs-package-dev.html,
	  acs-plat-dev.html, aolserver.html, aolserver4.html,
	  apm-design.html, apm-requirements.html,
	  automated-testing-best-practices.html, backup-recovery.html,
	  bootstrap-acs.html, contributing-code.html, credits.html,
	  cvs-guidelines.html, cvs-tips.html, db-api-detailed.html,
	  db-api.html, doc-standards.html, docbook-primer.html,
	  eng-standards-constraint-naming.html,
	  eng-standards-filenaming.html, eng-standards-plsql.html,
	  eng-standards-versioning.html, eng-standards.html,
	  ext-auth-requirements.html, filename.html, form-builder.html,
	  groups-design.html, groups-requirements.html, high-avail.html,
	  how-do-I.html, i18n-convert.html, i18n-design.html,
	  i18n-introduction.html, i18n-overview.html,
	  i18n-requirements.html, i18n-translators.html, i18n.html,
	  index.html, install-cvs.html, install-daemontools.html,
	  install-full-text-search.html, install-next-nightly-vacuum.html,
	  install-openacs-keepalive.html, install-qmail.html,
	  install-redhat.html, install-steps.html, ix01.html,
	  kernel-doc.html, kernel-overview.html, mac-installation.html,
	  maint-performance.html, maintenance-deploy.html,
	  maintenance-web.html, nxml-mode.html, object-identity.html,
	  object-system-design.html, object-system-requirements.html,
	  objects.html, openacs-cvs-concepts.html, openacs.html,
	  oracle.html, packages.html, parties.html,
	  permissions-design.html, permissions-requirements.html,
	  permissions-tediously-explained.html, permissions.html,
	  postgres.html, programming-with-aolserver.html,
	  psgml-for-emacs.html, psgml-mode.html, release-notes-4-5.html,
	  release-notes-4-6-2.html, release-notes-4-6-3.html,
	  release-notes-4-6.html, release-notes.html,
	  releasing-openacs-core.html, releasing-openacs.html,
	  releasing-package.html, request-processor.html,
	  requirements-template.html, rp-design.html, rp-requirements.html,
	  security-design.html, security-notes.html,
	  security-requirements.html, style-guide.html,
	  subsites-design.html, subsites-requirements.html, subsites.html,
	  tcl-doc.html, templates.html, tutorial-css-layout.html,
	  tutorial-cvs.html, tutorial-database.html, tutorial-debug.html,
	  tutorial-distribute.html, tutorial-newpackage.html,
	  tutorial-pages.html, unix-installation.html,
	  update-repository.html, update-translations.html,
	  upgrade-4.5-to-4.6.html, upgrade-openacs-files.html,
	  upgrade-overview.html, using-cvs-with-openacs.html,
	  variables.html, win2k-installation.html,
	  xml/releasing-openacs.xml, xml/engineering-standards/cvs.xml:
	  fixes to cvs, releasing openacs

2004-11-04 16:19  jader

	* packages/acs-subsite/lib/login.adp: Add a paragraph break to make
	  it easier to see how to register.

2004-11-04 15:33  jader

	* etc/analog.cfg: Fix path in analog configuration file.

2004-11-03 08:37  joel

	* packages/acs-core-docs/www/: contributing-code.html,
	  cvs-resources.html, index.html, openacs-cvs-concepts.html,
	  using-cvs-with-openacs.html, xml/engineering-standards/cvs.xml,
	  xml/index.xml: changed layout of CVS section

2004-11-02 15:16  giancarlol

	* packages/: acs-kernel/catalog/acs-kernel.it_IT.ISO-8859-1.xml,
	  acs-subsite/catalog/acs-subsite.it_IT.ISO-8859-1.xml: Replaced
	  HTML entities for special characters (Latin-1 supplement) with
	  ISO-8859-1 encoding.

2004-11-01 15:44  joel

	* packages/acs-core-docs/www/cvs-guidelines.html: added section on
	  using cvs

2004-11-01 15:39  joel

	* packages/acs-core-docs/www/: acs-admin.html,
	  acs-package-dev.html, acs-plat-dev.html, analog-install.html,
	  analog-setup.html, aolserver.html, aolserver4.html,
	  apm-design.html, apm-requirements.html, automated-backup.html,
	  automated-testing-best-practices.html, backup-recovery.html,
	  backups-with-cvs.html, bootstrap-acs.html, complete-install.html,
	  configuring-new-site.html, credits.html, cvs-tips.html,
	  database-management.html, db-api-detailed.html, db-api.html,
	  dev-guide.html, doc-standards.html, docbook-primer.html,
	  eng-standards-constraint-naming.html,
	  eng-standards-filenaming.html, eng-standards-plsql.html,
	  eng-standards-versioning.html, eng-standards.html,
	  ext-auth-requirements.html, filename.html, for-everyone.html,
	  form-builder.html, general-documents.html, groups-design.html,
	  groups-requirements.html, high-avail.html, how-do-I.html,
	  i18n-convert.html, i18n-design.html, i18n-introduction.html,
	  i18n-overview.html, i18n-requirements.html,
	  i18n-translators.html, i18n.html, index.html,
	  individual-programs.html, install-cvs.html,
	  install-daemontools.html, install-full-text-search.html,
	  install-more-software.html, install-next-add-server.html,
	  install-next-backups.html, install-next-nightly-vacuum.html,
	  install-nsopenssl.html, install-nspam.html,
	  install-openacs-delete-tablespace.html,
	  install-openacs-inittab.html, install-openacs-keepalive.html,
	  install-origins.html, install-overview.html,
	  install-pam-radius.html, install-php.html, install-qmail.html,
	  install-redhat.html, install-resources.html,
	  install-squirrelmail.html, install-ssl.html, install-steps.html,
	  install-tclwebtest.html, ix01.html, kernel-doc.html,
	  kernel-overview.html, mac-installation.html,
	  maint-performance.html, maintenance-deploy.html,
	  maintenance-web.html, nxml-mode.html, object-identity.html,
	  object-system-design.html, object-system-requirements.html,
	  objects.html, openacs-overview.html, openacs-unpack.html,
	  openacs.html, oracle.html, os-install.html, os-security.html,
	  packages.html, parties.html, permissions-design.html,
	  permissions-requirements.html,
	  permissions-tediously-explained.html, permissions.html,
	  postgres.html, profile-code.html,
	  programming-with-aolserver.html, psgml-for-emacs.html,
	  psgml-mode.html, release-notes-4-5.html,
	  release-notes-4-6-2.html, release-notes-4-6-3.html,
	  release-notes-4-6.html, release-notes.html,
	  releasing-openacs-core.html, releasing-openacs.html,
	  releasing-package.html, remote-postgres.html,
	  request-processor.html, requirements-template.html,
	  rp-design.html, rp-requirements.html, security-design.html,
	  security-notes.html, security-requirements.html,
	  snapshot-backup.html, style-guide.html, subsites-design.html,
	  subsites-requirements.html, subsites.html, tcl-doc.html,
	  templates.html, tutorial-admin-pages.html,
	  tutorial-advanced.html, tutorial-caching.html,
	  tutorial-categories.html, tutorial-comments.html,
	  tutorial-css-layout.html, tutorial-cvs.html,
	  tutorial-database.html, tutorial-debug.html,
	  tutorial-distribute.html, tutorial-future-topics.html,
	  tutorial-hierarchical.html, tutorial-html-email.html,
	  tutorial-newpackage.html, tutorial-notifications.html,
	  tutorial-pages.html, tutorial-schedule-procs.html,
	  tutorial-specs.html, tutorial-vuh.html, tutorial.html,
	  unix-installation.html, update-repository.html,
	  update-translations.html, upgrade-4.5-to-4.6.html,
	  upgrade-4.6.3-to-5.html, upgrade-5-0-dot.html,
	  upgrade-openacs-files.html, upgrade-overview.html,
	  upgrade-supporting.html, upgrade.html, uptime.html,
	  variables.html, win2k-installation.html, xml/index.xml,
	  xml/variables.ent, xml/engineering-standards/cvs.xml,
	  xml/install-guide/other-software.xml: added section on using cvs

2004-10-30 13:07  jader

	* etc/config.tcl: The ssl contexts were missing from the config.tcl
	  file, which will prevent anyone from using ssl on their sites.

2004-10-29 14:49  jader

	* packages/acs-core-docs/www/files/nsd-postgres.txt: Added a
	  comment in the file that the LD_LIBRARY_PATH may need
	  /usr/local/aolserver/lib. Comment only, so no functionality
	  changed.

2004-10-28 17:57  rocaelh

	* packages/acs-subsite/www/admin/site-map/index.tcl: fix of the
	  direct mounting package, clean up of the new site-map
	  w/list-builder must be done

2004-10-28 11:40  josee

	* packages/acs-subsite/www/admin/site-map/index.tcl: fixing bug
	  #2139 (link causing problems)

2004-10-28 10:35  enriquec

	* packages/acs-authentication/tcl/authentication-procs.tcl: fixing
	  typo (ref.bug#2088): datta_error -> data_error

2004-10-28 08:39  nimam

	* packages/acs-subsite/: www/permissions/grant.tcl,
	  www/permissions/perm-include.adp,
	  www/permissions/perm-include.tcl,
	  catalog/acs-subsite.de_DE.ISO-8859-1.xml,
	  catalog/acs-subsite.en_US.ISO-8859-1.xml: Added the grant
	  permission action to acs-subsite/www/permissions/perm-include.
	  The existing action returns a list of all users in OpenACS which
	  can take ages to render. With grant permissions the admin can set
	  permissions for a single user that he can search for. To use
	  acs-subsite/www/permissions/grant from any other page I added the
	  optional return_url parameter that redirects back to that page
	  where grant was called

2004-10-22 06:44  nimam

	* packages/acs-admin/www/auth/: authority-oracle.xql,
	  authority-postgresql.xql: Batch jobs are now ordered by start
	  time

2006-05-01 15:18  victorg

	* packages/search/: search.info,
	  catalog/search.de_DE.ISO-8859-1.xml,
	  catalog/search.en_US.ISO-8859-1.xml,
	  catalog/search.es_ES.ISO-8859-1.xml,
	  catalog/search.nl_NL.ISO-8859-1.xml: Updating translations from
	  translate.openacs.org taking up version to 5.2.3b2

2006-05-01 15:14  victorg

	* packages/: acs-tcl/catalog/acs-tcl.ar_EG.utf-8.xml,
	  acs-tcl/catalog/acs-tcl.ar_LB.utf-8.xml,
	  acs-tcl/catalog/acs-tcl.ast_ES.ISO-8859-1.xml,
	  acs-tcl/catalog/acs-tcl.ca_ES.ISO-8859-1.xml,
	  acs-tcl/catalog/acs-tcl.da_DK.ISO-8859-1.xml,
	  acs-tcl/catalog/acs-tcl.de_DE.ISO-8859-1.xml,
	  acs-tcl/catalog/acs-tcl.en_AU.ISO-8859-1.xml,
	  acs-tcl/catalog/acs-tcl.en_US.ISO-8859-1.xml,
	  acs-tcl/catalog/acs-tcl.es_CO.ISO-8859-1.xml,
	  acs-tcl/catalog/acs-tcl.es_ES.ISO-8859-1.xml,
	  acs-tcl/catalog/acs-tcl.es_GT.ISO-8859-1.xml,
	  acs-tcl/catalog/acs-tcl.eu_ES.ISO-8859-1.xml,
	  acs-tcl/catalog/acs-tcl.fa_IR.utf-8.xml,
	  acs-tcl/catalog/acs-tcl.fi_FI.utf-8.xml,
	  acs-tcl/catalog/acs-tcl.fr_FR.ISO-8859-1.xml,
	  acs-tcl/catalog/acs-tcl.gl_ES.ISO-8859-1.xml,
	  acs-tcl/catalog/acs-tcl.hi_IN.utf-8.xml,
	  acs-tcl/catalog/acs-tcl.hu_HU.utf-8.xml,
	  acs-tcl/catalog/acs-tcl.ind_ID.utf-8.xml,
	  acs-tcl/catalog/acs-tcl.it_IT.ISO-8859-1.xml,
	  acs-tcl/catalog/acs-tcl.ja_JP.utf-8.xml,
	  acs-tcl/catalog/acs-tcl.ko_KR.utf-8.xml,
	  acs-tcl/catalog/acs-tcl.ms_MY.utf-8.xml,
	  acs-tcl/catalog/acs-tcl.nl_NL.ISO-8859-1.xml,
	  acs-tcl/catalog/acs-tcl.nn_NO.ISO-8859-1.xml,
	  acs-tcl/catalog/acs-tcl.no_NO.ISO-8859-1.xml,
	  acs-tcl/catalog/acs-tcl.pl_PL.utf-8.xml,
	  acs-tcl/catalog/acs-tcl.pt_BR.ISO-8859-1.xml,
	  acs-tcl/catalog/acs-tcl.pt_PT.ISO-8859-1.xml,
	  acs-tcl/catalog/acs-tcl.ro_RO.utf-8.xml,
	  acs-tcl/catalog/acs-tcl.ru_RU.utf-8.xml,
	  acs-tcl/catalog/acs-tcl.sh_HR.utf-8.xml,
	  acs-tcl/catalog/acs-tcl.sv_SE.ISO-8859-1.xml,
	  acs-tcl/catalog/acs-tcl.tr_TR.utf-8.xml,
	  acs-tcl/catalog/acs-tcl.zh_CN.utf-8.xml,
	  acs-tcl/catalog/acs-tcl.zh_TW.utf-8.xml,
	  acs-templating/acs-templating.info,
	  acs-templating/catalog/acs-templating.ar_LB.utf-8.xml,
	  acs-templating/catalog/acs-templating.ca_ES.ISO-8859-1.xml,
	  acs-templating/catalog/acs-templating.da_DK.ISO-8859-1.xml,
	  acs-templating/catalog/acs-templating.de_DE.ISO-8859-1.xml,
	  acs-templating/catalog/acs-templating.en_AU.ISO-8859-1.xml,
	  acs-templating/catalog/acs-templating.en_US.ISO-8859-1.xml,
	  acs-templating/catalog/acs-templating.es_CO.ISO-8859-1.xml,
	  acs-templating/catalog/acs-templating.es_ES.ISO-8859-1.xml,
	  acs-templating/catalog/acs-templating.es_GT.ISO-8859-1.xml,
	  acs-templating/catalog/acs-templating.eu_ES.ISO-8859-1.xml,
	  acs-templating/catalog/acs-templating.fi_FI.utf-8.xml,
	  acs-templating/catalog/acs-templating.fr_FR.ISO-8859-1.xml,
	  acs-templating/catalog/acs-templating.hi_IN.utf-8.xml,
	  acs-templating/catalog/acs-templating.hu_HU.utf-8.xml,
	  acs-templating/catalog/acs-templating.it_IT.ISO-8859-1.xml,
	  acs-templating/catalog/acs-templating.ko_KR.utf-8.xml,
	  acs-templating/catalog/acs-templating.ms_MY.utf-8.xml,
	  acs-templating/catalog/acs-templating.nl_NL.ISO-8859-1.xml,
	  acs-templating/catalog/acs-templating.nn_NO.ISO-8859-1.xml,
	  acs-templating/catalog/acs-templating.no_NO.ISO-8859-1.xml,
	  acs-templating/catalog/acs-templating.pa_IN.utf-8.xml,
	  acs-templating/catalog/acs-templating.pt_BR.ISO-8859-1.xml,
	  acs-templating/catalog/acs-templating.pt_PT.ISO-8859-1.xml,
	  acs-templating/catalog/acs-templating.ro_RO.utf-8.xml,
	  acs-templating/catalog/acs-templating.ru_RU.utf-8.xml,
	  acs-templating/catalog/acs-templating.sh_HR.utf-8.xml,
	  acs-templating/catalog/acs-templating.sv_SE.ISO-8859-1.xml,
	  acs-templating/catalog/acs-templating.tr_TR.utf-8.xml,
	  acs-templating/catalog/acs-templating.zh_CN.utf-8.xml,
	  acs-templating/catalog/acs-templating.zh_TW.utf-8.xml: Updating
	  translations from translate.openacs.org taking up version to
	  5.2.3b2

2006-05-01 15:10  victorg

	* packages/: acs-lang/acs-lang.info,
	  acs-lang/catalog/acs-lang.ar_EG.utf-8.xml,
	  acs-lang/catalog/acs-lang.ar_LB.utf-8.xml,
	  acs-lang/catalog/acs-lang.ast_ES.ISO-8859-1.xml,
	  acs-lang/catalog/acs-lang.ca_ES.ISO-8859-1.xml,
	  acs-lang/catalog/acs-lang.da_DK.ISO-8859-1.xml,
	  acs-lang/catalog/acs-lang.de_DE.ISO-8859-1.xml,
	  acs-lang/catalog/acs-lang.el_GR.utf-8.xml,
	  acs-lang/catalog/acs-lang.en_AU.ISO-8859-1.xml,
	  acs-lang/catalog/acs-lang.en_GB.ISO-8859-1.xml,
	  acs-lang/catalog/acs-lang.en_US.ISO-8859-1.xml,
	  acs-lang/catalog/acs-lang.es_CO.ISO-8859-1.xml,
	  acs-lang/catalog/acs-lang.es_ES.ISO-8859-1.xml,
	  acs-lang/catalog/acs-lang.es_GT.ISO-8859-1.xml,
	  acs-lang/catalog/acs-lang.eu_ES.ISO-8859-1.xml,
	  acs-lang/catalog/acs-lang.fa_IR.utf-8.xml,
	  acs-lang/catalog/acs-lang.fi_FI.utf-8.xml,
	  acs-lang/catalog/acs-lang.fr_FR.ISO-8859-1.xml,
	  acs-lang/catalog/acs-lang.gl_ES.ISO-8859-1.xml,
	  acs-lang/catalog/acs-lang.hi_IN.utf-8.xml,
	  acs-lang/catalog/acs-lang.hu_HU.utf-8.xml,
	  acs-lang/catalog/acs-lang.it_IT.ISO-8859-1.xml,
	  acs-lang/catalog/acs-lang.ja_JP.utf-8.xml,
	  acs-lang/catalog/acs-lang.ko_KR.utf-8.xml,
	  acs-lang/catalog/acs-lang.ms_MY.utf-8.xml,
	  acs-lang/catalog/acs-lang.nl_NL.ISO-8859-1.xml,
	  acs-lang/catalog/acs-lang.nn_NO.ISO-8859-1.xml,
	  acs-lang/catalog/acs-lang.no_NO.ISO-8859-1.xml,
	  acs-lang/catalog/acs-lang.pa_IN.utf-8.xml,
	  acs-lang/catalog/acs-lang.pl_PL.utf-8.xml,
	  acs-lang/catalog/acs-lang.pt_BR.ISO-8859-1.xml,
	  acs-lang/catalog/acs-lang.pt_PT.ISO-8859-1.xml,
	  acs-lang/catalog/acs-lang.ro_RO.utf-8.xml,
	  acs-lang/catalog/acs-lang.ru_RU.utf-8.xml,
	  acs-lang/catalog/acs-lang.sh_HR.utf-8.xml,
	  acs-lang/catalog/acs-lang.sv_SE.ISO-8859-1.xml,
	  acs-lang/catalog/acs-lang.th_TH.utf-8.xml,
	  acs-lang/catalog/acs-lang.tr_TR.utf-8.xml,
	  acs-lang/catalog/acs-lang.zh_CN.utf-8.xml,
	  acs-lang/catalog/acs-lang.zh_TW.utf-8.xml,
	  acs-subsite/acs-subsite.info,
	  acs-subsite/catalog/acs-subsite.ar_EG.utf-8.xml,
	  acs-subsite/catalog/acs-subsite.ar_LB.utf-8.xml,
	  acs-subsite/catalog/acs-subsite.ast_ES.ISO-8859-1.xml,
	  acs-subsite/catalog/acs-subsite.ca_ES.ISO-8859-1.xml,
	  acs-subsite/catalog/acs-subsite.da_DK.ISO-8859-1.xml,
	  acs-subsite/catalog/acs-subsite.de_DE.ISO-8859-1.xml,
	  acs-subsite/catalog/acs-subsite.el_GR.utf-8.xml,
	  acs-subsite/catalog/acs-subsite.en_AU.ISO-8859-1.xml,
	  acs-subsite/catalog/acs-subsite.en_US.ISO-8859-1.xml,
	  acs-subsite/catalog/acs-subsite.es_CO.ISO-8859-1.xml,
	  acs-subsite/catalog/acs-subsite.es_ES.ISO-8859-1.xml,
	  acs-subsite/catalog/acs-subsite.es_GT.ISO-8859-1.xml,
	  acs-subsite/catalog/acs-subsite.eu_ES.ISO-8859-1.xml,
	  acs-subsite/catalog/acs-subsite.fi_FI.utf-8.xml,
	  acs-subsite/catalog/acs-subsite.fr_FR.ISO-8859-1.xml,
	  acs-subsite/catalog/acs-subsite.gl_ES.ISO-8859-1.xml,
	  acs-subsite/catalog/acs-subsite.hi_IN.utf-8.xml,
	  acs-subsite/catalog/acs-subsite.hu_HU.utf-8.xml,
	  acs-subsite/catalog/acs-subsite.it_IT.ISO-8859-1.xml,
	  acs-subsite/catalog/acs-subsite.ja_JP.utf-8.xml,
	  acs-subsite/catalog/acs-subsite.ko_KR.utf-8.xml,
	  acs-subsite/catalog/acs-subsite.ms_MY.utf-8.xml,
	  acs-subsite/catalog/acs-subsite.nl_NL.ISO-8859-1.xml,
	  acs-subsite/catalog/acs-subsite.nn_NO.ISO-8859-1.xml,
	  acs-subsite/catalog/acs-subsite.no_NO.ISO-8859-1.xml,
	  acs-subsite/catalog/acs-subsite.pa_IN.utf-8.xml,
	  acs-subsite/catalog/acs-subsite.pl_PL.utf-8.xml,
	  acs-subsite/catalog/acs-subsite.pt_BR.ISO-8859-1.xml,
	  acs-subsite/catalog/acs-subsite.pt_PT.ISO-8859-1.xml,
	  acs-subsite/catalog/acs-subsite.ro_RO.utf-8.xml,
	  acs-subsite/catalog/acs-subsite.ru_RU.utf-8.xml,
	  acs-subsite/catalog/acs-subsite.sh_HR.utf-8.xml,
	  acs-subsite/catalog/acs-subsite.sv_SE.ISO-8859-1.xml,
	  acs-subsite/catalog/acs-subsite.th_TH.utf-8.xml,
	  acs-subsite/catalog/acs-subsite.tr_TR.utf-8.xml,
	  acs-subsite/catalog/acs-subsite.zh_CN.utf-8.xml,
	  acs-subsite/catalog/acs-subsite.zh_TW.utf-8.xml: Updating
	  translations from translate.openacs.org taking up version to
	  5.2.3b2

2006-05-01 15:06  victorg

	* packages/: acs-authentication/acs-authentication.info,
	  acs-authentication/catalog/acs-authentication.ar_LB.utf-8.xml,
	  acs-authentication/catalog/acs-authentication.ca_ES.ISO-8859-1.xml,
	  acs-authentication/catalog/acs-authentication.da_DK.ISO-8859-1.xml,
	  acs-authentication/catalog/acs-authentication.de_DE.ISO-8859-1.xml,
	  acs-authentication/catalog/acs-authentication.el_GR.utf-8.xml,
	  acs-authentication/catalog/acs-authentication.en_AU.ISO-8859-1.xml,
	  acs-authentication/catalog/acs-authentication.en_US.ISO-8859-1.xml,
	  acs-authentication/catalog/acs-authentication.es_CO.ISO-8859-1.xml,
	  acs-authentication/catalog/acs-authentication.es_ES.ISO-8859-1.xml,
	  acs-authentication/catalog/acs-authentication.es_GT.ISO-8859-1.xml,
	  acs-authentication/catalog/acs-authentication.eu_ES.ISO-8859-1.xml,
	  acs-authentication/catalog/acs-authentication.fa_IR.utf-8.xml,
	  acs-authentication/catalog/acs-authentication.fr_FR.ISO-8859-1.xml,
	  acs-authentication/catalog/acs-authentication.hi_IN.utf-8.xml,
	  acs-authentication/catalog/acs-authentication.hu_HU.utf-8.xml,
	  acs-authentication/catalog/acs-authentication.ind_ID.utf-8.xml,
	  acs-authentication/catalog/acs-authentication.it_IT.ISO-8859-1.xml,
	  acs-authentication/catalog/acs-authentication.ms_MY.utf-8.xml,
	  acs-authentication/catalog/acs-authentication.nl_NL.ISO-8859-1.xml,
	  acs-authentication/catalog/acs-authentication.nn_NO.ISO-8859-1.xml,
	  acs-authentication/catalog/acs-authentication.no_NO.ISO-8859-1.xml,
	  acs-authentication/catalog/acs-authentication.pa_IN.utf-8.xml,
	  acs-authentication/catalog/acs-authentication.pl_PL.utf-8.xml,
	  acs-authentication/catalog/acs-authentication.pt_BR.ISO-8859-1.xml,
	  acs-authentication/catalog/acs-authentication.ro_RO.utf-8.xml,
	  acs-authentication/catalog/acs-authentication.ru_RU.utf-8.xml,
	  acs-authentication/catalog/acs-authentication.tr_TR.utf-8.xml,
	  acs-authentication/catalog/acs-authentication.zh_CN.utf-8.xml,
	  acs-authentication/catalog/acs-authentication.zh_TW.utf-8.xml,
	  acs-kernel/acs-kernel.info,
	  acs-kernel/catalog/acs-kernel.ar_EG.utf-8.xml,
	  acs-kernel/catalog/acs-kernel.ar_LB.utf-8.xml,
	  acs-kernel/catalog/acs-kernel.ast_ES.ISO-8859-1.xml,
	  acs-kernel/catalog/acs-kernel.ca_ES.ISO-8859-1.xml,
	  acs-kernel/catalog/acs-kernel.da_DK.ISO-8859-1.xml,
	  acs-kernel/catalog/acs-kernel.de_DE.ISO-8859-1.xml,
	  acs-kernel/catalog/acs-kernel.en_AU.ISO-8859-1.xml,
	  acs-kernel/catalog/acs-kernel.en_US.ISO-8859-1.xml,
	  acs-kernel/catalog/acs-kernel.es_CO.ISO-8859-1.xml,
	  acs-kernel/catalog/acs-kernel.es_ES.ISO-8859-1.xml,
	  acs-kernel/catalog/acs-kernel.es_GT.ISO-8859-1.xml,
	  acs-kernel/catalog/acs-kernel.eu_ES.ISO-8859-1.xml,
	  acs-kernel/catalog/acs-kernel.fi_FI.utf-8.xml,
	  acs-kernel/catalog/acs-kernel.fr_FR.ISO-8859-1.xml,
	  acs-kernel/catalog/acs-kernel.gl_ES.ISO-8859-1.xml,
	  acs-kernel/catalog/acs-kernel.hi_IN.utf-8.xml,
	  acs-kernel/catalog/acs-kernel.hu_HU.utf-8.xml,
	  acs-kernel/catalog/acs-kernel.it_IT.ISO-8859-1.xml,
	  acs-kernel/catalog/acs-kernel.ja_JP.utf-8.xml,
	  acs-kernel/catalog/acs-kernel.ko_KR.utf-8.xml,
	  acs-kernel/catalog/acs-kernel.ms_MY.utf-8.xml,
	  acs-kernel/catalog/acs-kernel.nl_NL.ISO-8859-1.xml,
	  acs-kernel/catalog/acs-kernel.nn_NO.ISO-8859-1.xml,
	  acs-kernel/catalog/acs-kernel.no_NO.ISO-8859-1.xml,
	  acs-kernel/catalog/acs-kernel.pa_IN.utf-8.xml,
	  acs-kernel/catalog/acs-kernel.pl_PL.utf-8.xml,
	  acs-kernel/catalog/acs-kernel.pt_BR.ISO-8859-1.xml,
	  acs-kernel/catalog/acs-kernel.pt_PT.ISO-8859-1.xml,
	  acs-kernel/catalog/acs-kernel.ro_RO.utf-8.xml,
	  acs-kernel/catalog/acs-kernel.ru_RU.utf-8.xml,
	  acs-kernel/catalog/acs-kernel.sv_SE.ISO-8859-1.xml,
	  acs-kernel/catalog/acs-kernel.tr_TR.utf-8.xml,
	  acs-kernel/catalog/acs-kernel.zh_CN.utf-8.xml,
	  acs-kernel/catalog/acs-kernel.zh_TW.utf-8.xml: Updating
	  translations from translate.openacs.org taking up version to
	  5.2.3b2

2006-04-26 20:55  matthewg

	* packages/acs-subsite/www/resources/core.js: adding
	  showCalendarWithDefault javascript proc so that a default date
	  can be set when the calendar first pops up

2006-04-26 20:51  matthewg

	* packages/acs-templating/tcl/date-procs.tcl: changing textdate
	  showCalendar javascript proc to showCalendarWithDefault and
	  setting the default date the calendar should go to

2006-04-26 19:23  matthewg

	* packages/acs-templating/:
	  catalog/acs-templating.en_US.ISO-8859-1.xml, tcl/date-procs.tcl:
	  localizing validation errors for date and textdate widgets

2006-04-26 17:17  matthewg

	* packages/acs-templating/tcl/date-procs.tcl: adding textdate
	  widget and associated transform, validate and util procs

2006-04-25 08:31  hamiltonc

	* packages/acs-subsite/www/resources/core.js: apply fixes to get
	  the mini calendar dhtml popup to work

2006-04-21 11:04  emmar

	* packages/acs-templating/tcl/richtext-procs.tcl: substitute
	  single-quote to double-quote for quoting atribute value of
	  richtext element (#2882)

2006-04-19 05:10  roelc

	*
	  packages/acs-content-repository/sql/postgresql/content-extlink.sql:
	  content_name should be content__name

2006-04-18 06:00  eduardop

	* packages/acs-subsite/tcl/email-image-procs.tcl: remove faulty
	  email_image::check_image_magick function and just test for it
	  when exec

2006-04-13 17:11  donb

	* packages/acs-content-repository/tcl/content-folder-procs.tcl:
	  Fixed bug #2768 by backporting the fix from HEAD to 5.2

2006-04-10 12:31  donb

	* packages/acs-content-repository/sql/postgresql/content-type.sql:
	  Applied patch supplied by Jeff Davis.

2006-04-10 02:59  emmar

	*
	  packages/acs-content-repository/sql/oracle/upgrade/upgrade-5.2.3d1-5.2.3d2.sql:
	  replacing content_template for package_id param

2006-04-09 15:26  donb

	* packages/acs-core-docs/www/: acs-admin.html,
	  acs-package-dev.html, acs-plat-dev.html, analog-install.html,
	  analog-setup.html, aolserver.html, aolserver4.html,
	  apm-design.html, apm-requirements.html, automated-backup.html,
	  automated-testing-best-practices.html, backup-recovery.html,
	  backups-with-cvs.html, bootstrap-acs.html, complete-install.html,
	  configuring-configuring-packages.html,
	  configuring-configuring-permissions.html,
	  configuring-install-packages.html,
	  configuring-mounting-packages.html, configuring-new-site.html,
	  contributing-code.html, credits.html, cvs-guidelines.html,
	  cvs-resources.html, cvs-tips.html, database-management.html,
	  db-api-detailed.html, db-api.html, dev-guide.html,
	  doc-standards.html, docbook-primer.html,
	  eng-standards-constraint-naming.html,
	  eng-standards-filenaming.html, eng-standards-plsql.html,
	  eng-standards-versioning.html, eng-standards.html,
	  ext-auth-requirements.html, filename.html, for-everyone.html,
	  form-builder.html, general-documents.html, groups-design.html,
	  groups-requirements.html, high-avail.html, how-do-I.html,
	  i18n-convert.html, i18n-design.html, i18n-introduction.html,
	  i18n-overview.html, i18n-requirements.html,
	  i18n-translators.html, i18n.html, index.html,
	  individual-programs.html, install-cvs.html,
	  install-daemontools.html, install-full-text-search-openfts.html,
	  install-full-text-search-tsearch2.html, install-ldap-radius.html,
	  install-more-software.html, install-next-add-server.html,
	  install-next-backups.html, install-next-nightly-vacuum.html,
	  install-nsopenssl.html, install-nspam.html,
	  install-openacs-delete-tablespace.html,
	  install-openacs-inittab.html, install-openacs-keepalive.html,
	  install-origins.html, install-overview.html,
	  install-pam-radius.html, install-php.html, install-qmail.html,
	  install-redhat.html, install-resources.html,
	  install-squirrelmail.html, install-ssl.html, install-steps.html,
	  install-tclwebtest.html, ix01.html, kernel-doc.html,
	  kernel-overview.html, mac-installation.html,
	  maint-performance.html, maintenance-deploy.html,
	  maintenance-web.html, nxml-mode.html, object-identity.html,
	  object-system-design.html, object-system-requirements.html,
	  objects.html, openacs-cvs-concepts.html, openacs-overview.html,
	  openacs-unpack.html, openacs.html, oracle.html, os-install.html,
	  os-security.html, packages.html, parties.html,
	  permissions-design.html, permissions-requirements.html,
	  permissions-tediously-explained.html, permissions.html,
	  postgres.html, profile-code.html,
	  programming-with-aolserver.html, psgml-for-emacs.html,
	  psgml-mode.html, release-notes-4-5.html,
	  release-notes-4-6-2.html, release-notes-4-6-3.html,
	  release-notes-4-6.html, release-notes.html,
	  releasing-openacs-core.html, releasing-openacs.html,
	  releasing-package.html, remote-postgres.html,
	  request-processor.html, requirements-template.html,
	  rp-design.html, rp-requirements.html, security-design.html,
	  security-notes.html, security-requirements.html,
	  snapshot-backup.html, style-guide.html, subsites-design.html,
	  subsites-requirements.html, subsites.html, tcl-doc.html,
	  templates.html, tutorial-admin-pages.html,
	  tutorial-advanced.html, tutorial-caching.html,
	  tutorial-categories.html, tutorial-comments.html,
	  tutorial-css-layout.html, tutorial-cvs.html,
	  tutorial-database.html, tutorial-debug.html,
	  tutorial-distribute.html, tutorial-etp-templates.html,
	  tutorial-future-topics.html, tutorial-hierarchical.html,
	  tutorial-html-email.html, tutorial-newpackage.html,
	  tutorial-notifications.html, tutorial-pages.html,
	  tutorial-parameters.html, tutorial-schedule-procs.html,
	  tutorial-second-database.html, tutorial-specs.html,
	  tutorial-upgrade-scripts.html, tutorial-upgrades.html,
	  tutorial-vuh.html, tutorial-wysiwyg-editor.html, tutorial.html,
	  unix-installation.html, update-repository.html,
	  update-translations.html, upgrade-4.5-to-4.6.html,
	  upgrade-4.6.3-to-5.html, upgrade-5-0-dot.html,
	  upgrade-openacs-files.html, upgrade-overview.html,
	  upgrade-supporting.html, upgrade.html, uptime.html,
	  using-cvs-with-openacs.html, variables.html,
	  win2k-installation.html: Generated HTML files for 5.2.3b1

2006-04-09 15:22  donb

	* packages/acs-core-docs/www/xml/variables.ent: Version bump to
	  5.2.3b1

2006-04-09 15:11  donb

	* packages/: acs-admin/acs-admin.info,
	  acs-api-browser/acs-api-browser.info,
	  acs-authentication/acs-authentication.info,
	  acs-automated-testing/acs-automated-testing.info,
	  acs-bootstrap-installer/acs-bootstrap-installer.info,
	  acs-content-repository/acs-content-repository.info,
	  acs-core-docs/acs-core-docs.info, acs-kernel/acs-kernel.info,
	  acs-lang/acs-lang.info, acs-mail/acs-mail.info,
	  acs-messaging/acs-messaging.info,
	  acs-reference/acs-reference.info,
	  acs-service-contract/acs-service-contract.info,
	  acs-tcl/acs-tcl.info, acs-templating/acs-templating.info,
	  ref-timezones/ref-timezones.info, search/search.info: Bumped
	  version to 5.2.3b1

2006-04-08 18:51  donb

	* packages/acs-bootstrap-installer/bootstrap.tcl: Added check to
	  make certain that xotcl-core is not sourced unless the xotcl
	  aolserver module has been loaded.

2006-04-08 17:44  donb

	* packages/acs-subsite/acs-subsite.info: 1. Bumped version to
	  5.2.3b1 2. Removed dependency made by Malte on acs-translations,
	  a package that    has not been added to acs-core, and which is
	  currently empty on HEAD    as well as the 5.2 branch.  When it
	  does something, restore the dependency    and add the package to
	  acs-core.

2006-04-07 12:58  donb

	* packages/acs-bootstrap-installer/bootstrap.tcl: Added patch to
	  load xotcl-core packages if xotcl-core exists

2006-04-06 18:25  donb

	*
	  packages/acs-kernel/sql/postgresql/upgrade/upgrade-5.2.2-5.2.3b1.sql:
	  Forgot to cvs add my upgrade file ...

2006-04-06 18:24  donb

	* packages/acs-kernel/: acs-kernel.info,
	  sql/postgresql/apm-create.sql: Fixed bug #2745

2006-04-06 18:09  donb

	*
	  packages/acs-content-repository/sql/postgresql/content-update.sql:
	  Fixed "bug" #2646.  This code wasn't actually executed since the
	  relevant table's created explicitly in another script ...

2006-04-06 17:48  donb

	*
	  packages/acs-content-repository/sql/postgresql/content-schedule.sql:
	  Fixed "bug" #2747.  The code was never called and was just a stub
	  that hadn't been ported to PG, but I removed it so future people
	  with sharp eyes don't look at it and report the "bug" again.

2006-04-06 17:17  donb

	* packages/ref-timezones/sql/postgresql/: ref-timezones-create.sql,
	  upgrade/upgrade-5.2.2-5.2.3b1.sql: Fixed bug #2748

2006-04-06 17:09  donb

	* packages/ref-timezones/: ref-timezones.info,
	  sql/postgresql/ref-timezones-create.sql,
	  sql/postgresql/upgrade/upgrade-5.2.2-5.2.3b1.sql: Fixed bug
	  #2749.

2006-04-04 05:38  maltes

	* packages/acs-content-repository/tcl/content-item-procs.tcl:
	  Fixing file upload, storing the full filename as the title,
	  getting rid of the problem of the regsub killing some characters

2006-03-31 09:59  hamiltonc

	* packages/acs-bootstrap-installer/tcl/00-proc-procs.tcl: fix for
	  bug 2843, this bug causes problems when trying to change
	  authentication parameters

2006-03-30 02:41  emmar

	* packages/acs-lang/catalog/acs-lang.gl_ES.ISO-8859-1.xml: fix
	  #2829: galician-portugese lang

2006-03-30 01:41  dedsc

	* packages/acs-subsite/lib/login.tcl: fix misnamed parameter

2006-03-29 20:51  maltes

	* etc/backup.sh: Added vaccumdb to backup

2006-03-29 03:22  emmar

	*
	  packages/acs-content-repository/tcl/content-revision-procs-oracle.xql:
	  Added missing query item_id

2006-03-29 02:54  emmar

	*
	  packages/acs-content-repository/sql/oracle/upgrade/upgrade-5.2.1d1-5.2.1d2.sql:
	  fix content_item.new call in content_folder.new

2006-03-29 02:53  emmar

	*
	  packages/acs-content-repository/sql/oracle/upgrade/upgrade-5.2.0b6-5.2.0b7.sql:
	  fix #2870, #2868: upgrade script for image and content_extlink
	  packages

2006-03-29 02:47  emmar

	*
	  packages/acs-kernel/sql/oracle/upgrade/upgrade-5.2.0b9-5.2.0b10.sql:
	  fix #2869: upgrade script for acs-data-link

2006-03-28 09:32  victorg

	* packages/acs-tcl/tcl/server-cluster-procs.tcl: Scheduling
	  server_cluster_do_httpget in all servers in order to get
	  clustering working well. Setting to true all_servers switch when
	  scheduling server_cluster_do_httpget.

2006-03-27 15:58  donb

	* packages/acs-kernel/sql/postgresql/acs-metadata-create.sql: 1.
	  Copy site template when cloning a community 2. Updated a bunch of
	  dependency files

2006-03-12 14:16  victorg

	* packages/acs-lang/tcl/lang-message-procs.tcl: typo in error
	  message.

2006-03-09 09:56  roelc

	* packages/acs-kernel/catalog/acs-kernel.en_US.ISO-8859-1.xml:
	  Added 'common_Last' and 'common_last' keys

2006-03-09 04:14  eduardop

	* packages/acs-subsite/acs-subsite.info: add dependency to
	  acs-translations from acs-subsite

2006-03-03 01:51  matthewg

	* packages/acs-tcl/tcl/application-data-link-procs.xql: fixing
	  typo, application_data_link::get.linked_objects was supposed to
	  look for object_id not package_id

2006-03-02 17:05  donb

	* packages/acs-tcl/tcl/test/acs-tcl-test-procs.tcl: Conditionalized
	  tests of bindvar emulation so they're not run for Oracle.  Two of
	  them don't work for Oracle (tries to do a "select" in
	  db_exec_plsql) and since Oracle's definition of bindvar semantics
	  defines the emulation semantics it seems silly to test if Oracle
	  adheres to them or not :)

2006-03-01 15:17  donb

	* packages/acs-tcl/tcl/install-procs.tcl: The set-parameter
	  procedure calls parameter::set_value, which returns the newly set
	  value.  When a Tcl proc has no explicit return statement, as was
	  true of set-parameter, the value of the last expression is
	  returned.  In other words, the value of the parameter.  Which
	  messed up the HTML sent up the pipe to the browser being used to
	  install OpenACS.

2006-02-26 20:18  michaels

	* etc/backup.sh: quote vars to ensure there are at least empty
	  strings present when testing; use single = for string comparisons

2006-02-26 09:41  michaels

	* etc/backup.sh: add some logic to gather free disk space when the
	  backup partition string is so long it forces df output to wrap

2006-02-24 07:13  daveb

	* packages/acs-admin/www/install/install.tcl: Fix check for
	  maturity procedure so maturity is shown in Installer.

2006-02-20 12:03  michaels

	* etc/config.tcl: backout accidental commit of my config.tcl

2006-02-20 11:39  michaels

	* etc/: backup.sh, config.tcl: change order of arguments to tar;
	  add comment to script about getting free space from partitions
	  with long names (i.e. logical volumes)

2006-02-20 04:36  roelc

	* packages/acs-templating/resources/lists/table.adp: Don't display
	  group by label if empty

2006-02-19 23:36  matthewg

	* packages/acs-subsite/tcl/party-procs.tcl: removing typo
	  dependence on contacts package in party::email

2006-02-19 20:19  michaels

	* etc/backup.sh: variable misnamed in default backup script

2006-02-18 17:15  michaels

	* etc/keepalive/: keepalive-config.tcl, keepalive-cron.sh,
	  keepalive.sh: remove duplicate keepalive script and make the one
	  that stays a little more robust (and less chatty)

2006-02-17 13:19  gustafn

	* packages/acs-templating/www/resources/xinha-nightly/: dialog.js,
	  htmlarea.css, htmlarea.js, images/fr/bold.gif,
	  images/fr/strikethrough.gif, images/fr/underline.gif, lang/fr.js,
	  plugins/CSS/css.js, plugins/CharacterMap/lang/ru.js,
	  plugins/ContextMenu/context-menu.js,
	  plugins/Equation/equation.js, plugins/FindReplace/lang/ru.js,
	  plugins/FullPage/full-page.js, plugins/FullScreen/lang/ru.js,
	  plugins/GetHtml/get-html.js, plugins/ImageManager/config.inc.php,
	  plugins/ImageManager/editor.php,
	  plugins/ImageManager/editorFrame.php,
	  plugins/ImageManager/image-manager.js,
	  plugins/ImageManager/images.php,
	  plugins/ImageManager/manager.php,
	  plugins/ImageManager/resizer.php,
	  plugins/ImageManager/thumbs.php,
	  plugins/ImageManager/Classes/Files.php,
	  plugins/ImageManager/Classes/GD.php,
	  plugins/ImageManager/Classes/IM.php,
	  plugins/ImageManager/Classes/ImageEditor.php,
	  plugins/ImageManager/Classes/ImageManager.php,
	  plugins/ImageManager/Classes/NetPBM.php,
	  plugins/ImageManager/Classes/Thumbnail.php,
	  plugins/ImageManager/Classes/Transform.php,
	  plugins/ImageManager/assets/dialog.js,
	  plugins/ImageManager/assets/editor.js,
	  plugins/ImageManager/assets/editorFrame.js,
	  plugins/ImageManager/assets/imagelist.css,
	  plugins/ImageManager/assets/images.js,
	  plugins/ImageManager/assets/manager.js,
	  plugins/ImageManager/assets/popup.js,
	  plugins/ImageManager/lang/ru.js, plugins/ListType/lang/ru.js,
	  plugins/OacsFs/lang/empty,
	  plugins/OacsFs/popups/file-selector.tcl,
	  plugins/PasteText/popups/paste_text.html,
	  plugins/SpellChecker/spell-check-logic.cgi,
	  plugins/SpellChecker/spell-check-ui.html,
	  plugins/SpellChecker/spell-check-ui.js,
	  plugins/SpellChecker/spell-checker.js,
	  plugins/TableOperations/table-operations.js,
	  plugins/TableOperations/lang/fr.js,
	  plugins/TableOperations/lang/ru.js, popups/popup.js: upgrading
	  xinha to the current snapshot

2006-02-11 07:27  victorg

	* packages/acs-lang/: acs-lang.info,
	  sql/oracle/upgrade/upgrade-5.2.2d1-5.2.2d2.sql,
	  sql/oracle/upgrade/upgrade-5.2.3d1-5.2.3d2.sql,
	  sql/postgresql/upgrade/upgrade-5.2.2d1-5.2.2d2.sql,
	  sql/postgresql/upgrade/upgrade-5.2.3d1-5.2.3d2.sql: Fixing
	  version from 5.2.2d2 to 5.2.3d2 ( We are releasing 5.2.3, not
	  5.2.2 :) ). Adding correct upgrade files.

2006-02-09 14:33  gustafn

	* packages/acs-tcl/tcl/request-processor-procs.tcl: compatibility
	  update for naviserver 4.99.1 or newer

2006-02-09 12:45  maltes

	* packages/acs-lang/tcl/lang-util-procs.tcl: Added procedure to
	  create edit url for message keys

2006-02-06 08:12  victorg

	* packages/acs-tcl/tcl/: 20-memoize-init.tcl, memoize-procs.tcl:
	  Moving definition of util_memoize_flush from memoize-procs.tcl to
	  20-memoize-init.tcl. server_cluster_httpget_from_peers proc was
	  not defined when loading memoize procs. This issue is related to
	  bug #2396.

2006-02-04 09:42  daveb

	* packages/acs-content-repository/tcl/revision-procs.tcl: Allow png
	  to be uploaded as images

2006-02-01 13:32  victorg

	* packages/acs-lang/: acs-lang.info, sql/oracle/ad-locales.sql,
	  sql/oracle/upgrade/upgrade-5.2.2d1-5.2.2d2.sql,
	  sql/postgresql/ad-locales.sql,
	  sql/postgresql/upgrade/upgrade-5.2.2d1-5.2.2d2.sql: Adding
	  locales: es_CO, ind_ID, bg_BG, pa_IN

2006-01-30 15:48  hughb

	* packages/acs-service-contract/www/binding-uninstall-oracle.xql:
	  Fix Oracle bug -- oracle sql was calling a function where the
	  only API is a procedure. Could never have worked.

2006-01-27 08:53  maltes

	* packages/acs-tcl/: catalog/acs-tcl.de_DE.ISO-8859-1.xml,
	  catalog/acs-tcl.en_US.ISO-8859-1.xml,
	  tcl/community-core-procs.tcl, tcl/community-core-procs.xql:
	  reverting. not because I think I have to but because I'm just
	  sick of discussing this minor change for ages

2006-01-26 14:19  gustafn

	* packages/acs-templating/tcl/richtext-procs.tcl: fixed format menu
	  and tested to following cases: with/without javascript,
	  with/without UseHtmlAreaForRichtextP, with rte and xinha

2006-01-26 07:44  gustafn

	* packages/acs-templating/tcl/richtext-procs.tcl: make xinha branch
	  working, when javascript is turned off

2006-01-25 17:10  gustafn

	* packages/acs-templating/tcl/richtext-procs.tcl: fixing a typo (in
	  depreciatged code), removing the text format box for richtext,
	  when htmlarea_p is set (this will easily lead to a content type
	  text/enhanced, where the real content generated from the rich
	  text widget is in HTML;  this can lead to errors in xowiki).

2006-01-25 06:04  maltes

	* packages/acs-tcl/tcl/application-data-link-procs.xql: Added
	  orderby

2006-01-25 06:04  maltes

	* packages/acs-tcl/tcl/: community-core-procs.tcl,
	  community-core-procs.xql: Allow usage of an email with multiple
	  party_ids. Should not break existing sites (as they would have
	  broken if you have an e-mail twice in the system

2006-01-25 06:03  maltes

	* packages/acs-tcl/tcl/memoize-procs.tcl: changed notice to debug

2006-01-23 08:50  roelc

	* packages/acs-subsite/www/resources/site-master.css: Added
	  admin-button classes

2006-01-18 09:03  hughb

	* packages/acs-content-repository/: sql/oracle/content-image.sql,
	  sql/oracle/upgrade/upgrade-5.2.2-5.2.3d1.sql,
	  tcl/test/content-image-test-procs.tcl: fix non-nullable package
	  id on image (package id should be nullable and it now is)

2006-01-17 16:29  donb

	* packages/acs-subsite/www/admin/site-map/application-new.tcl:
	  Fixed a bug in the code to add an application, this has been here
	  a long time, presumably most people are adding apps from the main
	  page.

2006-01-16 19:46  daveb

	* packages/: acs-admin/acs-admin.info,
	  acs-api-browser/acs-api-browser.info,
	  acs-authentication/acs-authentication.info,
	  acs-automated-testing/acs-automated-testing.info,
	  acs-bootstrap-installer/acs-bootstrap-installer.info,
	  acs-content-repository/acs-content-repository.info,
	  acs-core-docs/acs-core-docs.info, acs-kernel/acs-kernel.info,
	  acs-lang/acs-lang.info, acs-mail/acs-mail.info,
	  acs-messaging/acs-messaging.info,
	  acs-reference/acs-reference.info,
	  acs-service-contract/acs-service-contract.info,
	  acs-subsite/acs-subsite.info, acs-tcl/acs-tcl.info,
	  acs-templating/acs-templating.info,
	  ref-timezones/ref-timezones.info, search/search.info: Updating
	  info files for 5.2.2

2006-01-16 19:44  daveb

	* packages/acs-core-docs/www/: acs-admin.html, aolserver.html,
	  aolserver4.html, automated-testing-best-practices.html,
	  backup-recovery.html, bootstrap-acs.html, complete-install.html,
	  credits.html, cvs-guidelines.html, db-api-detailed.html,
	  db-api.html, eng-standards-constraint-naming.html,
	  eng-standards-filenaming.html, eng-standards-plsql.html,
	  eng-standards-versioning.html, filename.html, form-builder.html,
	  index.html, individual-programs.html, install-daemontools.html,
	  install-next-add-server.html, install-next-nightly-vacuum.html,
	  install-qmail.html, install-steps.html, mac-installation.html,
	  maintenance-web.html, object-identity.html, objects.html,
	  openacs-unpack.html, openacs.html, oracle.html, packages.html,
	  parties.html, permissions.html, postgres.html,
	  programming-with-aolserver.html, psgml-for-emacs.html,
	  psgml-mode.html, release-notes-4-5.html,
	  release-notes-4-6-2.html, release-notes-4-6-3.html,
	  release-notes-4-6.html, release-notes.html,
	  releasing-openacs-core.html, request-processor.html,
	  requirements-template.html, security-notes.html,
	  style-guide.html, subsites.html, tcl-doc.html, templates.html,
	  tutorial-database.html, tutorial-etp-templates.html,
	  tutorial-newpackage.html, tutorial-pages.html,
	  unix-installation.html, upgrade-4.5-to-4.6.html, variables.html,
	  win2k-installation.html, xml/variables.ent: Updateing
	  documentation for 5.2.2

2006-01-16 19:41  daveb

	* ChangeLog: Update ChangeLog for 5.2.2

2006-01-16 18:42  daveb

	* packages/acs-templating/tcl/richtext-procs.tcl: Fix richtext to
	  show Format widget on no RTE or no javascript.

2006-01-16 10:59  daveb

	* packages/acs-core-docs/www/: aolserver.html, aolserver4.html,
	  automated-testing-best-practices.html, backup-recovery.html,
	  bootstrap-acs.html, credits.html, cvs-guidelines.html,
	  db-api-detailed.html, db-api.html,
	  eng-standards-constraint-naming.html,
	  eng-standards-filenaming.html, eng-standards-plsql.html,
	  eng-standards-versioning.html, filename.html, form-builder.html,
	  individual-programs.html, install-next-nightly-vacuum.html,
	  install-steps.html, mac-installation.html, maintenance-web.html,
	  object-identity.html, objects.html, openacs.html, oracle.html,
	  packages.html, parties.html, permissions.html, postgres.html,
	  programming-with-aolserver.html, psgml-mode.html,
	  release-notes-4-5.html, release-notes-4-6-2.html,
	  release-notes-4-6-3.html, release-notes-4-6.html,
	  release-notes.html, releasing-openacs-core.html,
	  request-processor.html, requirements-template.html,
	  security-notes.html, style-guide.html, subsites.html,
	  tcl-doc.html, templates.html, tutorial-database.html,
	  tutorial-etp-templates.html, tutorial-pages.html,
	  unix-installation.html, variables.html, win2k-installation.html,
	  xml/releasing-openacs.xml: Update documentation

2006-01-16 10:47  daveb

	* packages/: acs-admin/acs-admin.info,
	  acs-api-browser/acs-api-browser.info,
	  acs-authentication/acs-authentication.info,
	  acs-automated-testing/acs-automated-testing.info,
	  acs-bootstrap-installer/acs-bootstrap-installer.info,
	  acs-content-repository/acs-content-repository.info,
	  acs-core-docs/acs-core-docs.info, acs-kernel/acs-kernel.info,
	  acs-lang/acs-lang.info, acs-mail/acs-mail.info,
	  acs-messaging/acs-messaging.info,
	  acs-reference/acs-reference.info,
	  acs-service-contract/acs-service-contract.info,
	  acs-subsite/acs-subsite.info, acs-tcl/acs-tcl.info,
	  acs-templating/acs-templating.info,
	  ref-timezones/ref-timezones.info, search/search.info: Update
	  release date

2006-01-16 10:45  daveb

	* readme.txt: Update version number

2006-01-16 10:41  daveb

	* ChangeLog: New changelog

2006-01-16 10:24  daveb

	* packages/acs-core-docs/www/files/update-info.sh: Add example
	  script to update info files for release.

2006-01-16 00:44  maltes

	* packages/acs-tcl/lib/page-error.tcl: Uncommented the whole line
	  as it caused errors. We should not log the error messages if we
	  are not sending emails anyway...

2006-01-15 16:17  donb

	* packages/: acs-content-repository/sql/oracle/content-keyword.sql,
	  acs-content-repository/sql/oracle/packages-create.sql,
	  acs-content-repository/sql/oracle/upgrade/upgrade-5.2.0a1-5.2.0a2.sql,
	  acs-content-repository/sql/oracle/upgrade/upgrade-5.2.0d16-5.2.0d17.sql,
	  acs-content-repository/sql/oracle/upgrade/upgrade-5.2.1d1-5.2.1d2.sql,
	  acs-kernel/sql/oracle/upgrade/upgrade-5.2.0d1-5.2.0d2.sql,
	  acs-kernel/sql/oracle/upgrade/upgrade-5.2.1d1-5.2.1d2.sql: Fixed
	  5.1->5.2 upgrade, all content repository tests now pass.

2006-01-12 10:25  daveb

	* packages/acs-content-repository/sql/oracle/: content-folder.sql,
	  content-item.sql, upgrade/upgrade-5.2.1d1-5.2.1d2.sql: Remove
	  code that guesses package_id based on parent_id

2006-01-12 10:23  daveb

	* packages/acs-content-repository/sql/postgresql/:
	  content-folder.sql, content-item.sql,
	  upgrade/upgrade-5.2.1d1-5.2.1d2.sql: Remove code that guesses
	  package_id based on parent_id. In almost all cases this will
	  return null anyway.

2006-01-11 19:20  dedsc

	* packages/acs-content-repository/sql/postgresql/content-type.sql:
	  fix content_type__refresh_view to do a lowercase when selecting
	  table_name. this was in the upgrade script for 5.2.0a1 to 5.2.0a2
	  but didn't find it's way here

2006-01-08 22:32  carlb

	* packages/acs-authentication/www/doc/: ext-auth-install.html,
	  ext-auth-ldap-install.html, ext-auth-pam-install.html,
	  index.html, xml/install.xml: initial add of LDAP/Active Directory
	  authN documentation

2006-01-08 18:52  daveb

	* packages/: acs-admin/acs-admin.info,
	  acs-api-browser/acs-api-browser.info,
	  acs-authentication/acs-authentication.info,
	  acs-automated-testing/acs-automated-testing.info,
	  acs-bootstrap-installer/acs-bootstrap-installer.info,
	  acs-content-repository/acs-content-repository.info,
	  acs-core-docs/acs-core-docs.info, acs-kernel/acs-kernel.info,
	  acs-lang/acs-lang.info, acs-mail/acs-mail.info,
	  acs-messaging/acs-messaging.info,
	  acs-reference/acs-reference.info,
	  acs-service-contract/acs-service-contract.info,
	  acs-subsite/acs-subsite.info, acs-tcl/acs-tcl.info,
	  acs-templating/acs-templating.info,
	  ref-timezones/ref-timezones.info, search/search.info: Update
	  docs, bump info files for 5.2.1

2006-01-08 17:28  daveb

	* packages/acs-core-docs/: acs-core-docs.info, www/aolserver.html,
	  www/aolserver4.html, www/automated-testing-best-practices.html,
	  www/backup-recovery.html, www/bootstrap-acs.html,
	  www/configuring-configuring-packages.html,
	  www/configuring-configuring-permissions.html,
	  www/configuring-install-packages.html,
	  www/configuring-mounting-packages.html,
	  www/contributing-code.html, www/credits.html,
	  www/cvs-guidelines.html, www/cvs-tips.html,
	  www/db-api-detailed.html, www/db-api.html,
	  www/docbook-primer.html,
	  www/eng-standards-constraint-naming.html,
	  www/eng-standards-filenaming.html, www/eng-standards-plsql.html,
	  www/eng-standards-versioning.html,
	  www/ext-auth-requirements.html, www/filename.html,
	  www/form-builder.html, www/high-avail.html, www/how-do-I.html,
	  www/i18n-convert.html, www/index.html,
	  www/individual-programs.html, www/install-cvs.html,
	  www/install-daemontools.html,
	  www/install-full-text-search-openfts.html,
	  www/install-full-text-search-tsearch2.html,
	  www/install-next-nightly-vacuum.html,
	  www/install-openacs-keepalive.html, www/install-qmail.html,
	  www/install-redhat.html, www/install-steps.html, www/ix01.html,
	  www/mac-installation.html, www/maint-performance.html,
	  www/maintenance-deploy.html, www/maintenance-web.html,
	  www/object-identity.html, www/objects.html,
	  www/openacs-cvs-concepts.html, www/openacs.html, www/oracle.html,
	  www/packages.html, www/parties.html,
	  www/permissions-tediously-explained.html, www/permissions.html,
	  www/postgres.html, www/programming-with-aolserver.html,
	  www/psgml-for-emacs.html, www/psgml-mode.html,
	  www/release-notes-4-5.html, www/release-notes-4-6-2.html,
	  www/release-notes-4-6-3.html, www/release-notes-4-6.html,
	  www/release-notes.html, www/releasing-openacs-core.html,
	  www/request-processor.html, www/requirements-template.html,
	  www/security-notes.html, www/style-guide.html, www/subsites.html,
	  www/tcl-doc.html, www/templates.html,
	  www/tutorial-css-layout.html, www/tutorial-cvs.html,
	  www/tutorial-database.html, www/tutorial-debug.html,
	  www/tutorial-distribute.html, www/tutorial-etp-templates.html,
	  www/tutorial-newpackage.html, www/tutorial-pages.html,
	  www/unix-installation.html, www/upgrade-4.5-to-4.6.html,
	  www/upgrade-openacs-files.html, www/upgrade-overview.html,
	  www/using-cvs-with-openacs.html, www/variables.html,
	  www/win2k-installation.html: Regenerate docs for 5.2.1

2006-01-08 15:15  carlb

	* packages/acs-core-docs/www/xml/install-guide/postgres.xml: added
	  a note about default system path in a section that was confusing
	  new users

2006-01-08 06:52  daveb

	* packages/acs-content-repository/tcl/content-item-procs.tcl:
	  Remove dependency on ad_conn.

2006-01-06 23:59  maltes

	* packages/acs-content-repository/tcl/content-item-procs.tcl: Fixes
	  #2771. Made sure creation_* parameters are passed on to
	  content::revision::new

2006-01-05 11:40  daveb

	* packages/acs-tcl/lib/page-error.tcl: Turn off emailing page
	  errors.  Whoever added this, please, please,please! add the
	  paramtere for this and make it off by default.

2006-01-05 09:43  daveb

	* packages/acs-kernel/acs-kernel.info: Bump version number

2006-01-04 16:25  donb

	*
	  packages/acs-kernel/sql/oracle/upgrade/upgrade-5.2.0d9-5.2.0d10.sql:
	  Added create or replace of apm_package to the 5.2.0 version since
	  we've not actually bumped acs-kernel.info yet ...

2006-01-04 12:28  daveb

	* packages/acs-messaging/: acs-messaging.info,
	  sql/oracle/acs-messaging-packages.sql,
	  sql/oracle/upgrade/upgrade-5.2.1d1-5.2.1d2.sql: Support root
	  parent_id as -4 instead of 0. Postgresql doesn't have a default
	  for parent_id so it doesn't get an upgrade script.

2006-01-04 07:51  daveb

	*
	  packages/acs-content-repository/sql/postgresql/upgrade/upgrade-5.2.1d1-5.2.1d2.sql:
	  Refresh content_revision view also, not just child types.

2006-01-03 17:42  daveb

	* packages/acs-kernel/sql/:
	  postgresql/upgrade/upgrade-5.2.1d1-5.2.1d2.sql,
	  oracle/upgrade/upgrade-5.2.1d1-5.2.1d2.sql: Recreate apm package
	  to match create scripts.

2006-01-03 17:29  daveb

	* packages/acs-content-repository/sql/:
	  oracle/upgrade/upgrade-5.2.0b11-5.2.0b12.sql,
	  oracle/upgrade/upgrade-5.2.1d1-5.2.1d2.sql,
	  postgresql/upgrade/upgrade-5.2.0b11-5.2.0b12.sql,
	  postgresql/upgrade/upgrade-5.2.1d1-5.2.1d2.sql: Fix upgrade. Move
	  5.2.0 stuff to 5.2.1

2006-01-03 16:48  donb

	* packages/acs-kernel/sql/oracle/acs-relationships-create.sql:
	  Fixed malte/timo typo that broke oracle

2006-01-03 16:38  donb

	* packages/acs-content-repository/sql/oracle/: content-folder.sql,
	  upgrade/upgrade-5.2.0b5-5.2.0b6.sql: More 5.2 fixes for Oracle
	  ...

2006-01-03 15:10  donb

	* packages/acs-bootstrap-installer/db-init-checks-oracle.tcl:
	  Janine's addition of a real version check for Oracle was
	  allocating a db handle from the default pool, which we don't
	  require in OpenACS.  I changed the test to grab a handle from the
	  first available pool.

2006-01-03 07:05  daveb

	*
	  packages/acs-content-repository/sql/postgresql/upgrade/upgrade-5.2.0b11-5.2.0b12.sql:
	  Recreate content_keyword__new to support package_id.	Refresh
	  views and triggers.

2006-01-03 07:04  daveb

	*
	  packages/acs-content-repository/sql/oracle/upgrade/upgrade-5.2.0b11-5.2.0b12.sql:
	  Refresh views and triggers.  Recreate content keyword to support
	  package_id parameter

2006-01-03 05:45  daveb

	*
	  packages/acs-content-repository/sql/postgresql/upgrade/upgrade-5.2.0b11-5.2.0b12.sql:
	  Refresh insert views on upgrade since the definition has changed.

2006-01-02 10:02  daveb

	*
	  packages/acs-kernel/sql/postgresql/upgrade/upgrade-5.2.0b10-5.2.0b11.sql:
	  Make sure beta testers also get fixed apm_package__new

2006-01-02 10:00  daveb

	*
	  packages/acs-kernel/sql/postgresql/upgrade/upgrade-5.2.0d1-5.2.0d2.sql:
	  Fix apm_package__new on upgrade to match new install

2006-01-02 05:59  daveb

	* packages/acs-content-repository/acs-content-repository.info: Bump
	  to corect version number.

2006-01-01 15:37  gustafn

	* packages/acs-templating/www/resources/xinha-nightly/: lang/sh.js,
	  lang/sr.js, plugins/InsertSnippet/InsertSnippet.css,
	  plugins/InsertSnippet/insert-snippet.js,
	  plugins/InsertSnippet/snippets.html,
	  plugins/InsertSnippet/snippets.js,
	  plugins/InsertSnippet/snippets.php,
	  plugins/InsertSnippet/img/ed_snippet.gif,
	  plugins/InsertSnippet/lang/de.js,
	  plugins/InsertSnippet/popups/insertsnippet.html: adding new files
	  of xinha nightly (new plugin InsertSnippet)

2006-01-01 15:28  gustafn

	* packages/acs-templating/www/resources/xinha-nightly/: dialog.js,
	  examples/Extended.html, examples/ext_example-body.html,
	  examples/ext_example-menu.php, examples/ext_example.html,
	  plugins/CSS/css.js, plugins/CharCounter/char-counter.js,
	  plugins/CharacterMap/character-map.js,
	  plugins/ContextMenu/context-menu.js,
	  plugins/ContextMenu/lang/no.js, plugins/Equation/equation.js,
	  plugins/Equation/lang/no.js, plugins/FullPage/full-page.js,
	  plugins/GetHtml/get-html.js, plugins/HtmlTidy/lang/no.js,
	  plugins/ImageManager/config.inc.php,
	  plugins/ImageManager/editor.php,
	  plugins/ImageManager/editorFrame.php,
	  plugins/ImageManager/image-manager.js,
	  plugins/ImageManager/images.php,
	  plugins/ImageManager/manager.php,
	  plugins/ImageManager/resizer.php,
	  plugins/ImageManager/thumbs.php,
	  plugins/ImageManager/Classes/Files.php,
	  plugins/ImageManager/Classes/GD.php,
	  plugins/ImageManager/Classes/IM.php,
	  plugins/ImageManager/Classes/ImageEditor.php,
	  plugins/ImageManager/Classes/ImageManager.php,
	  plugins/ImageManager/Classes/NetPBM.php,
	  plugins/ImageManager/Classes/Thumbnail.php,
	  plugins/ImageManager/Classes/Transform.php,
	  plugins/ImageManager/assets/dialog.js,
	  plugins/ImageManager/assets/editor.js,
	  plugins/ImageManager/assets/editorFrame.js,
	  plugins/ImageManager/assets/images.js,
	  plugins/ImageManager/assets/manager.js,
	  plugins/ImageManager/assets/popup.js,
	  plugins/InsertAnchor/lang/no.js,
	  plugins/InsertPicture/InsertPicture.php,
	  plugins/InsertPicture/insert-picture.js,
	  plugins/InsertPicture/lang/de.js,
	  plugins/InsertPicture/lang/no.js, plugins/Linker/linker.js,
	  plugins/ListType/list-type.js, plugins/ListType/lang/no.js,
	  plugins/NoteServer/lang/no.js,
	  plugins/OacsFs/popups/file-selector.tcl,
	  plugins/QuickTag/lang/no.js,
	  plugins/SpellChecker/aspell_setup.php,
	  plugins/SpellChecker/spell-check-logic.cgi,
	  plugins/SpellChecker/spell-check-ui.html,
	  plugins/SpellChecker/spell-check-ui.js,
	  plugins/SpellChecker/spell-checker.js,
	  plugins/SpellChecker/lang/no.js, plugins/SuperClean/lang/no.js,
	  plugins/TableOperations/table-operations.js, popups/about.html,
	  popups/popup.js, skins/blue-metallic/skin.css: upgrade to the
	  current xinha-nightly version

2005-12-29 03:57  maltes

	* packages/acs-kernel/catalog/: acs-kernel.ar_LB.utf-8.xml,
	  acs-kernel.da_DK.ISO-8859-1.xml, acs-kernel.de_DE.ISO-8859-1.xml,
	  acs-kernel.en_US.ISO-8859-1.xml, acs-kernel.fr_FR.ISO-8859-1.xml:
	  Updated translations and fixed two strings in English

2005-12-29 03:46  maltes

	* packages/acs-content-repository/acs-content-repository.info:
	  Error in the requires section

2005-12-29 02:07  maltes

	* etc/config.tcl: Added check for libthread library

2005-12-28 17:27  daveb

	* packages/acs-content-repository/acs-content-repository.info:
	  Update info file so new upgrade script will run.

2005-12-28 17:24  daveb

	* packages/acs-content-repository/sql/: oracle/content-create.sql,
	  oracle/content-folder.sql, oracle/content-item.sql,
	  postgresql/content-create.sql, postgresql/content-folder.sql,
	  postgresql/content-item.sql,
	  postgresql/upgrade/upgrade-5.2.1d1-5.2.1d2.sql,
	  oracle/upgrade/upgrade-5.2.1d1-5.2.1d2.sql: Changes to make the
	  root of parentless items = -4 (security context root) instead of
	  0 (unregistered visitor) Sites upgradeed from 4.6-4.6.1 have been
	  operating with -4 as the parent_id for years (for example
	  openacs.org) while new installs had parent_id = 0. This caused
	  problems with the new package_id code that calls
	  content_item__get_root_folder which was assuming the root = 0. It
	  looks like the new install code did not accomodate parent_id=-4
	  and that is now fixed.  Needs testing on Oracle.

2005-12-28 15:29  gustafn

	* packages/acs-tcl/tcl/: request-processor-procs.tcl,
	  utilities-procs.tcl: Basic compatibility with naviserver 4.99.0
	  (some packages with filters will need similar fixes)

2005-12-27 00:55  maltes

	* packages/acs-tcl/tcl/utilities-procs.tcl: Added
	  util::find_all_files

2005-12-23 00:26  maltes

	* packages/acs-kernel/catalog/: acs-kernel.de_DE.ISO-8859-1.xml,
	  acs-kernel.en_US.ISO-8859-1.xml: Fix #2751

2005-12-19 12:20  maltes

	* packages/acs-lang/tcl/lang-catalog-procs.tcl: It does not make
	  sense to export acs-translations at all because the object_ids
	  are different from site tot site

2005-12-19 12:09  maltes

	* packages/acs-lang/sql/postgresql/ad-locales.sql: Added swiss
	  locale

2005-12-19 10:42  maltes

	* packages/acs-lang/sql/postgresql/ad-locales.sql: Removed swiss
	  locale. Will recommit once the release has been made

2005-12-18 03:17  maltes

	* packages/acs-content-repository/tcl/content-symlink-procs.tcl: A
	  little tiny bit of documentation for the symlink procedures

2005-12-16 09:00  daveb

	* packages/acs-subsite/lib/user-new.tcl: Fix bug#2715 url varibale
	  name overwriting value of form element

2005-12-15 14:48  maltes

	* packages/acs-subsite/catalog/: acs-subsite.de_DE.ISO-8859-1.xml,
	  acs-subsite.en_US.ISO-8859-1.xml: New I18N


High level information: What is OpenACS?

Created by Gustaf Neumann, last modified by Gustaf Neumann 22 Jan 2007, at 01:18 AM

Table of Contents

Overview
OpenACS Release Notes

OpenACS For Everyone

Created by Gustaf Neumann, last modified by Gustaf Neumann 22 Jan 2007, at 01:18 AM

Using CVS with an OpenACS Site

Created by Gustaf Neumann, last modified by Gustaf Neumann 22 Jan 2007, at 01:14 AM

By Joel Aufrecht

OpenACS docs are written by the named authors, and may be edited by OpenACS documentation staff.

Add the Service to CVS - OPTIONAL.These steps take an existing OpenACS directory and add it to a CVS repository.

  1. Create and set permissions on a subdirectory in the local cvs repository.

    [root root]# mkdir /cvsroot/$OPENACS_SERVICE_NAME
    
    [root root]# chown $OPENACS_SERVICE_NAME.$OPENACS_SERVICE_NAME /cvsroot/$OPENACS_SERVICE_NAME
    
    [root root]#
    mkdir /cvsroot/$OPENACS_SERVICE_NAME
    chown $OPENACS_SERVICE_NAME.$OPENACS_SERVICE_NAME /cvsroot/$OPENACS_SERVICE_NAME
    
    
  2. Add the repository location to the user environment. On some systems, you may get better results with .bash_profile instead of .bashrc.

    [root root]# su - $OPENACS_SERVICE_NAME
    
    [$OPENACS_SERVICE_NAME $OPENACS_SERVICE_NAME]$ emacs .bashrc
    

    Put this string into /home/$OPENACS_SERVICE_NAME/.bashrc:

    export CVSROOT=/cvsroot
    [$OPENACS_SERVICE_NAME $OPENACS_SERVICE_NAME]$ exit
    logout
    
    [root root]#
  3. Import all files into cvs. In order to work on files with source control, the files must be checked out from cvs. So we will import, move aside, and then check out all of the files. In the cvs import command, $OPENACS_SERVICE_NAME refers to the cvs repository to use; it uses the CVSROOT plus this string, i.e. /cvsroot/$OPENACS_SERVICE_NAME . "OpenACS" is the vendor tag, and "oacs-5-2-3rc1" is the release tag. These tags will be useful in upgrading and branching. -m sets the version comment.

    [root root]# su - $OPENACS_SERVICE_NAME
    
    [$OPENACS_SERVICE_NAME $OPENACS_SERVICE_NAME]$ cd /var/lib/aolserver/$OPENACS_SERVICE_NAME
    
    [$OPENACS_SERVICE_NAME $OPENACS_SERVICE_NAME]$ cvs import -m "initial install" $OPENACS_SERVICE_NAME OpenACS oacs-5-2-3rc1
    N $OPENACS_SERVICE_NAME/license.txt
    N $OPENACS_SERVICE_NAME/readme.txt
    (many lines omitted)
    N $OPENACS_SERVICE_NAME/www/SYSTEM/flush-memoized-statement.tcl
    
    No conflicts created by this import
    
    [$OPENACS_SERVICE_NAME $OPENACS_SERVICE_NAME]$ exit
    [root root]#
    su - $OPENACS_SERVICE_NAME
    cd /var/lib/aolserver/$OPENACS_SERVICE_NAME
    cvs import -m "initial install" $OPENACS_SERVICE_NAME OpenACS oacs-5-2-3rc1
    exit
    

    Move the original directory to a temporary location, and check out the cvs repository in its place.

    [root root]# mv /var/lib/aolserver/$OPENACS_SERVICE_NAME /var/tmp
    [root root]# mkdir /var/lib/aolserver/$OPENACS_SERVICE_NAME
    
    [root root]# chown $OPENACS_SERVICE_NAME.$OPENACS_SERVICE_NAME /var/lib/aolserver/$OPENACS_SERVICE_NAME
    
    [root root]# su - $OPENACS_SERVICE_NAME
    
    [$OPENACS_SERVICE_NAME $OPENACS_SERVICE_NAME]$ cd /var/lib/aolserver
    [$OPENACS_SERVICE_NAME aolserver]$ cvs checkout $OPENACS_SERVICE_NAME
    
    cvs checkout: Updating $OPENACS_SERVICE_NAME
    U $OPENACS_SERVICE_NAME/license.txt
    (many lines omitted)
    U $OPENACS_SERVICE_NAME/www/SYSTEM/dbtest.tcl
    U $OPENACS_SERVICE_NAME/www/SYSTEM/flush-memoized-statement.tcl
    [$OPENACS_SERVICE_NAME aolserver]$ exit
    logout
    
    [root root]#
    
    mv /var/lib/aolserver/$OPENACS_SERVICE_NAME /var/tmp
    mkdir /var/lib/aolserver/$OPENACS_SERVICE_NAME
    chown $OPENACS_SERVICE_NAME.$OPENACS_SERVICE_NAME /var/lib/aolserver/$OPENACS_SERVICE_NAME
    su - $OPENACS_SERVICE_NAME
    cd /var/lib/aolserver
    cvs checkout $OPENACS_SERVICE_NAME
    exit
    
  4. If the service starts correctly, come back and remove the temporary copy of the uploaded files.

Debugging and Automated Testing

Created by Joel Aufrecht, last modified by Gustaf Neumann 22 Jan 2007, at 01:06 AM

Developer Support.The Developer Support package adds several goodies: debug information for every page; the ability to log comments to the page instead of the error log, and fast user switching so that you can test pages as anonymous and as dummy users without logging in and out.

PostgreSQL.You can work directly with the database to do debugging steps like looking directly at tables and testing stored procedures. Start emacs. Type M-x sql-postgres. Press enter for server name and use $OPENACS_SERVICE_NAME for database name. You can use C-(up arrow) and C-(down arrow) for command history.

Hint: "Parse error near *" usually means that an xql file wasn't recognized, because the tcl file is choking on the *SQL* placeholder that it falls back on.

Watching the server log.

To set up real-time monitoring of the AOLserver error log, type

less /var/lib/aolserver/$OPENACS_SERVICE_NAME/log/openacs-dev-error.log

 

Ftoshownewlogentriesinrealtime(liketail-f)
C-ctostopandFtostartitupagain.
Ggoestotheend.
?searchesbackward
/searchesforward.

 

Make a list of basic tests to make sure it works

Test NumActionExpected Result
001Browse to the index page while not logged in and while one or more notes exist.No edit or delete or add links should appear.
002Browse to the index page while logged in. An Edit link should appear. Click on it. Fill out the form and click Submit.The text added in the form should be visible on the index page.
API-001Invoke mfp::note::create with a specific word as the title.Proc should return an object id.
API-002Given an object id from API-001, invoke mfp::note::get.Proc should return the specific word in the title.
API-003Given the object id from API-001, invoke mfp::note::delete.Proc should return 0 for success.

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.

It seems to me that a lot of people have been asking for some guidelines on how to write automated tests. I've done several tests by now and have found the process to be extremely easy and useful. It's a joy to work with automated testing once you get the hang of it.

Create the directory that will contain the test script and edit the script file. The directory location and file name are standards which are recognized by the automated testing package:

[$OPENACS_SERVICE_NAME www]$ mkdir /var/lib/aolserver/$OPENACS_SERVICE_NAME/packages/myfirstpackage/tcl/test
[$OPENACS_SERVICE_NAME www]$ cd /var/lib/aolserver/$OPENACS_SERVICE_NAME/packages/myfirstpackage/tcl/test
[$OPENACS_SERVICE_NAME test]$ emacs myfirstpackages-procs.tcl

Write the tests. This is obviously the big step :) The script should first call ad_library like any normal -procs.tcl file:

ad_library {
...
}

To create a test case you call aa_register_case test_case_name.. Once you've created the test case you start writing the needed logic. We'll use the tutorial package, "myfirstpackage," as an example. Let's say you just wrote an API for adding and deleting notes in the notes packages and wanted to test that. You'd probably want to write a test that first creates a note, then verifies that it was inserted, then perhaps deletes it again, and finally verifies that it is gone.

Naturally this means you'll be adding a lot of bogus data to the database, which you're not really interested in having there. To avoid this I usually do two things. I always put all my test code inside a call to aa_run_with_teardown which basically means that all the inserts, deletes, and updates will be rolled back once the test has been executed. A very useful feature. Instead of inserting bogus data like: set name "Simon", I tend to generate a random script in order avoid inserting a value that's already in the database:

set name [ad_generate_random_string]

Here's how the test case looks so far:

aa_register_case mfp_basic_test {
My test
} {
aa_run_with_teardown \
-rollback \
-test_code {

}
}

Now let's look at the actual test code. That's the code that goes inside -test_code {}. We want to implement test case API-001, "Given an object id from API-001, invoke mfp::note::get. Proc should return the specific word in the title."

      set name [ad_generate_random_string]
set new_id [mfp::note::add -title $name]
aa_true "Note add succeeded" [exists_and_not_null new_id]

To test our simple case, we must load the test file into the system (just as with the /tcl file in the basic tutorial, since the file didn't exist when the system started, the system doesn't know about it.) To make this file take effect, go to the APM and choose "Reload changed" for "MyFirstPackage". Since we'll be changing it frequently, select "watch this file" on the next page. This will cause the system to check this file every time any page is requested, which is bad for production systems but convenient for developing. We can also add some aa_register_case flags to make it easier to run the test. The -procs flag, which indicates which procs are tested by this test case, makes it easier to find procs in your package that aren't tested at all. The -cats flag, setting categories, makes it easier to control which tests to run. The smoke test setting means that this is a basic test case that can and should be run any time you are doing any test. (a definition of "smoke test")

Once the file is loaded, go to ACS Automated Testing and click on myfirstpackage. You should see your test case. Run it and examine the results.

API testing can only test part of our package - it doesn't test the code in our adp/tcl pairs. For this, we can use TCLwebtest. TCLwebtest must be installed for this test to work. This provides a library of functions that make it easy to call a page through HTTP, examine the results, and drive forms. TCLwebtest's functions overlap slightly with acs-automated-testing; see the example provided for one approach on integrating them.

Now we can add the rest of the API tests, including a test with deliberately bad data. The complete test looks like:

ad_library {
Test cases for my first package.
}

aa_register_case \
-cats {smoke api} \
-procs {mfp::note::add mfp::note::get mfp::note::delete} \
mfp_basic_test \
{
A simple test that adds, retrieves, and deletes a record.
} {
aa_run_with_teardown \
-rollback \
-test_code {
set name [ad_generate_random_string]
set new_id [mfp::note::add -title $name]
aa_true "Note add succeeded" [exists_and_not_null new_id]

mfp::note::get -item_id $new_id -array note_array
aa_true "Note contains correct title" [string equal $note_array(title) $name]

mfp::note::delete -item_id $new_id

set get_again [catch {mfp::note::get -item_id $new_id -array note_array}]
aa_false "After deleting a note, retrieving it fails" [expr $get_again == 0]
}
}

aa_register_case \
-cats {api} \
-procs {mfp::note::add mfp::note::get mfp::note::delete} \
mfp_bad_data_test \
{
A simple test that adds, retrieves, and deletes a record, using some tricky data.
} {
aa_run_with_teardown \
-rollback \
-test_code {
set name {-Bad [BAD] \077 { $Bad}}
append name [ad_generate_random_string]
set new_id [mfp::note::add -title $name]
aa_true "Note add succeeded" [exists_and_not_null new_id]

mfp::note::get -item_id $new_id -array note_array
aa_true "Note contains correct title" [string equal $note_array(title) $name]
aa_log "Title is $name"
mfp::note::delete -item_id $new_id

set get_again [catch {mfp::note::get -item_id $new_id -array note_array}]
aa_false "After deleting a note, retrieving it fails" [expr $get_again == 0]
}
}


aa_register_case \
-cats {web smoke} \
-libraries tclwebtest \
mfp_web_basic_test \
{
A simple tclwebtest test case for the tutorial demo package.

@author Peter Marklund
} {
# we need to get a user_id here so that it's available throughout
# this proc
set user_id [db_nextval acs_object_id_seq]

set note_title [ad_generate_random_string]

# NOTE: Never use the aa_run_with_teardown with the rollback switch
# when running Tclwebtest tests since this will put the test code in
# a transaction and changes won't be visible across HTTP requests.

aa_run_with_teardown -test_code {

#-------------------------------------------------------------
# Login
#-------------------------------------------------------------

# Make a site-wide admin user for this test
# We use an admin to avoid permission issues
array set user_info [twt::user::create -admin -user_id $user_id]

# Login the user
twt::user::login $user_info(email) $user_info(password)

#-------------------------------------------------------------
# New Note
#-------------------------------------------------------------

# Request note-edit page
set package_uri [apm_package_url_from_key myfirstpackage]
set edit_uri "${package_uri}note-edit"
aa_log "[twt::server_url]$edit_uri"
twt::do_request "[twt::server_url]$edit_uri"

# Submit a new note

tclwebtest::form find ~n note
tclwebtest::field find ~n title
tclwebtest::field fill $note_title
tclwebtest::form submit

#-------------------------------------------------------------
# Retrieve note
#-------------------------------------------------------------

# Request index page and verify that note is in listing
tclwebtest::do_request $package_uri
aa_true "New note with title \"$note_title\" is found in index page" \
[string match "*${note_title}*" [tclwebtest::response body]]

#-------------------------------------------------------------
# Delete Note
#-------------------------------------------------------------
# Delete all notes

# Three options to delete the note
# 1) go directly to the database to get the id
# 2) require an API function that takes name and returns ID
# 3) screen-scrape for the ID
# all options are problematic. We'll do #1 in this example:

set note_id [db_string get_note_id_from_name "
select item_id
from cr_items
where name = :note_title
and content_type = 'mfp_note'
" -default 0]

aa_log "Deleting note with id $note_id"

set delete_uri "${package_uri}note-delete?item_id=${note_id}"
twt::do_request $delete_uri

# Request index page and verify that note is in listing
tclwebtest::do_request $package_uri
aa_true "Note with title \"$note_title\" is not found in index page after deletion." \
![string match "*${note_title}*" [tclwebtest::response body]]

} -teardown_code {

twt::user::delete -user_id $user_id
}
}

See also the section called “Automated Testing”.

Next Page