XPressME Integration Kit

Trac


Ignore:
Timestamp:
Mar 10, 2010, 4:47:23 PM (15 years ago)
Author:
toemon
Message:

グループ権限のMultiBlog対応 Fixes #298

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/xpressme_integration_kit/wp-content/plugins/xpressme/include/user_sync_xoops.php

    r417 r534  
    2626*/ 
    2727function get_xoops_group_role($uid=0){ 
    28         $ans = array(); 
    2928        if ($uid == 0){ 
    3029                return ''; 
     
    3231         
    3332        global $xoops_db; 
     33         
    3434        $db_groups_users_link = get_xoops_prefix() . 'groups_users_link'; 
    3535        $db_group_role = get_wp_prefix() . 'group_role'; 
    3636        $db_groups = get_xoops_prefix() . 'groups'; 
    37          
    38         $sql  = "SELECT * "; 
    39         $sql .= "FROM $db_groups_users_link "; 
    40         $sql .= "LEFT JOIN $db_group_role ON $db_groups_users_link.groupid = $db_group_role.groupid "; 
    41         $sql .= "LEFT JOIN $db_groups ON $db_groups_users_link.groupid = $db_groups.groupid "; 
    42         $sql .= "WHERE  uid = $uid"; 
    43         $user_groups = $xoops_db->get_results($sql); 
    44         $ans['capabillities'] = ''; 
    45         $ans['allway_update'] = 0; 
    46          
    47         foreach($user_groups as $user_group){ 
    48                 if ($user_group->group_type == 'Admin'){ 
    49                         $ans['capabillities'] = 'administrator'; 
    50                         if ($user_group->groupid =1){ 
    51                                 //It always rewrites it as WordPress adninistrator for an initial admin group of XOOPS.  
    52                                 $ans['allway_update'] = 1; 
    53                         } else { 
    54                                 // admin groups other than initial admin group of XOOPS  
    55                                 // It group rewrites group_type of the data base in Admin. 
    56                                 $ans['allway_update'] = $user_group->login_all;  
    57                         } 
    58                         break; 
    59                 } 
    60                 $before_level = get_role_level($ans['capabillities']); 
     37 
     38        $blog_id_list = array(); 
     39         
     40        if (function_exists('is_multisite') && is_multisite()){ 
     41                $blog_id_sql = "SELECT blog_id FROM $db_group_role GROUP BY blog_id"; 
     42                $blog_id_list = $xoops_db->get_results($blog_id_sql); 
     43        } else { 
     44                $std = new stdClass(); 
     45                $std->blog_id = 1; 
     46                $blog_id_list[] = $std; 
     47        } 
     48         
     49        $ans_array = array(); 
     50        foreach($blog_id_list as $blog_id){ 
     51                $ans = array(); 
     52                $sql  = "SELECT * "; 
     53                $sql .= "FROM $db_groups_users_link "; 
     54                $sql .= "LEFT JOIN $db_group_role ON $db_groups_users_link.groupid = $db_group_role.groupid "; 
     55                $sql .= "LEFT JOIN $db_groups ON $db_groups_users_link.groupid = $db_groups.groupid "; 
     56                $sql .= "WHERE  uid = $uid AND $db_group_role.blog_id = $blog_id->blog_id"; 
     57                $user_groups = $xoops_db->get_results($sql); 
    6158                 
    62                 $now_level = get_role_level($user_group->role); 
    63                 if ($now_level > $before_level){ 
    64                         $ans['capabillities'] = $user_group->role; 
    65                         $ans['allway_update'] = $user_group->login_all; 
    66                 } 
    67         } 
    68         return $ans; 
    69 } 
    70          
     59                //default value set 
     60                $ans['blog_id'] = $blog_id->blog_id; 
     61                $ans['capabillities'] = ''; 
     62                $ans['allway_update'] = 0; 
     63                 
     64                //get maximum role 
     65                foreach($user_groups as $user_group){ 
     66                        if ($user_group->group_type == 'Admin'){ 
     67                                $ans['capabillities'] = 'administrator'; 
     68                                if ($user_group->groupid =1){ 
     69                                        //It always rewrites it as WordPress adninistrator for an initial admin group of XOOPS.  
     70                                        $ans['allway_update'] = 1; 
     71                                } else { 
     72                                        // admin groups other than initial admin group of XOOPS  
     73                                        // It group rewrites group_type of the data base in Admin. 
     74                                        $ans['allway_update'] = $user_group->login_all;  
     75                                } 
     76                                break; 
     77                        } 
     78                        $before_level = get_role_level($ans['capabillities']); 
     79                         
     80                        $now_level = get_role_level($user_group->role); 
     81                        if ($now_level > $before_level){ 
     82                                $ans['capabillities'] = $user_group->role; 
     83                                $ans['allway_update'] = $user_group->login_all; 
     84                        } 
     85                } 
     86                $ans_array[] = $ans; 
     87        } 
     88        return $ans_array; 
     89} 
     90 
     91// for Multi Blog group_role delete 
     92function blog_group_role_delete($blog_id,$drop = false) { 
     93        global $xoops_db; 
     94         
     95        $db_group_role = get_wp_prefix() . 'group_role'; 
     96        if ($drop){ 
     97                $delsql = "DELETE FROM $db_group_role WHERE blog_id = $blog_id"; 
     98                $xoops_db->query($delsql); 
     99        } 
     100} 
     101 
     102// for Multi Blog group_role add 
     103function blog_group_role_add($blog_id,$uid = 0) { 
     104        global $xoops_db,$xpress_config; 
     105        $xpress_config->GroupeRoleCheck($blog_id); 
     106} 
     107 
     108// check user has groupe role 
     109function has_group_role($uid = 0) { 
     110        if (empty($uid)) return false; 
     111        $user_roles = get_xoops_group_role($uid); 
     112        foreach ($user_roles as $user_role){ 
     113                if (!empty($user_role['capabillities'])) 
     114                        return true; 
     115        } 
     116        return false; 
     117} 
     118 
     119/* 
     120 * WP User ID exists is checked..  
     121*/ 
     122function set_user_role($uid=0,$new_user = false){ 
     123        $roles = get_xoops_group_role($uid); 
     124         
     125        foreach($roles as $role){ 
     126                $b_id = $role['blog_id']; 
     127                $capabillities_name = $role['capabillities']; 
     128                $allway_update = $role['allway_update']; 
     129                if ($allway_update || $new_user ){ 
     130                        $sycc_user = new WP_User($uid); 
     131                        if (function_exists('is_multisite') && is_multisite()){ 
     132                                $sycc_user->for_blog($b_id);    // for Multi blog 
     133                        } 
     134                        // check user role is admin 
     135                        $is_blog_admin = false; 
     136                        $user_roles = $sycc_user->roles; 
     137                        foreach ($user_roles as $user_role){ 
     138                                if (strcmp($user_role , 'administrator') == 0){ 
     139                                        $is_blog_admin = true; 
     140                                        break; 
     141                                } 
     142                        } 
     143                        if (!$is_blog_admin){   // admin not change role 
     144                                $sycc_user->set_role($capabillities_name); 
     145                        } 
     146                } 
     147//              $message .= '...UPDATE ' . $xoops_user->uname . '(' . $capabillities_name . ')'; 
     148//              $message .= '...INSERT ' . $user_login_name . '(' . $capabillities_name . ')'; 
     149        } 
     150 
     151} 
     152 
    71153/* 
    72154 * Get User ID of WordPress from the login name.  
     
    118200 
    119201        foreach($xoops_users as $xoops_user){ 
    120                 $role = get_xoops_group_role($xoops_user->uid); 
    121                 $capabillities_name = $role['capabillities']; 
    122                 $allway_update = $role['allway_update']; 
    123202                 
    124203                $wp_user_id = get_wp_user_id($xoops_user->uname) ; 
    125                  
    126                 if (empty($capabillities_name)){ 
     204 
     205 
     206                $has_role = has_group_role($xoops_user->uid); 
     207                if (!$has_role){ 
    127208                        if ($sync_uid != 0){ 
    128209                                if ($wp_user_id) { 
     
    148229                 
    149230                if ($wp_user_id){ 
     231                        $add_user =  true; 
    150232                        $wu_sql  =      "UPDATE $db_xpress_users "; 
    151233                        $wu_sql .=      'SET '; 
     
    159241 
    160242                        $xoops_db->query($wu_sql); 
    161                         if ($allway_update){ 
    162                                 $sycc_user = new WP_User($wp_user_id); 
    163                                 $sycc_user->set_role($capabillities_name); 
    164                                 $message .= '...UPDATE ' . $xoops_user->uname . '(' . $capabillities_name . ')'; 
    165  
    166                         } else { 
    167                                 $message .= '...UPDATE ' . $xoops_user->uname . '(Level Not Change)'; 
    168                         } 
     243                         
     244                        $message .= set_user_role($wp_user_id,$add_user); 
     245 
    169246                        if (!check_user_meta_prefix($wp_user_id)){ 
    170247                                repair_user_meta_prefix(); 
     
    173250                        $is_update = true; 
    174251                }else{ 
     252                        $add_user =  false; 
    175253                        if (is_used_wp_user_id($xoops_user->uid) ) { // WP User ID has already been used.  
    176254                                $wu_sql  =      "INSERT INTO $db_xpress_users "; 
     
    192270                                $wp_user_id = $xoops_user->uid; 
    193271                        } 
    194                         $sycc_user = new WP_User($wp_user_id); 
    195                         $sycc_user->set_role($capabillities_name);                                               
    196                         $message .= '...INSERT ' . $user_login_name . '(' . $capabillities_name . ')'; 
     272                        $message .= set_user_role($wp_user_id,$add_user); 
    197273                } 
    198274                 
Note: See TracChangeset for help on using the changeset viewer.