Index: openacs-4/packages/acs-tcl/tcl/object-type-procs-oracle.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/tcl/object-type-procs-oracle.xql,v
diff -u -N -r1.1 -r1.2
--- openacs-4/packages/acs-tcl/tcl/object-type-procs-oracle.xql 13 May 2001 05:24:27 -0000 1.1
+++ openacs-4/packages/acs-tcl/tcl/object-type-procs-oracle.xql 3 Apr 2005 09:33:55 -0000 1.2
@@ -28,4 +28,14 @@
+
+
+ select object_type
+ from acs_object_types
+ start with object_type = :subtype
+ connect by prior supertype = object_type
+ order by level desc
+
+
+
Index: openacs-4/packages/acs-tcl/tcl/object-type-procs-postgresql.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/tcl/object-type-procs-postgresql.xql,v
diff -u -N -r1.5 -r1.6
--- openacs-4/packages/acs-tcl/tcl/object-type-procs-postgresql.xql 4 Dec 2001 00:20:47 -0000 1.5
+++ openacs-4/packages/acs-tcl/tcl/object-type-procs-postgresql.xql 3 Apr 2005 09:33:55 -0000 1.6
@@ -31,4 +31,17 @@
+
+
+ select o2.object_type
+ from acs_object_types o1,
+ acs_object_types o2
+ where o1.object_type = :subtype
+ and o2.tree_sortkey <= o1.tree_sortkey
+ and o1.tree_sortkey between o2.tree_sortkey
+ and tree_right(o2.tree_sortkey)
+ order by tree_level(o2.tree_sortkey) desc
+
+
+
Index: openacs-4/packages/acs-tcl/tcl/object-type-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/tcl/object-type-procs.tcl,v
diff -u -N -r1.4 -r1.5
--- openacs-4/packages/acs-tcl/tcl/object-type-procs.tcl 10 Nov 2003 12:35:13 -0000 1.4
+++ openacs-4/packages/acs-tcl/tcl/object-type-procs.tcl 3 Apr 2005 09:33:55 -0000 1.5
@@ -94,3 +94,41 @@
where object_type = :object_type
} -column_array row
}
+
+ad_proc -private acs_object_type::acs_object_instance_of {
+ {-object_id:required}
+ {-type:required}
+} {
+ Returns true if the specified object_id is a subtype of the specified type.
+ This is an inclusive check.
+
+ @author Lee Denison (lee@thaum.net)
+} {
+ acs_object::get -object_id $object_id -array obj
+
+ return [acs_object_type::supertype \
+ -supertype $type \
+ -subtype $obj(object_type)]
+}
+
+ad_proc -private acs_object_type::supertype {
+ {-supertype:required}
+ {-subtype:required}
+ {-no_cache:boolean}
+} {
+ Returns true if subtype is equal to, or a subtype of, supertype.
+
+ @author Lee Denison (lee@thaum.net)
+} {
+ if {$no_cache_p} {
+ set supertypes [db_list supertypes {}]
+
+ return [expr {[lsearch $supertypes $supertype] >= 0}]
+ } else {
+ return [util_memoize [list acs_object_type::supertype \
+ -supertype $supertype \
+ -subtype $subtype \
+ -no_cache]]
+ }
+}
+