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 }