| | |
| | | */ |
| | | public function logout_actions() |
| | | { |
| | | $config = $this->config->all(); |
| | | $storage = $this->get_storage(); |
| | | $storage = $this->get_storage(); |
| | | $logout_expunge = $this->config->get('logout_expunge'); |
| | | $logout_purge = $this->config->get('logout_purge'); |
| | | $trash_mbox = $this->config->get('trash_mbox'); |
| | | |
| | | if ($config['logout_purge'] && !empty($config['trash_mbox'])) { |
| | | $storage->clear_folder($config['trash_mbox']); |
| | | if ($logout_purge && !empty($trash_mbox)) { |
| | | $storage->clear_folder($trash_mbox); |
| | | } |
| | | |
| | | if ($config['logout_expunge']) { |
| | | if ($logout_expunge) { |
| | | $storage->expunge_folder('INBOX'); |
| | | } |
| | | |
| | |
| | | $prefix = $this->storage->get_namespace('prefix'); |
| | | $prefix_len = strlen($prefix); |
| | | |
| | | if (!$prefix_len) |
| | | if (!$prefix_len) { |
| | | return; |
| | | } |
| | | |
| | | $prefs = $this->config->all(); |
| | | if (!empty($prefs['namespace_fixed'])) |
| | | if ($this->config->get('namespace_fixed')) { |
| | | return; |
| | | } |
| | | |
| | | $prefs = array(); |
| | | |
| | | // Build namespace prefix regexp |
| | | $ns = $this->storage->get_namespace(); |
| | |
| | | // Fix preferences |
| | | $opts = array('drafts_mbox', 'junk_mbox', 'sent_mbox', 'trash_mbox', 'archive_mbox'); |
| | | foreach ($opts as $opt) { |
| | | if ($value = $prefs[$opt]) { |
| | | if ($value = $this->config->get($opt)) { |
| | | if ($value != 'INBOX' && !preg_match($regexp, $value)) { |
| | | $prefs[$opt] = $prefix.$value; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (!empty($prefs['search_mods'])) { |
| | | if (($search_mods = $this->config->get('search_mods')) && !empty($search_mods)) { |
| | | $folders = array(); |
| | | foreach ($prefs['search_mods'] as $idx => $value) { |
| | | foreach ($search_mods as $idx => $value) { |
| | | if ($idx != 'INBOX' && $idx != '*' && !preg_match($regexp, $idx)) { |
| | | $idx = $prefix.$idx; |
| | | } |
| | |
| | | $prefs['search_mods'] = $folders; |
| | | } |
| | | |
| | | if (!empty($prefs['message_threading'])) { |
| | | if (($threading = $this->config->get('message_threading')) && !empty($threading)) { |
| | | $folders = array(); |
| | | foreach ($prefs['message_threading'] as $idx => $value) { |
| | | foreach ($threading as $idx => $value) { |
| | | if ($idx != 'INBOX' && !preg_match($regexp, $idx)) { |
| | | $idx = $prefix.$idx; |
| | | } |
| | |
| | | $prefs['message_threading'] = $folders; |
| | | } |
| | | |
| | | if (!empty($prefs['collapsed_folders'])) { |
| | | $folders = explode('&&', $prefs['collapsed_folders']); |
| | | if ($collapsed = $this->config->get('collapsed_folders')) { |
| | | $folders = explode('&&', $collapsed); |
| | | $count = count($folders); |
| | | $folders_str = ''; |
| | | |
| | |
| | | $quota = $this->storage->get_quota(); |
| | | $quota = $this->plugins->exec_hook('quota', $quota); |
| | | |
| | | unset($quota['abort']); |
| | | $quota_result = (array) $quota; |
| | | $quota_result['type'] = isset($_SESSION['quota_display']) ? $_SESSION['quota_display'] : ''; |
| | | |
| | |
| | | $quota_result['width'] = $attrib['width']; |
| | | } |
| | | if ($attrib['height']) { |
| | | $quota_result['height'] = $attrib['height']; |
| | | $quota_result['height'] = $attrib['height']; |
| | | } |
| | | |
| | | // build a table of quota types/roots info |
| | | if (($root_cnt = count($quota_result['all'])) > 1 || count($quota_result['all'][key($quota_result['all'])]) > 1) { |
| | | $table = new html_table(array('cols' => 3, 'class' => 'quota-info')); |
| | | |
| | | $table->add_header(null, self::Q($this->gettext('quotatype'))); |
| | | $table->add_header(null, self::Q($this->gettext('quotatotal'))); |
| | | $table->add_header(null, self::Q($this->gettext('quotaused'))); |
| | | |
| | | foreach ($quota_result['all'] as $root => $data) { |
| | | if ($root_cnt > 1 && $root) { |
| | | $table->add(array('colspan' => 3, 'class' => 'root'), self::Q($root)); |
| | | } |
| | | |
| | | if ($storage = $data['storage']) { |
| | | $percent = min(100, round(($storage['used']/max(1,$storage['total']))*100)); |
| | | |
| | | $table->add('name', self::Q($this->gettext('quotastorage'))); |
| | | $table->add(null, $this->show_bytes($storage['total'] * 1024)); |
| | | $table->add(null, sprintf('%s (%.0f%%)', $this->show_bytes($storage['used'] * 1024), $percent)); |
| | | } |
| | | if ($message = $data['message']) { |
| | | $percent = min(100, round(($message['used']/max(1,$message['total']))*100)); |
| | | |
| | | $table->add('name', self::Q($this->gettext('quotamessage'))); |
| | | $table->add(null, intval($message['total'])); |
| | | $table->add(null, sprintf('%d (%.0f%%)', $message['used'], $percent)); |
| | | } |
| | | } |
| | | |
| | | $quota_result['table'] = $table->show(); |
| | | } |
| | | } |
| | | else { |
| | | $unlimited = $this->config->get('quota_zero_as_unlimited'); |
| | | $quota_result['title'] = $this->gettext($unlimited ? 'unlimited' : 'unknown'); |
| | | $quota_result['percent'] = 0; |
| | | } |
| | | |
| | | // cleanup |
| | | unset($quota_result['abort']); |
| | | if (empty($quota_result['table'])) { |
| | | unset($quota_result['all']); |
| | | } |
| | | |
| | | return $quota_result; |
| | |
| | | |
| | | /** |
| | | * Initializes file uploading interface. |
| | | * |
| | | * @param $int Optional maximum file size in bytes |
| | | */ |
| | | public function upload_init() |
| | | public function upload_init($max_size = null) |
| | | { |
| | | // Enable upload progress bar |
| | | if ($seconds = $this->config->get('upload_progress')) { |
| | |
| | | $max_filesize = $max_postsize; |
| | | } |
| | | |
| | | if ($max_size && $max_size < $max_filesize) { |
| | | $max_filesize = $max_size; |
| | | } |
| | | |
| | | $this->output->set_env('max_filesize', $max_filesize); |
| | | $max_filesize = $this->show_bytes($max_filesize); |
| | | $this->output->set_env('filesizeerror', $this->gettext(array( |
| | |
| | | } |
| | | |
| | | /** |
| | | * Outputs uploaded file content (with image thumbnails support |
| | | * |
| | | * @param array $file Upload file data |
| | | */ |
| | | public function display_uploaded_file($file) |
| | | { |
| | | if (empty($file)) { |
| | | return; |
| | | } |
| | | |
| | | $file = $this->plugins->exec_hook('attachment_display', $file); |
| | | |
| | | if ($file['status']) { |
| | | if (empty($file['size'])) { |
| | | $file['size'] = $file['data'] ? strlen($file['data']) : @filesize($file['path']); |
| | | } |
| | | |
| | | // generate image thumbnail for file browser in HTML editor |
| | | if (!empty($_GET['_thumbnail'])) { |
| | | $temp_dir = $this->config->get('temp_dir'); |
| | | $thumbnail_size = 80; |
| | | list(,$ext) = explode('/', $file['mimetype']); |
| | | $mimetype = $file['mimetype']; |
| | | $file_ident = $file['id'] . ':' . $file['mimetype'] . ':' . $file['size']; |
| | | $cache_basename = $temp_dir . '/' . md5($file_ident . ':' . $this->user->ID . ':' . $thumbnail_size); |
| | | $cache_file = $cache_basename . '.' . $ext; |
| | | |
| | | // render thumbnail image if not done yet |
| | | if (!is_file($cache_file)) { |
| | | if (!$file['path']) { |
| | | $orig_name = $filename = $cache_basename . '.orig.' . $ext; |
| | | file_put_contents($orig_name, $file['data']); |
| | | } |
| | | else { |
| | | $filename = $file['path']; |
| | | } |
| | | |
| | | $image = new rcube_image($filename); |
| | | if ($imgtype = $image->resize($thumbnail_size, $cache_file, true)) { |
| | | $mimetype = 'image/' . $imgtype; |
| | | |
| | | if ($orig_name) { |
| | | unlink($orig_name); |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (is_file($cache_file)) { |
| | | // cache for 1h |
| | | $this->output->future_expire_header(3600); |
| | | header('Content-Type: ' . $mimetype); |
| | | header('Content-Length: ' . filesize($cache_file)); |
| | | |
| | | readfile($cache_file); |
| | | exit; |
| | | } |
| | | } |
| | | |
| | | header('Content-Type: ' . $file['mimetype']); |
| | | header('Content-Length: ' . $file['size']); |
| | | |
| | | if ($file['data']) { |
| | | echo $file['data']; |
| | | } |
| | | else if ($file['path']) { |
| | | readfile($file['path']); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Initializes client-side autocompletion. |
| | | */ |
| | | public function autocomplete_init() |