Index: openacs-4/packages/acs-kernel/sql/postgresql/acs-objects-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-kernel/sql/postgresql/acs-objects-create.sql,v
diff -u -r1.48 -r1.49
--- openacs-4/packages/acs-kernel/sql/postgresql/acs-objects-create.sql	4 Mar 2004 14:52:41 -0000	1.48
+++ openacs-4/packages/acs-kernel/sql/postgresql/acs-objects-create.sql	12 Mar 2004 18:48:50 -0000	1.49
@@ -150,6 +150,38 @@
 	''f''
 	);
 
+ attr_id := acs_attribute__create_attribute (
+	''acs_object'',
+	''package_id'',
+	''integer'',
+	''Package ID'',
+	''Package IDs'',
+	null,
+	null,
+	null,
+	0,
+	1,
+	null,
+	''type_specific'',
+	''f''
+	);
+
+ attr_id := acs_attribute__create_attribute (
+	''acs_object'',
+	''title'',
+	''string'',
+	''Title'',
+	''Titles'',
+	null,
+	null,
+	null,
+	0,
+	1,
+	null,
+	''type_specific'',
+	''f''
+	);
+
   return 0;
 end;' language 'plpgsql';
 
@@ -178,6 +210,8 @@
 	object_type		varchar(100) not null
 				constraint acs_objects_object_type_fk
 				references acs_object_types (object_type),
+        title			varchar(1000) default null,
+        package_id		integer default null,
         context_id		integer constraint acs_objects_context_id_fk
 				references acs_objects(object_id),
 	security_inherit_p	boolean default 't' not null,
@@ -203,6 +237,9 @@
 create index acs_objects_creation_user_idx on acs_objects (creation_user);
 create index acs_objects_modify_user_idx on acs_objects (modifying_user);
 
+create index acs_objects_package_object_idx on acs_objects (package_id, object_id);
+create index acs_objects_title_idx on acs_objects(title);
+
 create index acs_objects_object_type_idx on acs_objects (object_type);
 
 create function acs_objects_mod_ip_insert_tr () returns opaque as '
@@ -341,6 +378,18 @@
  Who last modified the object
 ';
 
+comment on column acs_objects.package_id is '
+ Which package instance this object belongs to.
+ Please note that in mid-term this column will replace all
+ package_ids of package specific tables.
+';
+
+comment on column acs_objects.title is '
+ Title of the object if applicable.
+ Please note that in mid-term this column will replace all
+ titles or object_names of package specific tables.
+';
+
 -----------------------
 -- CONTEXT HIERARCHY --
 -----------------------
@@ -584,7 +633,7 @@
 
 
 -- function new
-create or replace function acs_object__new (integer,varchar,timestamptz,integer,varchar,integer,boolean)
+create or replace function acs_object__new (integer,varchar,timestamptz,integer,varchar,integer,boolean,varchar,integer)
 returns integer as '
 declare
   new__object_id              alias for $1;  -- default null
@@ -594,8 +643,12 @@
   new__creation_ip            alias for $5;  -- default null
   new__context_id             alias for $6;  -- default null
   new__security_inherit_p     alias for $7;  -- default ''t''
+  new__title                  alias for $8;  -- default null
+  new__package_id             alias for $9;  -- default null
   v_object_id                 acs_objects.object_id%TYPE;
   v_creation_date	      timestamptz;
+  v_title                     acs_objects.title%TYPE;
+  v_object_type_pretty_name   acs_object_types.pretty_name%TYPE;
 begin
   if new__object_id is null then
    select acs_object_id_seq.nextval
@@ -604,17 +657,28 @@
     v_object_id := new__object_id;
   end if;
 
+  if new__object_id is null then
+   select pretty_name
+   into v_object_type_pretty_name
+   from acs_object_types
+   where object_type = new__object_type;
+
+    v_title := v_object_type_pretty_name || '' '' || v_object_id;
+  else
+    v_title := new__title;
+  end if;
+
   if new__creation_date is null then
    v_creation_date:= now();
   else
    v_creation_date := new__creation_date;
   end if;
 
   insert into acs_objects
