Mercurial > hg > rc1
view plugins/rc_foldersort/rc_foldersort.php @ 38:ac106d4c8961 default tip
flip /etc/roundcube to point here
author | Charlie Root |
---|---|
date | Sat, 29 Dec 2018 05:39:53 -0500 |
parents | d41c01c5c933 |
children |
line wrap: on
line source
<?php /* */ class rc_foldersort extends rcube_plugin { public $task = 'mail|settings'; private $rc; private $sort_order; private $uname; private $debug = false; public function init() { $this->rc = rcube::get_instance(); $this->uname = $this->rc->user->get_username(); $userprefs = $this->rc->user->get_prefs(); $this->sort_order = $userprefs['per_folder_sort']; if (!is_array($this->sort_order)) { $this->sort_order = array(); } $this->rc->output->set_env('per_folder_sort', $this->sort_order); if ($this->rc->task == 'settings') { $this->add_hook('folder_form', array($this, 'folder_form_hook')); $this->add_hook('folder_update', array($this, 'folder_update_hook')); $this->add_hook('preferences_list', array($this, 'preferences_list_hook')); $this->add_hook('preferences_save', array($this, 'preferences_save_hook')); } if ($this->rc->task == 'mail') { $this->include_script('rc_foldersort.js'); $this->register_action('plugin.rc_foldersort_json', array($this, 'sort_json_action')); } } public function folder_form_hook($args) { $content = $args['form']['props']['fieldsets']['settings']['content']; $options = $args['options']; $mbox = $options['name']; $cols = array( 'from', 'to', 'subject', 'date', 'size', 'dates' ); $folder_sorts = $this->sort_order; if (array_key_exists($mbox, $folder_sorts)) { $folder_sort = $folder_sorts[$mbox]; } else if (array_key_exists('default', $folder_sorts)) { $folder_sort = $folder_sorts['default']; } else { $folder_sort = 'date_DESC'; } list($col, $order) = explode('_', $folder_sort); if ($order != 'DESC' && $order != 'ASC') { $order = 'DESC'; } if (!in_array($col, $cols)) { $col = 'date'; } if (is_array($content) && !array_key_exists('_sortcol', $content)) { $folder_sort_col_select = new html_select(array('name' => '_sortcol', 'id' => '_sortcol')); foreach ($cols as $temp_col) { $folder_sort_col_select->add($this->gettext($temp_col), $temp_col); } $content['_sortcol'] = array( 'label' => $this->gettext('listsorting'), 'value' => $folder_sort_col_select->show($col), ); } if (is_array($content) && !array_key_exists('_sortcol', $options)) { $options['_sortcol'] = $col; } if (is_array($content) && !array_key_exists('_sortord', $content)) { $folder_sort_order_select = new html_select(array('name' => '_sortord', 'id' => '_sortord')); $folder_sort_order_select->add($this->gettext('asc'), 'ASC'); $folder_sort_order_select->add($this->gettext('desc'), 'DESC'); $content['_sortord'] = array( 'label' => $this->gettext('listorder'), 'value' => $folder_sort_order_select->show($order), ); } if (is_array($content) && !array_key_exists('_sortord', $options)) { $options['_sortord'] = $order; } $args['form']['props']['fieldsets']['settings']['content'] = $content; $args['options'] = $options; return $args; } public function folder_update_hook($args) { $mbox = $args['record']['name']; $settings = $args['record']['settings']; $sort_order = $settings['sort_column'] . '_' . $settings['sort_order']; $cfg_sort = $this->sort_order; $cfg_sort[$mbox] = $sort_order; $this->sort_order = $cfg_sort; $this->rc->user->save_prefs(array('per_folder_sort' => $this->sort_order)); $this->rc->output->set_env('per_folder_sort', $this->sort_order); return $args; } public function preferences_list_hook($args) { if ($args['section'] == 'mailbox') { $cols = array( 'from', 'to', 'subject', 'date', 'size', 'dates' ); $folder_sorts = $this->sort_order; if (array_key_exists('default', $folder_sorts)) { $folder_sort = $folder_sorts['default']; } else { $folder_sort = 'date_DESC'; } list($col, $order) = explode('_', $folder_sort); if ($order != 'DESC' && $order != 'ASC') { $order = 'DESC'; } if (!in_array($col, $cols)) { $col = 'date'; } $sort_select_col = new html_select(array('name' => '_default_sort_col', 'id' => '_default_sort_col')); foreach ($cols as $temp_col) { $sort_select_col->add($this->gettext($temp_col), $temp_col); } $sort_select_order = new html_select(array('name' => '_default_sort_order', 'id' => '_default_sort_order')); $sort_select_order->add($this->gettext('asc'), 'ASC'); $sort_select_order->add($this->gettext('desc'), 'DESC'); $sort_options = array( 'title' => $this->gettext('listorder'), 'content' => $sort_select_col->show($col) . $sort_select_order->show($order), ); $args['blocks']['main']['options']['listorder'] = $sort_options; } return $args; } public function preferences_save_hook($args) { if ($args['section'] == 'mailbox') { $folder_sort_col = rcube_utils::get_input_value('_default_sort_col', RCUBE_INPUT_POST); $folder_sort_order = rcube_utils::get_input_value('_default_sort_order', RCUBE_INPUT_POST); $folder_sort = $folder_sort_col . '_' . $folder_sort_order; $folder_sorts = $this->sort_order; $folder_sorts['default'] = $folder_sort; $args['prefs']['per_folder_sort'] = $folder_sorts; } return $args; } public function sort_json_action() { $cmd = rcube_utils::get_input_value('cmd', RCUBE_INPUT_POST); $folder = rcube_utils::get_input_value('folder', RCUBE_INPUT_POST); $col = rcube_utils::get_input_value('col', RCUBE_INPUT_POST); $order = rcube_utils::get_input_value('order', RCUBE_INPUT_POST); switch ($cmd) { case 'change_session': { $_SESSION['sort_col'] = $col; $_SESSION['sort_order'] = $order; } case 'save_order': { $sort_order = $this->sort_order; $sort_order[$folder] = $col . "_" . $order; $this->sort_order = $sort_order; $this->rc->user->save_prefs(array('per_folder_sort' => $this->sort_order)); $this->rc->output->set_env('per_folder_sort', $this->sort_order); break; } } } private function _debug($value, $key = '', $force = false) { if ($this->debug || $force) { $trace = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT); $caller_trace = $trace[0]; $caller_function = $trace[1]['function']; $caller_line = $caller_trace['line']; $caller_file = $caller_trace['file']; $caller_file = preg_replace("|.*/|", "", $caller_file); $str = sprintf("[%s:%d - %s] ", $caller_file, $caller_line, $caller_function); $val_type = gettype($value); switch ($val_type) { case "object": { $old_value = $value; $value = get_class($old_value); $str .= $key . ' type = ' . $value; break; } default: { $old_value = $value; $value = var_export($old_value, true); $str .= $key. ' = ' .$value; break; } } if ($this->uname) { $str = sprintf("[%s] %s", $this->uname, $str); } write_log($this->ID, $str); } } } ?>