Mercurial > hg > rc1
comparison plugins/new_user_dialog/new_user_dialog.php @ 0:1e000243b222
vanilla 1.3.3 distro, I hope
| author | Charlie Root |
|---|---|
| date | Thu, 04 Jan 2018 15:50:29 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:1e000243b222 |
|---|---|
| 1 <?php | |
| 2 | |
| 3 /** | |
| 4 * Present identities settings dialog to new users | |
| 5 * | |
| 6 * When a new user is created, this plugin checks the default identity | |
| 7 * and sets a session flag in case it is incomplete. An overlay box will appear | |
| 8 * on the screen until the user has reviewed/completed his identity. | |
| 9 * | |
| 10 * @license GNU GPLv3+ | |
| 11 * @author Thomas Bruederli | |
| 12 * @author Aleksander Machniak | |
| 13 */ | |
| 14 class new_user_dialog extends rcube_plugin | |
| 15 { | |
| 16 public $task = ''; | |
| 17 public $noframe = true; | |
| 18 | |
| 19 | |
| 20 function init() | |
| 21 { | |
| 22 $this->add_hook('identity_create', array($this, 'create_identity')); | |
| 23 $this->register_action('plugin.newusersave', array($this, 'save_data')); | |
| 24 | |
| 25 // register additional hooks if session flag is set | |
| 26 if ($_SESSION['plugin.newuserdialog']) { | |
| 27 $this->add_hook('render_page', array($this, 'render_page')); | |
| 28 } | |
| 29 } | |
| 30 | |
| 31 /** | |
| 32 * Check newly created identity at first login | |
| 33 */ | |
| 34 function create_identity($p) | |
| 35 { | |
| 36 // set session flag when a new user was created and the default identity seems to be incomplete | |
| 37 if ($p['login'] && !$p['complete']) { | |
| 38 $_SESSION['plugin.newuserdialog'] = true; | |
| 39 } | |
| 40 } | |
| 41 | |
| 42 /** | |
| 43 * Callback function when HTML page is rendered | |
| 44 * We'll add an overlay box here. | |
| 45 */ | |
| 46 function render_page($p) | |
| 47 { | |
| 48 if ($_SESSION['plugin.newuserdialog']) { | |
| 49 $this->add_texts('localization'); | |
| 50 | |
| 51 $rcmail = rcmail::get_instance(); | |
| 52 $identity = $rcmail->user->get_identity(); | |
| 53 $identities_level = intval($rcmail->config->get('identities_level', 0)); | |
| 54 | |
| 55 // compose user-identity dialog | |
| 56 $table = new html_table(array('cols' => 2)); | |
| 57 | |
| 58 $table->add('title', $this->gettext('name')); | |
| 59 $table->add(null, html::tag('input', array( | |
| 60 'type' => 'text', | |
| 61 'name' => '_name', | |
| 62 'value' => $identity['name'], | |
| 63 'disabled' => $identities_level == 4 | |
| 64 ))); | |
| 65 | |
| 66 $table->add('title', $this->gettext('email')); | |
| 67 $table->add(null, html::tag('input', array( | |
| 68 'type' => 'text', | |
| 69 'name' => '_email', | |
| 70 'value' => rcube_utils::idn_to_utf8($identity['email']), | |
| 71 'disabled' => in_array($identities_level, array(1, 3, 4)) | |
| 72 ))); | |
| 73 | |
| 74 $table->add('title', $this->gettext('organization')); | |
| 75 $table->add(null, html::tag('input', array( | |
| 76 'type' => 'text', | |
| 77 'name' => '_organization', | |
| 78 'value' => $identity['organization'], | |
| 79 'disabled' => $identities_level == 4 | |
| 80 ))); | |
| 81 | |
| 82 $table->add('title', $this->gettext('signature')); | |
| 83 $table->add(null, html::tag('textarea', array( | |
| 84 'name' => '_signature', | |
| 85 'rows' => '3', | |
| 86 ), | |
| 87 $identity['signature'] | |
| 88 )); | |
| 89 | |
| 90 // add overlay input box to html page | |
| 91 $rcmail->output->add_footer(html::tag('form', array( | |
| 92 'id' => 'newuserdialog', | |
| 93 'action' => $rcmail->url('plugin.newusersave'), | |
| 94 'method' => 'post' | |
| 95 ), | |
| 96 html::p('hint', rcube::Q($this->gettext('identitydialoghint'))) . | |
| 97 $table->show() . | |
| 98 html::p(array('class' => 'formbuttons'), | |
| 99 html::tag('input', array('type' => 'submit', | |
| 100 'class' => 'button mainaction', 'value' => $this->gettext('save')))) | |
| 101 )); | |
| 102 | |
| 103 $title = rcube::JQ($this->gettext('identitydialogtitle')); | |
| 104 $script = " | |
| 105 $('#newuserdialog').show() | |
| 106 .dialog({modal:true, resizable:false, closeOnEscape:false, width:450, title:'$title'}) | |
| 107 .submit(function() { | |
| 108 var i, request = {}, form = $(this).serializeArray(); | |
| 109 for (i in form) | |
| 110 request[form[i].name] = form[i].value; | |
| 111 | |
| 112 rcmail.http_post('plugin.newusersave', request, true); | |
| 113 return false; | |
| 114 }); | |
| 115 | |
| 116 $('input[name=_name]').focus(); | |
| 117 rcube_webmail.prototype.new_user_dialog_close = function() { $('#newuserdialog').dialog('close'); } | |
| 118 "; | |
| 119 // disable keyboard events for messages list (#1486726) | |
| 120 $rcmail->output->add_script($script, 'docready'); | |
| 121 | |
| 122 $this->include_stylesheet('newuserdialog.css'); | |
| 123 } | |
| 124 } | |
| 125 | |
| 126 /** | |
| 127 * Handler for submitted form (ajax request) | |
| 128 * | |
| 129 * Check fields and save to default identity if valid. | |
| 130 * Afterwards the session flag is removed and we're done. | |
| 131 */ | |
| 132 function save_data() | |
| 133 { | |
| 134 $rcmail = rcmail::get_instance(); | |
| 135 $identity = $rcmail->user->get_identity(); | |
| 136 $ident_level = intval($rcmail->config->get('identities_level', 0)); | |
| 137 $disabled = array(); | |
| 138 | |
| 139 $save_data = array( | |
| 140 'name' => rcube_utils::get_input_value('_name', rcube_utils::INPUT_POST), | |
| 141 'email' => rcube_utils::get_input_value('_email', rcube_utils::INPUT_POST), | |
| 142 'organization' => rcube_utils::get_input_value('_organization', rcube_utils::INPUT_POST), | |
| 143 'signature' => rcube_utils::get_input_value('_signature', rcube_utils::INPUT_POST), | |
| 144 ); | |
| 145 | |
| 146 if ($ident_level == 4) { | |
| 147 $disabled = array('name', 'email', 'organization'); | |
| 148 } | |
| 149 else if (in_array($ident_level, array(1, 3))) { | |
| 150 $disabled = array('email'); | |
| 151 } | |
| 152 | |
| 153 foreach ($disabled as $key) { | |
| 154 $save_data[$key] = $identity[$key]; | |
| 155 } | |
| 156 | |
| 157 if (empty($save_data['name']) || empty($save_data['email'])) { | |
| 158 $rcmail->output->show_message('formincomplete', 'error'); | |
| 159 } | |
| 160 else if (!rcube_utils::check_email($save_data['email'] = rcube_utils::idn_to_ascii($save_data['email']))) { | |
| 161 $rcmail->output->show_message('emailformaterror', 'error', array('email' => $save_data['email'])); | |
| 162 } | |
| 163 else { | |
| 164 // save data | |
| 165 $rcmail->user->update_identity($identity['identity_id'], $save_data); | |
| 166 $rcmail->session->remove('plugin.newuserdialog'); | |
| 167 // hide dialog | |
| 168 $rcmail->output->command('new_user_dialog_close'); | |
| 169 $rcmail->output->show_message('successfullysaved', 'confirmation'); | |
| 170 } | |
| 171 | |
| 172 $rcmail->output->send(); | |
| 173 } | |
| 174 } |
