commit 5216d8f8f9fc0e1abe0c4b9116bbfa4b058cd516 Author: Anthony Correa Date: Sun Dec 24 09:07:27 2023 -0600 initial commit diff --git a/.distignore b/.distignore new file mode 100644 index 0000000..af58f8c --- /dev/null +++ b/.distignore @@ -0,0 +1,43 @@ +# A set of files you probably don't want in your WordPress.org distribution +.babelrc +.deployignore +.distignore +.editorconfig +.eslintignore +.eslintrc +.git +.gitignore +.github +.gitlab-ci.yml +.travis.yml +.DS_Store +.*~ +Thumbs.db +behat.yml +bitbucket-pipelines.yml +bin +.circleci/config.yml +composer.json +composer.lock +dependencies.yml +Gruntfile.js +package.json +package-lock.json +phpunit.xml +phpunit.xml.dist +multisite.xml +multisite.xml.dist +.phpcs.xml +phpcs.xml +.phpcs.xml.dist +phpcs.xml.dist +README.md +webpack.config.js +wp-cli.local.yml +yarn.lock +tests +vendor +node_modules +*.sql +*.tar.gz +*.zip diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..79207a4 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,22 @@ +# This file is for unifying the coding style for different editors and IDEs +# editorconfig.org + +# WordPress Coding Standards +# https://make.wordpress.org/core/handbook/coding-standards/ + +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = tab +indent_size = 4 + +[{.jshintrc,*.json,*.yml}] +indent_style = space +indent_size = 2 + +[{*.txt,wp-config-sample.php}] +end_of_line = crlf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6f68bc7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.DS_Store +phpcs.xml +phpunit.xml +Thumbs.db +wp-cli.local.yml +node_modules/ +*.sql +*.tar.gz +*.zip diff --git a/.phpcs.xml.dist b/.phpcs.xml.dist new file mode 100644 index 0000000..df58068 --- /dev/null +++ b/.phpcs.xml.dist @@ -0,0 +1,47 @@ + + + Generally-applicable sniffs for WordPress plugins. + + + . + /vendor/ + /node_modules/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..811b871 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,71 @@ +sudo: false +dist: trusty + +language: php + +notifications: + email: + on_success: never + on_failure: change + +branches: + only: + - master + +cache: + directories: + - $HOME/.composer/cache + +matrix: + include: + - php: 7.4 + env: WP_VERSION=latest + - php: 7.3 + env: WP_VERSION=latest + - php: 7.2 + env: WP_VERSION=latest + - php: 7.1 + env: WP_VERSION=latest + - php: 7.0 + env: WP_VERSION=latest + - php: 5.6 + env: WP_VERSION=4.5 + - php: 5.6 + env: WP_VERSION=latest + - php: 5.6 + env: WP_VERSION=trunk + - php: 5.6 + env: WP_TRAVISCI=phpcs + +before_script: + - export PATH="$HOME/.composer/vendor/bin:$PATH" + - | + if [ -f ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/xdebug.ini ]; then + phpenv config-rm xdebug.ini + else + echo "xdebug.ini does not exist" + fi + - | + if [[ ! -z "$WP_VERSION" ]] ; then + bash bin/install-wp-tests.sh wordpress_test root '' localhost $WP_VERSION + composer global require "phpunit/phpunit=4.8.*|5.7.*" + fi + - | + if [[ "$WP_TRAVISCI" == "phpcs" ]] ; then + composer global require wp-coding-standards/wpcs + composer global require phpcompatibility/php-compatibility + composer global require phpcompatibility/phpcompatibility-paragonie + composer global require phpcompatibility/phpcompatibility-wp + phpcs --config-set installed_paths $HOME/.composer/vendor/wp-coding-standards/wpcs,$HOME/.composer/vendor/phpcompatibility/php-compatibility,$HOME/.composer/vendor/phpcompatibility/phpcompatibility-paragonie,$HOME/.composer/vendor/phpcompatibility/phpcompatibility-wp + fi + +script: + - | + if [[ ! -z "$WP_VERSION" ]] ; then + phpunit + WP_MULTISITE=1 phpunit + fi + - | + if [[ "$WP_TRAVISCI" == "phpcs" ]] ; then + phpcs + fi diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000..de0b469 --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,56 @@ +module.exports = function( grunt ) { + + 'use strict'; + + // Project configuration + grunt.initConfig( { + + pkg: grunt.file.readJSON( 'package.json' ), + + addtextdomain: { + options: { + textdomain: 'tonys-sportspress-enhancements', + }, + update_all_domains: { + options: { + updateDomains: true + }, + src: [ '*.php', '**/*.php', '!\.git/**/*', '!bin/**/*', '!node_modules/**/*', '!tests/**/*' ] + } + }, + + wp_readme_to_markdown: { + your_target: { + files: { + 'README.md': 'readme.txt' + } + }, + }, + + makepot: { + target: { + options: { + domainPath: '/languages', + exclude: [ '\.git/*', 'bin/*', 'node_modules/*', 'tests/*' ], + mainFile: 'tonys-sportspress-enhancements.php', + potFilename: 'tonys-sportspress-enhancements.pot', + potHeaders: { + poedit: true, + 'x-poedit-keywordslist': true + }, + type: 'wp-plugin', + updateTimestamp: true + } + } + }, + } ); + + grunt.loadNpmTasks( 'grunt-wp-i18n' ); + grunt.loadNpmTasks( 'grunt-wp-readme-to-markdown' ); + grunt.registerTask( 'default', [ 'i18n','readme' ] ); + grunt.registerTask( 'i18n', ['addtextdomain', 'makepot'] ); + grunt.registerTask( 'readme', ['wp_readme_to_markdown'] ); + + grunt.util.linefeed = '\n'; + +}; diff --git a/bin/install-wp-tests.sh b/bin/install-wp-tests.sh new file mode 100755 index 0000000..c6f53dc --- /dev/null +++ b/bin/install-wp-tests.sh @@ -0,0 +1,181 @@ +#!/usr/bin/env bash + +if [ $# -lt 3 ]; then + echo "usage: $0 [db-host] [wp-version] [skip-database-creation]" + exit 1 +fi + +DB_NAME=$1 +DB_USER=$2 +DB_PASS=$3 +DB_HOST=${4-localhost} +WP_VERSION=${5-latest} +SKIP_DB_CREATE=${6-false} + +TMPDIR=${TMPDIR-/tmp} +TMPDIR=$(echo $TMPDIR | sed -e "s/\/$//") +WP_TESTS_DIR=${WP_TESTS_DIR-$TMPDIR/wordpress-tests-lib} +WP_CORE_DIR=${WP_CORE_DIR-$TMPDIR/wordpress} + +download() { + if [ `which curl` ]; then + curl -s "$1" > "$2"; + elif [ `which wget` ]; then + wget -nv -O "$2" "$1" + fi +} + +if [[ $WP_VERSION =~ ^[0-9]+\.[0-9]+\-(beta|RC)[0-9]+$ ]]; then + WP_BRANCH=${WP_VERSION%\-*} + WP_TESTS_TAG="branches/$WP_BRANCH" + +elif [[ $WP_VERSION =~ ^[0-9]+\.[0-9]+$ ]]; then + WP_TESTS_TAG="branches/$WP_VERSION" +elif [[ $WP_VERSION =~ [0-9]+\.[0-9]+\.[0-9]+ ]]; then + if [[ $WP_VERSION =~ [0-9]+\.[0-9]+\.[0] ]]; then + # version x.x.0 means the first release of the major version, so strip off the .0 and download version x.x + WP_TESTS_TAG="tags/${WP_VERSION%??}" + else + WP_TESTS_TAG="tags/$WP_VERSION" + fi +elif [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then + WP_TESTS_TAG="trunk" +else + # http serves a single offer, whereas https serves multiple. we only want one + download http://api.wordpress.org/core/version-check/1.7/ /tmp/wp-latest.json + grep '[0-9]+\.[0-9]+(\.[0-9]+)?' /tmp/wp-latest.json + LATEST_VERSION=$(grep -o '"version":"[^"]*' /tmp/wp-latest.json | sed 's/"version":"//') + if [[ -z "$LATEST_VERSION" ]]; then + echo "Latest WordPress version could not be found" + exit 1 + fi + WP_TESTS_TAG="tags/$LATEST_VERSION" +fi +set -ex + +install_wp() { + + if [ -d $WP_CORE_DIR ]; then + return; + fi + + mkdir -p $WP_CORE_DIR + + if [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then + mkdir -p $TMPDIR/wordpress-trunk + rm -rf $TMPDIR/wordpress-trunk/* + svn export --quiet https://core.svn.wordpress.org/trunk $TMPDIR/wordpress-trunk/wordpress + mv $TMPDIR/wordpress-trunk/wordpress/* $WP_CORE_DIR + else + if [ $WP_VERSION == 'latest' ]; then + local ARCHIVE_NAME='latest' + elif [[ $WP_VERSION =~ [0-9]+\.[0-9]+ ]]; then + # https serves multiple offers, whereas http serves single. + download https://api.wordpress.org/core/version-check/1.7/ $TMPDIR/wp-latest.json + if [[ $WP_VERSION =~ [0-9]+\.[0-9]+\.[0] ]]; then + # version x.x.0 means the first release of the major version, so strip off the .0 and download version x.x + LATEST_VERSION=${WP_VERSION%??} + else + # otherwise, scan the releases and get the most up to date minor version of the major release + local VERSION_ESCAPED=`echo $WP_VERSION | sed 's/\./\\\\./g'` + LATEST_VERSION=$(grep -o '"version":"'$VERSION_ESCAPED'[^"]*' $TMPDIR/wp-latest.json | sed 's/"version":"//' | head -1) + fi + if [[ -z "$LATEST_VERSION" ]]; then + local ARCHIVE_NAME="wordpress-$WP_VERSION" + else + local ARCHIVE_NAME="wordpress-$LATEST_VERSION" + fi + else + local ARCHIVE_NAME="wordpress-$WP_VERSION" + fi + download https://wordpress.org/${ARCHIVE_NAME}.tar.gz $TMPDIR/wordpress.tar.gz + tar --strip-components=1 -zxmf $TMPDIR/wordpress.tar.gz -C $WP_CORE_DIR + fi + + download https://raw.githubusercontent.com/markoheijnen/wp-mysqli/master/db.php $WP_CORE_DIR/wp-content/db.php +} + +install_test_suite() { + # portable in-place argument for both GNU sed and Mac OSX sed + if [[ $(uname -s) == 'Darwin' ]]; then + local ioption='-i.bak' + else + local ioption='-i' + fi + + # set up testing suite if it doesn't yet exist + if [ ! -d $WP_TESTS_DIR ]; then + # set up testing suite + mkdir -p $WP_TESTS_DIR + rm -rf $WP_TESTS_DIR/{includes,data} + svn export --quiet --ignore-externals https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/includes/ $WP_TESTS_DIR/includes + svn export --quiet --ignore-externals https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/data/ $WP_TESTS_DIR/data + fi + + if [ ! -f wp-tests-config.php ]; then + download https://develop.svn.wordpress.org/${WP_TESTS_TAG}/wp-tests-config-sample.php "$WP_TESTS_DIR"/wp-tests-config.php + # remove all forward slashes in the end + WP_CORE_DIR=$(echo $WP_CORE_DIR | sed "s:/\+$::") + sed $ioption "s:dirname( __FILE__ ) . '/src/':'$WP_CORE_DIR/':" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s:__DIR__ . '/src/':'$WP_CORE_DIR/':" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s/youremptytestdbnamehere/$DB_NAME/" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s/yourusernamehere/$DB_USER/" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s/yourpasswordhere/$DB_PASS/" "$WP_TESTS_DIR"/wp-tests-config.php + sed $ioption "s|localhost|${DB_HOST}|" "$WP_TESTS_DIR"/wp-tests-config.php + fi + +} + +recreate_db() { + shopt -s nocasematch + if [[ $1 =~ ^(y|yes)$ ]] + then + mysqladmin drop $DB_NAME -f --user="$DB_USER" --password="$DB_PASS"$EXTRA + create_db + echo "Recreated the database ($DB_NAME)." + else + echo "Leaving the existing database ($DB_NAME) in place." + fi + shopt -u nocasematch +} + +create_db() { + mysqladmin create $DB_NAME --user="$DB_USER" --password="$DB_PASS"$EXTRA +} + +install_db() { + + if [ ${SKIP_DB_CREATE} = "true" ]; then + return 0 + fi + + # parse DB_HOST for port or socket references + local PARTS=(${DB_HOST//\:/ }) + local DB_HOSTNAME=${PARTS[0]}; + local DB_SOCK_OR_PORT=${PARTS[1]}; + local EXTRA="" + + if ! [ -z $DB_HOSTNAME ] ; then + if [ $(echo $DB_SOCK_OR_PORT | grep -e '^[0-9]\{1,\}$') ]; then + EXTRA=" --host=$DB_HOSTNAME --port=$DB_SOCK_OR_PORT --protocol=tcp" + elif ! [ -z $DB_SOCK_OR_PORT ] ; then + EXTRA=" --socket=$DB_SOCK_OR_PORT" + elif ! [ -z $DB_HOSTNAME ] ; then + EXTRA=" --host=$DB_HOSTNAME --protocol=tcp" + fi + fi + + # create database + if [ $(mysql --user="$DB_USER" --password="$DB_PASS"$EXTRA --execute='show databases;' | grep ^$DB_NAME$) ] + then + echo "Reinstalling will delete the existing test database ($DB_NAME)" + read -p 'Are you sure you want to proceed? [y/N]: ' DELETE_EXISTING_DB + recreate_db $DELETE_EXISTING_DB + else + create_db + fi +} + +install_wp +install_test_suite +install_db diff --git a/includes/month_stropdown.php b/includes/month_stropdown.php new file mode 100644 index 0000000..e69de29 diff --git a/includes/sp-event-has-outcome-filter.php b/includes/sp-event-has-outcome-filter.php new file mode 100644 index 0000000..0dd1559 --- /dev/null +++ b/includes/sp-event-has-outcome-filter.php @@ -0,0 +1,101 @@ + "AND", + [ + "key" => "sp_results", + "value" => '"outcome"', + "compare" => "LIKE", + ], + [ + "key" => "sp_results", + "value" => 's:7:"outcome";a:0:{}', // i.e. a blank outcome + "compare" => "NOT LIKE", + ], + ]; + } elseif (!$has_outcome) { + return [ + "relation" => "OR", + [ + "key" => "sp_results", + "value" => '"outcome"', + "compare" => "NOT LIKE", + ], + [ + "key" => "sp_results", + "value" => 's:7:"outcome";a:0:{}', // i.e. a blank outcome + "compare" => "LIKE", + ], + ]; + } +} + +// Add the custom filter dropdown +function outcome_filter_dropdown() +{ + $current_screen = get_current_screen(); + + if ($current_screen->id == "edit-sp_event") { + if (isset($_GET["has-outcome"])) { + switch ($_GET["has-outcome"]) { + case 'true': + $selected="has-outcome";break; + case 'false': + $selected="has-no-outcome";break; + case '': + $selected='';break; + } + }; ?> + + set("meta_query", $meta_query); + } + elseif ($_GET["has-outcome"] == "true") { + $meta_query = get_sp_event_has_outcome_meta_query_args(true); + $query->set("meta_query", $meta_query); + } + } +} + +add_action("pre_get_posts", "outcome_filter_query"); \ No newline at end of file diff --git a/includes/sp-event-has-outcome.php b/includes/sp-event-has-outcome.php new file mode 100644 index 0000000..06aefac --- /dev/null +++ b/includes/sp-event-has-outcome.php @@ -0,0 +1,105 @@ + "AND", + [ + "key" => "sp_results", + "value" => '"outcome"', + "compare" => "LIKE", + ], + [ + "key" => "sp_results", + "value" => 's:7:"outcome";a:0:{}', // i.e. a blank outcome + "compare" => "NOT LIKE", + ], + ]; + } elseif (!$has_outcome) { + return [ + "relation" => "OR", + [ + "key" => "sp_results", + "value" => '"outcome"', + "compare" => "NOT LIKE", + ], + [ + "key" => "sp_results", + "value" => 's:7:"outcome";a:0:{}', // i.e. a blank outcome + "compare" => "LIKE", + ], + ]; + } +} + +add_filter("views_edit-sp_event", "wp37_sp_event_does_not_have_outcome_filter"); +function wp37_sp_event_does_not_have_outcome_filter($views) + +{ + if (is_admin() && $_GET["post_type"] == "sp_event") { + global $wp_query; + $filter_name = "Missing Results"; + + $result = new WP_Query([ + "post_type" => "sp_event", + "meta_query" => [get_sp_event_has_outcome_meta_query_args(false)], + ]); + + // $link = add_query_arg("sp_event_has_outcome", "false"); + $link="#"; + // $link = admin_url( "edit.php?post_type=sp_event&sp_event_has_outcome=false" ); + + $sp_event_has_outcome = + get_query_var("sp_event_has_outcome") === "false"; + $class = $sp_event_has_outcome === true ? ' class="current"' : ""; + $views["sp_event_does_not_have_outcome"] = sprintf( + '" . $filter_name . " (%d)", + $link, + $result->found_posts + ); + + return $views; + } +} + +add_action("init", "wpse246143_register_sp_event_has_outcome"); +function wpse246143_register_sp_event_has_outcome() +{ + global $wp; + $wp->add_query_var("sp_event_has_outcome"); +} + +add_action("parse_query", "wpse246143_map_sp_event_has_outcome"); +function wpse246143_map_sp_event_has_outcome($wp_query) +{ + if ( + isset($wp_query->query["post_type"]) and + $wp_query->query["post_type"] == "sp_event" and + $wp_query->get("sp_event_has_outcome") + ) { + $sp_event_has_outcome = + get_query_var("sp_event_has_outcome") === "true"; + + if ($sp_event_has_outcome) { + $meta_query = get_sp_event_has_outcome_meta_query_args(true); + } elseif (!$sp_event_has_outcome) { + $meta_query = get_sp_event_has_outcome_meta_query_args(false); + } + + $wp_query->set("meta_query", $meta_query); + } +} + diff --git a/includes/sp-event-status-filter.php b/includes/sp-event-status-filter.php new file mode 100644 index 0000000..f4768bf --- /dev/null +++ b/includes/sp-event-status-filter.php @@ -0,0 +1,58 @@ +id == "edit-sp_event") { + $selected = isset($_GET["sp_status"]) ? $_GET["sp_status"] : ""; ?> + + set("meta_query", [[ + "key" => "sp_status", + "value" => $_GET["sp_status"], + "compare" => "=", + ]] + ); + } +} + +add_action("pre_get_posts", "sp_status_filter_query"); \ No newline at end of file diff --git a/includes/timeframe-filter.php b/includes/timeframe-filter.php new file mode 100644 index 0000000..e9fedd2 --- /dev/null +++ b/includes/timeframe-filter.php @@ -0,0 +1,70 @@ +id == "edit-sp_event") { + $selected = isset($_GET["timeframe"]) ? $_GET["timeframe"] : ""; ?> + + date("Y-m-d", strtotime("-3 days")), + ], + ]; + } elseif ($_GET["timeframe"] == "last7days") { + $date_query = [ + [ + "after" => date("Y-m-d", strtotime("-1 week")), + ], + ]; + } elseif ($_GET["timeframe"] == "plusminus3days") { + $date_query = [ + [ + "after" => date("Y-m-d", strtotime("-3 days")), + "before" => date("Y-m-d", strtotime("+3 days")), + ], + ]; + } + + if (!$_GET["timeframe"] == "") { + $query->set("date_query", $date_query); + } + } +} + +add_action("pre_get_posts", "timeframe_filter_query"); \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..428196f --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ + +{ + "name": "tonys-sportspress-enhancements", + "version": "0.1.0", + "main": "Gruntfile.js", + "author": "YOUR NAME HERE", + "scripts" : { + "start" : "grunt default" , + "readme" : "grunt readme", + "i18n" : "grunt i18n" + }, + "devDependencies": { + "grunt": "~0.4.5", + "grunt-wp-i18n": "~0.5.0", + "grunt-wp-readme-to-markdown": "~1.0.0" + } +} diff --git a/phpunit.xml.dist b/phpunit.xml.dist new file mode 100644 index 0000000..50421ec --- /dev/null +++ b/phpunit.xml.dist @@ -0,0 +1,16 @@ + + + + + ./tests/ + ./tests/test-sample.php + + + diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..07c8ffd --- /dev/null +++ b/readme.txt @@ -0,0 +1,115 @@ +=== Tonys Sportspress Enhancements === +Contributors: (this should be a list of wordpress.org userid's) +Donate link: https://example.com/ +Tags: comments, spam +Requires at least: 4.5 +Tested up to: 6.4.2 +Requires PHP: 5.6 +Stable tag: 0.1.0 +License: GPLv2 or later +License URI: https://www.gnu.org/licenses/gpl-2.0.html + +Here is a short description of the plugin. This should be no more than 150 characters. No markup here. + +== Description == + +This is the long description. No limit, and you can use Markdown (as well as in the following sections). + +For backwards compatibility, if this section is missing, the full length of the short description will be used, and +Markdown parsed. + +A few notes about the sections above: + +* "Contributors" is a comma separated list of wp.org/wp-plugins.org usernames +* "Tags" is a comma separated list of tags that apply to the plugin +* "Requires at least" is the lowest version that the plugin will work on +* "Tested up to" is the highest version that you've *successfully used to test the plugin*. Note that it might work on +higher versions... this is just the highest one you've verified. +* Stable tag should indicate the Subversion "tag" of the latest stable version, or "trunk," if you use `/trunk/` for +stable. + + Note that the `readme.txt` of the stable tag is the one that is considered the defining one for the plugin, so +if the `/trunk/readme.txt` file says that the stable tag is `4.3`, then it is `/tags/4.3/readme.txt` that'll be used +for displaying information about the plugin. In this situation, the only thing considered from the trunk `readme.txt` +is the stable tag pointer. Thus, if you develop in trunk, you can update the trunk `readme.txt` to reflect changes in +your in-development version, without having that information incorrectly disclosed about the current stable version +that lacks those changes -- as long as the trunk's `readme.txt` points to the correct stable tag. + + If no stable tag is provided, it is assumed that trunk is stable, but you should specify "trunk" if that's where +you put the stable version, in order to eliminate any doubt. + +== Installation == + +This section describes how to install the plugin and get it working. + +e.g. + +1. Upload `plugin-name.php` to the `/wp-content/plugins/` directory +1. Activate the plugin through the 'Plugins' menu in WordPress +1. Place `` in your templates + +== Frequently Asked Questions == + += A question that someone might have = + +An answer to that question. + += What about foo bar? = + +Answer to foo bar dilemma. + +== Screenshots == + +1. This screen shot description corresponds to screenshot-1.(png|jpg|jpeg|gif). Note that the screenshot is taken from +the /assets directory or the directory that contains the stable readme.txt (tags or trunk). Screenshots in the /assets +directory take precedence. For example, `/assets/screenshot-1.png` would win over `/tags/4.3/screenshot-1.png` +(or jpg, jpeg, gif). +2. This is the second screen shot + +== Changelog == + += 1.0 = +* A change since the previous version. +* Another change. + += 0.5 = +* List versions from most recent at top to oldest at bottom. + +== Upgrade Notice == + += 1.0 = +Upgrade notices describe the reason a user should upgrade. No more than 300 characters. + += 0.5 = +This version fixes a security related bug. Upgrade immediately. + +== Arbitrary section == + +You may provide arbitrary sections, in the same format as the ones above. This may be of use for extremely complicated +plugins where more information needs to be conveyed that doesn't fit into the categories of "description" or +"installation." Arbitrary sections will be shown below the built-in sections outlined above. + +== A brief Markdown Example == + +Ordered list: + +1. Some feature +1. Another feature +1. Something else about the plugin + +Unordered list: + +* something +* something else +* third thing + +Here's a link to [WordPress](https://wordpress.org/ "Your favorite software") and one to [Markdown's Syntax Documentation][markdown syntax]. +Titles are optional, naturally. + +[markdown syntax]: https://daringfireball.net/projects/markdown/syntax + "Markdown is what the parser uses to process much of the readme file" + +Markdown uses email style notation for blockquotes and I've been told: +> Asterisks for *emphasis*. Double it up for **strong**. + +`` diff --git a/tests/bootstrap.php b/tests/bootstrap.php new file mode 100644 index 0000000..be0a28d --- /dev/null +++ b/tests/bootstrap.php @@ -0,0 +1,38 @@ +assertTrue( true ); + } +} diff --git a/tonys-sportspress-enhancements.php b/tonys-sportspress-enhancements.php new file mode 100644 index 0000000..b6b5163 --- /dev/null +++ b/tonys-sportspress-enhancements.php @@ -0,0 +1,20 @@ +