WordPress.org

Make WordPress Core

Ticket #12267: presentable.diff

File presentable.diff, 9.3 KB (added by andy, 5 years ago)

Moved to presentable.php, cleaner, more methods.

  • wp-settings.php

     
    128128require( ABSPATH . WPINC . '/media.php' ); 
    129129require( ABSPATH . WPINC . '/http.php' ); 
    130130require( ABSPATH . WPINC . '/widgets.php' ); 
     131require( ABSPATH . WPINC . '/presentable.php' ); 
    131132 
    132133// Load multisite-specific files. 
    133134if ( is_multisite() ) { 
  • wp-includes/classes.php

     
    16961696 
    16971697} 
    16981698 
    1699 // A factory and constructor that upgrades stdClass "rows" to WordPress classes. 
    1700 class wp_row { 
    1701         // Factory. Call statically to upgrade a stdClass object to its specialized class: $o = wp_row::get($row). 
    1702         function get($row) { 
    1703                 if ( is_a($row, 'wp_row') || is_subclass_of($row, 'wp_row') ) 
    1704                         return $row; 
    1705  
    1706                 if ( is_array($row) ) 
    1707                         $row = (object) $row; 
    1708  
    1709                 $class = 'wp_row'; 
    1710                 if ( isset($row->post_type) ) { 
    1711                         if ( class_exists("wp_" . $row->post_type) ) 
    1712                                 $class = "wp_" . $row->post_type; 
    1713                         else 
    1714                                 $class = "wp_post"; 
    1715                 } elseif ( isset($row->comment_type) ) { 
    1716                         if ( class_exists("wp_" . $row->comment_type) ) 
    1717                                 $class = "wp_" . $row->comment_type; 
    1718                         else 
    1719                                 $class = "wp_comment"; 
    1720                 } 
    1721  
    1722                 if ( function_exists("apply_filters") ) { 
    1723                         $filtered_class = apply_filters("wp_row_class", $class, $row); 
    1724                         if ( class_exists($filtered_class) ) 
    1725                                 $class = $filtered_class; 
    1726                 } 
    1727  
    1728                 return call_user_func(array($class, 'get'), $row); 
    1729         } 
    1730  
    1731         function wp_row(&$row) { 
    1732                 return $this->__construct($row); 
    1733         } 
    1734  
    1735         function __construct($row) { 
    1736                 if ( is_array($row) ) 
    1737                         $row = (object) $row; 
    1738  
    1739                 foreach ( (array) $row as $k => $v ) 
    1740                         $this->$k = $row->$k; 
    1741         } 
    1742 } 
    1743  
    1744 class wp_post extends wp_row { 
    1745         // Factory 
    1746         function get($post) { 
    1747                 if ( $post = get_post($post) ) 
    1748                         return new wp_post($post); 
    1749                 else 
    1750                         return new WP_Error(404, "Post not found."); 
    1751         } 
    1752  
    1753         function id() { return $this->ID; } 
    1754         function post_id() { return $this->ID; } 
    1755         function type_id() { return 'post-' . $this->ID; } 
    1756         function classes($class='') { return join( ' ', get_post_class( $class, $this->id() ) ); } 
    1757  
    1758         function permalink() { return get_permalink($this); } 
    1759         function title() { return get_the_title($this); } 
    1760         function date($format='') { return; } 
    1761         function time($format='') { return get_the_time($format, $this); } 
    1762         function author() { $authordata = get_userdata($this->post_author); return $authordata->display_name; } 
    1763         function content() { return get_content($this); } 
    1764 } 
    1765  
    1766 class wp_comment extends wp_row { 
    1767         // Factory 
    1768         function get($comment) { 
    1769                 if ( $comment = get_comment($comment) ) 
    1770                         return new wp_comment($comment); 
    1771                 else 
    1772                         return new WP_Error(404, "Comment not found."); 
    1773         } 
    1774  
    1775         function id() { return $this->comment_ID; } 
    1776         function post_id() { return $this->comment_post_ID; } 
    1777         function type_id() { return 'comment-' . $this->comment_ID; } 
    1778         function classes($class='') { return join( ' ', get_comment_class( $class, $this->id() ) ); } 
    1779  
    1780         function permalink() { return get_comment_link($this); } 
    1781         function title() { return sprintf(__("Comment on %s"), get_the_title($this->post_id())); } 
    1782         function time($format='') { return mysql2date($format?$format:get_option('time_format'), $this->comment_date); } 
    1783         function date($format='') { return date($format?$format:get_option('date_format'), $this->time('U')); } 
    1784         function author() { return $this->comment_author; } 
    1785         function excerpt() { return $this->comment_content; } 
    1786         function content() { return get_comment_content($this); } 
    1787 } 
    1788  
    1789 function is_post($object) { 
    1790         return is_a('wp_post', $object); 
    1791 } 
    1792  
    1793 function is_comment($object) { 
    1794         return is_a('wp_comment', $object); 
    1795 } 
    1796  
    17971699?> 
  • wp-includes/presentable.php

     
     1<?php 
     2 
     3// A base interface class with factory methods. 
     4// Not to become an actual interface, nor an abstract class, 
     5// because it can be instantiated in a last-ditch effort by the 
     6// factory method to return something with the necessary methods. 
     7class WP_Presentable { 
     8        // A factory method that upgrades stdClass "rows" to their corresponding Presentable classes. 
     9        // Learn about factories and other design patterns: http://www.ibm.com/developerworks/library/os-php-designptrns/ 
     10        /* public static */ function create($row) { 
     11                if ( is_a($row, __CLASS__) ) 
     12                        return $row; 
     13 
     14                if ( is_array($row) ) 
     15                        $row = (object) $row; 
     16 
     17                if ( isset($row->post_type) ) { 
     18                        if ( empty($row->post_type) ) 
     19                                $row->post_type = 'post'; 
     20                        $class = __CLASS__ . "_$row->post_type"; 
     21                        if ( !class_exists($class) ) 
     22                                $class = __CLASS__ . '_post'; 
     23                } elseif ( isset($row->comment_type) ) { 
     24                        if ( empty($row->comment_type) ) 
     25                                $row->comment_type = 'comment'; 
     26                        $class = __CLASS__ . "_$row->comment_type"; 
     27                        if ( !class_exists($class) ) 
     28                                $class = __CLASS__ . "_comment"; 
     29                } 
     30 
     31                if ( function_exists("apply_filters") ) { 
     32                        $filtered_class = apply_filters("WP_Presentable_class", $class, $row); 
     33                        if ( class_exists($filtered_class) ) 
     34                                $class = $filtered_class; 
     35                } 
     36 
     37                return new $class($row); 
     38        } 
     39 
     40        function WP_Presentable($row) { 
     41                return $this->__construct($row); 
     42        } 
     43 
     44        // Takes an array or object and transfers its named properties to the new instance. 
     45        function __construct($row) { 
     46                if ( is_array($row) ) 
     47                        $row = (object) $row; 
     48 
     49                foreach ( (array) $row as $k => $v ) 
     50                        $this->$k = $row->$k; 
     51        } 
     52 
     53        // Interface 
     54 
     55        function get_id() { } // post->ID, comment->comment_ID 
     56        function get_type() { } // post, page, comment, pingback 
     57        function get_supertype() { } // post, comment 
     58 
     59        function get_date($format='') { } 
     60        function get_time($format='') { } 
     61 
     62        function get_url() { } // permalink 
     63        function get_edit_url() { } 
     64 
     65        function get_title() { } // post_title, "Comment on post_title" 
     66        function get_content() { } 
     67        function get_excerpt() { } 
     68 
     69        function get_author_user_id() { } // int or false 
     70        function get_author_name() { } 
     71        function get_author_url() { } // from comment form or user profile 
     72        function get_author_link() { } 
     73        function get_author_archive_url() { } 
     74        function get_author_archive_link() { } 
     75 
     76        function get_categories() { } 
     77        function get_tags() { } 
     78        function get_terms() { } 
     79        function get_classes($classes='') { } 
     80} 
     81 
     82class WP_Presentable_post extends WP_Presentable { 
     83        function get_id() { return $this->ID; } 
     84        function get_type() { return $this->post_type; } 
     85        function get_supertype() { return 'post'; } 
     86 
     87        function get_date($format='') { } 
     88        function get_time($format='') { } 
     89 
     90        function get_url() { } // permalink 
     91        function get_edit_url() { } 
     92 
     93        function get_title() { return get_the_title($this); } // post_title, "Comment on post_title" 
     94        function get_content() { } 
     95        function get_excerpt() { } 
     96 
     97        function get_author_user_id() { } // int or false 
     98        function get_author_name() { } 
     99        function get_author_url() { } // from comment form or user profile 
     100        function get_author_link() { } 
     101        function get_author_archive_url() { } 
     102        function get_author_archive_link() { } 
     103 
     104        function get_categories() { } 
     105        function get_tags() { } 
     106        function get_terms() { } 
     107        function get_classes($classes='') { } 
     108} 
     109 
     110class WP_Presentable_comment extends WP_Presentable { 
     111        function get_id() { return $this->comment_ID; } 
     112        function get_type() { return $this->comment_type; } 
     113        function get_supertype() { return 'comment'; } 
     114 
     115        function get_date($format='') { return date($format?$format:get_option('date_format'), $this->get_time('U')); } 
     116        function get_time($format='') { return mysql2date($format?$format:get_option('time_format'), $this->comment_date); } 
     117 
     118        function get_url() { return get_comment_link($this); } // permalink 
     119        function get_edit_url() { } 
     120 
     121        function get_title() { return sprintf(__("Comment on %s"), get_the_title($this->comment_post_ID)); } 
     122        function get_content() { return get_comment_text($this); } 
     123        function get_excerpt() { return get_comment_excerpt($this); } 
     124 
     125        function get_author_user_id() { } // int or false 
     126        function get_author_name() { } 
     127        function get_author_url() { } // from comment form or user profile 
     128        function get_author_link() { } 
     129        function get_author_archive_url() { } 
     130        function get_author_archive_link() { } 
     131 
     132        function get_categories() { } 
     133        function get_tags() { } 
     134        function get_terms() { } 
     135        function get_classes($classes='') { } 
     136 
     137        function author() { return $this->comment_author; } 
     138        function excerpt() { return $this->comment_content; } 
     139} 
     140 
     141function is_post($object) { 
     142        return is_a($object, 'WP_Presentable_post'); 
     143} 
     144 
     145function is_comment($object) { 
     146        return is_a($object, 'WP_Presentable_comment'); 
     147} 
     148 
  • wp-includes/query.php

     
    23042304 
    23052305                // Turn each row into a classed object, e.g. wp_post, wp_comment. 
    23062306                if ( is_array($this->posts) ) 
    2307                         $this->posts = array_map(array('wp_row', 'get'), $this->posts); 
     2307                        $this->posts = array_map(array('WP_Presentable', 'create'), $this->posts); 
    23082308 
    23092309                if ( !empty($this->posts) && $this->is_comment_feed && $this->is_singular ) { 
    23102310                        $cjoin = apply_filters('comment_feed_join', '');