├── .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: = $message, "\n"; ?>
5 | Filename: = $exception->getFile(), "\n"; ?>
6 | Line Number: = $exception->getLine(); ?>
7 |
8 |
9 |
10 | Backtrace:
11 | getTrace() as $error): ?>
12 |
13 | = trim('-' . $error['line'] . ' - ' . $error['file'] . '::' . $error['function']) . "\n" ?>
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 | = esc($message) ?>
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 |
2 |
3 |

4 |
5 |
6 |
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 |
2 |
3 |
Books
4 |
5 | -
6 | {{ book.book_title }} by {{ book.book_author }}
7 |
8 |
9 |
10 |
11 |
12 |
27 |
28 |
29 |
45 |
--------------------------------------------------------------------------------
/client/src/components/HelloWorld.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{ msg }}
4 |
Essential Links
5 |
26 |
27 |
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_= $tableName ?>_table extends Migration
6 | {
7 |
8 | protected $DBGroup = '= $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('= $tableName ?>', true);
44 | }
45 |
46 | //--------------------------------------------------------------------
47 |
48 | public function down()
49 | {
50 | $this->forge->dropTable('= $tableName ?>', 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 | CodeIgniter Version: |
9 | { ciVersion } |
10 |
11 |
12 | PHP Version: |
13 | { phpVersion } |
14 |
15 |
16 | PHP SAPI: |
17 | { phpSAPI } |
18 |
19 |
20 | Environment: |
21 | { environment } |
22 |
23 |
24 | Base URL: |
25 |
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 | |
34 |
35 |
36 | TimeZone: |
37 | { timezone } |
38 |
39 |
40 | Locale: |
41 | { locale } |
42 |
43 |
44 | Content Security Policy Enabled: |
45 | { if $cspEnabled } Yes { else } No { endif } |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/system/Debug/Toolbar/Views/_database.tpl.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Time |
5 | Query String |
6 |
7 |
8 |
9 | {queries}
10 |
11 | {duration} |
12 | {! sql !} |
13 |
14 | {/queries}
15 |
16 |
17 |
--------------------------------------------------------------------------------
/system/Debug/Toolbar/Views/_events.tpl.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Time |
5 | Event Name |
6 | Times Called |
7 |
8 |
9 |
10 | {events}
11 |
12 | { duration } ms |
13 | {event} |
14 | {count} |
15 |
16 | {/events}
17 |
18 |
19 |
--------------------------------------------------------------------------------
/system/Debug/Toolbar/Views/_files.tpl.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | {userFiles}
4 |
5 | {name} |
6 | {path} |
7 |
8 | {/userFiles}
9 | {coreFiles}
10 |
11 | {name} |
12 | {path} |
13 |
14 | {/coreFiles}
15 |
16 |
17 |
--------------------------------------------------------------------------------
/system/Debug/Toolbar/Views/_history.tpl.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Action |
5 | Datetime |
6 | Status |
7 | Method |
8 | URL |
9 | Content-Type |
10 | Is AJAX? |
11 |
12 |
13 |
14 | {files}
15 |
16 |
17 |
18 | |
19 | {datetime} |
20 | {status} |
21 | {method} |
22 | {url} |
23 | {contentType} |
24 | {isAJAX} |
25 |
26 | {/files}
27 |
28 |
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 | Severity |
8 | Message |
9 |
10 |
11 |
12 | {logs}
13 |
14 | {level} |
15 | {msg} |
16 |
17 | {/logs}
18 |
19 |
20 | { endif }
21 |
--------------------------------------------------------------------------------
/system/Debug/Toolbar/Views/_routes.tpl.php:
--------------------------------------------------------------------------------
1 | Matched Route
2 |
3 |
4 |
5 | {matchedRoute}
6 |
7 | Directory: |
8 | {directory} |
9 |
10 |
11 | Controller: |
12 | {controller} |
13 |
14 |
15 | Method: |
16 | {method} |
17 |
18 |
19 | Params: |
20 | {paramCount} / {truePCount} |
21 |
22 | {params}
23 |
24 | {name} |
25 | {value} |
26 |
27 | {/params}
28 | {/matchedRoute}
29 |
30 |
31 |
32 |
33 | Defined Routes
34 |
35 |
36 |
37 | {routes}
38 |
39 | {from} |
40 | {to} |
41 |
42 | {/routes}
43 |
44 |
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 |
3 |
4 |
5 | - = esc($error) ?>
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/system/Validation/Views/single.php:
--------------------------------------------------------------------------------
1 | = esc($error) ?>
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 |
--------------------------------------------------------------------------------