├── .editorconfig ├── .gitignore ├── .htaccess ├── .nojekyll ├── DCO.txt ├── README.md ├── README_CI.md ├── Vagrantfile.dist ├── admin ├── README.md ├── alldocs ├── apibot ├── apibot.md ├── docbot ├── docbot.md ├── framework │ ├── README.md │ ├── composer.json │ └── phpunit.xml.dist ├── next.rst ├── pre-commit ├── release ├── release-appstarter ├── release-config ├── release-deploy ├── release-framework ├── release-notes.bb ├── release-revert ├── release-userguide ├── setup.sh ├── starter │ ├── .gitignore │ ├── README.md │ ├── app │ │ └── Config │ │ │ └── Paths.php │ ├── composer.json │ └── phpunit.xml.dist ├── userguide │ ├── README.md │ └── composer.json └── workflow.md ├── app ├── .htaccess ├── Config │ ├── App.php │ ├── Autoload.php │ ├── Boot │ │ ├── development.php │ │ ├── production.php │ │ └── testing.php │ ├── Cache.php │ ├── Constants.php │ ├── ContentSecurityPolicy.php │ ├── Database.php │ ├── DocTypes.php │ ├── Events.php │ ├── Exceptions.php │ ├── Filters.php │ ├── ForeignCharacters.php │ ├── Format.php │ ├── Honeypot.php │ ├── Images.php │ ├── Logger.php │ ├── Migrations.php │ ├── Mimes.php │ ├── Modules.php │ ├── Pager.php │ ├── Paths.php │ ├── Routes.php │ ├── Services.php │ ├── Toolbar.php │ ├── UserAgents.php │ ├── Validation.php │ └── View.php ├── Controllers │ ├── Api │ │ ├── Book.php │ │ └── Ping.php │ ├── BaseController.php │ └── Home.php ├── Database │ ├── Migrations │ │ ├── .gitkeep │ │ └── 001_Add_Books.php │ └── Seeds │ │ ├── .gitkeep │ │ └── BookSeeder.php ├── Filters │ ├── .gitkeep │ ├── DeleteOnly.php │ ├── GetOnly.php │ ├── PostOnly.php │ └── UpdateOnly.php ├── Helpers │ └── .gitkeep ├── Language │ └── .gitkeep ├── Libraries │ └── .gitkeep ├── Models │ ├── .gitkeep │ └── BookModel.php ├── ThirdParty │ └── .gitkeep ├── Views │ ├── .gitignore │ ├── errors │ │ ├── cli │ │ │ ├── error_404.php │ │ │ ├── error_exception.php │ │ │ └── production.php │ │ └── html │ │ │ ├── debug.css │ │ │ ├── debug.js │ │ │ ├── error_404.php │ │ │ ├── error_exception.php │ │ │ └── production.php │ └── welcome_message.php └── index.html ├── client ├── .babelrc ├── .editorconfig ├── .gitignore ├── .postcssrc.js ├── README.md ├── build │ ├── build.js │ ├── check-versions.js │ ├── logo.png │ ├── utils.js │ ├── vue-loader.conf.js │ ├── webpack.base.conf.js │ ├── webpack.dev.conf.js │ └── webpack.prod.conf.js ├── config │ ├── dev.env.js │ ├── index.js │ └── prod.env.js ├── index.html ├── package-lock.json ├── package.json ├── src │ ├── App.vue │ ├── assets │ │ └── logo.png │ ├── components │ │ ├── Books.vue │ │ └── HelloWorld.vue │ ├── main.js │ └── router │ │ └── index.js └── static │ └── .gitkeep ├── composer.json ├── env ├── favicon.ico ├── index.php ├── license.txt ├── phpunit.xml.dist ├── public ├── .htaccess ├── favicon.ico ├── index.php └── robots.txt ├── robots.txt ├── spark ├── stale.yml ├── system ├── .htaccess ├── API │ └── ResponseTrait.php ├── Autoloader │ ├── Autoloader.php │ └── FileLocator.php ├── CLI │ ├── BaseCommand.php │ ├── CLI.php │ ├── CommandRunner.php │ ├── Console.php │ └── Exceptions │ │ └── CLIException.php ├── Cache │ ├── CacheFactory.php │ ├── CacheInterface.php │ ├── Exceptions │ │ ├── CacheException.php │ │ └── ExceptionInterface.php │ └── Handlers │ │ ├── DummyHandler.php │ │ ├── FileHandler.php │ │ ├── MemcachedHandler.php │ │ ├── PredisHandler.php │ │ ├── RedisHandler.php │ │ └── WincacheHandler.php ├── CodeIgniter.php ├── Commands │ ├── Database │ │ ├── CreateMigration.php │ │ ├── MigrateCurrent.php │ │ ├── MigrateLatest.php │ │ ├── MigrateRefresh.php │ │ ├── MigrateRollback.php │ │ ├── MigrateStatus.php │ │ ├── MigrateVersion.php │ │ └── Seed.php │ ├── Help.php │ ├── ListCommands.php │ ├── Server │ │ ├── Serve.php │ │ └── rewrite.php │ ├── Sessions │ │ ├── CreateMigration.php │ │ └── Views │ │ │ └── migration.tpl.php │ └── Utilities │ │ ├── Namespaces.php │ │ └── Routes.php ├── Common.php ├── ComposerScripts.php ├── Config │ ├── AutoloadConfig.php │ ├── BaseConfig.php │ ├── BaseService.php │ ├── Config.php │ ├── DotEnv.php │ ├── ForeignCharacters.php │ ├── Routes.php │ ├── Services.php │ └── View.php ├── Controller.php ├── Database │ ├── BaseBuilder.php │ ├── BaseConnection.php │ ├── BasePreparedQuery.php │ ├── BaseResult.php │ ├── BaseUtils.php │ ├── Config.php │ ├── ConnectionInterface.php │ ├── Database.php │ ├── Exceptions │ │ ├── DataException.php │ │ ├── DatabaseException.php │ │ └── ExceptionInterface.php │ ├── Forge.php │ ├── Migration.php │ ├── MigrationRunner.php │ ├── MySQLi │ │ ├── Builder.php │ │ ├── Connection.php │ │ ├── Forge.php │ │ ├── PreparedQuery.php │ │ ├── Result.php │ │ └── Utils.php │ ├── Postgre │ │ ├── Builder.php │ │ ├── Connection.php │ │ ├── Forge.php │ │ ├── PreparedQuery.php │ │ ├── Result.php │ │ └── Utils.php │ ├── PreparedQueryInterface.php │ ├── Query.php │ ├── QueryInterface.php │ ├── ResultInterface.php │ ├── SQLite3 │ │ ├── Builder.php │ │ ├── Connection.php │ │ ├── Forge.php │ │ ├── PreparedQuery.php │ │ ├── Result.php │ │ ├── Table.php │ │ └── Utils.php │ └── Seeder.php ├── Debug │ ├── Exceptions.php │ ├── Iterator.php │ ├── Timer.php │ ├── Toolbar.php │ └── Toolbar │ │ ├── Collectors │ │ ├── BaseCollector.php │ │ ├── Config.php │ │ ├── Database.php │ │ ├── Events.php │ │ ├── Files.php │ │ ├── History.php │ │ ├── Logs.php │ │ ├── Routes.php │ │ ├── Timers.php │ │ └── Views.php │ │ └── Views │ │ ├── _config.tpl.php │ │ ├── _database.tpl.php │ │ ├── _events.tpl.php │ │ ├── _files.tpl.php │ │ ├── _history.tpl.php │ │ ├── _logs.tpl.php │ │ ├── _routes.tpl.php │ │ ├── toolbar.css │ │ ├── toolbar.js │ │ ├── toolbar.tpl.php │ │ └── toolbarloader.js.php ├── Entity.php ├── Events │ └── Events.php ├── Exceptions │ ├── AlertError.php │ ├── CastException.php │ ├── ConfigException.php │ ├── CriticalError.php │ ├── DownloadException.php │ ├── EmergencyError.php │ ├── ExceptionInterface.php │ ├── FrameworkException.php │ ├── ModelException.php │ └── PageNotFoundException.php ├── Files │ ├── Exceptions │ │ ├── FileException.php │ │ └── FileNotFoundException.php │ └── File.php ├── Filters │ ├── CSRF.php │ ├── DebugToolbar.php │ ├── Exceptions │ │ └── FilterException.php │ ├── FilterInterface.php │ ├── Filters.php │ └── Honeypot.php ├── Format │ ├── Exceptions │ │ └── FormatException.php │ ├── FormatterInterface.php │ ├── JSONFormatter.php │ └── XMLFormatter.php ├── HTTP │ ├── CLIRequest.php │ ├── CURLRequest.php │ ├── ContentSecurityPolicy.php │ ├── DownloadResponse.php │ ├── Exceptions │ │ └── HTTPException.php │ ├── Files │ │ ├── FileCollection.php │ │ ├── UploadedFile.php │ │ └── UploadedFileInterface.php │ ├── Header.php │ ├── IncomingRequest.php │ ├── Message.php │ ├── Negotiate.php │ ├── RedirectResponse.php │ ├── Request.php │ ├── RequestInterface.php │ ├── Response.php │ ├── ResponseInterface.php │ ├── URI.php │ └── UserAgent.php ├── Helpers │ ├── array_helper.php │ ├── cookie_helper.php │ ├── date_helper.php │ ├── filesystem_helper.php │ ├── form_helper.php │ ├── html_helper.php │ ├── inflector_helper.php │ ├── number_helper.php │ ├── security_helper.php │ ├── text_helper.php │ ├── url_helper.php │ └── xml_helper.php ├── Honeypot │ ├── Exceptions │ │ └── HoneypotException.php │ └── Honeypot.php ├── I18n │ ├── Exceptions │ │ └── I18nException.php │ ├── Time.php │ └── TimeDifference.php ├── Images │ ├── Exceptions │ │ └── ImageException.php │ ├── Handlers │ │ ├── BaseHandler.php │ │ ├── GDHandler.php │ │ └── ImageMagickHandler.php │ ├── Image.php │ └── ImageHandlerInterface.php ├── Language │ ├── Language.php │ └── en │ │ ├── CLI.php │ │ ├── Cache.php │ │ ├── Cast.php │ │ ├── Core.php │ │ ├── Database.php │ │ ├── Entity.php │ │ ├── Files.php │ │ ├── Filters.php │ │ ├── Format.php │ │ ├── HTTP.php │ │ ├── Images.php │ │ ├── Language.php │ │ ├── Log.php │ │ ├── Migrations.php │ │ ├── Number.php │ │ ├── Pager.php │ │ ├── Redirect.php │ │ ├── Router.php │ │ ├── Session.php │ │ ├── Time.php │ │ ├── Validation.php │ │ └── View.php ├── Log │ ├── Exceptions │ │ └── LogException.php │ ├── Handlers │ │ ├── BaseHandler.php │ │ ├── ChromeLoggerHandler.php │ │ ├── FileHandler.php │ │ └── HandlerInterface.php │ └── Logger.php ├── Model.php ├── Pager │ ├── Exceptions │ │ └── PagerException.php │ ├── Pager.php │ ├── PagerInterface.php │ ├── PagerRenderer.php │ └── Views │ │ ├── default_full.php │ │ ├── default_head.php │ │ └── default_simple.php ├── Router │ ├── Exceptions │ │ ├── RedirectException.php │ │ └── RouterException.php │ ├── RouteCollection.php │ ├── RouteCollectionInterface.php │ ├── Router.php │ └── RouterInterface.php ├── Security │ ├── Exceptions │ │ └── SecurityException.php │ └── Security.php ├── Session │ ├── Exceptions │ │ └── SessionException.php │ ├── Handlers │ │ ├── ArrayHandler.php │ │ ├── BaseHandler.php │ │ ├── DatabaseHandler.php │ │ ├── FileHandler.php │ │ ├── MemcachedHandler.php │ │ └── RedisHandler.php │ ├── Session.php │ └── SessionInterface.php ├── Test │ ├── CIDatabaseTestCase.php │ ├── CIUnitTestCase.php │ ├── ControllerResponse.php │ ├── ControllerTester.php │ ├── DOMParser.php │ ├── FeatureResponse.php │ ├── FeatureTestCase.php │ ├── Filters │ │ └── CITestStreamFilter.php │ └── ReflectionHelper.php ├── ThirdParty │ ├── Kint │ │ └── kint.php │ ├── PSR │ │ └── Log │ │ │ ├── AbstractLogger.php │ │ │ ├── InvalidArgumentException.php │ │ │ ├── LogLevel.php │ │ │ ├── LoggerAwareInterface.php │ │ │ ├── LoggerAwareTrait.php │ │ │ ├── LoggerInterface.php │ │ │ ├── LoggerTrait.php │ │ │ └── NullLogger.php │ └── ZendEscaper │ │ ├── Escaper.php │ │ └── Exception │ │ ├── ExceptionInterface.php │ │ ├── InvalidArgumentException.php │ │ └── RuntimeException.php ├── Throttle │ ├── Throttler.php │ └── ThrottlerInterface.php ├── Typography │ └── Typography.php ├── Validation │ ├── CreditCardRules.php │ ├── Exceptions │ │ └── ValidationException.php │ ├── FileRules.php │ ├── FormatRules.php │ ├── Rules.php │ ├── Validation.php │ ├── ValidationInterface.php │ └── Views │ │ ├── list.php │ │ └── single.php ├── View │ ├── Cell.php │ ├── Exceptions │ │ └── ViewException.php │ ├── Filters.php │ ├── Parser.php │ ├── Plugins.php │ ├── RendererInterface.php │ ├── Table.php │ └── View.php ├── bootstrap.php └── index.html └── writable ├── .htaccess ├── cache └── index.html ├── logs └── index.html ├── session └── index.html └── uploads └── index.html /.editorconfig: -------------------------------------------------------------------------------- 1 | ; top-most EditorConfig file 2 | root = true 3 | 4 | ; Unix-style newlines 5 | [*] 6 | end_of_line = lf 7 | 8 | [*.php] 9 | indent_style = tab 10 | charset = utf-8 11 | trim_trailing_whitespace = true 12 | insert_final_newline = true 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | #------------------------- 2 | # Operating Specific Junk Files 3 | #------------------------- 4 | 5 | # OS X 6 | .DS_Store 7 | .AppleDouble 8 | .LSOverride 9 | 10 | # OS X Thumbnails 11 | ._* 12 | 13 | # Windows image file caches 14 | Thumbs.db 15 | ehthumbs.db 16 | Desktop.ini 17 | 18 | # Recycle Bin used on file shares 19 | $RECYCLE.BIN/ 20 | 21 | # Windows Installer files 22 | *.cab 23 | *.msi 24 | *.msm 25 | *.msp 26 | 27 | # Windows shortcuts 28 | *.lnk 29 | 30 | # Linux 31 | *~ 32 | 33 | # KDE directory preferences 34 | .directory 35 | 36 | # Linux trash folder which might appear on any partition or disk 37 | .Trash-* 38 | 39 | #------------------------- 40 | # Environment Files 41 | #------------------------- 42 | # These should never be under version control, 43 | # as it poses a security risk. 44 | .env 45 | .vagrant 46 | Vagrantfile 47 | 48 | #------------------------- 49 | # Temporary Files 50 | #------------------------- 51 | writable/cache/* 52 | !writable/cache/index.html 53 | 54 | writable/logs/* 55 | !writable/logs/index.html 56 | 57 | writable/session/* 58 | !writable/session/index.html 59 | 60 | writable/uploads/* 61 | !writable/uploads/index.html 62 | 63 | writable/debugbar/* 64 | 65 | php_errors.log 66 | 67 | #------------------------- 68 | # User Guide Temp Files 69 | #------------------------- 70 | user_guide_src/build/* 71 | user_guide_src/cilexer/build/* 72 | user_guide_src/cilexer/dist/* 73 | user_guide_src/cilexer/pycilexer.egg-info/* 74 | 75 | #------------------------- 76 | # Test Files 77 | #------------------------- 78 | tests/coverage* 79 | 80 | # Don't save phpunit under version control. 81 | phpunit 82 | 83 | #------------------------- 84 | # Composer 85 | #------------------------- 86 | vendor/ 87 | composer.lock 88 | 89 | #------------------------- 90 | # IDE / Development Files 91 | #------------------------- 92 | 93 | # Modules Testing 94 | _modules/* 95 | 96 | # phpenv local config 97 | .php-version 98 | 99 | # Jetbrains editors (PHPStorm, etc) 100 | .idea/ 101 | *.iml 102 | 103 | # Netbeans 104 | nbproject/ 105 | nbbuild/ 106 | dist/ 107 | nbdist/ 108 | nbactions.xml 109 | nb-configuration.xml 110 | .nb-gradle/ 111 | 112 | # Sublime Text 113 | *.tmlanguage.cache 114 | *.tmPreferences.cache 115 | *.stTheme.cache 116 | *.sublime-workspace 117 | *.sublime-project 118 | .phpintel 119 | /api/ 120 | 121 | # Visual Studio Code 122 | .vscode/ 123 | 124 | /results/ 125 | /phpunit*.xml 126 | 127 | contributing 128 | user_guide_src 129 | tests 130 | PULL_REQUEST_TEMPLATE.md 131 | CODE_OF_CONDUCT.md 132 | contributing.md 133 | .github -------------------------------------------------------------------------------- /.htaccess: -------------------------------------------------------------------------------- 1 | # Disable directory browsing 2 | Options All -Indexes 3 | 4 | # ---------------------------------------------------------------------- 5 | # Rewrite engine 6 | # ---------------------------------------------------------------------- 7 | 8 | # Turning on the rewrite engine is necessary for the following rules and features. 9 | # FollowSymLinks must be enabled for this to work. 10 | 11 | Options +FollowSymlinks 12 | RewriteEngine On 13 | 14 | # If you installed CodeIgniter in a subfolder, you will need to 15 | # change the following line to match the subfolder you need. 16 | # http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase 17 | # RewriteBase / 18 | 19 | # Redirect Trailing Slashes... 20 | RewriteRule ^(.*)/$ /$1 [L,R=301] 21 | 22 | # Rewrite "www.example.com -> example.com" 23 | RewriteCond %{HTTPS} !=on 24 | RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 25 | RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L] 26 | 27 | # Checks to see if the user is attempting to access a valid file, 28 | # such as an image or css document, if this isn't true it sends the 29 | # request to the front controller, index.php 30 | RewriteCond %{REQUEST_FILENAME} !-f 31 | RewriteCond %{REQUEST_FILENAME} !-d 32 | RewriteRule ^(.*)$ index.php/$1 [L] 33 | 34 | # Ensure Authorization header is passed along 35 | RewriteCond %{HTTP:Authorization} . 36 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 37 | 38 | 39 | 40 | # If we don't have mod_rewrite installed, all 404's 41 | # can be sent to index.php, and everything works as normal. 42 | ErrorDocument 404 index.php 43 | 44 | 45 | # Disable server signature start 46 | ServerSignature Off 47 | # Disable server signature end] -------------------------------------------------------------------------------- /.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flavea/ci4-vue/26a5dea312863ec843d6605d2ef4c14d49fd82b1/.nojekyll -------------------------------------------------------------------------------- /DCO.txt: -------------------------------------------------------------------------------- 1 | Developer's Certificate of Origin 1.1 2 | 3 | By making a contribution to this project, I certify that: 4 | 5 | (1) The contribution was created in whole or in part by me and I 6 | have the right to submit it under the open source license 7 | indicated in the file; or 8 | 9 | (2) The contribution is based upon previous work that, to the best 10 | of my knowledge, is covered under an appropriate open source 11 | license and I have the right under that license to submit that 12 | work with modifications, whether created in whole or in part 13 | by me, under the same open source license (unless I am 14 | permitted to submit under a different license), as indicated 15 | in the file; or 16 | 17 | (3) The contribution was provided directly to me by some other 18 | person who certified (1), (2) or (3) and I have not modified 19 | it. 20 | 21 | (4) I understand and agree that this project and the contribution 22 | are public and that a record of the contribution (including all 23 | personal information I submit with it, including my sign-off) is 24 | maintained indefinitely and may be redistributed consistent with 25 | this project or the open source license(s) involved. 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CodeIgniter - Vue.js Starter 2 | > Initial packages to create SPA website with CodeIgniter 4 dan Vue.js. For CodeIgniter 3, check [here](https://github.com/flavea/ci-vue-starter) or [here](https://github.com/andriannus/ci-vue-starter) 3 | 4 | ## Limitation 5 | Currently only works with hash route mode. 6 | 7 | ## Detail 8 | 1. [CodeIgniter 4](https://github.com/codeigniter4/CodeIgniter4). I don't include some CI4 folders here: contributing, test, user_guide_src, .github 9 | 2. [Vue.js 2.6.10](https://vuejs.org) with webpack template 10 | 3. Node.js (> 6.0.0) and npm (> 3.0.0) 11 | 12 | ## How to Run 13 | 14 | 1. Copy env and rename it as .env. Set the environment to development, uncomment other variables to set url and database. 15 | 16 | 2. Set your application url on `app/Config/App.php` 17 | 18 | 3. Setup Database 19 | For this example, we use mySQL. First, create a mySQL database and then setup your database connection by editing `app/Config/Database.php` or use the env file. 20 | 21 | 4. Run migrations and seed. 22 | ``` 23 | # ci4-vue 24 | 25 | php spark migrate:latest -g default && sudo php spark db:seeder BookSeeder 26 | ``` 27 | 28 | 5. Install `node_modules` on `ci4-vue/client` 29 | ``` 30 | # ci4-vue/client 31 | 32 | npm install 33 | ``` 34 | 35 | 6. Development 36 | In this step, we are developing the vue app, codeigniter is not running or used yet. To run this, use the following command (Administrator access might be needed). 37 | ``` 38 | # ci4-vue/client 39 | 40 | npm run dev 41 | ``` 42 | 43 | 7. Production 44 | After developing the vue app, we can build the app and then run codeigniter 45 | 46 | ``` 47 | # ci4-vue/client 48 | 49 | npm run build 50 | ``` 51 | 52 | this will generate `dist` folder and `app/Views/index.php` file. To run, visit: `{host}/ci4-vue/` 53 | 54 | ## Other 55 | 1. All of above commands are run on `CMD` (Windows) or `terminal` on Linux/Mac 56 | 2. Contoller `Api/books` (using database) and `Api/ping` (not using database) is just an example of REST Controller. We are using filters to limit access to those apis. To update the filters, edit `app/Config/Filters.php` and the filters code are in `app/Filters` 57 | 3. For Axios, you can edit the base URL in `client/main.js` 58 | -------------------------------------------------------------------------------- /admin/alldocs: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Rebuild and deploy all CodeIgniter4 docs 4 | # 5 | 6 | . admin/docbot $1 7 | . admin/apibot $1 -------------------------------------------------------------------------------- /admin/apibot: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Rebuild and deploy CodeIgniter4 under-development user guide 4 | # 5 | # This is a quick way to test user guide changes, and if they 6 | # look good, to push them to the gh-pages branch of the 7 | # development repository. 8 | # 9 | # This is not meant for updating the "stable" user guide. 10 | 11 | UPSTREAM=https://github.com/codeigniter4/api.git 12 | 13 | # Prepare the nested repo clone folder 14 | rm -rf build/api* 15 | mkdir -p build/api/docs 16 | 17 | # Get ready for git 18 | cd build/api 19 | git init 20 | git remote add origin $UPSTREAM 21 | git fetch 22 | git checkout master 23 | git reset --hard origin/master 24 | rm -r docs/* 25 | 26 | # Make the new user guide 27 | cd ../.. 28 | phpdoc 29 | cp -R api/build/* build/api/docs 30 | 31 | # All done? 32 | if [ $# -lt 1 ]; then 33 | exit 0 34 | fi 35 | 36 | # Optionally update the remote repo 37 | if [ $1 = "deploy" ]; then 38 | cd build/api 39 | git add . 40 | git commit -S -m "APIbot synching" 41 | git push -f origin master 42 | fi -------------------------------------------------------------------------------- /admin/apibot.md: -------------------------------------------------------------------------------- 1 | # apibot 2 | 3 | Builds & deploys API docs. 4 | 5 | The in-progress CI4 API docs, warts & all, are rebuilt and 6 | then copied to a nested 7 | repository clone (`build/api`), with the result 8 | optionally pushed to the `master` branch of the `api` repo. 9 | That would then be publically visible as the in-progress 10 | version of the [API](https://codeigniter4.github.io/api/). 11 | 12 | ## Requirements 13 | 14 | You must have phpDocumentor installed, with a `phpdoc` alias installed globally. 15 | 16 | ## Audience 17 | 18 | This script is intended for use by framework maintainers, 19 | i.e. someone with commit rights on the CI4 repository. 20 | 21 | You will be prompted for your github credentials and 22 | GPG-signing key as appropriate. 23 | 24 | ## Usage 25 | 26 | Inside a shell prompt, in the project root: 27 | 28 | `admin/apibot [deploy]` 29 | 30 | If "deploy" is not added, the script execution is considered 31 | a trial run, and nothing is pushed to the repo. 32 | 33 | Whether or not deployed, the results are left inside 34 | `build/api` (which is git ignored). 35 | 36 | Generate these and the userguide together with the 'alldocs' script. 37 | -------------------------------------------------------------------------------- /admin/docbot: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Rebuild and deploy CodeIgniter4 under-development user guide 4 | # 5 | # This is a quick way to test user guide changes, and if they 6 | # look good, to push them to the gh-pages branch of the 7 | # development repository. 8 | # 9 | # This is not meant for updating the "stable" user guide. 10 | 11 | UPSTREAM=https://github.com/codeigniter4/CodeIgniter4.git 12 | 13 | # Prepare the nested repo clone folder 14 | cd user_guide_src 15 | rm -rf build/* 16 | mkdir build/html 17 | 18 | # Get ready for git 19 | cd build/html 20 | git init 21 | git remote add origin $UPSTREAM 22 | git fetch 23 | git checkout gh-pages 24 | git reset --hard origin/gh-pages 25 | rm -r * 26 | 27 | # Make the new user guide 28 | cd ../.. 29 | make html 30 | 31 | # All done? 32 | if [ $# -lt 1 ]; then 33 | exit 0 34 | fi 35 | 36 | # Optionally update the remote repo 37 | if [ $1 = "deploy" ]; then 38 | cd build/html 39 | git add . 40 | git commit -S -m "Docbot synching" 41 | git push -f origin gh-pages 42 | fi -------------------------------------------------------------------------------- /admin/docbot.md: -------------------------------------------------------------------------------- 1 | # docbot 2 | 3 | Builds & deploys user guide. 4 | 5 | The in-progress CI4 user guide, warts & all, is rebuilt in a nested 6 | repository clone (`user_guide_src/build/html`), with the result 7 | optionally pushed to the `gh-pages` branch of the repo. 8 | That would then be publically visible as the in-progress 9 | version of the [User Guide](https://codeigniter4.github.io/CodeIgniter4/). 10 | 11 | ## Requirements 12 | 13 | You must have python & sphinx installed. 14 | 15 | ## Audience 16 | 17 | This script is intended for use by framework maintainers, 18 | i.e. someone with commit rights on the CI4 repository. 19 | 20 | This script wraps the conventional user guide building, 21 | i.e. `user_guide_src/make html`, with additional 22 | steps. 23 | 24 | You will be prompted for your github credentials and 25 | GPG-signing key as appropriate. 26 | 27 | ## Usage 28 | 29 | Inside a shell prompt, in the project root: 30 | 31 | `admin/docbot [deploy]` 32 | 33 | If "deploy" is not added, the script execution is considered 34 | a trial run, and nothing is pushed to the repo. 35 | 36 | Whether or not deployed, the results are left inside 37 | user_guide_src/build (which is git ignored). 38 | 39 | Generate these and the API docs together with the 'alldocs' script. 40 | -------------------------------------------------------------------------------- /admin/framework/README.md: -------------------------------------------------------------------------------- 1 | # CodeIgniter 4 Framework 2 | 3 | ## What is CodeIgniter? 4 | 5 | CodeIgniter is a PHP full-stack web framework that is light, fast, flexible, and secure. 6 | More information can be found at the [official site](http://codeigniter.com). 7 | 8 | This repository holds the distributable version of the framework, 9 | including the user guide. It has been built from the 10 | [development repository](https://github.com/codeigniter4/CodeIgniter4). 11 | 12 | **This is pre-release code and should not be used in production sites.** 13 | 14 | More information about the plans for version 4 can be found in [the announcement](http://forum.codeigniter.com/thread-62615.html) on the forums. 15 | 16 | The user guide corresponding to this version of the framework can be found 17 | [here](https://codeigniter4.github.io/userguide/). 18 | 19 | 20 | ## Important Change with index.php 21 | 22 | `index.php` is no longer in the root of the project! It has been moved inside the *public* folder, 23 | for better security and separation of components. 24 | 25 | This means that you should configure your web server to "point" to your project's *public* folder, and 26 | not to the project root. A better practice would be to configure a virtual host to point there. A poor practice would be to point your web server to the project root and expect to enter *public/...*, as the rest of your logic and the 27 | framework are exposed. 28 | 29 | **Please** read the user guide for a better explanation of how CI4 works! 30 | The user guide updating and deployment is a bit awkward at the moment, but we are working on it! 31 | 32 | ## Repository Management 33 | 34 | We use Github issues, in our main repository, to track **BUGS** and to track approved **DEVELOPMENT** work packages. 35 | We use our [forum](http://forum.codeigniter.com) to provide SUPPORT and to discuss 36 | FEATURE REQUESTS. 37 | 38 | This repository is a "distribution" one, built by our release preparation script. 39 | Problems with it can be raised on our forum, or as issues in the main repository. 40 | 41 | ## Contributing 42 | 43 | We welcome contributions from the community. 44 | 45 | Please read the [*Contributing to CodeIgniter*](https://github.com/codeigniter4/CodeIgniter4/blob/develop/contributing.md) section in the development repository. 46 | 47 | ## Server Requirements 48 | 49 | PHP version 7.2 or higher is required, with the following extensions installed: 50 | 51 | - [intl](http://php.net/manual/en/intl.requirements.php) 52 | - [libcurl](http://php.net/manual/en/curl.requirements.php) if you plan to use the HTTP\CURLRequest library 53 | 54 | Additionally, make sure that the following extensions are enabled in your PHP: 55 | 56 | - json (enabled by default - don't turn it off) 57 | - [mbstring](http://php.net/manual/en/mbstring.installation.php) 58 | - [mysqlnd](http://php.net/manual/en/mysqlnd.install.php) 59 | - xml (enabled by default - don't turn it off) 60 | -------------------------------------------------------------------------------- /admin/framework/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codeigniter4/framework", 3 | "type": "project", 4 | "description": "The CodeIgniter framework v4", 5 | "homepage": "https://codeigniter.com", 6 | "license": "MIT", 7 | "require": { 8 | "php": ">=7.2", 9 | "ext-curl": "*", 10 | "ext-intl": "*", 11 | "kint-php/kint": "^2.1", 12 | "psr/log": "^1.1", 13 | "zendframework/zend-escaper": "^2.5" 14 | }, 15 | "require-dev": { 16 | "codeigniter4/codeigniter4-standard": "^1.0", 17 | "mikey179/vfsstream": "1.6.*", 18 | "phpunit/phpunit": "^7.0", 19 | "squizlabs/php_codesniffer": "^3.3" 20 | }, 21 | "autoload": { 22 | "psr-4": { 23 | "CodeIgniter\\": "system/" 24 | } 25 | }, 26 | "scripts": { 27 | "post-update-cmd": [ 28 | "@composer dump-autoload", 29 | "CodeIgniter\\ComposerScripts::postUpdate" 30 | ] 31 | }, 32 | "support": { 33 | "forum": "http://forum.codeigniter.com/", 34 | "source": "https://github.com/codeigniter4/CodeIgniter4", 35 | "slack": "https://codeigniterchat.slack.com" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /admin/framework/phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | ./tests 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /admin/next.rst: -------------------------------------------------------------------------------- 1 | Version |version| 2 | ==================================================== 3 | 4 | Release Date: Not released 5 | 6 | **Next alpha release of CodeIgniter4** 7 | 8 | 9 | The list of changed files follows, with PR numbers shown. 10 | 11 | 12 | PRs merged: 13 | ----------- 14 | 15 | -------------------------------------------------------------------------------- /admin/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | PROJECT=`php -r "echo dirname(dirname(dirname(realpath('$0'))));"` 4 | STAGED_FILES_CMD=`git diff --cached --name-only --diff-filter=ACMR HEAD | grep \\\\.php` 5 | 6 | # Determine if a file list is passed 7 | if [ "$#" -eq 1 ] 8 | then 9 | oIFS=$IFS 10 | IFS=' 11 | ' 12 | SFILES="$1" 13 | IFS=$oIFS 14 | fi 15 | SFILES=${SFILES:-$STAGED_FILES_CMD} 16 | 17 | echo "Checking PHP Lint..." 18 | for FILE in $SFILES 19 | do 20 | php -l -d display_errors=0 $PROJECT/$FILE 21 | if [ $? != 0 ] 22 | then 23 | echo "Fix the error before commit." 24 | exit 1 25 | fi 26 | FILES="$FILES $PROJECT/$FILE" 27 | done 28 | 29 | if [ "$FILES" != "" ] 30 | then 31 | echo "Running Code Sniffer..." 32 | ./vendor/bin/phpcbf --standard=./vendor/codeigniter4/codeigniter4-standard/CodeIgniter4 --encoding=utf-8 -n -p $FILES 33 | fi 34 | 35 | exit $? 36 | -------------------------------------------------------------------------------- /admin/release-appstarter: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Build app starter distributable 4 | 5 | # Setup variables 6 | . admin/release-config 7 | TARGET=dist/appstarter 8 | cd $TARGET 9 | git checkout $branch 10 | 11 | #--------------------------------------------------- 12 | echo -e "${BOLD}Build the framework distributable${NORMAL}" 13 | 14 | echo -e "${BOLD}Copy the main files/folders...${NORMAL}" 15 | releasable='app public writable README.md contributing.md env license.txt spark tests/_support' 16 | for fff in $releasable ; do 17 | if [ -d "$fff" ] ; then 18 | rm -rf $fff 19 | fi 20 | cp -rf ${CI_DIR}/$fff . 21 | done 22 | 23 | rm -rf tests 24 | mkdir tests 25 | cp -rf ${CI_DIR}/tests/_support tests/ 26 | 27 | echo -e "${BOLD}Override as needed...${NORMAL}" 28 | cp -rf ${CI_DIR}/admin/starter/* . 29 | 30 | #--------------------------------------------------- 31 | # And finally, get ready for merging 32 | echo -e "${BOLD}Assemble the pieces...${NORMAL}" 33 | git add . 34 | git commit -S -m "Release ${RELEASE}" 35 | git checkout master 36 | git merge $branch 37 | 38 | cd $CI_DIR 39 | 40 | #--------------------------------------------------- 41 | # Done for now 42 | echo -e "${BOLD}Distributable app starter ready..${NORMAL}" 43 | -------------------------------------------------------------------------------- /admin/release-config: -------------------------------------------------------------------------------- 1 | # Variables used for release building 2 | 3 | if [ -z "$CI_ORG" ]; then 4 | 5 | # Initialize variables 6 | CI_ORG=https://github.com/codeigniter4 7 | CI_DIR=`pwd` 8 | 9 | BOLD='\033[1m' 10 | NORMAL='\033[0m' 11 | COLOR='\033[1;31m' 12 | ERROR='\033[0;31m' 13 | 14 | qualifier= 15 | which=release 16 | 17 | version=$1 18 | if [ $# -gt 1 ]; then 19 | qualifier="-${2}" 20 | which='pre-release' 21 | fi 22 | 23 | RELEASE=$version$qualifier 24 | branch="release-$RELEASE" 25 | 26 | fi 27 | -------------------------------------------------------------------------------- /admin/release-deploy: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Push local changes to github 4 | 5 | echo -e "${BOLD}${COLOR}CodeIgniter4 release deployment${NORMAL}" 6 | echo '-------------------------------' 7 | 8 | . admin/release-config 9 | 10 | echo -e "${BOLD}Merge release into develop${NORMAL}" 11 | git checkout develop 12 | git merge $branch 13 | git push origin develop 14 | git push ${CI_ORG}/CodeIgniter4 develop 15 | 16 | echo -e "${BOLD}Merge develop into master${NORMAL}" 17 | git checkout master 18 | git merge develop 19 | git push origin master 20 | git push ${CI_ORG}/CodeIgniter4 master 21 | 22 | echo -e "${BOLD}Pushing to the user guide repository${NORMAL}" 23 | cd ${CI_DIR}/dist/userguide 24 | git push origin master 25 | 26 | echo -e "${BOLD}Pushing to the framework repository${NORMAL}" 27 | cd ${CI_DIR}/dist/framework 28 | git push origin master 29 | 30 | echo -e "${BOLD}Pushing to the app starter repository${NORMAL}" 31 | cd ${CI_DIR}/dist/appstarter 32 | git push origin master 33 | 34 | cd ${CI_DIR} 35 | 36 | #--------------------------------------------------- 37 | # Phew! 38 | echo -e "${BOLD}Congratulations - we have liftoff${NORMAL}" 39 | echo "Don't forget to announce this release on the forum and on twitter!" 40 | -------------------------------------------------------------------------------- /admin/release-framework: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Build framework distributable 4 | 5 | # Setup variables 6 | . admin/release-config 7 | TARGET=dist/framework 8 | cd $TARGET 9 | git checkout $branch 10 | 11 | #--------------------------------------------------- 12 | echo -e "${BOLD}Build the framework distributable${NORMAL}" 13 | 14 | echo -e "${BOLD}Copy the main files/folders...${NORMAL}" 15 | releasable='app docs public system writable contributing.md env license.txt spark' 16 | for fff in $releasable ; do 17 | if [ -d "$fff" ] ; then 18 | rm -rf $fff 19 | fi 20 | cp -rf ${CI_DIR}/$fff . 21 | done 22 | 23 | echo -e "${BOLD}Override as needed...${NORMAL}" 24 | cprm -rf tests 25 | mkdir tests 26 | cp -rf ${CI_DIR}/tests/_support tests/ 27 | 28 | -rf ${CI_DIR}/admin/framework/* . 29 | 30 | #--------------------------------------------------- 31 | # And finally, get ready for merging 32 | echo -e "${BOLD}Assemble the pieces...${NORMAL}" 33 | git add . 34 | git commit -S -m "Release ${RELEASE}" 35 | git checkout master 36 | git merge $branch 37 | 38 | cd $CI_DIR 39 | 40 | #--------------------------------------------------- 41 | # Done for now 42 | echo -e "${BOLD}Distributable framework ready..${NORMAL}" 43 | -------------------------------------------------------------------------------- /admin/release-notes.bb: -------------------------------------------------------------------------------- 1 | CAUTION: THIS FILE IS A MIX OF BBCODE & MARKDOWN... NEEDS PROOFING 2 | 3 | CodeIgniter-4.0.0-alpha.1 launches today, after a lengthy build-up :) 4 | 5 | Huge shoutout to Lonnie Ezell for all of his hard work getting the vision 6 | and the core implementation in place! 7 | 8 | This is an early pre-release of 4.0.0. It is not suitable for production! 9 | 10 | There are several possible downloads, that you can see on the 11 | [url=https://github.com/codeigniter4/CodeIgniter4/releases/tag/v4.0.0-alpha.1]release page[/url]) 12 | 13 | - the runnable versions as a 14 | [zip](https://github.com/codeigniter4/CodeIgniter4/releases/download/v4.0.0-alpha.1/CodeIgniter-4.0.0-alpha.1.zip) or a 15 | [tarball](https://github.com/codeigniter4/CodeIgniter4/releases/download/v4.0.0-alpha.1/CodeIgniter-4.0.0-alpha.1.tar.gz)/ 16 | - the developer versions of the framework (with contributor components) as 17 | a [zip](https://github.com/codeigniter4/CodeIgniter4/archive/v4.0.0-alpha.1.zip) or a 18 | [tarball](https://github.com/codeigniter4/CodeIgniter4/archive/v4.0.0-alpha.1.tar.gz)/ 19 | - and finally the [epub](https://github.com/codeigniter4/CodeIgniter4/releases/download/v4.0.0-alpha.1/CodeIgniter-4.0.0-alpha.1.epub) version of the user guide for this release. 20 | 21 | The release has all the major features in place, but there are still gaps 22 | and issues. See ... 23 | 24 | - [Bugs in the 4.0.0-alpha.1](https://github.com/codeigniter4/CodeIgniter4/issues?q=is%3Aopen+is%3Aissue+milestone%3A4.0.0-alpha) 25 | - [Things that we definitely want to see fixed before first proper release](https://github.com/codeigniter4/CodeIgniter4/issues?q=is%3Aopen+is%3Aissue+milestone%3A4.0.0) 26 | - [Features we would like to see in the initial proper release](), if possible, else the next update to it 27 | - [Features that we are consciously deferring to later](https://github.com/codeigniter4/CodeIgniter4/issues?q=is%3Aopen+is%3Aissue+milestone%3A4.1.0) 28 | 29 | What we need now is feedback from the community ... 30 | 31 | - What doesn't work well (raise a post in [url=https://forum.codeigniter.com/forum-27.html]CodeIgniter 4 Development[/url]). 32 | If you have found a bug, then by all means create a new issue on the repo. 33 | - What you think is missing (raise a post in [url=https://forum.codeigniter.com/forum-29.html]CodeIgniter 4 Feature Requests[/url]) 34 | We will soon start the [url=https://forum.codeigniter.com/forum-33.html]candidate new feature[/url] posts, 35 | for those items in the feature requests forum that appear to have traction 36 | - Problems that you are having using the release (raise a post in [url=https://forum.codeigniter.com/forum-30.html]CodeIgniter 4 Support[/url]) 37 | Do NOT create repo issues with support questions - we are using github for bug and work package tracking 38 | 39 | Do NOT post support questions or feature requests in response to this thread - those 40 | will be deleted. We are trying to make the best of the 41 | limited resources that we have! 42 | 43 | Thank you, and ENJOY! -------------------------------------------------------------------------------- /admin/release-revert: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Revert local repos to pre-release state 4 | echo -e "${BOLD}${COLOR}CodeIgniter4 release revert${NORMAL}" 5 | echo '---------------------------' 6 | 7 | if [ $# -lt 2 ]; then 8 | echo "You forgot the magic word" 9 | exit 1 10 | fi 11 | if [ $1 != 'please' ]; then 12 | echo "What do you say?" 13 | exit 1 14 | fi 15 | 16 | . admin/release-config 17 | 18 | echo -e "${BOLD}Reverting the main repository${NORMAL}" 19 | git checkout master 20 | git pull -f ${CI_ORG}/CodeIgniter4 master 21 | git checkout develop 22 | git pull -f${CI_ORG}/CodeIgniter4 develop 23 | 24 | #--------------------------------------------------- 25 | # Phew! 26 | echo -e "${BOLD}Congratulations - we have aborted liftoff${NORMAL}" 27 | -------------------------------------------------------------------------------- /admin/release-userguide: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Build user guide distributable 4 | 5 | # Setup variables 6 | . admin/release-config 7 | TARGET=dist/userguide 8 | cd $TARGET 9 | git checkout $branch 10 | 11 | #--------------------------------------------------- 12 | echo -e "${BOLD}Build the user guide distributable${NORMAL}" 13 | 14 | cp -rf ${CI_DIR}/user_guide_src/build/html/* docs 15 | cp -rf ${CI_DIR}/user_guide_src/build/epub/CodeIgniter4.epub ./CodeIgniter${RELEASE}.epub 16 | 17 | #--------------------------------------------------- 18 | # And finally, get ready for merging 19 | echo -e "${BOLD}Assemble the pieces...${NORMAL}" 20 | git add . 21 | git commit -S -m "Release ${RELEASE}" 22 | git checkout master 23 | git merge $branch 24 | 25 | cd $CI_DIR 26 | 27 | #--------------------------------------------------- 28 | # Done for now 29 | echo -e "${BOLD}Distributable user guide ready..${NORMAL}" 30 | -------------------------------------------------------------------------------- /admin/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Install a pre-commit hook that 4 | # automatically runs phpcs to fix styles 5 | cp admin/pre-commit .git/hooks/pre-commit 6 | chmod +x .git/hooks/pre-commit 7 | -------------------------------------------------------------------------------- /admin/starter/.gitignore: -------------------------------------------------------------------------------- 1 | #------------------------- 2 | # Operating Specific Junk Files 3 | #------------------------- 4 | 5 | # OS X 6 | .DS_Store 7 | .AppleDouble 8 | .LSOverride 9 | 10 | # OS X Thumbnails 11 | ._* 12 | 13 | # Windows image file caches 14 | Thumbs.db 15 | ehthumbs.db 16 | Desktop.ini 17 | 18 | # Recycle Bin used on file shares 19 | $RECYCLE.BIN/ 20 | 21 | # Windows Installer files 22 | *.cab 23 | *.msi 24 | *.msm 25 | *.msp 26 | 27 | # Windows shortcuts 28 | *.lnk 29 | 30 | # Linux 31 | *~ 32 | 33 | # KDE directory preferences 34 | .directory 35 | 36 | # Linux trash folder which might appear on any partition or disk 37 | .Trash-* 38 | 39 | #------------------------- 40 | # Environment Files 41 | #------------------------- 42 | # These should never be under version control, 43 | # as it poses a security risk. 44 | .env 45 | .vagrant 46 | Vagrantfile 47 | 48 | #------------------------- 49 | # Temporary Files 50 | #------------------------- 51 | writable/cache/* 52 | !writable/cache/index.html 53 | 54 | writable/logs/* 55 | !writable/logs/index.html 56 | 57 | writable/session/* 58 | !writable/session/index.html 59 | 60 | writable/uploads/* 61 | !writable/uploads/index.html 62 | 63 | writable/debugbar/* 64 | 65 | php_errors.log 66 | 67 | #------------------------- 68 | # User Guide Temp Files 69 | #------------------------- 70 | user_guide_src/build/* 71 | user_guide_src/cilexer/build/* 72 | user_guide_src/cilexer/dist/* 73 | user_guide_src/cilexer/pycilexer.egg-info/* 74 | 75 | #------------------------- 76 | # Test Files 77 | #------------------------- 78 | tests/coverage* 79 | 80 | # Don't save phpunit under version control. 81 | phpunit 82 | 83 | #------------------------- 84 | # Composer 85 | #------------------------- 86 | vendor/ 87 | composer.lock 88 | 89 | #------------------------- 90 | # IDE / Development Files 91 | #------------------------- 92 | 93 | # Modules Testing 94 | _modules/* 95 | 96 | # phpenv local config 97 | .php-version 98 | 99 | # Jetbrains editors (PHPStorm, etc) 100 | .idea/ 101 | *.iml 102 | 103 | # Netbeans 104 | nbproject/ 105 | build/ 106 | nbbuild/ 107 | dist/ 108 | nbdist/ 109 | nbactions.xml 110 | nb-configuration.xml 111 | .nb-gradle/ 112 | 113 | # Sublime Text 114 | *.tmlanguage.cache 115 | *.tmPreferences.cache 116 | *.stTheme.cache 117 | *.sublime-workspace 118 | *.sublime-project 119 | .phpintel 120 | /api/ 121 | 122 | # Visual Studio Code 123 | .vscode/ 124 | 125 | /results/ 126 | /phpunit*.xml -------------------------------------------------------------------------------- /admin/starter/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codeigniter4/appstarter", 3 | "type": "project", 4 | "description": "CodeIgniter4 starter app", 5 | "homepage": "https://codeigniter.com", 6 | "license": "MIT", 7 | "require": { 8 | "php": ">=7.2", 9 | "codeigniter4/framework": "^4@beta" 10 | }, 11 | "require-dev": { 12 | "mikey179/vfsstream": "1.6.*", 13 | "phpunit/phpunit": "^7.0" 14 | }, 15 | "scripts": { 16 | "post-update-cmd": [ 17 | "@composer dump-autoload" 18 | ] 19 | }, 20 | "support": { 21 | "forum": "http://forum.codeigniter.com/", 22 | "source": "https://github.com/codeigniter4/CodeIgniter4", 23 | "slack": "https://codeigniterchat.slack.com" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /admin/starter/phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | ./tests 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /admin/userguide/README.md: -------------------------------------------------------------------------------- 1 | # CodeIgniter 4 User Guide 2 | 3 | ## What is CodeIgniter? 4 | 5 | CodeIgniter is a PHP full-stack web framework that is light, fast, flexible, and secure. 6 | More information can be found at the [official site](http://codeigniter.com). 7 | 8 | This repository holds a composer-installable pre-built user guide for the framework. 9 | It has been built from the 10 | [development repository](https://github.com/codeigniter4/CodeIgniter4). 11 | 12 | **This is pre-release code and should not be used in production sites.** 13 | 14 | More information about the plans for version 4 can be found in [the announcement](http://forum.codeigniter.com/thread-62615.html) on the forums. 15 | 16 | ##Installation & updates 17 | 18 | `composer require codeigniter4/userguide` will install a copy 19 | of the user guide inside your project, at 20 | `vendor/codeigniter4/userguide`. You can then `composer update` whenever 21 | there is a new release of the framework. 22 | 23 | -------------------------------------------------------------------------------- /admin/userguide/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codeigniter4/userguide", 3 | "type": "project", 4 | "description": "CodeIgniter4 user guide", 5 | "homepage": "https://codeigniter.com", 6 | "license": "MIT", 7 | "require": { 8 | "php": ">=7.2", 9 | "codeigniter4/framework": "^4" 10 | }, 11 | "support": { 12 | "forum": "http://forum.codeigniter.com/", 13 | "source": "https://github.com/codeigniter4/CodeIgniter4", 14 | "slack": "https://codeigniterchat.slack.com" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | Require all denied 3 | 4 | 5 | Deny from all 6 | 7 | -------------------------------------------------------------------------------- /app/Config/Boot/development.php: -------------------------------------------------------------------------------- 1 | '', 34 | 'hostname' => '', 35 | 'username' => '', 36 | 'password' => '', 37 | 'database' => '', 38 | 'DBDriver' => 'MySQLi', 39 | 'DBPrefix' => '', 40 | 'pConnect' => false, 41 | 'DBDebug' => (ENVIRONMENT !== 'production'), 42 | 'cacheOn' => false, 43 | 'cacheDir' => '', 44 | 'charset' => 'utf8', 45 | 'DBCollat' => 'utf8_general_ci', 46 | 'swapPre' => '', 47 | 'encrypt' => false, 48 | 'compress' => false, 49 | 'strictOn' => false, 50 | 'failover' => [], 51 | 'port' => 3306, 52 | ]; 53 | 54 | /** 55 | * This database connection is used when 56 | * running PHPUnit database tests. 57 | * 58 | * @var array 59 | */ 60 | public $tests = [ 61 | 'DSN' => '', 62 | 'hostname' => '127.0.0.1', 63 | 'username' => '', 64 | 'password' => '', 65 | 'database' => '', 66 | 'DBDriver' => '', 67 | 'DBPrefix' => 'db_', // Needed to ensure we're working correctly with prefixes live. DO NOT REMOVE. 68 | 'pConnect' => false, 69 | 'DBDebug' => (ENVIRONMENT !== 'production'), 70 | 'cacheOn' => false, 71 | 'cacheDir' => '', 72 | 'charset' => 'utf8', 73 | 'DBCollat' => 'utf8_general_ci', 74 | 'swapPre' => '', 75 | 'encrypt' => false, 76 | 'compress' => false, 77 | 'strictOn' => false, 78 | 'failover' => [], 79 | 'port' => 3306, 80 | ]; 81 | 82 | //-------------------------------------------------------------------- 83 | 84 | public function __construct() 85 | { 86 | parent::__construct(); 87 | 88 | // Ensure that we always set the database group to 'tests' if 89 | // we are currently running an automated test suite, so that 90 | // we don't overwrite live data on accident. 91 | if (ENVIRONMENT === 'testing') 92 | { 93 | $this->defaultGroup = 'tests'; 94 | 95 | // Under Travis-CI, we can set an ENV var named 'DB_GROUP' 96 | // so that we can test against multiple databases. 97 | if ($group = getenv('DB')) 98 | { 99 | if (is_file(TESTPATH . 'travis/Database.php')) 100 | { 101 | require TESTPATH . 'travis/Database.php'; 102 | 103 | if (! empty($dbconfig) && array_key_exists($group, $dbconfig)) 104 | { 105 | $this->tests = $dbconfig[$group]; 106 | } 107 | } 108 | } 109 | } 110 | } 111 | 112 | //-------------------------------------------------------------------- 113 | 114 | } 115 | -------------------------------------------------------------------------------- /app/Config/DocTypes.php: -------------------------------------------------------------------------------- 1 | '', 14 | 'xhtml1-strict' => '', 15 | 'xhtml1-trans' => '', 16 | 'xhtml1-frame' => '', 17 | 'xhtml-basic11' => '', 18 | 'html5' => '', 19 | 'html4-strict' => '', 20 | 'html4-trans' => '', 21 | 'html4-frame' => '', 22 | 'mathml1' => '', 23 | 'mathml2' => '', 24 | 'svg10' => '', 25 | 'svg11' => '', 26 | 'svg11-basic' => '', 27 | 'svg11-tiny' => '', 28 | 'xhtml-math-svg-xh' => '', 29 | 'xhtml-math-svg-sh' => '', 30 | 'xhtml-rdfa-1' => '', 31 | 'xhtml-rdfa-2' => '', 32 | ]; 33 | } 34 | -------------------------------------------------------------------------------- /app/Config/Events.php: -------------------------------------------------------------------------------- 1 | 0) 24 | { 25 | \ob_end_flush(); 26 | } 27 | 28 | \ob_start(function ($buffer) { 29 | return $buffer; 30 | }); 31 | 32 | /* 33 | * -------------------------------------------------------------------- 34 | * Debug Toolbar Listeners. 35 | * -------------------------------------------------------------------- 36 | * If you delete, they will no longer be collected. 37 | */ 38 | if (ENVIRONMENT !== 'production') 39 | { 40 | Events::on('DBQuery', 'CodeIgniter\Debug\Toolbar\Collectors\Database::collect'); 41 | Services::toolbar()->respond(); 42 | } 43 | }); 44 | -------------------------------------------------------------------------------- /app/Config/Exceptions.php: -------------------------------------------------------------------------------- 1 | \CodeIgniter\Filters\CSRF::class, 11 | 'toolbar' => \CodeIgniter\Filters\DebugToolbar::class, 12 | 'honeypot' => \CodeIgniter\Filters\Honeypot::class, 13 | 'getOnly' => \App\Filters\GetOnly::class, 14 | 'postOnly' => \App\Filters\PostOnly::class, 15 | 'deleteOnly' => \App\Filters\DeleteOnly::class, 16 | 'updateOnly' => \App\Filters\UpdateOnly::class, 17 | ]; 18 | 19 | // Always applied before every request 20 | public $globals = [ 21 | 'before' => [ 22 | //'honeypot' 23 | // 'csrf', 24 | ], 25 | 'after' => [ 26 | 'toolbar', 27 | //'honeypot' 28 | ], 29 | ]; 30 | 31 | // Works on all of a particular HTTP method 32 | // (GET, POST, etc) as BEFORE filters only 33 | // like: 'post' => ['CSRF', 'throttle'], 34 | public $methods = []; 35 | 36 | // List filter aliases and any before/after uri patterns 37 | // that they should run on, like: 38 | // 'isLoggedIn' => ['before' => ['account/*', 'profiles/*']], 39 | public $filters = [ 40 | 'getOnly' => [ 41 | 'before' => [ 42 | 'api/ping/get', 43 | ], 44 | ], 45 | 'postOnly' => [ 46 | 'before' => [ 47 | 'api/ping/post', 48 | ], 49 | ], 50 | 'deleteOnly' => [ 51 | 'before' => [ 52 | 'api/ping/delete', 53 | ], 54 | ], 55 | 'updateOnly' => [ 56 | 'before' => [ 57 | 'api/ping/update', 58 | ], 59 | ], 60 | ]; 61 | } 62 | -------------------------------------------------------------------------------- /app/Config/ForeignCharacters.php: -------------------------------------------------------------------------------- 1 | \CodeIgniter\Format\JSONFormatter::class, 39 | 'application/xml' => \CodeIgniter\Format\XMLFormatter::class, 40 | 'text/xml' => \CodeIgniter\Format\XMLFormatter::class, 41 | ]; 42 | 43 | //-------------------------------------------------------------------- 44 | 45 | /** 46 | * A Factory method to return the appropriate formatter for the given mime type. 47 | * 48 | * @param string $mime 49 | * 50 | * @return \CodeIgniter\Format\FormatterInterface 51 | */ 52 | public function getFormatter(string $mime) 53 | { 54 | if (! array_key_exists($mime, $this->formatters)) 55 | { 56 | throw new \InvalidArgumentException('No Formatter defined for mime type: ' . $mime); 57 | } 58 | 59 | $class = $this->formatters[$mime]; 60 | 61 | if (! class_exists($class)) 62 | { 63 | throw new \BadMethodCallException($class . ' is not a valid Formatter.'); 64 | } 65 | 66 | return new $class(); 67 | } 68 | 69 | //-------------------------------------------------------------------- 70 | 71 | } 72 | -------------------------------------------------------------------------------- /app/Config/Honeypot.php: -------------------------------------------------------------------------------- 1 | {label}'; 34 | } 35 | -------------------------------------------------------------------------------- /app/Config/Images.php: -------------------------------------------------------------------------------- 1 | \CodeIgniter\Images\Handlers\GDHandler::class, 29 | 'imagick' => \CodeIgniter\Images\Handlers\ImageMagickHandler::class, 30 | ]; 31 | } 32 | -------------------------------------------------------------------------------- /app/Config/Migrations.php: -------------------------------------------------------------------------------- 1 | migration->current() this is the version that schema will 58 | | be upgraded / downgraded to. 59 | | 60 | */ 61 | public $currentVersion = 001; 62 | 63 | } 64 | -------------------------------------------------------------------------------- /app/Config/Modules.php: -------------------------------------------------------------------------------- 1 | enabled) 59 | { 60 | return false; 61 | } 62 | 63 | $alias = strtolower($alias); 64 | 65 | return in_array($alias, $this->activeExplorers); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /app/Config/Pager.php: -------------------------------------------------------------------------------- 1 | 'CodeIgniter\Pager\Views\default_full', 22 | 'default_simple' => 'CodeIgniter\Pager\Views\default_simple', 23 | 'default_head' => 'CodeIgniter\Pager\Views\default_head', 24 | ]; 25 | 26 | /* 27 | |-------------------------------------------------------------------------- 28 | | Items Per Page 29 | |-------------------------------------------------------------------------- 30 | | 31 | | The default number of results shown in a single page. 32 | | 33 | */ 34 | public $perPage = 20; 35 | } 36 | -------------------------------------------------------------------------------- /app/Config/Services.php: -------------------------------------------------------------------------------- 1 | 'CodeIgniter\Validation\Views\list', 30 | 'single' => 'CodeIgniter\Validation\Views\single', 31 | ]; 32 | 33 | //-------------------------------------------------------------------- 34 | // Rules 35 | //-------------------------------------------------------------------- 36 | } 37 | -------------------------------------------------------------------------------- /app/Config/View.php: -------------------------------------------------------------------------------- 1 | respond(['books' => $model->getAllBooks()]); 17 | } 18 | } -------------------------------------------------------------------------------- /app/Controllers/Api/Ping.php: -------------------------------------------------------------------------------- 1 | respond(['pong' => time(), 'message' => "This is a get request."]); 17 | } 18 | 19 | public function post(): ResponseInterface 20 | { 21 | return $this->respond(['pong' => time(), 'message' => "This is a post request."]); 22 | } 23 | 24 | public function update(): ResponseInterface 25 | { 26 | return $this->respond(['pong' => time(), 'message' => "This is a update request."]); 27 | } 28 | 29 | public function delete(): ResponseInterface 30 | { 31 | return $this->respond(['pong' => time(), 'message' => "This is a delete request."]); 32 | } 33 | } -------------------------------------------------------------------------------- /app/Controllers/BaseController.php: -------------------------------------------------------------------------------- 1 | session = \Config\Services::session(); 44 | 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/Controllers/Home.php: -------------------------------------------------------------------------------- 1 | forge->addField([ 7 | 'book_id' => [ 8 | 'type' => 'INT', 9 | 'constraint' => 5, 10 | 'unsigned' => TRUE, 11 | 'auto_increment' => TRUE 12 | ], 13 | 'book_title' => [ 14 | 'type' => 'VARCHAR', 15 | 'constraint' => '200', 16 | ], 17 | 'book_author' => [ 18 | 'type' => 'VARCHAR', 19 | 'constraint' => '200', 20 | ], 21 | ]); 22 | $this->forge->addKey('book_id', TRUE); 23 | $this->forge->createTable('books'); 24 | } 25 | 26 | public function down() 27 | { 28 | $this->forge->dropTable('books'); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/Database/Seeds/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flavea/ci4-vue/26a5dea312863ec843d6605d2ef4c14d49fd82b1/app/Database/Seeds/.gitkeep -------------------------------------------------------------------------------- /app/Database/Seeds/BookSeeder.php: -------------------------------------------------------------------------------- 1 | 'The Famous Five', 9 | 'book_author' => 'Enid Blyton' 10 | ]; 11 | 12 | $this->db->table('books')->insert($data); 13 | } 14 | } -------------------------------------------------------------------------------- /app/Filters/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flavea/ci4-vue/26a5dea312863ec843d6605d2ef4c14d49fd82b1/app/Filters/.gitkeep -------------------------------------------------------------------------------- /app/Filters/DeleteOnly.php: -------------------------------------------------------------------------------- 1 | getMethod() === 'delete') { 14 | return; 15 | } 16 | 17 | return Services::response() 18 | ->setStatusCode(ResponseInterface::HTTP_METHOD_NOT_ALLOWED); 19 | } 20 | 21 | public function after(RequestInterface $request, ResponseInterface $response) 22 | { 23 | } 24 | } -------------------------------------------------------------------------------- /app/Filters/GetOnly.php: -------------------------------------------------------------------------------- 1 | getMethod() === 'get') { 14 | return; 15 | } 16 | 17 | return Services::response() 18 | ->setStatusCode(ResponseInterface::HTTP_METHOD_NOT_ALLOWED); 19 | } 20 | 21 | public function after(RequestInterface $request, ResponseInterface $response) 22 | { 23 | } 24 | } -------------------------------------------------------------------------------- /app/Filters/PostOnly.php: -------------------------------------------------------------------------------- 1 | getMethod() === 'post') { 14 | return; 15 | } 16 | 17 | return Services::response() 18 | ->setStatusCode(ResponseInterface::HTTP_METHOD_NOT_ALLOWED); 19 | } 20 | 21 | public function after(RequestInterface $request, ResponseInterface $response) 22 | { 23 | } 24 | } -------------------------------------------------------------------------------- /app/Filters/UpdateOnly.php: -------------------------------------------------------------------------------- 1 | getMethod() === 'put') { 14 | return; 15 | } 16 | 17 | return Services::response() 18 | ->setStatusCode(ResponseInterface::HTTP_METHOD_NOT_ALLOWED); 19 | } 20 | 21 | public function after(RequestInterface $request, ResponseInterface $response) 22 | { 23 | } 24 | } -------------------------------------------------------------------------------- /app/Helpers/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flavea/ci4-vue/26a5dea312863ec843d6605d2ef4c14d49fd82b1/app/Helpers/.gitkeep -------------------------------------------------------------------------------- /app/Language/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flavea/ci4-vue/26a5dea312863ec843d6605d2ef4c14d49fd82b1/app/Language/.gitkeep -------------------------------------------------------------------------------- /app/Libraries/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flavea/ci4-vue/26a5dea312863ec843d6605d2ef4c14d49fd82b1/app/Libraries/.gitkeep -------------------------------------------------------------------------------- /app/Models/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flavea/ci4-vue/26a5dea312863ec843d6605d2ef4c14d49fd82b1/app/Models/.gitkeep -------------------------------------------------------------------------------- /app/Models/BookModel.php: -------------------------------------------------------------------------------- 1 | findAll(); 12 | } 13 | } -------------------------------------------------------------------------------- /app/ThirdParty/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flavea/ci4-vue/26a5dea312863ec843d6605d2ef4c14d49fd82b1/app/ThirdParty/.gitkeep -------------------------------------------------------------------------------- /app/Views/.gitignore: -------------------------------------------------------------------------------- 1 | index.php -------------------------------------------------------------------------------- /app/Views/errors/cli/error_404.php: -------------------------------------------------------------------------------- 1 | 4 | Message: 5 | Filename: getFile(), "\n"; ?> 6 | Line Number: getLine(); ?> 7 | 8 | 9 | 10 | Backtrace: 11 | getTrace() as $error): ?> 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/Views/errors/cli/production.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 404 Page Not Found 6 | 7 | 70 | 71 | 72 |
73 |

