Changeset 1572

Show
Ignore:
Timestamp:
03/26/08 10:07:53 (4 months ago)
Author:
misja
Message:

Misja Hoebe <misja@curverider.co.uk> Applied attachment:ticket:281:files_actions.patch, closes #281

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • devel/mod/file/lib/files_actions.php

    r1539 r1572  
    77global $page_owner; 
    88$textlib = textlib_get_instance(); 
     9 
     10/** 
     11 * Deletes a file 
     12 * #281 
     13 * @param file - The file to delete. Get this from get_record(s) 
     14 */ 
     15function deleteFile($file) { 
     16        if (!empty($file) && (permissions_check("files:edit",$file->files_owner)) || permissions_check("files:edit",$file->owner)) { 
     17                @unlink(stripslashes($CFG->dataroot.$file->location)); //TODO maybe some error reporting here!?! Penny 
     18                delete_records('files','ident',$file->ident); 
     19                delete_records('tags','tagtype','file','ref',$file->ident); 
     20        } 
     21} 
     22 
     23/** 
     24 * Deletes a folder and all its sub folders 
     25 * #281 
     26 * @param file - The folder to delete. Get this from get_record(s) 
     27 */ 
     28function deleteFolder($folder) { 
     29        if (!empty($folder) && (permissions_check("files:edit",$folder->files_owner) || permissions_check("files:edit",$folder->owner))) { 
     30                $files = get_records('files', 'folder', $folder->ident); 
     31                if (!empty($files)) { 
     32                        foreach($files as $file) { 
     33                                deleteFile($file); 
     34                        } 
     35                } 
     36         
     37                $childFolders = get_records('file_folders', 'parent', $folder->ident); 
     38                if (!empty($childFolders)) { 
     39                        foreach($childFolders as $childFolder) { 
     40                                deleteFolder($childFolder); 
     41                        } 
     42                } 
     43         
     44                set_field('file_folders','parent',$folder->parent,'parent',$folder->ident); 
     45                delete_records('file_folders','ident',$folder->ident); 
     46                delete_records('tags','tagtype','folder','ref',$folder->ident); 
     47        } 
     48} 
     49 
     50/** 
     51 * Returns the total number of sub folders of a folder, including all sub folders of sub filders an infinitum... 
     52 * #281 
     53 * @param file - The ident of the top level folder 
     54 */ 
     55function getNumberOfChildFolders($id) { 
     56        $count = 0; 
     57         
     58        $childFolders = get_records('file_folders', 'parent', $id); 
     59        if (!empty($childFolders)) { 
     60                foreach($childFolders as $childFolder) { 
     61                        $count++; 
     62                        $count += getNumberOfChildFolders($childFolder->ident); 
     63                } 
     64        } 
     65         
     66        return $count; 
     67} 
     68 
    969 
    1070$action = optional_param('action'); 
     
    187247    case "delete_folder": 
    188248        $id = optional_param('delete_folder_id',0,PARAM_INT); 
    189         require_confirm(__gettext('Are you sure you want to permanently delete this folder?')); 
    190  
     249        $files = get_records('files', 'folder', $id); 
     250        $text = sprintf(__gettext("Are you sure you want to permanently delete this folder and its %s file(s) and %s folder(s)?"), 
     251                                        count($files), getNumberOfChildFolders($id)); 
     252        require_confirm($text); 
     253                 
    191254        if (!empty($id) && $id != -1) { 
    192255            $folder = get_record('file_folders','ident',$id); 
     
    195258                $folder = plugin_hook("folder","delete",$folder); 
    196259                if (!empty($folder)) { 
    197                     set_field('file_folders','parent',$folder->parent,'parent',$id); 
    198                     set_field('files','folder',$folder->parent,'folder',$id); 
    199                     delete_records('file_folders','ident',$id); 
    200                     delete_records('tags','tagtype','folder','ref',$id); 
     260                        deleteFolder($folder); 
    201261                } 
    202262                global $redirect_url; 
     
    223283                $file = plugin_hook("file","delete",$file); 
    224284                if (!empty($file)) { 
    225                     @unlink(stripslashes($CFG->dataroot.$file->location)); //TODO maybe some error reporting here!?! Penny 
    226                     delete_records('files','ident',$id); 
    227                     delete_records('tags','tagtype','file','ref',$id); 
     285                        deleteFile($file); 
    228286                } 
    229287                $redirect_url = $CFG->wwwroot . $files_username . "/files/"; 
     
    240298        break; 
    241299    } 
    242      
    243      
    244300} 
    245301 
     302 
    246303?>