miguelm
committed
on 18 Oct 05
adding paginate to messages include
openacs-4/.../mail-tracking/lib/messages.tcl (+22 -6)
1 1 # Expects the following optional parameters (in each combination):
2 2 #
3 3 # recipient_id  - to filter mails for a single receiver
4 4 # sender_id     - to filter mails for a single sender
5 5 # package_id    - to filter mails for a package instance
6 6 # object_id     - to filter mails for a object_id
  7 # page          - to filter the pagination
  8 # page_size     - to know how many rows show (optional default to 25)
7 9 # show_filter_p - to show or not the filters in the inlcude, default to "t"
8 10 # elements      - a list of elements to show in the list template. If not provided will show all elements.
9 11 #                 Posible elemets are: sender_id recipient_id package_id subject object_id file_ids body sent_date
10 12
11 13 ad_page_contract {
12 14
13 15 @author Nima Mazloumi
14 16 @creation-date Mon May 30 17:55:50 CEST 2005
15 17 @cvs-id $Id$
16 18 } -query {
17 19     recipient_id:optional
18 20     {emp_mail_f:optional 1}
19 21     sender_id:optional
20 22     package_id:optional
21 23     object_id:optional
22 24     {orderby:optional "recipient_id"}
23 25 } -properties {
24 26     show_filter_p
25 27     acs_mail_log:multirow
26 28     context:onevalue
27 29 }
28 30
29 31 set page_title [ad_conn instance_name]
30 32 set context [list "index"]
31 33
  34 if { [info exist object_id] && [empty_string_p $object_id] } {
  35    unset object_id
  36 }
  37
32 38 if { ![exists_and_not_null show_filter_p] } {
33 39     set show_filter_p "t"
34 40 }
35 41
  42 if { ![exists_and_not_null page_size] } {
  43     set page_size 10
  44 }
  45
36 46 set tracking_url [apm_package_url_from_key "mail-tracking"]
37 47 # Wich elements will be shown on the list template
38 48 set rows_list [list]
39 49 if {![exists_and_not_null elements] } {
40 50     set rows_list [list sender_id {} recipient_id {} package_id {} subject {} object_id {} file_ids {} body {} sent_date {}]
41 51 } else {
42 52     foreach element $elements {
43 53         lappend rows_list $element
44 54         lappend rows_list [list]
45 55     }
46 56 }
47 57
48 58 set filters [list \
49 59                  sender_id {
50 60                      label "[_ mail-tracking.Sender]"
51 61                      where_clause "sender_id = :sender_id"
52 62                  } \
53 63                  object_id {
54 64                      label "[_ mail-trackin.Object_id]"
55 65                      where_clause "object_id = :object_id"
 
64 74 if { [exists_and_not_null recipient_id] } {
65 75     set recipient_where_clause " and recipient_id = $recipient_id"
66 76 }
67 77
68 78 if { [apm_package_installed_p organizations] && [exists_and_not_null recipient_id]} {
69 79     set org_p [organization::organization_p -party_id $recipient_id]
70 80     if { $org_p } {
71 81         lappend filters emp_mail_f {
72 82             label "[_ mail-tracking.Emails_to]"
73 83             values { {"[_ mail-tracking.Organization]" 1} { "[_ mail-tracking.Employees]" 2 }}
74 84         }
75 85     }
76 86    
77 87     if { $org_p && [string equal $emp_mail_f 2] } {
78 88         set emp_list [contact::util::get_employees -organization_id $recipient_id]
79 89         lappend emp_list $recipient_id
80 90         set recipient_where_clause " and recipient_id in ([template::util::tcl_to_sql_list $emp_list])"
81 91     }
82 92 }
83 93
  94
  95
  96
84 97 template::list::create \
85 98     -name messages \
86 99     -selected_format normal \
87 100     -multirow messages \
88       -key acs_mail_log_id \
  101     -key acs_mail_log.log_id \
  102     -page_size $page_size \
  103     -page_flush_p 0 \
  104     -page_query_name "messages_pagination" \
89 105     -row_pretty_plural "[_ mail-tracking.messages]" \
90 106     -elements {
91 107         sender_id {
92 108             label "[_ mail-tracking.Sender]"
93 109             display_template {
94 110                 @messages.sender@
95 111             }
96 112         }
97 113         recipient_id {
98 114             label "[_ mail-tracking.Recipient]"
99 115             display_template {
100 116                     @messages.receiver@
101 117             }
102 118         }
103 119         package_id {
104 120             label "[_ mail-tracking.Package]"
105 121             display_template {
106 122                 <a href="@messages.package_url@">@messages.package_name@</a>
107 123             }
108 124         }
 
141 157             orderby package_id
142 158             label "[_ mail-tracking.Package]"
143 159         }
144 160         subject {
145 161             orderby subject
146 162             label "[_ mail-tracking.Subject]"
147 163         }
148 164         sent_date {
149 165             orderby sent_date
150 166             label "[_ mail-tracking.Sent_Date]"
151 167         }
152 168     } -formats {
153 169         normal {
154 170             label "Table"
155 171             layout table
156 172             row $rows_list
157 173         }
158 174     } -filters $filters \
159 175
160 176
161   set orderby [template::list::orderby_clause -name "messages" -orderby]
162  
163 177 db_multirow -extend { file_ids object_url sender receiver package_name package_url url_message_id download_files} messages select_messages { } {
164 178     set sender ""
165 179     set receiver ""
166 180     if { [catch { set sender [person::name -person_id $sender_id] } errMsg] } {
167 181         # We will try to see if it's a contact and has an email. This will break
168 182         # if the contacts package is not installed so this is why we need to put
169 183         # it inside a catch
170 184         if { [catch { set sender [contact::email -party_id $sender_id] } errorMsg] } {
171 185             set sender ""
172 186         }
173 187     }
174 188     if { [catch { set receiver [person::name -person_id $recipient_id]} errMsg] } {
175 189         # We will try to see if it's a contact and has an email. This will break
176 190         # if the contacts package is not installed so this is why we need to put
177 191         # it inside a catch
178 192         if { [catch { set receiver [contact::email -party_id $recipient_id] } errorMsg] } {
179 193             set receiver ""
180 194         }
181 195     }
182 196