404 - File Not Found

74 | 75 |

76 | 77 | 78 | 79 | Sorry! Cannot seem to find the page you were looking for. 80 | 81 |

82 |
83 | 84 | 85 | -------------------------------------------------------------------------------- /app/Views/errors/html/production.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Whoops! 8 | 9 | 12 | 13 | 14 | 15 |
16 | 17 |

Whoops!

18 | 19 |

We seem to have hit a snag. Please try again later...

20 | 21 |
22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /client/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-vue-jsx", "transform-runtime"] 12 | } 13 | -------------------------------------------------------------------------------- /client/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /client/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | /dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Editor directories and files 9 | .idea 10 | .vscode 11 | *.suo 12 | *.ntvs* 13 | *.njsproj 14 | *.sln 15 | -------------------------------------------------------------------------------- /client/.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | "postcss-import": {}, 6 | "postcss-url": {}, 7 | // to edit target browsers: use "browserslist" field in package.json 8 | "autoprefixer": {} 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /client/README.md: -------------------------------------------------------------------------------- 1 | # client 2 | 3 | > A Vue.js project 4 | 5 | ## Build Setup 6 | 7 | ``` bash 8 | # install dependencies 9 | npm install 10 | 11 | # serve with hot reload at localhost:8080 12 | npm run dev 13 | 14 | # build for production with minification 15 | npm run build 16 | 17 | # build for production and view the bundle analyzer report 18 | npm run build --report 19 | ``` 20 | 21 | For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). 22 | -------------------------------------------------------------------------------- /client/build/build.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | require('./check-versions')() 3 | 4 | process.env.NODE_ENV = 'production' 5 | 6 | const ora = require('ora') 7 | const rm = require('rimraf') 8 | const path = require('path') 9 | const chalk = require('chalk') 10 | const webpack = require('webpack') 11 | const config = require('../config') 12 | const webpackConfig = require('./webpack.prod.conf') 13 | 14 | const spinner = ora('building for production...') 15 | spinner.start() 16 | 17 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { 18 | if (err) throw err 19 | webpack(webpackConfig, (err, stats) => { 20 | spinner.stop() 21 | if (err) throw err 22 | process.stdout.write(stats.toString({ 23 | colors: true, 24 | modules: false, 25 | children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build. 26 | chunks: false, 27 | chunkModules: false 28 | }) + '\n\n') 29 | 30 | if (stats.hasErrors()) { 31 | console.log(chalk.red(' Build failed with errors.\n')) 32 | process.exit(1) 33 | } 34 | 35 | console.log(chalk.cyan(' Build complete.\n')) 36 | console.log(chalk.yellow( 37 | ' Tip: built files are meant to be served over an HTTP server.\n' + 38 | ' Opening index.html over file:// won\'t work.\n' 39 | )) 40 | }) 41 | }) 42 | -------------------------------------------------------------------------------- /client/build/check-versions.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const chalk = require('chalk') 3 | const semver = require('semver') 4 | const packageConfig = require('../package.json') 5 | const shell = require('shelljs') 6 | 7 | function exec (cmd) { 8 | return require('child_process').execSync(cmd).toString().trim() 9 | } 10 | 11 | const versionRequirements = [ 12 | { 13 | name: 'node', 14 | currentVersion: semver.clean(process.version), 15 | versionRequirement: packageConfig.engines.node 16 | } 17 | ] 18 | 19 | if (shell.which('npm')) { 20 | versionRequirements.push({ 21 | name: 'npm', 22 | currentVersion: exec('npm --version'), 23 | versionRequirement: packageConfig.engines.npm 24 | }) 25 | } 26 | 27 | module.exports = function () { 28 | const warnings = [] 29 | 30 | for (let i = 0; i < versionRequirements.length; i++) { 31 | const mod = versionRequirements[i] 32 | 33 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 34 | warnings.push(mod.name + ': ' + 35 | chalk.red(mod.currentVersion) + ' should be ' + 36 | chalk.green(mod.versionRequirement) 37 | ) 38 | } 39 | } 40 | 41 | if (warnings.length) { 42 | console.log('') 43 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 44 | console.log() 45 | 46 | for (let i = 0; i < warnings.length; i++) { 47 | const warning = warnings[i] 48 | console.log(' ' + warning) 49 | } 50 | 51 | console.log() 52 | process.exit(1) 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /client/build/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flavea/ci4-vue/26a5dea312863ec843d6605d2ef4c14d49fd82b1/client/build/logo.png -------------------------------------------------------------------------------- /client/build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const config = require('../config') 4 | const isProduction = process.env.NODE_ENV === 'production' 5 | const sourceMapEnabled = isProduction 6 | ? config.build.productionSourceMap 7 | : config.dev.cssSourceMap 8 | 9 | module.exports = { 10 | loaders: utils.cssLoaders({ 11 | sourceMap: sourceMapEnabled, 12 | extract: isProduction 13 | }), 14 | cssSourceMap: sourceMapEnabled, 15 | cacheBusting: config.dev.cacheBusting, 16 | transformToRequire: { 17 | video: ['src', 'poster'], 18 | source: 'src', 19 | img: 'src', 20 | image: 'xlink:href' 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /client/build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const utils = require('./utils') 4 | const config = require('../config') 5 | const vueLoaderConfig = require('./vue-loader.conf') 6 | 7 | function resolve (dir) { 8 | return path.join(__dirname, '..', dir) 9 | } 10 | 11 | 12 | 13 | module.exports = { 14 | context: path.resolve(__dirname, '../'), 15 | entry: { 16 | app: './src/main.js' 17 | }, 18 | output: { 19 | path: config.build.assetsRoot, 20 | filename: '[name].js', 21 | publicPath: process.env.NODE_ENV === 'production' 22 | ? config.build.assetsPublicPath 23 | : config.dev.assetsPublicPath 24 | }, 25 | resolve: { 26 | extensions: ['.js', '.vue', '.json'], 27 | alias: { 28 | 'vue$': 'vue/dist/vue.esm.js', 29 | '@': resolve('src'), 30 | } 31 | }, 32 | module: { 33 | rules: [ 34 | { 35 | test: /\.vue$/, 36 | loader: 'vue-loader', 37 | options: vueLoaderConfig 38 | }, 39 | { 40 | test: /\.js$/, 41 | loader: 'babel-loader', 42 | include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')] 43 | }, 44 | { 45 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 46 | loader: 'url-loader', 47 | options: { 48 | limit: 10000, 49 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 50 | } 51 | }, 52 | { 53 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, 54 | loader: 'url-loader', 55 | options: { 56 | limit: 10000, 57 | name: utils.assetsPath('media/[name].[hash:7].[ext]') 58 | } 59 | }, 60 | { 61 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 62 | loader: 'url-loader', 63 | options: { 64 | limit: 10000, 65 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 66 | } 67 | } 68 | ] 69 | }, 70 | node: { 71 | // prevent webpack from injecting useless setImmediate polyfill because Vue 72 | // source contains it (although only uses it if it's native). 73 | setImmediate: false, 74 | // prevent webpack from injecting mocks to Node native modules 75 | // that does not make sense for the client 76 | dgram: 'empty', 77 | fs: 'empty', 78 | net: 'empty', 79 | tls: 'empty', 80 | child_process: 'empty' 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /client/config/dev.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./prod.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"' 7 | }) 8 | -------------------------------------------------------------------------------- /client/config/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | // Template version: 1.3.1 3 | // see http://vuejs-templates.github.io/webpack for documentation. 4 | 5 | const path = require('path') 6 | 7 | module.exports = { 8 | dev: { 9 | 10 | // Paths 11 | assetsSubDirectory: 'static', 12 | assetsPublicPath: '/', 13 | proxyTable: {}, 14 | 15 | // Various Dev Server settings 16 | host: 'localhost', // can be overwritten by process.env.HOST 17 | port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined 18 | autoOpenBrowser: false, 19 | errorOverlay: true, 20 | notifyOnErrors: true, 21 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- 22 | 23 | 24 | /** 25 | * Source Maps 26 | */ 27 | 28 | // https://webpack.js.org/configuration/devtool/#development 29 | devtool: 'cheap-module-eval-source-map', 30 | 31 | // If you have problems debugging vue-files in devtools, 32 | // set this to false - it *may* help 33 | // https://vue-loader.vuejs.org/en/options.html#cachebusting 34 | cacheBusting: true, 35 | 36 | cssSourceMap: true 37 | }, 38 | 39 | build: { 40 | // Template for index.html 41 | index: path.resolve(__dirname, '../../app/Views/index.php'), 42 | 43 | // Paths 44 | assetsRoot: path.resolve(__dirname, '../../dist'), 45 | assetsSubDirectory: 'static', 46 | assetsPublicPath: './dist/', 47 | 48 | /** 49 | * Source Maps 50 | */ 51 | 52 | productionSourceMap: true, 53 | // https://webpack.js.org/configuration/devtool/#production 54 | devtool: '#source-map', 55 | 56 | // Gzip off by default as many popular static hosts such as 57 | // Surge or Netlify already gzip all static assets for you. 58 | // Before setting to `true`, make sure to: 59 | // npm install --save-dev compression-webpack-plugin 60 | productionGzip: false, 61 | productionGzipExtensions: ['js', 'css'], 62 | 63 | // Run the build command with an extra argument to 64 | // View the bundle analyzer report after build finishes: 65 | // `npm run build --report` 66 | // Set to `true` or `false` to always turn it on or off 67 | bundleAnalyzerReport: process.env.npm_config_report 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /client/config/prod.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"' 4 | } 5 | -------------------------------------------------------------------------------- /client/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | client 7 | 8 | 9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client", 3 | "version": "1.0.0", 4 | "description": "A Vue.js project", 5 | "author": "Anonymous", 6 | "private": true, 7 | "scripts": { 8 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", 9 | "start": "npm run dev", 10 | "build": "node build/build.js" 11 | }, 12 | "dependencies": { 13 | "axios": "^0.19.0", 14 | "vue": "^2.6.10", 15 | "vue-router": "^3.0.7" 16 | }, 17 | "devDependencies": { 18 | "autoprefixer": "^7.1.2", 19 | "babel-core": "^6.22.1", 20 | "babel-helper-vue-jsx-merge-props": "^2.0.3", 21 | "babel-loader": "^7.1.1", 22 | "babel-plugin-syntax-jsx": "^6.18.0", 23 | "babel-plugin-transform-runtime": "^6.22.0", 24 | "babel-plugin-transform-vue-jsx": "^3.5.0", 25 | "babel-preset-env": "^1.3.2", 26 | "babel-preset-stage-2": "^6.22.0", 27 | "chalk": "^2.4.2", 28 | "copy-webpack-plugin": "^4.6.0", 29 | "css-loader": "^0.28.0", 30 | "extract-text-webpack-plugin": "^3.0.0", 31 | "file-loader": "^1.1.4", 32 | "friendly-errors-webpack-plugin": "^1.6.1", 33 | "html-webpack-plugin": "^2.30.1", 34 | "node-notifier": "^5.4.0", 35 | "optimize-css-assets-webpack-plugin": "^3.2.1", 36 | "ora": "^1.2.0", 37 | "portfinder": "^1.0.21", 38 | "postcss-import": "^11.0.0", 39 | "postcss-loader": "^2.0.8", 40 | "postcss-url": "^7.2.1", 41 | "rimraf": "^2.6.3", 42 | "semver": "^5.7.0", 43 | "shelljs": "^0.7.6", 44 | "uglifyjs-webpack-plugin": "^1.3.0", 45 | "url-loader": "^0.5.8", 46 | "vue-loader": "^13.7.3", 47 | "vue-style-loader": "^3.0.1", 48 | "vue-template-compiler": "^2.6.10", 49 | "webpack": "^3.6.0", 50 | "webpack-bundle-analyzer": "^3.3.2", 51 | "webpack-dev-server": "^2.11.5", 52 | "webpack-merge": "^4.2.1" 53 | }, 54 | "engines": { 55 | "node": ">= 6.0.0", 56 | "npm": ">= 3.0.0" 57 | }, 58 | "browserslist": [ 59 | "> 1%", 60 | "last 2 versions", 61 | "not ie <= 8" 62 | ] 63 | } 64 | -------------------------------------------------------------------------------- /client/src/App.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 13 | 14 | 24 | -------------------------------------------------------------------------------- /client/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flavea/ci4-vue/26a5dea312863ec843d6605d2ef4c14d49fd82b1/client/src/assets/logo.png -------------------------------------------------------------------------------- /client/src/components/Books.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 27 | 28 | 29 | 45 | -------------------------------------------------------------------------------- /client/src/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 40 | 41 | 42 | 58 | -------------------------------------------------------------------------------- /client/src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import router from './router' 6 | import axios from 'axios' 7 | 8 | Vue.config.productionTip = false 9 | 10 | const base = axios.create({ 11 | baseURL: 'http://ilma/ci4-vue/public/api/' 12 | }) 13 | 14 | Vue.prototype.$api = base 15 | 16 | /* eslint-disable no-new */ 17 | new Vue({ 18 | el: '#app', 19 | router, 20 | components: { App }, 21 | template: '' 22 | }) 23 | -------------------------------------------------------------------------------- /client/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import HelloWorld from '@/components/HelloWorld' 4 | import Books from '@/components/Books' 5 | 6 | Vue.use(Router) 7 | 8 | export default new Router({ 9 | routes: [ 10 | { 11 | path: '/', 12 | name: 'HelloWorld', 13 | component: HelloWorld 14 | }, 15 | { 16 | path: '/books', 17 | name: 'Books', 18 | component: Books 19 | } 20 | ] 21 | }) 22 | -------------------------------------------------------------------------------- /client/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flavea/ci4-vue/26a5dea312863ec843d6605d2ef4c14d49fd82b1/client/static/.gitkeep -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codeigniter4/codeigniter4", 3 | "type": "project", 4 | "description": "The CodeIgniter framework v4", 5 | "homepage": "https://codeigniter.com", 6 | "license": "MIT", 7 | "require": { 8 | "php": ">=7.2", 9 | "ext-curl": "*", 10 | "ext-intl": "*", 11 | "ext-json": "*", 12 | "kint-php/kint": "^2.1", 13 | "psr/log": "^1.1", 14 | "zendframework/zend-escaper": "^2.5" 15 | }, 16 | "require-dev": { 17 | "codeigniter4/codeigniter4-standard": "^1.0", 18 | "mikey179/vfsstream": "1.6.*", 19 | "phpunit/phpunit": "^7.0", 20 | "squizlabs/php_codesniffer": "^3.3" 21 | }, 22 | "autoload": { 23 | "psr-4": { 24 | "CodeIgniter\\": "system/" 25 | } 26 | }, 27 | "scripts": { 28 | "post-update-cmd": [ 29 | "@composer dump-autoload", 30 | "CodeIgniter\\ComposerScripts::postUpdate", 31 | "bash admin/setup.sh" 32 | ] 33 | }, 34 | "support": { 35 | "forum": "http://forum.codeigniter.com/", 36 | "source": "https://github.com/codeigniter4/CodeIgniter4", 37 | "slack": "https://codeigniterchat.slack.com" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flavea/ci4-vue/26a5dea312863ec843d6605d2ef4c14d49fd82b1/favicon.ico -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | systemDirectory, '/ ') . '/bootstrap.php'; 37 | 38 | /* 39 | *--------------------------------------------------------------- 40 | * LAUNCH THE APPLICATION 41 | *--------------------------------------------------------------- 42 | * Now that everything is setup, it's time to actually fire 43 | * up the engines and make this app do its thang. 44 | */ 45 | 46 | 47 | $app->run(); 48 | -------------------------------------------------------------------------------- /license.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014-2019 British Columbia Institute of Technology 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | ./tests 15 | ./tests/system 16 | 17 | 18 | ./tests/system 19 | ./tests/system/Database 20 | 21 | 22 | ./tests/system/Database 23 | 24 | 25 | 26 | 27 | 28 | ./system 29 | 30 | ./system/Debug/Toolbar/Views 31 | ./system/Pager/Views 32 | ./system/ThirdParty 33 | ./system/Validation/Views 34 | ./system/bootstrap.php 35 | ./system/Commands/Sessions/Views/migration.tpl.php 36 | ./system/ComposerScripts.php 37 | ./system/Config/Routes.php 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /public/.htaccess: -------------------------------------------------------------------------------- 1 | # Disable directory browsing 2 | Options All -Indexes 3 | 4 | # ---------------------------------------------------------------------- 5 | # Rewrite engine 6 | # ---------------------------------------------------------------------- 7 | 8 | # Turning on the rewrite engine is necessary for the following rules and features. 9 | # FollowSymLinks must be enabled for this to work. 10 | 11 | Options +FollowSymlinks 12 | RewriteEngine On 13 | 14 | # If you installed CodeIgniter in a subfolder, you will need to 15 | # change the following line to match the subfolder you need. 16 | # http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase 17 | # RewriteBase / 18 | 19 | # Redirect Trailing Slashes... 20 | RewriteRule ^(.*)/$ /$1 [L,R=301] 21 | 22 | # Rewrite "www.example.com -> example.com" 23 | RewriteCond %{HTTPS} !=on 24 | RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 25 | RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L] 26 | 27 | # Checks to see if the user is attempting to access a valid file, 28 | # such as an image or css document, if this isn't true it sends the 29 | # request to the front controller, index.php 30 | RewriteCond %{REQUEST_FILENAME} !-f 31 | RewriteCond %{REQUEST_FILENAME} !-d 32 | RewriteRule ^(.*)$ index.php/$1 [L] 33 | 34 | # Ensure Authorization header is passed along 35 | RewriteCond %{HTTP:Authorization} . 36 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 37 | 38 | 39 | 40 | # If we don't have mod_rewrite installed, all 404's 41 | # can be sent to index.php, and everything works as normal. 42 | ErrorDocument 404 index.php 43 | 44 | 45 | # Disable server signature start 46 | ServerSignature Off 47 | # Disable server signature end -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flavea/ci4-vue/26a5dea312863ec843d6605d2ef4c14d49fd82b1/public/favicon.ico -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | systemDirectory, '/ ') . '/bootstrap.php'; 37 | 38 | /* 39 | *--------------------------------------------------------------- 40 | * LAUNCH THE APPLICATION 41 | *--------------------------------------------------------------- 42 | * Now that everything is setup, it's time to actually fire 43 | * up the engines and make this app do its thang. 44 | */ 45 | $app->run(); -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /spark: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | systemDirectory, '/ ') . '/bootstrap.php'; 45 | 46 | // Grab our Console 47 | $console = new \CodeIgniter\CLI\Console($app); 48 | 49 | // We want errors to be shown when using it from the CLI. 50 | error_reporting(-1); 51 | ini_set('display_errors', 1); 52 | 53 | // Show basic information before we do anything else. 54 | $console->showHeader(); 55 | 56 | // fire off the command the main framework. 57 | $console->run(); 58 | -------------------------------------------------------------------------------- /stale.yml: -------------------------------------------------------------------------------- 1 | # Number of days of inactivity before an issue becomes stale 2 | daysUntilStale: 60 3 | # Number of days of inactivity before a stale issue is closed 4 | daysUntilClose: 7 5 | # Issues with these labels will never be considered stale 6 | exemptLabels: 7 | - pinned 8 | - security 9 | # Label to use when marking an issue as stale 10 | staleLabel: wontfix 11 | # Comment to post when marking an issue as stale. Set to `false` to disable 12 | markComment: > 13 | This issue has been automatically marked as stale because it has not had 14 | recent activity. It will be automatically closed in a week if no further activity occurs. 15 | Thank you for your contributions. 16 | # Comment to post when closing a stale issue. Set to `false` to disable 17 | closeComment: false 18 | -------------------------------------------------------------------------------- /system/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | Require all denied 3 | 4 | 5 | Deny from all 6 | 7 | -------------------------------------------------------------------------------- /system/CLI/Exceptions/CLIException.php: -------------------------------------------------------------------------------- 1 | \Database\Migrations; 2 | 3 | use CodeIgniter\Database\Migration; 4 | 5 | class Migration_create__table extends Migration 6 | { 7 | 8 | protected $DBGroup = ''; 9 | 10 | 11 | public function up() 12 | { 13 | $this->forge->addField([ 14 | 'id' => [ 15 | 'type' => 'VARCHAR', 16 | 'constraint' => 128, 17 | 'null' => false 18 | ], 19 | 'ip_address' => [ 20 | 'type' => 'VARCHAR', 21 | 'constraint' => 45, 22 | 'null' => false 23 | ], 24 | 'timestamp' => [ 25 | 'type' => 'INT', 26 | 'constraint' => 10, 27 | 'unsigned' => true, 28 | 'null' => false, 29 | 'default' => 0 30 | ], 31 | 'data' => [ 32 | 'type' => 'TEXT', 33 | 'null' => false, 34 | 'default' => '' 35 | ], 36 | ]); 37 | 38 | $this->forge->addKey(['id', 'ip_address'], true); 39 | 40 | $this->forge->addKey('id', true); 41 | 42 | $this->forge->addKey('timestamp'); 43 | $this->forge->createTable('', true); 44 | } 45 | 46 | //-------------------------------------------------------------------- 47 | 48 | public function down() 49 | { 50 | $this->forge->dropTable('', true); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /system/Config/Routes.php: -------------------------------------------------------------------------------- 1 | add('basecontroller(:any)', function () { 51 | throw PageNotFoundException::forPageNotFound(); 52 | }); 53 | 54 | // Migrations 55 | $routes->cli('migrations/(:segment)/(:segment)', '\CodeIgniter\Commands\MigrationsCommand::$1/$2'); 56 | $routes->cli('migrations/(:segment)', '\CodeIgniter\Commands\MigrationsCommand::$1'); 57 | $routes->cli('migrations', '\CodeIgniter\Commands\MigrationsCommand::index'); 58 | 59 | // CLI Catchall - uses a _remap to call Commands 60 | $routes->cli('ci(:any)', '\CodeIgniter\CLI\CommandRunner::index/$1'); 61 | 62 | // Prevent access to initController method 63 | $routes->add('(:any)/initController', function () { 64 | throw PageNotFoundException::forPageNotFound(); 65 | }); 66 | -------------------------------------------------------------------------------- /system/Database/Exceptions/DataException.php: -------------------------------------------------------------------------------- 1 | CodeIgniter::CI_VERSION, 61 | 'phpVersion' => phpversion(), 62 | 'phpSAPI' => php_sapi_name(), 63 | 'environment' => ENVIRONMENT, 64 | 'baseURL' => $config->baseURL, 65 | 'timezone' => app_timezone(), 66 | 'locale' => Services::request()->getLocale(), 67 | 'cspEnabled' => $config->CSPEnabled, 68 | ]; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /system/Debug/Toolbar/Views/_config.tpl.php: -------------------------------------------------------------------------------- 1 |

