function imagepicker_files_validate_do in Image Picker 6.2
1 call to imagepicker_files_validate_do()
File
- ./
imagepicker.admin.inc, line 1357 - admin settings functions
Code
function imagepicker_files_validate_do($dir) {
$fstype = variable_get('imagepicker_fstype', '');
$result = TRUE;
$errlist = array();
$uidlist = array();
if ($fstype == 'numeric') {
$baddirlist = array();
$numericdirlist = file_scan_directory($dir, ".*", array(
'.',
'..',
'CVS',
), 0, FALSE);
foreach ($numericdirlist as $k => $v) {
if (is_numeric($numericdirlist[$k]->basename)) {
$numericdir = $numericdirlist[$k]->basename;
$result = db_query("SELECT uid FROM {users} WHERE uid=%d AND status=1", array(
$numericdir,
));
$row = db_fetch_array($result);
if ($row['uid']) {
// build list of valid paths to images, use uid as key
$uidlist[$row['uid']] = $numericdirlist[$k]->filename;
}
else {
array_push($baduseridlist, $numericdir);
}
}
}
if (count($baduseridlist)) {
$errlist['user ids do not exist'] = implode(',', $baduseridlist);
}
}
elseif ($fstype == 'alpha') {
// check that a-z and other exist, log errors
$dirlist = range('a', 'z');
array_push($dirlist, 'others');
$baddirlist = array();
$gooddirlist = array();
foreach ($dirlist as $alphadir) {
if (!is_dir($dir . DIRECTORY_SEPARATOR . $alphadir)) {
array_push($baddirlist, $alphadir);
}
else {
array_push($gooddirlist, $alphadir);
}
}
if (count($baddirlist)) {
$errlist['missing dirs'] = implode(',', $baddirlist);
}
// get the first level dirs actually present and check for unknowns
$baddirlist = array();
$alphadirlist = file_scan_directory($dir, ".*", array(
'.',
'..',
'CVS',
), 0, FALSE);
foreach ($alphadirlist as $k => $v) {
$alphadir = $alphadirlist[$k]->basename;
if (!in_array($alphadir, $dirlist)) {
array_push($baddirlist, $alphadir);
}
}
if (count($baddirlist)) {
$errlist['Anomalous directories'] = implode(',', $baddirlist);
}
// search for usernames and validate them
$userdirlist = array();
$userdirlistpath = array();
foreach ($gooddirlist as $alphadir) {
$gooddir = $dir . DIRECTORY_SEPARATOR . $alphadir;
$userdirlisttmp = file_scan_directory($gooddir, ".*", array(
'.',
'..',
'CVS',
), 0, FALSE);
if (count($userdirlisttmp)) {
foreach ($userdirlisttmp as $k => $v) {
array_push($userdirlist, $userdirlisttmp[$k]->basename);
array_push($userdirlistpath, $userdirlisttmp[$k]->filename);
}
}
}
// we have usernames, now look them up
$badusernamelist = array();
foreach ($userdirlist as $k => $username) {
$result = db_query("SELECT uid FROM {users} WHERE name='%s' AND status=1", array(
$username,
));
$row = db_fetch_array($result);
if ($row['uid']) {
// build list of valid paths to images, use uid as key
$uidlist[$row['uid']] = $userdirlistpath[$k];
}
else {
array_push($badusernamelist, $username);
}
}
if (count($badusernamelist)) {
$errlist['bad usernames'] = implode(',', $badusernamelist);
}
}
// check valid uids against the imagepicker table, get the file list for each
$badfiledirs = array();
$badfilelist = array();
$badthumbsfilelist = array();
$badbrowserfilelist = array();
$badfilelist2 = array();
$badwritefiles = array();
$files = array();
$thumbsfiles = array();
$browserfiles = array();
foreach ($uidlist as $uid => $filepath) {
$imgnames = array();
$result = db_query("SELECT img_name FROM {imagepicker} WHERE uid=%d", array(
$uid,
));
while ($row = db_fetch_array($result)) {
array_push($imgnames, $row['img_name']);
}
$filestmp = file_scan_directory($filepath, ".*", array(
'.',
'..',
'CVS',
IMAGEPICKER_THUMBS_DIR,
IMAGEPICKER_BROWSER_DIR,
IMAGEPICKER_WATERMARK_DIR,
IMAGEPICKER_ORIG_DIR,
), 0, FALSE);
if (count($filestmp)) {
// compare files with db
foreach ($filestmp as $k => $v) {
$file = $filestmp[$k]->basename;
array_push($files, $file);
if (!is_writable($filestmp[$k]->filename)) {
array_push($badwritefiles, $filestmp[$k]->filename);
}
$thumbsfile = $filepath . DIRECTORY_SEPARATOR . IMAGEPICKER_THUMBS_DIR . DIRECTORY_SEPARATOR . $file;
array_push($thumbsfiles, $thumbsfile);
$browserfile = $filepath . DIRECTORY_SEPARATOR . IMAGEPICKER_BROWSER_DIR . DIRECTORY_SEPARATOR . $file;
array_push($browserfiles, $browserfile);
// test for presence in db
if (!in_array($file, $imgnames)) {
array_push($badfilelist, $file);
}
if (!file_exists($thumbsfile)) {
array_push($badthumbsfilelist, $thumbsfile);
}
elseif (!is_writable($thumbsfile)) {
array_push($badwritefiles, $thumbsfile);
}
if (!file_exists($browserfile)) {
array_push($badbrowserfilelist, $browserfile);
}
elseif (!is_writable($browserfile)) {
array_push($badwritefiles, $browserfile);
}
}
}
else {
array_push($badfiledirs, $uid);
}
// compare db to files
if (count($imgnames)) {
foreach ($imgnames as $imgname) {
if (!in_array($imgname, $files)) {
array_push($badfilelist2, $filepath . DIRECTORY_SEPARATOR . $imgname);
$thumbsfile = $filepath . DIRECTORY_SEPARATOR . IMAGEPICKER_THUMBS_DIR . DIRECTORY_SEPARATOR . $imgname;
if (!file_exists($thumbsfile)) {
array_push($badthumbsfilelist, $thumbsfile);
}
$browserfile = $filepath . DIRECTORY_SEPARATOR . IMAGEPICKER_BROWSER_DIR . DIRECTORY_SEPARATOR . $imgname;
if (!file_exists($browserfile)) {
array_push($badbrowserfilelist, $browserfile);
}
}
}
}
}
if (count($badfilelist)) {
$errlist[t('file not found in database')] = implode(',', $badfilelist);
}
if (count($badfilelist2)) {
$errlist[t('database image name not found in files')] = implode(',', $badfilelist2);
}
if (count($badthumbsfilelist)) {
$errlist[t('thumbs file does not exist')] = implode(',', $badthumbsfilelist);
}
if (count($badbrowserfilelist)) {
$errlist[t('browser file does not exist')] = implode(',', $badbrowserfilelist);
}
if (count($badfiledirs)) {
$errlist[t('uid has no files')] = implode(',', $badfiledirs);
}
if (count($badwritefiles)) {
$errlist[t('file not writable')] = implode(',', $badwritefiles);
}
if (count($errlist)) {
return $errlist;
}
else {
return count($uidlist);
}
}