MNT Standardise modules

This commit is contained in:
Steve Boyd 2022-08-01 15:48:26 +12:00
parent 4edf7c23f8
commit bf07381fc9
13 changed files with 141 additions and 182 deletions

16
.github/workflows/ci.yml vendored Normal file
View File

@ -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

17
.github/workflows/keepalive.yml vendored Normal file
View File

@ -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

View File

@ -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/*]

View File

@ -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

View File

@ -1,6 +1,7 @@
# SQLite3 Module # 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 ## Maintainer Contact
@ -9,7 +10,7 @@ Andreas Piening (Nickname: apiening)
## Requirements ## Requirements
* SilverStripe 4.0 or newer * Silverstripe 4.0 or newer
## Installation ## 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 Make sure the webserver has sufficient privileges to write to that folder and that it is protected from
external access. external access.
### Sample mysite/_config.php ### Sample mysite/_config.php
```php ```php

View File

@ -2,13 +2,12 @@
// Script called from ConfigureFromEnv.php // Script called from ConfigureFromEnv.php
global $databaseConfig; 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')) { if (defined('SS_SQLITE_DATABASE_KEY')) {
$databaseConfig['path'] = SS_SQLITE_DATABASE_PATH; $databaseConfig['key'] = SS_SQLITE_DATABASE_KEY;
} }
if(defined('SS_SQLITE_DATABASE_KEY')) {
$databaseConfig['key'] = SS_SQLITE_DATABASE_KEY;
}
} }

View File

@ -4,51 +4,51 @@ use SilverStripe\Dev\Install\DatabaseAdapterRegistry;
use SilverStripe\SQLite\SQLiteDatabaseConfigurationHelper; use SilverStripe\SQLite\SQLiteDatabaseConfigurationHelper;
$sqliteDatabaseAdapterRegistryFields = array( $sqliteDatabaseAdapterRegistryFields = array(
'path' => array( 'path' => array(
'title' => 'Directory path<br /><small>Absolute path to directory, writeable by the webserver user.<br />' 'title' => 'Directory path<br /><small>Absolute path to directory, writeable by the webserver user.<br />'
. 'Recommended to be outside of your webroot</small>', . 'Recommended to be outside of your webroot</small>',
'default' => dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'assets' . DIRECTORY_SEPARATOR . '.sqlitedb' 'default' => dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'assets' . DIRECTORY_SEPARATOR . '.sqlitedb'
), ),
'database' => array( 'database' => array(
'title' => 'Database filename (extension .sqlite)', 'title' => 'Database filename (extension .sqlite)',
'default' => 'database.sqlite' 'default' => 'database.sqlite'
) )
); );
// Basic SQLLite3 Database // Basic SQLLite3 Database
/** @skipUpgrade */ /** @skipUpgrade */
DatabaseAdapterRegistry::register( DatabaseAdapterRegistry::register(
array( array(
'class' => 'SQLite3Database', 'class' => 'SQLite3Database',
'module' => 'sqlite3', 'module' => 'sqlite3',
'title' => 'SQLite 3.3+ (using SQLite3)', 'title' => 'SQLite 3.3+ (using SQLite3)',
'helperPath' => __DIR__.'/code/SQLiteDatabaseConfigurationHelper.php', 'helperPath' => __DIR__.'/code/SQLiteDatabaseConfigurationHelper.php',
'helperClass' => SQLiteDatabaseConfigurationHelper::class, 'helperClass' => SQLiteDatabaseConfigurationHelper::class,
'supported' => class_exists('SQLite3'), 'supported' => class_exists('SQLite3'),
'missingExtensionText' => 'The <a href="http://php.net/manual/en/book.sqlite3.php">SQLite3</a> 'missingExtensionText' => 'The <a href="http://php.net/manual/en/book.sqlite3.php">SQLite3</a>
PHP Extension is not available. Please install or enable it of them and refresh this page.', PHP Extension is not available. Please install or enable it of them and refresh this page.',
'fields' => array_merge($sqliteDatabaseAdapterRegistryFields, array('key' => array( 'fields' => array_merge($sqliteDatabaseAdapterRegistryFields, array('key' => array(
'title' => 'Encryption key<br><small>This function is experimental and requires configuration of an ' 'title' => 'Encryption key<br><small>This function is experimental and requires configuration of an '
. 'encryption module</small>', . 'encryption module</small>',
'default' => '' 'default' => ''
))) )))
) )
); );
// PDO database // PDO database
/** @skipUpgrade */ /** @skipUpgrade */
DatabaseAdapterRegistry::register( DatabaseAdapterRegistry::register(
array( array(
'class' => 'SQLite3PDODatabase', 'class' => 'SQLite3PDODatabase',
'module' => 'sqlite3', 'module' => 'sqlite3',
'title' => 'SQLite 3.3+ (using PDO)', 'title' => 'SQLite 3.3+ (using PDO)',
'helperPath' => __DIR__.'/code/SQLiteDatabaseConfigurationHelper.php', 'helperPath' => __DIR__.'/code/SQLiteDatabaseConfigurationHelper.php',
'helperClass' => SQLiteDatabaseConfigurationHelper::class, 'helperClass' => SQLiteDatabaseConfigurationHelper::class,
'supported' => (class_exists('PDO') && in_array('sqlite', PDO::getAvailableDrivers())), 'supported' => (class_exists('PDO') && in_array('sqlite', PDO::getAvailableDrivers())),
'missingExtensionText' => 'missingExtensionText' =>
'Either the <a href="http://php.net/manual/en/book.pdo.php">PDO Extension</a> or the 'Either the <a href="http://php.net/manual/en/book.pdo.php">PDO Extension</a> or the
<a href="http://php.net/manual/en/book.sqlite3.php">SQLite3 PDO Driver</a> <a href="http://php.net/manual/en/book.sqlite3.php">SQLite3 PDO Driver</a>
are unavailable. Please install or enable these and refresh this page.', are unavailable. Please install or enable these and refresh this page.',
'fields' => $sqliteDatabaseAdapterRegistryFields 'fields' => $sqliteDatabaseAdapterRegistryFields
) )
); );

