Making WordPress.org


Ignore:
Timestamp:
07/04/2024 03:47:24 AM (17 months ago)
Author:
dd32
Message:

Plugin Directory: Store plugin releases from trunk as trunk@1.2.3, split the releases prefilling into it's own method.

See #7696.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-directory.php

    r13778 r13876  
    17291729        // Meta doesn't exist yet? Lets fill it out.
    17301730        if ( false === $releases || ! is_array( $releases ) ) {
    1731             update_post_meta( $plugin->ID, 'releases', [] );
    1732 
    1733             $tags = get_post_meta( $plugin->ID, 'tags', true );
    1734             if ( $tags ) {
    1735                 foreach ( $tags as $tag_version => $tag ) {
    1736                     self::add_release( $plugin, [
    1737                         'date'                   => strtotime( $tag['date'] ),
    1738                         'tag'                    => $tag['tag'],
    1739                         'version'                => $tag_version,
    1740                         'committer'              => [ $tag['author'] ],
    1741                         'zips_built'             => true, // Old release, assume they were built.
    1742                         'confirmations_required' => 0,    // Old release, assume it's released.
    1743                     ] );
    1744                 }
    1745             } else {
    1746                 // Pull from SVN directly.
    1747                 $svn_tags = Tools\SVN::ls( "https://plugins.svn.wordpress.org/{$plugin->post_name}/tags/", true ) ?: [];
    1748                 foreach ( $svn_tags as $entry ) {
    1749                     // Discard files
    1750                     if ( 'dir' !== $entry['kind'] ) {
    1751                         continue;
    1752                     }
    1753 
    1754                     $tag = $entry['filename'];
    1755 
    1756                     // Prefix the 0 for plugin versions like 0.1
    1757                     if ( '.' == substr( $tag, 0, 1 ) ) {
    1758                         $tag = "0{$tag}";
    1759                     }
    1760 
    1761                     self::add_release( $plugin, [
    1762                         'date'                   => strtotime( $entry['date'] ),
    1763                         'tag'                    => $entry['filename'],
    1764                         'version'                => $tag,
    1765                         'committer'              => [ $entry['author'] ],
    1766                         'zips_built'             => true, // Old release, assume they were built.
    1767                         'confirmations_required' => 0,    // Old release, assume it's released.
    1768                     ] );
    1769                 }
    1770             }
    1771 
    1772             $releases = get_post_meta( $plugin->ID, 'releases', true ) ?: [];
     1731            $releases = self::prefill_releses_meta( $plugin );
    17731732        }
    17741733
     
    17891748
    17901749    /**
     1750     * Prefill the releases meta for a plugin.
     1751     *
     1752     * @param \WP_Post $plugin Plugin post object.
     1753     * @return array
     1754     */
     1755    public static function prefill_releses_meta( $plugin ) {
     1756        if ( ! $plugin->releases ) {
     1757            update_post_meta( $plugin->ID, 'releases', [] );
     1758        }
     1759
     1760        $tags = get_post_meta( $plugin->ID, 'tags', true );
     1761        if ( $tags ) {
     1762            foreach ( $tags as $tag_version => $tag ) {
     1763                self::add_release( $plugin, [
     1764                    'date'                   => strtotime( $tag['date'] ),
     1765                    'tag'                    => $tag['tag'],
     1766                    'version'                => $tag_version,
     1767                    'committer'              => [ $tag['author'] ],
     1768                    'zips_built'             => true, // Old release, assume they were built.
     1769                    'confirmations_required' => 0,    // Old release, assume it's released.
     1770                ] );
     1771            }
     1772        } else {
     1773            // Pull from SVN directly.
     1774            $svn_tags = Tools\SVN::ls( "https://plugins.svn.wordpress.org/{$plugin->post_name}/tags/", true ) ?: [];
     1775            foreach ( $svn_tags as $entry ) {
     1776                // Discard files
     1777                if ( 'dir' !== $entry['kind'] ) {
     1778                    continue;
     1779                }
     1780
     1781                $tag = $entry['filename'];
     1782
     1783                // Prefix the 0 for plugin versions like 0.1
     1784                if ( '.' == substr( $tag, 0, 1 ) ) {
     1785                    $tag = "0{$tag}";
     1786                }
     1787
     1788                self::add_release( $plugin, [
     1789                    'date'                   => strtotime( $entry['date'] ),
     1790                    'tag'                    => $entry['filename'],
     1791                    'version'                => $tag,
     1792                    'committer'              => [ $entry['author'] ],
     1793                    'zips_built'             => true, // Old release, assume they were built.
     1794                    'confirmations_required' => 0,    // Old release, assume it's released.
     1795                ] );
     1796            }
     1797        }
     1798
     1799        return get_post_meta( $plugin->ID, 'releases', true ) ?: [];
     1800    }
     1801
     1802    /**
    17911803     * Fetch a specific release of the plugin, by tag.
    17921804     *
    1793      * @param string $plugin Plugin slug.
    1794      * @param string $tag    Release tag.
     1805     * @param string $plugin  Plugin slug.
     1806     * @param string $version Plugin version / Release tag.
    17951807     * @return array|bool
    17961808     */
    1797     public static function get_release( $plugin, $tag ) {
     1809    public static function get_release( $plugin, $version ) {
    17981810        $releases = self::get_releases( $plugin );
    17991811
     1812        // Look for the version released as a tag.
    18001813        $filtered = wp_list_filter( $releases, compact( 'tag' ) );
    1801 
     1814        if ( $filtered ) {
     1815            return array_shift( $filtered );
     1816        }
     1817
     1818        // Look for the tag as a trunk version.
     1819        $filtered = wp_list_filter( $releases, [ 'tag' => "trunk@{$tag}", 'version' => $tag ] );
    18021820        if ( $filtered ) {
    18031821            return array_shift( $filtered );
     
    18361854        // Fill the $release with the newish data. This could/should use wp_parse_args()?
    18371855        foreach ( $data as $k => $v ) {
    1838             $release[ $k ] = $v;
     1856            if ( is_array( $release[ $k ] ) ) {
     1857                $release[ $k ] = array_unique( array_merge( $release[ $k ], $v ) );
     1858            } else {
     1859                $release[ $k ] = $v;
     1860            }
    18391861        }
    18401862
Note: See TracChangeset for help on using the changeset viewer.