/**
 * 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;
}
Example #3
0
     $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';
Example #4
0
                 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">