/** * Recursively delete a directory tree * * @access public * @param string The originating directory * @param string The subdirectory * @param boolean Force deleting an directory even if there are files left in it? * @return true */ function serendipity_killPath($basedir, $directory = '', $forceDelete = false) { static $n = "<br />\n"; static $serious = true; if ($handle = @opendir($basedir . $directory)) { while (false !== ($file = @readdir($handle))) { if ($file != '.' && $file != '..') { if (is_dir($basedir . $directory . $file)) { serendipity_killPath($basedir, $directory . $file . '/', $forceDelete); } else { $filestack[$file] = $directory . $file; } } } @closedir($handle); printf(CHECKING_DIRECTORY . "<br />\n", $directory); // No, we just don't kill files the easy way. We sort them out properly from the database // and preserve files not entered therein. $files = serendipity_fetchImagesFromDatabase(0, 0, $total, false, false, $directory); if (is_array($files)) { echo "<ul>\n"; foreach ($files as $f => $file) { echo "<li>\n"; if ($serious) { serendipity_deleteImage($file['id']); } else { echo $file['name'] . '.' . $file['extension']; } echo "</li>\n"; unset($filestack[$file['name'] . '.' . $file['extension']]); unset($filestack[$file['name'] . (!empty($file['thumbnail_name']) ? '.' . $file['thumbnail_name'] : '') . '.' . $file['extension']]); } echo "</ul>\n"; } if (count($filestack) > 0) { if ($forceDelete) { echo "<ul>\n"; foreach ($filestack as $f => $file) { if ($serious && @unlink($basedir . $file)) { printf('<li>' . DELETING_FILE . $n . DONE . "</li>\n", $file); } else { printf('<li>' . DELETING_FILE . $n . ERROR . "</li>\n", $file); } } echo "</ul>\n"; } else { echo ERROR_DIRECTORY_NOT_EMPTY . $n; echo "<ul>\n"; foreach ($filestack as $f => $file) { echo '<li>' . $file . "</li>\n"; } echo "</ul>\n"; } } echo '<strong>'; if ($serious && !empty($directory) && !preg_match('@^.?/?$@', $directory) && @rmdir($basedir . $directory)) { printf(DIRECTORY_DELETE_SUCCESS . $n, $directory); } else { printf(DIRECTORY_DELETE_FAILED . $n, $directory); } echo '</strong>'; } return true; }
/** * Recursively delete a directory tree * * @access public * @param string The originating directory * @param string The subdirectory * @param boolean Force deleting an directory even if there are files left in it? * @return true */ function serendipity_killPath($basedir, $directory = '', $forceDelete = false) { static $serious = true; if ($handle = @opendir($basedir . $directory)) { while (false !== ($file = @readdir($handle))) { if ($file != '.' && $file != '..') { if (is_dir($basedir . $directory . $file)) { serendipity_killPath($basedir, $directory . $file . '/', $forceDelete); } else { $filestack[$file] = $directory . $file; } } } @closedir($handle); echo '<span class="msg_notice"><span class="icon-info-circled"></span> '; printf(CHECKING_DIRECTORY, $directory); echo "</span>"; // No, we just don't kill files the easy way. We sort them out properly from the database // and preserve files not entered therein. $files = serendipity_fetchImagesFromDatabase(0, 0, $total, false, false, $directory); if (is_array($files)) { echo "<ul class='plainList'>\n"; foreach ($files as $f => $file) { echo "<li>\n"; if ($serious) { echo serendipity_deleteImage($file['id']); } else { echo $file['name'] . (empty($file['extension']) ? '' : '.' . $file['extension']); } echo "</li>\n"; unset($filestack[$file['name'] . (empty($file['extension']) ? '' : '.' . $file['extension'])]); unset($filestack[$file['name'] . (!empty($file['thumbnail_name']) ? '.' . $file['thumbnail_name'] : '') . (empty($file['extension']) ? '' : '.' . $file['extension'])]); } echo "</ul>\n"; } if (count($filestack) > 0) { if ($forceDelete) { echo "<ul class='plainList'>\n"; foreach ($filestack as $f => $file) { if ($serious && @unlink($basedir . $file)) { printf('<li><span class="msg_success"><span class="icon-ok-circled"></span> ' . DELETING_FILE . ' ' . DONE . "</span></li>\n", $file); } else { printf('<li><span class="msg_error"><span class="icon-attention-circled"></span> ' . DELETING_FILE . ' ' . ERROR . "</span></li>\n", $file); } } echo "</ul>\n"; } else { echo '<span class="msg_error"><span class="icon-attention-circled"></span> ' . ERROR_DIRECTORY_NOT_EMPTY . '</span>'; echo "<ul>\n"; foreach ($filestack as $f => $file) { echo '<li>' . $file . "</li>\n"; } echo "</ul>\n"; } } if ($serious && !empty($directory) && !preg_match('@^.?/?$@', $directory) && @rmdir($basedir . $directory)) { echo '<span class="msg_success"><span class="icon-ok-circled"></span> '; printf(DIRECTORY_DELETE_SUCCESS, $directory); echo "</span>\n"; } else { echo '<span class="msg_error"><span class="icon-attention-circled"></span> '; printf(DIRECTORY_DELETE_FAILED, $directory); echo "</span>\n"; } } return true; }
$data['showML'] = showMediaLibrary(); $data['messages'] = $messages; unset($messages); break; case 'doMultiDelete': if (!serendipity_checkFormToken() || !serendipity_checkPermission('adminImagesDelete')) { break; } $messages = array(); $parts = explode(',', $serendipity['GET']['id']); $data['case_do_multidelete'] = true; foreach ($parts as $id) { $id = (int) $id; if ($id > 0) { $image = serendipity_fetchImageFromDatabase($id); $messages[] = serendipity_deleteImage((int) $id); $messages[] = sprintf('<span class="msg_notice"><span class="icon-info-circled"></span> ' . RIP_ENTRY . '</span>', $image['id'] . ' - ' . serendipity_specialchars($image['realname'])); } } $data['showML'] = showMediaLibrary(); $data['messages'] = $messages; unset($messages); break; case 'delete': $file = serendipity_fetchImageFromDatabase($serendipity['GET']['fid']); if (!is_array($file) || !serendipity_checkPermission('adminImagesDelete') || !serendipity_checkPermission('adminImagesMaintainOthers') && $file['authorid'] != '0' && $file['authorid'] != $serendipity['authorid']) { return; } $data['case_delete'] = true; if (!isset($serendipity['adminFile'])) { $serendipity['adminFile'] = 'serendipity_admin.php';
break; } } $i = serendipity_syncThumbs($deleteThumbs); printf(SYNC_DONE, $i); echo '<p class="image_resize"><b>' . RESIZING . '</b></p><br />'; flush(); $i = serendipity_generateThumbs(); printf(RESIZE_DONE, $i); break; case 'DoDelete': if (!serendipity_checkFormToken() || !serendipity_checkPermission('adminImagesDelete')) { break; } $file = $serendipity['GET']['fname']; serendipity_deleteImage($serendipity['GET']['fid']); showMediaLibrary(); break; case 'delete': $file = serendipity_fetchImageFromDatabase($serendipity['GET']['fid']); if (!is_array($file) || !serendipity_checkPermission('adminImagesDelete') || !serendipity_checkPermission('adminImagesMaintainOthers') && $file['authorid'] != '0' && $file['authorid'] != $serendipity['authorid']) { return; } if (!isset($serendipity['adminFile'])) { $serendipity['adminFile'] = 'serendipity_admin.php'; } $abortLoc = $serendipity['serendipityHTTPPath'] . $serendipity['adminFile'] . '?serendipity[adminModule]=images'; $newLoc = $abortLoc . '&serendipity[adminAction]=DoDelete&serendipity[fid]=' . (int) $serendipity['GET']['fid'] . '&' . serendipity_setFormToken('url'); printf('<div class="image_notify_delete">' . ABOUT_TO_DELETE_FILE . '</div>', $file['name'] . '.' . $file['extension']); ?> <form method="get" id="delete_image">