/**
 * Send an email to a group.
 * @see pwg_mail()
 *
 * @param int $group_id
 * @param array $args - as in pwg_mail()
 *       o language_selected: filters users of the group by language [default value empty]
 * @param array $tpl - as in pwg_mail()
 * @return boolean
 */
function pwg_mail_group($group_id, $args = array(), $tpl = array())
{
    if (empty($group_id) or empty($args['content']) and empty($tpl)) {
        return false;
    }
    global $conf;
    $return = true;
    // get distinct languages of targeted users
    $query = '
SELECT DISTINCT language
  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 group_id = ' . $group_id . '
    AND ' . $conf['user_fields']['email'] . ' <> ""';
    if (!empty($args['language_selected'])) {
        $query .= '
    AND language = \'' . $args['language_selected'] . '\'';
    }
    $query .= '
;';
    $languages = array_from_query($query, 'language');
    if (empty($languages)) {
        return $return;
    }
    foreach ($languages as $language) {
        // get subset of users in this group for a specific language
        $query = '
SELECT
    u.' . $conf['user_fields']['username'] . ' AS name,
    u.' . $conf['user_fields']['email'] . ' AS email
  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 group_id = ' . $group_id . '
    AND ' . $conf['user_fields']['email'] . ' <> ""
    AND language = \'' . $language . '\'
;';
        $users = array_from_query($query);
        if (empty($users)) {
            continue;
        }
        switch_lang_to($language);
        $return &= pwg_mail(null, array_merge($args, array('Bcc' => $users)), $tpl);
        switch_lang_back();
    }
    return $return;
}
Exemple #2
0
function save_profile_from_post($userdata, &$errors)
{
    global $conf, $page;
    $errors = array();
    if (!isset($_POST['validate'])) {
        return false;
    }
    $special_user = in_array($userdata['id'], array($conf['guest_id'], $conf['default_user_id']));
    if ($special_user) {
        unset($_POST['username'], $_POST['mail_address'], $_POST['password'], $_POST['use_new_pwd'], $_POST['passwordConf'], $_POST['theme'], $_POST['language']);
        $_POST['theme'] = get_default_theme();
        $_POST['language'] = get_default_language();
    }
    if (!defined('IN_ADMIN')) {
        unset($_POST['username']);
    }
    if ($conf['allow_user_customization'] or defined('IN_ADMIN')) {
        $int_pattern = '/^\\d+$/';
        if (empty($_POST['nb_image_page']) or !preg_match($int_pattern, $_POST['nb_image_page'])) {
            $errors[] = l10n('The number of photos per page must be a not null scalar');
        }
        // periods must be integer values, they represents number of days
        if (!preg_match($int_pattern, $_POST['recent_period']) or $_POST['recent_period'] < 0) {
            $errors[] = l10n('Recent period must be a positive integer value');
        }
        if (!in_array($_POST['language'], array_keys(get_languages()))) {
            die('Hacking attempt, incorrect language value');
        }
        if (!in_array($_POST['theme'], array_keys(get_pwg_themes()))) {
            die('Hacking attempt, incorrect theme value');
        }
    }
    if (isset($_POST['mail_address'])) {
        // if $_POST and $userdata have are same email
        // validate_mail_address allows, however, to check email
        $mail_error = validate_mail_address($userdata['id'], $_POST['mail_address']);
        if (!empty($mail_error)) {
            $errors[] = $mail_error;
        }
    }
    if (!empty($_POST['use_new_pwd'])) {
        // password must be the same as its confirmation
        if ($_POST['use_new_pwd'] != $_POST['passwordConf']) {
            $errors[] = l10n('The passwords do not match');
        }
        if (!defined('IN_ADMIN')) {
            // changing password requires old password
            $query = '
  SELECT ' . $conf['user_fields']['password'] . ' AS password
    FROM ' . USERS_TABLE . '
    WHERE ' . $conf['user_fields']['id'] . ' = \'' . $userdata['id'] . '\'
  ;';
            list($current_password) = pwg_db_fetch_row(pwg_query($query));
            if (!$conf['password_verify']($_POST['password'], $current_password)) {
                $errors[] = l10n('Current password is wrong');
            }
        }
    }
    if (count($errors) == 0) {
        // mass_updates function
        include_once PHPWG_ROOT_PATH . 'admin/include/functions.php';
        if (isset($_POST['mail_address'])) {
            // update common user informations
            $fields = array($conf['user_fields']['email']);
            $data = array();
            $data[$conf['user_fields']['id']] = $userdata['id'];
            $data[$conf['user_fields']['email']] = $_POST['mail_address'];
            // password is updated only if filled
            if (!empty($_POST['use_new_pwd'])) {
                $fields[] = $conf['user_fields']['password'];
                // password is hashed with function $conf['password_hash']
                $data[$conf['user_fields']['password']] = $conf['password_hash']($_POST['use_new_pwd']);
            }
            // username is updated only if allowed
            if (!empty($_POST['username'])) {
                if ($_POST['username'] != $userdata['username'] and get_userid($_POST['username'])) {
                    $page['errors'][] = l10n('this login is already used');
                    unset($_POST['redirect']);
                } else {
                    $fields[] = $conf['user_fields']['username'];
                    $data[$conf['user_fields']['username']] = $_POST['username'];
                    // send email to the user
                    if ($_POST['username'] != $userdata['username']) {
                        include_once PHPWG_ROOT_PATH . 'include/functions_mail.inc.php';
                        switch_lang_to($userdata['language']);
                        $keyargs_content = array(get_l10n_args('Hello', ''), get_l10n_args('Your username has been successfully changed to : %s', $_POST['username']));
                        pwg_mail($_POST['mail_address'], array('subject' => '[' . $conf['gallery_title'] . '] ' . l10n('Username modification'), 'content' => l10n_args($keyargs_content), 'content_format' => 'text/plain'));
                        switch_lang_back();
                    }
                }
            }
            mass_updates(USERS_TABLE, array('primary' => array($conf['user_fields']['id']), 'update' => $fields), array($data));
        }
        if ($conf['allow_user_customization'] or defined('IN_ADMIN')) {
            // update user "additional" informations (specific to Piwigo)
            $fields = array('nb_image_page', 'language', 'expand', 'show_nb_hits', 'recent_period', 'theme');
            if ($conf['activate_comments']) {
                $fields[] = 'show_nb_comments';
            }
            $data = array();
            $data['user_id'] = $userdata['id'];
            foreach ($fields as $field) {
                if (isset($_POST[$field])) {
                    $data[$field] = $_POST[$field];
                }
            }
            mass_updates(USER_INFOS_TABLE, array('primary' => array('user_id'), 'update' => $fields), array($data));
        }
        trigger_notify('save_profile_from_post', $userdata['id']);
        if (!empty($_POST['redirect'])) {
            redirect($_POST['redirect']);
        }
    }
    return true;
}
/**
 * Add main toolbar to current page
 * @trigger loc_after_page_header
 */
