object-procs.tcl

Object support for ACS.

Location:
packages/acs-tcl/tcl/object-procs.tcl
Created:
11 Aug 2000
Author:
Jon Salz <jsalz@arsdigita.com>
CVS Identification:
$Id: object-procs.tcl,v 1.16 2024/09/11 06:15:48 gustafn Exp $

Procedures in this file

Detailed information

acs_lookup_magic_object (private, deprecated)

 acs_lookup_magic_object name
Deprecated. Invoking this procedure generates a warning.

Non memoized version of acs_magic_object.

Parameters:
name (required)
Returns:
the magic object's object ID
See Also:

Testcases:
No testcase defined.

acs_lookup_magic_object_no_cache (private)

 acs_lookup_magic_object_no_cache name

Non memoized version of acs_magic_object.

Parameters:
name (required)
Returns:
the magic object's object ID
See Also:

Testcases:
No testcase defined.

acs_magic_object (public)

 acs_magic_object name

Returns the object ID of a magic object.

Parameters:
name (required)
the name of the magic object (as listed in the acs_magic_objects table).
Returns:
the object ID.
Error:
if no object exists with that magic name.

Testcases:
magic_objects

acs_object::get (public)

 acs_object::get -object_id object_id [ -array array ] \
    [ -element element ]

Gets information about an acs_object. If called without "-element", it returns a dict containing object_id, package_id, object_type, context_id, security_inherit_p, creation_user, creation_date_ansi, creation_ip, last_modified_ansi, modifying_user, modifying_ip, tree_sortkey, object_name. If called with "-element" it returns the denoted element (similar to e.g. "party::get").

Switches:
-object_id (required)
for which the information should be retrieved
-array (optional)
An array in the caller's namespace into which the info should be delivered (upvared)
-element (optional)
to be returned
Error:
when object_id does not exist

Testcases:
acs_object_procs_test

acs_object::get_element (public)

 acs_object::get_element -object_id object_id -element element

Gets a specific element from the info returned by acs_object::get.

Switches:
-object_id (required)
the object to get data for
-element (required)
the field to return
Returns:
the value of the specified element
See Also:

Testcases:
acs_object_procs_test, attachments_name_api

acs_object::is_type_p (private)

 acs_object::is_type_p -object_id object_id -object_types object_types \
    [ -no_hierarchy ]

Returns whether an object is of a given object type.

Switches:
-object_id (required)
-object_types (required)
-no_hierarchy (optional, boolean)
Returns:
boolean

Testcases:
is_object_type_p

acs_object::object_p (public)

 acs_object::object_p -id id
Switches:
-id (required)
ID of the potential acs-object
Returns:
true if object whose id is $id exists
Authors:
Jim Lynch <jim@jam.sessionsnet.org>
Malte Sussdorff
Created:
2007-01-26

Testcases:
object_p

acs_object::package_id (public)

 acs_object::package_id -object_id object_id

Gets the package_id of the object

Switches:
-object_id (required)
the object to get the package_id for
Returns:
package_id of the object. Empty string if the package_id is not stored
Author:
Malte Sussdorff <malte.sussdorff@cognovis.de>
Created:
2006-08-10

Testcases:
acs_object__package_id

acs_object::package_id_not_cached (private)

 acs_object::package_id_not_cached -object_id object_id

Gets the package_id of the object

Switches:
-object_id (required)
the object to get the package_id for
Returns:
package_id of the object. Empty string if the package_id is not stored
Author:
Malte Sussdorff <malte.sussdorff@cognovis.de>
Created:
2006-08-10

Testcases:
No testcase defined.

acs_object::set_context_id (public)

 acs_object::set_context_id -object_id object_id -context_id context_id

Sets the context_id of the specified object.

Switches:
-object_id (required)
-context_id (required)

Testcases:
acs_object_procs_test

acs_object_name (public)

 acs_object_name object_id

Returns the name of an object.

Parameters:
object_id (required)

Testcases:
object_name

acs_object_type (public)

 acs_object_type object_id

Returns the type of an object.

Parameters:
object_id (required)

Testcases:
data_links_with_tag, attachments_name_api
[ hide source ] | [ make this the default ]

Content File Source

ad_library {

    Object support for ACS.

    @author Jon Salz (jsalz@arsdigita.com)
    @creation-date 11 Aug 2000
    @cvs-id $Id: object-procs.tcl,v 1.16 2024/09/11 06:15:48 gustafn Exp $

}

namespace eval acs_object {}

ad_proc -private acs_lookup_magic_object_no_cache { name } {
    Non memoized version of acs_magic_object.

    @return the magic object's object ID

    @see acs_magic_object
} {
    return [db_string magic_object_select {} ]
}

ad_proc -private -deprecated acs_lookup_magic_object { name } {
    Non memoized version of acs_magic_object.

    @return the magic object's object ID

    @see acs_magic_object
} {
    return [util_memoize [list acs_lookup_magic_object_no_cache $name]]
}

