Make WordPress Core


Ignore:
Timestamp:
09/23/2015 11:56:05 PM (11 years ago)
Author:
wonderboymusic
Message:

Calendar Widget: remove the title attribute for days and replace with aria-label. Spruce up some of this nasty code. Delete unnecessary bits.

Props wonderboymusic, elusiveunit, 5um17.
Fixes #30297.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/general-template.php

    r34348 r34463  
    16121612 * @return string|void String when retrieving.
    16131613 */
    1614 function get_calendar($initial = true, $echo = true) {
     1614function get_calendar( $initial = true, $echo = true ) {
    16151615        global $wpdb, $m, $monthnum, $year, $wp_locale, $posts;
    16161616
    16171617        $key = md5( $m . $monthnum . $year );
    1618         if ( $cache = wp_cache_get( 'get_calendar', 'calendar' ) ) {
    1619                 if ( is_array($cache) && isset( $cache[ $key ] ) ) {
    1620                         if ( $echo ) {
    1621                                 /** This filter is documented in wp-includes/general-template.php */
    1622                                 echo apply_filters( 'get_calendar', $cache[$key] );
    1623                                 return;
    1624                         } else {
    1625                                 /** This filter is documented in wp-includes/general-template.php */
    1626                                 return apply_filters( 'get_calendar', $cache[$key] );
    1627                         }
     1618        $cache = wp_cache_get( 'get_calendar', 'calendar' );
     1619
     1620        if ( $cache && is_array( $cache ) && isset( $cache[ $key ] ) ) {
     1621                /** This filter is documented in wp-includes/general-template.php */
     1622                $output = apply_filters( 'get_calendar', $cache[ $key ] );
     1623
     1624                if ( $echo ) {
     1625                        echo $output;
     1626                        return;
    16281627                }
    1629         }
    1630 
    1631         if ( !is_array($cache) )
     1628
     1629                return $output;
     1630        }
     1631
     1632        if ( ! is_array( $cache ) ) {
    16321633                $cache = array();
     1634        }
    16331635
    16341636        // Quick check. If we have no posts at all, abort!
    1635         if ( !$posts ) {
     1637        if ( ! $posts ) {
    16361638                $gotsome = $wpdb->get_var("SELECT 1 as test FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' LIMIT 1");
    1637                 if ( !$gotsome ) {
     1639                if ( ! $gotsome ) {
    16381640                        $cache[ $key ] = '';
    16391641                        wp_cache_set( 'get_calendar', $cache, 'calendar' );
    … …  
    16421644        }
    16431645
    1644         if ( isset($_GET['w']) )
    1645                 $w = ''.intval($_GET['w']);
    1646 
     1646        if ( isset( $_GET['w'] ) ) {
     1647                $w = (int) $_GET['w'];
     1648        }
    16471649        // week_begins = 0 stands for Sunday
    1648         $week_begins = intval(get_option('start_of_week'));
     1650        $week_begins = (int) get_option( 'start_of_week' );
     1651        $ts = current_time( 'timestamp' );
    16491652
    16501653        // Let's figure out when we are
    1651         if ( !empty($monthnum) && !empty($year) ) {
    1652                 $thismonth = ''.zeroise(intval($monthnum), 2);
    1653                 $thisyear = ''.intval($year);
    1654         } elseif ( !empty($w) ) {
     1654        if ( ! empty( $monthnum ) && ! empty( $year ) ) {
     1655                $thismonth = zeroise( intval( $monthnum ), 2 );
     1656                $thisyear = (int) $year;
     1657        } elseif ( ! empty( $w ) ) {
    16551658                // We need to get the month from MySQL
    1656                 $thisyear = ''.intval(substr($m, 0, 4));
    1657                 $d = (($w - 1) * 7) + 6; //it seems MySQL's weeks disagree with PHP's
     1659                $thisyear = (int) substr( $m, 0, 4 );
     1660                //it seems MySQL's weeks disagree with PHP's
     1661                $d = ( ( $w - 1 ) * 7 ) + 6;
    16581662                $thismonth = $wpdb->get_var("SELECT DATE_FORMAT((DATE_ADD('{$thisyear}0101', INTERVAL $d DAY) ), '%m')");
    1659         } elseif ( !empty($m) ) {
    1660                 $thisyear = ''.intval(substr($m, 0, 4));
    1661                 if ( strlen($m) < 6 )
    1662                                 $thismonth = '01';
    1663                 else
    1664                                 $thismonth = ''.zeroise(intval(substr($m, 4, 2)), 2);
     1663        } elseif ( ! empty( $m ) ) {
     1664                $thisyear = (int) substr( $m, 0, 4 );
     1665                if ( strlen( $m ) < 6 ) {
     1666                        $thismonth = '01';
     1667                } else {
     1668                        $thismonth = zeroise( (int) substr( $m, 4, 2 ), 2 );
     1669                }
    16651670        } else {
    1666                 $thisyear = gmdate('Y', current_time('timestamp'));
    1667                 $thismonth = gmdate('m', current_time('timestamp'));
    1668         }
    1669 
    1670         $unixmonth = mktime(0, 0 , 0, $thismonth, 1, $thisyear);
    1671         $last_day = date('t', $unixmonth);
     1671                $thisyear = gmdate( 'Y', $ts );
     1672                $thismonth = gmdate( 'm', $ts );
     1673        }
     1674
     1675        $unixmonth = mktime( 0, 0 , 0, $thismonth, 1, $thisyear );
     1676        $last_day = date( 't', $unixmonth );
    16721677
    16731678        // Get the next and previous month and year with at least one post
    … …  
    16881693        $calendar_caption = _x('%1$s %2$s', 'calendar caption');
    16891694        $calendar_output = '<table id="wp-calendar">
    1690         <caption>' . sprintf($calendar_caption, $wp_locale->get_month($thismonth), date('Y', $unixmonth)) . '</caption>
     1695        <caption>' . sprintf(
     1696                $calendar_caption,
     1697                $wp_locale->get_month( $thismonth ),
     1698                date( 'Y', $unixmonth )
     1699        ) . '</caption>
    16911700        <thead>
    16921701        <tr>';
    … …  
    16941703        $myweek = array();
    16951704
    1696         for ( $wdcount=0; $wdcount<=6; $wdcount++ ) {
    1697                 $myweek[] = $wp_locale->get_weekday(($wdcount+$week_begins)%7);
     1705        for ( $wdcount = 0; $wdcount <= 6; $wdcount++ ) {
     1706                $myweek[] = $wp_locale->get_weekday( ( $wdcount + $week_begins ) % 7 );
    16981707        }
    16991708
    17001709        foreach ( $myweek as $wd ) {
    1701                 $day_name = $initial ? $wp_locale->get_weekday_initial($wd) : $wp_locale->get_weekday_abbrev($wd);
    1702                 $wd = esc_attr($wd);
     1710                $day_name = $initial ? $wp_locale->get_weekday_initial( $wd ) : $wp_locale->get_weekday_abbrev( $wd );
     1711                $wd = esc_attr( $wd );
    17031712                $calendar_output .= "\n\t\t<th scope=\"col\" title=\"$wd\">$day_name</th>";
    17041713        }
    … …  
    17121721
    17131722        if ( $previous ) {
    1714                 $calendar_output .= "\n\t\t".'<td colspan="3" id="prev"><a href="' . get_month_link($previous->year, $previous->month) . '">&laquo; ' . $wp_locale->get_month_abbrev($wp_locale->get_month($previous->month)) . '</a></td>';
     1723                $calendar_output .= "\n\t\t".'<td colspan="3" id="prev"><a href="' . get_month_link( $previous->year, $previous->month ) . '">&laquo; ' .
     1724                        $wp_locale->get_month_abbrev( $wp_locale->get_month( $previous->month ) ) .
     1725                '</a></td>';
    17151726        } else {
    17161727                $calendar_output .= "\n\t\t".'<td colspan="3" id="prev" class="pad">&nbsp;</td>';
    … …  
    17201731
    17211732        if ( $next ) {
    1722                 $calendar_output .= "\n\t\t".'<td colspan="3" id="next"><a href="' . get_month_link($next->year, $next->month) . '">' . $wp_locale->get_month_abbrev($wp_locale->get_month($next->month)) . ' &raquo;</a></td>';
     1733                $calendar_output .= "\n\t\t".'<td colspan="3" id="next"><a href="' . get_month_link( $next->year, $next->month ) . '">' .
     1734                        $wp_locale->get_month_abbrev( $wp_locale->get_month( $next->month ) ) .
     1735                ' &raquo;</a></td>';
    17231736        } else {
    17241737                $calendar_output .= "\n\t\t".'<td colspan="3" id="next" class="pad">&nbsp;</td>';
    … …  
    17451758        }
    17461759
    1747         if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false || stripos($_SERVER['HTTP_USER_AGENT'], 'camino') !== false || stripos($_SERVER['HTTP_USER_AGENT'], 'safari') !== false)
    1748                 $ak_title_separator = "\n";
    1749         else
    1750                 $ak_title_separator = ', ';
    1751 
    1752         $ak_titles_for_day = array();
    1753         $ak_post_titles = $wpdb->get_results("SELECT ID, post_title, DAYOFMONTH(post_date) as dom "
    1754                 ."FROM $wpdb->posts "
    1755                 ."WHERE post_date >= '{$thisyear}-{$thismonth}-01 00:00:00' "
    1756                 ."AND post_date <= '{$thisyear}-{$thismonth}-{$last_day} 23:59:59' "
    1757                 ."AND post_type = 'post' AND post_status = 'publish'"
    1758         );
    1759         if ( $ak_post_titles ) {
    1760                 foreach ( (array) $ak_post_titles as $ak_post_title ) {
    1761 
    1762                                 /** This filter is documented in wp-includes/post-template.php */
    1763                                 $post_title = esc_attr( apply_filters( 'the_title', $ak_post_title->post_title, $ak_post_title->ID ) );
    1764 
    1765                                 if ( empty($ak_titles_for_day['day_'.$ak_post_title->dom]) )
    1766                                         $ak_titles_for_day['day_'.$ak_post_title->dom] = '';
    1767                                 if ( empty($ak_titles_for_day["$ak_post_title->dom"]) ) // first one
    1768                                         $ak_titles_for_day["$ak_post_title->dom"] = $post_title;
    1769                                 else
    1770                                         $ak_titles_for_day["$ak_post_title->dom"] .= $ak_title_separator . $post_title;
     1760        // See how much we should pad in the beginning
     1761        $pad = calendar_week_mod( date( 'w', $unixmonth ) - $week_begins );
     1762        if ( 0 != $pad ) {
     1763                $calendar_output .= "\n\t\t".'<td colspan="'. esc_attr( $pad ) .'" class="pad">&nbsp;</td>';
     1764        }
     1765
     1766        $newrow = false;
     1767        $daysinmonth = (int) date( 't', $unixmonth );
     1768
     1769        for ( $day = 1; $day <= $daysinmonth; ++$day ) {
     1770                if ( isset($newrow) && $newrow ) {
     1771                        $calendar_output .= "\n\t</tr>\n\t<tr>\n\t\t";
    17711772                }
    1772         }
    1773 
    1774         // See how much we should pad in the beginning
    1775         $pad = calendar_week_mod(date('w', $unixmonth)-$week_begins);
    1776         if ( 0 != $pad )
    1777                 $calendar_output .= "\n\t\t".'<td colspan="'. esc_attr($pad) .'" class="pad">&nbsp;</td>';
    1778 
    1779         $daysinmonth = intval(date('t', $unixmonth));
    1780         for ( $day = 1; $day <= $daysinmonth; ++$day ) {
    1781                 if ( isset($newrow) && $newrow )
    1782                         $calendar_output .= "\n\t</tr>\n\t<tr>\n\t\t";
    17831773                $newrow = false;
    17841774
    1785                 if ( $day == gmdate('j', current_time('timestamp')) && $thismonth == gmdate('m', current_time('timestamp')) && $thisyear == gmdate('Y', current_time('timestamp')) )
     1775                if ( $day == gmdate( 'j', $ts ) &&
     1776                        $thismonth == gmdate( 'm', $ts ) &&
     1777                        $thisyear == gmdate( 'Y', $ts ) ) {
    17861778                        $calendar_output .= '<td id="today">';
    1787                 else
     1779                } else {
    17881780                        $calendar_output .= '<td>';
    1789 
    1790                 if ( in_array($day, $daywithpost) ) // any posts today?
    1791                                 $calendar_output .= '<a href="' . get_day_link( $thisyear, $thismonth, $day ) . '" title="' . esc_attr( $ak_titles_for_day[ $day ] ) . "\">$day</a>";
    1792                 else
     1781                }
     1782
     1783                if ( in_array( $day, $daywithpost ) ) {
     1784                        // any posts today?
     1785                        $date_format = date( _x( 'F j, Y', 'daily archives date format' ), strtotime( "{$thisyear}-{$thismonth}-{$day}" ) );
     1786                        $label = sprintf( __( 'Posts published on %s' ), $date_format );
     1787                        $calendar_output .= sprintf(
     1788                                '<a href="%s" aria-label="%s">%s</a>',
     1789                                get_day_link( $thisyear, $thismonth, $day ),
     1790                                esc_attr( $label ),
     1791                                $day
     1792                        );
     1793                } else {
    17931794                        $calendar_output .= $day;
     1795                }
    17941796                $calendar_output .= '</td>';
    17951797
    1796                 if ( 6 == calendar_week_mod(date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear))-$week_begins) )
     1798                if ( 6 == calendar_week_mod( date( 'w', mktime(0, 0 , 0, $thismonth, $day, $thisyear ) ) - $week_begins ) ) {
    17971799                        $newrow = true;
    1798         }
    1799 
    1800         $pad = 7 - calendar_week_mod(date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear))-$week_begins);
    1801         if ( $pad != 0 && $pad != 7 )
    1802                 $calendar_output .= "\n\t\t".'<td class="pad" colspan="'. esc_attr($pad) .'">&nbsp;</td>';
    1803 
     1800                }
     1801        }
     1802
     1803        $pad = 7 - calendar_week_mod( date( 'w', mktime( 0, 0 , 0, $thismonth, $day, $thisyear ) ) - $week_begins );
     1804        if ( $pad != 0 && $pad != 7 ) {
     1805                $calendar_output .= "\n\t\t".'<td class="pad" colspan="'. esc_attr( $pad ) .'">&nbsp;</td>';
     1806        }
    18041807        $calendar_output .= "\n\t</tr>\n\t</tbody>\n\t</table>";
    18051808
    … …  
    18161819                 */
    18171820                echo apply_filters( 'get_calendar', $calendar_output );
    1818         } else {
    1819                 /** This filter is documented in wp-includes/general-template.php */
    1820                 return apply_filters( 'get_calendar', $calendar_output );
    1821         }
    1822 
     1821                return;
     1822        }
     1823        /** This filter is documented in wp-includes/general-template.php */
     1824        return apply_filters( 'get_calendar', $calendar_output );
    18231825}
    18241826
Note: See TracChangeset for help on using the changeset viewer.