aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrvelices <rv-github@modusoptimus.com>2007-09-11 02:24:51 +0000
committerrvelices <rv-github@modusoptimus.com>2007-09-11 02:24:51 +0000
commit92f80e5d799aa7fef5f00cbf5c27e32f92c4b2ea (patch)
treecbde0a4b03ea5733bf71ce1db3c8ec993825c38e
parent45fde2cc6b34d3acdfd43b487eb4b7dbeede05a8 (diff)
feature 731: permissions at image level
- this is the first version - I wait for feedback before changing help files git-svn-id: http://piwigo.org/svn/trunk@2084 68402e56-0260-453c-a942-63ccdbb3a9ee
-rw-r--r--action.php5
-rw-r--r--admin/element_set_global.php33
-rw-r--r--admin/user_list.php35
-rw-r--r--include/config_default.inc.php23
-rw-r--r--include/functions_user.inc.php96
-rw-r--r--install/db/63-database.php76
-rw-r--r--install/phpwebgallery_structure.sql4
-rw-r--r--language/en_UK.iso-8859-1/admin.lang.php7
-rw-r--r--language/fr_FR.iso-8859-1/admin.lang.php7
-rw-r--r--template/yoga/admin/element_set_global.tpl19
-rw-r--r--template/yoga/admin/user_list.tpl13
-rw-r--r--template/yoga/menubar.css1
-rw-r--r--template/yoga/thumbnails.css7
13 files changed, 275 insertions, 51 deletions
diff --git a/action.php b/action.php
index bd62b2bb3..d1d382c35 100644
--- a/action.php
+++ b/action.php
@@ -89,7 +89,10 @@ SELECT id
INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON category_id = id
WHERE image_id = '.$_GET['id'].'
'.get_sql_condition_FandF(
- array('forbidden_categories' => 'category_id'),
+ array(
+ 'forbidden_categories' => 'category_id',
+ 'forbidden_images' => 'image_id',
+ ),
' AND'
).'
LIMIT 1
diff --git a/admin/element_set_global.php b/admin/element_set_global.php
index b3f254b10..6cb0aab39 100644
--- a/admin/element_set_global.php
+++ b/admin/element_set_global.php
@@ -136,7 +136,7 @@ DELETE
$datas = array();
$dbfields = array('primary' => array('id'), 'update' => array());
- $formfields = array('author', 'name', 'date_creation');
+ $formfields = array('author', 'name', 'date_creation', 'level');
foreach ($formfields as $formfield)
{
if ($_POST[$formfield.'_action'] != 'leave')
@@ -163,7 +163,6 @@ SELECT id
if ('set' == $_POST['author_action'])
{
$data['author'] = $_POST['author'];
-
if ('' == $data['author'])
{
unset($data['author']);
@@ -173,7 +172,6 @@ SELECT id
if ('set' == $_POST['name_action'])
{
$data['name'] = $_POST['name'];
-
if ('' == $data['name'])
{
unset($data['name']);
@@ -189,6 +187,11 @@ SELECT id
;
}
+ if ('set' == $_POST['level_action'])
+ {
+ $data['level'] = $_POST['level'];
+ }
+
array_push($datas, $data);
}
// echo '<pre>'; print_r($datas); echo '</pre>';
@@ -345,6 +348,18 @@ else
}
$template->assign_vars(array('DATE_CREATION_YEAR_VALUE'=>$year));
+// image level options
+$blockname = 'level_option';
+foreach ($conf['available_permission_levels'] as $level)
+{
+ $template->assign_block_vars(
+ $blockname,
+ array(
+ 'VALUE' => $level,
+ 'CONTENT' => l10n( sprintf('Level %d', $level) ),
+ ));
+}
+
// +-----------------------------------------------------------------------+
// | global mode thumbnails |
// +-----------------------------------------------------------------------+
@@ -377,7 +392,7 @@ if (count($page['cat_elements_id']) > 0)
$template->assign_vars(array('NAV_BAR' => $nav_bar));
$query = '
-SELECT id,path,tn_ext,file,filesize
+SELECT id,path,tn_ext,file,filesize,level
FROM '.IMAGES_TABLE.'
WHERE id IN ('.implode(',', $page['cat_elements_id']).')
'.$conf['order_by'].'
@@ -405,6 +420,16 @@ SELECT id,path,tn_ext,file,filesize
'TITLE' => get_thumbnail_title($row)
)
);
+
+ if ( $row['level']>0 )
+ {
+ $template->assign_block_vars('thumbnails.thumbnail.level',
+ array(
+ 'LEVEL' => $row['level'],
+ 'TITLE' => l10n( sprintf('Level %d', $row['level']) ),
+ )
+ );
+ }
}
}
diff --git a/admin/user_list.php b/admin/user_list.php
index 1c7a752d4..8e3e06d65 100644
--- a/admin/user_list.php
+++ b/admin/user_list.php
@@ -97,7 +97,8 @@ SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id,
u.'.$conf['user_fields']['email'].' AS email,
ui.status,
ui.adviser,
- ui.enabled_high
+ ui.enabled_high,
+ ui.level
FROM '.USERS_TABLE.' AS u
INNER JOIN '.USER_INFOS_TABLE.' AS ui
ON u.'.$conf['user_fields']['id'].' = ui.user_id
@@ -256,7 +257,7 @@ if (isset($_POST['delete']) and count($collection) > 0)
{
array_push($page['errors'], l10n('Guest cannot be deleted'));
}
- if (($conf['guest_id'] != $conf['default_user_id']) and
+ if (($conf['guest_id'] != $conf['default_user_id']) and
in_array($conf['default_user_id'], $collection))
{
array_push($page['errors'], l10n('Default user cannot be deleted'));
@@ -351,9 +352,10 @@ DELETE FROM '.USER_GROUP_TABLE.'
$formfields =
array('nb_image_line', 'nb_line_page', 'template', 'language',
'recent_period', 'maxwidth', 'expand', 'show_nb_comments',
- 'show_nb_hits', 'maxheight', 'status', 'enabled_high');
+ 'show_nb_hits', 'maxheight', 'status', 'enabled_high',
+ 'level');
- $true_false_fields = array('expand', 'show_nb_comments',
+ $true_false_fields = array('expand', 'show_nb_comments',
'show_nb_hits', 'enabled_high');
if ($conf['allow_adviser'])
{
@@ -756,6 +758,19 @@ foreach ($groups as $group_id => $group_name)
));
}
+// user level options
+$blockname = 'level_option';
+foreach ($conf['available_permission_levels'] as $level)
+{
+ $template->assign_block_vars(
+ $blockname,
+ array(
+ 'VALUE' => $level,
+ 'CONTENT' => l10n( sprintf('Level %d', $level) ),
+ 'SELECTED' => $level==$default_user['level'] ? 'selected="selected"' : '',
+ ));
+}
+
// +-----------------------------------------------------------------------+
// | navigation bar |
// +-----------------------------------------------------------------------+
@@ -818,6 +833,13 @@ foreach ($visible_user_list as $num => $local_user)
$checked = '';
}
+ $properties = array();
+ $properties[] =
+ (isset($local_user['enabled_high']) and ($local_user['enabled_high'] == 'true'))
+ ? $lang['is_high_enabled'] : $lang['is_high_disabled'];
+
+ $properties[] = l10n( sprintf('Level %d', $local_user['level']) );
+
$template->assign_block_vars(
'user',
array(
@@ -836,9 +858,8 @@ foreach ($visible_user_list as $num => $local_user)
? '<BR />['.l10n('adviser').']' : ''),
'EMAIL' => get_email_address_as_display_text($local_user['email']),
'GROUPS' => $groups_string,
- 'PROPERTIES' =>
- (isset($local_user['enabled_high']) and ($local_user['enabled_high'] == 'true'))
- ? $lang['is_high_enabled'] : $lang['is_high_disabled']
+ 'PROPERTIES' => implode( ',', $properties),
+
)
);
trigger_action('loc_assign_block_var_local_user_list', $local_user);
diff --git a/include/config_default.inc.php b/include/config_default.inc.php
index a12770ef2..64ade722b 100644
--- a/include/config_default.inc.php
+++ b/include/config_default.inc.php
@@ -168,14 +168,14 @@ $conf['show_version'] = true;
// );
//
// Advenced use:
-// You can also used special options. Instead to pass a string like parameter value
+// You can also used special options. Instead to pass a string like parameter value
// you can pass a array with different optional parameter values
// $conf['links'] = array(
// 'http://phpwebgallery.net' => array('label' => 'PWG website', 'new_window' => false, 'eval_visible' => 'return true;'),
// 'http://forum.phpwebgallery.net' => array('label' => 'For ADMIN', 'new_window' => true, 'eval_visible' => 'return is_admin();'),
// 'http://phpwebgallery.net/doc' => array('label' => 'For Guest', 'new_window' => true, 'eval_visible' => 'return is_a_guest();'),
-// 'http://download.gna.org/phpwebgallery/' =>
-// array('label' => 'PopUp', 'new_window' => true,
+// 'http://download.gna.org/phpwebgallery/' =>
+// array('label' => 'PopUp', 'new_window' => true,
// 'nw_name' => 'PopUp', 'nw_features' => 'width=800,height=450,location=no,status=no,toolbar=no,scrollbars=no,menubar=no'),
// );
// Parameters:
@@ -263,6 +263,9 @@ $conf['prefix_thumbnail'] = 'TN-';
// Administration>Identification>Users?
$conf['users_page'] = 20;
+// image level permissions available in the admin interface
+$conf['available_permission_levels'] = array(0,1,2,4,8);
+
// mail_options: only set it true if you have a send mail warning with
// "options" parameter missing on mail() function execution.
$conf['mail_options'] = false;
@@ -614,11 +617,11 @@ $conf['allow_web_services'] = true;
$conf['ws_max_images_per_page'] = 500;
// On Access control false / Admim Web Service need Php cURL extension
-// Controls are done on public basis or
+// Controls are done on public basis or
// if connected on member authorization basis
$conf['ws_access_control'] = false;
-
-// On Access control true
+
+// On Access control true
// Additionnal controls are made based on Web Service Access Table
// Max returned rows number ( > 0 )
@@ -628,10 +631,10 @@ $conf['ws_access_control'] = false;
// 0 it's Now(), don't remove that one
$conf['ws_postponed_start'] = array(0,1,2,3,5,7,14,30); /* In days */
-// By default 10, 5, 2, 1 year(s) or 6, 3, 1 month(s)
+// By default 10, 5, 2, 1 year(s) or 6, 3, 1 month(s)
// or 15, 10, 7, 5, 1, 0 day(s)
// 0 it's temporary closed (Useful for one access)
- $conf['ws_durations'] = array(3650,1825,730,365,182,91,30,15,10,7,5,1,0);
+ $conf['ws_durations'] = array(3650,1825,730,365,182,91,30,15,10,7,5,1,0);
// +-----------------------------------------------------------------------+
// | Filter |
@@ -675,12 +678,12 @@ $conf['filter_pages'] = array
// +-----------------------------------------------------------------------+
// | Light slideshow |
// +-----------------------------------------------------------------------+
-// $conf['light_slideshow'] indicates to use slideshow.tpl in state of
+// $conf['light_slideshow'] indicates to use slideshow.tpl in state of
// picture.tpl for slideshow
// Take care to have slideshow.tpl in all available templates
// Or set it false.
// Check if Picture's plugins are compliant with it
// Every plugin from 1.7 would be design to manage light_slideshow case.
-$conf['light_slideshow'] = true;
+$conf['light_slideshow'] = true;
?>
diff --git a/include/functions_user.inc.php b/include/functions_user.inc.php
index f3b078dbf..1c4500328 100644
--- a/include/functions_user.inc.php
+++ b/include/functions_user.inc.php
@@ -257,6 +257,22 @@ SELECT ui.*, uc.*
$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
@@ -269,6 +285,7 @@ SELECT ui.*, uc.*
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));
@@ -281,10 +298,12 @@ DELETE FROM '.USER_CACHE_TABLE.'
$query = '
INSERT INTO '.USER_CACHE_TABLE.'
- (user_id, need_update, forbidden_categories, nb_total_images)
+ (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['forbidden_categories'].'\','.$userdata['nb_total_images'].',"'
+ .$userdata['image_access_type'].'","'.$userdata['image_access_list'].'")
;';
pwg_query($query);
}
@@ -527,26 +546,20 @@ function get_computed_categories($userdata, $filter_days=null)
$group_by = '';
$query = 'SELECT c.id cat_id, global_rank';
- if ( !isset($filter_days) )
- {
- $query .= ',
- date_last cat_date_last,
- nb_images cat_nb_images
- FROM '.CATEGORIES_TABLE.' as c';
- }
- else
+ // Count by date_available to avoid count null
+ $query .= ',
+ MAX(date_available) cat_date_last, COUNT(date_available) cat_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) )
{
- // Count by date_available to avoid count null
- $query .= ',
- MAX(date_available) cat_date_last,
- COUNT(date_available) cat_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.date_available > SUBDATE(CURRENT_DATE,INTERVAL '.$filter_days.' DAY)';
- $group_by = 'c.id';
+ $query .= ' AND i.date_available > SUBDATE(CURRENT_DATE,INTERVAL '.$filter_days.' DAY)';
}
+ $group_by = 'c.id';
if ( !empty($userdata['forbidden_categories']) )
{
@@ -719,7 +732,7 @@ SELECT COUNT(*)
function get_default_user_info($convert_str = true)
{
global $page, $conf;
-
+
if (!isset($page['cache_default_user']))
{
$query = 'select * from '.USER_INFOS_TABLE.
@@ -727,7 +740,7 @@ function get_default_user_info($convert_str = true)
$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']);
@@ -839,11 +852,13 @@ function create_user_infos($arg_id, $override_values = null)
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
+ else if (($user_id == $conf['guest_id']) or
($user_id == $conf['default_user_id']))
{
$status = 'guest';
@@ -858,11 +873,12 @@ function create_user_infos($arg_id, $override_values = null)
array(
'user_id' => $user_id,
'status' => $status,
- 'registration_date' => $dbnow
+ '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);
@@ -901,7 +917,7 @@ SELECT name
* return the file path of the given language filename, depending on the
* availability of the file
*
- * in descending order of preference:
+ * in descending order of preference:
* param language, user language, default language
* PhpWebGallery default language.
*
@@ -1290,14 +1306,38 @@ function get_sql_condition_FandF(
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');
diff --git a/install/db/63-database.php b/install/db/63-database.php
new file mode 100644
index 000000000..582150e5f
--- /dev/null
+++ b/install/db/63-database.php
@@ -0,0 +1,76 @@
+<?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$
+// | last update : $Date$
+// | last modifier : $Author$
+// | revision : $Revision$
+// +-----------------------------------------------------------------------+
+// | 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 = 'Add #user_infos.level, #images.level and #user_cache.forbidden_images';
+
+include_once(PHPWG_ROOT_PATH.'include/constants.php');
+
+// +-----------------------------------------------------------------------+
+// | Upgrade content |
+// +-----------------------------------------------------------------------+
+
+$query = '
+ALTER TABLE '.IMAGES_TABLE.' ADD COLUMN level TINYINT UNSIGNED NOT NULL DEFAULT 0
+';
+pwg_query($query);
+
+$query = '
+ALTER TABLE '.USER_INFOS_TABLE.' ADD COLUMN level TINYINT UNSIGNED NOT NULL DEFAULT 0
+';
+pwg_query($query);
+
+$query = '
+ALTER TABLE '.USER_CACHE_TABLE.' ADD COLUMN image_access_type enum("NOT IN","IN") NOT NULL default "NOT IN"
+';
+pwg_query($query);
+
+$query = '
+ALTER TABLE '.USER_CACHE_TABLE.' ADD COLUMN image_access_list TEXT DEFAULT NULL
+';
+pwg_query($query);
+
+$query = '
+UPDATE '.USER_INFOS_TABLE.' SET level=8 WHERE status="webmaster"
+';
+pwg_query($query);
+
+$query = '
+UPDATE '.USER_CACHE_TABLE.' SET need_update=true
+';
+pwg_query($query);
+
+echo
+"\n"
+.'"'.$upgrade_description.'"'.' ended'
+."\n"
+;
+
+?>
diff --git a/install/phpwebgallery_structure.sql b/install/phpwebgallery_structure.sql
index 24e69005c..3a086c3c7 100644
--- a/install/phpwebgallery_structure.sql
+++ b/install/phpwebgallery_structure.sql
@@ -198,6 +198,7 @@ CREATE TABLE `phpwebgallery_images` (
`path` varchar(255) NOT NULL default '',
`storage_category_id` smallint(5) unsigned default NULL,
`high_filesize` mediumint(9) unsigned default NULL,
+ `level` tinyint unsigned NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `images_i2` (`date_available`),
KEY `images_i3` (`average_rate`),
@@ -328,6 +329,8 @@ CREATE TABLE `phpwebgallery_user_cache` (
`need_update` enum('true','false') NOT NULL default 'true',
`forbidden_categories` text,
`nb_total_images` mediumint(8) unsigned default NULL,
+ `image_access_type` enum('NOT IN','IN') NOT NULL default 'NOT IN',
+ `image_access_list` text default NULL,
PRIMARY KEY (`user_id`)
) TYPE=MyISAM;
@@ -389,6 +392,7 @@ CREATE TABLE `phpwebgallery_user_infos` (
`template` varchar(255) NOT NULL default 'yoga/clear',
`registration_date` datetime NOT NULL default '0000-00-00 00:00:00',
`enabled_high` enum('true','false') NOT NULL default 'true',
+ `level` tinyint unsigned NOT NULL default '0',
UNIQUE KEY `user_infos_ui1` (`user_id`)
) TYPE=MyISAM;
diff --git a/language/en_UK.iso-8859-1/admin.lang.php b/language/en_UK.iso-8859-1/admin.lang.php
index 4100d86b7..1f4b379f6 100644
--- a/language/en_UK.iso-8859-1/admin.lang.php
+++ b/language/en_UK.iso-8859-1/admin.lang.php
@@ -641,4 +641,11 @@ $lang['display_thumbnail_classic'] = 'Classic display';
$lang['display_thumbnail_hoverbox'] = 'Hoverbox display';
$lang['Thumbnails'] = 'Thumbnails';
$lang['obligatory_user_mail_address'] = 'Mail address is obligatory for all users';
+$lang['Minimum privacy level'] = 'Minimum privacy level';
+$lang['Privacy level'] = 'Privacy level';
+$lang['Level 0'] = 'Public';
+$lang['Level 1'] = 'Contacts';
+$lang['Level 2'] = 'Friends';
+$lang['Level 4'] = 'Family';
+$lang['Level 8'] = 'Admins';
?>
diff --git a/language/fr_FR.iso-8859-1/admin.lang.php b/language/fr_FR.iso-8859-1/admin.lang.php
index 6ba441aa9..5c9f5ead4 100644
--- a/language/fr_FR.iso-8859-1/admin.lang.php
+++ b/language/fr_FR.iso-8859-1/admin.lang.php
@@ -642,4 +642,11 @@ $lang['display_thumbnail_classic'] = 'Affichage classique';
$lang['display_thumbnail_hoverbox'] = 'Affichage lors du survol';
$lang['Thumbnails'] = 'Miniatures';
$lang['obligatory_user_mail_address'] = 'L\'adresse mail est obligatoire pour tous les utilisateurs';
+$lang['Minimum privacy level'] = 'Niveau minimal de confidentialité';
+$lang['Privacy level'] = 'Niveau de confidentialité';
+$lang['Level 0'] = 'Public';
+$lang['Level 1'] = 'Contacts';
+$lang['Level 2'] = 'Amis';
+$lang['Level 4'] = 'Famille';
+$lang['Level 8'] = 'Admins';
?>
diff --git a/template/yoga/admin/element_set_global.tpl b/template/yoga/admin/element_set_global.tpl
index de8217104..b99789413 100644
--- a/template/yoga/admin/element_set_global.tpl
+++ b/template/yoga/admin/element_set_global.tpl
@@ -34,7 +34,11 @@
<!-- BEGIN thumbnail -->
<li><span class="wrap1">
<label>
- <span class="wrap2"><span>
+ <span class="wrap2">
+ <!-- BEGIN level -->
+ <em class="levelIndicatorB">{thumbnails.thumbnail.level.LEVEL}</em><em class="levelIndicatorF" title="{thumbnails.thumbnail.level.TITLE}">{thumbnails.thumbnail.level.LEVEL}</em>
+ <!-- END level -->
+ <span>
<img src="{thumbnails.thumbnail.SRC}"
alt="{thumbnails.thumbnail.ALT}"
title="{thumbnails.thumbnail.TITLE}"
@@ -133,6 +137,19 @@
</td>
</tr>
+ <tr>
+ <td>{lang:Minimum privacy level}</td>
+ <td>
+ <label><input type="radio" name="level_action" value="leave" checked="checked" />{lang:leave}</label>
+ <label><input type="radio" name="level_action" value="set" id="level_action_set" />{lang:set to}</label>
+ <select onmousedown="document.getElementById('level_action_set').checked = true;" name="level" size="1">
+ <!-- BEGIN level_option -->
+ <option {level_option.SELECTED} value="{level_option.VALUE}">{level_option.CONTENT} ({level_option.VALUE})</option>
+ <!-- END level_option -->
+ </select>
+ </td>
+ </tr>
+
</table>
<p>
diff --git a/template/yoga/admin/user_list.tpl b/template/yoga/admin/user_list.tpl
index 07c303ec4..355d6894b 100644
--- a/template/yoga/admin/user_list.tpl
+++ b/template/yoga/admin/user_list.tpl
@@ -190,6 +190,19 @@
</td>
</tr>
+ <tr>
+ <td>{lang:Privacy level}</td>
+ <td>
+ <label><input type="radio" name="level_action" value="leave" checked="checked" />{lang:leave}</label>
+ <label><input type="radio" name="level_action" value="set" id="level_action_set" />{lang:set to}</label>
+ <select onmousedown="document.getElementById('level_action_set').checked = true;" name="level" size="1">
+ <!-- BEGIN level_option -->
+ <option {level_option.SELECTED} value="{level_option.VALUE}">{level_option.CONTENT} ({level_option.VALUE})</option>
+ <!-- END level_option -->
+ </select>
+ </td>
+ </tr>
+
</table>
</fieldset>
diff --git a/template/yoga/menubar.css b/template/yoga/menubar.css
index 6e40eb4eb..0e8185eeb 100644
--- a/template/yoga/menubar.css
+++ b/template/yoga/menubar.css
@@ -47,6 +47,7 @@
#menubar UL UL {
font-size: 100%;
margin-top: 0;
+ margin-bottom: 0;
}
#menubar LI.selected A {
diff --git a/template/yoga/thumbnails.css b/template/yoga/thumbnails.css
index 4e67b527d..6f69f2cb7 100644
--- a/template/yoga/thumbnails.css
+++ b/template/yoga/thumbnails.css
@@ -51,3 +51,10 @@
top: 2px;
}
+UL.thumbnails .levelIndicatorB {
+display:block; position:absolute; z-index:100;padding:0px 0 0 14px; color:black; font-weight:bold; fontsize:120%;
+}
+
+UL.thumbnails .levelIndicatorF {
+display:block; position:absolute; z-index:101;padding:1px 0 0 15px; color:white; font-weight:bold; fontsize:120%;
+} \ No newline at end of file