2 | Read the CodeIgniter docs... 3 |

4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |
CodeIgniter Version:{ ciVersion }
PHP Version:{ phpVersion }
PHP SAPI:{ phpSAPI }
Environment:{ environment }
Base URL: 26 | { if $baseURL == '' } 27 |
28 | The $baseURL should always be set manually to prevent possible URL personification from external parties. 29 |
30 | { else } 31 | { baseURL } 32 | { endif } 33 |
TimeZone:{ timezone }
Locale:{ locale }
Content Security Policy Enabled:{ if $cspEnabled } Yes { else } No { endif }
49 | -------------------------------------------------------------------------------- /system/Debug/Toolbar/Views/_database.tpl.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | {queries} 10 | 11 | 12 | 13 | 14 | {/queries} 15 | 16 |
TimeQuery String
{duration}{! sql !}
17 | -------------------------------------------------------------------------------- /system/Debug/Toolbar/Views/_events.tpl.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {events} 11 | 12 | 13 | 14 | 15 | 16 | {/events} 17 | 18 |
TimeEvent NameTimes Called
{ duration } ms{event}{count}
19 | -------------------------------------------------------------------------------- /system/Debug/Toolbar/Views/_files.tpl.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | {userFiles} 4 | 5 | 6 | 7 | 8 | {/userFiles} 9 | {coreFiles} 10 | 11 | 12 | 13 | 14 | {/coreFiles} 15 | 16 |
{name}{path}
{name}{path}
17 | -------------------------------------------------------------------------------- /system/Debug/Toolbar/Views/_history.tpl.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | {files} 15 | 16 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | {/files} 27 | 28 |
ActionDatetimeStatusMethodURLContent-TypeIs AJAX?
17 | 18 | {datetime}{status}{method}{url}{contentType}{isAJAX}
29 | -------------------------------------------------------------------------------- /system/Debug/Toolbar/Views/_logs.tpl.php: -------------------------------------------------------------------------------- 1 | { if $logs == [] } 2 |