-   (object_id, object_type, context_id,
+   (object_id, object_type, title, package_id, context_id,
     creation_date, creation_user, creation_ip, security_inherit_p)
   values
-   (v_object_id, new__object_type, new__context_id,
+   (v_object_id, new__object_type, v_title, new__package_id, new__context_id,
     v_creation_date, new__creation_user, new__creation_ip, 
     new__security_inherit_p);
 
@@ -637,30 +701,75 @@
   v_object_id                 acs_objects.object_id%TYPE;
   v_creation_date	      timestamptz;
 begin
-  if new__object_id is null then
-   select acs_object_id_seq.nextval
-   into v_object_id from dual;
-  else
-    v_object_id := new__object_id;
-  end if;
+  return acs_object__new(new__object_id, new__object_type, new__creation_date,
+                         new__creation_user, new__creation_ip, new__context_id,
+                         ''t'', null, null);
+end;' language 'plpgsql';
 
-  if new__creation_date is null then
-   v_creation_date:= now();
-  else
-   v_creation_date := new__creation_date;
-  end if;
+create or replace function acs_object__new (integer,varchar,timestamptz,integer,varchar,integer,boolean)
+returns integer as '
+declare
+  new__object_id              alias for $1;  -- default null
+  new__object_type            alias for $2;  -- default ''acs_object''
+  new__creation_date          alias for $3;  -- default now()
+  new__creation_user          alias for $4;  -- default null
+  new__creation_ip            alias for $5;  -- default null
+  new__context_id             alias for $6;  -- default null
+  new__security_inherit_p     alias for $7;  -- default ''t''
+begin
+  return acs_object__new(new__object_id, new__object_type, new__creation_date,
+                         new__creation_user, new__creation_ip, new__context_id,
+                         new__security_inherit_p, null, null);
+end;' language 'plpgsql';
 
-  insert into acs_objects
-   (object_id, object_type, context_id,
-    creation_date, creation_user, creation_ip)
-  values
-   (v_object_id, new__object_type, new__context_id,
-    v_creation_date, new__creation_user, new__creation_ip);
+create or replace function acs_object__new (integer,varchar,timestamptz,integer,varchar,integer,boolean,varchar)
+returns integer as '
+declare
+  new__object_id              alias for $1;  -- default null
+  new__object_type            alias for $2;  -- default ''acs_object''
+  new__creation_date          alias for $3;  -- default now()
+  new__creation_user          alias for $4;  -- default null
+  new__creation_ip            alias for $5;  -- default null
+  new__context_id             alias for $6;  -- default null
+  new__security_inherit_p     alias for $7;  -- default ''t''
+  new__title                  alias for $8;  -- default null
+begin
+  return acs_object__new(new__object_id, new__object_type, new__creation_date,
+                         new__creation_user, new__creation_ip, new__context_id,
+                         new__security_inherit_p, new__title, null);
+end;' language 'plpgsql';
 
-  PERFORM acs_object__initialize_attributes(v_object_id);
+create or replace function acs_object__new (integer,varchar,timestamptz,integer,varchar,integer,varchar,integer)
+returns integer as '
+declare
+  new__object_id              alias for $1;  -- default null
+  new__object_type            alias for $2;  -- default ''acs_object''
+  new__creation_date          alias for $3;  -- default now()
+  new__creation_user          alias for $4;  -- default null
+  new__creation_ip            alias for $5;  -- default null
+  new__context_id             alias for $6;  -- default null
+  new__title                  alias for $7;  -- default null
+  new__package_id             alias for $8;  -- default null
+begin
+  return acs_object__new(new__object_id, new__object_type, new__creation_date,
+                         new__creation_user, new__creation_ip, new__context_id,
+                         ''t'', new__title, new__package_id);
+end;' language 'plpgsql';
 
-  return v_object_id;
-  
+create or replace function acs_object__new (integer,varchar,timestamptz,integer,varchar,integer,varchar)
+returns integer as '
+declare
+  new__object_id              alias for $1;  -- default null
+  new__object_type            alias for $2;  -- default ''acs_object''
+  new__creation_date          alias for $3;  -- default now()
+  new__creation_user          alias for $4;  -- default null
+  new__creation_ip            alias for $5;  -- default null
+  new__context_id             alias for $6;  -- default null
+  new__title                  alias for $7;  -- default null
+begin
+  return acs_object__new(new__object_id, new__object_type, new__creation_date,
+                         new__creation_user, new__creation_ip, new__context_id,
+                         ''t'', new__title, null);
 end;' language 'plpgsql';
 
 create function acs_object__new (integer,varchar) returns integer as '
@@ -750,6 +859,14 @@
   --                            where o.object_id = name__object_id)
   -- connect by object_type = prior supertype
 
+  select title into object_name
+  from acs_objects
+  where object_id = name__object_id;
+
+  if (object_name is not null) then
+    return object_name;
+  end if;
+
   for obj_type
   in select o2.name_method
         from acs_object_types o1, acs_object_types o2
@@ -799,6 +916,25 @@
 end;' language 'plpgsql' stable strict;
 
 
+-- function package_id
+create or replace function acs_object__package_id (integer)
+returns integer as '
+declare
+  p_object_id  alias for $1;
+  v_package_id acs_objects.package_id%TYPE;
+begin
+  if p_object_id is null then
+    return null;
+  end if;
+
+  select package_id into v_package_id
+  from acs_objects
+  where object_id = p_object_id;
+
+  return v_package_id;
+end;' language 'plpgsql' stable strict;
+
+
 -- procedure get_attribute_storage
 create or replace function acs_object__get_attribute_storage (integer,varchar)
 returns text as '
