File: modify_member_form.php

package info (click to toggle)
phpldapadmin 1.1.0.5-6%2Blenny2
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 5,008 kB
  • ctags: 3,949
  • sloc: php: 17,735; xml: 1,532; sh: 388; makefile: 46
file content (189 lines) | stat: -rw-r--r-- 6,195 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/modify_member_form.php,v 1.5.2.1 2007/12/26 09:26:32 wurley Exp $

/**
 * Displays a form to allow the user to modify group members.
 *
 * Variables that come in via common.php
 *  - server_id
 * Variables that come in as GET vars:
 *  - dn (rawurlencoded)
 *  - attr (rawurlencoded) the attribute to which we are adding a value
 *
 * @package phpLDAPadmin
 */
/**
 */

require './common.php';

if ($ldapserver->isReadOnly())
	pla_error(_('You cannot perform updates while server is in read-only mode'));
if (! $ldapserver->haveAuthInfo())
	pla_error(_('Not enough information to login to server. Please check your configuration.'));

$attr = $_GET['attr'];
$dn = isset($_GET['dn']) ? $_GET['dn'] : null;
$encoded_dn = rawurlencode($dn);
$encoded_attr = rawurlencode($attr);

if (! is_null($dn))
	$rdn = get_rdn($dn);
else
	$rdn = null;

# Get all current group members
$current_members = $ldapserver->getDNAttr($dn,$attr);
if ($current_members)
	$num_current_members = (is_array($current_members) ? count($current_members) : 1);
else
	$num_current_members = 0;

sort($current_members);

# Loop through all base dn's and search possible member entries
foreach ($ldapserver->getBaseDN() as $base_dn) {

	# Get all entries that can be added to the group

	if (preg_match("/^$attr$/i",$_SESSION[APPCONFIG]->GetValue('modify_member','posixgroupattr')))
		$possible_values = array_merge($ldapserver->search(null,$base_dn,
			$_SESSION[APPCONFIG]->GetValue('modify_member','posixfilter'),
			array($_SESSION[APPCONFIG]->GetValue('modify_member','posixattr'))));
	else
		$possible_values = array_merge($ldapserver->search(null,$base_dn,
			$_SESSION[APPCONFIG]->GetValue('modify_member','filter'),
			array($_SESSION[APPCONFIG]->GetValue('modify_member','attr'))));
}

if ($possible_values)
	$num_possible_values = (is_array($possible_values) ? count($possible_values) : 1);
else
	$num_possible_values = 0;

sort($possible_values);

include './header.php';

echo '<body>';
printf('<h3 class="title">%s <b>%s</b></h3>',_('Modify group'),htmlspecialchars($rdn));

printf('<h3 class="subtitle">%s <b>%s</b> &nbsp;&nbsp;&nbsp; %s: <b>%s</b></h3>',
	_('Server'),$ldapserver->name,_('Distinguished Name'),htmlspecialchars($dn));

printf('%s <b>%s</b> %s <b>%s</b>:',
	_('There are'),$num_current_members,_('members in group'),htmlspecialchars($rdn));

for ($i=0; $i<count($possible_values); $i++) {
	if (preg_match("/^$attr$/i",$_SESSION[APPCONFIG]->GetValue('modify_member','posixgroupattr')))
		$possible_members[$i] = $possible_values[$i][$_SESSION[APPCONFIG]->GetValue('modify_member','posixattr')];
	else
		$possible_members[$i] = $possible_values[$i][$_SESSION[APPCONFIG]->GetValue('modify_member','attr')];
}

sort($possible_members);

/*
 * Show only user that are not already in group.
 * This loop removes existing users from possible members
 */
foreach ($possible_members as $pkey => $possible) {
	foreach ($current_members as $current) {
		if (preg_match("/^$current$/i","$possible_members[$pkey]")) {
			unset($possible_members[$pkey]);
			break;
		}
	}
}

/*
 * Draw form with select boxes, left for all possible members and
 * right one for those that belong to group
 */

# Modifications will be sent to update_confirm which takes care of rest of the processing
echo '<br />';
echo '<br />';
echo '<form action="cmd.php" method="post" class="add_value" name="member">';
echo '<input type="hidden" name="cmd" value="update_confirm" />';

echo '<table class="modify_members">';

echo '<tr>';
printf('<td><img src="images/user.png" alt="Users" /> %s</td>',_('Available members'));
printf('<td><img src="images/uniquegroup.png" alt="Members" /> %s</td>',_('Group members'));
echo '</tr>';

# Generate select box from all possible members
echo '<tr>';
echo '<td>';
echo '<select name="notmembers" size="10" multiple>';

foreach ($possible_members as $possible)
	printf('<option>%s</option>',$possible);

echo '</select>';
echo '</td>';

# Generate select box from all current members
echo '<td>';
echo '<select name="members" size="10" multiple>';

foreach ($current_members as $current)
	printf('<option>%s</option>',$current);

echo '</select>';
echo '</td>';

echo '</tr>';

# Show buttons which move users from left to right and vice versa
echo '<tr>';
echo '<td>';
printf('<input type="button" onClick="one2two()" value="%s >>" />&nbsp;<input type="button" onClick="all2two()" value="%s >>" />',
	_('Add selected'),_('Add all'));
echo '</td>';
echo '<td>';
printf('<input type="button" onClick="two2one()" value="<< %s" />&nbsp;<input type="button" onClick="all2one()" value="<< %s" />',
	_('Remove selected'),('Remove all'));
echo '</td>';
echo '</tr>';

echo '<tr><td colspan="2">';

# Hidden attributes for update_confirm.php
printf('<input type="hidden" name="server_id" value="%s" />',$ldapserver->server_id);
printf('<input type="hidden" name="dn" value="%s" />',$dn);
printf('<input type="hidden" name="attr" value="%s" />',$encoded_attr);

/*
 * Generate array of input text boxes from current members.
 * update_confirm.php will see this as old_values[member-attribute][item]
 */
for ($i=0; $i<$num_current_members; $i++)
	printf('<input type="hidden" name="old_values[%s][%s]" value="%s" />',
		htmlspecialchars($attr),$i,htmlspecialchars($current_members[$i]));
/*
 * Javascript generates array of input text boxes from new members.
 * update_confirm.php will see this as new_values[member-attribute][item]
 * Input text boxes will be generated to div=dnu
 */
echo '<div id="dnu">';
printf('<input type="hidden" name="new_values[%s][]" value="" />',htmlspecialchars($attr));
echo '</div>';

# Submit values to update_confirm.php and when clicked, run addSelected
printf('<input type="submit" name="save" value="%s" onClick="update_new_values(\'%s\',\'modifymember\')" />',_('Save changes'),$attr);
echo '</td></tr>';

echo '</table>';
echo '</form>';

# Variables for Javascript function that moves members from left to right
echo '<script type="text/javascript" language="javascript">';
echo 'var m1 = document.member.notmembers;';
echo 'var m2 = document.member.members;';
echo '</script>';

echo '</body></html>';
?>