function admintools_add_admin_controller()
{
    global $MultiView, $conf, $template, $page, $user;
    $url_root = get_root_url();
    $tpl_vars = array();
    $tpl_vars['MULTIVIEW'] = $MultiView->get_data();
    $tpl_vars['DELETE_CACHE'] = isset($conf['multiview_invalidate_cache']);
    $tpl_vars['U_SELF'] = $MultiView->get_clean_admin_url(true);
    if (($admin_lang = $MultiView->get_user_language()) !== false) {
        include_once PHPWG_ROOT_PATH . 'include/functions_mail.inc.php';
        switch_lang_to($admin_lang);
    }
    $template->assign(array('ADMINTOOLS_PATH' => './plugins/' . ADMINTOOLS_ID . '/', 'ato' => $tpl_vars));
    $template->set_filename('ato_admin_controller', realpath(ADMINTOOLS_PATH . 'template/admin_controller.tpl'));
    $template->parse('ato_admin_controller');
    if ($MultiView->is_admin() && @$admin_lang !== false) {
        switch_lang_back();
    }
}
function set_user_on_env_nbm(&$nbm_user, $is_action_send)
{
    global $user, $lang, $lang_info, $env_nbm;
    $user = build_user($nbm_user['user_id'], true);
    switch_lang_to($user['language']);
    if ($is_action_send) {
        $env_nbm['mail_template'] = get_mail_template($env_nbm['email_format']);
        $env_nbm['mail_template']->set_filename('notification_by_mail', 'notification_by_mail.tpl');
    }
}
/**
 * Send an email to a group.
 * @see pwg_mail()
 *
 * @param int $group_id
 * @param array $args - as in pwg_mail()
 *       o language_selected: filters users of the group by language [default value empty]
 * @param array $tpl - as in pwg_mail()
 * @return boolean
 */
