mirror of
https://gitlab.com/davical-project/davical.git
synced 2026-08-26 17:56:29 +00:00
Add whitespace to sync_LDAP_groups
Make the function more readable.
This commit is contained in:
parent
820d0992eb
commit
a7fc46a848
@ -498,7 +498,6 @@ function sync_LDAP_groups(){
|
||||
if ( ! $ldapDriver->valid ) return;
|
||||
|
||||
$mapping = $c->authenticate_hook['config']['group_mapping_field'];
|
||||
//$attributes = array('cn','modifyTimestamp','memberUid');
|
||||
$attributes = array_values_mapping($mapping);
|
||||
$ldap_groups_tmp = $ldapDriver->getAllGroups($attributes);
|
||||
|
||||
@ -507,27 +506,41 @@ function sync_LDAP_groups(){
|
||||
$member_field = isset($mapping['members'])
|
||||
? $mapping['members']
|
||||
: 'memberUid';
|
||||
$dnfix = isset($c->authenticate_hook['config']['group_member_dnfix']) && $c->authenticate_hook['config']['group_member_dnfix'];
|
||||
$dnfix = isset($c->authenticate_hook['config']['group_member_dnfix'])
|
||||
&& $c->authenticate_hook['config']['group_member_dnfix'];
|
||||
|
||||
foreach($ldap_groups_tmp as $key => $ldap_group){
|
||||
$group_mapping = $ldap_group[$mapping['username']];
|
||||
$ldap_groups_info[$group_mapping] = $ldap_group;
|
||||
|
||||
if ( isset($ldap_groups_info[$group_mapping][$member_field]) ) {
|
||||
if ( is_array($ldap_groups_info[$group_mapping][$member_field]) ) {
|
||||
unset( $ldap_groups_info[$group_mapping][$member_field]['count'] );
|
||||
}
|
||||
else {
|
||||
$ldap_groups_info[$group_mapping][$member_field] = array($ldap_groups_info[$group_mapping][$member_field]);
|
||||
$ldap_groups_info[$group_mapping][$member_field]
|
||||
= array($ldap_groups_info[$group_mapping][$member_field]);
|
||||
}
|
||||
}
|
||||
unset($ldap_groups_tmp[$key]);
|
||||
}
|
||||
|
||||
$db_groups = array();
|
||||
$db_group_members = array();
|
||||
$qry = new AwlQuery( "SELECT g.username AS group_name, member.username AS member_name FROM dav_principal g LEFT JOIN group_member ON (g.principal_id=group_member.group_id) LEFT JOIN dav_principal member ON (member.principal_id=group_member.member_id) WHERE g.type_id = 3");
|
||||
|
||||
$qry = new AwlQuery( "
|
||||
SELECT g.username AS group_name, member.username AS member_name
|
||||
FROM dav_principal g
|
||||
LEFT JOIN group_member ON (g.principal_id = group_member.group_id)
|
||||
LEFT JOIN dav_principal member ON
|
||||
(member.principal_id = group_member.member_id)
|
||||
WHERE g.type_id = 3
|
||||
");
|
||||
|
||||
$qry->Exec('sync_LDAP',__LINE__,__FILE__);
|
||||
|
||||
while($db_group = $qry->Fetch()) {
|
||||
$db_groups[$db_group->group_name] = $db_group->group_name;
|
||||
$db_groups[$db_group->group_name] = $db_group->group_name;
|
||||
$db_group_members[$db_group->group_name][] = $db_group->member_name;
|
||||
}
|
||||
|
||||
@ -547,42 +560,51 @@ function sync_LDAP_groups(){
|
||||
|
||||
if ( sizeof ( $groups_to_create ) ){
|
||||
$validUserFields = awl_get_fields('usr');
|
||||
|
||||
foreach ( $groups_to_create as $k => $group ){
|
||||
if ( isset($c->do_not_sync_group_from_ldap) && isset($c->do_not_sync_group_from_ldap[$group]) ){
|
||||
if ( isset($c->do_not_sync_group_from_ldap)
|
||||
&& isset($c->do_not_sync_group_from_ldap[$group]) ) {
|
||||
unset($groups_to_create[$k]);
|
||||
$groups_nothing_done[] = $group;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$user = (object) array();
|
||||
|
||||
if ( isset($c->authenticate_hook['config']['default_value']) && is_array($c->authenticate_hook['config']['default_value']) ) {
|
||||
if ( isset($c->authenticate_hook['config']['default_value'])
|
||||
&& is_array($c->authenticate_hook['config']['default_value']) ) {
|
||||
foreach ( $c->authenticate_hook['config']['default_value'] as $field => $value ) {
|
||||
if ( isset($validUserFields[$field]) ) {
|
||||
$user->{$field} = $value;
|
||||
$user->{$field} = $value;
|
||||
dbg_error_log( "LDAP", "Setting usr->%s to %s from configured defaults", $field, $value );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$user->user_no = 0;
|
||||
$ldap_values = $ldap_groups_info[$group];
|
||||
|
||||
foreach ( $mapping as $field => $value ) {
|
||||
dbg_error_log( "LDAP", "Considering copying %s", $field );
|
||||
if ( isset($validUserFields[$field]) ) {
|
||||
$user->{$field} = $ldap_values[$value];
|
||||
$user->{$field} = $ldap_values[$value];
|
||||
dbg_error_log( "LDAP", "Setting usr->%s to %s from LDAP field %s", $field, $ldap_values[$value], $value );
|
||||
}
|
||||
}
|
||||
if ($user->fullname=="") {
|
||||
|
||||
if ($user->fullname == "") {
|
||||
$user->fullname = $group;
|
||||
}
|
||||
if ($user->displayname=="") {
|
||||
|
||||
if ($user->displayname == "") {
|
||||
$user->displayname = $group;
|
||||
}
|
||||
|
||||
$user->username = $group;
|
||||
$user->updated = "now"; /** @todo Use the 'updated' timestamp from LDAP for groups too */
|
||||
|
||||
$principal = new Principal('username',$group);
|
||||
$principal = new Principal('username', $group);
|
||||
if ( $principal->Exists() ) {
|
||||
$principal->Update($user);
|
||||
}
|
||||
@ -590,17 +612,25 @@ function sync_LDAP_groups(){
|
||||
$principal->Create($user);
|
||||
}
|
||||
|
||||
$qry = new AwlQuery( "UPDATE dav_principal set type_id = 3 WHERE username=:group ",array(':group'=>$group) );
|
||||
$qry = new AwlQuery( "
|
||||
UPDATE dav_principal
|
||||
SET type_id = 3
|
||||
WHERE username = :group",
|
||||
array(':group' => $group) );
|
||||
$qry->Exec('sync_LDAP',__LINE__,__FILE__);
|
||||
|
||||
Principal::cacheDelete('username', $group);
|
||||
|
||||
// mark group for updating, so users get synced
|
||||
$groups_to_update[] = $group;
|
||||
}
|
||||
|
||||
$c->messages[] = sprintf( i18n('- creating groups : %s'), join(', ',$groups_to_create) );
|
||||
}
|
||||
|
||||
if ( sizeof ( $groups_to_update ) ){
|
||||
$c->messages[] = sprintf(i18n('- updating groups : %s'),join(', ',$groups_to_update));
|
||||
|
||||
foreach ( $groups_to_update as $group ){
|
||||
$db_members = is_array( $db_group_members[$group] )
|
||||
? array_values( $db_group_members[$group] )
|
||||
@ -610,20 +640,27 @@ function sync_LDAP_groups(){
|
||||
: array();
|
||||
|
||||
$mapping_field = $c->authenticate_hook['config']['mapping_field'];
|
||||
if (isset($c->authenticate_hook['config']['group_match_username_attr']) && isset($mapping_field['username'])) {
|
||||
|
||||
if (isset($c->authenticate_hook['config']['group_match_username_attr'])
|
||||
&& isset($mapping_field['username'])) {
|
||||
$query = $ldapDriver->ldap_query_one;
|
||||
$username_ldap_attribute = $mapping_field['username'];
|
||||
$filter="(objectCategory=person)";
|
||||
$filter = "(objectCategory=person)";
|
||||
|
||||
$ldap_members_tmp = array();
|
||||
|
||||
foreach ( $ldap_members as $member ){
|
||||
$entry = ldap_read($ldapDriver->connect, $member, $filter, array($username_ldap_attribute));
|
||||
$ldap_user_entry = ldap_first_entry($ldapDriver->connect,$entry);
|
||||
$ldap_user_attributes = ldap_get_attributes($ldapDriver->connect, $ldap_user_entry);
|
||||
$entry = ldap_read($ldapDriver->connect, $member, $filter,
|
||||
array($username_ldap_attribute));
|
||||
$ldap_user_entry
|
||||
= ldap_first_entry($ldapDriver->connect,$entry);
|
||||
$ldap_user_attributes
|
||||
= ldap_get_attributes($ldapDriver->connect, $ldap_user_entry);
|
||||
|
||||
array_push($ldap_members_tmp, $ldap_user_attributes[$username_ldap_attribute][0]);
|
||||
array_push($ldap_members_tmp,
|
||||
$ldap_user_attributes[$username_ldap_attribute][0]);
|
||||
}
|
||||
|
||||
$ldap_members = $ldap_members_tmp;
|
||||
}
|
||||
else if ( $member_field == 'uniqueMember' || $dnfix ) {
|
||||
@ -633,17 +670,36 @@ function sync_LDAP_groups(){
|
||||
$add_users = array_diff ( $ldap_members, $db_members );
|
||||
if ( sizeof ( $add_users ) ){
|
||||
$c->messages[] = sprintf(i18n('- adding %s to group : %s'),join(', ', $add_users ), $group);
|
||||
foreach ( $add_users as $member ){
|
||||
$qry = new AwlQuery( "INSERT INTO group_member SELECT g.principal_id AS group_id,u.principal_id AS member_id FROM dav_principal g, dav_principal u WHERE g.username=:group AND u.username=:member",array (':group'=>$group,':member'=>$member) );
|
||||
|
||||
foreach ( $add_users as $member ) {
|
||||
$qry = new AwlQuery( "
|
||||
INSERT INTO group_member
|
||||
SELECT g.principal_id AS group_id, u.principal_id AS member_id
|
||||
FROM dav_principal g, dav_principal u
|
||||
WHERE g.username = :group
|
||||
AND u.username = :member",
|
||||
array (':group' => $group, ':member' => $member) );
|
||||
|
||||
$qry->Exec('sync_LDAP_groups',__LINE__,__FILE__);
|
||||
Principal::cacheDelete('username', $member);
|
||||
}
|
||||
}
|
||||
$remove_users = @array_flip( @array_flip( array_diff( $db_members, $ldap_members ) ));
|
||||
if ( sizeof ( $remove_users ) ){
|
||||
|
||||
$remove_users = @array_flip( @array_flip( array_diff( $db_members,
|
||||
$ldap_members )));
|
||||
if ( sizeof ( $remove_users ) ) {
|
||||
$c->messages[] = sprintf(i18n('- removing %s from group : %s'),join(', ', $remove_users ), $group);
|
||||
foreach ( $remove_users as $member ){
|
||||
$qry = new AwlQuery( "DELETE FROM group_member USING dav_principal g,dav_principal m WHERE group_id=g.principal_id AND member_id=m.principal_id AND g.username=:group AND m.username=:member",array (':group'=>$group,':member'=>$member) );
|
||||
|
||||
foreach ( $remove_users as $member ) {
|
||||
$qry = new AwlQuery( "
|
||||
DELETE FROM group_member
|
||||
USING dav_principal g,dav_principal m
|
||||
WHERE group_id = g.principal_id
|
||||
AND member_id = m.principal_id
|
||||
AND g.username = :group
|
||||
AND m.username=:member",
|
||||
array (':group' => $group , ':member' => $member) );
|
||||
|
||||
$qry->Exec('sync_LDAP_groups',__LINE__,__FILE__);
|
||||
Principal::cacheDelete('username', $member);
|
||||
}
|
||||
@ -651,20 +707,31 @@ function sync_LDAP_groups(){
|
||||
}
|
||||
}
|
||||
|
||||
if ( sizeof ( $groups_to_deactivate ) ){
|
||||
foreach ( $groups_to_deactivate as $k => $group ){
|
||||
if ( isset($c->do_not_sync_group_from_ldap) && isset($c->do_not_sync_group_from_ldap[$group]) ){
|
||||
if ( sizeof ( $groups_to_deactivate ) ) {
|
||||
foreach ( $groups_to_deactivate as $k => $group ) {
|
||||
if ( isset($c->do_not_sync_group_from_ldap)
|
||||
&& isset($c->do_not_sync_group_from_ldap[$group]) ) {
|
||||
unset($groups_to_deactivate[$k]);
|
||||
$groups_nothing_done[] = $group;
|
||||
|
||||
} else {
|
||||
$qry = new AwlQuery( 'UPDATE dav_principal SET user_active=FALSE WHERE username=:group AND type_id = 3',array(':group'=>$group) );
|
||||
$qry = new AwlQuery( '
|
||||
UPDATE dav_principal
|
||||
SET user_active = FALSE
|
||||
WHERE username = :group
|
||||
AND type_id = 3',
|
||||
array(':group' => $group) );
|
||||
$qry->Exec('sync_LDAP',__LINE__,__FILE__);
|
||||
Principal::cacheFlush('username=:group AND type_id = 3', array(':group'=>$group) );
|
||||
|
||||
Principal::cacheFlush('username=:group AND type_id = 3',
|
||||
array(':group' => $group) );
|
||||
}
|
||||
}
|
||||
|
||||
if ( sizeof($groups_to_deactivate) )
|
||||
$c->messages[] = sprintf(i18n('- deactivated groups : %s'), join(', ',$groups_to_deactivate));
|
||||
}
|
||||
|
||||
if ( sizeof($groups_nothing_done) )
|
||||
$c->messages[] = sprintf( i18n('- nothing done on : %s'), join(', ',$groups_nothing_done) );
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user