├── .editorconfig ├── .github └── workflows │ └── ci.yml ├── .gitignore ├── LICENSE ├── README.md ├── ispconfig3_account ├── account.js ├── config │ └── config.inc.php.dist ├── ispconfig3_account.php ├── localization │ ├── bg_BG.inc │ ├── cs_CZ.inc │ ├── da_DK.inc │ ├── de_DE.inc │ ├── en_US.inc │ ├── es_ES.inc │ ├── et_EE.inc │ ├── fi_FI.inc │ ├── fr_FR.inc │ ├── gl_ES.inc │ ├── hu_HU.inc │ ├── it_IT.inc │ ├── lb_LU.inc │ ├── lv_LV.inc │ ├── nl_NL.inc │ ├── pl_PL.inc │ ├── pt_BR.inc │ ├── ru_RU.inc │ ├── sk_SK.inc │ ├── sl_SI.inc │ ├── sv_SE.inc │ ├── tr_TR.inc │ └── uk_UA.inc └── skins │ ├── classic │ ├── account.css │ ├── general.css │ └── templates │ │ ├── account.html │ │ └── general.html │ ├── elastic │ ├── account.css │ └── templates │ │ ├── account.html │ │ └── general.html │ └── larry │ ├── account.css │ └── templates │ ├── account.html │ └── general.html ├── ispconfig3_autoreply ├── autoreply.js ├── ispconfig3_autoreply.php ├── localization │ ├── bg_BG.inc │ ├── cs_CZ.inc │ ├── da_DK.inc │ ├── de_DE.inc │ ├── en_US.inc │ ├── es_ES.inc │ ├── et_EE.inc │ ├── fi_FI.inc │ ├── fr_FR.inc │ ├── gl_ES.inc │ ├── hu_HU.inc │ ├── it_IT.inc │ ├── lb_LU.inc │ ├── lv_LV.inc │ ├── nl_NL.inc │ ├── pl_PL.inc │ ├── pt_BR.inc │ ├── ru_RU.inc │ ├── sk_SK.inc │ ├── sl_SI.inc │ ├── sv_SE.inc │ ├── tr_TR.inc │ └── uk_UA.inc └── skins │ ├── classic │ ├── jquery.ui.datetime.css │ ├── jquery.ui.datetime.min.js │ └── templates │ │ └── autoreply.html │ ├── elastic │ ├── jquery.ui.datetime.css │ └── templates │ │ └── autoreply.html │ └── larry │ └── templates │ └── autoreply.html ├── ispconfig3_autoselect ├── config │ └── config.inc.php.dist └── ispconfig3_autoselect.php ├── ispconfig3_fetchmail ├── config │ └── config.inc.php.dist ├── fetchmail.js ├── ispconfig3_fetchmail.php ├── localization │ ├── bg_BG.inc │ ├── cs_CZ.inc │ ├── da_DK.inc │ ├── de_DE.inc │ ├── en_US.inc │ ├── es_ES.inc │ ├── fi_FI.inc │ ├── fr_FR.inc │ ├── gl_ES.inc │ ├── hu_HU.inc │ ├── it_IT.inc │ ├── lb_LU.inc │ ├── lv_LV.inc │ ├── nl_NL.inc │ ├── pl_PL.inc │ ├── pt_BR.inc │ ├── ru_RU.inc │ ├── sk_SK.inc │ ├── sl_SI.inc │ ├── sv_SE.inc │ ├── tr_TR.inc │ └── uk_UA.inc └── skins │ ├── classic │ ├── delete.png │ ├── disabled.png │ ├── enabled.png │ ├── fetchmail.css │ └── templates │ │ └── fetchmail.html │ ├── elastic │ ├── fetchmail.css │ └── templates │ │ └── fetchmail.html │ └── larry │ ├── delete.png │ ├── disabled.png │ ├── enabled.png │ ├── fetchmail.css │ └── templates │ └── fetchmail.html ├── ispconfig3_filter ├── config │ └── config.inc.php.dist ├── filter.js ├── ispconfig3_filter.php ├── localization │ ├── cs_CZ.inc │ ├── da_DK.inc │ ├── de_DE.inc │ ├── en_US.inc │ ├── es_ES.inc │ ├── fi_FI.inc │ ├── fr_FR.inc │ ├── gl_ES.inc │ ├── hu_HU.inc │ ├── it_IT.inc │ ├── lb_LU.inc │ ├── lv_LV.inc │ ├── nl_NL.inc │ ├── pl_PL.inc │ ├── pt_BR.inc │ ├── ru_RU.inc │ ├── sk_SK.inc │ ├── sl_SI.inc │ ├── sv_SE.inc │ ├── tr_TR.inc │ └── uk_UA.inc └── skins │ ├── classic │ ├── delete.png │ ├── disabled.png │ ├── enabled.png │ ├── filter.css │ └── templates │ │ └── filter.html │ ├── elastic │ ├── filter.css │ └── templates │ │ └── filter.html │ └── larry │ ├── delete.png │ ├── disabled.png │ ├── enabled.png │ ├── filter.css │ └── templates │ └── filter.html ├── ispconfig3_forward ├── forward.js ├── ispconfig3_forward.php ├── localization │ ├── cs_CZ.inc │ ├── da_DK.inc │ ├── de_DE.inc │ ├── en_US.inc │ ├── es_ES.inc │ ├── fi_FI.inc │ ├── fr_FR.inc │ ├── gl_ES.inc │ ├── hu_HU.inc │ ├── it_IT.inc │ ├── lb_LU.inc │ ├── lv_LV.inc │ ├── pl_PL.inc │ ├── pt_BR.inc │ ├── ru_RU.inc │ ├── sk_SK.inc │ ├── sl_SI.inc │ ├── sv_SE.inc │ ├── tr_TR.inc │ └── uk_UA.inc └── skins │ ├── classic │ ├── delete.png │ ├── forward.css │ └── templates │ │ └── forward.html │ ├── elastic │ └── templates │ │ └── forward.html │ └── larry │ ├── delete.png │ ├── forward.css │ └── templates │ └── forward.html ├── ispconfig3_pass ├── config │ └── config.inc.php.dist ├── ispconfig3_pass.php ├── localization │ ├── bg_BG.inc │ ├── cs_CZ.inc │ ├── da_DK.inc │ ├── de_DE.inc │ ├── en_US.inc │ ├── es_ES.inc │ ├── fi_FI.inc │ ├── fr_FR.inc │ ├── gl_ES.inc │ ├── hu_HU.inc │ ├── it_IT.inc │ ├── lb_LU.inc │ ├── lv_LV.inc │ ├── nl_NL.inc │ ├── pl_PL.inc │ ├── pt_BR.inc │ ├── ru_RU.inc │ ├── sk_SK.inc │ ├── sl_SI.inc │ ├── sv_SE.inc │ ├── tr_TR.inc │ └── uk_UA.inc ├── pass.js ├── pwdmeter.js └── skins │ ├── classic │ ├── pass.css │ └── templates │ │ └── pass.html │ ├── elastic │ ├── pass.css │ └── templates │ │ └── pass.html │ └── larry │ ├── pass.css │ └── templates │ └── pass.html ├── ispconfig3_spam ├── ispconfig3_spam.php ├── localization │ ├── bg_BG.inc │ ├── cs_CZ.inc │ ├── da_DK.inc │ ├── de_DE.inc │ ├── en_US.inc │ ├── es_ES.inc │ ├── fi_FI.inc │ ├── fr_FR.inc │ ├── gl_ES.inc │ ├── hu_HU.inc │ ├── it_IT.inc │ ├── lb_LU.inc │ ├── lv_LV.inc │ ├── nl_NL.inc │ ├── pl_PL.inc │ ├── pt_BR.inc │ ├── ru_RU.inc │ ├── sk_SK.inc │ ├── sl_SI.inc │ ├── sv_SE.inc │ └── uk_UA.inc ├── skins │ ├── classic │ │ ├── spam.css │ │ └── templates │ │ │ ├── delete.png │ │ │ ├── disabled.png │ │ │ ├── enabled.png │ │ │ └── spam.html │ ├── elastic │ │ ├── spam.css │ │ └── templates │ │ │ └── spam.html │ └── larry │ │ ├── spam.css │ │ └── templates │ │ └── spam.html └── spam.js └── ispconfig3_wblist ├── config └── config.inc.php.dist ├── ispconfig3_wblist.php ├── localization ├── bg_BG.inc ├── cs_CZ.inc ├── da_DK.inc ├── de_DE.inc ├── en_US.inc ├── es_ES.inc ├── fi_FI.inc ├── fr_FR.inc ├── gl_ES.inc ├── hu_HU.inc ├── it_IT.inc ├── lb_LU.inc ├── lv_LV.inc ├── pl_PL.inc ├── pt_BR.inc ├── ru_RU.inc ├── sk_SK.inc ├── sl_SI.inc ├── sv_SE.inc └── uk_UA.inc ├── skins ├── classic │ ├── blacklist.png │ ├── delete.png │ ├── disabled.png │ ├── enabled.png │ ├── templates │ │ └── wblist.html │ ├── wblist.css │ └── whitelist.png ├── elastic │ ├── templates │ │ └── wblist.html │ └── wblist.css └── larry │ ├── blacklist.png │ ├── delete.png │ ├── disabled.png │ ├── enabled.png │ ├── templates │ └── wblist.html │ ├── wblist.css │ └── whitelist.png └── wblist.js /.editorconfig: -------------------------------------------------------------------------------- 1 | # top-most EditorConfig file 2 | root = true 3 | 4 | # Unix-style newlines with a newline ending every file 5 | [*] 6 | end_of_line = lf 7 | insert_final_newline = true 8 | 9 | [*.{css, inc, js, php, sh}] 10 | charset = utf-8 11 | indent_style = space 12 | indent_size = 4 13 | trim_trailing_whitespace = true 14 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: tests 2 | 3 | on: [push, pull_request, workflow_dispatch] 4 | 5 | jobs: 6 | lint: 7 | runs-on: ubuntu-latest 8 | strategy: 9 | fail-fast: false 10 | matrix: 11 | php: ['7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1'] 12 | steps: 13 | - name: Checkout repository 14 | uses: actions/checkout@v2 15 | 16 | - name: Setup PHP 17 | uses: shivammathur/setup-php@v2 18 | with: 19 | php-version: ${{ matrix.php }} 20 | ini-values: error_reporting=-1, display_errors=On, zend.assertions=1 21 | coverage: none 22 | tools: cs2pr, phpcs 23 | 24 | - name: Lint PHP files 25 | run: find . -type f -name '*.php' -print0 | xargs -0 -n1 -P4 php -l -n | (! grep -v "No syntax errors detected" ) 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | *.iml 3 | ispconfig3_account/config/config.inc.php 4 | ispconfig3_autoselect/config/config.inc.php 5 | ispconfig3_fetchmail/config/config.inc.php 6 | ispconfig3_filter/config/config.inc.php 7 | ispconfig3_pass/config/config.inc.php 8 | ispconfig3_wblist/config/config.inc.php -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ispconfig3_roundcube 2 | ==================== 3 | 4 | > ISPConfig3 Plugins for Roundcube 5 | 6 | Documentation: https://github.com/w2c/ispconfig3_roundcube/wiki/ 7 | -------------------------------------------------------------------------------- /ispconfig3_account/account.js: -------------------------------------------------------------------------------- 1 | window.rcmail && rcmail.addEventListener('init', function (evt) { 2 | rcmail.register_command('plugin.ispconfig3_account', function () { 3 | rcmail.goto_url('plugin.ispconfig3_account') 4 | }, true); 5 | 6 | if (rcmail.env.action.startsWith('plugin.ispconfig3_account')) { 7 | if (rcmail.gui_objects.accountlist) { 8 | rcmail.account_list = new rcube_list_widget(rcmail.gui_objects.accountlist, 9 | {multiselect: false, draggable: false, keyboard: true}); 10 | 11 | rcmail.account_list 12 | .addEventListener('select', function (o) { rcmail.plugin_select(o); }) 13 | .init() 14 | .focus(); 15 | 16 | //rcmail.account_list.select_row('general'); 17 | } 18 | } 19 | 20 | // Compat shim for rcmail.confirm_dialog - undefined in Roundcube <= 1.4 21 | if (!rcmail.confirm_dialog) { 22 | rcmail.confirm_dialog = function(content, button_label, action) { 23 | if (confirm(content)) { action(this, rcmail); } 24 | } 25 | } 26 | }); 27 | 28 | rcube_webmail.prototype.plugin_select = function (list) { 29 | var id = list.get_single_selection(), add_url = '', target = window; 30 | 31 | if (id) { 32 | if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) { 33 | add_url = '&_framed=1'; 34 | target = window.frames[this.env.contentframe]; 35 | } 36 | 37 | if (id === 'general') { 38 | id = 'account.show'; 39 | } 40 | 41 | rcmail.location_href(this.env.comm_path + '&_action=plugin.ispconfig3_' + id + add_url, target, true); 42 | } 43 | 44 | return true; 45 | }; -------------------------------------------------------------------------------- /ispconfig3_account/config/config.inc.php.dist: -------------------------------------------------------------------------------- 1 | body *#alias-table[id$="alias-table"]:not([class="none"]) { 28 | table-layout: auto; 29 | } 30 | 31 | #alias-table td { 32 | text-align: left; 33 | vertical-align: middle; 34 | padding-left: 10px; 35 | } -------------------------------------------------------------------------------- /ispconfig3_account/skins/classic/templates/account.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | <roundcube:object name="pagetitle" /> 7 | 8 | 9 | 10 | 11 | 20 | 21 | 22 | 23 | 24 | 25 |
26 |
27 | 28 |
29 | 33 |
34 | 35 |
36 |
37 | 38 | -------------------------------------------------------------------------------- /ispconfig3_account/skins/classic/templates/general.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | <roundcube:object name="pagetitle" /> 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 |
18 | 19 |
20 | 21 |
22 | 23 | 24 | -------------------------------------------------------------------------------- /ispconfig3_account/skins/elastic/account.css: -------------------------------------------------------------------------------- 1 | .listing.iconized li.account > a:before{ 2 | content:"\f013" 3 | } -------------------------------------------------------------------------------- /ispconfig3_account/skins/elastic/templates/account.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 |
7 | 8 | 9 |
10 |
11 | 12 |
13 | 14 |
15 | 16 |
17 | 21 |
22 | 23 |
24 |
25 | 26 | -------------------------------------------------------------------------------- /ispconfig3_account/skins/elastic/templates/general.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 |
6 | 7 | -------------------------------------------------------------------------------- /ispconfig3_account/skins/larry/account.css: -------------------------------------------------------------------------------- 1 | #accountlist { 2 | position: absolute; 3 | top: 0; 4 | left: 0; 5 | width: 260px; 6 | bottom: 0; 7 | } -------------------------------------------------------------------------------- /ispconfig3_account/skins/larry/templates/account.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <roundcube:object name="pagetitle" /> 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 |
15 | 20 |
21 | 22 | 23 |
24 |
25 |
26 | 27 | 28 | -------------------------------------------------------------------------------- /ispconfig3_account/skins/larry/templates/general.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <roundcube:object name="pagetitle" /> 5 | 6 | 7 | 8 |

