pax_global_header00006660000000000000000000000064121146752430014517gustar00rootroot0000000000000052 comment=9cfb2c1a9e2dc470590f0a884c4a48e9188efae5 Roundcube-Plugin-QuickRules-0.9.0/000077500000000000000000000000001211467524300167745ustar00rootroot00000000000000Roundcube-Plugin-QuickRules-0.9.0/CHANGELOG000066400000000000000000000007271211467524300202140ustar00rootroot00000000000000Roundcube Webmail Quickrules ============================ Version 1.4 (2013-03-03, rc-0.9) ================================================= * rename default skin to classic (c40419bdfe) * rcube_ui > rcube_utils (r6091) * Update for Roundcube framework Version 1.3 (2012-06-19, rc-0.8) ================================================= * Update after r5781 * Add inital support for Larry * Update after r5716 * Add required plugin code (r4424) * Initial versionRoundcube-Plugin-QuickRules-0.9.0/README.md000066400000000000000000000021441211467524300202540ustar00rootroot00000000000000Roundcube Webmail Quickrules ============================ This plugin adds a button to the message list to allow the quick creation of rules in the SieveRules plugin. Infomration from selected emails is used to prefile the new rule form. Requirements ------------ * [Roundcube SieveRules plugin][rcsr] License ------- This plugin is released under the [GNU General Public License Version 3+][gpl]. Even if skins might contain some programming work, they are not considered as a linked part of the plugin and therefore skins DO NOT fall under the provisions of the GPL license. See the README file located in the core skins folder for details on the skin license. Install ------- * Place this plugin folder into plugins directory of Roundcube * Add quickrules to $rcmail_config['plugins'] in your Roundcube config **NB:** When downloading the plugin from GitHub you will need to create a directory called quickrules and place the files in there, ignoring the root directory in the downloaded archive. [rcsr]: http://github.com/JohnDoh/Roundcube-Plugin-SieveRules-Managesieve/ [gpl]: http://www.gnu.org/licenses/gpl.htmlRoundcube-Plugin-QuickRules-0.9.0/localization/000077500000000000000000000000001211467524300214645ustar00rootroot00000000000000Roundcube-Plugin-QuickRules-0.9.0/localization/cs_CZ.inc000066400000000000000000000001761211467524300231640ustar00rootroot00000000000000Roundcube-Plugin-QuickRules-0.9.0/localization/de_CH.inc000066400000000000000000000003311211467524300231160ustar00rootroot00000000000000Roundcube-Plugin-QuickRules-0.9.0/localization/de_DE.inc000066400000000000000000000003311211467524300231140ustar00rootroot00000000000000Roundcube-Plugin-QuickRules-0.9.0/localization/en_GB.inc000066400000000000000000000003001211467524300231220ustar00rootroot00000000000000Roundcube-Plugin-QuickRules-0.9.0/localization/en_US.inc000066400000000000000000000003001211467524300231610ustar00rootroot00000000000000Roundcube-Plugin-QuickRules-0.9.0/localization/hu_HU.inc000066400000000000000000000002101211467524300231600ustar00rootroot00000000000000Roundcube-Plugin-QuickRules-0.9.0/localization/it_IT.inc000066400000000000000000000003101211467524300231610ustar00rootroot00000000000000Roundcube-Plugin-QuickRules-0.9.0/localization/pl_PL.inc000066400000000000000000000001671211467524300231710ustar00rootroot00000000000000Roundcube-Plugin-QuickRules-0.9.0/localization/pt_BR.inc000066400000000000000000000001731211467524300231660ustar00rootroot00000000000000Roundcube-Plugin-QuickRules-0.9.0/localization/pt_PT.inc000066400000000000000000000001731211467524300232060ustar00rootroot00000000000000Roundcube-Plugin-QuickRules-0.9.0/package.xml000066400000000000000000000062641211467524300211210ustar00rootroot00000000000000 quickrules http://github.com/JohnDoh/Roundcube-Plugin-QuickRules/ Adds a button to the message list to allow the quick creation of rules in the SieveRules plugin Adds a button to the message list to allow the quick creation of rules in the SieveRules plugin. Infomration from selected emails is used to prefile the new rule form. Philip Weir JohnDoh roundcube@tehinterweb.co.uk yes 2013-02-24 1.4 1.4 stable stable GNU GPLv3+ - 5.2.1 1.7.0 sieverules http://github.com/JohnDoh/Roundcube-Plugin-SieveRules-Managesieve/ 1.15 Roundcube-Plugin-QuickRules-0.9.0/quickrules.js000066400000000000000000000132551211467524300215270ustar00rootroot00000000000000/** * QuickRules plugin script */ function rcmail_quickrules() { if (!rcmail.env.uid && (!rcmail.message_list || !rcmail.message_list.get_selection().length)) return; var uids = rcmail.env.uid ? rcmail.env.uid : rcmail.message_list.get_selection().join(','); var lock = rcmail.set_busy(true, 'loading'); rcmail.http_post('plugin.quickrules.add', '_uid='+uids+'&_mbox='+urlencode(rcmail.env.mailbox), lock); } function quickrules_add_filter() { rcmail.command('plugin.sieverules.add'); } function quickrules_setup_rules() { var rulesTable = rcube_find_object('rules-table'); var actsTable = rcube_find_object('actions-table'); if (rcmail_quickrules_rules.length < 1) return; for (i = 1; i < rcmail_quickrules_rules.length; i++) rcmail.command('plugin.sieverules.add_rule','', rulesTable.tBodies[0].rows[0]); var headers = document.getElementsByName('_selheader[]'); var ops = document.getElementsByName('_operator[]'); var targets = document.getElementsByName('_target[]'); var otherHeaders = document.getElementsByName('_header[]'); var headerParts = ""; for (var i = 1; i < headers.length; i++) { $(headers[i]).val(rcmail_quickrules_rules[i-1].header); $(ops[i]).val(rcmail_quickrules_rules[i-1].op); headerParts = ""; // other headers if (rcmail_quickrules_rules[i-1].header.indexOf('other') == 0) { headerParts = rcmail_quickrules_rules[i-1].header.split('::'); rcmail_quickrules_rules[i-1].header = 'header::other' $(headers[i]).val(rcmail_quickrules_rules[i-1].header); } // check values set ok before adding rule if ($(headers[i]).val() == rcmail_quickrules_rules[i-1].header && $(ops[i]).val() == rcmail_quickrules_rules[i-1].op) { rcmail.sieverules_header_select(headers[i]); if (headerParts) $(otherHeaders[i]).val(headerParts[1]); // set the op again (header onchange resets it) $(ops[i]).val(rcmail_quickrules_rules[i-1].op); rcmail.sieverules_rule_op_select(ops[i]); targets[i].value = rcmail_quickrules_rules[i-1].target; } else { headers[i].selectedIndex = 0; ops[i].selectedIndex = 0; } } if (rcmail_quickrules_actions.length < 1) return; for (i = 1; i < rcmail_quickrules_actions.length; i++) rcmail.command('plugin.sieverules.add_action','', actsTable.tBodies[0].rows[0]); var acts = document.getElementsByName('_act[]'); var folders = document.getElementsByName('_folder[]'); var flags = document.getElementsByName('_imapflags[]'); for (var i = 1; i < acts.length; i++) { $(acts[i]).val(rcmail_quickrules_actions[i-1].act); // check for imap4flags if (rcmail_quickrules_actions[i-1].act == 'imapflags') { if ($(acts[i]).val() != rcmail_quickrules_actions[i-1].act) $(acts[i]).val('imap4flags'); // check values set ok before adding action if ($(acts[i]).val() == rcmail_quickrules_actions[i-1].act) { rcmail.sieverules_action_select(acts[i]); $(flags[i]).val(rcmail_quickrules_actions[i-1].props); } else { acts[i].selectedIndex = 0; } } else { // check values set ok before adding action if ($(acts[i]).val() == rcmail_quickrules_actions[i-1].act) { rcmail.sieverules_action_select(acts[i]); $(folders[i]).val(rcmail_quickrules_actions[i-1].props); } else { acts[i].selectedIndex = 0; } } } } function rcmail_quickrules_status(command) { switch (command) { case 'beforedelete': if (!rcmail.env.flag_for_deletion && rcmail.env.trash_mailbox && rcmail.env.mailbox != rcmail.env.trash_mailbox && (rcmail.message_list && !rcmail.message_list.shiftkey)) rcmail.enable_command('plugin.quickrules.create', false); break; case 'beforemove': case 'beforemoveto': rcmail.enable_command('plugin.quickrules.create', false); break; case 'aftermove': case 'aftermoveto': if (rcmail.env.action == 'show') rcmail.enable_command('plugin.quickrules.create', true); break; case 'afterpurge': case 'afterexpunge': if (!rcmail.env.messagecount && rcmail.task == 'mail') rcmail.enable_command('plugin.quickrules.create', false); break; } } function rcmail_quickrules_init() { if (rcmail.env.action == 'plugin.sieverules') quickrules_add_filter(); if (rcmail.env.action == 'plugin.sieverules.add') quickrules_setup_rules(); if (window.rcm_contextmenu_register_command) rcm_contextmenu_register_command('quickrules', 'rcmail_quickrules', rcmail.gettext('quickrules.createfilter'), 'moveto', 'after', false); } $(document).ready(function() { if (window.rcmail) { rcmail.addEventListener('init', function(evt) { // register command (directly enable in message view mode) rcmail.register_command('plugin.quickrules.create', rcmail_quickrules, rcmail.env.uid); if (rcmail.message_list && rcmail.env.junk_mailbox) { rcmail.message_list.addEventListener('select', function(list) { rcmail.enable_command('plugin.quickrules.create', list.get_single_selection() != null); }); } }); rcmail.add_onload('rcmail_quickrules_init()'); // update button activation after external events rcmail.addEventListener('beforedelete', function(props) { rcmail_quickrules_status('beforedelete'); } ); rcmail.addEventListener('beforemove', function(props) { rcmail_quickrules_status('beforemove'); } ); rcmail.addEventListener('beforemoveto', function(props) { rcmail_quickrules_status('beforemoveto'); } ); rcmail.addEventListener('aftermove', function(props) { rcmail_quickrules_status('aftermove'); } ); rcmail.addEventListener('aftermoveto', function(props) { rcmail_quickrules_status('aftermoveto'); } ); rcmail.addEventListener('afterpurge', function(props) { rcmail_quickrules_status('afterpurge'); } ); rcmail.addEventListener('afterexpunge', function(props) { rcmail_quickrules_status('afterexpunge'); } ); } });Roundcube-Plugin-QuickRules-0.9.0/quickrules.php000066400000000000000000000117441211467524300217030ustar00rootroot00000000000000 value private $headers = array('subject' => 'header::Subject', 'from' => 'address::From', 'to' => 'address::To', 'cc' => 'address::Cc', 'bcc' => 'address::Bcc', 'envelopeto' => 'envelope::To', 'envelopefrom' => 'envelope::From' ); private $operators = array('filtercontains' => 'contains', 'filternotcontains' => 'notcontains', 'filteris' => 'is', 'filterisnot' => 'notis', 'filterexists' => 'exists', 'filternotexists' => 'notexists' ); private $flags = array('flagread' => '\\Seen', 'flagdeleted' => '\\Deleted', 'flaganswered' => '\\Answered', 'flagdraft' => '\\Draft', 'flagflagged' => '\\\\Flagged' ); private $additional_headers = array('List-Id'); function init() { // load required plugin $this->require_plugin('sieverules'); $rcmail = rcube::get_instance(); $this->register_action('plugin.quickrules.add', array($this, 'init_rule')); if ($rcmail->task == 'mail' && ($rcmail->action == '' || $rcmail->action == 'show')) { $this->add_texts('localization', true); $this->include_script('quickrules.js'); $this->include_stylesheet($this->local_skin_path() .'/quickrules.css'); if ($rcmail->output->browser->ie && $rcmail->output->browser->ver == 6) $this->include_stylesheet($this->local_skin_path() . '/ie6hacks.css'); $this->add_button(array('command' => 'plugin.quickrules.create', 'type' => 'link', 'class' => 'button buttonPas quickrules disabled', 'classact' => 'button quickrules', 'classsel' => 'button quickrulesSel', 'title' => 'quickrules.createfilterbased', 'label' => 'quickrules.createfilter'), 'toolbar'); } if ($_SESSION['plugin.quickrules']) { $this->add_hook('storage_init', array($this, 'fetch_headers')); $this->_create_rule(); } } function init_rule() { $_SESSION['plugin.quickrules'] = true; $_SESSION['plugin.quickrules.uids'] = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST); $_SESSION['plugin.quickrules.mbox'] = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST); rcube::get_instance()->output->redirect(array('task' => 'settings', 'action' => 'plugin.sieverules')); } function fetch_headers($attr) { $attr['fetch_headers'] .= trim($attr['fetch_headers'] . join(' ', $this->additional_headers)); return($attr); } private function _create_rule() { $rcmail = rcube::get_instance(); if ($rcmail->action == 'plugin.sieverules' || $rcmail->action == 'plugin.sieverules.add') { $this->include_script('quickrules.js'); if ($rcmail->action == 'plugin.sieverules.add') { $uids = $_SESSION['plugin.quickrules.uids']; $mbox = $_SESSION['plugin.quickrules.mbox']; $rcmail->storage_init(); $rules = array(); $actions = array(); foreach (explode(",", $uids) as $uid) { $message = new rcube_message($uid); $rules[] = rcube_output::json_serialize(array('header' => $this->headers['from'], 'op' => $this->operators['filteris'], 'target' => $message->sender['mailto'])); $recipients = array(); $recipients_array = rcube_mime::decode_address_list($message->headers->to); foreach ($recipients_array as $recipient) $recipients[] = $recipient['mailto']; $identity = $rcmail->user->get_identity(); $recipient_str = join(', ', $recipients); if ($recipient_str != $identity['email']) $rules[] = rcube_output::json_serialize(array('header' => $this->headers['to'], 'op' => $this->operators['filteris'], 'target' => $recipient_str)); if (strlen($message->subject) > 0) $rules[] = rcube_output::json_serialize(array('header' => $this->headers['subject'], 'op' => $this->operators['filtercontains'], 'target' => $message->subject)); foreach ($this->additional_headers as $header) { if (strlen($message->headers->others[strtolower($header)]) > 0) $rules[] = rcube_output::json_serialize(array('header' => 'other::' . $header, 'op' => $this->operators['filteris'], 'target' => $message->headers->others[strtolower($header)])); } if ($mbox != 'INBOX') $actions[] = rcube_output::json_serialize(array('act' => 'fileinto', 'props' => $mbox)); foreach ($message->headers->flags as $flag) { if ($flag == 'Flagged') $actions[] = rcube_output::json_serialize(array('act' => 'imapflags', 'props' => $this->flags['flagflagged'])); } } $this->api->output->add_script(rcmail_output::JS_OBJECT_NAME . "_quickrules_rules = [" . implode(',', $rules) . "];"); $this->api->output->add_script(rcmail_output::JS_OBJECT_NAME . "_quickrules_actions = [" . implode(',', $actions) . "];"); $_SESSION['plugin.quickrules'] = false; $_SESSION['plugin.quickrules.uids'] = ''; $_SESSION['plugin.quickrules.mbox'] = ''; } } } } ?>Roundcube-Plugin-QuickRules-0.9.0/skins/000077500000000000000000000000001211467524300201235ustar00rootroot00000000000000Roundcube-Plugin-QuickRules-0.9.0/skins/classic/000077500000000000000000000000001211467524300215445ustar00rootroot00000000000000Roundcube-Plugin-QuickRules-0.9.0/skins/classic/ie6hacks.css000066400000000000000000000003551211467524300237560ustar00rootroot00000000000000/** * QuickRules plugin styles (IE6 hacks) */ #messagetoolbar a.quickrules, #messagetoolbar a.quickrulesSel { background-image: url(mail_toolbar.gif); } #rcmContextMenu .quickrules a { background-image: url(messageactions.gif); }Roundcube-Plugin-QuickRules-0.9.0/skins/classic/mail_toolbar.gif000066400000000000000000000032721211467524300247030ustar00rootroot00000000000000GIF89a EHVdj}*FaaujrzYn]rYeqFS`MZe•ŋ쩴=JYrWalmy僈z1Ke~h{uDQ^&B]Ycnu|R]iUkw}Kbyഽ,=Mfpy֒3QИkwC\s}Ucq蜞ɲƪt{x~㖙چqy'9J8GVenwmt}KXe"7:V1APz䑞ߔ.@0Aryfzpx'9]gqYgtPf|}}IawR`nqwov~:Sl 2D,?bmxcmuaku_hr)=T_jw{ܧ̔goxSiT`kቘ~眝zKT`XН"ZqB SB4D(blL_iz|3(0U+8/0PILq@ ,! NF/0PwrƉ?s@7`E9l2E<ߍL HrD? 1X23@9P)T!B=iF@>` '򰳦@@1?<A)蠄j A cD Q0HDxPt } p$6^@*{`-G?P|XR@2ԃ N"$cBEDA' N0&@4`C \3 Nc$AdR ( CEfE 4А l2d9y(vACv! !00$y<@.<K #ZF(   A) "ANX@Zr濨q H8 `iwd3Vl^U.- Dc@ |زaﱳG\q]FfM?:,"pôa@.g|Ϩ k00DQ=z_3:r& $n&!n>~qo? |"V=/kCq++K͓x89켣+僌c|>w>=yś ! f,0h *UՕw?4i0eL:a^&~FQ %/`/XY(Gӗ8^̴ E?pq2(J2'/_93V^/Ƙ=wo?0l+MQ /`em£h*y?ãPǏ_>b`gce+Z8zz3;țW<`x?,v؄ ]|/>@M X9').qzW>2o/^cPSeh}A: 1|۝|JW \ `/+~zg`S`+'020} "|/ViO}XOC ps73h-p>2('W Z* /^gضԳw?3202bĬlK %^Ni.6j421PXD4;:KS?~_?3HJ0~MK_ߞ݇O𝁝[ <\lRbx [x}O66`df;̵ ӭשb_T)gM$]s$I{h x|zւw {tauJUY޼7j|^;z&̡¶Z].F&\D &3{xhy)]r@F]P#?v&ZaqEq=~CvXRh|zZM+@c"~":x޹=Q{F[E V׳Pf v%@{f7ҔfYu+;AeYDU7E)ڕ'v52Kal+eM״iМ_M;:20ݤ>>o9&QD}=hi>SK%P*R ?>7' 4;޵[OEiJ.~Sy(rg#9yEu 3`WІbtăhi2$i ,L]9~_|KQT3_\B#af)b7 UJg4𘂣3NbL˯݌O s6}VQs `ap44_t *F lpԬFkt@8 ~ z7kl2A**+yTUX@1( I(6GxzѶ.l uRlV)$5B)- `a>q彷O wQP!#1x9ws2@n E#\[|)_`G?֔j[٩pݎ'2䐕x v"###+8>=X]1>?hZ'`+;Zm.#]$F4?Gڥ)\|yrzH'4)9I_E:QCWVhЙkqSqpShC)`*DA,`kH s[|W_CO)ËKA O 8{cM­#^՗_xn1 ,vpB6U-9 2q [0̡k}SqkqP ч'#"G4ϤD:Kb<u+҂oJ}̬b +cD <_O(Ɇi8$~lCu'` bIENDB`Roundcube-Plugin-QuickRules-0.9.0/skins/classic/messageactions.gif000066400000000000000000000010731211467524300252410ustar00rootroot00000000000000GIF89afךǵ룮ثTj]rm)D`ϾΦtdw:SlI`wSi~ƶ,FaWmVlХKbyqg{񘥳ͻ,Gb랫څBZqD]tNd{!f,f HX7a QJ\? =&GS(C[f] ,"AB D/6%E`c@;$-W9!1*:O<TK dR0_LY+b2fPU4'5#f>NV)f3 g& iR#J4;Roundcube-Plugin-QuickRules-0.9.0/skins/classic/messageactions.png000066400000000000000000000015121211467524300252560ustar00rootroot00000000000000PNG  IHDR!ɾtEXtSoftwareAdobe ImageReadyqe<IDATxb? 0;EeafRQ7 .@ FdA܍ &mq8~V@(&5b8sy__4^8,wλn}v 64דN,)&p}/LZXS"%@Ժyl߾~Av@a: ['a,tglQ  E>~~/߾3psrHspb(`g;pCkv EK_ G1:m;^+K3:tק/_10^^J\X}')&߭;?_1NW$oLJ6&zNiw_>~gV}F9S1 b_NYqe/Gs_~۷ VFyG -߸/u56 ?|s]66?1 _wϟ/H4,*ğĨu]G^1 2St^ń¾{3n28W^ 8%O'^V Lw>s@e)tta/>}i:z*q1˻%1jlr%IENDB`Roundcube-Plugin-QuickRules-0.9.0/skins/classic/quickrules.css000066400000000000000000000006341211467524300244500ustar00rootroot00000000000000/** * QuickRules plugin styles */ #messagetoolbar a.quickrules, #messagetoolbar a.quickrulesSel { text-indent: -5000px; background-image: url(mail_toolbar.png); } #messagetoolbar a.quickrules { background-position: 0 0; } #messagetoolbar a.quickrulesSel { background-position: 0 -32px; } #rcmContextMenu .quickrules a { background-image: url(messageactions.png); background-position: 7px 0px; }Roundcube-Plugin-QuickRules-0.9.0/skins/larry/000077500000000000000000000000001211467524300212545ustar00rootroot00000000000000Roundcube-Plugin-QuickRules-0.9.0/skins/larry/ie6hacks.css000066400000000000000000000000601211467524300234570ustar00rootroot00000000000000/** * QuickRules plugin styles (IE6 hacks) */ Roundcube-Plugin-QuickRules-0.9.0/skins/larry/mail_toolbar.png000066400000000000000000000025061211467524300244310ustar00rootroot00000000000000PNG  IHDR44xtEXtSoftwareAdobe ImageReadyqe<IDATxKL$Uj4ρ d:d|eiYwc\NL4ąqL7$ƍ M|/&1CB$L˫i;TT.IUrrkT:=9BT*e%l l l ;sss}T9|MNN^, NujRVLV'DK\܎+8tGeR<+^15ZW*al6,.۝x< ߟ4-jpHq:)-D"´L&bC'ɫؕt:/JJ]]ae( *prUc{{RssO@nI[GŏC/--=O  ΦqKwE%lh1!xLݟ o)s3 kUzdJp<lS>f@֐0"E׻0?LZ0VXo(Ez0 ,x6YMj_e˦Xt9y]j* j ^o wyO;:)BgYt/$q〵]NxnQ6ȝ$zBIpa̰.~b@6 TSן DSsXIENDB`Roundcube-Plugin-QuickRules-0.9.0/skins/larry/messageactions.png000066400000000000000000000012401211467524300247640ustar00rootroot00000000000000PNG  IHDR tEXtSoftwareAdobe ImageReadyqe<BIDATxڬTϋQYQ)X4Z E:CU/Hw[T1I a71l0>~wX47O,tB<_ƹpz<% CQ?Þu& )!yFv$y jo+M~>z>-`"6eB8ޑ$!ޟ[~u8*nw1N YX,Fn*S7v"pT*eIPAX_8I`m@0xh4O&cv)[ P}X=UUdR$y?er@+ ,^X,,Ev\1rwhl625J:Z~ON6}4 (bvu"DO!:6裤{j%!$f?j-ARpV`Z:9rȤN( %l0tt?Qg:UZ,RA>^DޡPv%}4%&dit>Н3uc\`&XCy#IENDB`Roundcube-Plugin-QuickRules-0.9.0/skins/larry/quickrules.css000066400000000000000000000005561211467524300241630ustar00rootroot00000000000000/** * QuickRules plugin styles */ #messagetoolbar a.quickrules, #messagetoolbar a.quickrulesSel { background-image: url(mail_toolbar.png); } #messagetoolbar a.quickrules, #messagetoolbar a.quickrulesSel { background-position: center -16px; } #rcmContextMenu .quickrules a span { background-image: url(messageactions.png); background-position: 5px 6px; }