WordPress.org

Plugin Directory

Changeset 545675


Ignore:
Timestamp:
05/18/12 08:42:53 (2 years ago)
Author:
nbachiyski
Message:

Use a class to wrap the plugin

We will need to store some data and I don't want it in globals.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ice/trunk/ice.php

    r545406 r545675  
    2424require_once dirname( __FILE__ ) . '/class-ice-span-filter.php'; 
    2525 
    26 // Add plugins to TinyMCE 
    27 add_filter('mce_external_plugins', 'vrev_load_plugins'); 
    28 function vrev_load_plugins($plugins) { 
    29     global $current_screen; 
    30     // Only add to the default editor (for now?), supporting this in any editor would require more post-processing 
    31     if ( 'post' != $current_screen->id ) 
     26class ICE_Visual_Revisions { 
     27 
     28    function __construct() { 
     29        add_filter('mce_external_plugins', array( $this, 'vrev_load_plugins' ) ); 
     30        add_filter('wp_insert_post_data', array( $this, 'vrev_save_revisions_content' ), 1, 2); 
     31        add_filter('the_editor_content', array( $this, 'vrev_load_revisions_content' ) , 1 ); 
     32        add_action( 'wp_head', array( $this, 'vrev_add_preview_css' ) ); 
     33    } 
     34 
     35    // Add plugins to TinyMCE 
     36    function vrev_load_plugins($plugins) { 
     37        global $current_screen; 
     38        // Only add to the default editor (for now?), supporting this in any editor would require more post-processing 
     39        if ( 'post' != $current_screen->id ) 
     40            return $plugins; 
     41 
     42        $url = plugin_dir_url(__file__); 
     43 
     44        $plugins['ice'] = $url . 'ice/editor_plugin.js'; 
     45        $plugins['icerevisions'] = $url . 'icerevisions/editor_plugin.js'; 
     46 
     47        // Add buttons to TinyMCE 
     48        add_filter('mce_buttons', array( $this, 'vrev_add_mce_buttons' ) ); 
     49        add_filter('mce_buttons_2', array( $this, 'vrev_add_mce_buttons_2' ) ); 
     50 
     51        // And to DFW 
     52        add_filter('wp_fullscreen_buttons', array( $this, 'vrev_fullscreen_button' ) ); 
     53 
     54        // Add Ice specific editor settings 
     55        add_filter('tiny_mce_before_init', array( $this, 'vrev_mce_settings' ), 10, 2); 
     56 
     57        // Output the JS in the footer 
     58        add_action('admin_print_footer_scripts', array( $this, 'vrev_add_js' ) ); 
     59 
    3260        return $plugins; 
    33  
    34     $url = plugin_dir_url(__file__); 
    35  
    36     $plugins['ice'] = $url . 'ice/editor_plugin.js'; 
    37     $plugins['icerevisions'] = $url . 'icerevisions/editor_plugin.js'; 
    38  
    39     // Add buttons to TinyMCE 
    40     add_filter('mce_buttons', 'vrev_add_mce_buttons'); 
    41     add_filter('mce_buttons_2', 'vrev_add_mce_buttons_2'); 
    42  
    43     // And to DFW 
    44     add_filter('wp_fullscreen_buttons', 'vrev_fullscreen_button'); 
    45  
    46     // Add Ice specific editor settings 
    47     add_filter('tiny_mce_before_init', 'vrev_mce_settings', 10, 2); 
    48  
    49     // Output the JS in the footer 
    50     add_action('admin_print_footer_scripts', 'vrev_add_js'); 
    51  
    52     return $plugins; 
    53 } 
    54  
    55 function vrev_add_mce_buttons($buttons) { 
    56     return array_merge( $buttons, array( 
    57         '|', 
    58         'iceaccept', 
    59         'icereject', 
    60         '|', 
    61         'ice_toggleshowchanges' 
    62     )); 
    63 } 
    64  
    65 function vrev_add_mce_buttons_2($buttons) { 
    66     return array_merge( $buttons, array( 
    67         '|', 
    68         'iceacceptall', 
    69         'icerejectall' 
    70     )); 
    71 } 
    72  
    73 function vrev_add_js() { 
    74     // Ice throws range errors when switching to fullscreen before the MCE instance is initialized. 
    75     // This hides the "fullscreen" button in the HTML editor if it's loaded first. 
    76     ?> 
    77     <script type="text/javascript"> 
    78     jQuery(document).ready(function($){ 
    79         if ( typeof(tinymce) != 'undefined' && $('#wp-content-wrap').hasClass('html-active') ) { 
    80             var css = $('<style type="text/css">#wp-content-wrap #qt_content_fullscreen{display:none}</style>'); 
    81             $(document.head).append(css); 
    82  
    83             $('#content-tmce').one('click', function(){ 
    84                 css.remove(); 
    85             }); 
     61    } 
     62 
     63    function vrev_add_mce_buttons($buttons) { 
     64        return array_merge( $buttons, array( 
     65            '|', 
     66            'iceaccept', 
     67            'icereject', 
     68            '|', 
     69            'ice_toggleshowchanges' 
     70        )); 
     71    } 
     72 
     73    function vrev_add_mce_buttons_2($buttons) { 
     74        return array_merge( $buttons, array( 
     75            '|', 
     76            'iceacceptall', 
     77            'icerejectall' 
     78        )); 
     79    } 
     80 
     81    function vrev_add_js() { 
     82        // Ice throws range errors when switching to fullscreen before the MCE instance is initialized. 
     83        // This hides the "fullscreen" button in the HTML editor if it's loaded first. 
     84        ?> 
     85        <script type="text/javascript"> 
     86        jQuery(document).ready(function($){ 
     87            if ( typeof(tinymce) != 'undefined' && $('#wp-content-wrap').hasClass('html-active') ) { 
     88                var css = $('<style type="text/css">#wp-content-wrap #qt_content_fullscreen{display:none}</style>'); 
     89                $(document.head).append(css); 
     90 
     91                $('#content-tmce').one('click', function(){ 
     92                    css.remove(); 
     93                }); 
     94            } 
     95        }); 
     96        </script> 
     97        <?php 
     98    } 
     99 
     100    // $settings is a PHP associative array containing all init strings: $settings['mce_setting_name'] = 'setting string'; 
     101    function vrev_mce_settings($settings, $editor_id) { 
     102        global $current_user, $post; 
     103 
     104        if ( 'content' != $editor_id ) 
     105            return $settings; 
     106 
     107        $new_post = $post->post_status == 'auto-draft'; 
     108 
     109        /* 
     110        Any of the following can be set by using the 'mce_ice_settings' filter. 
     111        Note that the array is json encoded before adding it to the MCE settings (default values shown). 
     112            'deleteTag' => 'span', ** 
     113            'insertTag' => 'span', ** 
     114            'deleteClass' => 'ice-wp-del', ** 
     115            'insertClass' => 'ice-wp-ins', ** 
     116            'changeIdAttribute' => 'data-cid', 
     117            'userIdAttribute' => 'data-userid', 
     118            'userNameAttribute' => 'data-username', 
     119            'timeAttribute' => 'data-time', 
     120            'preserveOnPaste' => 'p', 
     121            'isTracking' => true, 
     122            'contentEditable' => true, 
     123            'css' => 'css/ice.css', 
     124            'manualInit' => false, 
     125            'user' => array{ 'name' => 'Some Name', 'id' => rand() } 
     126 
     127            ** See vrev_strip_spans() if changing these 
     128        */ 
     129        $ice_settings = array( 
     130            'user' => array( 
     131                'name' => esc_attr( $current_user->display_name ), 
     132                'id' => $current_user->ID 
     133            ), 
     134            'manualInit' => true, 
     135            'isTracking' => !$new_post, 
     136            'deleteClass' => 'ice-wp-del', 
     137            'insertClass' => 'ice-wp-ins', 
     138            'css' => '../icerevisions/css/ice-revisions.css' 
     139        ); 
     140 
     141        $ice_settings = apply_filters('mce_ice_settings', $ice_settings); 
     142        $settings['ice'] = json_encode( $ice_settings ); 
     143 
     144        return $settings; 
     145    } 
     146 
     147    // save the content with revisions as meta 
     148    function vrev_save_revisions_content($data, $postarr) { 
     149 
     150        if ( empty($postarr['post_ID']) ) 
     151            return $data; 
     152 
     153        // save the content in post_meta 
     154        $post_id = (int) $postarr['post_ID']; 
     155        update_post_meta($post_id, '_ice_revisions_content', $data['post_content']); 
     156 
     157        // remove the change tracking spans 
     158        $data['post_content'] = $this->vrev_strip_spans($data['post_content']); 
     159 
     160        return $data; 
     161    } 
     162 
     163    // load the content with revisions when post is published 
     164    function vrev_load_revisions_content($content) { 
     165        global $post, $post_ID, $pagenow; 
     166 
     167        if ( !isset($post) || !isset($post_ID) || !current_user_can('edit_post', $post_ID) ) 
     168            return $content; 
     169 
     170        $meta = get_post_meta($post_ID, '_ice_revisions_content'); 
     171        $content = empty($meta) ? $content : (string) array_pop($meta); 
     172 
     173        return $content; 
     174    } 
     175 
     176    // add styles to the change tracking when previewing a poas 
     177    function vrev_add_preview_css() { 
     178        if ( is_preview() ) { 
     179            ?> 
     180            <style type="text/css"> 
     181            span.ice-wp-ins, 
     182            span.ice-wp-del { 
     183                -webkit-border-radius: 3px; 
     184                border-radius: 3px; 
     185                color: #000; 
     186                padding: 1px 0 2px; 
     187            } 
     188            span.ice-wp-ins { 
     189                background-color: #e5ffcd; 
     190            } 
     191            span.ice-wp-del { 
     192                text-decoration: line-through; 
     193                color: #555; 
     194                background-color: #e8e8e8; 
     195            } 
     196            </style> 
     197            <?php 
    86198        } 
    87     }); 
    88     </script> 
    89     <?php 
    90 } 
    91  
    92 // $settings is a PHP associative array containing all init strings: $settings['mce_setting_name'] = 'setting string'; 
    93 function vrev_mce_settings($settings, $editor_id) { 
    94     global $current_user, $post; 
    95  
    96     if ( 'content' != $editor_id ) 
    97         return $settings; 
    98  
    99     $new_post = $post->post_status == 'auto-draft'; 
    100  
    101     /* 
    102     Any of the following can be set by using the 'mce_ice_settings' filter. 
    103     Note that the array is json encoded before adding it to the MCE settings (default values shown). 
    104         'deleteTag' => 'span', ** 
    105         'insertTag' => 'span', ** 
    106         'deleteClass' => 'ice-wp-del', ** 
    107         'insertClass' => 'ice-wp-ins', ** 
    108         'changeIdAttribute' => 'data-cid', 
    109         'userIdAttribute' => 'data-userid', 
    110         'userNameAttribute' => 'data-username', 
    111         'timeAttribute' => 'data-time', 
    112         'preserveOnPaste' => 'p', 
    113         'isTracking' => true, 
    114         'contentEditable' => true, 
    115         'css' => 'css/ice.css', 
    116         'manualInit' => false, 
    117         'user' => array{ 'name' => 'Some Name', 'id' => rand() } 
    118  
    119         ** See vrev_strip_spans() if changing these 
    120     */ 
    121     $ice_settings = array( 
    122         'user' => array( 
    123             'name' => esc_attr( $current_user->display_name ), 
    124             'id' => $current_user->ID 
    125         ), 
    126         'manualInit' => true, 
    127         'isTracking' => !$new_post, 
    128         'deleteClass' => 'ice-wp-del', 
    129         'insertClass' => 'ice-wp-ins', 
    130         'css' => '../icerevisions/css/ice-revisions.css' 
    131     ); 
    132  
    133     $ice_settings = apply_filters('mce_ice_settings', $ice_settings); 
    134     $settings['ice'] = json_encode( $ice_settings ); 
    135  
    136     return $settings; 
    137 } 
    138  
    139 // save the content with revisions as meta 
    140 add_filter('wp_insert_post_data', 'vrev_save_revisions_content', 1, 2); 
    141 function vrev_save_revisions_content($data, $postarr) { 
    142  
    143     if ( empty($postarr['post_ID']) ) 
    144         return $data; 
    145  
    146     // save the content in post_meta 
    147     $post_id = (int) $postarr['post_ID']; 
    148     update_post_meta($post_id, '_ice_revisions_content', $data['post_content']); 
    149  
    150     // remove the change tracking spans 
    151     $data['post_content'] = vrev_strip_spans($data['post_content']); 
    152  
    153     return $data; 
    154 } 
    155  
    156 // load the content with revisions when post is published 
    157 add_filter('the_editor_content', 'vrev_load_revisions_content', 1); 
    158 function vrev_load_revisions_content($content) { 
    159     global $post, $post_ID, $pagenow; 
    160  
    161     if ( !isset($post) || !isset($post_ID) || !current_user_can('edit_post', $post_ID) ) 
    162         return $content; 
    163  
    164     $meta = get_post_meta($post_ID, '_ice_revisions_content'); 
    165     $content = empty($meta) ? $content : (string) array_pop($meta); 
    166  
    167     return $content; 
    168 } 
    169  
    170 // add styles to the change tracking when previewing a poas 
    171 add_action( 'wp_head', 'vrev_add_preview_css' ); 
    172 function vrev_add_preview_css() { 
    173     if ( is_preview() ) { 
     199    } 
     200 
     201    // show "track changes" button in fullscreen mode 
     202    function vrev_fullscreen_button($buttons) { 
     203        if ( !user_can_richedit() ) 
     204            return $buttons; 
     205 
    174206        ?> 
    175         <style type="text/css"> 
    176         span.ice-wp-ins, 
    177         span.ice-wp-del { 
    178             -webkit-border-radius: 3px; 
    179             border-radius: 3px; 
    180             color: #000; 
    181             padding: 1px 0 2px; 
    182         } 
    183         span.ice-wp-ins { 
    184             background-color: #e5ffcd; 
    185         } 
    186         span.ice-wp-del { 
    187             text-decoration: line-through; 
    188             color: #555; 
    189             background-color: #e8e8e8; 
    190         } 
     207        <style type="text/css" scoped="scoped"> 
     208        #wp_fs_ice_toggleshowchanges span {background: url("<?php echo plugin_dir_url(__file__) . 'ice/img/ice-showchanges.png'; ?>"); 
    191209        </style> 
    192210        <?php 
     211 
     212        $buttons['ice_toggleshowchanges'] = array( 'title' => __('Show Track Changes', 'mce-revisions'), 'onclick' => "tinymce.execCommand('ice_toggleshowchanges');", 'both' => false ); 
     213        return $buttons; 
     214    } 
     215 
     216    // strip change tracking spans from PHP 
     217    // expects slashed $content 
     218    function vrev_strip_spans($content) { 
     219        // short-circuit if no tracking spans 
     220        if ( strpos($content, 'data-userid=') === false && strpos($content, 'ice-wp-') === false ) 
     221            return $content; 
     222 
     223        $span_filter = new ICE_Span_Filter( stripslashes($content) ); 
     224        return addslashes( $span_filter->filter() ); 
    193225    } 
    194226} 
    195227 
    196 // show "track changes" button in fullscreen mode 
    197 function vrev_fullscreen_button($buttons) { 
    198     if ( !user_can_richedit() ) 
    199         return $buttons; 
    200  
    201     ?> 
    202     <style type="text/css" scoped="scoped"> 
    203     #wp_fs_ice_toggleshowchanges span {background: url("<?php echo plugin_dir_url(__file__) . 'ice/img/ice-showchanges.png'; ?>"); 
    204     </style> 
    205     <?php 
    206  
    207     $buttons['ice_toggleshowchanges'] = array( 'title' => __('Show Track Changes', 'mce-revisions'), 'onclick' => "tinymce.execCommand('ice_toggleshowchanges');", 'both' => false ); 
    208     return $buttons; 
    209 } 
    210  
    211 // strip change tracking spans from PHP 
    212 // expects slashed $content 
    213 function vrev_strip_spans($content) { 
    214     // short-circuit if no tracking spans 
    215     if ( strpos($content, 'data-userid=') === false && strpos($content, 'ice-wp-') === false ) 
    216         return $content; 
    217  
    218     $span_filter = new ICE_Span_Filter( stripslashes($content) ); 
    219     return addslashes( $span_filter->filter() ); 
    220 } 
    221  
     228new ICE_Visual_Revisions; 
Note: See TracChangeset for help on using the changeset viewer.