9 | 10 |

11 |
12 | 13 |
14 | 15 | 16 | -------------------------------------------------------------------------------- /ispconfig3_autoreply/autoreply.js: -------------------------------------------------------------------------------- 1 | window.rcmail && rcmail.addEventListener('init', function (evt) { 2 | rcmail.register_command('plugin.ispconfig3_autoreply.save', function () { 3 | var input_text = rcube_find_object('_autoreplybody'); 4 | var input_subject = rcube_find_object('_autoreplysubject'); 5 | var input_enabled = rcube_find_object('_autoreplyenabled'); 6 | 7 | if (input_text.value == '' && input_enabled.checked) { 8 | parent.rcmail.display_message(rcmail.gettext('ispconfig3_autoreply.textempty'), 'error'); 9 | input_text.focus(); 10 | } 11 | else if (input_subject.value == '') { 12 | parent.rcmail.display_message(rcmail.gettext('ispconfig3_autoreply.textempty'), 'error'); 13 | input_subject.focus(); 14 | } 15 | else { 16 | document.forms.autoreply_form.submit(); 17 | } 18 | }, true); 19 | 20 | if (rcmail.env.action.startsWith('plugin.ispconfig3_autoreply')) { 21 | $('#autoreplystarton').datetime({ 22 | chainTo: '#autoreplyendby' 23 | }); 24 | 25 | $('input:not(:hidden)').first().focus(); 26 | } 27 | }); -------------------------------------------------------------------------------- /ispconfig3_autoreply/localization/bg_BG.inc: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | <roundcube:object name="pagetitle" /> 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 |
15 | 16 |
17 | 18 |
19 | 20 |
21 |
22 | 23 |
24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /ispconfig3_autoreply/skins/elastic/jquery.ui.datetime.css: -------------------------------------------------------------------------------- 1 | .ui-datetime { 2 | top: -250px; 3 | } -------------------------------------------------------------------------------- /ispconfig3_autoreply/skins/elastic/templates/autoreply.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |
5 | 6 |
7 |
8 | 9 |
10 |
11 | 12 | -------------------------------------------------------------------------------- /ispconfig3_autoreply/skins/larry/templates/autoreply.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <roundcube:object name="pagetitle" /> 5 | 6 | 7 | 8 |

