# The contents of this file are subject to the Mozilla Public License Version 1.1
# (the "License"); you may not use this file except in compliance with the License.
# You may obtain a copy of the License at .
#
# Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
# WARRANTY OF ANY KIND, either express or implied. See the License for the specific
# language governing rights and limitations under the License.
#
# The Original Code is the Venice Web Communities System.
#
# The Initial Developer of the Original Code is Eric J. Bowersox ,
# for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
# Copyright (C) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
#
# Contributor(s):
#
##############################################################################
# Database Creation
##############################################################################
DROP DATABASE IF EXISTS venice;
CREATE DATABASE venice;
USE venice;
##############################################################################
# Table Creation
##############################################################################
# The "namespace cache" table, used to map string namespaces (used in the code) to integer IDs
# (used in the database).
CREATE TABLE namespaces (
nsid INT NOT NULL PRIMARY KEY AUTO_INCREMENT, # namespace ID
namespace VARCHAR(255) BINARY NOT NULL, # the actual namespace
UNIQUE INDEX on_namespace (namespace)
);
# The global properties table.
CREATE TABLE globalprop (
nsid INT NOT NULL, # namespace ID of property
prop_name VARCHAR(255) BINARY NOT NULL, # name of the property
prop_value VARCHAR(255), # property value
PRIMARY KEY (nsid, prop_name)
);
# The global "blocks" table, used to store fragments of text/HTML for later use.
CREATE TABLE globalblock (
nsid INT NOT NULL, # namespace ID of block
block_name VARCHAR(255) BINARY NOT NULL, # name of block
block TEXT, # actual block (64K text)
PRIMARY KEY (nsid, block_name)
);
# The main user information table.
CREATE TABLE users (
uid INT NOT NULL PRIMARY KEY AUTO_INCREMENT, # user ID
username VARCHAR(64) NOT NULL, # user name
email VARCHAR(255) NOT NULL, # E-mail address
is_anon TINYINT DEFAULT 0, # is this the "anonymous" user?
locked TINYINT DEFAULT 0, # is this user account locked?
nospam TINYINT DEFAULT 0, # if 1, do not include this user in any mass mailings
created DATETIME NOT NULL, # date user was created
last_accessed DATETIME, # date user last logged in
UNIQUE INDEX on_username (username)
);
# The user authentication data table. We identify authentication methods by namespace ID
# and name, and provide "source data" to allow multiple sources for the same type of
# authentication (such as browser cookies for multiple browsers).
CREATE TABLE userauth (
uid INT NOT NULL, # user ID
nsid INT NOT NULL, # namespace ID of authentication method
method VARCHAR(255) BINARY NOT NULL, # name of authentication method
source_data VARCHAR(255), # source data for authentication method
auth_data VARCHAR(255), # authentication data
PRIMARY KEY (uid, nsid, method)
);
# The user properties table.
CREATE TABLE userprop (
uid INT NOT NULL, # user ID
nsid INT NOT NULL, # namespace ID of property
prop_name VARCHAR(255) BINARY NOT NULL, # name of property
prop_value VARCHAR(255), # property value
PRIMARY KEY (uid, nsid, prop_name)
);
# The groups table.
CREATE TABLE groups (
gid INT NOT NULL PRIMARY KEY AUTO_INCREMENT, # group ID
groupname VARCHAR(64) NOT NULL, # name of group
gaclid INT NOT NULL DEFAULT -1, # ACL ID for the group
UNIQUE INDEX on_groupname (groupname)
);
# The group membership table.
CREATE TABLE groupmembers (
gid INT NOT NULL, # ID of group
uid INT NOT NULL, # ID of user that is a member
PRIMARY KEY (gid, uid),
UNIQUE INDEX reverse_index (uid, gid)
);
# The group properties table.
CREATE TABLE groupprop (
gid INT NOT NULL, # ID of group
nsid INT NOT NULL, # namespace ID for property
prop_name VARCHAR(255) BINARY NOT NULL, # name of property
prop_value VARCHAR(255), # property value
PRIMARY KEY (gid, nsid, prop_name)
);
# The main ACL table. Each ACL has a numeric ID, a name, an unordered collection of owners (which may
# be groups or users), and an ordered collection of entries (ACEs).
CREATE TABLE acl (
aclid INT NOT NULL PRIMARY KEY AUTO_INCREMENT, # ID of the ACL
aclname VARCHAR(255) NOT NULL, # name of the ACL
INDEX on_name (aclname)
);
# The table of owners for ACLs. Each ACL has one or more owners.
CREATE TABLE aclowner (
aclid INT NOT NULL, # ID of the ACL
ownerid INT NOT NULL, # ID of the owner
flags TINYINT NOT NULL, # Flags Bit 0: 0=user, 1=group
INDEX on_acl (aclid)
);
# The table mapping ACLs to ACEs. Each ACL has zero or more ACEs.
CREATE TABLE acldata (
aclid INT NOT NULL, # ID of the ACL
seq INT NOT NULL, # sequence of this ACE
aceid INT NOT NULL, # ID of the corresponding ACE
PRIMARY KEY (aclid, seq)
);
# The main ACE table. Each ACE has a numeric ID, a principal reference (which may be a user or
# group ID), a "negative" flag, and an unordered collection of permissions.
CREATE TABLE ace (
aceid INT NOT NULL PRIMARY KEY AUTO_INCREMENT, # ID of this ACE
pri INT, # Principal reference
flags TINYINT NOT NULL DEFAULT 0 # Flags Bit 0: 0=user, 1=group
# Flags Bit 4: 0=positive ACE, 1=negative ACE
);
# The table mapping permissions into ACEs. Permissions are identified by namespace and name.
CREATE TABLE acedata (
aceid INT NOT NULL, # ID of this ACE
perm_nsid INT NOT NULL, # namespace ID of permission
perm_name VARCHAR(255) BINARY NOT NULL, # name of permission
INDEX on_ace (aceid)
);
# Global security data table. This table has only one row.
CREATE TABLE globalsec (
admin_uid INT NOT NULL, # administrator UID
admin_gid INT NOT NULL, # GID of administrators group
global_aclid INT NOT NULL, # ACLID of global ACL
alluser_gid INT NOT NULL, # GID of "all users" GID
verified_gid INT NOT NULL # GID of "verified users" GID
);
# The audit information table. Each audit "event" can have up to 8 properties defined with it,
# which are serialized as other "properties."
CREATE TABLE audit (
record BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT, # audit record ID
on_date DATETIME NOT NULL, # date stamp of audit record
event INT NOT NULL, # event ID
uid INT NOT NULL, # user ID of responsible user
subid INT NOT NULL DEFAULT 0, # "sub ID" (often community ID)
ip VARCHAR(48), # IP address of source
prop0 VARCHAR(255), # event property
prop1 VARCHAR(255), # event property
prop2 VARCHAR(255), # event property
prop3 VARCHAR(255), # event property
prop4 VARCHAR(255), # event property
prop5 VARCHAR(255), # event property
prop6 VARCHAR(255), # event property
prop7 VARCHAR(255), # event property
INDEX by_date (on_date),
INDEX sub_view (subid, on_date)
);
# The table where events are assigned "event IDs" in the master audit record,
# to cut down on space usage in the audit table. Event IDs can be predefined
# at database create time, or defined dynamically, or both.
CREATE TABLE auditevent (
eventid INT NOT NULL PRIMARY KEY AUTO_INCREMENT, # event ID
event_nsid INT NOT NULL, # namespace ID of event
event_name VARCHAR(255) BINARY NOT NULL, # event name
descr TINYTEXT, # event description
UNIQUE INDEX by_event (event_nsid, event_name)
);
# The image store table. This is used to store relatively small images like
# user photos and logos.
CREATE TABLE imagestore (
imageid INT NOT NULL PRIMARY KEY AUTO_INCREMENT, # image ID
typecode INT NOT NULL, # image type code
ownerid INT NOT NULL, # who owns it?
ownerflag TINYINT NOT NULL DEFAULT 0, # owner: user or group?
mimetype VARCHAR(128), # MIME type of image
length INT, # length of image in bytes
data MEDIUMBLOB # image data (max 16 Mb)
);
# The image type table, used to differentiate between images stored in the table.
CREATE TABLE imagetype (
typecode INT NOT NULL PRIMARY KEY AUTO_INCREMENT, # image type code
nsid INT NOT NULL, # image type namespace ID
name VARCHAR(255) BINARY NOT NULL # image type name
);
#### following this line are Venice-specific tables ####
# The table which defines menus.
CREATE TABLE menus (
menuid INT NOT NULL PRIMARY KEY AUTO_INCREMENT, # menu ID
menu_nsid INT NOT NULL, # namespace ID of menu name
menu_name VARCHAR(255) BINARY NOT NULL, # name of menu
title VARCHAR(255) NOT NULL, # menu title
subtitle VARCHAR(255) NULL, # menu subtitle
UNIQUE INDEX by_name (menu_nsid, menu_name)
);
# Definitions of variables for menus.
CREATE TABLE menuvars (
menuid INT NOT NULL, # menu ID
var_name VARCHAR(255) NOT NULL, # name of variable
default_val VARCHAR(255) NULL, # default value of variable
PRIMARY KEY (menuid, var_name)
);
# Definitions of menu items.
CREATE TABLE menuitems (
menuid INT NOT NULL, # menu ID
sequence INT NOT NULL, # sequence of menu item
itemtype VARCHAR(32) NOT NULL, # menu item type
enable TINYINT NOT NULL DEFAULT 1, # enable this menu item?
indent INT NOT NULL DEFAULT 0, # indent level of menu item
text VARCHAR(255) NULL, # text of menu item
linktype VARCHAR(32) NULL, # link type to use with menu item
link VARCHAR(255) NULL, # link for menu item
target VARCHAR(255) NULL, # target frame for menu item
title VARCHAR(255) NULL, # menu item title
on_click VARCHAR(255) NULL, # menu item onClick= property
perm_nsid INT NULL, # you must have this permission (namespace ID)
perm_name VARCHAR(255) BINARY NULL, # you must have this permission (name)
ifdef_var VARCHAR(255) NULL, # show item if this variable is defined
ifndef_var VARCHAR(255) NULL, # show item if this variable is not defined
PRIMARY KEY (menuid, sequence)
);
# The table mapping category IDs to category names.
CREATE TABLE refcategory (
catid INT NOT NULL PRIMARY KEY, # category ID
parent INT NOT NULL, # parent category
symlink INT NOT NULL, # if this is a symlink, what category does it link to?
name VARCHAR(64) NOT NULL, # category name
dontuse TINYINT DEFAULT 0, # 1 if this is a deprecated category
UNIQUE INDEX display (parent, name)
);
# The master communities table.
CREATE TABLE communities (
cid INT NOT NULL PRIMARY KEY AUTO_INCREMENT, # community ID
member_gid INT NOT NULL, # group ID representing community members
host_gid INT NOT NULL, # group ID representing community hosts
host_uid INT NOT NULL, # UID of host
aclid INT NOT NULL, # community ACL ID
catid INT NOT NULL DEFAULT 0, # community category ID (xref to "refcategory" table)
hide_dir TINYINT NOT NULL DEFAULT 0, # do we want to hide community from directory?
hide_search TINYINT NOT NULL DEFAULT 0, # do we want to hide community from searches?
name VARCHAR(128) NOT NULL, # community name
alias VARCHAR(32) NOT NULL, # community alias
createdate DATETIME NOT NULL, # creation date/time
lastaccess DATETIME, # last access date/time
lastupdate DATETIME, # last update date/time
INDEX by_name (name),
UNIQUE INDEX by_alias (alias),
INDEX by_catdate (catid, createdate),
INDEX by_create (createdate),
INDEX by_catname (catid, name)
);
# Community access table, which dictates if a community is public or private and the way people
# have to authenticate to join it.
CREATE TABLE commaccess (
cid INT NOT NULL, # the community ID
ugid INT NOT NULL, # user or group ID
is_group TINYINT NOT NULL, # 1 if this is a group, 0 if a user
single_use TINYINT NOT NULL DEFAULT 0, # if 1, this will be removed after a join
auth_nsid INT NULL, # authenticator namespace ID (NULL for none)
auth_name VARCHAR(255) BINARY NULL, # authenticator name (NULL for none)
source_data VARCHAR(255), # authenticator source data
auth_data VARCHAR(255), # authentication data
PRIMARY KEY (cid, is_group, ugid)
);
# The community properties table.
CREATE TABLE commprops (
cid INT NOT NULL, # community ID
nsid INT NOT NULL, # namespace ID of property
prop_name VARCHAR(255) BINARY NOT NULL, # name of property
prop_value VARCHAR(255), # property value
PRIMARY KEY (cid, nsid, prop_name)
);
##############################################################################
# Set table access rights
##############################################################################
# this is a test only - remove when we go to production
GRANT ALL PRIVILEGES ON venice.*
TO erbo@localhost IDENTIFIED BY 'meesatest'
WITH GRANT OPTION;
GRANT INSERT, DELETE, UPDATE, SELECT, LOCK TABLES ON venice.*
TO veniceuser@localhost IDENTIFIED BY 'XYZZY0099';
##############################################################################
# Initialization data
##############################################################################
# Initial namespaces setup
INSERT INTO namespaces (nsid, namespace) VALUES
(1, 'http://www.silverwrist.com/NS/venice/2002/12/21/frame.look.and.feel' ),
(2, 'http://www.silverwrist.com/NS/venice/2002/12/22/stylesheets' ),
(3, 'http://www.silverwrist.com/NS/dynamo/2002/12/13/user.information' ),
(4, 'http://www.silverwrist.com/NS/dynamo/2002/12/27/group.permissions' ),
(5, 'http://www.silverwrist.com/NS/venice/2002/12/28/mail.properties' ),
(6, 'http://www.silverwrist.com/NS/venice/2002/12/28/content.look.and.feel'),
(7, 'http://www.silverwrist.com/NS/venice/2002/12/30/session.control' ),
(8, 'http://www.silverwrist.com/NS/venice/2002/12/31/system.events' ),
(9, 'http://www.silverwrist.com/NS/venice/2002/12/31/user.events' ),
(10, 'http://www.silverwrist.com/NS/venice/2002/12/31/user.settings' ),
(11, 'http://www.silverwrist.com/NS/venice/2002/12/31/user.profile' ),
(12, 'http://www.silverwrist.com/NS/venice/2003/01/03/system.mail.messages' ),
(13, 'http://www.silverwrist.com/NS/venice/2003/05/24/system.permissions' ),
(14, 'http://www.silverwrist.com/NS/venice/2003/05/28/community.permissions'),
(15, 'http://www.silverwrist.com/NS/venice/2003/05/29/community.profile' );
# Initial global properties setup
INSERT INTO globalprop (nsid, prop_name, prop_value) VALUES
(1, 'site.title', '!Venice Test' ),
(1, 'optionset', '_OS:AC' ),
(1, 'site.url', '!http://localhost:8080/venice/' ),
(1, 'site.logo.url', '!temp/site-logo.jpg' ),
(1, 'site.logo.url.type', '!IMAGE' ),
(1, 'site.logo.width', 'I140' ),
(1, 'site.logo.height', 'I80' ),
(1, 'frame.template', '!frame.vm' ),
(1, 'footer.logo.scale', 'I100' ),
(1, 'page.icon.url', '!venice-icon.png' ),
(1, 'page.icon.url.type', '!IMAGE' ),
(1, 'page.icon.type', '!image/png' ),
(1, 'page.favicon.url', '!venice-favicon.ico' ),
(1, 'page.favicon.url.type', '!IMAGE' ),
(1, 'frontpage.title', '!My Front Page' ),
(1, 'left.bar.width', 'I120' ),
(2, 'sheet.base.normal', '!stylesheets/normal_base.vm' ),
(2, 'sheet.adv.normal', '!stylesheets/adv_base.vm' ),
(5, 'smtp.host', '!localhost' ),
(5, 'system.mail.from.addr', '!nobody@delenn.silverwrist.internal' ),
(5, 'system.mail.from.name', '!Venice Mail System' ),
(5, 'mailer.name', '!Venice AutoMail System' ),
(5, 'user.info.header', '!X-Venice-User-Info' ),
(6, 'subdir.buttons', '!buttons/classic' ),
(6, 'std.button.width', 'I80' ),
(6, 'std.button.height', 'I24' ),
(6, 'bn.0transparent', '!transparent.gif' ),
(6, 'bnc.0transparent', '!' ),
(6, 'bn.cancel', '!cancel.jpg' ),
(6, 'bnc.cancel', '!Cancel' ),
(6, 'bn.configure', '!configure.jpg' ),
(6, 'bnc.configure', '!Configure' ),
(6, 'bn.create', '!create.jpg' ),
(6, 'bnc.create', '!Create' ),
(6, 'bn.i.accept', '!user_accept.jpg' ),
(6, 'bnc.i.accept', '!I Accept' ),
(6, 'bn.i.decline', '!user_decline.jpg' ),
(6, 'bnc.i.decline', '!I Decline' ),
(6, 'bn.login', '!login.jpg' ),
(6, 'bnc.login', '!Log In' ),
(6, 'bn.next', '!arrow_next.jpg' ),
(6, 'bnc.next', '!Next' ),
(6, 'bn.ok', '!ok.jpg' ),
(6, 'bnc.ok', '!OK' ),
(6, 'bn.previous', '!arrow_previous.jpg' ),
(6, 'bnc.previous', '!Previous' ),
(6, 'bn.reminder', '!reminder.jpg' ),
(6, 'bnc.reminder', '!Reminder' ),
(6, 'bn.search', '!search.jpg' ),
(6, 'bnc.search', '!Search' ),
(6, 'bn.send.again', '!send_again.jpg' ),
(6, 'bnc.send.again', '!Send Again' ),
(6, 'bn.send.email', '!send_email.jpg' ),
(6, 'bnc.send.email', '!Send E-Mail' ),
(6, 'bn.set', '!set.jpg' ),
(6, 'bnc.set', '!Set' ),
(6, 'bn.update', '!update.jpg' ),
(6, 'bnc.update', '!Update' ),
(6, 'user.agreement.title', '!Venice User Agreement' ),
(6, 'user.photo.width', 'I100' ),
(6, 'user.photo.height', 'I100' ),
(6, 'user.nophoto.url', '!photo_not_avail.gif' ),
(6, 'user.nophoto.url.type', '!IMAGE' ),
(7, 'session.init.script', '!/util/session_init.js' ),
(7, 'login.cookie', '!VeniceAuth' ),
(7, 'login.cookie.maxage', 'I365' ),
(7, 'password.recovery.time', 'I60' ),
(10, 'timezone', '_TZ:UTC' ),
(10, 'locale', '_LOC:en_US' ),
(10, 'admin.flags', '_OS:' ),
(10, 'search.result.count', 'I20' ),
(11, 'privacy', '_OS:' ),
(12, 'confirm.message.title', '!Venice E-Mail Confirmation' ),
(12, 'password.change.message.title', '!Venice Password Changed' ),
(12, 'reminder.message.title', '!Venice Password Reminder Message' ),
(15, 'rules', '!Please treat one another with courtesy and respect.'),
(15, 'language', '_LANG:en-US' ),
(15, 'country', '_CTRY:US' );
# Initial global blocks setup
INSERT INTO globalblock (nsid, block_name, block) VALUES
(1, 'footer',
'All trademarks and copyrights on this page are owned by their respective companies.
All messages posted by users on this page are owned by those users.
The rest: Copyright © 2002-2003 Silverwrist Design Studios, All Rights Reserved.
See our Policy Page for our copyright and privacy policies.'),
(5, 'user.disclaimer',
'Message sent via Venice Web Communities System -
The Venice Project is not responsible for the contents of this message
Report abuses to: '),
(5, 'signature',
'Venice - community services, conferencing and more. '),
(6, 'content.header',
'$title
#if( $subtitle )
$subtitle
#end
'),
(6, 'std.bullet',
''),
(6, 'error.box',
'
#encodeHTML( $title )
|
#encodeHTML( $message )
#if( $back )
Go back.
#else
Use your browser''s Back button to go back.
#end
|
#if( $except )
#end'),
(6, 'user.agreement',
'Text of this agreement is to be determined.'),
(12, 'confirm.message',
'Welcome to the Venice Web Communities System! In order to fully activate your
account after you register or change your E-mail address, you must provide a
confirmation number to the system. Please enter this number into the "Confirm
E-mail Address" dialog on the system when indicated.
Your confirmation number for your account "$username" is $confnum.
Access the E-mail verification dialog at .
Thank you, and enjoy the Venice Web Communities System!
-- The Management'),
(12, 'password.change.message',
'The password for your account "$username" has been changed. The new
password is "$password".
You should log into Venice immediately and change the password to something
else. You can change the password for your account, once you are logged in,
by clicking on the "Profile" link in the top bar.
If you did NOT request a password change on your account, please notify the
system administrator IMMEDIATELY.
-- The Management'),
(12, 'reminder.message',
'Here is the password reminder for your account "$username" as you requested:
$reminder
If this reminder is not sufficient for you to remember what your password is,
then the system can change your password for you. To do so, please visit
the following URL:
http://localhost/venice/passrecovery/$uid/$auth
Your password will be changed and a new password will be E-mailed to you
at this address.
If you did NOT request a password reminder, then this message was sent
by someone attempting to access your account without your knowledge. Do
not panic! Nothing has happened to your account or password yet, but
please do notify the system administrator.
-- The Management');
# Initial users setup
# (UID 1 and 2)
INSERT INTO users (uid, username, email, is_anon, nospam, created) VALUES
(1, 'Anonymous_Honyak', 'nobody@localhost', 1, 1, '2002-12-15 12:00:00'),
(2, 'Administrator', 'root@localhost', 0, 0, '2002-12-26 18:00:00');
# Set up properties for Anonymous_Honyak.
INSERT INTO userprop (uid, nsid, prop_name, prop_value) VALUES
(1, 10, 'timezone', '_TZ:UTC' ),
(1, 10, 'locale', '_LOC:en_US'),
(1, 10, 'admin.flags', '_OS:A' ),
(1, 10, 'search.result.count', 'I20' ),
(1, 11, 'privacy', '_OS:' ),
(1, 11, 'name.given', '!Anonymous'),
(1, 11, 'name.family', '!Honyak' ),
(1, 11, 'locality', '!Nowhere' ),
(1, 11, 'region', '!XX' ),
(1, 11, 'postal.code', '!00000' ),
(1, 11, 'country', '_CTRY:US' );
# Add authentication for Administrator (no password by default)
INSERT INTO userauth (uid, nsid, method, source_data, auth_data) VALUES
(2, 3, 'default.hash.password', '', '');
# Set up properties for Administrator.
INSERT INTO userprop (uid, nsid, prop_name, prop_value) VALUES
(2, 10, 'timezone', '_TZ:UTC' ),
(2, 10, 'locale', '_LOC:en_US' ),
(2, 10, 'admin.flags', '_OS:' ),
(2, 10, 'search.result.count', 'I20' ),
(2, 11, 'privacy', '_OS:' ),
(2, 11, 'name.given', '!System' ),
(2, 11, 'name.family', '!Administrator'),
(2, 11, 'locality', '!Nowhere' ),
(2, 11, 'region', '!XX' ),
(2, 11, 'postal.code', '!00000' ),
(2, 11, 'country', '_CTRY:US' );
# Create a group for site administrators.
# (GID 1)
INSERT INTO groups (gid, groupname) VALUES (1, 'Site_Administration');
INSERT INTO groupmembers (gid, uid) VALUES (1, 2);
# Create an ACL for the site administrator group. The ACL is owned by Administrator
# and grants "add" and "remove" permissions to Administrator only.
# (ACL 1, ACE 1)
INSERT INTO acl (aclid, aclname) VALUES (1, 'Site_Administration');
INSERT INTO aclowner (aclid, ownerid, flags) VALUES (1, 2, 0);
INSERT INTO ace (aceid, pri, flags) VALUES (1, 2, 0);
INSERT INTO acldata (aclid, seq, aceid) VALUES (1, 0, 1);
INSERT INTO acedata (aceid, perm_nsid, perm_name) VALUES
(1, 4, 'add.member' ),
(1, 4, 'remove.member');
UPDATE groups SET gaclid = 1 WHERE gid = 1;
# Create the "all users" group.
# (GID 2)
INSERT INTO groups (gid, groupname) VALUES (2, 'All_Users');
INSERT INTO groupmembers (gid, uid) VALUES (2, 2);
# Create the "all verified users" group.
# (GID 3)
INSERT INTO groups (gid, groupname) VALUES (3, 'Verified_Users');
INSERT INTO groupmembers (gid, uid) VALUES (3, 2);
# Create the global ACL. This ACL is owned by the Administrator and grants
# permissions to the site administration group and to the Administrator specifically.
# (ACL 2, ACEs 2 and 3)
INSERT INTO acl (aclid, aclname) VALUES (2, 'Global_Permissions');
INSERT INTO aclowner (aclid, ownerid, flags) VALUES (2, 2, 0);
INSERT INTO ace (aceid, pri, flags) VALUES (2, 1, 1);
INSERT INTO acldata (aclid, seq, aceid) VALUES (2, 0, 2);
INSERT INTO acedata (aceid, perm_nsid, perm_name) VALUES
(2, 1, 'set.property' ),
(2, 1, 'set.block' ),
(2, 2, 'set.property' ),
(2, 3, 'edit.all' ),
(2, 3, 'bypass.email.verify' ),
(2, 3, 'view.all' ),
(2, 5, 'set.property' ),
(2, 5, 'set.block' ),
(2, 6, 'set.property' ),
(2, 6, 'set.block' ),
(2, 7, 'set.property' ),
(2, 10, 'set.property' ),
(2, 10, 'remove.property' ),
(2, 11, 'set.property' ),
(2, 11, 'remove.property' ),
(2, 12, 'set.property' ),
(2, 12, 'set.block' ),
(2, 13, 'show.admin.menu' ),
(2, 14, 'see.member.community.lists'),
(2, 14, 'community.directory.all' ),
(2, 14, 'community.search.all' );
INSERT INTO ace (aceid, pri, flags) VALUES (3, 2, 0);
INSERT INTO acldata (aclid, seq, aceid) VALUES (2, 1, 3);
INSERT INTO acedata (aceid, perm_nsid, perm_name) VALUES
(3, 1, 'remove.property'),
(3, 1, 'remove.block' ),
(3, 2, 'remove.property'),
(3, 5, 'remove.property'),
(3, 5, 'remove.block' ),
(3, 6, 'remove.property'),
(3, 6, 'remove.block' ),
(3, 7, 'remove.property'),
(3, 12, 'remove.property'),
(3, 12, 'remove.block' );
# Create the entries in the global security table.
INSERT INTO globalsec (admin_uid, admin_gid, global_aclid, alluser_gid, verified_gid)
VALUES (2, 1, 2, 2, 3);
# Insert some audit event type records.
INSERT INTO auditevent (eventid, event_nsid, event_name, descr) VALUES
(1, 8, 'system.startup', 'Venice Server Startup' ),
(2, 8, 'system.shutdown', 'Venice Server Shutdown' ),
(3, 9, 'login.ok', 'Successful User Login' ),
(4, 9, 'login.fail', 'Failed User Login' ),
(5, 9, 'verify.ok', 'Successful E-Mail Address Verification'),
(6, 9, 'verify.fail', 'Failed E-Mail Address Verification' ),
(7, 9, 'resend.confirm.email', 'Re-Sent E-Mail Confirmation Message' ),
(8, 9, 'send.confirm.email', 'Sent E-Mail Confirmation Message' ),
(9, 9, 'user.created', 'New User Created' );
# Insert some image types.
INSERT INTO imagetype (typecode, nsid, name) VALUES
(1, 11, 'user.photo');
# Create the "members" group for the initial community.
# (GID 4)
INSERT INTO groups (gid, groupname) VALUES (4, 'Members:piazza');
INSERT INTO groupmembers (gid, uid) VALUES (4, 1), (4, 2);
# Create the "hosts" group for the initial community.
# (GID 5)
INSERT INTO groups (gid, groupname) VALUES (5, 'Hosts:piazza');
INSERT INTO groupmembers (gid, uid) VALUES (5, 2);
# Create the ACL for the initial community members group. Only the community hosts and
# system administrators can add or remove members (without going through the "join" process).
# (ACL 3, ACEs 4 and 5)
INSERT INTO acl (aclid, aclname) VALUES (3, 'Members:piazza');
INSERT INTO aclowner (aclid, ownerid, flags) VALUES (3, 2, 0);
INSERT INTO ace (aceid, pri, flags) VALUES (4, 5, 1);
INSERT INTO acldata (aclid, seq, aceid) VALUES (3, 0, 4);
INSERT INTO acedata (aceid, perm_nsid, perm_name) VALUES
(4, 4, 'add.member' ),
(4, 4, 'remove.member');
INSERT INTO ace (aceid, pri, flags) VALUES (5, 1, 1);
INSERT INTO acldata (aclid, seq, aceid) VALUES (3, 1, 5);
INSERT INTO acedata (aceid, perm_nsid, perm_name) VALUES
(5, 4, 'add.member' ),
(5, 4, 'remove.member');
UPDATE groups SET gaclid = 3 WHERE gid = 4;
# Create the ACL for the initial community hosts group. Only the community "main host"
# and system administrators can add or remove members.
# (ACL 4, ACEs 6 and 7)
INSERT INTO acl (aclid, aclname) VALUES (4, 'Hosts:piazza');
INSERT INTO aclowner (aclid, ownerid, flags) VALUES (4, 2, 0);
INSERT INTO ace (aceid, pri, flags) VALUES (6, 2, 0);
INSERT INTO acldata (aclid, seq, aceid) VALUES (4, 0, 6);
INSERT INTO acedata (aceid, perm_nsid, perm_name) VALUES
(6, 4, 'add.member' ),
(6, 4, 'remove.member');
INSERT INTO ace (aceid, pri, flags) VALUES (7, 1, 1);
INSERT INTO acldata (aclid, seq, aceid) VALUES (4, 1, 7);
INSERT INTO acedata (aceid, perm_nsid, perm_name) VALUES
(7, 4, 'add.member' ),
(7, 4, 'remove.member');
UPDATE groups SET gaclid = 4 WHERE gid = 5;
# Create the ACL for the initial community.
# (ACL 5, ACEs 8, 9)
INSERT INTO acl (aclid, aclname) VALUES (5, 'ACL:piazza');
INSERT INTO aclowner (aclid, ownerid, flags) VALUES (5, 5, 1);
INSERT INTO ace (aceid, pri, flags) VALUES (8, 2, 0);
INSERT INTO acldata (aclid, seq, aceid) VALUES (5, 0, 8);
INSERT INTO acedata (aceid, perm_nsid, perm_name) VALUES
(8, 15, 'remove.property');
INSERT INTO ace (aceid, pri, flags) VALUES (9, 5, 1);
INSERT INTO acldata (aclid, seq, aceid) VALUES (5, 1, 9);
INSERT INTO acedata (aceid, perm_nsid, perm_name) VALUES
(9, 14, 'grant.revoke.access'),
(9, 15, 'set.category' ),
(9, 15, 'set.visibility' ),
(9, 15, 'set.name' ),
(9, 15, 'set.alias' ),
(9, 15, 'set.property' );
#### following this line is initialization of Venice-specific tables ####
# Populate the Category table.
# Source: Mozilla Open Directory Project categorization system ;
# additional categorization from WebbMe categories
INSERT INTO refcategory (catid, parent, symlink, name) VALUES
(0, -1, -1, 'Unclassified'),
(1, -1, -1, 'Arts'),
(16, 1, -1, 'Animation'),
(17, 1, 181, 'Antiques'),
(18, 1, -1, 'Architecture'),
(19, 1, -1, 'Art History'),
(20, 1, -1, 'Body Art'),
(21, 1, -1, 'Celebrities'),
(22, 1, -1, 'Comics'),
(23, 1, -1, 'Crafts'),
(24, 1, -1, 'Dance'),
(25, 1, -1, 'Design'),
(26, 1, -1, 'Education'),
(27, 1, -1, 'Entertainment'),
(28, 1, -1, 'Graphic Design'),
(29, 1, -1, 'Humanities'),
(30, 1, -1, 'Illustration'),
(31, 1, -1, 'Literature'),
(32, 1, -1, 'Movies'),
(33, 1, -1, 'Music'),
(34, 1, -1, 'Myths and Folktales'),
(35, 1, -1, 'Native and Tribal'),
(36, 1, -1, 'Performing Arts'),
(37, 1, -1, 'Photography'),
(38, 1, -1, 'Radio'),
(39, 1, -1, 'Television'),
(40, 1, -1, 'Theatre'),
(41, 1, -1, 'Typography'),
(42, 1, -1, 'Video'),
(43, 1, -1, 'Visual Arts'),
(44, 1, -1, 'Writing'),
(2, -1, -1, 'Business'),
(45, 2, -1, 'Accounting'),
(46, 2, -1, 'Advertising'),
(47, 2, -1, 'Aerospace'),
(48, 2, -1, 'Agriculture and Forestry'),
(49, 2, -1, 'Apparel'),
(50, 2, -1, 'Arts and Entertainment'),
(51, 2, -1, 'Associations'),
(52, 2, -1, 'Aviation'),
(53, 2, -1, 'Business Services'),
(54, 2, 245, 'Classifieds'),
(55, 2, -1, 'Computers'),
(56, 2, -1, 'Consulting'),
(57, 2, -1, 'Construction and Maintenance'),
(58, 2, -1, 'Electronics'),
(59, 2, -1, 'Employment'),
(60, 2, -1, 'Energy and Utilities'),
(61, 2, -1, 'Environmental and Safety'),
(62, 2, -1, 'Financial Services'),
(63, 2, -1, 'Food and Related Products'),
(64, 2, -1, 'Insurance'),
(65, 2, -1, 'Internet Services'),
(66, 2, -1, 'Investing'),
(67, 2, 290, 'Law'),
(68, 2, -1, 'Management'),
(69, 2, -1, 'Manufacturing'),
(70, 2, -1, 'Marketing'),
(71, 2, -1, 'Mining and Drilling'),
(72, 2, -1, 'Printing'),
(73, 2, -1, 'Publishing'),
(74, 2, -1, 'Real Estate'),
(75, 2, -1, 'Retail'),
(76, 2, -1, 'Security'),
(77, 2, -1, 'Small Business'),
(78, 2, -1, 'Taxes'),
(79, 2, -1, 'Training and Schools'),
(80, 2, -1, 'Telecommunications'),
(81, 2, -1, 'Transportation'),
(82, 2, -1, 'Venture Capital'),
(3, -1, -1, 'Computers'),
(83, 3, -1, 'CAD'),
(84, 3, -1, 'Computer Science'),
(85, 3, -1, 'Consultants'),
(86, 3, -1, 'Data Communications'),
(87, 3, -1, 'Desktop Publishing'),
(88, 3, -1, 'Education'),
(89, 3, -1, 'Ethics'),
(90, 3, -1, 'Fonts'),
(91, 3, 124, 'Games'),
(92, 3, -1, 'Graphics'),
(93, 3, -1, 'Hacking'),
(94, 3, -1, 'Hardware'),
(95, 3, -1, 'History'),
(96, 3, -1, 'Internet'),
(97, 3, -1, 'Multimedia'),
(98, 3, -1, 'Open Source'),
(99, 3, -1, 'Operating Systems'),
(100, 3, -1, 'Programming'),
(101, 3, -1, 'Robotics'),
(102, 3, -1, 'Security'),
(103, 3, -1, 'Shopping'),
(104, 3, -1, 'Software'),
(105, 3, -1, 'Systems'),
(4, -1, -1, 'Games'),
(106, 4, -1, 'Board Games'),
(107, 4, -1, 'Card Games'),
(108, 4, -1, 'Coin-op Games'),
(109, 4, 123, 'Collectible Card Games'),
(110, 4, -1, 'Dice Games'),
(111, 4, 319, 'Fantasy Sports'),
(112, 4, -1, 'Gambling'),
(113, 4, -1, 'Game Creation Systems'),
(114, 4, -1, 'Game Design'),
(115, 4, -1, 'Hand Games'),
(116, 4, -1, 'Internet Games'),
(117, 4, -1, 'Party Games'),
(118, 4, -1, 'Puzzles'),
(119, 4, 270, 'Retailers'),
(120, 4, -1, 'Roleplaying Games'),
(121, 4, 14, 'Sports'),
(122, 4, -1, 'Tile Games'),
(123, 4, -1, 'Trading Cards'),
(124, 4, -1, 'Video Games'),
(125, 4, -1, 'Yard and Deck Games'),
(5, -1, -1, 'Health'),
(126, 5, -1, 'Aging'),
(127, 5, -1, 'Alternative Medicine'),
(128, 5, -1, 'Beauty'),
(129, 5, -1, 'Children''s Health'),
(130, 5, -1, 'Conditions and Diseases'),
(131, 5, -1, 'Dentistry'),
(132, 5, 280, 'Disabilities'),
(133, 5, -1, 'Education'),
(134, 5, -1, 'Fitness'),
(135, 5, 64, 'Health Insurance'),
(136, 5, -1, 'Medicine'),
(137, 5, -1, 'Men''s Health'),
(138, 5, -1, 'Mental Health'),
(139, 5, -1, 'Nursing'),
(140, 5, -1, 'Nutrition'),
(141, 5, -1, 'Occupational Health and Safety'),
(142, 5, -1, 'Pharmacy'),
(143, 5, -1, 'Public Health and Safety'),
(144, 5, -1, 'Reproductive Health'),
(145, 5, -1, 'Seniors'' Health'),
(146, 5, -1, 'Services'),
(147, 5, -1, 'Substance Abuse'),
(148, 5, -1, 'Teen Health'),
(149, 5, -1, 'Women''s Health'),
(6, -1, -1, 'Home'),
(150, 6, -1, 'Apartment Living'),
(151, 6, -1, 'Cooking'),
(152, 6, -1, 'Do-It-Yourself'),
(153, 6, -1, 'Emergency Preparation'),
(154, 6, -1, 'Entertaining'),
(155, 6, -1, 'Family'),
(156, 6, -1, 'Gardens'),
(157, 6, -1, 'Home Improvement'),
(158, 6, -1, 'Homemaking'),
(363, 6, -1, 'Homeowners'),
(159, 6, -1, 'Kids'),
(160, 6, -1, 'Moving and Relocating'),
(161, 6, -1, 'Nursery'),
(162, 6, 207, 'Pets'),
(163, 6, -1, 'Personal Finance'),
(164, 6, -1, 'Personal Organization'),
(165, 6, -1, 'Relatives'),
(166, 6, -1, 'Rural Living'),
(167, 6, 12, 'Shopping'),
(168, 6, -1, 'Urban Living'),
(7, -1, -1, 'News'),
(169, 7, -1, 'Alternative Media'),
(170, 7, -1, 'Columnists'),
(171, 7, -1, 'Current Events'),
(172, 7, -1, 'Magazines'),
(173, 7, -1, 'Media'),
(174, 7, -1, 'Newspapers'),
(175, 7, -1, 'Online'),
(176, 7, -1, 'Politics'),
(177, 7, -1, 'Satire'),
(178, 7, -1, 'Weather'),
(8, -1, -1, 'Recreation'),
(179, 8, -1, 'Air Hockey'),
(180, 8, -1, 'Amateur Radio'),
(181, 8, -1, 'Antiques'),
(182, 8, -1, 'Audio'),
(183, 8, -1, 'Aviation'),
(184, 8, -1, 'Birdwatching'),
(185, 8, -1, 'Boating'),
(186, 8, 310, 'Bowling'),
(187, 8, -1, 'Climbing'),
(188, 8, -1, 'Collecting'),
(189, 8, 23, 'Crafts'),
(190, 8, -1, 'Drugs'),
(191, 8, -1, 'Food and Drink'),
(192, 8, 4, 'Games'),
(193, 8, 156, 'Gardens'),
(194, 8, 285, 'Genealogy'),
(195, 8, -1, 'Guns'),
(196, 8, -1, 'Hot Air Ballooning'),
(197, 8, -1, 'Humor'),
(198, 8, -1, 'Kites'),
(199, 8, -1, 'Knives'),
(200, 8, -1, 'Living History'),
(201, 8, 332, 'Martial Arts'),
(202, 8, -1, 'Models'),
(203, 8, -1, 'Motorcycles'),
(204, 8, -1, 'Nudism'),
(205, 8, -1, 'Outdoors'),
(206, 8, -1, 'Parties'),
(207, 8, -1, 'Pets'),
(208, 8, -1, 'Roads and Highways'),
(209, 8, -1, 'Scouting'),
(210, 8, -1, 'Smoking'),
(211, 8, 14, 'Sports'),
(212, 8, -1, 'Theme Parks'),
(213, 8, -1, 'Trains and Railroads'),
(214, 8, -1, 'Travel'),
(9, -1, -1, 'Reference and Education'),
(215, 9, -1, 'Alumni'),
(216, 9, -1, 'Colleges and Universities'),
(217, 9, -1, 'Continuing Education'),
(218, 9, 79, 'Corporate Training'),
(219, 9, -1, 'Distance Learning'),
(220, 9, -1, 'International'),
(221, 9, -1, 'K through 12'),
(222, 9, -1, 'Libraries'),
(223, 9, -1, 'Museums'),
(224, 9, -1, 'Special Education'),
(225, 9, -1, 'Vocational Education'),
(10, -1, -1, 'Regional'),
(226, 10, -1, 'International'),
(227, 10, -1, 'US'),
(11, -1, -1, 'Science'),
(228, 11, -1, 'Agriculture'),
(229, 11, -1, 'Alternative Science'),
(230, 11, -1, 'Astronomy'),
(231, 11, -1, 'Biology'),
(232, 11, -1, 'Chemistry'),
(233, 11, -1, 'Earth Sciences'),
(234, 11, -1, 'Environment'),
(235, 11, -1, 'Mathematics'),
(236, 11, -1, 'Physics'),
(237, 11, -1, 'Science in Society'),
(238, 11, -1, 'Social Sciences'),
(239, 11, -1, 'Space'),
(240, 11, -1, 'Technology'),
(12, -1, -1, 'Shopping'),
(241, 12, -1, 'Antiques and Collectibles'),
(242, 12, -1, 'Auctions'),
(243, 12, -1, 'Books'),
(244, 12, -1, 'Children'),
(245, 12, -1, 'Classifieds'),
(246, 12, -1, 'Clothing'),
(247, 12, 103, 'Computers'),
(248, 12, -1, 'Consumer Electronics'),
(249, 12, -1, 'Crafts'),
(250, 12, -1, 'Entertainment'),
(251, 12, -1, 'Ethnic and Regional'),
(252, 12, -1, 'Flowers'),
(253, 12, -1, 'Food and Drink'),
(254, 12, -1, 'Furniture'),
(255, 12, -1, 'Gifts'),
(256, 12, -1, 'Health and Beauty'),
(257, 12, -1, 'Holidays'),
(258, 12, -1, 'Home and Garden'),
(259, 12, -1, 'Jewelry'),
(260, 12, -1, 'Music and Video'),
(261, 12, -1, 'Niche'),
(262, 12, -1, 'Office Products'),
(263, 12, -1, 'Pets'),
(264, 12, -1, 'Photography'),
(265, 12, -1, 'Recreation and Hobbies'),
(266, 12, -1, 'Religious'),
(267, 12, -1, 'Sports'),
(268, 12, -1, 'Tobacco'),
(269, 12, -1, 'Tools'),
(270, 12, -1, 'Toys and Games'),
(271, 12, -1, 'Travel'),
(272, 12, -1, 'Vehicles'),
(273, 12, -1, 'Visual Arts'),
(274, 12, -1, 'Weddings'),
(275, 12, -1, 'Wholesale'),
(13, -1, -1, 'Society'),
(276, 13, -1, 'Activism'),
(277, 13, -1, 'Advice'),
(278, 13, -1, 'Crime'),
(279, 13, -1, 'Death'),
(280, 13, -1, 'Disabled'),
(281, 13, -1, 'Ethnicity'),
(282, 13, -1, 'Folklore'),
(283, 13, -1, 'Future'),
(284, 13, -1, 'Gay/Lesbian/Bisexual'),
(285, 13, -1, 'Genealogy'),
(286, 13, -1, 'Government'),
(287, 13, -1, 'History'),
(288, 13, -1, 'Holidays'),
(289, 13, -1, 'Issues'),
(290, 13, -1, 'Law'),
(291, 13, -1, 'Lifestyle Choices'),
(292, 13, -1, 'Military'),
(293, 13, -1, 'Paranormal'),
(294, 13, -1, 'People'),
(295, 13, -1, 'Philosophy'),
(296, 13, -1, 'Politics'),
(297, 13, -1, 'Recovery and Support Groups'),
(298, 13, -1, 'Relationships'),
(299, 13, -1, 'Religion and Spirituality'),
(300, 13, -1, 'Sexuality'),
(301, 13, -1, 'Subcultures'),
(302, 13, -1, 'Transgendered'),
(303, 13, -1, 'Work'),
(14, -1, -1, 'Sports'),
(304, 14, -1, 'Archery'),
(305, 14, -1, 'Badminton'),
(306, 14, -1, 'Baseball'),
(307, 14, -1, 'Basketball'),
(308, 14, -1, 'Billiards'),
(309, 14, -1, 'Boomerang'),
(310, 14, -1, 'Bowling'),
(311, 14, -1, 'Boxing'),
(312, 14, -1, 'Cheerleading'),
(313, 14, -1, 'Cricket'),
(314, 14, -1, 'Croquet'),
(315, 14, -1, 'Cycling'),
(316, 14, -1, 'Darts'),
(317, 14, -1, 'Equestrian'),
(318, 14, -1, 'Extreme Sports'),
(319, 14, -1, 'Fantasy'),
(320, 14, -1, 'Fencing'),
(321, 14, -1, 'Fishing'),
(322, 14, -1, 'Flying Discs'),
(323, 14, -1, 'Football'),
(324, 14, -1, 'Golf'),
(325, 14, -1, 'Greyhound Racing'),
(326, 14, -1, 'Gymnastics'),
(327, 14, -1, 'Handball'),
(328, 14, -1, 'Hockey'),
(329, 14, -1, 'Lacrosse'),
(330, 14, -1, 'Laser Games'),
(331, 14, -1, 'Lumberjack'),
(332, 14, -1, 'Martial Arts'),
(333, 14, -1, 'Motor Sports'),
(334, 14, -1, 'Orienteering'),
(335, 14, -1, 'Paintball'),
(336, 14, -1, 'Racquetball'),
(337, 14, -1, 'Rodeo'),
(338, 14, -1, 'Roller Derby'),
(339, 14, -1, 'Rope Skipping'),
(340, 14, -1, 'Rugby'),
(341, 14, -1, 'Running'),
(342, 14, -1, 'Sailing'),
(343, 14, -1, 'Shooting'),
(344, 14, 267, 'Shopping'),
(345, 14, -1, 'Skateboarding'),
(346, 14, -1, 'Skating'),
(347, 14, -1, 'Skiing'),
(348, 14, -1, 'Sledding'),
(349, 14, -1, 'Sled Dog Racing'),
(350, 14, -1, 'Snowboarding'),
(351, 14, -1, 'Soccer'),
(352, 14, -1, 'Softball'),
(353, 14, -1, 'Squash'),
(354, 14, -1, 'Strength Sports'),
(355, 14, -1, 'Table Tennis'),
(356, 14, -1, 'Tennis'),
(357, 14, -1, 'Track and Field'),
(358, 14, -1, 'Volleyball'),
(359, 14, -1, 'Walking'),
(360, 14, -1, 'Water Sports'),
(361, 14, -1, 'Winter Sports'),
(362, 14, -1, 'Wrestling'),
(15, -1, -1, '***DEPRECATED***');
### -- LAST IS 363 -- ###
UPDATE refcategory SET dontuse = 1 WHERE catid = 15;
# Create the initial community entry.
# (CID 1)
INSERT INTO communities (cid, member_gid, host_gid, host_uid, aclid, name, alias, createdate)
VALUES (1, 4, 5, 2, 5, 'La Piazza', 'piazza', '05-27-2003 09:00:00');
# Create the properties for the initial community.
INSERT INTO commprops (cid, nsid, prop_name, prop_value) VALUES
(1, 15, 'synopsis', '!A gathering place for Venice users.' ),
(1, 15, 'rules', '!Please treat one another with courtesy and respect.'),
(1, 15, 'language', '_LANG:en-US' ),
(1, 15, 'locality', '!Anywhere' ),
(1, 15, 'region', '!XX' ),
(1, 15, 'postal.code', '!00000' ),
(1, 15, 'country', '_CTRY:US' ),
(1, 15, 'url.homepage', '!http://venice.sourceforge.net' );
# Create the "global" menu. (ID #1)
INSERT INTO menus (menuid, menu_nsid, menu_name, title, subtitle)
VALUES (1, 1, 'fixed.menu', 'About This Site', NULL);
INSERT INTO menuitems (menuid, sequence, itemtype, text, linktype, link) VALUES
(1, 0, 'TEXT', 'Documentation', 'ABSOLUTE', 'TODO' ),
(1, 1, 'TEXT', 'About Venice', 'FRAME', 'about-venice.html' ),
(1, 2, 'TEXT', 'System Administration', 'SERVLET', 'sysadmin/main.js.vs');
UPDATE menuitems SET enable = 0 WHERE menuid = 1 AND sequence = 0;
UPDATE menuitems SET perm_nsid = 13, perm_name = 'show.admin.menu' WHERE menuid = 1 AND sequence = 2;
# Create the user profile menu. (ID #2)
INSERT INTO menus (menuid, menu_nsid, menu_name, title, subtitle)
VALUES (2, 11, 'user.profile.menu', '', NULL);
INSERT INTO menuvars (menuid, var_name, default_val)
VALUES (2, 'target', 'top.js.vs');
INSERT INTO menuitems (menuid, sequence, itemtype, text, linktype, link) VALUES
(2, 0, 'TEXT', 'Profile', 'SERVLET', 'profile.js.vs?tgt=${target}');
# Create the main system administration menu. (ID #3)
INSERT INTO menus (menuid, menu_nsid, menu_name, title, subtitle)
VALUES (3, 13, 'system.admin', 'System Administration', NULL);
INSERT INTO menuitems (menuid, sequence, itemtype, text, linktype, link, perm_nsid, perm_name) VALUES
(3, 0, 'TEXT', 'Set Frame Look-And-Feel Parameters', 'SERVLET', 'sysadmin/frame_laf.js.vs', 1,
'set.property'),
(3, 1, 'TEXT', 'Set E-Mail Parameters', 'SERVLET', 'sysadmin/email.js.vs', 5,
'set.property'),
(3, 2, 'TEXT', 'Set Session Parameters', 'SERVLET', 'sysadmin/session.js.vs', 7,
'set.property'),
(3, 3, 'TEXT', 'Edit Confirmation E-Mail Message', 'SERVLET', 'sysadmin/confirm_email.js.vs', 12,
'set.property'),
(3, 4, 'TEXT', 'Edit Password Changed E-Mail Message', 'SERVLET', 'sysadmin/pwchange_email.js.vs', 12,
'set.property'),
(3, 5, 'TEXT', 'Edit Password Reminder E-Mail Message', 'SERVLET', 'sysadmin/pwremind_email.js.vs', 12,
'set.property');
# Create the find submenu. (ID #4)
INSERT INTO menus (menuid, menu_nsid, menu_name, title, subtitle)
VALUES (4, 6, 'find.menu', 'Find', NULL);
INSERT INTO menuitems (menuid, sequence, itemtype, text, linktype, link) VALUES
(4, 0, 'TEXT', 'Users', 'SERVLET', 'find_users.js.vs' ),
(4, 1, 'TEXT', 'Categories', 'SERVLET', 'find_categories.js.vs');