ad_proc -public acs_magic_object { name } {
    Returns the object ID of a magic object.

    @param name the name of the magic object (as listed in the
        <code>acs_magic_objects</code> table).
    @return the object ID.

    @error if no object exists with that magic name.
} {
    return [acs::per_thread_cache eval -key acs-tcl.acs_magic_object($name) {
        acs_lookup_magic_object_no_cache $name
    }]
}

ad_proc -public acs_object_name { object_id } {

    Returns the name of an object.

} {
    return [db_string object_name_get {
        select acs_object.name(:object_id) from dual
    }]
}

ad_proc -public acs_object_type { object_id } {

    Returns the type of an object.

} {
    return [db_string object_type_select {
        select object_type
        from acs_objects
        where object_id = :object_id
    } -default ""]
}

d_proc -public acs_object::get {
    {-object_id:required}
    {-array}
    {-element}
} {
    Gets information about an acs_object.

    If called without "-element", it returns a dict containing
    object_id, package_id, object_type, context_id,
    security_inherit_p, creation_user, creation_date_ansi,
    creation_ip, last_modified_ansi, modifying_user, modifying_ip,
    tree_sortkey, object_name.

    If called with "-element" it returns the denoted element (similar
    to e.g. "party::get").

    @param array An array in the caller's namespace into which the info should be delivered (upvared)
    @param element to be returned
    @param object_id for which the information should be retrieved
    @error when object_id does not exist
} {
    if {[info exists array]} {
        upvar 1 $array row
    }
    db_1row select_object {
        select o.object_id,
               o.title,
               o.package_id,
               o.object_type,
               o.context_id,
               o.security_inherit_p,
               o.creation_user,
               to_char(o.creation_date, 'YYYY-MM-DD HH24:MI:SS') as creation_date_ansi,
               o.creation_ip,
               to_char(o.last_modified, 'YYYY-MM-DD HH24:MI:SS') as last_modified_ansi,
               o.modifying_user,
               o.modifying_ip,
               acs_object.name(o.object_id) as object_name
        from   acs_objects o
        where  o.object_id = :object_id
    } -column_array row

    if {[info exists element]} {
        return [dict get [array get row] $element]
    } else {
        return [array get row]
    }
}

d_proc -public acs_object::package_id {
    {-object_id:required}
} {
    Gets the package_id of the object

    @author Malte Sussdorff (malte.sussdorff@cognovis.de)
    @creation-date 2006-08-10

    @param object_id the object to get the package_id for

    @return package_id of the object. Empty string if the package_id is not stored
} {
    return [util_memoize [list acs_object::package_id_not_cached -object_id $object_id]]
}

d_proc -private acs_object::package_id_not_cached {
    {-object_id:required}
} {
    Gets the package_id of the object

    @author Malte Sussdorff (malte.sussdorff@cognovis.de)
    @creation-date 2006-08-10

    @param object_id the object to get the package_id for

    @return package_id of the object. Empty string if the package_id is not stored
} {
    return [db_string get_package_id {} -default ""]
}


d_proc -public acs_object::get_element {
    {-object_id:required}
    {-element:required}
} {
    Gets a specific element from the info returned by acs_object::get.

    @param object_id the object to get data for
    @param element the field to return

    @return the value of the specified element

    @see acs_object::get
} {
    return [acs_object::get -object_id $object_id -element $element]
}

d_proc -public acs_object::object_p {
    -id:required
} {

    @author Jim Lynch (jim@jam.sessionsnet.org)
    @author Malte Sussdorff

    @creation-date 2007-01-26

    @param id ID of the potential acs-object

    @return true if object whose id is $id exists

} {
    return [db_string object_exists {} -default 0]
}

d_proc -private acs_object::is_type_p {
    -object_id:required
    -object_types:required
    -no_hierarchy:boolean
} {
    Returns whether an object is of a given object type.

    @return boolean
} {
    if { ![string is integer -strict $object_id] } {
        return 0
    }

    set object [acs::per_request_cache eval \
                    -key acs-tcl.acs_object.is_type_p($object_id,$object_types,$no_hierarchy_p) {

                        set object_type [acs_object_type $object_id]

                        if {$object_type eq ""} {
                            # Object was not found
                            return 0
                        } elseif {$object_type in $object_types} {
                            # Object is one of the types we look for
                            return 1
                        } elseif {$no_hierarchy_p} {
                            # Object is not one of the types we look
                            # for and we were told to not look into
                            # the hierarchy
                            return 0
                        } else {
                            # We expand the object type hierarchy and
                            # see if one of our supertypes is a type
                            # we look for
                            foreach supertype [acs_object_type::supertypes -subtype $object_type] {
                                if {$supertype in $object_types} {
                                    return 1
                                }
                            }

                            return 0
                        }
                    }]
}

d_proc -public acs_object::set_context_id {
    {-object_id:required}
    {-context_id:required}
} {
    Sets the context_id of the specified object.
} {
    db_dml update_context_id {}
}

# Local variables:
#    mode: tcl
#    tcl-indent-level: 4
#    indent-tabs-mode: nil
# End: