From b3b60d4f6297cca92d6ad734d083c04455d011c5 Mon Sep 17 00:00:00 2001 From: Ben Marshall Date: Sat, 9 Dec 2023 11:26:04 -0600 Subject: [PATCH] build(intial): initial build --- .github/workflows/wpcs.yml | 18 +++++ .gitignore | 1 + commitlint.config.js | 1 + includes/core.php | 117 ++++++++++++++++++++++++++++++++ includes/database.php | 49 ++++++++++++++ package-lock.json | 135 ++++++++++++++++++++++++++++++++++++- package.json | 40 +++++------ wp-plugin-scaffold.php | 3 + 8 files changed, 344 insertions(+), 20 deletions(-) create mode 100644 .github/workflows/wpcs.yml create mode 100644 commitlint.config.js create mode 100644 includes/database.php diff --git a/.github/workflows/wpcs.yml b/.github/workflows/wpcs.yml new file mode 100644 index 0000000..56f8945 --- /dev/null +++ b/.github/workflows/wpcs.yml @@ -0,0 +1,18 @@ +name: WPCS check + +on: pull_request + +jobs: + phpcs: + name: WPCS + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: WPCS check + uses: 10up/wpcs-action@stable + - name: Update summary + run: | + npm i -g github:10up/phpcs-json-to-md + phpcs-json-to-md --path ./phpcs.json --output ./phpcs.md + cat phpcs.md >> $GITHUB_STEP_SUMMARY + if: always() diff --git a/.gitignore b/.gitignore index fd4f2b0..8a69eba 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules .DS_Store +.husky diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 0000000..422b194 --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1 @@ +module.exports = { extends: ['@commitlint/config-conventional'] }; diff --git a/includes/core.php b/includes/core.php index 2cb2ebe..8a1d17d 100644 --- a/includes/core.php +++ b/includes/core.php @@ -25,6 +25,8 @@ function setup() { add_action( 'admin_enqueue_scripts', $n( 'admin_scripts' ) ); add_action( 'enqueue_block_editor_assets', $n( 'core_block_overrides' ) ); add_action( 'wp_enqueue_scripts', $n( 'styles' ) ); + add_action( 'admin_menu', $n( 'add_options_page' ) ); + add_action( 'admin_init', $n( 'register_settings' ) ); add_filter( 'script_loader_tag', $n( 'script_loader_tag' ), 10, 2 ); } @@ -153,3 +155,118 @@ function script_loader_tag( $tag, $handle ) { return $tag; } + +function add_options_page() { + add_submenu_page( + 'options-general.php', + __( 'WordPress Plugin Scaffold Settings', 'wp-plugin-scaffold' ), + __( 'WP Plugin Scaffold', 'wp-plugin-scaffold' ), + 'manage_options', + 'wp-plugin-scaffold', + __NAMESPACE__ . '\options_page' + ); +} + +function options_page() { + $options = get_option( 'wp_plugin_scaffold' ); + ?> +
+

+
+ +
+
+ [ + 'title' => __( 'General Settings', 'wp-plugin-scaffold' ), + 'settings' => [ + [ + 'title' => __( 'Open Name', 'wp-plugin-scaffold' ), + 'field' => [ + 'key' => 'option', + 'type' => 'text', + 'classes' => 'regular-text ltr', + 'placeholder' => __( 'Option placeholder', 'wp-plugin-scaffold' ), + ], + ], + ], + ], + ]; + + register_setting( 'wp-plugin-scaffold', 'wp_plugin_scaffold' ); + + foreach ( $plugin_settings as $section_key => $section ) { + add_settings_section( + 'wp_plugin_scaffold_' . $section_key, + $section['title'], + __NAMESPACE__ . '\settings_section', + 'wp-plugin-scaffold' + ); + + if ( ! empty ( $section['settings'] ) ) { + foreach ( $section['settings'] as $key => $setting ) { + add_settings_field( + $setting['field']['key'], + $setting['title'], + __NAMESPACE__ . '\settings_field', + 'wp-plugin-scaffold', + 'wp_plugin_scaffold_' . $section_key, + $setting['field'] + ); + } + } + } +} + +function settings_section() { + ?> + + + value="" + + + class="" + + + placeholder="" + + + min="" + + + max="" + + + step="" + + /> + prefix . 'wp_plugin_scaffold'; + + $sql = "CREATE TABLE $table_name ( + + );"; + + require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); + dbDelta( $sql ); +} diff --git a/package-lock.json b/package-lock.json index 26fa404..72d10fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,9 @@ "modern-normalize": "^2.0.0" }, "devDependencies": { - "10up-toolkit": "^5.2.2" + "@commitlint/config-conventional": "^18.4.3", + "10up-toolkit": "^5.2.2", + "husky": "^8.0.3" }, "engines": { "node": ">=12.0.0" @@ -1989,6 +1991,18 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@commitlint/config-conventional": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-18.4.3.tgz", + "integrity": "sha512-729eRRaNta7JZF07qf6SAGSghoDEp9mH7yHU0m7ff0q89W97wDrWCyZ3yoV3mcQJwbhlmVmZPTkPcm7qiAu8WA==", + "dev": true, + "dependencies": { + "conventional-changelog-conventionalcommits": "^7.0.2" + }, + "engines": { + "node": ">=v18" + } + }, "node_modules/@csstools/postcss-cascade-layers": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", @@ -5031,6 +5045,12 @@ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, "node_modules/array-includes": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", @@ -6139,6 +6159,16 @@ "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", "dev": true }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -6239,6 +6269,18 @@ "node": ">= 0.6" } }, + "node_modules/conventional-changelog-conventionalcommits": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", + "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -7238,6 +7280,18 @@ "tslib": "^2.0.3" } }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -9454,6 +9508,21 @@ "node": ">=10.17.0" } }, + "node_modules/husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -10028,6 +10097,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -20150,6 +20228,15 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@commitlint/config-conventional": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-18.4.3.tgz", + "integrity": "sha512-729eRRaNta7JZF07qf6SAGSghoDEp9mH7yHU0m7ff0q89W97wDrWCyZ3yoV3mcQJwbhlmVmZPTkPcm7qiAu8WA==", + "dev": true, + "requires": { + "conventional-changelog-conventionalcommits": "^7.0.2" + } + }, "@csstools/postcss-cascade-layers": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", @@ -22346,6 +22433,12 @@ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, "array-includes": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", @@ -23163,6 +23256,16 @@ "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", "dev": true }, + "compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, "compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -23250,6 +23353,15 @@ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true }, + "conventional-changelog-conventionalcommits": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", + "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", + "dev": true, + "requires": { + "compare-func": "^2.0.0" + } + }, "convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -23969,6 +24081,15 @@ "tslib": "^2.0.3" } }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -25632,6 +25753,12 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, + "husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "dev": true + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -26014,6 +26141,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, "is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", diff --git a/package.json b/package.json index 88e2b1e..6a98ecf 100644 --- a/package.json +++ b/package.json @@ -2,32 +2,34 @@ "name": "wp-plugin-scaffold", "version": "0.1.0", "scripts": { - "start": "npm run watch", - "watch": "10up-toolkit watch --port=5000", - "build": "10up-toolkit build", - "format-js": "10up-toolkit format-js", - "lint-js": "10up-toolkit lint-js", - "lint-style": "10up-toolkit lint-style", - "test": "10up-toolkit test-unit-jest", - "clean-dist": "rm -rf ./dist", - "scaffold:block": "cd includes/blocks/ && wp-create-block --no-plugin --template ../../../../bin/create-block-template" + "start": "npm run watch", + "watch": "10up-toolkit watch --port=5000", + "build": "10up-toolkit build", + "format-js": "10up-toolkit format-js", + "lint-js": "10up-toolkit lint-js", + "lint-style": "10up-toolkit lint-style", + "test": "10up-toolkit test-unit-jest", + "clean-dist": "rm -rf ./dist", + "scaffold:block": "cd includes/blocks/ && wp-create-block --no-plugin --template ../../../../bin/create-block-template" }, "engines": { - "node": ">=12.0.0" + "node": ">=12.0.0" }, "devDependencies": { - "10up-toolkit": "^5.2.2" + "@commitlint/config-conventional": "^18.4.3", + "10up-toolkit": "^5.2.2", + "husky": "^8.0.3" }, "dependencies": { - "modern-normalize": "^2.0.0" + "modern-normalize": "^2.0.0" }, "10up-toolkit": { - "useBlockAssets": true, - "entry": { - "admin": "./assets/js/admin/admin.js", - "editor-style-overrides": "./assets/js/admin/editor-style-overrides.js", - "frontend": "./assets/js/frontend/frontend.js", - "core-block-overrides": "./includes/core-block-overrides.js" - } + "useBlockAssets": true, + "entry": { + "admin": "./assets/js/admin/admin.js", + "editor-style-overrides": "./assets/js/admin/editor-style-overrides.js", + "frontend": "./assets/js/frontend/frontend.js", + "core-block-overrides": "./includes/core-block-overrides.js" + } } } diff --git a/wp-plugin-scaffold.php b/wp-plugin-scaffold.php index edb1cba..dbbb13b 100644 --- a/wp-plugin-scaffold.php +++ b/wp-plugin-scaffold.php @@ -21,6 +21,7 @@ * WPPluginScaffold - Namespace & package * wp_plugin_scaffold - Function prefix * https://project-website.tld - Project domain + * WP Plugin Scaffold - Shortname * * @package WPPluginScaffold */ @@ -41,7 +42,9 @@ require_once WP_PLUGIN_SCAFFOLD_PLUGIN_INC . 'utility.php'; require_once WP_PLUGIN_SCAFFOLD_PLUGIN_INC . 'blocks.php'; require_once WP_PLUGIN_SCAFFOLD_PLUGIN_INC . 'helpers.php'; +require_once WP_PLUGIN_SCAFFOLD_PLUGIN_INC . 'database.php'; // Run the setup functions. WPPluginScaffold\Core\setup(); +//WPPluginScaffold\Database\setup(); //WPPluginScaffold\Blocks\setup();