diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..12c1802 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,50 @@ +language: php + +sudo: false + +php: + - 5.6 + +# Environment Variables to set +env: + global: + # Contains a $GITHUB_TOKEN env var for use with composer to avoid API limits. + - secure: "G8hdRx7YHeJYc50Iw+BE1/5Z1OZRCg3sNsDRzS4jU6/pWgW7rE9R460JJhDsrYciv19SVopkHjw/hmEi2hH+HCDo0QmcFPLaQGHr9yNPOTYt9dGRPCk3yVdVSJEGeSa2w6XJ2Up5bAvWEBoBX7cLCPKbsFeYBZS6K4p4uIjPJ6o33IRdDxSsiaNJT/19zG7pKLqnf1Gu+daHzIKHekQhoMWrEKdjFS3vmk7NL1cQ4Ko/S/ekVPMhA0+ZNfQ6cHMf25LF//ZOmggcIAbzi0QRTgJy1xYSUU2eV6tdKv8WUgDi/OZpPGBIYPZ8SJ7GUsWY5GsCrHAiQRRfDS2xgIiJlav6c8u99kz8EXtnmIB2iIjx0BzkO5QsXq5qcXngQSnnac6T7LyY69qhCMAKpjWhiHmNyL/NDi8J9fbNHUG7U8dY/N9Ihac/VkAI7ffNB2kB90Potv1klNP/e70C4Z6p+aMAnm6SaI74WrhjqdiEwiM3KcbeYYl/1XOGSHgfrPSQrD1qYcVoupCrZd0lxDHaq6PavR9McomFTF4eHTiNZGvKDjWH298MwdylZwZK36CDpj7LhXuJPQmuVsQ4V+zxGTVeUsI4CyILxPFXc6Cepgl69LfBF9gbAFtJUHJ4KdXllOSrjy4Ga9w3vwEagEGWlZHX5obItETQllOZitckp0o=" + +# Services to Enable +services: + - mysql + +# Branches to be built or not +branches: + # Blacklist these branches + except: + - master + - staging + - gh-pages + +before_install: + - sh -c "composer self-update" + +install: + - sh -c "composer config -g github-oauth.github.com $GITHUB_TOKEN" + - sh -c "composer install --no-interaction" + - sh -c "composer create-project --no-interaction --prefer-dist cakephp/app ~/build/loadsys/test-app" + - sh -c "cd ~/build/loadsys/test-app ; composer require loadsys/cakephp-loadsys-theme:dev-master;" + - sh -c "cat ~/build/loadsys/CakePHP-LoadsysTheme/provision/bootstrap-append.txt >> ~/build/loadsys/test-app/config/bootstrap.php" + - sh -c "mv ~/build/loadsys/CakePHP-LoadsysTheme/provision/test-app.php ~/build/loadsys/test-app/config/app.php" + +before_script: + - phpenv rehash + - mysql -e 'DROP DATABASE IF EXISTS `travis_app`; CREATE DATABASE `travis_app`;' + - mysql travis_app < ~/build/loadsys/CakePHP-LoadsysTheme/provision/test-app.sql + - sh -c "~/build/loadsys/test-app/bin/cake bake.bake all --everything -t LoadsysTheme" + - ls ~/build/loadsys/test-app/vendor/cakephp/ + - ~/build/loadsys/test-app/vendor/bin/phpcs --config-set installed_paths ~/build/loadsys/test-app/vendor/loadsys/loadsys_codesniffer,~/build/loadsys/test-app/vendor/cakephp/cakephp-codesniffer + - ~/build/loadsys/test-app/vendor/bin/phpcs -i + +script: + - sh -c "~/build/loadsys/test-app/vendor/bin/phpcs -p --extensions=php,ctp --standard=Loadsys ~/build/loadsys/test-app/src ~/build/loadsys/test-app/tests ~/build/loadsys/test-app/config ~/build/loadsys/test-app/webroot" + +notifications: + email: false diff --git a/README.md b/README.md index 88e5ea4..5b0aca7 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,12 @@ $ composer require loadsys/cakephp-loadsys-theme:dev-master * Add this plugin to your application by adding this line to your bootstrap.php +```php +Plugin::load('LoadsysTheme'); +``` + +* Use this Theme when baking content via the `--theme` option for the `bake` command like so: + ````bash $ ./vendor/bin/cake bake all --theme LoadsysTheme name-of-thing ```` diff --git a/provision/bootstrap-append.txt b/provision/bootstrap-append.txt new file mode 100644 index 0000000..bcc5843 --- /dev/null +++ b/provision/bootstrap-append.txt @@ -0,0 +1,3 @@ + + +Plugin::load('LoadsysTheme'); diff --git a/provision/test-app.php b/provision/test-app.php new file mode 100644 index 0000000..9bfd05c --- /dev/null +++ b/provision/test-app.php @@ -0,0 +1,318 @@ + true, + + /** + * Configure basic information about the application. + * + * - namespace - The namespace to find app classes under. + * - encoding - The encoding used for HTML + database connections. + * - base - The base directory the app resides in. If false this + * will be auto detected. + * - dir - Name of app directory. + * - webroot - The webroot directory. + * - wwwRoot - The file path to webroot. + * - baseUrl - To configure CakePHP to *not* use mod_rewrite and to + * use CakePHP pretty URLs, remove these .htaccess + * files: + * /.htaccess + * /webroot/.htaccess + * And uncomment the baseUrl key below. + * - fullBaseUrl - A base URL to use for absolute links. + * - imageBaseUrl - Web path to the public images directory under webroot. + * - cssBaseUrl - Web path to the public css directory under webroot. + * - jsBaseUrl - Web path to the public js directory under webroot. + * - paths - Configure paths for non class based resources. Supports the + * `plugins`, `templates`, `locales` subkeys, which allow the definition of + * paths for plugins, view templates and locale files respectively. + */ + 'App' => [ + 'namespace' => 'App', + 'encoding' => 'UTF-8', + 'base' => false, + 'dir' => 'src', + 'webroot' => 'webroot', + 'wwwRoot' => WWW_ROOT, + // 'baseUrl' => env('SCRIPT_NAME'), + 'fullBaseUrl' => false, + 'imageBaseUrl' => 'img/', + 'cssBaseUrl' => 'css/', + 'jsBaseUrl' => 'js/', + 'paths' => [ + 'plugins' => [ROOT . DS . 'plugins' . DS], + 'templates' => [APP . 'Template' . DS], + 'locales' => [APP . 'Locale' . DS], + ], + ], + + /** + * Security and encryption configuration + * + * - salt - A random string used in security hashing methods. + * The salt value is also used as the encryption key. + * You should treat it as extremely sensitive data. + */ + 'Security' => [ + 'salt' => 'd8bac450f2fc705d9f9be4d8b04fa2aef73c6fa3356baf240325e0b66312a9e5', + ], + + /** + * Apply timestamps with the last modified time to static assets (js, css, images). + * Will append a querystring parameter containing the time the file was modified. + * This is useful for busting browser caches. + * + * Set to true to apply timestamps when debug is true. Set to 'force' to always + * enable timestamping regardless of debug value. + */ + 'Asset' => [ + // 'timestamp' => true, + ], + + /** + * Configure the cache adapters. + */ + 'Cache' => [ + 'default' => [ + 'className' => 'File', + 'path' => CACHE, + ], + + /** + * Configure the cache used for general framework caching. Path information, + * object listings, and translation cache files are stored with this + * configuration. + */ + '_cake_core_' => [ + 'className' => 'File', + 'prefix' => 'myapp_cake_core_', + 'path' => CACHE . 'persistent/', + 'serialize' => true, + 'duration' => '+2 minutes', + ], + + /** + * Configure the cache for model and datasource caches. This cache + * configuration is used to store schema descriptions, and table listings + * in connections. + */ + '_cake_model_' => [ + 'className' => 'File', + 'prefix' => 'myapp_cake_model_', + 'path' => CACHE . 'models/', + 'serialize' => true, + 'duration' => '+2 minutes', + ], + ], + + /** + * Configure the Error and Exception handlers used by your application. + * + * By default errors are displayed using Debugger, when debug is true and logged + * by Cake\Log\Log when debug is false. + * + * In CLI environments exceptions will be printed to stderr with a backtrace. + * In web environments an HTML page will be displayed for the exception. + * With debug true, framework errors like Missing Controller will be displayed. + * When debug is false, framework errors will be coerced into generic HTTP errors. + * + * Options: + * + * - `errorLevel` - int - The level of errors you are interested in capturing. + * - `trace` - boolean - Whether or not backtraces should be included in + * logged errors/exceptions. + * - `log` - boolean - Whether or not you want exceptions logged. + * - `exceptionRenderer` - string - The class responsible for rendering + * uncaught exceptions. If you choose a custom class you should place + * the file for that class in src/Error. This class needs to implement a + * render method. + * - `skipLog` - array - List of exceptions to skip for logging. Exceptions that + * extend one of the listed exceptions will also be skipped for logging. + * E.g.: + * `'skipLog' => ['Cake\Network\Exception\NotFoundException', 'Cake\Network\Exception\UnauthorizedException']` + */ + 'Error' => [ + 'errorLevel' => E_ALL & ~E_DEPRECATED, + 'exceptionRenderer' => 'Cake\Error\ExceptionRenderer', + 'skipLog' => [], + 'log' => true, + 'trace' => true, + ], + + /** + * Email configuration. + * + * You can configure email transports and email delivery profiles here. + * + * By defining transports separately from delivery profiles you can easily + * re-use transport configuration across multiple profiles. + * + * You can specify multiple configurations for production, development and + * testing. + * + * ### Configuring transports + * + * Each transport needs a `className`. Valid options are as follows: + * + * Mail - Send using PHP mail function + * Smtp - Send using SMTP + * Debug - Do not send the email, just return the result + * + * You can add custom transports (or override existing transports) by adding the + * appropriate file to src/Network/Email. Transports should be named + * 'YourTransport.php', where 'Your' is the name of the transport. + * + * ### Configuring delivery profiles + * + * Delivery profiles allow you to predefine various properties about email + * messages from your application and give the settings a name. This saves + * duplication across your application and makes maintenance and development + * easier. Each profile accepts a number of keys. See `Cake\Network\Email\Email` + * for more information. + */ + 'EmailTransport' => [ + 'default' => [ + 'className' => 'Mail', + // The following keys are used in SMTP transports + 'host' => 'localhost', + 'port' => 25, + 'timeout' => 30, + 'username' => 'user', + 'password' => 'secret', + 'client' => null, + 'tls' => null, + ], + ], + + 'Email' => [ + 'default' => [ + 'transport' => 'default', + 'from' => 'you@localhost', + //'charset' => 'utf-8', + //'headerCharset' => 'utf-8', + ], + ], + + /** + * Connection information used by the ORM to connect + * to your application's datastores. + * Drivers include Mysql Postgres Sqlite Sqlserver + * See vendor\cakephp\cakephp\src\Database\Driver for complete list + */ + 'Datasources' => [ + 'default' => [ + 'className' => 'Cake\Database\Connection', + 'driver' => 'Cake\Database\Driver\Mysql', + 'persistent' => false, + 'host' => '0.0.0.0', + 'username' => 'travis', + 'password' => '', + 'database' => 'travis_app', + 'encoding' => 'utf8', + 'timezone' => 'UTC', + 'cacheMetadata' => true, + + /* + * Set identifier quoting to true if you are using reserved words or + * special characters in your table or column names. Enabling this + * setting will result in queries built using the Query Builder having + * identifiers quoted when creating SQL. It should be noted that this + * decreases performance because each query needs to be traversed and + * manipulated before being executed. + */ + 'quoteIdentifiers' => false, + + /* + * During development, if using MySQL < 5.6, uncommenting the + * following line could boost the speed at which schema metadata is + * fetched from the database. It can also be set directly with the + * mysql configuration directive 'innodb_stats_on_metadata = 0' + * which is the recommended value in production environments + * 'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], + */ + ], + + /** + * The test connection is used during the test suite. + */ + 'test' => [ + 'className' => 'Cake\Database\Connection', + 'driver' => 'Cake\Database\Driver\Mysql', + 'persistent' => false, + 'host' => '0.0.0.0', + 'username' => 'travis', + 'password' => '', + 'database' => 'travis_app', + 'encoding' => 'utf8', + 'timezone' => 'UTC', + 'cacheMetadata' => true, + 'quoteIdentifiers' => false, + ], + ], + + /** + * Configures logging options + */ + 'Log' => [ + 'debug' => [ + 'className' => 'Cake\Log\Engine\FileLog', + 'path' => LOGS, + 'file' => 'debug', + 'levels' => ['notice', 'info', 'debug'], + ], + 'error' => [ + 'className' => 'Cake\Log\Engine\FileLog', + 'path' => LOGS, + 'file' => 'error', + 'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'], + ], + ], + + /** + * + * Session configuration. + * + * Contains an array of settings to use for session configuration. The + * `defaults` key is used to define a default preset to use for sessions, any + * settings declared here will override the settings of the default config. + * + * ## Options + * + * - `cookie` - The name of the cookie to use. Defaults to 'CAKEPHP'. + * - `cookiePath` - The url path for which session cookie is set. Maps to the + * `session.cookie_path` php.ini config. Defaults to base path of app. + * - `timeout` - The time in minutes the session should be valid for. + * Pass 0 to disable checking timeout. + * - `defaults` - The default configuration set to use as a basis for your session. + * There are four built-in options: php, cake, cache, database. + * - `handler` - Can be used to enable a custom session handler. Expects an + * array with at least the `engine` key, being the name of the Session engine + * class to use for managing the session. CakePHP bundles the `CacheSession` + * and `DatabaseSession` engines. + * - `ini` - An associative array of additional ini values to set. + * + * The built-in `defaults` options are: + * + * - 'php' - Uses settings defined in your php.ini. + * - 'cake' - Saves session files in CakePHP's /tmp directory. + * - 'database' - Uses CakePHP's database sessions. + * - 'cache' - Use the Cache class to save sessions. + * + * To define a custom session handler, save it at src/Network/Session/.php. + * Make sure the class implements PHP's `SessionHandlerInterface` and set + * Session.handler to + * + * To use database sessions, load the SQL file located at config/Schema/sessions.sql + */ + 'Session' => [ + 'defaults' => 'php', + ], +]; diff --git a/provision/test-app.sql b/provision/test-app.sql new file mode 100644 index 0000000..496ae84 --- /dev/null +++ b/provision/test-app.sql @@ -0,0 +1,28 @@ +DROP TABLE IF EXISTS `users`; + +CREATE TABLE `users` ( + `id` varchar(36) NOT NULL COMMENT 'Primary Key for the Users Table, UUID', + `email` varchar(255) NOT NULL COMMENT 'Email Address for the User', + `password` varchar(255) NOT NULL COMMENT 'Hashed Password', + `firstname` varchar(255) NOT NULL COMMENT 'User''s given name.', + `lastname` varchar(255) NOT NULL COMMENT 'User''s family name.', + `role` varchar(50) NOT NULL COMMENT 'ENUM mocked field. See User::getList() for options.', + `is_active` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Bool controlling whether login is allowed or not.', + `created` datetime DEFAULT NULL COMMENT 'Created datetime', + `creator_id` varchar(36) DEFAULT NULL COMMENT 'ID of User who created row', + `modified` datetime DEFAULT NULL COMMENT 'Modified datetime', + `modifier_id` varchar(36) DEFAULT NULL COMMENT 'ID of User who modified row', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +LOCK TABLES `users` WRITE; +/*!40000 ALTER TABLE `users` DISABLE KEYS */; + +INSERT INTO `users` (`id`, `email`, `password`, `firstname`, `lastname`, `role`, `is_active`, `created`, `creator_id`, `modified`, `modifier_id`) +VALUES + ('08148fbc-32ba-11e4-9e39-080027506c76','testing@localhost.com','$2a$10$sjaVf5UXC2sDgutoZ8bAjezChMvq0I8uQdaEN5evUGWW.WLfWbFES','Testing','Localhost','user',1,'2015-06-30 17:07:35','799763fd-32bc-11e4-9e39-080027506c76','2015-06-30 17:07:35','799763fd-32bc-11e4-9e39-080027506c76'), + ('54108b70-a178-4590-9df4-1a900a00020f','tester@localhost.com','$2a$10$sjaVf5UXC2sDgutoZ8bAjezChMvq0I8uQdaEN5evUGWW.WLfWbFES','Test','Localhost','user',0,'2015-06-30 17:07:35','54108b70-5e58-42dc-b384-1a900a00020f','2014-09-10 17:33:36',NULL), + ('799763fd-32bc-11e4-9e39-080027506c76','admin@localhost.com','$2a$10$sjaVf5UXC2sDgutoZ8bAjezChMvq0I8uQdaEN5evUGWW.WLfWbFES','Admin','Localhost','admin',1,'2015-06-30 17:07:35','799763fd-32bc-11e4-9e39-080027506c76','2015-06-30 17:07:35','799763fd-32bc-11e4-9e39-080027506c76'); + +/*!40000 ALTER TABLE `users` ENABLE KEYS */; +UNLOCK TABLES;