Nothing was logged. If you were expecting logged items, ensure that LoggerConfig file has the correct threshold set.

3 | { else } 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | {logs} 13 | 14 | 15 | 16 | 17 | {/logs} 18 | 19 |
SeverityMessage
{level}{msg}
20 | { endif } 21 | -------------------------------------------------------------------------------- /system/Debug/Toolbar/Views/_routes.tpl.php: -------------------------------------------------------------------------------- 1 |

Matched Route

2 | 3 | 4 | 5 | {matchedRoute} 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | {params} 23 | 24 | 25 | 26 | 27 | {/params} 28 | {/matchedRoute} 29 | 30 |
Directory:{directory}
Controller:{controller}
Method:{method}
Params:{paramCount} / {truePCount}
{name}{value}
31 | 32 | 33 |

Defined Routes

34 | 35 | 36 | 37 | {routes} 38 | 39 | 40 | 41 | 42 | {/routes} 43 | 44 |
{from}{to}
45 | -------------------------------------------------------------------------------- /system/Exceptions/AlertError.php: -------------------------------------------------------------------------------- 1 | prepare(); 75 | } 76 | 77 | //-------------------------------------------------------------------- 78 | } 79 | -------------------------------------------------------------------------------- /system/Filters/Exceptions/FilterException.php: -------------------------------------------------------------------------------- 1 | hasContent($request)) 65 | { 66 | throw HoneypotException::isBot(); 67 | } 68 | } 69 | 70 | /** 71 | * Attach a honeypot to the current response. 72 | * 73 | * @param \CodeIgniter\HTTP\RequestInterface $request 74 | * @param \CodeIgniter\HTTP\ResponseInterface $response 75 | * 76 | * @return void 77 | */ 78 | public function after(RequestInterface $request, ResponseInterface $response) 79 | { 80 | $honeypot = Services::honeypot(new \Config\Honeypot()); 81 | $honeypot->attachHoneypot($response); 82 | } 83 | 84 | } 85 | -------------------------------------------------------------------------------- /system/Format/Exceptions/FormatException.php: -------------------------------------------------------------------------------- 1 | ', 70 | '"', 71 | "'", 72 | '-', 73 | ]; 74 | $replacement = [ 75 | '&', 76 | '<', 77 | '>', 78 | '"', 79 | ''', 80 | '-', 81 | ]; 82 | $str = str_replace($original, $replacement, $str); 83 | 84 | // Decode the temp markers back to entities 85 | $str = preg_replace('/' . $temp . '(\d+);/', '&#\\1;', $str); 86 | 87 | if ($protect_all === true) 88 | { 89 | return preg_replace('/' . $temp . '(\w+);/', '&\\1;', $str); 90 | } 91 | 92 | return $str; 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /system/Honeypot/Exceptions/HoneypotException.php: -------------------------------------------------------------------------------- 1 | 'Command "{0}" not found.', 19 | 'helpUsage' => 'Usage:', 20 | 'helpDescription' => 'Description:', 21 | 'helpOptions' => 'Options:', 22 | 'helpArguments' => 'Arguments:', 23 | 'invalidColor' => 'Invalid {0} color: {1}.', 24 | ]; 25 | -------------------------------------------------------------------------------- /system/Language/en/Cache.php: -------------------------------------------------------------------------------- 1 | 'Cache unable to write to {0}', 19 | 'invalidHandlers' => 'Cache config must have an array of $validHandlers.', 20 | 'noBackup' => 'Cache config must have a handler and backupHandler set.', 21 | 'handlerNotFound' => 'Cache config has an invalid handler or backup handler specified.', 22 | ]; 23 | -------------------------------------------------------------------------------- /system/Language/en/Cast.php: -------------------------------------------------------------------------------- 1 | 'Maximum stack depth exceeded', 18 | 'jsonErrorStateMismatch' => 'Underflow or the modes mismatch', 19 | 'jsonErrorCtrlChar' => 'Unexpected control character found', 20 | 'jsonErrorSyntax' => 'Syntax error, malformed JSON', 21 | 'jsonErrorUtf8' => 'Malformed UTF-8 characters, possibly incorrectly encoded', 22 | 'jsonErrorUnknown' => 'Unknown error', 23 | ]; 24 | -------------------------------------------------------------------------------- /system/Language/en/Core.php: -------------------------------------------------------------------------------- 1 | 'Invalid file: {0}', 19 | 'copyError' => 'An error was encountered while attempting to replace the file({0}). Please make sure your file directory is writable.', 20 | 'missingExtension' => '{0} extension is not loaded.', 21 | 'noHandlers' => '{0} must provide at least one Handler.', 22 | ]; 23 | -------------------------------------------------------------------------------- /system/Language/en/Database.php: -------------------------------------------------------------------------------- 1 | '{0} is not a valid Model Event callback.', 19 | 'invalidArgument' => 'You must provide a valid {0}.', 20 | 'invalidAllowedFields' => 'Allowed fields must be specified for model: {0}', 21 | 'emptyDataset' => 'There is no data to {0}.', 22 | 'failGetFieldData' => 'Failed to get field data from database.', 23 | 'failGetIndexData' => 'Failed to get index data from database.', 24 | 'failGetForeignKeyData' => 'Failed to get foreign key data from database.', 25 | 'parseStringFail' => 'Parsing key string failed.', 26 | 'featureUnavailable' => 'This feature is not available for the database you are using.', 27 | 'tableNotFound' => 'Table `{0}` was not found in the current database.', 28 | 'noPrimaryKey' => '`{0}` model class does not specify a Primary Key.', 29 | 'noDateFormat' => '`{0}` model class does not have a valid dateFormat.', 30 | 'fieldNotExists' => 'Field `{0}` not found.', 31 | 'forEmptyInputGiven' => 'Empty statement is given for the field `{0}`', 32 | 'forFindColumnHaveMultipleColumns' => 'Only single column allowed in Column name.', 33 | ]; 34 | -------------------------------------------------------------------------------- /system/Language/en/Entity.php: -------------------------------------------------------------------------------- 1 | 'Trying to access non existent property {0} of {1}' 19 | ]; 20 | -------------------------------------------------------------------------------- /system/Language/en/Files.php: -------------------------------------------------------------------------------- 1 | 'File not found: {0}', 18 | 'cannotMove' => 'Could not move file {0} to {1} ({2})', 19 | ]; 20 | -------------------------------------------------------------------------------- /system/Language/en/Filters.php: -------------------------------------------------------------------------------- 1 | '{0} filter must have a matching alias defined.', 19 | 'incorrectInterface' => '{0} must implement CodeIgniter\Filters\FilterInterface.', 20 | ]; 21 | -------------------------------------------------------------------------------- /system/Language/en/Format.php: -------------------------------------------------------------------------------- 1 | 'Failed to parse json string, error: "{0}".', 19 | 'missingExtension' => 'The SimpleXML extension is required to format XML.', 20 | ]; 21 | -------------------------------------------------------------------------------- /system/Language/en/Images.php: -------------------------------------------------------------------------------- 1 | 'You must specify a source image in your preferences.', 19 | 'gdRequired' => 'The GD image library is required to use this feature.', 20 | 'gdRequiredForProps' => 'Your server must support the GD image library in order to determine the image properties.', 21 | 'gifNotSupported' => 'GIF images are often not supported due to licensing restrictions. You may have to use JPG or PNG images instead.', 22 | 'jpgNotSupported' => 'JPG images are not supported.', 23 | 'pngNotSupported' => 'PNG images are not supported.', 24 | 'unsupportedImageCreate' => 'Your server does not support the GD function required to process this type of image.', 25 | 'jpgOrPngRequired' => 'The image resize protocol specified in your preferences only works with JPEG or PNG image types.', 26 | 'rotateUnsupported' => 'Image rotation does not appear to be supported by your server.', 27 | 'libPathInvalid' => 'The path to your image library is not correct. Please set the correct path in your image preferences. {0, string)', 28 | 'imageProcessFailed' => 'Image processing failed. Please verify that your server supports the chosen protocol and that the path to your image library is correct.', 29 | 'rotationAngleRequired' => 'An angle of rotation is required to rotate the image.', 30 | 'invalidPath' => 'The path to the image is not correct.', 31 | 'copyFailed' => 'The image copy routine failed.', 32 | 'missingFont' => 'Unable to find a font to use.', 33 | 'saveFailed' => 'Unable to save the image. Please make sure the image and file directory are writable.', 34 | 'invalidDirection' => 'Flip direction can be only `vertical` or `horizontal`. Given: {0}', 35 | 'exifNotSupported' => 'Reading EXIF data is not supported by this PHP installation.', 36 | ]; 37 | -------------------------------------------------------------------------------- /system/Language/en/Language.php: -------------------------------------------------------------------------------- 1 | 'Get line must be a string or array of strings.', 19 | ]; 20 | -------------------------------------------------------------------------------- /system/Language/en/Log.php: -------------------------------------------------------------------------------- 1 | '{0} is an invalid log level.', 19 | ]; 20 | -------------------------------------------------------------------------------- /system/Language/en/Migrations.php: -------------------------------------------------------------------------------- 1 | 'Migrations table must be set.', 20 | 'invalidType' => 'An invalid migration numbering type was specified: {0}', 21 | 'disabled' => 'Migrations have been loaded but are disabled or setup incorrectly.', 22 | 'notFound' => 'Migration file not found: ', 23 | 'empty' => 'No Migration files found', 24 | 'gap' => 'There is a gap in the migration sequence near version number: ', 25 | 'classNotFound' => 'The migration class "%s" could not be found.', 26 | 'missingMethod' => 'The migration class is missing an "%s" method.', 27 | 28 | // Migration Command 29 | 'migHelpLatest' => "\t\tMigrates database to latest available migration.", 30 | 'migHelpCurrent' => "\t\tMigrates database to version set as 'current' in configuration.", 31 | 'migHelpVersion' => "\tMigrates database to version {v}.", 32 | 'migHelpRollback' => "\tRuns all migrations 'down' to version 0.", 33 | 'migHelpRefresh' => "\t\tUninstalls and re-runs all migrations to freshen database.", 34 | 'migHelpSeed' => "\tRuns the seeder named [name].", 35 | 'migCreate' => "\tCreates a new migration named [name]", 36 | 'nameMigration' => 'Name the migration file', 37 | 'badCreateName' => 'You must provide a migration file name.', 38 | 'writeError' => 'Error trying to create file.', 39 | 'migNumberError' => 'Migration number must be three digits, and there must not be any gaps in the sequence.', 40 | 41 | 'toLatest' => 'Migrating to latest version...', 42 | 'migInvalidVersion' => 'Invalid version number provided.', 43 | 'toVersionPH' => 'Migrating to version %s...', 44 | 'toVersion' => 'Migrating to current version...', 45 | 'rollingBack' => 'Rolling back all migrations...', 46 | 'noneFound' => 'No migrations were found.', 47 | 'on' => 'Migrated On: ', 48 | 'migSeeder' => 'Seeder name', 49 | 'migMissingSeeder' => 'You must provide a seeder name.', 50 | 'removed' => 'Rolling back: ', 51 | 'added' => 'Running: ', 52 | 53 | 'version' => 'Version', 54 | 'filename' => 'Filename', 55 | ]; 56 | -------------------------------------------------------------------------------- /system/Language/en/Number.php: -------------------------------------------------------------------------------- 1 | 'TB', 19 | 'gigabyteAbbr' => 'GB', 20 | 'megabyteAbbr' => 'MB', 21 | 'kilobyteAbbr' => 'KB', 22 | 'bytes' => 'Bytes', 23 | 24 | // don't forget the space in front of these! 25 | 'thousand' => ' thousand', 26 | 'million' => ' million', 27 | 'billion' => ' billion', 28 | 'trillion' => ' trillion', 29 | 'quadrillion' => ' quadrillion', 30 | ]; 31 | -------------------------------------------------------------------------------- /system/Language/en/Pager.php: -------------------------------------------------------------------------------- 1 | 'Page navigation', 19 | 'first' => 'First', 20 | 'previous' => 'Previous', 21 | 'next' => 'Next', 22 | 'last' => 'Last', 23 | 'older' => 'Older', 24 | 'newer' => 'Newer', 25 | 'invalidTemplate' => '{0} is not a valid Pager template.', 26 | 'invalidPaginationGroup' => '{0} is not a valid Pagination group.', 27 | ]; 28 | -------------------------------------------------------------------------------- /system/Language/en/Redirect.php: -------------------------------------------------------------------------------- 1 | 'Unable to redirect to "{0}". Error status code "{1}"', 19 | ]; 20 | -------------------------------------------------------------------------------- /system/Language/en/Router.php: -------------------------------------------------------------------------------- 1 | 'A parameter does not match the expected type.', 19 | 'missingDefaultRoute' => 'Unable to determine what should be displayed. A default route has not been specified in the routing file.', 20 | ]; 21 | -------------------------------------------------------------------------------- /system/Language/en/Session.php: -------------------------------------------------------------------------------- 1 | '`sessionSavePath` must have the table name for the Database Session Handler to work.', 19 | 'invalidSavePath' => "Session: Configured save path '{0}' is not a directory, doesn't exist or cannot be created.", 20 | 'writeProtectedSavePath' => "Session: Configured save path '{0}' is not writable by the PHP process.", 21 | 'emptySavePath' => 'Session: No save path configured.', 22 | 'invalidSavePathFormat' => 'Session: Invalid Redis save path format: {0}', 23 | ]; 24 | -------------------------------------------------------------------------------- /system/Language/en/Time.php: -------------------------------------------------------------------------------- 1 | 'Months must be between 1 and 12. Given: {0}', 19 | 'invalidDay' => 'Days must be between 1 and 31. Given: {0}', 20 | 'invalidOverDay' => 'Days must be between 1 and {0}. Given: {1}', 21 | 'invalidHours' => 'Hours must be between 0 and 23. Given: {0}', 22 | 'invalidMinutes' => 'Minutes must be between 0 and 59. Given: {0}', 23 | 'invalidSeconds' => 'Seconds must be between 0 and 59. Given: {0}', 24 | 'years' => '{0, plural, =1{# year} other{# years}}', 25 | 'months' => '{0, plural, =1{# month} other{# months}}', 26 | 'weeks' => '{0, plural, =1{# week} other{# weeks}}', 27 | 'days' => '{0, plural, =1{# day} other{# days}}', 28 | 'hours' => '{0, plural, =1{# hour} other{# hours}}', 29 | 'minutes' => '{0, plural, =1{# minute} other{# minutes}}', 30 | 'seconds' => '{0, plural, =1{# second} other{# seconds}}', 31 | 'ago' => '{0} ago', 32 | 'inFuture' => 'in {0}', 33 | 'yesterday' => 'Yesterday', 34 | 'tomorrow' => 'Tomorrow', 35 | 'now' => 'Just now', 36 | ]; 37 | -------------------------------------------------------------------------------- /system/Language/en/View.php: -------------------------------------------------------------------------------- 1 | '{class}::{method} is not a valid method.', 18 | 'missingCellParameters' => '{class}::{method} has no params.', 19 | 'invalidCellParameter' => '{0} is not a valid param name.', 20 | 'noCellClass' => 'No view cell class provided.', 21 | 'invalidCellClass' => 'Unable to locate view cell class: {0}.', 22 | 'tagSyntaxError' => 'You have a syntax error in your Parser tags: {0}', 23 | ]; 24 | -------------------------------------------------------------------------------- /system/Log/Exceptions/LogException.php: -------------------------------------------------------------------------------- 1 | setSurroundCount(2); 7 | ?> 8 | 9 | 46 | -------------------------------------------------------------------------------- /system/Pager/Views/default_head.php: -------------------------------------------------------------------------------- 1 | setSurroundCount(0); 7 | 8 | if ($pager->hasPrevious()) 9 | { 10 | echo '' . PHP_EOL; 11 | } 12 | 13 | echo '' . PHP_EOL; 14 | 15 | if ($pager->hasNext()) 16 | { 17 | echo '' . PHP_EOL; 18 | } 19 | -------------------------------------------------------------------------------- /system/Pager/Views/default_simple.php: -------------------------------------------------------------------------------- 1 | setSurroundCount(0); 7 | ?> 8 | 22 | -------------------------------------------------------------------------------- /system/Router/Exceptions/RedirectException.php: -------------------------------------------------------------------------------- 1 | data; 71 | $consumed += $bucket->datalen; 72 | } 73 | return PSFS_PASS_ON; 74 | } 75 | 76 | } 77 | 78 | // @codeCoverageIgnoreStart 79 | stream_filter_register('CITestStreamFilter', 'CodeIgniter\Test\Filters\CITestStreamFilter'); 80 | // @codeCoverageIgnoreEnd 81 | -------------------------------------------------------------------------------- /system/ThirdParty/Kint/kint.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flavea/ci4-vue/26a5dea312863ec843d6605d2ef4c14d49fd82b1/system/ThirdParty/Kint/kint.php -------------------------------------------------------------------------------- /system/ThirdParty/PSR/Log/InvalidArgumentException.php: -------------------------------------------------------------------------------- 1 | logger = $logger; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /system/ThirdParty/PSR/Log/NullLogger.php: -------------------------------------------------------------------------------- 1 | logger) { }` 11 | * blocks. 12 | */ 13 | class NullLogger extends AbstractLogger 14 | { 15 | /** 16 | * Logs with an arbitrary level. 17 | * 18 | * @param mixed $level 19 | * @param string $message 20 | * @param array $context 21 | * @return null 22 | */ 23 | public function log($level, $message, array $context = []) 24 | { 25 | // noop 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /system/ThirdParty/ZendEscaper/Exception/ExceptionInterface.php: -------------------------------------------------------------------------------- 1 | checkIPAddress($request->ipAddress(), 60, MINUTE)) 53 | * { 54 | * die('You submitted over 60 requests within a minute.'); 55 | * } 56 | * 57 | * @param string $key The name to use as the "bucket" name. 58 | * @param integer $capacity The number of requests the "bucket" can hold 59 | * @param integer $seconds The time it takes the "bucket" to completely refill 60 | * @param integer $cost The number of tokens this action uses. 61 | * 62 | * @return boolean 63 | */ 64 | public function check(string $key, int $capacity, int $seconds, int $cost); 65 | 66 | //-------------------------------------------------------------------- 67 | 68 | /** 69 | * Returns the number of seconds until the next available token will 70 | * be released for usage. 71 | * 72 | * @return integer 73 | */ 74 | public function getTokenTime(): int; 75 | } 76 | -------------------------------------------------------------------------------- /system/Validation/Exceptions/ValidationException.php: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | -------------------------------------------------------------------------------- /system/Validation/Views/single.php: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /system/View/Exceptions/ViewException.php: -------------------------------------------------------------------------------- 1 | $class, 'method' => $method])); 11 | } 12 | 13 | public static function forMissingCellParameters(string $class, string $method) 14 | { 15 | return new static(lang('View.missingCellParameters', ['class' => $class, 'method' => $method])); 16 | } 17 | 18 | public static function forInvalidCellParameter(string $key) 19 | { 20 | return new static(lang('View.invalidCellParameter', [$key])); 21 | } 22 | 23 | public static function forNoCellClass() 24 | { 25 | return new static(lang('View.noCellClass')); 26 | } 27 | 28 | public static function forInvalidCellClass(string $class = null) 29 | { 30 | return new static(lang('View.invalidCellClass', [$class])); 31 | } 32 | 33 | public static function forTagSyntaxError(string $output) 34 | { 35 | return new static(lang('View.tagSyntaxError', [$output])); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /system/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /writable/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | Require all denied 3 | 4 | 5 | Deny from all 6 | 7 | -------------------------------------------------------------------------------- /writable/cache/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /writable/logs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /writable/session/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /writable/uploads/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 403 Forbidden 5 | 6 | 7 | 8 |

Directory access is forbidden.

9 | 10 | 11 | 12 | --------------------------------------------------------------------------------