WordPress.org

Plugin Directory

Changeset 1661836


Ignore:
Timestamp:
05/21/17 19:09:13 (3 months ago)
Author:
urkekg
Message:

Enhanced number format, decimal places, optimized code and release v0.1.7

Location:
stock-quote
Files:
19 added
3 edited

Legend:

Unmodified
Added
Removed
  • stock-quote/trunk/readme.txt

    r1577609 r1661836  
    44Tags: widget, stock, securities, quote, financial, finance, exchange, bank, market, trading, investment, stock symbols, stock quotes, forex, nasdaq, nyse, wall street 
    55Requires at least: 3.9.0 
    6 Tested up to: 4.7.1 
    7 Stable tag: 0.1.6 
     6Tested up to: 4.7.5 
     7Stable tag: 0.1.7 
    88License: GPLv3 or later 
    99License URI: http://www.gnu.org/licenses/gpl-3.0.html 
     
    3232You can tune single shortcode with parameters: 
    3333 
    34 * `symbol` - string with single stock symbol 
    35 * `show` - string that define how will company be represent in quote; can be `name` for Company Name, or `symbol` for Stock Symbol 
    36 * `nolink` - disable links for single quotes 
    37 * `class` - custom class for quote item, if you wish some special styling 
     34* `symbol` - represent single stock symbol (if not provided then use default from settings page) 
     35* `show` - can be `name` to represent company with Company Name (default), or `symbol` to represent company with Stock Symbol. You must add preferred symbol to˛`Custom Names` textarea on Settings page because Google Finance does not provide nice company names in feeds 
     36* **NEW** `decimals` - override default number of decimal places for values (default from settings page used if no custom set by shortcode). Valud values are: `1`, `2`, `3` and `4` 
     37* **NEW** `number_format` - override default number format for values (default from this settings page used if no custom set by shortcode). Valid options are: `cd` for *0.000,00*; `dc` for *0,000.00*; `sd` for *0 000.00* and `sc` for *0 000,00* 
     38* **NEW** `template` - override default template string (default is: `%company% %price% %change% %changep%`). You can use following template keywords: `%company_show%`, `%company%`, `%exchange%`, `%exch_symbol%`, `%symbol%`, `%price%`, `%change%`, `%changep%` and `%ltrade%` 
     39* `nolink` - to disable link of quotes to Google Finance page set to `1` or `true` 
     40* `class` - (optional) custom class name for quote item, if you wish some special styling 
    3841 
    3942= Example = 
    4043 
    4144`[stock_quote symbol="^DJI" show="symbol"]` 
     45 
     46or 
     47 
     48`[stock_quote symbol="MSFT" decimals=3 number_format=cd template="%symbol% %price% %change% %changep%"]` 
    4249 
    4350== Installation == 
     
    137144 
    138145== Changelog == 
     146= 0.1.7 (20170521) = 
     147* Add: `decimals`, `number_format` and `template` as shortcode parameters 
     148* Add: Error check on fetching data from Google 
     149* Cleanup: Remove unused constant `WPAU_STOCK_QUOTE_CACHE_TIMEOUT` 
     150* Cleanup: Improve variable names (like `sq_transient_id` to `transient_id`) 
     151* Remove: unused Stock Quote element ID 
     152* Update: help for shortcode and parameters 
     153* Update: readme file 
     154 
    139155= 0.1.6 (20170118) = 
    140156* Add: options to choose number format and amount of decimal places 
  • stock-quote/trunk/stock-quote.php

    r1577609 r1661836  
    44Plugin URI: https://urosevic.net/wordpress/plugins/stock-quote/ 
    55Description: Quick and easy insert static inline stock information for specific exchange symbol by customizable shortcode. 
    6 Version: 0.1.6 
     6Version: 0.1.7 
    77Author: Aleksandar Urosevic 
    88Author URI: https://urosevic.net 
     
    7070 */ 
    7171 
    72 define( 'WPAU_STOCK_QUOTE_VER', '0.1.6' ); 
     72define( 'WPAU_STOCK_QUOTE_VER', '0.1.7' ); 
    7373 
    7474if ( ! class_exists( 'WPAU_STOCK_QUOTE' ) ) { 
     
    257257        /** 
    258258         * Generate content for quote item 
    259          * @param  string  $symbol Stock symbol. 
    260          * @param  string  $show   How to represent company. 
    261          * @param  boolean $nolink Should item be linked to Google Finance page. 
    262          * @param  string  $class  Custom class name for block. 
    263          * @return string          Generated HTML for output 
    264          */ 
    265         public static function stock_quote( $symbol = 'AAPL', $show = 'symbol', $nolink = false, $class = '' ) { 
     259         * @param  string   $symbol        Stock symbol 
     260         * @param  string   $show          How to represent company (symbol or name). 
     261         * @param  boolean  $nolink        Should item be linked to Google Finance page? 
     262         * @param  string   $class         Custom class name for block. 
     263         * @param  integer  $decimals      Number of decimal places. 
     264         * @param  string   $number_format Which number format to use (dc, sc, cd, sd). 
     265         * @param  string   $template      Format of text for quote. 
     266         * @return string                  Formatted HTMLoutput. 
     267         */ 
     268        public static function stock_quote( $symbol = 'AAPL', $show = 'symbol', $nolink = false, $class = '', $decimals = null, $number_format = null, $template = null ) { 
    266269 
    267270            if ( empty( $symbol ) ) { 
     
    272275            $defaults = self::$defaults; 
    273276 
    274             if ( ! defined( 'WPAU_STOCK_QUOTE_CACHE_TIMEOUT' ) ) { 
    275                 define( 'WPAU_STOCK_QUOTE_CACHE_TIMEOUT', $defaults['cache_timeout'] ); 
    276             } 
    277  
    278277            // Prepare number format 
    279             if ( ! isset( $defaults['number_format'] ) ) { 
     278            if ( ! empty( $number_format ) && in_array( $number_format, array( 'dc','sd','sc','cd' ) ) ) { 
     279                $defaults['number_format'] = $number_format; 
     280            } else if ( ! isset( $defaults['number_format'] ) ) { 
    280281                $defaults['number_format'] = 'cd'; 
    281282            } 
     
    299300 
    300301            // Prepare number of decimals 
    301             if ( ! isset( $defaults['decimals'] ) ) { 
    302                 $defaults['decimals'] = 2; 
    303             } 
    304             $decimals = (int) $defaults['decimals']; 
     302            if ( null !== $decimals ) { 
     303                // From shortcode or widget 
     304                $decimals = (int) $decimals; 
     305            } else { 
     306                // From settings 
     307                if ( ! isset( $defaults['decimals'] ) ) { 
     308                    $defaults['decimals'] = 2; 
     309                } 
     310                $decimals = (int) $defaults['decimals']; 
     311            } 
    305312 
    306313            // Get fresh or from transient cache stock quote. 
    307             $sq_transient_id = 'stockquote_' . sanitize_key( $symbol ) . '_' . WPAU_STOCK_QUOTE_CACHE_TIMEOUT; 
     314            $transient_id = 'stockquote_' . sanitize_key( $symbol ) . '_' . $defaults['cache_timeout']; 
    308315 
    309316            // Get legend for company names. 
     
    317324 
    318325            // Check if cache exists. 
    319             if ( false === ( $json = get_transient( $sq_transient_id ) ) || empty( $json ) || ! empty( $_GET['stockquote_purge_cache'] ) ) { 
     326            if ( false === ( $json = get_transient( $transient_id ) ) || empty( $json ) || ! empty( $_GET['stockquote_purge_cache'] ) ) { 
     327 
     328                // Log new fetch for cache if WP debugging is enabled 
     329                if ( WP_DEBUG ) { 
     330                    error_log( "Download data for symbol {$symbol} and cache for {$defaults['cache_timeout']} seconds within transient {$transient_id}" ); 
     331                } 
    320332 
    321333                // If does not exist, get new cache. 
     
    337349                // Get stock from Google. 
    338350                $response = wp_remote_get( $exc_url, $wparg ); 
    339                 // Get content from response. 
    340                 $data = wp_remote_retrieve_body( $response ); 
    341                 // Convert a string with ISO-8859-1 characters encoded with UTF-8 to single-byte ISO-8859-1. 
    342                 $data = utf8_decode( $data ); 
    343                 // Remove newlines from content. 
    344                 $data = str_replace( "\n", '', $data ); 
    345                 // Remove // from content. 
    346                 $data = trim( str_replace( '/', '', $data ) ); 
    347  
    348                 // Decode data to JSON. 
    349                 $json = json_decode( $data ); 
    350  
    351                 // Now cache array for N seconds. 
    352                 set_transient( $sq_transient_id, $json, WPAU_STOCK_QUOTE_CACHE_TIMEOUT ); 
     351                if ( is_wp_error( $response ) ) { 
     352                    return $defaults['error_message'] . '<!-- Stock Quote fetch ERROR: ' . $response->get_error_message() . ' -->'; 
     353                } else { 
     354                    // Get content from response. 
     355                    $data = wp_remote_retrieve_body( $response ); 
     356                    // Convert a string with ISO-8859-1 characters encoded with UTF-8 to single-byte ISO-8859-1. 
     357                    $data = utf8_decode( $data ); 
     358                    // Remove newlines from content. 
     359                    $data = str_replace( "\n", '', $data ); 
     360                    // Remove // from content. 
     361                    $data = trim( str_replace( '/', '', $data ) ); 
     362 
     363                    // Decode data to JSON. 
     364                    $json = json_decode( $data ); 
     365                    unset( $data ); 
     366 
     367                    // Now cache array for N seconds. 
     368                    set_transient( $transient_id, $json, $defaults['cache_timeout'] ); 
     369                } 
    353370 
    354371                // Free some memory: destroy all vars that we temporary used here. 
     
    357374 
    358375            // Prepare quote. 
    359             $id = 'stock_quote_' . substr( md5( mt_rand() ), 0, 4 ); 
    360376            $class = "stock_quote sqitem $class"; 
    361377 
     
    371387                $q_price   = str_replace( ',', '', $quote->l ); 
    372388                $q_changep = str_replace( ',', '', $quote->cp ); 
    373                 $q_name    = $quote->t; 
     389                $q_name    = $quote->t; // No nicename in Google Finance so use Symbol instead. 
    374390                $q_symbol  = $quote->t; 
    375391                $q_ltrade  = $quote->lt; 
     
    406422                // Do not print change, volume and change% for currencies. 
    407423                if ( 'CURRENCY' == $q_exch ) { 
    408                     $company_show = ( $q_symbol == $q_name ) ? $q_name . '=X' : $q_name; 
     424                    $company_show = $q_symbol == $q_name ? $q_name . '=X' : $q_name; 
    409425                    $url_query    = $q_symbol; 
    410426                    $quote_title  = $q_name; 
     
    420436 
    421437                // Text. 
    422                 $quote_text = "$company_show $q_price $q_change ${q_changep}%"; 
     438                // $quote_text = "$company_show $q_price $q_change ${q_changep}%"; 
     439 
     440                $template = ! empty( $template ) ? $template : '%company% %price% %change% %changep%'; 
     441 
     442                // Value template. 
     443                $quote_text = $template; 
     444                $quote_text = str_replace( '%company_show%', $company_show, $quote_text ); 
     445                $quote_text = str_replace( '%company%', $q_name, $quote_text ); 
     446                $quote_text = str_replace( '%exchange%', $q_exch, $quote_text ); 
     447                $quote_text = str_replace( '%exch_symbol%', $url_query, $quote_text ); 
     448                $quote_text = str_replace( '%symbol%', $symbol, $quote_text ); 
     449                $quote_text = str_replace( '%price%', $q_price, $quote_text ); 
     450                $quote_text = str_replace( '%change%', $q_change, $quote_text ); 
     451                $quote_text = str_replace( '%changep%', "{$q_changep}%", $quote_text ); 
     452                $quote_text = str_replace( '%ltrade%', $q_ltrade, $quote_text ); 
    423453 
    424454                // Quote w/ or w/o link. 
    425455                if ( empty( $nolink ) ) { 
    426456                    $out = sprintf( 
    427                         '<a href="https://www.google.com/finance?q=%s" id="%s" class="%s" target="_blank" title="%s">%s</a>', 
    428                         $url_query, 
    429                         $id, 
    430                         $class, 
    431                         $quote_title, 
    432                         $quote_text 
     457                        '<a href="https://www.google.com/finance?q=%1$s" class="%2$s" target="_blank" title="%3$s">%4$s</a>', 
     458                        $url_query,   // 1 
     459                        $class,       // 2 
     460                        $quote_title, // 3 
     461                        $quote_text   // 4 
    433462                    ); 
    434463                } else { 
    435464                    $out = sprintf( 
    436                         '<span id="%s" class="%s" title="%s">%s</span>', 
    437                         $id, 
    438                         $class, 
    439                         $quote_title, 
    440                         $quote_text 
     465                        '<span class="%1$s" title="%2$s">%3$s</span>', 
     466                        $class,       // 1 
     467                        $quote_title, // 2 
     468                        $quote_text   // 3 
    441469                    ); 
    442470                } 
     
    445473                // No results were returned. 
    446474                $out = sprintf( 
    447                     '<span id="%s" class="stock_quote sqitem error %s">%s</span>', 
    448                     $id, 
    449                     $class, 
    450                     str_replace( '%symbol%', $symbol, $defaults['error_message'] ) 
     475                    '<span class="stock_quote sqitem error %1$s">%2$s</span>', 
     476                    $class, // 1 
     477                    str_replace( '%symbol%', $symbol, $defaults['error_message'] ) // 2 
    451478                ); 
    452479 
    453480            } 
    454481 
    455             unset( $q, $id, $defaults, $legend ); 
     482            unset( $q, $defaults, $legend ); 
    456483 
    457484            // Print quote content. 
     
    469496            $defaults = self::$defaults; 
    470497            $atts = shortcode_atts( array( 
    471                 'symbol'  => $defaults['symbol'], 
    472                 'show'    => $defaults['show'], 
    473                 'nolink'  => false, 
    474                 'class'   => '', 
     498                'symbol'        => $defaults['symbol'], 
     499                'show'          => $defaults['show'], 
     500                'nolink'        => false, 
     501                'class'         => '', 
     502                'decimals'      => null, 
     503                'number_format' => $defaults['number_format'], 
     504                'template'      => '%company% %price% %change% %changep%', 
    475505            ), $atts ); 
    476506 
    477507            if ( ! empty( $atts['symbol'] ) ) { 
    478508                $symbol = strip_tags( $atts['symbol'] ); 
    479                 return self::stock_quote( $symbol, $atts['show'], $atts['nolink'], $atts['class'] ); 
     509                return self::stock_quote( $symbol, $atts['show'], $atts['nolink'], $atts['class'], $atts['decimals'], $atts['number_format'], $atts['template'] ); 
    480510            } 
    481511 
  • stock-quote/trunk/templates/settings.php

    r1577609 r1661836  
    1414            </form> 
    1515            <h2><?php _e( 'Help', 'stock-quote' ); ?></h2> 
    16             <p><?php printf( __( 'To insert Stock Quote to content, use shortcode <code>%s</code> where:', 'stock-quote' ), '[stock_quote symbol="" show="" nolink="" class=""]' ); ?> 
     16            <p><?php printf( __( 'To insert Stock Quote to content, use shortcode <code>%s</code> where:', 'stock-quote' ), '[stock_quote symbol="" show="" decimals="" number_format="" template="" nolink="" class=""]' ); ?> 
    1717                <ul> 
    18                     <li><code>symbol</code> <?php _e( 'represent single stock symbol (default from this settings page used if no custom set by shortcode)', 'stock-quote' ); ?></li> 
    19                     <li><code>show</code> <?php printf( __( 'can be <code>%s</code> to represent company with Company Name (default), or <code>%s</code> to represent company with Stock Symbol', 'stock-quote' ), 'name', 'symbol' ); ?></li> 
    20                     <li><code>nolink</code> <?php _e( 'to disable link of quotes to Google Finance page set to <code>1</code> or <code>true</code>', 'stock-quote' ); ?></li> 
    21                     <li><code>class</code> <?php _e( 'custom class name for quote item', 'stock-quote' ); ?></li> 
     18                    <li><code><strong>symbol</strong></code> <?php _e( 'represent single stock symbol (default from this settings page used if no custom set by shortcode)', 'stock-quote' ); ?></li> 
     19                    <li><code><strong>show</strong></code> <?php printf( __( 'can be <code>%s</code> to represent company with Company Name (default), or <code>%s</code> to represent company with Stock Symbol', 'stock-quote' ), 'name', 'symbol' ); ?></li> 
     20                    <li><code><strong>decimals</strong></code> <?php _e( 'override default number of decimal places for values (default from this settings page used if no custom set by shortcode). Valud values are: 1, 2, 3 and 4', 'stock-quote' ); ?></li> 
     21                    <li><code><strong>number_format</strong></code> <?php printf( __( 'override default number format for values (default from this settings page used if no custom set by shortcode). Valid options are: %s and %s', 'stock-quote' ), '<code>cd</code> for <em>0.000,00</em>; <code>dc</code> for <em>0,000.00</em>; <code>sd</code> for <em>0 000.00</em>', '<code>sc</code> for <em>0 000,00</em>' ); ?></li> 
     22                    <li><code><strong>template</strong></code> <?php printf( __( 'override default template string (default is: %1$s). You can use following template keywords: %2$s and %3$s', 'stock-quote'), '<code>%company% %price% %change% %changep%</code>', '<code>%company_show%</code>, <code>%company%</code>, <code>%exchange%</code>, <code>%exch_symbol%</code>, <code>%symbol%</code>, <code>%price%</code>, <code>%change%</code>, <code>%changep%</code>', '<code>%ltrade%</code>' ); ?></li> 
     23                    <li><code><strong>nolink</strong></code> <?php _e( 'to disable link of quotes to Google Finance page set to <code>1</code> or <code>true</code>', 'stock-quote' ); ?></li> 
     24                    <li><code><strong>class</strong></code> <?php _e( 'custom class name for quote item', 'stock-quote' ); ?></li> 
    2225                </ul> 
    2326            </p> 
Note: See TracChangeset for help on using the changeset viewer.