/[drupal]/contributions/modules/mail_edit/mail_edit.module
ViewVC logotype

Contents of /contributions/modules/mail_edit/mail_edit.module

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.5 - (show annotations) (download) (as text)
Wed Jul 2 08:41:23 2008 UTC (16 months, 3 weeks ago) by litwol
Branch: MAIN
CVS Tags: HEAD
Changes since 1.4: +270 -188 lines
File MIME type: text/x-php
initial d6 port: complete rewrite
1 <?php
2 // $Id: mail_edit.module,v 1.4 2007/12/13 18:29:02 chx Exp $
3
4 /**
5 * Expose some drupal core known mail keys here
6 * @todo please submit patches to increase this queue
7 */
8 function mail_edit_mailkeys() {
9 return array (
10 'user_register_admin_created' => t(''),
11 'user_register_no_approval_required' => t(''),
12
13
14 );
15 }
16
17 function mail_edit_menu() {
18 $items = array();
19 $items['admin/build/mail-edit'] = array(
20 'access arguments' => array('administer site configuration'),
21 'page callback' => 'mail_edit_list',
22 'description' => t('Edit mails being sent out by Drupal.'),
23 'title' => t('Mail templates'),
24 );
25 $items['admin/build/mail-edit/%/%'] = array(
26 'access arguments' => array('administer site configuration'),
27 'page callback' => 'drupal_get_form',
28 'page arguments' => array('mail_edit_trans', 3, 4),
29 'description' => t('Edit mails being sent out by Drupal.'),
30 'title' => t('Mail templates'),
31 );
32 return $items;
33 }
34
35 function mail_edit_trans(&$form_status, $mailkey, $lang) {
36 // drupal_set_message('<pre>' . print_r(func_get_args(), 1) . '</pre>');
37 $query = "SELECT * FROM {mail_edit} WHERE mailkey = '%s' AND language = '%s'";
38 $result = db_query($query, $mailkey, $lang);
39 //if template is set, then we need to update, if its not set then we need to insert
40 $template = db_fetch_object($result);
41 if ($template) {
42 $update = TRUE;
43 }
44 else {
45 $update = FALSE;
46 }
47
48 $message = $update? 'Update ':'Create new ';
49 $message.= "{$mailkey} template for {$lang} language";
50 drupal_set_title($message);
51
52 $sys_keys = module_invoke_all('mailkeys');
53
54 $form = array();
55 $form['update'] = array(
56 '#type' => 'hidden',
57 '#value' => $update,
58 );
59 $form['language'] = array(
60 '#type' => 'hidden',
61 '#value' => $lang,
62 );
63 $form['mailkey'] = array(
64 '#type' => 'hidden',
65 '#value' => $mailkey,
66 );
67 $form['description'] = array(
68 '#title' => t('description'),
69 '#type' => 'textfield',
70 '#default_value' => isset($template->description) ? $template->description : (isset($sys_keys[$mailkey]) ? $sys_keys[$mailkey] : ''),
71 );
72 $form['mail'] = array(
73 '#type' => 'fieldset',
74 '#title' => t('Template'),
75 '#collapsible' => TRUE,
76 );
77 $form['mail']['subject'] = array(
78 '#title' => t('Subject'),
79 '#type' => 'textfield',
80 '#default_value' => isset($template->subject) ? $template->subject : '',
81 );
82 $form['mail']['body'] = array(
83 '#title' => t('Body'),
84 '#type' => 'textarea',
85 '#default_value' => isset($template->body) ? $template->body : '',
86 );
87 $form['op'] = array(
88 '#type' => 'submit',
89 '#value' => $update? t('Update template'): t('Save new template'),
90 '#submit' => array('mail_edit_trans_save'),
91 );
92 if ($update) {
93 $form['delete'] = array(
94 '#type' => 'submit',
95 '#value' => t('Remove '. $lang.' translation'),
96 '#submit' => array('mail_edit_trans_delete'),
97 );
98 }
99 return $form;
100 }
101
102 function mail_edit_trans_delete($form, &$form_state) {
103 $query = "DELETE FROM {mail_edit} WHERE mailkey = '%s' AND language = '%s'";
104 $args[] = $form_state['values']['mailkey'];
105 $args[] = $form_state['values']['language'];
106 if (db_query($query, $args)) {
107 drupal_set_message($form_state['values']['language'].' translation of '. $form_state['values']['mailkey']. ' has been removed');
108 }
109 else {
110 drupal_set_message('Failed to remove '. $form_state['values']['language'].' translation of '. $form_state['values']['mailkey']);
111 }
112 $form_state['redirect'] = 'admin/build/mail-edit';
113
114 }
115 function mail_edit_trans_save($form, &$form_state) {
116 // drupal_set_message('<pre>' . print_r(func_get_args(), 1) . '</pre>');
117 $update = $form_state['values']['update'];
118 if ($update) {
119 //do update
120 $query = "
121 UPDATE {mail_edit} SET
122 description = '%s',
123 subject = '%s',
124 body = '%s'
125 WHERE
126 mailkey = '%s' AND
127 language = '%s'
128 ";
129 $values = $form_state['values'];
130 $args[] = $values['description'];
131 $args[] = $values['subject'];
132 $args[] = $values['body'];
133 $args[] = $values['mailkey'];
134 $args[] = $values['language'];
135 if (db_query($query, $args)) {
136 }
137 else {
138 drupal_set_message('Failed to save template for '.$values['mailkey']. ' for '. $values['language']. ' translation');
139 }
140 }
141 else {
142 //do insert
143 $query = "INSERT INTO {mail_edit} (description, subject, mailkey, body, language) VALUES (
144 '%s',
145 '%s',
146 '%s',
147 '%s',
148 '%s'
149 ) ";
150 $values = $form_state['values'];
151 $args[] = $values['description'];
152 $args[] = $values['subject'];
153 $args[] = $values['mailkey'];
154 $args[] = $values['body'];
155 $args[] = $values['language'];
156 if (db_query($query, $args)) {
157 }
158 else {
159 drupal_set_message('Failed to save template for '.$values['mailkey']. ' for '. $values['language']. ' translation');
160 }
161 }
162 $form_state['redirect'] = 'admin/build/mail-edit';
163 }
164 function mail_edit_list() {
165 static $sys_lang = array();
166 if (empty($sys_lang)) {
167 $sys_lang = language_list();
168 }
169 //step 1 : get all mail keys and all possible translations
170 $lang_query = "SELECT DISTINCT(language) FROM {mail_edit} ORDER BY language ASC";
171 $lang_result = db_query($lang_query);
172 $mail_langs = array();//fetch all current translations
173 while($row = db_fetch_object($lang_result)) {
174 $mail_langs[$row->language] = $row->language;
175 }
176 foreach (language_list() as $lang_key => $language) {
177 $mail_langs[$lang_key] = $lang_key;
178 }//<!-- fetch all current translations
179
180 //step 3 : get all exposed mail keys
181 $sys_keys = module_invoke_all('mailkeys');
182 //step 2 : get all available translations
183 //step 4 : merge translated and system exposed keys
184 $trans_keys = array();
185 foreach ($sys_keys as $key => $desc) {
186 $trans_keys[$key]['description'] = $desc;
187 }
188 $keys_query = "SELECT * FROM {mail_edit} ORDER BY mailkey ASC";
189 $keys_result = db_query($keys_query);
190 while ($row = db_fetch_object($keys_result)) {
191 $trans_keys[$row->mailkey]['description'] = $row->description;
192 $trans_keys[$row->mailkey]['languages'][$row->language] = $row->language;
193 }
194
195 //step 5 : build mailkey to translation relationship matrix
196 $header = array('Mailkey');
197 foreach ( $mail_langs as $lang => $desc) {
198 $header[$lang] = $lang;
199 }
200 $rows = array();
201 $has_extra = false;
202 foreach ($trans_keys as $key => $template) {
203 $row = array();
204 $row[] = $key;
205 foreach ($mail_langs as $lang_key => $desc) {
206 $extra = '';
207 if (!isset($sys_lang[$lang_key])) {
208 $extra = '*';$has_extra = true;
209 }
210 if (isset($template['languages'][$lang_key])) {
211 $row[] = l('Edit '.$lang_key . $extra, 'admin/build/mail-edit/'. $key. '/'. $lang_key);
212 }
213 else {
214 $row[] = l('Add '. $lang_key . $extra, 'admin/build/mail-edit/'. $key. '/'. $lang_key);
215 }
216 }
217 $rows[] = $row;
218 }
219 if (empty($rows)) {
220 $rows[] = array(
221 array('data' => 'No templates available for override', 'colspan' => 2),
222 );
223 }
224
225 $extra = '';
226 if ($has_extra) {
227 $extra = '* - language not enabled';
228 }
229 return theme('table', $header, $rows) . $extra . drupal_get_form('create_new_mailkey');
230 }
231 /**
232 * Implementation of hook_theme().
233 */
234 function mail_edit_theme() {
235 return array(
236 'create_new_mailkey' => array(
237 'arguments' => array('form' => NULL),
238 ),
239 );
240 }
241 function create_new_mailkey(&$form_status) {
242 $form = array();
243 $form['mailkey'] = array(
244 '#title' => 'mailkey',
245 '#type' => 'textfield',
246 );
247
248 $mail_langs = array('--' => 'Add a new translation');
249 foreach (language_list() as $lang_key => $language) {
250 $mail_langs[$lang_key] = $lang_key;
251 }//<!-- fetch all current translations
252 $form['language'] = array(
253 '#title' => 'Language',
254 '#type' => 'select',
255 '#options' => $mail_langs,
256 );
257 $form['submit'] = array(
258 '#type' => 'submit',
259 '#value' => 'submit',
260 );
261 $form['#theme'] = 'create_new_mailkey';
262 $form['#submit'] = array('create_new_mailkey_go');
263 $form['#validate'] = array('create_new_mailkey_validate');
264 return $form;
265 }
266 function create_new_mailkey_validate($form, &$form_state) {
267 if (empty($form_state['values']['mailkey'])) {
268 form_set_error('mailkey', 'You must specify a unique mailkey');
269 }
270 if ($form_state['values']['language'] == '--') {
271 form_set_error('language', 'You must choose a language ');
272 }
273 }
274 function create_new_mailkey_go($form, &$form_state) {
275 drupal_goto("admin/build/mail-edit/{$form_state['values']['mailkey']}/{$form_state['values']['language']}");
276 }
277 function theme_create_new_mailkey($form) {
278 unset($form['mailkey']['#title']);
279 unset($form['language']['#title']);
280 $header = array('Add New Mailkey', 'Choose Language', 'Operation');
281 $row = array(
282 array(
283 drupal_render($form['mailkey']),
284 drupal_render($form['language']),
285 drupal_render($form['submit']),
286 )
287 );
288
289 return theme('table', $header, $row) . drupal_render($form);
290 }
291
292 function mail_edit_mail_alter(&$mail) {
293 // drupal_set_message('<pre>' . print_r($mail, 1) . '</pre>');
294 $query = "SELECT * FROM {mail_edit} WHERE mailkey = '%s' AND language = '%s'";
295 $arg[] = $mail['id'];
296 $arg[] = $mail['language']->language;
297 $template = db_fetch_object(db_query($query, $arg));
298 if ($template) {
299 $mail['subject'] = $template->subject;
300 unset($mail['body']);
301 $mail['body'][] = $template->body;
302 }
303 }

  ViewVC Help
Powered by ViewVC 1.1.2