diff options
author | rub <rub@piwigo.org> | 2007-03-13 23:01:16 +0000 |
---|---|---|
committer | rub <rub@piwigo.org> | 2007-03-13 23:01:16 +0000 |
commit | c5da19e5362101517d3f805c86132016b90bd271 (patch) | |
tree | 2751d89bb79584f8a32192c21f6b2429fc7794ce | |
parent | 6295173652a7767fa482df231ae7a9034b89ecde (diff) |
Fix bad default value for language on table user_info
Improve mail send (Undisclosed-recipients, switch language, ...)
Improve send an email to group members (Use Bcc, template, multi-language, ...) (But need more improvements)
git-svn-id: http://piwigo.org/svn/trunk@1904 68402e56-0260-453c-a942-63ccdbb3a9ee
Diffstat (limited to '')
-rw-r--r-- | admin/cat_modify.php | 68 | ||||
-rw-r--r-- | admin/include/functions_notification_by_mail.inc.php | 34 | ||||
-rw-r--r-- | include/functions_mail.inc.php | 202 | ||||
-rw-r--r-- | include/functions_user.inc.php | 12 | ||||
-rw-r--r-- | install/db/58-database.php | 51 | ||||
-rw-r--r-- | install/phpwebgallery_structure.sql | 2 | ||||
-rw-r--r-- | template/yoga/mail/text/html/cat_group_info.tpl | 7 |
7 files changed, 320 insertions, 56 deletions
diff --git a/admin/cat_modify.php b/admin/cat_modify.php index 95abb8e00..5571cc439 100644 --- a/admin/cat_modify.php +++ b/admin/cat_modify.php @@ -529,35 +529,59 @@ display_select_cat_wrapper( // info by email to an access granted group of category informations if (isset($_POST['submitEmail'])) { - $query = ' -SELECT - user_id, - '.$conf['user_fields']['email'].' AS email - FROM '.USER_GROUP_TABLE.' - INNER JOIN '.USERS_TABLE.' ON '.$conf['user_fields']['id'].' = user_id - WHERE '.$conf['user_fields']['email'].' IS NOT NULL - AND group_id = '.$_POST['group'].' + set_make_full_url(); + + /* TODO: if $category['representative_picture_id'] + is empty find child representative_picture_id */ + if (!empty($category['representative_picture_id'])) + { + $query = ' +SELECT id, file, path, tn_ext + FROM '.IMAGES_TABLE.' + WHERE id = '.$category['representative_picture_id'].' ;'; - $result = pwg_query($query); - while ($row = mysql_fetch_array($result)) + $result = pwg_query($query); + if (mysql_num_rows($result) > 0) + { + $element = mysql_fetch_assoc($result); + + $img_url = '<a href="'. + make_picture_url(array( + 'image_id' => $element['id'], + 'image_file' => $element['file'], + 'category' => $category + )) + .'"><img src="'.get_thumbnail_url($element).'"/></a>'; + } + } + + if (!isset($img_url)) { - pwg_mail( - $row['email'], - array( - 'content' => get_absolute_root_url().make_index_url( + $img_url = ''; + } + + // TODO Mettre un array pour traduction subjet + pwg_mail_group( + $_POST['group'], + get_str_email_format(true), /* TODO add a checkbox in order to choose format*/ + $category['name'], + 'cat_group_info', + array + ( + 'IMG_URL' => $img_url, + 'LINK' => make_index_url( array( 'category' => array( 'id' => $category['id'], 'name' => $category['name'], - 'permalink' => $category['permalink'], - ) - ) - ), - 'subject' => $category['name'] - ) - ); - } + 'permalink' => $category['permalink'] + ))), + 'CPL_CONTENT' => '' /* TODO Add text area to add complementary content */ + ), + '' /* TODO Add listbox in order to choose Language selected */); + + unset_make_full_url(); $query = ' SELECT diff --git a/admin/include/functions_notification_by_mail.inc.php b/admin/include/functions_notification_by_mail.inc.php index 8af31caef..5773d105d 100644 --- a/admin/include/functions_notification_by_mail.inc.php +++ b/admin/include/functions_notification_by_mail.inc.php @@ -192,10 +192,8 @@ function begin_users_env_nbm($is_to_send_mail = false) // Save $user, $lang_info and $lang arrays (include/user.inc.php has been executed) $env_nbm['save_user'] = $user; - $env_nbm['save_lang_info'] = $lang_info; - $env_nbm['save_lang'] = $lang; - // Last Language - $env_nbm['last_language'] = $user['language']; + // Save current language to stack, necessary because $user change during NBM + switch_lang_to($user['language']); $env_nbm['is_to_send_mail'] = $is_to_send_mail; @@ -227,8 +225,8 @@ function end_users_env_nbm() // Restore $user, $lang_info and $lang arrays (include/user.inc.php has been executed) $user = $env_nbm['save_user']; - $lang_info = $env_nbm['save_lang_info']; - $lang = $env_nbm['save_lang']; + // Restore current language to stack, necessary because $user change during NBM + switch_lang_back(); if ($env_nbm['is_to_send_mail']) { @@ -244,11 +242,7 @@ function end_users_env_nbm() } unset($env_nbm['save_user']); - unset($env_nbm['save_lang_info']); - unset($env_nbm['save_lang']); - unset($env_nbm['last_language']); unset($env_nbm['is_to_send_mail']); - } /* @@ -262,23 +256,8 @@ function set_user_on_env_nbm(&$nbm_user, $is_action_send) $user = build_user( $nbm_user['user_id'], true ); - if ($env_nbm['last_language'] != $user['language']) - { - $env_nbm['last_language'] = $user['language']; - - // Re-Init language arrays - $lang_info = array(); - $lang = array(); - - // language files - include(get_language_filepath('common.lang.php')); - // No test admin because script is checked admin (user selected no) - // Translations are in admin file too - include(get_language_filepath('admin.lang.php')); - trigger_action('loading_lang'); - @include(get_language_filepath('local.lang.php')); - } - + switch_lang_to($user['language']); + if ($is_action_send) { $nbm_user['template'] = $user['template']; @@ -299,6 +278,7 @@ function unset_user_on_env_nbm() { global $env_nbm; + switch_lang_back(); unset($env_nbm['mail_template']); } diff --git a/include/functions_mail.inc.php b/include/functions_mail.inc.php index 61a637fcf..8080e2243 100644 --- a/include/functions_mail.inc.php +++ b/include/functions_mail.inc.php @@ -209,7 +209,196 @@ function get_block_mail_admin_info() ."\n"; } -/** +/* + * Switch language to param language + * All entries are push on language stack + * + * @param string language + */ +function switch_lang_to($language) +{ + global $switch_lang, $user, $lang, $lang_info; + + if (count($switch_lang['stack']) == 0) + { + $prev_language = $user['language']; + } + else + { + $prev_language = end($switch_lang['stack']); + } + + $switch_lang['stack'][] = $language; + + if ($prev_language != $language) + { + if (!isset($switch_lang['language'][$prev_language])) + { + $switch_lang[$prev_language]['lang_info'] = $lang_info; + $switch_lang[$prev_language]['lang'] = $lang; + } + + if (!isset($switch_lang['language'][$language])) + { + // Re-Init language arrays + $lang_info = array(); + $lang = array(); + + // language files + include(get_language_filepath('common.lang.php', '', $language)); + // No test admin because script is checked admin (user selected no) + // Translations are in admin file too + include(get_language_filepath('admin.lang.php', '', $language)); + trigger_action('loading_lang'); + @include(get_language_filepath('local.lang.php', '', $language)); + + $switch_lang[$language]['lang_info'] = $lang_info; + $switch_lang[$language]['lang'] = $lang; + } + else + { + $lang_info = $switch_lang[$language]['lang_info']; + $lang = $switch_lang[$language]['lang']; + } + } +} + +/* + * Switch back language pushed with switch_lang_to function + * + * @param: none + */ +function switch_lang_back() +{ + global $switch_lang, $user, $lang, $lang_info; + + $last_language = array_pop($switch_lang['stack']); + + if (count($switch_lang['stack']) > 0) + { + $language = end($switch_lang['stack']); + } + else + { + $language = $user['language']; + } + + if ($last_language != $language) + { + if (!isset($switch_lang['language'][$language])) + { + $lang_info = $switch_lang[$language]['lang_info']; + $lang = $switch_lang[$language]['lang']; + } + } +} +
+/* + * send en email to user's group + * + * @param:
+ * - group_id: mail are sent to group with this Id
+ * - email_format: mail format
+ * - key_subject: TODO Include translations
+ * - tpl_shortname: short template name without extension
+ * - assign_vars: array used to assign_vars to mail template
+ * - language_selected: send mail only to user with this selected language
+*/ +function pwg_mail_group(
+ $group_id, $email_format, $key_subject,
+ $tpl_shortname, $assign_vars = array(), $language_selected = '') +{ + global $conf; + + $query = ' +SELECT + distinct language, template +FROM + '.USER_GROUP_TABLE.' as ug + INNER JOIN '.USERS_TABLE.' as u ON '.$conf['user_fields']['id'].' = ug.user_id + INNER JOIN '.USER_INFOS_TABLE.' as ui ON ui.user_id = ug.user_id +WHERE + '.$conf['user_fields']['email'].' IS NOT NULL + AND group_id = '.$group_id; + + if (!empty($language_selected)) + { + $query .= ' + AND language = \''.$language_selected.'\''; + } + + $query .= ' +;'; + + $result = pwg_query($query);
+
+ if (mysql_num_rows($result) > 0)
+ {
+ $list = array();
+ while ($row = mysql_fetch_array($result))
+ {
+ list($row['template'], $row['theme']) = explode('/', $row['template']);
+ $list[] = $row;
+ }
+ }
+ + + foreach ($list as $elem) + { + $query = ' +SELECT + u.'.$conf['user_fields']['username'].' as username, + u.'.$conf['user_fields']['email'].' as mail_address +FROM + '.USER_GROUP_TABLE.' as ug + INNER JOIN '.USERS_TABLE.' as u ON '.$conf['user_fields']['id'].' = ug.user_id + INNER JOIN '.USER_INFOS_TABLE.' as ui ON ui.user_id = ug.user_id +WHERE + '.$conf['user_fields']['email'].' IS NOT NULL + AND group_id = '.$group_id.' + AND language = \''.$elem['language'].'\' +;'; + + $result = pwg_query($query); + + if (mysql_num_rows($result) > 0) + { + $Bcc = array(); + while ($row = mysql_fetch_array($result)) + { + if (!empty($row['mail_address'])) + { + array_push($Bcc, format_email($row['username'], $row['mail_address'])); + } + } + + switch_lang_to($elem['language']); + + $mail_template = get_mail_template($email_format, $elem); + $mail_template->set_filename($tpl_shortname, $tpl_shortname.'.tpl'); + $mail_template->assign_vars($assign_vars); + + pwg_mail + ( + '', + array + ( + 'subject' => $key_subject, + 'email_format' => $email_format, + 'content' => $mail_template->parse($tpl_shortname, true), + 'content_format' => $email_format, + 'template' => $elem['template'], + 'theme' => $elem['theme'] + ) + ); + + switch_lang_back(); + } + } +} + + +/* * sends an email, using PhpWebGallery specific informations * * @param: @@ -244,8 +433,11 @@ function pwg_mail($to, $args = array()) { set_make_full_url();
} - - $to = format_email('', $to); +
+ if (!empty($to))
+ {
+ $to = format_email('', $to);
+ } if (empty($args['from'])) { @@ -287,6 +479,10 @@ function pwg_mail($to, $args = array()) $headers = 'From: '.$args['from']."\n"; $headers.= 'Reply-To: '.$args['from']."\n";
+ if (empty($to))
+ {
+ $headers.= 'To: undisclosed-recipients: ;'."\n";
+ }
if (!empty($args['Cc']))
{
diff --git a/include/functions_user.inc.php b/include/functions_user.inc.php index 72754ca33..c3608eee3 100644 --- a/include/functions_user.inc.php +++ b/include/functions_user.inc.php @@ -804,14 +804,16 @@ SELECT name * return the file path of the given language filename, depending on the * availability of the file * - * in descending order of preference: user language, default language, + * in descending order of preference: + * param language, user language, default language * PhpWebGallery default language. * * @param string filename * @param string dirname + * @param string language * @return string filepath */ -function get_language_filepath($filename, $dirname = '') +function get_language_filepath($filename, $dirname = '', $language = '') { global $user, $conf; @@ -822,7 +824,11 @@ function get_language_filepath($filename, $dirname = '') $dirname .= 'language'.'/'; $directories = array(); - if ( isset($user['language']) ) + if ( !empty($language) ) + { + $directories[] = $dirname.$language; + } + { $directories[] = $dirname.$user['language']; } diff --git a/install/db/58-database.php b/install/db/58-database.php new file mode 100644 index 000000000..56b186372 --- /dev/null +++ b/install/db/58-database.php @@ -0,0 +1,51 @@ +<?php +// +-----------------------------------------------------------------------+ +// | PhpWebGallery - a PHP based picture gallery | +// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net | +// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net | +// +-----------------------------------------------------------------------+ +// | file : $Id: 58-database.php 1849 2007-02-22 01:12:32Z rvelices $ +// | last update : $Date: 2007-02-22 02:12:32 +0100 (jeu., 22 févr. 2007) $ +// | last modifier : $Author: rvelices $ +// | revision : $Revision: 1849 $ +// +-----------------------------------------------------------------------+ +// | This program is free software; you can redistribute it and/or modify | +// | it under the terms of the GNU General Public License as published by | +// | the Free Software Foundation | +// | | +// | This program is distributed in the hope that it will be useful, but | +// | WITHOUT ANY WARRANTY; without even the implied warranty of | +// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | +// | General Public License for more details. | +// | | +// | You should have received a copy of the GNU General Public License | +// | along with this program; if not, write to the Free Software | +// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, | +// | USA. | +// +-----------------------------------------------------------------------+ + +if (!defined('PHPWG_ROOT_PATH')) +{ + die('Hacking attempt!'); +} + +$upgrade_description = 'Change default value for #user_infos.language'; + +include_once(PHPWG_ROOT_PATH.'include/constants.php'); + +// +-----------------------------------------------------------------------+ +// | Upgrade content | +// +-----------------------------------------------------------------------+ + +$query = " +ALTER TABLE ".USER_INFOS_TABLE." CHANGE `language` `language` varchar(50) NOT NULL default 'en_UK.iso-8859-1' +"; +pwg_query($query); + +echo +"\n" +.'"'.$upgrade_description.'"'.' ended' +."\n" +; + +?> diff --git a/install/phpwebgallery_structure.sql b/install/phpwebgallery_structure.sql index 4169f2973..32257e36a 100644 --- a/install/phpwebgallery_structure.sql +++ b/install/phpwebgallery_structure.sql @@ -378,7 +378,7 @@ CREATE TABLE `phpwebgallery_user_infos` ( `nb_line_page` tinyint(3) unsigned NOT NULL default '3', `status` enum('webmaster','admin','normal','generic','guest') NOT NULL default 'guest', `adviser` enum('true','false') NOT NULL default 'false', - `language` varchar(50) NOT NULL default 'english', + `language` varchar(50) NOT NULL default 'en_UK.iso-8859-1', `maxwidth` smallint(6) default NULL, `maxheight` smallint(6) default NULL, `expand` enum('true','false') NOT NULL default 'false', diff --git a/template/yoga/mail/text/html/cat_group_info.tpl b/template/yoga/mail/text/html/cat_group_info.tpl new file mode 100644 index 000000000..f5c8973de --- /dev/null +++ b/template/yoga/mail/text/html/cat_group_info.tpl @@ -0,0 +1,7 @@ +<div id="cat_group_info"> +<h2>{lang:Informations}</h2> +<p>{IMG_URL}</p> +<p>{lang:hello}</p> +<p><a href="{LINK}">{LINK}</a></p> +<p>{CPL_CONTENT}</p>
+</div> |