function pwg_mail_group($group_id, $args = array(), $tpl = array())
{
    if (empty($group_id) or empty($args['content']) and empty($tpl)) {
        return false;
    }
    global $conf;
    $return = true;
    // get distinct languages of targeted users
    $query = '
SELECT DISTINCT language
  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 group_id = ' . $group_id . '
    AND ' . $conf['user_fields']['email'] . ' <> ""';
    if (!empty($args['language_selected'])) {
        $query .= '
    AND language = \'' . $args['language_selected'] . '\'';
    }
    $query .= '
;';
    $languages = array_from_query($query, 'language');
    if (empty($languages)) {
        return $return;
    }
    foreach ($languages as $language) {
        // get subset of users in this group for a specific language
        $query = '
SELECT
    ui.user_id,
    ui.status,
    u.' . $conf['user_fields']['username'] . ' AS name,
    u.' . $conf['user_fields']['email'] . ' AS email
  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 group_id = ' . $group_id . '
    AND ' . $conf['user_fields']['email'] . ' <> ""
    AND language = \'' . $language . '\'
;';
        $users = array_from_query($query);
        if (empty($users)) {
            continue;
        }
        switch_lang_to($language);
        foreach ($users as $u) {
            $authkey = create_user_auth_key($u['user_id'], $u['status']);
            $user_tpl = $tpl;
            if ($authkey !== false) {
                $user_tpl['assign']['LINK'] = add_url_params($tpl['assign']['LINK'], array('auth' => $authkey['auth_key']));
                if (isset($user_tpl['assign']['IMG']['link'])) {
                    $user_tpl['assign']['IMG']['link'] = add_url_params($user_tpl['assign']['IMG']['link'], array('auth' => $authkey['auth_key']));
                }
            }
            $user_args = $args;
            if ($authkey !== false) {
                $user_args['auth_key'] = $authkey['auth_key'];
            }
            $return &= pwg_mail($u['email'], $user_args, $user_tpl);
        }
        switch_lang_back();
    }
    return $return;
}
        $usernames = array();
        foreach ($users as $u) {
            $usernames[] = $u['username'];
            $authkey = create_user_auth_key($u['user_id'], $u['status']);
            $user_tpl = $tpl;
            if ($authkey !== false) {
                $user_tpl['assign']['LINK'] = add_url_params($tpl['assign']['LINK'], array('auth' => $authkey['auth_key']));
                if (isset($user_tpl['assign']['IMG']['link'])) {
                    $user_tpl['assign']['IMG']['link'] = add_url_params($user_tpl['assign']['IMG']['link'], array('auth' => $authkey['auth_key']));
                }
            }
            $user_args = $args;
            if (isset($authkey)) {
                $user_args['auth_key'] = $authkey['auth_key'];
            }
            switch_lang_to($u['language']);
            pwg_mail($u['email'], $user_args, $user_tpl);
            switch_lang_back();
        }
        $message = l10n_dec('%d mail was sent.', '%d mails were sent.', count($users));
        $message .= ' (' . implode(', ', $usernames) . ')';
        $page['infos'][] = $message;
    } elseif ('group' == $_POST['who'] and !empty($_POST['group'])) {
        check_input_parameter('group', $_POST, false, PATTERN_ID);
        pwg_mail_group($_POST['group'], $args, $tpl);
        $query = '
SELECT
    name
  FROM ' . GROUPS_TABLE . '
  WHERE id = ' . $_POST['group'] . '
;';
/**
 * Function called from UAM_admin.php to send notification email when user registration have been manually validated by admin
 *
 * @param : user id
 * 
 */
function validation_mail($id)
{
    global $conf;
    $conf_UAM = unserialize($conf['UserAdvManager']);
    include_once PHPWG_ROOT_PATH . 'include/functions_mail.inc.php';
    $custom_txt = "";
    $subject = "";
    // We have to get the user's language in database
    // ----------------------------------------------
    $query = '
SELECT user_id, language
FROM ' . USER_INFOS_TABLE . '
WHERE user_id = ' . $id . '
;';
    $data = pwg_db_fetch_assoc(pwg_query($query));
    // Check if user is already registered (profile changing) - If not (new registration), language is set to current gallery language
    // -------------------------------------------------------------------------------------------------------------------------------
    if (empty($data)) {
        // And switch gallery to this language before using personalized and multilangual contents
        // ---------------------------------------------------------------------------------------
        $language = pwg_get_session_var('lang_switch', $user['language']);
        switch_lang_to($language);
    } else {
        // And switch gallery to this language before using personalized and multilangual contents
        // ---------------------------------------------------------------------------------------
        $language = $data['language'];
        // Usefull for debugging
        switch_lang_to($data['language']);
        load_language('plugin.lang', UAM_PATH);
    }
    // Retreive users email and user name from id
    // ------------------------------------------
    $query = '
SELECT id, username, mail_address
FROM ' . USERS_TABLE . '
WHERE id = ' . $id . '
;';
    $result = pwg_db_fetch_assoc(pwg_query($query));
    if (isset($conf_UAM['ADMINVALIDATIONMAIL_SUBJECT']) and !empty($conf_UAM['ADMINVALIDATIONMAIL_SUBJECT'])) {
        // Management of Extension flags ([username], [mygallery])
        // -------------------------------------------------------
        $patterns[] = '#\\[username\\]#i';
        $replacements[] = stripslashes($result['username']);
        $patterns[] = '#\\[mygallery\\]#i';
        $replacements[] = $conf['gallery_title'];
        if (function_exists('get_user_language_desc')) {
            $subject = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM['ADMINVALIDATIONMAIL_SUBJECT'])) . "\n\n";
        } else {
            $subject = l10n(preg_replace($patterns, $replacements, $conf_UAM['ADMINVALIDATIONMAIL_SUBJECT'])) . "\n\n";
        }
    }
    if (isset($conf_UAM['ADMINVALIDATIONMAIL']) and !empty($conf_UAM['ADMINVALIDATIONMAIL'])) {
        // Management of Extension flags ([username], [mygallery], [myurl])
        // ----------------------------------------------------------------
        $patterns[] = '#\\[username\\]#i';
        $replacements[] = stripslashes($result['username']);
        $patterns[] = '#\\[mygallery\\]#i';
        $replacements[] = $conf['gallery_title'];
        $patterns[] = '#\\[myurl\\]#i';
        $replacements[] = get_gallery_home_url();
        if (function_exists('get_user_language_desc')) {
            $custom_txt = get_user_language_desc(preg_replace($patterns, $replacements, $conf_UAM['ADMINVALIDATIONMAIL'])) . "\n\n";
        } else {
            $custom_txt = l10n(preg_replace($patterns, $replacements, $conf_UAM['ADMINVALIDATIONMAIL'])) . "\n\n";
        }
    }
    $infos = array(get_l10n_args('UAM_User: %s', stripslashes($result['username'])), get_l10n_args('Email: %s', $result['mail_address']), get_l10n_args('', ''));
    // Sending the email with subject and contents
    // -------------------------------------------
    // Adding gallery URL at the end of the email
    if (isset($conf_UAM['ADD_GALLERY_URL_TO_EMAILS']) and $conf_UAM['ADD_GALLERY_URL_TO_EMAILS'] == 'true') {
        $content = l10n_args($infos) . "\n\n" . $custom_txt . get_absolute_root_url();
        pwg_mail(array('name' => stripslashes($result['username']), 'email' => $result['mail_address']), array('content' => $content, 'content_format' => 'text/plain', 'subject' => $subject));
        // Send a copy to admins
        if (isset($conf_UAM['EMAILS_COPY_TO_ADMINS']) and $conf_UAM['EMAILS_COPY_TO_ADMINS'] == 'true') {
            UAM_Copy2Admins($subject, $content);
        }
    } elseif (isset($conf_UAM['ADD_GALLERY_URL_TO_EMAILS']) and $conf_UAM['ADD_GALLERY_URL_TO_EMAILS'] == 'false') {
        $content = l10n_args($infos) . "\n\n" . $custom_txt;
        pwg_mail(array('name' => stripslashes($result['username']), 'email' => $result['mail_address']), array('content' => $content, 'content_format' => 'text/plain', 'subject' => $subject));
        // Send a copy to admins
        if (isset($conf_UAM['EMAILS_COPY_TO_ADMINS']) and $conf_UAM['EMAILS_COPY_TO_ADMINS'] == 'true') {
            UAM_Copy2Admins($subject, $content);
        }
    } else {
        $content = l10n_args($infos) . "\n\n" . $custom_txt;
        pwg_mail(array('name' => stripslashes($result['username']), 'email' => $result['mail_address']), array('content' => $content, 'content_format' => 'text/plain', 'subject' => $subject));
        // Send a copy to admins
        if (isset($conf_UAM['EMAILS_COPY_TO_ADMINS']) and $conf_UAM['EMAILS_COPY_TO_ADMINS'] == 'true') {
            UAM_Copy2Admins($subject, $content);
        }
    }
    // Switching back to default language
    // ----------------------------------
    switch_lang_back();
}