Hi all,
I want to add a vacation responder (i.e. the possibility to save a string
to my db representing the text to display when the user set the
auto-responder
on) to my Roundcube installation.
I find some examples of vacation plugins on the forum, but they are
not as I want it: I need a plugin that uses only Roundcube and read/write
the text message of the responder from/to a db. (while the other responders
use cPanel or COM or others...)
I tried to implement the plugin basing my code on the changepasswd plugin
(see
wheaties.us || Andy and Natasha Wheatley's Blog (http://wheaties.us/blog/2008/12/21/change-password-roundcube/)).
The problem is that using this code I cannot show the current value of the
vacation
responder text on the browser page, while I'm able to change it in the db.
Here is what I tried to write:
--- File program/steps/settings/vacationresp.inc --- (new)
<?php $OUTPUT -> set_pagetitle ( rcube_label ( 'vacationresp' )); $OUTPUT -> add_handler ( 'vacationresp' , 'rcmail_vacationresp_form' ); // $OUTPUT->include_script('vacationresp.js'); $OUTPUT -> add_label ( 'vacationfailed' , 'vacationchanged' ); $OUTPUT -> send ( 'vacationresp' ); function rcmail_vacationresp_form ( $attrib ) { list( $form_start , $form_end ) = get_form_tags ( $attrib , 'save_vacationresp' ); unset( $attrib [ 'form' ]); // return the complete edit form as table $out = $form_start ; $table = new html_table (array( 'cols' => 2 )); if (!isset( $no_override [ 'curvacation' ])) { $field_id = 'rcmfd_curvac' ; //$input_curvac = new html_textarea(array('name' => '_curvacation', 'id' => $field_id )); $input_curvac = new html_textarea (array( 'name' => '_curvacation' , 'id' => $field_id , 'size' => 40 )); $table -> add ( 'title' , html :: label ( $field_id , Q ( rcube_label ( 'curvacation' )))); //$table->add(null, $input_curvac->show()); $table -> add ( null , $input_curvac -> show ( '_vacation' )); // $table->add(null, $input_curvac->show($show_vacation)); } $out .= $table -> show ( $attrib ); $out .= $form_end ; return $out ; } ?>
--- File program/steps/settings/save_vacationresp.inc --- (new)
require_once('plugins/vacationresp/config.inc.php'); $old_vac = $_POST['_curvacation']; $sql_select = str_replace(array('%u'), array($_SESSION['username']), $vacationresp_config['sql_select']); $sql_update = str_replace(array('%u', '%o'), array($_SESSION['username'], $old_vac), $vacationresp_config['sql_update']); $user_db = new rcube_mdb2($vacationresp_config['db_dsnw'], $vacationresp_config['db_dsnr'], $vacationresp_config['db_persistent']); $user_db->db_connect('w'); if ($err_str = $user_db->is_error()) { raise_error(array( 'code' => 603, 'type' => 'db', 'message' => $err_str), FALSE, TRUE); } $user_db->query($sql_select); if ($user_db->num_rows() == 1) { $updated = false; $updated = $user_db->query($sql_update); if ($updated) { $OUTPUT->show_message('vacationchanged', 'confirmation'); } else { $OUTPUT->show_message('vacationfailed', 'error'); } } else { $OUTPUT->show_message('vacationfailed', 'error'); } rcmail_overwrite_action('vacationresp'); ?>
--- File program/js/app.js --- (modified)
case 'settings': this.enable_command('preferences', 'identities', 'save', 'folders', 'changepasswd', 'vacationresp', true); if (this.env_action='vacationresp') this.enable_command('save_vacationresp', true); case 'vacationresp': this.goto_url('vacationresp'); break; case 'save_vacationresp': this.gui_objects.editform.submit(); break;
--- File program/plugins/vacationresp/config.inc.php --- (new)
$vacationresp_config = array(); $vacationresp_config['db_dsnw'] = 'mysql://roundcube:round@localhost/roundcubemail'; $vacationresp_config['db_dsnr'] = ''; $vacationresp_config['db_persistent'] = FALSE; $vacationresp_config['sql_select'] = "SELECT username FROM users WHERE username = '%u';"; $vacationresp_config['sql_update'] = "UPDATE users SET vacation = '%o' WHERE username = '%u';"; ?>
--- File program/plugins/vacationresp/vacationresp.php
class vacationresp extends rcube_plugin { function init() { // preperation for Plugin API // not used yet } } ?>
--- File skins/default/templates/vacationresp.html --- (new)
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">type="input" class="button mainaction" label="save" />
--- File skins/default/includes/settingstabs.html --- (modified)
command="vacationresp" type="link" label="vacation" title="vacationresp" class="tablink" />
Someone knows how to pass the current vacation text value to the showed
page?
Thanks in advance. :)