diff --git a/.gitignore b/.gitignore
index 600d2d3..11abea6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,127 @@
-.vscode
\ No newline at end of file
+#-------------------------
+# Operating Specific Junk Files
+#-------------------------
+
+# OS X
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# OS X Thumbnails
+._*
+
+# Windows image file caches
+Thumbs.db
+ehthumbs.db
+Desktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+# Linux
+*~
+
+# KDE directory preferences
+.directory
+
+# Linux trash folder which might appear on any partition or disk
+.Trash-*
+
+#-------------------------
+# Environment Files
+#-------------------------
+# These should never be under version control,
+# as it poses a security risk.
+.env
+.vagrant
+Vagrantfile
+
+#-------------------------
+# Temporary Files
+#-------------------------
+writable/cache/*
+!writable/cache/index.html
+
+writable/logs/*
+!writable/logs/index.html
+
+writable/session/*
+!writable/session/index.html
+
+writable/uploads/*
+!writable/uploads/index.html
+
+writable/debugbar/*
+
+php_errors.log
+
+#-------------------------
+# User Guide Temp Files
+#-------------------------
+user_guide_src/build/*
+user_guide_src/cilexer/build/*
+user_guide_src/cilexer/dist/*
+user_guide_src/cilexer/pycilexer.egg-info/*
+
+#-------------------------
+# Test Files
+#-------------------------
+tests/coverage*
+
+# Don't save phpunit under version control.
+phpunit
+
+#-------------------------
+# Composer
+#-------------------------
+vendor/
+
+#-------------------------
+# IDE / Development Files
+#-------------------------
+
+# Modules Testing
+_modules/*
+
+# phpenv local config
+.php-version
+
+# Jetbrains editors (PHPStorm, etc)
+.idea/
+*.iml
+
+# Netbeans
+nbproject/
+build/
+nbbuild/
+dist/
+nbdist/
+nbactions.xml
+nb-configuration.xml
+.nb-gradle/
+
+# Sublime Text
+*.tmlanguage.cache
+*.tmPreferences.cache
+*.stTheme.cache
+*.sublime-workspace
+*.sublime-project
+.phpintel
+/api/
+
+# Visual Studio Code
+.vscode/
+
+/results/
+/phpunit*.xml
+/.phpunit.*.cache
+
diff --git a/.htaccess b/.htaccess
deleted file mode 100755
index 5a508a8..0000000
--- a/.htaccess
+++ /dev/null
@@ -1,6 +0,0 @@
-RewriteEngine On
-RewriteRule ^home/?$ index.php
-RewriteRule ^about/?$ about.php
-RewriteRule ^projects/?$ projects.php
-RewriteRule ^guides/?$ guides.php
-RewriteRule ^projects/opennic?$ projects/opennic.php
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..7c20eb1
--- /dev/null
+++ b/README.md
@@ -0,0 +1,64 @@
+# CodeIgniter 4 Application Starter
+
+## What is CodeIgniter?
+
+CodeIgniter is a PHP full-stack web framework that is light, fast, flexible, and secure.
+More information can be found at the [official site](http://codeigniter.com).
+
+This repository holds a composer-installable app starter.
+It has been built from the
+[development repository](https://github.com/codeigniter4/CodeIgniter4).
+
+More information about the plans for version 4 can be found in [the announcement](http://forum.codeigniter.com/thread-62615.html) on the forums.
+
+The user guide corresponding to this version of the framework can be found
+[here](https://codeigniter4.github.io/userguide/).
+
+## Installation & updates
+
+`composer create-project codeigniter4/appstarter` then `composer update` whenever
+there is a new release of the framework.
+
+When updating, check the release notes to see if there are any changes you might need to apply
+to your `app` folder. The affected files can be copied or merged from
+`vendor/codeigniter4/framework/app`.
+
+## Setup
+
+Copy `env` to `.env` and tailor for your app, specifically the baseURL
+and any database settings.
+
+## Important Change with index.php
+
+`index.php` is no longer in the root of the project! It has been moved inside the *public* folder,
+for better security and separation of components.
+
+This means that you should configure your web server to "point" to your project's *public* folder, and
+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
+framework are exposed.
+
+**Please** read the user guide for a better explanation of how CI4 works!
+The user guide updating and deployment is a bit awkward at the moment, but we are working on it!
+
+## Repository Management
+
+We use Github issues, in our main repository, to track **BUGS** and to track approved **DEVELOPMENT** work packages.
+We use our [forum](http://forum.codeigniter.com) to provide SUPPORT and to discuss
+FEATURE REQUESTS.
+
+This repository is a "distribution" one, built by our release preparation script.
+Problems with it can be raised on our forum, or as issues in the main repository.
+
+## Server Requirements
+
+PHP version 7.2 or higher is required, with the following extensions installed:
+
+- [intl](http://php.net/manual/en/intl.requirements.php)
+- [libcurl](http://php.net/manual/en/curl.requirements.php) if you plan to use the HTTP\CURLRequest library
+
+Additionally, make sure that the following extensions are enabled in your PHP:
+
+- json (enabled by default - don't turn it off)
+- [mbstring](http://php.net/manual/en/mbstring.installation.php)
+- [mysqlnd](http://php.net/manual/en/mysqlnd.install.php)
+- xml (enabled by default - don't turn it off)
diff --git a/about.php b/about.php
deleted file mode 100644
index 0d7e64b..0000000
--- a/about.php
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
-
- HACK13 Site
-
-
-
-
-
-
-
About Me
-
Short Bio:
-
Hi there, I am by day a UNIX\Linux System Administrator and the rest of the time I am just a big old Linux nerd. I have been running Linux as my daily driver pretty much since I was nine years old. I found it after getting my first computer, and it was so slow and wanted to find something that would run faster. I found something called ZenWalk Linux back then (sadly not around anymore), which was based on Slackware Linux which is still around. Shortly after that, I started to dive more into Linux over the years. I have used many different distributions over the years as a daily driver. Ubuntu, Arch, Debian, Mandriva, OpenSUSE, and Solus just to name a few.
-
These days I tend to use Fedora as my daily driver, I like being able to run more up to date software that isn’t really modified for the distribution. Fedora feels very stock and since I manage mostly RHEL(Red Hat Enterprise Linux) for my day job, it is nice to use the upstream version of the system to just stay in the same ecosystem. That said, I have nothing against any other distribution.
-
Contact:
-
-
-
-
-
- @hack13#4761
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/.htaccess b/app/.htaccess
new file mode 100644
index 0000000..f24db0a
--- /dev/null
+++ b/app/.htaccess
@@ -0,0 +1,6 @@
+
+ Require all denied
+
+
+ Deny from all
+
diff --git a/app/Common.php b/app/Common.php
new file mode 100644
index 0000000..780ba3f
--- /dev/null
+++ b/app/Common.php
@@ -0,0 +1,15 @@
+ SYSTEMPATH,
+ * 'App' => APPPATH
+ * ];
+ *
+ * @var array
+ */
+ public $psr4 = [
+ APP_NAMESPACE => APPPATH, // For custom app namespace
+ 'Config' => APPPATH . 'Config',
+ ];
+
+ /**
+ * -------------------------------------------------------------------
+ * Class Map
+ * -------------------------------------------------------------------
+ * The class map provides a map of class names and their exact
+ * location on the drive. Classes loaded in this manner will have
+ * slightly faster performance because they will not have to be
+ * searched for within one or more directories as they would if they
+ * were being autoloaded through a namespace.
+ *
+ * Prototype:
+ *
+ * $classmap = [
+ * 'MyClass' => '/path/to/class/file.php'
+ * ];
+ *
+ * @var array
+ */
+ public $classmap = [];
+}
diff --git a/app/Config/Boot/development.php b/app/Config/Boot/development.php
new file mode 100644
index 0000000..63fdd88
--- /dev/null
+++ b/app/Config/Boot/development.php
@@ -0,0 +1,32 @@
+ '127.0.0.1',
+ 'port' => 11211,
+ 'weight' => 1,
+ 'raw' => false,
+ ];
+
+ /*
+ | -------------------------------------------------------------------------
+ | Redis settings
+ | -------------------------------------------------------------------------
+ | Your Redis server can be specified below, if you are using
+ | the Redis or Predis drivers.
+ |
+ */
+ public $redis = [
+ 'host' => '127.0.0.1',
+ 'password' => null,
+ 'port' => 6379,
+ 'timeout' => 0,
+ 'database' => 0,
+ ];
+
+ /*
+ |--------------------------------------------------------------------------
+ | Available Cache Handlers
+ |--------------------------------------------------------------------------
+ |
+ | This is an array of cache engine alias' and class names. Only engines
+ | that are listed here are allowed to be used.
+ |
+ */
+ public $validHandlers = [
+ 'dummy' => \CodeIgniter\Cache\Handlers\DummyHandler::class,
+ 'file' => \CodeIgniter\Cache\Handlers\FileHandler::class,
+ 'memcached' => \CodeIgniter\Cache\Handlers\MemcachedHandler::class,
+ 'predis' => \CodeIgniter\Cache\Handlers\PredisHandler::class,
+ 'redis' => \CodeIgniter\Cache\Handlers\RedisHandler::class,
+ 'wincache' => \CodeIgniter\Cache\Handlers\WincacheHandler::class,
+ ];
+}
diff --git a/app/Config/Constants.php b/app/Config/Constants.php
new file mode 100644
index 0000000..b25f71c
--- /dev/null
+++ b/app/Config/Constants.php
@@ -0,0 +1,77 @@
+ '',
+ 'hostname' => 'localhost',
+ 'username' => '',
+ 'password' => '',
+ 'database' => '',
+ 'DBDriver' => 'MySQLi',
+ 'DBPrefix' => '',
+ 'pConnect' => false,
+ 'DBDebug' => (ENVIRONMENT !== 'production'),
+ 'cacheOn' => false,
+ 'cacheDir' => '',
+ 'charset' => 'utf8',
+ 'DBCollat' => 'utf8_general_ci',
+ 'swapPre' => '',
+ 'encrypt' => false,
+ 'compress' => false,
+ 'strictOn' => false,
+ 'failover' => [],
+ 'port' => 3306,
+ ];
+
+ /**
+ * This database connection is used when
+ * running PHPUnit database tests.
+ *
+ * @var array
+ */
+ public $tests = [
+ 'DSN' => '',
+ 'hostname' => '127.0.0.1',
+ 'username' => '',
+ 'password' => '',
+ 'database' => ':memory:',
+ 'DBDriver' => 'SQLite3',
+ 'DBPrefix' => 'db_', // Needed to ensure we're working correctly with prefixes live. DO NOT REMOVE FOR CI DEVS
+ 'pConnect' => false,
+ 'DBDebug' => (ENVIRONMENT !== 'production'),
+ 'cacheOn' => false,
+ 'cacheDir' => '',
+ 'charset' => 'utf8',
+ 'DBCollat' => 'utf8_general_ci',
+ 'swapPre' => '',
+ 'encrypt' => false,
+ 'compress' => false,
+ 'strictOn' => false,
+ 'failover' => [],
+ 'port' => 3306,
+ ];
+
+ //--------------------------------------------------------------------
+
+ public function __construct()
+ {
+ parent::__construct();
+
+ // Ensure that we always set the database group to 'tests' if
+ // we are currently running an automated test suite, so that
+ // we don't overwrite live data on accident.
+ if (ENVIRONMENT === 'testing')
+ {
+ $this->defaultGroup = 'tests';
+
+ // Under Travis-CI, we can set an ENV var named 'DB_GROUP'
+ // so that we can test against multiple databases.
+ if ($group = getenv('DB'))
+ {
+ if (is_file(TESTPATH . 'travis/Database.php'))
+ {
+ require TESTPATH . 'travis/Database.php';
+
+ if (! empty($dbconfig) && array_key_exists($group, $dbconfig))
+ {
+ $this->tests = $dbconfig[$group];
+ }
+ }
+ }
+ }
+ }
+
+ //--------------------------------------------------------------------
+
+}
diff --git a/app/Config/DocTypes.php b/app/Config/DocTypes.php
new file mode 100644
index 0000000..67d5dd2
--- /dev/null
+++ b/app/Config/DocTypes.php
@@ -0,0 +1,33 @@
+ '',
+ 'xhtml1-strict' => '',
+ 'xhtml1-trans' => '',
+ 'xhtml1-frame' => '',
+ 'xhtml-basic11' => '',
+ 'html5' => '',
+ 'html4-strict' => '',
+ 'html4-trans' => '',
+ 'html4-frame' => '',
+ 'mathml1' => '',
+ 'mathml2' => '',
+ 'svg10' => '',
+ 'svg11' => '',
+ 'svg11-basic' => '',
+ 'svg11-tiny' => '',
+ 'xhtml-math-svg-xh' => '',
+ 'xhtml-math-svg-sh' => '',
+ 'xhtml-rdfa-1' => '',
+ 'xhtml-rdfa-2' => '',
+ ];
+}
diff --git a/app/Config/Email.php b/app/Config/Email.php
new file mode 100644
index 0000000..d9ca142
--- /dev/null
+++ b/app/Config/Email.php
@@ -0,0 +1,171 @@
+ 0)
+ {
+ ob_end_flush();
+ }
+
+ ob_start(function ($buffer) {
+ return $buffer;
+ });
+ }
+
+ /*
+ * --------------------------------------------------------------------
+ * Debug Toolbar Listeners.
+ * --------------------------------------------------------------------
+ * If you delete, they will no longer be collected.
+ */
+ if (ENVIRONMENT !== 'production')
+ {
+ Events::on('DBQuery', 'CodeIgniter\Debug\Toolbar\Collectors\Database::collect');
+ Services::toolbar()->respond();
+ }
+});
diff --git a/app/Config/Exceptions.php b/app/Config/Exceptions.php
new file mode 100644
index 0000000..5fe33d3
--- /dev/null
+++ b/app/Config/Exceptions.php
@@ -0,0 +1,42 @@
+ \CodeIgniter\Filters\CSRF::class,
+ 'toolbar' => \CodeIgniter\Filters\DebugToolbar::class,
+ 'honeypot' => \CodeIgniter\Filters\Honeypot::class,
+ ];
+
+ // Always applied before every request
+ public $globals = [
+ 'before' => [
+ //'honeypot'
+ // 'csrf',
+ ],
+ 'after' => [
+ 'toolbar',
+ //'honeypot'
+ ],
+ ];
+
+ // Works on all of a particular HTTP method
+ // (GET, POST, etc) as BEFORE filters only
+ // like: 'post' => ['CSRF', 'throttle'],
+ public $methods = [];
+
+ // List filter aliases and any before/after uri patterns
+ // that they should run on, like:
+ // 'isLoggedIn' => ['before' => ['account/*', 'profiles/*']],
+ public $filters = [];
+}
diff --git a/app/Config/ForeignCharacters.php b/app/Config/ForeignCharacters.php
new file mode 100644
index 0000000..8ee6f11
--- /dev/null
+++ b/app/Config/ForeignCharacters.php
@@ -0,0 +1,6 @@
+ \CodeIgniter\Format\JSONFormatter::class,
+ 'application/xml' => \CodeIgniter\Format\XMLFormatter::class,
+ 'text/xml' => \CodeIgniter\Format\XMLFormatter::class,
+ ];
+
+ /*
+ |--------------------------------------------------------------------------
+ | Formatters Options
+ |--------------------------------------------------------------------------
+ |
+ | Additional Options to adjust default formatters behaviour.
+ | For each mime type, list the additional options that should be used.
+ |
+ */
+ public $formatterOptions = [
+ 'application/json' => JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES,
+ 'application/xml' => 0,
+ 'text/xml' => 0,
+ ];
+ //--------------------------------------------------------------------
+
+ /**
+ * A Factory method to return the appropriate formatter for the given mime type.
+ *
+ * @param string $mime
+ *
+ * @return \CodeIgniter\Format\FormatterInterface
+ */
+ public function getFormatter(string $mime)
+ {
+ if (! array_key_exists($mime, $this->formatters))
+ {
+ throw new \InvalidArgumentException('No Formatter defined for mime type: ' . $mime);
+ }
+
+ $class = $this->formatters[$mime];
+
+ if (! class_exists($class))
+ {
+ throw new \BadMethodCallException($class . ' is not a valid Formatter.');
+ }
+
+ return new $class();
+ }
+
+ //--------------------------------------------------------------------
+
+}
diff --git a/app/Config/Honeypot.php b/app/Config/Honeypot.php
new file mode 100644
index 0000000..3d9e372
--- /dev/null
+++ b/app/Config/Honeypot.php
@@ -0,0 +1,42 @@
+{label} ';
+
+ /**
+ * Honeypot container
+ *
+ * @var string
+ */
+ public $container = '{template}
';
+}
diff --git a/app/Config/Images.php b/app/Config/Images.php
new file mode 100644
index 0000000..a416b8b
--- /dev/null
+++ b/app/Config/Images.php
@@ -0,0 +1,31 @@
+ \CodeIgniter\Images\Handlers\GDHandler::class,
+ 'imagick' => \CodeIgniter\Images\Handlers\ImageMagickHandler::class,
+ ];
+}
diff --git a/app/Config/Kint.php b/app/Config/Kint.php
new file mode 100644
index 0000000..09db83d
--- /dev/null
+++ b/app/Config/Kint.php
@@ -0,0 +1,62 @@
+ [
+
+ /*
+ * The log levels that this handler will handle.
+ */
+ 'handles' => [
+ 'critical',
+ 'alert',
+ 'emergency',
+ 'debug',
+ 'error',
+ 'info',
+ 'notice',
+ 'warning',
+ ],
+
+ /*
+ * The default filename extension for log files.
+ * An extension of 'php' allows for protecting the log files via basic
+ * scripting, when they are to be stored under a publicly accessible directory.
+ *
+ * Note: Leaving it blank will default to 'log'.
+ */
+ 'fileExtension' => '',
+
+ /*
+ * The file system permissions to be applied on newly created log files.
+ *
+ * IMPORTANT: This MUST be an integer (no quotes) and you MUST use octal
+ * integer notation (i.e. 0700, 0644, etc.)
+ */
+ 'filePermissions' => 0644,
+
+ /*
+ * Logging Directory Path
+ *
+ * By default, logs are written to WRITEPATH . 'logs/'
+ * Specify a different destination here, if desired.
+ */
+ 'path' => '',
+ ],
+
+ /**
+ * The ChromeLoggerHandler requires the use of the Chrome web browser
+ * and the ChromeLogger extension. Uncomment this block to use it.
+ */
+ // 'CodeIgniter\Log\Handlers\ChromeLoggerHandler' => [
+ // /*
+ // * The log levels that this handler will handle.
+ // */
+ // 'handles' => ['critical', 'alert', 'emergency', 'debug',
+ // 'error', 'info', 'notice', 'warning'],
+ // ]
+ ];
+}
diff --git a/app/Config/Migrations.php b/app/Config/Migrations.php
new file mode 100644
index 0000000..b83fe90
--- /dev/null
+++ b/app/Config/Migrations.php
@@ -0,0 +1,50 @@
+ php spark migrate:create
+ |
+ | Typical formats:
+ | YmdHis_
+ | Y-m-d-His_
+ | Y_m_d_His_
+ |
+ */
+ public $timestampFormat = 'Y-m-d-His_';
+
+}
diff --git a/app/Config/Mimes.php b/app/Config/Mimes.php
new file mode 100644
index 0000000..41014d4
--- /dev/null
+++ b/app/Config/Mimes.php
@@ -0,0 +1,530 @@
+ [
+ 'application/mac-binhex40',
+ 'application/mac-binhex',
+ 'application/x-binhex40',
+ 'application/x-mac-binhex40',
+ ],
+ 'cpt' => 'application/mac-compactpro',
+ 'csv' => [
+ 'text/csv',
+ 'text/x-comma-separated-values',
+ 'text/comma-separated-values',
+ 'application/octet-stream',
+ 'application/vnd.ms-excel',
+ 'application/x-csv',
+ 'text/x-csv',
+ 'application/csv',
+ 'application/excel',
+ 'application/vnd.msexcel',
+ 'text/plain',
+ ],
+ 'bin' => [
+ 'application/macbinary',
+ 'application/mac-binary',
+ 'application/octet-stream',
+ 'application/x-binary',
+ 'application/x-macbinary',
+ ],
+ 'dms' => 'application/octet-stream',
+ 'lha' => 'application/octet-stream',
+ 'lzh' => 'application/octet-stream',
+ 'exe' => [
+ 'application/octet-stream',
+ 'application/x-msdownload',
+ ],
+ 'class' => 'application/octet-stream',
+ 'psd' => [
+ 'application/x-photoshop',
+ 'image/vnd.adobe.photoshop',
+ ],
+ 'so' => 'application/octet-stream',
+ 'sea' => 'application/octet-stream',
+ 'dll' => 'application/octet-stream',
+ 'oda' => 'application/oda',
+ 'pdf' => [
+ 'application/pdf',
+ 'application/force-download',
+ 'application/x-download',
+ 'binary/octet-stream',
+ ],
+ 'ai' => [
+ 'application/pdf',
+ 'application/postscript',
+ ],
+ 'eps' => 'application/postscript',
+ 'ps' => 'application/postscript',
+ 'smi' => 'application/smil',
+ 'smil' => 'application/smil',
+ 'mif' => 'application/vnd.mif',
+ 'xls' => [
+ 'application/vnd.ms-excel',
+ 'application/msexcel',
+ 'application/x-msexcel',
+ 'application/x-ms-excel',
+ 'application/x-excel',
+ 'application/x-dos_ms_excel',
+ 'application/xls',
+ 'application/x-xls',
+ 'application/excel',
+ 'application/download',
+ 'application/vnd.ms-office',
+ 'application/msword',
+ ],
+ 'ppt' => [
+ 'application/vnd.ms-powerpoint',
+ 'application/powerpoint',
+ 'application/vnd.ms-office',
+ 'application/msword',
+ ],
+ 'pptx' => [
+ 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
+ 'application/x-zip',
+ 'application/zip',
+ ],
+ 'wbxml' => 'application/wbxml',
+ 'wmlc' => 'application/wmlc',
+ 'dcr' => 'application/x-director',
+ 'dir' => 'application/x-director',
+ 'dxr' => 'application/x-director',
+ 'dvi' => 'application/x-dvi',
+ 'gtar' => 'application/x-gtar',
+ 'gz' => 'application/x-gzip',
+ 'gzip' => 'application/x-gzip',
+ 'php' => [
+ 'application/x-php',
+ 'application/x-httpd-php',
+ 'application/php',
+ 'text/php',
+ 'text/x-php',
+ 'application/x-httpd-php-source',
+ ],
+ 'php4' => 'application/x-httpd-php',
+ 'php3' => 'application/x-httpd-php',
+ 'phtml' => 'application/x-httpd-php',
+ 'phps' => 'application/x-httpd-php-source',
+ 'js' => [
+ 'application/x-javascript',
+ 'text/plain',
+ ],
+ 'swf' => 'application/x-shockwave-flash',
+ 'sit' => 'application/x-stuffit',
+ 'tar' => 'application/x-tar',
+ 'tgz' => [
+ 'application/x-tar',
+ 'application/x-gzip-compressed',
+ ],
+ 'z' => 'application/x-compress',
+ 'xhtml' => 'application/xhtml+xml',
+ 'xht' => 'application/xhtml+xml',
+ 'zip' => [
+ 'application/x-zip',
+ 'application/zip',
+ 'application/x-zip-compressed',
+ 'application/s-compressed',
+ 'multipart/x-zip',
+ ],
+ 'rar' => [
+ 'application/x-rar',
+ 'application/rar',
+ 'application/x-rar-compressed',
+ ],
+ 'mid' => 'audio/midi',
+ 'midi' => 'audio/midi',
+ 'mpga' => 'audio/mpeg',
+ 'mp2' => 'audio/mpeg',
+ 'mp3' => [
+ 'audio/mpeg',
+ 'audio/mpg',
+ 'audio/mpeg3',
+ 'audio/mp3',
+ ],
+ 'aif' => [
+ 'audio/x-aiff',
+ 'audio/aiff',
+ ],
+ 'aiff' => [
+ 'audio/x-aiff',
+ 'audio/aiff',
+ ],
+ 'aifc' => 'audio/x-aiff',
+ 'ram' => 'audio/x-pn-realaudio',
+ 'rm' => 'audio/x-pn-realaudio',
+ 'rpm' => 'audio/x-pn-realaudio-plugin',
+ 'ra' => 'audio/x-realaudio',
+ 'rv' => 'video/vnd.rn-realvideo',
+ 'wav' => [
+ 'audio/x-wav',
+ 'audio/wave',
+ 'audio/wav',
+ ],
+ 'bmp' => [
+ 'image/bmp',
+ 'image/x-bmp',
+ 'image/x-bitmap',
+ 'image/x-xbitmap',
+ 'image/x-win-bitmap',
+ 'image/x-windows-bmp',
+ 'image/ms-bmp',
+ 'image/x-ms-bmp',
+ 'application/bmp',
+ 'application/x-bmp',
+ 'application/x-win-bitmap',
+ ],
+ 'gif' => 'image/gif',
+ 'jpg' => [
+ 'image/jpeg',
+ 'image/pjpeg',
+ ],
+ 'jpeg' => [
+ 'image/jpeg',
+ 'image/pjpeg',
+ ],
+ 'jpe' => [
+ 'image/jpeg',
+ 'image/pjpeg',
+ ],
+ 'jp2' => [
+ 'image/jp2',
+ 'video/mj2',
+ 'image/jpx',
+ 'image/jpm',
+ ],
+ 'j2k' => [
+ 'image/jp2',
+ 'video/mj2',
+ 'image/jpx',
+ 'image/jpm',
+ ],
+ 'jpf' => [
+ 'image/jp2',
+ 'video/mj2',
+ 'image/jpx',
+ 'image/jpm',
+ ],
+ 'jpg2' => [
+ 'image/jp2',
+ 'video/mj2',
+ 'image/jpx',
+ 'image/jpm',
+ ],
+ 'jpx' => [
+ 'image/jp2',
+ 'video/mj2',
+ 'image/jpx',
+ 'image/jpm',
+ ],
+ 'jpm' => [
+ 'image/jp2',
+ 'video/mj2',
+ 'image/jpx',
+ 'image/jpm',
+ ],
+ 'mj2' => [
+ 'image/jp2',
+ 'video/mj2',
+ 'image/jpx',
+ 'image/jpm',
+ ],
+ 'mjp2' => [
+ 'image/jp2',
+ 'video/mj2',
+ 'image/jpx',
+ 'image/jpm',
+ ],
+ 'png' => [
+ 'image/png',
+ 'image/x-png',
+ ],
+ 'tif' => 'image/tiff',
+ 'tiff' => 'image/tiff',
+ 'css' => [
+ 'text/css',
+ 'text/plain',
+ ],
+ 'html' => [
+ 'text/html',
+ 'text/plain',
+ ],
+ 'htm' => [
+ 'text/html',
+ 'text/plain',
+ ],
+ 'shtml' => [
+ 'text/html',
+ 'text/plain',
+ ],
+ 'txt' => 'text/plain',
+ 'text' => 'text/plain',
+ 'log' => [
+ 'text/plain',
+ 'text/x-log',
+ ],
+ 'rtx' => 'text/richtext',
+ 'rtf' => 'text/rtf',
+ 'xml' => [
+ 'application/xml',
+ 'text/xml',
+ 'text/plain',
+ ],
+ 'xsl' => [
+ 'application/xml',
+ 'text/xsl',
+ 'text/xml',
+ ],
+ 'mpeg' => 'video/mpeg',
+ 'mpg' => 'video/mpeg',
+ 'mpe' => 'video/mpeg',
+ 'qt' => 'video/quicktime',
+ 'mov' => 'video/quicktime',
+ 'avi' => [
+ 'video/x-msvideo',
+ 'video/msvideo',
+ 'video/avi',
+ 'application/x-troff-msvideo',
+ ],
+ 'movie' => 'video/x-sgi-movie',
+ 'doc' => [
+ 'application/msword',
+ 'application/vnd.ms-office',
+ ],
+ 'docx' => [
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+ 'application/zip',
+ 'application/msword',
+ 'application/x-zip',
+ ],
+ 'dot' => [
+ 'application/msword',
+ 'application/vnd.ms-office',
+ ],
+ 'dotx' => [
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+ 'application/zip',
+ 'application/msword',
+ ],
+ 'xlsx' => [
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ 'application/zip',
+ 'application/vnd.ms-excel',
+ 'application/msword',
+ 'application/x-zip',
+ ],
+ 'word' => [
+ 'application/msword',
+ 'application/octet-stream',
+ ],
+ 'xl' => 'application/excel',
+ 'eml' => 'message/rfc822',
+ 'json' => [
+ 'application/json',
+ 'text/json',
+ ],
+ 'pem' => [
+ 'application/x-x509-user-cert',
+ 'application/x-pem-file',
+ 'application/octet-stream',
+ ],
+ 'p10' => [
+ 'application/x-pkcs10',
+ 'application/pkcs10',
+ ],
+ 'p12' => 'application/x-pkcs12',
+ 'p7a' => 'application/x-pkcs7-signature',
+ 'p7c' => [
+ 'application/pkcs7-mime',
+ 'application/x-pkcs7-mime',
+ ],
+ 'p7m' => [
+ 'application/pkcs7-mime',
+ 'application/x-pkcs7-mime',
+ ],
+ 'p7r' => 'application/x-pkcs7-certreqresp',
+ 'p7s' => 'application/pkcs7-signature',
+ 'crt' => [
+ 'application/x-x509-ca-cert',
+ 'application/x-x509-user-cert',
+ 'application/pkix-cert',
+ ],
+ 'crl' => [
+ 'application/pkix-crl',
+ 'application/pkcs-crl',
+ ],
+ 'der' => 'application/x-x509-ca-cert',
+ 'kdb' => 'application/octet-stream',
+ 'pgp' => 'application/pgp',
+ 'gpg' => 'application/gpg-keys',
+ 'sst' => 'application/octet-stream',
+ 'csr' => 'application/octet-stream',
+ 'rsa' => 'application/x-pkcs7',
+ 'cer' => [
+ 'application/pkix-cert',
+ 'application/x-x509-ca-cert',
+ ],
+ '3g2' => 'video/3gpp2',
+ '3gp' => [
+ 'video/3gp',
+ 'video/3gpp',
+ ],
+ 'mp4' => 'video/mp4',
+ 'm4a' => 'audio/x-m4a',
+ 'f4v' => [
+ 'video/mp4',
+ 'video/x-f4v',
+ ],
+ 'flv' => 'video/x-flv',
+ 'webm' => 'video/webm',
+ 'aac' => 'audio/x-acc',
+ 'm4u' => 'application/vnd.mpegurl',
+ 'm3u' => 'text/plain',
+ 'xspf' => 'application/xspf+xml',
+ 'vlc' => 'application/videolan',
+ 'wmv' => [
+ 'video/x-ms-wmv',
+ 'video/x-ms-asf',
+ ],
+ 'au' => 'audio/x-au',
+ 'ac3' => 'audio/ac3',
+ 'flac' => 'audio/x-flac',
+ 'ogg' => [
+ 'audio/ogg',
+ 'video/ogg',
+ 'application/ogg',
+ ],
+ 'kmz' => [
+ 'application/vnd.google-earth.kmz',
+ 'application/zip',
+ 'application/x-zip',
+ ],
+ 'kml' => [
+ 'application/vnd.google-earth.kml+xml',
+ 'application/xml',
+ 'text/xml',
+ ],
+ 'ics' => 'text/calendar',
+ 'ical' => 'text/calendar',
+ 'zsh' => 'text/x-scriptzsh',
+ '7zip' => [
+ 'application/x-compressed',
+ 'application/x-zip-compressed',
+ 'application/zip',
+ 'multipart/x-zip',
+ ],
+ 'cdr' => [
+ 'application/cdr',
+ 'application/coreldraw',
+ 'application/x-cdr',
+ 'application/x-coreldraw',
+ 'image/cdr',
+ 'image/x-cdr',
+ 'zz-application/zz-winassoc-cdr',
+ ],
+ 'wma' => [
+ 'audio/x-ms-wma',
+ 'video/x-ms-asf',
+ ],
+ 'jar' => [
+ 'application/java-archive',
+ 'application/x-java-application',
+ 'application/x-jar',
+ 'application/x-compressed',
+ ],
+ 'svg' => [
+ 'image/svg+xml',
+ 'application/xml',
+ 'text/xml',
+ ],
+ 'vcf' => 'text/x-vcard',
+ 'srt' => [
+ 'text/srt',
+ 'text/plain',
+ ],
+ 'vtt' => [
+ 'text/vtt',
+ 'text/plain',
+ ],
+ 'ico' => [
+ 'image/x-icon',
+ 'image/x-ico',
+ 'image/vnd.microsoft.icon',
+ ],
+ ];
+
+ //--------------------------------------------------------------------
+
+ /**
+ * Attempts to determine the best mime type for the given file extension.
+ *
+ * @param string $extension
+ *
+ * @return string|null The mime type found, or none if unable to determine.
+ */
+ public static function guessTypeFromExtension(string $extension)
+ {
+ $extension = trim(strtolower($extension), '. ');
+
+ if (! array_key_exists($extension, static::$mimes))
+ {
+ return null;
+ }
+
+ return is_array(static::$mimes[$extension]) ? static::$mimes[$extension][0] : static::$mimes[$extension];
+ }
+
+ //--------------------------------------------------------------------
+
+ /**
+ * Attempts to determine the best file extension for a given mime type.
+ *
+ * @param string $type
+ * @param string $proposed_extension - default extension (in case there is more than one with the same mime type)
+ *
+ * @return string|null The extension determined, or null if unable to match.
+ */
+ public static function guessExtensionFromType(string $type, ?string $proposed_extension = null)
+ {
+ $type = trim(strtolower($type), '. ');
+
+ $proposed_extension = trim(strtolower($proposed_extension));
+
+ if (! is_null($proposed_extension) && array_key_exists($proposed_extension, static::$mimes) && in_array($type, is_string(static::$mimes[$proposed_extension]) ? [static::$mimes[$proposed_extension]] : static::$mimes[$proposed_extension]))
+ {
+ return $proposed_extension;
+ }
+
+ foreach (static::$mimes as $ext => $types)
+ {
+ if ((is_string($types) && $types === $type) || (is_array($types) && in_array($type, $types)))
+ {
+ return $ext;
+ }
+ }
+
+ return null;
+ }
+
+ //--------------------------------------------------------------------
+
+}
diff --git a/app/Config/Modules.php b/app/Config/Modules.php
new file mode 100644
index 0000000..40cb987
--- /dev/null
+++ b/app/Config/Modules.php
@@ -0,0 +1,45 @@
+ 'CodeIgniter\Pager\Views\default_full',
+ 'default_simple' => 'CodeIgniter\Pager\Views\default_simple',
+ 'default_head' => 'CodeIgniter\Pager\Views\default_head',
+ ];
+
+ /*
+ |--------------------------------------------------------------------------
+ | Items Per Page
+ |--------------------------------------------------------------------------
+ |
+ | The default number of results shown in a single page.
+ |
+ */
+ public $perPage = 20;
+}
diff --git a/app/Config/Paths.php b/app/Config/Paths.php
new file mode 100644
index 0000000..6251124
--- /dev/null
+++ b/app/Config/Paths.php
@@ -0,0 +1,77 @@
+setDefaultNamespace('App\Controllers');
+$routes->setDefaultController('Home');
+$routes->setDefaultMethod('index');
+$routes->setTranslateURIDashes(false);
+$routes->set404Override();
+$routes->setAutoRoute(true);
+
+/**
+ * --------------------------------------------------------------------
+ * Route Definitions
+ * --------------------------------------------------------------------
+ */
+
+// We get a performance increase by specifying the default
+// route since we don't have to scan directories.
+$routes->get('blog', 'Blog::index');
+$routes->get('blog/(:segment)', 'Blog::view/$1');
+$routes->get('(:any)', 'Pages::view/$1');
+
+/**
+ * --------------------------------------------------------------------
+ * Additional Routing
+ * --------------------------------------------------------------------
+ *
+ * There will often be times that you need additional routing and you
+ * need it to be able to override any defaults in this file. Environment
+ * based routes is one such time. require() additional route files here
+ * to make that happen.
+ *
+ * You will have access to the $routes object within that file without
+ * needing to reload it.
+ */
+if (file_exists(APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php'))
+{
+ require APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php';
+}
diff --git a/app/Config/Services.php b/app/Config/Services.php
new file mode 100644
index 0000000..c58da70
--- /dev/null
+++ b/app/Config/Services.php
@@ -0,0 +1,30 @@
+ 'Windows 10',
+ 'windows nt 6.3' => 'Windows 8.1',
+ 'windows nt 6.2' => 'Windows 8',
+ 'windows nt 6.1' => 'Windows 7',
+ 'windows nt 6.0' => 'Windows Vista',
+ 'windows nt 5.2' => 'Windows 2003',
+ 'windows nt 5.1' => 'Windows XP',
+ 'windows nt 5.0' => 'Windows 2000',
+ 'windows nt 4.0' => 'Windows NT 4.0',
+ 'winnt4.0' => 'Windows NT 4.0',
+ 'winnt 4.0' => 'Windows NT',
+ 'winnt' => 'Windows NT',
+ 'windows 98' => 'Windows 98',
+ 'win98' => 'Windows 98',
+ 'windows 95' => 'Windows 95',
+ 'win95' => 'Windows 95',
+ 'windows phone' => 'Windows Phone',
+ 'windows' => 'Unknown Windows OS',
+ 'android' => 'Android',
+ 'blackberry' => 'BlackBerry',
+ 'iphone' => 'iOS',
+ 'ipad' => 'iOS',
+ 'ipod' => 'iOS',
+ 'os x' => 'Mac OS X',
+ 'ppc mac' => 'Power PC Mac',
+ 'freebsd' => 'FreeBSD',
+ 'ppc' => 'Macintosh',
+ 'linux' => 'Linux',
+ 'debian' => 'Debian',
+ 'sunos' => 'Sun Solaris',
+ 'beos' => 'BeOS',
+ 'apachebench' => 'ApacheBench',
+ 'aix' => 'AIX',
+ 'irix' => 'Irix',
+ 'osf' => 'DEC OSF',
+ 'hp-ux' => 'HP-UX',
+ 'netbsd' => 'NetBSD',
+ 'bsdi' => 'BSDi',
+ 'openbsd' => 'OpenBSD',
+ 'gnu' => 'GNU/Linux',
+ 'unix' => 'Unknown Unix OS',
+ 'symbian' => 'Symbian OS',
+ ];
+
+ // The order of this array should NOT be changed. Many browsers return
+ // multiple browser types so we want to identify the sub-type first.
+ public $browsers = [
+ 'OPR' => 'Opera',
+ 'Flock' => 'Flock',
+ 'Edge' => 'Spartan',
+ 'Chrome' => 'Chrome',
+ // Opera 10+ always reports Opera/9.80 and appends Version/ to the user agent string
+ 'Opera.*?Version' => 'Opera',
+ 'Opera' => 'Opera',
+ 'MSIE' => 'Internet Explorer',
+ 'Internet Explorer' => 'Internet Explorer',
+ 'Trident.* rv' => 'Internet Explorer',
+ 'Shiira' => 'Shiira',
+ 'Firefox' => 'Firefox',
+ 'Chimera' => 'Chimera',
+ 'Phoenix' => 'Phoenix',
+ 'Firebird' => 'Firebird',
+ 'Camino' => 'Camino',
+ 'Netscape' => 'Netscape',
+ 'OmniWeb' => 'OmniWeb',
+ 'Safari' => 'Safari',
+ 'Mozilla' => 'Mozilla',
+ 'Konqueror' => 'Konqueror',
+ 'icab' => 'iCab',
+ 'Lynx' => 'Lynx',
+ 'Links' => 'Links',
+ 'hotjava' => 'HotJava',
+ 'amaya' => 'Amaya',
+ 'IBrowse' => 'IBrowse',
+ 'Maxthon' => 'Maxthon',
+ 'Ubuntu' => 'Ubuntu Web Browser',
+ 'Vivaldi' => 'Vivaldi',
+ ];
+
+ public $mobiles = [
+ // legacy array, old values commented out
+ 'mobileexplorer' => 'Mobile Explorer',
+ // 'openwave' => 'Open Wave',
+ // 'opera mini' => 'Opera Mini',
+ // 'operamini' => 'Opera Mini',
+ // 'elaine' => 'Palm',
+ 'palmsource' => 'Palm',
+ // 'digital paths' => 'Palm',
+ // 'avantgo' => 'Avantgo',
+ // 'xiino' => 'Xiino',
+ 'palmscape' => 'Palmscape',
+ // 'nokia' => 'Nokia',
+ // 'ericsson' => 'Ericsson',
+ // 'blackberry' => 'BlackBerry',
+ // 'motorola' => 'Motorola'
+
+ // Phones and Manufacturers
+ 'motorola' => 'Motorola',
+ 'nokia' => 'Nokia',
+ 'palm' => 'Palm',
+ 'iphone' => 'Apple iPhone',
+ 'ipad' => 'iPad',
+ 'ipod' => 'Apple iPod Touch',
+ 'sony' => 'Sony Ericsson',
+ 'ericsson' => 'Sony Ericsson',
+ 'blackberry' => 'BlackBerry',
+ 'cocoon' => 'O2 Cocoon',
+ 'blazer' => 'Treo',
+ 'lg' => 'LG',
+ 'amoi' => 'Amoi',
+ 'xda' => 'XDA',
+ 'mda' => 'MDA',
+ 'vario' => 'Vario',
+ 'htc' => 'HTC',
+ 'samsung' => 'Samsung',
+ 'sharp' => 'Sharp',
+ 'sie-' => 'Siemens',
+ 'alcatel' => 'Alcatel',
+ 'benq' => 'BenQ',
+ 'ipaq' => 'HP iPaq',
+ 'mot-' => 'Motorola',
+ 'playstation portable' => 'PlayStation Portable',
+ 'playstation 3' => 'PlayStation 3',
+ 'playstation vita' => 'PlayStation Vita',
+ 'hiptop' => 'Danger Hiptop',
+ 'nec-' => 'NEC',
+ 'panasonic' => 'Panasonic',
+ 'philips' => 'Philips',
+ 'sagem' => 'Sagem',
+ 'sanyo' => 'Sanyo',
+ 'spv' => 'SPV',
+ 'zte' => 'ZTE',
+ 'sendo' => 'Sendo',
+ 'nintendo dsi' => 'Nintendo DSi',
+ 'nintendo ds' => 'Nintendo DS',
+ 'nintendo 3ds' => 'Nintendo 3DS',
+ 'wii' => 'Nintendo Wii',
+ 'open web' => 'Open Web',
+ 'openweb' => 'OpenWeb',
+
+ // Operating Systems
+ 'android' => 'Android',
+ 'symbian' => 'Symbian',
+ 'SymbianOS' => 'SymbianOS',
+ 'elaine' => 'Palm',
+ 'series60' => 'Symbian S60',
+ 'windows ce' => 'Windows CE',
+
+ // Browsers
+ 'obigo' => 'Obigo',
+ 'netfront' => 'Netfront Browser',
+ 'openwave' => 'Openwave Browser',
+ 'mobilexplorer' => 'Mobile Explorer',
+ 'operamini' => 'Opera Mini',
+ 'opera mini' => 'Opera Mini',
+ 'opera mobi' => 'Opera Mobile',
+ 'fennec' => 'Firefox Mobile',
+
+ // Other
+ 'digital paths' => 'Digital Paths',
+ 'avantgo' => 'AvantGo',
+ 'xiino' => 'Xiino',
+ 'novarra' => 'Novarra Transcoder',
+ 'vodafone' => 'Vodafone',
+ 'docomo' => 'NTT DoCoMo',
+ 'o2' => 'O2',
+
+ // Fallback
+ 'mobile' => 'Generic Mobile',
+ 'wireless' => 'Generic Mobile',
+ 'j2me' => 'Generic Mobile',
+ 'midp' => 'Generic Mobile',
+ 'cldc' => 'Generic Mobile',
+ 'up.link' => 'Generic Mobile',
+ 'up.browser' => 'Generic Mobile',
+ 'smartphone' => 'Generic Mobile',
+ 'cellphone' => 'Generic Mobile',
+ ];
+
+ // There are hundreds of bots but these are the most common.
+ public $robots = [
+ 'googlebot' => 'Googlebot',
+ 'msnbot' => 'MSNBot',
+ 'baiduspider' => 'Baiduspider',
+ 'bingbot' => 'Bing',
+ 'slurp' => 'Inktomi Slurp',
+ 'yahoo' => 'Yahoo',
+ 'ask jeeves' => 'Ask Jeeves',
+ 'fastcrawler' => 'FastCrawler',
+ 'infoseek' => 'InfoSeek Robot 1.0',
+ 'lycos' => 'Lycos',
+ 'yandex' => 'YandexBot',
+ 'mediapartners-google' => 'MediaPartners Google',
+ 'CRAZYWEBCRAWLER' => 'Crazy Webcrawler',
+ 'adsbot-google' => 'AdsBot Google',
+ 'feedfetcher-google' => 'Feedfetcher Google',
+ 'curious george' => 'Curious George',
+ 'ia_archiver' => 'Alexa Crawler',
+ 'MJ12bot' => 'Majestic-12',
+ 'Uptimebot' => 'Uptimebot',
+ ];
+}
diff --git a/app/Config/Validation.php b/app/Config/Validation.php
new file mode 100644
index 0000000..97f08c7
--- /dev/null
+++ b/app/Config/Validation.php
@@ -0,0 +1,36 @@
+ 'CodeIgniter\Validation\Views\list',
+ 'single' => 'CodeIgniter\Validation\Views\single',
+ ];
+
+ //--------------------------------------------------------------------
+ // Rules
+ //--------------------------------------------------------------------
+}
diff --git a/app/Config/View.php b/app/Config/View.php
new file mode 100644
index 0000000..f66b253
--- /dev/null
+++ b/app/Config/View.php
@@ -0,0 +1,34 @@
+session = \Config\Services::session();
+ }
+
+}
diff --git a/app/Controllers/Blog.php b/app/Controllers/Blog.php
new file mode 100644
index 0000000..b3fa870
--- /dev/null
+++ b/app/Controllers/Blog.php
@@ -0,0 +1,44 @@
+ $model->orderBy('id', 'DESC')->paginate(5),
+ 'pager' => $model->pager,
+ 'title' => 'Blog',
+ ];
+
+ echo view('common/header', $data);
+ echo view('blog/overview', $data);
+ echo view('common/footer', $data);
+
+ }
+
+ public function view($slug = null)
+ {
+ helper('html');
+ $model = new BlogModel();
+
+ $data['blog'] = $model->getBlog($slug);
+
+ if (empty($data['blog']))
+ {
+ throw new \CodeIgniter\Exceptions\PageNotFoundException('Cannot find the blog post: '. $slug);
+ }
+
+ $data['data'] = $data['blog']['title'];
+
+ echo view('common/header', $data);
+ echo view('blog/view', $data);
+ echo view('common/footer', $data);
+ }
+}
\ No newline at end of file
diff --git a/app/Controllers/Pages.php b/app/Controllers/Pages.php
new file mode 100644
index 0000000..7ffac11
--- /dev/null
+++ b/app/Controllers/Pages.php
@@ -0,0 +1,38 @@
+getPage('home');
+ }else{
+ $data['page'] = $model->getPage($slug);
+ }
+
+ if (empty($data['page']))
+ {
+ throw new \CodeIgniter\Exceptions\PageNotFoundException('Cannot find the page: '. $slug);
+ }
+
+ $data['data'] = $data['page']['name'];
+ $viewtype = $data['page']['contain'];
+
+ echo view('common/header', $data);
+ if ($viewtype == 1) {
+ echo view('pages/view1', $data);
+ }else{
+ echo view('pages/view2', $data);
+ }
+ echo view('common/footer', $data);
+ }
+
+}
diff --git a/app/Database/Migrations/.gitkeep b/app/Database/Migrations/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/app/Database/Seeds/.gitkeep b/app/Database/Seeds/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/app/Filters/.gitkeep b/app/Filters/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/app/Helpers/.gitkeep b/app/Helpers/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/app/Language/.gitkeep b/app/Language/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/app/Language/en/Validation.php b/app/Language/en/Validation.php
new file mode 100644
index 0000000..54d1e7a
--- /dev/null
+++ b/app/Language/en/Validation.php
@@ -0,0 +1,4 @@
+orderBy('id', 'DESC')
+ ->findAll();
+ }
+
+ return $this->asArray()
+ ->where(['slug' => $slug])
+ ->first();
+ }
+
+ public function getBlogs($limit = false, $offset = 0)
+ {
+ return $this->orderBy('id', 'DESC')
+ ->findAll($limit, $offset);
+ }
+
+}
\ No newline at end of file
diff --git a/app/Models/PagesModel.php b/app/Models/PagesModel.php
new file mode 100644
index 0000000..da287e3
--- /dev/null
+++ b/app/Models/PagesModel.php
@@ -0,0 +1,21 @@
+findAll();
+ }
+
+ return $this->asArray()
+ ->where(['slug' => $slug])
+ ->first();
+ }
+
+}
\ No newline at end of file
diff --git a/app/ThirdParty/.gitkeep b/app/ThirdParty/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/app/Views/blog/overview.php b/app/Views/blog/overview.php
new file mode 100644
index 0000000..8fab034
--- /dev/null
+++ b/app/Views/blog/overview.php
@@ -0,0 +1,28 @@
+
+
+
= esc($title); ?>
+
+
+
+
+
+
= esc($blog_item['title']); ?> = esc($blog_item['published']); ?>
+
+
+
+
+
View article
+
+
+
+ = $pager->simpleLinks() ?>
+
+
+
+
No News
+
+
Unable to find any news for you.
+
+
+
+
\ No newline at end of file
diff --git a/app/Views/blog/view.php b/app/Views/blog/view.php
new file mode 100644
index 0000000..70e65d8
--- /dev/null
+++ b/app/Views/blog/view.php
@@ -0,0 +1,8 @@
+
+
+
= esc($blog['title']); ?>
+= esc($blog['body'], 'raw'); ?>
+
+
Back To Blog
+
+
\ No newline at end of file
diff --git a/app/Views/common/footer.php b/app/Views/common/footer.php
new file mode 100644
index 0000000..6a2b0f8
--- /dev/null
+++ b/app/Views/common/footer.php
@@ -0,0 +1,15 @@
+