9 | 10 |

11 |
12 | 13 |
14 |
15 |
16 | 17 |
18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /ispconfig3_autoselect/config/config.inc.php.dist: -------------------------------------------------------------------------------- 1 | rcmail = rcmail::get_instance(); 12 | $this->require_plugin('ispconfig3_account'); 13 | 14 | $this->load_config('config/config.inc.php.dist'); 15 | if (file_exists($this->home . '/config/config.inc.php')) { 16 | $this->load_config('config/config.inc.php'); 17 | } 18 | 19 | $this->load_con_config(); 20 | 21 | $this->add_hook('authenticate', [$this, 'authenticate']); 22 | $this->add_hook('template_object_loginform', [$this, 'template_object_loginform']); 23 | 24 | $this->soap = new SoapClient(null, [ 25 | 'location' => $this->rcmail->config->get('soap_url') . 'index.php', 26 | 'uri' => $this->rcmail->config->get('soap_url'), 27 | $this->rcmail->config->get('soap_validate_cert') ?: 28 | 'stream_context' => stream_context_create(['ssl' => [ 29 | 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true 30 | ]]) 31 | ]); 32 | } 33 | 34 | function load_con_config() 35 | { 36 | $config = $this->api->dir . 'ispconfig3_account/config/config.inc.php'; 37 | if (file_exists($config)) { 38 | if (!$this->rcmail->config->load_from_file($config)) { 39 | rcube::raise_error(['code' => 527, 'type' => 'php', 'file' => __FILE__, 'line' => __LINE__, 40 | 'message' => "Failed to load config from $config"], true, false); 41 | } 42 | } 43 | else if (file_exists($config . ".dist")) { 44 | if (!$this->rcmail->config->load_from_file($config . '.dist')) { 45 | rcube::raise_error(['code' => 527, 'type' => 'php', 'file' => __FILE__, 'line' => __LINE__, 46 | 'message' => "Failed to load config from $config"], true, false); 47 | } 48 | } 49 | } 50 | 51 | function template_object_loginform($args) 52 | { 53 | $args['content'] = preg_replace("/.*?rcmloginhost.*?td>\s+<\/tr>/s", "", $args['content']); 54 | 55 | return $args; 56 | } 57 | 58 | function authenticate($args) 59 | { 60 | if (isset($_POST['_user'], $_POST['_pass'])) { 61 | $args['host'] = $this->getHost(rcube_utils::get_input_value('_user', rcube_utils::INPUT_POST)); 62 | } 63 | 64 | return $args; 65 | } 66 | 67 | private function getHost($user) 68 | { 69 | $host = ''; 70 | 71 | try { 72 | $session_id = $this->soap->login($this->rcmail->config->get('remote_soap_user'), $this->rcmail->config->get('remote_soap_pass')); 73 | $mail_user = $this->soap->mail_user_get($session_id, ['login' => $user]); 74 | // Alternatively also search the email field, this can differ from the login field for legacy reasons 75 | if (empty($mail_user)) { 76 | $mail_user = $this->soap->mail_user_get($session_id, ['email' => $user]); 77 | } 78 | 79 | if (count($mail_user) == 1) { 80 | $mail_server = $this->soap->server_get($session_id, $mail_user[0]['server_id'], 'server'); 81 | $host = $this->rcmail->config->get('autoselect_con_type') . $mail_server['hostname']; 82 | } 83 | 84 | $this->soap->logout($session_id); 85 | } 86 | catch (SoapFault $e) { 87 | $this->rcmail->output->command('display_message', 'Soap Error: ' . $e->getMessage(), 'error'); 88 | } 89 | 90 | return $host; 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /ispconfig3_fetchmail/config/config.inc.php.dist: -------------------------------------------------------------------------------- 1 | body *#fetch-table[id$="fetch-table"]:not([class="none"]) { 24 | table-layout: auto; 25 | } 26 | 27 | /**/ 28 | 29 | #fetch-table td.fetch { 30 | text-align: left; 31 | vertical-align: middle; 32 | cursor: pointer; 33 | } 34 | 35 | #selected { 36 | color: #FFFFFF; 37 | background-color: #CC3333; 38 | } 39 | 40 | #fetch-table td.control { 41 | text-align: right; 42 | vertical-align: middle; 43 | } 44 | 45 | #fetch-table a.button.icon { 46 | width: 16px; 47 | height: 16px; 48 | border: 0 none; 49 | padding: 0; 50 | margin: 0; 51 | 52 | display: inline-block; 53 | text-decoration: none; 54 | } 55 | 56 | #fetch-table a.button.icon.delete { 57 | background: url(delete.png) no-repeat; 58 | } 59 | 60 | #fetch-table a.button.icon.status-enabled { 61 | background: url(enabled.png) no-repeat; 62 | cursor: default; 63 | } 64 | 65 | #fetch-table a.button.icon.status-disabled { 66 | background: url(disabled.png) no-repeat; 67 | cursor: default; 68 | } -------------------------------------------------------------------------------- /ispconfig3_fetchmail/skins/classic/templates/fetchmail.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | <roundcube:object name="pagetitle" /> 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 |
15 | 16 |
17 | 18 | 19 |
20 | 21 |
22 |
23 | 24 |
25 |
26 | 27 | 28 | -------------------------------------------------------------------------------- /ispconfig3_fetchmail/skins/elastic/fetchmail.css: -------------------------------------------------------------------------------- 1 | .records-table tr.selected td { 2 | background-color: #ebf9ff; 3 | } 4 | 5 | #fetch-table td.fetch { 6 | cursor: pointer; 7 | } 8 | 9 | #fetch-table a.button.icon.status-enabled:before { 10 | content: "\f00c"; 11 | cursor: default; 12 | } 13 | 14 | #fetch-table a.button.icon.status-disabled:before { 15 | content: "\f00d"; 16 | cursor: default; 17 | } -------------------------------------------------------------------------------- /ispconfig3_fetchmail/skins/elastic/templates/fetchmail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |
5 | 6 | 7 |
8 |
9 | 10 |
11 |
12 | 13 | -------------------------------------------------------------------------------- /ispconfig3_fetchmail/skins/larry/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w2c/ispconfig3_roundcube/1a9fefa62d3eb2bb85c8936261589d8b7b0f6e6f/ispconfig3_fetchmail/skins/larry/delete.png -------------------------------------------------------------------------------- /ispconfig3_fetchmail/skins/larry/disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w2c/ispconfig3_roundcube/1a9fefa62d3eb2bb85c8936261589d8b7b0f6e6f/ispconfig3_fetchmail/skins/larry/disabled.png -------------------------------------------------------------------------------- /ispconfig3_fetchmail/skins/larry/enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w2c/ispconfig3_roundcube/1a9fefa62d3eb2bb85c8936261589d8b7b0f6e6f/ispconfig3_fetchmail/skins/larry/enabled.png -------------------------------------------------------------------------------- /ispconfig3_fetchmail/skins/larry/fetchmail.css: -------------------------------------------------------------------------------- 1 | #fetch-table td.fetch { 2 | cursor: pointer; 3 | } 4 | 5 | #fetch-table a.button.icon { 6 | width: 16px; 7 | height: 16px; 8 | border: 0 none; 9 | box-shadow: none; 10 | padding: 0; 11 | margin: 0; 12 | } 13 | 14 | #fetch-table a.button.icon.delete { 15 | background: url(delete.png) no-repeat; 16 | } 17 | 18 | #fetch-table a.button.icon.status-enabled { 19 | background: url(enabled.png) no-repeat; 20 | cursor: default; 21 | } 22 | 23 | #fetch-table a.button.icon.status-disabled { 24 | background: url(disabled.png) no-repeat; 25 | cursor: default; 26 | } -------------------------------------------------------------------------------- /ispconfig3_fetchmail/skins/larry/templates/fetchmail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <roundcube:object name="pagetitle" /> 5 | 6 | 7 | 8 |

9 | 10 |

11 |
12 | 13 | 14 |
15 |
16 |
17 | 18 |
19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /ispconfig3_filter/config/config.inc.php.dist: -------------------------------------------------------------------------------- 1 | body *#rule-table[id$="rule-table"]:not([class="none"]) { 24 | table-layout: auto; 25 | } 26 | 27 | /**/ 28 | 29 | #rule-table td.rule { 30 | text-align: left; 31 | vertical-align: middle; 32 | cursor: pointer; 33 | } 34 | 35 | #selected { 36 | color: #FFFFFF; 37 | background-color: #CC3333; 38 | } 39 | 40 | #rule-table td.control { 41 | text-align: right; 42 | vertical-align: middle; 43 | } 44 | 45 | #rule-table a.button.icon { 46 | width: 16px; 47 | height: 16px; 48 | border: 0 none; 49 | padding: 0; 50 | margin: 0; 51 | 52 | display: inline-block; 53 | text-decoration: none; 54 | } 55 | 56 | #rule-table a.button.icon.delete { 57 | background: url(delete.png) no-repeat; 58 | } 59 | 60 | #rule-table a.button.icon.status-enabled { 61 | background: url(enabled.png) no-repeat; 62 | cursor: default; 63 | } 64 | 65 | #rule-table a.button.icon.status-disabled { 66 | background: url(disabled.png) no-repeat; 67 | cursor: default; 68 | } -------------------------------------------------------------------------------- /ispconfig3_filter/skins/classic/templates/filter.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | <roundcube:object name="pagetitle" /> 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 |
15 | 16 |
17 | 18 | 19 |
20 | 21 |
22 |
23 | 24 |
25 |
26 | 27 | 28 | -------------------------------------------------------------------------------- /ispconfig3_filter/skins/elastic/filter.css: -------------------------------------------------------------------------------- 1 | .records-table tr.selected td { 2 | background-color: #ebf9ff; 3 | } 4 | 5 | #rule-table td.rule { 6 | cursor: pointer; 7 | } 8 | 9 | #rule-table a.button.icon.status-enabled:before { 10 | content: "\f00c"; 11 | cursor: default; 12 | } 13 | 14 | #rule-table a.button.icon.status-disabled:before { 15 | content: "\f00d"; 16 | cursor: default; 17 | } -------------------------------------------------------------------------------- /ispconfig3_filter/skins/elastic/templates/filter.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |
5 | 6 | 7 |
8 |
9 | 10 |
11 |
12 | 13 | -------------------------------------------------------------------------------- /ispconfig3_filter/skins/larry/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w2c/ispconfig3_roundcube/1a9fefa62d3eb2bb85c8936261589d8b7b0f6e6f/ispconfig3_filter/skins/larry/delete.png -------------------------------------------------------------------------------- /ispconfig3_filter/skins/larry/disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w2c/ispconfig3_roundcube/1a9fefa62d3eb2bb85c8936261589d8b7b0f6e6f/ispconfig3_filter/skins/larry/disabled.png -------------------------------------------------------------------------------- /ispconfig3_filter/skins/larry/enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w2c/ispconfig3_roundcube/1a9fefa62d3eb2bb85c8936261589d8b7b0f6e6f/ispconfig3_filter/skins/larry/enabled.png -------------------------------------------------------------------------------- /ispconfig3_filter/skins/larry/filter.css: -------------------------------------------------------------------------------- 1 | #rule-table td.rule { 2 | cursor: pointer; 3 | } 4 | 5 | #rule-table a.button.icon { 6 | width: 16px; 7 | height: 16px; 8 | border: 0 none; 9 | box-shadow: none; 10 | padding: 0; 11 | margin: 0; 12 | } 13 | 14 | #rule-table a.button.icon.delete { 15 | background: url(delete.png) no-repeat; 16 | } 17 | 18 | #rule-table a.button.icon.status-enabled { 19 | background: url(enabled.png) no-repeat; 20 | cursor: default; 21 | } 22 | 23 | #rule-table a.button.icon.status-disabled { 24 | background: url(disabled.png) no-repeat; 25 | cursor: default; 26 | } -------------------------------------------------------------------------------- /ispconfig3_filter/skins/larry/templates/filter.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <roundcube:object name="pagetitle" /> 5 | 6 | 7 | 8 |

9 | 10 |

11 |
12 | 13 | 14 |
15 |
16 |
17 | 18 |
19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /ispconfig3_forward/forward.js: -------------------------------------------------------------------------------- 1 | window.rcmail && rcmail.addEventListener('init', function (evt) { 2 | rcmail.register_command('plugin.ispconfig3_forward.save', function () { 3 | var input_address = rcube_find_object('_forwardingaddress'); 4 | 5 | if (input_address.value == '') { 6 | parent.rcmail.display_message(rcmail.gettext('ispconfig3_forward.forwardingempty'), 'error'); 7 | } 8 | else if (!rcube_check_email(input_address.value, false)) { 9 | parent.rcmail.display_message(rcmail.gettext('ispconfig3_forward.invalidaddress'), 'error'); 10 | input_address.focus(); 11 | } 12 | else { 13 | document.forms.forward_form.submit(); 14 | } 15 | }, true); 16 | 17 | rcmail.register_command('plugin.ispconfig3_forward.del', function (email) { 18 | rcmail.confirm_dialog(rcmail.gettext('ispconfig3_forward.forwarddelconfirm'), 'delete', function(e, ref) { 19 | var lock = ref.set_busy(true, 'loading'); 20 | ref.http_request('plugin.ispconfig3_forward.save', '_type=del&_forwardingaddress=' + email, lock); 21 | document.getElementById('rule-table').deleteRow(document.getElementById('rule_' + email).rowIndex); 22 | }); 23 | 24 | return false; 25 | }, true); 26 | 27 | if (rcmail.env.action.startsWith('plugin.ispconfig3_forward')) { 28 | // Prevent implicit form submission using the enter key. Otherwise, one could bypass the input validation routines. 29 | // See https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#implicit-submission 30 | document.getElementById('forward_form').addEventListener('keypress', function(e) { 31 | var key = rcube_event.get_keycode(e); 32 | if (key === 13) { 33 | e.preventDefault(); 34 | } 35 | }); 36 | 37 | $('input:not(:hidden)').first().focus(); 38 | } 39 | }); -------------------------------------------------------------------------------- /ispconfig3_forward/localization/cs_CZ.inc: -------------------------------------------------------------------------------- 1 | body *#rule-table[id$="rule-table"]:not([class="none"]) { 24 | table-layout: auto; 25 | } 26 | 27 | #rule-table td.rule { 28 | text-align: left; 29 | vertical-align: middle; 30 | cursor: pointer; 31 | } 32 | 33 | #selected { 34 | color: #FFFFFF; 35 | background-color: #CC3333; 36 | } 37 | 38 | #rule-table a.button.delete { 39 | background: url(delete.png) no-repeat; 40 | width: 16px; 41 | height: 16px; 42 | border: 0 none; 43 | padding: 0; 44 | margin: 0; 45 | 46 | display: inline-block; 47 | text-decoration: none; 48 | } -------------------------------------------------------------------------------- /ispconfig3_forward/skins/classic/templates/forward.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | <roundcube:object name="pagetitle" /> 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 |
16 | 17 |
18 | 19 | 20 |
21 | 22 |
23 |
24 | 25 |
26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /ispconfig3_forward/skins/elastic/templates/forward.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |
5 | 6 | 7 |
8 |
9 | 10 |
11 |
12 | 13 | -------------------------------------------------------------------------------- /ispconfig3_forward/skins/larry/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w2c/ispconfig3_roundcube/1a9fefa62d3eb2bb85c8936261589d8b7b0f6e6f/ispconfig3_forward/skins/larry/delete.png -------------------------------------------------------------------------------- /ispconfig3_forward/skins/larry/forward.css: -------------------------------------------------------------------------------- 1 | #rule-table a.button.delete { 2 | background: url(delete.png) no-repeat; 3 | width: 16px; 4 | height: 16px; 5 | border: 0 none; 6 | box-shadow: none; 7 | padding: 0; 8 | margin: 0; 9 | } -------------------------------------------------------------------------------- /ispconfig3_forward/skins/larry/templates/forward.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <roundcube:object name="pagetitle" /> 5 | 6 | 7 | 8 | 9 |

10 | 11 |

12 |
13 | 14 | 15 |
16 |
17 |
18 | 19 |
20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /ispconfig3_pass/config/config.inc.php.dist: -------------------------------------------------------------------------------- 1 | 20 && score <= 40) { 45 | color = 'FAA732'; 46 | } else if (score > 40 && score <= 60) { 47 | color = 'FAF332'; 48 | } else if (score > 60 && score <= 80) { 49 | color = '5BB7A9'; 50 | } else if (score > 80) { 51 | color = '5BB75B'; 52 | } 53 | } 54 | 55 | passCheckValue.css({"background": '#' + color}); 56 | passCheck.progressbar("option", { 57 | value: score 58 | }); 59 | }); 60 | 61 | $('input:not(:hidden)').first().focus(); 62 | } 63 | }); -------------------------------------------------------------------------------- /ispconfig3_pass/skins/classic/pass.css: -------------------------------------------------------------------------------- 1 | #pass-check { 2 | width: 150px; 3 | float: left; 4 | margin-top: 1px; 5 | margin-left: 10px; 6 | height: 17px; 7 | } 8 | 9 | #newpasswd { 10 | float: left; 11 | } 12 | 13 | .ui-widget-header { 14 | border: 1px solid #FAFAFA; 15 | } -------------------------------------------------------------------------------- /ispconfig3_pass/skins/classic/templates/pass.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | <roundcube:object name="pagetitle" /> 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 |
15 | 16 |
17 | 18 |
19 | 20 |
21 |
22 | 23 |
24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /ispconfig3_pass/skins/elastic/pass.css: -------------------------------------------------------------------------------- 1 | #pass-check { 2 | float: right; 3 | /*height: 100%;*/ 4 | width: 150px; 5 | margin-left: 10px; 6 | } 7 | 8 | #newpasswd { 9 | float: left; 10 | width: calc(100% - 160px); 11 | } 12 | 13 | .ui-progressbar { 14 | height: 2.4rem; 15 | } 16 | 17 | .ui-progressbar .ui-progressbar-value { 18 | margin: 0; 19 | } -------------------------------------------------------------------------------- /ispconfig3_pass/skins/elastic/templates/pass.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |
5 | 6 |
7 |
8 | 9 |
10 |
11 | 12 | -------------------------------------------------------------------------------- /ispconfig3_pass/skins/larry/pass.css: -------------------------------------------------------------------------------- 1 | #pass-check { 2 | float: left; 3 | width: 150px; 4 | /*margin-top: 1px;*/ 5 | margin-left: 10px; 6 | } 7 | 8 | #newpasswd { 9 | float: left; 10 | } 11 | 12 | .ui-widget-header { 13 | border: 1px solid #FAFAFA; 14 | } -------------------------------------------------------------------------------- /ispconfig3_pass/skins/larry/templates/pass.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <roundcube:object name="pagetitle" /> 5 | 6 | 7 | 8 |

