aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrub <rub@piwigo.org>2007-03-13 23:01:16 +0000
committerrub <rub@piwigo.org>2007-03-13 23:01:16 +0000
commitc5da19e5362101517d3f805c86132016b90bd271 (patch)
tree2751d89bb79584f8a32192c21f6b2429fc7794ce
parent6295173652a7767fa482df231ae7a9034b89ecde (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
-rw-r--r--admin/cat_modify.php68
-rw-r--r--admin/include/functions_notification_by_mail.inc.php34
-rw-r--r--include/functions_mail.inc.php202
-rw-r--r--include/functions_user.inc.php12
-rw-r--r--install/db/58-database.php51
-rw-r--r--install/phpwebgallery_structure.sql2
-rw-r--r--template/yoga/mail/text/html/cat_group_info.tpl7
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>