delete () ; echo H3 ( 'update results' ) ; echo SPN ( UL ( $res ), 'red' ) ; } $repos = get_repos ( '', '', 'side,ownr,name' ) ; $recent = get_repos ( '', '', 'id DESC LIMIT 5' ) ; $mis_sub = "select pid from {$TBL(repo_xusers)}" ; $mis_qwe = "ownr in ( $mis_sub )" ; $missing = get_repos ( '', $mis_qwe, 'side,ownr,name' ) ; $xusers = get_repo_xusers ( '', '', 'pid' ) ; $xrepos = get_repos_xusers ( 'side,ownr,name' ) ; $xgroups = get_groups_xusers ( 'name' ) ; $r0_sub = "SELECT {$TBL(repos)}.id " . "FROM {$TBL(repos)} " . "LEFT JOIN {$TBL(repo_stats)} ON {$TBL(repos)}.id = rid " . "GROUP BY {$TBL(repos)}.id HAVING max(rev) = 0 " ; $r0_qwe = "id IN ( $r0_sub )" ; $rev0s = array () ; foreach ( get_repos ( '', $r0_qwe, 'creat' ) as $repo ) { if ( $repo -> revision () == 0 ) { $rev0s [] = $repo ; } } foreach ( $repos as $repo ) { $side = $repo -> side ; $tab [ 'side' ] [ $side ] [] = $repo ; } function gen_tab_sides ( $tab ) { $res = TR ( TH ( 'side' ) . TH ( 'cnt' ) ) ; $tot = 0 ; $sides = $tab [ 'side' ] ; foreach ( $sides as $side => $reps ) { $cnt = count ( $reps ) ; $res .= TR ( TD ( $side ) . TDr ( $cnt ) ) ; $tot += $cnt ; } $res .= TR ( TH ( 'total' ) . THr ( $tot ) ) ; return TAB ( $res ) ; } function gen_tab_repos ( $repos ) { if ( ! count ( $repos ) ) { return 'none' ; } $res = repos_info_head () ; foreach ( $repos as $repo ) { $res .= $repo -> info_row () ; } return TAB ( $res ) ; } function gen_tab_unused_guests () { global $TBL ; $logins_with_rights = "SELECT pid FROM {$TBL(repo_rights)} " ; $used_groups = "SELECT gid FROM {$TBL(repo_groups)} " . "WHERE name IN ( $logins_with_rights )" ; $logins_in_used_group = "SELECT pid FROM {$TBL(repo_group_members)} " . "WHERE gid IN ( $used_groups )" ; $guests_with_rights = "SELECT pid FROM {$TBL(repo_rights)} WHERE pid LIKE 'g_%'" ; $unused_guests = "login LIKE 'g_%' " . "AND login NOT IN ( $logins_in_used_group ) " . "AND login NOT IN ( $guests_with_rights )" ; $guests = get_repo_guests ( '', $unused_guests, '' ) ; if ( ! count ( $guests ) ) { return 'none' ; } $res = repo_guests_info_head () ; foreach ( $guests as $guest ) { $res .= $guest -> info_row () ; } return TAB ( $res ) ; } function gen_tab_unused_groups () { global $TBL ; $groups_with_rights = "SELECT pid FROM {$TBL(repo_rights)} WHERE pid LIKE '@%'" ; $unused_groups = "name NOT IN ( $groups_with_rights )" ; $groups = get_repo_groups ( '', $unused_groups, '' ) ; if ( ! count ( $groups ) ) { return 'none' ; } $res = repo_groups_info_head () ; foreach ( $groups as $group ) { $res .= $group -> info_row () ; } return TAB ( $res ) ; } function gen_xuser ( $xuser, $xrepos, $xgroups, $missing ) { $pid = $xuser -> pid ; $res = H4 ( "ex-user $pid" ) ; $lis = '' ; $repos = array () ; foreach ( $missing as $idx => $repo ) { if ( $repo -> ownr == $pid ) { $repos [] = $repo ; } } $repo_cnt = count ( $repos ) ; if ( $repo_cnt ) { $tab = repos_info_head () ; foreach ( $repos as $idx => $repo ) { $tab .= $repo -> info_row () ; } $repo_txt = $repo_cnt == 1 ? '1 repository' : "$repo_cnt repositories" ; $lis .= LI ( "$pid owns $repo_txt :" . BQ ( TAB ( $tab ) ) ) ; } $repos = array () ; foreach ( $xrepos as $idx => $repo ) { if ( $repo -> rights [ $pid ] ) { $repos [] = $repo ; } } $cnt = count ( $repos ) ; if ( $cnt ) { $tab = repos_info_head () ; foreach ( $repos as $idx => $repo ) { $tab .= $repo -> info_row () ; } $txt = $cnt == 1 ? '1 repository' : "$cnt repositories" ; $lis .= LI ( "$pid has access rights in $txt :" . BQ ( TAB ( $tab ) ) ) ; } $groups = array () ; foreach ( $xgroups as $idx => $group ) { if ( $group -> mems [ $pid ] ) { $groups [] = $group ; } } $cnt = count ( $groups ) ; if ( $cnt ) { $tab = repo_groups_info_head () ; foreach ( $groups as $idx => $group ) { $tab .= $group -> info_row () ; } $txt = $cnt == 1 ? '1 group' : "$cnt groups" ; $lis .= LI ( "$pid is a member of $txt : " . BQ ( TAB ( $tab ) ) ) ; } if ( ! $lis ) { $lis = LI ( "no dangling repo rights or group memberships" ) ; } elseif ( is_adm () ) { $lis .= LI ( $xuser -> delete_url () . ( $repo_cnt ? " (including $repo_txt)" : '' ) ) ; } return $res . UL ( $lis ) ; } function gen_xusers ( $xusers, $xrepos, $xgroups, $missing ) { $res = '' ; foreach ( $xusers as $idx => $xuser ) { $res .= gen_xuser ( $xuser, $xrepos, $xgroups, $missing ) ; } return $res ; } echo H3 ( 'repositories' ) ; echo BQ ( gen_tab_sides ( $tab ) ) ; echo H3 ( 'recent additions' ) ; echo BQ ( gen_tab_repos ( $recent ) ) ; echo H3 ( 'on revision zero ; ordered by date' ) ; echo BQ ( gen_tab_repos ( $rev0s ) ) ; echo H3 ( 'un-used guests' ) ; echo BQ ( gen_tab_unused_guests () ) ; echo H3 ( 'un-used groups' ) ; echo BQ ( gen_tab_unused_groups () ) ; echo H3 ( 'repositories owned by ex-users' ) ; echo BQ ( gen_tab_repos ( $missing ) ) ; echo H3 ( 'ex-users' ) ; echo gen_xusers ( $xusers, $xrepos, $xgroups, $missing ) ; html_end () ; # phpinfo() ; ?>