Mercurial > hg > rc1
comparison plugins/rc_foldersort/rc_foldersort.php @ 33:d41c01c5c933
two fixes to distro
author | Charlie Root |
---|---|
date | Sun, 27 May 2018 16:53:20 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
32:f8b3ac77e951 | 33:d41c01c5c933 |
---|---|
1 <?php | |
2 /* | |
3 */ | |
4 | |
5 class rc_foldersort extends rcube_plugin | |
6 { | |
7 public $task = 'mail|settings'; | |
8 | |
9 private $rc; | |
10 private $sort_order; | |
11 | |
12 private $uname; | |
13 private $debug = false; | |
14 | |
15 public function init() | |
16 { | |
17 $this->rc = rcube::get_instance(); | |
18 $this->uname = $this->rc->user->get_username(); | |
19 $userprefs = $this->rc->user->get_prefs(); | |
20 $this->sort_order = $userprefs['per_folder_sort']; | |
21 if (!is_array($this->sort_order)) { | |
22 $this->sort_order = array(); | |
23 } | |
24 | |
25 $this->rc->output->set_env('per_folder_sort', $this->sort_order); | |
26 | |
27 if ($this->rc->task == 'settings') { | |
28 $this->add_hook('folder_form', array($this, 'folder_form_hook')); | |
29 $this->add_hook('folder_update', array($this, 'folder_update_hook')); | |
30 $this->add_hook('preferences_list', array($this, 'preferences_list_hook')); | |
31 $this->add_hook('preferences_save', array($this, 'preferences_save_hook')); | |
32 } | |
33 | |
34 if ($this->rc->task == 'mail') { | |
35 $this->include_script('rc_foldersort.js'); | |
36 $this->register_action('plugin.rc_foldersort_json', array($this, 'sort_json_action')); | |
37 } | |
38 } | |
39 | |
40 public function folder_form_hook($args) | |
41 { | |
42 $content = $args['form']['props']['fieldsets']['settings']['content']; | |
43 $options = $args['options']; | |
44 $mbox = $options['name']; | |
45 | |
46 $cols = array( | |
47 'from', | |
48 'to', | |
49 'subject', | |
50 'date', | |
51 'size', | |
52 'dates' | |
53 ); | |
54 | |
55 $folder_sorts = $this->sort_order; | |
56 if (array_key_exists($mbox, $folder_sorts)) { | |
57 $folder_sort = $folder_sorts[$mbox]; | |
58 } else if (array_key_exists('default', $folder_sorts)) { | |
59 $folder_sort = $folder_sorts['default']; | |
60 } else { | |
61 $folder_sort = 'date_DESC'; | |
62 } | |
63 | |
64 list($col, $order) = explode('_', $folder_sort); | |
65 if ($order != 'DESC' && $order != 'ASC') { | |
66 $order = 'DESC'; | |
67 } | |
68 | |
69 if (!in_array($col, $cols)) { | |
70 $col = 'date'; | |
71 } | |
72 | |
73 if (is_array($content) && !array_key_exists('_sortcol', $content)) { | |
74 $folder_sort_col_select = new html_select(array('name' => '_sortcol', 'id' => '_sortcol')); | |
75 foreach ($cols as $temp_col) { | |
76 $folder_sort_col_select->add($this->gettext($temp_col), $temp_col); | |
77 } | |
78 | |
79 $content['_sortcol'] = array( | |
80 'label' => $this->gettext('listsorting'), | |
81 'value' => $folder_sort_col_select->show($col), | |
82 ); | |
83 } | |
84 | |
85 if (is_array($content) && !array_key_exists('_sortcol', $options)) { | |
86 $options['_sortcol'] = $col; | |
87 } | |
88 | |
89 if (is_array($content) && !array_key_exists('_sortord', $content)) { | |
90 $folder_sort_order_select = new html_select(array('name' => '_sortord', 'id' => '_sortord')); | |
91 $folder_sort_order_select->add($this->gettext('asc'), 'ASC'); | |
92 $folder_sort_order_select->add($this->gettext('desc'), 'DESC'); | |
93 $content['_sortord'] = array( | |
94 'label' => $this->gettext('listorder'), | |
95 'value' => $folder_sort_order_select->show($order), | |
96 ); | |
97 } | |
98 | |
99 if (is_array($content) && !array_key_exists('_sortord', $options)) { | |
100 $options['_sortord'] = $order; | |
101 } | |
102 | |
103 $args['form']['props']['fieldsets']['settings']['content'] = $content; | |
104 | |
105 $args['options'] = $options; | |
106 | |
107 return $args; | |
108 } | |
109 | |
110 public function folder_update_hook($args) | |
111 { | |
112 $mbox = $args['record']['name']; | |
113 $settings = $args['record']['settings']; | |
114 $sort_order = $settings['sort_column'] . '_' . $settings['sort_order']; | |
115 $cfg_sort = $this->sort_order; | |
116 $cfg_sort[$mbox] = $sort_order; | |
117 $this->sort_order = $cfg_sort; | |
118 | |
119 $this->rc->user->save_prefs(array('per_folder_sort' => $this->sort_order)); | |
120 $this->rc->output->set_env('per_folder_sort', $this->sort_order); | |
121 | |
122 return $args; | |
123 } | |
124 | |
125 public function preferences_list_hook($args) | |
126 { | |
127 if ($args['section'] == 'mailbox') { | |
128 $cols = array( | |
129 'from', | |
130 'to', | |
131 'subject', | |
132 'date', | |
133 'size', | |
134 'dates' | |
135 ); | |
136 | |
137 $folder_sorts = $this->sort_order; | |
138 if (array_key_exists('default', $folder_sorts)) { | |
139 $folder_sort = $folder_sorts['default']; | |
140 } else { | |
141 $folder_sort = 'date_DESC'; | |
142 } | |
143 | |
144 list($col, $order) = explode('_', $folder_sort); | |
145 if ($order != 'DESC' && $order != 'ASC') { | |
146 $order = 'DESC'; | |
147 } | |
148 | |
149 if (!in_array($col, $cols)) { | |
150 $col = 'date'; | |
151 } | |
152 | |
153 $sort_select_col = new html_select(array('name' => '_default_sort_col', 'id' => '_default_sort_col')); | |
154 foreach ($cols as $temp_col) { | |
155 $sort_select_col->add($this->gettext($temp_col), $temp_col); | |
156 } | |
157 | |
158 $sort_select_order = new html_select(array('name' => '_default_sort_order', 'id' => '_default_sort_order')); | |
159 $sort_select_order->add($this->gettext('asc'), 'ASC'); | |
160 $sort_select_order->add($this->gettext('desc'), 'DESC'); | |
161 $sort_options = array( | |
162 'title' => $this->gettext('listorder'), | |
163 'content' => $sort_select_col->show($col) . $sort_select_order->show($order), | |
164 ); | |
165 | |
166 $args['blocks']['main']['options']['listorder'] = $sort_options; | |
167 } | |
168 | |
169 return $args; | |
170 } | |
171 | |
172 public function preferences_save_hook($args) | |
173 { | |
174 if ($args['section'] == 'mailbox') { | |
175 $folder_sort_col = rcube_utils::get_input_value('_default_sort_col', RCUBE_INPUT_POST); | |
176 $folder_sort_order = rcube_utils::get_input_value('_default_sort_order', RCUBE_INPUT_POST); | |
177 $folder_sort = $folder_sort_col . '_' . $folder_sort_order; | |
178 $folder_sorts = $this->sort_order; | |
179 $folder_sorts['default'] = $folder_sort; | |
180 $args['prefs']['per_folder_sort'] = $folder_sorts; | |
181 } | |
182 | |
183 return $args; | |
184 } | |
185 | |
186 public function sort_json_action() | |
187 { | |
188 $cmd = rcube_utils::get_input_value('cmd', RCUBE_INPUT_POST); | |
189 $folder = rcube_utils::get_input_value('folder', RCUBE_INPUT_POST); | |
190 $col = rcube_utils::get_input_value('col', RCUBE_INPUT_POST); | |
191 $order = rcube_utils::get_input_value('order', RCUBE_INPUT_POST); | |
192 | |
193 switch ($cmd) { | |
194 case 'change_session': { | |
195 $_SESSION['sort_col'] = $col; | |
196 $_SESSION['sort_order'] = $order; | |
197 } | |
198 case 'save_order': { | |
199 $sort_order = $this->sort_order; | |
200 $sort_order[$folder] = $col . "_" . $order; | |
201 $this->sort_order = $sort_order; | |
202 | |
203 $this->rc->user->save_prefs(array('per_folder_sort' => $this->sort_order)); | |
204 $this->rc->output->set_env('per_folder_sort', $this->sort_order); | |
205 break; | |
206 } | |
207 } | |
208 } | |
209 | |
210 private function _debug($value, $key = '', $force = false) | |
211 { | |
212 if ($this->debug || $force) { | |
213 $trace = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT); | |
214 $caller_trace = $trace[0]; | |
215 $caller_function = $trace[1]['function']; | |
216 $caller_line = $caller_trace['line']; | |
217 $caller_file = $caller_trace['file']; | |
218 $caller_file = preg_replace("|.*/|", "", $caller_file); | |
219 $str = sprintf("[%s:%d - %s] ", $caller_file, $caller_line, $caller_function); | |
220 | |
221 $val_type = gettype($value); | |
222 | |
223 switch ($val_type) { | |
224 case "object": { | |
225 $old_value = $value; | |
226 $value = get_class($old_value); | |
227 $str .= $key . ' type = ' . $value; | |
228 break; | |
229 } | |
230 default: { | |
231 $old_value = $value; | |
232 $value = var_export($old_value, true); | |
233 $str .= $key. ' = ' .$value; | |
234 break; | |
235 } | |
236 } | |
237 | |
238 if ($this->uname) { | |
239 $str = sprintf("[%s] %s", $this->uname, $str); | |
240 } | |
241 | |
242 write_log($this->ID, $str); | |
243 } | |
244 } | |
245 | |
246 } | |
247 ?> |