From bf07381fc90eaa4bb3b13a5ba006ec111ed49aed Mon Sep 17 00:00:00 2001 From: Steve Boyd Date: Mon, 1 Aug 2022 15:48:26 +1200 Subject: [PATCH] MNT Standardise modules --- .github/workflows/ci.yml | 16 +++++ .github/workflows/keepalive.yml | 17 ++++++ .scrutinizer.yml | 69 ---------------------- .travis.yml | 30 ---------- README.md | 6 +- _configure_database.php | 15 +++-- _register_database.php | 66 ++++++++++----------- code/SQLite3Connector.php | 10 +++- code/SQLite3Database.php | 14 +++-- code/SQLite3SchemaManager.php | 6 +- code/SQLiteDatabaseConfigurationHelper.php | 6 +- composer.json | 56 ++++++++---------- phpcs.xml.dist | 12 ++++ 13 files changed, 141 insertions(+), 182 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/keepalive.yml delete mode 100644 .scrutinizer.yml delete mode 100644 .travis.yml create mode 100644 phpcs.xml.dist diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..a148387 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,16 @@ +name: CI + +on: + push: + pull_request: + workflow_dispatch: + # Every Sunday at 3:00pm UTC + schedule: + - cron: '0 15 * * 0' + +jobs: + ci: + name: CI + # Only run cron on the silverstripe account + if: (github.event_name == 'schedule' && github.repository_owner == 'silverstripe') || (github.event_name != 'schedule') + uses: silverstripe/gha-ci/.github/workflows/ci.yml@v1 diff --git a/.github/workflows/keepalive.yml b/.github/workflows/keepalive.yml new file mode 100644 index 0000000..c48f07e --- /dev/null +++ b/.github/workflows/keepalive.yml @@ -0,0 +1,17 @@ +name: Keepalive + +on: + workflow_dispatch: + # The 15th of every month at 3:50pm UTC + schedule: + - cron: '50 15 15 * *' + +jobs: + keepalive: + name: Keepalive + # Only run cron on the silverstripe account + if: (github.event_name == 'schedule' && github.repository_owner == 'silverstripe') || (github.event_name != 'schedule') + runs-on: ubuntu-latest + steps: + - name: Keepalive + uses: silverstripe/gha-keepalive@v1 diff --git a/.scrutinizer.yml b/.scrutinizer.yml deleted file mode 100644 index d1ebd80..0000000 --- a/.scrutinizer.yml +++ /dev/null @@ -1,69 +0,0 @@ -inherit: true - -checks: - php: - verify_property_names: true - verify_argument_usable_as_reference: true - verify_access_scope_valid: true - useless_calls: true - use_statement_alias_conflict: true - variable_existence: true - unused_variables: true - unused_properties: true - unused_parameters: true - unused_methods: true - unreachable_code: true - too_many_arguments: true - sql_injection_vulnerabilities: true - simplify_boolean_return: true - side_effects_or_types: true - security_vulnerabilities: true - return_doc_comments: true - return_doc_comment_if_not_inferrable: true - require_scope_for_properties: true - require_scope_for_methods: true - require_php_tag_first: true - psr2_switch_declaration: true - psr2_class_declaration: true - property_assignments: true - prefer_while_loop_over_for_loop: true - precedence_mistakes: true - precedence_in_conditions: true - phpunit_assertions: true - php5_style_constructor: true - parse_doc_comments: true - parameter_non_unique: true - parameter_doc_comments: true - param_doc_comment_if_not_inferrable: true - optional_parameters_at_the_end: true - one_class_per_file: true - no_unnecessary_if: true - no_trailing_whitespace: true - no_property_on_interface: true - no_non_implemented_abstract_methods: true - no_error_suppression: true - no_duplicate_arguments: true - no_commented_out_code: true - newline_at_end_of_file: true - missing_arguments: true - method_calls_on_non_object: true - instanceof_class_exists: true - foreach_traversable: true - fix_line_ending: true - fix_doc_comments: true - duplication: true - deprecated_code_usage: true - deadlock_detection_in_loops: true - code_rating: true - closure_use_not_conflicting: true - catch_class_exists: true - blank_line_after_namespace_declaration: false - avoid_multiple_statements_on_same_line: true - avoid_duplicate_types: true - avoid_conflicting_incrementers: true - avoid_closing_tag: true - assignment_of_null_return: true - argument_type_checks: true - -filter: - paths: [code/*, tests/*] diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 1d6f607..0000000 --- a/.travis.yml +++ /dev/null @@ -1,30 +0,0 @@ -# See https://github.com/silverstripe-labs/silverstripe-travis-support for setup details - -sudo: false - -language: php - -php: - - 5.5 - - 5.6 - - 7.0 - -env: - - DB=SQLITE CORE_RELEASE=master PDO=1 - -matrix: - include: - - php: 5.6 - env: DB=SQLITE CORE_RELEASE=master PDO=0 - allow_failures: - - php: 7.0 - -before_script: - - composer self-update || true - - git clone git://github.com/silverstripe-labs/silverstripe-travis-support.git ~/travis-support - - php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss - - cd ~/builds/ss - - composer install - -script: - - vendor/bin/phpunit framework/tests diff --git a/README.md b/README.md index c742a43..f628e6f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # SQLite3 Module -[![Build Status](https://travis-ci.org/silverstripe-labs/silverstripe-sqlite3.png?branch=master)](https://travis-ci.org/silverstripe-labs/silverstripe-sqlite3) +[![CI](https://github.com/silverstripe/silverstripe-sqlite3/actions/workflows/ci.yml/badge.svg)](https://github.com/silverstripe/silverstripe-sqlite3/actions/workflows/ci.yml) +[![Silverstripe supported module](https://img.shields.io/badge/silverstripe-supported-0071C4.svg)](https://www.silverstripe.org/software/addons/silverstripe-commercially-supported-module-list/) ## Maintainer Contact @@ -9,7 +10,7 @@ Andreas Piening (Nickname: apiening) ## Requirements - * SilverStripe 4.0 or newer + * Silverstripe 4.0 or newer ## Installation @@ -26,7 +27,6 @@ Either use the installer to automatically install SQLite or add this to your _co Make sure the webserver has sufficient privileges to write to that folder and that it is protected from external access. - ### Sample mysite/_config.php ```php diff --git a/_configure_database.php b/_configure_database.php index a58391b..ea41f4a 100644 --- a/_configure_database.php +++ b/_configure_database.php @@ -2,13 +2,12 @@ // Script called from ConfigureFromEnv.php global $databaseConfig; -if(strpos($databaseConfig['type'], 'SQLite') === 0) { +if (strpos($databaseConfig['type'], 'SQLite') === 0) { + if (defined('SS_SQLITE_DATABASE_PATH')) { + $databaseConfig['path'] = SS_SQLITE_DATABASE_PATH; + } - if(defined('SS_SQLITE_DATABASE_PATH')) { - $databaseConfig['path'] = SS_SQLITE_DATABASE_PATH; - } - - if(defined('SS_SQLITE_DATABASE_KEY')) { - $databaseConfig['key'] = SS_SQLITE_DATABASE_KEY; - } + if (defined('SS_SQLITE_DATABASE_KEY')) { + $databaseConfig['key'] = SS_SQLITE_DATABASE_KEY; + } } diff --git a/_register_database.php b/_register_database.php index 552f933..3918bac 100644 --- a/_register_database.php +++ b/_register_database.php @@ -4,51 +4,51 @@ use SilverStripe\Dev\Install\DatabaseAdapterRegistry; use SilverStripe\SQLite\SQLiteDatabaseConfigurationHelper; $sqliteDatabaseAdapterRegistryFields = array( - 'path' => array( - 'title' => 'Directory path
Absolute path to directory, writeable by the webserver user.
' - . 'Recommended to be outside of your webroot
', - 'default' => dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'assets' . DIRECTORY_SEPARATOR . '.sqlitedb' - ), - 'database' => array( - 'title' => 'Database filename (extension .sqlite)', - 'default' => 'database.sqlite' - ) + 'path' => array( + 'title' => 'Directory path
Absolute path to directory, writeable by the webserver user.
' + . 'Recommended to be outside of your webroot
', + 'default' => dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'assets' . DIRECTORY_SEPARATOR . '.sqlitedb' + ), + 'database' => array( + 'title' => 'Database filename (extension .sqlite)', + 'default' => 'database.sqlite' + ) ); // Basic SQLLite3 Database /** @skipUpgrade */ DatabaseAdapterRegistry::register( - array( - 'class' => 'SQLite3Database', + array( + 'class' => 'SQLite3Database', 'module' => 'sqlite3', - 'title' => 'SQLite 3.3+ (using SQLite3)', - 'helperPath' => __DIR__.'/code/SQLiteDatabaseConfigurationHelper.php', + 'title' => 'SQLite 3.3+ (using SQLite3)', + 'helperPath' => __DIR__.'/code/SQLiteDatabaseConfigurationHelper.php', 'helperClass' => SQLiteDatabaseConfigurationHelper::class, - 'supported' => class_exists('SQLite3'), - 'missingExtensionText' => 'The SQLite3 - PHP Extension is not available. Please install or enable it of them and refresh this page.', - 'fields' => array_merge($sqliteDatabaseAdapterRegistryFields, array('key' => array( - 'title' => 'Encryption key
This function is experimental and requires configuration of an ' - . 'encryption module', - 'default' => '' - ))) - ) + 'supported' => class_exists('SQLite3'), + 'missingExtensionText' => 'The SQLite3 + PHP Extension is not available. Please install or enable it of them and refresh this page.', + 'fields' => array_merge($sqliteDatabaseAdapterRegistryFields, array('key' => array( + 'title' => 'Encryption key
This function is experimental and requires configuration of an ' + . 'encryption module', + 'default' => '' + ))) + ) ); // PDO database /** @skipUpgrade */ DatabaseAdapterRegistry::register( - array( - 'class' => 'SQLite3PDODatabase', + array( + 'class' => 'SQLite3PDODatabase', 'module' => 'sqlite3', - 'title' => 'SQLite 3.3+ (using PDO)', - 'helperPath' => __DIR__.'/code/SQLiteDatabaseConfigurationHelper.php', + 'title' => 'SQLite 3.3+ (using PDO)', + 'helperPath' => __DIR__.'/code/SQLiteDatabaseConfigurationHelper.php', 'helperClass' => SQLiteDatabaseConfigurationHelper::class, - 'supported' => (class_exists('PDO') && in_array('sqlite', PDO::getAvailableDrivers())), - 'missingExtensionText' => - 'Either the PDO Extension or the - SQLite3 PDO Driver - are unavailable. Please install or enable these and refresh this page.', - 'fields' => $sqliteDatabaseAdapterRegistryFields - ) + 'supported' => (class_exists('PDO') && in_array('sqlite', PDO::getAvailableDrivers())), + 'missingExtensionText' => + 'Either the PDO Extension or the + SQLite3 PDO Driver + are unavailable. Please install or enable these and refresh this page.', + 'fields' => $sqliteDatabaseAdapterRegistryFields + ) ); diff --git a/code/SQLite3Connector.php b/code/SQLite3Connector.php index 4a8c79d..b2d4a31 100644 --- a/code/SQLite3Connector.php +++ b/code/SQLite3Connector.php @@ -111,7 +111,10 @@ class SQLite3Connector extends DBConnector case 'array': case 'unknown type': default: - user_error("Cannot bind parameter \"$value\" as it is an unsupported type ($phpType)", E_USER_ERROR); + user_error( + "Cannot bind parameter \"$value\" as it is an unsupported type ($phpType)", + E_USER_ERROR + ); break; } $values[] = array( @@ -176,7 +179,10 @@ class SQLite3Connector extends DBConnector public function selectDatabase($name) { if ($name !== $this->databaseName) { - user_error("SQLite3Connector can't change databases. Please create a new database connection", E_USER_ERROR); + user_error( + "SQLite3Connector can't change databases. Please create a new database connection", + E_USER_ERROR + ); } return true; } diff --git a/code/SQLite3Database.php b/code/SQLite3Database.php index 44f83a0..5ad7dd0 100644 --- a/code/SQLite3Database.php +++ b/code/SQLite3Database.php @@ -323,16 +323,22 @@ class SQLite3Database extends Database $notMatch = $invertedMatch ? "NOT " : ""; if ($keywords) { $match[$pageClass] = " - (Title LIKE '%$keywords%' OR MenuTitle LIKE '%$keywords%' OR Content LIKE '%$keywords%' OR MetaDescription LIKE '%$keywords%' OR - Title LIKE '%$htmlEntityKeywords%' OR MenuTitle LIKE '%$htmlEntityKeywords%' OR Content LIKE '%$htmlEntityKeywords%' OR MetaDescription LIKE '%$htmlEntityKeywords%') + (Title LIKE '%$keywords%' OR MenuTitle LIKE '%$keywords%' OR Content LIKE '%$keywords%' OR " . + "MetaDescription LIKE '%$keywords%' OR " . + "Title LIKE '%$htmlEntityKeywords%' OR MenuTitle LIKE '%$htmlEntityKeywords%' OR Content LIKE " . + "'%$htmlEntityKeywords%' OR MetaDescription LIKE '%$htmlEntityKeywords%') "; $fileClassSQL = Convert::raw2sql($fileClass); - $match[$fileClass] = "(Name LIKE '%$keywords%' OR Title LIKE '%$keywords%') AND ClassName = '$fileClassSQL'"; + $match[$fileClass] = "(Name LIKE '%$keywords%' OR Title LIKE '%$keywords%') AND " . + "ClassName = '$fileClassSQL'"; // We make the relevance search by converting a boolean mode search into a normal one $relevanceKeywords = $keywords; $htmlEntityRelevanceKeywords = $htmlEntityKeywords; - $relevance[$pageClass] = "(Title LIKE '%$relevanceKeywords%' OR MenuTitle LIKE '%$relevanceKeywords%' OR Content LIKE '%$relevanceKeywords%' OR MetaDescription LIKE '%$relevanceKeywords%') + (Title LIKE '%$htmlEntityRelevanceKeywords%' OR MenuTitle LIKE '%$htmlEntityRelevanceKeywords%' OR Content LIKE '%$htmlEntityRelevanceKeywords%' OR MetaDescription LIKE '%$htmlEntityRelevanceKeywords%')"; + $relevance[$pageClass] = "(Title LIKE '%$relevanceKeywords%' OR MenuTitle LIKE '%$relevanceKeywords%' OR " . + "Content LIKE '%$relevanceKeywords%' OR MetaDescription LIKE '%$relevanceKeywords%') + (Title LIKE " . + "'%$htmlEntityRelevanceKeywords%' OR MenuTitle LIKE '%$htmlEntityRelevanceKeywords%' OR Content LIKE " . + "'%$htmlEntityRelevanceKeywords%' OR MetaDescription LIKE '%$htmlEntityRelevanceKeywords%')"; $relevance[$fileClass] = "(Name LIKE '%$relevanceKeywords%' OR Title LIKE '%$relevanceKeywords%')"; } else { $relevance[$pageClass] = $relevance[$fileClass] = 1; diff --git a/code/SQLite3SchemaManager.php b/code/SQLite3SchemaManager.php index c338565..4f16db3 100644 --- a/code/SQLite3SchemaManager.php +++ b/code/SQLite3SchemaManager.php @@ -319,7 +319,8 @@ class SQLite3SchemaManager extends DBSchemaManager $queries = array( "BEGIN TRANSACTION", "CREATE TABLE \"{$tableName}_renamefield_{$oldName}\" (" . implode(',', $newColsSpec) . ")", - "INSERT INTO \"{$tableName}_renamefield_{$oldName}\" SELECT " . implode(',', $oldCols) . " FROM \"$tableName\"", + "INSERT INTO \"{$tableName}_renamefield_{$oldName}\" SELECT " . implode(',', $oldCols) . + " FROM \"$tableName\"", "DROP TABLE \"$tableName\"", "ALTER TABLE \"{$tableName}_renamefield_{$oldName}\" RENAME TO \"$tableName\"", "COMMIT" @@ -521,7 +522,8 @@ class SQLite3SchemaManager extends DBSchemaManager // Ensure the cache table exists if (empty($this->enum_map)) { - $this->query("CREATE TABLE IF NOT EXISTS \"SQLiteEnums\" (\"TableColumn\" TEXT PRIMARY KEY, \"EnumList\" TEXT)"); + $str = "CREATE TABLE IF NOT EXISTS \"SQLiteEnums\" (\"TableColumn\" TEXT PRIMARY KEY, \"EnumList\" TEXT)"; + $this->query($str); } // Ensure the table row exists diff --git a/code/SQLiteDatabaseConfigurationHelper.php b/code/SQLiteDatabaseConfigurationHelper.php index a18fdc5..d39e8bf 100644 --- a/code/SQLiteDatabaseConfigurationHelper.php +++ b/code/SQLiteDatabaseConfigurationHelper.php @@ -41,7 +41,11 @@ class SQLiteDatabaseConfigurationHelper implements DatabaseConfigurationHelper if (empty($databaseConfig['key'])) { $conn = @new SQLite3($file, SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE); } else { - $conn = @new SQLite3($file, SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE, $databaseConfig['key']); + $conn = @new SQLite3( + $file, + SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE, + $databaseConfig['key'] + ); } break; case 'SQLite3PDODatabase': diff --git a/composer.json b/composer.json index bdd24f0..f6be3f5 100644 --- a/composer.json +++ b/composer.json @@ -1,34 +1,30 @@ { - "name": "silverstripe/sqlite3", - "description": "Adds SQLite3 support to SilverStripe", - "type": "silverstripe-module", - "keywords": ["silverstripe", "sqlite3", "database"], - "authors": [ - { - "name": "Ingo Schommer", - "email": "ingo@silverstripe.com" - }, - { - "name": "Sean Harvey", - "email": "sean@silverstripe.com" - } - ], - "require": { - "silverstripe/framework": "~4.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.8" - }, - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "SilverStripe\\SQLite\\": "code/" - } - }, + "name": "silverstripe/sqlite3", + "description": "Adds SQLite3 support to SilverStripe", + "type": "silverstripe-module", + "keywords": ["silverstripe", "sqlite3", "database"], + "authors": [ + { + "name": "Ingo Schommer", + "email": "ingo@silverstripe.com" + }, + { + "name": "Sean Harvey", + "email": "sean@silverstripe.com" + } + ], + "require": { + "silverstripe/framework": "~4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8", + "squizlabs/php_codesniffer": "^3" + }, + "autoload": { + "psr-4": { + "SilverStripe\\SQLite\\": "code/" + } + }, "minimum-stability": "dev", "prefer-stable": true } diff --git a/phpcs.xml.dist b/phpcs.xml.dist new file mode 100644 index 0000000..fa18f0b --- /dev/null +++ b/phpcs.xml.dist @@ -0,0 +1,12 @@ + + + CodeSniffer ruleset for SilverStripe coding conventions. + + code + + + + + + +