9 | 10 |

11 |
12 | 13 |
14 |
15 |
16 | 17 |
18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /ispconfig3_spam/localization/bg_BG.inc: -------------------------------------------------------------------------------- 1 | body *#spam-table[id$="spam-table"]:not([class="none"]) { 28 | table-layout: auto; 29 | } 30 | 31 | /**/ 32 | 33 | #spam-table td.policy { 34 | text-align: left; 35 | vertical-align: middle; 36 | cursor: pointer; 37 | } 38 | 39 | #selected { 40 | color: #FFFFFF; 41 | background-color: #CC3333; 42 | } 43 | 44 | #spam-table td.value { 45 | /*text-align: center;*/ 46 | vertical-align: middle; 47 | } -------------------------------------------------------------------------------- /ispconfig3_spam/skins/classic/templates/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w2c/ispconfig3_roundcube/1a9fefa62d3eb2bb85c8936261589d8b7b0f6e6f/ispconfig3_spam/skins/classic/templates/delete.png -------------------------------------------------------------------------------- /ispconfig3_spam/skins/classic/templates/disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w2c/ispconfig3_roundcube/1a9fefa62d3eb2bb85c8936261589d8b7b0f6e6f/ispconfig3_spam/skins/classic/templates/disabled.png -------------------------------------------------------------------------------- /ispconfig3_spam/skins/classic/templates/enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w2c/ispconfig3_roundcube/1a9fefa62d3eb2bb85c8936261589d8b7b0f6e6f/ispconfig3_spam/skins/classic/templates/enabled.png -------------------------------------------------------------------------------- /ispconfig3_spam/skins/classic/templates/spam.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | <roundcube:object name="pagetitle" /> 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 |
15 | 16 |
17 | 18 | 19 |
20 | 21 |
22 |
23 | 24 |
25 |
26 | 27 | 28 | -------------------------------------------------------------------------------- /ispconfig3_spam/skins/elastic/spam.css: -------------------------------------------------------------------------------- 1 | .records-table tr.selected td { 2 | background-color: #ebf9ff; 3 | } -------------------------------------------------------------------------------- /ispconfig3_spam/skins/elastic/templates/spam.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |
5 | 6 | 7 |
8 |
9 | 10 |
11 |
12 | 13 | -------------------------------------------------------------------------------- /ispconfig3_spam/skins/larry/spam.css: -------------------------------------------------------------------------------- 1 | /*#spam-cont { 2 | height: 182px; 3 | overflow: auto; 4 | }*/ -------------------------------------------------------------------------------- /ispconfig3_spam/skins/larry/templates/spam.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <roundcube:object name="pagetitle" /> 5 | 6 | 7 | 8 |

9 | 10 |

11 |
12 | 13 | 14 |
15 |
16 |
17 | 18 |
19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /ispconfig3_spam/spam.js: -------------------------------------------------------------------------------- 1 | window.rcmail && rcmail.addEventListener('init', function (evt) { 2 | rcmail.register_command('plugin.ispconfig3_spam.save', function () { 3 | document.forms.spam_form.submit(); 4 | }, true); 5 | }); -------------------------------------------------------------------------------- /ispconfig3_wblist/config/config.inc.php.dist: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | <roundcube:object name="pagetitle" /> 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 |
15 | 16 |
17 | 18 | 19 |
20 | 21 |
22 |
23 | 24 |
25 |
26 | 27 | 28 | -------------------------------------------------------------------------------- /ispconfig3_wblist/skins/classic/wblist.css: -------------------------------------------------------------------------------- 1 | #rule-cont { 2 | border: 1px solid #999999; 3 | background-color: #F9F9F9; 4 | height: 163px; 5 | overflow: auto; 6 | width: 450px; 7 | } 8 | 9 | body.rule-table { 10 | margin: 0; 11 | background-color: #F9F9F9; 12 | } 13 | 14 | #rule-table { 15 | width: 100%; 16 | display: table; 17 | table-layout: fixed; 18 | /* css hack for IE */ 19 | width: expression('auto'); 20 | } 21 | 22 | /* safari hack \*/ 23 | html > body *#rule-table[id$="rule-table"]:not([class="none"]) { 24 | table-layout: auto; 25 | } 26 | 27 | /**/ 28 | #rule-table td.rule { 29 | text-align: left; 30 | vertical-align: middle; 31 | cursor: pointer; 32 | } 33 | 34 | #selected { 35 | color: #FFFFFF; 36 | background-color: #CC3333; 37 | } 38 | 39 | #rule-table td.control { 40 | text-align: right; 41 | vertical-align: middle; 42 | } 43 | 44 | #rule-table a.button.icon { 45 | width: 16px; 46 | height: 16px; 47 | border: 0 none; 48 | padding: 0; 49 | margin: 0; 50 | 51 | display: inline-block; 52 | text-decoration: none; 53 | } 54 | 55 | #rule-table a.button.icon.delete { 56 | background: url(delete.png) no-repeat; 57 | } 58 | 59 | #rule-table a.button.icon.status-enabled { 60 | background: url(enabled.png) no-repeat; 61 | cursor: default; 62 | } 63 | 64 | #rule-table a.button.icon.status-disabled { 65 | background: url(disabled.png) no-repeat; 66 | cursor: default; 67 | } 68 | 69 | #rule-table a.button.icon.whitelist { 70 | background: url(whitelist.png) no-repeat; 71 | cursor: default; 72 | } 73 | 74 | #rule-table a.button.icon.blacklist { 75 | background: url(blacklist.png) no-repeat; 76 | cursor: default; 77 | } -------------------------------------------------------------------------------- /ispconfig3_wblist/skins/classic/whitelist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w2c/ispconfig3_roundcube/1a9fefa62d3eb2bb85c8936261589d8b7b0f6e6f/ispconfig3_wblist/skins/classic/whitelist.png -------------------------------------------------------------------------------- /ispconfig3_wblist/skins/elastic/templates/wblist.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |
5 | 6 | 7 |
8 |
9 | 10 |
11 |
12 | 13 | -------------------------------------------------------------------------------- /ispconfig3_wblist/skins/elastic/wblist.css: -------------------------------------------------------------------------------- 1 | .records-table tr.selected td { 2 | background-color: #ebf9ff; 3 | } 4 | 5 | #rule-table td.rule { 6 | cursor: pointer; 7 | } 8 | 9 | #rule-table a.button.icon.status-enabled:before { 10 | content: "\f00c"; 11 | cursor: default; 12 | } 13 | 14 | #rule-table a.button.icon.status-disabled:before { 15 | content: "\f00d"; 16 | cursor: default; 17 | } 18 | 19 | #rule-table a.button.icon.whitelist:before { 20 | content: "\f15b"; 21 | font-weight: 400; 22 | cursor: default; 23 | } 24 | 25 | #rule-table a.button.icon.blacklist:before { 26 | content: "\f15b"; 27 | cursor: default; 28 | } -------------------------------------------------------------------------------- /ispconfig3_wblist/skins/larry/blacklist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w2c/ispconfig3_roundcube/1a9fefa62d3eb2bb85c8936261589d8b7b0f6e6f/ispconfig3_wblist/skins/larry/blacklist.png -------------------------------------------------------------------------------- /ispconfig3_wblist/skins/larry/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w2c/ispconfig3_roundcube/1a9fefa62d3eb2bb85c8936261589d8b7b0f6e6f/ispconfig3_wblist/skins/larry/delete.png -------------------------------------------------------------------------------- /ispconfig3_wblist/skins/larry/disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w2c/ispconfig3_roundcube/1a9fefa62d3eb2bb85c8936261589d8b7b0f6e6f/ispconfig3_wblist/skins/larry/disabled.png -------------------------------------------------------------------------------- /ispconfig3_wblist/skins/larry/enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w2c/ispconfig3_roundcube/1a9fefa62d3eb2bb85c8936261589d8b7b0f6e6f/ispconfig3_wblist/skins/larry/enabled.png -------------------------------------------------------------------------------- /ispconfig3_wblist/skins/larry/templates/wblist.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <roundcube:object name="pagetitle" /> 5 | 6 | 7 | 8 |

9 | 10 |

11 |
12 | 13 | 14 |
15 |
16 |
17 | 18 |
19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /ispconfig3_wblist/skins/larry/wblist.css: -------------------------------------------------------------------------------- 1 | #rule-table a.button.icon { 2 | width: 16px; 3 | height: 16px; 4 | border: 0 none; 5 | box-shadow: none; 6 | padding: 0; 7 | margin: 0; 8 | } 9 | 10 | #rule-table td.rule { 11 | cursor: pointer; 12 | } 13 | 14 | #rule-table a.button.icon.delete { 15 | background: url(delete.png) no-repeat; 16 | } 17 | 18 | #rule-table a.button.icon.status-enabled { 19 | background: url(enabled.png) no-repeat; 20 | cursor: default; 21 | } 22 | 23 | #rule-table a.button.icon.status-disabled { 24 | background: url(disabled.png) no-repeat; 25 | cursor: default; 26 | } 27 | 28 | #rule-table a.button.icon.whitelist { 29 | background: url(whitelist.png) no-repeat; 30 | cursor: default; 31 | } 32 | 33 | #rule-table a.button.icon.blacklist { 34 | background: url(blacklist.png) no-repeat; 35 | cursor: default; 36 | } -------------------------------------------------------------------------------- /ispconfig3_wblist/skins/larry/whitelist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w2c/ispconfig3_roundcube/1a9fefa62d3eb2bb85c8936261589d8b7b0f6e6f/ispconfig3_wblist/skins/larry/whitelist.png -------------------------------------------------------------------------------- /ispconfig3_wblist/wblist.js: -------------------------------------------------------------------------------- 1 | window.rcmail && rcmail.addEventListener('init', function (evt) { 2 | rcmail.register_command('plugin.ispconfig3_wblist.save', function () { 3 | var input_email = rcube_find_object('_wblistemail'); 4 | 5 | if (input_email.value == '') { 6 | parent.rcmail.display_message(rcmail.gettext('ispconfig3_wblist.textempty'), 'error'); 7 | } 8 | // Test for user@example.com or @example.com syntax 9 | else if (!rcube_check_email(input_email.value, false) && 10 | !rcube_check_email('example' + input_email.value, false)) { 11 | parent.rcmail.display_message(rcmail.gettext('ispconfig3_wblist.invalidaddress'), 'error'); 12 | input_email.focus(); 13 | } 14 | else { 15 | document.forms.wblist_form.submit(); 16 | } 17 | }, true); 18 | 19 | rcmail.register_command('plugin.ispconfig3_wblist.del', function (id, type) { 20 | rcmail.confirm_dialog(rcmail.gettext('ispconfig3_wblist.wblistdelconfirm'), 'delete', function(e, ref) { 21 | var lock = ref.set_busy(true, 'loading'); 22 | ref.http_request('plugin.ispconfig3_wblist.del', '_id=' + id + '&_type=' + type, lock); 23 | document.getElementById('rule-table').deleteRow(document.getElementById('rule_' + id).rowIndex); 24 | }); 25 | 26 | return false; 27 | }, true); 28 | 29 | if (rcmail.env.action.startsWith('plugin.ispconfig3_wblist')) { 30 | // Prevent implicit form submission using the enter key. Otherwise, one could bypass the input validation routines. 31 | // See https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#implicit-submission 32 | document.getElementById('wblist_form').addEventListener('keypress', function(e) { 33 | var key = rcube_event.get_keycode(e); 34 | if (key === 13) { 35 | e.preventDefault(); 36 | } 37 | }); 38 | 39 | $('input:not(:hidden)').first().focus(); 40 | } 41 | }); 42 | 43 | function wb_edit(id, type) { 44 | rcmail.location_href(rcmail.env.comm_path + '&_action=plugin.ispconfig3_wblist&_id=' + id + '&_type=' + type, window, true); 45 | } --------------------------------------------------------------------------------