Ticket #923: links-multi-delete-ajax.diff

File links-multi-delete-ajax.diff, 4.5 kB (added by westi, 3 years ago)

Updated patch with AJAX multidelete goodness

  • wp-admin/list-manipulation.js

    old new  
    11var listItems; 
    22var reg_color = '#FFFFFF'; 
    33var alt_color = '#F1F1F1'; 
     4var multidelete = new Array(); 
    45 
    56addLoadEvent(getListItems); 
    67 
     8function deleteMultiSelect( what, name, message ) { 
     9        if (multidelete.length > 0) { 
     10                // Could we disable the button here? 
     11                message('Slow down cowboy. Multiselect delete in progress!'); 
     12        } 
     13         
     14        inputs = document.getElementsByName(name); 
     15        if (confirm(message)) { 
     16                // Find our work 
     17                for (var i = 0; i < inputs.length ; i++) { 
     18                        if (inputs[i].checked) { 
     19                                multidelete.push(inputs[i].value); 
     20                        } 
     21                } 
     22 
     23                if (multidelete.length > 0 ) { 
     24                        multidelete_what = what; 
     25                        deleteMultiSelectCallback(false); 
     26                } 
     27        } else { 
     28                return false; 
     29        } 
     30        return false; 
     31} 
     32 
     33function deleteMultiSelectCallback(iscallback) 
     34{ 
     35        if (iscallback) 
     36        { 
     37                id = multidelete_what + '-' + multidelete.pop(); 
     38                 
     39                var response = ajaxMultiDel.response; 
     40                if ( isNaN(response) ) { alert(response); } 
     41                response = parseInt(response, 10); 
     42                if ( -1 == response ) { 
     43                        ajaxMultiDel.myResponseElement.innerHTML = "You don't have permission to do that.";  
     44                        return false; 
     45                } else if ( 0 == response ) {  
     46                        ajaxMultiDel.myResponseElement.interHTML = "Something odd happened.  Try refreshing the page? Either that or what you tried to delete never existed in the first place.";  
     47                        return false; 
     48                } else if ( 1 == response ) { 
     49                        Fat.fade_element(id,null,700,'#FF3333'); 
     50                        setTimeout("document.getElementById('"+id+"').parentNode.removeChild(document.getElementById('"+id+"'))", 1000) 
     51                        var pos = getListPos(id); 
     52                        listItems.splice(pos,1); 
     53                        ajaxMultiDel.myResponseElement.parentNode.removeChild(ajaxMultiDel.myResponseElement); 
     54                } 
     55        } 
     56 
     57        if (multidelete.length > 0) { 
     58                ajaxMultiDel = new sack('list-manipulation.php'); 
     59                if ( ajaxMultiDel.failed ) return true; 
     60                ajaxMultiDel.myResponseElement = getResponseElement(); 
     61                ajaxMultiDel.method = 'POST'; 
     62                ajaxMultiDel.onLoading = function() { ajaxMultiDel.myResponseElement.innerHTML = 'Sending Data...'; }; 
     63                ajaxMultiDel.onLoaded = function() { ajaxMultiDel.myResponseElement.innerHTML = 'Data Sent...'; }; 
     64                ajaxMultiDel.onInteractive = function() { ajaxMultiDel.myResponseElement.innerHTML = 'Processing Data...'; }; 
     65                ajaxMultiDel.onCompletion = function() { deleteMultiSelectCallback(true); }; 
     66                ajaxMultiDel.runAJAX('action=delete-' + multidelete_what + '&id=' + multidelete[multidelete.length -1 ]); 
     67        } else { 
     68                //Last time through so recolour the list 
     69                recolorList(); 
     70        } 
     71        return false; 
     72} 
     73 
    774function deleteSomething( what, id, message ) { 
    875        what.replace('-', ' '); 
    976        if (!message) message = 'Are you sure you want to delete this ' + what + '?'; 
  • wp-admin/link-manager.php

    old new  
    3333if ('' != $_POST['assign']) $action = 'assign'; 
    3434if ('' != $_POST['visibility']) $action = 'visibility'; 
    3535if ('' != $_POST['move']) $action = 'move'; 
     36if ('' != $_POST['bulkdelete']) $action = 'bulkdelete'; 
    3637if ('' != $_POST['linkcheck']) $linkcheck = $_POST[linkcheck]; 
    3738 
    3839switch ($action) { 
     
    177178    wp_redirect($this_file); 
    178179    break; 
    179180  } // end Delete 
     181   
     182  case 'bulkdelete': { 
     183        check_admin_referer(); 
     184           
     185    if ( !current_user_can('manage_links') ) 
     186      die (__("Cheatin' uh ?")); 
     187         
     188        // Iterate through and delete each specified link  
     189        if (isset($_POST['linkcheck'])) { 
     190                foreach($_POST['linkcheck'] as $link_id) { 
     191                        wp_delete_link((int) $link_id); 
     192                } 
     193        } 
     194         
     195        wp_redirect($this_file); 
     196         
     197        break; 
     198  } // end bulkdelete 
    180199 
    181200  case 'linkedit': { 
    182201        $xfn = true; 
     
    422441        <td> 
    423442          <?php _e('Move to category:'); link_category_dropdown('category'); ?> <input name="move" type="submit" id="move" value="<?php _e('Go') ?>" /> 
    424443        </td> 
     444        <td> 
     445          <input name="bulkdelete" type="submit" id="bulkdelete" value="<?php _e('Delete Selected') ?>" onclick="return deleteMultiSelect('link','linkcheck[]','You are about to delete all selected links.\n  \'Cancel\' to stop, \'OK\' to delete.');"/> 
     446        </td> 
    425447        <td align="right"> 
    426448          <a href="#" onclick="checkAll(document.getElementById('links')); return false; "><?php _e('Toggle Checkboxes') ?></a> 
    427449        </td>