WordPress.org

Plugin Directory

Changeset 472012


Ignore:
Timestamp:
12/07/11 14:48:31 (2 years ago)
Author:
Jayjdk
Message:

Version 1.1. Now with a import and export feature

Location:
jayj-quicktag/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • jayj-quicktag/trunk/jayj-quicktag.php

    r449050 r472012  
    22/** 
    33 * Plugin Name: Jayj Quicktag 
     4 * Plugin URI:  http://jayj.dk/plugins/jayj-quicktag/ 
    45 * Description: Allows you to easily add custom quicktags to the editor. Requires at least WordPress 3.3 to work 
    56 * Author:      Jesper J 
    67 * Author URI:  http://jayj.dk 
    7  * Version:     1.0.0 
     8 * Version:     1.1 
    89 * License: GPLv2 or later 
    910 */ 
     
    1920 */ 
    2021function jayj_quicktag_install() { 
    21     $defaults = array( 
    22         'buttons' => array( 
    23             array( 
    24                 'text'  => 'Example', 
    25                 'title' => 'Example Title', 
    26                 'start' => '<example>', 
    27                 'end'   => '</example>' 
    28             ) 
     22    $defaults = array( 'buttons' => array( array( 
     23            'text'  => 'Example', 
     24            'title' => 'Example Title', 
     25            'start' => '<example>', 
     26            'end'   => '</example>' 
    2927        ) 
    30     ); 
     28    ) ); 
    3129 
    3230    add_option( 'jayj_qt_settings', apply_filters( 'jayj_quicktag_defaults', $defaults ) ); 
     
    3533/** 
    3634 * Uninstall function 
     35 * 
     36 * Remove Quicktags from the database 
    3737 * 
    3838 * @since 1.0.0 
     
    4141    if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) 
    4242        exit(); 
    43      
     43 
    4444    delete_option( 'jayj_qt_settings' ); 
    4545} 
     
    5656add_action( 'admin_menu', 'jayj_quicktag_add_options_page' ); 
    5757 
    58 /* 
    59 add_action( 'admin_menu', function() { 
    60     add_options_page( 'Jayj Quicktag', 'Jayj Quicktag', 'manage_options', __FILE__, 'jayj_quicktag_options_page' ); 
    61 }); 
    62 */ 
    63  
    6458/** 
    6559 * Register the options page 
     
    7064    register_setting( 'jayj_quicktag_options', 'jayj_qt_settings', 'jayj_quicktag_options_validate' ); 
    7165} 
    72   
     66 
    7367add_action( 'admin_init', 'jayj_quicktag_register_setting' ); 
    7468 
    75 /* 
    76 add_action( 'admin_init', function() { 
    77     register_setting( 'jayj_quicktag_options', 'jayj_qt_settings', 'jayj_quicktag_options_validate' ); 
    78 }); 
    79 */ 
    80  
    8169/** 
    8270 * The Quicktags Options page 
     
    8977 
    9078    <?php screen_icon( 'options-general' ); ?> 
    91      
    92     <h2>Jayj Quicktag Management</h2> 
     79 
     80    <h2>Jayj Quicktag Options</h2> 
    9381 
    9482    <br /> 
     
    9684    <form action="options.php" method="post"> 
    9785 
    98         <?php settings_fields( 'jayj_quicktag_options' ); ?> 
    99         <?php $options = get_option( 'jayj_qt_settings' ); ?> 
    100          
    101         <table summary="rmnl" class="widefat"> 
     86        <?php 
     87            /** 
     88             * Insert imported Quicktags 
     89             * 
     90             * @since 1.1.0 
     91             */ 
     92            if ( isset( $_POST['jayj-import-quicktags-save'] ) ) : 
     93 
     94                $options = get_option( 'jayj_qt_settings' ); 
     95                $data = maybe_unserialize( stripslashes_deep( $_POST['jayj-import'] ) ); 
     96 
     97                // Merge the old and the new Quicktags 
     98                if ( ! empty( $data ) ) 
     99                    $imported['buttons'] = array_merge( (array) $options['buttons'], $data['buttons'] ); 
     100 
     101                // Succes or error message 
     102                if ( ! empty( $data ) && update_option( 'jayj_qt_settings', $imported ) ) 
     103                    echo '<div class="updated"><p><strong>Quicktags succesfully imported</strong></p></div>'; 
     104                else 
     105                    echo '<div class="error"><p><strong>Error: Quicktags could not be imported</strong></p></div>'; 
     106 
     107            endif; 
     108        ?> 
     109 
     110        <?php 
     111            settings_fields( 'jayj_quicktag_options' ); 
     112            $options = get_option( 'jayj_qt_settings' ); 
     113        ?> 
     114 
     115        <table class="widefat jayj-quicktags-table"> 
    102116            <thead> 
    103117                <tr> 
     
    112126                <?php 
    113127                    if ( isset( $options['buttons'] ) ) : 
    114                      
     128 
    115129                        // Loop through all the buttons 
    116                         for ( $i = 0; $i < count( $options['buttons'] ); $i++ ) { 
     130                    for ( $i = 0; $i < count( $options['buttons'] ); $i++ ) : 
    117131 
    118132                        if ( ! isset( $options['buttons'][$i] ) ) 
     
    120134                ?> 
    121135                    <tr valign="top"> 
    122                         <td><input type="text" name="jayj_qt_settings[buttons][<?php echo $i; ?>][text]" value="<?php echo esc_attr( $options['buttons'][$i]['text'] ); ?>" style="width: 95%;" /></td> 
    123                         <td><input type="text" name="jayj_qt_settings[buttons][<?php echo $i; ?>][title]" value="<?php echo esc_attr( $options['buttons'][$i]['title'] ); ?>" style="width: 95%;" /></td> 
    124                         <td><textarea class="code" name="jayj_qt_settings[buttons][<?php echo $i; ?>][start]" rows="2" cols="25" style="width: 95%;"><?php echo esc_textarea( $options['buttons'][$i]['start'] ); ?></textarea></td> 
    125                         <td><textarea class="code" name="jayj_qt_settings[buttons][<?php echo $i; ?>][end]" rows="2" cols="25" style="width: 95%;"><?php echo esc_textarea( $options['buttons'][$i]['end'] ); ?></textarea></td> 
     136                        <td><input type="text" name="jayj_qt_settings[buttons][<?php echo $i; ?>][text]" value="<?php echo esc_attr( $options['buttons'][$i]['text'] ); ?>" /></td> 
     137                        <td><input type="text" name="jayj_qt_settings[buttons][<?php echo $i; ?>][title]" value="<?php echo esc_attr( $options['buttons'][$i]['title'] ); ?>" /></td> 
     138                        <td><textarea class="code" name="jayj_qt_settings[buttons][<?php echo $i; ?>][start]" rows="2" cols="25"><?php echo esc_textarea( $options['buttons'][$i]['start'] ); ?></textarea></td> 
     139                        <td><textarea class="code" name="jayj_qt_settings[buttons][<?php echo $i; ?>][end]" rows="2" cols="25"><?php echo esc_textarea( $options['buttons'][$i]['end'] ); ?></textarea></td> 
    126140                    </tr> 
    127                 <?php } endif; ?> 
     141                <?php endfor; endif; ?> 
    128142 
    129143                    <!-- Empty --> 
    130144                    <?php $i = isset( $i ) ? $i : 0; ?> 
    131145                    <tr valign="top" class="alternative"> 
    132                         <td><input type="text" name="jayj_qt_settings[buttons][<?php echo $i; ?>][text]" value="" style="width: 95%;" /></td> 
    133                         <td><input type="text" name="jayj_qt_settings[buttons][<?php echo $i; ?>][title]" value="" style="width: 95%;" /></td> 
    134                         <td><textarea class="code" name="jayj_qt_settings[buttons][<?php echo $i; ?>][start]" rows="2" cols="25" style="width: 95%;"></textarea></td> 
    135                         <td><textarea class="code" name="jayj_qt_settings[buttons][<?php echo $i; ?>][end]" rows="2" cols="25" style="width: 95%;"></textarea></td> 
     146                        <td><input type="text" name="jayj_qt_settings[buttons][<?php echo $i; ?>][text]" title="Label of the Quicktag" value="" /></td> 
     147                        <td><input type="text" name="jayj_qt_settings[buttons][<?php echo $i; ?>][title]" title="Title attribute of the Quicktag" value="" /></td> 
     148                        <td><textarea class="code" name="jayj_qt_settings[buttons][<?php echo $i; ?>][start]" rows="2" cols="25" title="Start Tag(s)"></textarea></td> 
     149                        <td><textarea class="code" name="jayj_qt_settings[buttons][<?php echo $i; ?>][end]" rows="2" cols="25" title="End Tag(s)"></textarea></td> 
    136150                    </tr> 
    137151            </tbody> 
    138152        </table> 
    139153 
    140         <p>To delete a tag, just leave the "Button Label" empty</p> 
     154        <p>To delete a Quicktag, just leave the "Button Label" empty</p> 
    141155 
    142156        <?php submit_button( __( 'Save Changes' ) ); ?> 
    143      
    144157    </form> 
    145          
     158 
     159    <!-- Export/Import metaboxes --> 
     160    <style type="text/css"> 
     161        .jayj-quicktags-postbox { font-size: 13px; float: left; width: 48%; margin-right: 3%; } 
     162        .jayj-quicktags-postbox-last { margin-right: 0; } 
     163        .jayj-quicktags-postbox .hndle { cursor: pointer; } 
     164        .jayj-quicktags-postbox textarea, .jayj-quicktags-table input, .jayj-quicktags-table textarea { width: 95%; } 
     165        .jayj-quicktags-postbox li { list-style: disc; margin-left: 40px; } 
     166    </style> 
     167 
     168    <form action="" method="post" name="jayj-import-quicktags"> 
     169    <div id="poststuff"><div class="metabox-holder"> 
     170 
     171        <!-- Export function --> 
     172        <div class="postbox closed jayj-quicktags-postbox"> 
     173            <div class="handlediv" title="<?php esc_attr_e( 'Click to toggle' ); ?>"><br /></div> 
     174            <h3 class="hndle"><span>Export Quicktags</span></h3> 
     175 
     176            <div class="inside"> 
     177                Export your saved Quicktags data by highlighting this text and either 
     178                <ul> 
     179                    <li>Copy/paste it into a blank .txt file. Then save the file for importing into another install of WordPress later.</li> 
     180                    <li>Or you could just paste it into <code>Jayj Quicktag > Import Quicktags</code> on another install of WordPress.</li> 
     181                </ul> 
     182                <textarea rows="10" cols="60" onclick="this.focus(); this.select();"><?php echo esc_textarea( serialize( $options ) ); ?></textarea> 
     183            </div> 
     184        </div> <!-- .postbox --> 
     185 
     186        <!-- Import function --> 
     187        <div class="postbox closed jayj-quicktags-postbox jayj-quicktags-postbox-last"> 
     188            <div class="handlediv" title="<?php esc_attr_e( 'Click to toggle' ); ?>"><br /></div> 
     189            <h3 class="hndle"><span>Import Quicktags</span></h3> 
     190 
     191            <div class="inside"> 
     192                <p>To import your Quicktags, copy and paste the content from "Export Quicktags" into this textarea and press the "Import Quicktags" button below.</p> 
     193                <textarea rows="10" cols="60" name="jayj-import"></textarea> 
     194                <?php submit_button( 'Import Quicktags', 'secondary', 'jayj-import-quicktags-save' ); ?> 
     195            </div> 
     196        </div> <!-- .postbox --> 
     197 
     198    </div></div> 
     199    </form> 
     200 
    146201</div> <!-- .wrap -->    
    147202 
    148203<?php 
    149204 
    150 } //End function wpaq_options_page 
     205} // End function wpaq_options_page 
    151206 
    152207/** 
     
    162217 
    163218    // Don't save empty inputs 
    164     for ( $i = 0; $i < count( $input['buttons'] ); $i++ ) { 
     219    for ( $i = 0; $i < count( $input['buttons'] ); $i++ ) : 
    165220        if ( empty( $input['buttons'][$i]['text'] ) ) { 
    166221            unset( $input['buttons'][$i] ); 
     222 
     223            $input['buttons'] = array_values( $input['buttons'] ); 
     224 
     225            // In rare circumstances the empty inputs has to be removed again 
     226            if ( empty( $input['buttons'][$i]['text'] ) ) 
     227                unset( $input['buttons'][$i] ); 
     228 
    167229            $input['buttons'] = array_values( $input['buttons'] ); 
    168230        } 
    169     } 
     231    endfor; 
    170232 
    171233    return $input; 
    172234} 
     235 
     236/** 
     237 * Loads the JavaScript files required for managing the meta boxes on the plugin settings 
     238 * page, which allows users to toggle the metaboxes 
     239 * 
     240 * @since 1.1.0 
     241 * @todo Find a way to save the open/close state 
     242 */ 
     243function jayj_quicktag_settings_page_enqueue_scripts( $hook_suffix ) { 
     244    if ( $hook_suffix == 'settings_page_jayj-quicktag/jayj-quicktag' ) 
     245        wp_enqueue_script( 'postbox' ); 
     246} 
     247 
     248add_action( 'admin_enqueue_scripts', 'jayj_quicktag_settings_page_enqueue_scripts' ); 
     249 
     250/** 
     251 * Loads the JavaScript required for toggling the meta boxes on the plugin settings page. 
     252 * 
     253 * @since 1.1.0 
     254 */ 
     255function jayj_quicktag_settings_page_load_scripts() { ?> 
     256    <script type="text/javascript"> 
     257        jQuery(document).ready( function($) { 
     258            $( '.if-js-closed' ).removeClass( 'if-js-closed' ).addClass( 'closed' ); 
     259            postboxes.add_postbox_toggles( 'settings_page_jayj-quicktag/jayj-quicktag' ); 
     260        }); 
     261    </script><?php 
     262} 
     263 
     264add_action( "admin_head-settings_page_jayj-quicktag/jayj-quicktag", 'jayj_quicktag_settings_page_load_scripts' ); 
    173265     
    174266/** 
     
    180272function jayj_quicktag_editor() { 
    181273 
    182     //$screen = get_current_screen(); 
    183  
    184     // Make sure we're on the post/page or comment admin page 
    185     /*if ( ! in_array( $screen->base, apply_filters( 'jayj_quicktag_screens', array( 'post', 'comment' ) ) ) ) 
    186         return;*/ 
    187  
    188274    // Get the options 
    189     $o = get_option( 'jayj_qt_settings' ); 
    190  
    191     if ( count( $o['buttons'] ) > 0 ) : ?> 
    192      
     275    $options = get_option( 'jayj_qt_settings' ); 
     276 
     277    if ( count( $options['buttons'] ) > 0 ) : ?> 
     278 
     279        <!-- Jayj Quicktags --> 
    193280        <script type="text/javascript"> 
    194              
    195             // Jayj Quicktags 
     281        //<![CDATA[ 
    196282            if (typeof(QTags) != 'undefined') { 
    197283                <?php  
     
    199285 
    200286                    // Loop through each button 
    201                     foreach ( $o['buttons'] as $btn ) : 
     287                    foreach ( $options['buttons'] as $btn ) : 
    202288 
    203289                        $title = ( isset( $btn['title'] ) ) ? $btn['title'] : ''; 
     
    226312                    endforeach; 
    227313                ?> 
    228             } // typeof(QTags) 
    229         </script> <?php 
     314            } 
     315        //]]> 
     316        </script> 
     317        <!-- // Jayj Quicktags --><?php 
    230318 
    231319    endif; 
  • jayj-quicktag/trunk/readme.txt

    r449050 r472012  
    11=== Plugin Name === 
    22Contributors: Jayjdk 
    3 Tags: quicktag, quicktags, editor, quick, tag, generator 
    4 Requires at least: 3.3-beta1 
     3Tags: quicktag, quicktags, editor, quick, tag, generator, import, export 
     4Requires at least: 3.3 
    55Tested up to: 3.3 
    6 Stable tag: 1.0.0 
     6Stable tag: 1.1 
    77 
    88Allows you easily to add custom Quicktags to the post editor 
     
    1515 
    1616It's uses the new WordPress 3.3 Quicktags changes so it won't work with older versions of WordPress. 
     17 
     18It supports both import and export of your Quicktags so you easily can add them to another WordPress install. 
    1719 
    1820== Installation == 
     
    6567</pre> 
    6668 
     69= Can I export/import Quicktags? = 
     70Yes. Version 1.1 introduced the import and export feature. 
     71 
     72On the options page, click the "Export Quicktags" title. That should give you a textarea with some strange looking code.  
     73You should copy/save that so you can use it to import on another site. 
     74 
     75To find the import feature, click on the "Import Quicktags" on the same page. Paste the copied code into the textarea and click "Import Quicktags". 
     76 
     77The Quicktags should now be imported and it doesn't overwrite the old ones. 
     78 
    6779== Screenshots == 
    6880 
     
    7284== Changelog == 
    7385 
     86= 1.1 = 
     87* You can now export and import Quicktags 
     88* Fixed rare bug with Quicktags not deleting 
    7489= 1.0 = 
    7590* Initial Release 
Note: See TracChangeset for help on using the changeset viewer.