View File

@ -111,7 +111,10 @@ class SQLite3Connector extends DBConnector
case 'array': case 'array':
case 'unknown type': case 'unknown type':
default: 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; break;
} }
$values[] = array( $values[] = array(
@ -176,7 +179,10 @@ class SQLite3Connector extends DBConnector
public function selectDatabase($name) public function selectDatabase($name)
{ {
if ($name !== $this->databaseName) { 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; return true;
} }

View File

@ -323,16 +323,22 @@ class SQLite3Database extends Database
$notMatch = $invertedMatch ? "NOT " : ""; $notMatch = $invertedMatch ? "NOT " : "";
if ($keywords) { if ($keywords) {
$match[$pageClass] = " $match[$pageClass] = "
(Title LIKE '%$keywords%' OR MenuTitle LIKE '%$keywords%' OR Content LIKE '%$keywords%' OR MetaDescription LIKE '%$keywords%' OR (Title LIKE '%$keywords%' OR MenuTitle LIKE '%$keywords%' OR Content LIKE '%$keywords%' OR " .
Title LIKE '%$htmlEntityKeywords%' OR MenuTitle LIKE '%$htmlEntityKeywords%' OR Content LIKE '%$htmlEntityKeywords%' OR MetaDescription LIKE '%$htmlEntityKeywords%') "MetaDescription LIKE '%$keywords%' OR " .
"Title LIKE '%$htmlEntityKeywords%' OR MenuTitle LIKE '%$htmlEntityKeywords%' OR Content LIKE " .
"'%$htmlEntityKeywords%' OR MetaDescription LIKE '%$htmlEntityKeywords%')
"; ";
$fileClassSQL = Convert::raw2sql($fileClass); $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 // We make the relevance search by converting a boolean mode search into a normal one
$relevanceKeywords = $keywords; $relevanceKeywords = $keywords;
$htmlEntityRelevanceKeywords = $htmlEntityKeywords; $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%')"; $relevance[$fileClass] = "(Name LIKE '%$relevanceKeywords%' OR Title LIKE '%$relevanceKeywords%')";
} else { } else {
$relevance[$pageClass] = $relevance[$fileClass] = 1; $relevance[$pageClass] = $relevance[$fileClass] = 1;

View File

@ -319,7 +319,8 @@ class SQLite3SchemaManager extends DBSchemaManager
$queries = array( $queries = array(
"BEGIN TRANSACTION", "BEGIN TRANSACTION",
"CREATE TABLE \"{$tableName}_renamefield_{$oldName}\" (" . implode(',', $newColsSpec) . ")", "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\"", "DROP TABLE \"$tableName\"",
"ALTER TABLE \"{$tableName}_renamefield_{$oldName}\" RENAME TO \"$tableName\"", "ALTER TABLE \"{$tableName}_renamefield_{$oldName}\" RENAME TO \"$tableName\"",
"COMMIT" "COMMIT"
@ -521,7 +522,8 @@ class SQLite3SchemaManager extends DBSchemaManager
// Ensure the cache table exists // Ensure the cache table exists
if (empty($this->enum_map)) { 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 // Ensure the table row exists

View File

@ -41,7 +41,11 @@ class SQLiteDatabaseConfigurationHelper implements DatabaseConfigurationHelper
if (empty($databaseConfig['key'])) { if (empty($databaseConfig['key'])) {
$conn = @new SQLite3($file, SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE); $conn = @new SQLite3($file, SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE);
} else { } 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; break;
case 'SQLite3PDODatabase': case 'SQLite3PDODatabase':

View File

@ -1,34 +1,30 @@
{ {
"name": "silverstripe/sqlite3", "name": "silverstripe/sqlite3",
"description": "Adds SQLite3 support to SilverStripe", "description": "Adds SQLite3 support to SilverStripe",
"type": "silverstripe-module", "type": "silverstripe-module",
"keywords": ["silverstripe", "sqlite3", "database"], "keywords": ["silverstripe", "sqlite3", "database"],
"authors": [ "authors": [
{ {
"name": "Ingo Schommer", "name": "Ingo Schommer",
"email": "ingo@silverstripe.com" "email": "ingo@silverstripe.com"
}, },
{ {
"name": "Sean Harvey", "name": "Sean Harvey",
"email": "sean@silverstripe.com" "email": "sean@silverstripe.com"
} }
], ],
"require": { "require": {
"silverstripe/framework": "~4.0" "silverstripe/framework": "~4.0"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "~4.8" "phpunit/phpunit": "~4.8",
}, "squizlabs/php_codesniffer": "^3"
"extra": { },
"branch-alias": { "autoload": {
"dev-master": "2.0.x-dev" "psr-4": {
} "SilverStripe\\SQLite\\": "code/"
}, }
"autoload": { },
"psr-4": {
"SilverStripe\\SQLite\\": "code/"
}
},
"minimum-stability": "dev", "minimum-stability": "dev",
"prefer-stable": true "prefer-stable": true
} }

12
phpcs.xml.dist Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<ruleset name="SilverStripe">
<description>CodeSniffer ruleset for SilverStripe coding conventions.</description>
<file>code</file>
<!-- base rules are PSR-2 -->
<rule ref="PSR2" >
<!-- Current exclusions -->
<exclude name="PSR1.Methods.CamelCapsMethodName" />
</rule>
</ruleset>