Changeset 27563


Ignore:
Timestamp:
03/05/14 21:44:20 (6 years ago)
Author:
rvelices
Message:
  • check parent/child album status/visibility/permissions
  • show offending ids for missing foreign keys
Location:
extensions/rv_db_integrity
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • extensions/rv_db_integrity/check_db.php

    r20461 r27563  
    2020  GROUP BY ref.'.$reff; 
    2121 
    22   $result = pwg_query($query); 
    23   return pwg_db_num_rows($result); 
     22        return query2array($query,null,$reff); 
    2423} 
    2524 
     
    7574                { 
    7675                        $err = check_table_ref($table, $field_name, $test[0], $test[1] ); 
    77                         if ($err) 
     76                        if (count($err)) 
    7877                        { 
    7978                                $failed++; 
    80                                 $tpl_var['errors'][]= $err.' error references; #'.$test[0].'.'.$test[1].' referring to #'.$table.'.'.$field_name; 
     79                                $tpl_var['errors'][]= count($err).' error references; #'.$test[0].'.'.$test[1].' referring to #'.$table.'.'.$field_name; 
     80                                $tpl_var['errors'][]= 'Offending '.$test[1].' '.implode(',',$err); 
    8181                        } 
    8282                } 
     
    107107$template->append('reference_tests', $tpl_var); 
    108108 
     109// Status/visible tests 
     110$tpl_var = array( 
     111                'ID' => 'status', 
     112                'LABEL' => 'Album status/visibility', 
     113                'CHECKED' => isset($_POST['status']) ? 'checked="checked"' : $default_checked, 
     114                'COUNT' => 1, 
     115        ); 
     116if (isset($_POST['status'])) 
     117{ 
     118        $failed = 0; 
     119        $query = ' 
     120SELECT id,name,id_uppercat,status,visible 
     121  FROM '.CATEGORIES_TABLE; 
     122        $cats = query2array($query,'id'); 
     123        foreach($cats as $cat) 
     124        { 
     125                if (!isset($cat['id_uppercat'])) continue; 
     126                if ('public'==$cat['status'] && 'public'!=$cats[$cat['id_uppercat']]['status']) 
     127                { 
     128                        $failed++; 
     129                        $tpl_var['errors'][] = 'Public album '.$cat['id'].' '.$cat['name'].' parent '.$cat['id_uppercat'].' is '.$cats[$cat['id_uppercat']]['status']; 
     130                } 
     131                if ('true'==$cat['visible'] && 'true'!=$cats[$cat['id_uppercat']]['visible']) 
     132                { 
     133                        $failed++; 
     134                        $tpl_var['errors'][] = 'Visible album '.$cat['id'].' '.$cat['name'].' parent '.$cat['id_uppercat'].' is '.$cats[$cat['id_uppercat']]['visible']; 
     135                } 
     136        } 
     137        $tpl_var['result'] = $failed; 
     138} 
     139$template->append('reference_tests', $tpl_var); 
     140 
     141// Permissions 
     142$tpl_var = array( 
     143                'ID' => 'permissions', 
     144                'LABEL' => 'Permissions', 
     145                'CHECKED' => isset($_POST['permissions']) ? 'checked="checked"' : $default_checked, 
     146                'COUNT' => 1, 
     147        ); 
     148if (isset($_POST['permissions'])) 
     149{ 
     150        $query = ' 
     151SELECT id,name,id_uppercat 
     152        FROM '.CATEGORIES_TABLE.' 
     153        WHERE status="private"'; 
     154        $cats = query2array($query,'id'); 
     155 
     156        $groups = array_fill_keys( array_keys($cats), array()); 
     157        $query = 'SELECT cat_id,group_id FROM '.GROUP_ACCESS_TABLE; 
     158        $result = pwg_query($query); 
     159        while ($row=pwg_db_fetch_assoc($result)) 
     160                $groups[$row['cat_id']][] = $row['group_id']; 
     161 
     162        $users = array_fill_keys( array_keys($cats), array()); 
     163        $query = 'SELECT cat_id,user_id FROM '.USER_ACCESS_TABLE; 
     164        $result = pwg_query($query); 
     165        while ($row=pwg_db_fetch_assoc($result)) 
     166                $users[$row['cat_id']][] = $row['user_id']; 
     167 
     168        $failed = 0; 
     169        foreach($cats as $cat) 
     170        { 
     171                if (!isset($cats[$cat['id_uppercat']])) continue; 
     172                foreach( array('users','groups') as $type) 
     173                { 
     174                        $arr = $$type; 
     175                        $me = $arr[$cat['id']]; 
     176                        $dad = $arr[$cat['id_uppercat']]; 
     177                        $delta = array_diff($me, $dad); 
     178                        if (count($delta)) 
     179                        { 
     180                                $tpl_var['errors'][] = 'Album '.$cat['id'].' '.$cat['name'].' too many '.$type.' permissions '.implode(',',$delta); 
     181                                $failed++; 
     182                        } 
     183                } 
     184        } 
     185        $tpl_var['result'] = $failed; 
     186} 
     187$template->append('reference_tests', $tpl_var); 
     188 
    109189 
    110190// #images(id,storage_category_id) vs. #image_category(image_id,category_id) --- 
     
    117197if (isset($_POST['id_storage_category_id'])) 
    118198{ 
    119   $query = ' 
     199        $query = ' 
    120200SELECT i.id, i.storage_category_id, i.path 
    121201  FROM '.IMAGES_TABLE.' i LEFT JOIN '.IMAGE_CATEGORY_TABLE.' ic ON ic.image_id=i.id AND ic.category_id=i.storage_category_id 
  • extensions/rv_db_integrity/main.inc.php

    r25964 r27563  
    11<?php /* 
    22Plugin Name: RV DB Integrity 
    3 Version: 2.6.a 
     3Version: 2.6.b 
    44Description: Checks database integrity. After install go to Administration /Tools/Maintenance: "Check database integrity". 
    55Plugin URI: http://piwigo.org/ext/extension_view.php?eid=179 
Note: See TracChangeset for help on using the changeset viewer.