aboutsummaryrefslogtreecommitdiffstats
path: root/BSF/include/functions_user.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'BSF/include/functions_user.inc.php')
-rw-r--r--BSF/include/functions_user.inc.php1340
1 files changed, 0 insertions, 1340 deletions
diff --git a/BSF/include/functions_user.inc.php b/BSF/include/functions_user.inc.php
deleted file mode 100644
index d2c9530e2..000000000
--- a/BSF/include/functions_user.inc.php
+++ /dev/null
@@ -1,1340 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Piwigo - a PHP based picture gallery |
-// +-----------------------------------------------------------------------+
-// | Copyright(C) 2008 Piwigo Team http://piwigo.org |
-// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
-// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
-// +-----------------------------------------------------------------------+
-// | 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. |
-// +-----------------------------------------------------------------------+
-
-// validate_mail_address:
-// o verifies whether the given mail address has the
-// right format. ie someone@domain.com "someone" can contain ".", "-" or
-// even "_". Exactly as "domain". The extension doesn't have to be
-// "com". The mail address can also be empty.
-// o check if address could be empty
-// o check if address is not used by a other user
-// If the mail address doesn't correspond, an error message is returned.
-//
-function validate_mail_address($user_id, $mail_address)
-{
- global $conf;
-
- if (empty($mail_address) and
- !($conf['obligatory_user_mail_address'] and
- in_array(script_basename(), array('register', 'profile'))))
- {
- return '';
- }
-
- $regex = '/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)*\.[a-z]+$/';
- if ( !preg_match( $regex, $mail_address ) )
- {
- return l10n('reg_err_mail_address');
- }
-
- if (defined("PHPWG_INSTALLED") and !empty($mail_address))
- {
- $query = '
-select count(*)
-from '.USERS_TABLE.'
-where upper('.$conf['user_fields']['email'].') = upper(\''.$mail_address.'\')
-'.(is_numeric($user_id) ? 'and '.$conf['user_fields']['id'].' != \''.$user_id.'\'' : '').'
-;';
- list($count) = mysql_fetch_array(pwg_query($query));
- if ($count != 0)
- {
- return l10n('reg_err_mail_address_dbl');
- }
- }
-}
-
-function register_user($login, $password, $mail_address,
- $with_notification = true, $errors = array())
-{
- global $conf;
-
- if ($login == '')
- {
- array_push($errors, l10n('reg_err_login1'));
- }
- if (ereg("^.* $", $login))
- {
- array_push($errors, l10n('reg_err_login2'));
- }
- if (ereg("^ .*$", $login))
- {
- array_push($errors, l10n('reg_err_login3'));
- }
- if (get_userid($login))
- {
- array_push($errors, l10n('reg_err_login5'));
- }
- $mail_error = validate_mail_address(null, $mail_address);
- if ('' != $mail_error)
- {
- array_push($errors, $mail_error);
- }
-
- $errors = trigger_event('register_user_check',
- $errors,
- array(
- 'username'=>$login,
- 'password'=>$password,
- 'email'=>$mail_address,
- )
- );
-
- // if no error until here, registration of the user
- if (count($errors) == 0)
- {
- // what will be the inserted id ?
- $query = '
-SELECT MAX('.$conf['user_fields']['id'].') + 1
- FROM '.USERS_TABLE.'
-;';
- list($next_id) = mysql_fetch_array(pwg_query($query));
-
- $insert =
- array(
- $conf['user_fields']['id'] => $next_id,
- $conf['user_fields']['username'] => mysql_escape_string($login),
- $conf['user_fields']['password'] => $conf['pass_convert']($password),
- $conf['user_fields']['email'] => $mail_address
- );
-
- include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
- mass_inserts(USERS_TABLE, array_keys($insert), array($insert));
-
- // Assign by default groups
- {
- $query = '
-SELECT id
- FROM '.GROUPS_TABLE.'
- WHERE is_default = \''.boolean_to_string(true).'\'
- ORDER BY id ASC
-;';
- $result = pwg_query($query);
-
- $inserts = array();
- while ($row = mysql_fetch_array($result))
- {
- array_push
- (
- $inserts,
- array
- (
- 'user_id' => $next_id,
- 'group_id' => $row['id']
- )
- );
- }
- }
-
- if (count($inserts) != 0)
- {
- include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
- mass_inserts(USER_GROUP_TABLE, array('user_id', 'group_id'), $inserts);
- }
-
- create_user_infos($next_id);
-
- if ($with_notification and $conf['email_admin_on_new_user'])
- {
- include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
- $admin_url = get_absolute_root_url()
- .'admin.php?page=user_list&username='.$login;
-
- $keyargs_content = array
- (
- get_l10n_args('User: %s', $login),
- get_l10n_args('Email: %s', $_POST['mail_address']),
- get_l10n_args('', ''),
- get_l10n_args('Admin: %s', $admin_url)
- );
-
- pwg_mail_notification_admins
- (
- get_l10n_args('Registration of %s', $login),
- $keyargs_content
- );
- }
-
- trigger_action('register_user',
- array(
- 'id'=>$next_id,
- 'username'=>$login,
- 'email'=>$mail_address,
- )
- );
- }
-
- return $errors;
-}
-
-function build_user( $user_id, $use_cache )
-{
- global $conf;
-
- $user['id'] = $user_id;
- $user = array_merge( $user, getuserdata($user_id, $use_cache) );
-
- if ($user['id'] == $conf['guest_id'] and $user['status'] <> 'guest')
- {
- $user['status'] = 'guest';
- $user['internal_status']['guest_must_be_guest'] = true;
- }
-
- // calculation of the number of picture to display per page
- $user['nb_image_page'] = $user['nb_image_line'] * $user['nb_line_page'];
-
- if (is_admin($user['status']))
- {
- list($user['admin_template'], $user['admin_theme']) =
- explode ('/', $conf['admin_layout']);
- }
-
- list($user['template'], $user['theme']) = explode('/', $user['template']);
-
- return $user;
-}
-
-/**
- * find informations related to the user identifier
- *
- * @param int user identifier
- * @param boolean use_cache
- * @param array
- */
-function getuserdata($user_id, $use_cache)
-{
- global $conf;
-
- $userdata = array();
-
- $query = '
-SELECT ';
- $is_first = true;
- foreach ($conf['user_fields'] as $pwgfield => $dbfield)
- {
- if ($is_first)
- {
- $is_first = false;
- }
- else
- {
- $query.= '
- , ';
- }
- $query.= $dbfield.' AS '.$pwgfield;
- }
- $query.= '
- FROM '.USERS_TABLE.'
- WHERE '.$conf['user_fields']['id'].' = \''.$user_id.'\'
-;';
-
- $row = mysql_fetch_array(pwg_query($query));
-
- while (true)
- {
- $query = '
-SELECT ui.*, uc.*
- FROM '.USER_INFOS_TABLE.' AS ui LEFT JOIN '.USER_CACHE_TABLE.' AS uc
- ON ui.user_id = uc.user_id
- WHERE ui.user_id = \''.$user_id.'\'
-;';
- $result = pwg_query($query);
- if (mysql_num_rows($result) > 0)
- {
- break;
- }
- else
- {
- create_user_infos($user_id);
- }
- }
-
- $row = array_merge($row, mysql_fetch_array($result));
-
- foreach ($row as $key => $value)
- {
- if (!is_numeric($key))
- {
- // If the field is true or false, the variable is transformed into a
- // boolean value.
- if ($value == 'true' or $value == 'false')
- {
- $userdata[$key] = get_boolean($value);
- }
- else
- {
- $userdata[$key] = $value;
- }
- }
- }
-
- if ($use_cache)
- {
- if (!isset($userdata['need_update'])
- or !is_bool($userdata['need_update'])
- or $userdata['need_update'] == true)
- {
- $userdata['forbidden_categories'] =
- calculate_permissions($userdata['id'], $userdata['status']);
-
- /* now we build the list of forbidden images (this list does not contain
- images that are not in at least an authorized category)*/
- $query = '
-SELECT DISTINCT(id)
- FROM '.IMAGES_TABLE.' INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON id=image_id
- WHERE category_id NOT IN ('.$userdata['forbidden_categories'].')
- AND level>'.$userdata['level'];
- $forbidden_ids = array_from_query($query, 'id');
-
- if ( empty($forbidden_ids) )
- {
- array_push( $forbidden_ids, 0 );
- }
- $userdata['image_access_type'] = 'NOT IN'; //TODO maybe later
- $userdata['image_access_list'] = implode(',',$forbidden_ids);
-
- update_user_cache_categories($userdata);
-
- // Set need update are done
- $userdata['need_update'] = false;
-
- // Indicate update done
- $userdata['need_update_done'] = true;
-
- $query = '
-SELECT COUNT(DISTINCT(image_id)) as total
- FROM '.IMAGE_CATEGORY_TABLE.'
- WHERE category_id NOT IN ('.$userdata['forbidden_categories'].')
- AND image_id '.$userdata['image_access_type'].' ('.$userdata['image_access_list'].')
-;';
- list($userdata['nb_total_images']) = mysql_fetch_array(pwg_query($query));
-
- // update user cache
- $query = '
-DELETE FROM '.USER_CACHE_TABLE.'
- WHERE user_id = '.$userdata['id'].'
-;';
- pwg_query($query);
-
- $query = '
-INSERT INTO '.USER_CACHE_TABLE.'
- (user_id, need_update, forbidden_categories, nb_total_images,
- image_access_type, image_access_list)
- VALUES
- ('.$userdata['id'].',\''.boolean_to_string($userdata['need_update']).'\',\''
- .$userdata['forbidden_categories'].'\','.$userdata['nb_total_images'].',"'
- .$userdata['image_access_type'].'","'.$userdata['image_access_list'].'")
-;';
- pwg_query($query);
- }
- else
- {
- // Indicate update not done
- $userdata['need_update_done'] = false;
- }
- }
-
- return $userdata;
-}
-
-/*
- * deletes favorites of the current user if he's not allowed to see them
- *
- * @return void
- */
-function check_user_favorites()
-{
- global $user;
-
- if ($user['forbidden_categories'] == '')
- {
- return;
- }
-
- // $filter['visible_categories'] and $filter['visible_images']
- // must be not used because filter <> restriction
- // retrieving images allowed : belonging to at least one authorized
- // category
- $query = '
-SELECT DISTINCT f.image_id
- FROM '.FAVORITES_TABLE.' AS f INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic
- ON f.image_id = ic.image_id
- WHERE f.user_id = '.$user['id'].'
-'.get_sql_condition_FandF
- (
- array
- (
- 'forbidden_categories' => 'ic.category_id',
- ),
- 'AND'
- ).'
-;';
- $result = pwg_query($query);
- $authorizeds = array();
- while ($row = mysql_fetch_array($result))
- {
- array_push($authorizeds, $row['image_id']);
- }
-
- $query = '
-SELECT image_id
- FROM '.FAVORITES_TABLE.'
- WHERE user_id = '.$user['id'].'
-;';
- $result = pwg_query($query);
- $favorites = array();
- while ($row = mysql_fetch_array($result))
- {
- array_push($favorites, $row['image_id']);
- }
-
- $to_deletes = array_diff($favorites, $authorizeds);
-
- if (count($to_deletes) > 0)
- {
- $query = '
-DELETE FROM '.FAVORITES_TABLE.'
- WHERE image_id IN ('.implode(',', $to_deletes).')
- AND user_id = '.$user['id'].'
-;';
- pwg_query($query);
- }
-}
-
-/**
- * calculates the list of forbidden categories for a given user
- *
- * Calculation is based on private categories minus categories authorized to
- * the groups the user belongs to minus the categories directly authorized
- * to the user. The list contains at least -1 to be compliant with queries
- * such as "WHERE category_id NOT IN ($forbidden_categories)"
- *
- * @param int user_id
- * @param string user_status
- * @return string forbidden_categories
- */
-function calculate_permissions($user_id, $user_status)
-{
- $private_array = array();
- $authorized_array = array();
-
- $query = '
-SELECT id
- FROM '.CATEGORIES_TABLE.'
- WHERE status = \'private\'
-;';
- $result = pwg_query($query);
- while ($row = mysql_fetch_array($result))
- {
- array_push($private_array, $row['id']);
- }
-
- // retrieve category ids directly authorized to the user
- $query = '
-SELECT cat_id
- FROM '.USER_ACCESS_TABLE.'
- WHERE user_id = '.$user_id.'
-;';
- $authorized_array = array_from_query($query, 'cat_id');
-
- // retrieve category ids authorized to the groups the user belongs to
- $query = '
-SELECT cat_id
- FROM '.USER_GROUP_TABLE.' AS ug INNER JOIN '.GROUP_ACCESS_TABLE.' AS ga
- ON ug.group_id = ga.group_id
- WHERE ug.user_id = '.$user_id.'
-;';
- $authorized_array =
- array_merge(
- $authorized_array,
- array_from_query($query, 'cat_id')
- );
-
- // uniquify ids : some private categories might be authorized for the
- // groups and for the user
- $authorized_array = array_unique($authorized_array);
-
- // only unauthorized private categories are forbidden
- $forbidden_array = array_diff($private_array, $authorized_array);
-
- // if user is not an admin, locked categories are forbidden
- if (!is_admin($user_status))
- {
- $query = '
-SELECT id
- FROM '.CATEGORIES_TABLE.'
- WHERE visible = \'false\'
-;';
- $result = pwg_query($query);
- while ($row = mysql_fetch_array($result))
- {
- array_push($forbidden_array, $row['id']);
- }
- $forbidden_array = array_unique($forbidden_array);
- }
-
- if ( empty($forbidden_array) )
- {// at least, the list contains 0 value. This category does not exists so
- // where clauses such as "WHERE category_id NOT IN(0)" will always be
- // true.
- array_push($forbidden_array, 0);
- }
-
- return implode(',', $forbidden_array);
-}
-
-/**
- * compute data of categories branches (one branch only)
- */
-function compute_branch_cat_data(&$cats, &$list_cat_id, &$level, &$ref_level)
-{
- $date = '';
- $count_images = 0;
- $count_categories = 0;
- do
- {
- $cat_id = array_pop($list_cat_id);
- if (!is_null($cat_id))
- {
- // Count images and categories
- $cats[$cat_id]['count_images'] += $count_images;
- $cats[$cat_id]['count_categories'] += $count_categories;
- $count_images = $cats[$cat_id]['count_images'];
- $count_categories = $cats[$cat_id]['count_categories'] + 1;
-
- if ((empty($cats[$cat_id]['max_date_last'])) or ($cats[$cat_id]['max_date_last'] < $date))
- {
- $cats[$cat_id]['max_date_last'] = $date;
- }
- else
- {
- $date = $cats[$cat_id]['max_date_last'];
- }
- $ref_level = substr_count($cats[$cat_id]['global_rank'], '.') + 1;
- }
- else
- {
- $ref_level = 0;
- }
- } while ($level <= $ref_level);
-
- // Last cat updating must be added to list for next branch
- if ($ref_level <> 0)
- {
- array_push($list_cat_id, $cat_id);
- }
-}
-
-/**
- * compute data of categories branches
- */
-function compute_categories_data(&$cats)
-{
- $ref_level = 0;
- $level = 0;
- $list_cat_id = array();
-
- foreach ($cats as $id => $category)
- {
- // Compute
- $level = substr_count($category['global_rank'], '.') + 1;
- if ($level > $ref_level)
- {
- array_push($list_cat_id, $id);
- }
- else
- {
- compute_branch_cat_data($cats, $list_cat_id, $level, $ref_level);
- array_push($list_cat_id, $id);
- }
- $ref_level = $level;
- }
-
- $level = 1;
- compute_branch_cat_data($cats, $list_cat_id, $level, $ref_level);
-}
-
-/**
- * get computed array of categories
- *
- * @param array userdata
- * @param int filter_days number of recent days to filter on or null
- * @return array
- */
-function get_computed_categories($userdata, $filter_days=null)
-{
- $query = 'SELECT c.id cat_id, global_rank';
- // Count by date_available to avoid count null
- $query .= ',
- MAX(date_available) date_last, COUNT(date_available) nb_images
-FROM '.CATEGORIES_TABLE.' as c
- LEFT JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON ic.category_id = c.id
- LEFT JOIN '.IMAGES_TABLE.' AS i
- ON ic.image_id = i.id
- AND i.level<='.$userdata['level'];
-
- if ( isset($filter_days) )
- {
- $query .= ' AND i.date_available > SUBDATE(CURRENT_DATE,INTERVAL '.$filter_days.' DAY)';
- }
-
- if ( !empty($userdata['forbidden_categories']) )
- {
- $query.= '
- WHERE c.id NOT IN ('.$userdata['forbidden_categories'].')';
- }
-
- $query.= '
- GROUP BY c.id';
-
- $result = pwg_query($query);
-
- $cats = array();
- while ($row = mysql_fetch_assoc($result))
- {
- $row['user_id'] = $userdata['id'];
- $row['count_categories'] = 0;
- $row['count_images'] = (int)$row['nb_images'];
- $row['max_date_last'] = $row['date_last'];
-
- $cats += array($row['cat_id'] => $row);
- }
- usort($cats, 'global_rank_compare');
-
- compute_categories_data($cats);
-
- if ( isset($filter_days) )
- {
- $cat_tmp = $cats;
- $cats = array();
-
- foreach ($cat_tmp as $category)
- {
- if (!empty($category['max_date_last']))
- {
- // Re-init counters
- $category['count_categories'] = 0;
- $category['count_images'] = (int)$category['nb_images'];
- // Keep category
- $cats[$category['cat_id']] = $category;
- }
- }
- // Compute a second time
- compute_categories_data($cats);
- }
- return $cats;
-}
-
-/**
- * update data of user_cache_categories
- *
- * @param array userdata
- * @return null
- */
-function update_user_cache_categories($userdata)
-{
- // delete user cache
- $query = '
-DELETE FROM '.USER_CACHE_CATEGORIES_TABLE.'
- WHERE user_id = '.$userdata['id'].'
-;';
- pwg_query($query);
-
- $cats = get_computed_categories($userdata, null);
-
- include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
- mass_inserts
- (
- USER_CACHE_CATEGORIES_TABLE,
- array
- (
- 'user_id', 'cat_id',
- 'date_last', 'max_date_last', 'nb_images', 'count_images', 'count_categories'
- ),
- $cats
- );
-}
-
-/**
- * returns the username corresponding to the given user identifier if exists
- *
- * @param int user_id
- * @return mixed
- */
-function get_username($user_id)
-{
- global $conf;
-
- $query = '
-SELECT '.$conf['user_fields']['username'].'
- FROM '.USERS_TABLE.'
- WHERE '.$conf['user_fields']['id'].' = '.intval($user_id).'
-;';
- $result = pwg_query($query);
- if (mysql_num_rows($result) > 0)
- {
- list($username) = mysql_fetch_row($result);
- }
- else
- {
- return false;
- }
-
- return $username;
-}
-
-/**
- * returns user identifier thanks to his name, false if not found
- *
- * @param string username
- * @param int user identifier
- */
-function get_userid($username)
-{
- global $conf;
-
- $username = mysql_escape_string($username);
-
- $query = '
-SELECT '.$conf['user_fields']['id'].'
- FROM '.USERS_TABLE.'
- WHERE '.$conf['user_fields']['username'].' = \''.$username.'\'
-;';
- $result = pwg_query($query);
-
- if (mysql_num_rows($result) == 0)
- {
- return false;
- }
- else
- {
- list($user_id) = mysql_fetch_row($result);
- return $user_id;
- }
-}
-
-/**
- * search an available feed_id
- *
- * @return string feed identifier
- */
-function find_available_feed_id()
-{
- while (true)
- {
- $key = generate_key(50);
- $query = '
-SELECT COUNT(*)
- FROM '.USER_FEED_TABLE.'
- WHERE id = \''.$key.'\'
-;';
- list($count) = mysql_fetch_row(pwg_query($query));
- if (0 == $count)
- {
- return $key;
- }
- }
-}
-
-/*
- * Returns a array with default user value
- *
- * @param convert_str allows to convert string value if necessary
- */
-function get_default_user_info($convert_str = true)
-{
- global $page, $conf;
-
- if (!isset($page['cache_default_user']))
- {
- $query = 'select * from '.USER_INFOS_TABLE.
- ' where user_id = '.$conf['default_user_id'].';';
-
- $result = pwg_query($query);
- $page['cache_default_user'] = mysql_fetch_assoc($result);
-
- if ($page['cache_default_user'] !== false)
- {
- unset($page['cache_default_user']['user_id']);
- unset($page['cache_default_user']['status']);
- unset($page['cache_default_user']['registration_date']);
- }
- }
-
- if (is_array($page['cache_default_user']) and $convert_str)
- {
- $default_user = array();
- foreach ($page['cache_default_user'] as $name => $value)
- {
- // If the field is true or false, the variable is transformed into a
- // boolean value.
- if ($value == 'true' or $value == 'false')
- {
- $default_user[$name] = get_boolean($value);
- }
- else
- {
- $default_user[$name] = $value;
- }
- }
- return $default_user;
- }
- else
- {
- return $page['cache_default_user'];
- }
-}
-
-/*
- * Returns a default user value
- *
- * @param value_name: name of value
- * @param sos_value: value used if don't exist value
- */
-function get_default_user_value($value_name, $sos_value)
-{
- $default_user = get_default_user_info(true);
- if ($default_user === false or !isset($default_user[$value_name]))
- {
- return $sos_value;
- }
- else
- {
- return $default_user[$value_name];
- }
-}
-
-/*
- * Returns the default template value
- *
- */
-function get_default_template()
-{
- return get_default_user_value('template', PHPWG_DEFAULT_TEMPLATE);
-}
-
-/*
- * Returns the default language value
- *
- */
-function get_default_language()
-{
- return get_default_user_value('language', PHPWG_DEFAULT_LANGUAGE);
-}
-
-/**
- * add user informations based on default values
- *
- * @param int user_id / array of user_if
- * @param array of values used to override default user values
- */
-function create_user_infos($arg_id, $override_values = null)
-{
- global $conf;
-
- if (is_array($arg_id))
- {
- $user_ids = $arg_id;
- }
- else
- {
- $user_ids = array();
- if (is_numeric($arg_id))
- {
- $user_ids[] = $arg_id;
- }
- }
-
- if (!empty($user_ids))
- {
- $inserts = array();
- list($dbnow) = mysql_fetch_row(pwg_query('SELECT NOW();'));
-
- $default_user = get_default_user_info(false);
- if ($default_user === false)
- {
- // Default on structure are used
- $default_user = array();
- }
-
- if (!is_null($override_values))
- {
- $default_user = array_merge($default_user, $override_values);
- }
-
- foreach ($user_ids as $user_id)
- {
- $level= isset($default_user['level']) ? $default_user['level'] : 0;
- if ($user_id == $conf['webmaster_id'])
- {
- $status = 'webmaster';
- $level = max( $conf['available_permission_levels'] );
- }
- else if (($user_id == $conf['guest_id']) or
- ($user_id == $conf['default_user_id']))
- {
- $status = 'guest';
- }
- else
- {
- $status = 'normal';
- }
-
- $insert = array_merge(
- $default_user,
- array(
- 'user_id' => $user_id,
- 'status' => $status,
- 'registration_date' => $dbnow,
- 'level' => $level
- ));
-
- array_push($inserts, $insert);
- }
-
- include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
- mass_inserts(USER_INFOS_TABLE, array_keys($inserts[0]), $inserts);
-
- }
-}
-
-/**
- * returns the groupname corresponding to the given group identifier if
- * exists
- *
- * @param int group_id
- * @return mixed
- */
-function get_groupname($group_id)
-{
- $query = '
-SELECT name
- FROM '.GROUPS_TABLE.'
- WHERE id = '.intval($group_id).'
-;';
- $result = pwg_query($query);
- if (mysql_num_rows($result) > 0)
- {
- list($groupname) = mysql_fetch_row($result);
- }
- else
- {
- return false;
- }
-
- return $groupname;
-}
-
-
-/**
- * returns the auto login key or false on error
- * @param int user_id
- * @param string [out] username
-*/
-function calculate_auto_login_key($user_id, &$username)
-{
- global $conf;
- $query = '
-SELECT '.$conf['user_fields']['username'].' AS username
- , '.$conf['user_fields']['password'].' AS password
-FROM '.USERS_TABLE.'
-WHERE '.$conf['user_fields']['id'].' = '.$user_id;
- $result = pwg_query($query);
- if (mysql_num_rows($result) > 0)
- {
- $row = mysql_fetch_assoc($result);
- $username = $row['username'];
- $data = $row['username'].$row['password'];
- $key = base64_encode(
- pack('H*', sha1($data))
- .hash_hmac('md5', $data, $conf['secret_key'],true)
- );
- return $key;
- }
- return false;
-}
-
-/*
- * Performs all required actions for user login
- * @param int user_id
- * @param bool remember_me
- * @return void
-*/
-function log_user($user_id, $remember_me)
-{
- global $conf, $user;
-
- if ($remember_me and $conf['authorize_remembering'])
- {
- $key = calculate_auto_login_key($user_id, $username);
- if ($key!==false)
- {
- $cookie = array('id' => (int)$user_id, 'key' => $key);
- setcookie($conf['remember_me_name'],
- serialize($cookie),
- time()+$conf['remember_me_length'],
- cookie_path()
- );
- }
- }
- else
- { // make sure we clean any remember me ...
- setcookie($conf['remember_me_name'], '', 0, cookie_path());
- }
- if ( session_id()!="" )
- { // we regenerate the session for security reasons
- // see http://www.acros.si/papers/session_fixation.pdf
- session_regenerate_id();
- }
- else
- {
- session_start();
- }
- $_SESSION['pwg_uid'] = (int)$user_id;
-
- $user['id'] = $_SESSION['pwg_uid'];
-}
-
-/*
- * Performs auto-connexion when cookie remember_me exists
- * @return true/false
-*/
-function auto_login() {
- global $conf;
-
- if ( isset( $_COOKIE[$conf['remember_me_name']] ) )
- {
- $cookie = unserialize(stripslashes($_COOKIE[$conf['remember_me_name']]));
- if ($cookie!==false and is_numeric(@$cookie['id']) )
- {
- $key = calculate_auto_login_key( $cookie['id'], $username );
- if ($key!==false and $key===$cookie['key'])
- {
- log_user($cookie['id'], true);
- trigger_action('login_success', $username);
- return true;
- }
- }
- setcookie($conf['remember_me_name'], '', 0, cookie_path());
- }
- return false;
-}
-
-/**
- * Tries to login a user given username and password (must be MySql escaped)
- * return true on success
- */
-function try_log_user($username, $password, $remember_me)
-{
- global $conf;
- // retrieving the encrypted password of the login submitted
- $query = '
-SELECT '.$conf['user_fields']['id'].' AS id,
- '.$conf['user_fields']['password'].' AS password
- FROM '.USERS_TABLE.'
- WHERE '.$conf['user_fields']['username'].' = \''.$username.'\'
-;';
- $row = mysql_fetch_assoc(pwg_query($query));
- if ($row['password'] == $conf['pass_convert']($password))
- {
- log_user($row['id'], $remember_me);
- trigger_action('login_success', $username);
- return true;
- }
- trigger_action('login_failure', $username);
- return false;
-}
-
-/*
- * Return user status used in this library
- * @return string
-*/
-function get_user_status($user_status)
-{
- global $user;
-
- if (empty($user_status))
- {
- if (isset($user['status']))
- {
- $user_status = $user['status'];
- }
- else
- {
- // swicth to default value
- $user_status = '';
- }
- }
- return $user_status;
-}
-
-/*
- * Return access_type definition of user
- * Test does with user status
- * @return bool
-*/
-function get_access_type_status($user_status='')
-{
- global $conf;
-
- switch (get_user_status($user_status))
- {
- case 'guest':
- {
- $access_type_status =
- ($conf['guest_access'] ? ACCESS_GUEST : ACCESS_FREE);
- break;
- }
- case 'generic':
- {
- $access_type_status = ACCESS_GUEST;
- break;
- }
- case 'normal':
- {
- $access_type_status = ACCESS_CLASSIC;
- break;
- }
- case 'admin':
- {
- $access_type_status = ACCESS_ADMINISTRATOR;
- break;
- }
- case 'webmaster':
- {
- $access_type_status = ACCESS_WEBMASTER;
- break;
- }
- default:
- {
- $access_type_status = ACCESS_FREE;
- break;
- }
- }
-
- return $access_type_status;
-}
-
-/*
- * Return if user have access to access_type definition
- * Test does with user status
- * @return bool
-*/
-function is_autorize_status($access_type, $user_status = '')
-{
- return (get_access_type_status($user_status) >= $access_type);
-}
-
-/*
- * Check if user have access to access_type definition
- * Stop action if there are not access
- * Test does with user status
- * @return none
-*/
-function check_status($access_type, $user_status = '')
-{
- if (!is_autorize_status($access_type, $user_status))
- {
- access_denied();
- }
-}
-
-/*
- * Return if user is generic
- * @return bool
-*/
- function is_generic($user_status = '')
-{
- return get_user_status($user_status) == 'generic';
-}
-
-/*
- * Return if user is only a guest
- * @return bool
-*/
- function is_a_guest($user_status = '')
-{
- return get_user_status($user_status) == 'guest';
-}
-
-/*
- * Return if user is, at least, a classic user
- * @return bool
-*/
- function is_classic_user($user_status = '')
-{
- return is_autorize_status(ACCESS_CLASSIC, $user_status);
-}
-
-/*
- * Return if user is, at least, an administrator
- * @return bool
-*/
- function is_admin($user_status = '')
-{
- return is_autorize_status(ACCESS_ADMINISTRATOR, $user_status);
-}
-
-/*
- * Return if current user is an adviser
- * @return bool
-*/
-function is_adviser()
-{
- global $user;
-
- return ($user['adviser'] == 'true');
-}
-
-/*
- * Return mail address as display text
- * @return string
-*/
-function get_email_address_as_display_text($email_address)
-{
- global $conf;
-
- if (!isset($email_address) or (trim($email_address) == ''))
- {
- return '';
- }
- else
- {
- if (defined('IN_ADMIN') and is_adviser())
- {
- return 'adviser.mode@'.$_SERVER['SERVER_NAME'];
- }
- else
- {
- return $email_address;
- }
- }
-}
-
-/*
- * Compute sql where condition with restrict and filter data. "FandF" means
- * Forbidden and Filters.
- *
- * @param array condition_fields: read function body
- * @param string prefix_condition: prefixes sql if condition is not empty
- * @param boolean force_one_condition: use at least "1 = 1"
- *
- * @return string sql where/conditions
- */
-function get_sql_condition_FandF(
- $condition_fields,
- $prefix_condition = null,
- $force_one_condition = false
- )
-{
- global $user, $filter;
-
- $sql_list = array();
-
- foreach ($condition_fields as $condition => $field_name)
- {
- switch($condition)
- {
- case 'forbidden_categories':
- {
- if (!empty($user['forbidden_categories']))
- {
- $sql_list[] =
- $field_name.' NOT IN ('.$user['forbidden_categories'].')';
- }
- break;
- }
- case 'visible_categories':
- {
- if (!empty($filter['visible_categories']))
- {
- $sql_list[] =
- $field_name.' IN ('.$filter['visible_categories'].')';
- }
- break;
- }
- case 'visible_images':
- if (!empty($filter['visible_images']))
- {
- $sql_list[] =
- $field_name.' IN ('.$filter['visible_images'].')';
- }
- // note there is no break - visible include forbidden
- case 'forbidden_images':
- if (
- !empty($user['image_access_list'])
- or $user['image_access_type']!='NOT IN'
- )
- {
- $table_prefix=null;
- if ($field_name=='id')
- {
- $table_prefix = '';
- }
- elseif ($field_name=='i.id')
- {
- $table_prefix = 'i.';
- }
- if ( isset($table_prefix) )
- {
- $sql_list[]=$table_prefix.'level<='.$user['level'];
- }
- else
- {
- $sql_list[]=$field_name.' '.$user['image_access_type']
- .' ('.$user['image_access_list'].')';
- }
- }
- break;
- default:
- {
- die('Unknow condition');
- break;
- }
- }
- }
-
- if (count($sql_list) > 0)
- {
- $sql = '('.implode(' AND ', $sql_list).')';
- }
- else
- {
- if ($force_one_condition)
- {
- $sql = '1 = 1';
- }
- else
- {
- $sql = '';
- }
- }
-
- if (isset($prefix_condition) and !empty($sql))
- {
- $sql = $prefix_condition.' '.$sql;
- }
-
- return $sql;
-}
-
-?> \ No newline at end of file