Index: openacs-4/packages/contacts/tcl/contacts-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/tcl/contacts-procs.tcl,v
diff -u -N -r1.85 -r1.86
--- openacs-4/packages/contacts/tcl/contacts-procs.tcl 12 May 2006 21:09:48 -0000 1.85
+++ openacs-4/packages/contacts/tcl/contacts-procs.tcl 16 May 2006 06:36:22 -0000 1.86
@@ -14,7 +14,6 @@
namespace eval contact::revision:: {}
namespace eval contact::rels:: {}
namespace eval contacts::person:: {}
-namespace eval contact::employee {}
namespace eval contact::special_attributes {}
ad_proc -public contacts::default_group {
@@ -190,124 +189,7 @@
}
}
-ad_proc -public contact::util::get_employees {
- {-organization_id:required}
- {-package_id ""}
-} {
- get employees of an organization
-} {
- if { $package_id eq "" } {
- set package_id [ad_conn package_id]
- }
- return [util_memoize [list ::contact::util::get_employees_not_cached -organization_id $organization_id -package_id $package_id]]
-}
-ad_proc -public contact::util::get_employees_not_cached {
- {-organization_id:required}
- {-package_id:required}
-} {
- get employees of an organization
-} {
- set contact_list {}
- db_foreach select_employee_ids {
- select CASE WHEN object_id_one = :organization_id
- THEN object_id_two
- ELSE object_id_one END as other_party_id
- from acs_rels, acs_rel_types
- where acs_rels.rel_type = acs_rel_types.rel_type
- and ( object_id_one = :organization_id or object_id_two = :organization_id )
- and acs_rels.rel_type = 'contact_rels_employment'
- } {
- if { [contact::visible_p -party_id $other_party_id -package_id $package_id] } {
- lappend contact_list $other_party_id
- }
- }
-
- return $contact_list
-}
-
-ad_proc -public contact::util::get_employees_list_of_lists {
- {-organization_id:required}
- {-package_id ""}
-} {
- get employees of an organization in a list of list suitable for inclusion in options
- the list is made up of employee_name and employee_id. Cached
-} {
- if { $package_id eq "" } {
- set package_id [ad_conn package_id]
- }
- return [util_memoize [list ::contact::util::get_employees_list_of_lists_not_cached -organization_id $organization_id -package_id $package_id]]
-}
-
-ad_proc -private contact::util::get_employees_list_of_lists_not_cached {
- {-organization_id:required}
- {-package_id:required}
-} {
- get employees of an organization in a list of list suitable for inclusion in options
- the list is made up of employee_name and employee_id
-} {
- set contact_list [list]
- db_foreach select_employee_ids {
- select CASE WHEN object_id_one = :organization_id
- THEN object_id_two
- ELSE object_id_one END as other_party_id
- from acs_rels, acs_rel_types
- where acs_rels.rel_type = acs_rel_types.rel_type
- and ( object_id_one = :organization_id or object_id_two = :organization_id )
- and acs_rels.rel_type = 'contact_rels_employment'
- } {
- if { [contact::visible_p -party_id $other_party_id -package_id $package_id] } {
- lappend contact_list [list [person::name -person_id $other_party_id] $other_party_id]
- }
- }
-
- return $contact_list
-}
-
-ad_proc -public contact::util::get_employers {
- {-employee_id:required}
- {-package_id ""}
-} {
- Get employers of an employee
-
- @return List of lists, each containing the ID and name of an employer, or an empty list if no employers exist.
-} {
- if { $package_id eq "" } {
- set package_id [ad_conn package_id]
- }
- return [util_memoize [list ::contact::util::get_employers_not_cached -employee_id $employee_id -package_id $package_id]]
-}
-
-ad_proc -private contact::util::get_employers_not_cached {
- {-employee_id:required}
- {-package_id:required}
-} {
- Get employers of an employee
-
- @author Al-Faisal El-Dajani (faisal.dajani@gmail.com)
- @param employee_id The ID of the employee whom you want to know his/her employer
- @creation-date 2005-10-17
- @return List of lists, each containing the ID and name of an employer, or an empty list if no employers exist.
-} {
- set contact_list [list]
- db_foreach select_employer_ids {
- select CASE WHEN object_id_one = :employee_id
- THEN object_id_two
- ELSE object_id_one END as other_party_id
- from acs_rels, acs_rel_types
- where acs_rels.rel_type = acs_rel_types.rel_type
- and ( object_id_one = :employee_id or object_id_two = :employee_id )
- and acs_rels.rel_type = 'contact_rels_employment'
- } {
- if { [contact::visible_p -party_id $other_party_id -package_id $package_id] } {
- set organization_name [contact::name -party_id $other_party_id]
- lappend contact_list [list $other_party_id $organization_name]
- }
- }
-
- return $contact_list
-}
-
ad_proc -public contact::util::get_ams_list_ids {
{-user_id ""}
{-package_id ""}
@@ -425,260 +307,14 @@
}
}
-ad_proc -public contact::employee::get {
- {-employee_id:required}
- {-array:required}
- {-organization_id ""}
- {-package_id ""}
- {-use_cache:boolean}
-} {
- Get full employee information. If employee does not have a phone number, fax number, or an e-mail address, the employee will be assigned the corresponding employer value, if an employer exists. Cached.
- @author Al-Faisal El-Dajani (faisal.dajanim@gmail.com)
- @creation-date 2005-10-18
- @param employee_id The ID of the employee whose information you wish to retrieve.
- @param array Name of array to upvar contents into.
- @param organization_id ID of the organization whose information should be returned if the employee_id is an employee at this organization. If not specified, defaults to first employer relationship found, if any.
- @return 1 if user exists, 0 otherwise.
- @return Array-list of data.
- @return first_names First Name of the person
- @return last_name
- @return salutation Salutation of the person
- @return salutation_letter Salutation for a letterhead
- @return person_title
- @return direct_phoneno Direct phone number of the person, use company one if non existing
- @return directfaxno Direct Fax number, use company one if non existing
- @return email email of the person or the company (if there is no email for this person)
- @return organization_id of the company (if there is an employing company)
- @return name name of the company (if there is an employing company)
- @return company_name_ext Name extension of the company (if there is one)
- @return address Street of the person (or company)
- @return municipality
- @return region
- @return postal_code
- @return country_code
- @return country Name of the country in the user's locale
- @return town_line TownLine in the format used in the country of the party
- @return locale Locale of the employee
- @return jobtitle Job Title of the person
-
-} {
- upvar $array local_array
- if { $package_id eq "" } {
- set package_id [ad_conn package_id]
- }
- if {$use_cache_p} {
- set values [util_memoize [list ::contact::employee::get_not_cached -employee_id $employee_id -organization_id $organization_id -package_id $package_id]]
- } else {
- set values [::contact::employee::get_not_cached -employee_id $employee_id -organization_id $organization_id -package_id $package_id]
- }
- if {![empty_string_p $values]} {
- array set local_array $values
- return 1
- } else {
- return 0
- }
-}
-
-ad_proc -private contact::employee::get_not_cached {
- {-employee_id:required}
- {-organization_id}
- {-package_id:required}
-} {
- @author Malte Sussdorff (malte.sussdorff@cognovis.de)
- Get full employee information. If employee does not have a phone number, fax number, or an e-mail address, the employee will be assigned the corresponding employer value, if an employer exists. Uncached.
- @param employee_id The ID of the employee whose information you wish to retrieve.
- @param organization_id ID of the organization whose information should be returned if the employee_id is an employee at this organization. If not specified, defaults to first employer relationship found, if any.
-
-} {
- # ons_log notice "start processing"
- set employer_exist_p 0
- set employee_attributes [list "first_names" "last_name" "person_title" "directphoneno" "directfaxno" "email" "jobtitle" "person_title"]
- set employer_attributes [list "name" "company_phone" "company_fax" "email" "company_name_ext" "client_id"]
-
- # Check if ID belongs to an employee, if not return the company information
-
- if {![person::person_p -party_id $employee_id]} {
- set employer_id $employee_id
- set employer_rev_id [content::item::get_best_revision -item_id $employer_id]
- foreach attribute $employer_attributes {
- set value [ams::value \
- -object_id $employer_rev_id \
- -attribute_name $attribute
- ]
- switch $attribute {
- company_phone { set attribute "directphoneno" }
- company_fax { set attribute "directfaxno" }
- }
- set local_array($attribute) $value
- }
-
- set local_array(salutation) "#contacts.lt_dear_ladies_and#"
- set local_array(salutation_letter) ""
- if {[contacts::postal_address::get -attribute_name "company_address" -party_id $employer_id -array address_array]} {
- set local_array(address) $address_array(delivery_address)
- set local_array(municipality) $address_array(municipality)
- set local_array(region) $address_array(region)
- set local_array(postal_code) $address_array(postal_code)
- set local_array(country_code) $address_array(country_code)
- set local_array(country) $address_array(country)
- set local_array(town_line) $address_array(town_line)
- set company_address_p 1
- }
- return [array get local_array]
- }
-
- set employee_rev_id [content::item::get_best_revision -item_id $employee_id]
-
- # Get employers, if any
- set employers [list]
- set employers [contact::util::get_employers -employee_id $employee_id -package_id $package_id]
-
- # If employer(s) exist
- if {[llength $employers] > 0} {
- if {[exists_and_not_null organization_id]} {
- # If user sepcified to get information for a certain employer, check if the specified employer exists. If employer specified is not an employer, no organization info will be returned.
- foreach single_employer $employers {
- if {$organization_id == [lindex $single_employer 0]} {
- set employer $single_employer
- set employer_exist_p 1
- break
- }
- }
- } else {
- # If user didn't specify a certain employer, get first employer.
- set employer [lindex $employers 0]
- set employer_exist_p 1
- }
- # Get best/last revision
- set employer_id [lindex $employer 0]
- set employer_rev_id [content::item::get_best_revision -item_id $employer_id]
-
- # set the info
- set local_array(organization_id) $employer_id
- }
-
- set company_address_p 0
- if {$employer_exist_p} {
- foreach attribute $employer_attributes {
- set value [ams::value \
- -object_id $employer_rev_id \
- -attribute_name $attribute
- ]
- switch $attribute {
- company_phone { set attribute "directphoneno" }
- company_fax { set attribute "directfaxno" }
- }
- set local_array($attribute) $value
- }
-
- if {[contacts::postal_address::get -attribute_name "company_address" -party_id $employer_id -array address_array]} {
- set local_array(address) $address_array(delivery_address)
- set local_array(municipality) $address_array(municipality)
- set local_array(region) $address_array(region)
- set local_array(postal_code) $address_array(postal_code)
- set local_array(country_code) $address_array(country_code)
- set local_array(country) $address_array(country)
- set local_array(town_line) $address_array(town_line)
- set company_address_p 1
- }
- } else {
- # There is no employer info, so we just return empty values
- set local_array(organization_id) ""
- foreach attribute $employer_attributes {
- set local_array($attribute) ""
- }
- set local_array(address) ""
- set local_array(municipality) ""
- set local_array(region) ""
- set local_array(postal_code) ""
- set local_array(country_code) ""
- set local_array(country) ""
- set local_array(town_line) ""
- }
-
- # Set the attributes
- # This will overwrite company's attributes
- foreach attribute $employee_attributes {
- set value [ams::value \
- -object_id $employee_rev_id \
- -attribute_name $attribute
- ]
- set local_array($attribute) $value
- }
-
- # Set the salutation
- set local_array(salutation) [contact::salutation_not_cached -party_id $employee_id -type salutation]
- set local_array(salutation_letter) [contact::salutation_not_cached -party_id $employee_id -type letter]
-
- # As we are asking for employee information only use home_address if there is no company_address
- if {$company_address_p == 0} {
- if {[contacts::postal_address::get -attribute_name "home_address" -party_id $employee_id -array home_address_array]} {
- set local_array(address) $home_address_array(delivery_address)
- set local_array(municipality) $home_address_array(municipality)
- set local_array(region) $home_address_array(region)
- set local_array(postal_code) $home_address_array(postal_code)
- set local_array(country_code) $home_address_array(country_code)
- set local_array(country) $home_address_array(country)
- set local_array(town_line) $home_address_array(town_line)
- }
- }
-
- # message variables. if the employee does not have
- # a viable mailing address for this package it will
- # look for a viable mailing address for its employers
- set local_array(mailing_address) [contact::message::mailing_address -party_id $employee_id -package_id $package_id]
- set local_array(email_address) [contact::message::email_address -party_id $employee_id -package_id $package_id]
-
-
- # Get the locale
- set local_array(locale) [lang::user::site_wide_locale -user_id $employee_id]
-
- return [array get local_array]
-}
-
-ad_proc -public contact::util::get_employee_organization {
- {-employee_id:required}
- {-package_id ""}
-} {
- get organization of an employee
-} {
- if { $package_id eq "" } {
- set package_id [ad_conn package_id]
- }
- return [util_memoize [list ::contact::util::get_employee_organization_not_cached -employee_id $employee_id -package_id $package_id]]
-}
-
-ad_proc -public contact::util::get_employee_organization_not_cached {
- {-employee_id:required}
- {-package_id:required}
-} {
- get organization of an employee
-} {
- set contact_list {}
- db_foreach select_employee_ids {
- select CASE WHEN object_id_one = :employee_id
- THEN object_id_two
- ELSE object_id_one END as other_party_id
- from acs_rels, acs_rel_types
- where acs_rels.rel_type = acs_rel_types.rel_type
- and ( object_id_one = :employee_id or object_id_two = :employee_id )
- and acs_rels.rel_type = 'contact_rels_employment'
- } {
- if { [contact::visible_p -party_id $other_party_id -package_id $package_id] } {
- lappend contact_list $other_party_id
- }
- }
-
- return $contact_list
-}
-
ad_proc -private contact::flush {
{-party_id:required}
} {
Flush memorized information related to this contact
} {
+ util_memoize_flush "acs_object_type $party_id"
util_memoize_flush_regexp "contact(.*?)${party_id}"
# in order to flush person::name and any other
# procs that may show up there we also flush person